Logo

The DDR Research Master Thread - UPDATED 2023-04-15 - Minor Addition - SOME DDR GB1 Memory Addresses

Register Log In Back To Forums

Post #301 · Posted at 2020-05-04 06:32:49pm 3.9 years ago

Offline ImBoredAriG
ImBoredAriG Avatar Member
4 Posts
United States
Reg. 2020-03-23

Doe's anyone know if it's possible to extract or modify the .DAT files in the SuperNOVA2 files?

Post #302 · Posted at 2020-07-19 05:20:04pm 3.7 years ago

Offline root670
root670 Avatar Member
10 Posts
United States
Reg. 2011-06-02


Last updated: 2020-07-19 05:22pm
I've figured out how to extract the DWARF debugging symbols into an easy to read text format using CodeWarrior. It's able to extract all of the symbols and structures and compute the addresses of global variables and functions.

I've extracted the symbols from all of the DDR games I have access to that were compiled with CodeWarrior and uploaded them here:

https://bin.jvnv.net/file/T5okj/DDR%20Debug%20Symbols.zip.

Note that DDRMAX JP seems to have had its symbols stripped at the time of compilation so the symbol file is nearly empty. Starting with DDR Extreme 2/STRIKE they appear to have dropped CodeWarrior in favor of the official PS2 SDK, so symbols can't be extracted from those games or any that were released after them. I've also included the script used to extract the symbol files, which requires CodeWarrior for PS2 to be installed.

Here's an example of how the symbols are decoded for Extreme. This is the beginning of the definition for one of the "music_info" structures (it is repeated in 11 other locations, one for each compilation unit it's used in):

Quote
00010ede:<31>TAG_structure_type
00010ee4 AT_sibling(00011234)
00010eea AT_byte_size(00000098)
00010ef0 AT_name(music_info)
00010efd:<40>TAG_member
00010f03 AT_sibling(00010f25)
00010f09 AT_user_def_type(00013ce2)
00010f0f AT_location(<6> OP_CONST(0) OP_ADD)
00010f19 AT_name(base_name)
00010f25:<33>TAG_member
00010f2b AT_sibling(00010f46)
00010f31 AT_fund_type(FT_signed_char)
00010f35 AT_location(<6> OP_CONST(6) OP_ADD)
00010f3f AT_name(kind)
...

The format is pretty self explanatory. "AT_location(<6> OP_CONST(6) OP_ADD)" denotes that this member is located after the previous entry. Searching for 00010ede reveals references to this structure type in other parts of the file. Most structures and user-defined types will eventually lead to a global variable like this:

Quote

0000c8d0:<38>TAG_global_variable
0000c8d6 AT_sibling(0000c8f6)
0000c8dc AT_user_def_type(0000f5cd)
0000c8e2 AT_location(<5> OP_ADDR(005aac20))
0000c8eb AT_name(g_game_w)
This defines a global variable named "g_game_w" at address 0x205aac20 using the type defined at the line starting with 0000f5cd.

I hope this information proves to be useful. I don't really play video games much any more, but figuring out the inner-workings of old games still interests me.

Post #303 · Posted at 2020-09-30 05:35:34pm 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-09-30 05:35pm
Holy crap man, that's awesome work!

I just got back into trying to make my disassembly of MAX2 - and I think this info will be incredibly useful. Actually, even saying "incredibly useful" feels like one hell of an understatement.

I find that once it's laid out in the way it is, it is INCREDIBLY easy to map it all out - function names, arrays, everything - data types, logical addresses, etc. Holy shit, to say "thank you" for this awesome work would not be enough, IMO, to show just how elated I am about how all this information that I had previously thought was gonna remain elusive is now available - and now, it'll be possible to map out the game engine, and put it in a form where others can read and understand (and modify their own game images with it).

Seriously, function names, logical start/end addresses for said functions, function return types, function parameters / their types, the user defined types, their member names and types, the logical addresses where arrays and global data is stored, etc, it's all here

Went through some of the game DWARF data to create partial file/folder structures out of the file path strings.

Time for me to see what of the symbols and functions that are NOT in MAX2JP's symbol data, but is found in the data for other mixes, actually exists in MAX2 too. If my thought about the game engine code being recycled and modified as games got produced is correct, then there should be a lot of stuff we should glean about MAX2 from analyzing what symbol data was recovered in other PS2 mixes.

Also... proof 110% that there is code that originated with the PS1 based 573 mixes, rather than said modules being re-written for PS2 mixes.


