#ifndef PLAYER_H #define PLAYER_H #include "global.h" #include "entity.h" typedef struct { /*0x00*/ Entity base; /*0x68*/ union SplitWord unk_68; /*0x6c*/ u8 unk_6c; /*0x6d*/ u8 unk_6d; /*0x6e*/ u8 unk_6e; /*0x6f*/ u8 unk_6f; /*0x70*/ Entity* unk_70; /*0x74*/ Entity* unk_74; /*0x78*/ u8 unk_78; /*0x79*/ u8 unk_79; /*0x7a*/ u16 unk_7a; /*0x7c*/ union SplitWord unk_7c; /*0x80*/ union SplitWord unk_80; /*0x84*/ union SplitWord unk_84; } PlayerEntity; enum PlayerActions { PLAYER_INIT, PLAYER_NORMAL, PLAYER_DUMMY, PLAYER_FALL, PLAYER_JUMP, PLAYER_PUSH, PLAYER_BOUNCE, PLAYER_08070E9C, // sub_080782C0, only when pressing L to start a Kinstone Fusion PLAYER_ITEMGET, PLAYER_MINISH, PLAYER_MINISHDIE, PLAYER_08071DB8, PLAYER_EMPTYBOTTLE, PLAYER_FROZEN, PLAYER_0807204C, PLAYER_ROOM_EXIT, PLAYER_PULL, PLAYER_LAVA, PLAYER_WARP, PLAYER_08072454, PLAYER_DROWN, PLAYER_USEPORTAL, PLAYER_TALKEZLO, PLAYER_ROOMTRANSITION, PLAYER_ROLL, PLAYER_080728AC, PLAYER_INHOLE, PLAYER_08072C9C, PLAYER_SLEEP, PLAYER_CLIMB, PLAYER_USEENTRANCE, PLAYER_PARACHUTE, }; enum PlayerFrameState { PL_STATE_IDLE, PL_STATE_WALK, PL_STATE_SWORD, PL_STATE_GUSTJAR, PL_STATE_HOLD, PL_STATE_THROW, PL_STATE_6, PL_STATE_SWIM, PL_STATE_PARACHUTE, PL_STATE_ROLL, PL_STATE_FALL, PL_STATE_JUMP, PL_STATE_C, PL_STATE_D, PL_STATE_USEPORTAL, PL_STATE_F, PL_STATE_TRAPPED, PL_STATE_11, PL_STATE_DIE, PL_STATE_TALKEZLO, PL_STATE_CAPE, PL_STATE_ITEMGET, PL_STATE_DROWN, PL_STATE_HOLE, PL_STATE_CLIMB, PL_STATE_PUSH, PL_STATE_PULL, PL_STATE_SINKING, PL_STATE_STAIRS, PL_STATE_1D, }; enum PlayerSpawnType { PL_SPAWN_DEFAULT, PL_SPAWN_MINISH, PL_SPAWN_DROP, PL_SPAWN_WALKING, PL_SPAWN_STEP_IN, PL_SPAWN_SLEEPING, PL_SPAWN_DROP_MINISH, PL_SPAWN_STAIRS_ASCEND, PL_SPAWN_STAIRS_DESCEND, PL_SPAWN_9, PL_SPAWN_PARACHUTE_FORWARD, PL_SPAWN_PARACHUTE_UP, PL_SPAWN_FAST_TRAVEL, }; typedef enum { CONTROL_ENABLED, CONTROL_1, CONTROL_2, 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, PL_DROWNING = 0x4, PL_NO_CAP = 0x8, PL_CAPTURED = 0x10, PL_USE_PORTAL = 0x20, PL_HIDDEN = 0x40, PL_MINISH = 0x80, PL_DISABLE_ITEMS = 0x100, PL_FALLING = 0x200, PL_BURNING = 0x400, PL_FROZEN = 0x800, PL_IN_MINECART = 0x1000, PL_DRUGGED = 0x4000, PL_PIT_IS_EXIT = 0x8000, PL_FLAGS10000 = 0x10000, PL_GYORG_FIGHT = 0x20000, PL_ROLLING = 0x40000, PL_MOLDWORM_CAPTURED = 0x80000, PL_IN_HOLE = 0x100000, PL_MOLDWORM_RELEASED = 0x200000, PL_CLONING = 0x400000, PL_USE_LANTERN = 0x800000, PL_PARACHUTE = 0x1000000, PL_CONVEYOR_PUSHED = 0x2000000, PL_ENTER_MINECART = 0x4000000, PL_SWORD_THRUST = 0x8000000, PL_USE_OCARINA = 0x10000000, PL_CLIMBING = 0x20000000, PL_FLAGS40000000 = 0x40000000, PL_FLAGS80000000 = 0x80000000, } PlayerFlags; enum PlayerItemId { PL_ITEM_NONE, PL_ITEM_SWORD, PL_ITEM_BOMB, PL_ITEM_BOOMERANG, PL_ITEM_BOW, PL_ITEM_SHIELD, PL_ITEM_LANTERN, PL_ITEM_NULLED, PL_ITEM_GUSTJAR, PL_ITEM_PACCI_CANE, PL_ITEM_A, PL_ITEM_B, PL_ITEM_DASH_SWORD, PL_ITEM_CELL_OVERWRITE_SET, PL_ITEM_BOTTLE, PL_ITEM_SWORDBEAM, PL_ITEM_GUST, PL_ITEM_GUSTBIG, PL_ITEM_PACCI_CANE_PROJECTILE, PL_ITEM_HELD_OBJECT, PL_ITEM_SPIRAL_BEAM, PL_ITEM_FIREROD_PROJECTILE, PL_ITEM_SWORDBEAM2, PL_ITEM_NULLED2, PL_ITEM_CELL_OVERWRITE_SET2, }; typedef enum { SURFACE_NORMAL, SURFACE_PIT, SURFACE_2, SURFACE_3, SURFACE_SLOPE_GNDGND_V, SURFACE_SLOPE_GNDGND_H, SURFACE_6, SURFACE_7, SURFACE_MINISH_DOOR_FRONT, SURFACE_MINISH_DOOR_BACK, SURFACE_A, SURFACE_B, SURFACE_SLOPE_GNDWATER, SURFACE_D, SURFACE_E, SURFACE_F, SURFACE_10, SURFACE_SWAMP, SURFACE_DOOR, SURFACE_DOOR_13, SURFACE_14, SURFACE_CLONE_TILE, SURFACE_16, SURFACE_ICE, SURFACE_SHALLOW_WATER, SURFACE_WATER, SURFACE_BUTTON, SURFACE_1B, SURFACE_1C, SURFACE_1D, // nulled SURFACE_LADDER, SURFACE_1F, // nulled SURFACE_20, SURFACE_21, SURFACE_22, SURFACE_EDGE, SURFACE_24, SURFACE_DUST, SURFACE_26, SURFACE_HOLE, SURFACE_LIGHT_GRADE, SURFACE_29, SURFACE_AUTO_LADDER, SURFACE_CLIMB_WALL, SURFACE_2C, SURFACE_FF = 0xff, } SurfaceType; typedef enum { SKILL_NONE = 0, SKILL_SPIN_ATTACK = 1, SKILL_ROLL_ATTACK = 2, SKILL_DASH_ATTACK = 4, SKILL_ROCK_BREAKER = 8, SKILL_SWORD_BEAM = 0x10, SKILL_GREAT_SPIN = 0x20, SKILL_DOWN_THRUST = 0x40, SKILL_PERIL_BEAM = 0x80, SKILL_FOURSWORD = 0x100, SKILL_FAST_SPIN = 0x200, SKILL_FAST_SPLIT = 0x400, SKILL_LONG_SPIN = 0x800 } PlayerSkill; typedef struct { /*0x00*/ u8 action; /*0x01*/ s8 preChargeTimer; /*0x02*/ u8 swordType; /*0x03*/ u8 unk_3; /*0x04*/ s16 chargeTimer; /*0x06*/ u8 unk_6[2]; } ChargeState; typedef struct { u16 flags; u16 keys; } PlayerMacroEntry; typedef enum { INPUT_USE_ITEM1 = 0x1, // A INPUT_USE_ITEM2 = 0x2, // B INPUT_INTERACT = 0x8, // A sub_080782C0, sub_0807953C, PlayerUpdateSwimming, sub_08076518. ItemForSale_Action2 INPUT_CANCEL = 0x10, // B sub_0807953C, ToggleDiving, sub_08076518, ItemForSale_Action2 INPUT_CONTEXT = 0x20, // R sub_0807953C INPUT_40 = 0x40, // A CrenelBeanSprout_Action1 INPUT_ACTION = 0x80, // R sub_08073584, IsPreventedFromUsingItem, sub_080782C0, CrenelBeanSprout_Action1, ItemForSale_Action2 INPUT_RIGHT = 0x100, INPUT_LEFT = 0x200, INPUT_UP = 0x400, INPUT_DOWN = 0x800, INPUT_ANY_DIRECTION = 0xf00, INPUT_FUSE = 0x1000, // L, where is it set? sub_080782C0 INPUT_LIFT_THROW = 0x8000, // R, IsTryingToPickupObject, sub_08076518 } PlayerInputState; typedef struct { /*0x0*/ u16 heldInput; /**< Input currently held @see PlayerInputState */ /*0x2*/ u16 newInput; /**< New input this frame @see PlayerInputState */ /*0x4*/ u32 unused; /*0x8*/ u16 playerMacroWaiting; /*0xa*/ u16 playerMacroHeldKeys; /*0xc*/ PlayerMacroEntry* playerMacro; } PlayerInput; typedef enum { SWORD_MOVE_NONE, SWORD_MOVE_SPIN, SWORD_MOVE_ROLL, SWORD_MOVE_DASH, SWORD_MOVE_BREAK_POT, SWORD_MOVE_FULL_BEAM, SWORD_MOVE_GREAT_SPIN, SWORD_MOVE_DOWN_THRUST, 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; /*0x02*/ u8 jump_status; /*0x03*/ u8 shield_status; /*0x04*/ u8 attack_status; /*0x05*/ u8 heldObject; /*0x06*/ u8 pushedObject; // hi bit is special, rest is used as a timer /*0x07*/ u8 field_0x7; /*0x08*/ u16 animation; /*0x0a*/ u8 field_0xa; /*0x0b*/ u8 keepFacing; /*0x0c*/ u8 queued_action; /*0x0d*/ u8 direction; /*0x0e*/ u8 itemAnimPriority; /*0x0f*/ u8 hurtBlinkSpeed; /*0x10*/ u8 field_0x10; /*0x11*/ u8 surfacePositionSameTimer; /*0x12*/ u8 floor_type; /*0x13*/ u8 floor_type_last; /*0x14*/ u8 field_0x14; /*0x15*/ u8 field_0x15; /*0x16*/ u16 startPosX; /*0x18*/ u16 startPosY; /*0x1a*/ u8 mobility; /*0x1b*/ u8 sword_state; /*0x1c*/ u8 field_0x1c; /*0x1d*/ u8 gustJarSpeed; /*0x1e*/ u8 dash_state; /*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 */ /*0x27*/ u8 field_0x27[5]; /*0x2c*/ Entity* item; /*0x30*/ u32 flags; /*0x34*/ u8 field_0x34; /*0x35*/ u8 field_0x35; /*0x36*/ u8 field_0x36; /*0x37*/ u8 surfaceTimer; /*0x38*/ u8 field_0x38; /*0x39*/ u8 field_0x39; /*0x3a*/ u8 field_0x3a; /*0x3b*/ u8 field_0x3b; /*0x3c*/ u8 killed; /**< Non-zero if player is dead */ /*0x3d*/ u8 moleMittsState; /*0x3e*/ u8 swordDamage : 2; /* */ u8 filler14 : 6; /*0x3f*/ s8 spriteOffsetY; /*0x40*/ u32 path_memory[16]; /*0x80*/ u16 speed_modifier; /*0x82*/ u8 field_0x82; /*0x83*/ u8 playerPalette; /*0x84*/ Entity* lilypad; /**< Last lilypad the player was standing on? */ /*0x88*/ u8 field_0x88; /*0x89*/ u8 remainingDiveTime; /**< Frames that the player can continue to dive. */ /*0x8a*/ u8 field_0x8a; /*0x8b*/ u8 controlMode; /*0x8c*/ u16 vel_x; /*0x8e*/ u16 vel_y; /*0x90*/ PlayerInput playerInput; /*0xa0*/ ChargeState chargeState; /*0xa8*/ u8 framestate; /*0xa9*/ u8 framestate_last; /*0xaa*/ u8 attachedBeetleCount; /**< Count of the Beetles attached to the player. */ /*0xab*/ u8 lastSwordMove; /**< The last move that has been performed with the sword. @see SwordMove */ /*0xac*/ u16 skills; /**< Bitfield of skills @see PlayerSkill */ /*0xae*/ u8 pad[2]; } PlayerState; typedef struct { /*0x00*/ u8 walletType; /*0x01*/ u8 heartPieces; /*0x02*/ u8 health; /*0x03*/ u8 maxHealth; /*0x04*/ u8 bombCount; /*0x05*/ u8 arrowCount; /*0x06*/ u8 bombBagType; /*0x07*/ u8 quiverType; /*0x08*/ u8 figurineCount; /*0x09*/ u8 _hasAllFigurines; /*0x0a*/ u8 charm; /*0x0b*/ u8 picolyteType; /*0x0c*/ u8 equipped[2]; /*0x0e*/ u8 bottles[4]; /*0x12*/ u8 effect; /*0x13*/ u8 hasAllFigurines; /*0x14*/ u8 filler14[4]; /*0x18*/ u16 rupees; /*0x1a*/ u16 shells; /*0x1c*/ u16 charmTimer; /*0x1e*/ u16 picolyteTimer; /*0x20*/ u16 effectTimer; /*0x22*/ u8 filler22[2]; } Stats; #define SLOT_A 0 #define SLOT_B 1 typedef struct { /*0x0*/ u8 field_0x0; /*0x1*/ u8 behaviorId; /*0x2*/ u8 field_0x2[2]; /*0x4*/ u8 stateID; /*0x5*/ u8 field_0x5; /*0x6*/ u8 field_0x6; /*0x7*/ u8 timer; /*0x8*/ u8 subtimer; /*0x9*/ u8 priority; /*0xa*/ u8 playerAnimationState; /*0xb*/ u8 direction; /*0xc*/ u8 playerAnimIndex; /**< Stored animIndex of the player entity. */ /*0xd*/ u8 playerFrameDuration; /**< Stored frameDuration of the player entity. */ /*0xe*/ u8 playerFrame; /**< Stored frame of the player entity. But also used for general purpose in item behaviours? */ /*0xf*/ u8 animPriority; /**< In sub_08079064 the animIndex of the ItemBehavior with the max animPriority is selected. */ /*0x10*/ u16 animIndex; /*0x12*/ u8 playerFrameIndex; /**< Stored frameIndex of the player entity. */ /*0x13*/ u8 field_0x13[5]; /*0x18*/ Entity* field_0x18; } ItemBehavior; extern void (*const gPlayerItemFunctions[])(Entity*); typedef struct { u16 size; u16 iconStartTile; } Wallet; extern const Wallet gWalletSizes[]; extern const u8 gBombBagSizes[]; extern const u8 gQuiverSizes[]; extern Entity* gPlayerClones[]; extern PlayerState gPlayerState; extern PlayerEntity gPlayerEntity; void DoPlayerAction(PlayerEntity*); bool32 CheckInitPauseMenu(void); void SetPlayerControl(PlayerControlMode mode); void ResetActiveItems(void); void ResetPlayerVelocity(void); void ResetPlayerAnimationAndAction(void); void SetPlayerActionNormal(void); void RespawnAsMinish(void); Entity* CreatePlayerItem(u32, u32, u32, u32); void ResolvePlayerAnimation(void); void RegisterPlayerHitbox(void); void UpdateFloorType(void); void CreateEzloHint(u32, u32); // game.c /** @see Item */ /*EquipSlot*/ u32 IsItemEquipped(u32 itemId); /** @see Item */ u32 GetInventoryValue(u32); /** @see Item */ u32 SetInventoryValue(u32, u32); s32 ModHealth(s32 delta); void ModRupees(s32 delta); void ModBombs(s32 delta); typedef enum { INTERACTION_NONE, INTERACTION_TALK, INTERACTION_FUSE, INTERACTION_OPEN_CHEST, INTERACTION_UNUSED, INTERACTION_USE_SMALL_KEY, INTERACTION_USE_BIG_KEY, INTERACTION_TALK_MINISH, INTERACTION_LIFT_SHOP_ITEM, INTERACTION_CHECK, INTERACTION_DROP_PEDESTAL, INTERACTION_NULL = 0xFF, } InteractionType; typedef enum { R_ACTION_NONE, R_ACTION_CANCEL, R_ACTION_DROP, R_ACTION_THROW, R_ACTION_READ, R_ACTION_CHECK, R_ACTION_OPEN, R_ACTION_SPEAK, R_ACTION_GRAB, R_ACTION_LIFT, R_ACTION_GROW, R_ACTION_SHRINK, R_ACTION_ROLL, } ActionRButton; // playerUtils.c void DeleteClones(void); void CreateItemEquippedAtSlot(/*EquipSlot*/ u32 equipSlot); void PutAwayItems(void); void sub_08079E58(s32 speed, u32 direction); void RespawnPlayer(void); SurfaceType GetSurfaceCalcType(Entity*, s32, s32); void UpdatePlayerMovement(void); void EnablePlayerDraw(Entity*); void sub_080797EC(void); void PlayerMinishSetNormalAndCollide(void); u32 sub_08079B24(void); void sub_08079708(Entity*); void sub_08079744(Entity*); void PlayerUpdateSwimming(Entity*); u32 GetCollisionTileInFront(Entity*); u32 sub_080797C4(void); void CheckPlayerVelocity(void); void sub_0807B068(Entity*); u32 sub_0807A2F8(u32); void UpdateActiveItems(/* PlayerEntity* */); bool32 sub_0807A2B8(void); u32 sub_08079550(void); u32 sub_080782C0(void); bool32 sub_080793E4(u32); bool32 sub_08079C30(Entity*); void ResetLantern(void); bool32 CheckQueuedAction(void); void UpdatePlayerSkills(void); u32 sub_0807AC54(Entity*); void sub_080792D8(void); u32 sub_08078F74(Entity*); void AddInteractableAsMinishObject(Entity*); void sub_08078D60(void); void PlayerSetNormalAndCollide(void); bool32 PlayerTryDropObject(ItemBehavior* arg0, u32 unk); void InitItemGetSequence(u32, u32, u32); void sub_0807B7D8(u32, u32, u32); void SetInteractableObjectCollision(Entity*, u32, u32, const void*); void sub_08079D84(void); u32 sub_0807953C(void); void sub_0807BB68(const s16*, u32, u32); void sub_0807B9B8(u32, u32, u32); void sub_0807B7D8(u32, u32, u32); void RestorePrevTileEntity(u32, u32); void UpdateItemAnim(ItemBehavior*); void PlayerCancelHoldItem(ItemBehavior*, u32); void RegisterCarryEntity(Entity*); void FreeCarryEntity(Entity*); void PlayerDropHeldObject(); void PlayerResetStateFromFusion(); void DeleteItemBehavior(ItemBehavior*, u32); void sub_08077D38(ItemBehavior*, u32); void SetItemAnim(ItemBehavior* this, u32 animIndex); void sub_08077E3C(ItemBehavior*, u32); void sub_080751E8(u32, u32, void*); void sub_08077B98(ItemBehavior*); void sub_08077BB8(ItemBehavior*); Entity* CreatePlayerItemIfNotExists(ItemBehavior*, u32); Entity* FindPlayerItemForItem(ItemBehavior*, u32); bool32 PlayerCanBeMoved(void); bool32 sub_08077EC8(ItemBehavior*); bool32 IsItemActive(ItemBehavior*); bool32 IsItemActivatedThisFrame(ItemBehavior*); bool32 IsItemActiveByInput(ItemBehavior*, PlayerInputState); bool32 sub_08077FEC(u32); void DetermineRButtonInteraction(void); void ResetPossibleInteraction(); void AddInteractableFuser(Entity*, u32); void AddInteractableSmallKeyLock(Entity*); s32 AddInteractableBossDoor(Entity*); s32 AddInteractableObject(Entity*, u32, u32); void RemoveInteractableObject(Entity*); s32 GetInteractableObjectIndex(); void sub_08078AC0(u32, u32, u32); void PausePlayer(void); void sub_08078E84(Entity*, Entity*); void sub_08078FB0(Entity*); void sub_080792BC(s32, u32, u32); u32 sub_0807953C(void); void sub_08079BD8(Entity*); u32 sub_08079D48(); void sub_08079D84(void); u32 sub_08079FC4(u32); void UpdatePlayerPalette(void); void sub_0807A5B8(u32); void sub_0807A8D8(Entity*); void sub_0807AA80(Entity*); void sub_0807AABC(Entity*); void PlayerSwimming(Entity*); u32 GetSwordBeam(); void sub_0807B0C8(void); bool32 sub_0807BD14(Entity*, u32); Entity* CreatePlayerItemWithParent(ItemBehavior*, u32); bool32 HasSwordEquipped(); u32 GetPlayerPalette(bool32 use); void PlayerShrinkByRay(void); // player.s extern u32 PlayerCheckNEastTile(); extern u32* DoTileInteractionHere(Entity*, u32); extern void UpdateIcePlayerVelocity(Entity*); extern void sub_08008AC6(Entity*); extern void sub_08008926(Entity*); extern void sub_08008AC6(Entity*); extern void sub_08008AA0(Entity*); // zelda.c void SetZeldaFollowTarget(Entity* target); #define COPY_FLAG_FROM_TO(base, src, dest) (base) = ((base) & ~(dest)) | (((dest) * ((base) & (src))) / src) #endif // PLAYER_H