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
10 changes: 10 additions & 0 deletions config/RSBE01_02/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,16 @@ sora/st/st_data_container.cpp:
.data start:0x80462C08 end:0x80462C78
.sdata start:0x8059E848 end:0x8059E858

sora/st/st_data_container_multi.cpp:
.text start:0x8015BBF4 end:0x8015BF9C
.ctors start:0x80406578 end:0x8040657C
.data start:0x80462C78 end:0x80462CC0
.sdata start:0x8059E858 end:0x8059E860
.sbss start:0x805A0470 end:0x805A0474

sora/st/st_data_container_magic.cpp:
.sdata start:0x8059E860 end:0x8059E864

Runtime.PPCEABI.H/__init_cpp_exceptions.cpp:
.text start:0x803F1A08 end:0x803F1A78
.ctors start:0x804064E0 end:0x804064E4 rename:.ctors$10
Expand Down
28 changes: 14 additions & 14 deletions config/RSBE01_02/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6511,16 +6511,16 @@ getData__15stDataContainerFUl = .text:0x8015BB0C; // type:function size:0x6C
getDataAddressHead__15stDataContainerFv = .text:0x8015BB78; // type:function size:0x10
__ct__21stDataSimpleContainerFP19stDataContainerData = .text:0x8015BB88; // type:function size:0x1C
__dt__21stDataSimpleContainerFv = .text:0x8015BBA4; // type:function size:0x40
getExtParam__15stDataContainerFv = .text:0x8015BBE4; // type:function size:0x8 scope:weak
getVersion__15stDataContainerFv = .text:0x8015BBEC; // type:function size:0x8 scope:weak
create__20stDataMultiContainerFPvQ25Heaps8HeapType = .text:0x8015BBF4; // type:function size:0x110
fn_8015BD04 = .text:0x8015BD04; // type:function size:0xC8
fn_8015BDCC = .text:0x8015BDCC; // type:function size:0x70
fn_8015BE3C = .text:0x8015BE3C; // type:function size:0xB8
fn_8015BEF4 = .text:0x8015BEF4; // type:function size:0x84
fn_8015BF78 = .text:0x8015BF78; // type:function size:0xC
fn_8015BF84 = .text:0x8015BF84; // type:function size:0xC
fn_8015BF90 = .text:0x8015BF90; // type:function size:0xC
getExtParam__15stDataContainerCFv = .text:0x8015BBE4; // type:function size:0x8 scope:weak
getVersion__15stDataContainerCFv = .text:0x8015BBEC; // type:function size:0x8 scope:weak
create__20stDataMultiContainerFP19stDataContainerDataQ25Heaps8HeapType = .text:0x8015BBF4; // type:function size:0x110
__dt__20stDataMultiContainerFv = .text:0x8015BD04; // type:function size:0xC8
searchContainer__20stDataMultiContainerFUlUl = .text:0x8015BDCC; // type:function size:0x70
getContainerData__20stDataMultiContainerFUlUlUl = .text:0x8015BE3C; // type:function size:0xB8
getContainerDataNum__20stDataMultiContainerFUlUl = .text:0x8015BEF4; // type:function size:0x84
getExtParam__20stDataMultiContainerCFv = .text:0x8015BF78; // type:function size:0xC
getVersion__20stDataMultiContainerCFv = .text:0x8015BF84; // type:function size:0xC
__sinit_\st_data_container_multi_cpp = .text:0x8015BF90; // type:function size:0xC scope:local
fn_8015BF9C = .text:0x8015BF9C; // type:function size:0x18
fn_8015BFB4 = .text:0x8015BFB4; // type:function size:0x70
fn_8015C024 = .text:0x8015C024; // type:function size:0x120
Expand Down Expand Up @@ -26243,7 +26243,7 @@ __vt__21stDataSimpleContainer = .data:0x80462C08; // type:object size:0x1C
@88 = .data:0x80462C3C; // type:object size:0xC scope:local
__vt__15stDataContainer = .data:0x80462C48; // type:object size:0x1C
@89 = .data:0x80462C68; // type:object size:0x10 scope:local data:string
lbl_80462C78 = .data:0x80462C78; // type:object size:0x1C
__vt__20stDataMultiContainer = .data:0x80462C78; // type:object size:0x1C
lbl_80462C94 = .data:0x80462C94; // type:object size:0x15 data:string
lbl_80462CAC = .data:0x80462CAC; // type:object size:0x14
HomeBtnIcon = .data:0x80462CC0; // type:object size:0x18C0 scope:global align:32
Expand Down Expand Up @@ -29641,8 +29641,8 @@ lbl_8059E834 = .sdata:0x8059E834; // type:object size:0x5 data:string
lbl_8059E840 = .sdata:0x8059E840; // type:object size:0x8
__RTTI__21stDataSimpleContainer = .sdata:0x8059E848; // type:object size:0x8 scope:weak
__RTTI__15stDataContainer = .sdata:0x8059E850; // type:object size:0x8 scope:weak
lbl_8059E858 = .sdata:0x8059E858; // type:object size:0x8
lbl_8059E860 = .sdata:0x8059E860; // type:object size:0x8 data:4byte
__RTTI__20stDataMultiContainer = .sdata:0x8059E858; // type:object size:0x8
g_BlocMagicInit = .sdata:0x8059E860; // type:object size:0x4 data:4byte
lbl_8059E868 = .sdata:0x8059E868; // type:object size:0x8 data:2byte
lbl_8059E870 = .sdata:0x8059E870; // type:object size:0x4 data:4byte
lbl_8059E874 = .sdata:0x8059E874; // type:object size:0xC data:byte
Expand Down Expand Up @@ -30856,7 +30856,7 @@ lbl_805A0454 = .sbss:0x805A0454; // type:object size:0x4 data:4byte
lbl_805A0458 = .sbss:0x805A0458; // type:object size:0x8 data:byte
lbl_805A0460 = .sbss:0x805A0460; // type:object size:0x8 data:4byte
lbl_805A0468 = .sbss:0x805A0468; // type:object size:0x8 data:4byte
lbl_805A0470 = .sbss:0x805A0470; // type:object size:0x8 data:4byte
g_BlocMagic = .sbss:0x805A0470; // type:object size:0x4 data:4byte
lbl_805A0478 = .sbss:0x805A0478; // type:object size:0x8 data:4byte
lbl_805A0480 = .sbss:0x805A0480; // type:object size:0x8 data:4byte
lbl_805A0488 = .sbss:0x805A0488; // type:object size:0x8 data:4byte
Expand Down
2 changes: 2 additions & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,8 @@ def MatchingFor(*versions):
Object(Matching, "sora/nt/nt_etc_dwc.cpp", extra_cflags=["-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"),
Object(Matching, "sora/st/st_data_container_magic.cpp"),
],
},
# Common REL units
Expand Down
12 changes: 9 additions & 3 deletions src/sora/gf/gf_error_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,15 @@
#include <types.h>

