Commander Keen 1 -- Amiga RTG port
===================================
Unofficial, non-commercial fan-made port of "Commander Keen in Invasion of
the Vorticons -- Episode 1: Marooned on Mars" (v1.31) to the Commodore
Amiga, rendered through RTG (Picasso96 / CyberGraphX, via cybergraphics.library)
in 8-bit chunky-pixel mode instead of the original's EGA/VGA output.
This is a *port*, not an emulator: it is a native m68k AmigaOS program, built
from a line-by-line reconstruction of the original DOS source, that reads
the original game's own data files directly and reimplements the game logic,
rendering, audio and timing natively against Amiga APIs (Picasso96/cgx,
AudioDevice, timer.device, Intuition). No DOS emulation or x86 code of any
kind is involved.
Status: pre-release / work in progress. The core game is fully playable
start to finish (see "Known issues" below for the open corners). Tested on
real Amiga hardware as well as WinUAE/FS-UAE with Picasso96 configured.
LEGAL / COPYRIGHT
-----------------
Commander Keen is (C) id Software / Apogee Software (now part of
ZeniMax/Bethesda). This archive is NOT affiliated with, endorsed by, or
sponsored by id Software, Apogee, Bethesda, ZeniMax, or any of their
successors. "Commander Keen" and related names are their trademarks.
This archive contains ONLY code written for this Amiga port. It does NOT
contain, and will never contain:
- any of the original game's data files (graphics, levels, sounds, text --
the *.CK1 files, or the DOS KEEN1.EXE), or
- the GPLv2-licensed "Reconstructed Commander Keen 1-3 Source Code" project
by K1n9_Duk3, which was used purely as a reference during development to
verify this port's behaviour against the original -- none of its code is
copied into this port's own sources.
To use this port you must already own a legitimate copy of Commander Keen 1
v1.31 (e.g. from id Software's own 1991 shareware/registered release, or a
legally purchased re-release) and supply its data files yourself. See
SETUP below.
WHAT'S IN THIS ARCHIVE
-----------------------
README.txt -- this file
LICENSE -- license for this port's own source code (GPLv2)
DECISIONS.md -- full development log: every architectural
decision, fidelity check against the original,
and bug investigation made while building this
port. Essential reading for anyone continuing
this project.
amiga/README.md -- short build quick-reference
amiga/Makefile -- cross-compiles amiga/src with vbcc
amiga/build-adf.sh -- assembles a bootable keen1.adf from amiga/disk/
amiga/src/ -- full source code of this port (C, m68k AmigaOS)
amiga/tools/ -- helper scripts (see below)
amiga/disk/KEEN1 -- precompiled binary (68000, no FPU required)
amiga/disk/S/Startup-Sequence
-- the boot script that launches KEEN1
SETUP -- adding your own copy of the game data
------------------------------------------------
1. Get your own legitimate copy of Commander Keen 1 v1.31 and locate these
original files (from the DOS install):
EGAHEAD.CK1 EGALATCH.CK1 EGASPRIT.CK1 FINALE.CK1 HELPTEXT.CK1
LEVEL01.CK1 .. LEVEL16.CK1 LEVEL80.CK1 LEVEL81.CK1 LEVEL90.CK1
PREVIEW2.CK1 PREVIEW3.CK1 PREVIEWS.CK1 STORYTXT.CK1 SOUNDS.CK1
KEEN1.EXE
2. Create a folder named "CKeen1" *next to* the "amiga" folder from this
archive (i.e. CKeen1/ and amiga/ are siblings), and copy all the files
above into it.
3. Easiest path (no cross-compiler needed, binary is already built):
- On a real Amiga or emulator with Picasso96/CyberGraphX installed,
copy everything from amiga/disk/ plus all the files from CKeen1/
into one directory (e.g. a hard-drive partition, or an emulated
directory), then run KEEN1 from there.
- TILEINFO.BIN and SOUNDS.BIN (two small files this port derives from
KEEN1.EXE and SOUNDS.CK1) are NOT included in CKeen1/'s original
file list above -- generate them with:
python3 amiga/tools/extract_tileinfo.py CKeen1/KEEN1.EXE TILEINFO.BIN
python3 amiga/tools/extract_sounds.py CKeen1/SOUNDS.CK1 SOUNDS.BIN
and place both next to the other data files.
4. Bootable-floppy path (produces a ready-to-boot keen1.adf):
- Requires amitools (`pip3 install amitools`) for its xdftool, on
whatever machine you run the script on (does not need to be the
Amiga itself).
- From amiga/, with CKeen1/ in place as in step 2, run:
./build-adf.sh
This auto-generates TILEINFO.BIN/SOUNDS.BIN, auto-copies the raw
*.CK1 files from ../CKeen1/, and writes amiga/keen1.adf -- boot that
on real hardware or in WinUAE/FS-UAE with Picasso96/CyberGraphX
configured.
5. To rebuild the binary itself from source instead of using the one
included, see amiga/README.md and amiga/tools/setup-toolchain.sh (needs
vbcc targeting m68k-amigaos).
CONTROLS
--------
Arrow keys -- move
Ctrl -- jump
Alt -- fire / enter a level from the world map (stand on an
entrance and press Alt/Fire)
Enter/Space -- confirm in menus
Esc -- quit (brings up a confirmation box)
F1 -- help
F5 -- save game (world map only, matching the original)
REQUIREMENTS
------------
- Amiga with Picasso96 or CyberGraphX and a supported RTG graphics card
(or an emulator such as WinUAE/FS-UAE configured with one)
- 68000 or better, no FPU required
- Your own legitimate Commander Keen 1 v1.31 data files (see SETUP)
KNOWN ISSUES / NOT YET IMPLEMENTED
------------------------------------
This is a from-scratch native port verified screen-by-screen and mechanic-
by-mechanic against the original DOS source, but a few corners are
deliberately incomplete. Listed here so whoever picks this project up next
doesn't have to rediscover them:
* Joystick support is not implemented. Input is keyboard-only
(input_cgx.c, via Intuition RAWKEY). Would need gameport/CIA potgo
register reads (or lowlevel.library/gameport.device) feeding the same
control structure keyboard input already populates. Scoped as a small,
independent task; not attempted yet.
* F2 (sound on/off) and F3/F4 (keyboard/joystick calibration) are not
bound to anything. Only F1 (Help) and F5 (Save) are wired up. F3/F4
only make sense once joystick support (above) exists.
* The ENDTEXT.CK1 end-credits crawl is not shown after the finale's
"TO BE CONTINUED....". A KEENSCRN.C-style scrolling text reader
already exists in this port (textwin.c) and is used elsewhere (Story,
F1-Help, Previews) -- wiring ENDTEXT.CK1 through it after DoFinale()
should be straightforward, just not done yet.
* "Ordering Info" in the main menu shows a short placeholder message
instead of a reconstruction of the original 1990 Apogee mail-order
form. Deliberate: that content has no functional value today.
* "Restart Demo" in the main menu is a no-op (returns to the attract
cycle). This port has no recorded-input demo-playback subsystem at
all, so there's nothing to restart.
* The High Scores screen (reached from the attract-mode title cycle)
shows a plain black background instead of the LEVEL90 map backdrop
every other menu screen uses. Minor visual inconsistency, not fixed.
* World-map avatar movement speed is intentionally code-faithful: it's
ported literally from the original's own ControlMapKeen(), unscaled
by elapsed time. Combined with this port's fixed 60Hz pacing, the map
avatar can feel faster than in-level Keen. This has been raised and
deliberately deferred twice during development without a decision on
whether "faithful to the original" should mean code-faithful (current
behaviour) or feel-faithful (scaled to match perceived speed) --
needs an explicit decision before anyone changes this, not a silent
"fix".
* Title-picture centering was reported as possibly slightly off on one
real-hardware test. The relevant RTG screen-centering logic
(video_cgx.c, BestCModeIDTags/s_destx/s_desty) was reviewed and found
structurally correct; no concrete bug was found. Flagged as
unresolved -- needs a side-by-side screenshot comparison or another
real-hardware data point to make further progress.
None of the above affect core gameplay: all three episode-1 "worlds",
all 16 regular levels plus the secret levels, saving/loading, the full
menu system (title, attract-mode cycle, main menu, Story/About
ID/High Scores/Previews/F1-Help text screens), and the finale sequence
are implemented and have been verified on real Amiga hardware.
CONTINUING THIS PROJECT
------------------------
Read DECISIONS.md first. It is a complete, chronological log of every
design decision and bug investigation made while building this port,
including things that were tried and rejected -- it will save you from
re-deriving work already done or re-breaking things already fixed for a
good reason (several entries specifically document "looks like a bug but
isn't" cases and "fixed once, regressed, fixed again, here's why" cases).
CREDITS
-------
This port's fidelity to the original was checked throughout development
against the "Reconstructed Commander Keen 1-3 Source Code" project by
K1n9_Duk3 (GPLv2, (C) 2021-2026), used strictly as a reference -- no code
from it is included in or copied into this archive. If you have access to
that project separately, DECISIONS.md cites it by original filename
(KEENSCRN.C, KEENACTS.C, IDLIBC.C, etc.) throughout.
Commander Keen (C) id Software / Apogee Software.
LICENSE
-------
This port's own source code (everything under amiga/) is licensed under
the GNU General Public License v2 or later -- see LICENSE. This does not
and cannot grant any rights to the original Commander Keen game or its
assets, which remain the property of their respective copyright holders.
|