1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 06:54:33 +00:00

Gameplay_Init matched (#585)

* Gameplay_Init ok

* add (void)0 to prevent warnings in gameplay_init

* update nigthflag

* .

* remove tools/ZAP2 from origin master

* made suggested change

* made sgugested changes
This commit is contained in:
Lucas Shaw 2021-01-12 18:02:56 -07:00 committed by GitHub
parent a0e2ce7211
commit a169932c75
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 672 deletions

View file

@ -188,22 +188,17 @@ void Gameplay_Destroy(GameState* thisx) {
Fault_RemoveClient(&D_801614B8);
}
#ifdef NON_MATCHING
// regalloc and stack usage differences
// also missing some extra duplicated instructions
void Gameplay_Init(GameState* thisx) {
GlobalContext* globalCtx = (GlobalContext*)thisx;
GraphicsContext* gfxCtx;
void* zAlloc; // 0x84
void* zAllocAligned;
u32 zAllocSize; // 0x7C
Player* player; // 0x78
EntranceInfo* spawnEntrance;
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
u32 zAlloc;
u32 zAllocAligned;
size_t zAllocSize;
Player* player;
s32 playerStartCamId;
u8 tempSetupIndex; // 0x6F
s32 i;
gfxCtx = globalCtx->state.gfxCtx;
u8 tempSetupIndex;
s32 pad[2];
if (gSaveContext.entranceIndex == -1) {
gSaveContext.entranceIndex = 0;
@ -227,8 +222,8 @@ void Gameplay_Init(GameState* thisx) {
Camera_ChangeStatus(&globalCtx->mainCamera, CAM_STAT_ACTIVE);
for (i = 0; i < 3; i++) {
Camera_Init(&globalCtx->subCameras[i + 1], &globalCtx->view, &globalCtx->colCtx, globalCtx);
Camera_ChangeStatus(&globalCtx->subCameras[i + 1], 0x100);
Camera_Init(&globalCtx->subCameras[i], &globalCtx->view, &globalCtx->colCtx, globalCtx);
Camera_ChangeStatus(&globalCtx->subCameras[i], 0x100);
}
globalCtx->cameraPtrs[0] = &globalCtx->mainCamera;
@ -260,7 +255,7 @@ void Gameplay_Init(GameState* thisx) {
gSaveContext.environmentTime = gSaveContext.nextDayTime;
}
if ((gSaveContext.dayTime >= 0xC001) || (gSaveContext.dayTime < 0x4555)) {
if (gSaveContext.dayTime > 0xC000 || gSaveContext.dayTime < 0x4555) {
gSaveContext.nightFlag = 1;
} else {
gSaveContext.nightFlag = 0;
@ -268,45 +263,44 @@ void Gameplay_Init(GameState* thisx) {
Cutscene_HandleConditionalTriggers(globalCtx);
if ((gSaveContext.gameMode != 0) || (gSaveContext.cutsceneIndex >= 0xFFF0)) {
if (gSaveContext.gameMode != 0 || gSaveContext.cutsceneIndex >= 0xFFF0) {
gSaveContext.nayrusLoveTimer = 0;
func_800876C8(globalCtx);
gSaveContext.sceneSetupIndex = (gSaveContext.cutsceneIndex & 0xF) + 4;
} else if (LINK_IS_CHILD && (gSaveContext.nightFlag == 0)) {
} else if (LINK_IS_CHILD && gSaveContext.nightFlag == 0) {
gSaveContext.sceneSetupIndex = 0;
} else if (LINK_IS_CHILD && (gSaveContext.nightFlag != 0)) {
} else if (LINK_IS_CHILD && gSaveContext.nightFlag != 0) {
gSaveContext.sceneSetupIndex = 1;
} else if (LINK_IS_ADULT && (gSaveContext.nightFlag == 0)) {
} else if (LINK_IS_ADULT && gSaveContext.nightFlag == 0) {
gSaveContext.sceneSetupIndex = 2;
} else {
gSaveContext.sceneSetupIndex = 3;
}
tempSetupIndex = gSaveContext.sceneSetupIndex;
if ((gEntranceTable[gSaveContext.entranceIndex].scene == SCENE_SPOT00) && LINK_IS_CHILD &&
(gSaveContext.sceneSetupIndex < 4)) {
if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_SPOT00) && LINK_IS_CHILD &&
gSaveContext.sceneSetupIndex < 4) {
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
gSaveContext.sceneSetupIndex = 1;
} else {
gSaveContext.sceneSetupIndex = 0;
}
} else if ((gEntranceTable[gSaveContext.entranceIndex].scene == SCENE_SPOT04) && LINK_IS_ADULT &&
(gSaveContext.sceneSetupIndex < 4)) {
if (gSaveContext.eventChkInf[4] & 0x100) {
gSaveContext.sceneSetupIndex = 3;
} else {
gSaveContext.sceneSetupIndex = 2;
}
} else if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_SPOT04) && LINK_IS_ADULT &&
gSaveContext.sceneSetupIndex < 4) {
gSaveContext.sceneSetupIndex = (gSaveContext.eventChkInf[4] & 0x100) ? 3 : 2;
}
spawnEntrance = &gEntranceTable[gSaveContext.entranceIndex + gSaveContext.sceneSetupIndex];
Gameplay_SpawnScene(globalCtx, spawnEntrance->scene, spawnEntrance->spawn);
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", gSaveContext.entranceIndex, gSaveContext.sceneSetupIndex);
Gameplay_SpawnScene(
globalCtx,
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneSetupIndex)].scene,
gEntranceTable[((void)0, gSaveContext.sceneSetupIndex) + ((void)0, gSaveContext.entranceIndex)].spawn);
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", ((void)0, gSaveContext.entranceIndex), gSaveContext.sceneSetupIndex);
// When entering Gerudo Valley in the right setup, trigger the GC emulator to play the ending movie.
// The emulator constantly checks whether PC is 0x81000000, so this works even though it's not a valid address.
if ((gEntranceTable[gSaveContext.entranceIndex].scene == SCENE_SPOT09) && (gSaveContext.sceneSetupIndex == 6)) {
if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_SPOT09) &&
gSaveContext.sceneSetupIndex == 6) {
osSyncPrintf("エンディングはじまるよー\n"); // "The ending starts"
((void (*)())0x81000000)();
osSyncPrintf("出戻り?\n"); // "Return?"
@ -351,7 +345,7 @@ void Gameplay_Init(GameState* thisx) {
if (gSaveContext.gameMode != 1) {
if (gSaveContext.nextTransition == 0xFF) {
globalCtx->fadeTransition =
(gEntranceTable[gSaveContext.entranceIndex + tempSetupIndex].field >> 7) & 0x7F; // Fade In
(gEntranceTable[((void)0, gSaveContext.entranceIndex) + tempSetupIndex].field >> 7) & 0x7F; // Fade In
} else {
globalCtx->fadeTransition = gSaveContext.nextTransition;
gSaveContext.nextTransition = 0xFF;
@ -372,10 +366,10 @@ void Gameplay_Init(GameState* thisx) {
osSyncPrintf("ZELDA ALLOC SIZE=%x\n", THA_GetSize(&globalCtx->state.tha));
zAllocSize = THA_GetSize(&globalCtx->state.tha);
zAlloc = GameState_Alloc(&globalCtx->state, zAllocSize, "../z_play.c", 2918);
zAllocAligned = (void*)(((u32)zAlloc + 8) & ~0xF);
ZeldaArena_Init(zAllocAligned, zAllocSize - (u32)zAllocAligned + (u32)zAlloc);
zAllocAligned = (zAlloc + 8) & ~0xF;
ZeldaArena_Init(zAllocAligned, zAllocSize - zAllocAligned + zAlloc);
osSyncPrintf("ゼルダヒープ %08x-%08x\n", zAllocAligned,
(s32)((u32)zAllocAligned + zAllocSize) - (s32)((u32)zAllocAligned - (u32)zAlloc)); // "Zelda Heap"
(s32)(zAllocAligned + zAllocSize) - (s32)(zAllocAligned - zAlloc)); // "Zelda Heap"
Fault_AddClient(&D_801614B8, ZeldaArena_Display, NULL, NULL);
func_800304DC(globalCtx, &globalCtx->actorCtx, globalCtx->linkActorEntry);
@ -394,9 +388,9 @@ void Gameplay_Init(GameState* thisx) {
Camera_ChangeDataIdx(&globalCtx->mainCamera, playerStartCamId);
}
if (YREG(15) == 0x20) {
if (YREG(15) == 32) {
globalCtx->unk_1242B = 2;
} else if (YREG(15) == 0x10) {
} else if (YREG(15) == 16) {
globalCtx->unk_1242B = 1;
} else {
globalCtx->unk_1242B = 0;
@ -413,12 +407,9 @@ void Gameplay_Init(GameState* thisx) {
if (dREG(95) != 0) {
D_8012D1F0 = D_801614D0;
osSyncPrintf("\nkawauso_data=[%x]", D_8012D1F0);
DmaMgr_DMARomToRam(0x03FEB000, (u32)D_8012D1F0, 0x5000);
DmaMgr_DMARomToRam(0x03FEB000, (u32)D_8012D1F0, sizeof(D_801614D0));
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Gameplay_Init.s")
#endif
#ifdef NON_MATCHING
// regalloc and stack usage differences