diff --git a/config/RSBE01_02/rels/sora_melee/splits.txt b/config/RSBE01_02/rels/sora_melee/splits.txt index ea5b384..b61df96 100644 --- a/config/RSBE01_02/rels/sora_melee/splits.txt +++ b/config/RSBE01_02/rels/sora_melee/splits.txt @@ -76,6 +76,11 @@ mo_melee/sora_melee/ft/ft_class_info.cpp: .data start:0x00029210 end:0x000292A0 .bss start:0x00003040 end:0x00003138 +mo_melee/sora_melee/ft/ft_extend_param_accesser.cpp: + .text start:0x00149C70 end:0x00149E1C + .data start:0x0002BC00 end:0x0002BCA0 + .bss start:0x00004568 end:0x00004648 + 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 e7d02e0..0ac34cd 100644 --- a/config/RSBE01_02/rels/sora_melee/symbols.txt +++ b/config/RSBE01_02/rels/sora_melee/symbols.txt @@ -12432,11 +12432,11 @@ fn_27_149B70 = .text:0x00149B70; // type:function size:0xC fn_27_149B7C = .text:0x00149B7C; // type:function size:0x1C fn_27_149B98 = .text:0x00149B98; // type:function size:0x40 fn_27_149BD8 = .text:0x00149BD8; // type:function size:0x98 -fn_27_149C70 = .text:0x00149C70; // type:function size:0x9C -fn_27_149D0C = .text:0x00149D0C; // type:function size:0x58 -fn_27_149D64 = .text:0x00149D64; // type:function size:0x14 -fn_27_149D78 = .text:0x00149D78; // type:function size:0x9C -fn_27_149E14 = .text:0x00149E14; // type:function size:0x8 +__ct__21ftExtendParamAccesserFQ28Fighters13ftFighterKind = .text:0x00149C70; // type:function size:0x9C +__dt__21ftExtendParamAccesserFv = .text:0x00149D0C; // type:function size:0x58 +getAccesser__21ftExtendParamAccesserFQ28Fighters13ftFighterKind = .text:0x00149D64; // type:function size:0x14 +isExistAccesser__21ftExtendParamAccesserFQ28Fighters13ftFighterKind = .text:0x00149D78; // type:function size:0x9C +getParamIndefinite__21ftExtendParamAccesserFP16soModuleAccesserl = .text:0x00149E14; // type:function size:0x8 fn_27_149E1C = .text:0x00149E1C; // type:function size:0x40 fn_27_149E5C = .text:0x00149E5C; // type:function size:0x34 fn_27_149E90 = .text:0x00149E90; // type:function size:0xA28 @@ -32180,10 +32180,10 @@ lbl_27_data_2BBF0 = .data:0x0002BBF0; // type:object size:0x8 lbl_27_data_2BBF8 = .data:0x0002BBF8; // type:object size:0x8 lbl_27_data_2BC00 = .data:0x0002BC00; // type:object size:0x1B data:string lbl_27_data_2BC20 = .data:0x0002BC20; // type:object size:0x20 data:string -lbl_27_data_2BC40 = .data:0x0002BC40; // type:object size:0x28 +__vt__21ftExtendParamAccesser = .data:0x0002BC40; // type:object size:0x28 lbl_27_data_2BC68 = .data:0x0002BC68; // type:object size:0x16 data:string lbl_27_data_2BC80 = .data:0x0002BC80; // type:object size:0x18 -lbl_27_data_2BC98 = .data:0x0002BC98; // type:object size:0x8 +__RTTI__21ftExtendParamAccesser = .data:0x0002BC98; // type:object size:0x8 jumptable_27_data_2BCA0 = .data:0x0002BCA0; // type:object size:0x94 scope:local jumptable_27_data_2BD34 = .data:0x0002BD34; // type:object size:0x78 scope:local jumptable_27_data_2BDAC = .data:0x0002BDAC; // type:object size:0x1C scope:local @@ -39168,8 +39168,8 @@ lbl_27_bss_320C = .bss:0x0000320C; // type:object size:0x4 lbl_27_bss_3210 = .bss:0x00003210; // type:object size:0x298 data:4byte lbl_27_bss_34A8 = .bss:0x000034A8; // type:object size:0x1088 data:4byte lbl_27_bss_4530 = .bss:0x00004530; // type:object size:0x38 -lbl_27_bss_4568 = .bss:0x00004568; // type:object size:0x1 data:byte -lbl_27_bss_456C = .bss:0x0000456C; // type:object size:0xDC +g_ftExtendParamAccesserTableInit = .bss:0x00004568; // type:object size:0x1 scope:local data:byte +g_ftExtendParamAccesserTable = .bss:0x0000456C; // type:object size:0xDC scope:local lbl_27_bss_4648 = .bss:0x00004648; // type:object size:0x10 lbl_27_bss_4658 = .bss:0x00004658; // type:object size:0x8 data:4byte lbl_27_bss_4660 = .bss:0x00004660; // type:object size:0xC data:4byte diff --git a/configure.py b/configure.py index d18f818..176d760 100755 --- a/configure.py +++ b/configure.py @@ -814,6 +814,7 @@ def MatchingFor(*versions): 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/sora_melee/ft/ft_extend_param_accesser.cpp"), Object(Matching, "mo_melee/mo_melee.cpp"), ], }, diff --git a/include/lib/BrawlHeaders b/include/lib/BrawlHeaders index 7b304c7..d3ec87a 160000 --- a/include/lib/BrawlHeaders +++ b/include/lib/BrawlHeaders @@ -1 +1 @@ -Subproject commit 7b304c75a8643a49d00a776399186354be21e5f0 +Subproject commit d3ec87a3ee3f75909885130456e821c061e7a47d diff --git a/src/mo_melee/sora_melee/ft/ft_class_info.cpp b/src/mo_melee/sora_melee/ft/ft_class_info.cpp index af39f46..7c080b0 100644 --- a/src/mo_melee/sora_melee/ft/ft_class_info.cpp +++ b/src/mo_melee/sora_melee/ft/ft_class_info.cpp @@ -3,16 +3,14 @@ #include #include -static const u32 FtClassInfoTableSize = 55; - -static ftClassInfo* g_ftClassInfoTable[FtClassInfoTableSize]; +static ftClassInfo* g_ftClassInfoTable[Fighters::Count]; 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++) + for (u32 i = 0; i < Fighters::Count; i++) g_ftClassInfoTable[i] = &g_ftClassInfoNull; } } diff --git a/src/mo_melee/sora_melee/ft/ft_extend_param_accesser.cpp b/src/mo_melee/sora_melee/ft/ft_extend_param_accesser.cpp new file mode 100644 index 0000000..1049096 --- /dev/null +++ b/src/mo_melee/sora_melee/ft/ft_extend_param_accesser.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include + +static bool g_ftExtendParamAccesserTableInit; +static ftExtendParamAccesser* g_ftExtendParamAccesserTable[Fighters::Count]; + +ftExtendParamAccesser::ftExtendParamAccesser(Fighters::ftFighterKind kind) { + if (!g_ftExtendParamAccesserTableInit) { + std::memset(g_ftExtendParamAccesserTable, 0, sizeof(g_ftExtendParamAccesserTable)); + g_ftExtendParamAccesserTableInit = true; + } + g_ftExtendParamAccesserTable[kind] = this; + m_kind = kind; +} + +ftExtendParamAccesser::~ftExtendParamAccesser() { + g_ftExtendParamAccesserTable[m_kind] = 0; +} + +ftExtendParamAccesser* ftExtendParamAccesser::getAccesser(Fighters::ftFighterKind kind) { + return g_ftExtendParamAccesserTable[kind]; +} + +bool ftExtendParamAccesser::isExistAccesser(Fighters::ftFighterKind kind) { + if (!g_ftExtendParamAccesserTable[kind]) + OSReport("_Accessers[ %d ] == NULL \n", kind); + if (!g_ftExtendParamAccesserTableInit) + OSReport("_InitializeAccessers == false \n"); + return (g_ftExtendParamAccesserTable[kind] && g_ftExtendParamAccesserTableInit); +}