En_Syateki_Man (Shooting Gallery Man) documented (#894)

* Document a ton of syateki_man

* Document swamp actor lists

* Document animations

* Document player positions

* Document talk flags

* Name wave and spawn index

* Name everything involved in the swamp game

* A hex score I missed

* Some slight town game doc

* Document octorok flags

* Better way of doing octorok flags

* Macros for getting/setting high scores

* Update a variable I missed

* Name remaining struct vars

* Create enum for shootingGameState

* Remove anonymous unions

* hitState -> hitType

* Comment for values next to enums

* Name some more stuff

* Name stuff in Town-RunGame

* Name sGameStartTimer

* Name some more stuff

* Name all static variables

* One more round of comments and such

* Respond to hensldm's review

* GET_INDEX -> GET_ID

* Respond to Elliptic's review (or at least the parts I can respond to right now)

* More review responses

* Add some stuff to z64saves.h I missed
This commit is contained in:
Tom Overton 2022-07-23 11:06:11 -07:00 committed by GitHub
parent 3f49adb91d
commit 9449ced63f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 898 additions and 654 deletions

View File

@ -29,13 +29,6 @@
#define GET_FIRST_ENEMY(play) ((Actor*)(play)->actorCtx.actorLists[ACTORCAT_ENEMY].first) #define GET_FIRST_ENEMY(play) ((Actor*)(play)->actorCtx.actorLists[ACTORCAT_ENEMY].first)
// linkAge still exists in MM, but is always set to 0 (always adult)
// There are remnants of these macros from OOT, but they are essentially useless
#define LINK_IS_CHILD (gSaveContext.save.linkAge == 1)
#define LINK_IS_ADULT (gSaveContext.save.linkAge == 0)
#define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5)
#define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60)) #define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60))
#define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1)) #define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1))
#define DAY_LENGTH (CLOCK_TIME(24, 0)) #define DAY_LENGTH (CLOCK_TIME(24, 0))
@ -46,66 +39,6 @@
#define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f))) #define TIME_TO_MINUTES_ALT_F(time) ((time) / (0x10000 / (24.0f * 60.0f)))
#define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000)) #define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000))
#define SLOT(item) gItemSlots[item]
#define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)]
#define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)]
#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.inventory.items)[SLOT(item)]
#define CUR_FORM ((gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.save.playerForm)
#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.equips.equipment)
#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.inventory.upgrades)
#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.inventory.questItems)
#define GET_CUR_EQUIP_VALUE(equip) ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CUR_UPG_VALUE(upg) ((gSaveContext.save.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define GET_CUR_UPG_VALUE(upg) ((GET_SAVE_INVENTORY_UPGRADES & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip])))
#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.equips.buttonItems[form][button])
#define CUR_FORM_EQUIP(button) BUTTON_ITEM_EQUIP(CUR_FORM, button)
#define C_SLOT_EQUIP(form, button) (gSaveContext.save.equips.cButtonSlots[form][button])
#define CHECK_QUEST_ITEM(item) (GET_SAVE_INVENTORY_QUEST_ITEMS & gBitFlags[item])
#define SET_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item]))
#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item])))
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item])
#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex])
#define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn)))
#define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn)))
#define SET_CUR_FORM_BTN_ITEM(btn, item) \
if ((btn) == EQUIP_SLOT_B) { \
BUTTON_ITEM_EQUIP(CUR_FORM, (btn)) = (item); \
} else { \
BUTTON_ITEM_EQUIP(0, (btn)) = (item); \
} \
(void)0
#define SET_CUR_FORM_BTN_SLOT(btn, item) \
if ((btn) == EQUIP_SLOT_B) { \
C_SLOT_EQUIP(CUR_FORM, (btn)) = (item); \
} else { \
C_SLOT_EQUIP(0, (btn)) = (item); \
} \
(void)0
#define STOLEN_ITEM_NONE (0)
#define STOLEN_ITEM_1 ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18)
#define STOLEN_ITEM_2 ((gSaveContext.save.stolenItems & 0x00FF0000) >> 0x10)
#define SET_STOLEN_ITEM_1(itemId) \
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18))
#define SET_STOLEN_ITEM_2(itemId) \
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value] #define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))

View File

