summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2024-01-06 12:26:39 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2024-01-06 12:26:39 +0100
commitc3b771a20923b335bbea2ab97a68ac29d04fcc43 (patch)
tree4d9c0857239ae7b7fab16ca5f4907575b7d07510 /include
parent109b1020dcbfa17e80d28c522b5d792f7b3c6d46 (diff)
parent6fb8b41a8e003d0a4997740f4178aeb0c3f24ead (diff)
Merge branch 'master' into tilemap-docs
Diffstat (limited to 'include')
-rw-r--r--include/asm.h14
-rw-r--r--include/collision.h10
-rw-r--r--include/common.h4
-rw-r--r--include/definitions.h4
-rw-r--r--include/enemy.h49
-rw-r--r--include/entity.h40
-rw-r--r--include/functions.h18
-rw-r--r--include/map.h2
-rw-r--r--include/message.h10
-rw-r--r--include/player.h30
-rw-r--r--include/room.h4
-rw-r--r--include/tiles.h29
12 files changed, 157 insertions, 57 deletions
diff --git a/include/asm.h b/include/asm.h
index 5c9ce19b..750ed6fd 100644
--- a/include/asm.h
+++ b/include/asm.h
@@ -21,11 +21,21 @@ 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_* entity, u32 gravity);
+enum {
+ BOUNCE_DONE_ALL,
+ BOUNCE_INIT_NEXT,
+ BOUNCE_AIRBORNE,
+};
+u32 BounceUpdate(struct Entity_*, u32 acceleration);
extern u32 CheckOnScreen(struct Entity_*);
extern bool32 EntityInRectRadius(struct Entity_*, struct Entity_*, u32, u32);
extern void UpdateAnimationVariableFrames(struct Entity_*, u32);
-extern u32 sub_080043E8(struct Entity_*);
-extern void sub_08004484(struct Entity_*, struct Entity_*);
+extern u32 GetTileHazardType(struct Entity_*);
+/**
+ * Basic collision, only used between player and dazed enemies.
+ * (Probablity leftover from Four Swords)
+ */
+extern void CalcCollisionStaticEntity(struct Entity_*, struct Entity_*);
extern void ResetCollisionLayer(struct Entity_*);
extern void sub_08004596(struct Entity_*, u32);
extern u32 sub_080045B4(struct Entity_*, u32, u32);
diff --git a/include/collision.h b/include/collision.h
index 76974a25..07701a25 100644
--- a/include/collision.h
+++ b/include/collision.h
@@ -6,6 +6,16 @@
/** Collisions. */
+enum {
+ COL_LANTERN = 0x7,
+ COL_SMALL_GUST = 0x13,
+ COL_BOOMERANG = 0x14,
+ COL_ARROW = 0x15,
+ COL_BIG_GUST = 0x1b,
+ COL_PACCI = 0x1d,
+ COL_SWORD_BEAM = 0x21,
+};
+
typedef enum {
COL_NONE = 0x0,
COL_NORTH_WEST = 0x2,
diff --git a/include/common.h b/include/common.h
index 80b83839..5f620c23 100644
--- a/include/common.h
+++ b/include/common.h
@@ -11,9 +11,9 @@ struct Entity_;
typedef struct {
u16 heldKeys; /**< Keys held since last frame. */
u16 newKeys; /** Keys newly pressed this frame. */
- u16 unk4;
+ u16 menuScrollKeys;
u8 unk6;
- u8 unk7;
+ u8 menuScrollTimer;
} Input;
extern Input gInput; /**< Input instance. */
diff --git a/include/definitions.h b/include/definitions.h
index 7764f76f..088635db 100644
--- a/include/definitions.h
+++ b/include/definitions.h
@@ -22,7 +22,7 @@ typedef struct EnemyDefinition {
u8 health;
s16 speed;
u8 damageType;
- u8 flags2;
+ u8 collisionMask;
} EnemyDefinition;
typedef struct ProjectileDefinition {
@@ -43,7 +43,7 @@ typedef struct ProjectileDefinition {
u8 field0x40;
s16 speed;
u8 damageType;
- u8 flags2;
+ u8 collisionMask;
} ProjectileDefinition;
// Sprite data definition for objects and npcs
diff --git a/include/enemy.h b/include/enemy.h
index bc9f842b..c799f058 100644
--- a/include/enemy.h
+++ b/include/enemy.h
@@ -12,7 +12,35 @@
#include "entity.h"
#include "projectile.h"
-bool32 EnemyInit(Entity* this);
+#define EM_FLAG_BOSS (1 << 0)
+#define EM_FLAG_BOSS_KILLED (1 << 1)
+#define EM_FLAG_HAS_HOME (1 << 2)
+#define EM_FLAG_NO_DEATH_FX (1 << 3)
+#define EM_FLAG_SUPPORT (1 << 4)
+#define EM_FLAG_CAPTAIN (1 << 5)
+#define EM_FLAG_MONITORED (1 << 6)
+
+typedef struct {
+ Entity base;
+ Entity* child;
+ u8 idx;
+ u8 enemyFlags;
+ u8 rangeX;
+ u8 rangeY;
+ s16 homeX;
+ s16 homeY;
+ /*0x74*/ union SplitHWord field_0x74;
+ /*0x76*/ union SplitHWord field_0x76;
+ /*0x78*/ union SplitHWord field_0x78;
+ /*0x7a*/ union SplitHWord field_0x7a;
+ /*0x7c*/ union SplitWord field_0x7c;
+ /*0x80*/ union SplitHWord field_0x80;
+ /*0x82*/ union SplitHWord field_0x82;
+ /*0x84*/ union SplitHWord cutsceneBeh;
+ /*0x86*/ union SplitHWord field_0x86;
+} Enemy;
+
+bool32 EnemyInit(Enemy* this);
/**
* 0: _OnTick
* 1: _OnCollision
@@ -25,16 +53,15 @@ u32 GetNextFunction(Entity*);
void EnemyFunctionHandler(Entity*, EntityActionArray);
void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
void GenericKnockback(Entity*);
-Entity* CreateDeathFx(Entity*, u32, u32);
+void EnemyCreateDeathFX(Enemy*, u32, u32);
void sub_0804A720(Entity*);
bool32 sub_08049FDC(Entity*, u32);
-Entity* Create0x68FX(Entity*, u32);
-void SetChildOffset(Entity*, s32, s32, s32);
-Entity* CreateProjectileWithParent(Entity*, u8, u8);
+Entity* EnemyCreateFX(Entity*, u32);
+void EnemySetFXOffset(Entity*, s32, s32, s32);
+Entity* EnemyCreateProjectile(Entity*, u32, u32);
void GenericDeath(Entity*);
-void sub_08002724(void*, u8*);
void sub_080026C4(u8*, u8*, u8*, u32);
void sub_080026F2(u8*, void*, u8*, u32);
bool32 sub_08049FA0(Entity*);
@@ -43,14 +70,14 @@ bool32 sub_08049F84(Entity*, s32);
Entity* sub_08049DF4(u32);
u32 sub_0804A044(Entity*, Entity*, u32);
s32 sub_080012DC(Entity*);
-u32 sub_080044EC(Entity*, u32);
-void sub_0804AA1C(Entity*);
+
+void EnemyDetachFX(Entity*);
bool32 sub_08049F1C(Entity*, Entity*, s32);
bool32 PlayerInRange(Entity*, u32, s32);
-void sub_0804A4E4(Entity*, Entity*);
+void EnemyCopyParams(Entity*, Entity*);
void GenericKnockback2(Entity*);
-typedef enum {
+enum {
/*0x00*/ OCTOROK,
/*0x01*/ CHUCHU,
/*0x02*/ LEEVER,
@@ -154,7 +181,7 @@ typedef enum {
/*0x64*/ ENEMY_64,
/*0x65*/ TREE_ITEM,
/*0x66*/ ENEMY_66
-} Enemy;
+};
void Octorok();
void Chuchu();
diff --git a/include/entity.h b/include/entity.h
index 188fa5a8..a7370592 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -79,6 +79,40 @@ typedef enum {
DirectionNorthWest = 0x1c, /**< North West. */
} Direction;
+/** Collision layer flags. */
+typedef enum {
+ COL_LAYER_NONE = 0x0,
+ COL_LAYER_BOTTOM = 0x1,
+ COL_LAYER_TOP = 0x2,
+ COL_LAYER_BOTH = 0x3
+} CollisionLayer;
+
+/**
+ * Collision class flags.
+ * An Entity's collision class is determined by the first 3 bits of #Entity::collisionFlags.
+ * What classes an Entity collides with is determined by the bitfield #Entity::collisionMask.
+*/
+typedef enum {
+ COL_CLASS_NONE = 0x0,
+ COL_CLASS_PLAYER = 0x1,
+ COL_CLASS_ITEM = 0x2,
+ COL_CLASS_FLAMMABLE = 0x3,
+ COL_CLASS_4 = 0x4,
+ COL_CLASS_5 = 0x5,
+ COL_CLASS_6 = 0x6,
+ COL_CLASS_PACCI_OBJ = 0x7,
+} CollisionClass;
+
+/** Collision flags. */
+typedef enum {
+ COL_FLAG_3D = 0x10,
+ COL_FLAG_SOLID = 0x20,
+ COL_FLAG_REFLECT = 0x80,
+} CollisionFlags;
+
+#define COLLISION_MASK(layer) (1 << (layer))
+#define CONTACT_NOW 0x80
+
typedef struct {
void* entity1;
void* entity2;
@@ -192,11 +226,11 @@ typedef struct Entity_ {
/*0x2c*/ union SplitWord x; /**< X position, fixed point Q16.16. */
/*0x30*/ union SplitWord y; /**< Y position, fixed point Q16.16. */
/*0x34*/ union SplitWord z; /**< Z position, fixed point Q16.16. */
- /*0x38*/ u8 collisionLayer; /**< Collision layer. */
+ /*0x38*/ u8 collisionLayer; /**< @see CollisionLayer. */
/*0x39*/ s8 interactType;
/*0x3a*/ u8 gustJarState; /**< 4: grabbed by GustJar */
- /*0x3b*/ u8 flags2; /**< Debug visualization related? */
- /*0x3c*/ u8 collisionFlags; /**< Controls collision modes. */
+ /*0x3b*/ u8 collisionMask; /**< Bitfield. @see CollisionClass */
+ /*0x3c*/ u8 collisionFlags; /**< @see CollisionFlags, @see CollisionClass */
/*0x3d*/ s8 iframes; /**< Invulnerability frames. */
/*0x3e*/ u8 knockbackDirection; /**< Direction of knockback. */
/*0x3f*/ u8 hitType; /**< Behavior as a collision sender. */
diff --git a/include/functions.h b/include/functions.h
index 2242287c..eb04e8de 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -14,10 +14,10 @@
// Identified - to be sorted into header files
extern u32 CheckRegionOnScreen(u32, u32, u32, u32);
extern void CopyOAM(void);
-extern void CreateChestSpawner(Entity*);
+extern void CreateLavaDrownFX(Entity*);
extern Entity* CreateGroundItem(Entity*, u32, u32);
extern Entity* CreateGroundItemWithFlags(Entity*, u32, u32, u32);
-extern void CreateItemOnGround(Entity*);
+extern void CreatePitFallFX(Entity*);
extern void CreateMagicSparkles(u32, u32, u32);
extern void CreateMinishEntrance(u32 tile);
extern u32 CreateRandomItemDrop(Entity*, u32);
@@ -50,31 +50,31 @@ extern void SetBGDefaults(void);
extern u32 sub_080B1A0C(Entity*, s32, s32);
extern s32 sub_080012DC(Entity*);
extern void sub_08001318(Entity*);
-extern void sub_080027EA(Entity*, u32, u32);
+extern void LinearMoveDirectionOLD(Entity*, u32, u32);
extern void sub_080028E0(Entity*);
extern u32 sub_080040A2(Entity*);
extern u32 sub_080040D8(Entity*, u8*, s32, s32);
-extern void sub_08004168(Entity*);
+extern void SnapToTile(Entity*);
extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
extern u32 sub_080041DC(Entity*, u32, u32);
extern void sub_080042BA(Entity*, u32);
extern void sub_080042D0(Entity*, u32, u16);
-extern void sub_080043A8(Entity*);
+extern void CreateDrownFX(Entity*);
extern u32 sub_0800445C(Entity*);
extern void sub_080044AE(Entity*, u32, u32);
-extern u32 sub_080044EC(Entity*, u32);
+extern u32 BounceUpdate(Entity*, u32);
extern void sub_0800451C(Entity*);
extern void sub_08004542(Entity*);
extern void sub_080085B0(Entity*);
-extern u16* sub_08008796(Entity*, u32, u32, u32);
-extern void sub_08016AD2(Entity*);
+extern u16* DoTileInteraction(Entity*, u32, u32, u32);
+extern void UpdateCollisionLayer(Entity*);
extern u32 sub_0801766C(Entity*);
extern void sub_0801AFE4(void);
extern void UpdateUIElements(void);
extern void sub_0801E104(void);
extern void sub_08030118(u32);
extern void sub_0803C0AC(Entity*);
-extern void SetRoomTrackerFlag(Entity*);
+extern void EnemyDisableRespawn(Entity*);
extern u32 sub_0804A024(Entity*, u32, u32);
extern u32 IsMinishItem(u32);
extern void DisableRandomDrops();
diff --git a/include/map.h b/include/map.h
index 170555e9..5de80626 100644
--- a/include/map.h
+++ b/include/map.h
@@ -19,7 +19,7 @@ typedef struct {
/*0x0004*/ u16 mapData[0x40 * 0x40];
/**< MetaTileIndex for each tile on the current layer. */ // tilemap data? <-- gMapDataTop / gMapDataBottom
/*0x2004*/ u8 collisionData[0x40 * 0x40]; // more tilemap data? <-- gUnk_0200D654 / gUnk_02027EB4
- /*0x3004*/ u16 mapDataClone[0x40 * 0x40]; // more tilemap data? <-- gUnk_0200E654 / gUnk_02028EB4
+ /*0x3004*/ u16 mapDataOriginal[0x40 * 0x40]; // more tilemap data? <-- gUnk_0200E654 / gUnk_02028EB4
// Tileset
/*0x5004*/ u16 metatileTypes[0x800];
/**< Maps from the MetaTileIndex to the MetaTileType. */ // gMetatileTypesTop, gMetatileTypesBottom
diff --git a/include/message.h b/include/message.h
index 32f9f582..b25e9df5 100644
--- a/include/message.h
+++ b/include/message.h
@@ -18,11 +18,11 @@ typedef struct {
u8 textWindowPosY;
u16 textIndex;
u16 unk2; // HI?
- u32 field_0xc;
- u32 rupees;
- u32 field_0x14;
- u32 field_0x18;
- u32 field_0x1c;
+ u32 flags;
+ u32 rupees; // item price, shells, minigame timer
+ u32 field_0x14; // number of cuccos
+ u32 field_0x18; // unused
+ u32 field_0x1c; // unused
} Message;
extern Message gMessage;
diff --git a/include/player.h b/include/player.h
index 75ba6281..f0032b04 100644
--- a/include/player.h
+++ b/include/player.h
@@ -11,8 +11,8 @@ typedef struct {
/*0x6d*/ u8 unk_6d;
/*0x6e*/ u8 unk_6e;
/*0x6f*/ u8 unk_6f;
- /*0x70*/ Entity* unk_70;
- /*0x74*/ Entity* unk_74;
+ /*0x70*/ Entity* pulledJarEntity;
+ /*0x74*/ Entity* carriedEntity;
/*0x78*/ u8 unk_78;
/*0x79*/ u8 unk_79;
/*0x7a*/ u16 unk_7a;
@@ -300,6 +300,24 @@ typedef enum {
} SwordMove;
typedef enum {
+ PL_JAR_NONE = 0x0,
+ PL_JAR_SUCK = 0x1,
+ PL_JAR_2 = 0x2,
+ PL_JAR_3 = 0x3,
+ PL_JAR_BLAST_INIT = 0x4,
+ PL_JAR_BLAST_UPDATE = 0x5,
+ PL_JAR_BLAST_DONE = 0x6,
+ PL_JAR_ENT_ATTACHED = 0x7,
+} GustJarState;
+
+typedef enum {
+ JAR_CHARGE_NONE = 0,
+ JAR_CHARGE_SMALL = 1,
+ JAR_CHARGE_MID = 2,
+ JAR_CHARGE_BIG = 3,
+} GustJarCharge;
+
+typedef enum {
ANIM_DEFAULT = 0x100,
ANIM_WALK = 0x104,
ANIM_SWORD = 0x108,
@@ -493,8 +511,8 @@ typedef struct {
/*0x18*/ u16 startPosY;
/*0x1a*/ u8 mobility;
/*0x1b*/ u8 sword_state;
- /*0x1c*/ u8 field_0x1c;
- /*0x1d*/ u8 gustJarSpeed;
+ /*0x1c*/ u8 gustJarState;
+ /*0x1d*/ u8 gustJarCharge;
/*0x1e*/ u8 dash_state;
/*0x1f*/ u8 field_0x1f[2];
/*0x21*/ u8 bow_state;
@@ -512,7 +530,7 @@ typedef struct {
/*0x39*/ u8 field_0x39;
/*0x3a*/ u8 field_0x3a;
/*0x3b*/ u8 field_0x3b;
- /*0x3c*/ u8 field_0x3c;
+ /*0x3c*/ u8 killed; /**< Non-zero if player is dead */
/*0x3d*/ u8 moleMittsState;
/*0x3e*/ u8 swordDamage : 2;
/* */ u8 filler14 : 6;
@@ -762,7 +780,7 @@ void PlayerShrinkByRay(void);
// player.s
extern u32 PlayerCheckNEastTile();
-extern u32* sub_08008790(Entity*, u32);
+extern u32* DoTileInteractionHere(Entity*, u32);
extern void UpdateIcePlayerVelocity(Entity*);
extern void sub_08008AC6(Entity*);
extern void sub_08008926(Entity*);
diff --git a/include/room.h b/include/room.h
index 5767f4d7..12bc938f 100644
--- a/include/room.h
+++ b/include/room.h
@@ -89,11 +89,11 @@ typedef struct {
u8 area;
u8 room;
u16 unk_02;
- u32 flags; /**< Flags that can be set on the tracked rooms. Used e.g. by the door mimic. (TODO probably to start in
+ u32 enemyBits; /**< Flags that can be set on the tracked rooms. Used e.g. by the door mimic. (TODO probably to start in
the discovered state?)*/
} RoomMemory;
-extern RoomMemory* gRoomMemoryPtr;
+extern RoomMemory* gCurrentRoomMemory;
extern RoomMemory gRoomMemory[];
// Packets used to store which entities to load in a room
diff --git a/include/tiles.h b/include/tiles.h
index 594ea8ce..638c0791 100644
--- a/include/tiles.h
+++ b/include/tiles.h
@@ -1,6 +1,7 @@
#ifndef TILES_H
#define TILES_H
+
typedef enum {
META_TILE_TYPE_0, // 0x0
META_TILE_TYPE_1, // 0x1
@@ -1558,22 +1559,22 @@ typedef enum {
} SpecialMetaTile;
typedef enum {
- VVV_0 = 0,
- VVV_1 = 1,
- VVV_2 = 2,
- VVV_3 = 3,
- VVV_4 = 4,
- VVV_5 = 5,
- VVV_6 = 6,
- VVV_7 = 7,
- VVV_8 = 8, // -> SURFACE_7
- VVV_9 = 9, // sub_0801FDE4(leever)
- VVV_10 = 10, // sub_0801FDE4(leever), sub_08025AB8(puffstool)
+ VVV_0 = 0, // TILE_ACT_CUT
+ VVV_1 = 1, // TILE_ACT_ROCKBREAKER
+ VVV_2 = 2, // TILE_ACT_BOOMERANG
+ VVV_3 = 3, // TILE_ACT_BOMB
+ VVV_4 = 4, // TILE_ACT_ARROW
+ VVV_5 = 5, // TILE_ACT_GUST
+ VVV_6 = 6, // TILE_ACT_LIFT
+ VVV_7 = 7, // TILE_ACT_FIRE
+ VVV_8 = 8, // TILE_ACT_PLAYER_WALK -> SURFACE_7
+ VVV_9 = 9, // TILE_ACT_ENEMY_WALK sub_0801FDE4(leever)
+ VVV_10 = 10, // TILE_ACT_PACCI sub_0801FDE4(leever), sub_08025AB8(puffstool)
VVV_11 = 11, // sub_0801FDE4(leever)
- VVV_12 = 12, // sub_0801FDE4(leever)
- VVV_13 = 13, // -> SURFACE_PIT, sub_08094E30(cutsceneMiscObject), sub_08085B40(lilypadLarge), Pot_Action1,
+ VVV_12 = 12, // TILE_ACT_SWORDBEAM sub_0801FDE4(leever)
+ VVV_13 = 13, // TILE_ACT_DIG -> SURFACE_PIT, sub_08094E30(cutsceneMiscObject), sub_08085B40(lilypadLarge), Pot_Action1,
// sub_080AD040(playerItemHeldObject), UpdatePlayerCollision, sub_0807B434(playerUtils), FX_FALL_DOWN
- VVV_14 = 14, // -> SURFACE_SLOPE_GNDWATER
+ VVV_14 = 14, // TILE_ACT_MINIGUST -> SURFACE_SLOPE_GNDWATER
VVV_15 = 15, // -> SURFACE_SHALLOW_WATER, SPECIAL_META_TILE_145
VVV_16 = 16, // -> SURFACE_WATER, sub_0801FBD0(chuchu), PlayerItemBottle_UseEmptyBottle, SPECIAL_META_TILE_137 -
// 140, sub_080AD040(playerItemHeldObject), FX_WATER_SPLASH