Skip to content

Commit

Permalink
Initial commit of Keen 1 Randomiser
Browse files Browse the repository at this point in the history
Happy Birthday, Keen:Vorticons!
  • Loading branch information
sulix committed Dec 14, 2020
0 parents commit 6a3413e
Show file tree
Hide file tree
Showing 7 changed files with 794 additions and 0 deletions.
Binary file added CK1PATCH.EXE
Binary file not shown.
Binary file added CWSDPMI.EXE
Binary file not shown.
6 changes: 6 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Commander Keen Randomiser
Ⓒ 2020 David Gow <[email protected]>

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
104 changes: 104 additions & 0 deletions README.TXT
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
===========================
Commander Keen 1 Randomiser
===========================

Author: David Gow <[email protected]>
Version: 1.0
Website: https://davidgow.net/keen/randomiser.html


About
-----

The Keen 1 Randomiser lets you play Keen1 with a twist: items, levels, and
enemies are all randomised.

The randomiser takes a copy of Keen 1, and rewrites the level files to give you
a new experience. It also creates a CK1PATCH-compatible patch file which loads
the replacement files and patches the random number seed in.

What does it change?
--------------------

- Entrances to all levels on the world map are randomised.
- Positions of key items (spaceship parts and pogo stick) are randomised.
- Enemy positions are shuffled (within a level).
- Point items (lollies) are shuffled within a level.
- Door/Keycard colours are randomised (cosmetic only).
- Some block colours are randomised.
- Yorp statues now hint at item locations.
- You can see the random number seed on the Status Screen (press Space)

Note that there are some things which don't change:
- Level layouts remain the same.
- Raygun ammo remains where it is in the original game.
- There is always a Pogo Stick at the bottom of the Vorticon Commander's Castle
- The Garg statue remains unhelpful.
- The world map looks identical (but the levels within are different)

How do I use it?
----------------

Just run RNDKEEN1.BAT: a differently-randomised version of the game will greet
you each time you play.

If you want to replay the same game (or have several people play the same
randomised version), you can pass a random number seed to the randomiser:
C:\RANDKEEN> RNDKEEN1 /SEED 12345
(Replace 12345 with the seed you want to play.)

You can check what seed you're running from the Status Screen by pressing SPACE.

If you just want to generate the game, not play it, you can run RANDKEEN.EXE:
this will generate the randomised maps and patch file. Note you'll still need
to rename LEVEL81.CK1 and LEVEL90.CK1 to RNDLV81.CK1 and RNDLV90.CK1
respectively for the world map and ending screen to work (this is usually done
by the RNDKEEN1.BAT file).

RNDKEEN1.BAT and RANDKEEN.EXE accept some extra command-line parameters:
- /? -- Show a help screen listing these parameters.
- /SEED <seed> -- set the random number seed to <seed>
- /DEBUG -- show additional debug information (can contain spoilers!)
- /NOLEVELNAMES -- Make Yorp hints use level numbers instead of names

The Keen 1 Randomiser requires a 386 or better to run, and probably needs a
megabyte or so of memory.

Hints!
------

Playing Keen 1 Randomiser is, for the most part, very similar to playing Keen1,
but there are a few things to be wary of.

- You'll probably need to play through levels which are not necessary to win
the original game. Familiarise yourself with them.
- The Pogo Stick is much harder to get: you'll probably need to complete a
lot of levels without it!
- Ship Parts and the Pogo Stick will always be either in their original
locations, or right next to the exit. You can't miss them!
- Raygun Ammo is where you remember it from the original game, but because
you'll be playing levels in a different order, you'll probably find ammo
hard to find. Use it wisely (and get good at dodging!)
- Shrine levels may contain Yorp statues, which have hints. You'll want to know
the level names[1] to take advantage of these. (Or, if you know the level
numbers, you can use the /NOLEVELNAMES switch.)
- There's always a Pogo Stick in the Vorticon Commander's dungeon.

[1]: http://www.shikadi.net/keenwiki/Keen_1_Levels

Building the Source Code
------------------------

If you want to modify Keen 1 Randomiser (or just see how it works), the source
code is included in this archive (randkeen.c), and is also available on GitHub:

https://github.com/sulix/randkeen

It's normally compiled with DJGPP, but can also be built for non-DOS platforms
(just compile randkeen.c with your favourite compiler: it should be reasonably
standard C99).

Make sure that CK1PATCH and CWSDPMI are copied to the Keen1 directory, as well
as the RNDKEEN1.BAT and RANDKEEN.EXE files. There's an included shell script
which compiles RANDKEEN.EXE and does this, though it has some hardcoded paths
in it.
5 changes: 5 additions & 0 deletions RNDKEEN1.BAT
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@ECHO OFF
COPY LEVEL81.CK1 RNDLV81.CK1
COPY LEVEL90.CK1 RNDLV90.CK1
RANDKEEN %1 %2 %3 %4 %5
CK1PATCH RNDKEEN1.PAT
9 changes: 9 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

OUTDIR=rndkeen1/

/usr/local/djgpp/bin/i586-pc-msdosdjgpp-gcc -o RANDKEEN.EXE randkeen.c
cp RNDKEEN1.BAT $OUTDIR
cp RANDKEEN.EXE $OUTDIR
cp CWSDPMI.EXE $OUTDIR
cp CK1PATCH.EXE $OUTDIR
Loading

0 comments on commit 6a3413e

Please sign in to comment.