|
|
||
![]() |
||
|
|
||
|
|
||
|
|
![]()
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.