This page contains notes for the game The Adventures of Captain Comic (DOS).
Revisions#
The Internet Archive has all five revisions under the item TheAdventuresOfCaptainComic:
It also has three other versions:
- swh11988 (file_id.diz labels it "Hacked/grafitti version 1"). This is identical to sw1988 except that it has 4 bytes NOPed out for an infinite-lives cheat. (The hack wouldn't have worked in later revisions because of the instant-win mode, which is perhaps why the mode exists, to prevent a trivial infinite-lives hack.)
- swh21988 (file_id.diz labels it "Hacked/grafitti version 2")
- R4a1sw1989 (file_id.diz labels it "Alternate version 1"). This is identical to R4sw1989 except for the startup text. It says that this version is for distribution exclusively through PUBLIC BRAND SOFTWARE.
File Formats#
Malvineous has documented the file formats here.
Executable Packing#
In every revision, COMIC.EXE is packed with EXEPACK. Revision 1 uses an earlier version of EXEPACK that not all unpackers can handle. Try these ones:
R1swh21988 (a hacked version) doesn't have COMIC.EXE but rather MENU.EXE, and the EXEPACK layer appears to be wrapped in another layer that adds an advertisement for "Red Point".
Reverse Engineering Tools#
Various reverse engineering tools, and annotated disassemblies of every revision, are available in my Comic-related Git/git-annex repo:
git clone https://www.bamsoftware.com/git/comic.git
cd comic/
git annex get
-- Mouser (talk) 23:46, 15 December 2019 (EST)
Sound Effects#
The format of a sound effect is an array of
struct {
uint16_t freq_divider;
uint16_t duration;
};
The 16-bit values are stored little-endian. Each freq_divider divides the Programmable Interval Timer base frequency of 1193182 Hz. For example, a freq_divider of 1c3f would result in an output frequency of 1193182 / 0x1c3f ≈ 165 Hz. The special freq_divider value 0028 indicates a rest. duration is in number of beats; each beat is about 55 ms (one tick of the 18.2 Hz IRQ 0 timer). The end of the sound is marked by a freq_divider of 0000.
Table of offsets to sound effects in the unpacked executable. Assumes that the unpacked executable has an EXE header of 512 bytes. Changed sounds are highlighted.
R1sw1988 |
R1swh11988 |
R2sw1988 |
R3sw1989 |
R4a1sw1989 |
R4sw1989 |
R5sw1991 |
|
|---|---|---|---|---|---|---|---|
title |
2521 |
2521 |
25a2 |
25d2 |
27a2 |
27a2 |
29c4 |
start |
2665 |
2665 |
2bc0 |
2bf2 |
2daa |
2d9e |
|
unused |
26a5 |
26a5 |
2c00 |
2c32 |
2dee |
2dde |
|
door |
eda9 |
eda9 |
f309 |
f339 |
f4f9 |
f4e9 |
fc29 |
player death |
edd1 |
edd1 |
f331 |
f361 |
f521 |
f511 |
fc51 |
teleport |
edf9 |
edf9 |
f359 |
f389 |
f549 |
f539 |
fc79 |
bonus |
ee19 |
ee19 |
f379 |
f3a9 |
f569 |
f559 |
fc99 |
materialize |
ee25 |
ee25 |
f385 |
f3b5 |
f575 |
f565 |
fca5 |
game over |
ee85 |
ee85 |
f3e5 |
f415 |
f5d5 |
f5c5 |
fd05 |
screen transition |
eede |
eede |
f43e |
f46f |
f62f |
f61f |
fd3f |
lost life |
eefe |
eefe |
f45e |
f48f |
f64f |
f63f |
fd5f |
shoot |
ef4e |
ef4e |
f4ae |
f4de |
f69e |
f68e |
fdae |
enemy death |
ef5a |
ef5a |
f4ba |
f4ea |
f6aa |
f69a |
fdba |
player damaged |
ef71 |
ef71 |
f4d1 |
f501 |
f6c1 |
f6b1 |
fdd1 |
item get |
ef81 |
ef81 |
f4e1 |
f511 |
f6d1 |
f6c1 |
fde1 |
extra life |
ef95 |
ef95 |
f4f5 |
f525 |
f6e5 |
f6d5 |
fdf5 |