DDRMAX US:
C:\work\ddr6us\src\AM\s573\play\onimode.c
C:\work\ddr6us\src\CS\lesson\kn_ldisp.c
C:\work\ddr6us\src\CS\lesson\kn_lfunc.c
C:\work\ddr6us\src\CS\lesson\kn_lmsg.c
C:\work\ddr6us\src\CS\lesson\kn_lstep.c
C:\work\ddr6us\src\CS\lesson\les.c
C:\work\ddr6us\src\CS\lesson\les_play.c
C:\work\ddr6us\src\CS\lesson\les_sel_lv.c
C:\work\ddr6us\src\CS\lesson\les_sel_sec.c
C:\work\ddr6us\src\CS\records\reconi.c
C:\work\ddr6us\src\CS\cmes_e.c
C:\work\ddr6us\src\sys\sys_demo.c
C:\work\ddr6us\src\sys\sys_scf.c
C:\work\ddr6us\src\music_all.c
DDRMAX2 JP:
C:\work\ddr7\src\AM\s573\disp\sp_ending_d.c
C:\work\ddr7\src\AM\s573\play\oni_list.c
C:\work\ddr7\src\AM\s573\play\onimode.c
C:\work\ddr7\src\CS\edit\ny_tbl.c
C:\work\ddr7\src\CS\endless\eds_aid.c
C:\work\ddr7\src\CS\endless\eds_box.c
C:\work\ddr7\src\CS\endless\eds_break.c
C:\work\ddr7\src\CS\endless\eds_main.c
C:\work\ddr7\src\CS\endless\eds_record.c
C:\work\ddr7\src\CS\endless\eds_select.c
C:\work\ddr7\src\CS\endless\eds_win.c
C:\work\ddr7\src\CS\lesson\les.c
C:\work\ddr7\src\CS\option\optlang.c
C:\work\ddr7\src\CS\option\optscr.c
C:\work\ddr7\src\CS\records\recend.c
C:\work\ddr7\src\CS\records\reconi.c
C:\work\ddr7\src\CS\staffroll\cs_staff_aid.c
C:\work\ddr7\src\CS\staffroll\cs_staff_data.c
C:\work\ddr7\src\CS\staffroll\cs_staffroll.c
C:\work\ddr7\src\CS\bk_load.c
C:\work\ddr7\src\CS\cmes_j.c
C:\work\ddr7\src\CS\cmes_js.c
C:\work\ddr7\src\CS\lang.c
C:\work\ddr7\src\sys\sys_demo.c
C:\work\ddr7\src\sys\sys_scf.c
C:\work\ddr7\src\music_all.c
DDRMAX2 US:
C:\work\usam2\src\AM\s573\disp\b_anime.c
C:\work\usam2\src\AM\s573\disp\sp_ending_d.c
C:\work\usam2\src\AM\s573\doll\dancer.c
C:\work\usam2\src\AM\s573\doll\dcamera.c
C:\work\usam2\src\AM\s573\doll\ddata.c
C:\work\usam2\src\AM\s573\doll\dexport.c
C:\work\usam2\src\AM\s573\doll\dinit.c
C:\work\usam2\src\AM\s573\doll\matrix.c
C:\work\usam2\src\AM\s573\doll\model1.c
C:\work\usam2\src\AM\s573\doll\model2.c
C:\work\usam2\src\AM\s573\doll\motion1.c
C:\work\usam2\src\AM\s573\doll\motion2.c
C:\work\usam2\src\AM\s573\doll\ps1lib.c
C:\work\usam2\src\AM\s573\doll\vu0.c
C:\work\usam2\src\AM\s573\play\p_anime.c
C:\work\usam2\src\AM\s573\play\onimode.c
C:\work\usam2\src\AM\s573\play\oni_list.c
C:\work\usam2\src\CS\diet\cs_diet_lang.c
C:\work\usam2\src\CS\edit\ny_tbl.c
C:\work\usam2\src\CS\endless\eds_aid.c
C:\work\usam2\src\CS\endless\eds_box.c
C:\work\usam2\src\CS\endless\eds_break.c
C:\work\usam2\src\CS\endless\eds_link.c
C:\work\usam2\src\CS\endless\eds_main.c
C:\work\usam2\src\CS\endless\eds_record.c
C:\work\usam2\src\CS\endless\eds_select.c
C:\work\usam2\src\CS\endless\eds_win.c
C:\work\usam2\src\CS\lesson\kn_ldisp.c
C:\work\usam2\src\CS\lesson\kn_lmsg.c
C:\work\usam2\src\CS\lesson\kn_lfunc.c
C:\work\usam2\src\CS\lesson\kn_lstep.c
C:\work\usam2\src\CS\lesson\les.c
C:\work\usam2\src\CS\lesson\les_aid.c
C:\work\usam2\src\CS\lesson\les_play.c
C:\work\usam2\src\CS\lesson\les_sel_lv.c
C:\work\usam2\src\CS\lesson\les_sel_sec.c
C:\work\usam2\src\CS\opening\openinglogo.c
C:\work\usam2\src\CS\option\optdoll.c
C:\work\usam2\src\CS\option\optlang.c
C:\work\usam2\src\CS\option\optscr.c
C:\work\usam2\src\CS\records\recend.c
C:\work\usam2\src\CS\records\reconi.c
C:\work\usam2\src\CS\staffroll\cs_staff_aid.c
C:\work\usam2\src\CS\bk_load.c
C:\work\usam2\src\CS\cmes_e.c
C:\work\usam2\src\CS\cmes_f.c
C:\work\usam2\src\CS\cmes_s.c
C:\work\usam2\src\CS\cmes_i.c
C:\work\usam2\src\CS\cmes_g.c
C:\work\usam2\src\CS\ani_load.c
C:\work\usam2\src\CS\lang.c
C:\work\usam2\src\gs\gs_3d.c
C:\work\usam2\src\gs\gs_vu0.c
C:\work\usam2\src\sys\sys_demo.c
C:\work\usam2\src\sys\sys_scf.c
C:\work\usam2\src\music_all.c
DDR EXTRME JP:
E:\DDR\ddr8\src\AM\s573\disp\b_anime.c
E:\DDR\ddr8\src\AM\s573\disp\sp_ending_d.c
E:\DDR\ddr8\src\AM\s573\doll\dancer.c
E:\DDR\ddr8\src\AM\s573\doll\dcamera.c
E:\DDR\ddr8\src\AM\s573\doll\ddata.c
E:\DDR\ddr8\src\AM\s573\doll\dexport.c
E:\DDR\ddr8\src\AM\s573\doll\dinit.c
E:\DDR\ddr8\src\AM\s573\doll\matrix.c
E:\DDR\ddr8\src\AM\s573\doll\model1.c
E:\DDR\ddr8\src\AM\s573\doll\model2.c
E:\DDR\ddr8\src\AM\s573\doll\motion1.c
E:\DDR\ddr8\src\AM\s573\doll\motion2.c
E:\DDR\ddr8\src\AM\s573\doll\ps1lib.c
E:\DDR\ddr8\src\AM\s573\doll\vu0.c
E:\DDR\ddr8\src\AM\s573\play\oni_list.c
E:\DDR\ddr8\src\AM\s573\play\onimode.c
E:\DDR\ddr8\src\CS\diet\cs_diet_program.c
E:\DDR\ddr8\src\CS\endless\eds_aid.c
E:\DDR\ddr8\src\CS\endless\eds_box.c
E:\DDR\ddr8\src\CS\endless\eds_break.c
E:\DDR\ddr8\src\CS\endless\eds_link.c
E:\DDR\ddr8\src\CS\endless\eds_main.c
E:\DDR\ddr8\src\CS\endless\eds_record.c
E:\DDR\ddr8\src\CS\endless\eds_select.c
E:\DDR\ddr8\src\CS\endless\eds_win.c
E:\DDR\ddr8\src\CS\info\infodoll.c
E:\DDR\ddr8\src\CS\lesson\les.c
E:\DDR\ddr8\src\CS\lesson\les_aid.c
E:\DDR\ddr8\src\CS\lesson\les_play.c
E:\DDR\ddr8\src\CS\lesson\les_sel_lv.c
E:\DDR\ddr8\src\CS\lesson\les_sel_sec.c
E:\DDR\ddr8\src\CS\lesson\kn_lfunc.c
E:\DDR\ddr8\src\CS\lesson\kn_ldisp.c
E:\DDR\ddr8\src\CS\lesson\kn_lmsg.c
E:\DDR\ddr8\src\CS\lesson\kn_lstep.c
E:\DDR\ddr8\src\CS\opening\openinglogo.c
E:\DDR\ddr8\src\CS\option\optdoll.c
E:\DDR\ddr8\src\CS\option\optlang.c
E:\DDR\ddr8\src\CS\option\optscr.c
E:\DDR\ddr8\src\CS\records\recend.c
E:\DDR\ddr8\src\CS\records\recnon.c
E:\DDR\ddr8\src\CS\records\reconi.c
E:\DDR\ddr8\src\CS\staffroll\cs_staffroll.c
E:\DDR\ddr8\src\CS\staffroll\cs_staffroll_font.c
E:\DDR\ddr8\src\CS\staffroll\cs_staffroll_mov.c
E:\DDR\ddr8\src\CS\staffroll\cs_staffroll_pic.c
E:\DDR\ddr8\src\CS\staffroll\cs_staffroll_scrl.c
E:\DDR\ddr8\src\CS\ani_load.c
E:\DDR\ddr8\src\CS\bk_load.c
E:\DDR\ddr8\src\CS\cmes_e.c
E:\DDR\ddr8\src\CS\cmes_j.c
E:\DDR\ddr8\src\CS\cmes_js.c
E:\DDR\ddr8\src\CS\cmes_js2.c
E:\DDR\ddr8\src\CS\lang.c
E:\DDR\ddr8\src\gs\gs_3d.c
E:\DDR\ddr8\src\gs\gs_vu0.c
E:\DDR\ddr8\src\sys\sys_demo.c
E:\DDR\ddr8\src\sys\sys_scf.c
E:\DDR\ddr8\src\music_all.c
DDR EXTREME US E3 DEMO:
C:\ddr\usaex\src\AM\s573\disp\b_anime.c
C:\ddr\usaex\src\AM\s573\disp\sp_ending_d.c
C:\ddr\usaex\src\AM\s573\doll\dancer.c
C:\ddr\usaex\src\AM\s573\doll\dcamera.c
C:\ddr\usaex\src\AM\s573\doll\ddata.c
C:\ddr\usaex\src\AM\s573\doll\dexport.c
C:\ddr\usaex\src\AM\s573\doll\dinit.c
C:\ddr\usaex\src\AM\s573\doll\matrix.c
C:\ddr\usaex\src\AM\s573\doll\model1.c
C:\ddr\usaex\src\AM\s573\doll\model2.c
C:\ddr\usaex\src\AM\s573\doll\motion1.c
C:\ddr\usaex\src\AM\s573\doll\motion2.c
C:\ddr\usaex\src\AM\s573\doll\ps1lib.c
C:\ddr\usaex\src\AM\s573\doll\vu0.c
C:\ddr\usaex\src\AM\s573\play\chara.c
C:\ddr\usaex\src\AM\s573\play\oni_list.c
C:\ddr\usaex\src\AM\s573\play\onimode.c
C:\ddr\usaex\src\CS\challenge\chal_data.c
C:\ddr\usaex\src\CS\challenge\chal_disp.c
C:\ddr\usaex\src\CS\challenge\chal_func.c
C:\ddr\usaex\src\CS\challenge\chal_init.c
C:\ddr\usaex\src\CS\challenge\chal_judge.c
C:\ddr\usaex\src\CS\challenge\chal_play.c
C:\ddr\usaex\src\CS\challenge\chal_result.c
C:\ddr\usaex\src\CS\challenge\chal_select.c
C:\ddr\usaex\src\CS\challenge\chal_style.c
C:\ddr\usaex\src\CS\challenge\chal_sys.c
C:\ddr\usaex\src\CS\diet\wkout.c
C:\ddr\usaex\src\CS\diet\wkoutd.c
C:\ddr\usaex\src\CS\diet\wkoutdd.c
C:\ddr\usaex\src\CS\diet\wkoutdtoday.c
C:\ddr\usaex\src\CS\diet\wkoutset.c
C:\ddr\usaex\src\CS\diet\wkouttop.c
C:\ddr\usaex\src\CS\endless\eds_break.c
C:\ddr\usaex\src\CS\endless\eds_cursor.c
C:\ddr\usaex\src\CS\endless\eds_data.c
C:\ddr\usaex\src\CS\endless\eds_link.c
C:\ddr\usaex\src\CS\endless\eds_main.c
C:\ddr\usaex\src\CS\endless\eds_menu.c
C:\ddr\usaex\src\CS\endless\eds_obj.c
C:\ddr\usaex\src\CS\endless\eds_overall.c
C:\ddr\usaex\src\CS\endless\eds_plate.c
C:\ddr\usaex\src\CS\endless\eds_play.c
C:\ddr\usaex\src\CS\endless\eds_program.c
C:\ddr\usaex\src\CS\endless\eds_record.c
C:\ddr\usaex\src\CS\endless\eds_result.c
C:\ddr\usaex\src\CS\endless\eds_string.c
C:\ddr\usaex\src\CS\endless\eds_sup.c
C:\ddr\usaex\src\CS\endless\eds_top.c
C:\ddr\usaex\src\CS\info\info.c
C:\ddr\usaex\src\CS\info\infodoll.c
C:\ddr\usaex\src\CS\info\infosel.c
C:\ddr\usaex\src\CS\info\infoshow.c
C:\ddr\usaex\src\CS\lesson\kn_ldisp.c
C:\ddr\usaex\src\CS\lesson\kn_lfunc.c
C:\ddr\usaex\src\CS\lesson\kn_lmsg.c
C:\ddr\usaex\src\CS\lesson\kn_lstep.c
C:\ddr\usaex\src\CS\lesson\les.c
C:\ddr\usaex\src\CS\lesson\les_aid.c
C:\ddr\usaex\src\CS\lesson\les_play.c
C:\ddr\usaex\src\CS\lesson\les_sel_lv.c
C:\ddr\usaex\src\CS\lesson\les_sel_sec.c
C:\ddr\usaex\src\CS\minigame\mg_main.c
C:\ddr\usaex\src\CS\mg_bd\mg_bd_behind.c
C:\ddr\usaex\src\CS\mg_bd\mg_bd_main.c
C:\ddr\usaex\src\CS\mg_bd\mg_bd_frost.c
C:\ddr\usaex\src\CS\mg_bd\mg_bd_solo.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_eff.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_etc.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_main.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_nut.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_tree.c
C:\ddr\usaex\src\CS\mg_coco\mg_coco_weff.c
C:\ddr\usaex\src\CS\mg_run\mg_run.c
C:\ddr\usaex\src\CS\mg_run\mg_run_anime.c
C:\ddr\usaex\src\CS\mg_run\mg_run_bomb.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu_rei.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu_shimako.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu_yoko.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu_yoshino.c
C:\ddr\usaex\src\CS\mg_run\mg_run_cpu_yumi.c
C:\ddr\usaex\src\CS\mg_run\mg_run_land.c
C:\ddr\usaex\src\CS\mg_run\mg_run_play.c
C:\ddr\usaex\src\CS\mg_run\mg_run_str.c
C:\ddr\usaex\src\CS\mg_solo\mg_solo.c
C:\ddr\usaex\src\CS\mg_solo\mg_solo_disp.c
C:\ddr\usaex\src\CS\opening\openinglogo.c
C:\ddr\usaex\src\CS\option\opt_adjust.c
C:\ddr\usaex\src\CS\option\opt_doll.c
C:\ddr\usaex\src\CS\option\opt_kconfig.c
C:\ddr\usaex\src\CS\option\opt_lang.c
C:\ddr\usaex\src\CS\option\opt_main.c
C:\ddr\usaex\src\CS\option\opt_mc.c
C:\ddr\usaex\src\CS\option\opt_menu.c
C:\ddr\usaex\src\CS\option\opt_win.c
C:\ddr\usaex\src\CS\records\rec_cha.c
C:\ddr\usaex\src\CS\records\rec_co.c
C:\ddr\usaex\src\CS\records\rec_end.c
C:\ddr\usaex\src\CS\records\rec_hand.c
C:\ddr\usaex\src\CS\records\rec_hi.c
C:\ddr\usaex\src\CS\records\rec_main.c
C:\ddr\usaex\src\CS\records\rec_non.c
C:\ddr\usaex\src\CS\records\rec_top.c
C:\ddr\usaex\src\CS\staffroll\credits.c
C:\ddr\usaex\src\CS\ani_load.c
C:\ddr\usaex\src\CS\bk_load.c
C:\ddr\usaex\src\CS\cmes_e.c
C:\ddr\usaex\src\CS\cmes_j.c
C:\ddr\usaex\src\CS\cmes_js.c
C:\ddr\usaex\src\CS\cmes_js2.c
C:\ddr\usaex\src\CS\cs_font.c
C:\ddr\usaex\src\CS\info_data.c
C:\ddr\usaex\src\CS\lang.c
C:\ddr\usaex\src\eyetoy\effect\eye_eff_frost.c
C:\ddr\usaex\src\eyetoy\eye_ref.c
C:\ddr\usaex\src\eyetoy\eye_system.c
C:\ddr\usaex\src\gs\gs_3d.c
C:\ddr\usaex\src\gs\gs_vu0.c
C:\ddr\usaex\src\sound\fft\sd_fft.c
C:\ddr\usaex\src\sound\vxdecode\decode.c
C:\ddr\usaex\src\sound\vxdecode\dectbl.c
C:\ddr\usaex\src\sound\vxdecode\get4bit.c
C:\ddr\usaex\src\sys\sys_demo.c
C:\ddr\usaex\src\sys\sys_scf.c
C:\ddr\usaex\src\music_all.c
C:\ddr\usaex\src\olmain.c
C:\ddr\ktps2\cd\libstr3.c
DDR PARTY COLLECTION:
E:\DDR\ddrb2\src\AM\s573\disp\b_anime.c
E:\DDR\ddrb2\src\AM\s573\doll\dancer.c
E:\DDR\ddrb2\src\AM\s573\doll\dcamera.c
E:\DDR\ddrb2\src\AM\s573\doll\ddata.c
E:\DDR\ddrb2\src\AM\s573\doll\dexport.c
E:\DDR\ddrb2\src\AM\s573\doll\dinit.c
E:\DDR\ddrb2\src\AM\s573\doll\matrix.c
E:\DDR\ddrb2\src\AM\s573\doll\model1.c
E:\DDR\ddrb2\src\AM\s573\doll\model2.c
E:\DDR\ddrb2\src\AM\s573\doll\motion1.c
E:\DDR\ddrb2\src\AM\s573\doll\motion2.c
E:\DDR\ddrb2\src\AM\s573\doll\ps1lib.c
E:\DDR\ddrb2\src\AM\s573\doll\vu0.c
E:\DDR\ddrb2\src\AM\s573\play\chara.c
E:\DDR\ddrb2\src\AM\s573\play\oni_list.c
E:\DDR\ddrb2\src\AM\s573\play\onimode.c
E:\DDR\ddrb2\src\CS\diet\cs_diet_program.c
E:\DDR\ddrb2\src\CS\endless\eds_box.c
E:\DDR\ddrb2\src\CS\endless\eds_break.c
E:\DDR\ddrb2\src\CS\endless\eds_link.c
E:\DDR\ddrb2\src\CS\endless\eds_main.c
E:\DDR\ddrb2\src\CS\endless\eds_record.c
E:\DDR\ddrb2\src\CS\endless\eds_select.c
E:\DDR\ddrb2\src\CS\endless\eds_win.c
E:\DDR\ddrb2\src\CS\info\infodoll.c
E:\DDR\ddrb2\src\CS\lesson\kn_ldisp.c
E:\DDR\ddrb2\src\CS\lesson\kn_lfunc.c
E:\DDR\ddrb2\src\CS\lesson\kn_lmsg.c
E:\DDR\ddrb2\src\CS\lesson\kn_lstep.c
E:\DDR\ddrb2\src\CS\lesson\les.c
E:\DDR\ddrb2\src\CS\lesson\les_aid.c
E:\DDR\ddrb2\src\CS\lesson\les_play.c
E:\DDR\ddrb2\src\CS\lesson\les_sel_lv.c
E:\DDR\ddrb2\src\CS\lesson\les_sel_sec.c
E:\DDR\ddrb2\src\CS\opening\openinglogo.c
E:\DDR\ddrb2\src\CS\option\opt_adjust.c
E:\DDR\ddrb2\src\CS\option\opt_doll.c
E:\DDR\ddrb2\src\CS\option\opt_kconfig.c
E:\DDR\ddrb2\src\CS\option\opt_main.c
E:\DDR\ddrb2\src\CS\option\opt_mc.c
E:\DDR\ddrb2\src\CS\option\opt_menu.c
E:\DDR\ddrb2\src\CS\option\opt_win.c
E:\DDR\ddrb2\src\CS\records\recend.c
E:\DDR\ddrb2\src\CS\records\recnon.c
E:\DDR\ddrb2\src\CS\records\reconi.c
E:\DDR\ddrb2\src\CS\staffroll\cs_staff_aid.c
E:\DDR\ddrb2\src\CS\staffroll\cs_staff_data.c
E:\DDR\ddrb2\src\CS\staffroll\cs_staffroll.c
E:\DDR\ddrb2\src\CS\ani_load.c
E:\DDR\ddrb2\src\CS\bk_load.c
E:\DDR\ddrb2\src\CS\cmes_e.c
E:\DDR\ddrb2\src\CS\cmes_j.c
E:\DDR\ddrb2\src\CS\cmes_js.c
E:\DDR\ddrb2\src\CS\cmes_js2.c
E:\DDR\ddrb2\src\CS\cmes_js3.c
E:\DDR\ddrb2\src\gs\gs_3d.c
E:\DDR\ddrb2\src\gs\gs_vu0.c
E:\DDR\ddrb2\src\sys\sys_demo.c
E:\DDR\ddrb2\src\sys\sys_scf.c
E:\DDR\ddrb2\src\music_all.c


