Deconstructing the MvC2 Dreamcast CD

Yeah, I think you’re right.

Well textures would be simple to port.

As for CVS1 to CVS2 All I get is a TV in the middle.

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… :frowning: That’s a shame then.
Thanks for trying!

It’ll take some work but it is doable.

Edit

Welp DC files are the menu.

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

Spoiler

http://i.imgur.com/Lz9UovL.png

http://i.imgur.com/v3GPQZE.png

CvS2 Sagat

Spoiler

http://i.imgur.com/U4IpyFI.png

http://i.imgur.com/sphxsjU.png

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.