We just released a prototype of the cancelled SNES port of Puggsy! Take a look!
As always, thank you for supporting The Cutting Room Floor on Patreon!

Notes:The Adventures of Captain Comic (DOS)

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game The Adventures of Captain Comic (DOS).


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