summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorEllipticEllipsis <elliptic.ellipsis@gmail.com>2022-08-04 05:53:53 +0100
committerGitHub <noreply@github.com>2022-08-04 05:53:53 +0100
commit91b2bc3a88247800e7164273da5dd6b39920ba3a (patch)
tree0b96be6bebddf972315879ef1da1e1ec6458bd0c /src/code
parentfb445b7d4b7d75372f48d3980239f2f9205c4d45 (diff)
EnGe1 OK and documented, document `z_snap` (#952)
* Move PictoActor typedefs to z64actor.h * OK, data imported * Minor snap stuff * Name most functions and variables * Name most of object, apart from animations * Document snap * Fix actors to use the PictoActor struct * Format * Finish documenting EnGe1 * Finish documenting z_snap and related actors * Format * Review, format * Name last couple of things * bss * Review * Review * bss * Introduce z64snap.h, add SCREEN_TO_DEVICE macros * Back to PROJECTED_TO_SCREEN
Diffstat (limited to 'src/code')
-rw-r--r--src/code/graph.c1
-rw-r--r--src/code/z_actor.c43
-rw-r--r--src/code/z_lights.c14
-rw-r--r--src/code/z_scene_table.c456
-rw-r--r--src/code/z_snap.c144
5 files changed, 351 insertions, 307 deletions
diff --git a/src/code/graph.c b/src/code/graph.c
index f625cb7b6..481aa1da0 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "system_malloc.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index cee64182b..64d9c97f4 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -391,12 +391,12 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) {
}
}
-void Actor_GetProjectedPos(PlayState* play, Vec3f* arg1, Vec3f* arg2, f32* arg3) {
- SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, arg1, arg2, arg3);
- if (*arg3 < 1.0f) {
- *arg3 = 1.0f;
+void Actor_GetProjectedPos(PlayState* play, Vec3f* worldPos, Vec3f* projectedPos, f32* invW) {
+ SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, worldPos, projectedPos, invW);
+ if (*invW < 1.0f) {
+ *invW = 1.0f;
} else {
- *arg3 = 1.0f / *arg3;
+ *invW = 1.0f / *invW;
}
}
@@ -419,7 +419,7 @@ TatlColor sTatlColorList[] = {
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 255, 255, 0, 255 }, { 200, 155, 0, 0 } },
{ { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }, { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
- { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } }
+ { { 0, 255, 0, 255 }, { 0, 255, 0, 0 } },
};
void func_800B4F78(TargetContext* targetCtx, s32 type, PlayState* play) {
@@ -480,9 +480,9 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
TargetContextEntry* entry;
s16 alpha = 255;
f32 var1 = 1.0f;
- Vec3f spBC;
+ Vec3f projectedPos;
s32 spB8;
- f32 spB4;
+ f32 invW;
s32 spB0;
s32 spAC;
f32 var2;
@@ -505,22 +505,22 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) {
alpha = targetCtx->unk48;
}
- Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &spBC, &spB4);
+ Actor_GetProjectedPos(play, &targetCtx->targetCenterPos, &projectedPos, &invW);
- spBC.x = (160 * (spBC.x * spB4)) * var1;
- spBC.x = CLAMP(spBC.x, -320.0f, 320.0f);
+ projectedPos.x = (160 * (projectedPos.x * invW)) * var1;
+ projectedPos.x = CLAMP(projectedPos.x, -320.0f, 320.0f);
- spBC.y = (120 * (spBC.y * spB4)) * var1;
- spBC.y = CLAMP(spBC.y, -240.0f, 240.0f);
+ projectedPos.y = (120 * (projectedPos.y * invW)) * var1;
+ projectedPos.y = CLAMP(projectedPos.y, -240.0f, 240.0f);
- spBC.z = spBC.z * var1;
+ projectedPos.z = projectedPos.z * var1;
targetCtx->unk4C--;
if (targetCtx->unk4C < 0) {
targetCtx->unk4C = 2;
}
- Target_SetPos(targetCtx, targetCtx->unk4C, spBC.x, spBC.y, spBC.z);
+ Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z);
if ((!(player->stateFlags1 & 0x40)) || (actor != player->unk_730)) {
OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39);
@@ -1966,18 +1966,19 @@ void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y) {
f32 w;
Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &w);
- *x = (projectedPos.x * w * (SCREEN_WIDTH / 2)) + (SCREEN_WIDTH / 2);
- *y = (projectedPos.y * w * -(SCREEN_HEIGHT / 2)) + (SCREEN_HEIGHT / 2);
+ *x = PROJECTED_TO_SCREEN_X(projectedPos, w);
+ *y = PROJECTED_TO_SCREEN_Y(projectedPos, w);
}
s32 func_800B8934(PlayState* play, Actor* actor) {
- Vec3f sp2C;
- f32 sp28;
+ Vec3f projectedPos;
+ f32 invW;
s32 pad[2];
- Actor_GetProjectedPos(play, &actor->focus.pos, &sp2C, &sp28);
+ Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW);
- return (sp2C.x * sp28 >= -1.0f) && (sp2C.x * sp28 <= 1.0f) && (sp2C.y * sp28 >= -1.0f) && (sp2C.y * sp28 <= 1.0f);
+ return (projectedPos.x * invW >= -1.0f) && (projectedPos.x * invW <= 1.0f) && (projectedPos.y * invW >= -1.0f) &&
+ (projectedPos.y * invW <= 1.0f);
}
s32 Actor_HasParent(Actor* actor, PlayState* play) {
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index b602c66b1..92e9beb30 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -380,20 +380,20 @@ void Lights_GlowCheck(PlayState* play) {
if (light->info->type == LIGHT_POINT_GLOW) {
Vec3f pos;
- Vec3f multDest;
- f32 wDest;
+ Vec3f projectedPos;
+ f32 invW;
pos.x = params->x;
pos.y = params->y;
pos.z = params->z;
- Actor_GetProjectedPos(play, &pos, &multDest, &wDest);
+ Actor_GetProjectedPos(play, &pos, &projectedPos, &invW);
params->drawGlow = 0;
- if ((multDest.z > 1) && (fabsf(multDest.x * wDest) < 1) && (fabsf(multDest.y * wDest) < 1)) {
- s32 wX = multDest.x * wDest * 160 + 160;
- s32 wY = multDest.y * wDest * -120 + 120;
- s32 wZ = (s32)((multDest.z * wDest) * 16352) + 16352;
+ if ((projectedPos.z > 1) && (fabsf(projectedPos.x * invW) < 1) && (fabsf(projectedPos.y * invW) < 1)) {
+ s32 wX = PROJECTED_TO_SCREEN_X(projectedPos, invW);
+ s32 wY = PROJECTED_TO_SCREEN_Y(projectedPos, invW);
+ s32 wZ = (s32)((projectedPos.z * invW) * 16352) + 16352;
s32 zBuf = func_80178A94(wX, wY);
if (wZ < zBuf) {
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index 8372c350a..daf85190a 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -7,119 +7,119 @@
{ { 0, 0 }, 0, 0, 0, 0 }
SceneTableEntry gSceneTable[] = {
- SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY_NONE(),
- SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
- SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
- SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
- SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
- SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
- SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x01 */ SCENE_ENTRY_NONE(),
+ /* 0x02 */ SCENE_ENTRY_NONE(),
+ /* 0x03 */ SCENE_ENTRY_NONE(),
+ /* 0x04 */ SCENE_ENTRY_NONE(),
+ /* 0x05 */ SCENE_ENTRY_NONE(),
+ /* 0x06 */ SCENE_ENTRY_NONE(),
+ /* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
+ /* 0x09 */ SCENE_ENTRY_NONE(),
+ /* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x0E */ SCENE_ENTRY_NONE(),
+ /* 0x0F */ SCENE_ENTRY_NONE(),
+ /* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x31 */ SCENE_ENTRY_NONE(),
+ /* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x3A */ SCENE_ENTRY_NONE(),
+ /* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
+ /* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
+ /* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
+ /* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
+ /* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
+ /* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
};
static EntranceTableEntry sMayorsResidenceEntrance0[] = {
@@ -782,17 +782,17 @@ static EntranceTableEntry* sSwampShootingGalleryEntranceTable[] = {
sSwampShootingGalleryEntrance0,
};
-static EntranceTableEntry sPinaccleRockEntrance0[] = {
+static EntranceTableEntry sPinnacleRockEntrance0[] = {
{ 0x25, 0x00, 0x4A14 },
};
-static EntranceTableEntry sPinaccleRockEntrance1[] = {
+static EntranceTableEntry sPinnacleRockEntrance1[] = {
{ 0x25, 0x01, 0x0A14 },
};
-static EntranceTableEntry* sPinaccleRockEntranceTable[] = {
- sPinaccleRockEntrance0,
- sPinaccleRockEntrance1,
+static EntranceTableEntry* sPinnacleRockEntranceTable[] = {
+ sPinnacleRockEntrance0,
+ sPinnacleRockEntrance1,
};
static EntranceTableEntry sFairyFountainEntrance0[] = {
@@ -2657,116 +2657,116 @@ static EntranceTableEntry* sCutsceneEntranceTable[] = {
{ 0, NULL, NULL }
static SceneEntranceTableEntry sSceneEntranceTable[] = {
- SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
- SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
- SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
- SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
- SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
- SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
- SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
- SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
- SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
- SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
- SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
- SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
- SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
- SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
- SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
- SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
- SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
- SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
- SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
- SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
- SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
- SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
- SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
- SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
- SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
- SCENE_ENTRANCE(sPinaccleRockEntranceTable, "Z2_SINKAI"),
- SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
- SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
- SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
- SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
- SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
- SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
- SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
- SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
- SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
- SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
- SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
- SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
- SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
- SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
- SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
- SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
- SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
- SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
- SCENE_ENTRANCE_NONE(),
- SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
- SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
- SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
- SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
- SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
- SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
- SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
- SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
- SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
- SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
- SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
- SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
- SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
- SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
- SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
- SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
- SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
- SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
- SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
- SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
- SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
- SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
- SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
- SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
- SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
- SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
- SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
- SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
- SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
- SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
- SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
- SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
- SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
- SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
- SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
- SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
- SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
- SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
- SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
- SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
- SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
- SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
- SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
- SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
- SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
- SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
- SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
- SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
- SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
- SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
- SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
- SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
- SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
- SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
+ /* 0x00 */ SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
+ /* 0x01 */ SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
+ /* 0x02 */ SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
+ /* 0x03 */ SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
+ /* 0x04 */ SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
+ /* 0x05 */ SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
+ /* 0x06 */ SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
+ /* 0x07 */ SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
+ /* 0x08 */ SCENE_ENTRANCE_NONE(),
+ /* 0x09 */ SCENE_ENTRANCE_NONE(),
+ /* 0x0A */ SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
+ /* 0x0B */ SCENE_ENTRANCE_NONE(),
+ /* 0x0C */ SCENE_ENTRANCE_NONE(),
+ /* 0x0D */ SCENE_ENTRANCE_NONE(),
+ /* 0x0E */ SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
+ /* 0x0F */ SCENE_ENTRANCE_NONE(),
+ /* 0x10 */ SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
+ /* 0x11 */ SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
+ /* 0x12 */ SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
+ /* 0x13 */ SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
+ /* 0x14 */ SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
+ /* 0x15 */ SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
+ /* 0x16 */ SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
+ /* 0x17 */ SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
+ /* 0x18 */ SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
+ /* 0x19 */ SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
+ /* 0x1A */ SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
+ /* 0x1B */ SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
+ /* 0x1C */ SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
+ /* 0x1D */ SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
+ /* 0x1E */ SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
+ /* 0x1F */ SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
+ /* 0x20 */ SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
+ /* 0x21 */ SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
+ /* 0x22 */ SCENE_ENTRANCE(sPinnacleRockEntranceTable, "Z2_SINKAI"),
+ /* 0x23 */ SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
+ /* 0x24 */ SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
+ /* 0x25 */ SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
+ /* 0x26 */ SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
+ /* 0x27 */ SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
+ /* 0x28 */ SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
+ /* 0x29 */ SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
+ /* 0x2A */ SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
+ /* 0x2B */ SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
+ /* 0x2C */ SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
+ /* 0x2D */ SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
+ /* 0x2E */ SCENE_ENTRANCE_NONE(),
+ /* 0x2F */ SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
+ /* 0x30 */ SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
+ /* 0x31 */ SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
+ /* 0x32 */ SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
+ /* 0x33 */ SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
+ /* 0x34 */ SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
+ /* 0x35 */ SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
+ /* 0x36 */ SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
+ /* 0x37 */ SCENE_ENTRANCE_NONE(),
+ /* 0x38 */ SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
+ /* 0x39 */ SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
+ /* 0x3A */ SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
+ /* 0x3B */ SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
+ /* 0x3C */ SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
+ /* 0x3D */ SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
+ /* 0x3E */ SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
+ /* 0x3F */ SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
+ /* 0x40 */ SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
+ /* 0x41 */ SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
+ /* 0x42 */ SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
+ /* 0x43 */ SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
+ /* 0x44 */ SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
+ /* 0x45 */ SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
+ /* 0x46 */ SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
+ /* 0x47 */ SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
+ /* 0x48 */ SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
+ /* 0x49 */ SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
+ /* 0x4A */ SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
+ /* 0x4B */ SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
+ /* 0x4C */ SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
+ /* 0x4D */ SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
+ /* 0x4E */ SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
+ /* 0x4F */ SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
+ /* 0x50 */ SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
+ /* 0x51 */ SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
+ /* 0x52 */ SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
+ /* 0x53 */ SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
+ /* 0x54 */ SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
+ /* 0x55 */ SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
+ /* 0x56 */ SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
+ /* 0x57 */ SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
+ /* 0x58 */ SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
+ /* 0x59 */ SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
+ /* 0x5A */ SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
+ /* 0x5B */ SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
+ /* 0x5C */ SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
+ /* 0x5D */ SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
+ /* 0x5E */ SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
+ /* 0x5F */ SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
+ /* 0x60 */ SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
+ /* 0x61 */ SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
+ /* 0x62 */ SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
+ /* 0x63 */ SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
+ /* 0x64 */ SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
+ /* 0x65 */ SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
+ /* 0x66 */ SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
+ /* 0x67 */ SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
+ /* 0x68 */ SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
+ /* 0x69 */ SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
+ /* 0x6A */ SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
+ /* 0x6B */ SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
+ /* 0x6C */ SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
+ /* 0x6D */ SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
};
/**
diff --git a/src/code/z_snap.c b/src/code/z_snap.c
index 2156950f1..246309749 100644
--- a/src/code/z_snap.c
+++ b/src/code/z_snap.c
@@ -1,80 +1,96 @@
#include "global.h"
-
-typedef struct {
- Actor actor;
- s32 (*pictoFunc)(PlayState* play, Actor* actor);
-} PictoActor;
-
-s32 func_8013A240(PlayState* play) {
+#include "z64snap.h"
+#include "overlays/actors/ovl_En_Kakasi/z_en_kakasi.h"
+
+#define PICTO_SEEN_IN_SCENE 1
+#define PICTO_SEEN_ANYWHERE 2
+
+/**
+ * Test every loaded actor to see if it is a pictographable `PictoActor`, and if so, run its `validationFunc` to set
+ * appropriate flags.
+ *
+ * @return s32 Number of pictograph actors validly captured.
+ */
+s32 Snap_RecordPictographedActors(PlayState* play) {
PictoActor* pictoActor;
Actor* actor;
- s32 type = 0;
+ s32 category = 0;
s32 seen;
- s32 count = 0;
+ s32 validCount = 0;
gSaveContext.save.pictoFlags0 = 0;
gSaveContext.save.pictoFlags1 = 0;
if (play->sceneNum == SCENE_20SICHITAI) {
- func_8013A41C(1);
+ Snap_SetFlag(PICTOGRAPH_IN_SWAMP);
}
- for (; type < 12; type++) {
- for (actor = play->actorCtx.actorLists[type].first; actor != NULL; actor = actor->next) {
+ for (; category < ACTORCAT_MAX; category++) {
+ for (actor = play->actorCtx.actorLists[category].first; actor != NULL; actor = actor->next) {
seen = 0;
+ // Actors which must be pictographed in a specific scene
switch (play->sceneNum) {
case SCENE_20SICHITAI:
if ((actor->id == ACTOR_EN_MNK) || (actor->id == ACTOR_EN_BIGOKUTA)) {
- seen = 1;
+ seen = PICTO_SEEN_IN_SCENE;
}
break;
+
default:
seen = 0;
+ break;
}
if (actor->id) {
; // Needed to match
}
+ // Actors which may be pictographed anywhere
switch (actor->id) {
case ACTOR_EN_KAKASI:
- if ((actor->params & 1) == 1) {
- seen |= 2;
+ if (GET_KAKASI_ABOVE_GROUND(actor) == 1) {
+ seen |= PICTO_SEEN_ANYWHERE;
break; //! @bug break is inside conditional, meaning it falls through if it is false
}
+ // FALLTHROUGH
case ACTOR_EN_ZOV:
- seen |= 2;
+ seen |= PICTO_SEEN_ANYWHERE;
break;
+
case ACTOR_EN_BAL:
- seen |= 2;
+ seen |= PICTO_SEEN_ANYWHERE;
break;
+
case ACTOR_EN_DNQ:
- seen |= 2;
+ seen |= PICTO_SEEN_ANYWHERE;
break;
+
case ACTOR_EN_GE1:
case ACTOR_EN_GE3:
case ACTOR_EN_KAIZOKU:
case ACTOR_EN_GE2:
- seen |= 2;
+ seen |= PICTO_SEEN_ANYWHERE;
break;
}
- if (seen != 0) {
+ // If actor is recordable, run its validity function and record if valid
+ if (seen) {
pictoActor = (PictoActor*)actor;
- if (pictoActor->pictoFunc != NULL) {
- if ((pictoActor->pictoFunc)(play, actor) == 0) {
- count++;
+ if (pictoActor->validationFunc != NULL) {
+ if ((pictoActor->validationFunc)(play, actor) == 0) {
+ validCount++;
}
}
}
}
}
- return count;
+ return validCount;
}
-void func_8013A41C(s32 flag) {
+// Only used in this file
+void Snap_SetFlag(s32 flag) {
if (flag < 0x20) {
gSaveContext.save.pictoFlags0 |= (1 << flag);
} else {
@@ -83,7 +99,8 @@ void func_8013A41C(s32 flag) {
}
}
-void func_8013A46C(s32 flag) {
+// Unused
+void Snap_UnsetFlag(s32 flag) {
if (flag < 0x20) {
gSaveContext.save.pictoFlags0 &= ~(1 << flag);
} else {
@@ -92,7 +109,7 @@ void func_8013A46C(s32 flag) {
}
}
-u32 func_8013A4C4(s32 flag) {
+u32 Snap_CheckFlag(s32 flag) {
SaveContext* saveCtx = &gSaveContext;
if (flag < 0x20) {
@@ -103,13 +120,29 @@ u32 func_8013A4C4(s32 flag) {
}
}
-s16 func_8013A504(s16 val) {
- return (val >= 0) ? val : -val;
+s16 Snap_AbsS(s16 val) {
+ return ABS(val);
}
-s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin, f32 distanceMax,
- s16 angleError) {
- Vec3f screenSpace;
+/**
+ * Test if a pictograph is a valid pictograph of an actor
+ *
+ * @param play
+ * @param actor Actor to test
+ * @param flag Flag to set if checks successful
+ * @param pos position of point to test (generally a particular point in the actor's model)
+ * @param rot rotation of point to test (for facing camera)
+ * @param distanceMin closest point may be
+ * @param distanceMax farthest away point may be
+ * @param angleRange Size of range that counts as facing the camera (-1 is used for any allowed)
+ * @return s32 0 on success, `or`ed combination of the validity flag indices if not
+ *
+ * @note It is generally not possible to recover the actual failure mode(s) from the return value: oring `ret` with the
+ * actual flag rather than its index would rectify this.
+ */
+s32 Snap_ValidatePictograph(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* rot, f32 distanceMin,
+ f32 distanceMax, s16 angleRange) {
+ Vec3f projectedPos;
s16 x;
s16 y;
f32 distance;
@@ -119,42 +152,51 @@ s32 func_8013A530(PlayState* play, Actor* actor, s32 flag, Vec3f* pos, Vec3s* ro
s32 ret = 0;
s32 bgId;
+ // Check distance
distance = OLib_Vec3fDist(pos, &camera->eye);
if ((distance < distanceMin) || (distanceMax < distance)) {
- func_8013A41C(0x3F);
- ret = 0x3F;
+ Snap_SetFlag(PICTOGRAPH_BAD_DISTANCE);
+ ret = PICTOGRAPH_BAD_DISTANCE;
}
- x = func_8013A504(Camera_GetCamDirPitch(camera) + rot->x);
- y = func_8013A504(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
- if ((0 < angleError) && ((angleError < x) || (angleError < y))) {
- func_8013A41C(0x3E);
- ret |= 0x3E;
+ // Check rot is facing camera?
+ x = Snap_AbsS(Camera_GetCamDirPitch(camera) + rot->x);
+ y = Snap_AbsS(Camera_GetCamDirYaw(camera) - BINANG_SUB(rot->y, 0x7FFF));
+ if ((0 < angleRange) && ((angleRange < x) || (angleRange < y))) {
+ Snap_SetFlag(PICTOGRAPH_BAD_ANGLE);
+ ret |= PICTOGRAPH_BAD_ANGLE;
}
- Actor_GetProjectedPos(play, pos, &screenSpace, &distance);
- x = (s16)(screenSpace.x * distance * 160.0f + 160.0f) - 85;
- y = (s16)(screenSpace.y * distance * -120.0f + 120.0f) - 67;
- if ((x < 0) || (150 < x) || (y < 0) || (105 < y)) {
- func_8013A41C(0x3D);
- ret |= 0x3D;
+ // Check in capture region
+ Actor_GetProjectedPos(play, pos, &projectedPos, &distance);
+ // Convert to projected position to device coordinates, shift to be relative to the capture region's top-left corner
+ x = (s16)PROJECTED_TO_SCREEN_X(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_X;
+ y = (s16)PROJECTED_TO_SCREEN_Y(projectedPos, distance) - PICTO_CAPTURE_REGION_TOPLEFT_Y;
+
+ // checks if the coordinates are within the capture region
+ if ((x < 0) || (x > PICTO_RESOLUTION_HORIZONTAL) || (y < 0) || (y > PICTO_RESOLUTION_VERTICAL)) {
+ Snap_SetFlag(PICTOGRAPH_NOT_IN_VIEW);
+ ret |= PICTOGRAPH_NOT_IN_VIEW;
}
- if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &screenSpace, &poly, true, true, true, true,
+ // Check not obscured by bg collision
+ if (BgCheck_ProjectileLineTest(&play->colCtx, pos, &camera->eye, &projectedPos, &poly, true, true, true, true,
&bgId)) {
- func_8013A41C(0x3C);
- ret |= 0x3C;
+ Snap_SetFlag(PICTOGRAPH_BEHIND_BG);
+ ret |= PICTOGRAPH_BEHIND_BG;
}
+ // Check not obscured by actor collision
actors[0] = actor;
actors[1] = &GET_PLAYER(play)->actor;
if (CollisionCheck_LineOCCheck(play, &play->colChkCtx, pos, &camera->eye, actors, 2)) {
- func_8013A41C(0x3B);
- ret |= 0x3B;
+ Snap_SetFlag(PICTOGRAPH_BEHIND_COLLISION);
+ ret |= PICTOGRAPH_BEHIND_COLLISION;
}
+ // If all of the above checks pass, set the flag
if (ret == 0) {
- func_8013A41C(flag);
+ Snap_SetFlag(flag);
}
return ret;