Hacker News new | past | comments | ask | show | jobs | submit login
Commander Keen source code released (github.com/keendreams)
545 points by vs2 on Sept 16, 2014 | hide | past | favorite | 138 comments



Note that "Keen Dreams" is the game sometimes called "Commander Keen 3.5" or "The Lost Episode"; unlike episodes 1-3 and 4-6 which were made by ID for sale by Apogee, Keen Dreams was (I think) the last game ID made to fulfill their contractual obligations with SoftDisk. It's interesting in a number of ways - the engine and art is very clearly halfway between the first and second Keen trilogies, it's the only game where Keen doesn't have his iconic pogo-stick or his Neuralizer Ray gun.


It looks like Crystal Caves.

ID and Apogee stole many hours of my childhood


Crystal Caves... there's a blast from the past. And Wizball - that game was like smack for kids.


Oh man the memories. Games are just too complicated these days.

http://en.wikipedia.org/wiki/Crystal_Caves

"On October 24, 2005, 3D Realms (formerly Apogee) released a maintenance patch to fix a bug in the game which set the player's computer's clock backwards 100 years after playing on Windows XP." lol.


PC games are perhaps too complicated, but from what I have seen of my son's gaming tastes, they have simply moved to the tablet and mobile devices.


Secret Agent, anyone? I still love that game. In fact, all the old Apogee games had a sense of mystery and discovery that's sorely missing in modern titles. (Or is it nostalgia?) I remember playing through so many shareware titles and salivating at the new goodies that the nag screen promised from the remaining two episodes!

By the way, Apogee has released a lot of their old titles for free. You can find them at 3drealms.com, in the Downloads section.


A little slice of history regarding one of the technical foundations of Commander Keen, for those that aren't aware:

"Then, the first breakthrough. John Carmack devised a smooth, scrolling routine similar to that used for the background of Nintendo games but never before possible on the PC." [1]

The technique is called, adaptive tile refresh. [2]

[1] http://www.3drealms.com/keenhistory

[2] https://en.wikipedia.org/wiki/Adaptive_tile_refresh


It's fascinating that this was something new on the PC that late.

This is roughly how most scrolling on the C64 happens (though it works by reducing the visible display by 8 hires pixels on either side of the screen, and scrolling at most 8 hires pixels before you need to shift "tiles" / characters). I'm not sure it was new with the C64 either. While most C64 games used sprites for the movable objects, there are absolutely exceptions that tracked damage.

On the Amiga, however, the method described is basically pretty much how you're expected to do scrolling from the outset(it has much more extensive support for it than EGA did). AmigaOS even came with built in support for managing damage lists for such objects ("bobs" for "blittable objects") and double buffering from 1985, though most games would have used their own code for it.

For these systems redrawing the whole screen was simply never seen as viable, or worthwhile. The Amiga hardware support for doing this kind of scrolling + the use of the blitter for moving game objects and replacing damaged sections made this method the obvious choice.

Even double-buffering was sometimes seen as too wasteful, with a solution being to sort damage lists and tie updates to the raster interrupt to update the screen before the raster beam reached it.


Yup. We were doing quite similar things on the Atari 6502-based computers (it helped that there was hardware scrolling, but only to a degree). The PC graphics hardware was just embarrassingly awful (it's like the hardware engineers on the CGA decided to make it insanely hard to do any animation -- WTF, you're doing a color display on a consumer product?)

Ah well, they won, and Atari / Amiga / Commodore lost; better doesn't mean you win.


> Ah well, they won, and Atari / Amiga / Commodore lost; better doesn't mean you win.

This being said, Atari and Commodore had several YEARS of opportunities to launch new machines and "kill" the PC (or at least become something that would last longer than a generation), and did not do anything. The Amiga 1200 and Falcon were both very late to the party and underpowered when PCs started to be cheap enough and way more powerful than these machines.

PC gaming also benefited from the fantastic works of Origin (before they were acquired by EA) with a bunch of exclusives (Wing Commander 1 was a revolution in 1991, and convinced many people the PC could also be a gaming platform).

I was on the Amiga during that period and I could see the tide coming, while Commodore and Atari stood and just watched. What a pity.


No kidding about the lost opportunity. It was frustrating enough from inside Atari (both the Warner and Tramiel companies).

