don't click here

S2 Nick Arcade's unknown compression is used in Kid Chameleon

Discussion in 'Engineering & Reverse Engineering' started by Clownacy, Oct 18, 2016.

  1. Clownacy

    Clownacy

    Tech Member
    1,060
    607
    93
    Having got my feet wet with LZSS, I read up on Kosinski, Saxman, and Comper's compression schemes, all of which were supported in my Captain PlaneEd tool. I then remembered my tool supported an addition compression, which it inherited from the original PlaneEd project: "Kid Chameleon". The format was cracked some time ago, and (de)compressors were made for it.

    Out of curiosity, I hunted down the original ASM decompressor in a Kid Chameleon disassembly. To my amazement, the decompressor looked identical to the ASM decompressor I'd seen in a Nick Arcade disassembly mere days ago. I used one of the Chameleon decompressors to decompress S2NA GHZ's chunks, and it worked.

    Kid Chameleon also used Enigma, and was developed by STI. This leads me to the question of if this compression was a fourth 'standard' compression offered by Sega themself, along with Nemesis, Engima, and Kosinski. Though, as MainMemory pointed out to me, this could also be STI's own in-house compression.

    You can find the decompressor labelled sub_13684 in the Kid Chameleon disassembly. A copy of it is below. It can be found in the Nick Arcade disassembly under the name UnknownDec.

    Code (ASM):
    1. sub_13684:              ; CODE XREF: Load_InGame:loc_11C10p
    2.                     ; SomeDecToVRAM+8p ...
    3.         moveq   #0,d0
    4.         move.w  #$7FF,d4
    5.         moveq   #0,d5
    6.         moveq   #0,d6
    7.         move.w  a3,d7
    8.         subq.w  #1,d2
    9.         beq.w   loc_13A24
    10.         subq.w  #1,d2
    11.         beq.w   loc_139A6
    12.         subq.w  #1,d2
    13.         beq.w   loc_13928
    14.         subq.w  #1,d2
    15.         beq.w   loc_138AA
    16.         subq.w  #1,d2
    17.         beq.w   loc_1382E
    18.         subq.w  #1,d2
    19.         beq.w   loc_137B0
    20.         subq.w  #1,d2
    21.         beq.w   loc_13736
    22.  
    23. SomDec_BitPos0:             ; CODE XREF: sub_13684+108j
    24.                     ; sub_13684+2C0j ...
    25.         move.b  (a0)+,d1
    26.         add.b   d1,d1
    27.         bcs.s   SomDec_BP0_DrcCpy
    28.         move.l  a2,a6
    29.         add.b   d1,d1
    30.         bcs.s   SomDec_BP0_LongRef
    31.         move.b  (a1)+,d5
    32.         suba.l  d5,a6
    33.         add.b   d1,d1
    34.         bcc.s   loc_136D0
    35.         move.b  (a6)+,(a2)+
    36.  
    37. loc_136D0:              ; CODE XREF: sub_13684+48j
    38.         move.b  (a6)+,(a2)+
    39.         move.b  (a6)+,(a2)+
    40.         cmp.w   a2,d7
    41.         bls.s   loc_13724
    42.         bra.w   loc_1382E
    43. ; ---------------------------------------------------------------------------
    44.  
    45. SomDec_BP0_LongRef:         ; CODE XREF: sub_13684+40j
    46.         lsl.w   #3,d1
    47.         move.w  d1,d6
    48.         and.w   d4,d6       ; d4 = $7FF
    49.         move.b  (a1)+,d6
    50.         suba.l  d6,a6
    51.         add.b   d1,d1
    52.         bcs.s   SomDec_BP0_LongRef_2or3
    53.         add.b   d1,d1
    54.         bcs.s   loc_13706
    55.         bra.s   loc_13708
    56. ; ---------------------------------------------------------------------------
    57.  
    58. SomDec_BP0_LongRef_2or3:        ; CODE XREF: sub_13684+64j
    59.         add.b   d1,d1
    60.         bcc.s   SomDec_BP0_LongRef_2
    61.         moveq   #0,d0
    62.         move.b  (a1)+,d0    ; read amount of bytes
    63.         beq.s   loc_13716
    64.         subq.w  #6,d0
    65.         bmi.s   loc_1371C
    66.  
    67. loc_136FE:              ; CODE XREF: sub_13684+7Cj
    68.         move.b  (a6)+,(a2)+
    69.         dbf d0,loc_136FE
    70.  
    71. SomDec_BP0_LongRef_2:           ; CODE XREF: sub_13684+6Ej
    72.         move.b  (a6)+,(a2)+
    73.  
    74. loc_13706:              ; CODE XREF: sub_13684+68j
    75.         move.b  (a6)+,(a2)+
    76.  
    77. loc_13708:              ; CODE XREF: sub_13684+6Aj
    78.         move.b  (a6)+,(a2)+
    79.         move.b  (a6)+,(a2)+
    80.         move.b  (a6)+,(a2)+
    81.         cmp.w   a2,d7
    82.         bls.s   loc_1372C
    83.         bra.w   loc_13A24
    84. ; ---------------------------------------------------------------------------
    85.  
    86. loc_13716:              ; CODE XREF: sub_13684+74j
    87.         move.w  #0,d0
    88.         rts
    89. ; ---------------------------------------------------------------------------
    90.  
    91. loc_1371C:              ; CODE XREF: sub_13684+78j
    92.         move.w  #$FFFF,d0
    93.         moveq   #1,d2
    94.         rts
    95. ; ---------------------------------------------------------------------------
    96.  
    97. loc_13724:              ; CODE XREF: sub_13684+52j
    98.         move.w  #1,d0
    99.         moveq   #5,d2
    100.         rts
    101. ; ---------------------------------------------------------------------------
    102.  
    103. loc_1372C:              ; CODE XREF: sub_13684+8Cj
    104.         move.w  #1,d0
    105.         moveq   #1,d2
    106.         rts
    107. ; ---------------------------------------------------------------------------
    108.  
    109. SomDec_BP0_DrcCpy:          ; CODE XREF: sub_13684+3Aj
    110.         move.b  (a1)+,(a2)+
    111.  
    112. loc_13736:              ; CODE XREF: sub_13684+32j
    113.                     ; sub_13684+186j ...
    114.         add.b   d1,d1
    115.         bcs.s   loc_137AE
    116.         move.l  a2,a6
    117.         add.b   d1,d1
    118.         bcs.s   loc_13756
    119.         move.b  (a1)+,d5
    120.         suba.l  d5,a6
    121.         add.b   d1,d1
    122.         bcc.s   loc_1374A
    123.         move.b  (a6)+,(a2)+
    124.  
    125. loc_1374A:              ; CODE XREF: sub_13684+C2j
    126.         move.b  (a6)+,(a2)+
    127.         move.b  (a6)+,(a2)+
    128.         cmp.w   a2,d7
    129.         bls.s   loc_1379E
    130.         bra.w   loc_138AA
    131. ; ---------------------------------------------------------------------------
    132.  
    133. loc_13756:              ; CODE XREF: sub_13684+BAj
    134.         lsl.w   #3,d1
    135.         move.w  d1,d6
    136.         and.w   d4,d6
    137.         move.b  (a1)+,d6
    138.         suba.l  d6,a6
    139.         add.b   d1,d1
    140.         bcs.s   loc_1376A
    141.         add.b   d1,d1
    142.         bcs.s   loc_13780
    143.         bra.s   loc_13782
    144. ; ---------------------------------------------------------------------------
    145.  
    146. loc_1376A:              ; CODE XREF: sub_13684+DEj
    147.         add.b   d1,d1
    148.         bcc.s   loc_1377E
    149.         moveq   #0,d0
    150.         move.b  (a1)+,d0
    151.         beq.s   loc_13790
    152.         subq.w  #6,d0
    153.         bmi.s   loc_13796
    154.  
    155. loc_13778:              ; CODE XREF: sub_13684+F6j
    156.         move.b  (a6)+,(a2)+
    157.         dbf d0,loc_13778
    158.  
    159. loc_1377E:              ; CODE XREF: sub_13684+E8j
    160.         move.b  (a6)+,(a2)+
    161.  
    162. loc_13780:              ; CODE XREF: sub_13684+E2j
    163.         move.b  (a6)+,(a2)+
    164.  
    165. loc_13782:              ; CODE XREF: sub_13684+E4j
    166.         move.b  (a6)+,(a2)+
    167.         move.b  (a6)+,(a2)+
    168.         move.b  (a6)+,(a2)+
    169.         cmp.w   a2,d7
    170.         bls.s   loc_137A6
    171.         bra.w   SomDec_BitPos0
    172. ; ---------------------------------------------------------------------------
    173.  
    174. loc_13790:              ; CODE XREF: sub_13684+EEj
    175.         move.w  #0,d0
    176.         rts
    177. ; ---------------------------------------------------------------------------
    178.  
    179. loc_13796:              ; CODE XREF: sub_13684+F2j
    180.         move.w  #$FFFF,d0
    181.         moveq   #0,d2
    182.         rts
    183. ; ---------------------------------------------------------------------------
    184.  
    185. loc_1379E:              ; CODE XREF: sub_13684+CCj
    186.         move.w  #1,d0
    187.         moveq   #4,d2
    188.         rts
    189. ; ---------------------------------------------------------------------------
    190.  
    191. loc_137A6:              ; CODE XREF: sub_13684+106j
    192.         move.w  #1,d0
    193.         moveq   #0,d2
    194.         rts
    195. ; ---------------------------------------------------------------------------
    196.  
    197. loc_137AE:              ; CODE XREF: sub_13684+B4j
    198.         move.b  (a1)+,(a2)+
    199.  
    200. loc_137B0:              ; CODE XREF: sub_13684+2Cj
    201.                     ; sub_13684+202j ...
    202.         add.b   d1,d1
    203.         bcs.s   loc_1382C
    204.         move.l  a2,a6
    205.         add.b   d1,d1
    206.         bcs.s   loc_137D0
    207.         move.b  (a1)+,d5
    208.         suba.l  d5,a6
    209.         add.b   d1,d1
    210.         bcc.s   loc_137C4
    211.         move.b  (a6)+,(a2)+
    212.  
    213. loc_137C4:              ; CODE XREF: sub_13684+13Cj
    214.         move.b  (a6)+,(a2)+
    215.         move.b  (a6)+,(a2)+
    216.         cmp.w   a2,d7
    217.         bls.s   loc_1381C
    218.         bra.w   loc_13928
    219. ; ---------------------------------------------------------------------------
    220.  
    221. loc_137D0:              ; CODE XREF: sub_13684+134j
    222.         lsl.w   #3,d1
    223.         move.w  d1,d6
    224.         and.w   d4,d6
    225.         move.b  (a1)+,d6
    226.         suba.l  d6,a6
    227.         add.b   d1,d1
    228.         bcs.s   loc_137E6
    229.         move.b  (a0)+,d1
    230.         add.b   d1,d1
    231.         bcs.s   loc_137FE
    232.         bra.s   loc_13800
    233. ; ---------------------------------------------------------------------------
    234.  
    235. loc_137E6:              ; CODE XREF: sub_13684+158j
    236.         move.b  (a0)+,d1
    237.         add.b   d1,d1
    238.         bcc.s   loc_137FC
    239.         moveq   #0,d0
    240.         move.b  (a1)+,d0
    241.         beq.s   loc_1380E
    242.         subq.w  #6,d0
    243.         bmi.s   loc_13814
    244.  
    245. loc_137F6:              ; CODE XREF: sub_13684+174j
    246.         move.b  (a6)+,(a2)+
    247.         dbf d0,loc_137F6
    248.  
    249. loc_137FC:              ; CODE XREF: sub_13684+166j
    250.         move.b  (a6)+,(a2)+
    251.  
    252. loc_137FE:              ; CODE XREF: sub_13684+15Ej
    253.         move.b  (a6)+,(a2)+
    254.  
    255. loc_13800:              ; CODE XREF: sub_13684+160j
    256.         move.b  (a6)+,(a2)+
    257.         move.b  (a6)+,(a2)+
    258.         move.b  (a6)+,(a2)+
    259.         cmp.w   a2,d7
    260.         bls.s   loc_13824
    261.         bra.w   loc_13736
    262. ; ---------------------------------------------------------------------------
    263.  
    264. loc_1380E:              ; CODE XREF: sub_13684+16Cj
    265.         move.w  #0,d0
    266.         rts
    267. ; ---------------------------------------------------------------------------
    268.  
    269. loc_13814:              ; CODE XREF: sub_13684+170j
    270.         move.w  #$FFFF,d0
    271.         moveq   #7,d2
    272.         rts
    273. ; ---------------------------------------------------------------------------
    274.  
    275. loc_1381C:              ; CODE XREF: sub_13684+146j
    276.         move.w  #1,d0
    277.         moveq   #3,d2
    278.         rts
    279. ; ---------------------------------------------------------------------------
    280.  
    281. loc_13824:              ; CODE XREF: sub_13684+184j
    282.         move.w  #1,d0
    283.         moveq   #7,d2
    284.         rts
    285. ; ---------------------------------------------------------------------------
    286.  
    287. loc_1382C:              ; CODE XREF: sub_13684+12Ej
    288.         move.b  (a1)+,(a2)+
    289.  
    290. loc_1382E:              ; CODE XREF: sub_13684+26j
    291.                     ; sub_13684+54j ...
    292.         add.b   d1,d1
    293.         bcs.s   loc_138A8
    294.         move.l  a2,a6
    295.         add.b   d1,d1
    296.         bcs.s   loc_1384E
    297.         move.b  (a1)+,d5
    298.         suba.l  d5,a6
    299.         add.b   d1,d1
    300.         bcc.s   loc_13842
    301.         move.b  (a6)+,(a2)+
    302.  
    303. loc_13842:              ; CODE XREF: sub_13684+1BAj
    304.         move.b  (a6)+,(a2)+
    305.         move.b  (a6)+,(a2)+
    306.         cmp.w   a2,d7
    307.         bls.s   loc_13898
    308.         bra.w   loc_139A6
    309. ; ---------------------------------------------------------------------------
    310.  
    311. loc_1384E:              ; CODE XREF: sub_13684+1B2j
    312.         lsl.w   #3,d1
    313.         move.b  (a0)+,d1
    314.         move.w  d1,d6
    315.         and.w   d4,d6
    316.         move.b  (a1)+,d6
    317.         suba.l  d6,a6
    318.         add.b   d1,d1
    319.         bcs.s   loc_13864
    320.         add.b   d1,d1
    321.         bcs.s   loc_1387A
    322.         bra.s   loc_1387C
    323. ; ---------------------------------------------------------------------------
    324.  
    325. loc_13864:              ; CODE XREF: sub_13684+1D8j
    326.         add.b   d1,d1
    327.         bcc.s   loc_13878
    328.         moveq   #0,d0
    329.         move.b  (a1)+,d0
    330.         beq.s   loc_1388A
    331.         subq.w  #6,d0
    332.         bmi.s   loc_13890
    333.  
    334. loc_13872:              ; CODE XREF: sub_13684+1F0j
    335.         move.b  (a6)+,(a2)+
    336.         dbf d0,loc_13872
    337.  
    338. loc_13878:              ; CODE XREF: sub_13684+1E2j
    339.         move.b  (a6)+,(a2)+
    340.  
    341. loc_1387A:              ; CODE XREF: sub_13684+1DCj
    342.         move.b  (a6)+,(a2)+
    343.  
    344. loc_1387C:              ; CODE XREF: sub_13684+1DEj
    345.         move.b  (a6)+,(a2)+
    346.         move.b  (a6)+,(a2)+
    347.         move.b  (a6)+,(a2)+
    348.         cmp.w   a2,d7
    349.         bls.s   loc_138A0
    350.         bra.w   loc_137B0
    351. ; ---------------------------------------------------------------------------
    352.  
    353. loc_1388A:              ; CODE XREF: sub_13684+1E8j
    354.         move.w  #0,d0
    355.         rts
    356. ; ---------------------------------------------------------------------------
    357.  
    358. loc_13890:              ; CODE XREF: sub_13684+1ECj
    359.         move.w  #$FFFF,d0
    360.         moveq   #6,d2
    361.         rts
    362. ; ---------------------------------------------------------------------------
    363.  
    364. loc_13898:              ; CODE XREF: sub_13684+1C4j
    365.         move.w  #1,d0
    366.         moveq   #2,d2
    367.         rts
    368. ; ---------------------------------------------------------------------------
    369.  
    370. loc_138A0:              ; CODE XREF: sub_13684+200j
    371.         move.w  #1,d0
    372.         moveq   #6,d2
    373.         rts
    374. ; ---------------------------------------------------------------------------
    375.  
    376. loc_138A8:              ; CODE XREF: sub_13684+1ACj
    377.         move.b  (a1)+,(a2)+
    378.  
    379. loc_138AA:              ; CODE XREF: sub_13684+20j
    380.                     ; sub_13684+CEj ...
    381.         add.b   d1,d1
    382.         bcs.s   loc_13926
    383.         move.l  a2,a6
    384.         add.b   d1,d1
    385.         bcs.s   loc_138CA
    386.         move.b  (a1)+,d5
    387.         suba.l  d5,a6
    388.         add.b   d1,d1
    389.         bcc.s   loc_138BE
    390.         move.b  (a6)+,(a2)+
    391.  
    392. loc_138BE:              ; CODE XREF: sub_13684+236j
    393.         move.b  (a6)+,(a2)+
    394.         move.b  (a6)+,(a2)+
    395.         cmp.w   a2,d7
    396.         bls.s   loc_13916
    397.         bra.w   loc_13A24
    398. ; ---------------------------------------------------------------------------
    399.  
    400. loc_138CA:              ; CODE XREF: sub_13684+22Ej
    401.         lsl.w   #2,d1
    402.         move.b  (a0)+,d1
    403.         add.w   d1,d1
    404.         move.w  d1,d6
    405.         and.w   d4,d6
    406.         move.b  (a1)+,d6
    407.         suba.l  d6,a6
    408.         add.b   d1,d1
    409.         bcs.s   loc_138E2
    410.         add.b   d1,d1
    411.         bcs.s   loc_138F8
    412.         bra.s   loc_138FA
    413. ; ---------------------------------------------------------------------------
    414.  
    415. loc_138E2:              ; CODE XREF: sub_13684+256j
    416.         add.b   d1,d1
    417.         bcc.s   loc_138F6
    418.         moveq   #0,d0
    419.         move.b  (a1)+,d0
    420.         beq.s   loc_13908
    421.         subq.w  #6,d0
    422.         bmi.s   loc_1390E
    423.  
    424. loc_138F0:              ; CODE XREF: sub_13684+26Ej
    425.         move.b  (a6)+,(a2)+
    426.         dbf d0,loc_138F0
    427.  
    428. loc_138F6:              ; CODE XREF: sub_13684+260j
    429.         move.b  (a6)+,(a2)+
    430.  
    431. loc_138F8:              ; CODE XREF: sub_13684+25Aj
    432.         move.b  (a6)+,(a2)+
    433.  
    434. loc_138FA:              ; CODE XREF: sub_13684+25Cj
    435.         move.b  (a6)+,(a2)+
    436.         move.b  (a6)+,(a2)+
    437.         move.b  (a6)+,(a2)+
    438.         cmp.w   a2,d7
    439.         bls.s   loc_1391E
    440.         bra.w   loc_1382E
    441. ; ---------------------------------------------------------------------------
    442.  
    443. loc_13908:              ; CODE XREF: sub_13684+266j
    444.         move.w  #0,d0
    445.         rts
    446. ; ---------------------------------------------------------------------------
    447.  
    448. loc_1390E:              ; CODE XREF: sub_13684+26Aj
    449.         move.w  #$FFFF,d0
    450.         moveq   #5,d2
    451.         rts
    452. ; ---------------------------------------------------------------------------
    453.  
    454. loc_13916:              ; CODE XREF: sub_13684+240j
    455.         move.w  #1,d0
    456.         moveq   #1,d2
    457.         rts
    458. ; ---------------------------------------------------------------------------
    459.  
    460. loc_1391E:              ; CODE XREF: sub_13684+27Ej
    461.         move.w  #1,d0
    462.         moveq   #5,d2
    463.         rts
    464. ; ---------------------------------------------------------------------------
    465.  
    466. loc_13926:              ; CODE XREF: sub_13684+228j
    467.         move.b  (a1)+,(a2)+
    468.  
    469. loc_13928:              ; CODE XREF: sub_13684+1Aj
    470.                     ; sub_13684+148j ...
    471.         add.b   d1,d1
    472.         bcs.s   loc_139A4
    473.         move.l  a2,a6
    474.         add.b   d1,d1
    475.         bcs.s   loc_13948
    476.         move.b  (a1)+,d5
    477.         suba.l  d5,a6
    478.         add.b   d1,d1
    479.         bcc.s   loc_1393C
    480.         move.b  (a6)+,(a2)+
    481.  
    482. loc_1393C:              ; CODE XREF: sub_13684+2B4j
    483.         move.b  (a6)+,(a2)+
    484.         move.b  (a6)+,(a2)+
    485.         cmp.w   a2,d7
    486.         bls.s   loc_13994
    487.         bra.w   SomDec_BitPos0
    488. ; ---------------------------------------------------------------------------
    489.  
    490. loc_13948:              ; CODE XREF: sub_13684+2ACj
    491.         add.w   d1,d1
    492.         move.b  (a0)+,d1
    493.         lsl.w   #2,d1
    494.         move.w  d1,d6
    495.         and.w   d4,d6
    496.         move.b  (a1)+,d6
    497.         suba.l  d6,a6
    498.         add.b   d1,d1
    499.         bcs.s   loc_13960
    500.         add.b   d1,d1
    501.         bcs.s   loc_13976
    502.         bra.s   loc_13978
    503. ; ---------------------------------------------------------------------------
    504.  
    505. loc_13960:              ; CODE XREF: sub_13684+2D4j
    506.         add.b   d1,d1
    507.         bcc.s   loc_13974
    508.         moveq   #0,d0
    509.         move.b  (a1)+,d0
    510.         beq.s   loc_13986
    511.         subq.w  #6,d0
    512.         bmi.s   loc_1398C
    513.  
    514. loc_1396E:              ; CODE XREF: sub_13684+2ECj
    515.         move.b  (a6)+,(a2)+
    516.         dbf d0,loc_1396E
    517.  
    518. loc_13974:              ; CODE XREF: sub_13684+2DEj
    519.         move.b  (a6)+,(a2)+
    520.  
    521. loc_13976:              ; CODE XREF: sub_13684+2D8j
    522.         move.b  (a6)+,(a2)+
    523.  
    524. loc_13978:              ; CODE XREF: sub_13684+2DAj
    525.         move.b  (a6)+,(a2)+
    526.         move.b  (a6)+,(a2)+
    527.         move.b  (a6)+,(a2)+
    528.         cmp.w   a2,d7
    529.         bls.s   loc_1399C
    530.         bra.w   loc_138AA
    531. ; ---------------------------------------------------------------------------
    532.  
    533. loc_13986:              ; CODE XREF: sub_13684+2E4j
    534.         move.w  #0,d0
    535.         rts
    536. ; ---------------------------------------------------------------------------
    537.  
    538. loc_1398C:              ; CODE XREF: sub_13684+2E8j
    539.         move.w  #$FFFF,d0
    540.         moveq   #4,d2
    541.         rts
    542. ; ---------------------------------------------------------------------------
    543.  
    544. loc_13994:              ; CODE XREF: sub_13684+2BEj
    545.         move.w  #1,d0
    546.         moveq   #8,d2
    547.         rts
    548. ; ---------------------------------------------------------------------------
    549.  
    550. loc_1399C:              ; CODE XREF: sub_13684+2FCj
    551.         move.w  #1,d0
    552.         moveq   #4,d2
    553.         rts
    554. ; ---------------------------------------------------------------------------
    555.  
    556. loc_139A4:              ; CODE XREF: sub_13684+2A6j
    557.         move.b  (a1)+,(a2)+
    558.  
    559. loc_139A6:              ; CODE XREF: sub_13684+14j
    560.                     ; sub_13684+1C6j ...
    561.         add.b   d1,d1
    562.         bcs.s   loc_13A22
    563.         move.l  a2,a6
    564.         add.b   d1,d1
    565.         bcs.s   loc_139C8
    566.         move.b  (a0)+,d1
    567.         move.b  (a1)+,d5
    568.         suba.l  d5,a6
    569.         add.b   d1,d1
    570.         bcc.s   loc_139BC
    571.         move.b  (a6)+,(a2)+
    572.  
    573. loc_139BC:              ; CODE XREF: sub_13684+334j
    574.         move.b  (a6)+,(a2)+
    575.         move.b  (a6)+,(a2)+
    576.         cmp.w   a2,d7
    577.         bls.s   loc_13A12
    578.         bra.w   loc_13736
    579. ; ---------------------------------------------------------------------------
    580.  
    581. loc_139C8:              ; CODE XREF: sub_13684+32Aj
    582.         move.b  (a0)+,d1
    583.         lsl.w   #3,d1
    584.         move.w  d1,d6
    585.         and.w   d4,d6
    586.         move.b  (a1)+,d6
    587.         suba.l  d6,a6
    588.         add.b   d1,d1
    589.         bcs.s   loc_139DE
    590.         add.b   d1,d1
    591.         bcs.s   loc_139F4
    592.         bra.s   loc_139F6
    593. ; ---------------------------------------------------------------------------
    594.  
    595. loc_139DE:              ; CODE XREF: sub_13684+352j
    596.         add.b   d1,d1
    597.         bcc.s   loc_139F2
    598.         moveq   #0,d0
    599.         move.b  (a1)+,d0
    600.         beq.s   loc_13A04
    601.         subq.w  #6,d0
    602.         bmi.s   loc_13A0A
    603.  
    604. loc_139EC:              ; CODE XREF: sub_13684+36Aj
    605.         move.b  (a6)+,(a2)+
    606.         dbf d0,loc_139EC
    607.  
    608. loc_139F2:              ; CODE XREF: sub_13684+35Cj
    609.         move.b  (a6)+,(a2)+
    610.  
    611. loc_139F4:              ; CODE XREF: sub_13684+356j
    612.         move.b  (a6)+,(a2)+
    613.  
    614. loc_139F6:              ; CODE XREF: sub_13684+358j
    615.         move.b  (a6)+,(a2)+
    616.         move.b  (a6)+,(a2)+
    617.         move.b  (a6)+,(a2)+
    618.         cmp.w   a2,d7
    619.         bls.s   loc_13A1A
    620.         bra.w   loc_13928
    621. ; ---------------------------------------------------------------------------
    622.  
    623. loc_13A04:              ; CODE XREF: sub_13684+362j
    624.         move.w  #0,d0
    625.         rts
    626. ; ---------------------------------------------------------------------------
    627.  
    628. loc_13A0A:              ; CODE XREF: sub_13684+366j
    629.         move.w  #$FFFF,d0
    630.         moveq   #3,d2
    631.         rts
    632. ; ---------------------------------------------------------------------------
    633.  
    634. loc_13A12:              ; CODE XREF: sub_13684+33Ej
    635.         move.w  #1,d0
    636.         moveq   #7,d2
    637.         rts
    638. ; ---------------------------------------------------------------------------
    639.  
    640. loc_13A1A:              ; CODE XREF: sub_13684+37Aj
    641.         move.w  #1,d0
    642.         moveq   #3,d2
    643.         rts
    644. ; ---------------------------------------------------------------------------
    645.  
    646. loc_13A22:              ; CODE XREF: sub_13684+324j
    647.         move.b  (a1)+,(a2)+
    648.  
    649. loc_13A24:              ; CODE XREF: sub_13684+Ej
    650.                     ; sub_13684+8Ej ...
    651.         add.b   d1,d1
    652.         bcs.s   loc_13A9E
    653.         move.b  (a0)+,d1
    654.         move.l  a2,a6
    655.         add.b   d1,d1
    656.         bcs.s   loc_13A46
    657.         move.b  (a1)+,d5
    658.         suba.l  d5,a6
    659.         add.b   d1,d1
    660.         bcc.s   loc_13A3A
    661.         move.b  (a6)+,(a2)+
    662.  
    663. loc_13A3A:              ; CODE XREF: sub_13684+3B2j
    664.         move.b  (a6)+,(a2)+
    665.         move.b  (a6)+,(a2)+
    666.         cmp.w   a2,d7
    667.         bls.s   loc_13A8E
    668.         bra.w   loc_137B0
    669. ; ---------------------------------------------------------------------------
    670.  
    671. loc_13A46:              ; CODE XREF: sub_13684+3AAj
    672.         lsl.w   #3,d1
    673.         move.w  d1,d6
    674.         and.w   d4,d6
    675.         move.b  (a1)+,d6
    676.         suba.l  d6,a6
    677.         add.b   d1,d1
    678.         bcs.s   loc_13A5A
    679.         add.b   d1,d1
    680.         bcs.s   loc_13A70
    681.         bra.s   loc_13A72
    682. ; ---------------------------------------------------------------------------
    683.  
    684. loc_13A5A:              ; CODE XREF: sub_13684+3CEj
    685.         add.b   d1,d1
    686.         bcc.s   loc_13A6E
    687.         moveq   #0,d0
    688.         move.b  (a1)+,d0
    689.         beq.s   loc_13A80
    690.         subq.w  #6,d0
    691.         bmi.s   loc_13A86
    692.  
    693. loc_13A68:              ; CODE XREF: sub_13684+3E6j
    694.         move.b  (a6)+,(a2)+
    695.         dbf d0,loc_13A68
    696.  
    697. loc_13A6E:              ; CODE XREF: sub_13684+3D8j
    698.         move.b  (a6)+,(a2)+
    699.  
    700. loc_13A70:              ; CODE XREF: sub_13684+3D2j
    701.         move.b  (a6)+,(a2)+
    702.  
    703. loc_13A72:              ; CODE XREF: sub_13684+3D4j
    704.         move.b  (a6)+,(a2)+
    705.         move.b  (a6)+,(a2)+
    706.         move.b  (a6)+,(a2)+
    707.         cmp.w   a2,d7
    708.         bls.s   loc_13A96
    709.         bra.w   loc_139A6
    710. ; ---------------------------------------------------------------------------
    711.  
    712. loc_13A80:              ; CODE XREF: sub_13684+3DEj
    713.         move.w  #0,d0
    714.         rts
    715. ; ---------------------------------------------------------------------------
    716.  
    717. loc_13A86:              ; CODE XREF: sub_13684+3E2j
    718.         move.w  #$FFFF,d0
    719.         moveq   #2,d2
    720.         rts
    721. ; ---------------------------------------------------------------------------
    722.  
    723. loc_13A8E:              ; CODE XREF: sub_13684+3BCj
    724.         move.w  #1,d0
    725.         moveq   #6,d2
    726.         rts
    727. ; ---------------------------------------------------------------------------
    728.  
    729. loc_13A96:              ; CODE XREF: sub_13684+3F6j
    730.         move.w  #1,d0
    731.         moveq   #2,d2
    732.         rts
    733. ; ---------------------------------------------------------------------------
    734.  
    735. loc_13A9E:              ; CODE XREF: sub_13684+3A2j
    736.         move.b  (a1)+,(a2)+
    737.         bra.w   SomDec_BitPos0
    738. ; End of function sub_13684
     
  2. Caverns 4

    Caverns 4

    Member
    346
    0
    16
    Sonic: Retold
    That's good to know - I wondered about the "Unknown" compression in Sonic 2 NA, and why it was in the ROM for all of like, 2 things, and that does shed a small amount of light on at least what it is... Heaven knows why they felt the need to use a different compression for GHZ's blocks/Chunks in the first place, though.

    Good eye, spotting that though, I had no idea what that format was.
     
  3. Billy

    Billy

    RIP Oderus Urungus Member
    2,118
    178
    43
    Colorado, USA
    Indie games
    Given that GHZ was leftover from a previous point in development, it's possible that they intended to use this compression algorithm but then changed their minds. Or maybe they were just experimenting with it.
     
  4. kazblox

    kazblox

    Member
    178
    27
    28
    Diassemblies and decompilations.
    It's probably the latter. Maybe it could have been one of Sega Technical Institute's first coding exercises while collaborating with Sonic Team.

    As an interesting footnote, Kid Chameleon was released in America on May 28, 1992. That was around the time that the Sonic 2 Nick Arcade build was presumably assembled.
     
  5. Cooljerk

    Cooljerk

    NotEqual Tech, Inc - VR & Game Dev Oldbie
    4,505
    201
    43
    So are we gonna start calling this Clownacy compression? :v:

    And will this be worked into KENS?
     
  6. Clownacy

    Clownacy

    Tech Member
    1,060
    607
    93
    I'm still trying to figure the format out, but if I do, I'll see if I can make it part of FW-KENSC, like I did with Rocket.