The current URL is datacrystal.tcrf.net.
Lord Monarch: Tokoton Sentou Densetsu/Notes: Difference between revisions
m (Hawk moved page Lord Monarch Tokoton Sentou Densetsu/Notes to Lord Monarch: Tokoton Sentou Densetsu/Notes) |
|||
(4 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{notes}} | |||
== Ressources loaders == | == Ressources loaders == | ||
Line 13: | Line 15: | ||
It's a simplified LZ compression scheme (see LZ2, it's even simpler). | It's a simplified LZ compression scheme (see LZ2, it's even simpler). | ||
Each time a mask bit is read, the program checks if this is the last (after having read it). If this is the case, a new mask byte is read from the stream (which will be read after the current mask bit is processed ; that means that the data bytes needed for decoding the current mask bit are stored after the new mask byte). | |||
* first 2 bytes : final_size of the decoded buffer. Decoding routine stops when this number is reached | |||
* read first mask byte | |||
* while the decoded stream is smaller than final_size | |||
** read current_mask_bit (then loading another mask byte if needed) | |||
** if current_mask_bit is 1 : uncompressed mode. Move next byte in source stream to dest stream. | |||
** if current_mask_bit is 0 : window_copy_mode. We'll copy (delta_count + 1) bytes from dest[current_position - delta] to dest[current_position]. | |||
*** next two bytes from the stream are dddddddd and DDDDNNNN under binary format | |||
*** delta = DDDDdddddddd and delta_count = NNNN | |||
=== LZ2 compression scheme === | === LZ2 compression scheme === | ||
Line 39: | Line 50: | ||
**** delta = 000DDDDD dddddddd | **** delta = 000DDDDD dddddddd | ||
**** if ccc = 0 then delta_count = next byte in source else delta_count = bbb + 2 | **** if ccc = 0 then delta_count = next byte in source else delta_count = bbb + 2 | ||
{{Internal Data}} |
Latest revision as of 20:51, 28 January 2024
The following article is a Notes Page for Lord Monarch: Tokoton Sentou Densetsu.
Ressources loaders
Ressources data in the game begin by an identifier, that can be :
- 83 : LZ1 compressed data
- 84 : LZ2 compressed data
The load_ressource routine starts at 0x2BAA, reads the header and directs the program to the decoding routine, according to the header.
LZ1 compression scheme
The decompression routine starts at 0x3020.
It's a simplified LZ compression scheme (see LZ2, it's even simpler).
Each time a mask bit is read, the program checks if this is the last (after having read it). If this is the case, a new mask byte is read from the stream (which will be read after the current mask bit is processed ; that means that the data bytes needed for decoding the current mask bit are stored after the new mask byte).
- first 2 bytes : final_size of the decoded buffer. Decoding routine stops when this number is reached
- read first mask byte
- while the decoded stream is smaller than final_size
- read current_mask_bit (then loading another mask byte if needed)
- if current_mask_bit is 1 : uncompressed mode. Move next byte in source stream to dest stream.
- if current_mask_bit is 0 : window_copy_mode. We'll copy (delta_count + 1) bytes from dest[current_position - delta] to dest[current_position].
- next two bytes from the stream are dddddddd and DDDDNNNN under binary format
- delta = DDDDdddddddd and delta_count = NNNN
LZ2 compression scheme
The decompression routine starts at 0x3070.
It's a simplified LZ compression scheme : you can copy already decoded data in the stream. The compressed stream consists of masks (single bytes, read bit per bit, starting by LSB) and data, interleaved.
Each time a mask bit is read, the program checks if this is the last (after having read it). If this is the case, a new mask byte is read from the stream (which will be read after the current mask bit is processed ; that means that the data bytes needed for decoding the current mask bit are stored after the new mask byte).
- first 2 bytes : final_size of the decoded buffer. Decoding routine stops when this number is reached
- read first mask byte
- while the decoded stream is smaller than final_size
- read current_mask_bit (then loading another mask byte if needed)
- if current_mask_bit is 1 : uncompressed mode. Move next byte in source stream to dest stream.
- if current_mask_bit is 0 : it'll be window_copy_mode. We'll copy (delta_count + 1) bytes from dest[current_position - delta] to dest[current_position]. There are 2 ways of defining delta_count and delta.
- read current_mask_bit (then loading another mask byte if needed)
- if current_bit_mask is 0 : small window mode :
- read next two bits in mask (reloading mask if necessary)
- delta_count = 2 + (the number coded by last 2 binary digits) (be careful that the bits in the mask are read "in the wrong order")
- delta = next byte in source.
- if current_bit_mask is 1 : large window mode :
- read next byte in source as dddddddd (in binary)
- read next byte in source as DDDDDccc (in binary)
- delta = 000DDDDD dddddddd
- if ccc = 0 then delta_count = next byte in source else delta_count = bbb + 2
Internal Data for Lord Monarch: Tokoton Sentou Densetsu
| |
---|---|