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

INTRODUCTION

This information has been obtained by studying the ROM image.  I haven't had time to disassemble the ROM code (yet!), nor have I 'double checked' this document, so every byte might not be perfectly accurate. You can send comments / corrections to my email address above.

MOVE / TIMING STRUCTURE

Moves / Timing start 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:
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 a 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

It's not really all that complex. If you map out one or two moves by hand, you'll quickly get the hang of it. For anyone that has the time to write a PC based emulator, this should make it real easy to duplicate the exact game play. (Hint: When I finish the DL ROM, it will be convertible to this format...)

Now, if you've made it down this far, here comes the bonus round. Since I've *never* seen anything on the net about programming the LDP-1450 character generation, here it is: (Thanks to Ruben Panossian for preliminary information on this!)

This is a very brief overview, and assumes you have some experience sending commands to the laserdisc player. The LDP-1450 supports up to 3 lines of 10 characters text display. Once again, this has been gleamed by studying the ROM output. If anyone has any additional information, please share it with the rest of 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: 

I'm not an English major, so don't expect this document to be perfect.
I'm not a professional coder either, so don't expect the code to be perfect.
I'm available for dating, and possibly for hire…. :)  (Hey, it never hurts to plug yourself, right?)

I'm not liable for any damage you do to yourself, your computer, or your Dragon's Lair 2 machine.  If you follow these directions and it doesn't work – I'm not liable.  If your game catches fire because of an electrical design flaw, I'm not liable.  If tornadoes simultaneously appear in Kansas and wipeout half the state coinciding with the exact moment you power up your system – I'm still not liable. (Get the picture?)  Since this is free, I can't guarantee that it will work for you. (But, I haven't gotten any complaints so far!) (Whew!)

 


QUESTIONS? COMMENTS? PROBLEMS?
Contact Us

HOME | LASER GAMES | LASER COMMUNITY | TECH CENTER

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