Skip to content

Latest commit

 

History

History
259 lines (195 loc) · 10.6 KB

File metadata and controls

259 lines (195 loc) · 10.6 KB

11 — Archaeology: a title screen for a different game, and a pub in Sheffield

Ten CD32 discs, ten discs with leftovers. The platform checklist's question has been inverted for a while — is there a CD32 disc that was cleaned up, and what does one look like? — and this is not it either.

The title screen still calls the game Masters

/HeroLogo.Pak is 5,576 bytes on the disc, 40,000 unpacked, a 320 × 200 five-plane screen, and it is the first thing the game shows after the publisher logo. Rendered:

                        HEROQUEST (TM)
                             II
                        M  A  S  T  E  R  S

    Heroquest © 1994 Hasbro International Inc.
    All Rights Reserved. Heroquest was developed
             in association with Games Workshop

The game is called Legacy of Sorasil. That name is the PVD volume identifier, the application identifier, the three floppy volume names, all 91 paths in the loader's file table and the boot script's three Assigns. It is not on the title screen. The subtitle drawn into the retail logo, under HEROQUEST II, is MASTERS.

This is Liberation's leftover in a different form. That disc carries its previous title in every path; this one carries a previous subtitle in the one place a player actually sees, and the name that shipped everywhere else never made it back into the artwork.

It is also the only place on the disc where the licence appears. There is no Games Workshop, Hasbro or Milton Bradley string in the executable, in the three language files or in any other file: the entire legal notice is 8 rows of pixels in plane 0 of one bitmap.

The credits, and the man who cut the master

/CreditsG.Bin block 2 is a single-bitplane 320 × 3,100 scroll (doc 07), legible end to end:

Programming              Kevin Dudley
Graphics                 Matthew Furniss
Additional Programming   Michael Hart
Music                    Chris Adams
Sound Effects            Pat Phelan
Game Design              Paul Green
Assistant Producer       Simon Short
Producer                 Tony Casson
Manual                   Kai Macmahon, Steve McKevitt, Martin Calpin
Quality Assurance        Lee Campbell, Tony Howe, Rob Millington
                         THE END

and then the whole list again, so the scroll wraps without a copy.

Kevin Dudley is the data preparer in the primary volume descriptor (doc 01). The person who ran ISOCD on the afternoon of 15 June 1994 is the person the game's own credits call the programmer, and the two halves of the disc agree without either knowing about the other. That is the third disc in this series where the trick works — Legends' Richard Teather is in a photograph on its credits screen, Marvin's Stewart.. is one of its producers — and it is still the cheapest attribution on the format.

And the credits do not mention Imagitec. The music player linked into the executable says Imagitec ProTracker Replay Routine....(C)Copyright 1991 Imagitec Design Ltd.... (doc 09), which is a different studio, and no screen in the game names it. Gloom's credits name its cruncher's author; this disc's credits name ten people and not the company whose code plays every note.

FrogAndParrot

QuestII.hunk1 + 0x15474 holds the NUL-terminated string

FrogAndParrot

and the routine at 0x15650 loads its address into a6 and then calls the GetCopyNV wrapper — so it is the name attached to the game's saved position, and on a successful load a word four bytes past its end is cleared. It is not referenced anywhere else and it is not in any of the three language files, so the player never sees it.

The Frog and Parrot is a pub on Division Street in Sheffield, a few minutes' walk from where Gremlin Graphics had its offices. It is where a default save name comes from when nobody expects the string to leave the building. Liberation put both its authors' surnames in a random-name table; Marvin's music modules carry two private postal addresses; this one names the local.

A publisher logo with the copyright removed, in the wrong directory

The disc carries the Gremlin Graphics logo screen twice.

/Gremlin.Pak          14,770 B on disc -> 40,000   named by the loader, disk 1
/Sketch/Gremlin.Pak   14,547 B on disc -> 40,000   named by NOTHING

They are the same picture. Unpacked they differ in 220 bytes out of 40,000, and the differences are confined to plane 0, rows 192–199 — the bottom eight scanlines. Rendered, the version the loader uses has

© 1994 Gremlin Graphics Software Limited.

along the bottom, and the copy in Sketch/ does not. The disc ships the pre-copyright draft of its publisher's logo, in the directory that holds the nine dungeon illustrations, where it is the only 40,000-byte file among nine 32,000-byte ones, referenced by no string on the disc.

It is one of seven files on the disc that no path string names; the other six are the executable, the boot script, loaderblackpal and the three C: commands, all of which the boot chain reaches by name (doc 03).

Level.Map, named and absent

The loader's file table holds 91 paths and 90 of them exist. The ninety-first is

QuestII.hunk2 + 0xb2be    Legacy of Sorasil DISK 2:Level.Map