- Warner was all about politics, and marketing had taken over major engineering decisions. It was one big balled-up rollerskating disaster as marketroids failed to grasp things on the level of: Adding a HELP key to a computer keyboard does not mean that you automatically get help in every application, especially not game cartridges with very limited space.

- Tramiel was all about not spending money. Vendors who were in the know (like DEC, who serviced our Vaxes until the Tramiels stopped paying for maintenance) demanded payment up front, with cashiers checks or other guaranteed instruments.

Both of these organizations were really tough to do good, high visibility products in. Lots of good stuff got canned (by people with political agendas to push), or couldn't be developed because of the lack of good people.

Sometimes I daydream about how things worked out in an alternate universe ... :-)


Commodore was severely dysfunctional as long as it existed. I recommend the book Commodore: A Company on the Edge (there are two editions - the new edition was meant to be split into two volumes, but only the first volume covering the "8-bit years" have been published). Given that Tramiel brought a lot of that dysfunction with him to Atari it is not much of a surprise that they ran into problems too.

Lack of proper R&D investment was a recurring theme at Commodore from the beginning, but there were tons of problems. Not least towards the end - well after Tramiel - there was Bill Sydnes: Commodore actually hired the guy behind the PCjr - sometimes described as the worst flop ever. So they hired him, and he did his best to live up to his reputation from the PCjr.

