diff --git a/include/functions.h b/include/functions.h index a9e43f7d2..a0274cff9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2910,8 +2910,8 @@ void Main(void* arg); u32 Padmgr_GetControllerBitmask(void); // void func_80174F24(void); // void func_80174F44(void); -// void func_80174F7C(void); -// void func_80174F9C(void); +void func_80174F7C(void (*arg0)(void*), void* arg1); +void func_80174F9C(void (*arg0)(void*), void* arg1); // OSMesgQueue* Padmgr_GetEventCallback(void); // void func_80175008(void); void Padmgr_SetEventCallback(OSMesg pvParm1); diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 08c2a9628..3690eadca 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -193,29 +193,16 @@ s16 D_801BF8E0 = 0; s16 D_801BF8E4 = 0; -s32 D_801BF8E8[] = { - 0x00000000, - 0x00000000, -}; - +OSTime D_801BF8E8 = 0; OSTime D_801BF8F0 = 0; - -s32 D_801BF8F8 = 0; - -s32 D_801BF8FC[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, +u64 D_801BF8F8[] = { // D_801BF8FC + 0, 0, 0, 0, 0, 0, 0, +}; +u64 D_801BF930[] = { // D_801BF934 + 0, 0, 0, 0, 0, 0, 0, }; -s32 D_801BF930 = 0; - -s32 D_801BF934[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; - -s32 D_801BF968 = 0; - +u8 D_801BF968 = false; u8 D_801BF96C = false; s16 D_801BF970 = 99; @@ -5153,32 +5140,444 @@ void func_8011C898(u64 timer, s16* timerArr) { timerArr[7] = time; } -s32 D_801BFCE4[] = { - 0x00000000, -}; -s32 D_801BFCE8[] = { - 0x00000000, -}; -s32 D_801BFCEC[] = { - 0x00000000, -}; -s32 D_801BFCF0[] = { - 0x00000000, -}; -s32 D_801BFCF4[] = { - 0x00000000, -}; -s32 D_801BFCF8[] = { - 0x00630000, +s32 D_801BFCE4 = 0; +u16 D_801BFCE8[] = { + 0, 0, 0, 0, 0, 0, 0, 0 }; +s16 D_801BFCF8 = 0x63; s16 D_801BFCFC[] = { 0x10, 0x19, 0x22, 0x2A, 0x33, 0x3C, 0x44, 0x4D, }; s16 D_801BFD0C[] = { 9, 9, 8, 9, 9, 8, 9, 9, }; +// Likely very non-equivalent, unsure about both control-flow logic and u64 logic +#ifdef NON_EQUIVALENT +void Interface_DrawTimers(GlobalContext* globalCtx) { + InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; + MessageContext* msgCtx = &globalCtx->msgCtx; + Player* player = GET_PLAYER(globalCtx); + s16 i; // spC6 + + OSTime osTime; + OSTime spD0; + s16 phi_t0_2; + + OPEN_DISPS(globalCtx->state.gfxCtx); + + if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0) && + (globalCtx->gameOverCtx.state == 0) && + ((msgCtx->msgMode == 0) || + ((msgCtx->msgMode != 0) && (msgCtx->currentTextId >= 0x1BB2) && + (msgCtx->currentTextId <= 0x1BB6))) && + !(player->stateFlags1 & 0x200) && (globalCtx->sceneLoadFlag == 0) && + (globalCtx->unk_18B4A == 0) && !Play_InCsMode(globalCtx)) { + if (D_801BF968) { + osTime = osGetTime(); + + for (i = 0; i < 7; i++) { + if (gSaveContext.unk_3DD0[i] == 4) { + gSaveContext.unk_3EC0[i] = gSaveContext.unk_3EC0[i] + osTime - D_801BF8E8; + } + } + + D_801BF968 = false; + } + + D_801BF970 = 99; + + for (i = 0; i < 7; i++) { + if (gSaveContext.unk_3DD0[i] != 0) { + D_801BF970 = i; + if (D_801BF970 == 0) { + switch (gSaveContext.unk_3DD0[0]) { + case 13: + if (gSaveContext.timersNoTimeLimit[0] != 0) { + gSaveContext.unk_3E50[0] = osGetTime(); + } + gSaveContext.unk_3DD0[0] = 14; + D_801BFA84 = 1; + func_80174F7C(func_8010E968, NULL); + break; + case 15: + osTime = (gSaveContext.unk_3DC8 - gSaveContext.unk_3DE0[0] - gSaveContext.unk_3EC0[0]) * 0x40; + osTime = osTime / 3000; + osTime = osTime / 10000; + + gSaveContext.unk_3DE0[0] = osTime; + gSaveContext.unk_3DD0[0] = 16; + + func_80174F9C(func_8010E968, NULL); + break; + case 14: + case 16: + break; + } + + break; + } else { + switch (gSaveContext.unk_3DD0[D_801BF970]) { + case 1: + case 9: + D_801BFCE4 = 20; + if (interfaceCtx->unk_280 != 0) { + gSaveContext.timerX[D_801BF970] = 26; + + if (interfaceCtx->magicAlpha != 255) { + gSaveContext.timerY[D_801BF970] = 22; + } else if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + gSaveContext.timerY[D_801BF970] = 54; + } else { + gSaveContext.timerY[D_801BF970] = 46; + } + + if ((interfaceCtx->unk_280 == 8) || (interfaceCtx->unk_280 == 30)) { + if (gSaveContext.unk_3DD0[D_801BF970] == 1) { + gSaveContext.unk_3DD0[D_801BF970] = 4; + } else { + gSaveContext.unk_3DD0[D_801BF970] = 11; + D_801BF8F8[D_801BF970] = osGetTime(); + D_801BF930[D_801BF970] = 0; + } + + gSaveContext.unk_3E50[D_801BF970] = osGetTime(); + gSaveContext.unk_3E88[D_801BF970] = 0; + gSaveContext.unk_3EC0[D_801BF970] = 0; + } + } else { + gSaveContext.unk_3DD0[D_801BF970] = 2; + } + break; + + case 2: + D_801BFCE4--; + if (D_801BFCE4 == 0) { + gSaveContext.unk_3DD0[D_801BF970] = 3; + D_801BFCE4 = 20; + } + break; + + case 3: + if (D_801BF970 == 3) { + gSaveContext.timerX[D_801BF970] = + gSaveContext.timerX[D_801BF970] - + ((gSaveContext.timerX[D_801BF970] - XREG(81)) / D_801BFCE4); + gSaveContext.timerY[D_801BF970] = + gSaveContext.timerY[D_801BF970] - + ((gSaveContext.timerY[D_801BF970] - XREG(80)) / D_801BFCE4); + } else { + gSaveContext.timerX[D_801BF970] = + gSaveContext.timerX[D_801BF970] - ((gSaveContext.timerX[D_801BF970] - 26) / D_801BFCE4); + if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + phi_t0_2 = (gSaveContext.timerY[D_801BF970] - 54) / D_801BFCE4; + } else { + phi_t0_2 = (gSaveContext.timerY[D_801BF970] - 46) / D_801BFCE4; + } + gSaveContext.timerY[D_801BF970] -= phi_t0_2; + } + + D_801BFCE4--; + if (D_801BFCE4 == 0) { + D_801BFCE4 = 20; + + if (D_801BF970 == 3) { + gSaveContext.timerY[D_801BF970] = XREG(80); + } else { + gSaveContext.timerX[D_801BF970] = 26; + if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + gSaveContext.timerY[D_801BF970] = 54; + } else { + gSaveContext.timerY[D_801BF970] = 46; + } + } + + gSaveContext.unk_3DD0[D_801BF970] = 4; + gSaveContext.unk_3E50[D_801BF970] = osGetTime(); + gSaveContext.unk_3E88[D_801BF970] = 0; + gSaveContext.unk_3EC0[D_801BF970] = 0; + } + // fallthrough + + case 4: + if ((gSaveContext.unk_3DD0[D_801BF970] == 4) && (D_801BF970 == 3)) { + gSaveContext.timerX[3] = XREG(81); + gSaveContext.timerY[3] = XREG(80); + } + break; + + case 10: + D_801BF8F8[D_801BF970] = osGetTime(); + D_801BF930[D_801BF970] = 0; + gSaveContext.unk_3DD0[D_801BF970] = 11; + // fallthrough + + case 11: + D_801BF930[D_801BF970] = osGetTime() - D_801BF8F8[D_801BF970]; + break; + + case 12: + osTime = osGetTime(); + gSaveContext.unk_3EC0[D_801BF970] = gSaveContext.unk_3EC0[D_801BF970] + osTime - D_801BF8F8[D_801BF970]; + D_801BF930[D_801BF970] = 0; + gSaveContext.unk_3DD0[D_801BF970] = 4; + break; + + case 8: + gSaveContext.unk_3DE0[D_801BF970] = (gSaveContext.save.playerData.health >> 1) * 100; + gSaveContext.timersNoTimeLimit[D_801BF970] = 0; + gSaveContext.unk_3E18[D_801BF970] = gSaveContext.unk_3DE0[D_801BF970]; + gSaveContext.unk_3DD0[D_801BF970] = 3; + D_801BFCE4 = 20; + break; + + case 5: + osTime = osGetTime(); + + osTime = + (osTime - gSaveContext.unk_3E50[D_801BF970] - gSaveContext.unk_3EC0[D_801BF970]) * 0x40; + osTime = osTime / 3000; + osTime = osTime / 10000; + + gSaveContext.unk_3E88[D_801BF970] = osTime; + + gSaveContext.unk_3DD0[D_801BF970] = 0; + + if (D_801BF970 == 3) { + gSaveContext.save.day = 4; + if ((globalCtx->sceneNum == SCENE_OKUJOU) && (gSaveContext.sceneSetupIndex == 3)) { + globalCtx->nextEntranceIndex = 0x5410; + gSaveContext.nextCutsceneIndex = 0xFFF0; + globalCtx->sceneLoadFlag = 0x14; + } else { + func_8011C808(globalCtx); + } + } else if (gSaveContext.unk_3DD0[6] != 0) { + gSaveContext.timerX[6] = 115; + gSaveContext.timerY[6] = 80; + if (gSaveContext.unk_3DD0[6] < 0xB) { + gSaveContext.unk_3DD0[6] = 3; + } + } + break; + + case 6: + osTime = osGetTime(); + + osTime = + (osTime - gSaveContext.unk_3E50[D_801BF970] - gSaveContext.unk_3EC0[D_801BF970]) * 0x40; + osTime = osTime / 3000; + osTime = osTime / 10000; + + gSaveContext.unk_3E88[D_801BF970] = osTime; + + if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { + if (gSaveContext.unk_3E88[D_801BF970] >= 12000) { + gSaveContext.unk_3E88[D_801BF970] = 12000; + gSaveContext.unk_3DE0[D_801BF970] = 12000; + } + } else if ((gSaveContext.eventInf[3] & 0x10) && (globalCtx->sceneNum == SCENE_DEKUTES) && + (gSaveContext.unk_3E88[D_801BF970] >= 12000)) { + gSaveContext.unk_3DE0[D_801BF970] = 12000; + } + gSaveContext.unk_3DD0[D_801BF970] = 7; + + if (gSaveContext.unk_3DD0[6] != 0) { + gSaveContext.timerX[6] = 115; + gSaveContext.timerY[6] = 80; + if (gSaveContext.unk_3DD0[6] < 0xB) { + gSaveContext.unk_3DD0[6] = 3; + } + gSaveContext.unk_3DD0[D_801BF970] = 0; + } + break; + } + } + break; + } + } + + + if ((D_801BF970 != 99) && (gSaveContext.unk_3DD0[D_801BF970] != 0)) { + if (gSaveContext.timersNoTimeLimit[D_801BF970] == 0) { + D_801BFCE8[0] = D_801BFCE8[1] = D_801BFCE8[3] = D_801BFCE8[4] = D_801BFCE8[6] = 0; + D_801BFCE8[2] = D_801BFCE8[5] = 10; + if ((gSaveContext.unk_3DD0[D_801BF970] == 4) || (gSaveContext.unk_3DD0[D_801BF970] == 10) || + (gSaveContext.unk_3DD0[D_801BF970] == 11) || (gSaveContext.unk_3DD0[D_801BF970] == 14)) { + osTime = osGetTime(); + osTime = (osTime - gSaveContext.unk_3EC0[D_801BF970] - D_801BF930[D_801BF970]) * 64; + osTime = osTime / 3000; + osTime = osTime / 10000; + + spD0 = osTime; + } else { + if (gSaveContext.unk_3DD0[D_801BF970] == 7) { + spD0 = gSaveContext.unk_3E88[D_801BF970]; + } else { + spD0 = 0; + } + } + + if (spD0 == 0) { + gSaveContext.unk_3DE0[D_801BF970] = gSaveContext.unk_3E18[D_801BF970] - spD0; + } else { + if (gSaveContext.unk_3E18[D_801BF970] >= spD0) { + if (gSaveContext.unk_3E18[D_801BF970] <= spD0) { + gSaveContext.unk_3DE0[D_801BF970] = 0; + } else { + gSaveContext.unk_3DE0[D_801BF970] = gSaveContext.unk_3E18[D_801BF970] - spD0; + } + } else { + gSaveContext.unk_3DE0[D_801BF970] = 0; + gSaveContext.unk_3DD0[D_801BF970] = 5; + if (D_801BF8E0 != 0) { + gSaveContext.save.playerData.health = 0; + globalCtx->damagePlayer(globalCtx, -2 - gSaveContext.save.playerData.health); + } + D_801BF8E0 = 0; + } + } + + func_8011C898(gSaveContext.unk_3DE0[D_801BF970], D_801BFCE8); + + if (gSaveContext.unk_3DE0[D_801BF970] > 6000) { + if ((D_801BFCF8 != D_801BFCE8[4]) && (D_801BFCE8[4] == 1)) { + play_sound(NA_SE_SY_MESSAGE_WOMAN); + D_801BFCF8 = D_801BFCE8[4]; + } + } else if (gSaveContext.unk_3DE0[D_801BF970] > 1000) { + if ((D_801BFCF8 != D_801BFCE8[4]) && ((D_801BFCE8[4] & 1) != 0)) { + play_sound(NA_SE_SY_WARNING_COUNT_N); + D_801BFCF8 = D_801BFCE8[4]; + } + } else if (D_801BFCF8 != D_801BFCE8[4]) { + play_sound(NA_SE_SY_WARNING_COUNT_E); + D_801BFCF8 = D_801BFCE8[4]; + } + } else { + D_801BFCE8[4] = 0; + D_801BFCE8[0] = 0; + D_801BFCE8[5] = 10; + D_801BFCE8[2] = D_801BFCE8[5]; + + if ((gSaveContext.unk_3DD0[D_801BF970] == 4) || (gSaveContext.unk_3DD0[D_801BF970] == 14)) { + osTime = osGetTime(); + osTime = (osTime - gSaveContext.unk_3E50[D_801BF970] - gSaveContext.unk_3EC0[D_801BF970] - D_801BF930[D_801BF970]) * 64; + osTime = osTime / 3000; + osTime = osTime / 10000; + + spD0 = osTime; + } else if (gSaveContext.unk_3DD0[D_801BF970] == 7) { + spD0 = gSaveContext.unk_3E88[D_801BF970]; + } else if (D_801BF970 == 0) { + spD0 = gSaveContext.unk_3DE0[D_801BF970]; + } else { + spD0 = 0; + } + + if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { + if (spD0 >= 12000) { + spD0 = 12000; + } + } else if (((gSaveContext.eventInf[3] & 0x10) != 0) && (globalCtx->sceneNum == SCENE_DEKUTES) && (spD0 >= 12000)) { + spD0 = 12000; + } + + gSaveContext.unk_3DE0[D_801BF970] = spD0; + func_8011C898(spD0, D_801BFCE8); + + if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { + if ((gSaveContext.unk_3DE0[D_801BF970] > 11000) && (D_801BFCF8 != D_801BFCE8[4])) { + play_sound(NA_SE_SY_WARNING_COUNT_E); + D_801BFCF8 = D_801BFCE8[4]; + } + } else if (((gSaveContext.eventInf[3] & 0x10) != 0) && (globalCtx->sceneNum == SCENE_DEKUTES)) { + if ((gSaveContext.unk_3DE0[D_801BF970] >= (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY] - 900)) && (D_801BFCF8 != D_801BFCE8[4])) { + play_sound(NA_SE_SY_WARNING_COUNT_E); + D_801BFCF8 = D_801BFCE8[4]; + } + } + } + + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gTimerClockIconTex, 0x10, 0x10, gSaveContext.timerX[D_801BF970], + gSaveContext.timerY[D_801BF970] + 2, 0x10, 0x10, 0x400, 0x400); + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + if (((D_801BF970 == 0) && (gSaveContext.unk_3DD0[0] == 14) && (D_801BF8E4 == 0) && + (gSaveContext.unk_3DE0[0] < 300)) || + (D_801BF8E4 == 2) || (gSaveContext.unk_3DD0[D_801BF970] < 13)) { + if (gSaveContext.unk_3DD0[D_801BF970] != 0) { + if (D_801BF970 == 2) { + if ((gSaveContext.unk_3DE0[D_801BF970] == 0) || (gSaveContext.unk_3DD0[D_801BF970] == 4)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + } + } else { + if ((gSaveContext.minigameState == 1) && (gSaveContext.save.entranceIndex == 0x6400)) { + if (gSaveContext.unk_3DE0[D_801BF970] > 11000) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + } + } else if ((gSaveContext.eventInf[3] & 0x10) && (globalCtx->sceneNum == SCENE_DEKUTES)) { + if (gSaveContext.unk_3DE0[D_801BF970] >= gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY]) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + } else if (gSaveContext.unk_3DE0[D_801BF970] >= (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY] - 900)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + } + } else if ((gSaveContext.unk_3DE0[D_801BF970] < 1000) && (gSaveContext.timersNoTimeLimit[D_801BF970] == 0) && (gSaveContext.unk_3DD0[D_801BF970] != 11)) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + } + } + } + + if (D_801BF970 == 0) { + if (D_801BF8E4 == 2) { + for (i = 0; i < 4; i++) { + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[3 + i])), 8, + 0x10, D_801BFCFC[i] + gSaveContext.timerX[D_801BF970], + gSaveContext.timerY[D_801BF970], D_801BFD0C[i], 0xFA, 0x370, 0x370); + } + } else { + for (i = 0; i < 5; i++) { + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[3 + i])), 8, + 0x10, D_801BFCFC[i] + gSaveContext.timerX[D_801BF970], + gSaveContext.timerY[D_801BF970], D_801BFD0C[i], 0xFA, 0x370, 0x370); + } + } + } else { + for (i = 0; i < 8; i++) { + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, ((u8*)gCounterDigit0Tex + (8 * 16 * D_801BFCE8[i])), 8, 0x10, + D_801BFCFC[i] + gSaveContext.timerX[D_801BF970], + gSaveContext.timerY[D_801BF970], D_801BFD0C[i], 0xFA, 0x370, 0x370); + } + } + } + } + + } else if (!D_801BF968) { + D_801BF8E8 = osGetTime(); + D_801BF968 = true; + } + + CLOSE_DISPS(globalCtx->state.gfxCtx); +} +#else void Interface_DrawTimers(GlobalContext* globalCtx); #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawTimers.s") +#endif #ifdef NON_MATCHING void Interface_UpdateTimers(GlobalContext* globalCtx) { diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 184e78754..0270f4cc6 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1080,10 +1080,8 @@ 0x801BF8E8:("D_801BF8E8","UNK_TYPE4","",0x4), 0x801BF8F0:("D_801BF8F0","UNK_TYPE4","",0x4), 0x801BF8F4:("D_801BF8F4","UNK_TYPE4","",0x4), - 0x801BF8F8:("D_801BF8F8","UNK_TYPE4","",0x4), - 0x801BF8FC:("D_801BF8FC","UNK_TYPE4","",0x4), - 0x801BF930:("D_801BF930","UNK_TYPE4","",0x4), - 0x801BF934:("D_801BF934","UNK_TYPE4","",0x4), + 0x801BF8F8:("D_801BF8F8","u64","[7]",0x38), + 0x801BF930:("D_801BF930","u64","[7]",0x38), 0x801BF968:("D_801BF968","UNK_TYPE4","",0x4), 0x801BF96C:("D_801BF96C","UNK_TYPE4","",0x4), 0x801BF970:("D_801BF970","UNK_TYPE4","",0x4), @@ -1166,10 +1164,7 @@ 0x801BFCB8:("D_801BFCB8","UNK_TYPE1","",0x1), 0x801BFCC4:("D_801BFCC4","UNK_TYPE4","",0x4), 0x801BFCE4:("D_801BFCE4","UNK_TYPE4","",0x4), - 0x801BFCE8:("D_801BFCE8","UNK_TYPE4","",0x4), - 0x801BFCEC:("D_801BFCEC","UNK_TYPE4","",0x4), - 0x801BFCF0:("D_801BFCF0","UNK_TYPE4","",0x4), - 0x801BFCF4:("D_801BFCF4","UNK_TYPE4","",0x4), + 0x801BFCE8:("D_801BFCE8","u16","[8]",0x10), 0x801BFCF8:("D_801BFCF8","UNK_TYPE4","",0x4), 0x801BFCFC:("D_801BFCFC","UNK_TYPE4","",0x4), 0x801BFD0C:("D_801BFD0C","UNK_TYPE4","",0x4),