@ -160,7 +160,7 @@ typedef struct Save {
/* 0x0EE8 */ u32 unk_EE8; /* 0x0EE8 */ u32 unk_EE8;
/* 0x0EEC */ u32 horseBackBalloonHighScore; /* 0x0EEC */ u32 horseBackBalloonHighScore;
/* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits) /* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
/* 0x0EF4 */ u32 unk_EF4; // Shooting Gallery Man Flags /* 0x0EF4 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits.
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg" /* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
/* 0x0F5C */ u32 mapsVisited; // "area_arrival" /* 0x0F5C */ u32 mapsVisited; // "area_arrival"
/* 0x0F60 */ u32 mapsVisible; // "cloud_clear" /* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
@ -273,6 +273,78 @@ typedef enum SunsSongState {
/* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads /* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads
} SunsSongState; } SunsSongState;
// linkAge still exists in MM, but is always set to 0 (always adult)
// There are remnants of these macros from OOT, but they are essentially useless
#define LINK_IS_CHILD (gSaveContext.save.linkAge == 1)
#define LINK_IS_ADULT (gSaveContext.save.linkAge == 0)
#define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5)
#define SLOT(item) gItemSlots[item]
#define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)]
#define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)]
#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.inventory.items)[SLOT(item)]
#define CUR_FORM ((gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.save.playerForm)
#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.equips.equipment)
#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.inventory.upgrades)
#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.inventory.questItems)
#define GET_CUR_EQUIP_VALUE(equip) ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CUR_UPG_VALUE(upg) ((gSaveContext.save.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define GET_CUR_UPG_VALUE(upg) ((GET_SAVE_INVENTORY_UPGRADES & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip])))
#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.equips.buttonItems[form][button])
#define CUR_FORM_EQUIP(button) BUTTON_ITEM_EQUIP(CUR_FORM, button)
#define C_SLOT_EQUIP(form, button) (gSaveContext.save.equips.cButtonSlots[form][button])
#define CHECK_QUEST_ITEM(item) (GET_SAVE_INVENTORY_QUEST_ITEMS & gBitFlags[item])
#define SET_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item]))
#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item])))
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item])
#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex])
#define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn)))
#define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn)))
#define SET_CUR_FORM_BTN_ITEM(btn, item) \
if ((btn) == EQUIP_SLOT_B) { \
BUTTON_ITEM_EQUIP(CUR_FORM, (btn)) = (item); \
} else { \
BUTTON_ITEM_EQUIP(0, (btn)) = (item); \
} \
(void)0
#define SET_CUR_FORM_BTN_SLOT(btn, item) \
if ((btn) == EQUIP_SLOT_B) { \
C_SLOT_EQUIP(CUR_FORM, (btn)) = (item); \
} else { \
C_SLOT_EQUIP(0, (btn)) = (item); \
} \
(void)0
#define STOLEN_ITEM_NONE (0)
#define STOLEN_ITEM_1 ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18)
#define STOLEN_ITEM_2 ((gSaveContext.save.stolenItems & 0x00FF0000) >> 0x10)
#define SET_STOLEN_ITEM_1(itemId) \
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18))
#define SET_STOLEN_ITEM_2(itemId) \
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.shootingGalleryHighScores & 0xFFFF))
#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) >> 0x10))
#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = (gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score)))
#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = ((gSaveContext.save.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10))
typedef enum { typedef enum {
/* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE,
/* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE, /* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE,

View File

@ -199,8 +199,8 @@ void Sram_ClearHighscores(void) {
gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF) | 0x130000; gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF) | 0x130000;
gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF0000) | 0xA; gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF0000) | 0xA;
gSaveContext.save.horseBackBalloonHighScore = 6000; // 60 seconds gSaveContext.save.horseBackBalloonHighScore = 6000; // 60 seconds
gSaveContext.save.unk_EF4 = (gSaveContext.save.unk_EF4 & 0xFFFF0000) | 0x27; SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39);
gSaveContext.save.unk_EF4 = (gSaveContext.save.unk_EF4 & 0xFFFF) | 0xA0000; SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10);
gSaveContext.save.dekuPlaygroundHighScores[0] = 7500; // 75 seconds gSaveContext.save.dekuPlaygroundHighScores[0] = 7500; // 75 seconds
gSaveContext.save.dekuPlaygroundHighScores[1] = 7500; // 75 seconds gSaveContext.save.dekuPlaygroundHighScores[1] = 7500; // 75 seconds

View File

@ -90,7 +90,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
path = &play->setupPathList[path->unk1]; path = &play->setupPathList[path->unk1];
} }
for (i = 0; i < EN_SYATEKI_CROW_GET_PARAM_FF00(&this->actor); i++) { for (i = 0; i < EN_SYATEKI_CROW_GET_NUMBER(&this->actor); i++) {
path = &play->setupPathList[path->unk1]; path = &play->setupPathList[path->unk1];
} }
@ -102,7 +102,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
this->unk_23C.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius; this->unk_23C.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f); ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f);
if ((path == NULL) || (EN_SYATEKI_CROW_GET_PARAM_FF00(&this->actor) >= 0x80)) { if ((path == NULL) || (EN_SYATEKI_CROW_GET_NUMBER(&this->actor) >= 0x80)) {
Actor_MarkForDeath(&this->actor); Actor_MarkForDeath(&this->actor);
return; return;
} }
@ -136,14 +136,14 @@ void func_809CA5D4(EnSyatekiCrow* this) {
void func_809CA67C(EnSyatekiCrow* this, PlayState* play) { void func_809CA67C(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->unk_26A == 1) && (this->unk_1C2 == 1) && if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_1C2 == 1) &&
(syatekiMan->unk_274 & (1 << EN_SYATEKI_CROW_GET_PARAM_FF00(&this->actor)))) { (syatekiMan->guayFlags & (1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor)))) {
func_809CA71C(this); func_809CA71C(this);
} else if (syatekiMan->unk_26A != 1) { } else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->unk_1C2 = 1; this->unk_1C2 = 1;
} }
if ((syatekiMan->unk_274 == 0) && (syatekiMan->unk_274 == 0)) { if ((syatekiMan->guayFlags == 0) && (syatekiMan->guayFlags == 0)) {
this->unk_1C2 = 1; this->unk_1C2 = 1;
} }
} }
@ -185,7 +185,7 @@ void func_809CA8E4(EnSyatekiCrow* this, PlayState* play) {
f32 sp30; f32 sp30;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->unk_26A != 1) { if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
func_809CA5D4(this); func_809CA5D4(this);
return; return;
} }
@ -207,13 +207,13 @@ void func_809CA8E4(EnSyatekiCrow* this, PlayState* play) {
this->unk_1CC++; this->unk_1CC++;
} else { } else {
this->unk_1C2 = 0; this->unk_1C2 = 0;
syatekiMan->unk_274 &= ~(1 << EN_SYATEKI_CROW_GET_PARAM_FF00(&this->actor)); syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor));
func_809CA5D4(this); func_809CA5D4(this);
} }
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset = (fabsf(this->skelAnime.curFrame - 3.0f) * 150.0f) + 1700.0f; this->actor.shape.yOffset = (fabsf(this->skelAnime.curFrame - 3.0f) * 150.0f) + 1700.0f;
if ((syatekiMan->unk_26C % 90) == 0) { if ((syatekiMan->perGameVar1.guaySpawnTimer % 90) == 0) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY); Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KAICHO_CRY);
} }
} }
@ -221,7 +221,7 @@ void func_809CA8E4(EnSyatekiCrow* this, PlayState* play) {
void func_809CAAF8(EnSyatekiCrow* this) { void func_809CAAF8(EnSyatekiCrow* this) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
syatekiMan->unk_280 += 60; syatekiMan->score += 60;
this->unk_1C2 = 0; this->unk_1C2 = 0;
this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x); this->actor.speedXZ *= Math_CosS(this->actor.world.rot.x);
this->actor.velocity.y = 0.0f; this->actor.velocity.y = 0.0f;
@ -245,8 +245,8 @@ void func_809CABC0(EnSyatekiCrow* this, PlayState* play) {
if (this->unk_1C4 > 20) { if (this->unk_1C4 > 20) {
func_800B3030(play, &this->actor.world.pos, &D_809CB050, &D_809CB050, this->actor.scale.x * 10000.0f, 0, 0); func_800B3030(play, &this->actor.world.pos, &D_809CB050, &D_809CB050, this->actor.scale.x * 10000.0f, 0, 0);
syatekiMan->unk_27A++; syatekiMan->guayHitCounter++;
syatekiMan->unk_274 &= ~(1 << EN_SYATEKI_CROW_GET_PARAM_FF00(&this->actor)); syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_NUMBER(&this->actor));
func_809CA5D4(this); func_809CA5D4(this);
} }

View File

@ -5,7 +5,8 @@
#define EN_SYATEKI_CROW_GET_PARAM_F(thisx) ((thisx)->params & 0xF) #define EN_SYATEKI_CROW_GET_PARAM_F(thisx) ((thisx)->params & 0xF)
#define EN_SYATEKI_CROW_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4) #define EN_SYATEKI_CROW_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_CROW_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) #define EN_SYATEKI_CROW_GET_NUMBER(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_CROW_PARAMS(number, unkF0, unkF) (((number << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unkF & 0xF))
struct EnSyatekiCrow; struct EnSyatekiCrow;

View File

@ -131,7 +131,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
} }
this->unk_1E4 = Lib_SegmentedToVirtual(path->points); this->unk_1E4 = Lib_SegmentedToVirtual(path->points);
this->unk_1E8 = EN_SYATEKI_DEKUNUTS_GET_PARAM_F0(&this->actor); this->unk_1E8 = EN_SYATEKI_DEKUNUTS_GET_NUMBER(&this->actor);
this->unk_1EA = path->count; this->unk_1EA = path->count;
this->unk_1D8 = 0; this->unk_1D8 = 0;
this->unk_1DC = 0; this->unk_1DC = 0;
@ -166,13 +166,14 @@ void func_80A2BE54(EnSyatekiDekunuts* this) {
void func_80A2BF18(EnSyatekiDekunuts* this, PlayState* play) { void func_80A2BF18(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->unk_26A == 1) && (this->unk_1E2 == 1) && ((syatekiMan->unk_272 & (1 << this->unk_1E8)) != 0)) { if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_1E2 == 1) &&
((syatekiMan->dekuScrubFlags & (1 << this->unk_1E8)) != 0)) {
func_80A2BFC4(this); func_80A2BFC4(this);
} else if (syatekiMan->unk_26A != 1) { } else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->unk_1E2 = 1; this->unk_1E2 = 1;
} }
if ((syatekiMan->unk_272 == 0) && (syatekiMan->unk_274 == 0) && if ((syatekiMan->dekuScrubFlags == 0) && (syatekiMan->guayFlags == 0) &&
(EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) != 1)) { (EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) != 1)) {
this->unk_1E2 = 1; this->unk_1E2 = 1;
} }
@ -189,9 +190,9 @@ void func_80A2BFC4(EnSyatekiDekunuts* this) {
this->actor.world.pos = this->actor.prevPos = sp14; this->actor.world.pos = this->actor.prevPos = sp14;
this->actor.world.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->unk_1EE = 140 - (syatekiMan->unk_27C * 20); this->unk_1EE = 140 - (syatekiMan->currentWave * 20);
if ((syatekiMan->unk_27C & 1) != 0) { if ((syatekiMan->currentWave & 1) != 0) {
this->unk_1F0 = 1; this->unk_1F0 = 1;
this->unk_1F2 = 0; this->unk_1F2 = 0;
} else { } else {
@ -260,7 +261,7 @@ void func_80A2C27C(EnSyatekiDekunuts* this) {
void func_80A2C2E0(EnSyatekiDekunuts* this, PlayState* play) { void func_80A2C2E0(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((this->unk_1EE < this->unk_1D8) || (syatekiMan->unk_26A != 1)) { if ((this->unk_1EE < this->unk_1D8) || (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING)) {
func_80A2C3AC(this); func_80A2C3AC(this);
} }
@ -270,7 +271,7 @@ void func_80A2C2E0(EnSyatekiDekunuts* this, PlayState* play) {
void func_80A2C33C(EnSyatekiDekunuts* this, PlayState* play) { void func_80A2C33C(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((gSaveContext.unk_3DE0[1] <= 0) || (syatekiMan->unk_26A != 1)) { if ((gSaveContext.unk_3DE0[1] <= 0) || (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING)) {
func_80A2C3AC(this); func_80A2C3AC(this);
} }
@ -287,7 +288,7 @@ void func_80A2C3AC(EnSyatekiDekunuts* this) {
void func_80A2C3F0(EnSyatekiDekunuts* this, PlayState* play) { void func_80A2C3F0(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->unk_26A == 1) { if (syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) {
if (this->unk_1D8 > 160 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { if (this->unk_1D8 > 160 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_1D8 = 0; this->unk_1D8 = 0;
func_80A2C150(this); func_80A2C150(this);
@ -319,12 +320,12 @@ void func_80A2C4D0(EnSyatekiDekunuts* this, PlayState* play) {
if (EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) == 1) { if (EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) == 1) {
EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A2CBA0, &D_80A2CBAC, 5, 2); EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A2CBA0, &D_80A2CBAC, 5, 2);
syatekiMan->unk_280 += 100; syatekiMan->score += 100;
syatekiMan->unk_26E++; syatekiMan->perGameVar2.bonusDekuScrubHitCounter++;
} else { } else {
EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A2CBA0, &D_80A2CBAC, 5, 0); EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A2CBA0, &D_80A2CBAC, 5, 0);
syatekiMan->unk_280 += 30; syatekiMan->score += 30;
syatekiMan->unk_278++; syatekiMan->dekuScrubHitCounter++;
} }
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DAMAGE); Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_NUTS_DAMAGE);
@ -356,7 +357,7 @@ void func_80A2C5DC(EnSyatekiDekunuts* this, PlayState* play) {
EffectSsHahen_SpawnBurst(play, &sp40, 3.0f, 0, 12, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); EffectSsHahen_SpawnBurst(play, &sp40, 3.0f, 0, 12, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
if (EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) != 1) { if (EN_SYATEKI_DEKUNUTS_GET_PARAM_F(&this->actor) != 1) {
syatekiMan->unk_272 &= ~(1 << this->unk_1E8); syatekiMan->dekuScrubFlags &= ~(1 << this->unk_1E8);
} }
func_80A2BE54(this); func_80A2BE54(this);

View File

@ -5,8 +5,9 @@
#include "objects/object_dekunuts/object_dekunuts.h" #include "objects/object_dekunuts/object_dekunuts.h"
#define EN_SYATEKI_DEKUNUTS_GET_PARAM_F(thisx) ((thisx)->params & 0xF) #define EN_SYATEKI_DEKUNUTS_GET_PARAM_F(thisx) ((thisx)->params & 0xF)
#define EN_SYATEKI_DEKUNUTS_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4) #define EN_SYATEKI_DEKUNUTS_GET_NUMBER(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) #define EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_DEKUNUTS_PARAMS(unkFF00, number, unkF) (((unkFF00 << 8) & 0xFF00) | ((number << 4) & 0xF0) | (unkF & 0xF))
struct EnSyatekiDekunuts; struct EnSyatekiDekunuts;

File diff suppressed because it is too large Load Diff

View File

@ -4,49 +4,70 @@
#include "global.h" #include "global.h"
#include "objects/object_shn/object_shn.h" #include "objects/object_shn/object_shn.h"
struct EnSyatekiMan; struct EnSyatekiMan;
typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*); typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*);
#define ENSYATEKIMAN_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) #define EN_SYATEKI_MAN_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8)
typedef struct { typedef enum {
/* 0x00 */ s16 index; /* 0 */ SG_GAME_STATE_NONE, // None of the states below apply.
/* 0x04 */ f32 x; /* 1 */ SG_GAME_STATE_RUNNING, // The shooting game is in-progress.
/* 0x08 */ f32 y; /* 2 */ SG_GAME_STATE_EXPLAINING_RULES, // For the Town Shooting Gallery, this state is also used for explaining the current high score.
/* 0x0C */ f32 z; /* 3 */ SG_GAME_STATE_NOT_PLAYING, // Either the player said "No" to playing, or they said "Yes" but don't have enough rupees.
/* 0x10 */ s32 variable; /* 4 */ SG_GAME_STATE_ONE_MORE_GAME, // The player failed to get a new high score (Town) and/or perfect score (Swamp and Town).
} EnSyatekiManUnkStruct; // size = 0x14 /* 5 */ SG_GAME_STATE_GIVING_BONUS, // The player gets bonus points at the end of the Swamp game if they get a perfect score.
/* 6 */ SG_GAME_STATE_ENDED, // The player got a new high score and/or perfect score (Town), or the game is over (Swamp).
/* 7 */ SG_GAME_STATE_MOVING_PLAYER, // The player is automatically moving towards the spot to play the game.
} ShootingGalleryGameState;
typedef enum {
/* 0 */ SG_OCTO_STATE_SPAWNING,
/* 1 */ SG_OCTO_STATE_SPAWNED,
/* 70 */ SG_OCTO_STATE_INITIAL = 70,
/* 80 */ SG_OCTO_STATE_HIDING = 80,
} ShootingGalleryOctorokState;
typedef enum {
/* 0 */ SG_OCTO_HIT_TYPE_NONE,
/* 1 */ SG_OCTO_HIT_TYPE_RED,
/* 2 */ SG_OCTO_HIT_TYPE_BLUE,
} ShootingGalleryoctorokHitType;
typedef struct EnSyatekiMan { typedef struct EnSyatekiMan {
/* 0x000 */ Actor actor; /* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime; /* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnSyatekiManActionFunc actionFunc; /* 0x188 */ EnSyatekiManActionFunc actionFunc;
/* 0x18C */ Path* path; /* 0x18C */ Path* path;
/* 0x190 */ s32 unk_190; /* 0x190 */ s32 octorokFlags;
/* 0x194 */ s32 unk_194; /* 0x194 */ s32 swampTargetActorListIndex; // used but never initialized, so the value is implicitly always 0
/* 0x198 */ Vec3s jointTable[BURLY_GUY_LIMB_MAX]; /* 0x198 */ Vec3s jointTable[BURLY_GUY_LIMB_MAX];
/* 0x1F8 */ Vec3s morphTable[BURLY_GUY_LIMB_MAX]; /* 0x1F8 */ Vec3s morphTable[BURLY_GUY_LIMB_MAX];
/* 0x258 */ Vec3s unk_258; /* 0x258 */ Vec3s headRot;
/* 0x25E */ Vec3s unk_25E; /* 0x25E */ Vec3s torsoRot;
/* 0x264 */ s16 eyeIndex; /* 0x264 */ s16 eyeIndex;
/* 0x266 */ s16 blinkTimer; /* 0x266 */ s16 blinkTimer;
/* 0x268 */ UNK_TYPE1 unk268[0x2]; /* 0x268 */ UNK_TYPE1 unk268[0x2];
/* 0x26A */ s16 unk_26A; /* 0x26A */ s16 shootingGameState;
/* 0x26C */ s16 unk_26C; /* 0x26C */ union {
/* 0x26E */ s16 unk_26E; s16 guaySpawnTimer;
/* 0x270 */ s16 unk_270; s16 octorokState;
/* 0x272 */ s16 unk_272; } perGameVar1;
/* 0x274 */ s16 unk_274; /* 0x26E */ union {
/* 0x276 */ s16 unk_276; s16 bonusDekuScrubHitCounter;
/* 0x278 */ s16 unk_278; s16 octorokHitType;
/* 0x27A */ s16 unk_27A; } perGameVar2;
/* 0x27C */ s16 unk_27C; /* 0x270 */ s16 talkWaitTimer;
/* 0x27E */ s16 unk_27E; /* 0x272 */ s16 dekuScrubFlags;
/* 0x280 */ s16 unk_280; /* 0x274 */ s16 guayFlags;
/* 0x282 */ s16 unk_282; /* 0x276 */ s16 wolfosFlags;
/* 0x284 */ s16 unk_284; /* 0x278 */ s16 dekuScrubHitCounter;
/* 0x27A */ s16 guayHitCounter;
/* 0x27C */ s16 currentWave;
/* 0x27E */ s16 flagsIndex; // Used for Octoroks in Town and Guays in Swamp
/* 0x280 */ s16 score;
/* 0x282 */ s16 talkFlags;
/* 0x284 */ s16 prevTextId;
} EnSyatekiMan; // size = 0x288 } EnSyatekiMan; // size = 0x288
extern const ActorInit En_Syateki_Man_InitVars; extern const ActorInit En_Syateki_Man_InitVars;

View File

@ -137,7 +137,7 @@ s32 func_80A361F4(EnSyatekiOkuta* this) {
temp_v1 = EN_SYATEKI_OKUTA_GET_F(&this->actor); temp_v1 = EN_SYATEKI_OKUTA_GET_F(&this->actor);
if ((temp_v1 == 1) || (temp_v1 == 4)) { if ((temp_v1 == 1) || (temp_v1 == 4)) {
temp_a0 = syatekiMan->unk_190; temp_a0 = syatekiMan->octorokFlags;
temp_a1 = (temp_v1 * 2) + 6; temp_a1 = (temp_v1 * 2) + 6;
if ((temp_a0 >> temp_a1) & 3) { if ((temp_a0 >> temp_a1) & 3) {
@ -212,7 +212,7 @@ void func_80A36444(EnSyatekiOkuta* this) {
void func_80A36488(EnSyatekiOkuta* this, PlayState* play) { void func_80A36488(EnSyatekiOkuta* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->unk_26C >= 0x46) { if (syatekiMan->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL) {
func_80A364C0(this); func_80A364C0(this);
} }
} }
@ -341,9 +341,10 @@ void func_80A36AF8(EnSyatekiOkuta* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
s16 temp_v1_2; s16 temp_v1_2;
if ((this->actionFunc != func_80A36488) && (this->actionFunc != func_80A363B4) && (syatekiMan->unk_26A == 1) && if ((this->actionFunc != func_80A36488) && (this->actionFunc != func_80A363B4) &&
(syatekiMan->unk_26C == 0)) { (syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) &&
temp_v1_2 = (syatekiMan->unk_190 >> (EN_SYATEKI_OKUTA_GET_F(&this->actor) * 2)) & 3; (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_SPAWNING)) {
temp_v1_2 = (syatekiMan->octorokFlags >> (EN_SYATEKI_OKUTA_GET_F(&this->actor) * 2)) & 3;
if (temp_v1_2 > 0) { if (temp_v1_2 > 0) {
Actor_SetScale(&this->actor, 0.01f); Actor_SetScale(&this->actor, 0.01f);
this->unk_2A6 = temp_v1_2; this->unk_2A6 = temp_v1_2;
@ -370,11 +371,11 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) {
if (this->unk_2A6 == 1) { if (this->unk_2A6 == 1) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
play->interfaceCtx.unk_25C++; play->interfaceCtx.unk_25C++;
syatekiMan->unk_280++; syatekiMan->score++;
syatekiMan->unk_26E = 1; syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED;
} else { } else {
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR); Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
syatekiMan->unk_26E = 2; syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_BLUE;
} }
func_80A3657C(this); func_80A3657C(this);

View File

@ -151,7 +151,7 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
path = &play->setupPathList[path->unk1]; path = &play->setupPathList[path->unk1];
} }
for (i = 0; i < EN_SYATEKI_WF_GET_PARAM_FF00(&this->actor); i++) { for (i = 0; i < EN_SYATEKI_WF_GET_NUMBER(&this->actor); i++) {
path = &play->setupPathList[path->unk1]; path = &play->setupPathList[path->unk1];
} }
@ -224,7 +224,7 @@ void func_80A201CC(EnSyatekiWf* this) {
this->actor.draw = NULL; this->actor.draw = NULL;
this->unk_2A4 = 1; this->unk_2A4 = 1;
this->unk_298 = 0; this->unk_298 = 0;
syatekiMan->unk_276 &= ~(1 << EN_SYATEKI_WF_GET_PARAM_FF00(&this->actor)); syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_NUMBER(&this->actor));
this->actionFunc = func_80A20284; this->actionFunc = func_80A20284;
} }
@ -233,10 +233,10 @@ void func_80A20284(EnSyatekiWf* this, PlayState* play) {
if (this->actor.parent != NULL) { if (this->actor.parent != NULL) {
syatekiMan = (EnSyatekiMan*)this->actor.parent; syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->unk_26A == 1) && (this->unk_298 == 1)) { if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_298 == 1)) {
func_80A200E0(this); func_80A200E0(this);
func_80A2030C(this); func_80A2030C(this);
} else if (syatekiMan->unk_276 & (1 << EN_SYATEKI_WF_GET_PARAM_FF00(&this->actor))) { } else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_NUMBER(&this->actor))) {
this->unk_298 = 1; this->unk_298 = 1;
} }
} }
@ -270,7 +270,7 @@ void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
s16 temp_v0; s16 temp_v0;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->unk_26A != 1) { if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
func_80A201CC(this); func_80A201CC(this);
} }
@ -375,7 +375,7 @@ void func_80A20858(EnSyatekiWf* this, PlayState* play) {
EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 5, 2); EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 5, 2);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DEAD); Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DEAD);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 6); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 6);
syatekiMan->unk_280 += 100; syatekiMan->score += 100;
this->actionFunc = func_80A208F8; this->actionFunc = func_80A208F8;
} }

