diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2023-07-05 21:34:08 +0200 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2023-08-01 11:36:11 +0200 |
| commit | 488196754ea5225513dc900d23c53f2b157de409 (patch) | |
| tree | c69039d9643265381dddb27cca929cbea6dfb936 /include | |
| parent | 0d6b9052bacc3bbe079df0bcf25ac633ed4df073 (diff) | |
Create new entity structs for NPCs
Diffstat (limited to 'include')
| -rw-r--r-- | include/common.h | 4 | ||||
| -rw-r--r-- | include/functions.h | 1 | ||||
| -rw-r--r-- | include/kinstone.h | 18 | ||||
| -rw-r--r-- | include/npc.h | 121 | ||||
| -rw-r--r-- | include/npc/zelda.h | 20 | ||||
| -rw-r--r-- | include/physics.h | 6 | ||||
| -rw-r--r-- | include/script.h | 4 |
7 files changed, 102 insertions, 72 deletions
diff --git a/include/common.h b/include/common.h index 011e5a8a..871e5f05 100644 --- a/include/common.h +++ b/include/common.h @@ -120,8 +120,8 @@ void sub_0801E1EC(u32, u32, u32); void sub_0801DD58(u32, u32); void sub_0801E1B8(u32, u32); void AddKinstoneToBag(u32); -void sub_0801DFB4(struct Entity_*, u32, u32, u32); -u32 sub_0801E00C(void); +void InitializeFuseInfo(struct Entity_* entity, u32 textIndex, u32 cancelledTextIndex, u32 fusingTextIndex); +u32 PerformFuseAction(void); bool32 CheckFusionMapMarkerDisabled(u32); u32 sub_0801DB94(void); u32 GetRandomSharedFusion(u8*); diff --git a/include/functions.h b/include/functions.h index 0e7b79f8..a770563b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -98,7 +98,6 @@ extern void sub_0805EC60(Entity*); extern void InitPlayerMacro(PlayerMacroEntry*); extern u32* sub_0805F25C(u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); -extern void sub_08060158(Entity*); extern void sub_0806D0B0(Entity*); extern bool32 sub_080806BC(u32, u32, u32, u32); extern void sub_0808091C(const ScreenTransitionData* screenTransition, u32 transitionType); diff --git a/include/kinstone.h b/include/kinstone.h index ac6b9b83..c5b63874 100644 --- a/include/kinstone.h +++ b/include/kinstone.h @@ -6,17 +6,27 @@ extern void sub_08018C58(u32); +typedef enum { + FUSION_STATE_0, // fusion was not yet started + FUSION_STATE_1, // failed? + FUSION_STATE_2, // successful? + FUSION_STATE_3, // fusion is being performed + FUSION_STATE_4, // player has closed the first messagebox + FUSION_STATE_5, // fusion declined by the player + FUSION_STATE_6, // Successful, but not yet finished? +} FusionState; + typedef struct { - u8 _0; + u8 fusionState; /** @see FusionState */ u8 action; u8 _2; u8 kinstoneId; u8 prevUpdatePriority; u8 _5; u16 textIndex; - u16 _8; - u16 _a; - Entity* ent; + u16 cancelledTextIndex; + u16 fusingTextIndex; + Entity* entity; } FuseInfo; static_assert(sizeof(FuseInfo) == 0x10); extern FuseInfo gFuseInfo; diff --git a/include/npc.h b/include/npc.h index 6b9e5cb5..525cc5d1 100644 --- a/include/npc.h +++ b/include/npc.h @@ -73,7 +73,7 @@ s32 GetFacingDirectionInRectRadius(Entity* ent, u32 x, u32 y); void sub_0806EE04(Entity* ent, void* a2, u32 a3); u32 sub_0806EE20(Entity* ent); s32 sub_0806F078(Entity* ent, s32 a2); -void sub_0806F118(Entity* ent); +void InitializeNPCFusion(Entity* ent); void MarkFuserDone(Entity* ent); void ShowNPCDialogue(Entity* ent, const Dialog* dia); @@ -85,7 +85,6 @@ void CollideFollowers(void); // TODO move? void AddInteractableWhenBigFuser(Entity* ent, u32 kinstoneId); -u32 sub_0806F5A4(u32); u32 GetFusionToOffer(Entity*); void AddInteractableWhenBigObject(Entity*); void sub_0807000C(Entity*); @@ -222,23 +221,23 @@ enum NPC { /*0x7f*/ NPC_NONE_39, }; -void Gentari(Entity*); +void Gentari(); void Gentari_Fusion(Entity*); -void Festari(Entity*); -void Festari_Fusion(Entity*); -void ForestMinish(Entity*); +void Festari(); +void Festari_Fusion(); +void ForestMinish(); void ForestMinish_Head(Entity*); void ForestMinish_Fusion(Entity*); -void Postman(Entity*); +void Postman(); void Postman_Fusion(Entity*); -void NPC5(Entity*); +void NPC5(); void Townsperson(Entity*); void Townsperson_Head(Entity*); void Townsperson_Fusion(Entity*); -void Kid(Entity*); +void Kid(); void Kid_Head(Entity*); void Kid_Fusion(Entity*); -void Guard(Entity*); +void Guard(); void Guard_Head(Entity*); void NPC9(Entity*); void Stamp(Entity*); @@ -246,90 +245,90 @@ void Maid(Entity*); void Maid_Head(Entity*); void Marcy(Entity*); void Wheaton(Entity*); -void Pita(Entity*); +void Pita(); void MinishEzlo(Entity*); void MinishEzlo_Head(Entity*); void Mailbox(Entity*); void Beedle(Entity*); void Beedle_Head(Entity*); -void Brocco(Entity*); +void Brocco(); void Brocco_Fusion(Entity*); -void SittingPerson(Entity*); +void SittingPerson(); void SittingPerson_Head(Entity*); void SittingPerson_Fusion(Entity*); -void Pina(Entity*); +void Pina(); void Pina_Fusion(Entity*); -void Din(Entity*); +void Din(); void Din_Fusion(Entity*); -void Nayru(Entity*); +void Nayru(); void Nayru_Fusion(Entity*); -void Farore(Entity*); +void Farore(); void Farore_Fusion(Entity*); -void Sturgeon(Entity*); +void Sturgeon(); void Sturgeon_Head(Entity*); void Sturgeon_Fusion(Entity*); void TingleSiblings(Entity*); void TingleSiblings_Fusion(Entity*); -void Stockwell(Entity*); -void Talon(Entity*); +void Stockwell(); +void Talon(); void Talon_Head(Entity*); void Talon_Fusion(Entity*); -void Malon(Entity*); +void Malon(); void Malon_Fusion(Entity*); -void Epona(Entity*); -void Epona_Fusion(Entity*); +void Epona(); +void Epona_Fusion(); void MilkCart(Entity*); -void GhostBrothers(Entity*); +void GhostBrothers(); void GhostBrothers_Fusion(Entity*); -void Smith(Entity*); +void Smith(); void Smith_Head(Entity*); void Smith_Fusion(Entity*); -void NPC23(Entity*); -void KingDaltus(Entity*); +void NPC23(); +void KingDaltus(); void KingDaltus_Fusion(Entity*); -void MinisterPotho(Entity*); +void MinisterPotho(); void MinisterPotho_Fusion(Entity*); void NPC26(Entity*); void Vaati(Entity*); void Zelda(Entity*); -void Mutoh(Entity*); +void Mutoh(); void Mutoh_Head(Entity*); void Mutoh_Fusion(Entity*); -void Carpenter(Entity*); +void Carpenter(); void Carpenter_Head(Entity*); void Carpenter_Fusion(Entity*); -void CastorWildsStatue(Entity*); +void CastorWildsStatue(); void CastorWildsStatue_Fusion(Entity*); -void Cat(Entity*); +void Cat(); void Cat_Fusion(Entity*); -void MountainMinish(Entity*); +void MountainMinish(); void MountainMinish_Head(Entity*); void MountainMinish_Fusion(Entity*); void ZeldaFollower(Entity*); void Melari(Entity*); void Melari_Head(Entity*); void Melari_Fusion(Entity*); -void BladeBrothers(Entity*); +void BladeBrothers(); void BladeBrothers_Fusion(Entity*); -void Cow(Entity*); -void Cow_Fusion(Entity*); -void Goron(Entity*); +void Cow(); +void Cow_Fusion(); +void Goron(); void Goron_Fusion(Entity*); void GoronMerchant(Entity*); -void Gorman(Entity*); +void Gorman(); void Gorman_Head(Entity*); -void Dog(Entity*); -void Dog_Head(Entity*); -void Dog_Fusion(Entity*); -void Syrup(Entity*); +void Dog(); +void Dog_Head(); +void Dog_Fusion(); +void Syrup(); void Syrup_Head(Entity*); -void Rem(Entity*); -void TownMinish(Entity*); -void TownMinish_Head(Entity*); +void Rem(); +void TownMinish(); +void TownMinish_Head(); void TownMinish_Fusion(Entity*); -void Librari(Entity*); +void Librari(); void Librari_Fusion(Entity*); -void Percy(Entity*); +void Percy(); void Percy_Head(Entity*); void Percy_Fusion(Entity*); void VaatiReborn(Entity*); @@ -343,26 +342,26 @@ void Dampe(Entity*); void Dampe_Fusion(Entity*); void DrLeft(Entity*); void KingGustaf(Entity*); -void Gina(Entity*); +void Gina(); void Gina_Fusion(Entity*); void Simon(Entity*); -void Anju(Entity*); -void Anju_Fusion(Entity*); -void Mama(Entity*); +void Anju(); +void Anju_Fusion(); +void Mama(); void Mama_Head(Entity*); void Mama_Fusion(Entity*); void Emma(Entity*); -void Teachers(Entity*); +void Teachers(); void Teachers_Head(Entity*); void Teachers_Fusion(Entity*); void WindTribespeople(Entity*); void WindTribespeople_Head(Entity*); void WindTribespeople_Fusion(Entity*); -void Gregal(Entity*); +void Gregal(); void Gregal_Fusion(Entity*); -void MayorHagen(Entity*); +void MayorHagen(); void MayorHagen_Fusion(Entity*); -void BigGoron(Entity*); +void BigGoron(); void Ezlo(Entity*); void NPC4E(Entity*); void NPC4E_Fusion(Entity*); @@ -370,18 +369,18 @@ void NPC4F(Entity*); void ClothesRack(Entity*); void PicolyteBottle(Entity*); void SmallTownMinish(Entity*); -void HurdyGurdyMan(Entity*); +void HurdyGurdyMan(); void HurdyGurdyMan_Head(Entity*); void HurdyGurdyMan_Fusion(Entity*); -void Cucco(Entity*); +void Cucco(); void Cucco_Fusion(Entity*); -void CuccoChick(Entity*); -void CuccoChick_Fusion(Entity*); +void CuccoChick(); +void CuccoChick_Fusion(); void FusionMenuNPC(Entity*); void FusionMenuNPC_Head(Entity*); void Phonograph(Entity*); -void NPC58(Entity*); -void NPC58_Head(Entity*); +void NPC58(); +void NPC58_Head(); extern void (*const gNPCFunctions[128][3])(Entity*); diff --git a/include/npc/zelda.h b/include/npc/zelda.h new file mode 100644 index 00000000..71579586 --- /dev/null +++ b/include/npc/zelda.h @@ -0,0 +1,20 @@ +#ifndef ZELDA_H +#define ZELDA_H + +#include "entity.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unused[24]; + /*0x80*/ u16 unk_80; +} ZeldaEntity; + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ s8 unk_68; + /*0x69*/ s8 unk_69; + /*0x6a*/ u8 unused[10]; + /*0x74*/ u16 unk_74; +} ZeldaFollowerEntity; + +#endif // ZELDA_H diff --git a/include/physics.h b/include/physics.h index 9afd0f9e..36b6e594 100644 --- a/include/physics.h +++ b/include/physics.h @@ -25,7 +25,6 @@ bool32 EntityWithinDistance(Entity*, s32, s32, s32); u32 sub_0806FCA0(Entity*, Entity*); u32 sub_0806F58C(Entity*, Entity*); u32 PointInsideRadius(s32 x, s32 y, s32 radius); -u32 sub_0806F5A4(u32 idx); bool32 sub_0806F3E4(Entity*); void LinearMoveUpdate(Entity*); bool32 sub_0806FD54(Entity*); @@ -35,7 +34,10 @@ u32 sub_0806F730(Entity*); bool32 sub_0806F520(Entity*); void sub_0806F4E8(Entity*); bool32 sub_0806FC80(Entity*, Entity*, s32); -u32 sub_0806F5B0(u32); +/** Maps the direction to an animation state 0 to 3. */ +u32 GetAnimationStateForDirection4(u32 direction); +/** Maps the direction to an animation state 0 to 8. */ +u32 GetAnimationStateForDirection8(u32 direction); u32 sub_0806F824(Entity*, Entity*, s32, s32); u32 sub_0806F948(Entity*); void sub_0806FBB4(Entity*); diff --git a/include/script.h b/include/script.h index c6e41f17..4fbb2eef 100644 --- a/include/script.h +++ b/include/script.h @@ -51,7 +51,7 @@ extern u32 GetNextScriptCommandHalfwordAfterCommandMetadata(u16*); void UnloadCutsceneData(Entity* entity); void StartPlayerScript(Script* script); -void sub_0807DD50(Entity* entity); +void InitScriptForNPC(Entity* entity); void sub_0807DD64(Entity* entity); void sub_0807DD80(Entity* entity, Script* script); void sub_0807DEDC(Entity*, ScriptExecutionContext*, u32, u32); @@ -60,7 +60,7 @@ ScriptExecutionContext* StartCutscene(Entity* entity, Script* script); void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*)); void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context); void HandleEntity0x82Actions(Entity* entity); -void sub_0807DD94(Entity*, void (*function)(Entity*, ScriptExecutionContext*)); +void ExecuteScriptAndHandleAnimation(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*)); ScriptExecutionContext* CreateScriptExecutionContext(void); void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, Script* script); |