// TODO: These belong to different files

// Big compressed object, possibly linked from an independent data-only unit
// .data start:0x80423980 end:0x8042ADD0
extern CXStream g_LZEncodedAlertFont;

// global defined in ms_resfont.cpp
extern nw4r::ut::ResFont g_AlertFont;

// probably defined in gf_file_io.cpp
extern const char* g_ErrorMsgTable[12];

static gfErrorManager* g_gfErrorManager;
Expand Down Expand Up @@ -113,9 +119,9 @@ void gfErrorManager::render() {
}

void gfErrorManager::notifyError(u32 errorCode, u32 reasonCode) {
bool res;
notifyErrorHelper(res, errorCode);
if (res) {
bool statusChanged;
suspendGame(statusChanged, errorCode);
if (statusChanged) {
m_reasonCode = reasonCode;
m_errorCode = errorCode;
}
Expand Down
6 changes: 3 additions & 3 deletions src/sora/st/st_data_container.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ stDataContainer::stDataContainer(stDataContainerData* data)

stDataContainer::~stDataContainer() { }

void* stDataContainer::getData(u32 index) {
stDataContainerData* stDataContainer::getData(u32 index) {
if (m_filedata->m_numFiles <= index)
return nullptr;
u32* startOffsets = static_cast<u32*>(getDataAddressHead());
return reinterpret_cast<u8*>(m_filedata) + startOffsets[index];
return reinterpret_cast<stDataContainerData*>(
reinterpret_cast<u8*>(m_filedata) + startOffsets[index]);
}

void* stDataContainer::getDataAddressHead() {
Expand All @@ -23,4 +24,3 @@ stDataSimpleContainer::stDataSimpleContainer(stDataContainerData* data)
}

stDataSimpleContainer::~stDataSimpleContainer() { }

5 changes: 5 additions & 0 deletions src/sora/st/st_data_container_magic.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include <st/st_data_container.h>
#include <types.h>

// Spells 'BLOC'
u32 g_BlocMagicInit = 0x424C4F43;
60 changes: 60 additions & 0 deletions src/sora/st/st_data_container_multi.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#include <gf/gf_heap_manager.h>
#include <sr/sr_common.h>
#include <st/st_data_container.h>
#include <types.h>

BlocMagicT g_BlocMagic = g_BlocMagicInit;

stDataMultiContainer* stDataMultiContainer::create(stDataContainerData* filedata, HeapType destHeap) {
return new (destHeap) stDataMultiContainer(filedata, destHeap);
}

stDataMultiContainer::~stDataMultiContainer() {
const u32 numFiles = m_filedata->m_numFiles;
for (u32 i = 0; i < numFiles; i++)
delete m_nodes[i];
// TODO: determine the pattern causing this tautological check
if (&m_maxFiles && m_nodes)
gfHeapManager::free(m_nodes);
}

stDataContainer* stDataMultiContainer::searchContainer(u32 targetMagic, u32 nodeIdx) {
if (g_BlocMagic.data != m_filedata->m_MAGIC)
return nullptr;

stDataContainer* c;
u32 j = 0;
for (u32 i = 0; i < m_numFiles; i++) {
c = m_nodes[i];
if (targetMagic == c->m_filedata->m_MAGIC) {
if (j == nodeIdx)
return c;
j++;
}
}
return nullptr;
}

stDataContainerData* stDataMultiContainer::getContainerData(u32 targetMagic, u32 nodeDataIdx, u32 nodeIdx) {
if (g_BlocMagic.data == m_filedata->m_MAGIC) {
if (stDataContainer* c = searchContainer(targetMagic, nodeIdx))
return c->getData(nodeDataIdx);
} else if (targetMagic == m_filedata->m_MAGIC && nodeIdx != 0) {
return getData(nodeDataIdx);
}
return nullptr;
}

u32 stDataMultiContainer::getContainerDataNum(u32 targetMagic, u32 nodeIdx) {
if (stDataContainer* c = searchContainer(targetMagic, nodeIdx))
return c->m_filedata->m_numFiles;
return 0;
}

u32 stDataMultiContainer::getExtParam() const {
return m_filedata->m_extParam;
}

u32 stDataMultiContainer::getVersion() const {
return m_filedata->m_version;
}
Loading