Yeah, I think you’re right.
Wow, that looks like some psychadelic shit.
Only thing I can find in the memory is the textures on cvs1.
Here is loading STG00POL and STG00TEX from Cvs1 to Cvs2
Hmm… That’s a shame then.
Thanks for trying!
Do you mean we can’t replace mvc2 stages with mvc1 stages? Because I really was looking for a tutorial in order to do that :(. If it just a matter of “stretching” the stages, could you give me some information about how to do that? a link to a tutorial or a program will be enough. Good job btw, hope you keep improving until making a complete balance patch :).
There is no tutorial and no stage replacements. Just basic edits or files from another capcom game. The only tool is a hex editor.
I lost a lot of steam since I had access to a debugger on older games where I could just trace the cpu to find data way more easily. Instead of looking at pointers to pointers to pointers to pointers then finding some data.
Damn. Then I will look for a Mugen, maybe I can found something there. You know, I asked it because I think mvsc1 stages looked way better than the mvc2 ones, so I thought: why nobody is modding that? I saw some mods but those were just new colors for the characters or music replacements, those are cool btw but the default stages MUST go ;). well, thanks anyway.
I’ll probably start working on it more when Mess gets better Dreamcast emulation or I get a debug unit.
There’s a couple versions of various of the stages (desert, clock, etc), so you could probably start figuring pieces out that way. I think the chief problem is that nobody has any time. :\
First thing in the files are pointers to the static objects. The big problem is trying to figure out where active objects are.
Active objects like the boat and fog in the swamp stage or the Propellers, fog, and other airships in the air ship stages. Or, another example New York from CvS2 the helicopter and Robot are active objects. I have no clue where they are how they’re programmed it how they’re activated etc. There is still a lot more to poke around with just a debugger would make this a lot faster instead of poking around in the memory searching for pointers.
Edit:
Also, another question I could figure out with a debugger. Is how effects are applied to the static object like the texture scroll from the training mode menu.
A friend gave me the idea to back port hitboxes to the earlier games recently.
Results
MvC2 Sent
CvS2 Sagat
The reason why Sagat turned out so well is that the cvs2 characters were hardly changed since their a3 counter parts. Also the push box could be wrong on Sentinel.
But I’m here to explain the Dat file for MvC2 more.
The first 64 bytes are pointers in the file.
40 00 00 00 | 40 7F 06 00 | 40 E4 06 00 | 60 EB 06 00
00 00 00 00 | 60 EB 07 00 | 40 3D 08 00 | 00 46 08 00
00 4E 08 00 | 00 5C 08 00 | C0 5E 08 00 | 40 63 08 00
00 6B 08 00 | 40 77 08 00 | 00 00 00 00 | 00 00 00 00
Gonna use good ol’ Ryu as an example. It might not look like pointers, but they are. Cause as much as capcom loves pointers they love big endian.
So that 0x40000000 is actually just 0x00000040 which is the end of the pointers and the start of another table.
Dunno, what every pointer goes to. The one at 0x1C is the Hitbox table while 0x18 is the hit box choice table.
After a weekend poking around in Skullgirls.
Follow up on the Dat file pointers.
Pointer
0x00 Graphics
0x04 Graphics
0x08 Palette
0x0C Unknown
0x10 Blank
0x14 Animation(Not fully figured out)
0x18 Hitbox Choice Table
0x1C Hitbox Table
0x20 Attack Table (exact start of the attack data usually begins with Standing Light Punch*)
0x24 Unknown(looks like scaling)
0x28 Unknown(looks like scaling)
0x2C Unknown(Starts with 0x90 could be life or meter)
0x30 Unknown
0x34 Unknown(Table is similar to the one 0x30 is pointing at)
0x38 Blank
0x3C Blank
*Look at the attack format posted earlier for more info.
Interesting notes took a look at Charlie’s Hitbox table is the same as the one xmvsf dunno about the choice table though.
Cool!
Pointer 0x14 deals with animation haven’t fully figured it out yet but the frame data is near it.
Hitboxes so far you load a value from the animation table, then multiply it by 16, add that value to hitbox choice table then each 2 bytes after the category value on the choice table is a box if it isn’t 0. You multiply that by 8 and add it to the hitbox table pointer to get which hitbox you use.
Edit:
Example with Spiral’s Standing/Walking Hit boxes. Values are big endian
So we start with this animation cell
00 00 04 00 24 00 00 00 80 00 00 00 00 00 00 00 00
00 00 01 00
0x04 means it lasts for 4 frames and 0x0024 is the animation cell. At the end there that 0x0001 is the hitbox group.
So multiply it by 16 and get 0x10 add that to the choice table pointer (0x0011C400).
00 00 F3 80 01 00 02 00 03 00 00 00 F0 00 00 00
So we have more values remember these values are in big endian.
0000
80F3 Catergory
0001 Box
0002 Box
0003 Box
0000 Box
00F0 Box
0000 Box
So we have 4 boxes 3 hurt I know are hurt (F0 is probably the grab as push box isn’t used for grabs in this game).
times the box values by 8 and add it to the Hit box table pointer (0x0011C9C0).
Endian removed on boxes for easy reading.
Box 0x0001 values
0008 0015 FFA0 000D
X = 8
Width = 15
Y = -96
Height = 13
Box 0x0002 values
0006 001C FFB7 0013
X = 6
Width = 28
Y = -73
Height = 19
Box 0x0003 values
0006 0018 FFE5 001B
X = 6
Width = 18
Y = -27
Height = 27
Box 0x00F0
0000 001F FFD2 002F
X = 0
Width = 31
Y = -46
Height = 47
Wished I had more info today but unfortunately no.
The animation part for each dat file looks like it starts with the same 0x100 bytes(besides the Abyss 3 only 2 bytes different).
Looks like a table that points to another table which is nearby.
fRyu Animation Pointer 0x07EB60
You take the 0x016C add it to the animation pointer. Which will take you 0x07ECCC read from that table another table. Which starts you with 0x0578 then add that to the pointer again to the address to the get first cell of the standing animation.
Then look at my previous post what that nets you.
Random ass strings. In files this time Charlie.
I have a lot of addresses to look at.
Messed by picking one a random and they go to no data or have no effect.
Either these addresses are for the arcade version or they’re removed completely.
Spoiler
_SJRBF_Error H'0C237C66 ENT
_SJRBF_Finish H'0C237C86 ENT
_SJRBF_GetBufPtr H'0C23804E ENT
_SJRBF_GetBufSize H'0C238052 ENT
_SJRBF_GetChunk H'0C237D80 ENT
_SJRBF_GetNumData H'0C237D2C ENT
_SJRBF_GetUuid H'0C237D14 ENT
_SJRBF_GetXtrSize H'0C238056 ENT
_SJRBF_Init H'0C237C6A ENT
_SJRBF_IsGetChunk H'0C237FC8 ENT
_SJRBF_Lock H'0C237C38 ENT
_SJRBF_PutChunk H'0C237E52 ENT
_SJRBF_Reset H'0C237D1E ENT
_SJRBF_UngetChunk H'0C237F0C ENT
_SJRBF_Unlock H'0C237C50 ENT
_SJUNI_Create H'0C2380B8 ENT
_SJUNI_Destroy H'0C238122 ENT
_SJUNI_EntryErrFunc H'0C238144 ENT
_SJUNI_Error H'0C23808A ENT
_SJUNI_Finish H'0C2380AA ENT
_SJUNI_GetChunk H'0C2381FE ENT
_SJUNI_GetNumChainPool H'0C2384FE ENT
_SJUNI_GetNumChunk H'0C2384E0 ENT
_SJUNI_GetNumData H'0C2381B8 ENT
_SJUNI_GetUuid H'0C238140 ENT
_SJUNI_Init H'0C23808E ENT
_SJUNI_IsGetChunk H'0C23846E ENT
_SJUNI_Lock H'0C23805C ENT
_SJUNI_PutChunk H'0C2382CA ENT
_SJUNI_Reset H'0C23814A ENT
_SJUNI_UngetChunk H'0C238392 ENT
_SJUNI_Unlock H'0C238074 ENT
_SJ_SplitChunk H'0C238518 ENT
_START_SYS H'0C010000 DAT
_STrPrint H'0C01AF40 ENT
_ScreenTransFunc H'0C3A0150 DAT
_ScreenVertexBuffer H'0C353E80 DAT
_SelectMainMove_yu H'0C01BA98 ENT
_SetBlendingMode H'0C1C26E0 ENT
_Shl38_01_set H'0C16AF98 ENT
_Shl38_02_set H'0C16BB68 ENT
_Shl38_set H'0C1688A0 ENT
_Shl38_set2 H'0C1688FA ENT
H SERIES LINKAGE EDITOR Ver. 6.0A PAGE : 11
*** LINKAGE EDITOR EXTERNALLY DEFINED SYMBOLS LIST ***
SYMBOL NAME ADDR TYPE
_SortMode H'0C29FE3C DAT
_SortModeSet H'0C0170B8 ENT
_Sound_Heart H'0C021938 ENT
_SprWork H'0C2CE9C0 DAT
_StartDemoMain H'0C0208C4 ENT
_StreamBufSize H'0C34FB24 DAT
_StreamDefaultHeader H'0C1F6BF9 DAT
_StreamPort H'0C34FB48 DAT
_Sys H'0C2E7550 DAT
_SysTrans H'0C01AFAA ENT
_SysTransReset H'0C01AEEA ENT
_SysTransSet H'0C01AEF6 ENT
_SystemSleep H'0C29FE2C DAT
_SystemWork H'0C2E7554 DAT
_System_Init H'0C019568 ENT
_TexLoad H'0C016044 ENT
_TexWork H'0C2A0E80 DAT
_TextureCtrlGet H'0C1C2780 ENT
_TextureCtrlSet H'0C1C27BC ENT
_TextureIDChange H'0C1C2870 ENT
_TextureIDSet H'0C1C284A ENT
_Texture_Init H'0C01968C ENT
_Timer_Gauge_Set H'0C1AA9A0 ENT
_TotalPackSize H'0C34FB20 DAT
_TransMode H'0C34FB40 DAT
_Trans_stk_ctr H'0C308900 DAT
_Trans_stk_ptr H'0C307100 DAT
_TranslucentModifireVolumeWritePtr
H'0C3A0194 DAT
_TranslucentWritePtr H'0C3A0190 DAT
_USR_SD_Comment H'0C1FE4D4 DAT
_USR_SD_Default H'0C1FE5D4 DAT
_VBlankInIrq H'0C010312 ENT
_Vec0 H'0C1EB3BC DAT
_Vec1 H'0C1EB3C8 DAT
Hey look some uncompiled code.(From PL30)
.data.b 01,10,24,00
.data.b vec00,powB
.data.b H'80,mark_n3
.data.b sc300,sd_nor_l
.data.b 00,50
.data.b H'0f,H'5a
.data.b black_combo+no_weight,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶唹窶唸 窶堋オ窶堙。窶堋ェ窶堙敘ステ」ニ鱈ニ鍛ニ誰
.data.b 04,zu+no_vec,a_lo,k_ls
.data.b 04,10,10,00
.data.b vec1a,pow2
.data.b H'70,mark_n1
.data.b sc100,sd_kik_s
.data.b 00,20
.data.b H'10,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd030,00,00
;窶唹窶啻 窶堋オ窶堙。窶堋ェ窶堙昶吮ニ鱈ニ鍛ニ誰
.data.b 08,zu,a_lo,k_lm
.data.b 02,10,16,00
.data.b vec1a,pow4
.data.b H'40,mark_n2
.data.b sc200,sd_kik_m
.data.b 00,40
.data.b H'36,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶唹窶啾 窶堋オ窶堙。窶堋ェ窶堙昶ケツュニ鱈ニ鍛ニ誰
.data.b 14,no_zu+as,a_lo,k_ll
.data.b 01,10,24,09
.data.b vec1a,pow8
.data.b H'70,mark_n3
.data.b sc300,sd_kik_l
.data.b 00,100
.data.b H'37,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶唹窶喘 ニ淡ニ槌槌停愴致ナステ」ニ恥ニ停愴蛋
.data.b 04,zu+no_vec,a_hi,k_s
.data.b 00,10,10,00
.data.b vec00,pow2
.data.b H'70,mark_n1
.data.b sc100,sd_nor_s
.data.b 00,20
.data.b H'13,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd030,00,00
;窶唹窶喞 ニ淡ニ槌槌停愴致窶吮ニ恥ニ停愴蛋
.data.b 08,zu+no_vec,a_hi,k_m
.data.b 00,10,16,00
.data.b vec00,pow4
.data.b H'80,mark_n2
.data.b sc200,sd_nor_m
.data.b 00,40
.data.b H'14,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶唹窶單 ニ淡ニ槌槌停愴致窶ケツュニ恥ニ停愴蛋
.data.b 14,zu+no_vec,a_hi,k_m
.data.b 00,10,24,00
.data.b vec18,pow8
.data.b H'80,mark_n3
.data.b sc300,sd_nor_l
.data.b 00,60
.data.b H'15,H'00
.data.b aerial_finish,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶唹窶啼 ニ淡ニ槌槌停愴致ナステ」ニ鱈ニ鍛ニ誰
.data.b 04,zu+no_vec,a_hi,k_s
.data.b 00,10,10,00
.data.b vec00,pow2
.data.b H'60,mark_n1
.data.b sc100,sd_kik_s
.data.b 00,20
.data.b H'16,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd030,00,00
;窶啀窶唹 ニ淡ニ槌槌停愴致窶吮ニ鱈ニ鍛ニ誰
.data.b 08,zu+no_vec,a_hi,k_m
.data.b 00,10,16,00
.data.b vec00,pow2
.data.b H'60,mark_n2
.data.b sc200,sd_kik_m
.data.b 00,40
.data.b H'17,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶啀窶啀 ニ淡ニ槌槌停愴致窶ケツュニ鱈ニ鍛ニ誰
.data.b 14,zu+no_vec,a_hi,k_m
.data.b 00,10,24,00
.data.b vec19,pow8
.data.b H'80,mark_n3
.data.b sc300,sd_kik_l
.data.b 00,60
.data.b H'18,H'00
.data.b aerial_finish,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;-----------------------*
; ニ椎槌弛ツー窶愿シ窶堙ェツ攻ナ停・*
;-----------------------*
;窶啀窶啣(窶唹窶唹ツ)窶板ァ窶堋ソナステ」ニ恥ニ停愴蛋ツ(窶ー窶懌ケ窶披板」ツ)
.data.b 04,zu,a_nom,k_s
.data.b 04,10,10,00
.data.b vec1a,pow2
.data.b H'70,mark_n1
.data.b sc100,sd_nor_s
.data.b 00,20
.data.b H'3c,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd030,00,00
;窶啀窶啌(窶唹窶啀ツ)窶板ァ窶堋ソ窶吮ニ恥ニ停愴蛋ツ(窶ー窶懌ケ窶披板」ツ)
.data.b 08,zu,a_nom,k_m
.data.b 02,10,16,00
.data.b vec1a,pow4
.data.b H'80,mark_n2
.data.b sc200,sd_nor_m
.data.b 00,40
.data.b H'3e,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶啀窶售(窶唹窶啣ツ)窶板ァ窶堋ソ窶ケツュニ恥ニ停愴蛋ツ(窶ー窶懌ケ窶披板」ツ)
.data.b 14,zu,a_nom,k_ll
.data.b 01,10,24,00
.data.b vec1a,pow6
.data.b H'80,mark_n3
.data.b sc300,sd_nor_l
.data.b 00,50
.data.b H'40,H'00
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd060,00,00
;窶啀窶啜(窶唹窶啌ツ)窶板ァ窶堋ソナステ」ニ鱈ニ鍛ニ誰ツ(窶ー窶懌ケ窶披板」ツ)
.data.b 04,zu,a_nom,k_s
.data.b 04,10,10,00
.data.b vec1a,pow2
.data.b H'60,mark_n1
.data.b sc100,sd_kik_s
.data.b 00,20
.data.b H'45,H'47
.data.b 00,00,00,00
.data.b 00,00
.data.b 00,yk_gd030,00,00
;窶啀窶啅(窶唹窶售ツ)窶板ァ窶堋ソ窶吮ニ鱈ニ鍛ニ誰ツ(窶ー窶懌ケ窶披板」ツ)
.data.b 08,zu,a_nom,k_m
.data.b 02,10,16,00
.data.b vec1a,pow4
.data.b H'60,mark_n2
.data.b sc200,sd_kik_m
.data.b 00,40
.data.b H'3b,H'48
.data.b .program pl25_hit_data
;****************************************************************
.export _hit_dt_25
;****************************************************************
.include "hit_equ.h"
;****************************************************************
.section P, code, align=4
;****************************************************************
; ニ胆ニ停ケニ歎ニ停ぎ *
;****************************************************************
; 32 byte
; .data.b Damage,DH'm_osei_A,DH'm_osei_B,Damage_Type,Atck_Kind,Damage_Kind
; .data.b PiyH'o,it_Stop,Sandbag_time,Sleep_time
; .data.b Vector,Power
; .data.b Atck_RangH'e,it_Mark
; .data.b Score,Sound
; .data.b Shc,Jug
; .data.b 00,00,00,00
;
; Damage Damage Suu 窶膿窶堋ヲ窶堙ゥニ胆ニ陳・ーニ淡
; Dm_Hosei_A Hosei Normal ツ修ツ青ウ窶冤窶啻 ニ知ツーニ筑ニ停ケ
; Dm_Hosei_B Hosei Pinchi ツ修ツ青ウ窶冤窶啾 ニ痴ニ停愴蛋
; Damage_Type Zuri or Buttobi 窶堋ク窶堙ィ窶ーツコ窶堋ェ窶堙ィ 窶堙披堙≫堙・堙・
; Atck_Kind Hi Lo or Special ツ湘」 窶ーツコ 窶「KナスE
; Damage_Kind Fire Ice or Elec 窶ーテ・ 窶「X 窶彭窶ケC
; Piyo PiyoPoint ニ痴ニ塚・椎ニ竹ニ辰ニ停愴暖
; Hit_Stop Hit Stop Time ニ智ニ鍛ニ暖ニ湛ニ暖ニ鍛ニ致窶堙固スナセナテ・
; Sandbag SandbagTime ニ探ニ停愴檀ニ弛ニ鍛ニ丹ナスナセナテ・
; Sleep_Time SleepTime ツ寝ナスナセナテ・
; Vector Vector 窶堙披堙≫堙・堙柁遅ニ誰ニ暖ニ停ケ
; Power Power ニ恥ニ陳渉ー
; Atck_Range Attack Range X ツ攻ナ停壺堙娯敕才・債(ニ狸ツーニ檀窶堙嫁スg窶廃ツ)
; Hit_Mark Hit Mark Kind ニ智ニ鍛ニ暖ニ筑ツーニ誰窶堙固ステュ窶氾・
; Score Score
Oh, this just gave us some more info on attacks.
Damage Format Update.
I could have this messed up but it’s looking like that it’s still the same as the commented code above.
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
DM AB AK DK DZ HS ?? SB ST ST ?? VC ?? SD ?? ??
HM ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
DM = Damage
AK = Damage_Type first half/ High, low, unblockable settings second half byte
DK = Hitstun type first half/ Element type second half
DZ = Dizzy/Piyo
HS = Hit Stop
SB = Sand bag How long you lay on the ground. This could actually be sleep time.
ST = Sleep Time?
SD = Sound Effect
HM = Hit Mark
Edit:
I won’t really know what all it does until I can get some one to translate the comments.