Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions config/RSBE01_02/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,10 @@ sora/nt/nt_etc_dwc.cpp:
.bss start:0x8049ECE0 end:0x8049ECF8
.sdata start:0x8059E7E8 end:0x8059E7F0

sora/nt/nt_etc_so.cpp:
.text start:0x80150CE4 end:0x801510F4
.data start:0x804610F8 end:0x80461108

sora/ad/ad_static_data.cpp:
.text start:0x8015B09C end:0x8015B0E0
.data start:0x804621C0 end:0x804629C8
Expand Down
18 changes: 9 additions & 9 deletions config/RSBE01_02/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6313,7 +6313,7 @@ fn_801505DC = .text:0x801505DC; // type:function size:0x10
fn_801505EC = .text:0x801505EC; // type:function size:0x10
fn_801505FC = .text:0x801505FC; // type:function size:0x18
__ct__6nteDWCFv = .text:0x80150614; // type:function size:0x9C
notifyDoneSOProc__6nteDWCFll = .text:0x801506B0; // type:function size:0xE0
notifyDoneSOProc__6nteDWCFQ29nteSODone9NotifTypel = .text:0x801506B0; // type:function size:0xE0
startupDWC__6nteDWCFv = .text:0x80150790; // type:function size:0x74
finishDWC__6nteDWCFv = .text:0x80150804; // type:function size:0x58
login__6nteDWCFllll = .text:0x8015085C; // type:function size:0xC8
Expand All @@ -6323,17 +6323,17 @@ processDefault__6nteDWCFv = .text:0x801509D4; // type:function size:0xA0
getTime__6nteDWCCFv = .text:0x80150A74; // type:function size:0xAC
callbackLogin__6nteDWCFllPv = .text:0x80150B20; // type:function size:0x88
AllocEx__6nteDWCFiUli = .text:0x80150BA8; // type:function size:0x78
FreeEx__6nteDWCFiPv = .text:0x80150C20; // type:function size:0x54
FreeEx__6nteDWCFiPvi = .text:0x80150C20; // type:function size:0x54
__dt__6nteDWCFv = .text:0x80150C74; // type:function size:0x68
@64@notifyDoneSOProc__6nteDWCFll = .text:0x80150CDC; // type:function size:0x8
@64@notifyDoneSOProc__6nteDWCFQ29nteSODone9NotifTypel = .text:0x80150CDC; // type:function size:0x8
__ct__5nteSOFv = .text:0x80150CE4; // type:function size:0x8C
__dt__5nteSOFv = .text:0x80150D70; // type:function size:0xE0
fn_80150E50 = .text:0x80150E50; // type:function size:0x144
run__5nteSOFv = .text:0x80150E50; // type:function size:0x144
startup__5nteSOFP9nteSODoneUl = .text:0x80150F94; // type:function size:0x88
finish__5nteSOFP9nteSODone = .text:0x8015101C; // type:function size:0x7C
SOAlloc = .text:0x80151098; // type:function size:0x2C
SOFree = .text:0x801510C4; // type:function size:0x2C
showError__6nteDWCFl = .text:0x801510F0; // type:function size:0x4
SOAlloc__5nteSOFiUl = .text:0x80151098; // type:function size:0x2C
SOFree__5nteSOFiPv = .text:0x801510C4; // type:function size:0x2C
showError__5nteSOFl = .text:0x801510F0; // type:function size:0x4
fn_801510F4 = .text:0x801510F4; // type:function size:0x8C
fn_80151180 = .text:0x80151180; // type:function size:0xD8
fn_80151258 = .text:0x80151258; // type:function size:0x35C
Expand Down Expand Up @@ -8918,7 +8918,7 @@ fn_801E0480 = .text:0x801E0480; // type:function size:0x284
fn_801E0704 = .text:0x801E0704; // type:function size:0x10
fn_801E0714 = .text:0x801E0714; // type:function size:0xC
fn_801E0720 = .text:0x801E0720; // type:function size:0x14
fn_801E0734 = .text:0x801E0734; // type:function size:0x2C
OSIsThreadTerminated = .text:0x801E0734; // type:function size:0x2C
fn_801E0760 = .text:0x801E0760; // type:function size:0x3C
OSEnableScheduler = .text:0x801E079C; // type:function size:0x3C scope:global
fn_801E07D8 = .text:0x801E07D8; // type:function size:0x68
Expand Down Expand Up @@ -26201,7 +26201,7 @@ lbl_80461030 = .data:0x80461030; // type:object size:0x17 data:string
lbl_80461048 = .data:0x80461048; // type:object size:0x28
lbl_80461070 = .data:0x80461070; // type:object size:0xE data:string
__vt__6nteDWC = .data:0x80461080; // type:object size:0x78
lbl_804610F8 = .data:0x804610F8; // type:object size:0x10
__vt__5nteSO = .data:0x804610F8; // type:object size:0xC
lbl_80461108 = .data:0x80461108; // type:object size:0x1FC
lbl_80461304 = .data:0x80461304; // type:object size:0x48
lbl_8046134C = .data:0x8046134C; // type:object size:0x1C
Expand Down
1 change: 1 addition & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ def MatchingFor(*versions):
Object(Matching, "sora/nt/nt_offline.cpp", extra_cflags=["-RTTI off"]),
Object(Matching, "sora/nt/d_net_connect.cpp"),
Object(Matching, "sora/nt/nt_etc_dwc.cpp", extra_cflags=["-RTTI off"]),
Object(Matching, "sora/nt/nt_etc_so.cpp", extra_cflags=["-O0", "-opt peephole", "-opt schedule", "-RTTI off"]),
Object(Matching, "sora/ad/ad_static_data.cpp"),
Object(Matching, "sora/st/st_data_container.cpp"),
Object(Matching, "sora/st/st_data_container_multi.cpp"),
Expand Down
103 changes: 49 additions & 54 deletions src/mo_melee/sora_melee/so/so_common_data_accesser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,71 +7,66 @@ void soCommonDataAccesser::setupCommonParam(soCommonParam** p1) {
for (u32 i = 0; i < 2; i++) {
u32 j = 0;
u32 k = 0;
paramFloats[i].m_0[j++] = p1[i]->m_0;
paramFloats[i].m_0[j++] = p1[i]->m_4;
paramFloats[i].m_0[j++] = p1[i]->m_8;
paramFloats[i].m_0[j++] = p1[i]->m_C;
paramFloats[i].m_0[j++] = p1[i]->m_18;
paramFloats[i].m_0[j++] = p1[i]->m_1C;
paramFloats[i].m_0[j++] = p1[i]->m_20;
paramFloats[i].m_0[j++] = p1[i]->m_24;
paramFloats[i].m_0[j++] = p1[i]->m_28;
paramFloats[i].m_0[j++] = p1[i]->m_2C;
paramFloats[i].m_0[j++] = p1[i]->m_30;
paramFloats[i].m_0[j++] = p1[i]->m_34;
paramFloats[i].m_0[j++] = p1[i]->m_38;
paramFloats[i].m_0[j++] = p1[i]->m_3C;
paramFloats[i].m_0[j++] = p1[i]->m_40;
paramFloats[i].m_0[j++] = p1[i]->m_48;
paramFloats[i].m_0[j++] = p1[i]->m_4C;
paramFloats[i].m_0[j++] = p1[i]->m_50;
paramFloats[i].m_0[j++] = p1[i]->m_54;
paramFloats[i].m_0[j++] = p1[i]->m_5C;
paramFloats[i].m_0[j++] = p1[i]->m_60;
paramFloats[i].m_0[j++] = p1[i]->m_6C;
paramFloats[i].m_0[j++] = p1[i]->m_70;
paramFloats[i].m_0[j++] = p1[i]->m_74;
paramFloats[i].m_0[j++] = p1[i]->m_78;
paramFloats[i].m_0[j++] = p1[i]->m_7C;
paramFloats[i].m_0[j++] = p1[i]->m_80;
paramFloats[i].m_0[j++] = p1[i]->m_84;
paramFloats[i].m_0[j++] = p1[i]->m_88;
paramFloats[i].m_0[j++] = p1[i]->m_8C;
paramFloats[i].m_0[j++] = p1[i]->m_90;
paramFloats[i].m_0[j++] = p1[i]->m_94;
paramFloats[i].m_0[j++] = p1[i]->m_98;
paramFloats[i].m_0[j++] = p1[i]->m_9C;
paramFloats[i].m_0[j++] = p1[i]->m_A0;
paramFloats[i].m_0[j++] = p1[i]->m_A4;
paramFloats[i].m_0[j++] = p1[i]->m_A8;
paramFloats[i].m_0[j++] = p1[i]->m_AC;
paramFloats[i].m_0[j++] = p1[i]->m_B0;
paramFloats[i].m_0[j++] = p1[i]->m_B4;
paramFloats[i].data[j++] = p1[i]->m_0;
paramFloats[i].data[j++] = p1[i]->m_4;
paramFloats[i].data[j++] = p1[i]->m_8;
paramFloats[i].data[j++] = p1[i]->m_C;
paramFloats[i].data[j++] = p1[i]->m_18;
paramFloats[i].data[j++] = p1[i]->m_1C;
paramFloats[i].data[j++] = p1[i]->m_20;
paramFloats[i].data[j++] = p1[i]->m_24;
paramFloats[i].data[j++] = p1[i]->m_28;
paramFloats[i].data[j++] = p1[i]->m_2C;
paramFloats[i].data[j++] = p1[i]->m_30;
paramFloats[i].data[j++] = p1[i]->m_34;
paramFloats[i].data[j++] = p1[i]->m_38;
paramFloats[i].data[j++] = p1[i]->m_3C;
paramFloats[i].data[j++] = p1[i]->m_40;
paramFloats[i].data[j++] = p1[i]->m_48;
paramFloats[i].data[j++] = p1[i]->m_4C;
paramFloats[i].data[j++] = p1[i]->m_50;
paramFloats[i].data[j++] = p1[i]->m_54;
paramFloats[i].data[j++] = p1[i]->m_5C;
paramFloats[i].data[j++] = p1[i]->m_60;
paramFloats[i].data[j++] = p1[i]->m_6C;
paramFloats[i].data[j++] = p1[i]->m_70;
paramFloats[i].data[j++] = p1[i]->m_74;
paramFloats[i].data[j++] = p1[i]->m_78;
paramFloats[i].data[j++] = p1[i]->m_7C;
paramFloats[i].data[j++] = p1[i]->m_80;
paramFloats[i].data[j++] = p1[i]->m_84;
paramFloats[i].data[j++] = p1[i]->m_88;
paramFloats[i].data[j++] = p1[i]->m_8C;
paramFloats[i].data[j++] = p1[i]->m_90;
paramFloats[i].data[j++] = p1[i]->m_94;
paramFloats[i].data[j++] = p1[i]->m_98;
paramFloats[i].data[j++] = p1[i]->m_9C;
paramFloats[i].data[j++] = p1[i]->m_A0;
paramFloats[i].data[j++] = p1[i]->m_A4;
paramFloats[i].data[j++] = p1[i]->m_A8;
paramFloats[i].data[j++] = p1[i]->m_AC;
paramFloats[i].data[j++] = p1[i]->m_B0;
paramFloats[i].data[j++] = p1[i]->m_B4;

paramInts[i].m_0[k++] = p1[i]->m_10;
paramInts[i].m_0[k++] = p1[i]->m_14;
paramInts[i].m_0[k++] = p1[i]->m_44;
paramInts[i].m_0[k++] = p1[i]->m_58;
paramInts[i].m_0[k++] = p1[i]->m_B8;
paramInts[i].data[k++] = p1[i]->m_10;
paramInts[i].data[k++] = p1[i]->m_14;
paramInts[i].data[k++] = p1[i]->m_44;
paramInts[i].data[k++] = p1[i]->m_58;
paramInts[i].data[k++] = p1[i]->m_B8;

paramIndefinites[i].m_0 = &p1[i]->m_64;
paramIndefinites[i].data[0] = &p1[i]->m_64;
}
commonData = p1;
}

