Quake 2 Source Code Released Under The GPL
Masem (and many others) writes: "The source code for Quake 2 is now available until the GPL license. The .plan file for John Carmack has the details." The Id Software site is of course slammed with demand for the code. Hopefully other mirrors will be available.
You have to hand to Carmack to be a real good guy.
Sure he cant show you everything he's doing right now,
but by releasing, under GPL, the source code,
I think he letting people really learn how a true master
programs.
This is just a Good Thing
Sigs are dangerous coy things
This, among many other reasons, is why I admire John Carmack.
Some may grumble that he only releases old products, no longer commercially valuable, in this fashion. To that I say "shush!". I for one look forward to browsing through the code of such a lovely 3D engine. The learning opportunity alone is grand, to say nothing of what will be done with the code now that it's out there.
Thank you, John.
id Software, as always, is being responsible and generous to its fans. Instead of keeping its source code under wraps until the game is released to the public domain by copyright law some time in the year NEVER, id Software has decided to release the source code for a game that it is no longer using so that the fans may tinker with it and learn from it.
If any of the people from id Software are reading this (which there is a chance of): Thank you. You rock.
I admit, I'm not a good programmer. I am a code monkey who is working to be a good programmer. One of the ways you become one is looking at good code. I have peaked at both Doom and Quake to just see what goes on in the head of one of the best programmers in the world. In doing so I have picked a few pointers without even realizing it until I did it. So thanks Mr. Carmack, you have given me a Christmas present, the gift of better programming.
Go to my box at linuxhost.ccand you can download the quake2.zip file containing the source.
I got it before the slashdot story hit...
You can find the code in the quakeforge cvs:
:pserver:anonymous@cvs.quakeforge.net:/cvsroot/qua ke login (just hit enter)
:pserver:anonymous@cvs.quakeforge.net:/cvsroot/qua ke co quake2
cvs -d
cvs -d
If you don't already have Edonkey its got linux clients as well. :)
An Education is the Font of All Liberty
ID software are totally correct about the cheating aspects of releasing the code.
... try a lan party instead of the internet next time).
There will always be people who try to cheat, and some who succeed. Releasing the source makes it significantly easier to make a cheating client.
However,
i) The benefits of having the source to an extremely successful games outweighs the disadvantages of increased cheating (unless you're a victim of the cheating
ii) By seeing what the cheats come up with, perhaps the next generation of client-server games will have better cheat avoidance in the server and/or the protocol - we can learn from past mistakes or oversights.
Mmmmmmm
heh, actually I think you still do. Doesn't ID just open the source code to the 3D engines but keep the levels only available by buying the game. I thought that was the deal.
FiGZ.COM - A waste of perfectly good web space
While everyone's busy downloading the Quake II source code, maybe I can mange to download kernel 2.4.17!
Someone needs a copy of Lint
gamex86.dll - 0 error(s), 332 warning(s)
Flamebait maybe - but if a build of my project generated 332 warnings I'd be fired.
Mmmmmmm
Ever since the Quake1 source release two years ago, a lot of intresting (and a lot of unintresting mind you) ports of the Quake engine have shown up. www.quakesrc.org reports on these new engines, as well as hosting some projects and a large set of tutorials. If anyone is intrested in coding off a quake-based engine, this is a good place to start. No Quake2 content yet, but give it a few days... www.open-quake.com is also a good site reporting on news in the Quake engine scene. End plug :)
Don't get me wrong I appreciate this Christmas gift from ID as much as the next nerd but I doubt this will have much of an effect on Open Source gaming as a whole.... But it's cool nonetheless :)
Thank you IdSoftware.
Your pizza just the way you ought to have it.
but crappy multiplayer.
Huh? Quake more than any other game defined FPS multiplayer as we know it today. Yeah it only came with strait DM out of the box but that on it's own was a big deal back then. And then came the mods. CTF? Team Fortress? Rocket Arena? all created during the golden age of Quake mods. Quake is still considered by many to be the finest multiplayer FPS ever. The fact that you make such a comment makes me doubt you ever seriously played Quake online.
I think that if he really should deserve reverance, he should release the source *as it happens*.
You haven't had your labotamy re-done lately, right? You imply that someone that is trying to make a $ should release everything they type for free?
When was the last time M$ released the source for M$ Golf? Oh, wait, they never did. OK, well, when was the last time SquareSoft released the souse for the FF seires. Oh wait, they never did. Hmmm...
Seems like Mr. Carmack is onto something...
Wake up, man.
I'm not a prophet or a stone-age man,
I'm just a mortal with potential of a super man.
First off, Carmack seems to release the source code after two other complete games come out. Q1 Source came out after Q3A hit the shelves, now Q2 after Return to Castle Wolfenstein.
.plan update, that when you release the full code, people *will* find the ways they can use to cheat. They can modify the source for themselves, recompile the engine, and have it work for them. Therefore, the rampant cheats would cause multiplayer to go to pot upon release.
But don't forget, that if they released the source code when the game was being created, not only couldn't they make money on the license, but also other companies would be able to compete on the same level without paying a price for it.
Carmack gets paid for his programming skills, but you're arguing that he should get paid to program *everyone's* game, including his competitor, from one company. All the other companies could release their own Quake 3 Arena clones and make money, without even bothering to do anything with the programming.
And don't forget, that when Q3A sold for $40+, id didn't get all $40. It goes from id, to Activision, to the distributor, sometimes to the wholesaler or direct to the big name store, and then possibly to a smaller store. By then, after the expenses of doing the packaging and the duplication, you're talking only a couple dollars profit per game direct to id... Split that among their, what, twelve workers now in the proper ratios, and that's not that much. Less than a dollar each, probably.
Even multiplied by a few million, that's not that much money to pay those huge salaries. How do they make it up? Licensing.
With licensing, there is *no* middleman. It's a contract between id and the company licensing the engine. In the end, it's probably a larger chunk of change than a first month's release returns.
And secondly, you have to remember, as with Carmack's
No, what Carmack does is *more* than enough, and these are the factors not only he, but id and other people who can understand the business, realize, and have to protect not only themselves, but their consumers, from these problems.
Human nature is the same everywhere; the modes only are different. -- Earl of Chesterfield
Dude, if you lived next door to me and were playing Quake with the sound up, blasting through a subwoofer at 3AM, it wouldn't just be the game scaring the hell out of you...
Code, Hardware, stuff like that.
I don't think the GPL would require you to share media that are associated with the engine, since the GPL only talks about source code and linking. So, if you want to create a commercial game that people can't distribute freely based on the Quake2 engine, you can probably even do that.
But I can't say that because Quake II isn't that old yet.
Instead I'll just say a big, "Thank you," to ID. It's darn, darn cool to open the source on this.
This code looks very different from what CS courses teach you or expensive OOP consultants recommend. It's kind of reminiscent of the traditional UNIX code: very concrete and just tries to get the job done.
http://matt.fluxcapacitor.net/quake2.zip
Looking at quake2/changes.txt it looks like the version of Quake2 that was GPL'd was 3.16. But id has released binaries of version 3.20.
Anyone know if there are major differences between these versions?
Any chance somebody will set up a Q2 community for improving/modifying the code? I'd really like to monitor what happens here. I can see some really cool potential here.
My personal interest in this project is that some independent game makers make some free, yet good quality games for Dreamcast. Wouldn't that be cool? The DC is $50, and can play burned CD's, which makes it an ideal candidate for this type of thing.
In any case, if the GPL licensing of Q2 sparks some quality spin-offs, this could be a welcome evolution of cross-platform games.
"Derp de derp."
Actually, I'm kinda surprised that it took this long. Mr. Carmack had mentioned a while ago (like, 8-12 months) that the only thing holding up the Q2 source release was that they were waiting for the final two Q2-engine-license games to ship, since apparently they were legally embargoed from GPLing the code until that happened. Those two games were, natch, Anachronox and Daikatana (cue inevitable snickering here). Anox shipped several months ago, and, uh, we all know what happened to Daikatana.
Hopefully the fact that it took him so long to get around to packaging up the Q2 source for GPL release means that they've been burning the midnight oil on DOOM 3, and we'll get to see it soon.
News for Nerds. Stuff that Matters? Like hell.
this should definatly help mods such as Reaction Quake3, which are ports of popular Quake2 mods such as Action Quake2. In order for them to be good ports, they had to recreate q2 physics. This was nearly impossible until now with the source code :).
Of course, there are still games with quake2 and quake1 code (especially halflife, which is a quake1-based game with quake2 features). I wonder how id's licensing plans with companies like Valve (who made halflife/counterstrike), interfere with the opening of source code.
THIS is how a company makes money producing Free Software. Don't, at least not at the beginning. I'm sure RMS would have my head for this, but it's the truth.
;-)
Consumer-oriented retail software and GPL code are simply incompatble as a business model. If Id released the source for RtCW today, they wouldn't make a penny on their retail sales. Somone would get the source code, edit one line, stick it on an FTP server, and make it available to the world free (as in beer), and most people would get it from there. There would be no legal reason to stop them, and every financial reason for them to do so. That goes for any consumer-targeted application, game, utility, or whatever. You just can't make money with consumers that way. (Consumers aren't interested in "selling support". If they need you to support it, then it was a bad program to start with in their minds.)
Now here comes Id. They develop excellent code, and sell it and license it commercially like any other company. Then, once they've made their money back with a nice comfortable profit and moved on to bigger and better things, they open source the code. They're not doing anything more with it, so why should they prevent others from enjoying it? It's the original idea behind copyright in the first place! Author(s) get limited monopoly for a limited time so that they can make a living producing content, then it goes to the public domain. (OK, that would be more BSD license than GPL, that's a minor issue.)
For the FSF and its supporters, economics aren't the issue, it's all principle and philosophy and idealism. That's all well and good, I agree with their ideals for the most part. But idealism must be tempered by reality to produce pragmatism sometimes. The Id model is the best way I've seen to make money in the consumer space while still supporting Free Software / Open Source (take your pick).
Unless someone else has a better suggestion on how to make money in the consumer space with FS/OS code (remember, after the cash register the consumer doesn't want to ever have to talk to you), we should all bug companies to follow Id's excellent example. If they balk at the "lost revenue", just show them Carmak's twin Lamborginis.
--GrouchoMarx
Card-carrying member of the EFF, FSF, and ACLU. Are you?
Here's some of the changelog entries from 3.19 and 3.20 that would be kinda important to compatibility and general goodness. Hmmm... and even if Zoid worked on Quake after 3.16, wouldn't that be considered work-for-hire, and thus the ownership of the code revert back to id software?
... flowing transparent textures now works. [in software renderer]
- "Water surfing" that was present in 3.17 has been fixed (holding jump while
on the surface of water let you swim at full speed).
- Environment maps (env) are now autodownloaded (if allow_download_maps is set).
- Spectator support added.
- New server cvar: sv_airaccelerate. This controls the optional air
acceleration facility. [esp. if you want QuakeWorld physics!]
- Fixed the long standing Quake2 bug of where you would occasionally spawn
or teleport and find yourself either looking straight at the ceiling or
down at the floor.
-
- Fixed a case where a person joining a server could be invisible
- Linux: Complete rewrite of the OpenGL library handling. [!!]
- Railgun shots now go through gibs as well as other players.
Most of them should be fixable by various people, but some might take a while (like the OpenGL rewriting). Also, I'm guessing that most of those bugs would be relatively obscure and could be tricky to fix (Carmack obviously didn't get it correct the first time, and he _wrote_ the damn thing!).
Well, there's always the option of releasing the source code, but not the game media. Kind of like how you can always download the doom executable for free, but without the WAD files, no luck playing the whole game. This would work with many companies, but unforunately not id - a huge percentage of their income comes via engine liscensing. Of course, by formulating a decent liscense (I doubt the GPL would work for this), they could release the source code and prevent people from profiting off of it. This could conceivably make id a good deal more money as companies and individuals could experiment with using/modifying the code on their own before deciding to create a full product with it and paying id. A problem still pops up with this model though, as mod authors could instead make standalone games, claim them as non-profit, and id would then lose out on the money they get from mods' requirement of having the original game. It's definitely a tricky issue, but it's not impossible to release up-to-date code and still profit greatly from your efforts.
The zip includes the platform specific files for irix, linux, solaris, unix, windows, and even rhapsody!@ Yet there's not a glimmer of MacOS code, either for X or classic.
I'm guessing this is because ID software didn't port it to Mac, rather Logicware did the classic port and OmniGroup did the OS X port. However, this doesn't explain why the code for so many other OS' is included... Did ID Software actually port Q2 to rhapsody, for example?
Oh well, it would be really nice if Logicware or (more probably) the OmniGroup could donate their mac specific code. Do either of the above two companies actually own their Mac specific source code? Is this why ID Software is hesitant to include it in this package?
Oh well, I have no idea, I'm just thinking out loud.
Here's a patch to get the source to compile under linux -- Carmack forgot to use cl_newfx.c!
m ak efile.diff
http://members.optushome.com.au/davidsymonds/q2
I wish more game developers would adopt his model.
Sure the hardcore open source fanatics will give a thumbs down to the fact that Carmack wants to make money, but then again, they are fanatics.
I also love how Carmack does it during Christmas... kind of puts a tear in your eye
Well, I have bought every game that Carmack has made since Wolf3D... and I am going to buy the new Doom game too. Its important to support the greats.
I agree. Its sick how some people actually want to destroy or harm the good things in this world. Why steal from someone who gives far more than his share?
Carmack deserves praise right now, and the fact that a few trolls need to feel their moment of power by doing something stupid... well, kind of ruins the Christmas spirit that Carmack started by releasing the source code in the first place.
Nah, I am not surprised. Carmack has always been a bit of a romantic (in a software engineer sort of way). He seems to like releasing his source code during the Christmas season. Not only that, I have heard that Carmack actually physically goes to a toy store and buys lots of toys for poor kids. I am telling you guys, Carmack is a romantic.
Well, I guess if he really wanted to get weird with it, he could release it on Dec 25th... but this way the code can be mirrored so that by the 25th, every boy and girl can have their own copy of the source code.
http://www.google.com/search?q=%22Quake+2%22+TC
If you really wanted to be a good person, you could return the favor to Carmack by going out and buying a(nother) copy of Quake2. Its only right to return the favor.
All of those other guys copy Carmack, make clones of his games... so why don't all of those other guys open source their games like Carmack does? Really, it would be a good thing for the game industry... let the next generation learn from the last.
I really am. Why? Look at a lot of older companies like Sierra who have games they'll never make another penny off of. Why not release it into public domain or GPL it? No motive. However, when you look at truly great people like John Carmack who've more than given back to his community, it makes me feel good inside. Like maybe, to him, it's not all about the money.
I wish more companies and programmers had such insight.
You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
Dude, what are you complaining about?
Looking at a static piece of source code can tell you only so much about a network protocol. You actually have to watch the thing working before you start to see how things interrelate (especially if the commenting was poor). This is why the TCP/IP Illustrated series of books continue to be best-sellers among the networking crowd, even though they've been able to look at the *BSD IP stack source code for years.
Because you've taken the trouble to do dumps and in-depth analysis of a live connection, you are way ahead of the game. The Q2 networking code will be cake for you to take apart and modify.
No quest for knowledge is ever wasted.
Schwab
Editor, A1-AAA AmeriCaptions
I have been waiting for this for a very, very long time. I purchased Q2 for Windows many moons ago, and it is one of the games I miss under Linux. Guess it is time to compile it now.
BTW - does anybody know whether _everything_ works, like sound, joystick, mouse, etc - or is it just the graphics engine and game code (ie, playable with keyboard and pretty gfx, but no sound or joystick support)? Just curious how well this thing really runs...
Hmm - now I am wondering if I should try basing my future VR system on this code...
Reason is the Path to God - Anon
3d realms and epic megagames are weenies
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
To sweepingly state that you are greater than your teacher in any class is nearly always a mistake. However, to state that all things must be learned in school is equally as much a fallacy. I don't write graphics engines, but my coding skills are far improved from when I began. To date, my only CS class has been AP Hypercard(oxymoron?) in highschool.
I've learned to program somewhat proficiently in C/C++/ASP/PHP3&4(a little) and Perl all without taking a single class. It isn't to say that classes don't have their place; only that they aren't required(but helpful).
You can't legislate goodness. Let each to his own destiny, by will of his freely made choices.
Yes, except in this case, nothing odd is happening, and it's not handling an error, it just skips over a single block of code that could be enclosed in a single "else" block. :-)
/. all day and surpass id... :-)
Not to show any disrespect to John - I'm a game / rendering programmer myself, and I would by lying if I said I wasn't envious of his skill and drive. I just thought it was funny that the first thing I stumbled across was a classic example of "for the love of God, never do this!"
Some day, some day I will stop reading
sig fault
http://www.siliconinc.net/quake2.zip.
Enjoy, and happy fragging.
Insert witty
LoadLibrary("ref_softx.so") failed: can't open /etc/quake2.conf (required for location of ref libraries)
It can't find /etc/quake2.conf, which tells it where to find the renderer modules. Stick a single line in that file (a path to the *.so files), and make it world readable.
No offense, but I didn't enjoy Quake, too dark and dizzy, and therefore feel zero urge to buy it. I have no pirated games if you're implying that. Is it bad to want to play with this Quake2 and free data files?
If you need text styles to communicate then you don't have a message.
Perhaps there used to be some other code there in a previous version that needed to be skipped over.
By the way, the standard POSIX way of handling an interrupted system call is like this:
again:
status = select(....);
if (errno == EINTR)
goto again;
Sometimes you don't want to screw around with a while loop.
Another example is when searching for something:
while (x) {
for (i=0; iA; i++)
for (j=0; jB; j++)
for (k=0; kC; k++)
if (something[i][j][k] == somethingelse)
goto found_one;
found_one:
}
The other way of doing it that I know is making an "int found=0;", then adding "&& (!found)" to each of those for loops and replacing the "goto" with a "found=1". But that's a pain in the ass. It's too much typing.
Cryptnotic
My other first post is car post.
Doh. My stupid less than signs didn't work.
Oh well, you get the idea.
Cryptnotic
My other first post is car post.
when was the last time SquareSoft released the souse for the FF seires.
;P
Actually, I think it would be hellishly cool if Square released the FF6 engine - it's outdated enough to be useless to their competitors, but cool enough to still have a VERY wide fanbase (plus, releasing under the GPL would make sure that anyone making improvements would have to contribute back - a good thing, IMHO at least). I could see fan-based programming for the SNES emulators skyrocket if they did.
Of course, right now they wouldn't do it, as the GBA would most probably run the FF6 engine just fine -- and they probably have plans to make a couple games for it...
...then again, that's a lot of probably's, and I'm only on my first cup of coffee
Quake 3 was a big victim of piracy
I doubt that very much. Quake 3 uses the same online authentication system used by Half-Life; each cd comes with a key and only one copy of that key can play online at any one time. That is a very powerful incentive NOT to "share" the game and your key with others that you just spent $50 on (prolly under $20 now).
Dear Lord, how will I be able to startup ComanderKeenForge.net without the source code to Comander Keen!?!?!?!?! It's just not fair to leave us hangin' like this!!! :)
Oooh, mod parent up! There's a programmer that has no strange religious distaste for the goto statement, one who realizes that it has its uses!
/* ... */
/* ... */
/* ... */
/* error handler */
I'd like to add one: error processing.
void func(void)
{
if (func1())
goto err;
if (func2())
goto err;
if (func3())
goto err;
return;
err:
}
Washington, DC: It's like Hollywood for ugly people.
I have to admit that, early serious training being in Pascal I'm no fan of GOTOs ;-) but my instinct would go for three nested do whiles, each with two stopping conditions. I'll only use a FOR loop if I'm certain I want it to execute that particular number of times, anything else always feels a little icky too me :-)
.. next to do while out of curiosity. Speed went through the roof.
One thing, though - speed. I remember once getting frustrated with a program's slow performance, so I swapped a critical loop from for
Now, I can't believe that's globally applicable but it was curious and I'd be interested to know if anyone else had seen that sort of test.
Greg
(Inside a nuclear plant)
Aaaarrrggh! Run! The canary has mutated!
I wonder, though, whether ID find it much easier to pursue this strategy because they're in the game market? Games (and *especially* FPS/Multiplayer games) are a market segment where most buyers want the newest engine, best graphics, etc. Could a company that made Wordprocessors or Spreadsheets pursue this model as easily and still make profit like ID? I'm not saying it would be impossible, but it seems to me that many users would have a much higher tolerance for using a free, three-year-old version of their wordprocessor than using a pricely new version (assuming the company didn't do nasty things like change the .doc format, etc). This isn't true of games. So while I like this "Develop-Sell-Wait-GPL" approach, I'd bet that the "Wait" time of a company like ID is amongst the shortest of any software market segment.
"Hey, we're not making much off the Quake II engine anymore now that we've shifted everything to Quake III. Should we mothball it, maybe even lose the source so no one could even compile it anymore, just like every other game company does with their code?"
"Hell No! That doesn't match my master plan!"
"Master plan?"
"You must be new here. I want all programmers to either learn from my masterful code, or bow before me acknowledging my skill."
"How you gonna do that?"
"Same way Linus did. GPL it! My code shall never die! I will forever be known as the father of thousands of computer games. My code shall outlive the very civilization in which we live. Through my GPLed code, I shall achieve immortality! Mwhahahahahaha."
"Yeah. OK. I'll put together a tarball and drop it on the FTP server."
To himself: "Besides, if I give my brother and sister coders enough samples of my work, sooner or later they'll design the tools necessary fro me to move off of Windows once and for all, and do all my coding under Linux. They'll have to, just so they can continue to hack and improve my own work. Soon, very soon I'll be able to launch Afterstep and compile to Win32 with the click of a button."
(Dramatic Pause)
"And then I'll never have to use Windows again! Mwhahahahahahahahahaha!"
"Live Free or Die." Don't like it? Then keep out of the USA
People don't buy game engines. Companies do buy game engines. Derivative games don't sell, you say? Well, think again, guess what for example Valve used for Half-Life? That's right, Quake, and they paid for it, probably quite a bit of money. And it's certainly not the only successfull non-id game using ID's engine, do you think they would've paid for that engine if it was right there under the GPL right after the Quake went out of the press?
So you really think, ID should just give away it's code for their competitors to use for free?
What are you guys smoking these days?
Heh, a redesign of the idsoftware.com webpage is in progress, and we should have a brand-spanking new page up in the not so distant future (...hopefully...)
-Xian
If Id released the source for RtCW today, they wouldn't make a penny on their retail sales. Somone would get the source code, edit one line, stick it on an FTP server, and make it available to the world free (as in beer), and most people would get it from there. There would be no legal reason to stop them...
Of course, RtCW is pretty worthless without levels to play through. The engine without levels is of no value to your average gamer. Just because you open source your engine doesn't mean you need to open source your levels, models, textures, sounds, and other data.
There are risks of making your engine open source (As you point out, Id makes money selling its engine to other developers, open sourcing their current engine would kill this model. Also, competing companies could take the engine, saving software development time and focus on developing levels, effectively allowing your competition to leach your work.). But the threat that no one would buy your game isn't there. I buy a game for well crafted, fun levels. The engine is just the foundation that those levels are built on.
I definately agree I'd love to see out of date source made available. I have a number of games I own that I can't play because they're too old (MS-DOS based). I'm perfectly willing to take a stab at updating them, but it's practically impossible to do without the source. There is a risk that this would hurt sales (as I spent time playing old games instead of new games), but I suspect the drop is sales would be minimal (I like shiny new games too much to just stop buying them).
Search 2010 Gen Con events
That is assuming that nothing takes places between each call to func1(), func2() and func3(). If you have to execute something between them, then putting it in the boolean test makes things VERY ugly.
Thanks for the kind comments, it helps me brace a bit for some of the really vile hate mail that is already starting to come in from the people worried about cheating.
Bill Heineman is preparing the mac source code for Q2 for a release.
We will see about getting the 3.21 changes we missed into an updated release.
I am also happy to say that another old game's code will be released under the GPL soon. We can always hope that it becomes a trend...
John Carmack
It's GPLed, so do what you like with the source, so long as you distribute the source and any changes you make yourself. What you CAN'T distribute is art, models, music, or anything that actually makes 'quake 2 the GAME' as opposed to 'the quake 2 ENGINE.'
Vintage computer games and RPG books available. Email me if you're interested.
Ahem and buy Q3 for linux.
if everyone that ran Linux bought Q3, we would have seen Id happily release more for linux instead of calling it a failure.
Do not look at laser with remaining good eye.
In C, the following for statement:
for (A; B; C) {
[body];
}
is exactly equivalent to:
A;
while (B) {
[body];
C;
}
I think Pascal does things a little differently, which is why you might have noticed a speed difference.
Cryptnotic
My other first post is car post.
"Screw around with a while loop?" What is so screwy about it? What is so hard to understand about this:
...
for(;;) {
status = select(...);
if(state != EINTR)
break;
}
Don't bitch about branch optimization. That select() call is trapping into kernel mode. Who cares about a branch in the face of that?
Your second situation makes more sense. I usually never have loops nested that deep, though. The only time I really use goto is for progressive unrolling after error:
mem1 = malloc(10);
if(!mem1) goto fail_mem1;
mem2 = malloc(10);
if(!mem2) goto fail_mem2;
fail_mem2:
free(mem1);
fail_mem1:
return -1;
Of course these unrolling sequences can be much longer and more complex. It's really the best you can do in a language that has no exceptions. In C++ you would use exceptions and destructors for this.
Since halflife is based off of the Q2 engine, and Counterstrike is a cool free mod for halflife, I wonder how long until we can have a totally free version of counterstrike not requiring the purchase of halflife..
Now someone can finally make a version of the sims that allows you to kill your neighbors easily and quickly and that has netplay