Jedi Knight 2 And 3 Source Code Released
rockpapershotgun.com
rockpapershotgun.com
void FuckingWellSetTheDocumentNameAndDontBloodyIgnoreMeYouCunt(LPCSTR psDocName)
{
if (gpLastOpenedModViewDoc)
{ // make absolutely fucking sure this bastard does as it's told... //
gpLastOpenedModViewDoc->SetPathName(psDocName,false);
gpLastOpenedModViewDoc->SetTitle (psDocName);
}
}
My heart goes out to whatever programmer had to meet that deadline. There are a lot more gems in the source tree if you just run: egrep -R -i "fuck" * http://sourceforge.net/projects/vlc
http://sourceforge.net/projects/sevenzip/
http://sourceforge.net/projects/emule/
http://sourceforge.net/projects/filezilla/
http://sourceforge.net/projects/npppluginmgr/
http://sourceforge.net/projects/mingw/
http://sourceforge.net/projects/azureus/
http://sourceforge.net/projects/fceultra/ (Shameless plug)
Just to name a few. As a project admin of fceultra I cannot say that I'm 100% pleased with the UI of the bugtracker and the sf does have its quirks, but sourceforge has had a much better track record than github in respect to uptime. My question to you is "Why not?"If you were starting new today you wouldnt choose it. It is a clusterfuck. How the owners can't see the writing on the wall and change is beyond me.
For all I know maybe they are
It definitely felt cleaner from a UI perspective today (albeit not github-clean) and the sluggish document load times that I remember were also not in evidence.
The open-source ecosystem is definitely richer for every hosting solution that exists, sf included, so if my comment seemed sneery I apologise. It just surprised me at the time is all.
The two games are:
Dark Forces 3: Jedi Knight 2: Jedi Outcast
Dark Forces 4: Jedi Knight 3: Jedi Outcast 2: Jedi Academy
Get it right, people.
I have no idea why it's necessary at all. In fact why not get rid of the blog spam altogether and link straight to the code. Yes, I realise RPS isn't exactly a small site and has quite the following (which seems to extend to HN as well, apparently), but their article adds nothing of real value apart from a quote that was pulled from another article on Kotaku.
https://en.wikipedia.org/wiki/Duke_Nukem_3D
https://en.wikipedia.org/wiki/Doom_%28series%29 (1, 2, and 3)
https://en.wikipedia.org/wiki/Quake_%28series%29 (1, 2, 3, and 4)
I'm confident that there are others but I can't think of any off-hand. These open source contributions are a gift that allows the open source community to create ports to initially unsupported platforms and to enhance the engine. Have you checked out any of the enhanced doom ports? (http://dengine.net/). There are even user-contributed HD assets for Duke Nukem 3d (http://hrp.duke4.net/download.php).cocks gun, blows brains out
(Yes I know the evil goto supposedly has its time and place, blah blah blah)
[1]: http://sourceforge.net/p/jediacademy/code/ci/4bebb8ec23200ee...
People start with a clean model of how the player should move, using minimal physics, then add layer upon layer of special case code for various environmental / state / networking edge-cases.
I've heard looking at the first person movement code for Valve's games will make you wish for your own death, but stripping out the weird stuff which looks ideologically wrong just makes the game play worse.
The nesting is too deep imho, but apart from that it looks ok. This looks more like a design problem, because there are lots of special cases, but the code style is ok.
That function is almost 1500 lines long, full of complex nested if conditions and commented out blocks. I understand how code (especially game character control code) grows to become like that, and I've probably been guilty of some similar horrors myself, but the most I can do with such code style is excuse it.
I know that object-oriented best practice would suggest a lot of different classes and using dynamic dispatch for switching. That might even be faster. However, I dislike the fact that this scatters the logic across hundreds of files.
The best solution would be to simplify the logic, but this is also the most costly/time consuming variant.
For example, codemp/game/g_saga.c uses goto just fine. Three "goto failure" jump to the end of the function to handle the error case differently than a normal return. Not a very good example for proper goto use, but ok.
In contrast, codemp/cgame/cg_players.c should be refactored. It seems to be model loading code. If the loading fails, some gotos jump to the start of the function and using a flag variable a default model "kyle" is used instead of the arguments. If the default model is broken, this becomes an infinite loop. My style suggestion:
if (loadModel(foo)) return;
if (loadModel(default)) return;
assert (false && "fallback/default model broken");Goto is just fine if it is used responsibly.