// TODO: UBFIX match without casting

float soCommonDataAccesser::getParamCommonFloat(u32 p1, u32 p2) {
return ((soCommonDataAccesser*)(((u8*)(this)) - 0x1F48))
->paramFloats[p1].m_0[p2];
return paramFloats[p1 - 50].data[p2 - 2];
}

s32 soCommonDataAccesser::getParamCommonInt(u32 p1, u32 p2) {
return ((soCommonDataAccesser*)(((u8*)(this)) - 0x157C4))
->paramInts[p1].m_0[p2];
return paramInts[p1 - 4400].data[p2 - 1];
}

s32* soCommonDataAccesser::getParamCommonIndefinite(u32 p1, u32 p2) {
return ((soCommonDataAccesser*)(((u8*)(this)) - 0x29044 + p1*4 + p2*4))
->paramIndefinites[0].m_0;
return paramIndefinites[p1 - 42000].data[p2 - 1];
}
73 changes: 30 additions & 43 deletions src/sora/nt/nt_etc_dwc.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <gf/gf_heap_manager.h>
#include <gf/gf_task.h>
#include <nt/etc/nt_etc_dwc.h>
#include <nt/etc/nt_etc_so.h>
#include <revolution/DWC/dwc_init.h>
#include <revolution/DWC/dwc_error.h>
#include <revolution/DWC/dwc_main.h>
Expand All @@ -24,16 +25,15 @@ nteDWC::nteDWC() : gfTask("nteDWC", Category_Network, 14, 13, true) {
unk2C_b1 = false;
}