The worst part was that he proceeded to make decisions based on ludicrous ideas that "everyone" in the Amiga market could have told him were idiotic (trying to shift more of Commodore's business to the PC division; release a new flagship Amiga model with IDE in the Amiga market? I still remember the total shock and disbelief everyone I knew had when the A4000 was finally unveiled, too late, at too high a cost). The worst part of course being that in doing so he also cancelled or demanded changes to a number of projects that were much better. E.g. there was the A3000+ which would have been a far better machine than the A4000 with the same CPU models, and was far cheaper, and was almost ready by the time Sydnes cancelled it (there exists a number of prototype models, and they still work), and had SCSI. And added a DSP.

But even with proper management there was the Motorola problem - their inability to boost the performance of the 68040 far enough, fast enough. It's not clear Commodore would have had the resources to pull through a PPC transition the way Apple did.


Arrogance, plain and simple. I'm not entirely sure it's warranted, but it brings Apple to mind. They, too, experienced a massive slump... but at least they recovered.

Funny thing is, it seemed to be that Amiga would be making a comeback in the early 2000s as well, with "new" hardware (PPC, and still relatively underpowered). Alas, things fizzled out. Way too late to market, and way too little buzz.


Actually the PPC Amigas were already available in the late 90s (my memory is not clear on when anymore, but maybe 97-98), but they were anyway too expensive and too underpowered to change anything. However it's been interesting to see that third parties have been pushing the hardware forward, as well as the OS (Eyetech for Hardware, MorphOS for new OS inspired and partly compatible with AmigaOS). There's still a very small and niche community using "modern" Amiga. But it's only a shadow of what it was...


They used Motorola CPUs all along, but they kept doing so in the face of their diminishing (relative) performance, THAT'S what I was trying to point out. :)

AAPL bailed and went with Intel as we all know. I can't help but wonder what would have happened if the Amiga rights holders would have done something similar.


Don't forget that the B in IBM stands for business. It took æons for the PC world to realize that graphics mattered for more than pie charts and other “serious work”. Sound was similarly AWOL for a surprising amount of time other than for basic alerts.


The BBC micro had a similar arrangement to the Amiga or EGA, and this was the way a number of games (Repton, Exile, Ravenskull, Uridium, JCB Digger, amongst others) did their full-screen scrolling. (I think the stride was inferred from the displayed total though so when scrolling horizontally some flicker at the sides was pretty much inevitable.)

Double buffering was rare, due to a distinct lack of memory, and games would have had to use dirty lists as a 2MHz CPU just isn't fast enough to redraw the entire screen each time.


I remember reading in Masters of Doom that they had actually asked Nintendo if they could license games to get them on personal computers, Obviously, Nintendo declined. They were able to get the first level of Super Mario Bros running on personal computers and used that method in the Commander Keen series.


I recommend Masters of Doom to everyone. It's wonderful, historical, nostalgic and inspiring.


Pretty good, but the technical explanations were pretty light at times. I'd really like to have the narration they had and on top of that, much more details about the technical side and how it was achieved. When you talk about literature you actually quote authors, when you talk about hackers I think it's appropriate to go back to the code and what it does, too.


Seconded. One of the best books I've ever read - I honestly wish I could forget it and start over.


If you like that you will also like a book called Showstopper which is similar but about early challenges at Microsft building the NT kernel


It is funny that you mention this book. I've read Masters of Doom and just received this one. I'm excited to read it.


I meant Super Mario Bros 3. Sorry about that.


That Wikipedia link claims that Commander Keen was the first PC sidescroller, but it was predated by (at least) Captain Comic.

I'm not sure if you'd call Sopwith a sidescroller but it managed to scroll sideways on CGA.



When I read the description of how EGA worked, you can't help feeling that the engineers that created it had planned for exactly the use-case Carmack put it to. In particular, providing for a buffer that was larger than the screen, the ability to move the offset inside the buffer for the screen's origin, and wrapping of the buffer is exactly the feature set that you need to implement scrolling. I don't think it was blind luck that these features were all available on the card.

This is often cited as the first example of Carmack's genius when it came to computer graphics, and he certainly deserves credit for being one of the first/astest third-party developers to realise the potential of the EGA card. But if I was one of the engineers that had designed EGA, I would be rather miffed to see how much Carmack is praised for this when it seems relatively clear that he was just using the hardware as it was intended to be used.


Does anyone know where the "adaptive tile refresh" source code is in the codebase?


Look at id_rf.c and .asm files.


http://github.com/keendreams/keen/blob/master/kd_main.c#L279

God, so wish I'd known this at the time.


Had to press F10 and one of the debug keys (eg. J for Jump cheat)

https://github.com/keendreams/keen/blob/f477cef79f0893420f47...


https://github.com/keendreams/keen/blob/master/id_us_a.asm#L...

> baseRndArray dw 1,1,2,3,5,8,13,21,54,75,129,204

Hah he got the Fibonacci series wrong (it's supposed to be ...13, 21, 34, 55, 89, 144, unless he did this on purpose).


Carmack got many things wrong. The interesting thing is, none of his mistakes mattered, otherwise he would have fixed them. So you wind up with emergent behavior and bugs become features, like bunnyhopping or rocket jumping.

In this case, 204/129 ~= 1.581, which is pretty close to the golden ratio 1.618. In fact, let's just list all the ratios:

  1/1 = 1
  2/1 = 2
  3/2 = 1.5
  5/3 = 1.667
  8/5 = 1.6
  13/8 = 1.625
  21/13 = 1.615
  54/21 = 2.571
  75/54 = 1.389
  129/75 = 1.72
  204/129 = 1.581
And for the regular series:

  1/1 = 1
  2/1 = 2
  3/2 = 1.5
  5/3 = 1.667
  8/5 = 1.6
  13/8 = 1.625
  21/13 = 1.615
  34/21 = 1.619
  55/34 = 1.618
  89/55 = 1.618
  144/89 = 1.618
Here's a plot of the ratios (regular series in blue, Carmack's in red...ish): http://i.imgur.com/WA7ipZA.png

In this case, we end up with some lovely oscillations in the second half of Carmack's series. But does it look good for graphics, or behave well for gameplay purposes? No idea! Someone should find out what it's used for. It's an interesting little bit of historical excavation.


It looks like the sequence was meant for a RNG, so getting it wrong probably had no impact on anything (it might have made the RNG weaker, but that's about it).

EDIT: I think that sequence isn't even used anywhere (I couldn't find any reference to it).


Another piece of emergent behaviour is the "impossible pogo trick": http://www.shikadi.net/keenwiki/Impossible_Pogo_Trick


What's the relevance of these ratios to Carmack's purpose in extrapolating the series? At any rate, the limiting ratio of successive terms in the altered Fibonacci series 21,54,75,129,204,..., is the same as for the ordinary Fibonacci series, even if the convergence is slower (the difference between this altered Fibonacci series and the original Fibonacci series is just another version of the Fibonacci series, shifted over and multiplied by 20).


Apparently Carmack didn't actually use it anyway, so I suppose there wasn't any purpose. But Carmack's series is significantly different from the normal Fibonacci series, because it only consists of the first ten elements, which isn't enough time to converge. If it was used in actual graphics or gameplay, it would have had a significantly different effect than a normal Fib sequence.

I just thought it was interesting, and another example of the same type of style which led to rocket jumping or bunnyhopping, which were also accidents.


It's not clear that Carmack's purpose in using the Fibonacci series was to take successive ratios to approximate "the golden ratio" (if it was the golden ratio he cared about, he could just as well have directly calculated (1 + sqrt(5))/2). He quite possibly could have been interested in the Fibonacci sequence for some other reason, or no reason at all.


Well, you can keep do this with any two numbers a, b such that a + b > 0 and you'll end up with the golden ratio :)


The condition a + b > 0 is neither necessary nor sufficient; rather, the precise condition you need is that b != k * a, where k = (1 - sqrt(5))/2. But, yes, Carmack's Fibonacci sequence gone awry would still (if continued without further error) produce the golden ratio in the same way as the ordinary Fibonacci sequence.


This just caused a rush of nostalgia from a generation of PC computing that seems like a lifetime ago.

Norton Commander, Jazzy the Jack Rabbit, TheDraw, the Gravis Gamepad...


Jazz Jackrabbit and Commander Keen on a gravis gamepad are second in nostalgia only to playing the original Test Drive [1] and Stunts [2] on a crappy old joystick...

crap. Also playing Jet [3] on the same joystick.

  [1] http://en.wikipedia.org/wiki/Test_Drive_(video_game)
  [2] http://en.wikipedia.org/wiki/Stunts_(video_game)
  [3] http://en.wikipedia.org/wiki/Jet_(video_game)


Joystick, feh! I played Stunts with a keyboard and I liked it. :D

Also, you forgot Scorched Earth [1].

[1] http://www.whicken.com/scorch/


Holy crap. How could I forget scorched earth?

That was one of the first games I remember playing with friends until all hours of the night.

Actually took a road trip with my friend and his fifty pound laptop, and played it along the way.


We spend long nights with my friends trying to reproduce the weird high-resolution Scorched Earth was using, and then playing it.

This game and Heroes of Might and Magic are the games I like to play with other people in the same room. So much fun!


Yeah, I used to play "Test Drive" but then "Stunts" came out and it completely blew my mind what was possible with computers back then. I wasn't even 10.

Wikipedia says Don Mattrick, CEO of Zynga, was original designer of those two games? Consider me surprised.


Weird. Didn't know the CEO bit.

And yeah, the amount of time I spent editing tracks was unhealthy.

I also remember having a religious devotion to getting a certain physics bug to happen. I don't remember how we did it, but you'd end up launching the car and it would fall up into eternity.


In college my friends and I got so into Stunts that we developed an entirely new way of playing the game. We would make a simple track in the corner, but that wasn't the "real" track. The real track was off to the side, and we would race it for speed, but the difference was we used broken and illogical track pieces. So you might be sideways in a tunnel and have it directly transition into a banked ramp, so you would need to plan for that.

We also utilized bugs as part of the required strategy. There were a LOT of bugs, and eventually you bump into some of them, like when you hit a corner and the car careens into the sky for 500 feet (sometimes even landing safely). I made one track that used every bug we knew - you start off driving over water (which you can do at an angle if you are facing the map border fence) then launch off a ramp that is impossible to reach the other side - although if you hit the broken edge of the bridge you MIGHT warp through to the other side. It was awesome.


Stunts?! Every now and again I try to figure out the name of that game. So many late nights making tracks.


There was a special key combination that allowed you to edit the terrain, too. Alas, I only found out as an adult.


My dad still uses Norton Commander or some variation of it to this day. Never forget.


Your dad isn't alone in using "some variation" of Norton Commander:

https://www.midnight-commander.org/ Midnight Commander: A NC clone for Linux/Unix/etc.

http://www.emacswiki.org/emacs-en/Sunrise_Commander Sunrise commander: NC clone for GNU Emacs.


And http://farmanager.com, the same for Windows. Much faster than having to use a mouse to navigate the file system. And a decent editor with syntax highlighting and plugin support included as well.


Far Manager is the only thing I miss after switching to OSX 6 years ago. Tried Midnight Commander and other alternatives, but not nearly as good imo. File search is the killer feature, so much better than any other alternative.


It runs fine under Wine on Ubuntu; maybe that's an option on OS X, too.


I would be so happy to see many of these games transition to tablets, are there good equivalents and/or have some actually been ported?

I have played PC strategy games ported to the iPad along with arcade classics from Atari, just missing some early games like Keen, Empire, and the like.


I have to say I saw every single pixel of every Keen game and I MUCH preferred the pure side view games over the isometric side view games of Episodes 4-6 and Keen Dreams. Episodes 1-3 had such an amazing, precise pixel design and a great sense of movement. The leaping just FELT right, with a slight pause while you pumped off the balls of your feet.

The later games, although much more detailed, with a larger character, had a weird floaty feeling to the controls that I never quite enjoyed playing as much.

That said, I loved all the games and it was an amazing sense of discovery. I remember the moment the shareware model finally took hold of me and I realized that I wanted the next episodes enough to pay for them.


I totally get what you mean. Even though I think the graphics in 4-6 are simply gorgeous, and 5 is probably my favourite of the whole series (hard to say why, I wanted to say because it's in space, but then realized they're all in space, maybe it was the big red robot).

However, there is something that just feels right in 1-3.


Only slightly related but I read "masters of doom" recently and I can't recommend it highly enough. It is a very entertaining read even if you are not crazy over video games. It tells the story of the two Johns, and mention Commander Keen among other things. Great read


There's also an html5 version: https://github.com/JoeAnzalone/HTML5-Keen


Slightly related (from the same era). But the composer for the music for Unreal, Unreal tournament, Deus Ex, Tyrian, Jazz Jackrabbit and others has a music bundle for sale.

http://loudr.fm/bundle/alexander-brandon-bundle/hq4hZ


I'm getting old, if people refer to Deus Ex and Command Keen as being from the same era.


Keen 1 was 1990, deus ex was 2000. Says how far PC gaming went in those 10 years, eh? It understates it, even, since Keen was a great technical achievement, while Deus Ex had unremarkable graphics - the game sold on a great fusion of rpg and fps, not graphics.


Ha yeah, good point. I meant something else in my head and it got lost when translated to the keyboard.


Holy crap - I'm not normally one that gets super nostalgic over chiptunes, but the compositions in Tyrian were brilliant. Definitely getting that.


Ah, thanks for this. I've had Jazz Jackrabbit 3's ImpulseTrackers for ages, but never knew/bothered to find out who the composer was. I had no idea he'd worked up an official album for it.


Thanks for the heads up! Really geeking out on Tyrian and JJ3.


Of note to anyone mentioning "Masters of Doom" are the following two items :

- Apogee Catalog from this time period : http://www.scribd.com/doc/134559074/Apogee-Catalog

and

- The Book of id (from the Id Anthology) : http://www.scribd.com/doc/137817173/Book-of-id

Bask in the nostalgia.


I love some of the descriptions from the Apogee catalog:

Crystal Caves - "Stunning cinematic sequences"

Spear of Destiny - "Breathtaking soundtrack ... for AdLib, Sound Blaster or compatible"

Commander Keen 6 - "Over 2.5 megabytes of graphics created especially for this episode"


I suddenly had a flashback to selecting soundblaster as my audio device..


I think the most interesting part of this (socially) is this:

> This release was made possible by a crowdfunding effort.

https://www.indiegogo.com/projects/let-s-get-keen-dreams-re-...

Looks like they got most of the way, then someone must've paid the rest outside of indiegogo.

What other classic games could be saved this way?


After Keen 3, the id guys were still under contract with Softdisk for another game. They made Keen Dreams to fulfill this obligation, but it wasn't released until some time after Keen 6.

http://www.thefloppydisk.com/articles/commander_keen_the_gam...


Apparently they sold 2-6 until recently - people were buying 1991 software?

http://www.3drealms.com/keenhistory/keenhistory4.html

Keens 2, 3, 5, & the full version of 6 are commercial software, and it is not legal to download them from anywhere.


http://store.steampowered.com/app/9180/

Actually, I think I'm going to go buy it now... it's been too long since I've played Keen.


I bought the bundle a few months ago. The steam start process made the game wonky, so instead of going through the steam client, I made this batch file (for the 4th game):

    @echo off
    cd C:\Program Files (x86)\Steam\SteamApps\common\Commander Keen\base4
    dosbox keen4e.exe -conf keen4.conf -exit
    exit
The configuration file in question was modified, and these are the changes from the default that you might find useful, in the following sections:

    [sdl]
    output=ddraw
And this one:

    [render]
    scaler=normal3x


"There is not enough memory available to play the game reliably. You can play anyway, but an out of memory condition will eventually pop up."

Wow, I can't imagine a modern game giving this warning and still atempting gameplay. Guess a lot of people with low RAM machines had to take their chances back then.


Carmack's piracy protection was bleeding-edge stuff, back then!

https://github.com/keendreams/keen/blob/master/kd_main.c#L39...


I wonder what that actually did.

For the confused. The piracy.h and those two lines were removed.


Looks like piracy.h just contained a reference to a static blob (PIRACY) describing an 80x25x16 text mode screen. movedata copies it directly to the VGA screen base address (0xb800).

Since VGA text mode used one byte to select the character (from a font of 256 entries), and one byte to describe the character's attributes (16 colors aka 4 bits, bold, strikeout, reverse), the resulting buffer for an 80x25 display was 80x25x2 bytes, aka. 4000

When that's done, it waits for the user to acknowledge the anti-piracy message by pressing enter.

This is basically the early 90s equivalent of the "you wouldn't download a car" advert


I thought that #if 0 doesn't get compiled and therefore definitely not executed. Can you explain more about your comment? I'm confused.

Edit: Corrected "not"


[deleted]


right, so what was "bleeding-edge" as the poster stated above?


I think the OP forgot the /s at the end of his comment.


Ah, sarcasm, because the piracy stuff is wrapped in an #if 0


I'm not sure what that means. Is that a good thing?


On your marks. Get set. Compile to JS using LLVM in 3...2...


I'm fairly sure my ancient copy of Teach Yourself C in 21 Days came with a CD including the book text and Borland C++ 3.1, which is mentioned on github as working. UPC code 0672310694, or: http://www.amazon.com/Teach-Yourself-21-Days-Sams/dp/0672310...

You can get yourself into trouble trying to use a newer version of the Borland compilers. 3.1 was the last to support native 16-bit code, or something like that, I believe.

However, I'd take a crack at making the Turbo C in the Embarcadero Museum work: http://edn.embarcadero.com/article/20841

I honestly don't remember what the difference between "Borland C" and "Turbo C" is (the former includes more) so I don't know if that will work. But the museum download is free...



That was fast!


If anyone's keen into doom, check out Doom 2 the Way id Did. In particular, look for the secret level (which also has the entrance to the other secret level).


Very nice!

Unfortunately only Keen Dreams, but at least! I was waiting for this quite some time. I'm not sure if the other Keen versions will eventually follow.

I think the project Commander Genius (http://clonekeenplus.sourceforge.net/) should also be mentioned here. (Disclaimer: I was a developer of CG.) Keen 1-6 should be fully playable. Keen Dreams not yet, so this Open Source release might be helpful.


I remember this game but I still did a Google Image search to remind me:

https://www.google.com/search?site=&tbm=isch&source=hp&biw=1...


The source code is Keen Dreams (episode "3.5"), not episode 1.


Pretty much the only platformer I ever really liked.


Did you ever try Biomenace?


The full version is now free on 3drealms.com!


Not even Super Mario?


I'd love to find the portion of code that has Keen moon the camera if the player is inactive for a period of time


I'm not sure if that's was a feature of Keen Dreams; I definitely remember it was an easter-egg in Commander Keen 4, though. Normally, if you left Keen alone for a while, he'd pull out a book, sit down, and start reading it. However, in the Temple of the Moon, if you stood Keen on one of the moon-shaped carvings on the floor then left him alone, you'd get... a different animation.


Doesn't really reference mooning, I guess:

https://github.com/keendreams/keen/blob/master/kd_keen.c#L15...



Keen was amazing, I hope we see more of them released like this... IMO Keen Dreams was the worst of the lot.


only ~33k lines of code for everything in C/asm. yet today, it feels so strange that an equivalent game in our "much advanced languages" will probably end up about the same or larger. Are we really progressing?


The imperative game logic stuff would be about the same. If this happens, print this and that. If this key is pressed to these 5 things. You can't abstract those steps away.

However, video, audio, input handling, and loading resources would be a lot simpler.

E.g. take a look at the input manager:

https://github.com/keendreams/keen/blob/master/id_in.c

You also wouldn't have anything like this:

https://github.com/keendreams/keen/blob/master/id_ca.c

You'd put some resources in a list and that's all the caching you'd do.

You should be able to do a game like this in less than 10k lines of Dart/TS/JS (2D Canvas, Web Audio, Gamepad API). Without using any external libraries or engines, that is. It also would be a lot easier to write, because all of the low level parts are gone.


33k sounds like a lot. I should think a game like this today would be more like 3k, or maybe 10k at most + engine code + content.

Nowadays you see, it's wasteful to write an engine from scratch for a game like this. It was needed then, but it's a solved problem now. If you wrote 33k for a commander keen clone I'd wonder what you were doing.


In this case, the 33k loc includes the engine. I think that is the point.


This is a philosophical problem. What is the difference really between:

1. a prewritten engine, and

2. some hypothetical language

each where you write commander keen with 3k loc. Where the hypothetical language has all the same stuff as the engine, it's just locked away behind a level of abstraction.

if you could write commander keen in 3k of javascript (with the aid of all the stuff that's in a browser) How is that different from writing 3k of C with nothing but this entire commander keen engine already written and ready to go?

What's are we calling an "advance", exactly?


I do see your point. The advancement is: You don't need to make/test your engine, and we have a lot more graphics cards and platforms, too.


Yes, because now we do platformers in 1024 bytes: https://marijnhaverbeke.nl/js1k/


I tried to compile this from within DosBox, but I couldn't find a `makeobj` binary to build the stuff in the static directory. Does anyone know where that would come from?



What about the source code for Episodes 1-3?

Don't let the Vorticons win!!

I'll never forget the day I discovered the Vorticon alphabet in episode 3. Mind blown.


I had almost deciphered the entire thing on my own, before I found that translation sign in the hidden area in ep.3.

IIRC the only one I missed was the character for 'Z', which I simply hadn't encountered on any sign so far.


You mean the standard galactic alphabet: http://www.shikadi.net/keenwiki/Standard_Galactic_Alphabet


Oh my... the memories.

In those times, I made me a loadable font for my Star-LC-10 9-pin dot matrix printer, and after a while could effortlessly read text printed in the SGA ;-)


This is brilliant. I played Keen Dreams for hours and even completed it. This will make very interesting reading.


Are there instructions for compiling this somewhere? I don't see a makefile or configure.


The ".prj" file is the configuration/project file for the integrated development environment.

https://www.google.de/search?q=borland+c&tbm=isch


The readme in the repository give instructions on how to compile it using Borland C++.


Someone should port this to a language that isn't C, not that I'm volunteering.


There is already someone porting Keen5 to C https://github.com/sulix/omnispeak


I meant porting it away from C, the repo in the OP is in C.


Why is that? Unless you mean port from C90 to C99 or the most recent C...

That game is perfect for C, why on earth port it to something that is not just better or more modern C?


Because C isn't web-scale.


The game renderer is also too coupled to the game backend. They should be separate pieces which only communicate via a RESTful API. Except the first frame should be rendered server-side to save time.


Why?

I could understand wanting to port it to platform x, but the language choice isn't the biggest barrier to modification/extension here.


First, maybe someone should remove the dependencies on EGA and modify the graphics engine a bit to make it more generic and multi-platform.

Then you can worry about switching languages. Which is really pointless, but whatever floats your boat.


Did anybody manage to build it?


My childhood rejoices!


This is awesome! Commander Keen was my very first PC game on my very first PC (a 386DX with 2MB ram and a 80MB hard drive).

And it was a great game!


Same for me. My PC was a 8086 running at 4.77Mhz, with 640Kb memory, 20Mb HDD and EGA graphics. Surprisely Keen Dreams ran perfectly well on that very slow hardware...a testament to the software engineering back then.


> a testament to the software engineering back then.

Oh, don't worry. Hardware acceleration is coming, soon all the web apps will run just fine on your i7. But you might have to buy a new GPU and more RAM, because in five years, anyone would be crazy to have less than 32GB. Gaming might be a long way off still... ;-)

And then you'll have to wait for your GPU drivers to mature if you're not on the mainstream OS.


Same here! No idea what the PC specs were (someone built it for me) but I'll never forget booting up, seeing DOS, and typing keen.exe to begin hours of fun.


This is a good day for humanity.


8-space tabs? Yuk!


A tab does not have spaces. It's a tab, one character. How it is displayed is the choice of the HTML spec / your browser.


Yes, I know. But I figured that the author was not so misguided as to use actual tabs. Turns out it is Github's CSS that is to blame.


That's GitHub's CSS. They could set `tab-size` to 4, but they just left it at the default of 8.


You can change it by appending ?ts=4 to the URL.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: