[Sonic 1] How to add an extra character by Ashuro

Discussion in 'Tutorials Archive' started by Ashuro, Sep 21, 2016.

  1. Ashuro

    Ashuro Anti-Cosmic Metal Of Death Member

    Joined:
    Sep 27, 2014
    Messages:
    550
    Location:
    France
    Hi everyone, i want to start to share some things i have experienced by myself.
    Sorry for my bad english, but i think you are accustomed now... I hope... :(
    THEN!
    Why am i doing this tutorial? Because this https://forums.sonicretro.org/index.php?showtopic=33475 and this http://info.sonicretro.org/SCHG_How-to:Add_Extra_Characters (so also this: http://sonicresearch.org/community/...torial-on-extra-characters-in-s1.47/#post-703)... did not work for me, but in fact, i took some elements of these three to make mine method.

    Before starting it, i want to say: for those who do not understand my approach, or my choices, i'm sorry.
    But this tutorial is for those like me who are not able to apply the 3 from the top.
    /!\ This guide is for the Hivebrain 2005 ASM68k disasm. version /!\
    If you using any other disasm. I'm sorry but i will not show you the way to do this guide with the others disasm.
    --------------------------------------------------------------------------------------------------------------------------------------
    STEP 1: Download the files
    In this guide, i will teach you how to import Mighty to Sonic 1, but i think this guide will work with any characters (Shadow, Tails, Knuckles, your own...
    Ashuro the badger
    :p).
    Just download the .rar archive which contains the PLC, art, palette, mappings and anim file of Mighty.
    Put Mighty dynamic pattern load cues.asm under _inc, MightyAni.asm under _anim, mightyArt.bin under artunc, MightyMap.asm under _maps and mightypal.asm under pallet.
    .
    --------------------------------------------------------------------------------------------------------------------------------------
    STEP 2: make the files be loaded
    Open up your Sonic1.asm file. Search for "SonicDynPlc:".
    You actually see this:
    Code:
    ; ---------------------------------------------------------------------------
    ; Sprite mappings - Sonic
    ; ---------------------------------------------------------------------------
    Map_Sonic:
        include "_maps\Sonic.asm"
    
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    loading    array for Sonic
    ; ---------------------------------------------------------------------------
    SonicDynPLC:
        include "_inc\Sonic dynamic pattern load cues.asm"
    
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    - Sonic
    ; ---------------------------------------------------------------------------
    Art_Sonic:    incbin    artunc\sonic.bin    ; Sonic
            even
    Change it to:

    Code:
    ; ---------------------------------------------------------------------------
    ; Sprite mappings - Sonic/Mighty
    ; ---------------------------------------------------------------------------
    Map_Sonic:
        include "_maps\Sonic.asm"
    Map_Mighty:
        include "_maps\MightyMap.asm" ; Mighty mapping files
    
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    loading    array for Sonic/Mighty
    ; ---------------------------------------------------------------------------
    SonicDynPLC:
        include "_inc\Sonic dynamic pattern load cues.asm"
    MightyDynPLC:
        include "_inc\Mighty dynamic pattern load cues.asm" ; Mighty plc
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    - Sonic/Mighty
    ; ---------------------------------------------------------------------------
    Art_Sonic:    incbin    artunc\sonic.bin    ; Sonic
            even
    Art_Mighty:    incbin    artunc\mightyArt.bin    ; Mighty art
            even
    Then, search for "SonicAniData:"
    And replace

    Code:
    SonicAniData:
        include "_anim\Sonic.asm"
    With
    Code:
    SonicAniData:
        include "_anim\Sonic.asm"
    MightyAniData:
        include "_anim\MightyAni.asm"
    And finally, the palette, search for "Pal_Sonic:"

    Code:
    ; ---------------------------------------------------------------------------
    ; Pallet data
    ; ---------------------------------------------------------------------------
    Pal_SegaBG:    incbin    pallet\sega_bg.bin
    Pal_Title:    incbin    pallet\title.bin
    Pal_LevelSel:    incbin    pallet\levelsel.bin
    Pal_Sonic:    incbin    pallet\sonic.bin
    ....
    Then, add the label for Mighty under "Pal_Sonic"
    Code:
    ; ---------------------------------------------------------------------------
    ; Pallet data
    ; ---------------------------------------------------------------------------
    Pal_SegaBG:    incbin    pallet\sega_bg.bin
    Pal_Title:    incbin    pallet\title.bin
    Pal_LevelSel:    incbin    pallet\levelsel.bin
    Pal_Sonic:    incbin    pallet\sonic.bin
    Pal_Mighty:    incbin    pallet\mightypal.bin
    ....
    If you build, you will get 64 errors, and it's because it need some fixies. Right now i recommend to use NotePad++.
    Open the MightyAni.asm in notepad. Under "Search", click on "Replace...", and replace "SonicAniData" with "MightyAniData". Next, replace "SonAni" with "MightyAni".
    Code:
    ; ---------------------------------------------------------------------------
    ; Animation script - Sonic
    ; ---------------------------------------------------------------------------
            dc.w SonAni_Walk-SonicAniData
            dc.w SonAni_Run-SonicAniData
            dc.w SonAni_Roll-SonicAniData
            dc.w SonAni_Roll2-SonicAniData
            dc.w SonAni_Push-SonicAniData
            dc.w SonAni_Wait-SonicAniData
            dc.w SonAni_Balance-SonicAniData
            dc.w SonAni_LookUp-SonicAniData
            dc.w SonAni_Duck-SonicAniData
            dc.w SonAni_Warp1-SonicAniData
            dc.w SonAni_Warp2-SonicAniData
            dc.w SonAni_Warp3-SonicAniData
            dc.w SonAni_Warp4-SonicAniData
            dc.w SonAni_Stop-SonicAniData
            dc.w SonAni_Float1-SonicAniData
            dc.w SonAni_Float2-SonicAniData
            dc.w SonAni_Spring-SonicAniData
            dc.w SonAni_LZHang-SonicAniData
            dc.w SonAni_Leap1-SonicAniData
            dc.w SonAni_Leap2-SonicAniData
            dc.w SonAni_Surf-SonicAniData
            dc.w SonAni_Bubble-SonicAniData
            dc.w SonAni_Death1-SonicAniData
            dc.w SonAni_Drown-SonicAniData
            dc.w SonAni_Death2-SonicAniData
            dc.w SonAni_Shrink-SonicAniData
            dc.w SonAni_Hurt-SonicAniData
            dc.w SonAni_LZSlide-SonicAniData
            dc.w SonAni_Blank-SonicAniData
            dc.w SonAni_Float3-SonicAniData
            dc.w SonAni_Float4-SonicAniData
    SonAni_Walk:    dc.b $FF, 8, 9,    $A, $B,    6, 7, $FF
    SonAni_Run:    dc.b $FF, $1E, $1F, $20, $21, $FF, $FF,    $FF
    SonAni_Roll:    dc.b $FE, $2E, $2F, $30, $31, $32, $FF,    $FF
    SonAni_Roll2:    dc.b $FE, $2E, $2F, $32, $30, $31, $32,    $FF
    SonAni_Push:    dc.b $FD, $45, $46, $47, $48, $FF, $FF,    $FF
    SonAni_Wait:    dc.b $17, 1, 1,    1, 1, 1, 1, 1, 1, 1, 1,    1, 1, 3, 2, 2, 2, 3, 4, $FE, 2, 0
    SonAni_Balance:    dc.b $1F, $3A, $3B, $FF
    SonAni_LookUp:    dc.b $3F, 5, $FF, 0
    SonAni_Duck:    dc.b $3F, $39, $FF, 0
    SonAni_Warp1:    dc.b $3F, $33, $FF, 0
    SonAni_Warp2:    dc.b $3F, $34, $FF, 0
    SonAni_Warp3:    dc.b $3F, $35, $FF, 0
    SonAni_Warp4:    dc.b $3F, $36, $FF, 0
    SonAni_Stop:    dc.b 7,    $37, $38, $FF
    SonAni_Float1:    dc.b 7,    $3C, $3F, $FF
    SonAni_Float2:    dc.b 7,    $3C, $3D, $53, $3E, $54, $FF, 0
    SonAni_Spring:    dc.b $2F, $40, $FD, 0
    SonAni_LZHang:    dc.b 4,    $41, $42, $FF
    SonAni_Leap1:    dc.b $F, $43, $43, $43,    $FE, 1
    SonAni_Leap2:    dc.b $F, $43, $44, $FE,    1, 0
    SonAni_Surf:    dc.b $3F, $49, $FF, 0
    SonAni_Bubble:    dc.b $B, $56, $56, $A, $B, $FD,    0, 0
    SonAni_Death1:    dc.b $20, $4B, $FF, 0
    SonAni_Drown:    dc.b $2F, $4C, $FF, 0
    SonAni_Death2:    dc.b 3,    $4D, $FF, 0
    SonAni_Shrink:    dc.b 3,    $4E, $4F, $50, $51, $52, 0, $FE, 1, 0
    SonAni_Hurt:    dc.b 3,    $55, $FF, 0
    SonAni_LZSlide:    dc.b 7, $55, $57, $FF
    SonAni_Blank:    dc.b $77, 0, $FD, 0
    SonAni_Float3:    dc.b 3,    $3C, $3D, $53, $3E, $54, $FF, 0
    SonAni_Float4:    dc.b 3,    $3C, $FD, 0
            even
    Code:
    ; ---------------------------------------------------------------------------
    ; Animation script - Mighty
    ; ---------------------------------------------------------------------------
            dc.w MightyAni_Walk-MightyAniData
            dc.w MightyAni_Run-MightyAniData
            dc.w MightyAni_Roll-MightyAniData
            dc.w MightyAni_Roll2-MightyAniData
            dc.w MightyAni_Push-MightyAniData
            dc.w MightyAni_Wait-MightyAniData
            dc.w MightyAni_Balance-MightyAniData
            dc.w MightyAni_LookUp-MightyAniData
            dc.w MightyAni_Duck-MightyAniData
            dc.w MightyAni_Warp1-MightyAniData
            dc.w MightyAni_Warp2-MightyAniData
            dc.w MightyAni_Warp3-MightyAniData
            dc.w MightyAni_Warp4-MightyAniData
            dc.w MightyAni_Stop-MightyAniData
            dc.w MightyAni_Float1-MightyAniData
            dc.w MightyAni_Float2-MightyAniData
            dc.w MightyAni_Spring-MightyAniData
            dc.w MightyAni_LZHang-MightyAniData
            dc.w MightyAni_Leap1-MightyAniData
            dc.w MightyAni_Leap2-MightyAniData
            dc.w MightyAni_Surf-MightyAniData
            dc.w MightyAni_Bubble-MightyAniData
            dc.w MightyAni_Death1-MightyAniData
            dc.w MightyAni_Drown-MightyAniData
            dc.w MightyAni_Death2-MightyAniData
            dc.w MightyAni_Shrink-MightyAniData
            dc.w MightyAni_Hurt-MightyAniData
            dc.w MightyAni_LZSlide-MightyAniData
            dc.w MightyAni_Blank-MightyAniData
            dc.w MightyAni_Float3-MightyAniData
            dc.w MightyAni_Float4-MightyAniData
    MightyAni_Walk:    dc.b $FF, 8, 9,    $A, $B,    6, 7, $FF
    MightyAni_Run:    dc.b $FF, $1E, $1F, $20, $21, $FF, $FF,    $FF
    MightyAni_Roll:    dc.b $FE, $2E, $2F, $30, $31, $32, $FF,    $FF
    MightyAni_Roll2:    dc.b $FE, $2E, $2F, $32, $30, $31, $32,    $FF
    MightyAni_Push:    dc.b $FD, $45, $46, $47, $48, $FF, $FF,    $FF
    MightyAni_Wait:    dc.b $17, 1, 1,    1, 1, 1, 1, 1, 1, 1, 1,    1, 1, 3, 2, 2, 2, 3, 4, $FE, 2, 0
    MightyAni_Balance:    dc.b $1F, $3A, $3B, $FF
    MightyAni_LookUp:    dc.b $3F, 5, $FF, 0
    MightyAni_Duck:    dc.b $3F, $39, $FF, 0
    MightyAni_Warp1:    dc.b $3F, $33, $FF, 0
    MightyAni_Warp2:    dc.b $3F, $34, $FF, 0
    MightyAni_Warp3:    dc.b $3F, $35, $FF, 0
    MightyAni_Warp4:    dc.b $3F, $36, $FF, 0
    MightyAni_Stop:    dc.b 7,    $37, $38, $FF
    MightyAni_Float1:    dc.b 7,    $3C, $3F, $FF
    MightyAni_Float2:    dc.b 7,    $3C, $3D, $53, $3E, $54, $FF, 0
    MightyAni_Spring:    dc.b $2F, $40, $FD, 0
    MightyAni_LZHang:    dc.b 4,    $41, $42, $FF
    MightyAni_Leap1:    dc.b $F, $43, $43, $43,    $FE, 1
    MightyAni_Leap2:    dc.b $F, $43, $44, $FE,    1, 0
    MightyAni_Surf:    dc.b $3F, $49, $FF, 0
    MightyAni_Bubble:    dc.b $B, $56, $56, $A, $B, $FD,    0, 0
    MightyAni_Death1:    dc.b $20, $4B, $FF, 0
    MightyAni_Drown:    dc.b $2F, $4C, $FF, 0
    MightyAni_Death2:    dc.b 3,    $4D, $FF, 0
    MightyAni_Shrink:    dc.b 3,    $4E, $4F, $50, $51, $52, 0, $FE, 1, 0
    MightyAni_Hurt:    dc.b 3,    $55, $FF, 0
    MightyAni_LZSlide:    dc.b 7, $55, $57, $FF
    MightyAni_Blank:    dc.b $77, 0, $FD, 0
    MightyAni_Float3:    dc.b 3,    $3C, $3D, $53, $3E, $54, $FF, 0
    MightyAni_Float4:    dc.b 3,    $3C, $FD, 0
            even

    Now, open the "MightyMap.asm" and replace all the "Map_Sonic" with "Map_Mighty", and the "byte" with "byte2".
    Code:
    ; ---------------------------------------------------------------------------
    ; Sprite mappings - Sonic
    ; ---------------------------------------------------------------------------
            dc.w byte_21292-Map_Sonic, byte_21293-Map_Sonic
            dc.w byte_212A8-Map_Sonic, byte_212B8-Map_Sonic
            dc.w byte_212C8-Map_Sonic, byte_212D8-Map_Sonic
            dc.w byte_212E8-Map_Sonic, byte_212FD-Map_Sonic
            dc.w byte_21308-Map_Sonic, byte_21313-Map_Sonic
            dc.w byte_21328-Map_Sonic, byte_21333-Map_Sonic
            dc.w byte_21343-Map_Sonic, byte_2135D-Map_Sonic
            dc.w byte_2137C-Map_Sonic, byte_21391-Map_Sonic
            dc.w byte_213AB-Map_Sonic, byte_213C0-Map_Sonic
            dc.w byte_213DA-Map_Sonic, byte_213EF-Map_Sonic
            dc.w byte_213FA-Map_Sonic, byte_21405-Map_Sonic
            dc.w byte_2141A-Map_Sonic, byte_21425-Map_Sonic
            dc.w byte_21435-Map_Sonic, byte_21454-Map_Sonic
            dc.w byte_21473-Map_Sonic, byte_21488-Map_Sonic
            dc.w byte_214A2-Map_Sonic, byte_214B7-Map_Sonic
            dc.w byte_214D1-Map_Sonic, byte_214DC-Map_Sonic
            dc.w byte_214E7-Map_Sonic, byte_214F2-Map_Sonic
            dc.w byte_214FD-Map_Sonic, byte_21512-Map_Sonic
            dc.w byte_21522-Map_Sonic, byte_21537-Map_Sonic
            dc.w byte_21547-Map_Sonic, byte_21552-Map_Sonic
            dc.w byte_2155D-Map_Sonic, byte_21568-Map_Sonic
            dc.w byte_21573-Map_Sonic, byte_21588-Map_Sonic
            dc.w byte_21593-Map_Sonic, byte_215A8-Map_Sonic
            dc.w byte_215B3-Map_Sonic, byte_215B9-Map_Sonic
            dc.w byte_215BF-Map_Sonic, byte_215C5-Map_Sonic
            dc.w byte_215CB-Map_Sonic, byte_215D1-Map_Sonic
            dc.w byte_215DC-Map_Sonic, byte_215E2-Map_Sonic
            dc.w byte_215ED-Map_Sonic, byte_215F3-Map_Sonic
            dc.w byte_215FE-Map_Sonic, byte_21613-Map_Sonic
            dc.w byte_21628-Map_Sonic, byte_21638-Map_Sonic
            dc.w byte_21648-Map_Sonic, byte_21658-Map_Sonic
            dc.w byte_21663-Map_Sonic, byte_21673-Map_Sonic
            dc.w byte_21683-Map_Sonic, byte_21693-Map_Sonic
            dc.w byte_216A8-Map_Sonic, byte_216BD-Map_Sonic
            dc.w byte_216D7-Map_Sonic, byte_216F1-Map_Sonic
            dc.w byte_216FC-Map_Sonic, byte_2170C-Map_Sonic
            dc.w byte_21717-Map_Sonic, byte_21727-Map_Sonic
            dc.w byte_21732-Map_Sonic, byte_21742-Map_Sonic
            dc.w byte_21752-Map_Sonic, byte_2176C-Map_Sonic
            dc.w byte_21786-Map_Sonic, byte_21791-Map_Sonic
            dc.w byte_217A1-Map_Sonic, byte_217A7-Map_Sonic
            dc.w byte_217AD-Map_Sonic, byte_217B3-Map_Sonic
            dc.w byte_217C3-Map_Sonic, byte_217D3-Map_Sonic
            dc.w byte_217E3-Map_Sonic, byte_217F3-Map_Sonic
    byte_21292:    dc.b 0
    byte_21293:    dc.b 4            ; standing
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $D, 0, 3, $F0
            dc.b 4,    8, 0, $B, $F0
            dc.b $C, 8, 0, $E, $F8
    byte_212A8:    dc.b 3            ; waiting 1
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte_212B8:    dc.b 3            ; waiting 2
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte_212C8:    dc.b 3            ; waiting 3
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte_212D8:    dc.b 3            ; looking up
            dc.b $EC, $A, 0, 0, $F0
            dc.b 4,    8, 0, 9, $F0
            dc.b $C, 8, 0, $C, $F8
    byte_212E8:    dc.b 4            ; walking 1-1
            dc.b $EB, $D, 0, 0, $EC
            dc.b $FB, 9, 0,    8, $EC
            dc.b $FB, 6, 0,    $E, 4
            dc.b $B, 4, 0, $14, $EC
    byte_212FD:    dc.b 2            ; walking 1-2
            dc.b $EC, $D, 0, 0, $ED
            dc.b $FC, $E, 0, 8, $F5
    byte_21308:    dc.b 2            ; walking 1-3
            dc.b $ED, 9, 0,    0, $F3
            dc.b $FD, $A, 0, 6, $F3
    byte_21313:    dc.b 4            ; walking 1-4
            dc.b $EB, 9, 0,    0, $F4
            dc.b $FB, 9, 0,    6, $EC
            dc.b $FB, 6, 0,    $C, 4
            dc.b $B, 4, 0, $12, $EC
    byte_21328:    dc.b 2            ; walking 1-5
            dc.b $EC, 9, 0,    0, $F3
            dc.b $FC, $E, 0, 6, $EB
    byte_21333:    dc.b 3            ; walking 1-6
            dc.b $ED, $D, 0, 0, $EC
            dc.b $FD, $C, 0, 8, $F4
            dc.b 5,    9, 0, $C, $F4
    byte_21343:    dc.b 5            ; walking 2-1
            dc.b $EB, 9, 0,    0, $EB
            dc.b $EB, 6, 0,    6, 3
            dc.b $FB, 8, 0,    $C, $EB
            dc.b 3,    9, 0, $F, $F3
            dc.b $13, 0, 0,    $15, $FB
    byte_2135D:    dc.b 6            ; walking 2-2
            dc.b $EC, 9, 0,    0, $EC
            dc.b $EC, 1, 0,    6, 4
            dc.b $FC, $C, 0, 8, $EC
            dc.b 4,    9, 0, $C, $F4
            dc.b $FC, 5, 0,    $12, $C
            dc.b $F4, 0, 0,    $16, $14
    byte_2137C:    dc.b 4            ; walking 2-3
            dc.b $ED, 9, 0,    0, $ED
            dc.b $ED, 1, 0,    6, 5
            dc.b $FD, $D, 0, 8, $F5
            dc.b $D, 8, 0, $10, $FD
    byte_21391:    dc.b 5            ; walking 2-4
            dc.b $EB, 9, 0,    0, $EB
            dc.b $EB, 5, 0,    6, 3
            dc.b $FB, $D, 0, $A, $F3
            dc.b $B, 8, 0, $12, $F3
            dc.b $13, 4, 0,    $15, $FB
    byte_213AB:    dc.b 4            ; walking 2-5
            dc.b $EC, 9, 0,    0, $EC
            dc.b $EC, 1, 0,    6, 4
            dc.b $FC, $D, 0, 8, $F4
            dc.b $C, 8, 0, $10, $FC
    byte_213C0:    dc.b 5            ; walking 2-6
            dc.b $ED, 9, 0,    0, $ED
            dc.b $ED, 1, 0,    6, 5
            dc.b $FD, 0, 0,    8, $ED
            dc.b $FD, $D, 0, 9, $F5
            dc.b $D, 8, 0, $11, $FD
    byte_213DA:    dc.b 4            ; walking 3-1
            dc.b $F4, 7, 0,    0, $EB
            dc.b $EC, 9, 0,    8, $FB
            dc.b $FC, 4, 0,    $E, $FB
            dc.b 4,    9, 0, $10, $FB
    byte_213EF:    dc.b 2            ; walking 3-2
            dc.b $F4, 7, 0,    0, $EC
            dc.b $EC, $B, 0, 8, $FC
    byte_213FA:    dc.b 2            ; walking 3-3
            dc.b $F4, 6, 0,    0, $ED
            dc.b $F4, $A, 0, 6, $FD
    byte_21405:    dc.b 4            ; walking 3-4
            dc.b $F4, 6, 0,    0, $EB
            dc.b $EC, 9, 0,    6, $FB
            dc.b $FC, 4, 0,    $C, $FB
            dc.b 4,    9, 0, $E, $FB
    byte_2141A:    dc.b 2            ; walking 3-5
            dc.b $F4, 6, 0,    0, $EC
            dc.b $F4, $B, 0, 6, $FC
    byte_21425:    dc.b 3            ; walking 3-6
            dc.b $F4, 7, 0,    0, $ED
            dc.b $EC, 0, 0,    8, $FD
            dc.b $F4, $A, 0, 9, $FD
    byte_21435:    dc.b 6            ; walking 4-1
            dc.b $FD, 6, 0,    0, $EB
            dc.b $ED, 4, 0,    6, $F3
            dc.b $F5, 4, 0,    8, $EB
            dc.b $F5, $A, 0, $A, $FB
            dc.b $D, 0, 0, $13, $FB
            dc.b $FD, 0, 0,    $14, $13
    byte_21454:    dc.b 6            ; walking 4-2
            dc.b $FC, 6, 0,    0, $EC
            dc.b $E4, 8, 0,    6, $F4
            dc.b $EC, 4, 0,    9, $FC
            dc.b $F4, 4, 0,    $B, $EC
            dc.b $F4, $A, 0, $D, $FC
            dc.b $C, 0, 0, $16, $FC
    byte_21473:    dc.b 4            ; walking 4-3
            dc.b $FB, 6, 0,    0, $ED
            dc.b $F3, 4, 0,    6, $ED
            dc.b $EB, $A, 0, 8, $FD
            dc.b 3,    4, 0, $11, $FD
    byte_21488:    dc.b 5            ; walking 4-4
            dc.b $FD, 6, 0,    0, $EB
            dc.b $ED, 8, 0,    6, $F3
            dc.b $F5, 4, 0,    9, $EB
            dc.b $F5, $D, 0, $B, $FB
            dc.b 5,    8, 0, $13, $FB
    byte_214A2:    dc.b 4            ; walking 4-5
            dc.b $FC, 6, 0,    0, $EC
            dc.b $F4, 4, 0,    6, $EC
            dc.b $EC, $A, 0, 8, $FC
            dc.b 4,    4, 0, $11, $FC
    byte_214B7:    dc.b 5            ; walking 4-6
            dc.b $FB, 6, 0,    0, $ED
            dc.b $EB, $A, 0, 6, $FD
            dc.b $F3, 4, 0,    $F, $ED
            dc.b 3,    4, 0, $11, $FD
            dc.b $B, 0, 0, $13, $FD
    byte_214D1:    dc.b 2            ; running 1-1
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte_214DC:    dc.b 2            ; running 1-2
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte_214E7:    dc.b 2            ; running 1-3
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte_214F2:    dc.b 2            ; running 1-4
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte_214FD:    dc.b 4            ; running 2-1
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
            dc.b $FE, 0, 0,    $14, $EE
    byte_21512:    dc.b 3            ; running 2-2
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
    byte_21522:    dc.b 4            ; running 2-3
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
            dc.b $FE, 0, 0,    $14, $EE
    byte_21537:    dc.b 3            ; running 2-4
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
    byte_21547:    dc.b 2            ; running 3-1
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte_21552:    dc.b 2            ; running 3-2
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte_2155D:    dc.b 2            ; running 3-3
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte_21568:    dc.b 2            ; running 3-4
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte_21573:    dc.b 4            ; running 4-1
            dc.b $FA, 6, 0,    0, $EE
            dc.b $F2, 4, 0,    6, $EE
            dc.b $EA, $B, 0, 8, $FE
            dc.b $A, 0, 0, $14, $FE
    byte_21588:    dc.b 2            ; running 4-2
            dc.b $F2, 7, 0,    0, $EE
            dc.b $EA, $B, 0, 8, $FE
    byte_21593:    dc.b 4            ; running 4-3
            dc.b $FA, 6, 0,    0, $EE
            dc.b $F2, 4, 0,    6, $EE
            dc.b $EA, $B, 0, 8, $FE
            dc.b $A, 0, 0, $14, $FE
    byte_215A8:    dc.b 2            ; running 4-4
            dc.b $F2, 7, 0,    0, $EE
            dc.b $EA, $B, 0, 8, $FE
    byte_215B3:    dc.b 1            ; rolling 1
            dc.b $F0, $F, 0, 0, $F0
    byte_215B9:    dc.b 1            ; rolling 2
            dc.b $F0, $F, 0, 0, $F0
    byte_215BF:    dc.b 1            ; rolling 3
            dc.b $F0, $F, 0, 0, $F0
    byte_215C5:    dc.b 1            ; rolling 4
            dc.b $F0, $F, 0, 0, $F0
    byte_215CB:    dc.b 1            ; rolling 5
            dc.b $F0, $F, 0, 0, $F0
    byte_215D1:    dc.b 2            ; warped 1 (unused)
            dc.b $F4, $E, 0, 0, $EC
            dc.b $F4, 2, 0,    $C, $C
    byte_215DC:    dc.b 1            ; warped 2 (unused)
            dc.b $F0, $F, 0, 0, $F0
    byte_215E2:    dc.b 2            ; warped 3 (unused)
            dc.b $EC, $B, 0, 0, $F4
            dc.b $C, 8, 0, $C, $F4
    byte_215ED:    dc.b 1            ; warped 4 (unused)
            dc.b $F0, $F, 0, 0, $F0
    byte_215F3:    dc.b 2            ; stopping 1
            dc.b $ED, 9, 0,    0, $F0
            dc.b $FD, $E, 0, 6, $F0
    byte_215FE:    dc.b 4            ; stopping 2
            dc.b $ED, 9, 0,    0, $F0
            dc.b $FD, $D, 0, 6, $F0
            dc.b $D, 4, 0, $E, 0
            dc.b 5,    0, 0, $10, $E8
    byte_21613:    dc.b 4            ; ducking
            dc.b $F4, 4, 0,    0, $FC
            dc.b $FC, $D, 0, 2, $F4
            dc.b $C, 8, 0, $A, $F4
            dc.b 4,    0, 0, $D, $EC
    byte_21628:    dc.b 3            ; balancing 1
            dc.b $EC, 8, 8,    0, $E8
            dc.b $F4, 2, 8,    3, 0
            dc.b $F4, $F, 8, 6, $E0
    byte_21638:    dc.b 3            ; balancing 2
            dc.b $EC, $E, 8, 0, $E8
            dc.b 4,    $D, 8, $C, $E0
            dc.b $C, 0, $18, $14, 0
    byte_21648:    dc.b 3            ; spinning 1 (LZ)
            dc.b $F4, $D, 0, 0, $FC
            dc.b $FC, 5, 0,    8, $EC
            dc.b 4,    8, 0, $C, $FC
    byte_21658:    dc.b 2            ; spinning 2 (LZ)
            dc.b $F4, $A, 0, 0, $E8
            dc.b $F4, $A, 8, 0, 0
    byte_21663:    dc.b 3            ; spinning 3 (LZ)
            dc.b $F4, $D, 0, 0, $E4
            dc.b $FC, 0, 0,    8, 4
            dc.b 4,    $C, 0, 9, $EC
    byte_21673:    dc.b 3            ; spinning 4 (LZ)
            dc.b $F4, $D, 0, 0, $FC
            dc.b $FC, 5, 0,    8, $EC
            dc.b 4,    8, 0, $C, $FC
    byte_21683:    dc.b 3            ; bouncing
            dc.b $E8, $B, 0, 0, $F0
            dc.b 8,    4, 0, $C, $F8
            dc.b $10, 0, 0,    $E, $F8
    byte_21693:    dc.b 4            ; hanging 1 (LZ)
            dc.b $F8, $E, 0, 0, $E8
            dc.b 0,    5, 0, $C, 8
            dc.b $F8, 0, 0,    $10, 8
            dc.b $F0, 0, 0,    $11, $F8
    byte_216A8:    dc.b 4            ; hanging 2 (LZ)
            dc.b $F8, $E, 0, 0, $E8
            dc.b 0,    5, 0, $C, 8
            dc.b $F8, 0, 0,    $10, 8
            dc.b $F0, 0, 0,    $11, $F8
    byte_216BD:    dc.b 5            ; celebration leap 1 (unused)
            dc.b $E8, $A, 0, 0, $F4
            dc.b $F0, 1, 0,    9, $C
            dc.b 0,    9, 0, $B, $F4
            dc.b $10, 4, 0,    $11, $F4
            dc.b 0,    0, 0, $13, $EC
    byte_216D7:    dc.b 5            ; celebration leap 2 (unused)
            dc.b $E8, $A, 0, 0, $F4
            dc.b $E8, 1, 0,    9, $C
            dc.b 0,    9, 0, $B, $F4
            dc.b $10, 4, 0,    $11, $F4
            dc.b 0,    0, 0, $13, $EC
    byte_216F1:    dc.b 2            ; pushing 1
            dc.b $ED, $A, 0, 0, $F3
            dc.b 5,    $D, 0, 9, $EB
    byte_216FC:    dc.b 3            ; pushing 2
            dc.b $EC, $A, 0, 0, $F3
            dc.b 4,    8, 0, 9, $F3
            dc.b $C, 4, 0, $C, $F3
    byte_2170C:    dc.b 2            ; pushing 3
            dc.b $ED, $A, 0, 0, $F3
            dc.b 5,    $D, 0, 9, $EB
    byte_21717:    dc.b 3            ; pushing 4
            dc.b $EC, $A, 0, 0, $F3
            dc.b 4,    8, 0, 9, $F3
            dc.b $C, 4, 0, $C, $F3
    byte_21727:    dc.b 2            ; surfing or sliding (unused)
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, $E, 0, 6, $F0
    byte_21732:    dc.b 3            ; collecting bubble (unused)
            dc.b $EC, $A, 0, 0, $F0
            dc.b 4,    5, 0, 9, $F8
            dc.b $E4, 0, 0,    $D, $F8
    byte_21742:    dc.b 3            ; death    1
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, $B, 0, $A, $F4
    byte_21752:    dc.b 5            ; drowning
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, 9, 0,    $A, $F4
            dc.b 8,    $C, 0, $10, $F4
            dc.b $10, 0, 0,    $14, $F4
    byte_2176C:    dc.b 5            ; death    2
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, 9, 0,    $A, $F4
            dc.b 8,    $C, 0, $10, $F4
            dc.b $10, 0, 0,    $14, $F4
    byte_21786:    dc.b 2            ; shrinking 1 (unused)
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $F, 0, 3, $F0
    byte_21791:    dc.b 3            ; shrinking 2 (unused)
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $E, 0, 3, $F0
            dc.b $C, 8, 0, $F, $F8
    byte_217A1:    dc.b 1            ; shrinking 3 (unused)
            dc.b $F0, $B, 0, 0, $F4
    byte_217A7:    dc.b 1            ; shrinking 4 (unused)
            dc.b $F4, 6, 0,    0, $F8
    byte_217AD:    dc.b 1            ; shrinking 5 (unused)
            dc.b $F8, 1, 0,    0, $FC
    byte_217B3:    dc.b 3            ; injury
            dc.b $F4, $D, 8, 0, $E4
            dc.b $FC, 5, 8,    8, 4
            dc.b 4,    8, 8, $C, $EC
    byte_217C3:    dc.b 3            ; spinning 5 (LZ)
            dc.b $F4, $D, 8, 0, $FC
            dc.b $FC, 0, 8,    8, $F4
            dc.b 4,    $C, 8, 9, $F4
    byte_217D3:    dc.b 3            ; spinning 6 (LZ)
            dc.b $F0, $E, 0, 0, $EC
            dc.b $F8, 1, 0,    $C, $C
            dc.b 8,    $C, 0, $E, $F4
    byte_217E3:    dc.b 3            ; collecting bubble (LZ)
            dc.b $EB, 9, 0,    0, $F4
            dc.b $FB, $E, 0, 6, $EC
            dc.b 3,    1, 0, $12, $C
    byte_217F3:    dc.b 2            ; water    slide (LZ)
            dc.b $F0, $F, 0, 0, $EC
            dc.b $F8, 2, 0,    $10, $C
            even
    Code:
    ; ---------------------------------------------------------------------------
    ; Sprite mappings - Mighty
    ; ---------------------------------------------------------------------------
            dc.w byte2_21292-Map_Mighty, byte2_21293-Map_Mighty
            dc.w byte2_212A8-Map_Mighty, byte2_212B8-Map_Mighty
            dc.w byte2_212C8-Map_Mighty, byte2_212D8-Map_Mighty
            dc.w byte2_212E8-Map_Mighty, byte2_212FD-Map_Mighty
            dc.w byte2_21308-Map_Mighty, byte2_21313-Map_Mighty
            dc.w byte2_21328-Map_Mighty, byte2_21333-Map_Mighty
            dc.w byte2_21343-Map_Mighty, byte2_2135D-Map_Mighty
            dc.w byte2_2137C-Map_Mighty, byte2_21391-Map_Mighty
            dc.w byte2_213AB-Map_Mighty, byte2_213C0-Map_Mighty
            dc.w byte2_213DA-Map_Mighty, byte2_213EF-Map_Mighty
            dc.w byte2_213FA-Map_Mighty, byte2_21405-Map_Mighty
            dc.w byte2_2141A-Map_Mighty, byte2_21425-Map_Mighty
            dc.w byte2_21435-Map_Mighty, byte2_21454-Map_Mighty
            dc.w byte2_21473-Map_Mighty, byte2_21488-Map_Mighty
            dc.w byte2_214A2-Map_Mighty, byte2_214B7-Map_Mighty
            dc.w byte2_214D1-Map_Mighty, byte2_214DC-Map_Mighty
            dc.w byte2_214E7-Map_Mighty, byte2_214F2-Map_Mighty
            dc.w byte2_214FD-Map_Mighty, byte2_21512-Map_Mighty
            dc.w byte2_21522-Map_Mighty, byte2_21537-Map_Mighty
            dc.w byte2_21547-Map_Mighty, byte2_21552-Map_Mighty
            dc.w byte2_2155D-Map_Mighty, byte2_21568-Map_Mighty
            dc.w byte2_21573-Map_Mighty, byte2_21588-Map_Mighty
            dc.w byte2_21593-Map_Mighty, byte2_215A8-Map_Mighty
            dc.w byte2_215B3-Map_Mighty, byte2_215B9-Map_Mighty
            dc.w byte2_215BF-Map_Mighty, byte2_215C5-Map_Mighty
            dc.w byte2_215CB-Map_Mighty, byte2_215D1-Map_Mighty
            dc.w byte2_215DC-Map_Mighty, byte2_215E2-Map_Mighty
            dc.w byte2_215ED-Map_Mighty, byte2_215F3-Map_Mighty
            dc.w byte2_215FE-Map_Mighty, byte2_21613-Map_Mighty
            dc.w byte2_21628-Map_Mighty, byte2_21638-Map_Mighty
            dc.w byte2_21648-Map_Mighty, byte2_21658-Map_Mighty
            dc.w byte2_21663-Map_Mighty, byte2_21673-Map_Mighty
            dc.w byte2_21683-Map_Mighty, byte2_21693-Map_Mighty
            dc.w byte2_216A8-Map_Mighty, byte2_216BD-Map_Mighty
            dc.w byte2_216D7-Map_Mighty, byte2_216F1-Map_Mighty
            dc.w byte2_216FC-Map_Mighty, byte2_2170C-Map_Mighty
            dc.w byte2_21717-Map_Mighty, byte2_21727-Map_Mighty
            dc.w byte2_21732-Map_Mighty, byte2_21742-Map_Mighty
            dc.w byte2_21752-Map_Mighty, byte2_2176C-Map_Mighty
            dc.w byte2_21786-Map_Mighty, byte2_21791-Map_Mighty
            dc.w byte2_217A1-Map_Mighty, byte2_217A7-Map_Mighty
            dc.w byte2_217AD-Map_Mighty, byte2_217B3-Map_Mighty
            dc.w byte2_217C3-Map_Mighty, byte2_217D3-Map_Mighty
            dc.w byte2_217E3-Map_Mighty, byte2_217F3-Map_Mighty
    byte2_21292:    dc.b 0
    byte2_21293:    dc.b 4            ; standing
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $D, 0, 3, $F0
            dc.b 4,    8, 0, $B, $F0
            dc.b $C, 8, 0, $E, $F8
    byte2_212A8:    dc.b 3            ; waiting 1
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte2_212B8:    dc.b 3            ; waiting 2
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte2_212C8:    dc.b 3            ; waiting 3
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, 9, 0,    6, $F0
            dc.b $C, 8, 0, $C, $F8
    byte2_212D8:    dc.b 3            ; looking up
            dc.b $EC, $A, 0, 0, $F0
            dc.b 4,    8, 0, 9, $F0
            dc.b $C, 8, 0, $C, $F8
    byte2_212E8:    dc.b 4            ; walking 1-1
            dc.b $EB, $D, 0, 0, $EC
            dc.b $FB, 9, 0,    8, $EC
            dc.b $FB, 6, 0,    $E, 4
            dc.b $B, 4, 0, $14, $EC
    byte2_212FD:    dc.b 2            ; walking 1-2
            dc.b $EC, $D, 0, 0, $ED
            dc.b $FC, $E, 0, 8, $F5
    byte2_21308:    dc.b 2            ; walking 1-3
            dc.b $ED, 9, 0,    0, $F3
            dc.b $FD, $A, 0, 6, $F3
    byte2_21313:    dc.b 4            ; walking 1-4
            dc.b $EB, 9, 0,    0, $F4
            dc.b $FB, 9, 0,    6, $EC
            dc.b $FB, 6, 0,    $C, 4
            dc.b $B, 4, 0, $12, $EC
    byte2_21328:    dc.b 2            ; walking 1-5
            dc.b $EC, 9, 0,    0, $F3
            dc.b $FC, $E, 0, 6, $EB
    byte2_21333:    dc.b 3            ; walking 1-6
            dc.b $ED, $D, 0, 0, $EC
            dc.b $FD, $C, 0, 8, $F4
            dc.b 5,    9, 0, $C, $F4
    byte2_21343:    dc.b 5            ; walking 2-1
            dc.b $EB, 9, 0,    0, $EB
            dc.b $EB, 6, 0,    6, 3
            dc.b $FB, 8, 0,    $C, $EB
            dc.b 3,    9, 0, $F, $F3
            dc.b $13, 0, 0,    $15, $FB
    byte2_2135D:    dc.b 6            ; walking 2-2
            dc.b $EC, 9, 0,    0, $EC
            dc.b $EC, 1, 0,    6, 4
            dc.b $FC, $C, 0, 8, $EC
            dc.b 4,    9, 0, $C, $F4
            dc.b $FC, 5, 0,    $12, $C
            dc.b $F4, 0, 0,    $16, $14
    byte2_2137C:    dc.b 4            ; walking 2-3
            dc.b $ED, 9, 0,    0, $ED
            dc.b $ED, 1, 0,    6, 5
            dc.b $FD, $D, 0, 8, $F5
            dc.b $D, 8, 0, $10, $FD
    byte2_21391:    dc.b 5            ; walking 2-4
            dc.b $EB, 9, 0,    0, $EB
            dc.b $EB, 5, 0,    6, 3
            dc.b $FB, $D, 0, $A, $F3
            dc.b $B, 8, 0, $12, $F3
            dc.b $13, 4, 0,    $15, $FB
    byte2_213AB:    dc.b 4            ; walking 2-5
            dc.b $EC, 9, 0,    0, $EC
            dc.b $EC, 1, 0,    6, 4
            dc.b $FC, $D, 0, 8, $F4
            dc.b $C, 8, 0, $10, $FC
    byte2_213C0:    dc.b 5            ; walking 2-6
            dc.b $ED, 9, 0,    0, $ED
            dc.b $ED, 1, 0,    6, 5
            dc.b $FD, 0, 0,    8, $ED
            dc.b $FD, $D, 0, 9, $F5
            dc.b $D, 8, 0, $11, $FD
    byte2_213DA:    dc.b 4            ; walking 3-1
            dc.b $F4, 7, 0,    0, $EB
            dc.b $EC, 9, 0,    8, $FB
            dc.b $FC, 4, 0,    $E, $FB
            dc.b 4,    9, 0, $10, $FB
    byte2_213EF:    dc.b 2            ; walking 3-2
            dc.b $F4, 7, 0,    0, $EC
            dc.b $EC, $B, 0, 8, $FC
    byte2_213FA:    dc.b 2            ; walking 3-3
            dc.b $F4, 6, 0,    0, $ED
            dc.b $F4, $A, 0, 6, $FD
    byte2_21405:    dc.b 4            ; walking 3-4
            dc.b $F4, 6, 0,    0, $EB
            dc.b $EC, 9, 0,    6, $FB
            dc.b $FC, 4, 0,    $C, $FB
            dc.b 4,    9, 0, $E, $FB
    byte2_2141A:    dc.b 2            ; walking 3-5
            dc.b $F4, 6, 0,    0, $EC
            dc.b $F4, $B, 0, 6, $FC
    byte2_21425:    dc.b 3            ; walking 3-6
            dc.b $F4, 7, 0,    0, $ED
            dc.b $EC, 0, 0,    8, $FD
            dc.b $F4, $A, 0, 9, $FD
    byte2_21435:    dc.b 6            ; walking 4-1
            dc.b $FD, 6, 0,    0, $EB
            dc.b $ED, 4, 0,    6, $F3
            dc.b $F5, 4, 0,    8, $EB
            dc.b $F5, $A, 0, $A, $FB
            dc.b $D, 0, 0, $13, $FB
            dc.b $FD, 0, 0,    $14, $13
    byte2_21454:    dc.b 6            ; walking 4-2
            dc.b $FC, 6, 0,    0, $EC
            dc.b $E4, 8, 0,    6, $F4
            dc.b $EC, 4, 0,    9, $FC
            dc.b $F4, 4, 0,    $B, $EC
            dc.b $F4, $A, 0, $D, $FC
            dc.b $C, 0, 0, $16, $FC
    byte2_21473:    dc.b 4            ; walking 4-3
            dc.b $FB, 6, 0,    0, $ED
            dc.b $F3, 4, 0,    6, $ED
            dc.b $EB, $A, 0, 8, $FD
            dc.b 3,    4, 0, $11, $FD
    byte2_21488:    dc.b 5            ; walking 4-4
            dc.b $FD, 6, 0,    0, $EB
            dc.b $ED, 8, 0,    6, $F3
            dc.b $F5, 4, 0,    9, $EB
            dc.b $F5, $D, 0, $B, $FB
            dc.b 5,    8, 0, $13, $FB
    byte2_214A2:    dc.b 4            ; walking 4-5
            dc.b $FC, 6, 0,    0, $EC
            dc.b $F4, 4, 0,    6, $EC
            dc.b $EC, $A, 0, 8, $FC
            dc.b 4,    4, 0, $11, $FC
    byte2_214B7:    dc.b 5            ; walking 4-6
            dc.b $FB, 6, 0,    0, $ED
            dc.b $EB, $A, 0, 6, $FD
            dc.b $F3, 4, 0,    $F, $ED
            dc.b 3,    4, 0, $11, $FD
            dc.b $B, 0, 0, $13, $FD
    byte2_214D1:    dc.b 2            ; running 1-1
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte2_214DC:    dc.b 2            ; running 1-2
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte2_214E7:    dc.b 2            ; running 1-3
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte2_214F2:    dc.b 2            ; running 1-4
            dc.b $EE, 9, 0,    0, $F4
            dc.b $FE, $E, 0, 6, $EC
    byte2_214FD:    dc.b 4            ; running 2-1
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
            dc.b $FE, 0, 0,    $14, $EE
    byte2_21512:    dc.b 3            ; running 2-2
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
    byte2_21522:    dc.b 4            ; running 2-3
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
            dc.b $FE, 0, 0,    $14, $EE
    byte2_21537:    dc.b 3            ; running 2-4
            dc.b $EE, 9, 0,    0, $EE
            dc.b $EE, 1, 0,    6, 6
            dc.b $FE, $E, 0, 8, $F6
    byte2_21547:    dc.b 2            ; running 3-1
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte2_21552:    dc.b 2            ; running 3-2
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte2_2155D:    dc.b 2            ; running 3-3
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte2_21568:    dc.b 2            ; running 3-4
            dc.b $F4, 6, 0,    0, $EE
            dc.b $F4, $B, 0, 6, $FE
    byte2_21573:    dc.b 4            ; running 4-1
            dc.b $FA, 6, 0,    0, $EE
            dc.b $F2, 4, 0,    6, $EE
            dc.b $EA, $B, 0, 8, $FE
            dc.b $A, 0, 0, $14, $FE
    byte2_21588:    dc.b 2            ; running 4-2
            dc.b $F2, 7, 0,    0, $EE
            dc.b $EA, $B, 0, 8, $FE
    byte2_21593:    dc.b 4            ; running 4-3
            dc.b $FA, 6, 0,    0, $EE
            dc.b $F2, 4, 0,    6, $EE
            dc.b $EA, $B, 0, 8, $FE
            dc.b $A, 0, 0, $14, $FE
    byte2_215A8:    dc.b 2            ; running 4-4
            dc.b $F2, 7, 0,    0, $EE
            dc.b $EA, $B, 0, 8, $FE
    byte2_215B3:    dc.b 1            ; rolling 1
            dc.b $F0, $F, 0, 0, $F0
    byte2_215B9:    dc.b 1            ; rolling 2
            dc.b $F0, $F, 0, 0, $F0
    byte2_215BF:    dc.b 1            ; rolling 3
            dc.b $F0, $F, 0, 0, $F0
    byte2_215C5:    dc.b 1            ; rolling 4
            dc.b $F0, $F, 0, 0, $F0
    byte2_215CB:    dc.b 1            ; rolling 5
            dc.b $F0, $F, 0, 0, $F0
    byte2_215D1:    dc.b 2            ; warped 1 (unused)
            dc.b $F4, $E, 0, 0, $EC
            dc.b $F4, 2, 0,    $C, $C
    byte2_215DC:    dc.b 1            ; warped 2 (unused)
            dc.b $F0, $F, 0, 0, $F0
    byte2_215E2:    dc.b 2            ; warped 3 (unused)
            dc.b $EC, $B, 0, 0, $F4
            dc.b $C, 8, 0, $C, $F4
    byte2_215ED:    dc.b 1            ; warped 4 (unused)
            dc.b $F0, $F, 0, 0, $F0
    byte2_215F3:    dc.b 2            ; stopping 1
            dc.b $ED, 9, 0,    0, $F0
            dc.b $FD, $E, 0, 6, $F0
    byte2_215FE:    dc.b 4            ; stopping 2
            dc.b $ED, 9, 0,    0, $F0
            dc.b $FD, $D, 0, 6, $F0
            dc.b $D, 4, 0, $E, 0
            dc.b 5,    0, 0, $10, $E8
    byte2_21613:    dc.b 4            ; ducking
            dc.b $F4, 4, 0,    0, $FC
            dc.b $FC, $D, 0, 2, $F4
            dc.b $C, 8, 0, $A, $F4
            dc.b 4,    0, 0, $D, $EC
    byte2_21628:    dc.b 3            ; balancing 1
            dc.b $EC, 8, 8,    0, $E8
            dc.b $F4, 2, 8,    3, 0
            dc.b $F4, $F, 8, 6, $E0
    byte2_21638:    dc.b 3            ; balancing 2
            dc.b $EC, $E, 8, 0, $E8
            dc.b 4,    $D, 8, $C, $E0
            dc.b $C, 0, $18, $14, 0
    byte2_21648:    dc.b 3            ; spinning 1 (LZ)
            dc.b $F4, $D, 0, 0, $FC
            dc.b $FC, 5, 0,    8, $EC
            dc.b 4,    8, 0, $C, $FC
    byte2_21658:    dc.b 2            ; spinning 2 (LZ)
            dc.b $F4, $A, 0, 0, $E8
            dc.b $F4, $A, 8, 0, 0
    byte2_21663:    dc.b 3            ; spinning 3 (LZ)
            dc.b $F4, $D, 0, 0, $E4
            dc.b $FC, 0, 0,    8, 4
            dc.b 4,    $C, 0, 9, $EC
    byte2_21673:    dc.b 3            ; spinning 4 (LZ)
            dc.b $F4, $D, 0, 0, $FC
            dc.b $FC, 5, 0,    8, $EC
            dc.b 4,    8, 0, $C, $FC
    byte2_21683:    dc.b 3            ; bouncing
            dc.b $E8, $B, 0, 0, $F0
            dc.b 8,    4, 0, $C, $F8
            dc.b $10, 0, 0,    $E, $F8
    byte2_21693:    dc.b 4            ; hanging 1 (LZ)
            dc.b $F8, $E, 0, 0, $E8
            dc.b 0,    5, 0, $C, 8
            dc.b $F8, 0, 0,    $10, 8
            dc.b $F0, 0, 0,    $11, $F8
    byte2_216A8:    dc.b 4            ; hanging 2 (LZ)
            dc.b $F8, $E, 0, 0, $E8
            dc.b 0,    5, 0, $C, 8
            dc.b $F8, 0, 0,    $10, 8
            dc.b $F0, 0, 0,    $11, $F8
    byte2_216BD:    dc.b 5            ; celebration leap 1 (unused)
            dc.b $E8, $A, 0, 0, $F4
            dc.b $F0, 1, 0,    9, $C
            dc.b 0,    9, 0, $B, $F4
            dc.b $10, 4, 0,    $11, $F4
            dc.b 0,    0, 0, $13, $EC
    byte2_216D7:    dc.b 5            ; celebration leap 2 (unused)
            dc.b $E8, $A, 0, 0, $F4
            dc.b $E8, 1, 0,    9, $C
            dc.b 0,    9, 0, $B, $F4
            dc.b $10, 4, 0,    $11, $F4
            dc.b 0,    0, 0, $13, $EC
    byte2_216F1:    dc.b 2            ; pushing 1
            dc.b $ED, $A, 0, 0, $F3
            dc.b 5,    $D, 0, 9, $EB
    byte2_216FC:    dc.b 3            ; pushing 2
            dc.b $EC, $A, 0, 0, $F3
            dc.b 4,    8, 0, 9, $F3
            dc.b $C, 4, 0, $C, $F3
    byte2_2170C:    dc.b 2            ; pushing 3
            dc.b $ED, $A, 0, 0, $F3
            dc.b 5,    $D, 0, 9, $EB
    byte2_21717:    dc.b 3            ; pushing 4
            dc.b $EC, $A, 0, 0, $F3
            dc.b 4,    8, 0, 9, $F3
            dc.b $C, 4, 0, $C, $F3
    byte2_21727:    dc.b 2            ; surfing or sliding (unused)
            dc.b $EC, 9, 0,    0, $F0
            dc.b $FC, $E, 0, 6, $F0
    byte2_21732:    dc.b 3            ; collecting bubble (unused)
            dc.b $EC, $A, 0, 0, $F0
            dc.b 4,    5, 0, 9, $F8
            dc.b $E4, 0, 0,    $D, $F8
    byte2_21742:    dc.b 3            ; death    1
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, $B, 0, $A, $F4
    byte2_21752:    dc.b 5            ; drowning
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, 9, 0,    $A, $F4
            dc.b 8,    $C, 0, $10, $F4
            dc.b $10, 0, 0,    $14, $F4
    byte2_2176C:    dc.b 5            ; death    2
            dc.b $E8, $D, 0, 0, $EC
            dc.b $E8, 1, 0,    8, $C
            dc.b $F8, 9, 0,    $A, $F4
            dc.b 8,    $C, 0, $10, $F4
            dc.b $10, 0, 0,    $14, $F4
    byte2_21786:    dc.b 2            ; shrinking 1 (unused)
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $F, 0, 3, $F0
    byte2_21791:    dc.b 3            ; shrinking 2 (unused)
            dc.b $EC, 8, 0,    0, $F0
            dc.b $F4, $E, 0, 3, $F0
            dc.b $C, 8, 0, $F, $F8
    byte2_217A1:    dc.b 1            ; shrinking 3 (unused)
            dc.b $F0, $B, 0, 0, $F4
    byte2_217A7:    dc.b 1            ; shrinking 4 (unused)
            dc.b $F4, 6, 0,    0, $F8
    byte2_217AD:    dc.b 1            ; shrinking 5 (unused)
            dc.b $F8, 1, 0,    0, $FC
    byte2_217B3:    dc.b 3            ; injury
            dc.b $F4, $D, 8, 0, $E4
            dc.b $FC, 5, 8,    8, 4
            dc.b 4,    8, 8, $C, $EC
    byte2_217C3:    dc.b 3            ; spinning 5 (LZ)
            dc.b $F4, $D, 8, 0, $FC
            dc.b $FC, 0, 8,    8, $F4
            dc.b 4,    $C, 8, 9, $F4
    byte2_217D3:    dc.b 3            ; spinning 6 (LZ)
            dc.b $F0, $E, 0, 0, $EC
            dc.b $F8, 1, 0,    $C, $C
            dc.b 8,    $C, 0, $E, $F4
    byte2_217E3:    dc.b 3            ; collecting bubble (LZ)
            dc.b $EB, 9, 0,    0, $F4
            dc.b $FB, $E, 0, 6, $EC
            dc.b 3,    1, 0, $12, $C
    byte2_217F3:    dc.b 2            ; water    slide (LZ)
            dc.b $F0, $F, 0, 0, $EC
            dc.b $F8, 2, 0,    $10, $C
            even

    Now open the "Mighty dynamic pattern load cues.asm" and replace all the "SonPLC" with "MightyPLC" and the "SonicDynPLC" with "MightyDynPLC".
    Code:
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    loading    array for Sonic
    ; ---------------------------------------------------------------------------
            dc.w SonPLC_Blank-SonicDynPLC
            dc.w SonPLC_Stand-SonicDynPLC
            dc.w SonPLC_Wait1-SonicDynPLC
            dc.w SonPLC_Wait2-SonicDynPLC
            dc.w SonPLC_Wait3-SonicDynPLC
            dc.w SonPLC_LookUp-SonicDynPLC
            dc.w SonPLC_Walk11-SonicDynPLC
            dc.w SonPLC_Walk12-SonicDynPLC
            dc.w SonPLC_Walk13-SonicDynPLC
            dc.w SonPLC_Walk14-SonicDynPLC
            dc.w SonPLC_Walk15-SonicDynPLC
            dc.w SonPLC_Walk16-SonicDynPLC
            dc.w SonPLC_Walk21-SonicDynPLC
            dc.w SonPLC_Walk22-SonicDynPLC
            dc.w SonPLC_Walk23-SonicDynPLC
            dc.w SonPLC_Walk24-SonicDynPLC
            dc.w SonPLC_Walk25-SonicDynPLC
            dc.w SonPLC_Walk26-SonicDynPLC
            dc.w SonPLC_Walk31-SonicDynPLC
            dc.w SonPLC_Walk32-SonicDynPLC
            dc.w SonPLC_Walk33-SonicDynPLC
            dc.w SonPLC_Walk34-SonicDynPLC
            dc.w SonPLC_Walk35-SonicDynPLC
            dc.w SonPLC_Walk36-SonicDynPLC
            dc.w SonPLC_Walk41-SonicDynPLC
            dc.w SonPLC_Walk42-SonicDynPLC
            dc.w SonPLC_Walk43-SonicDynPLC
            dc.w SonPLC_Walk44-SonicDynPLC
            dc.w SonPLC_Walk45-SonicDynPLC
            dc.w SonPLC_Walk46-SonicDynPLC
            dc.w SonPLC_Run11-SonicDynPLC
            dc.w SonPLC_Run12-SonicDynPLC
            dc.w SonPLC_Run13-SonicDynPLC
            dc.w SonPLC_Run14-SonicDynPLC
            dc.w SonPLC_Run21-SonicDynPLC
            dc.w SonPLC_Run22-SonicDynPLC
            dc.w SonPLC_Run23-SonicDynPLC
            dc.w SonPLC_Run24-SonicDynPLC
            dc.w SonPLC_Run31-SonicDynPLC
            dc.w SonPLC_Run32-SonicDynPLC
            dc.w SonPLC_Run33-SonicDynPLC
            dc.w SonPLC_Run34-SonicDynPLC
            dc.w SonPLC_Run41-SonicDynPLC
            dc.w SonPLC_Run42-SonicDynPLC
            dc.w SonPLC_Run43-SonicDynPLC
            dc.w SonPLC_Run44-SonicDynPLC
            dc.w SonPLC_Roll1-SonicDynPLC
            dc.w SonPLC_Roll2-SonicDynPLC
            dc.w SonPLC_Roll3-SonicDynPLC
            dc.w SonPLC_Roll4-SonicDynPLC
            dc.w SonPLC_Roll5-SonicDynPLC
            dc.w SonPLC_Warp1-SonicDynPLC
            dc.w SonPLC_Warp2-SonicDynPLC
            dc.w SonPLC_Warp3-SonicDynPLC
            dc.w SonPLC_Warp4-SonicDynPLC
            dc.w SonPLC_Stop1-SonicDynPLC
            dc.w SonPLC_Stop2-SonicDynPLC
            dc.w SonPLC_Duck-SonicDynPLC
            dc.w SonPLC_Balance1-SonicDynPLC
            dc.w SonPLC_Balance2-SonicDynPLC
            dc.w SonPLC_Float1-SonicDynPLC
            dc.w SonPLC_Float2-SonicDynPLC
            dc.w SonPLC_Float3-SonicDynPLC
            dc.w SonPLC_Float4-SonicDynPLC
            dc.w SonPLC_Spring-SonicDynPLC
            dc.w SonPLC_Hang1-SonicDynPLC
            dc.w SonPLC_Hang2-SonicDynPLC
            dc.w SonPLC_Leap1-SonicDynPLC
            dc.w SonPLC_Leap2-SonicDynPLC
            dc.w SonPLC_Push1-SonicDynPLC
            dc.w SonPLC_Push2-SonicDynPLC
            dc.w SonPLC_Push3-SonicDynPLC
            dc.w SonPLC_Push4-SonicDynPLC
            dc.w SonPLC_Slide-SonicDynPLC
            dc.w SonPLC_BblUnk-SonicDynPLC
            dc.w SonPLC_Death1-SonicDynPLC
            dc.w SonPLC_Drown-SonicDynPLC
            dc.w SonPLC_Burnt-SonicDynPLC
            dc.w SonPLC_Shrink1-SonicDynPLC
            dc.w SonPLC_Shrink2-SonicDynPLC
            dc.w SonPLC_Shrink3-SonicDynPLC
            dc.w SonPLC_Shrink4-SonicDynPLC
            dc.w SonPLC_Shrink5-SonicDynPLC
            dc.w SonPLC_Float1-SonicDynPLC
            dc.w SonPLC_Float3-SonicDynPLC
            dc.w SonPLC_Injury1-SonicDynPLC
            dc.w SonPLC_Bubble-SonicDynPLC
            dc.w SonPLC_Injury2-SonicDynPLC
    SonPLC_Blank:    dc.b 0
    SonPLC_Stand:    dc.b 4,    $20, 0,    $70, 3,    $20, $B, $20, $E
    SonPLC_Wait1:    dc.b 3,    $50, $11, $50, $17, $20, $1D
    SonPLC_Wait2:    dc.b 3,    $50, $20, $50, $17, $20, $1D
    SonPLC_Wait3:    dc.b 3,    $50, $20, $50, $17, $20, $26
    SonPLC_LookUp:    dc.b 3,    $80, $29, $20, $B, $20,    $E
    SonPLC_Walk11:    dc.b 4,    $70, $32, $50, $3A, $50, $40, $10, $46
    SonPLC_Walk12:    dc.b 2,    $70, $32, $B0, $48
    SonPLC_Walk13:    dc.b 2,    $50, $54, $80, $5A
    SonPLC_Walk14:    dc.b 4,    $50, $54, $50, $63, $50, $69, $10, $6F
    SonPLC_Walk15:    dc.b 2,    $50, $54, $B0, $71
    SonPLC_Walk16:    dc.b 3,    $70, $32, $30, $7D, $50, $81
    SonPLC_Walk21:    dc.b 5,    $50, $87, $50, $8D, $20, $93, $50, $96,    0, $9C
    SonPLC_Walk22:    dc.b 6,    $50, $87, $10, $9D, $30, $9F, $50, $A3,    $30, $A9, 0, $AD
    SonPLC_Walk23:    dc.b 4,    $50, $AE, $10, $B4, $70, $B6, $20, $BE
    SonPLC_Walk24:    dc.b 5,    $50, $C1, $30, $C7, $70, $CB, $20, $D3,    $10, $D6
    SonPLC_Walk25:    dc.b 4,    $50, $C1, $10, $D8, $70, $DA, $20, $E2
    SonPLC_Walk26:    dc.b 5,    $50, $87, $10, $9D, 0, $93, $70, $E5, $20, $ED
    SonPLC_Walk31:    dc.b 4,    $70, $F0, $50, $F8, $10, $FE, $51, 0
    SonPLC_Walk32:    dc.b 2,    $70, $F0, $B1, 6
    SonPLC_Walk33:    dc.b 2,    $51, $12, $81, $18
    SonPLC_Walk34:    dc.b 4,    $51, $12, $51, $21, $11, $27, $51, $29
    SonPLC_Walk35:    dc.b 2,    $51, $12, $B1, $2F
    SonPLC_Walk36:    dc.b 3,    $70, $F0, 1, 6,    $81, $3B
    SonPLC_Walk41:    dc.b 6,    $51, $44, $11, $4A, $11, $4C, $81, $4E,    1, $57,    1, $58
    SonPLC_Walk42:    dc.b 6,    $51, $44, $21, $59, $11, $5C, $11, $5E,    $81, $60, 1, $57
    SonPLC_Walk43:    dc.b 4,    $51, $69, $11, $6F, $81, $71, $11, $7A
    SonPLC_Walk44:    dc.b 5,    $51, $7C, $21, $82, $11, $85, $71, $87,    $21, $8F
    SonPLC_Walk45:    dc.b 4,    $51, $7C, $11, $92, $81, $94, $11, $9D
    SonPLC_Walk46:    dc.b 5,    $51, $44, $81, $9F, $11, $5E, $11, $A8,    1, $57
    SonPLC_Run11:    dc.b 2,    $51, $AA, $B1, $B0
    SonPLC_Run12:    dc.b 2,    $50, $54, $B1, $BC
    SonPLC_Run13:    dc.b 2,    $51, $AA, $B1, $C8
    SonPLC_Run14:    dc.b 2,    $50, $54, $B1, $D4
    SonPLC_Run21:    dc.b 4,    $51, $E0, $11, $E6, $B1, $E8, 1, $F4
    SonPLC_Run22:    dc.b 3,    $51, $F5, $11, $FB, $B1, $FD
    SonPLC_Run23:    dc.b 4,    $51, $E0, $12, 9, $B2, $B, 1, $F4
    SonPLC_Run24:    dc.b 3,    $51, $F5, $11, $FB, $B2, $17
    SonPLC_Run31:    dc.b 2,    $52, $23, $B2, $29
    SonPLC_Run32:    dc.b 2,    $51, $12, $B2, $35
    SonPLC_Run33:    dc.b 2,    $52, $23, $B2, $41
    SonPLC_Run34:    dc.b 2,    $51, $12, $B2, $4D
    SonPLC_Run41:    dc.b 4,    $52, $59, $12, $5F, $B2, $61, 2, $6D
    SonPLC_Run42:    dc.b 2,    $72, $6E, $B2, $76
    SonPLC_Run43:    dc.b 4,    $52, $59, $12, $82, $B2, $84, 2, $6D
    SonPLC_Run44:    dc.b 2,    $72, $6E, $B2, $90
    SonPLC_Roll1:    dc.b 1,    $F2, $9C
    SonPLC_Roll2:    dc.b 1,    $F2, $AC
    SonPLC_Roll3:    dc.b 1,    $F2, $BC
    SonPLC_Roll4:    dc.b 1,    $F2, $CC
    SonPLC_Roll5:    dc.b 1,    $F2, $DC
    SonPLC_Warp1:    dc.b 2,    $B2, $EC, $22, $F8
    SonPLC_Warp2:    dc.b 1,    $F2, $FB
    SonPLC_Warp3:    dc.b 2,    $B3, $B, $23, $17
    SonPLC_Warp4:    dc.b 1,    $F3, $1A
    SonPLC_Stop1:    dc.b 2,    $53, $2A, $B3, $30
    SonPLC_Stop2:    dc.b 4,    $53, $3C, $73, $42, $13, $4A, 3, $4C
    SonPLC_Duck:    dc.b 4,    $13, $4D, $73, $4F, $23, $57, 3, $5A
    SonPLC_Balance1:dc.b 3,    $23, $5B, $23, $5E, $F3, $61
    SonPLC_Balance2:dc.b 3,    $B3, $71, $73, $7D, 0, $71
    SonPLC_Float1:    dc.b 3,    $73, $85, $33, $8D, $23, $91
    SonPLC_Float2:    dc.b 1,    $83, $94
    SonPLC_Float3:    dc.b 3,    $73, $9D, 3, $A5, $33, $A6
    SonPLC_Float4:    dc.b 3,    $73, $AA, $33, $B2, $23, $B6
    SonPLC_Spring:    dc.b 3,    $B3, $B9, $13, $C5, 3, $C7
    SonPLC_Hang1:    dc.b 4,    $B3, $C8, $33, $D4, 3, $D8, 3, $D9
    SonPLC_Hang2:    dc.b 4,    $B3, $DA, $33, $E6, 3, $EA, 3, $EB
    SonPLC_Leap1:    dc.b 5,    $83, $EC, $13, $F5, $53, $F7, $13, $FD,    3, $FF
    SonPLC_Leap2:    dc.b 5,    $84, 0,    $14, 9,    $53, $F7, $13, $FD, 3, $FF
    SonPLC_Push1:    dc.b 2,    $84, $B, $74, $14
    SonPLC_Push2:    dc.b 3,    $84, $1C, $24, $25, $14, $28
    SonPLC_Push3:    dc.b 2,    $84, $2A, $74, $33
    SonPLC_Push4:    dc.b 3,    $84, $1C, $24, $3B, $14, $3E
    SonPLC_Slide:    dc.b 2,    $54, $40, $B4, $46
    SonPLC_BblUnk:    dc.b 3,    $84, $52, $34, $5B, 4, $5F
    SonPLC_Death1:    dc.b 3,    $74, $60, $14, $68, $B4, $6A
    SonPLC_Drown:    dc.b 5,    $74, $76, $14, $7E, $54, $80, $34, $86,    4, $8A
    SonPLC_Burnt:    dc.b 5,    $74, $8B, $14, $7E, $54, $93, $34, $86,    4, $8A
    SonPLC_Shrink1:    dc.b 2,    $24, $99, $F4, $9C
    SonPLC_Shrink2:    dc.b 3,    $24, $AC, $B4, $AF, $24, $BB
    SonPLC_Shrink3:    dc.b 1,    $B4, $BE
    SonPLC_Shrink4:    dc.b 1,    $54, $CA
    SonPLC_Shrink5:    dc.b 1,    $14, $D0
    SonPLC_Injury1:    dc.b 3,    $B4, $D2, $14, $DE, $34, $E0
    SonPLC_Bubble:    dc.b 3,    $54, $E4, $B4, $EA, $10, $6D
    SonPLC_Injury2:    dc.b 2,    $F4, $F6, $25, 6
            even
    Code:
    ; ---------------------------------------------------------------------------
    ; Uncompressed graphics    loading    array for Sonic
    ; ---------------------------------------------------------------------------
            dc.w MightyPLC_Blank-MightyDynPLC
            dc.w MightyPLC_Stand-MightyDynPLC
            dc.w MightyPLC_Wait1-MightyDynPLC
            dc.w MightyPLC_Wait2-MightyDynPLC
            dc.w MightyPLC_Wait3-MightyDynPLC
            dc.w MightyPLC_LookUp-MightyDynPLC
            dc.w MightyPLC_Walk11-MightyDynPLC
            dc.w MightyPLC_Walk12-MightyDynPLC
            dc.w MightyPLC_Walk13-MightyDynPLC
            dc.w MightyPLC_Walk14-MightyDynPLC
            dc.w MightyPLC_Walk15-MightyDynPLC
            dc.w MightyPLC_Walk16-MightyDynPLC
            dc.w MightyPLC_Walk21-MightyDynPLC
            dc.w MightyPLC_Walk22-MightyDynPLC
            dc.w MightyPLC_Walk23-MightyDynPLC
            dc.w MightyPLC_Walk24-MightyDynPLC
            dc.w MightyPLC_Walk25-MightyDynPLC
            dc.w MightyPLC_Walk26-MightyDynPLC
            dc.w MightyPLC_Walk31-MightyDynPLC
            dc.w MightyPLC_Walk32-MightyDynPLC
            dc.w MightyPLC_Walk33-MightyDynPLC
            dc.w MightyPLC_Walk34-MightyDynPLC
            dc.w MightyPLC_Walk35-MightyDynPLC
            dc.w MightyPLC_Walk36-MightyDynPLC
            dc.w MightyPLC_Walk41-MightyDynPLC
            dc.w MightyPLC_Walk42-MightyDynPLC
            dc.w MightyPLC_Walk43-MightyDynPLC
            dc.w MightyPLC_Walk44-MightyDynPLC
            dc.w MightyPLC_Walk45-MightyDynPLC
            dc.w MightyPLC_Walk46-MightyDynPLC
            dc.w MightyPLC_Run11-MightyDynPLC
            dc.w MightyPLC_Run12-MightyDynPLC
            dc.w MightyPLC_Run13-MightyDynPLC
            dc.w MightyPLC_Run14-MightyDynPLC
            dc.w MightyPLC_Run21-MightyDynPLC
            dc.w MightyPLC_Run22-MightyDynPLC
            dc.w MightyPLC_Run23-MightyDynPLC
            dc.w MightyPLC_Run24-MightyDynPLC
            dc.w MightyPLC_Run31-MightyDynPLC
            dc.w MightyPLC_Run32-MightyDynPLC
            dc.w MightyPLC_Run33-MightyDynPLC
            dc.w MightyPLC_Run34-MightyDynPLC
            dc.w MightyPLC_Run41-MightyDynPLC
            dc.w MightyPLC_Run42-MightyDynPLC
            dc.w MightyPLC_Run43-MightyDynPLC
            dc.w MightyPLC_Run44-MightyDynPLC
            dc.w MightyPLC_Roll1-MightyDynPLC
            dc.w MightyPLC_Roll2-MightyDynPLC
            dc.w MightyPLC_Roll3-MightyDynPLC
            dc.w MightyPLC_Roll4-MightyDynPLC
            dc.w MightyPLC_Roll5-MightyDynPLC
            dc.w MightyPLC_Warp1-MightyDynPLC
            dc.w MightyPLC_Warp2-MightyDynPLC
            dc.w MightyPLC_Warp3-MightyDynPLC
            dc.w MightyPLC_Warp4-MightyDynPLC
            dc.w MightyPLC_Stop1-MightyDynPLC
            dc.w MightyPLC_Stop2-MightyDynPLC
            dc.w MightyPLC_Duck-MightyDynPLC
            dc.w MightyPLC_Balance1-MightyDynPLC
            dc.w MightyPLC_Balance2-MightyDynPLC
            dc.w MightyPLC_Float1-MightyDynPLC
            dc.w MightyPLC_Float2-MightyDynPLC
            dc.w MightyPLC_Float3-MightyDynPLC
            dc.w MightyPLC_Float4-MightyDynPLC
            dc.w MightyPLC_Spring-MightyDynPLC
            dc.w MightyPLC_Hang1-MightyDynPLC
            dc.w MightyPLC_Hang2-MightyDynPLC
            dc.w MightyPLC_Leap1-MightyDynPLC
            dc.w MightyPLC_Leap2-MightyDynPLC
            dc.w MightyPLC_Push1-MightyDynPLC
            dc.w MightyPLC_Push2-MightyDynPLC
            dc.w MightyPLC_Push3-MightyDynPLC
            dc.w MightyPLC_Push4-MightyDynPLC
            dc.w MightyPLC_Slide-MightyDynPLC
            dc.w MightyPLC_BblUnk-MightyDynPLC
            dc.w MightyPLC_Death1-MightyDynPLC
            dc.w MightyPLC_Drown-MightyDynPLC
            dc.w MightyPLC_Burnt-MightyDynPLC
            dc.w MightyPLC_Shrink1-MightyDynPLC
            dc.w MightyPLC_Shrink2-MightyDynPLC
            dc.w MightyPLC_Shrink3-MightyDynPLC
            dc.w MightyPLC_Shrink4-MightyDynPLC
            dc.w MightyPLC_Shrink5-MightyDynPLC
            dc.w MightyPLC_Float1-MightyDynPLC
            dc.w MightyPLC_Float3-MightyDynPLC
            dc.w MightyPLC_Injury1-MightyDynPLC
            dc.w MightyPLC_Bubble-MightyDynPLC
            dc.w MightyPLC_Injury2-MightyDynPLC
    MightyPLC_Blank:    dc.b 0
    MightyPLC_Stand:    dc.b 4,    $20, 0,    $70, 3,    $20, $B, $20, $E
    MightyPLC_Wait1:    dc.b 3,    $50, $11, $50, $17, $20, $1D
    MightyPLC_Wait2:    dc.b 3,    $50, $20, $50, $17, $20, $1D
    MightyPLC_Wait3:    dc.b 3,    $50, $20, $50, $17, $20, $26
    MightyPLC_LookUp:    dc.b 3,    $80, $29, $20, $B, $20,    $E
    MightyPLC_Walk11:    dc.b 4,    $70, $32, $50, $3A, $50, $40, $10, $46
    MightyPLC_Walk12:    dc.b 2,    $70, $32, $B0, $48
    MightyPLC_Walk13:    dc.b 2,    $50, $54, $80, $5A
    MightyPLC_Walk14:    dc.b 4,    $50, $54, $50, $63, $50, $69, $10, $6F
    MightyPLC_Walk15:    dc.b 2,    $50, $54, $B0, $71
    MightyPLC_Walk16:    dc.b 3,    $70, $32, $30, $7D, $50, $81
    MightyPLC_Walk21:    dc.b 5,    $50, $87, $50, $8D, $20, $93, $50, $96,    0, $9C
    MightyPLC_Walk22:    dc.b 6,    $50, $87, $10, $9D, $30, $9F, $50, $A3,    $30, $A9, 0, $AD
    MightyPLC_Walk23:    dc.b 4,    $50, $AE, $10, $B4, $70, $B6, $20, $BE
    MightyPLC_Walk24:    dc.b 5,    $50, $C1, $30, $C7, $70, $CB, $20, $D3,    $10, $D6
    MightyPLC_Walk25:    dc.b 4,    $50, $C1, $10, $D8, $70, $DA, $20, $E2
    MightyPLC_Walk26:    dc.b 5,    $50, $87, $10, $9D, 0, $93, $70, $E5, $20, $ED
    MightyPLC_Walk31:    dc.b 4,    $70, $F0, $50, $F8, $10, $FE, $51, 0
    MightyPLC_Walk32:    dc.b 2,    $70, $F0, $B1, 6
    MightyPLC_Walk33:    dc.b 2,    $51, $12, $81, $18
    MightyPLC_Walk34:    dc.b 4,    $51, $12, $51, $21, $11, $27, $51, $29
    MightyPLC_Walk35:    dc.b 2,    $51, $12, $B1, $2F
    MightyPLC_Walk36:    dc.b 3,    $70, $F0, 1, 6,    $81, $3B
    MightyPLC_Walk41:    dc.b 6,    $51, $44, $11, $4A, $11, $4C, $81, $4E,    1, $57,    1, $58
    MightyPLC_Walk42:    dc.b 6,    $51, $44, $21, $59, $11, $5C, $11, $5E,    $81, $60, 1, $57
    MightyPLC_Walk43:    dc.b 4,    $51, $69, $11, $6F, $81, $71, $11, $7A
    MightyPLC_Walk44:    dc.b 5,    $51, $7C, $21, $82, $11, $85, $71, $87,    $21, $8F
    MightyPLC_Walk45:    dc.b 4,    $51, $7C, $11, $92, $81, $94, $11, $9D
    MightyPLC_Walk46:    dc.b 5,    $51, $44, $81, $9F, $11, $5E, $11, $A8,    1, $57
    MightyPLC_Run11:    dc.b 2,    $51, $AA, $B1, $B0
    MightyPLC_Run12:    dc.b 2,    $50, $54, $B1, $BC
    MightyPLC_Run13:    dc.b 2,    $51, $AA, $B1, $C8
    MightyPLC_Run14:    dc.b 2,    $50, $54, $B1, $D4
    MightyPLC_Run21:    dc.b 4,    $51, $E0, $11, $E6, $B1, $E8, 1, $F4
    MightyPLC_Run22:    dc.b 3,    $51, $F5, $11, $FB, $B1, $FD
    MightyPLC_Run23:    dc.b 4,    $51, $E0, $12, 9, $B2, $B, 1, $F4
    MightyPLC_Run24:    dc.b 3,    $51, $F5, $11, $FB, $B2, $17
    MightyPLC_Run31:    dc.b 2,    $52, $23, $B2, $29
    MightyPLC_Run32:    dc.b 2,    $51, $12, $B2, $35
    MightyPLC_Run33:    dc.b 2,    $52, $23, $B2, $41
    MightyPLC_Run34:    dc.b 2,    $51, $12, $B2, $4D
    MightyPLC_Run41:    dc.b 4,    $52, $59, $12, $5F, $B2, $61, 2, $6D
    MightyPLC_Run42:    dc.b 2,    $72, $6E, $B2, $76
    MightyPLC_Run43:    dc.b 4,    $52, $59, $12, $82, $B2, $84, 2, $6D
    MightyPLC_Run44:    dc.b 2,    $72, $6E, $B2, $90
    MightyPLC_Roll1:    dc.b 1,    $F2, $9C
    MightyPLC_Roll2:    dc.b 1,    $F2, $AC
    MightyPLC_Roll3:    dc.b 1,    $F2, $BC
    MightyPLC_Roll4:    dc.b 1,    $F2, $CC
    MightyPLC_Roll5:    dc.b 1,    $F2, $DC
    MightyPLC_Warp1:    dc.b 2,    $B2, $EC, $22, $F8
    MightyPLC_Warp2:    dc.b 1,    $F2, $FB
    MightyPLC_Warp3:    dc.b 2,    $B3, $B, $23, $17
    MightyPLC_Warp4:    dc.b 1,    $F3, $1A
    MightyPLC_Stop1:    dc.b 2,    $53, $2A, $B3, $30
    MightyPLC_Stop2:    dc.b 4,    $53, $3C, $73, $42, $13, $4A, 3, $4C
    MightyPLC_Duck:    dc.b 4,    $13, $4D, $73, $4F, $23, $57, 3, $5A
    MightyPLC_Balance1:dc.b 3,    $23, $5B, $23, $5E, $F3, $61
    MightyPLC_Balance2:dc.b 3,    $B3, $71, $73, $7D, 0, $71
    MightyPLC_Float1:    dc.b 3,    $73, $85, $33, $8D, $23, $91
    MightyPLC_Float2:    dc.b 1,    $83, $94
    MightyPLC_Float3:    dc.b 3,    $73, $9D, 3, $A5, $33, $A6
    MightyPLC_Float4:    dc.b 3,    $73, $AA, $33, $B2, $23, $B6
    MightyPLC_Spring:    dc.b 3,    $B3, $B9, $13, $C5, 3, $C7
    MightyPLC_Hang1:    dc.b 4,    $B3, $C8, $33, $D4, 3, $D8, 3, $D9
    MightyPLC_Hang2:    dc.b 4,    $B3, $DA, $33, $E6, 3, $EA, 3, $EB
    MightyPLC_Leap1:    dc.b 5,    $83, $EC, $13, $F5, $53, $F7, $13, $FD,    3, $FF
    MightyPLC_Leap2:    dc.b 5,    $84, 0,    $14, 9,    $53, $F7, $13, $FD, 3, $FF
    MightyPLC_Push1:    dc.b 2,    $84, $B, $74, $14
    MightyPLC_Push2:    dc.b 3,    $84, $1C, $24, $25, $14, $28
    MightyPLC_Push3:    dc.b 2,    $84, $2A, $74, $33
    MightyPLC_Push4:    dc.b 3,    $84, $1C, $24, $3B, $14, $3E
    MightyPLC_Slide:    dc.b 2,    $54, $40, $B4, $46
    MightyPLC_BblUnk:    dc.b 3,    $84, $52, $34, $5B, 4, $5F
    MightyPLC_Death1:    dc.b 3,    $74, $60, $14, $68, $B4, $6A
    MightyPLC_Drown:    dc.b 5,    $74, $76, $14, $7E, $54, $80, $34, $86,    4, $8A
    MightyPLC_Burnt:    dc.b 5,    $74, $8B, $14, $7E, $54, $93, $34, $86,    4, $8A
    MightyPLC_Shrink1:    dc.b 2,    $24, $99, $F4, $9C
    MightyPLC_Shrink2:    dc.b 3,    $24, $AC, $B4, $AF, $24, $BB
    MightyPLC_Shrink3:    dc.b 1,    $B4, $BE
    MightyPLC_Shrink4:    dc.b 1,    $54, $CA
    MightyPLC_Shrink5:    dc.b 1,    $14, $D0
    MightyPLC_Injury1:    dc.b 3,    $B4, $D2, $14, $DE, $34, $E0
    MightyPLC_Bubble:    dc.b 3,    $54, $E4, $B4, $EA, $10, $6D
    MightyPLC_Injury2:    dc.b 2,    $F4, $F6, $25, 6
            even

    If you have well done everything, if you try to build, you have 0 errors. If you have errors, try again.
    --------------------------------------------------------------------------------------------------------------------------------------
    STEP 3: Make the game load the extra character
    First, we need a free RAM adress, choose one here http://info.sonicretro.org/SCHG:Sonic_the_Hedgehog_(16-bit)/RAM_Editing (I recommend a peer RAM address).
    If you do not decide, then i will choose $FFFFFFF6. Replace any free ram adress with this one if you want.

    Search for "LoadSonicDynPLC:"
    You will see this:
    Code:
    ; ---------------------------------------------------------------------------
    ; Sonic    pattern    loading    subroutine
    ; ---------------------------------------------------------------------------
    
    ; ||||||||||||||| S U B    R O U T    I N E |||||||||||||||||||||||||||||||||||||||
    
    
    LoadSonicDynPLC:            ; XREF: Obj01_Control; et al
            moveq    #0,d0
            move.b    $1A(a0),d0    ; load frame number
            cmp.b    ($FFFFF766).w,d0
            beq.s    locret_13C96
            move.b    d0,($FFFFF766).w
            lea    (SonicDynPLC).l,a2
            add.w    d0,d0
            adda.w    (a2,d0.w),a2
            moveq    #0,d1
            move.b    (a2)+,d1    ; read "number of entries" value
            subq.b    #1,d1
            bmi.s    locret_13C96
            lea    ($FFFFC800).w,a3
            move.b    #1,($FFFFF767).w
    
    SPLC_ReadEntry:
            moveq    #0,d2
            move.b    (a2)+,d2
            move.w    d2,d0
            lsr.b    #4,d0
            lsl.w    #8,d2
            move.b    (a2)+,d2
            lsl.w    #5,d2
            lea    (Art_Sonic).l,a1
            adda.l    d2,a1
    
    SPLC_LoadTile:
            movem.l    (a1)+,d2-d6/a4-a6
            movem.l    d2-d6/a4-a6,(a3)
            lea    $20(a3),a3    ; next tile
            dbf    d0,SPLC_LoadTile ; repeat for number of    tiles
    
            dbf    d1,SPLC_ReadEntry ; repeat for number of entries
    
    locret_13C96:
            rts
    ; End of function LoadSonicDynPLC

    Just below "lea (SonicDynPLC).l,a2", paste this
    Code:
    tst.b     ($FFFFFFF6).w ; if player flag set?
            beq.s     LoadDynPLC_cont
            lea    (MightyDynPLC).l,a2
        
    LoadDynPLC_cont:
    
    Now, under "SPLC_ReadEntry:", you see this:
    Code:
    SPLC_ReadEntry:
            moveq    #0,d2
            move.b    (a2)+,d2
            move.w    d2,d0
            lsr.b    #4,d0
            lsl.w    #8,d2
            move.b    (a2)+,d2
            lsl.w    #5,d2
            lea    (Art_Sonic).l,a1
            adda.l    d2,a1
    
    SPLC_LoadTile:
    Do the same as above:


    Code:
    lea    (Art_Sonic).l,a1
            tst.b     ($FFFFFFF6).w ; if player flag set?
            beq.s    SPLC_cont
            lea    (Art_Mighty).l,a1
         
    SPLC_cont:
            adda.l    d2,a1
    
    SPLC_LoadTile:


    Search for "Obj01_Main:", you will see this:

    Code:
    Obj01_Main:                ; XREF: Obj01_Index
            addq.b    #2,$24(a0)
            move.b    #$13,$16(a0)
            move.b    #9,$17(a0)
            move.l    #Map_Sonic,4(a0)
            move.w    #$780,2(a0)
            move.b    #2,$18(a0)
            move.b    #$18,$19(a0)
            move.b    #4,1(a0)
            move.w    #$600,($FFFFF760).w ; Sonic's top speed
            move.w    #$C,($FFFFF762).w ; Sonic's acceleration
            move.w    #$80,($FFFFF764).w ; Sonic's deceleration
    
    Obj01_Control:                ; XREF: Obj01_Index
    Again, put a check for Mighty, with our ram adress "$FFFFFFF6".

    Code:
    Obj01_Main:                ; XREF: Obj01_Index
            addq.b    #2,$24(a0)
            move.b    #$13,$16(a0)
            move.b    #9,$17(a0)
            move.l    #Map_Sonic,4(a0)
            tst.b     ($FFFFFFF6).w ; if player flag set?
            beq.s     Obj01_Main_cont
            move.l    #Map_Mighty,4(a0)
         
    Obj01_Main_cont:
            move.w    #$780,2(a0)
            move.b    #2,$18(a0)
            move.b    #$18,$19(a0)
            move.b    #4,1(a0)
            move.w    #$600,($FFFFF760).w ; Sonic's top speed
            move.w    #$C,($FFFFF762).w ; Sonic's acceleration
            move.w    #$80,($FFFFF764).w ; Sonic's deceleration
    
    Obj01_Control:                ; XREF: Obj01_Index
    Now, search for "Sonic_Animate:", just below "lea (SonicAniData).l,a1", do the same again:

    Code:
    tst.b     ($FFFFFFF6).w ; if player flag set?
            beq.s     Sonic_Animate_cont
            lea    (MightyAniData).l,a1
         
    Sonic_Animate_cont: 
    Now, replace all
    Code:
    SAnim_WalkRun:                ; XREF: SAnim_Do
            subq.b    #1,$1E(a0)    ; subtract 1 from frame    duration
            bpl.s    SAnim_Delay    ; if time remains, branch
            addq.b    #1,d0        ; is animation walking/running?
            bne.w    SAnim_RollJump    ; if not, branch
            moveq    #0,d1
            move.b    $26(a0),d0    ; get Sonic's angle
            move.b    $22(a0),d2
            andi.b    #1,d2        ; is Sonic mirrored horizontally?
            bne.s    loc_13A70    ; if yes, branch
            not.b    d0        ; reverse angle
    
    loc_13A70:
            addi.b    #$10,d0        ; add $10 to angle
            bpl.s    loc_13A78    ; if angle is $0-$7F, branch
            moveq    #3,d1
    
    loc_13A78:
            andi.b    #$FC,1(a0)
            eor.b    d1,d2
            or.b    d2,1(a0)
            btst    #5,$22(a0)
            bne.w    SAnim_Push
            lsr.b    #4,d0        ; divide angle by $10
            andi.b    #6,d0        ; angle    must be    0, 2, 4    or 6
            move.w    $14(a0),d2    ; get Sonic's speed
            bpl.s    loc_13A9C
            neg.w    d2
    
    loc_13A9C:
            lea    (SonAni_Run).l,a1 ; use    running    animation
            cmpi.w    #$600,d2    ; is Sonic at running speed?
            bcc.s    loc_13AB4    ; if yes, branch
            lea    (SonAni_Walk).l,a1 ; use walking animation
            move.b    d0,d1
            lsr.b    #1,d1
            add.b    d1,d0
    
    loc_13AB4:
            add.b    d0,d0
            move.b    d0,d3
            neg.w    d2
            addi.w    #$800,d2
            bpl.s    loc_13AC2
            moveq    #0,d2
    
    loc_13AC2:
            lsr.w    #8,d2
            move.b    d2,$1E(a0)    ; modify frame duration
            bsr.w    SAnim_Do2
            add.b    d3,$1A(a0)    ; modify frame number
            rts
    ; ===========================================================================
    
    SAnim_RollJump:                ; XREF: SAnim_WalkRun
            addq.b    #1,d0        ; is animation rolling/jumping?
            bne.s    SAnim_Push    ; if not, branch
            move.w    $14(a0),d2    ; get Sonic's speed
            bpl.s    loc_13ADE
            neg.w    d2
    
    loc_13ADE:
            lea    (SonAni_Roll2).l,a1 ; use fast animation
            cmpi.w    #$600,d2    ; is Sonic moving fast?
            bcc.s    loc_13AF0    ; if yes, branch
            lea    (SonAni_Roll).l,a1 ; use slower    animation
    
    loc_13AF0:
            neg.w    d2
            addi.w    #$400,d2
            bpl.s    loc_13AFA
            moveq    #0,d2
    
    loc_13AFA:
            lsr.w    #8,d2
            move.b    d2,$1E(a0)    ; modify frame duration
            move.b    $22(a0),d1
            andi.b    #1,d1
            andi.b    #$FC,1(a0)
            or.b    d1,1(a0)
            bra.w    SAnim_Do2
    ; ===========================================================================
    
    SAnim_Push:                ; XREF: SAnim_RollJump
            move.w    $14(a0),d2    ; get Sonic's speed
            bmi.s    loc_13B1E
            neg.w    d2
    
    loc_13B1E:
            addi.w    #$800,d2
            bpl.s    loc_13B26
            moveq    #0,d2
    
    loc_13B26:
            lsr.w    #6,d2
            move.b    d2,$1E(a0)    ; modify frame duration
            lea    (SonAni_Push).l,a1
            move.b    $22(a0),d1
            andi.b    #1,d1
            andi.b    #$FC,1(a0)
            or.b    d1,1(a0)
            bra.w    SAnim_Do2
    ; End of function Sonic_Animate

    With
    SAnim_WalkRun: ; XREF: SAnim_Do
    subq.b #1,$1E(a0) ; subtract 1 from frame duration
    bpl.s SAnim_Delay ; if time remains, branch
    addq.b #1,d0 ; is animation walking/running?
    bne.w SAnim_RollJump ; if not, branch
    moveq #0,d1
    move.b $26(a0),d0 ; get Sonic's angle
    move.b $22(a0),d2
    andi.b #1,d2 ; is Sonic mirrored horizontally?
    bne.s loc_13A70 ; if yes, branch
    not.b d0 ; reverse angle

    loc_13A70:
    addi.b #$10,d0 ; add $10 to angle
    bpl.s loc_13A78 ; if angle is $0-$7F, branch
    moveq #3,d1

    loc_13A78:
    andi.b #$FC,1(a0)
    eor.b d1,d2
    or.b d2,1(a0)
    btst #5,$22(a0)
    bne.w SAnim_Push
    lsr.b #4,d0 ; divide angle by $10
    andi.b #6,d0 ; angle must be 0, 2, 4 or 6
    move.w $14(a0),d2 ; get Sonic's speed
    bpl.s loc_13A9C
    neg.w d2

    loc_13A9C:
    lea (SonAni_Run).l,a1 ; use running animation
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s cont_1
    lea (MightyAni_Run).l,a1 ; use running animation

    cont_1:
    cmpi.w #$600,d2 ; is Sonic at running speed?
    bcc.s loc_13AB4 ; if yes, branch
    lea (SonAni_Walk).l,a1 ; use walking animation
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s cont_2
    lea (MightyAni_Walk).l,a1 ; use walking animation

    cont_2:
    move.b d0,d1
    lsr.b #1,d1
    add.b d1,d0

    loc_13AB4:
    add.b d0,d0
    move.b d0,d3
    neg.w d2
    addi.w #$800,d2
    bpl.s loc_13AC2
    moveq #0,d2

    loc_13AC2:
    lsr.w #8,d2
    move.b d2,$1E(a0) ; modify frame duration
    bsr.w SAnim_Do2
    add.b d3,$1A(a0) ; modify frame number
    rts
    ; ===========================================================================

    SAnim_RollJump: ; XREF: SAnim_WalkRun
    addq.b #1,d0 ; is animation rolling/jumping?
    bne.s SAnim_Push ; if not, branch
    move.w $14(a0),d2 ; get Sonic's speed
    bpl.s loc_13ADE
    neg.w d2

    loc_13ADE:
    lea (SonAni_Roll2).l,a1 ; use fast animation
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s cont_3
    lea (MightyAni_Roll2).l,a1 ; use fast animation

    cont_3:
    cmpi.w #$600,d2 ; is Sonic moving fast?
    bcc.s loc_13AF0 ; if yes, branch
    lea (SonAni_Roll).l,a1 ; use slower animation
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s loc_13AF0
    lea (MightyAni_Roll).l,a1 ; use slower animation

    loc_13AF0:
    neg.w d2
    addi.w #$400,d2
    bpl.s loc_13AFA
    moveq #0,d2

    loc_13AFA:
    lsr.w #8,d2
    move.b d2,$1E(a0) ; modify frame duration
    move.b $22(a0),d1
    andi.b #1,d1
    andi.b #$FC,1(a0)
    or.b d1,1(a0)
    bra.w SAnim_Do2
    ; ===========================================================================

    SAnim_Push: ; XREF: SAnim_RollJump
    move.w $14(a0),d2 ; get Sonic's speed
    bmi.s loc_13B1E
    neg.w d2

    loc_13B1E:
    addi.w #$800,d2
    bpl.s loc_13B26
    moveq #0,d2

    loc_13B26:
    lsr.w #6,d2
    move.b d2,$1E(a0) ; modify frame duration
    lea (SonAni_Push).l,a1
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s cont_4
    lea (MightyAni_Push).l,a1

    cont_4:
    move.b $22(a0),d1
    andi.b #1,d1
    andi.b #$FC,1(a0)
    or.b d1,1(a0)
    bra.w SAnim_Do2
    ; End of function Sonic_Animate

    Finally: for the palettes, search for "Level_LoadPal:"
    You see this:
    Code:
    Level_LoadPal:
            move.w    #$1E,($FFFFFE14).w
            move    #$2300,sr
            moveq    #3,d0
            bsr.w    PalLoad2    ; load Sonic's pallet line
            cmpi.b    #1,($FFFFFE10).w ; is level LZ?
            bne.s    Level_GetBgm    ; if not, branch
            moveq    #$F,d0        ; pallet number    $0F (LZ)
            cmpi.b    #3,($FFFFFE11).w ; is act number 3?
            bne.s    Level_WaterPal    ; if not, branch
            moveq    #$10,d0        ; pallet number    $10 (SBZ3)
    
    Level_WaterPal:
    Put a check for the extra character, under the line "moveq #3,d0", before the line:
    "bsr.w PalLoad2 ; load Sonic's pallet line", add this:
    Code:
    tst.b     ($FFFFFFF6).w ; if player flag set?
            beq.s     Level_LoadPal_cont ; if not, cancel
            moveq    #$14,d0 ; $14 is the number of the palette ID in "pallet pointers.asm"
         
    Level_LoadPal_cont:
    As you can see, i use the ID $14 for the palette entry.

    Open "Pallet pointers.asm" in the "_inc" folder, and under:
    Code:
    dc.l Pal_Ending ;13
        dc.w $FB00
        dc.w $1F
    Paste it:
    Code:
    dc.l Pal_Mighty ;14
        dc.w $FB00
        dc.w 7

    Okay, now, if you build, and if you do all this steps correctly, you will get 0 errors.
    If you start to play your hack, the character is Sonic.

    There is several possibilities for you to make the game able to load your character, by make a code at the titlescreen, put a titlemenu screen ect..

    For my tutorial, i will use the method used in the Sonic Retro's How To tutorial:
    So search for 'loc_3230:'. You should find something like this:
    Code:
    loc_3230:
            tst.w    ($FFFFF614).w
            beq.w    Demo
            andi.b    #$80,($FFFFF605).w; check if Start is pressed
            beq.w    loc_317C; if not, branch
    After the beq.w Demo, put this in:
    Code:
    Title_CheckForB:
            cmpi.b    #$10, ($FFFFF605).w    ; has B been pressed?
            bne.s    StartCheck        ; if not, branch
    
    Title_SecondCharacter:
            move.b    #$01, ($FFFFFFF6).w    ; set the multiple character flag to $01 (indicating Metal Sonic)
    
    StartCheck:
    VoilĂ , when you PUSH the B button at the titlescreen, the player's flag will be enabled, and this is Mighty instead of Sonic now.

    In my Sonic & Ashuro hack, i have using a method for make the 2 players have their own level layouts, abilities, life icon, signpost, titlecards... Always with one method:
    tst.b ($FFFFFFF6).w ; if player flag set?
    beq.s XXXXXXX ; if Sonic, cancel and continue
    XXXXXXXXX ; add new routine for Mighty

    For example, if you're using the Spindash and the Selbi's Jumpdash, at the very beginning of this codes, you can do this:

    If you want Sonic use the Spindash and not Mighty, and Mighty use the Jumpdash and not Sonic:
    Code:
    ; -----------------------------------------------------------------------
    ; Subroutine to perform a Jumpdash
    ; -----------------------------------------------------------------------
    Sonic_JumpDash:
    tst.b ($FFFFFFF6).w if player flag set?
    bne.s JD_Valid
    rts
    
    JD_valid:
    move.b    ($FFFFF603).w,d0    ; is ABC pressed? (part 1)
    andi.b    #$70,d0    ; is ABC pressed? (part 2)
    beq.w    JD_End    ; if not, branch
    ...
    Code:
    Sonic_SpinDash:
                    tst.b  ($FFFFFFF6).w ; if player flag set?
                    beq.s     SP_valid ; if sonic, ok
                    rts
    
    SP_valid:
            tst.b    $39(a0)            ; already SpinDashing?
            bne.s    loc2_1AC8E        ; if set, branch
            cmpi.b    #8,$1C(a0)        ; is anim duck
    ...

    You can also make the characters have their own behavior!
    (i will show you the basic method, i let you the rest for Obj01_outwater, ect...)
    Search for "Obj01_Main_cont:", you have this:
    Code:
    Obj01_Main_cont:
            move.w    #$780,2(a0)
            move.b    #2,$18(a0)
            move.b    #$18,$19(a0)
            move.b    #4,1(a0)
            move.w    #$600,($FFFFF760).w ; Sonic's top speed
            move.w    #$C,($FFFFF762).w ; Sonic's acceleration
            move.w    #$80,($FFFFF764).w ; Sonic's deceleration
    
    Obj01_Control:                ; XREF: Obj01_Index
            tst.w    ($FFFFFFFA).w    ; is debug cheat enabled?
            beq.s    loc_12C58    ; if not, branch
            btst    #4,($FFFFF605).w ; is button C pressed?
            beq.s    loc_12C58    ; if not, branch
            move.w    #1,($FFFFFE08).w ; change Sonic    into a ring/item
            clr.b    ($FFFFF7CC).w
            rts
    Now, you need (again) to add the check for your character:

    Code:
    Obj01_Main_cont:
            move.w    #$780,2(a0)
            move.b    #2,$18(a0)
            move.b    #$18,$19(a0)
            move.b    #4,1(a0)
    ; --------------------------------------SONIC
            move.w    #$600,($FFFFF760).w ; Sonic's top speed
            move.w    #$C,($FFFFF762).w ; Sonic's acceleration
            move.w    #$80,($FFFFF764).w ; Sonic's deceleration
            tst.b     ($FFFFFFF6).w ; if Player flag set?
            beq.s     Obj01_Control
    ; --------------------------------------MIGHTY
            move.w    #$800,($FFFFF760).w ; Sonic's top speed
            move.w    #$F,($FFFFF762).w ; Sonic's acceleration
            move.w    #$80,($FFFFF764).w ; Sonic's deceleration
    
    Obj01_Control:                ; XREF: Obj01_Index
            tst.w    ($FFFFFFFA).w    ; is debug cheat enabled?
            beq.s    loc_12C58    ; if not, branch
            btst    #4,($FFFFF605).w ; is button C pressed?
            beq.s    loc_12C58    ; if not, branch
            move.w    #1,($FFFFFE08).w ; change Sonic    into a ring/item
            clr.b    ($FFFFF7CC).w
            rts
    Mighty is now more fastest than Sonic.
    Right now, you have an extra character with their own abilities and behavior.
    Ask me questions if you want, i can help you for some things you don't understand.
    You can credit me if you want (or not).

    Thanks!
     

    Attached Files:

    Last edited: Sep 21, 2016
    EMK-20218 and HackGame like this.
  2. <Deleted User>

    <Deleted User> :D Trialist

    Joined:
    Feb 15, 2016
    Messages:
    0
    I would prefer if you add more characters like Tails and Knuckles. I really want to port another character into my hacks.
     
  3. Ashuro

    Ashuro Anti-Cosmic Metal Of Death Member

    Joined:
    Sep 27, 2014
    Messages:
    550
    Location:
    France
    It's your choice, you can replace Mighty by any other character, YOU have to do your own art file, mappings, plc and animations.
    Mighty is just a choice, I could choose Tails or Metal Sonic.
    You can add the number of character you want.

    I have already added Mighty, Metal Sonic and Ashuro in a hack with my method. You have just to change the value of $FFFFFFF6 (or any free ram adress you have chosen).

    In my tutorial, Sonic have the "0", mighty have the "1" (move.b #1,($FFFFFFF6).w)... You can put "2" for tails, "3" for metal sonic, ect...If you wan you can put any other free peer ram adress to each characters.
     
  4. Ayla

    Ayla Sonic Hacking Contest Founder & Commentator Member

    Joined:
    Mar 3, 2008
    Messages:
    256
    Location:
    Portland, OR
    His guide is applicable to any character of your choosing. I personally find it to be a good guide and easily understood. A guide is something to help you along -- not to do everything for you.

    Good guide, Ashuro! Your English was fine =) Only a couple mistakes that I saw, and they aren't even worth mentioning.

    Thanks for the guide!
     
  5. <Deleted User>

    <Deleted User> :D Trialist

    Joined:
    Feb 15, 2016
    Messages:
    0
    That is fine. :D
     
  6. Greenknight9000

    Greenknight9000 Well-Known Member Member

    Joined:
    Apr 30, 2014
    Messages:
    53
    RAM editing is something i have no experience of, may you please make a tutorial (wherever it be youtube or text) so i can understand?
     
  7. Ashuro

    Ashuro Anti-Cosmic Metal Of Death Member

    Joined:
    Sep 27, 2014
    Messages:
    550
    Location:
    France