View File

@ -5,7 +5,8 @@
#include "objects/object_wf/object_wf.h" #include "objects/object_wf/object_wf.h"
#define EN_SYATEKI_WF_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4) #define EN_SYATEKI_WF_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_WF_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) #define EN_SYATEKI_WF_GET_NUMBER(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_SYATEKI_WF_PARAMS(number, unkF0, unused) (((number << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unused & 0xF))
struct EnSyatekiWf; struct EnSyatekiWf;

View File

@ -9080,33 +9080,33 @@
0x809C5E14:("EnBomBowlMan_Update",), 0x809C5E14:("EnBomBowlMan_Update",),
0x809C5F44:("EnBomBowlMan_OverrideLimbDraw",), 0x809C5F44:("EnBomBowlMan_OverrideLimbDraw",),
0x809C5FC4:("EnBomBowlMan_Draw",), 0x809C5FC4:("EnBomBowlMan_Draw",),
0x809C64C0:("func_809C64C0",), 0x809C64C0:("EnSyatekiMan_Swamp_SpawnTargetActors",),
0x809C6578:("EnSyatekiMan_Init",), 0x809C6578:("EnSyatekiMan_Init",),
0x809C66FC:("EnSyatekiMan_Destroy",), 0x809C66FC:("EnSyatekiMan_Destroy",),
0x809C6720:("func_809C6720",), 0x809C6720:("EnSyatekiMan_MovePlayerToPos",),
0x809C6810:("func_809C6810",), 0x809C6810:("EnSyatekiMan_SetupIdle",),
0x809C6848:("func_809C6848",), 0x809C6848:("EnSyatekiMan_Swamp_Idle",),
0x809C6A04:("func_809C6A04",), 0x809C6A04:("EnSyatekiMan_Swamp_HandleChoice",),
0x809C6C2C:("func_809C6C2C",), 0x809C6C2C:("EnSyatekiMan_Swamp_HandleNormalMessage",),
0x809C6E30:("func_809C6E30",), 0x809C6E30:("EnSyatekiMan_Swamp_Talk",),
0x809C6F98:("func_809C6F98",), 0x809C6F98:("EnSyatekiMan_Town_StartIntroTextbox",),
0x809C72D8:("func_809C72D8",), 0x809C72D8:("EnSyatekiMan_Town_Idle",),
0x809C7380:("func_809C7380",), 0x809C7380:("EnSyatekiMan_Town_HandleChoice",),
0x809C7620:("func_809C7620",), 0x809C7620:("EnSyatekiMan_Town_HandleNormalMessage",),
0x809C7990:("func_809C7990",), 0x809C7990:("EnSyatekiMan_Town_Talk",),
0x809C7A90:("func_809C7A90",), 0x809C7A90:("EnSyatekiMan_Swamp_SetupGiveReward",),
0x809C7C14:("func_809C7C14",), 0x809C7C14:("EnSyatekiMan_Swamp_GiveReward",),
0x809C7D14:("func_809C7D14",), 0x809C7D14:("EnSyatekiMan_Town_SetupGiveReward",),
0x809C7EB4:("func_809C7EB4",), 0x809C7EB4:("EnSyatekiMan_Town_GiveReward",),
0x809C7FFC:("func_809C7FFC",), 0x809C7FFC:("EnSyatekiMan_Swamp_MovePlayerAndExplainRules",),
0x809C80C0:("func_809C80C0",), 0x809C80C0:("EnSyatekiMan_Swamp_StartGame",),
0x809C81D0:("func_809C81D0",), 0x809C81D0:("EnSyatekiMan_Swamp_RunGame",),
0x809C8488:("func_809C8488",), 0x809C8488:("EnSyatekiMan_Swamp_EndGame",),
0x809C8610:("func_809C8610",), 0x809C8610:("EnSyatekiMan_Swamp_AddBonusPoints",),
0x809C8710:("func_809C8710",), 0x809C8710:("EnSyatekiMan_Town_MovePlayerAndSayHighScore",),
0x809C8808:("func_809C8808",), 0x809C8808:("EnSyatekiMan_Town_StartGame",),
0x809C898C:("func_809C898C",), 0x809C898C:("EnSyatekiMan_Town_RunGame",),
0x809C8BF0:("func_809C8BF0",), 0x809C8BF0:("EnSyatekiMan_Town_EndGame",),
0x809C8DE8:("EnSyatekiMan_Blink",), 0x809C8DE8:("EnSyatekiMan_Blink",),
0x809C8E44:("EnSyatekiMan_Update",), 0x809C8E44:("EnSyatekiMan_Update",),
0x809C8EE4:("EnSyatekiMan_OverrideLimbDraw",), 0x809C8EE4:("EnSyatekiMan_OverrideLimbDraw",),

