the cutting room mirror

The Adventures of Captain Comic (DOS)

This article has a talk page!
view on tcrf.net

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