mirror of https://github.com/zeldaret/mm.git
Z_DLF OK (#965)
* matched both * use overlay reloc macro * fix fake looking match * PR fixes and change other overlay loading functions * rename * formatter * fix build * re format
This commit is contained in:
parent
8f7f3d24c7
commit
fb445b7d4b
|
|
@ -2,6 +2,74 @@
|
|||
#include "system_malloc.h"
|
||||
#include "z64load.h"
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_DLF/Overlay_LoadGameState.s")
|
||||
void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
|
||||
void* vramStart;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_DLF/Overlay_FreeGameState.s")
|
||||
if (overlayEntry->loadedRamAddr != NULL) {
|
||||
return;
|
||||
}
|
||||
vramStart = overlayEntry->vramStart;
|
||||
if (vramStart == NULL) {
|
||||
overlayEntry->unk_28 = 0;
|
||||
return;
|
||||
}
|
||||
overlayEntry->loadedRamAddr = Load2_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd,
|
||||
(uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd);
|
||||
if (overlayEntry->loadedRamAddr != NULL) {
|
||||
|
||||
overlayEntry->unk_14 = (uintptr_t)(
|
||||
(overlayEntry->unk_14 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_14 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->init =
|
||||
(uintptr_t)((overlayEntry->init != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->init - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->destroy = (uintptr_t)(
|
||||
(overlayEntry->destroy != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->destroy - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->unk_20 = (uintptr_t)(
|
||||
(overlayEntry->unk_20 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_20 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->unk_24 = (uintptr_t)(
|
||||
(overlayEntry->unk_24 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_24 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
|
||||
overlayEntry->unk_28 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Overlay_FreeGameState(GameStateOverlay* overlayEntry) {
|
||||
s32 var_v0;
|
||||
|
||||
if (overlayEntry->loadedRamAddr != NULL) {
|
||||
var_v0 = overlayEntry->unk_28 != 0 ? -1 : 0;
|
||||
if (var_v0 == 0) {
|
||||
overlayEntry->unk_14 = (uintptr_t)(
|
||||
(overlayEntry->unk_14 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_14 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->init = (uintptr_t)(
|
||||
(overlayEntry->init != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->init + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->destroy = (uintptr_t)(
|
||||
(overlayEntry->destroy != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->destroy + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->unk_20 = (uintptr_t)(
|
||||
(overlayEntry->unk_20 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_20 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
overlayEntry->unk_24 = (uintptr_t)(
|
||||
(overlayEntry->unk_24 != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->unk_24 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
SystemArena_Free(overlayEntry->loadedRamAddr);
|
||||
overlayEntry->loadedRamAddr = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3153,10 +3153,10 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
|
|||
overlayEntry->numLoaded = 0;
|
||||
}
|
||||
|
||||
actorInit =
|
||||
(uintptr_t)((overlayEntry->initInfo != NULL)
|
||||
? (void*)(-OVERLAY_RELOCATION_OFFSET(overlayEntry) + (uintptr_t)overlayEntry->initInfo)
|
||||
: NULL);
|
||||
actorInit = (uintptr_t)(
|
||||
(overlayEntry->initInfo != NULL)
|
||||
? (void*)((uintptr_t)overlayEntry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
|
||||
: NULL);
|
||||
}
|
||||
|
||||
return actorInit;
|
||||
|
|
|
|||
|
|
@ -188,8 +188,9 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) {
|
|||
Load2_LoadOverlay(entry->vromStart, entry->vromEnd, entry->vramStart, entry->vramEnd, entry->loadedRamAddr);
|
||||
}
|
||||
|
||||
initInfo = (uintptr_t)(
|
||||
(entry->initInfo != NULL) ? (void*)(-OVERLAY_RELOCATION_OFFSET(entry) + (uintptr_t)entry->initInfo) : NULL);
|
||||
initInfo = (uintptr_t)((entry->initInfo != NULL)
|
||||
? (void*)((uintptr_t)entry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(entry))
|
||||
: NULL);
|
||||
}
|
||||
|
||||
if (initInfo->init != NULL) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue