
Commander Keen source code released - vs2
https://github.com/keendreams/keen
======
thristian
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.

~~~
jenscow
It looks like Crystal Caves.

ID and Apogee stole many hours of my childhood

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

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

[http://en.wikipedia.org/wiki/Crystal_Caves](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.

~~~
ryanhuff
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.

------
Arjuna
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](http://www.3drealms.com/keenhistory)

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

~~~
vidarh
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.

~~~
kabdib
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.

~~~
ekianjo
> 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.

~~~
grimman
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.

~~~
ekianjo
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...

~~~
grimman
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.

------
gaving
[http://github.com/keendreams/keen/blob/master/kd_main.c#L279](http://github.com/keendreams/keen/blob/master/kd_main.c#L279)

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

~~~
SuperKlaus
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/f477cef79f0893420f47c219e9b2c2053787c4cc/kd_play.c#L257)

------
ahomescu1
[https://github.com/keendreams/keen/blob/master/id_us_a.asm#L...](https://github.com/keendreams/keen/blob/master/id_us_a.asm#L65)

> 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).

~~~
sillysaurus3
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](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.

~~~
Chinjut
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).

~~~
sillysaurus3
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.

~~~
Chinjut
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.

------
jianshen
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...

~~~
doorhammer
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)

~~~
tejon
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/](http://www.whicken.com/scorch/)

~~~
doorhammer
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.

------
techtalsky
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.

~~~
tripzilch
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.

------
abraxasz
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

------
Touche
There's also an html5 version:
[https://github.com/JoeAnzalone/HTML5-Keen](https://github.com/JoeAnzalone/HTML5-Keen)

------
bane
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](http://loudr.fm/bundle/alexander-brandon-bundle/hq4hZ)

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

~~~
Pxtl
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.

------
RunningWild
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](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](http://www.scribd.com/doc/137817173/Book-of-id)

Bask in the nostalgia.

~~~
jamesk_au
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"_

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

------
endgame
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-...](https://www.indiegogo.com/projects/let-s-get-keen-dreams-re-released-
legally)

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?

------
dubfan
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...](http://www.thefloppydisk.com/articles/commander_keen_the_game_that_made_id/)

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

[http://www.3drealms.com/keenhistory/keenhistory4.html](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._

~~~
ak217
[http://store.steampowered.com/app/9180/](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.

~~~
pp19dd
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

------
drzaiusapelord
"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.

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

[https://github.com/keendreams/keen/blob/master/kd_main.c#L39...](https://github.com/keendreams/keen/blob/master/kd_main.c#L397-L413)

~~~
jason_slack
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"

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

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

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

------
justin66
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...](http://www.amazon.com/Teach-
Yourself-21-Days-
Sams/dp/0672310694/ref=sr_1_1?ie=UTF8&qid=1410927432&sr=8-1&keywords=0672310694)

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](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...

------
jenscow
[https://github.com/sulix/keen-dreams-sdl2](https://github.com/sulix/keen-
dreams-sdl2)

The Linux port

~~~
_pferreir_
That was fast!

------
clarry
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).

------
albertzeyer
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/](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.

------
jason_slack
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...](https://www.google.com/search?site=&tbm=isch&source=hp&biw=1360&bih=569&q=commander+keen+1&oq=commander+keen+1&gs_l=img.3..0j0i24l9.3919.6645.0.7416.16.15.0.1.1.0.116.1233.13j2.15.0....0...1ac.1.53.img..0.16.1236.d4kYfL6v96I)

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

------
drivingmenuts
Pretty much the only platformer I ever really liked.

~~~
Aardwolf
Did you ever try Biomenace?

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

------
gohome190
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

~~~
w-m
Doesn't really reference mooning, I guess:

[https://github.com/keendreams/keen/blob/master/kd_keen.c#L15...](https://github.com/keendreams/keen/blob/master/kd_keen.c#L1531)

~~~
trhaynes
The variables are here, though...

[https://github.com/keendreams/keen/blob/f477cef79f0893420f47...](https://github.com/keendreams/keen/blob/f477cef79f0893420f47c219e9b2c2053787c4cc/kd_keen.c#L1120)

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

------
segmondy
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?

~~~
TheZenPsycho
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.

~~~
jenscow
In this case, the 33k loc _includes_ the engine. I think that is the point.

~~~
TheZenPsycho
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?

~~~
jenscow
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.

------
x3ro
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?

~~~
mzs
You have to build makeobj first:

[https://github.com/keendreams/keen/blob/master/static/makeob...](https://github.com/keendreams/keen/blob/master/static/makeobj.c)

------
corbinpage
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.

~~~
endgame
You mean the standard galactic alphabet:
[http://www.shikadi.net/keenwiki/Standard_Galactic_Alphabet](http://www.shikadi.net/keenwiki/Standard_Galactic_Alphabet)

~~~
cnvogel
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 ;-)

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

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

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

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

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

~~~
bob_george33
There is already someone porting Keen5 to C
[https://github.com/sulix/omnispeak](https://github.com/sulix/omnispeak)

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

~~~
speeder
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?

~~~
q3k
Because C isn't web-scale.

~~~
zenojevski
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.

------
3327
This is a good day for humanity.

------
jacquesm
Did anybody manage to build it?

------
dkfmn
My childhood rejoices!

------
smegel
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!

~~~
guidedlight
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.

~~~
clarry
> 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._

------
yohanatan
8-space tabs? Yuk!

~~~
mseepgood
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.

~~~
yohanatan
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.