Call me over ambitious if you wish, but it seems like between these 9 mixes whose DWARF symbol data Root670 had extracted, we'd have enough info to get a decent distance in doing something akin to the Mario64 decompilation project (only with Playstation2 DDR titles). Remember, we have function names, parameters/types, return type, global variable names/types, local variable names/types, data structure types, sizes, member types/sizes/names, etc)

*MORE than enough for a sizable amount of the core engine components to be mapped out, and translated back into C.

IF NOT the majority of it.

I had a thought: Seeing that the game recognizes uncompressed TIM files (and I would assume compressed as well provided it uses Konami's LZ compression), and non-VAG ADPCM audio, what would stop someone from replacing the assets in a PS2 mix with the arcade assets? I mean, aside from possibly needing to relocate a lot of data references, AS WELL as the issue of whether the game will stretch the textures correctly in the case of images, seeing as they are IIRC half the size of the graphics used in the PS2 mixes.

Post #304 · Posted at 2020-10-01 05:51:01pm 3.5 years ago

Offline Wan
Wan Avatar Member
412 Posts
Chile
Reg. 2008-01-13

"I want to change my username =("
Quote: travelsonic
<snip>
I had a thought: Seeing that the game recognizes uncompressed TIM files (and I would assume compressed as well provided it uses Konami's LZ compression), and non-VAG ADPCM audio, what would stop someone from replacing the assets in a PS2 mix with the arcade assets? I mean, aside from possibly needing to relocate a lot of data references, AS WELL as the issue of whether the game will stretch the textures correctly in the case of images, seeing as they are IIRC half the size of the graphics used in the PS2 mixes.

I don't think that asset replacement would improve things:

- In PS2 mixes the audio quality is equal or better than in AC games. Before Extreme, previews were at 96kbps and in Extreme they were at 56kbps... yuck.
- As you said, the graphics are half the size... but only in gameplay (during songs). In the rest of the screens the graphics are pretty much the same.

Before Extreme 2 there's plenty of space to ADD things instead, like for example SENORITA (Speedy Mix) to Extreme JP CS.

Post #305 · Posted at 2020-10-03 03:27:37pm 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-10-03 08:39pm
It really was more of a showerthought - seeing that even DDR EXTREME JP only clocks in at ~1.15GB for the graphics, videos, audio, etc for a mix that has111 songs, though I guess it wouldn't hurt to have the option if one chooses once the game is in a customizable state.

Quote: Wan
- As you said, the graphics are half the size... but only in gameplay (during songs). In the rest of the screens the graphics are pretty much the same

The physical resolution for the static backgrounds for menus are 320x240 as well.


I'd say once we get to the point where people can customizes these games, it'd be a good option to have to make it so people can use these formats too, in case someone wanted to do something with a SuperNOVA AC sized songlist of > 300 songs (or what I am tempted to do once creating custom SSQs is easy, if it isn't already, and make a DDR SuperNOVA + ITG1+2 sized song list (haha)

Hrmmm I wonder, why in hell do the Ps2 games even put the file data in a single file to begin with? This setup means that the game must find / load the directory on the disk of the filedata.bin file, then get access to the filedata.bin file, then go in, and find the file within that filedata.bin file, and copy over the bytes that make up that individual file. What benefit is there to do this, over having individual folders with all the assets (in their respective formats still, of course)?

Post #306 · Posted at 2020-10-10 07:33:00pm 3.5 years ago

Offline Wan
Wan Avatar Member
412 Posts
Chile
Reg. 2008-01-13

"I want to change my username =("

Last updated: 2020-10-10 07:33pm
Quote: travelsonic
Hrmmm I wonder, why in hell do the Ps2 games even put the file data in a single file to begin with? This setup means that the game must find / load the directory on the disk of the filedata.bin file, then get access to the filedata.bin file, then go in, and find the file within that filedata.bin file, and copy over the bytes that make up that individual file. What benefit is there to do this, over having individual folders with all the assets (in their respective formats still, of course)?
From how I see it, it's to preserve the life of the PS2's optical drive. It's much safer to grab a chunk of a big file in memory and load the respective file from there rather than loading it straight from the disc.

I can imagine that's why also the AC games load as less as possible from the disc:
- stepcharts and graphics are stored in the 573's flash cart when installing the game.
- song previews are loaded in memory at startup

Post #307 · Posted at 2020-10-18 05:31:54pm 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18

Starting to REALLY fucking hate Western digital with regards to their external hard drives... had a SECOND drive fail on me - suddenly stop being recognized (tried a different USB port, tried a different cable, etc etc) - lost (YET AGAIN) my fucking disassembly on MAX2, luckily the existing research that I had saved from the previous external drive going shit was not lost.

Post #308 · Posted at 2020-10-18 08:59:56pm 3.5 years ago

Offline pm41224
pm41224 Avatar Member
315 Posts
United States
Reg. 2012-05-19

Nintendo Network ID: pm412243DS Friend Code: 4210-4460-8178
"DanceDanceRevolution!"
I'm very sorry you lost a SECOND external hard drive - from WD no less. Seems like Western Digital doesn't care about quality/lifespans of the external hard drives anymore, and I've never owned an external HDD myself.

Post #309 · Posted at 2020-10-19 06:15:04am 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-10-19 06:15am
The thing that has me buggered about the whole thing is, on top of the failing happening so suddenly, that the disk itself isn't making ANY weird noises - everything sounds normal.

*As opposed to the thing making any sort of clicking or buzzing noises

Post #310 · Posted at 2020-10-19 07:51:10am 3.5 years ago

Offline pm41224
pm41224 Avatar Member
315 Posts
United States
Reg. 2012-05-19

Nintendo Network ID: pm412243DS Friend Code: 4210-4460-8178
"DanceDanceRevolution!"
Jesus, that is very suspect for a hard drive to fail so suddenly without any clicking or buzzing noises being made.

It seems to sound normal yet it won't be recognized by your computer no matter which cable or USB slot you try?

Post #311 · Posted at 2020-10-19 02:05:42pm 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-10-19 02:07pm
Yes - must have tried every one of the (12?) USB ports on my computer, tried a new cable, tried it on my old rig (which I saved to use for streaming related purposes, on top of having older stuff I hadn't been arsed enough to move around), tried it on the computer(s) at work (benefit of working for 'rents, more flexibility to spend time doing that kind of stuff) - tried it with the original cable, tried it with new cables, nothing. Fucking bizarre.

The drive itself hasn't even been in use for that long... my Dad had originally bought it, but never got around to using it - when my old drive failed, started using it - but that wasn't even 6 months ago.

Post #312 · Posted at 2020-10-19 02:14:12pm 3.5 years ago

Offline Air12567
Air12567 Avatar Member
642 Posts
United Kingdom
Reg. 2006-05-27

Some years back, there was an audio file floating around online that was supposedly an official line out of DDR MAX 3's location test, the audio included:
Naoki trance sounding interface music
1998 (Matt Darrey Remix) / Binary Finary (may have been a different remix)
Calling (Metro Edit) / Geri Halliwell
Victory / Riyu Kosaka, and a few other bemani tracks.

Does anybody remember/or have this audio file? may be worth adding to the research thread if official?
https://i.imgur.com/0F5fGec.png

Post #313 · Posted at 2020-10-19 03:19:28pm 3.5 years ago

Offline Legendaery
Legendaery Avatar Member
44 Posts
Not Set
Reg. 2017-11-29

I wish my assembly skills were better so I could get into reverse engineering...sigh

but to everyone who is doing this work for the ddr community, thank you! very interesting stuff.

Post #314 · Posted at 2020-10-19 03:45:38pm 3.5 years ago

Offline SomethingRandom
SomethingRandom Avatar Member
2,794 Posts
United States
Reg. 2015-02-21

Game Center Nickname: blearymoos
"bootylicious "
Quote: AaronRoberts
Some years back, there was an audio file floating around online that was supposedly an official line out of DDR MAX 3's location test, the audio included:
Naoki trance sounding interface music
1998 (Matt Darrey Remix) / Binary Finary (may have been a different remix)
Calling (Metro Edit) / Geri Halliwell
Victory / Riyu Kosaka, and a few other bemani tracks.

Does anybody remember/or have this audio file? may be worth adding to the research thread if official?
it's fake, mainline arcade games are well-documented and i see nothing about a real max3

Post #315 · Posted at 2020-10-19 05:45:24pm 3.5 years ago

Offline Dancefreak
Dancefreak Avatar Member+
340 Posts
United Kingdom
Reg. 2006-08-12

Quote: SomethingRandom
Quote: AaronRoberts
Some years back, there was an audio file floating around online that was supposedly an official line out of DDR MAX 3's location test, the audio included:
Naoki trance sounding interface music
1998 (Matt Darrey Remix) / Binary Finary (may have been a different remix)
Calling (Metro Edit) / Geri Halliwell
Victory / Riyu Kosaka, and a few other bemani tracks.

Does anybody remember/or have this audio file? may be worth adding to the research thread if official?
it's fake, mainline arcade games are well-documented and i see nothing about a real max3

Yeah this was very fake. As was the Extreme 2 Location Test that did the rounds with a screenshot of a blurry modified Extreme Theme in purple with some Captain jack and Naoki songs on the songlist.

Post #316 · Posted at 2020-10-19 09:16:43pm 3.5 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-10-19 09:17pm
Quote: Wan

From how I see it, it's to preserve the life of the PS2's optical drive. It's much safer to grab a chunk of a big file in memory and load the respective file from there rather than loading it straight from the disc.

I feel really smooth-brained asking this, but how would it be less wear to do that, versus loading individual files?

Post #317 · Posted at 2020-10-19 11:19:08pm 3.5 years ago

Offline AxelWasHere
AxelWasHere Avatar Member
1,584 Posts
United States
Reg. 2012-07-13

"No."
Quote: SomethingRandom
Quote: AaronRoberts
Some years back, there was an audio file floating around online that was supposedly an official line out of DDR MAX 3's location test, the audio included:
Naoki trance sounding interface music
1998 (Matt Darrey Remix) / Binary Finary (may have been a different remix)
Calling (Metro Edit) / Geri Halliwell
Victory / Riyu Kosaka, and a few other bemani tracks.

Does anybody remember/or have this audio file? may be worth adding to the research thread if official?
it's fake, mainline arcade games are well-documented and i see nothing about a real max3

If you take a look at google and put this there.. "DDRMAX3 Location Test" It said a DMCA take down was issue'd I still think its fake or something but thats weird that a DMCA was in place if you search that up.
https://i.imgur.com/vnrpBDk.gif

Post #318 · Posted at 2020-10-22 05:31:49pm 3.5 years ago

Offline Wan
Wan Avatar Member
412 Posts
Chile
Reg. 2008-01-13

"I want to change my username =("

Last updated: 2020-10-22 07:44pm
Quote: travelsonic
Quote: Wan

From how I see it, it's to preserve the life of the PS2's optical drive. It's much safer to grab a chunk of a big file in memory and load the respective file from there rather than loading it straight from the disc.

I feel really smooth-brained asking this, but how would it be less wear to do that, versus loading individual files?
Have you noticed in your PC the difference between moving a lot of small files from one place to another, and moving just a big file?

In this case is the same... the lens has to move more quickly to load too many small files, particularly if they're distributed in different places of the disc. This wears the drive much faster.

Post #319 · Posted at 2020-10-25 03:54:19pm 3.4 years ago

Offline travelsonic
travelsonic Avatar Member
190 Posts
Not Set
Reg. 2006-10-18


Last updated: 2020-10-25 04:00pm
EDIT: nevermind, I think I've figured it out

Edit: Nevermind that nevermind..

So looking at the stepdata in the game memory, I find it REALLY weird how they chose to organize the beat / measure entries.

For instance, look at this excerpt from the single light chart for Burning Heat! (3 Option Mix)

00 00 DC 00 // Measure 13 Beat 12 (Beat values 0 <= X <= 0xF, or from 0 to 15)
00 00 E4 00 // Measure 14 Beat 4
00 00 EC 00 // Measure 14 Beat 12
00 00 F4 00 // Measure 15 Beat 4
00 00 F8 00 // Measure 15 Beat 8
00 01 00 00 // Measure 16 Beat 0
00 01 04 00 // Measure 16 Beat 4
00 01 08 00 // Measure 16 Beat 8

What I wonder is, why did they choose to store the beat / measure information in the middle 2 bytes of each word, as opposed to storing the values at the rightmost 2 bytes, OR leftmost 2 bytes? I also wonder why did they combine the measure and beat information in a single byte in the way they did (with a nibble being stored in an adjacent byte when the measure value >= 16), versus keeping the measure and beat values in their own bytes.

Post #320 · Posted at 2020-10-26 03:49:43pm 3.4 years ago

Offline Wan
Wan Avatar Member
412 Posts
Chile
Reg. 2008-01-13

"I want to change my username =("

Last updated: 2020-10-26 11:46pm
You need a small crash course in the SSQ format.

There's 2 concepts involved in the format, not THAT different to SM:
- The stepchart itself, defined in chunk type 03. The arrows use a metric value whose calculation is fixed (read below).
- The timing and tempo of the song. Put it simply, it's the speed at how the stepchart scrolls. This is defined in chunk type 01 (something that it's not visible in memory as it's in the SSQ file because the game loads the values somewhere else). The calculation of this is definitely variable... it doesn't have a "BPM" per se, but definition(s) of when in time happens a tempo section of the stepchart (expressed in tick values of its beginning and end).

- In the stepchart chunk first you have the Metric Value of all the arrows and then the TYPE of each arrow (so a left+right jump is not two separate arrows but a "left+right arrow type")
- The metric value is written as
(number of measure) x 4096
This means that the format actually allows to be VERY precise for where they want to place an arrow!
So, for example... for that arrow at measure 16 you have 00 01 00 00 = 65536 = 4096 x 16.

Extra info you may come across:
- For freezes there's separate definitions of when a freeze starts and when it ends.
- As long as the metric value + arrow type match, the pair can technically be anywhere. For example, if they wanted to be masochist, all the freeze starts of the song can be defined at the beginning of the chunk and the stepchart would still be the same.
- The "timing resolution" of the SSQ format has changed along the years. Between 4th Mix and MAX2 it was 1/75 sec per tick, in Extreme changed to 1/150 sec and now DDR A/A20 allows for variable timing per song (Endymion's is 1/1000 sec!)

EDIT:
I had the impression that the timing resolution affected the precision of the stepchart, but after writing the above I understand that the timing resolution affects how precise can be the "BPM changes"... the stepchart's precision has been up to 1/4096 all this time.
Register Log In Back To Forums

0 User(s) Viewing This Thread (Past 15 Minutes)

©2006-2024 Zenius -I- vanisher.com -5th style- IIPrivacy Policy
Web Server: 4% · Database: 4% · Server Time: 2024-04-24 08:01:11
This page took 0.022 seconds to execute.
Theme: starlight · Language: englishuk
Reset Theme & Language