HeroQuest II: Legacy of Sorasil, Gremlin Graphics, 1994, for the Amiga CD32.
An isometric, point-and-click adaptation of the Milton Bradley / Games Workshop
board game, licensed from Hasbro. Six tracks: one MODE1/2048 data track and
five Red Book audio tracks.
Every number below is produced by a tool in tools/ from the disc
image; the raw output is in notes/.
| Publisher / studio | Gremlin Graphics Software Limited, Sheffield, UK |
| Licence | "Heroquest © 1994 Hasbro International Inc. All Rights Reserved. Heroquest was developed in association with Games Workshop" — on the logo screen, and nowhere else on the disc |
| Master cut | 1994-06-15 17:34:13, and the game executable was written 11 minutes 34 seconds earlier |
| Mastering tool | ISOCD 1.03 by Pantaray — the first disc in this series that is not 1.04 |
| Data preparer | Kevin Dudley - ISOCD 1.03 by Pantaray, Inc. USA - — and he is the game's programmer, named on its own credits screen |
| PVD system id | CDTV (tenth disc of ten) |
| Volume id | Legacy of Sorasil |
| Volume set id | 15 June 1994 17:30 — a hand-typed date, four minutes before the master |
| Application id | Legacy of Sorasil CD32 — the title and the console |
| Tracks | 1 data (MODE1/2048) + 5 audio, 1,902.1 s = 31 min 42 s |
| Data track | 25,663 sectors in the image, 25,436 declared, overrun 227, all zero |
| Share of a 333,000-sector CD | 50.5 % — data 7.6 %, audio 42.8 % |
| Files / directories | 97 / 7, 2,156,143 bytes |
| Unpacked | 4,285,931 bytes = 4.09 MB — inside the 2.7–13.3 MB band for the tenth time |
| Compression | RNC ProPack method 1 with an XOR layer over the literals — 106 blocks in 92 files, 49.1 % |
.TM block |
sector 21, 2,048 bytes, the eighth byte-identical copy of Commodore's; no .TM file in the root |
| Unclaimed sectors | 32, all zero, at the end (seventh disc at exactly 32) — and 24,272 zero sectors at the front, 95.4 % of the volume |
| Boot script | 208 bytes, seven non-blank lines: setpatch, loaderblackpal, Stack 8192, three Assigns of floppy volume names, QuestII 2 |
libs/ |
absent. freeanim.library is opened by /loaderblackpal, which ships with its symbol table intact |
| Libraries opened by the game | 4, all via OpenLibrary (−552): dos, graphics, nonvolatile, lowlevel — graphics.library is never called |
| Devices opened | cd.device twice, input.device once |
| AGA | none. No BPLCON3, BPLCON4, FMODE or DIWHIGH anywhere on the disc; LoadRGB4 and LoadRGB32 both never called; 5 bitplanes, 32 colours |
| Akiko | untouched — 0 C2P-port references, 0 pointer loads, 0 $C0DE0000, in the image, in all 97 files and in all 111 decrunched blocks |
| Graphics | plane-separated planar, 320 × 200, 4 and 5 planes; sprites 32 px wide, 6 planes, 24 bytes per row on all 36 files |
| Text | 362 strings per language in three languages, 7-bit ASCII, accents encoded as punctuation |
| Music | 6 ProTracker modules + 39 raw PCM effects + Red Book — of which only tracks 2 and 3 are ever played |
| Save system | CD32 nonvolatile.library alone — app Hero Quest II , item Save; stores 24 bytes and reads 238 back |
| Floppy SKU | yes, and the disc reconstructs it: every file is addressed as Legacy of Sorasil DISK 1/2/3: — 13, 39 and 39 files |
Half the disc is Red Book audio and the other half is mostly empty. The game itself is 2.1 MB on the disc and 4.1 MB unpacked: an executable, six pieces of music, nine dungeons' worth of maps, tiles and illustrations, 36 character and monster sprite sheets, 39 sound effects and three language files.
Three things about it are worth the repository:
- it is a three-floppy A1200 game with its floppy loader intact, and the
loader still addresses all 91 of its files through the volume names
Legacy of Sorasil DISK 1:,DISK 2:andDISK 3:(docs 03 and 11); - its cruncher is RNC ProPack method 1 with an obfuscation layer nothing else on this format uses — every literal byte XORed with the low byte of a 16-bit key that rotates one bit right after each literal run, in three variants that the CRC in each block's own header tells apart (doc 04);
- it is the second disc in this series with no AGA register anywhere, after
Dragonstone, and the first where the reason is legible in 228 bytes: a root
command called
loaderblackpalthat opensfreeanim.libraryand then writes exactly 32 colour registers to black (doc 06).
| Doc | Contents |
|---|---|
| 01-disc-and-filesystem.md | ISOCD 1.03, a date typed into the volume-set field, and 95.4 % of the volume left empty in front of the files |
| 02-timestamps.md | A six-minute copy session, three later files, and a master 11 minutes after the executable |
| 03-boot-chain.md | Seven lines, three floppy volume names, and two commands byte-identical to other studios' |
| 04-compression.md | RNC ProPack 1 with a rotating XOR key — three variants, 106 blocks, every CRC verified |
| 05-executable.md | A hunk file that decrunches and relocates itself in 584 bytes |
| 06-display-and-akiko.md | AGA measured to zero and Akiko measured to zero, and the 228-byte program that settles the colour count |
| 07-graphics-formats.md | Plane-separated screens, 64 × 64 maps of 8-byte cells, and 24 bytes per row on all 36 sprite sheets |
| 08-text-and-licence.md | 362 strings × 3 languages, accents mapped onto ( ) * +, and the Hasbro / Games Workshop notice |
| 09-audio.md | Six ProTracker modules, 39 effects, and three Red Book tracks nothing plays |
| 10-input-and-saves.md | Two ports feeding one pointer, and a save that stores 24 bytes and reads 238 |
| 11-archaeology.md | A title screen that still calls the game Masters, a publisher logo with the copyright removed, and a Sheffield pub |
| 12-open-questions.md | What is unresolved, with the measurement beside it |
| notes/file-inventory.md | All 97 files with LBA, size, timestamp, SHA-1, packing and unpacked size |
| cd32-platformnotes-doc | Platform checklist — what to look for on any CD32 or CDTV disc. Shared by every Amiga CD pipeline in this series; this repository does not keep a copy |
This matters here, because the game executable's three large hunks are compressed and their contents therefore have two different addresses.
- File offset means a byte position in a file exactly as it sits on the
disc. Written
0x1234and always qualified with the file name. - Hunk offset means a byte position inside a decompressed hunk, counted
from the first byte of that hunk's image in memory.
/QuestIIunpacks to_work/unpacked/QuestII.hunk1,.hunk2and.hunk4, and every address quoted for the game's code and data in these documents is a hunk offset into one of those three files, named explicitly. - Absolute addresses printed by a disassembler (
$36f70,$25800) are unrelocated hunk-relative values as they sit in the file. AmigaDOS adds the target hunk's base at load time, so they are useful as identities and useless as addresses. They are never quoted here as memory locations. - Copper-list offsets are file offsets into
QuestII.hunk4, whose list starts at byte 2, not byte 0.
Capstone's M68K backend prints wrong-but-plausible immediates, displacements
and branch targets on this code. Every constant in these documents was
re-read from the raw bytes, and tools/m68kdis.py prints the bytes beside
every instruction so that the re-reading is reproducible.