HACKING AROUND THE LAIR II - June 18, 1999
Written by Robert DiNapoli

INTRODUCTION

This information has been obtained by studying the Dragon's Lair II ROM image (Leland, USA).  I haven't had time to disassemble the ROM code, so every byte might not be perfectly accurate.

MOVE / TIMING STRUCTURE

Moves and timing starts at location 0x53BE in the ROM image.  (I'm not sure which version of the image I have.)

Structures are either 14 or 28 bytes long, as follows:
If the 3rd byte is 03, 04, or 06, the structure will be 14 bytes long.
If the 3rd byte is 00, 01, or 05, the structure will be 28 bytes long.

If the 3rd byte is 00, 01, or 05, use this table:

Byte#  
1 Current level
2 Move #
3 00 - First move of the level
  01 - Any other move on the level
  05 - Last move on the level
4 Correct move to continue
  01=up, 03=right, 05=down, 07=left, 0a=sword
5-6 Starting frame for move
7-8 Ending frame for move
9-10 Frame on which to begin timing for move
11-12 Frame on which to end timing for move
13-14 Last frame to play before showing death scene (if incorrect move made)
15 Current level
16 Move #
17 02 - unknown
18 00 - unknown
19-20 Starting frame for death scene
21-22 Ending frame for death scene
23-28 00 - unknown

 

If the 3rd byte is 04, use this table:
This structure is used when a player can grab a treasure.

Byte#  
1 Current level
2 Move #
3 04 - treasure
4 Correct move to get treasure
  01=up, 03=right, 05=down, 07=left, 0a=sword
5-6 Starting frame to grab treasure scene
7-8 Ending frame to grab treasure scene
9-14 00 - unknown

 

If the 3rd byte is 03, use this table:
This is used to show a different death scene if the player doesn't move.

Byte#  
1 Current level
2 Move #
3 03 - alternate move (or lack of a move)
4 00 - if the player doesn't move, play the following death scene
5-6 Starting frame for death scene
7-8 Ending frame for death scene

 

If the 3rd byte is 06, use this table:
This structure is used to tell the system that there is a new level.  After the player dies, he will be returned to this starting point.

Byte#  
1 Current level
2 00 - unknown
3 06 - start of a new level
4 00 - unknown
5-6 Starting frame of scene to play (Usually Dirk's resurrection)
7-8 Ending frame of scene to play
9-14 00 - unknown

 

Now, a very brief overview on programming the LDP-1450 character generation.  (Thanks to Ruben Panossian for preliminary information on this!)

This assumes you have some experience sending general commands to the laserdisc player.  The LDP-1450 supports a text display of up to 3 lines of 10 characters.  Once again, this has been gleaned by studying the ROM output.  If you have any additional information, please share it with us!

Send:

0x80 0x00 xpos ypos status - to set up the text display

xpos is the starting x position for display of the text.
ypos is the starting y position for display of the text.
status must be a bit field.  I haven't been able to completely break it down yet.  It controls the size of the font, how the font is displayed, whether the font has a border, etc.  0x51 and 0x30 produce nicely readable displays.

0x81 - to turn on the user display

0x82 - to turn off the user display

0x80 0x01 0x00 text - to put text on the screen

Here's a quick example:
0x80 0x00 0x05 0x05 0x51 0x81 0x80 0x01 0x00 Hello (convert to ascii hex)

USAGE NOTE

You must wait for the status code return from the player after each byte.  Sending bytes without waiting for the return code (0x0a) from the player will result in the player becoming thoroughly confused (and no text displayed, to boot!).  You can soft-reset the player by sending:  0x82 0x56

DISCLAIMER

D-L-P.com is not responsible for any adverse effects resulting from your ROM hacking!


QUESTIONS? COMMENTS? PROBLEMS?
Contact Us

HOME | LASER GAMES | LASER COMMUNITY | TECH CENTER

This website was created by Jeff Kinder & Dave Hallock, 1997 - 2014.
All trademarks and copyrighted materials are property of their respective owners.