Wikifang:Telefang 1 Translation Patch/NatsumeGB compression: Difference between revisions
Jump to navigation
Jump to search
(Created page with "Malias compression is the compression used in multiple Smilesoft games, namely, at least Telefang and Medarot 1. It is a modified implementation of the LZ77 algorithm, which wor...") |
(rename to NatsumeGB compression) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
'''NatsumeGB compression''' is the compression algorithm used in numerous Game Boy Natsume games, namely, at least Telefang and Medarot. It is a modified implementation of the LZ77 algorithm, which works by referencing previously decompressed data using length-distance pairs. [http://en.wikipedia.org/wiki/LZ77_and_LZ78_%28algorithms%29 Wikipedia] has a good description of the algorithm. | |||
Malias compression | NatsumeGB was formerly called Malias compression after [http://s15.zetaboards.com/Tulunk_Village/topic/515644/ Malias], the person who wrote the first decompresser. | ||
Implementation of the | Implementation of the NatsumeGB compression in pseudocode: | ||
<pre>compressed = readbyte() | <pre>compressed = readbyte() | ||
Line 10: | Line 10: | ||
while bytes < total: # bytes is number of bytes decompressed | while bytes < total: # bytes is number of bytes decompressed | ||
modes = readshort() # Contains modes for the next 10 bytes | modes = readshort() # Contains modes for the next 10 bytes | ||
for mode in bits(modes): | |||
if mode == 0x1: # Copy mode | |||
loc = -(readshort() & 0x7ff) | loc = -(readshort() & 0x7ff) | ||
num = lastbyte >> 3 & 0x1f + 0x03 | num = lastbyte >> 3 & 0x1f + 0x03 | ||
Line 21: | Line 20: | ||
else: # Insert mode | else: # Insert mode | ||
data += readbyte()</pre> | data += readbyte()</pre> | ||
== Games that use the compression == | |||
* Keitai Denjuu Telefang | |||
* Medarot 1 | |||
* Medarot 2 | |||
* Medarot 3 | |||
* Medarot 4 (assumed) | |||
* Medarot 5 (assumed) | |||
* Croc 2 | |||
== Decompression tools == | == Decompression tools == | ||
* [http://s15.zetaboards.com/Tulunk_Village/topic/515644/ Malias' Telefang Tools] can decompress and recompress the graphics with ease, provided locations. | * [http://s15.zetaboards.com/Tulunk_Village/topic/515644/ Malias' Telefang Tools] can decompress and recompress the graphics with ease, provided locations. | ||
* [https://github.com/Sanky/romhacking/blob/master/telefang/punika.py punika] is a simple implementation in Python which decompresses all compressed graphics at once, working off tables in the ROM. | * [https://github.com/Sanky/romhacking/blob/master/telefang/punika.py punika] is a simple implementation in Python which decompresses all compressed graphics at once, working off tables in the ROM. |
Latest revision as of 08:11, 16 November 2020
NatsumeGB compression is the compression algorithm used in numerous Game Boy Natsume games, namely, at least Telefang and Medarot. It is a modified implementation of the LZ77 algorithm, which works by referencing previously decompressed data using length-distance pairs. Wikipedia has a good description of the algorithm.
NatsumeGB was formerly called Malias compression after Malias, the person who wrote the first decompresser.
Implementation of the NatsumeGB compression in pseudocode:
compressed = readbyte() if compressed != 0x00: total = readshort() # Total length of the graphics while bytes < total: # bytes is number of bytes decompressed modes = readshort() # Contains modes for the next 10 bytes for mode in bits(modes): if mode == 0x1: # Copy mode loc = -(readshort() & 0x7ff) num = lastbyte >> 3 & 0x1f + 0x03 loc += bytes-1 do num times: data += data[loc] loc += 1 else: # Insert mode data += readbyte()
Games that use the compression[edit]
- Keitai Denjuu Telefang
- Medarot 1
- Medarot 2
- Medarot 3
- Medarot 4 (assumed)
- Medarot 5 (assumed)
- Croc 2
Decompression tools[edit]
- Malias' Telefang Tools can decompress and recompress the graphics with ease, provided locations.
- punika is a simple implementation in Python which decompresses all compressed graphics at once, working off tables in the ROM.