Site Map | Contact Info | Home  
 ROMHACK Toolbox
 Ordering Info
 Code Disassembly
  Bega's Battle
  Thayer's Quest
 My Gameroom



Commented code   view | download (94KB)   

Although TQ laserdisc controls were the same as DL and SA, the code itself was a bit more complicated. Gone are the simple directional movements based off of joystick input. TQ code involved reading a keyboard, synthesizing speech, and keeping track of object inventory. Tackling TQ code was a logical next step after decoding DL/SA.

Vulgar Youths
If you're familiar with Thayer's Quest, you know that at the start of the game, you type in your name and the game speaks it back to you using speech synthesis.  For the mischievous teenagers of the time this was a chance to have some fun. However, the programmers must have been one step ahead of those vulgar youths because I came across a previously undocumented "list" of offending words that the programmers included. The list was a list of "bad words" that the game would NOT say.  Needless to say I was very surprised when I came across these words while hacking the code!  I got a big laugh out of it once I realized what they were for. You can find these words at L1812. Warning, don't go there if you're easily offended.

Thayer's Quest Swearing ROMHACK available here!

Familiar Territory
A large majority of the TQ code appeared to be "lifted" from Dragon's Lair.  For example, the LDV1000 routines look almost exactly the same.

Talking Up a Storm
If you're a Daphne user, you probably see words on the screen like this "CUNNGRADJULL-/A/-SHUNS". These are the raw psuedo-text words that the TQ code turns into speech. Words, like this, are sent through a preprocess routine where they are subjected to a set of "speech rules".  These rules are designed to catch words or syllables that aren't always pronounced as they are spelled. This helps make the speech more human sounding. The complete rule table can be found here.  Below is an excerpt from the rule table for G.  Think about how differently a G sounds in the word "GEORGE" and the word "GET".

"!(GE)N=",041h,"1", 0Ah
"!(GEO)FFREY!=",041h,"1", 0Ah 

Once the "rules" are applied, the phrase of psuedo-text for the speech goes through a routine where it is broken down into 5 different parameters. Each parameter is individually set in order to more closely mimic human sounding speech. The parameters are:

1) Duration/Phonetic
2) Inflection 
3) Speech Rate
4) Amplitude
5) Filter Frequency

Here are two examples of pseudo-text that has been broken down into it's individual parameters.

For more detailed information on the speech process, check out this manual, MockingboardManual.doc, for the old Mockingboard Sound Board.  A quick search for the web should give you lots of info on this board.

Save Your Game
TQ provides 10 slots for individuals to save there game status. The information is saved in RAM so that players can come back and resume play at a later time. Separate sections of code handle the saving and recalling of game status. Check out these routines at L0976.

Game Cartridges
TQ's code is arranged such that U33 EPROM contains programming for the game such as keyboard input, speaking, dropping/taking items, timers, etc. Whereas U1 EPROM (removable cartridge) contains info for the game such as object names, hints, frame numbers, etc. Commented code for the cartridge contents can be found at LC000.

Points of Interest
A slight twist to TQ is that it is two different games in one. By utilizing different Scene Data and switching between the LEFT and RIGHT AUDIO channels, the code is able offer two versions of gameplay. During one version, the first set of scene data is played and the LEFT channel is turned ON. When an alternate game is played, an new set of scene data is loaded in and then the RIGHT channel is turned ON. The Scene Data for AUDIO track 1 is located at $D000. The Scene Data for AUDIO track 2 is located at $D800.

For some reason the values $52, $44 and $49 are stored at $BE2D-$BE2F during startup near L00D2. To the untrained hacker this may appear to be nothing. But a seasoned lasergamer should recognize that these values correspond to the ASCII characters, "R","D","I". Did you catch that?