View File

@ -9922,23 +9922,23 @@
0x809C6264:("D_809C6264","f32","",0x4), 0x809C6264:("D_809C6264","f32","",0x4),
0x809C6268:("D_809C6268","f32","",0x4), 0x809C6268:("D_809C6268","f32","",0x4),
0x809C9160:("En_Syateki_Man_InitVars","UNK_TYPE1","",0x1), 0x809C9160:("En_Syateki_Man_InitVars","UNK_TYPE1","",0x1),
0x809C9180:("D_809C9180","UNK_TYPE1","",0x1), 0x809C9180:("sAnimations","UNK_TYPE1","",0x1),
0x809C91C8:("D_809C91C8","UNK_TYPE1","",0x1), 0x809C91C8:("sGuayFlagsPerWave","UNK_TYPE1","",0x1),
0x809C91D0:("D_809C91D0","UNK_TYPE1","",0x1), 0x809C91D0:("sNormalSwampTargetActorList","UNK_TYPE1","",0x1),
0x809C934C:("D_809C934C","UNK_TYPE1","",0x1), 0x809C934C:("sUnusedSwampTargetActorList","UNK_TYPE1","",0x1),
0x809C9464:("D_809C9464","UNK_PTR","",0x4), 0x809C9464:("sSwampTargetActorLists","UNK_PTR","",0x4),
0x809C946C:("D_809C946C","UNK_TYPE1","",0x1), 0x809C946C:("sSwampTargetActorListLengths","UNK_TYPE1","",0x1),
0x809C9474:("D_809C9474","UNK_TYPE4","",0x4), 0x809C9474:("sSwampPlayerPos","UNK_TYPE4","",0x4),
0x809C9480:("D_809C9480","UNK_TYPE4","",0x4), 0x809C9480:("sTownFierceDietyPlayerPos","UNK_TYPE4","",0x4),
0x809C948C:("D_809C948C","UNK_TYPE4","",0x4), 0x809C948C:("sTownPlayerPos","UNK_TYPE4","",0x4),
0x809C9498:("D_809C9498","UNK_TYPE2","",0x2), 0x809C9498:("sGameStartTimer","s16","",0x2),
0x809C949C:("D_809C949C","UNK_TYPE2","",0x2), 0x809C949C:("sHasSpawnedGuaysForThisWave","UNK_TYPE2","",0x2),
0x809C94A0:("D_809C94A0","UNK_TYPE4","",0x4), 0x809C94A0:("sBonusTimer","s32","",0x4),
0x809C94A4:("D_809C94A4","UNK_TYPE2","",0x2), 0x809C94A4:("sGameStartTimer","s16","",0x2),
0x809C94A8:("D_809C94A8","UNK_TYPE4","",0x4), 0x809C94A8:("sModFromLosingTime","s32","",0x4),
0x809C94AC:("D_809C94AC","UNK_TYPE4","",0x4), 0x809C94AC:("sFocusOffset","UNK_TYPE4","",0x4),
0x809C94B8:("D_809C94B8","UNK_PTR","",0x4), 0x809C94B8:("sEyeTextures","UNK_PTR","",0x4),
0x809C94D0:("D_809C94D0","UNK_TYPE1","",0x1), 0x809C94D0:("sOctorokFlagsPerWave","UNK_TYPE1","",0x1),
0x809C950C:("jtbl_809C950C","UNK_PTR","",0x4), 0x809C950C:("jtbl_809C950C","UNK_PTR","",0x4),
0x809C9544:("jtbl_809C9544","UNK_PTR","",0x4), 0x809C9544:("jtbl_809C9544","UNK_PTR","",0x4),
0x809C9570:("jtbl_809C9570","UNK_PTR","",0x4), 0x809C9570:("jtbl_809C9570","UNK_PTR","",0x4),