It sits at the very end of the table, immediately after CHARTS/VENTHRAX.MAP — the last of the nine dungeon maps — and immediately before the string input.device. So the table is: nine dungeon maps, then a tenth map called Level.Map, then the end.

Charts/*.Map are all exactly 32,768 bytes, a 64 × 64 grid of 8-byte cells (doc 07). A tenth file of that family, named in the loader, absent from the disc, is a tenth dungeon — or a scratch level the code still opens.

Empty slots

Three containers ship with slots that point nowhere.

OverG.Rnc has eight entries and its table reads

32, 11552, 22010, 31356, 0, 43168, 43168, 43168

Entry 4 is zero — an empty slot between four overworld screens and the music. Entries 5, 6 and 7 all point at the same block, which is the artifact module: three regions of the game asking for one tune.

CreditsG.Bin block 1 has 29 entries of which the last three all point at the end of the file, and entry 7 duplicates entry 8's offset: four empty slots in one table.

Charts/*.Map byte 7 is zero in all nine files — 4,096 cells each, 36,864 bytes across the disc, a field of the map record that was reserved and never used.

224 unused colour entries is Gloom's version of this; here it is a byte per map cell and four container slots.

Nine placeholders in the shipped text

The three language files (doc 08) carry, identically in all three:

entry   0,  1   '00000000'
entry  85, 86   '00'
entry  87, 88   '0000'
entry  91, 92   '76543210'
entry  89, 90   '..'
entry 343       '  '
entry 344, 345  '0'

76543210 is the one that gives it away: a descending run is what somebody types to check which digit lands in which column. Each of these is the right length for its field and the wrong content, which is the checklist's definition of a placeholder, and each shipped three times over.

Beside them, seven entries — 2, 3, 4, 322, 323, 326 and 327 — are the empty string with live pointers into them.

The ending was never translated

Entries 304–321 of the string table are the complete closing narration of the game, eighteen consecutive strings, and they are byte-identical in English.Bin, Deutsch.Bin and Francais.Bin. A German or French player who defeats Venthrax is told, in English, that "your names shall be in the history books for aeons to come."

LOAD, SAVE, RESET and EXIT were not translated either, though the eight save-slot labels beside them were.

A floppy patch disk that does not exist

Text entry 94, in all three languages:

Please insert Legacy of Sorasil Patch

The boot script assigns DISK 1:, DISK 2: and DISK 3: (doc 03) and the loader's file table names only those three. Legacy of Sorasil Patch is a fourth volume that nothing on this disc assigns and no path uses — a patch floppy from the A1200 release's support life, still prompted for by a CD.

The machinery behind the prompt is on the disc too: a complete Lock / Examine / UnLock volume-name wait loop at hunk1 + 0x156a0, with the right mouse button as its cancel, and no bsr, jsr, jmp or longword reference to it anywhere in the executable (doc 10). It also could not work if it were called: the name it compares against is 22 characters, Legacy of Sorasil DISK, and the CD's volume identifier is seventeen.

Three Red Book tracks nothing plays

Five audio tracks, 31 minutes 42 seconds. The only CD_PLAYTRACK call site passes 2 or 3, and the "track finished" handler toggles strictly between 2 and 3 (doc 09). Tracks 4, 5 and 6 — 7 minutes 15 seconds, 9.8 % of the whole disc — are unreachable. One of them is ten seconds long, which is a sting or a jingle; two are three and a half minutes each.

Two symbols with nothing behind them

/loaderblackpal is the only file on the disc with a symbol table, and two of its thirteen symbols are BLUEBITS and GREENBITS, both with the value 0x006 — which is also START. Three labels at one address, in a 228-byte program whose entire palette code writes zeros to 32 registers. There is no blue or green anything in it. The likeliest reading is a fade that was written per colour channel and then deleted, leaving the labels; the disc does not settle it.

Two things that look like defects

Recorded because they are measurable, not because the game visibly misbehaves.

The interrupt pair does not match. Start-up calls AddTimerInt (lowlevel −72) and throws away the handle it returns; shutdown calls RemVBlankInt (−108) with whatever is in a5. There is no AddVBlankInt (−102) and no RemTimerInt (−78) in the file (doc 05).

The save writes 24 bytes and reads 238. StoreNV is handed (238 / 10) + 1 where GetCopyNV's result is copied out 238 bytes at a time (doc 10). Gloom stores two and reads twenty; this is the same defect, larger, and with the arithmetic that caused it still visible as a divu.w #10.

Seven characters, and one you cannot strings

QuestII.hunk2 + 0x36e3 holds seven records 128 bytes apart, each beginning with a NUL-padded name and carrying its own index:

Ravenslock  Grimbeard  Stormbow  Celeste  Oakheart  Haxar  Calorflame

Haxar is five characters and vanishes from any strings run with a minimum length of six — which is exactly how it was nearly missed here. What made it findable was the gap: six names at a perfectly even 128-byte stride and one step of 256.