Enum cleanup (#247)

* various cleanup

* item cleanup

* enums

* enum flags

* NO

* treat didAreaChange as bool in ifs
This commit is contained in:
alex 2021-04-02 06:50:38 +01:00 committed by GitHub
parent ce6b660d64
commit 498694158a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 203 additions and 414 deletions

View File

@ -90,14 +90,15 @@ typedef struct HeapNode {
/* 0x0C */ s32 capacity; /* 0x0C */ s32 capacity;
} HeapNode; // size = 0x10 } HeapNode; // size = 0x10
typedef struct NpcBlurData { /// Ring buffer of an NPC's position over the past 20 frames.
typedef struct BlurBuffer {
/* 0x00 */ s8 unk_00; /* 0x00 */ s8 unk_00;
/* 0x01 */ s8 unk_01; /* 0x01 */ s8 index; ///< Current blur ring buffer index
/* 0x02 */ char unk_02[2]; /* 0x02 */ char unk_02[2]; // padding?
/* 0x04 */ f32 xpos[20]; /* 0x04 */ f32 x[20];
/* 0x54 */ f32 ypos[20]; /* 0x54 */ f32 y[20];
/* 0xA4 */ f32 zpos[20]; /* 0xA4 */ f32 z[20];
} NpcBlurData; // size = 0xF4 } BlurBuffer; // size = 0xF4
typedef struct Npc { typedef struct Npc {
/* 0x000 */ s32 flags; /* 0x000 */ s32 flags;
@ -108,7 +109,7 @@ typedef struct Npc {
/* 0x014 */ f32 jumpScale; /* also used for speech, temp1? */ /* 0x014 */ f32 jumpScale; /* also used for speech, temp1? */
/* 0x018 */ f32 moveSpeed; /* 0x018 */ f32 moveSpeed;
/* 0x01C */ f32 jumpVelocity; /* 0x01C */ f32 jumpVelocity;
/* 0x020 */ struct NpcBlurData* blurData; /* related to movement somehow... */ /* 0x020 */ struct BlurBuffer* blurBuf; ///< Null unless flag 0x100000 is set.
/* 0x024 */ s32 unk_24; /* 0x024 */ s32 unk_24;
/* 0x028 */ u32 currentAnim; /* 0x028 */ u32 currentAnim;
/* 0x02C */ char unk_2C[4]; /* 0x02C */ char unk_2C[4];
@ -127,7 +128,7 @@ typedef struct Npc {
/* 0x088 */ s16 isFacingAway; /* 0x088 */ s16 isFacingAway;
/* 0x08A */ s16 yawCamOffset; /* 0x08A */ s16 yawCamOffset;
/* 0x08C */ s16 unk_8C; /* 0x08C */ s16 unk_8C;
/* 0x08E */ s16 duration; /* formerly interp_counter */ /* 0x08E */ s16 duration; // TODO: name less vaguely
/* 0x090 */ Vec3s homePos; /* 0x090 */ Vec3s homePos;
/* 0x096 */ char unk_96[12]; /* 0x096 */ char unk_96[12];
/* 0x0A2 */ u16 unk_A2; /* 0x0A2 */ u16 unk_A2;
@ -983,7 +984,7 @@ typedef struct GameStatus {
/* 0x085 */ char unk_85; /* 0x085 */ char unk_85;
/* 0x086 */ s16 areaID; /* 0x086 */ s16 areaID;
/* 0x088 */ s16 prevArea; /* 0x088 */ s16 prevArea;
/* 0x08A */ s16 changedArea; /* (1 = yes) */ /* 0x08A */ s16 didAreaChange;
/* 0x08C */ s16 mapID; /* 0x08C */ s16 mapID;
/* 0x08E */ s16 entryID; /* 0x08E */ s16 entryID;
/* 0x090 */ u16 unk_90; /* 0x090 */ u16 unk_90;

View File

@ -409,19 +409,19 @@ enum SongIDs {
typedef UNK_TYPE Ability; typedef UNK_TYPE Ability;
enum Abilities { enum Abilities {
ABILITY_DODGE_MASTER = 0, ABILITY_DODGE_MASTER,
ABILITY_UNUSED, ABILITY_UNUSED,
ABILITY_SPIKE_SHIELD, ABILITY_SPIKE_SHIELD,
ABILITY_FIRST_ATTACK, ABILITY_FIRST_ATTACK,
ABILITY_H_P_PLUS, ABILITY_HP_PLUS,
ABILITY_DOUBLE_DIP, ABILITY_DOUBLE_DIP,
ABILITY_MYSTERY_SCROLL, ABILITY_MYSTERY_SCROLL,
ABILITY_FIRE_SHIELD, ABILITY_FIRE_SHIELD,
ABILITY_PRETTY_LUCKY, ABILITY_PRETTY_LUCKY,
ABILITY_H_P_DRAIN, ABILITY_HP_DRAIN,
ABILITY_ALL_OR_NOTHING, ABILITY_ALL_OR_NOTHING,
ABILITY_SLOW_GO, ABILITY_SLOW_GO,
ABILITY_F_P_PLUS, ABILITY_FP_PLUS,
ABILITY_ICE_POWER, ABILITY_ICE_POWER,
ABILITY_FEELING_FINE, ABILITY_FEELING_FINE,
ABILITY_ATTACK_F_X, ABILITY_ATTACK_F_X,
@ -445,7 +445,7 @@ enum Abilities {
ABILITY_CLOSE_CALL, ABILITY_CLOSE_CALL,
ABILITY_P_UP_D_DOWN, ABILITY_P_UP_D_DOWN,
ABILITY_LUCKY_DAY, ABILITY_LUCKY_DAY,
ABILITY_MEGA_H_P_DRAIN, ABILITY_MEGA_HP_DRAIN,
ABILITY_P_DOWN_D_UP, ABILITY_P_DOWN_D_UP,
ABILITY_FLOWER_FANATIC, ABILITY_FLOWER_FANATIC,
ABILITY_SPEEDY_SPIN, ABILITY_SPEEDY_SPIN,
@ -469,7 +469,7 @@ enum Abilities {
typedef UNK_TYPE Emote; typedef UNK_TYPE Emote;
enum Emotes { enum Emotes {
EMOTE_EXCLAMATION = 0, EMOTE_EXCLAMATION,
EMOTE_SHOCK, EMOTE_SHOCK,
EMOTE_QUESTION, EMOTE_QUESTION,
EMOTE_FRUSTRATION, EMOTE_FRUSTRATION,
@ -479,7 +479,7 @@ enum Emotes {
typedef UNK_TYPE Easing; typedef UNK_TYPE Easing;
enum Easings { enum Easings {
EASING_LINEAR = 0, EASING_LINEAR,
EASING_QUADRATIC_IN, EASING_QUADRATIC_IN,
EASING_CUBIC_IN, EASING_CUBIC_IN,
EASING_QUARTIC_IN, EASING_QUARTIC_IN,
@ -593,7 +593,7 @@ enum SoundIDs {
typedef UNK_TYPE Cam; typedef UNK_TYPE Cam;
enum Cams { enum Cams {
CAM_DEFAULT = 0, CAM_DEFAULT,
CAM_BATTLE, CAM_BATTLE,
CAM_TATTLE, CAM_TATTLE,
CAM_CAM3, CAM_CAM3,
@ -603,7 +603,8 @@ enum Cams {
typedef s16 ItemID; typedef s16 ItemID;
enum ItemIDs { enum ItemIDs {
ITEM_JUMP = 1, ITEM_NONE,
ITEM_JUMP,
ITEM_SPIN_JUMP, ITEM_SPIN_JUMP,
ITEM_TORNADO_JUMP, ITEM_TORNADO_JUMP,
ITEM_HAMMER, ITEM_HAMMER,
@ -826,7 +827,7 @@ enum ItemIDs {
ITEM_POWER_BOUNCE, ITEM_POWER_BOUNCE,
ITEM_SPIKE_SHIELD, ITEM_SPIKE_SHIELD,
ITEM_FIRST_ATTACK, ITEM_FIRST_ATTACK,
ITEM_H_P_PLUS_A, ITEM_HP_PLUS_A,
ITEM_QUAKE_HAMMER, ITEM_QUAKE_HAMMER,
ITEM_DOUBLE_DIP, ITEM_DOUBLE_DIP,
ITEM_MYSTERY_SCROLL, ITEM_MYSTERY_SCROLL,
@ -840,10 +841,10 @@ enum ItemIDs {
ITEM_FEELING_FINE, ITEM_FEELING_FINE,
ITEM_ATTACK_F_X_A, ITEM_ATTACK_F_X_A,
ITEM_ALLOR_NOTHING, ITEM_ALLOR_NOTHING,
ITEM_H_P_DRAIN, ITEM_HP_DRAIN,
ITEM_JUMP_CHARGE0, ITEM_JUMP_CHARGE0,
ITEM_SLOW_GO, ITEM_SLOW_GO,
ITEM_F_P_PLUS_A, ITEM_FP_PLUS_A,
ITEM_MEGA_RUSH, ITEM_MEGA_RUSH,
ITEM_ICE_POWER, ITEM_ICE_POWER,
ITEM_DEFEND_PLUS_A, ITEM_DEFEND_PLUS_A,
@ -872,7 +873,7 @@ enum ItemIDs {
ITEM_CLOSE_CALL, ITEM_CLOSE_CALL,
ITEM_P_UP_D_DOWN, ITEM_P_UP_D_DOWN,
ITEM_LUCKY_DAY, ITEM_LUCKY_DAY,
ITEM_MEGA_H_P_DRAIN, ITEM_MEGA_HP_DRAIN,
ITEM_P_DOWN_D_UP, ITEM_P_DOWN_D_UP,
ITEM_POWER_QUAKE, ITEM_POWER_QUAKE,
ITEM_AUTO_MULTIBOUNCE, ITEM_AUTO_MULTIBOUNCE,
@ -903,8 +904,8 @@ enum ItemIDs {
ITEM_EARTHQUAKE_JUMP, ITEM_EARTHQUAKE_JUMP,
ITEM_DEEP_FOCUS2, ITEM_DEEP_FOCUS2,
ITEM_DEEP_FOCUS3, ITEM_DEEP_FOCUS3,
ITEM_H_P_PLUS_B, ITEM_HP_PLUS_B,
ITEM_F_P_PLUS_B, ITEM_FP_PLUS_B,
ITEM_HAPPY_HEART_B, ITEM_HAPPY_HEART_B,
ITEM_HAPPY_HEART_X, ITEM_HAPPY_HEART_X,
ITEM_FLOWER_SAVER_B, ITEM_FLOWER_SAVER_B,
@ -925,12 +926,12 @@ enum ItemIDs {
ITEM_ATTACK_F_X_E, ITEM_ATTACK_F_X_E,
ITEM_ATTACK_F_X_C, ITEM_ATTACK_F_X_C,
ITEM_ATTACK_F_X_F, ITEM_ATTACK_F_X_F,
ITEM_H_P_PLUS_C, ITEM_HP_PLUS_C,
ITEM_H_P_PLUS_X, ITEM_HP_PLUS_X,
ITEM_H_P_PLUS_Y, ITEM_HP_PLUS_Y,
ITEM_F_P_PLUS_C, ITEM_FP_PLUS_C,
ITEM_F_P_PLUS_X, ITEM_FP_PLUS_X,
ITEM_F_P_PLUS_Y, ITEM_FP_PLUS_Y,
ITEM_HEALTHY_HEALTHY, ITEM_HEALTHY_HEALTHY,
ITEM_ATTACK_F_X_F2, ITEM_ATTACK_F_X_F2,
ITEM_ATTACK_F_X_F3, ITEM_ATTACK_F_X_F3,
@ -1014,7 +1015,7 @@ enum PlayerAnims {
typedef UNK_TYPE AmbientSound; typedef UNK_TYPE AmbientSound;
enum AmbientSounds { enum AmbientSounds {
AMBIENT_SPOOKY = 0, AMBIENT_SPOOKY,
AMBIENT_WIND, AMBIENT_WIND,
AMBIENT_BEACH, AMBIENT_BEACH,
AMBIENT_JUNGLE, AMBIENT_JUNGLE,
@ -1033,7 +1034,7 @@ enum AmbientSounds {
typedef UNK_TYPE EncounterOutcome; typedef UNK_TYPE EncounterOutcome;
enum EncounterOutcomes { enum EncounterOutcomes {
OUTCOME_PLAYER_WON = 0, OUTCOME_PLAYER_WON,
OUTCOME_PLAYER_LOST, OUTCOME_PLAYER_LOST,
OUTCOME_PLAYER_FLED, OUTCOME_PLAYER_FLED,
OUTCOME_ENEMY_FLED, OUTCOME_ENEMY_FLED,
@ -1073,7 +1074,7 @@ enum Iters {
typedef UNK_TYPE ActorSoundID; typedef UNK_TYPE ActorSoundID;
enum ActorSoundIDs { enum ActorSoundIDs {
ACTOR_SOUND_WALK = 0, ACTOR_SOUND_WALK,
ACTOR_SOUND_FLY, ACTOR_SOUND_FLY,
ACTOR_SOUND_JUMP, ACTOR_SOUND_JUMP,
ACTOR_SOUND_HURT, ACTOR_SOUND_HURT,
@ -1083,7 +1084,7 @@ enum ActorSoundIDs {
typedef UNK_TYPE Phase; typedef UNK_TYPE Phase;
enum Phases { enum Phases {
PHASE_EXECUTE_ACTION = 0, PHASE_EXECUTE_ACTION,
PHASE_FIRST_STRIKE, PHASE_FIRST_STRIKE,
PHASE_RUN_AWAY_START = 3, PHASE_RUN_AWAY_START = 3,
PHASE_RUN_AWAY_RESET, PHASE_RUN_AWAY_RESET,
@ -1133,7 +1134,7 @@ enum ActorIDs {
typedef UNK_TYPE Element; typedef UNK_TYPE Element;
enum Elements { enum Elements {
ELEMENT_END = 0, ELEMENT_END,
ELEMENT_NORMAL, ELEMENT_NORMAL,
ELEMENT_FIRE, ELEMENT_FIRE,
ELEMENT_WATER, ELEMENT_WATER,
@ -1190,7 +1191,7 @@ enum Events {
typedef UNK_TYPE HitSound; typedef UNK_TYPE HitSound;
enum HitSounds { enum HitSounds {
HIT_SOUND_MISS = 0, HIT_SOUND_MISS,
HIT_SOUND_BONES, HIT_SOUND_BONES,
HIT_SOUND_NORMAL, HIT_SOUND_NORMAL,
HIT_SOUND_FIRE, HIT_SOUND_FIRE,
@ -1200,7 +1201,7 @@ enum HitSounds {
typedef s8 Status; typedef s8 Status;
enum Statuses { enum Statuses {
STATUS_END = 0, STATUS_END,
STATUS_NORMAL, STATUS_NORMAL,
STATUS_DEFAULT, STATUS_DEFAULT,
STATUS_FEAR, STATUS_FEAR,
@ -1241,7 +1242,7 @@ enum DoorSwings {
typedef UNK_TYPE ItemSpawnMode; typedef UNK_TYPE ItemSpawnMode;
enum ItemSpawnModes { enum ItemSpawnModes {
ITEM_SPAWN_MODE_UNKNOWN_0 = 0, ITEM_SPAWN_MODE_UNKNOWN_0,
ITEM_SPAWN_MODE_DECORATION, ITEM_SPAWN_MODE_DECORATION,
ITEM_SPAWN_MODE_UNKNOWN_2, ITEM_SPAWN_MODE_UNKNOWN_2,
ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS, ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS,
@ -1313,7 +1314,7 @@ enum Locations {
typedef UNK_TYPE DoorSound; typedef UNK_TYPE DoorSound;
enum DoorSounds { enum DoorSounds {
DOOR_SOUND_BASIC = 0, DOOR_SOUND_BASIC,
DOOR_SOUND_METAL, DOOR_SOUND_METAL,
DOOR_SOUND_LARGE, DOOR_SOUND_LARGE,
DOOR_SOUND_CREAKY, DOOR_SOUND_CREAKY,
@ -1324,7 +1325,7 @@ enum DoorSounds {
typedef s8 ActionState; typedef s8 ActionState;
enum ActionStates { enum ActionStates {
ACTION_STATE_IDLE = 0, ACTION_STATE_IDLE,
ACTION_STATE_WALK, ACTION_STATE_WALK,
ACTION_STATE_RUN, ACTION_STATE_RUN,
ACTION_STATE_JUMP, ACTION_STATE_JUMP,
@ -1336,7 +1337,9 @@ enum ActionStates {
ACTION_STATE_STEP_DOWN, ACTION_STATE_STEP_DOWN,
ACTION_STATE_LAND, ACTION_STATE_LAND,
ACTION_STATE_STEP_DOWN_LAND, ACTION_STATE_STEP_DOWN_LAND,
ACTION_STATE_CONVERSATION, // This and following states prohibit normal movement.
// Following action states prohibit movement:
ACTION_STATE_CONVERSATION,
ACTION_STATE_SPIN_JUMP, ACTION_STATE_SPIN_JUMP,
ACTION_STATE_GROUND_POUND, ACTION_STATE_GROUND_POUND,
ACTION_STATE_ULTRA_JUMP, ACTION_STATE_ULTRA_JUMP,
@ -1365,69 +1368,69 @@ enum NpcIDs {
typedef UNK_TYPE TriggerFlag; typedef UNK_TYPE TriggerFlag;
enum TriggerFlags { enum TriggerFlags {
TRIGGER_WALL_PUSH = 0x40, TRIGGER_WALL_PUSH = 0x00000040,
TRIGGER_FLOOR_TOUCH = 0x80, TRIGGER_FLOOR_TOUCH = 0x00000080,
TRIGGER_WALL_PRESS_A = 0x100, TRIGGER_WALL_PRESS_A = 0x00000100,
TRIGGER_FLOOR_JUMP = 0x200, TRIGGER_FLOOR_JUMP = 0x00000200,
TRIGGER_WALL_TOUCH = 0x400, TRIGGER_WALL_TOUCH = 0x00000400,
TRIGGER_FLOOR_PRESS_A = 0x800, TRIGGER_FLOOR_PRESS_A = 0x00000800,
TRIGGER_WALL_HAMMER = 0x1000, TRIGGER_WALL_HAMMER = 0x00001000,
TRIGGER_GAME_FLAG_SET = 0x10000, TRIGGER_GAME_FLAG_SET = 0x00010000,
TRIGGER_AREA_FLAG_SET = 0x20000, TRIGGER_AREA_FLAG_SET = 0x00020000,
TRIGGER_CEILING_TOUCH = 0x40000, TRIGGER_CEILING_TOUCH = 0x00040000,
TRIGGER_FLOOR_ABOVE = 0x80000, TRIGGER_FLOOR_ABOVE = 0x00080000,
TRIGGER_POINT_BOMB = 0x100000, TRIGGER_POINT_BOMB = 0x00100000,
}; };
typedef UNK_TYPE Button; typedef UNK_TYPE Button;
enum Buttons { enum Buttons {
BUTTON_C_RIGHT = 0x1, BUTTON_C_RIGHT = 0x00000001,
BUTTON_C_LEFT = 0x2, BUTTON_C_LEFT = 0x00000002,
BUTTON_C_DOWN = 0x4, BUTTON_C_DOWN = 0x00000004,
BUTTON_C_UP = 0x8, BUTTON_C_UP = 0x00000008,
BUTTON_R = 0x10, BUTTON_R = 0x00000010,
BUTTON_L = 0x20, BUTTON_L = 0x00000020,
BUTTON_D_RIGHT = 0x100, BUTTON_D_RIGHT = 0x00000100,
BUTTON_D_LEFT = 0x200, BUTTON_D_LEFT = 0x00000200,
BUTTON_D_DOWN = 0x400, BUTTON_D_DOWN = 0x00000400,
BUTTON_D_UP = 0x800, BUTTON_D_UP = 0x00000800,
BUTTON_START = 0x1000, BUTTON_START = 0x00001000,
BUTTON_Z = 0x2000, BUTTON_Z = 0x00002000,
BUTTON_B = 0x4000, BUTTON_B = 0x00004000,
BUTTON_A = 0x8000, BUTTON_A = 0x00008000,
}; };
typedef UNK_TYPE PlayerBuff; typedef UNK_TYPE PlayerBuff;
enum PlayerBuffs { enum PlayerBuffs {
PLAYER_BUFF_JUMP_CHARGE = 0x1, PLAYER_BUFF_JUMP_CHARGE = 0x00000001,
PLAYER_BUFF_HAMMER_CHARGE = 0x2, PLAYER_BUFF_HAMMER_CHARGE = 0x00000002,
PLAYER_BUFF_STONE = 0x8, PLAYER_BUFF_STONE = 0x00000008,
PLAYER_BUFF_HUSTLE = 0x10, PLAYER_BUFF_HUSTLE = 0x00000010,
PLAYER_BUFF_STATIC = 0x20, PLAYER_BUFF_STATIC = 0x00000020,
PLAYER_BUFF_TRANSPARENT = 0x40, PLAYER_BUFF_TRANSPARENT = 0x00000040,
PLAYER_BUFF_CLOUD_NINE = 0x80, PLAYER_BUFF_CLOUD_NINE = 0x00000080,
PLAYER_BUFF_TURBO_CHARGE = 0x100, PLAYER_BUFF_TURBO_CHARGE = 0x00000100,
PLAYER_BUFF_WATER_BLOCK = 0x200, PLAYER_BUFF_WATER_BLOCK = 0x00000200,
PLAYER_BUFF_PARTNER_GLOWING = 0x10000, PLAYER_BUFF_PARTNER_GLOWING = 0x00010000,
PLAYER_BUFF_ALL = 0xFFFFFFF, PLAYER_BUFF_ALL = 0xFFFFFFFF,
}; };
typedef UNK_TYPE StatusFlag; typedef UNK_TYPE StatusFlag;
enum StatusFlags { enum StatusFlags {
STATUS_FLAG_SLEEP = 0x1000, STATUS_FLAG_SLEEP = 0x00001000,
STATUS_FLAG_STATIC = 0x2000, STATUS_FLAG_STATIC = 0x00002000,
STATUS_FLAG_FROZEN = 0x4000, STATUS_FLAG_FROZEN = 0x00004000,
STATUS_FLAG_UNKNOWN_STATUS3 = 0x8000, STATUS_FLAG_UNKNOWN_STATUS3 = 0x00008000,
STATUS_FLAG_PARALYZE = 0x10000, STATUS_FLAG_PARALYZE = 0x00010000,
STATUS_FLAG_POISON = 0x20000, STATUS_FLAG_POISON = 0x00020000,
STATUS_FLAG_DIZZY = 0x40000, STATUS_FLAG_DIZZY = 0x00040000,
STATUS_FLAG_SHRINK = 0x80000, STATUS_FLAG_SHRINK = 0x00080000,
STATUS_FLAG_STONE = 0x100000, STATUS_FLAG_STONE = 0x00100000,
STATUS_FLAG_STOP = 0x200000, STATUS_FLAG_STOP = 0x00200000,
STATUS_FLAG_K_O = 0x1000000, STATUS_FLAG_KO = 0x01000000,
STATUS_FLAG_GLOWING = 0x2000000, STATUS_FLAG_GLOWING = 0x02000000,
STATUS_FLAG_TRANSPARENT = 0x4000000, STATUS_FLAG_TRANSPARENT = 0x04000000,
STATUS_FLAG_ATTACK_BOOST = 0x8000000, STATUS_FLAG_ATTACK_BOOST = 0x08000000,
STATUS_FLAG_DEFENSE_BOOST = 0x10000000, STATUS_FLAG_DEFENSE_BOOST = 0x10000000,
STATUS_FLAG_CHILL_OUT = 0x20000000, STATUS_FLAG_CHILL_OUT = 0x20000000,
STATUS_FLAG_RIGHT_ON = 0x40000000, STATUS_FLAG_RIGHT_ON = 0x40000000,
@ -1435,19 +1438,19 @@ enum StatusFlags {
typedef UNK_TYPE DamageType; typedef UNK_TYPE DamageType;
enum DamageTypes { enum DamageTypes {
DAMAGE_TYPE_FIRE = 0x2, DAMAGE_TYPE_FIRE = 0x00000002,
DAMAGE_TYPE_WATER = 0x4, DAMAGE_TYPE_WATER = 0x00000004,
DAMAGE_TYPE_ICE = 0x8, DAMAGE_TYPE_ICE = 0x00000008,
DAMAGE_TYPE_MAGIC = 0x10, DAMAGE_TYPE_MAGIC = 0x00000010,
DAMAGE_TYPE_ELECTRIC = 0x20, DAMAGE_TYPE_ELECTRIC = 0x00000020,
DAMAGE_TYPE_SMASH = 0x40, DAMAGE_TYPE_SMASH = 0x00000040,
DAMAGE_TYPE_JUMP = 0x80, DAMAGE_TYPE_JUMP = 0x00000080,
DAMAGE_TYPE_COSMIC = 0x100, DAMAGE_TYPE_COSMIC = 0x00000100,
DAMAGE_TYPE_BLAST = 0x200, DAMAGE_TYPE_BLAST = 0x00000200,
DAMAGE_TYPE_P_O_W = 0x400, DAMAGE_TYPE_POW = 0x00000400,
DAMAGE_TYPE_QUAKE = 0x800, DAMAGE_TYPE_QUAKE = 0x00000800,
DAMAGE_TYPE_THROW = 0x40000, DAMAGE_TYPE_THROW = 0x00040000,
DAMAGE_TYPE_IGNORE_DEFENSE = 0x8000000, DAMAGE_TYPE_IGNORE_DEFENSE = 0x08000000,
DAMAGE_TYPE_NO_CONTACT = 0x10000000, DAMAGE_TYPE_NO_CONTACT = 0x10000000,
DAMAGE_TYPE_UNBLOCKABLE = 0x20000000, DAMAGE_TYPE_UNBLOCKABLE = 0x20000000,
DAMAGE_TYPE_TRIGGER_LUCKY = 0x80000000, DAMAGE_TYPE_TRIGGER_LUCKY = 0x80000000,
@ -1455,7 +1458,7 @@ enum DamageTypes {
typedef s8 PartnerID; typedef s8 PartnerID;
enum PartnerIDs { enum PartnerIDs {
PARTNER_NONE = 0, PARTNER_NONE,
PARTNER_GOOMBARIO, PARTNER_GOOMBARIO,
PARTNER_KOOPER, PARTNER_KOOPER,
PARTNER_BOMBETTE, PARTNER_BOMBETTE,
@ -1471,7 +1474,7 @@ enum PartnerIDs {
/// @see gAreas /// @see gAreas
enum Areas { enum Areas {
AREA_KMR = 0, AREA_KMR,
AREA_MAC, AREA_MAC,
AREA_TIK, AREA_TIK,
AREA_KGR, AREA_KGR,
@ -1501,240 +1504,4 @@ enum Areas {
AREA_TST, AREA_TST,
}; };
enum Sprites {
SPRITE_WORLD_GOOMBARIO = 1,
SPRITE_WORLD_KOOPER,
SPRITE_WORLD_BOMBETTE,
SPRITE_WORLD_PARAKARRY,
SPRITE_WORLD_BOW,
SPRITE_WORLD_WATT,
SPRITE_WORLD_SUSHIE,
SPRITE_WORLD_LAKILESTER,
SPRITE_BATTLE_GOOMBARIO,
SPRITE_BATTLE_KOOPER,
SPRITE_BATTLE_BOMBETTE,
SPRITE_BATTLE_PARAKARRY,
SPRITE_BATTLE_BOW,
SPRITE_BATTLE_WATT,
SPRITE_BATTLE_SUSHIE,
SPRITE_BATTLE_LAKILESTER,
SPRITE_KOOPER_WITHOUT_SHELL,
SPRITE_WORLD_ELDSTAR,
SPRITE_WORLD_MAMAR,
SPRITE_WORLD_SKOLAR,
SPRITE_WORLD_MUSKULAR,
SPRITE_WORLD_MISSTAR,
SPRITE_WORLD_KLEVAR,
SPRITE_WORLD_KALMAR,
SPRITE_BATTLE_ELDSTAR,
SPRITE_BATTLE_MAMAR,
SPRITE_BATTLE_SKOLAR,
SPRITE_BATTLE_MUSKULAR,
SPRITE_BATTLE_MISSTAR,
SPRITE_BATTLE_KLEVAR,
SPRITE_BATTLE_KALMAR,
SPRITE_TWINK,
SPRITE_JR_TROOPA,
SPRITE_SPIKED_JR_TROOPA,
SPRITE_SPIKED_PARA_JR_TROOPA,
SPRITE_MAGE_JR_TROOPA,
SPRITE_PARA_JR_TROOPA,
SPRITE_GOOMBA,
SPRITE_SPIKED_GOOMBA,
SPRITE_PARAGOOMBA,
SPRITE_KOOPA_TROOPA,
SPRITE_PARA_TROOPA,
SPRITE_FUZZY,
SPRITE_BOMBOMB,
SPRITE_BULLET_BILL,
SPRITE_BILL_BLASTER,
SPRITE_MONTY_MOLE,
SPRITE_CLEFT,
SPRITE_POKEY,
SPRITE_BANDIT,
SPRITE_BUZZY_BEETLE,
SPRITE_SWOOPER,
SPRITE_STONE_CHOMP,
SPRITE_PUTRID_PIRANHA,
SPRITE_PIRANHA_PLANT,
SPRITE_SENTINEL,
SPRITE_WORLD_CLUBBA,
SPRITE_BATTLE_CLUBBA,
SPRITE_SHY_GUY,
SPRITE_GROOVE_GUY,
SPRITE_SKY_GUY,
SPRITE_PYRO_GUY,
SPRITE_SPY_GUY,
SPRITE_MEDI_GUY,
SPRITE_FUZZIPEDE,
SPRITE_JUNGLE_GUY,
SPRITE_HEART_PLANT,
SPRITE_HURT_PLANT,
SPRITE_M_BUSH,
SPRITE_BUBBLE,
SPRITE_KENT_C_KOOPA,
SPRITE_DAYZEE,
SPRITE_LAKITU,
SPRITE_SPINY,
SPRITE_BZZAP,
SPRITE_RUFF_PUFF,
SPRITE_SPIKE_TOP,
SPRITE_DUPLIGHOST,
SPRITE_ALBINO_DINO,
SPRITE_BLOOPER,
SPRITE_BABY_BLOOPER,
SPRITE_GULPIT,
SPRITE_DRY_BONES,
SPRITE_THROWN_BONE,
SPRITE_BONY_BEETLE,
SPRITE_MAGIKOOPA,
SPRITE_FLYING_MAGIKOOPA,
SPRITE_WORLD_KOOPATROL,
SPRITE_KOOPATROL,
SPRITE_HAMMER_BROS,
SPRITE_BUSH_BASIC,
SPRITE_BUSH_BLOCKY,
SPRITE_BUSH_DRY,
SPRITE_BUSH_LEAFY,
SPRITE_BUSH_MATTED,
SPRITE_WORLD_KAMMY,
SPRITE_BATTLE_KAMMY,
SPRITE_GOOMBA_BROS,
SPRITE_GOOMBA_KING,
SPRITE_SPIKY_GOOMNUT,
SPRITE_DARK_TOAD,
SPRITE_KOOPA_BROS,
SPRITE_BUZZAR,
SPRITE_TUTANKOOPA,
SPRITE_CHAIN_CHOMP,
SPRITE_WORLD_TUBBA,
SPRITE_BATTLE_TUBBA,
SPRITE_TUBBAS_HEART,
SPRITE_BIG_LANTERN_GHOST,
SPRITE_SHY_SQUAD_GUY,
SPRITE_MARSHAL_GUY,
SPRITE_STILT_GUY,
SPRITE_STILT_GUY_UNFOLD,
SPRITE_SHY_STACK_GUY,
SPRITE_SHY_STACK_UNFOLD,
SPRITE_SHY_STACK_DAMAGE,
SPRITE_SHY_STACK_ROCK,
SPRITE_GENERAL_GUY,
SPRITE_GENERAL_GUY_BOMB,
SPRITE_TANK_GUY,
SPRITE_LAVA_PIRANHA_HEAD,
SPRITE_PETIT_PIRANHA,
SPRITE_LAVA_BUD,
SPRITE_HUFF_N_PUFF,
SPRITE_TUFF_PUFF,
SPRITE_MONSTAR,
SPRITE_CRYSTAL_KING,
SPRITE_WORLD_BOWSER,
SPRITE_BATTLE_BOWSER,
SPRITE_LUIGI,
SPRITE_TOAD,
SPRITE_THREE_SISTERS,
SPRITE_VANNA_T,
SPRITE_TOAD_KID,
SPRITE_TOAD_GUARD,
SPRITE_HARRY_T,
SPRITE_TOAD_MINISTER,
SPRITE_POSTMASTER,
SPRITE_CONDUCTOR_TOAD,
SPRITE_TRAIN_STATION_TOAD,
SPRITE_FISHMAEL,
SPRITE_ARTIST_TOAD,
SPRITE_KOOPA,
SPRITE_KOOPA_WITHOUT_SHELL,
SPRITE_WORLD_BOMBOMB,
SPRITE_WHACKA,
SPRITE_DRYITE,
SPRITE_MOUSER,
SPRITE_BOO,
SPRITE_YOSHI,
SPRITE_YOSHI_KID,
SPRITE_RAVEN,
SPRITE_BUBULB,
SPRITE_PENGUIN,
SPRITE_SHIVER_TOAD,
SPRITE_ALT_BANDIT,
SPRITE_GOOMPA,
SPRITE_GOOMBARIA,
SPRITE_GOOMA,
SPRITE_GOOMPAPA,
SPRITE_GOOMAMA,
SPRITE_THE_MASTER,
SPRITE_CHAN,
SPRITE_LEE,
SPRITE_MERLON,
SPRITE_CHET_RIPPO,
SPRITE_ROWF,
SPRITE_MINH_T,
SPRITE_RUSS_T,
SPRITE_TAYCE_T,
SPRITE_FICE_T,
SPRITE_BARTENDER,
SPRITE_CHANTERELLE,
SPRITE_RIP_CHEATO,
SPRITE_CHUCK_QUIZMO,
SPRITE_MERLUVLEE,
SPRITE_MERLAR,
SPRITE_MERLOW,
SPRITE_STAR_KID,
SPRITE_KOLORADO_WIFE,
SPRITE_KOOPA_KOOT,
SPRITE_KOLORADO,
SPRITE_BATTLE_KOLORADO,
SPRITE_ARCHEOLOGIST,
SPRITE_NOMADIMOUSE,
SPRITE_WORLD_MERLEE,
SPRITE_BATTLE_MERLEE,
SPRITE_DISGUISED_MOUSTAFA,
SPRITE_MOUSTAFA,
SPRITE_OAKLIE,
SPRITE_BOOTLER,
SPRITE_YAKKEY,
SPRITE_GOURMET_GUY,
SPRITE_VILLAGE_LEADER,
SPRITE_LEADERS_FRIEND,
SPRITE_RAFAEL_RAVEN,
SPRITE_TOLIELUP,
SPRITE_GATE_FLOWER,
SPRITE_PETUNIA,
SPRITE_POSIE,
SPRITE_LILY,
SPRITE_ROSIE,
SPRITE_SUN,
SPRITE_LAKILULU,
SPRITE_NINJI,
SPRITE_MAYOR_PENGUIN,
SPRITE_MAYOR_PENGUIN_WIFE,
SPRITE_PENGUIN_PATROL,
SPRITE_HERRINGWAY,
SPRITE_MERLE,
SPRITE_STAR_ROD,
SPRITE_FIRE,
SPRITE_COIN,
SPRITE_PARADE_PEACH,
SPRITE_PARADE_KOOPAS,
SPRITE_PARADE_BURNT_BOWSER,
SPRITE_PARADE_LUIGI,
SPRITE_PARADE_PARTNERS,
SPRITE_PARADE_YOSHIS,
SPRITE_PARADE_KOLORADOS,
SPRITE_PARADE_CHICKS,
SPRITE_PARADE_ICE_SHOW,
SPRITE_PARADE_TOADS,
SPRITE_PARADE_BATONS,
SPRITE_PARADE_DRUMS,
SPRITE_PARADE_FLAGS,
SPRITE_PARADE_HORNS,
SPRITE_PARADE_TUBBA_BALLOON,
SPRITE_PARADE_WIZARDS,
SPRITE_PARADE_MARIO,
SPRITE_PARADE_SHY_GUYS,
SPRITE_PARADE_TWINK,
SPRITE_LEAF,
};
#endif #endif

View File

@ -51,10 +51,10 @@ void func_80036130(void) {
D_800A0944 = 0x00; D_800A0944 = 0x00;
if (gGameStatusPtr->prevArea != gGameStatusPtr->areaID) { if (gGameStatusPtr->prevArea != gGameStatusPtr->areaID) {
gGameStatusPtr->changedArea = 1; gGameStatusPtr->didAreaChange = TRUE;
gGameStatusPtr->prevArea = gGameStatusPtr->areaID; gGameStatusPtr->prevArea = gGameStatusPtr->areaID;
} else { } else {
gGameStatusPtr->changedArea = 0; gGameStatusPtr->didAreaChange = FALSE;
} }
} }

View File

@ -113,40 +113,45 @@ void disable_npc_shadow(Npc* npc) {
func_802DE2AC(s32 arg0, s32 arg1, f32 arg2); func_802DE2AC(s32 arg0, s32 arg1, f32 arg2);
void set_npc_sprite(Npc* npc, s32 arg1, s32 arg2) { void set_npc_sprite(Npc* npc, s32 anim, s32 arg2) {
s32 flagsTemp; s32 flagsTemp;
ASSERT(((npc->flags & 0x1000000)) || (func_802DE5E8(npc->unk_24) == 0)); ASSERT((npc->flags & 0x1000000) || func_802DE5E8(npc->unk_24) == 0);
npc->unk_B0 = arg2; npc->unk_B0 = arg2;
if (!(npc->flags & 0x1000000)) { if (!(npc->flags & 0x1000000)) {
npc->unk_24 = func_802DE0EC(arg1, arg2); npc->unk_24 = func_802DE0EC(anim, arg2);
ASSERT(!(npc->unk_24 < 0)); ASSERT(npc->unk_24 >= 0);
} }
flagsTemp = npc->flags; flagsTemp = npc->flags;
npc->currentAnim = arg1; npc->currentAnim = anim;
if (!(flagsTemp & 0x40000000)) { if (!(flagsTemp & 0x40000000)) {
if (!(flagsTemp & 0x1000000)) { if (!(flagsTemp & 0x1000000)) {
func_802DE2AC(npc->unk_24, arg1, npc->animationSpeed); func_802DE2AC(npc->unk_24, anim, npc->animationSpeed);
} }
} }
} }
void enable_npc_blur(Npc* npc) { void enable_npc_blur(Npc* npc) {
NpcBlurData* blurData; BlurBuffer* blurBuf;
s32 i; s32 i;
if (!(npc->flags & 0x100000)) { if (!(npc->flags & 0x100000)) {
npc->flags |= 0x100000; npc->flags |= 0x100000;
blurData = heap_malloc(sizeof(NpcBlurData));
npc->blurData = blurData;
ASSERT(blurData != NULL);
blurData->unk_00 = 0;
blurData->unk_01 = 0;
for (i = 0; i < ARRAY_COUNT(blurData->xpos); i++) { blurBuf = heap_malloc(sizeof(BlurBuffer));
blurData->xpos[i] = npc->pos.x; npc->blurBuf = blurBuf;
blurData->ypos[i] = npc->pos.y; ASSERT(blurBuf != NULL);
blurData->zpos[i] = npc->pos.z; blurBuf->unk_00 = 0;
blurBuf->index = 0;
for (i = 0; i < ARRAY_COUNT(blurBuf->x); i++) {
blurBuf->x[i] = npc->pos.x;
blurBuf->y[i] = npc->pos.y;
blurBuf->z[i] = npc->pos.z;
} }
} }
} }
@ -154,28 +159,29 @@ void enable_npc_blur(Npc* npc) {
void disable_npc_blur(Npc* npc) { void disable_npc_blur(Npc* npc) {
if (npc->flags & 0x100000) { if (npc->flags & 0x100000) {
npc->flags &= ~0x100000; npc->flags &= ~0x100000;
heap_free(npc->blurData);
npc->blurData = NULL; heap_free(npc->blurBuf);
npc->blurBuf = NULL;
} }
} }
void update_npc_blur(Npc* npc) { void update_npc_blur(Npc* npc) {
NpcBlurData* blurData = npc->blurData; BlurBuffer* blurBuf = npc->blurBuf;
s32 index = blurData->unk_01; s32 index = blurBuf->index;
blurData->xpos[index] = npc->pos.x; blurBuf->x[index] = npc->pos.x;
blurData->ypos[index] = npc->pos.y; blurBuf->y[index] = npc->pos.y;
blurData->zpos[index] = npc->pos.z; blurBuf->z[index] = npc->pos.z;
index++; index++;
if (index >= 20) { if (index >= 20) {
index = 0; index = 0;
} }
blurData->unk_01 = index; blurBuf->index = index;
} }
INCLUDE_ASM(s32, "code_13870_len_6980", appedGfx_npc_blur); INCLUDE_ASM(s32, "code_13870_len_6980", appendGfx_npc_blur);
INCLUDE_ASM(s32, "code_13870_len_6980", func_8003B184); INCLUDE_ASM(s32, "code_13870_len_6980", func_8003B184);
@ -290,6 +296,7 @@ INCLUDE_ASM(s32, "code_13870_len_6980", func_8003E0D4);
INCLUDE_ASM(s32, "code_13870_len_6980", func_8003E1D0); INCLUDE_ASM(s32, "code_13870_len_6980", func_8003E1D0);
/// @see set_defeated
void COPY_set_defeated(s32 mapID, s32 encounterID) { void COPY_set_defeated(s32 mapID, s32 encounterID) {
EncounterStatus* currentEncounter = &gCurrentEncounter; EncounterStatus* currentEncounter = &gCurrentEncounter;
s32 encounterIdx = encounterID / 32; s32 encounterIdx = encounterID / 32;
@ -300,6 +307,13 @@ void COPY_set_defeated(s32 mapID, s32 encounterID) {
encounterShift = flag; encounterShift = flag;
flag = currentEncounter->defeatFlags[mapID][encounterIdx]; flag = currentEncounter->defeatFlags[mapID][encounterIdx];
currentEncounter->defeatFlags[mapID][encounterIdx] = flag | (1 << encounterShift); currentEncounter->defeatFlags[mapID][encounterIdx] = flag | (1 << encounterShift);
// TODO: The below should work but has regalloc issues:
/*EncounterStatus *currentEncounter = &gCurrentEncounter;
s32 encounterIdx = encounterID / 32;
s32 encounterShift = encounterID % 32;
currentEncounter->defeatFlags[mapID][encounterIdx] |= (1 << encounterShift);*/
} }
void func_8003E338(void) { void func_8003E338(void) {
@ -319,6 +333,7 @@ void func_8003E338(void) {
currentEncounter->npcGroupList = 0; currentEncounter->npcGroupList = 0;
currentEncounter->unk_08 = 0; currentEncounter->unk_08 = 0;
currentEncounter->dropWhackaBump = 0; currentEncounter->dropWhackaBump = 0;
for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) { for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) {
for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) { for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) {
currentEncounter->defeatFlags[i][j] = 0; currentEncounter->defeatFlags[i][j] = 0;
@ -344,14 +359,14 @@ void clear_encounter_status(void) {
currentEncounter->encounterList[i] = 0; currentEncounter->encounterList[i] = 0;
} }
if (gGameStatusPtr->changedArea != 0) { if (gGameStatusPtr->didAreaChange) {
for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) { for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) {
for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) { for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) {
currentEncounter->defeatFlags[i][j] = 0; currentEncounter->defeatFlags[i][j] = 0;
} }
} }
if (gGameStatusPtr->changedArea != 0) { if (gGameStatusPtr->didAreaChange) {
for (i = 0; i < ARRAY_COUNT(currentEncounter->recentMaps); i++) { for (i = 0; i < ARRAY_COUNT(currentEncounter->recentMaps); i++) {
currentEncounter->recentMaps[i] = -1; currentEncounter->recentMaps[i] = -1;
} }
@ -369,9 +384,10 @@ void clear_encounter_status(void) {
currentEncounter->npcGroupList = 0; currentEncounter->npcGroupList = 0;
currentEncounter->unk_08 = 0; currentEncounter->unk_08 = 0;
currentEncounter->unk_12 = 0; currentEncounter->unk_12 = 0;
func_80045AC0(); func_80045AC0();
gGameState = 0; gGameState = 0;
bind_dynamic_entity_3(0, func_8003E670); bind_dynamic_entity_3(NULL, func_8003E670);
} }
void func_8003E50C(void) { void func_8003E50C(void) {
@ -402,6 +418,7 @@ void update_counters(void) {
update_encounters_post_battle(); update_encounters_post_battle();
break; break;
} }
update_merlee_messages(); update_merlee_messages();
} }
@ -425,6 +442,7 @@ void draw_encounter_ui(void) {
draw_encounters_post_battle(); draw_encounters_post_battle();
break; break;
} }
draw_merlee_messages(); draw_merlee_messages();
} }
@ -439,29 +457,30 @@ void draw_first_strike_ui(void) {
void func_8003E670(void) { void func_8003E670(void) {
} }
void make_npcs(s8 flags, s8 mapID, s32* NpcGroupList) { void make_npcs(s8 flags, s8 mapID, s32* npcGroupList) {
EncounterStatus* currentEncounter = &gCurrentEncounter; EncounterStatus* currentEncounter = &gCurrentEncounter;
s32 i; s32 i;
s32 j; s32 j;
currentEncounter->resetMapEncounterFlags = flags; currentEncounter->resetMapEncounterFlags = flags;
currentEncounter->mapID = mapID; currentEncounter->mapID = mapID;
currentEncounter->npcGroupList = NpcGroupList; currentEncounter->npcGroupList = npcGroupList;
if (gGameStatusPtr->changedArea != 0) {
if (gGameStatusPtr->didAreaChange) {
for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) { for (i = 0; i < ARRAY_COUNT(currentEncounter->defeatFlags); i++) {
for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) { for (j = 0; j < ARRAY_COUNT(currentEncounter->defeatFlags[i]); j++) {
currentEncounter->defeatFlags[i][j] = 0; currentEncounter->defeatFlags[i][j] = 0;
} }
} }
if (gGameStatusPtr->changedArea != 0) { if (gGameStatusPtr->didAreaChange) {
for (i = 0; i < ARRAY_COUNT(currentEncounter->recentMaps); i++) { for (i = 0; i < ARRAY_COUNT(currentEncounter->recentMaps); i++) {
currentEncounter->recentMaps[i] = -1; currentEncounter->recentMaps[i] = -1;
} }
} }
} }
if (NpcGroupList != NULL) { if (npcGroupList != NULL) {
gGameState = 1; gGameState = 1;
D_8009A678 = 1; D_8009A678 = 1;
D_8009A5D0 = 0; D_8009A5D0 = 0;

View File

@ -33,31 +33,31 @@ void clear_player_data(void) {
playerData->currentPartner = 0; playerData->currentPartner = 0;
for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) {
playerData->partners[i].enabled = 0; playerData->partners[i].enabled = FALSE;
playerData->partners[i].level = 0; playerData->partners[i].level = 0;
playerData->partners[i].unk_02[0] = 0; playerData->partners[i].unk_02[0] = 0;
playerData->partners[i].unk_02[1] = 0; playerData->partners[i].unk_02[1] = 0;
playerData->partners[i].unk_02[2] = 0; playerData->partners[i].unk_02[2] = 0;
} }
for (i = ARRAY_COUNT(playerData->keyItems) - 1; i >= 0; i--) { for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
playerData->keyItems[i] = 0; playerData->keyItems[i] = ITEM_NONE;
} }
for (i = ARRAY_COUNT(playerData->badges) - 1; i >= 0; i--) { for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) {
playerData->badges[i] = 0; playerData->badges[i] = ITEM_NONE;
} }
for (i = ARRAY_COUNT(playerData->invItems) - 1; i >= 0; i--) { for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
playerData->invItems[i] = 0; playerData->invItems[i] = ITEM_NONE;
} }
for (i = ARRAY_COUNT(playerData->equippedBadges) - 1; i >= 0; i--) { for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
playerData->equippedBadges[i] = 0; playerData->equippedBadges[i] = ITEM_NONE;
} }
for (i = ARRAY_COUNT(playerData->storedItems) - 1; i >= 0; i--) { for (i = 0; i < ARRAY_COUNT(playerData->storedItems); i++) {
playerData->storedItems[i] = 0; playerData->storedItems[i] = ITEM_NONE;
} }
playerData->otherHitsTaken = 0; playerData->otherHitsTaken = 0;
@ -106,7 +106,7 @@ s32 add_item(s32 itemID) {
sort_items(); sort_items();
for (i = 0; i < ARRAY_COUNT(gPlayerData.invItems); i++) { for (i = 0; i < ARRAY_COUNT(gPlayerData.invItems); i++) {
if (playerData->invItems[i] == 0) { if (playerData->invItems[i] == ITEM_NONE) {
break; break;
} }
} }
@ -125,7 +125,7 @@ s32 get_item_count(void) {
s32 sum = 0; s32 sum = 0;
for (i; i < ARRAY_COUNT(gPlayerData.invItems); i++) { for (i; i < ARRAY_COUNT(gPlayerData.invItems); i++) {
if (playerData->invItems[i] != 0) { if (playerData->invItems[i] != ITEM_NONE) {
sum++; sum++;
} }
} }
@ -137,6 +137,7 @@ s32 get_item_empty_count(void) {
return ARRAY_COUNT(gPlayerData.invItems) - get_item_count(); return ARRAY_COUNT(gPlayerData.invItems) - get_item_count();
} }
/// @returns the index of the given item in the player's inventory, or -1 if not found
s32 find_item(s32 itemID) { s32 find_item(s32 itemID) {
PlayerData* playerData = &gPlayerData; PlayerData* playerData = &gPlayerData;
StaticItem* item = &gItemTable[itemID]; StaticItem* item = &gItemTable[itemID];
@ -169,17 +170,18 @@ s32 find_item(s32 itemID) {
return i; return i;
} }
/// Bubbles up player inventory items such that all ITEM_NONE values are at the bottom.
void sort_items(void) { void sort_items(void) {
PlayerData* playerData = &gPlayerData; PlayerData* playerData = &gPlayerData;
int j; s32 j;
int i; s32 i;
for (i = ARRAY_COUNT(playerData->invItems) - 2; i >= 0; i--) { for (i = ARRAY_COUNT(playerData->invItems) - 2; i >= 0; i--) {
if (playerData->invItems[i] != 0) { if (playerData->invItems[i] != ITEM_NONE) {
for (j = ARRAY_COUNT(playerData->invItems) - 1; i < j; j--) { for (j = ARRAY_COUNT(playerData->invItems) - 1; i < j; j--) {
if (playerData->invItems[j] == 0) { if (playerData->invItems[j] == ITEM_NONE) {
playerData->invItems[j] = playerData->invItems[i]; playerData->invItems[j] = playerData->invItems[i];
playerData->invItems[i] = 0; playerData->invItems[i] = ITEM_NONE;
break; break;
} }
} }
@ -197,7 +199,7 @@ s32 add_badge(s32 itemID) {
} }
for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) {
if (playerData->badges[i] == 0) { if (playerData->badges[i] == ITEM_NONE) {
break; break;
} }
} }
@ -215,7 +217,7 @@ s32 store_item(s32 itemID) {
s32 i; s32 i;
for (i = 0; i < ARRAY_COUNT(gPlayerData.storedItems); i++) { for (i = 0; i < ARRAY_COUNT(gPlayerData.storedItems); i++) {
if (playerData->storedItems[i] == 0) { if (playerData->storedItems[i] == ITEM_NONE) {
break; break;
} }
} }
@ -235,7 +237,7 @@ s32 get_stored_count(void) {
s32 sum = 0; s32 sum = 0;
for (i; i < ARRAY_COUNT(gPlayerData.storedItems); i++) { for (i; i < ARRAY_COUNT(gPlayerData.storedItems); i++) {
if (playerData->storedItems[i] != 0) { if (playerData->storedItems[i] != ITEM_NONE) {
sum++; sum++;
} }
} }

View File

@ -25,7 +25,7 @@ void clear_area_flags(void) {
SaveData* saveFile = &gCurrentSaveFile; SaveData* saveFile = &gCurrentSaveFile;
s32 i; s32 i;
if (gGameStatusPtr->changedArea) { if (gGameStatusPtr->didAreaChange) {
for (i = 0; i < ARRAY_COUNT(saveFile->areaFlags); i++) { for (i = 0; i < ARRAY_COUNT(saveFile->areaFlags); i++) {
saveFile->areaFlags[i] = 0; saveFile->areaFlags[i] = 0;
} }

View File

@ -173,18 +173,18 @@ INCLUDE_ASM(s32, "code_fa4c0_len_3bf0", func_802D663C);
ApiStatus RemoveKeyItemAt(ScriptInstance* script, s32 isInitialCall) { ApiStatus RemoveKeyItemAt(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
s32 index = get_variable(script, *args++); s32 index = get_variable(script, *args++);
s16* ptrKeyItems = (s16*) &gPlayerData.keyItems; s16* ptrKeyItems = &gPlayerData.keyItems;
ptrKeyItems[index] = 0; ptrKeyItems[index] = ITEM_NONE;
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
ApiStatus RemoveItemAt(ScriptInstance* script, s32 isInitialCall) { ApiStatus RemoveItemAt(ScriptInstance* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos; Bytecode* args = script->ptrReadPos;
s32 index = get_variable(script, *args++); s32 index = get_variable(script, *args++);
s16* ptrInvItems = (s16*) &gPlayerData.invItems; s16* ptrInvItems = &gPlayerData.invItems;
ptrInvItems[index] = 0; ptrInvItems[index] = ITEM_NONE;
sort_items(); sort_items();
return ApiStatus_DONE2; return ApiStatus_DONE2;
} }
@ -202,7 +202,7 @@ ApiStatus AddKeyItem(ScriptInstance* script, s32 isInitialCall) {
} }
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
if (playerData->keyItems[i] == 0) { if (playerData->keyItems[i] == ITEM_NONE) {
break; break;
} }
} }
@ -319,7 +319,7 @@ ApiStatus RemoveItem(ScriptInstance* script, s32 isInitialCall) {
if (itemIndex >= 0) { if (itemIndex >= 0) {
// This is `playerData->invItems[i]`, but we have to do weird // This is `playerData->invItems[i]`, but we have to do weird
// pointer math to get the output asm to exactly match :/ // pointer math to get the output asm to exactly match :/
*(playerData->invItems + i) = 0; *(playerData->invItems + i) = ITEM_NONE;
} }
sort_items(); sort_items();
@ -406,13 +406,13 @@ ApiStatus RemoveBadge(ScriptInstance* script, s32 isInitialCall) {
for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) {
if (playerData->badges[i] == badge) { if (playerData->badges[i] == badge) {
playerData->badges[i] = 0; playerData->badges[i] = ITEM_NONE;
} }
} }
for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) { for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
if (playerData->equippedBadges[i] == badge) { if (playerData->equippedBadges[i] == badge) {
playerData->equippedBadges[i] = 0; playerData->equippedBadges[i] = ITEM_NONE;
} }
} }
return ApiStatus_DONE2; return ApiStatus_DONE2;

View File

@ -8,7 +8,7 @@ glabel D_800984C0
.section .text .section .text
glabel appedGfx_npc_blur glabel appendGfx_npc_blur
/* 16238 8003AE38 27BDFF08 */ addiu $sp, $sp, -0xf8 /* 16238 8003AE38 27BDFF08 */ addiu $sp, $sp, -0xf8
/* 1623C 8003AE3C F7BC00E8 */ sdc1 $f28, 0xe8($sp) /* 1623C 8003AE3C F7BC00E8 */ sdc1 $f28, 0xe8($sp)
/* 16240 8003AE40 4480E000 */ mtc1 $zero, $f28 /* 16240 8003AE40 4480E000 */ mtc1 $zero, $f28

View File

@ -149,8 +149,8 @@ glabel render_npcs
/* 15DEC 8003A9EC 4600018D */ trunc.w.s $f6, $f0 /* 15DEC 8003A9EC 4600018D */ trunc.w.s $f6, $f0
/* 15DF0 8003A9F0 E6260004 */ swc1 $f6, 4($s1) /* 15DF0 8003A9F0 E6260004 */ swc1 $f6, 4($s1)
/* 15DF4 8003A9F4 0220202D */ daddu $a0, $s1, $zero /* 15DF4 8003A9F4 0220202D */ daddu $a0, $s1, $zero
/* 15DF8 8003A9F8 3C028004 */ lui $v0, %hi(appedGfx_npc_blur) /* 15DF8 8003A9F8 3C028004 */ lui $v0, %hi(appendGfx_npc_blur)
/* 15DFC 8003A9FC 2442AE38 */ addiu $v0, $v0, %lo(appedGfx_npc_blur) /* 15DFC 8003A9FC 2442AE38 */ addiu $v0, $v0, %lo(appendGfx_npc_blur)
/* 15E00 8003AA00 AE22000C */ sw $v0, 0xc($s1) /* 15E00 8003AA00 AE22000C */ sw $v0, 0xc($s1)
/* 15E04 8003AA04 24020011 */ addiu $v0, $zero, 0x11 /* 15E04 8003AA04 24020011 */ addiu $v0, $zero, 0x11
/* 15E08 8003AA08 AE300008 */ sw $s0, 8($s1) /* 15E08 8003AA08 AE300008 */ sw $s0, 8($s1)

View File

@ -260,7 +260,7 @@ set_npc_sprite = 0x8003AC5C; // type:func rom:0x1605C
enable_npc_blur = 0x8003AD24; // type:func rom:0x16124 enable_npc_blur = 0x8003AD24; // type:func rom:0x16124
disable_npc_blur = 0x8003ADAC; // type:func rom:0x161AC disable_npc_blur = 0x8003ADAC; // type:func rom:0x161AC
update_npc_blur = 0x8003ADF8; // type:func rom:0x161F8 update_npc_blur = 0x8003ADF8; // type:func rom:0x161F8
appedGfx_npc_blur = 0x8003AE38; // type:func rom:0x16238 appendGfx_npc_blur = 0x8003AE38; // type:func rom:0x16238
func_8003B184 = 0x8003B184; // type:func rom:0x16584 func_8003B184 = 0x8003B184; // type:func rom:0x16584
func_8003B198 = 0x8003B198; // type:func rom:0x16598 func_8003B198 = 0x8003B198; // type:func rom:0x16598
func_8003B1A8 = 0x8003B1A8; // type:func rom:0x165A8 func_8003B1A8 = 0x8003B1A8; // type:func rom:0x165A8