CPS2 Romhacking: Putting Black Cat in to Marvel SuperHeroes

Опубликовано: 19 Июль 2026
на канале: Yoshin Pixels
914
33

Culmination of a lot of factors. Some notes further in the description. Initially did the sprite a while back, but left it unfinished. After a tweet by EthantheHuman, finished it up, and thought it'd be interesting to put her in to the game properly.

------TILE INFO STUFF, MVC AS REFERENCE BUT WORKED WITH MSH------
Ryu frame
12C406 Loaded in P1 at FF3034 - DWORD - AnimElem - 2C406 in file mvc.05a
2DB6FC Loaded in P1 at FF3040 - DWORD 5B6FC in file mvc.08
2DB7F0 Loaded in P1 at FF3040 - DWORD 5B7F0 in file mvc.08
WORD1 = ???
WORD2 = ???
WORD3 = Tile size?
WORD4 = Tile Group?
WORD5 = ???
WORD6 = ???
WORD7 = ???
WORD8 = ???

SPRITE DISSECTION, USING WAR MACHINES CROUCHING FRAME AS A BASE
--- Loaded in P1 at FF3034 - DWORD - AnimElem ---
--- ANIMELEM ADDRESS = 101D36 ---
0000 - ???
8004 - ???
00290110 -Tiledef Pointer
806E - ???
0000 - ???
00 - Additional FX (example- War Machines ST.HP Blast)
00 - ???
0001 - ???

--- TILEDEF ---
Address = 290110, reads until 29012C
290110 /1 - 0002 - Header?
290112 /3 - 0019 - ???
290114 /5 - 0004 - Number of Tile Headers to define + 1 (+1 since setting to 0x00 defines at least 1 tile)
Setting as 0x00 has the program read till 1C
290116 - 00 - ???
290117 / 9 - 3427D0 - Tile Map Address
29011A /B - 00AD - Start poisition in GFX Data
29011C - 21 - First bit dictates number of Y tiles to load + 1, second bit is X
EXAMPLE
AD is the start position fo War Machines Leg and fist
29011C = 21
At position AD in GFX Data, load 3 tiles down, and 2 tiles right, total space = 32x48
29011D - 00 - ???
29011C - 00 - Pallete Offset (Usually 0, maybe for stuff like being burned?)

--- TILEMAP ---
Address = 3427D0 reads until 3427DD, 3 WORDS, rest are bytes
Seems the read till is affected by how many tiles are defined, as setting it to 0
has it read a WORD at 3427D4 and no further
3427D0/1 - 0002 - Header?
3427D2 - FF
3427D3 - BF - X OFFSET- SIGNED - TILE 1
3427D4 - FF
3427D5 - D4 - Y OFFSET- - SIGNED - TILE 1
3427D6 - 20 - X OFFSET- - UNSIGNED - TILE 2
3427D7 - E0 - Y OFFSET- - UNSIGNED - TILE 2
3427D8 - 00 - X OFFSET- - UNSIGNED - TILE 3
3427D9 - 10 - Y OFFSET- - UNSIGNED - TILE 3
3427DA - 20 - X OFFSET- - UNSIGNED - TILE 4
3427DB - 30 - Y OFFSET- - UNSIGNED - TILE 4
3427DC - 20 - X OFFSET- - UNSIGNED - TIqLE 5
3427DD - F0 - Y OFFSET- - UNSIGNED - TILE 5
NOTE
Tile offsets seem to be relative to each subsequent tile. Moving tile 2 for instance
would move Tiles 3-5 as well

------ MSH INFO ------
P1 Unit ID
0xFF4000

UID_Data = {
Viisible = 2, --BYTE, 01 on, 00 off
Player_Ctrl = 4, --BYTE, 01 Player, 00 AI
Pos_X = 12, --WORD
Pos_Y = 16 --WORD
Vel_X = 20, --WORD, SIGNED
Vel_Y = 28, --WORD, SIGNED
Animelem_PTR = 52, --DWORD
Sprite_Def_PTR = 64, --DWORD
}
--ANIMELEM DATA OFFSETS
Animelem = {
time = 2 ---WORD
}

--SPRITE DEFINITION DATA OFFSETS
Sprite_def = {
NO_Of_Tiles = 6 ---WORD
Tile_Offsets_PTR = 8 ---DWORD
}

BLACK CAT TEST
PSYLOCKE ANIMELEM = E832A
SPRITE DEF = 2C5FA0
DATA
0002001A0000003983207720540C
TILE OFFSETS = 398320
0002FFD6FFAA0030