void nteDWC::notifyDoneSOProc(s32 p1, s32 p2) {
switch (p2) {
void nteDWC::notifyDoneSOProc(nteSODone::NotifType notifType, s32 code) {
switch (code) {
case 0:
switch (p1) {
case 0:
if (!DWC_Init(unk6C, m_name, m_appCode, AllocEx, FreeEx)) {
switch (notifType) {
case nteSODone::Startup:
if (!DWC_Init(unk6C, m_name, m_appCode, AllocEx, FreeEx))
m_initialized = true;
}
break;
case 1:
case nteSODone::Finish:
m_initialized = false;
break;
default:
Expand All @@ -43,19 +43,17 @@ void nteDWC::notifyDoneSOProc(s32 p1, s32 p2) {
case 0x80000000:
break;
default:
showError(p2);
s32 err = -NETGetStartupErrorCode(p2);
if (unk60) {
nteSO::showError(code);
s32 err = -NETGetStartupErrorCode(code);
if (unk60)
unk60->func0(err);
}
break;
}
}

bool nteDWC::startupDWC() {
if (m_initialized) {
if (m_initialized)
return true;
}
unk6C = 1;
m_name = "smashbrosxwii";
m_appCode = srGetAppInitialCode();
Expand All @@ -71,27 +69,22 @@ bool nteDWC::finishDWC() {
}

bool nteDWC::login(s32 p1, s32 p2, s32 p3, s32 p4) {
if (!m_initialized) {
if (!m_initialized)
return false;
}
if (DWC_GetState()) {
if (DWC_GetState())
return true;
}
DWC_InitFriendsMatch(0, p1, 0x2B1E, p3, p4, 0, 0, 0, 0);
if (!DWC_LoginAsync(p2, 0, callbackLogin, this)) {
if (!DWC_LoginAsync(p2, 0, callbackLogin, this))
return false;
}
m_loggedIn = true;
return true;
}

bool nteDWC::logout() {
if (!m_initialized) {
if (!m_initialized)
return false;
}
if (!DWC_GetState()) {
if (!DWC_GetState())
return true;
}
OSLockMutex(&m_mutex);
m_loggedIn = false;
DWC_ShutdownFriendsMatch();
Expand All @@ -118,13 +111,12 @@ void nteDWC::processDefault() {
break;
case true:
DWC_ProcessFriendsMatch();
s32 err2, err1;
if (DWC_GetLastErrorEx(&err1, &err2)) {
s32 err, nType;
if (DWC_GetLastErrorEx(&nType, &err)) {
if (unk64) {
if (err1 < 0) {
err1 = -err1;
}
unk64->notifyDoneSOProc(err1, err2);
if (nType < 0)
nType = -nType;
unk64->notifyDoneSOProc(nteSODone::NotifType(nType), err);
}
DWC_ClearError();
}
Expand Down Expand Up @@ -156,37 +148,32 @@ s64 nteDWC::getTime() const {
return ticks;
}

void nteDWC::callbackLogin(s32 p1, s32 p2, void* p3) {
(void)p2;
void nteDWC::callbackLogin(s32 p1, s32 _unused, void* p3) {
nteDWC* dwc = static_cast<nteDWC*>(p3);
if (p1) {
dwc->m_loggedIn = false;
s32 err1, err2;
if (DWC_GetLastErrorEx(&err1, &err2)) {
s32 nType, err;
if (DWC_GetLastErrorEx(&nType, &err)) {
if (dwc->unk64) {
if (err1 < 0) {
err1 = -err1;
}
dwc->unk64->notifyDoneSOProc(err1, err2);
if (nType < 0)
nType = -nType;
dwc->unk64->notifyDoneSOProc(nteSODone::NotifType(nType), err);
}
DWC_ClearError();
}
}
}

void* nteDWC::AllocEx(int heap, size_t size, int align) {
(void)heap;
if (!size) {
void* nteDWC::AllocEx(int _heap, size_t size, int align) {
if (!size)
return nullptr;
}
OSLockMutex(&NteDWCMutex);
void* ptr = gfHeapManager::alloc(Heaps::Network, size, align);
OSUnlockMutex(&NteDWCMutex);
return ptr;
}

void nteDWC::FreeEx(int heap, void* ptr) {
(void)heap;
void nteDWC::FreeEx(int _heap, void* ptr, int unused) {
if (ptr) {
OSLockMutex(&NteDWCMutex);
gfHeapManager::free(ptr);
Expand Down
Loading
Loading