diff --git a/config/RSBE01_02/rels/sora_melee/splits.txt b/config/RSBE01_02/rels/sora_melee/splits.txt index 794006f..ea5b384 100644 --- a/config/RSBE01_02/rels/sora_melee/splits.txt +++ b/config/RSBE01_02/rels/sora_melee/splits.txt @@ -70,6 +70,12 @@ mo_melee/sora_melee/so/so_common_data_accesser.cpp: .ctors start:0x0000004C end:0x00000050 .bss start:0x00002CD0 end:0x00002E58 +mo_melee/sora_melee/ft/ft_class_info.cpp: + .text start:0x001254D4 end:0x001257EC + .ctors start:0x0000005C end:0x00000060 + .data start:0x00029210 end:0x000292A0 + .bss start:0x00003040 end:0x00003138 + mo_melee/mo_melee.cpp: .text start:0x003CBCBC end:0x003CBE40 .ctors start:0x00000514 end:0x00000518 diff --git a/config/RSBE01_02/rels/sora_melee/symbols.txt b/config/RSBE01_02/rels/sora_melee/symbols.txt index 1a5d838..e7d02e0 100644 --- a/config/RSBE01_02/rels/sora_melee/symbols.txt +++ b/config/RSBE01_02/rels/sora_melee/symbols.txt @@ -11924,13 +11924,13 @@ fn_27_1254B4 = .text:0x001254B4; // type:function size:0x8 fn_27_1254BC = .text:0x001254BC; // type:function size:0x8 fn_27_1254C4 = .text:0x001254C4; // type:function size:0x8 fn_27_1254CC = .text:0x001254CC; // type:function size:0x8 -fn_27_1254D4 = .text:0x001254D4; // type:function size:0x11C -fn_27_1255F0 = .text:0x001255F0; // type:function size:0x40 -fn_27_125630 = .text:0x00125630; // type:function size:0x14 -fn_27_125644 = .text:0x00125644; // type:function size:0x14 -fn_27_125658 = .text:0x00125658; // type:function size:0x8 -fn_27_125660 = .text:0x00125660; // type:function size:0x40 -fn_27_1256A0 = .text:0x001256A0; // type:function size:0x14C +__ct__11ftClassInfoFb = .text:0x001254D4; // type:function size:0x11C +__dt__11ftClassInfoFv = .text:0x001255F0; // type:function size:0x40 +getClassInfo__11ftClassInfoFQ28Fighters13ftFighterKind = .text:0x00125630; // type:function size:0x14 +setClassInfo__11ftClassInfoFQ28Fighters13ftFighterKindP11ftClassInfo = .text:0x00125644; // type:function size:0x14 +create__15ftClassInfoNullCFv = .text:0x00125658; // type:function size:0x8 +__dt__15ftClassInfoNullFv = .text:0x00125660; // type:function size:0x40 +__sinit_\ft_class_info_cpp = .text:0x001256A0; // type:function size:0x14C scope:local fn_27_1257EC = .text:0x001257EC; // type:function size:0x578 fn_27_125D64 = .text:0x00125D64; // type:function size:0xBC fn_27_125E20 = .text:0x00125E20; // type:function size:0x64C @@ -31969,14 +31969,14 @@ lbl_27_data_291C0 = .data:0x000291C0; // type:object size:0x8 lbl_27_data_291C8 = .data:0x000291C8; // type:object size:0x2E data:string lbl_27_data_291F8 = .data:0x000291F8; // type:object size:0x10 lbl_27_data_29208 = .data:0x00029208; // type:object size:0x8 -lbl_27_data_29210 = .data:0x00029210; // type:object size:0x20 +__vt__15ftClassInfoNull = .data:0x00029210; // type:object size:0x1C lbl_27_data_29230 = .data:0x00029230; // type:object size:0x10 data:string -lbl_27_data_29240 = .data:0x00029240; // type:object size:0x18 -lbl_27_data_29258 = .data:0x00029258; // type:object size:0x8 -lbl_27_data_29260 = .data:0x00029260; // type:object size:0x1C +lbl_27_data_29240 = .data:0x00029240; // type:object size:0x14 +__RTTI__15ftClassInfoNull = .data:0x00029258; // type:object size:0x8 +__vt__11ftClassInfo = .data:0x00029260; // type:object size:0x1C lbl_27_data_2927C = .data:0x0002927C; // type:object size:0xC data:string -lbl_27_data_29288 = .data:0x00029288; // type:object size:0x10 -lbl_27_data_29298 = .data:0x00029298; // type:object size:0x8 +lbl_27_data_29288 = .data:0x00029288; // type:object size:0xC +__RTTI__11ftClassInfo = .data:0x00029298; // type:object size:0x8 lbl_27_data_292A0 = .data:0x000292A0; // type:object size:0x14 data:byte lbl_27_data_292B4 = .data:0x000292B4; // type:object size:0x7 data:string jumptable_27_data_292BC = .data:0x000292BC; // type:object size:0x9C scope:local @@ -39140,8 +39140,9 @@ g_ftSlotManager = .bss:0x00002E90; // type:object size:0x8 data:4byte lbl_27_bss_2E98 = .bss:0x00002E98; // type:object size:0x10 lbl_27_bss_2EA8 = .bss:0x00002EA8; // type:object size:0xC g_ftInstanceManager = .bss:0x00002EB4; // type:object size:0x18C data:4byte -lbl_27_bss_3040 = .bss:0x00003040; // type:object size:0xEC data:4byte -lbl_27_bss_312C = .bss:0x0000312C; // type:object size:0xC data:4byte +g_ftClassInfoTable = .bss:0x00003040; // type:object size:0xDC scope:local data:4byte +g_ftClassInfoTableInit = .bss:0x0000311C; // type:object size:0x1 scope:local +g_ftClassInfoNull = .bss:0x0000312C; // type:object size:0xC data:4byte lbl_27_bss_3138 = .bss:0x00003138; // type:object size:0x8 data:4byte lbl_27_bss_3140 = .bss:0x00003140; // type:object size:0x8 data:4byte lbl_27_bss_3148 = .bss:0x00003148; // type:object size:0x8 data:4byte diff --git a/configure.py b/configure.py index be9a88f..d18f818 100755 --- a/configure.py +++ b/configure.py @@ -813,6 +813,7 @@ def MatchingFor(*versions): Object(Matching, "mo_melee/sora_melee/so/anim/so_anim_cmd_interpreter_effect.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_photo_call_back.cpp"), Object(Matching, "mo_melee/sora_melee/so/so_common_data_accesser.cpp"), + Object(Matching, "mo_melee/sora_melee/ft/ft_class_info.cpp"), Object(Matching, "mo_melee/mo_melee.cpp"), ], }, diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index c6027f7..7b304c7 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit c6027f7ee674d4a8165003edf507b598f11fd338 +Subproject commit 7b304c75a8643a49d00a776399186354be21e5f0 diff --git a/src/mo_melee/sora_melee/ft/ft_class_info.cpp b/src/mo_melee/sora_melee/ft/ft_class_info.cpp new file mode 100644 index 0000000..af39f46 --- /dev/null +++ b/src/mo_melee/sora_melee/ft/ft_class_info.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +#include + +static const u32 FtClassInfoTableSize = 55; + +static ftClassInfo* g_ftClassInfoTable[FtClassInfoTableSize]; +static bool g_ftClassInfoTableInit; +ftClassInfoNull g_ftClassInfoNull; + +ftClassInfo::ftClassInfo(bool isNull) : soNullable(isNull) { + if (!g_ftClassInfoTableInit) { + g_ftClassInfoTableInit = true; + for (u32 i = 0; i < FtClassInfoTableSize; i++) + g_ftClassInfoTable[i] = &g_ftClassInfoNull; + } +} + +ftClassInfo::~ftClassInfo() { } + +ftClassInfo* ftClassInfo::getClassInfo(Fighters::ftFighterKind kind) { + return g_ftClassInfoTable[kind]; +} + +void ftClassInfo::setClassInfo(Fighters::ftFighterKind kind, ftClassInfo* info) { + g_ftClassInfoTable[kind] = info; +} + +ftClassInfo* ftClassInfoNull::create() const { + return nullptr; +} + +ftClassInfoNull::~ftClassInfoNull() { }