Merge branch 'master' into tilemap-docs

This commit is contained in:
octorock
2023-12-28 14:59:23 +01:00
495 changed files with 14619 additions and 16191 deletions
+10
View File
@@ -7,6 +7,16 @@
#define MAX_ROOMS 64
typedef enum {
PT_TREESTUMP,
PT_ROCK,
PT_2,
PT_DUNGEON,
PT_JAR,
PT_5,
PT_TOD,
} PortalTypes;
typedef struct {
u16 pixel_width;
u16 pixel_height;
+1 -1
View File
@@ -20,7 +20,7 @@ extern void sub_08001290(struct Entity_*, u32);
extern void GenericKnockback(struct Entity_*);
extern u32 GetFuserId(struct Entity_*);
extern u32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
extern u32 GravityUpdate(struct Entity_*, u32);
extern u32 GravityUpdate(struct Entity_* entity, u32 gravity);
extern u32 CheckOnScreen(struct Entity_*);
extern bool32 EntityInRectRadius(struct Entity_*, struct Entity_*, u32, u32);
extern void UpdateAnimationVariableFrames(struct Entity_*, u32);
+2 -2
View File
@@ -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*);
+8
View File
@@ -13,6 +13,14 @@
#include "projectile.h"
bool32 EnemyInit(Entity* this);
/**
* 0: _OnTick
* 1: _OnCollision
* 2: _OnKnockback
* 3: _OnDeath
* 4: _OnConfused
* 5: _OnGrabbed
*/
u32 GetNextFunction(Entity*);
void EnemyFunctionHandler(Entity*, EntityActionArray);
void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
+1 -1
View File
@@ -20,7 +20,7 @@ typedef struct {
static_assert(sizeof(OctorokBossHeap) == 0x30);
struct OctorokBossEntity {
Entity base;
/*0x00*/ Entity base;
/*0x68*/ union SplitHWord field_0x68;
/*0x6a*/ union SplitHWord field_0x6a;
/*0x6c*/ union SplitHWord field_0x6c;
-1
View File
@@ -91,7 +91,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);
+7
View File
@@ -143,4 +143,11 @@ union SplitHWord {
/* forward decls */
struct Entity_;
/**
* bitset macros
*/
#define BIT(bit) (1 << (bit))
#define IS_BIT_SET(value, bit) ((value)&BIT(bit))
#endif // GLOBAL_H
-1
View File
@@ -6,7 +6,6 @@
#include "player.h"
void CreateItemEntity(u32, u32, u32);
void sub_08081404(Entity*, u32);
extern void ExecuteItemFunction(ItemBehavior* this, u32 index);
extern void ItemDebug(ItemBehavior*, u32);
+14 -4
View File
@@ -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;
+60 -61
View File
@@ -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*);
+20
View File
@@ -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
+2 -2
View File
@@ -134,7 +134,7 @@ typedef enum {
EZLO_CAP_FLYING,
GIANT_TWIG,
OBJECT_63,
THUNDERBOLD,
THUNDERBOLT,
LADDER_HOLE,
WATER_DROP_OBJECT,
GLEEROK_PARTICLE,
@@ -330,7 +330,7 @@ void SwordsmanNewsletter();
void EzloCapFlying();
void GiantTwig();
void Object63();
void Thunderbold();
void Thunderbolt();
void LadderHoleInBookshelf();
void WaterDropObject();
void GleerokParticle();
+12
View File
@@ -0,0 +1,12 @@
#ifndef CUTSCENEORCHESTRATOR_H
#define CUTSCENEORCHESTRATOR_H
#include "script.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unused1[28];
/*0x84*/ ScriptExecutionContext* context;
} CutsceneOrchestratorEntity;
#endif // CUTSCENEORCHESTRATOR_H
+18
View File
@@ -0,0 +1,18 @@
#ifndef ITEMONGROUND_H
#define ITEMONGROUND_H
#include "entity.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68;
/*0x69*/ u8 unk_69;
/*0x6a*/ u8 unk_6a;
/*0x6b*/ u8 unused1[1];
/*0x6c*/ u16 unk_6c;
/*0x6e*/ u16 unk_6e;
/*0x70*/ u8 unused2[22];
/*0x86*/ u16 unk_86;
} ItemOnGroundEntity;
#endif // ITEMONGROUND_H
+21
View File
@@ -0,0 +1,21 @@
#ifndef LILYPADLARGE_H
#define LILYPADLARGE_H
#include "entity.h"
typedef struct {
Entity base;
u8 unk_68[4];
s32 unk_6c;
s32 unk_70;
s16 unk_74;
s16 unk_76;
union SplitWord unk_78;
union SplitWord unk_7c;
u8 unk_80[2];
u16 unk_82;
u8 unk_84;
u8 unk_85;
} LilypadLargeEntity;
#endif // LILYPADLARGE_H
+4 -2
View File
@@ -25,7 +25,6 @@ bool32 EntityWithinDistance(Entity* entity, s32 x, s32 y, s32 distance);
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*);
+184 -5
View File
@@ -95,6 +95,12 @@ typedef enum {
CONTROL_DISABLED,
} PlayerControlMode;
typedef enum {
DIR_DIAGONAL = 0x4,
DIR_NOT_MOVING_CHECK = 0x80,
DIR_NONE = 0xff,
} PlayerDirections;
typedef enum {
PL_BUSY = 0x1,
PL_FLAGS2 = 0x2,
@@ -125,6 +131,8 @@ typedef enum {
PL_SWORD_THRUST = 0x8000000,
PL_USE_OCARINA = 0x10000000,
PL_CLIMBING = 0x20000000,
PL_FLAGS40000000 = 0x40000000,
PL_FLAGS80000000 = 0x80000000,
} PlayerFlags;
enum PlayerItemId {
@@ -201,7 +209,8 @@ typedef enum {
SURFACE_AUTO_LADDER,
SURFACE_CLIMB_WALL,
SURFACE_2C,
SURFACE_2D // reuses SurfaceAction_Dust
SURFACE_2D, // reuses SurfaceAction_Dust
SURFACE_FF = 0xff,
} SurfaceType;
typedef enum {
@@ -275,6 +284,174 @@ typedef enum {
SWORD_MOVE_LOW_BEAM,
} SwordMove;
typedef enum {
ANIM_DEFAULT = 0x100,
ANIM_WALK = 0x104,
ANIM_SWORD = 0x108,
ANIM_BOUNCE = 0x114,
ANIM_SPINATTACK = 0x124,
ANIM_GREATSPIN = 0x128,
ANIM_ROLLATTACK_SPIN = 0x12c,
ANIM_ROLLATTACK_SLIDE = 0x130,
ANIM_ROLLATTACK_END = 0x134,
ANIM_SHIELD_PULLOUT = 0x158,
ANIM_SHIELD_WALK = 0x160,
ANIM_SHIELD = 0x164,
ANIM_SWORD_CHARGE = 0x168,
ANIM_SWORD_CHARGE_WALK = 0x16c,
ANIM_SWORD_CHARGE_BUMP = 0x170,
ANIM_DOWN_THRUST = 0x174,
ANIM_FALL = 0x1b8,
ANIM_GET_ITEM_BIG = 0x1b9,
ANIM_FALL_MINISH = 0x1ba,
ANIM_DIE1 = 0x1bc,
ANIM_GET_WHITE_SWORD = 0x1e2,
ANIM_BOW_PULLOUT = 0x21c,
ANIM_TRAPPED = 0x25c,
ANIM_BOW_SHOOT = 0x27c,
ANIM_BOW_CHARGE = 0x280,
ANIM_BOW_WALK = 0x284,
ANIM_ROCS_CAPE = 0x288,
ANIM_SWIM_STILL = 0x28c,
ANIM_SWIM_MOVE = 0x290,
ANIM_FROZEN = 0x294,
ANIM_DASH = 0x298,
ANIM_ELECTROCUTED = 0x29c,
ANIM_ROLL = 0x2ac,
ANIM_DIE2 = 0x2bd,
ANIM_DIVE = 0x2be,
ANIM_IN_LAVA = 0x2c1,
ANIM_PORTAL = 0x2c2,
ANIM_PORTAL_SHRINK = 0x2c3,
ANIM_DROWN_RESPAWN = 0x2ce,
ANIM_CLIMB1_UP = 0x2cf,
ANIM_CLIMB2_UP = 0x2d0,
ANIM_CLIMB1_DOWN = 0x2d1,
ANIM_CLIMB2_DOWN = 0x2d2,
ANIM_CLIMB_FROM_TOP = 0x2d3,
ANIM_CLIMB_LEFT = 0x2d4,
ANIM_CLIMB_RIGHT = 0x2d5,
ANIM_CLIMB_TO_TOP = 0x2d6,
ANIM_BOTTLE_DRINK = 0x2df,
ANIM_GET_ITEM_SMALL = 0x2e0,
ANIM_PICKUP = 0x338,
ANIM_PUSH = 0x33c,
ANIM_PULL = 0x340,
ANIM_THROW = 0x344,
ANIM_CARRY = 0x348,
ANIM_PULL2 = 0x34c,
ANIM_CARRY_STAND = 0x350,
ANIM_GRAB = 0x378,
ANIM_FALL_ON_BACK = 0x3a0,
ANIM_LAUNCHED = 0x3c0,
ANIM_EZLO_SEARCH = 0x3c5,
ANIM_EZLO_APPEAR_LEFT = 0x3c6,
ANIM_EZLO_EYES_UP = 0x3c7,
ANIM_EZLO_HEAD_DOWN = 0x3c8,
ANIM_EZLO_LEAVE_LEFT = 0x3c9,
ANIM_EZLO_APPEAR_RIGHT = 0x3ca,
ANIM_EZLO_EYES_MIDDLE = 0x3cc,
ANIM_EZLO_LEAVE_RIGHT = 0x3cd,
ANIM_DEFAULT_NOCAP = 0x400,
ANIM_WALK_NOCAP = 0x404,
ANIM_SWORD_NOCAP = 0x408,
ANIM_SHIELD_PULLOUT_NOCAP = 0x40c,
ANIM_SHIELD_WALK_NOCAP = 0x410,
ANIM_SHIELD_NOCAP = 0x414,
ANIM_BOUNCE_NOCAP = 0x418,
ANIM_HOP_NOCAP = 0x41c,
ANIM_JUMP_NOCAP = 0x420,
ANIM_LAND_NOCAP = 0x424,
ANIM_ROLL_NOCAP = 0x438,
ANIM_DROWN_NOCAP = 0x44c,
ANIM_FALL_NOCAP = 0x458,
ANIM_DIE1_NOCAP = 0x459,
ANIM_DIE2_NOCAP = 0x45a,
ANIM_GET_ITEM_BIG_NOCAP = 0x45b,
ANIM_GET_ITEM_SMALL_NOCAP = 0x45e,
ANIM_GET_ITEM_SWORD = 0x45f,
ANIM_GUSTJAR_PULLOUT = 0x500,
ANIM_GUSTJAR_SUCK = 0x504,
ANIM_MOLEMITTS_FLOOR = 0x508,
ANIM_MOLEMITTS_DIG = 0x50c,
ANIM_GUSTJAR_END = 0x510,
ANIM_GUSTJAR_BLOW = 0x514,
ANIM_GUSTJAR_WALK = 0x518,
ANIM_MOLEMITTS_CLANG = 0x51c,
ANIM_MOLEMITTS_MISS = 0x520,
ANIM_GUSTJAR_524 = 0x524,
ANIM_ENTER_POT = 0x52c,
ANIM_IN_POT = 0x530,
ANIM_LANTERN_LIGHT = 0x600,
ANIM_LANTERN_ON = 0x604,
ANIM_LANTERN = 0x608,
ANIM_LANTERN_BURN = 0x60c,
ANIM_BOTTLE_POUR = 0x610,
ANIM_BOTTLE_SWING = 0x614,
ANIM_BOTTLE_SWING_END = 0x618,
ANIM_FALL_IN_HOLE = 0x61c,
ANIM_IN_HOLE = 0x620,
ANIM_SPRING_JUMP = 0x624,
ANIM_CANE = 0x628,
ANIM_PARACHUTE_ACTIVATE = 0x700,
ANIM_BOOMERANG_MAGIC = 0x704,
ANIM_PARACHUTE = 0x708,
ANIM_MINECART_PAUSE = 0x70c,
ANIM_MINECART = 0x710,
ANIM_PARACHUTE_TURN_RIGHT = 0x714,
ANIM_PARACHUTE_TURN_OPPOSITE = 0x718,
ANIM_PARACHUTE_TURN_LEFT = 0x71c,
ANIM_PARACHUTE_TURN2_RIGHT = 0x720,
ANIM_PARACHUTE_TURN2_OPPOSITE = 0x724,
ANIM_PARACHUTE_TURN2_LEFT = 0x728,
ANIM_DROWN = 0x72c,
ANIM_PARACHUTE_FALL = 0x730,
ANIM_PUT_ON_EZLO = 0x734,
ANIM_SLEEP = 0x736,
ANIM_WAKEUP = 0x737,
ANIM_PORTAL_ACTIVATE = 0x738,
ANIM_SLEEP_NOCAP = 0x73a,
ANIM_WAKEUP_NOCAP = 0x73b,
ANIM_GROW = 0x73c,
ANIM_HOP = 0x80c,
ANIM_JUMP = 0x810,
ANIM_BOOMERANG = 0x818,
ANIM_LAND = 0x820,
ANIM_MOLDWORM_CAPTURED = 0x8b0,
ANIM_GET_NEW_SWORD = 0x8bf,
ANIM_OCARINA = 0x8e1,
ANIM_GET_LAST_SWORD = 0x8e3,
ANIM_GET_NEWCAP = 0x8e4,
ANIM_PICKUP_NOCAP = 0x928,
ANIM_CARRY_STAND_NOCAP = 0x92c,
ANIM_THROW_NOCAP = 0x930,
ANIM_CARRY_NOCAP = 0x934,
ANIM_PUSH_NOCAP = 0x93c,
ANIM_PULL_START_NOCAP = 0x940,
ANIM_PULL_NOCAP = 0x944,
ANIM_GRAB_NOCAP = 0x948,
ANIM_FALL_IN_HOLE_NOCAP = 0x950,
ANIM_IN_HOLE_NOCAP = 0x954,
ANIM_SWORD_MINISH = 0xc00,
ANIM_WALK_MINISH = 0xc04,
ANIM_ROLL_MINISH = 0xc08,
ANIM_SWIM_MINISH = 0xc0c,
ANIM_DASH_MINISH = 0xc10,
ANIM_DASH_CHARGE_MINISH = 0xc14,
ANIM_BOUNCE_MINISH = 0xc18,
ANIM_DROWN_MINISH = 0xc19,
ANIM_DIE1_MINISH = 0xc1a,
ANIM_DIE2_MINISH = 0xc1b,
ANIM_DIVE_MINISH = 0xc1c,
} PlayerAnimation;
typedef enum {
PAS_NORTH,
PAS_EAST,
PAS_SOUTH,
PAS_WEST,
} PlayerAnimationState;
typedef struct {
/*0x00*/ u8 prevAnim;
/*0x01*/ u8 grab_status;
@@ -304,7 +481,8 @@ typedef struct {
/*0x1c*/ u8 field_0x1c;
/*0x1d*/ u8 gustJarSpeed;
/*0x1e*/ u8 dash_state;
/*0x1f*/ u8 field_0x1f[3];
/*0x1f*/ u8 field_0x1f[2];
/*0x21*/ u8 bow_state;
/*0x22*/ u16 tilePosition;
/*0x24*/ u16 tileType;
/*0x26*/ u8 swim_state; /**< Is the player swimming? 0x80 for diving */
@@ -354,20 +532,21 @@ typedef struct {
/*0x05*/ u8 arrowCount;
/*0x06*/ u8 bombBagType;
/*0x07*/ u8 quiverType;
/*0x08*/ u8 filler[2];
/*0x08*/ u8 figurineCount;
/*0x09*/ u8 _hasAllFigurines;
/*0x0a*/ u8 charm;
/*0x0b*/ u8 picolyteType;
/*0x0c*/ u8 itemButtons[2];
/*0x0e*/ u8 bottles[4];
/*0x12*/ u8 effect;
/*0x13*/ u8 hasAllFigurines;
/*0x14*/ u8 filler3[4];
/*0x14*/ u8 filler14[4];
/*0x18*/ u16 rupees;
/*0x1a*/ u16 shells;
/*0x1c*/ u16 charmTimer;
/*0x1e*/ u16 picolyteTimer;
/*0x20*/ u16 effectTimer;
/*0x22*/ u8 filler4[6];
/*0x22*/ u8 filler22[2];
} Stats;
#define SLOT_A 0
+12 -12
View File
@@ -16,31 +16,31 @@ void DirtBallProjectile(Entity*);
void WindProjectile(Entity*);
void FireProjectile(Entity*);
void IceProjectile(Entity*);
void GleerokProjectile(Entity*);
void GleerokProjectile();
void KeatonDagger(Entity*);
void GuardLineOfSight(Entity*);
void ArrowProjectile(Entity*);
void MazaalEnergyBeam(Entity*);
void OctorokBossProjectile(Entity*);
void OctorokBossProjectile();
void StalfosProjectile(Entity*);
void LakituCloudProjectile(Entity*);
void LakituLightning(Entity*);
void MandiblesProjectile(Entity*);
void RemovableDust(Entity*);
void SpiderWeb(Entity*);
void MandiblesProjectile();
void RemovableDust();
void SpiderWeb();
void TorchTrapProjectile(Entity*);
void GuruguruBarProjectile(Entity*);
void V1DarkMagicProjectile(Entity*);
void BallAndChain(Entity*);
void V1FireProjectile(Entity*);
void V1DarkMagicProjectile();
void BallAndChain();
void V1FireProjectile();
void CannonballProjectile(Entity*);
void V1EyeLaser(Entity*);
void V1EyeLaser();
void Winder(Entity*);
void SpikedRollers(Entity*);
void V2Projectile(Entity*);
void V2Projectile();
void V3HandProjectile(Entity*);
void V3ElectricProjectile(Entity*);
void GyorgTail(Entity*);
void V3ElectricProjectile();
void GyorgTail();
void GyorgMaleEnergyProjectile(Entity*);
void V3TennisBallProjectile(Entity*);
+2 -2
View File
@@ -5,8 +5,8 @@
#define WINDER_NUM_SEGMENTS 8
typedef struct {
Entity base;
s16 positions[2 * WINDER_NUM_SEGMENTS];
/*0x00*/ Entity base;
/*0x68*/ s16 positions[2 * WINDER_NUM_SEGMENTS];
} WinderEntity;
#endif // WINDER_H
+16 -4
View File
@@ -135,7 +135,7 @@ typedef struct {
/* 0x04 */ s16 start_pos_x;
/* 0x06 */ s16 start_pos_y;
/* 0x08 */ u8 layer;
/* 0x09 */ u8 field_0x15;
/* 0x09 */ u8 filler9;
/* 0x0a */ u8 dungeon_area;
/* 0x0b */ u8 dungeon_room;
/* 0x0c */ s16 dungeon_x;
@@ -144,7 +144,7 @@ typedef struct {
/* 0x12 */ u16 dungeon_map_y;
/* 0x14 */ u16 overworld_map_x;
/* 0x16 */ u16 overworld_map_y;
/* 0x18 */ u8 field_0x24[8];
/* 0x18 */ u8 filler18[8];
} PlayerRoomStatus;
static_assert(sizeof(PlayerRoomStatus) == 0x20);
@@ -157,8 +157,20 @@ typedef struct {
/* 0x0a */ u16 stairs_idx; // seems to be a tile type @see MetaTileType, set in UpdateDoorTransition()
/* 0x0c */ PlayerRoomStatus player_status;
/* 0x2c */ u8 entity_update_type; // differentiates entity priority on kinstone menu?
/* 0x2d */ u8 field_0x2c[0x8];
/* 0x2d */ u8 field2d;
/* 0x2e */ u8 location;
/* 0x2f */ u8 field2f;
/* 0x30 */ u8 field30;
/* 0x31 */ u8 field31;
/* 0x32 */ u8 field32;
/* 0x33 */ u8 field33;
#if defined(JP) || defined(EU)
/* 0x34 */ u8 hint_height;
/* 0x35 */ u8 field35;
#else
/* 0x34 */ u8 field35;
/* 0x35 */ u8 hint_height;
#endif
/* 0x36 */ u16 hint_idx;
/* 0x38 */ u8 field_0x38;
/* 0x39 */ u8 field_0x39;
@@ -239,7 +251,7 @@ void* GetRoomProperty(u32 area, u32 room, u32 property);
bool32 LoadFixedGFX(Entity*, u32);
void UnloadGFXSlots(Entity*);
void sub_0804B3C4(TileEntity*);
void LoadSmallChestTile2(TileEntity*);
void sub_0804B0B0(u32 arg0, u32 arg1);
void DoExitTransition(const ScreenTransitionData* data);
+56 -39
View File
@@ -28,52 +28,69 @@ typedef enum {
*/
extern SaveResult HandleSave(u32 idx);
/**
* Contains save data regarding kinstones
*/
typedef struct {
u8 unused[2]; /**< unused */
u8 didAllFusions; /**< completed all 100 kinstone fusions */
u8 fusedCount; /**< number of kinstones fused */
u8 types[19]; /**< item id for each kinstone type present in kinstone bag */
u8 amounts[19]; /**< amount of each kinstone type above */
u8 filler[3]; /**< unused filler */
u8 fuserProgress[128]; /**< indexed by fuser id, incremented after fusion */
u8 fuserOffers[128]; /**< available kinstone fusion for each fuser */
u8 fusedKinstones[13]; /**< bitfield for fused kinstones
* @see CheckKinstoneFused */
u8 fusionUnmarked[13]; /**< bitfield for disabled fusion map markers
* @see CheckFusionMapMarkerDisabled */
} KinstoneSave;
/**
* Contains all information about a save file.
* The contents of this structure are read from and written to EEPROM.
*/
typedef struct {
/*0x000*/ u8 invalid; /**< File is invalid. */
/*0x001*/ u8 initialized; /**< File is initialized. */
/*0x002*/ u8 msg_speed; /**< Message speed. */
/*0x003*/ u8 brightness; /**< Brightness. */
/*0x004*/ u8 filler4[0x2];
/*0x006*/ u8 saw_staffroll;
/*0x007*/ u8 unk7; // TODO rolling barrel state?
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 field_0x9[0x17];
/*0x020*/ u16 field_0x20;
/*0x022*/ u8 field_0x22[0x1e];
/*0x040*/ u32 windcrests; /**< Windcrest flags. bits 0 - 0x10: Visited area of the overworld. Above 0x18: windcrest
activated. */
/*0x044*/ u8 filler44[0xC];
/*0x050*/ u32 unk50;
/*0x054*/ u8 filler54[0x8];
/*0x05C*/ u32 unk5C;
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
/*0x086*/ u8 filler86[0x2];
/*0x000*/ u8 invalid; /**< save file is invalid */
/*0x001*/ u8 initialized; /**< save file is initialized */
/*0x002*/ u8 msg_speed; /**< message speed setting */
/*0x003*/ u8 brightness; /**< brightness setting */
/*0x004*/ u8 filler4[2]; /**< unused filler */
/*0x006*/ u8 saw_staffroll; /**< beat the game and watched the credits */
/*0x007*/ u8 dws_barrel_state; /**< state of the big barrel in DWS, 0 or 2 */
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 available_figurines; /**< figurines available to get */
/*0x00A*/ u8 fillerA[22]; /**< unused filler */
/*0x020*/ u16 map_hints; /**< bitmask, used by subtask MapHint */
/*0x022*/ u8 filler22[30]; /**< unused filler */
/*0x040*/ u32 windcrests; /**< upper 8 bit Windcrest flags @see WindcrestID
* lower bits used for other things */
/*0x044*/ u8 filler44[12]; /**< unused filler */
/*0x050*/ u32 enemies_killed; /**< number of enemies killed */
/*0x054*/ u8 filler54[8]; /**< unused filler */
/*0x05C*/ u32 items_bought; /**< number of items bought in stockwells shop */
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
/*0x086*/ u8 filler86[2]; /**< unused filler */
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
/*0x0A8*/ Stats stats; /**< Player stats. */
/*0x0D0*/ u8 fillerD0[34];
/*0x0F2*/ u8 inventory[36];
/*0x116*/ u8 didAllFusions;
/*0x117*/ u8 fusedKinstoneCount;
/*0x118*/ u8 kinstoneTypes[0x13]; // 0x65-0x75 for each kinstone type present in kinstone bag
/*0x12B*/ u8 kinstoneAmounts[0x13]; // amount of each kinstone type above
/*0x13E*/ u8 filler13E[3];
/*0x141*/ u8 fuserProgress[128]; // indexed by fuser id, incremented after fusion
/*0x1C1*/ u8 fuserOffers[128]; // available kinstone fusion for each fuser
/*0x241*/ u8 fusedKinstones[13]; /**< Bitfield for fused kinstones. @see CheckKinstoneFused */
/*0x24E*/ u8 fusionUnmarked[13]; /**< Bitfield for disabled fusion map markers. @see CheckFusionMapMarkerDisabled */
/*0x25B*/ u8 filler25B;
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
/*0x45C*/ u8 dungeonKeys[0x10]; // TODO Indexed by dungeon id, keys per dungeon
/*0x46C*/ u8 dungeonItems[0x10]; // TODO items in the dungeon. 4: compass, 2: big key, 1: small key
/*0x47C*/ u8 dungeonWarps[0x10]; // TODO indexed by dungeon id, EnableDungeonWarp, IsDungeonWarpActive
/*0x48C*/ u32 timers[7];
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
/*0x4AC*/ u8 filler4ac[0x8];
/*0x0CC*/ u8 fillerCC[2]; /**< unused filler */
/*0x0D0*/ u8 figurines[36]; /**< figurine bitset */
/*0x0F2*/ u8 inventory[34]; /**< 2 bit per item @see Item */
/*0x114*/ KinstoneSave kinstones; /**< save data for kinstones @see KinstoneSave */
/*0x25C*/ u8 flags[0x200]; /**< flags */
/*0x45C*/ u8 dungeonKeys[0x10]; /**< indexed by dungeon id, keys per dungeon */
/*0x46C*/ u8 dungeonItems[0x10]; /**< dungeon items 4: compass, 2: big key, 1: small key */
/*0x47C*/ u8 dungeonWarps[0x10]; /**< indexed by dungeon id */
/*0x48C*/ u32 darknut_timer; /**< timer for darknut fight before Vaati fight */
/*0x490*/ u32 drug_kill_count; /**< "timer" enemy kill count when turning in the last drug quest item */
/*0x494*/ u32 biggoron_timer; /**< timer for biggoron mirror shield */
/*0x498*/ u32 vaati_timer; /**< timer for vaati wrath fight */
/*0x49C*/ u32 timer4; /**< "timer4" unused */
/*0x4A0*/ u32 timer5; /**< "timer5" unused */
/*0x4A4*/ u32 timer6; /**< "timer6" unused */
/*0x4A8*/ u32 demo_timer; /**< timer for US demo version playtime limit */
/*0x4AC*/ u8 filler4ac[8]; /**< unused filler */
} SaveFile;
/**
+2 -2
View File
@@ -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 LookAt(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);
+2 -2
View File
@@ -168,7 +168,7 @@ typedef enum {
SFX_FALL_HOLE,
SFX_86,
SFX_PLY_DIE,
SFX_88,
SFX_GRAB,
SFX_BARREL_RELEASE,
SFX_BARREL_ENTER,
SFX_BARREL_ROLL,
@@ -295,7 +295,7 @@ typedef enum {
SFX_PLACE_OBJ,
SFX_105,
SFX_106,
SFX_107,
SFX_ITEM_GLOVES_AIR,
SFX_108,
SFX_ITEM_GET,
SFX_10A,
+9 -9
View File
@@ -118,14 +118,14 @@ typedef enum {
META_TILE_TYPE_113, // 0x71
META_TILE_TYPE_114, // 0x72
META_TILE_TYPE_115, // 0x73 CHEST
META_TILE_TYPE_116, // 0x74
META_TILE_TYPE_116, // 0x74 CHEST_OPEN
META_TILE_TYPE_117, // 0x75
META_TILE_TYPE_118, // 0x76
META_TILE_TYPE_119, // 0x77
META_TILE_TYPE_120, // 0x78
META_TILE_TYPE_121, // 0x79
META_TILE_TYPE_122, // 0x7a
META_TILE_TYPE_123, // 0x7b
META_TILE_TYPE_118, // 0x76 TORCH
META_TILE_TYPE_119, // 0x77 TORCH_LIT
META_TILE_TYPE_120, // 0x78 PRESSURE_BUTTON
META_TILE_TYPE_121, // 0x79 PRESSURE_BUTTON_PRESSED
META_TILE_TYPE_122, // 0x7a PRESSURE_SQUARE
META_TILE_TYPE_123, // 0x7b PRESSURE_SQUARE_PRESSED
META_TILE_TYPE_124, // 0x7c
META_TILE_TYPE_125, // 0x7d
META_TILE_TYPE_126, // 0x7e
@@ -148,8 +148,8 @@ typedef enum {
META_TILE_TYPE_143, // 0x8f
META_TILE_TYPE_144, // 0x90
META_TILE_TYPE_145, // 0x91
META_TILE_TYPE_146, // 0x92
META_TILE_TYPE_147, // 0x93
META_TILE_TYPE_146, // 0x92 STAIRS_UP
META_TILE_TYPE_147, // 0x93 STAIRS_DOWN
META_TILE_TYPE_148, // 0x94
META_TILE_TYPE_149, // 0x95
META_TILE_TYPE_150, // 0x96
+15
View File
@@ -0,0 +1,15 @@
#ifndef SAVEFILE_WINDCREST_H
#define SAVEFILE_WINDCREST_H
typedef enum WindcrestID {
WINDCREST_MT_CRENEL = 24,
WINDCREST_VEIL_FALLS,
WINDCREST_CLOUD_TOPS,
WINDCREST_HYRULE_TOWN,
WINDCREST_LAKE_HYLIA,
WINDCREST_CASTOR_WILDS,
WINDCREST_SOUTH_HYRULE_FIELD,
WINDCREST_MINISH_WOODS,
} WindcrestID;
#endif // SAVEFILE_WINDCREST_H