diff --git a/docs/engine/sprites.md b/docs/engine/sprites.md index 5e00ad09..ddd58e11 100644 --- a/docs/engine/sprites.md +++ b/docs/engine/sprites.md @@ -80,9 +80,9 @@ Note : | SPRITE_STATUS_ROTATION_SCALING | 1 << 3 | Enables affine transformation when drawing the sprite. | SPRITE_STATUS_UNKNOWN_10 | 1 << 4 | Unknown purpose, related to draw order. | SPRITE_STATUS_MOSAIC | 1 << 5 | Whether mosaic is enabled, left over from fusion, doesn't seem to work properly. -| SPRITE_STATUS_XFLIP | 1 << 6 | Whether the sprite is X-flipped when drawn. +| SPRITE_STATUS_X_FLIP | 1 << 6 | Whether the sprite is X-flipped when drawn. | SPRITE_STATUS_UNKNOWN_80 | 1 << 7 | Unknown purpose, related to obj affine. -| SPRITE_STATUS_YFLIP | 1 << 8 | Whether the sprite is Y-flipped when drawn. +| SPRITE_STATUS_Y_FLIP | 1 << 8 | Whether the sprite is Y-flipped when drawn. | SPRITE_STATUS_FACING_RIGHT | 1 << 9 | Whether the sprite is facing right, purely informative and only used in the engine in the movement functions. | SPRITE_STATUS_FACING_DOWN | 1 << 10 | Whether the sprite is facing down, purely informative and only used in the engine in the movement functions. | SPRITE_STATUS_SAMUS_COLLIDING | 1 << 11 | Whether the sprite is colliding with Samus, only used on some [sprite/samus collision](#samus-collision). diff --git a/include/constants/audio.h b/include/constants/audio.h index 7c490055..cb53e440 100644 --- a/include/constants/audio.h +++ b/include/constants/audio.h @@ -120,11 +120,57 @@ #define SOUND_SUITLESS_GRABBING_LEDGE 0x9C #define SOUND_SUITLESS_JUMP 0x9D #define SOUND_SUITLESS_CRAWL 0x9E - +#define SOUND_PISTOL_SHOT 0x9F +#define SOUND_CHARGED_PISTOL_SHOT 0xA0 #define SOUND_SUITLESS_FOOTSTEPS_WET_GROUND_1 0xA1 #define SOUND_SUITLESS_FOOTSTEPS_WET_GROUND_2 0xA2 #define SOUND_SUITLESS_LANDING_ON_WET_GROUND 0xA3 +#define SOUND_BEAM_SHOT 0xC8 +#define SOUND_BEAM_LONG_SHOT 0xC9 +#define SOUND_BEAM_ICE_SHOT 0xCA +#define SOUND_BEAM_LONG_ICE_SHOT 0xCB +#define SOUND_BEAM_WAVE_SHOT 0xCC +#define SOUND_BEAM_WAVE_LONG_SHOT 0xCD +#define SOUND_BEAM_WAVE_ICE_SHOT 0xCE +#define SOUND_BEAM_WAVE_LONG_ICE_SHOT 0xCF +#define SOUND_BEAM_PLASMA_SHOT 0xD0 +#define SOUND_BEAM_PLASMA_LONG_SHOT 0xD1 +#define SOUND_BEAM_PLASMA_ICE_SHOT 0xD2 +#define SOUND_BEAM_PLASMA_LONG_ICE_SHOT 0xD3 +#define SOUND_BEAM_PLASMA_WAVE_SHOT 0xD4 +#define SOUND_BEAM_PLASMA_WAVE_LONG_SHOT 0xD5 +#define SOUND_BEAM_PLASMA_WAVE_ICE_SHOT 0xD6 +#define SOUND_BEAM_PLASMA_WAVE_LONG_ICE_SHOT 0xD7 + +#define SOUND_CHARGED_BEAM_SHOT 0xE8 +#define SOUND_CHARGED_BEAM_LONG_SHOT 0xE9 +#define SOUND_CHARGED_BEAM_ICE_SHOT 0xEA +#define SOUND_CHARGED_BEAM_LONG_ICE_SHOT 0xEB +#define SOUND_CHARGED_BEAM_WAVE_SHOT 0xEC +#define SOUND_CHARGED_BEAM_WAVE_LONG_SHOT 0xED +#define SOUND_CHARGED_BEAM_WAVE_ICE_SHOT 0xEE +#define SOUND_CHARGED_BEAM_WAVE_LONG_ICE_SHOT 0xEF +#define SOUND_CHARGED_BEAM_PLASMA_SHOT 0xF0 +#define SOUND_CHARGED_BEAM_PLASMA_LONG_SHOT 0xF1 +#define SOUND_CHARGED_BEAM_PLASMA_ICE_SHOT 0xF2 +#define SOUND_CHARGED_BEAM_PLASMA_LONG_ICE_SHOT 0xF3 +#define SOUND_CHARGED_BEAM_PLASMA_WAVE_SHOT 0xF4 +#define SOUND_CHARGED_BEAM_PLASMA_WAVE_LONG_SHOT 0xF5 +#define SOUND_CHARGED_BEAM_PLASMA_WAVE_ICE_SHOT 0xF6 +#define SOUND_CHARGED_BEAM_PLASMA_WAVE_LONG_ICE_SHOT 0xF7 + +#define SOUND_MISSILE_SHOT 0xF8 +#define SOUND_MISSILE_THRUST 0xF9 + +#define SOUND_SUPER_MISSILE_SHOT 0xFB +#define SOUND_SUPER_MISSILE_THRUST 0xFC + +#define SOUND_BOMB_SET 0xFE +#define SOUND_BOMB_EXPLOSION 0xFF +#define SOUND_POWER_BOMB_SET 0x100 +#define SOUND_POWER_BOMB_EXPLOSION 0x101 + #define SOUND_ELEVATOR 0x10E #define SOUND_CHOZO_STATUE_REFILL 0x10F @@ -139,6 +185,7 @@ #define SOUND_SHINESPARK_DESTROYED 0x131 #define SOUND_SUDO_SCREW_DESTROYED 0x132 #define SOUND_SPEEDBOOSTER_DESTROYED 0x133 +#define SOUND_FREEZING_SPRITE 0x140 #define SOUND_RIPPER_DAMAGED 0x149 diff --git a/include/constants/particle.h b/include/constants/particle.h index 703a9cf7..94d63f8e 100644 --- a/include/constants/particle.h +++ b/include/constants/particle.h @@ -1,71 +1,80 @@ -#define PE_SPRITE_SPLASH_WATER_SMALL 0x0 -#define PE_SPRITE_SPLASH_WATER_BIG 0x1 -#define PE_SPRITE_SPLASH_WATER_HUGE 0x2 -#define PE_SPRITE_SPLASH_LAVA_SMALL 0x3 -#define PE_SPRITE_SPLASH_LAVA_BIG 0x4 -#define PE_SPRITE_SPLASH_LAVA_HUGE 0x5 -#define PE_SPRITE_SPLASH_ACID_SMALL 0x6 -#define PE_SPRITE_SPLASH_ACID_BIG 0x7 -#define PE_SPRITE_SPLASH_ACID_HUGE 0x8 -#define PE_SHOOTING_BEAM_LEFT 0x9 -#define PE_SHOOTING_BEAM_DIAG_UP_LEFT 0xA -#define PE_SHOOTING_BEAM_DIAG_DOWN_LEFT 0xB -#define PE_SHOOTING_BEAM_UP_LEFT 0xC -#define PE_SHOOTING_BEAM_DOWN_LEFT 0xD -#define PE_SHOOTING_BEAM_RIGHT 0xE -#define PE_SHOOTING_BEAM_DIAG_UP_RIGHT 0xF -#define PE_SHOOTING_BEAM_DIAG_DOWN_RIGHT 0x10 -#define PE_SHOOTING_BEAM_UP_RIGHT 0x11 -#define PE_SHOOTING_BEAM_DOWN_RIGHT 0x12 -#define PE_BOMB 0x13 -#define PE_MISSILE_TRAIL 0x14 -#define PE_SUPER_MISSILE_TRAIL 0x15 -#define PE_BEAM_TRAILING_RIGHT 0x16 -#define PE_BEAM_TRAILING_LEFT 0x17 -#define PE_CHARGED_LONG_BEAM_TRAIL 0x18 -#define PE_CHARGED_ICE_BEAM_TRAIL 0x19 -#define PE_CHARGED_WAVE_BEAM_TRAIL 0x1A -#define PE_CHARGED_PLASMA_BEAM_TRAIL 0x1B -#define PE_CHARGED_FULL_BEAM_TRAIL 0x1C -#define PE_CHARGED_PISTOL_TRAIL 0x1D -#define PE_SPRITE_EXPLOSION_HUGE 0x1E -#define PE_SPRITE_EXPLOSION_SMALL 0x1F -#define PE_SPRITE_EXPLOSION_MEDIUM 0x20 -#define PE_SPRITE_EXPLOSION_BIG 0x21 -#define PE_SPRITE_EXPLOSION_SINGLE_THEN_BIG 0x22 -#define PE_SCREW_ATTACK_DESTROYED 0x23 -#define PE_SHINESPARK_DESTROYED 0x24 -#define PE_SUDO_SCREW_DESTROYED 0x25 -#define PE_SPEEDBOOSTER_DESTROYED 0x26 -#define PE_MAIN_BOSS_DEATH 0x27 -#define PE_FREEZING_SPRITE_WITH_ICE 0x28 -#define PE_FREEZING_SPRITE_WITH_CHARGED_ICE 0x29 -#define PE_HITTING_SOMETHING_WITH_NORMAL_BEAM 0x2A -#define PE_HITTING_SOMETHING_WITH_LONG_BEAM 0x2B -#define PE_HITTING_SOMETHING_WITH_ICE_BEAM 0x2C -#define PE_HITTING_SOMETHING_WITH_WAVE_BEAM 0x2D -#define PE_HITTING_SOMETHING_WITH_PLASMA_BEAM 0x2E -#define PE_HITTING_SOMETHING_INVINCIBLE 0x2F -#define PE_HITTING_SOMETHING_WITH_MISSILE 0x30 -#define PE_HITTING_SOMETHING_WITH_SUPER_MISSILE 0x31 -#define PE_HITTING_SOMETHING_WITH_FULL_BEAM_NO_PLASMA 0x32 -#define PE_HITTING_SOMETHING_WITH_FULL_BEAM 0x33 -#define PE_SMALL_DUST 0x34 -#define PE_MEDIUM_DUST 0x35 -#define PE_TWO_MEDIUM_DUST 0x36 -#define PE_SECOND_SMALL_DUST 0x37 -#define PE_SECOND_MEDIUM_DUST 0x38 -#define PE_SECOND_TWO_MEDIUM_DUST 0x39 -#define PE_SAMUS_REFLECTION 0x3A -#define PE_CHARGING_BEAM 0x3B -#define PE_ESCAPE 0x3C +#ifndef PARTICLE_CONSTANTS_H +#define PARTICLE_CONSTANTS_H -#define PARTICLE_STATUS_NONE 0x0 -#define PARTICLE_STATUS_EXISTS 0x1 -#define PARTICLE_STATUS_ONSCREEN 0x2 -#define PARTICLE_STATUS_EXPLOSION 0x4 -#define PARTICLE_STATUS_NOT_DRAWN 0x8 -#define PARTICLE_STATUS_LIVE_OFF_SCREEN 0x10 -#define PARTICLE_STATUS_LOW_PRIORITY 0x20 -#define PARTICLE_STATUS_ABSOLUTE_POSITION 0x40 -#define PARTICLE_STATUS_XFLIP 0x80 \ No newline at end of file +enum ParticleEffectId { + PE_SPRITE_SPLASH_WATER_SMALL, + PE_SPRITE_SPLASH_WATER_BIG, + PE_SPRITE_SPLASH_WATER_HUGE, + PE_SPRITE_SPLASH_LAVA_SMALL, + PE_SPRITE_SPLASH_LAVA_BIG, + PE_SPRITE_SPLASH_LAVA_HUGE, + PE_SPRITE_SPLASH_ACID_SMALL, + PE_SPRITE_SPLASH_ACID_BIG, + PE_SPRITE_SPLASH_ACID_HUGE, + PE_SHOOTING_BEAM_LEFT, + PE_SHOOTING_BEAM_DIAG_UP_LEFT, + PE_SHOOTING_BEAM_DIAG_DOWN_LEFT, + PE_SHOOTING_BEAM_UP_LEFT, + PE_SHOOTING_BEAM_DOWN_LEFT, + PE_SHOOTING_BEAM_RIGHT, + PE_SHOOTING_BEAM_DIAG_UP_RIGHT, + PE_SHOOTING_BEAM_DIAG_DOWN_RIGHT, + PE_SHOOTING_BEAM_UP_RIGHT, + PE_SHOOTING_BEAM_DOWN_RIGHT, + PE_BOMB, + PE_MISSILE_TRAIL, + PE_SUPER_MISSILE_TRAIL, + PE_BEAM_TRAILING_RIGHT, + PE_BEAM_TRAILING_LEFT, + PE_CHARGED_LONG_BEAM_TRAIL, + PE_CHARGED_ICE_BEAM_TRAIL, + PE_CHARGED_WAVE_BEAM_TRAIL, + PE_CHARGED_PLASMA_BEAM_TRAIL, + PE_CHARGED_FULL_BEAM_TRAIL, + PE_CHARGED_PISTOL_TRAIL, + PE_SPRITE_EXPLOSION_HUGE, + PE_SPRITE_EXPLOSION_SMALL, + PE_SPRITE_EXPLOSION_MEDIUM, + PE_SPRITE_EXPLOSION_BIG, + PE_SPRITE_EXPLOSION_SINGLE_THEN_BIG, + PE_SCREW_ATTACK_DESTROYED, + PE_SHINESPARK_DESTROYED, + PE_SUDO_SCREW_DESTROYED, + PE_SPEEDBOOSTER_DESTROYED, + PE_MAIN_BOSS_DEATH, + PE_FREEZING_SPRITE_WITH_ICE, + PE_FREEZING_SPRITE_WITH_CHARGED_ICE, + PE_HITTING_SOMETHING_WITH_NORMAL_BEAM, + PE_HITTING_SOMETHING_WITH_LONG_BEAM, + PE_HITTING_SOMETHING_WITH_ICE_BEAM, + PE_HITTING_SOMETHING_WITH_WAVE_BEAM, + PE_HITTING_SOMETHING_WITH_PLASMA_BEAM, + PE_HITTING_SOMETHING_INVINCIBLE, + PE_HITTING_SOMETHING_WITH_MISSILE, + PE_HITTING_SOMETHING_WITH_SUPER_MISSILE, + PE_HITTING_SOMETHING_WITH_FULL_BEAM_NO_PLASMA, + PE_HITTING_SOMETHING_WITH_FULL_BEAM, + PE_SMALL_DUST, + PE_MEDIUM_DUST, + PE_TWO_MEDIUM_DUST, + PE_SECOND_SMALL_DUST, + PE_SECOND_MEDIUM_DUST, + PE_SECOND_TWO_MEDIUM_DUST, + PE_SAMUS_REFLECTION, + PE_CHARGING_BEAM, + PE_ESCAPE, + + PE_END +}; + +#define PARTICLE_STATUS_NONE 0 +#define PARTICLE_STATUS_EXISTS (1 << 0) +#define PARTICLE_STATUS_ONSCREEN (1 << 1) +#define PARTICLE_STATUS_EXPLOSION (1 << 2) +#define PARTICLE_STATUS_NOT_DRAWN (1 << 3) +#define PARTICLE_STATUS_LIVE_OFF_SCREEN (1 << 4) +#define PARTICLE_STATUS_LOW_PRIORITY (1 << 5) +#define PARTICLE_STATUS_ABSOLUTE_POSITION (1 << 6) +#define PARTICLE_STATUS_X_FLIP (1 << 7) + +#endif /* PARTICLE_CONSTANTS_H */ diff --git a/include/constants/projectile.h b/include/constants/projectile.h index eda9a025..daa69cda 100644 --- a/include/constants/projectile.h +++ b/include/constants/projectile.h @@ -1,37 +1,48 @@ -#define PROJECTILE_CATEGORY_NONE 0x0 -#define PROJECTILE_CATEGORY_BEAM 0x1 -#define PROJECTILE_CATEGORY_MISSILE 0x2 -#define PROJECTILE_CATEGORY_SUPER_MISSILE 0x3 -#define PROJECTILE_CATEGORY_BOMB 0x4 -#define PROJECTILE_CATEGORY_POWER_BOMB 0x5 -#define PROJECTILE_CATEGORY_CHARGED_BEAM 0x6 +#ifndef PROJECTILE_CONSTANTS_H +#define PROJECTILE_CONSTANTS_H -#define PROJ_STATUS_NONE 0x0 -#define PROJ_STATUS_EXISTS 0x1 -#define PROJ_STATUS_ON_SCREEN 0x2 -#define PROJ_STATUS_NOT_DRAWN 0x4 -#define PROJ_STATUS_HIGH_PRIORITY 0x8 -#define PROJ_STATUS_CAN_AFFECT_ENVIRONMENT 0x10 -#define PROJ_STATUS_YFLIP 0x20 -#define PROJ_STATUS_XFLIP 0x40 -#define PROJ_STATUS_UNKNOWN 0x80 +#define PROJ_STATUS_NONE 0 +#define PROJ_STATUS_EXISTS (1 << 0) +#define PROJ_STATUS_ON_SCREEN (1 << 1) +#define PROJ_STATUS_NOT_DRAWN (1 << 2) +#define PROJ_STATUS_HIGH_PRIORITY (1 << 3) +#define PROJ_STATUS_CAN_AFFECT_ENVIRONMENT (1 << 4) +#define PROJ_STATUS_Y_FLIP (1 << 5) +#define PROJ_STATUS_X_FLIP (1 << 6) +#define PROJ_STATUS_UNKNOWN_80 (1 << 7) -#define PROJ_TYPE_BEAM 0x0 -#define PROJ_TYPE_LONG_BEAM 0x1 -#define PROJ_TYPE_ICE_BEAM 0x2 -#define PROJ_TYPE_WAVE_BEAM 0x3 -#define PROJ_TYPE_PLASMA_BEAM 0x4 -#define PROJ_TYPE_PISTOL 0x5 -#define PROJ_TYPE_CHARGED_BEAM 0x6 -#define PROJ_TYPE_CHARGED_LONG_BEAM 0x7 -#define PROJ_TYPE_CHARGED_ICE_BEAM 0x8 -#define PROJ_TYPE_CHARGED_WAVE_BEAM 0x9 -#define PROJ_TYPE_CHARGED_PLASMA_BEAM 0xA -#define PROJ_TYPE_CHARGED_PISTOL 0xB -#define PROJ_TYPE_MISSILE 0xC -#define PROJ_TYPE_SUPER_MISSILE 0xD -#define PROJ_TYPE_BOMB 0xE -#define PROJ_TYPE_POWER_BOMB 0xF +enum ProjectileCategory { + PROJECTILE_CATEGORY_NONE, + PROJECTILE_CATEGORY_BEAM, + PROJECTILE_CATEGORY_MISSILE, + PROJECTILE_CATEGORY_SUPER_MISSILE, + PROJECTILE_CATEGORY_BOMB, + PROJECTILE_CATEGORY_POWER_BOMB, + PROJECTILE_CATEGORY_CHARGED_BEAM, + + PROJECTILE_CATEGORY_END, +}; + +enum ProjectileType { + PROJ_TYPE_BEAM, + PROJ_TYPE_LONG_BEAM, + PROJ_TYPE_ICE_BEAM, + PROJ_TYPE_WAVE_BEAM, + PROJ_TYPE_PLASMA_BEAM, + PROJ_TYPE_PISTOL, + PROJ_TYPE_CHARGED_BEAM, + PROJ_TYPE_CHARGED_LONG_BEAM, + PROJ_TYPE_CHARGED_ICE_BEAM, + PROJ_TYPE_CHARGED_WAVE_BEAM, + PROJ_TYPE_CHARGED_PLASMA_BEAM, + PROJ_TYPE_CHARGED_PISTOL, + PROJ_TYPE_MISSILE, + PROJ_TYPE_SUPER_MISSILE, + PROJ_TYPE_BOMB, + PROJ_TYPE_POWER_BOMB, + + PROJ_TYPE_END +}; // Normal beam @@ -101,19 +112,34 @@ #define BOMB_DAMAGE 8 -#define BOMB_STAGE_INIT 0x0 -#define BOMB_STAGE_FIRST_SPIN 0x1 -#define BOMB_STAGE_FAST_SPIN 0x2 -#define BOMB_STAGE_EXPLODING 0x3 -#define BOMB_STAGE_PLACED_ON_LAUNCHER 0x4 -#define BOMB_STAGE_FIRST_SPIN_ON_LAUNCHER 0x5 -#define BOMB_STAGE_FAST_SPIN_ON_LAUNCHER 0x6 -#define BOMB_STAGE_EXPLODING_ON_LAUNCHER 0x7 +enum ProjectileBombStage { + BOMB_STAGE_INIT, + BOMB_STAGE_FIRST_SPIN, + BOMB_STAGE_FAST_SPIN, + BOMB_STAGE_EXPLODING, + BOMB_STAGE_PLACED_ON_LAUNCHER, + BOMB_STAGE_FIRST_SPIN_ON_LAUNCHER, + BOMB_STAGE_FAST_SPIN_ON_LAUNCHER, + BOMB_STAGE_EXPLODING_ON_LAUNCHER, + + BOMB_STAGE_END +}; + +#define BOMB_EXPLOSION_TIMER (CONVERT_SECONDS(.25f + 1.f / 60)) // Power bomb #define POWER_BOMB_DAMAGE 50 +enum ProjectilePowerBombStage { + POWER_BOMB_STAGE_INIT, + POWER_BOMB_STAGE_FIRST_SPIN, + POWER_BOMB_STAGE_FAST_SPIN, + + POWER_BOMB_STAGE_END +}; + +// Charge beam thresholds #define CHARGE_BEAM_START_THRESHOLD 16 #define CHARGE_BEAM_UNCHARGED_THRESHOLD 25 @@ -122,3 +148,38 @@ #define CHARGE_PISTOL_THRESHOLD 112 #define CHARGE_PISTOL_MAX_THRESHOLD (CHARGE_PISTOL_THRESHOLD + 15) + +// Projectiles limit + +#define PROJ_LIMIT_BEAM 6 +#define PROJ_LIMIT_CHARGED_BEAM 2 +#define PROJ_LIMIT_PISTOL 6 +#define PROJ_LIMIT_CHARGED_PISTOL 2 +#define PROJ_LIMIT_MISSILE 4 +#define PROJ_LIMIT_SUPER_MISSILE 4 +#define PROJ_LIMIT_BOMB 4 +#define PROJ_LIMIT_POWER_BOMB 1 + + +#define PROJ_SHORT_BEAM_LIFETIME (CONVERT_SECONDS(.2f)) + +enum ProjectileStage { + PROJECTILE_STAGE_INIT, + PROJECTILE_STAGE_SPAWNING, + PROJECTILE_STAGE_MOVING, + + PROJECTILE_STAGE_TUMBLING = 7 +}; + + +#define WAVE_BEAM_HITBOX_TOP (BLOCK_SIZE) +#define WAVE_BEAM_HITBOX_BOTTOM (BLOCK_SIZE) +#define WAVE_BEAM_HITBOX_LEFT (QUARTER_BLOCK_SIZE + PIXEL_SIZE) +#define WAVE_BEAM_HITBOX_RIGHT (QUARTER_BLOCK_SIZE + PIXEL_SIZE) + +#define CHARGED_WAVE_BEAM_HITBOX_TOP (BLOCK_SIZE + EIGHTH_BLOCK_SIZE) +#define CHARGED_WAVE_BEAM_HITBOX_BOTTOM (BLOCK_SIZE + EIGHTH_BLOCK_SIZE) +#define CHARGED_WAVE_BEAM_HITBOX_LEFT (QUARTER_BLOCK_SIZE + PIXEL_SIZE) +#define CHARGED_WAVE_BEAM_HITBOX_RIGHT (QUARTER_BLOCK_SIZE + PIXEL_SIZE) + +#endif /* PROJECTILE_CONSTANTS_H */ diff --git a/include/constants/sprite.h b/include/constants/sprite.h index 7e2df5ab..6ab81a34 100644 --- a/include/constants/sprite.h +++ b/include/constants/sprite.h @@ -7,9 +7,9 @@ #define SPRITE_STATUS_ROTATION_SCALING (1 << 3) #define SPRITE_STATUS_UNKNOWN_10 (1 << 4) #define SPRITE_STATUS_MOSAIC (1 << 5) -#define SPRITE_STATUS_XFLIP (1 << 6) +#define SPRITE_STATUS_X_FLIP (1 << 6) #define SPRITE_STATUS_UNKNOWN_80 (1 << 7) -#define SPRITE_STATUS_YFLIP (1 << 8) +#define SPRITE_STATUS_Y_FLIP (1 << 8) #define SPRITE_STATUS_FACING_RIGHT (1 << 9) #define SPRITE_STATUS_FACING_DOWN (1 << 10) #define SPRITE_STATUS_SAMUS_COLLIDING (1 << 11) @@ -393,4 +393,20 @@ enum SamusStandingOnSpriteStatus { // Represents a 100% drop change for a sprite #define SPRITE_DROP_MAX_PROB (1024) +#define SPRITE_ISFT_POWER_BOMB_STUNNED (1 << 7) + +#define SPRITE_GET_ISFT(sprite) ((sprite).invincibilityStunFlashTimer & 0x7F) +#define SPRITE_CLEAR_ISFT(sprite) ((sprite).invincibilityStunFlashTimer &= 0x80) +#define SPRITE_SET_ISFT(sprite, value) ((sprite).invincibilityStunFlashTimer |= (value)) +#define SPRITE_CLEAR_AND_SET_ISFT(sprite, value)\ +{ \ + SPRITE_CLEAR_ISFT(sprite); \ + SPRITE_SET_ISFT(sprite, value); \ +} + +#define SPRITE_FREEZE_PALETTE_OFFSET 0 +#define SPRITE_STUN_PALETTE_OFFSET 1 + +#define SPRITE_FREEZE_TIMER (CONVERT_SECONDS(4.f)) + #endif /* SPRITE_CONSTANTS_H */ diff --git a/include/data/engine_pointers.h b/include/data/engine_pointers.h index 95b7bab7..bae769d4 100644 --- a/include/data/engine_pointers.h +++ b/include/data/engine_pointers.h @@ -6,6 +6,8 @@ #include "data/demo_data.h" #include "constants/connection.h" +#include "constants/particle.h" +#include "constants/projectile.h" #include "structs/connection.h" #include "structs/projectile.h" @@ -13,9 +15,9 @@ #include "structs/color_effects.h" #include "structs/block.h" -extern const ProjFunc_T sProcessProjectileFunctionPointers[16]; +extern const ProjFunc_T sProcessProjectileFunctionPointers[PROJ_TYPE_END]; -extern const ParticleFunc_T sProcessParticleFunctionPointers[61]; +extern const ParticleFunc_T sProcessParticleFunctionPointers[PE_END]; extern const struct Door* const sAreaDoorsPointers[MAX_AMOUNT_OF_AREAS - 1]; diff --git a/include/data/projectile_data.h b/include/data/projectile_data.h index f0e43738..08c87540 100644 --- a/include/data/projectile_data.h +++ b/include/data/projectile_data.h @@ -4,247 +4,81 @@ #include "types.h" #include "oam.h" -// 326ca8 - extern const s16 sTumblingMissileSpeed[16]; extern const u8 sProjectile_Array326cc8_Unused[64]; -extern const u16 sBombOAM_Frame0[4]; +extern const struct FrameData sBombOam_Slow[5]; -extern const u16 sBombOAM_Frame1[4]; +extern const struct FrameData sBombOam_Fast[5]; -extern const u16 sBombOAM_Frame2[4]; +extern const struct FrameData sPowerBombOam_Slow[4]; -extern const u16 sBombOAM_Frame3[4]; +extern const struct FrameData sPowerBombOam_Fast[4]; -extern const u16 sPowerBombOAM_Frame0[4]; +extern const struct FrameData sMissileOam_Horizontal[3]; -extern const u16 sPowerBombOAM_Frame1[4]; +extern const struct FrameData sMissileOam_Diagonal[3]; -extern const u16 sPowerBombOAM_Frame2[4]; +extern const struct FrameData sMissileOam_Vertical[3]; -extern const struct FrameData sBombOAM_Slow[5]; +extern const struct FrameData sSuperMissileOam_Horizontal[3]; -extern const struct FrameData sBombOAM_Fast[5]; +extern const struct FrameData sSuperMissileOam_Diagonal[3]; -extern const struct FrameData sPowerBombOAM_Slow[4]; +extern const struct FrameData sSuperMissileOam_Vertical[3]; -extern const struct FrameData sPowerBombOAM_Fast[4]; +extern const struct FrameData sMissileOam_Tumbling[9]; -extern const u16 sMissileOAM_Horizontal_Frame0[7]; - -extern const u16 sMissileOAM_Horizontal_Frame1[7]; - -extern const u16 sMissileOAM_Diagonal_Frame0[7]; - -extern const u16 sMissileOAM_Diagonal_Frame1[7]; - -extern const u16 sMissileOAM_Vertical_Frame0[7]; - -extern const u16 sMissileOAM_Vertical_Frame1[7]; - -extern const u16 sSuperMissileOAM_Horizontal_Frame0[7]; - -extern const u16 sSuperMissileOAM_Horizontal_Frame1[7]; - -extern const u16 sSuperMissileOAM_Diagonal_Frame0[7]; - -extern const u16 sSuperMissileOAM_Diagonal_Frame1[7]; - -extern const u16 sSuperMissileOAM_Vertical_Frame0[7]; - -extern const u16 sSuperMissileOAM_Vertical_Frame1[7]; - -extern const u16 sMissileOAM_Tumbling_Frame0[4]; - -extern const u16 sMissileOAM_Tumbling_Frame1[4]; - -extern const u16 sMissileOAM_Tumbling_Frame2[4]; - -extern const u16 sMissileOAM_Tumbling_Frame3[4]; - -extern const u16 sMissileOAM_Tumbling_Frame4[4]; - -extern const u16 sMissileOAM_Tumbling_Frame5[4]; - -extern const u16 sMissileOAM_Tumbling_Frame6[4]; - -extern const u16 sMissileOAM_Tumbling_Frame7[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame0[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame1[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame2[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame3[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame4[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame5[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame6[4]; - -extern const u16 sSuperMissileOAM_Tumbling_Frame7[4]; - -extern const u16 sParticleMissileTrailOam_Frame0[4]; - -extern const u16 sParticleMissileTrailOam_Frame1[4]; - -extern const u16 sParticleMissileTrailOam_Frame2[4]; - -extern const u16 sParticleSuperMissileTrailOam_Frame3[4]; - -extern const u16 sParticleMissileTrailOam_Frame3[4]; - -extern const u16 sParticleMissileTrailOam_Frame4[4]; - -extern const u16 sParticleMissileTrailOam_Frame5[4]; - -extern const u16 sParticleMissileTrailOam_Frame6[4]; - -extern const u16 sParticleSuperMissileTrailOam_Frame0[4]; - -extern const struct FrameData sMissileOAM_Horizontal[3]; - -extern const struct FrameData sMissileOAM_Diagonal[3]; - -extern const struct FrameData sMissileOAM_Vertical[3]; - -extern const struct FrameData sSuperMissileOAM_Horizontal[3]; - -extern const struct FrameData sSuperMissileOAM_Diagonal[3]; - -extern const struct FrameData sSuperMissileOAM_Vertical[3]; - -extern const struct FrameData sMissileOAM_Tumbling[9]; - -extern const struct FrameData sSuperMissileOAM_Tumbling[9]; +extern const struct FrameData sSuperMissileOam_Tumbling[9]; extern const struct FrameData sParticleMissileTrailOam[8]; extern const struct FrameData sParticleSuperMissileTrailOam[9]; -extern const u16 sBeamPal[96]; +extern const u16 sBeamPal[16 * 6]; extern const u8 sNormalBeamGfx_Top[512]; extern const u8 sNormalBeamGfx_Bottom[512]; extern const u8 sNormalBeamGfx_Charged_Top[512]; extern const u8 sNormalBeamGfx_Charged_Bottom[512]; -extern const u16 sNormalBeamOAM_Horizontal_Frame0[4]; +extern const struct FrameData sNormalBeamOam_Horizontal[3]; -extern const u16 sNormalBeamOAM_Horizontal_Frame1[4]; +extern const struct FrameData sNormalBeamOam_Diagonal[3]; -extern const u16 sNormalBeamOAM_Diagonal_Frame0[4]; +extern const struct FrameData sNormalBeamOam_Vertical[3]; -extern const u16 sNormalBeamOAM_Diagonal_Frame1[4]; +extern const struct FrameData sNormalBeamOam_Horizontal_Unused[3]; -extern const u16 sNormalBeamOAM_Vertical_Frame0[4]; +extern const struct FrameData sNormalBeamOam_Diagonal_Unused[3]; -extern const u16 sNormalBeamOAM_Vertical_Frame1[4]; +extern const struct FrameData sNormalBeamOam_Vertical_Unused[3]; -extern const u16 sNormalBeamOAM_Horizontal_Unused_Frame0[4]; +extern const struct FrameData sChargedNormalBeamOam_Horizontal[3]; -extern const u16 sNormalBeamOAM_Horizontal_Unused_Frame1[4]; +extern const struct FrameData sChargedNormalBeamOam_Diagonal[3]; -extern const u16 sNormalBeamOAM_Diagonal_Unused_Frame0[4]; +extern const struct FrameData sChargedNormalBeamOam_Vertical[3]; -extern const u16 sNormalBeamOAM_Diagonal_Unused_Frame1[4]; - -extern const u16 sNormalBeamOAM_Vertical_Unused_Frame0[4]; - -extern const u16 sNormalBeamOAM_Vertical_Unused_Frame1[4]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Frame0[7]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Frame1[10]; - -extern const u16 sChargedNormalBeamOAM_Diagonal_Frame0[7]; - -extern const u16 sChargedNormalBeamOAM_Diagonal_Frame1[10]; - -extern const u16 sChargedNormalBeamOAM_Vertical_Frame0[7]; - -extern const u16 sChargedNormalBeamOAM_Vertical_Frame1[10]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame0[4]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame1[4]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame2[4]; - -extern const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame3[4]; - -extern const struct FrameData sNormalBeamOAM_Horizontal[3]; - -extern const struct FrameData sNormalBeamOAM_Diagonal[3]; - -extern const struct FrameData sNormalBeamOAM_Vertical[3]; - -extern const struct FrameData sNormalBeamOAM_Horizontal_Unused[3]; - -extern const struct FrameData sNormalBeamOAM_Diagonal_Unused[3]; - -extern const struct FrameData sNormalBeamOAM_Vertical_Unused[3]; - -extern const struct FrameData sChargedNormalBeamOAM_Horizontal[3]; - -extern const struct FrameData sChargedNormalBeamOAM_Diagonal[3]; - -extern const struct FrameData sChargedNormalBeamOAM_Vertical[3]; - -extern const struct FrameData sChargedNormalBeamOAM_Horizontal_Unused[5]; +extern const struct FrameData sChargedNormalBeamOam_Horizontal_Unused[5]; extern const u8 sLongBeamGfx_Top[512]; extern const u8 sLongBeamGfx_Bottom[512]; extern const u8 sLongBeamGfx_Charged_Top[512]; extern const u8 sLongBeamGfx_Charged_Bottom[512]; -extern const u16 sLongBeamOAM_Horizontal_Frame0[4]; +extern const struct FrameData sLongBeamOam_Horizontal[3]; -extern const u16 sLongBeamOAM_Horizontal_Frame1[4]; +extern const struct FrameData sLongBeamOam_Diagonal[3]; -extern const u16 sLongBeamOAM_Diagonal_Frame0[4]; +extern const struct FrameData sLongBeamOam_Vertical[3]; -extern const u16 sLongBeamOAM_Diagonal_Frame1[4]; +extern const struct FrameData sChargedLongBeamOam_Horizontal[3]; -extern const u16 sLongBeamOAM_Vertical_Frame0[4]; +extern const struct FrameData sChargedLongBeamOam_Diagonal[3]; -extern const u16 sLongBeamOAM_Vertical_Frame1[4]; - -extern const u16 sChargedLongBeamOAM_Horizontal_Frame0[7]; - -extern const u16 sChargedLongBeamOAM_Horizontal_Frame1[10]; - -extern const u16 sChargedLongBeamOAM_Diagonal_Frame0[7]; - -extern const u16 sChargedLongBeamOAM_Diagonal_Frame1[10]; - -extern const u16 sChargedLongBeamOAM_Vertical_Frame0[7]; - -extern const u16 sChargedLongBeamOAM_Vertical_Frame1[10]; - -extern const u16 sParticleChargedLongBeamTrailOam_Frame0[4]; - -extern const u16 sParticleChargedLongBeamTrailOam_Frame1[4]; - -extern const u16 sParticleChargedLongBeamTrailOam_Frame2[4]; - -extern const u16 sParticleChargedLongBeamTrailOam_Frame3[4]; - -extern const struct FrameData sLongBeamOAM_Horizontal[3]; - -extern const struct FrameData sLongBeamOAM_Diagonal[3]; - -extern const struct FrameData sLongBeamOAM_Vertical[3]; - -extern const struct FrameData sChargedLongBeamOAM_Horizontal[3]; - -extern const struct FrameData sChargedLongBeamOAM_Diagonal[3]; - -extern const struct FrameData sChargedLongBeamOAM_Vertical[3]; +extern const struct FrameData sChargedLongBeamOam_Vertical[3]; extern const struct FrameData sParticleChargedLongBeamTrailOam[5]; @@ -253,69 +87,23 @@ extern const u8 sIceBeamGfx_Bottom[512]; extern const u8 sIceBeamGfx_Charged_Top[512]; extern const u8 sIceBeamGfx_Charged_Bottom[512]; -extern const u16 sIceBeamOAM_Horizontal_Frame0[4]; +extern const struct FrameData sIceBeamOam_Horizontal[3]; -extern const u16 sIceBeamOAM_Horizontal_Frame1[4]; +extern const struct FrameData sIceBeamOam_Diagonal[3]; -extern const u16 sIceBeamOAM_Diagonal_Frame0[4]; +extern const struct FrameData sIceBeamOam_Vertical[3]; -extern const u16 sIceBeamOAM_Diagonal_Frame1[4]; +extern const struct FrameData sIceBeamOam_Horizontal_Unused[3]; -extern const u16 sIceBeamOAM_Vertical_Frame0[4]; +extern const struct FrameData sIceBeamOam_Diagonal_Unused[3]; -extern const u16 sIceBeamOAM_Vertical_Frame1[4]; +extern const struct FrameData sIceBeamOam_Vertical_Unused[3]; -extern const u16 sIceBeamOAM_Horizontal_Unused_Frame0[4]; +extern const struct FrameData sChargedIceBeamOam_Horizontal[3]; -extern const u16 sIceBeamOAM_Horizontal_Unused_Frame1[4]; +extern const struct FrameData sChargedIceBeamOam_Diagonal[3]; -extern const u16 sIceBeamOAM_Diagonal_Unused_Frame0[4]; - -extern const u16 sIceBeamOAM_Diagonal_Unused_Frame1[4]; - -extern const u16 sIceBeamOAM_Vertical_Unused_Frame0[4]; - -extern const u16 sIceBeamOAM_Vertical_Unused_Frame1[4]; - -extern const u16 sChargedIceBeamOAM_Horizontal_Frame0[13]; - -extern const u16 sChargedIceBeamOAM_Horizontal_Frame1[19]; - -extern const u16 sChargedIceBeamOAM_Diagonal_Frame0[7]; - -extern const u16 sChargedIceBeamOAM_Diagonal_Frame1[10]; - -extern const u16 sChargedIceBeamOAM_Vertical_Frame0[13]; - -extern const u16 sChargedIceBeamOAM_Vertical_Frame1[19]; - -extern const u16 sParticleChargedIceBeamTrailOam_Frame0[4]; - -extern const u16 sParticleChargedIceBeamTrailOam_Frame1[4]; - -extern const u16 sParticleChargedIceBeamTrailOam_Frame2[4]; - -extern const u16 sParticleChargedIceBeamTrailOam_Frame3[4]; - -extern const u16 sParticleChargedIceBeamTrailOam_Frame4[4]; - -extern const struct FrameData sIceBeamOAM_Horizontal[3]; - -extern const struct FrameData sIceBeamOAM_Diagonal[3]; - -extern const struct FrameData sIceBeamOAM_Vertical[3]; - -extern const struct FrameData sIceBeamOAM_Horizontal_Unused[3]; - -extern const struct FrameData sIceBeamOAM_Diagonal_Unused[3]; - -extern const struct FrameData sIceBeamOAM_Vertical_Unused[3]; - -extern const struct FrameData sChargedIceBeamOAM_Horizontal[3]; - -extern const struct FrameData sChargedIceBeamOAM_Diagonal[3]; - -extern const struct FrameData sChargedIceBeamOAM_Vertical[3]; +extern const struct FrameData sChargedIceBeamOam_Vertical[3]; extern const struct FrameData sParticleChargedIceBeamTrailOam[6]; @@ -324,95 +112,23 @@ extern const u8 sWaveBeamGfx_Bottom[512]; extern const u8 sWaveBeamGfx_Charged_Top[512]; extern const u8 sWaveBeamGfx_Charged_Bottom[512]; -extern const u16 sWaveBeamOAM_Horizontal_Frame0[4]; +extern const struct FrameData sWaveBeamOam_Horizontal[8]; -extern const u16 sWaveBeamOAM_Horizontal_Frame1[10]; +extern const struct FrameData sWaveBeamOam_Diagonal[8]; -extern const u16 sWaveBeamOAM_Horizontal_Frame2[10]; +extern const struct FrameData sWaveBeamOam_Vertical[8]; -extern const u16 sWaveBeamOAM_Horizontal_Frame3[7]; +extern const struct FrameData sWaveBeamOam_Horizontal_Unused[8]; -extern const u16 sWaveBeamOAM_Horizontal_Frame4[13]; +extern const struct FrameData sWaveBeamOam_Diagonal_Unused[8]; -extern const u16 sWaveBeamOAM_Horizontal_Frame6[10]; +extern const struct FrameData sWaveBeamOam_Vertical_Unused[8]; -extern const u16 sWaveBeamOAM_Diagonal_Frame0[4]; +extern const struct FrameData sChargedWaveBeamOam_Horizontal[8]; -extern const u16 sWaveBeamOAM_Diagonal_Frame1[10]; +extern const struct FrameData sChargedWaveBeamOam_Diagonal[8]; -extern const u16 sWaveBeamOAM_Diagonal_Frame2[10]; - -extern const u16 sWaveBeamOAM_Diagonal_Frame3[7]; - -extern const u16 sWaveBeamOAM_Diagonal_Frame4[13]; - -extern const u16 sWaveBeamOAM_Diagonal_Frame6[10]; - -extern const u16 sWaveBeamOAM_Vertical_Frame0[4]; - -extern const u16 sWaveBeamOAM_Vertical_Frame1[10]; - -extern const u16 sWaveBeamOAM_Vertical_Frame2[10]; - -extern const u16 sWaveBeamOAM_Vertical_Frame3[7]; - -extern const u16 sWaveBeamOAM_Vertical_Frame4[13]; - -extern const u16 sChargedWaveBeamOAM_Horizontal_Frame3[7]; - -extern const u16 sChargedWaveBeamOAM_Horizontal_Frame4[7]; - -extern const u16 sChargedWaveBeamOAM_Horizontal_Frame5[7]; - -extern const u16 sChargedWaveBeamOAM_Horizontal_Frame6[7]; - -extern const u16 sChargedWaveBeamOAM_Diagonal_Frame0[7]; - -extern const u16 sChargedWaveBeamOAM_Diagonal_Frame1[19]; - -extern const u16 sChargedWaveBeamOAM_Diagonal_Frame2[25]; - -extern const u16 sChargedWaveBeamOAM_Diagonal_Frame3[13]; - -extern const u16 sChargedWaveBeamOAM_Diagonal_Frame6[13]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame1[10]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame2[13]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame3[7]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame4[7]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame5[7]; - -extern const u16 sChargedWaveBeamOAM_Vertical_Frame6[7]; - -extern const u16 sParticleChargedWaveBeamTrailOam_Frame0[4]; - -extern const u16 sParticleChargedWaveBeamTrailOam_Frame1[7]; - -extern const u16 sParticleChargedWaveBeamTrailOam_Frame2[4]; - -extern const u16 sParticleChargedWaveBeamTrailOam_Frame3[7]; - -extern const struct FrameData sWaveBeamOAM_Horizontal[8]; - -extern const struct FrameData sWaveBeamOAM_Diagonal[8]; - -extern const struct FrameData sWaveBeamOAM_Vertical[8]; - -extern const struct FrameData sWaveBeamOAM_Horizontal_Unused[8]; - -extern const struct FrameData sWaveBeamOAM_Diagonal_Unused[8]; - -extern const struct FrameData sWaveBeamOAM_Vertical_Unused[8]; - -extern const struct FrameData sChargedWaveBeamOAM_Horizontal[8]; - -extern const struct FrameData sChargedWaveBeamOAM_Diagonal[8]; - -extern const struct FrameData sChargedWaveBeamOAM_Vertical[8]; +extern const struct FrameData sChargedWaveBeamOam_Vertical[8]; extern const struct FrameData sParticleChargedWaveBeamTrailOam[5]; @@ -421,147 +137,41 @@ extern const u8 sPlasmaBeamGfx_Bottom[512]; extern const u8 sPlasmaBeamGfx_Charged_Top[512]; extern const u8 sPlasmaBeamGfx_Charged_Bottom[512]; -extern const u16 sPlasmaBeamOAM_Horizontal_NoWave_Frame0[4]; +extern const struct FrameData sPlasmaBeamOam_Horizontal_NoWave[3]; -extern const u16 sPlasmaBeamOAM_Horizontal_NoWave_Frame1[4]; +extern const struct FrameData sPlasmaBeamOam_Diagonal_NoWave[3]; -extern const u16 sPlasmaBeamOAM_Diagonal_NoWave_Frame0[4]; +extern const struct FrameData sPlasmaBeamOam_Vertical_NoWave[3]; -extern const u16 sPlasmaBeamOAM_Diagonal_NoWave_Frame1[4]; +extern const struct FrameData sPlasmaBeamOam_Horizontal_NoWave_Unused[3]; -extern const u16 sPlasmaBeamOAM_Vertical_NoWave_Frame0[4]; +extern const struct FrameData sPlasmaBeamOam_Diagonal_NoWave_Unused[3]; -extern const u16 sPlasmaBeamOAM_Vertical_NoWave_Frame1[4]; +extern const struct FrameData sPlasmaBeamOam_Vertical_NoWave_Unused[3]; -extern const u16 sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame0[10]; +extern const struct FrameData sChargedPlasmaBeamOam_Horizontal_NoWave[3]; -extern const u16 sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame1[16]; +extern const struct FrameData sChargedPlasmaBeamOam_Diagonal_NoWave[3]; -extern const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame0[13]; +extern const struct FrameData sChargedPlasmaBeamOam_Vertical_NoWave[3]; -extern const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame1[19]; +extern const struct FrameData sPlasmaBeamOam_Horizontal_Wave[8]; -extern const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame0[13]; +extern const struct FrameData sPlasmaBeamOam_Diagonal_Wave[8]; -extern const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame1[19]; +extern const struct FrameData sPlasmaBeamOam_Vertical_Wave[8]; -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame1[10]; +extern const struct FrameData sPlasmaBeamOam_Horizontal_Wave_Unused[6]; -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame2[13]; +extern const struct FrameData sPlasmaBeamOam_Diagonal_Wave_Unused[6]; -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame3[10]; +extern const struct FrameData sPlasmaBeamOam_Vertical_Wave_Unused[6]; -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame4[16]; +extern const struct FrameData sChargedPlasmaBeamOam_Horizontal_Wave[8]; -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame5[13]; +extern const struct FrameData sChargedPlasmaBeamOam_Diagonal_Wave[8]; -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame3[10]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame4[16]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame5[13]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Frame3[10]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Frame4[16]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Frame5[13]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Frame6[10]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame3[19]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame4[13]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame1[10]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame2[16]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame3[16]; - -extern const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame4[10]; - -extern const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame0[4]; - -extern const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame1[13]; - -extern const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame2[16]; - -extern const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame3[10]; - -extern const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame4[13]; - -extern const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame0[7]; - -extern const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame1[19]; - -extern const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame2[25]; - -extern const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame3[19]; - -extern const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame4[19]; - -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame3[19]; - -extern const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame4[13]; - -extern const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame0[7]; - -extern const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame1[19]; - -extern const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame2[25]; - -extern const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame3[19]; - -extern const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame4[19]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame1[19]; - -extern const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame2[13]; - -extern const u16 sParticleChargedPlasmaBeamTrailOam_Frame0[4]; - -extern const u16 sParticleChargedFullBeamTrailOam_Frame5[4]; - -extern const u16 sParticleChargedFullBeamTrailOam_Frame6[4]; - -extern const u16 sParticleChargedPlasmaBeamTrailOam_Frame3[4]; - -extern const struct FrameData sPlasmaBeamOAM_Horizontal_NoWave[3]; - -extern const struct FrameData sPlasmaBeamOAM_Diagonal_NoWave[3]; - -extern const struct FrameData sPlasmaBeamOAM_Vertical_NoWave[3]; - -extern const struct FrameData sPlasmaBeamOAM_Horizontal_NoWave_Unused[3]; - -extern const struct FrameData sPlasmaBeamOAM_Diagonal_NoWave_Unused[3]; - -extern const struct FrameData sPlasmaBeamOAM_Vertical_NoWave_Unused[3]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Horizontal_NoWave[3]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Diagonal_NoWave[3]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Vertical_NoWave[3]; - -extern const struct FrameData sPlasmaBeamOAM_Horizontal_Wave[8]; - -extern const struct FrameData sPlasmaBeamOAM_Diagonal_Wave[8]; - -extern const struct FrameData sPlasmaBeamOAM_Vertical_Wave[8]; - -extern const struct FrameData sPlasmaBeamOAM_Horizontal_Wave_Unused[6]; - -extern const struct FrameData sPlasmaBeamOAM_Diagonal_Wave_Unused[6]; - -extern const struct FrameData sPlasmaBeamOAM_Vertical_Wave_Unused[6]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Horizontal_Wave[8]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Diagonal_Wave[8]; - -extern const struct FrameData sChargedPlasmaBeamOAM_Vertical_Wave[8]; +extern const struct FrameData sChargedPlasmaBeamOam_Vertical_Wave[8]; extern const struct FrameData sParticleChargedPlasmaBeamTrailOam[5]; @@ -572,56 +182,22 @@ extern const u8 sPistolGfx_Bottom[512]; extern const u8 sPistolGfx_Charged_Top[512]; extern const u8 sPistolGfx_Charged_Bottom[512]; -extern const u16 sPistolOAM_Horizontal_Frame0[4]; +extern const struct FrameData sPistolOam_Horizontal[3]; -extern const u16 sPistolOAM_Horizontal_Frame1[4]; +extern const struct FrameData sPistolOam_Diagonal[3]; -extern const u16 sPistolOAM_Diagonal_Frame0[4]; +extern const struct FrameData sPistolOam_Vertical[3]; -extern const u16 sPistolOAM_Diagonal_Frame1[4]; +extern const struct FrameData sChargedPistolOam_Horizontal[3]; -extern const u16 sPitsolOAM_Vertical_Frame0[4]; +extern const struct FrameData sChargedPistolOam_Diagonal[3]; -extern const u16 sPitsolOAM_Vertical_Frame1[4]; - -extern const u16 sChargedPistolOAM_Horizontal_Frame0[7]; - -extern const u16 sChargedPistolOAM_Horizontal_Frame1[10]; - -extern const u16 sChargedPistolOAM_Diagonal_Frame0[7]; - -extern const u16 sChargedPistolOAM_Diagonal_Frame1[10]; - -extern const u16 sChargedPistolOAM_Vertical_Frame0[7]; - -extern const u16 sChargedPistolOAM_Vertical_Frame1[10]; - -extern const u16 sParticleChargedPistolTrailOam_Frame0[4]; - -extern const u16 sParticleChargedPistolTrailOam_Frame1[4]; - -extern const u16 sParticleChargedPistolTrailOam_Frame2[4]; - -extern const u16 sParticleChargedPistolTrailOam_Frame3[4]; - -extern const struct FrameData sPistolOAM_Horizontal[3]; - -extern const struct FrameData sPistolOAM_Diagonal[3]; - -extern const struct FrameData sPistolOAM_Vertical[3]; - -extern const struct FrameData sChargedPistolOAM_Horizontal[3]; - -extern const struct FrameData sChargedPistolOAM_Diagonal[3]; - -extern const struct FrameData sChargedPistolOAM_Vertical[3]; +extern const struct FrameData sChargedPistolOam_Vertical[3]; extern const struct FrameData sParticleChargedPistolTrailOam[5]; extern const struct FrameData sParticleEscapeOam_Unused[2]; -extern const struct FrameData sParticleSamusReflectionOAM_Unused[2]; +extern const struct FrameData sParticleSamusReflectionOam_Unused[2]; -// 32ba08 - -#endif \ No newline at end of file +#endif /* PROJECTILE_DATA_H */ diff --git a/include/macros.h b/include/macros.h index 730f962e..30d8ec26 100644 --- a/include/macros.h +++ b/include/macros.h @@ -191,18 +191,6 @@ #define SCREEN_Y_PADDING 2 #define SCREEN_Y_BLOCK_PADDING (BLOCK_SIZE * SCREEN_Y_PADDING) -#define SPRITE_HAS_ISFT(sprite) ((sprite).invincibilityStunFlashTimer & 0x7F) -#define SPRITE_CLEAR_ISFT(sprite) ((sprite).invincibilityStunFlashTimer &= 0x80) -#define SPRITE_SET_ISFT(sprite, value) ((sprite).invincibilityStunFlashTimer |= (value)) -#define SPRITE_CLEAR_AND_SET_ISFT(sprite, value)\ -{ \ - SPRITE_CLEAR_ISFT(sprite); \ - SPRITE_SET_ISFT(sprite, value); \ -} - -#define SPRITE_FREEZE_PALETTE_OFFSET 0 -#define SPRITE_STUN_PALETTE_OFFSET 1 - #define SPRITESET_IDX(idx) (16 + idx + 1) diff --git a/src/data/engine_pointers.c b/src/data/engine_pointers.c index 8b19bbad..034ba70a 100644 --- a/src/data/engine_pointers.c +++ b/src/data/engine_pointers.c @@ -25,10 +25,8 @@ #include "constants/animated_graphics.h" #include "constants/haze.h" #include "constants/room.h" -#include "constants/particle.h" -#include "constants/projectile.h" -const ProjFunc_T sProcessProjectileFunctionPointers[16] = { +const ProjFunc_T sProcessProjectileFunctionPointers[PROJ_TYPE_END] = { [PROJ_TYPE_BEAM] = ProjectileProcessNormalBeam, [PROJ_TYPE_LONG_BEAM] = ProjectileProcessLongBeam, [PROJ_TYPE_ICE_BEAM] = ProjectileProcessIceBeam, @@ -47,7 +45,7 @@ const ProjFunc_T sProcessProjectileFunctionPointers[16] = { [PROJ_TYPE_POWER_BOMB] = ProjectileProcessPowerBomb }; -const ParticleFunc_T sProcessParticleFunctionPointers[61] = { +const ParticleFunc_T sProcessParticleFunctionPointers[PE_END] = { [PE_SPRITE_SPLASH_WATER_SMALL] = ParticleSpriteSplashWaterSmall, [PE_SPRITE_SPLASH_WATER_BIG] = ParticleSpriteSplashWaterBig, [PE_SPRITE_SPLASH_WATER_HUGE] = ParticleSpriteSplashWaterHuge, diff --git a/src/data/projectile_data.c b/src/data/projectile_data.c index 75acef03..712d8131 100644 --- a/src/data/projectile_data.c +++ b/src/data/projectile_data.c @@ -2,10 +2,11 @@ #include "structs/particle.h" #include "macros.h" -// 326ca8 - const s16 sTumblingMissileSpeed[16] = { - -12, -10, -8, -6, -4, -2, 0, 0, 1, 2, 4, 8, 12, 16, 20, SHORT_MAX + -12, -10, -8, -6, + -4, -2, 0, 0, + 1, 2, 4, 8, + 12, 16, 20, SHORT_MAX }; const u8 sProjectile_Array326cc8_Unused[64] = { @@ -15,640 +16,774 @@ const u8 sProjectile_Array326cc8_Unused[64] = { 0, 0, 4, 0, 8, 0, 12, 0, 12, 0, 16, 0, 20, 0, 24, 0 }; -const u16 sBombOAM_Frame0[4] = { +static const u16 sBombOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x414d }; -const u16 sBombOAM_Frame1[4] = { +static const u16 sBombOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x414e }; -const u16 sBombOAM_Frame2[4] = { +static const u16 sBombOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x414f }; -const u16 sBombOAM_Frame3[4] = { +static const u16 sBombOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x4150 }; -const u16 sPowerBombOAM_Frame0[4] = { +static const u16 sPowerBombOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x414b }; -const u16 sPowerBombOAM_Frame1[4] = { +static const u16 sPowerBombOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x414c }; -const u16 sPowerBombOAM_Frame2[4] = { +static const u16 sPowerBombOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, 0x1fc, 0x416b }; -const struct FrameData sBombOAM_Slow[5] = { - sBombOAM_Frame0, - 0x6, - sBombOAM_Frame1, - 0x6, - sBombOAM_Frame2, - 0x6, - sBombOAM_Frame3, - 0x6, - NULL, - 0x0 +const struct FrameData sBombOam_Slow[5] = { + [0] = { + .pFrame = sBombOam_Frame0, + .timer = CONVERT_SECONDS(.1f) + }, + [1] = { + .pFrame = sBombOam_Frame1, + .timer = CONVERT_SECONDS(.1f) + }, + [2] = { + .pFrame = sBombOam_Frame2, + .timer = CONVERT_SECONDS(.1f) + }, + [3] = { + .pFrame = sBombOam_Frame3, + .timer = CONVERT_SECONDS(.1f) + }, + [4] = FRAME_DATA_TERMINATOR }; -const struct FrameData sBombOAM_Fast[5] = { - sBombOAM_Frame0, - 0x2, - sBombOAM_Frame1, - 0x2, - sBombOAM_Frame2, - 0x2, - sBombOAM_Frame3, - 0x2, - NULL, - 0x0 +const struct FrameData sBombOam_Fast[5] = { + [0] = { + .pFrame = sBombOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sBombOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sBombOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sBombOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [4] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPowerBombOAM_Slow[4] = { - sPowerBombOAM_Frame0, - 0x6, - sPowerBombOAM_Frame1, - 0x6, - sPowerBombOAM_Frame2, - 0x6, - NULL, - 0x0 +const struct FrameData sPowerBombOam_Slow[4] = { + [0] = { + .pFrame = sPowerBombOam_Frame0, + .timer = CONVERT_SECONDS(.1f) + }, + [1] = { + .pFrame = sPowerBombOam_Frame1, + .timer = CONVERT_SECONDS(.1f) + }, + [2] = { + .pFrame = sPowerBombOam_Frame2, + .timer = CONVERT_SECONDS(.1f) + }, + [3] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPowerBombOAM_Fast[4] = { - sPowerBombOAM_Frame0, - 0x3, - sPowerBombOAM_Frame1, - 0x3, - sPowerBombOAM_Frame2, - 0x3, - NULL, - 0x0 +const struct FrameData sPowerBombOam_Fast[4] = { + [0] = { + .pFrame = sPowerBombOam_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPowerBombOam_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = { + .pFrame = sPowerBombOam_Frame2, + .timer = CONVERT_SECONDS(.05f) + }, + [3] = FRAME_DATA_TERMINATOR }; -const u16 sMissileOAM_Horizontal_Frame0[7] = { +static const u16 sMissileOam_Horizontal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfc, 0x3, 0x30d0, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x4078 }; -const u16 sMissileOAM_Horizontal_Frame1[7] = { +static const u16 sMissileOam_Horizontal_Frame1[OAM_DATA_SIZE(2)] = { 0x2, 0xfc, 0x7, 0x30d1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x4078 }; -const u16 sMissileOAM_Diagonal_Frame0[7] = { +static const u16 sMissileOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0x1, 0x1, 0x30d0, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405c }; -const u16 sMissileOAM_Diagonal_Frame1[7] = { +static const u16 sMissileOam_Diagonal_Frame1[OAM_DATA_SIZE(2)] = { 0x2, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405c, 0x3, 0x3, 0x30f0, }; -const u16 sMissileOAM_Vertical_Frame0[7] = { +static const u16 sMissileOam_Vertical_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0x3, 0x1fc, 0x30d0, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4185 }; -const u16 sMissileOAM_Vertical_Frame1[7] = { +static const u16 sMissileOam_Vertical_Frame1[OAM_DATA_SIZE(2)] = { 0x2, 0x7, 0x1fc, 0x30f1, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4185 }; -const u16 sSuperMissileOAM_Horizontal_Frame0[7] = { +static const u16 sSuperMissileOam_Horizontal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xf8, OBJ_SIZE_16x16 | 0x2, 0x30d3, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x407a }; -const u16 sSuperMissileOAM_Horizontal_Frame1[7] = { +static const u16 sSuperMissileOam_Horizontal_Frame1[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x407a, 0xfc, 0x5, 0x30d1 }; -const u16 sSuperMissileOAM_Diagonal_Frame0[7] = { +static const u16 sSuperMissileOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xff, OBJ_SIZE_16x16 | 0x1ff, 0x30d3, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405e }; -const u16 sSuperMissileOAM_Diagonal_Frame1[7] = { +static const u16 sSuperMissileOam_Diagonal_Frame1[OAM_DATA_SIZE(2)] = { 0x2, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405e, 0x3, 0x3, 0x30f0 }; -const u16 sSuperMissileOAM_Vertical_Frame0[7] = { +static const u16 sSuperMissileOam_Vertical_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0x1, OBJ_SIZE_16x16 | 0x1f8, 0x30d3, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4186 }; -const u16 sSuperMissileOAM_Vertical_Frame1[7] = { +static const u16 sSuperMissileOam_Vertical_Frame1[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4186, 0x5, 0x1fc, 0x30f1 }; -const u16 sMissileOAM_Tumbling_Frame0[4] = { +static const u16 sMissileOam_Tumbling_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x4078 }; -const u16 sMissileOAM_Tumbling_Frame1[4] = { +static const u16 sMissileOam_Tumbling_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405c }; -const u16 sMissileOAM_Tumbling_Frame2[4] = { +static const u16 sMissileOam_Tumbling_Frame2[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4185 }; -const u16 sMissileOAM_Tumbling_Frame3[4] = { +static const u16 sMissileOam_Tumbling_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_X_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405c }; -const u16 sMissileOAM_Tumbling_Frame4[4] = { +static const u16 sMissileOam_Tumbling_Frame4[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_X_FLIP | 0x1f8, 0x4078 }; -const u16 sMissileOAM_Tumbling_Frame5[4] = { +static const u16 sMissileOam_Tumbling_Frame5[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_X_FLIP | OBJ_Y_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405c }; -const u16 sMissileOAM_Tumbling_Frame6[4] = { +static const u16 sMissileOam_Tumbling_Frame6[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_Y_FLIP | 0x1fc, 0x4185 }; -const u16 sMissileOAM_Tumbling_Frame7[4] = { +static const u16 sMissileOam_Tumbling_Frame7[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_Y_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405c }; -const u16 sSuperMissileOAM_Tumbling_Frame0[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1f8, 0x407a }; -const u16 sSuperMissileOAM_Tumbling_Frame1[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x405e }; -const u16 sSuperMissileOAM_Tumbling_Frame2[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame2[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf8, 0x1fc, 0x4186 }; -const u16 sSuperMissileOAM_Tumbling_Frame3[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_X_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405e }; -const u16 sSuperMissileOAM_Tumbling_Frame4[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame4[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_X_FLIP | 0x1f8, 0x407a }; -const u16 sSuperMissileOAM_Tumbling_Frame5[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame5[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_X_FLIP | OBJ_Y_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405e }; -const u16 sSuperMissileOAM_Tumbling_Frame6[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame6[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_Y_FLIP | 0x1fc, 0x4186 }; -const u16 sSuperMissileOAM_Tumbling_Frame7[4] = { +static const u16 sSuperMissileOam_Tumbling_Frame7[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_Y_FLIP | OBJ_SIZE_16x16 | 0x1f8, 0x405e }; -const u16 sParticleMissileTrailOam_Frame0[4] = { +static const u16 sParticleMissileTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x30d5 }; -const u16 sParticleMissileTrailOam_Frame1[4] = { +static const u16 sParticleMissileTrailOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x30f5 }; -const u16 sParticleMissileTrailOam_Frame2[4] = { +static const u16 sParticleMissileTrailOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x30f6 }; -const u16 sParticleSuperMissileTrailOam_Frame3[4] = { +static const u16 sParticleSuperMissileTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x4159 }; -const u16 sParticleMissileTrailOam_Frame3[4] = { +static const u16 sParticleMissileTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, 0x1fc, 0x415a }; -const u16 sParticleMissileTrailOam_Frame4[4] = { +static const u16 sParticleMissileTrailOam_Frame4[OAM_DATA_SIZE(1)] = { 0x1, 0xf7, 0x1fc, 0x415b }; -const u16 sParticleMissileTrailOam_Frame5[4] = { +static const u16 sParticleMissileTrailOam_Frame5[OAM_DATA_SIZE(1)] = { 0x1, 0xf3, 0x1fc, 0x415c }; -const u16 sParticleMissileTrailOam_Frame6[4] = { +static const u16 sParticleMissileTrailOam_Frame6[OAM_DATA_SIZE(1)] = { 0x1, 0xf1, 0x1fc, 0x415d }; -const u16 sParticleSuperMissileTrailOam_Frame0[4] = { +static const u16 sParticleSuperMissileTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x30d0 }; -const struct FrameData sMissileOAM_Horizontal[3] = { - sMissileOAM_Horizontal_Frame0, - 0x2, - sMissileOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sMissileOam_Horizontal[3] = { + [0] = { + .pFrame = sMissileOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sMissileOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sMissileOAM_Diagonal[3] = { - sMissileOAM_Diagonal_Frame0, - 0x2, - sMissileOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sMissileOam_Diagonal[3] = { + [0] = { + .pFrame = sMissileOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sMissileOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sMissileOAM_Vertical[3] = { - sMissileOAM_Vertical_Frame0, - 0x2, - sMissileOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sMissileOam_Vertical[3] = { + [0] = { + .pFrame = sMissileOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sMissileOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sSuperMissileOAM_Horizontal[3] = { - sSuperMissileOAM_Horizontal_Frame0, - 0x2, - sSuperMissileOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sSuperMissileOam_Horizontal[3] = { + [0] = { + .pFrame = sSuperMissileOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sSuperMissileOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sSuperMissileOAM_Diagonal[3] = { - sSuperMissileOAM_Diagonal_Frame0, - 0x2, - sSuperMissileOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sSuperMissileOam_Diagonal[3] = { + [0] = { + .pFrame = sSuperMissileOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sSuperMissileOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sSuperMissileOAM_Vertical[3] = { - sSuperMissileOAM_Vertical_Frame0, - 0x2, - sSuperMissileOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sSuperMissileOam_Vertical[3] = { + [0] = { + .pFrame = sSuperMissileOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sSuperMissileOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sMissileOAM_Tumbling[9] = { - sMissileOAM_Tumbling_Frame0, - 0x3, - sMissileOAM_Tumbling_Frame1, - 0x3, - sMissileOAM_Tumbling_Frame2, - 0x3, - sMissileOAM_Tumbling_Frame3, - 0x3, - sMissileOAM_Tumbling_Frame4, - 0x3, - sMissileOAM_Tumbling_Frame5, - 0x3, - sMissileOAM_Tumbling_Frame6, - 0x3, - sMissileOAM_Tumbling_Frame7, - 0x3, - NULL, - 0x0 +const struct FrameData sMissileOam_Tumbling[9] = { + [0] = { + .pFrame = sMissileOam_Tumbling_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sMissileOam_Tumbling_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = { + .pFrame = sMissileOam_Tumbling_Frame2, + .timer = CONVERT_SECONDS(.05f) + }, + [3] = { + .pFrame = sMissileOam_Tumbling_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [4] = { + .pFrame = sMissileOam_Tumbling_Frame4, + .timer = CONVERT_SECONDS(.05f) + }, + [5] = { + .pFrame = sMissileOam_Tumbling_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [6] = { + .pFrame = sMissileOam_Tumbling_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [7] = { + .pFrame = sMissileOam_Tumbling_Frame7, + .timer = CONVERT_SECONDS(.05f) + }, + [8] = FRAME_DATA_TERMINATOR }; -const struct FrameData sSuperMissileOAM_Tumbling[9] = { - sSuperMissileOAM_Tumbling_Frame0, - 0x3, - sSuperMissileOAM_Tumbling_Frame1, - 0x3, - sSuperMissileOAM_Tumbling_Frame2, - 0x3, - sSuperMissileOAM_Tumbling_Frame3, - 0x3, - sSuperMissileOAM_Tumbling_Frame4, - 0x3, - sSuperMissileOAM_Tumbling_Frame5, - 0x3, - sSuperMissileOAM_Tumbling_Frame6, - 0x3, - sSuperMissileOAM_Tumbling_Frame7, - 0x3, - NULL, - 0x0 +const struct FrameData sSuperMissileOam_Tumbling[9] = { + [0] = { + .pFrame = sSuperMissileOam_Tumbling_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sSuperMissileOam_Tumbling_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = { + .pFrame = sSuperMissileOam_Tumbling_Frame2, + .timer = CONVERT_SECONDS(.05f) + }, + [3] = { + .pFrame = sSuperMissileOam_Tumbling_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [4] = { + .pFrame = sSuperMissileOam_Tumbling_Frame4, + .timer = CONVERT_SECONDS(.05f) + }, + [5] = { + .pFrame = sSuperMissileOam_Tumbling_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [6] = { + .pFrame = sSuperMissileOam_Tumbling_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [7] = { + .pFrame = sSuperMissileOam_Tumbling_Frame7, + .timer = CONVERT_SECONDS(.05f) + }, + [8] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleMissileTrailOam[8] = { - sParticleMissileTrailOam_Frame0, - 0x4, - sParticleMissileTrailOam_Frame1, - 0x4, - sParticleMissileTrailOam_Frame2, - 0x4, - sParticleMissileTrailOam_Frame3, - 0x3, - sParticleMissileTrailOam_Frame4, - 0x3, - sParticleMissileTrailOam_Frame5, - 0x3, - sParticleMissileTrailOam_Frame6, - 0x3, - NULL, - 0x0 + [0] = { + .pFrame = sParticleMissileTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleMissileTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleMissileTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleMissileTrailOam_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [4] = { + .pFrame = sParticleMissileTrailOam_Frame4, + .timer = CONVERT_SECONDS(.05f) + }, + [5] = { + .pFrame = sParticleMissileTrailOam_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [6] = { + .pFrame = sParticleMissileTrailOam_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [7] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleSuperMissileTrailOam[9] = { - sParticleSuperMissileTrailOam_Frame0, - 0x4, - sParticleMissileTrailOam_Frame1, - 0x4, - sParticleMissileTrailOam_Frame2, - 0x4, - sParticleSuperMissileTrailOam_Frame3, - 0x3, - sParticleMissileTrailOam_Frame3, - 0x3, - sParticleMissileTrailOam_Frame4, - 0x3, - sParticleMissileTrailOam_Frame5, - 0x3, - sParticleMissileTrailOam_Frame6, - 0x3, - NULL, - 0x0 + [0] = { + .pFrame = sParticleSuperMissileTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleMissileTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleMissileTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleSuperMissileTrailOam_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [4] = { + .pFrame = sParticleMissileTrailOam_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [5] = { + .pFrame = sParticleMissileTrailOam_Frame4, + .timer = CONVERT_SECONDS(.05f) + }, + [6] = { + .pFrame = sParticleMissileTrailOam_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [7] = { + .pFrame = sParticleMissileTrailOam_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [8] = FRAME_DATA_TERMINATOR }; -const u16 sBeamPal[96] = INCBIN_U16("data/weapons/Beams.pal"); +const u16 sBeamPal[16 * 6] = INCBIN_U16("data/weapons/Beams.pal"); const u8 sNormalBeamGfx_Top[512] = INCBIN_U8("data/weapons/NormalBeamTop.gfx"); const u8 sNormalBeamGfx_Bottom[512] = INCBIN_U8("data/weapons/NormalBeamBottom.gfx"); const u8 sNormalBeamGfx_Charged_Top[512] = INCBIN_U8("data/weapons/NormalBeamChargedTop.gfx"); const u8 sNormalBeamGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/NormalBeamChargedBottom.gfx"); -const u16 sNormalBeamOAM_Horizontal_Frame0[4] = { +static const u16 sNormalBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fa, 0x2080 }; -const u16 sNormalBeamOAM_Horizontal_Frame1[4] = { +static const u16 sNormalBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fa, 0x20a0 }; -const u16 sNormalBeamOAM_Diagonal_Frame0[4] = { +static const u16 sNormalBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x2082 }; -const u16 sNormalBeamOAM_Diagonal_Frame1[4] = { +static const u16 sNormalBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x2084 }; -const u16 sNormalBeamOAM_Vertical_Frame0[4] = { +static const u16 sNormalBeamOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfa, 0x1fc, 0x2086 }; -const u16 sNormalBeamOAM_Vertical_Frame1[4] = { +static const u16 sNormalBeamOam_Vertical_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfa, 0x1fc, 0x2087 }; -const u16 sNormalBeamOAM_Horizontal_Unused_Frame0[4] = { +static const u16 sNormalBeamOam_Horizontal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20a8 }; -const u16 sNormalBeamOAM_Horizontal_Unused_Frame1[4] = { +static const u16 sNormalBeamOam_Horizontal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fd, 0x20a8 }; -const u16 sNormalBeamOAM_Diagonal_Unused_Frame0[4] = { +static const u16 sNormalBeamOam_Diagonal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20a9 }; -const u16 sNormalBeamOAM_Diagonal_Unused_Frame1[4] = { +static const u16 sNormalBeamOam_Diagonal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfd, 0x1fd, 0x20a9 }; -const u16 sNormalBeamOAM_Vertical_Unused_Frame0[4] = { +static const u16 sNormalBeamOam_Vertical_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20aa }; -const u16 sNormalBeamOAM_Vertical_Unused_Frame1[4] = { +static const u16 sNormalBeamOam_Vertical_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfd, 0x1fc, 0x20aa }; -const u16 sChargedNormalBeamOAM_Horizontal_Frame0[7] = { +static const u16 sChargedNormalBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xf8, OBJ_SIZE_16x16 | 0x1fa, 0x20c0, 0xf8, OBJ_SIZE_16x16 | 0x1ff, 0x20c2 }; -const u16 sChargedNormalBeamOAM_Horizontal_Frame1[10] = { +static const u16 sChargedNormalBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20c2, 0xf8, OBJ_SIZE_16x16 | 0x1, 0x20c0, 0xf8, OBJ_SIZE_16x16 | 0x9, 0x20c2 }; -const u16 sChargedNormalBeamOAM_Diagonal_Frame0[7] = { +static const u16 sChargedNormalBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x20c4, 0xfe, OBJ_SIZE_16x16 | 0x1fe, 0x20c6 }; -const u16 sChargedNormalBeamOAM_Diagonal_Frame1[10] = { +static const u16 sChargedNormalBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfa, OBJ_SIZE_16x16 | 0x1fa, 0x20c6, 0xff, OBJ_SIZE_16x16 | 0x1ff, 0x20c4, 0x4, OBJ_SIZE_16x16 | 0x4, 0x20c6 }; -const u16 sChargedNormalBeamOAM_Vertical_Frame0[7] = { +static const u16 sChargedNormalBeamOam_Vertical_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfa, OBJ_SIZE_16x16 | 0x1f8, 0x20c8, 0xff, OBJ_SIZE_16x16 | 0x1f8, 0x20ca }; -const u16 sChargedNormalBeamOAM_Vertical_Frame1[10] = { +static const u16 sChargedNormalBeamOam_Vertical_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20ca, 0x1, OBJ_SIZE_16x16 | 0x1f8, 0x20c8, 0x9, OBJ_SIZE_16x16 | 0x1f8, 0x20ca }; -const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame0[4] = { +static const u16 sChargedNormalBeamOam_Horizontal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ce }; -const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame1[4] = { +static const u16 sChargedNormalBeamOam_Horizontal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20cf }; -const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame2[4] = { +static const u16 sChargedNormalBeamOam_Horizontal_Unused_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ee }; -const u16 sChargedNormalBeamOAM_Horizontal_Unused_Frame3[4] = { +static const u16 sChargedNormalBeamOam_Horizontal_Unused_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ef }; -const struct FrameData sNormalBeamOAM_Horizontal[3] = { - sNormalBeamOAM_Horizontal_Frame0, - 0x3, - sNormalBeamOAM_Horizontal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sNormalBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sNormalBeamOAM_Diagonal[3] = { - sNormalBeamOAM_Diagonal_Frame0, - 0x3, - sNormalBeamOAM_Diagonal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sNormalBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sNormalBeamOAM_Vertical[3] = { - sNormalBeamOAM_Vertical_Frame0, - 0x3, - sNormalBeamOAM_Vertical_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Vertical[3] = { + [0] = { + .pFrame = sNormalBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sNormalBeamOAM_Horizontal_Unused[3] = { - sNormalBeamOAM_Horizontal_Unused_Frame0, - 0x3, - sNormalBeamOAM_Horizontal_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Horizontal_Unused[3] = { + [0] = { + .pFrame = sNormalBeamOam_Horizontal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Horizontal_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sNormalBeamOAM_Diagonal_Unused[3] = { - sNormalBeamOAM_Diagonal_Unused_Frame0, - 0x3, - sNormalBeamOAM_Diagonal_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Diagonal_Unused[3] = { + [0] = { + .pFrame = sNormalBeamOam_Diagonal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Diagonal_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sNormalBeamOAM_Vertical_Unused[3] = { - sNormalBeamOAM_Vertical_Unused_Frame0, - 0x3, - sNormalBeamOAM_Vertical_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sNormalBeamOam_Vertical_Unused[3] = { + [0] = { + .pFrame = sNormalBeamOam_Vertical_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + sNormalBeamOam_Vertical_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedNormalBeamOAM_Horizontal[3] = { - sChargedNormalBeamOAM_Horizontal_Frame0, - 0x2, - sChargedNormalBeamOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedNormalBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedNormalBeamOAM_Diagonal[3] = { - sChargedNormalBeamOAM_Diagonal_Frame0, - 0x2, - sChargedNormalBeamOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedNormalBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sChargedNormalBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedNormalBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedNormalBeamOAM_Vertical[3] = { - sChargedNormalBeamOAM_Vertical_Frame0, - 0x2, - sChargedNormalBeamOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedNormalBeamOam_Vertical[3] = { + [0] = { + .pFrame = sChargedNormalBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedNormalBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedNormalBeamOAM_Horizontal_Unused[5] = { - sChargedNormalBeamOAM_Horizontal_Unused_Frame0, - 0x4, - sChargedNormalBeamOAM_Horizontal_Unused_Frame1, - 0x4, - sChargedNormalBeamOAM_Horizontal_Unused_Frame2, - 0x4, - sChargedNormalBeamOAM_Horizontal_Unused_Frame3, - 0x4, - NULL, - 0x0 +const struct FrameData sChargedNormalBeamOam_Horizontal_Unused[5] = { + [0] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Unused_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sChargedNormalBeamOam_Horizontal_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = FRAME_DATA_TERMINATOR }; const u8 sLongBeamGfx_Top[512] = INCBIN_U8("data/weapons/LongBeamTop.gfx"); @@ -656,160 +791,185 @@ const u8 sLongBeamGfx_Bottom[512] = INCBIN_U8("data/weapons/LongBeamBottom.gfx") const u8 sLongBeamGfx_Charged_Top[512] = INCBIN_U8("data/weapons/LongBeamChargedTop.gfx"); const u8 sLongBeamGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/LongBeamChargedBottom.gfx"); -const u16 sLongBeamOAM_Horizontal_Frame0[4] = { +static const u16 sLongBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fc, 0x2080 }; -const u16 sLongBeamOAM_Horizontal_Frame1[4] = { +static const u16 sLongBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fc, 0x20a0 }; -const u16 sLongBeamOAM_Diagonal_Frame0[4] = { +static const u16 sLongBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x20c0 }; -const u16 sLongBeamOAM_Diagonal_Frame1[4] = { +static const u16 sLongBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x20c2 }; -const u16 sLongBeamOAM_Vertical_Frame0[4] = { +static const u16 sLongBeamOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfc, 0x1fc, 0x2082 }; -const u16 sLongBeamOAM_Vertical_Frame1[4] = { +static const u16 sLongBeamOam_Vertical_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfc, 0x1fc, 0x2083 }; -const u16 sChargedLongBeamOAM_Horizontal_Frame0[7] = { +static const u16 sChargedLongBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1fa, 0x2086, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1, 0x20c6 }; -const u16 sChargedLongBeamOAM_Horizontal_Frame1[10] = { +static const u16 sChargedLongBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f8, 0x20c6, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x2, 0x2086, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0xb, 0x20c6 }; -const u16 sChargedLongBeamOAM_Diagonal_Frame0[7] = { +static const u16 sChargedLongBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfc, OBJ_SIZE_16x16 | 0x1fc, 0x2084, 0x2, OBJ_SIZE_16x16 | 0x2, 0x20c4 }; -const u16 sChargedLongBeamOAM_Diagonal_Frame1[10] = { +static const u16 sChargedLongBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x20c4, 0x1, OBJ_SIZE_16x16 | 0x1, 0x2084, 0x8, OBJ_SIZE_16x16 | 0x8, 0x20c4 }; -const u16 sChargedLongBeamOAM_Vertical_Frame0[7] = { +static const u16 sChargedLongBeamOam_Vertical_Frame0[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xfa, OBJ_SIZE_16x32 | 0x1f8, 0x208a, OBJ_SHAPE_VERTICAL | 0x1, OBJ_SIZE_16x32 | 0x1f8, 0x208c }; -const u16 sChargedLongBeamOAM_Vertical_Frame1[10] = { +static const u16 sChargedLongBeamOam_Vertical_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_16x32 | 0x1f8, 0x208c, OBJ_SHAPE_VERTICAL | 0x2, OBJ_SIZE_16x32 | 0x1f8, 0x208a, OBJ_SHAPE_VERTICAL | 0xb, OBJ_SIZE_16x32 | 0x1f8, 0x208c }; -const u16 sParticleChargedLongBeamTrailOam_Frame0[4] = { +static const u16 sParticleChargedLongBeamTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ce }; -const u16 sParticleChargedLongBeamTrailOam_Frame1[4] = { +static const u16 sParticleChargedLongBeamTrailOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x208e }; -const u16 sParticleChargedLongBeamTrailOam_Frame2[4] = { +static const u16 sParticleChargedLongBeamTrailOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20cf }; -const u16 sParticleChargedLongBeamTrailOam_Frame3[4] = { +static const u16 sParticleChargedLongBeamTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ef }; -const struct FrameData sLongBeamOAM_Horizontal[3] = { - sLongBeamOAM_Horizontal_Frame0, - 0x3, - sLongBeamOAM_Horizontal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sLongBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sLongBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sLongBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sLongBeamOAM_Diagonal[3] = { - sLongBeamOAM_Diagonal_Frame0, - 0x3, - sLongBeamOAM_Diagonal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sLongBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sLongBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sLongBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sLongBeamOAM_Vertical[3] = { - sLongBeamOAM_Vertical_Frame0, - 0x3, - sLongBeamOAM_Vertical_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sLongBeamOam_Vertical[3] = { + [0] = { + .pFrame = sLongBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sLongBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedLongBeamOAM_Horizontal[3] = { - sChargedLongBeamOAM_Horizontal_Frame0, - 0x2, - sChargedLongBeamOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedLongBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sChargedLongBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedLongBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedLongBeamOAM_Diagonal[3] = { - sChargedLongBeamOAM_Diagonal_Frame0, - 0x2, - sChargedLongBeamOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedLongBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sChargedLongBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedLongBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedLongBeamOAM_Vertical[3] = { - sChargedLongBeamOAM_Vertical_Frame0, - 0x2, - sChargedLongBeamOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedLongBeamOam_Vertical[3] = { + [0] = { + .pFrame = sChargedLongBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedLongBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedLongBeamTrailOam[5] = { - sParticleChargedLongBeamTrailOam_Frame0, - 0x4, - sParticleChargedLongBeamTrailOam_Frame1, - 0x4, - sParticleChargedLongBeamTrailOam_Frame2, - 0x4, - sParticleChargedLongBeamTrailOam_Frame3, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedLongBeamTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleChargedLongBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleChargedLongBeamTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleChargedLongBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = FRAME_DATA_TERMINATOR }; const u8 sIceBeamGfx_Top[512] = INCBIN_U8("data/weapons/IceBeamTop.gfx"); @@ -817,67 +977,67 @@ const u8 sIceBeamGfx_Bottom[512] = INCBIN_U8("data/weapons/IceBeamBottom.gfx"); const u8 sIceBeamGfx_Charged_Top[512] = INCBIN_U8("data/weapons/IceBeamChargedTop.gfx"); const u8 sIceBeamGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/IceBeamChargedBottom.gfx"); -const u16 sIceBeamOAM_Horizontal_Frame0[4] = { +static const u16 sIceBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1fb, 0x2080 }; -const u16 sIceBeamOAM_Horizontal_Frame1[4] = { +static const u16 sIceBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1fc, 0x2082 }; -const u16 sIceBeamOAM_Diagonal_Frame0[4] = { +static const u16 sIceBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfa, OBJ_SIZE_16x16 | 0x1f9, 0x2084 }; -const u16 sIceBeamOAM_Diagonal_Frame1[4] = { +static const u16 sIceBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfb, OBJ_SIZE_16x16 | 0x1fa, 0x2086 }; -const u16 sIceBeamOAM_Vertical_Frame0[4] = { +static const u16 sIceBeamOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfb, OBJ_SIZE_16x16 | 0x1f8, 0x2088 }; -const u16 sIceBeamOAM_Vertical_Frame1[4] = { +static const u16 sIceBeamOam_Vertical_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, OBJ_SIZE_16x16 | 0x1f8, 0x208a }; -const u16 sIceBeamOAM_Horizontal_Unused_Frame0[4] = { +static const u16 sIceBeamOam_Horizontal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x208c }; -const u16 sIceBeamOAM_Horizontal_Unused_Frame1[4] = { +static const u16 sIceBeamOam_Horizontal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fd, 0x208c }; -const u16 sIceBeamOAM_Diagonal_Unused_Frame0[4] = { +static const u16 sIceBeamOam_Diagonal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x208d }; -const u16 sIceBeamOAM_Diagonal_Unused_Frame1[4] = { +static const u16 sIceBeamOam_Diagonal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfd, 0x1fd, 0x208d }; -const u16 sIceBeamOAM_Vertical_Unused_Frame0[4] = { +static const u16 sIceBeamOam_Vertical_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x208e }; -const u16 sIceBeamOAM_Vertical_Unused_Frame1[4] = { +static const u16 sIceBeamOam_Vertical_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfd, 0x1fc, 0x208e }; -const u16 sChargedIceBeamOAM_Horizontal_Frame0[13] = { +static const u16 sChargedIceBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(4)] = { 0x4, 0xf8, OBJ_SIZE_16x16 | 0x1fa, 0x20c0, 0xfc, 0xa, 0x20c2, @@ -885,7 +1045,7 @@ const u16 sChargedIceBeamOAM_Horizontal_Frame0[13] = { 0xfc, 0xf, 0x20e2 }; -const u16 sChargedIceBeamOAM_Horizontal_Frame1[19] = { +static const u16 sChargedIceBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(6)] = { 0x6, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20c3, 0xfc, 0x8, 0x20e2, @@ -895,20 +1055,20 @@ const u16 sChargedIceBeamOAM_Horizontal_Frame1[19] = { 0xfc, 0x1a, 0x20e2 }; -const u16 sChargedIceBeamOAM_Diagonal_Frame0[7] = { +static const u16 sChargedIceBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x20c5, 0xff, OBJ_SIZE_16x16 | 0x1ff, 0x20c7 }; -const u16 sChargedIceBeamOAM_Diagonal_Frame1[10] = { +static const u16 sChargedIceBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfa, OBJ_SIZE_16x16 | 0x1fa, 0x20c7, 0xfe, OBJ_SIZE_16x16 | 0x1fe, 0x20c5, 0x4, OBJ_SIZE_16x16 | 0x4, 0x20c7 }; -const u16 sChargedIceBeamOAM_Vertical_Frame0[13] = { +static const u16 sChargedIceBeamOam_Vertical_Frame0[OAM_DATA_SIZE(4)] = { 0x4, 0xfa, OBJ_SIZE_16x16 | 0x1f8, 0x20c9, 0xa, 0x1fc, 0x20cb, @@ -916,7 +1076,7 @@ const u16 sChargedIceBeamOAM_Vertical_Frame0[13] = { 0xf, 0x1fc, 0x20eb }; -const u16 sChargedIceBeamOAM_Vertical_Frame1[19] = { +static const u16 sChargedIceBeamOam_Vertical_Frame1[OAM_DATA_SIZE(6)] = { 0x6, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20cc, 0x8, 0x1fc, 0x20eb, @@ -926,125 +1086,161 @@ const u16 sChargedIceBeamOAM_Vertical_Frame1[19] = { 0x1a, 0x1fc, 0x20eb }; -const u16 sParticleChargedIceBeamTrailOam_Frame0[4] = { +static const u16 sParticleChargedIceBeamTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x208c }; -const u16 sParticleChargedIceBeamTrailOam_Frame1[4] = { +static const u16 sParticleChargedIceBeamTrailOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20ce }; -const u16 sParticleChargedIceBeamTrailOam_Frame2[4] = { +static const u16 sParticleChargedIceBeamTrailOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ae }; -const u16 sParticleChargedIceBeamTrailOam_Frame3[4] = { +static const u16 sParticleChargedIceBeamTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20af }; -const u16 sParticleChargedIceBeamTrailOam_Frame4[4] = { +static const u16 sParticleChargedIceBeamTrailOam_Frame4[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x208f }; -const struct FrameData sIceBeamOAM_Horizontal[3] = { - sIceBeamOAM_Horizontal_Frame0, - 0x3, - sIceBeamOAM_Horizontal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sIceBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sIceBeamOAM_Diagonal[3] = { - sIceBeamOAM_Diagonal_Frame0, - 0x3, - sIceBeamOAM_Diagonal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sIceBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sIceBeamOAM_Vertical[3] = { - sIceBeamOAM_Vertical_Frame0, - 0x3, - sIceBeamOAM_Vertical_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Vertical[3] = { + [0] = { + .pFrame = sIceBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sIceBeamOAM_Horizontal_Unused[3] = { - sIceBeamOAM_Horizontal_Unused_Frame0, - 0x3, - sIceBeamOAM_Horizontal_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Horizontal_Unused[3] = { + [0] = { + .pFrame = sIceBeamOam_Horizontal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Horizontal_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sIceBeamOAM_Diagonal_Unused[3] = { - sIceBeamOAM_Diagonal_Unused_Frame0, - 0x3, - sIceBeamOAM_Diagonal_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Diagonal_Unused[3] = { + [0] = { + .pFrame = sIceBeamOam_Diagonal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Diagonal_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sIceBeamOAM_Vertical_Unused[3] = { - sIceBeamOAM_Vertical_Unused_Frame0, - 0x3, - sIceBeamOAM_Vertical_Unused_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sIceBeamOam_Vertical_Unused[3] = { + [0] = { + .pFrame = sIceBeamOam_Vertical_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sIceBeamOam_Vertical_Unused_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedIceBeamOAM_Horizontal[3] = { - sChargedIceBeamOAM_Horizontal_Frame0, - 0x2, - sChargedIceBeamOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedIceBeamOam_Horizontal[3] = { + [0] = { + .pFrame = sChargedIceBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedIceBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedIceBeamOAM_Diagonal[3] = { - sChargedIceBeamOAM_Diagonal_Frame0, - 0x2, - sChargedIceBeamOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedIceBeamOam_Diagonal[3] = { + [0] = { + .pFrame = sChargedIceBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedIceBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedIceBeamOAM_Vertical[3] = { - sChargedIceBeamOAM_Vertical_Frame0, - 0x2, - sChargedIceBeamOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedIceBeamOam_Vertical[3] = { + [0] = { + .pFrame = sChargedIceBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedIceBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedIceBeamTrailOam[6] = { - sParticleChargedIceBeamTrailOam_Frame0, - 0x4, - sParticleChargedIceBeamTrailOam_Frame1, - 0x4, - sParticleChargedIceBeamTrailOam_Frame2, - 0x4, - sParticleChargedIceBeamTrailOam_Frame3, - 0x4, - sParticleChargedIceBeamTrailOam_Frame4, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedIceBeamTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleChargedIceBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleChargedIceBeamTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleChargedIceBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = { + .pFrame = sParticleChargedIceBeamTrailOam_Frame4, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [5] = FRAME_DATA_TERMINATOR }; const u8 sWaveBeamGfx_Top[512] = INCBIN_U8("data/weapons/WaveBeamTop.gfx"); @@ -1052,32 +1248,32 @@ const u8 sWaveBeamGfx_Bottom[512] = INCBIN_U8("data/weapons/WaveBeamBottom.gfx") const u8 sWaveBeamGfx_Charged_Top[512] = INCBIN_U8("data/weapons/WaveBeamChargedTop.gfx"); const u8 sWaveBeamGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/WaveBeamChargedBottom.gfx"); -const u16 sWaveBeamOAM_Horizontal_Frame0[4] = { +static const u16 sWaveBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fb, 0x2080 }; -const u16 sWaveBeamOAM_Horizontal_Frame1[10] = { +static const u16 sWaveBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0x0, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x5, 0x20a0 }; -const u16 sWaveBeamOAM_Horizontal_Frame2[10] = { +static const u16 sWaveBeamOam_Horizontal_Frame2[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0x4, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xf4, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xfc, 0xd, 0x20a0 }; -const u16 sWaveBeamOAM_Horizontal_Frame3[7] = { +static const u16 sWaveBeamOam_Horizontal_Frame3[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0x8, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xf0, 0x1fb, 0x2080 }; -const u16 sWaveBeamOAM_Horizontal_Frame4[13] = { +static const u16 sWaveBeamOam_Horizontal_Frame4[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf3, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0x5, 0x1fb, 0x2080, @@ -1085,7 +1281,7 @@ const u16 sWaveBeamOAM_Horizontal_Frame4[13] = { OBJ_SHAPE_HORIZONTAL | 0x9, 0x1fb, 0x20a0 }; -const u16 sWaveBeamOAM_Horizontal_Frame5[13] = { +static const u16 sWaveBeamOam_Horizontal_Frame5[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0x0, 0x1fb, 0x2080, @@ -1093,39 +1289,39 @@ const u16 sWaveBeamOAM_Horizontal_Frame5[13] = { OBJ_SHAPE_HORIZONTAL | 0x6, 0x1fb, 0x20a0 }; -const u16 sWaveBeamOAM_Horizontal_Frame6[10] = { +static const u16 sWaveBeamOam_Horizontal_Frame6[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fb, 0x2080, OBJ_SHAPE_HORIZONTAL | 0xf6, 0x1fb, 0x20a0, OBJ_SHAPE_HORIZONTAL | 0x2, 0x1fb, 0x20a0 }; -const u16 sWaveBeamOAM_Diagonal_Frame0[4] = { +static const u16 sWaveBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x20c0 }; -const u16 sWaveBeamOAM_Diagonal_Frame1[10] = { +static const u16 sWaveBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf6, OBJ_SIZE_16x16 | 0x1fd, 0x20c0, 0xfc, OBJ_SIZE_16x16 | 0x1f6, 0x20c0, 0x0, OBJ_SIZE_16x16 | 0x1, 0x20c2 }; -const u16 sWaveBeamOAM_Diagonal_Frame2[10] = { +static const u16 sWaveBeamOam_Diagonal_Frame2[OAM_DATA_SIZE(3)] = { 0x3, 0xf3, OBJ_SIZE_16x16 | 0x1ff, 0x20c0, 0xfe, OBJ_SIZE_16x16 | 0x1f4, 0x20c0, 0x5, OBJ_SIZE_16x16 | 0x5, 0x20c2 }; -const u16 sWaveBeamOAM_Diagonal_Frame3[7] = { +static const u16 sWaveBeamOam_Diagonal_Frame3[OAM_DATA_SIZE(2)] = { 0x2, 0xf0, OBJ_SIZE_16x16 | 0x2, 0x20c0, 0x1, OBJ_SIZE_16x16 | 0x1f1, 0x20c0 }; -const u16 sWaveBeamOAM_Diagonal_Frame4[13] = { +static const u16 sWaveBeamOam_Diagonal_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0xf2, OBJ_SIZE_16x16 | 0x1ff, 0x20c0, 0xff, OBJ_SIZE_16x16 | 0x1f3, 0x20c0, @@ -1133,7 +1329,7 @@ const u16 sWaveBeamOAM_Diagonal_Frame4[13] = { 0x2, OBJ_SIZE_16x16 | 0x1f0, 0x20c2 }; -const u16 sWaveBeamOAM_Diagonal_Frame5[13] = { +static const u16 sWaveBeamOam_Diagonal_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0xf6, OBJ_SIZE_16x16 | 0x1fc, 0x20c0, 0xfb, OBJ_SIZE_16x16 | 0x1f7, 0x20c0, @@ -1141,39 +1337,39 @@ const u16 sWaveBeamOAM_Diagonal_Frame5[13] = { 0x0, OBJ_SIZE_16x16 | 0x1f3, 0x20c2 }; -const u16 sWaveBeamOAM_Diagonal_Frame6[10] = { +static const u16 sWaveBeamOam_Diagonal_Frame6[OAM_DATA_SIZE(3)] = { 0x3, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x20c0, 0xf4, OBJ_SIZE_16x16 | 0x1fe, 0x20c2, 0xfe, OBJ_SIZE_16x16 | 0x1f4, 0x20c2 }; -const u16 sWaveBeamOAM_Vertical_Frame0[4] = { +static const u16 sWaveBeamOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfb, 0x1fc, 0x2082 }; -const u16 sWaveBeamOAM_Vertical_Frame1[10] = { +static const u16 sWaveBeamOam_Vertical_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xfb, 0x0, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f8, 0x2082, OBJ_SHAPE_VERTICAL | 0x5, 0x1fc, 0x20c6 }; -const u16 sWaveBeamOAM_Vertical_Frame2[10] = { +static const u16 sWaveBeamOam_Vertical_Frame2[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xfb, 0x4, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f4, 0x2082, OBJ_SHAPE_VERTICAL | 0xd, 0x1fc, 0x20c6 }; -const u16 sWaveBeamOAM_Vertical_Frame3[7] = { +static const u16 sWaveBeamOam_Vertical_Frame3[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xfb, 0x8, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f0, 0x2082 }; -const u16 sWaveBeamOAM_Vertical_Frame4[13] = { +static const u16 sWaveBeamOam_Vertical_Frame4[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xfb, 0x5, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f3, 0x2082, @@ -1181,7 +1377,7 @@ const u16 sWaveBeamOAM_Vertical_Frame4[13] = { OBJ_SHAPE_VERTICAL | 0xfb, 0x1ef, 0x20c6 }; -const u16 sWaveBeamOAM_Vertical_Frame5[13] = { +static const u16 sWaveBeamOam_Vertical_Frame5[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xfb, 0x0, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f8, 0x2082, @@ -1189,24 +1385,24 @@ const u16 sWaveBeamOAM_Vertical_Frame5[13] = { OBJ_SHAPE_VERTICAL | 0xfb, 0x1f2, 0x20c6 }; -const u16 sWaveBeamOAM_Vertical_Frame6[10] = { +static const u16 sWaveBeamOam_Vertical_Frame6[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xfb, 0x1fc, 0x2082, OBJ_SHAPE_VERTICAL | 0xfb, 0x2, 0x20c6, OBJ_SHAPE_VERTICAL | 0xfb, 0x1f6, 0x20c6 }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame0[4] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1f8, 0x20ee }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame1[4] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1f8, 0x20ee }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame2[13] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame2[OAM_DATA_SIZE(4)] = { 0x4, 0x1, 0x1fd, 0x2084, 0xf7, 0x1fd, 0x2084, @@ -1214,7 +1410,7 @@ const u16 sWaveBeamOAM_Horizontal_Unused_Frame2[13] = { 0xfc, 0x1fa, 0x2084 }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame3[13] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame3[OAM_DATA_SIZE(4)] = { 0x4, 0x5, 0x0, 0x2084, 0xf3, 0x0, 0x2084, @@ -1222,7 +1418,7 @@ const u16 sWaveBeamOAM_Horizontal_Unused_Frame3[13] = { 0x2, 0x1fd, 0x2084 }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame4[13] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0x7, 0x4, 0x2084, 0xf1, 0x4, 0x2084, @@ -1230,7 +1426,7 @@ const u16 sWaveBeamOAM_Horizontal_Unused_Frame4[13] = { 0x6, 0x0, 0x2084 }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame5[13] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0xf3, 0xd, 0x2084, 0x5, 0xd, 0x2084, @@ -1238,7 +1434,7 @@ const u16 sWaveBeamOAM_Horizontal_Unused_Frame5[13] = { 0xf1, 0x8, 0x2084 }; -const u16 sWaveBeamOAM_Horizontal_Unused_Frame6[13] = { +static const u16 sWaveBeamOam_Horizontal_Unused_Frame6[OAM_DATA_SIZE(4)] = { 0x4, 0xf5, 0x10, 0x2084, 0x3, 0x10, 0x2084, @@ -1246,19 +1442,19 @@ const u16 sWaveBeamOAM_Horizontal_Unused_Frame6[13] = { 0x0, 0x13, 0x2085 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame0[4] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20a4 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame1[10] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfa, 0x1fc, 0x20a4, 0xfc, 0x1fa, 0x20a4, 0xff, 0x1ff, 0x20a5 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame2[13] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame2[OAM_DATA_SIZE(4)] = { 0x4, 0xf8, 0x1fd, 0x20a4, 0xfd, 0x1f8, 0x20a4, @@ -1266,7 +1462,7 @@ const u16 sWaveBeamOAM_Diagonal_Unused_Frame2[13] = { 0xf9, 0x1f9, 0x20a4 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame3[13] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame3[OAM_DATA_SIZE(4)] = { 0x4, 0xf8, 0x3, 0x20a4, 0x3, 0x1f8, 0x20a4, @@ -1274,7 +1470,7 @@ const u16 sWaveBeamOAM_Diagonal_Unused_Frame3[13] = { 0xfe, 0x1f7, 0x20a4 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame4[13] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0xf9, 0x7, 0x20a4, 0x7, 0x1f9, 0x20a4, @@ -1282,7 +1478,7 @@ const u16 sWaveBeamOAM_Diagonal_Unused_Frame4[13] = { 0x3, 0x1f6, 0x20a4 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame5[13] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0x1, 0xc, 0x20a4, 0xc, 0x1, 0x20a4, @@ -1290,7 +1486,7 @@ const u16 sWaveBeamOAM_Diagonal_Unused_Frame5[13] = { 0xa, 0x1fc, 0x20a4 }; -const u16 sWaveBeamOAM_Diagonal_Unused_Frame6[13] = { +static const u16 sWaveBeamOam_Diagonal_Unused_Frame6[OAM_DATA_SIZE(4)] = { 0x4, 0x3, 0xe, 0x20a4, 0xe, 0x3, 0x20a4, @@ -1298,19 +1494,19 @@ const u16 sWaveBeamOAM_Diagonal_Unused_Frame6[13] = { 0x8, 0xf, 0x20a5 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame0[4] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20c4 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame1[10] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfd, 0x1fe, 0x20c4, 0xfd, 0x1fa, 0x20c4, 0x3, 0x1fc, 0x20c5 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame2[13] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame2[OAM_DATA_SIZE(4)] = { 0x4, 0xfd, 0x1, 0x20c4, 0xfd, 0x1f7, 0x20c4, @@ -1318,7 +1514,7 @@ const u16 sWaveBeamOAM_Vertical_Unused_Frame2[13] = { 0xfa, 0x1fc, 0x20c4 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame3[13] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame3[OAM_DATA_SIZE(4)] = { 0x4, 0x0, 0x5, 0x20c4, 0x0, 0x1f3, 0x20c4, @@ -1326,7 +1522,7 @@ const u16 sWaveBeamOAM_Vertical_Unused_Frame3[13] = { 0xfd, 0x1f6, 0x20c4 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame4[13] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0x4, 0x7, 0x20c4, 0x4, 0x1f1, 0x20c4, @@ -1334,7 +1530,7 @@ const u16 sWaveBeamOAM_Vertical_Unused_Frame4[13] = { 0x0, 0x1f2, 0x20c4 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame5[13] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0xd, 0x5, 0x20c4, 0xd, 0x1f3, 0x20c4, @@ -1342,7 +1538,7 @@ const u16 sWaveBeamOAM_Vertical_Unused_Frame5[13] = { 0x8, 0x1f1, 0x20c4 }; -const u16 sWaveBeamOAM_Vertical_Unused_Frame6[13] = { +static const u16 sWaveBeamOam_Vertical_Unused_Frame6[OAM_DATA_SIZE(4)] = { 0x4, 0x10, 0x3, 0x20c4, 0x10, 0x1f5, 0x20c4, @@ -1350,19 +1546,19 @@ const u16 sWaveBeamOAM_Vertical_Unused_Frame6[13] = { 0x13, 0x0, 0x20c5 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame0[4] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f9, 0x2083 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame1[10] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x1f7, 0x2083, OBJ_SHAPE_HORIZONTAL | 0xfa, OBJ_SIZE_32x16 | 0x1f7, 0x2083, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_X_FLIP | OBJ_SIZE_32x16 | 0x4, 0x2086 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame2[13] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame2[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x1f7, 0x2083, OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x1f7, 0x2083, @@ -1370,37 +1566,37 @@ const u16 sChargedWaveBeamOAM_Horizontal_Frame2[13] = { OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_X_FLIP | OBJ_SIZE_32x16 | 0x10, 0x2086 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame3[7] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame3[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xed, OBJ_SIZE_32x16 | 0x1fb, 0x2083, OBJ_SHAPE_HORIZONTAL | 0x3, OBJ_SIZE_32x16 | 0x1fb, 0x2083 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame4[7] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame4[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xea, OBJ_SIZE_32x16 | 0x1, 0x2083, OBJ_SHAPE_HORIZONTAL | 0x6, OBJ_SIZE_32x16 | 0x1, 0x2083 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame5[7] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame5[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xed, OBJ_SIZE_32x16 | 0x8, 0x2083, OBJ_SHAPE_HORIZONTAL | 0x3, OBJ_SIZE_32x16 | 0x8, 0x2083 }; -const u16 sChargedWaveBeamOAM_Horizontal_Frame6[7] = { +static const u16 sChargedWaveBeamOam_Horizontal_Frame6[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xf1, OBJ_X_FLIP | OBJ_SIZE_32x16 | 0xc, 0x2086, OBJ_SHAPE_HORIZONTAL | 0xff, OBJ_X_FLIP | OBJ_SIZE_32x16 | 0xc, 0x2086 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame0[7] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x20c4, 0x4, 0x4, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame1[19] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame1[OAM_DATA_SIZE(6)] = { 0x6, 0xf6, OBJ_SIZE_16x16 | 0x1f9, 0x20c4, 0x1, 0x4, 0x20e7, @@ -1410,7 +1606,7 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame1[19] = { 0xc, 0xc, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame2[25] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame2[OAM_DATA_SIZE(8)] = { 0x8, 0xf3, OBJ_SIZE_16x16 | 0x1fc, 0x20c4, 0xfe, 0x7, 0x20e7, @@ -1422,7 +1618,7 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame2[25] = { 0x12, 0x12, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame3[13] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame3[OAM_DATA_SIZE(4)] = { 0x4, 0xf2, OBJ_SIZE_16x16 | 0x2, 0x20c4, 0xfd, 0xd, 0x20e7, @@ -1430,7 +1626,7 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame3[13] = { 0xd, 0x1fd, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame4[13] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0xf3, OBJ_SIZE_16x16 | 0x6, 0x20c4, 0xfe, 0x11, 0x20e7, @@ -1438,7 +1634,7 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame4[13] = { 0x11, 0x1fe, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame5[13] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0xfa, OBJ_SIZE_16x16 | 0xb, 0x20c4, 0x5, 0x16, 0x20e7, @@ -1446,7 +1642,7 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame5[13] = { 0x15, 0x6, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Diagonal_Frame6[13] = { +static const u16 sChargedWaveBeamOam_Diagonal_Frame6[OAM_DATA_SIZE(4)] = { 0x4, 0x2, OBJ_SIZE_16x16 | 0xc, 0x20c8, 0xd, 0x17, 0x20e7, @@ -1454,19 +1650,19 @@ const u16 sChargedWaveBeamOAM_Diagonal_Frame6[13] = { 0x16, 0xe, 0x20e7 }; -const u16 sChargedWaveBeamOAM_Vertical_Frame0[4] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf9, OBJ_SIZE_16x32 | 0x1f8, 0x208a }; -const u16 sChargedWaveBeamOAM_Vertical_Frame1[10] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_16x32 | 0x1fa, 0x208a, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_16x32 | 0x1f6, 0x208a, OBJ_SHAPE_VERTICAL | 0x4, OBJ_SIZE_16x32 | 0x1f8, 0x208c }; -const u16 sChargedWaveBeamOAM_Vertical_Frame2[13] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame2[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_16x32 | 0x1fe, 0x208a, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_16x32 | 0x1f2, 0x208a, @@ -1474,234 +1670,358 @@ const u16 sChargedWaveBeamOAM_Vertical_Frame2[13] = { OBJ_SHAPE_VERTICAL | 0x10, OBJ_SIZE_16x32 | 0x1f8, 0x208c }; -const u16 sChargedWaveBeamOAM_Vertical_Frame3[7] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame3[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xfb, OBJ_SIZE_16x32 | 0x3, 0x208a, OBJ_SHAPE_VERTICAL | 0xfb, OBJ_SIZE_16x32 | 0x1ed, 0x208a }; -const u16 sChargedWaveBeamOAM_Vertical_Frame4[7] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame4[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0x1, OBJ_SIZE_16x32 | 0x6, 0x208a, OBJ_SHAPE_VERTICAL | 0x1, OBJ_SIZE_16x32 | 0x1ea, 0x208a }; -const u16 sChargedWaveBeamOAM_Vertical_Frame5[7] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame5[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0x8, OBJ_SIZE_16x32 | 0x3, 0x208a, OBJ_SHAPE_VERTICAL | 0x8, OBJ_SIZE_16x32 | 0x1ed, 0x208a }; -const u16 sChargedWaveBeamOAM_Vertical_Frame6[7] = { +static const u16 sChargedWaveBeamOam_Vertical_Frame6[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xc, OBJ_SIZE_16x32 | 0x1ff, 0x208c, OBJ_SHAPE_VERTICAL | 0xc, OBJ_SIZE_16x32 | 0x1f1, 0x208c }; -const u16 sParticleChargedWaveBeamTrailOam_Frame0[4] = { +static const u16 sParticleChargedWaveBeamTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20c7 }; -const u16 sParticleChargedWaveBeamTrailOam_Frame1[7] = { +static const u16 sParticleChargedWaveBeamTrailOam_Frame1[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1f8, 0x208e, OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | 0x1f8, 0x208e }; -const u16 sParticleChargedWaveBeamTrailOam_Frame2[4] = { +static const u16 sParticleChargedWaveBeamTrailOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20ae }; -const u16 sParticleChargedWaveBeamTrailOam_Frame3[7] = { +static const u16 sParticleChargedWaveBeamTrailOam_Frame3[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_HORIZONTAL | 0xf8, 0x1f8, 0x20ee, OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | 0x1f8, 0x20ee }; -const struct FrameData sWaveBeamOAM_Horizontal[8] = { - sWaveBeamOAM_Horizontal_Frame0, - 0x3, - sWaveBeamOAM_Horizontal_Frame1, - 0x2, - sWaveBeamOAM_Horizontal_Frame2, - 0x2, - sWaveBeamOAM_Horizontal_Frame3, - 0x1, - sWaveBeamOAM_Horizontal_Frame4, - 0x1, - sWaveBeamOAM_Horizontal_Frame5, - 0x1, - sWaveBeamOAM_Horizontal_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Horizontal[8] = { + [0] = { + .pFrame = sWaveBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Horizontal_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Horizontal_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Horizontal_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Horizontal_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Horizontal_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sWaveBeamOAM_Diagonal[8] = { - sWaveBeamOAM_Diagonal_Frame0, - 0x3, - sWaveBeamOAM_Diagonal_Frame1, - 0x2, - sWaveBeamOAM_Diagonal_Frame2, - 0x2, - sWaveBeamOAM_Diagonal_Frame3, - 0x1, - sWaveBeamOAM_Diagonal_Frame4, - 0x1, - sWaveBeamOAM_Diagonal_Frame5, - 0x1, - sWaveBeamOAM_Diagonal_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Diagonal[8] = { + [0] = { + .pFrame = sWaveBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Diagonal_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Diagonal_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Diagonal_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Diagonal_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Diagonal_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sWaveBeamOAM_Vertical[8] = { - sWaveBeamOAM_Vertical_Frame0, - 0x3, - sWaveBeamOAM_Vertical_Frame1, - 0x2, - sWaveBeamOAM_Vertical_Frame2, - 0x2, - sWaveBeamOAM_Vertical_Frame3, - 0x1, - sWaveBeamOAM_Vertical_Frame4, - 0x1, - sWaveBeamOAM_Vertical_Frame5, - 0x1, - sWaveBeamOAM_Vertical_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Vertical[8] = { + [0] = { + .pFrame = sWaveBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Vertical_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Vertical_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Vertical_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Vertical_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Vertical_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sWaveBeamOAM_Horizontal_Unused[8] = { - sWaveBeamOAM_Horizontal_Unused_Frame0, - 0x3, - sWaveBeamOAM_Horizontal_Unused_Frame1, - 0x2, - sWaveBeamOAM_Horizontal_Unused_Frame2, - 0x2, - sWaveBeamOAM_Horizontal_Unused_Frame3, - 0x1, - sWaveBeamOAM_Horizontal_Unused_Frame4, - 0x1, - sWaveBeamOAM_Horizontal_Unused_Frame5, - 0x1, - sWaveBeamOAM_Horizontal_Unused_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Horizontal_Unused[8] = { + [0] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Horizontal_Unused_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sWaveBeamOAM_Diagonal_Unused[8] = { - sWaveBeamOAM_Diagonal_Unused_Frame0, - 0x3, - sWaveBeamOAM_Diagonal_Unused_Frame1, - 0x2, - sWaveBeamOAM_Diagonal_Unused_Frame2, - 0x2, - sWaveBeamOAM_Diagonal_Unused_Frame3, - 0x1, - sWaveBeamOAM_Diagonal_Unused_Frame4, - 0x1, - sWaveBeamOAM_Diagonal_Unused_Frame5, - 0x1, - sWaveBeamOAM_Diagonal_Unused_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Diagonal_Unused[8] = { + [0] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Diagonal_Unused_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sWaveBeamOAM_Vertical_Unused[8] = { - sWaveBeamOAM_Vertical_Unused_Frame0, - 0x3, - sWaveBeamOAM_Vertical_Unused_Frame1, - 0x2, - sWaveBeamOAM_Vertical_Unused_Frame2, - 0x2, - sWaveBeamOAM_Vertical_Unused_Frame3, - 0x1, - sWaveBeamOAM_Vertical_Unused_Frame4, - 0x1, - sWaveBeamOAM_Vertical_Unused_Frame5, - 0x1, - sWaveBeamOAM_Vertical_Unused_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sWaveBeamOam_Vertical_Unused[8] = { + [0] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sWaveBeamOam_Vertical_Unused_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedWaveBeamOAM_Horizontal[8] = { - sChargedWaveBeamOAM_Horizontal_Frame0, - 0x3, - sChargedWaveBeamOAM_Horizontal_Frame1, - 0x2, - sChargedWaveBeamOAM_Horizontal_Frame2, - 0x2, - sChargedWaveBeamOAM_Horizontal_Frame3, - 0x1, - sChargedWaveBeamOAM_Horizontal_Frame4, - 0x1, - sChargedWaveBeamOAM_Horizontal_Frame5, - 0x1, - sChargedWaveBeamOAM_Horizontal_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedWaveBeamOam_Horizontal[8] = { + [0] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sChargedWaveBeamOam_Horizontal_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedWaveBeamOAM_Diagonal[8] = { - sChargedWaveBeamOAM_Diagonal_Frame0, - 0x3, - sChargedWaveBeamOAM_Diagonal_Frame1, - 0x2, - sChargedWaveBeamOAM_Diagonal_Frame2, - 0x2, - sChargedWaveBeamOAM_Diagonal_Frame3, - 0x1, - sChargedWaveBeamOAM_Diagonal_Frame4, - 0x1, - sChargedWaveBeamOAM_Diagonal_Frame5, - 0x1, - sChargedWaveBeamOAM_Diagonal_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedWaveBeamOam_Diagonal[8] = { + [0] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sChargedWaveBeamOam_Diagonal_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedWaveBeamOAM_Vertical[8] = { - sChargedWaveBeamOAM_Vertical_Frame0, - 0x3, - sChargedWaveBeamOAM_Vertical_Frame1, - 0x2, - sChargedWaveBeamOAM_Vertical_Frame2, - 0x2, - sChargedWaveBeamOAM_Vertical_Frame3, - 0x1, - sChargedWaveBeamOAM_Vertical_Frame4, - 0x1, - sChargedWaveBeamOAM_Vertical_Frame5, - 0x1, - sChargedWaveBeamOAM_Vertical_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedWaveBeamOam_Vertical[8] = { + [0] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sChargedWaveBeamOam_Vertical_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedWaveBeamTrailOam[5] = { - sParticleChargedWaveBeamTrailOam_Frame0, - 0x4, - sParticleChargedWaveBeamTrailOam_Frame1, - 0x4, - sParticleChargedWaveBeamTrailOam_Frame2, - 0x4, - sParticleChargedWaveBeamTrailOam_Frame3, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedWaveBeamTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleChargedWaveBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleChargedWaveBeamTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleChargedWaveBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = FRAME_DATA_TERMINATOR }; const u8 sPlasmaBeamGfx_Top[512] = INCBIN_U8("data/weapons/PlasmaBeamTop.gfx"); @@ -1709,44 +2029,44 @@ const u8 sPlasmaBeamGfx_Bottom[512] = INCBIN_U8("data/weapons/PlasmaBeamBottom.g const u8 sPlasmaBeamGfx_Charged_Top[512] = INCBIN_U8("data/weapons/PlasmaBeamChargedTop.gfx"); const u8 sPlasmaBeamGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/PlasmaBeamChargedBottom.gfx"); -const u16 sPlasmaBeamOAM_Horizontal_NoWave_Frame0[4] = { +static const u16 sPlasmaBeamOam_Horizontal_NoWave_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f8, 0x20e0 }; -const u16 sPlasmaBeamOAM_Horizontal_NoWave_Frame1[4] = { +static const u16 sPlasmaBeamOam_Horizontal_NoWave_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f9, 0x20e4 }; -const u16 sPlasmaBeamOAM_Diagonal_NoWave_Frame0[4] = { +static const u16 sPlasmaBeamOam_Diagonal_NoWave_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x208e }; -const u16 sPlasmaBeamOAM_Diagonal_NoWave_Frame1[4] = { +static const u16 sPlasmaBeamOam_Diagonal_NoWave_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, OBJ_SIZE_16x16 | 0x1fc, 0x20ce }; -const u16 sPlasmaBeamOAM_Vertical_NoWave_Frame0[4] = { +static const u16 sPlasmaBeamOam_Vertical_NoWave_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1fc, 0x2083 }; -const u16 sPlasmaBeamOAM_Vertical_NoWave_Frame1[4] = { +static const u16 sPlasmaBeamOam_Vertical_NoWave_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xf9, OBJ_SIZE_8x32 | 0x1fc, 0x2087 }; -const u16 sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame0[10] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_NoWave_Frame0[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f8, 0x208a, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x0, 0x20ca, OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0x0, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame1[16] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_NoWave_Frame1[OAM_DATA_SIZE(5)] = { 0x5, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f6, 0x208a, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x2, 0x20ca, @@ -1755,7 +2075,7 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame1[16] = { OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0xc, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame0[13] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_NoWave_Frame0[OAM_DATA_SIZE(4)] = { 0x4, 0xfa, OBJ_SIZE_16x16 | 0x1fa, 0x2080, 0x2, OBJ_SIZE_16x16 | 0x2, 0x20a1, @@ -1763,7 +2083,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame0[13] = { 0x7, OBJ_SIZE_16x16 | 0x7, 0x20a5 }; -const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame1[19] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_NoWave_Frame1[OAM_DATA_SIZE(6)] = { 0x6, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x2080, 0x0, OBJ_SIZE_16x16 | 0x0, 0x20a1, @@ -1773,7 +2093,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame1[19] = { 0x10, OBJ_SIZE_16x16 | 0x10, 0x20a5 }; -const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame0[13] = { +static const u16 sChargedPlasmaBeamOam_Vertical_NoWave_Frame0[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x0, 0x2088, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2088, @@ -1781,7 +2101,7 @@ const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame0[13] = { OBJ_SHAPE_VERTICAL | 0x0, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame1[19] = { +static const u16 sChargedPlasmaBeamOam_Vertical_NoWave_Frame1[OAM_DATA_SIZE(6)] = { 0x6, OBJ_SHAPE_VERTICAL | 0xf6, OBJ_SIZE_8x32 | 0x0, 0x2088, OBJ_SHAPE_VERTICAL | 0xf6, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2088, @@ -1791,14 +2111,14 @@ const u16 sChargedPlasmaBeamOAM_Vertical_NoWave_Frame1[19] = { OBJ_SHAPE_VERTICAL | 0xc, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame1[10] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x6, 0x20e4 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame2[13] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame2[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf4, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0x4, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, @@ -1806,14 +2126,14 @@ const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame2[13] = { OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f8, 0x20e0 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame3[10] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame3[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xf0, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0x8, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f9, 0x20e4 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame4[16] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame4[OAM_DATA_SIZE(5)] = { 0x5, OBJ_SHAPE_HORIZONTAL | 0xf3, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0x5, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, @@ -1822,7 +2142,7 @@ const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame4[16] = { OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f8, 0x20e0 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame5[13] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame5[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, @@ -1830,21 +2150,21 @@ const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame5[13] = { OBJ_SHAPE_HORIZONTAL | 0x5, OBJ_SIZE_32x8 | 0x1f8, 0x20e4 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Frame6[10] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Frame6[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xfc, OBJ_SIZE_32x8 | 0x1f8, 0x20e0, OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x8 | 0x1f8, 0x20e4, OBJ_SHAPE_HORIZONTAL | 0x2, OBJ_SIZE_32x8 | 0x1f8, 0x20e4 }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame1[10] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf8, OBJ_SIZE_16x16 | 0x1fd, 0x208e, 0xfe, OBJ_SIZE_16x16 | 0x1f7, 0x208e, 0x5, OBJ_SIZE_16x16 | 0x5, 0x20ce }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame2[13] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame2[OAM_DATA_SIZE(4)] = { 0x4, 0xf5, OBJ_SIZE_16x16 | 0x1, 0x208e, 0x1, OBJ_SIZE_16x16 | 0x1f5, 0x208e, @@ -1852,14 +2172,14 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame2[13] = { 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x208e }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame3[10] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame3[OAM_DATA_SIZE(3)] = { 0x3, 0xf2, OBJ_SIZE_16x16 | 0x4, 0x208e, 0x4, OBJ_SIZE_16x16 | 0x1f2, 0x208e, 0xfc, OBJ_SIZE_16x16 | 0x1fc, 0x20ce }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame4[16] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame4[OAM_DATA_SIZE(5)] = { 0x5, 0x2, OBJ_SIZE_16x16 | 0x1f4, 0x208e, 0xf4, OBJ_SIZE_16x16 | 0x2, 0x208e, @@ -1868,7 +2188,7 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame4[16] = { 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x208e }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame5[13] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame5[OAM_DATA_SIZE(4)] = { 0x4, 0xfe, OBJ_SIZE_16x16 | 0x1f7, 0x208e, 0xf8, OBJ_SIZE_16x16 | 0x1fd, 0x208e, @@ -1876,21 +2196,21 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame5[13] = { 0xf3, OBJ_SIZE_16x16 | 0x3, 0x20ce }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Frame6[10] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Frame6[OAM_DATA_SIZE(3)] = { 0x3, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x208e, 0xff, OBJ_SIZE_16x16 | 0x1f7, 0x20ce, 0xf7, OBJ_SIZE_16x16 | 0x1ff, 0x20ce }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame1[10] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame1[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x0, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f8, 0x2083, OBJ_SHAPE_VERTICAL | 0x6, OBJ_SIZE_8x32 | 0x1fc, 0x2087 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame2[13] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame2[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x4, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f4, 0x2083, @@ -1898,14 +2218,14 @@ const u16 sPlasmaBeamOAM_Vertical_Wave_Frame2[13] = { OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1fc, 0x2083 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame3[10] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame3[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x8, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f0, 0x2083, OBJ_SHAPE_VERTICAL | 0xf9, OBJ_SIZE_8x32 | 0x1fc, 0x2087 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame4[16] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame4[OAM_DATA_SIZE(5)] = { 0x5, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x5, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f3, 0x2083, @@ -1914,7 +2234,7 @@ const u16 sPlasmaBeamOAM_Vertical_Wave_Frame4[16] = { OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1fc, 0x2083 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame5[13] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame5[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x0, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f8, 0x2083, @@ -1922,14 +2242,14 @@ const u16 sPlasmaBeamOAM_Vertical_Wave_Frame5[13] = { OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f3, 0x2087 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Frame6[10] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Frame6[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1fc, 0x2083, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x2, 0x2087, OBJ_SHAPE_VERTICAL | 0xf8, OBJ_SIZE_8x32 | 0x1f6, 0x2087 }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame3[19] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Unused_Frame3[OAM_DATA_SIZE(6)] = { 0x6, 0xf7, 0x3, 0x208e, 0x3, 0x1f7, 0x208e, @@ -1939,7 +2259,7 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame3[19] = { 0x1, 0x1, 0x208e }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame4[13] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Unused_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0xfb, 0x7, 0x208f, 0x7, 0x1fb, 0x208f, @@ -1947,14 +2267,14 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame4[13] = { 0xff, 0x1ff, 0x208e }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame1[10] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Unused_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfc, 0x1fe, 0x20c4, 0xfc, 0x1fa, 0x20c4, 0x0, 0x1fc, 0x2086 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame2[16] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Unused_Frame2[OAM_DATA_SIZE(5)] = { 0x5, 0xf8, 0x1ff, 0x20c4, 0xf8, 0x1f9, 0x20c4, @@ -1963,7 +2283,7 @@ const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame2[16] = { 0x1, 0x1fc, 0x20c4 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame3[16] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Unused_Frame3[OAM_DATA_SIZE(5)] = { 0x5, 0x1, 0x6, 0x20c4, 0x1, 0x1f2, 0x20c4, @@ -1972,19 +2292,19 @@ const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame3[16] = { 0x7, 0x1fc, 0x2086 }; -const u16 sPlasmaBeamOAM_Vertical_Wave_Unused_Frame4[10] = { +static const u16 sPlasmaBeamOam_Vertical_Wave_Unused_Frame4[OAM_DATA_SIZE(3)] = { 0x3, 0x5, 0x6, 0x2086, 0x5, 0x1f2, 0x2086, 0xb, 0x1fc, 0x2086 }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame0[4] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f9, 0x208a }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame1[13] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame1[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf6, OBJ_SIZE_32x16 | 0x1f7, 0x208a, OBJ_SHAPE_HORIZONTAL | 0xfb, OBJ_SIZE_32x16 | 0x1f7, 0x208a, @@ -1992,7 +2312,7 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame1[13] = { OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0x4, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame2[16] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame2[OAM_DATA_SIZE(5)] = { 0x5, OBJ_SHAPE_HORIZONTAL | 0xf2, OBJ_SIZE_32x16 | 0x1f7, 0x208a, OBJ_SHAPE_HORIZONTAL | 0xfe, OBJ_SIZE_32x16 | 0x1f7, 0x208a, @@ -2001,14 +2321,14 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame2[16] = { OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0x10, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame3[10] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame3[OAM_DATA_SIZE(3)] = { 0x3, OBJ_SHAPE_HORIZONTAL | 0xed, OBJ_SIZE_32x16 | 0x1fb, 0x208a, OBJ_SHAPE_HORIZONTAL | 0x3, OBJ_SIZE_32x16 | 0x1fb, 0x208a, OBJ_SHAPE_HORIZONTAL | 0xf8, OBJ_SIZE_32x16 | 0x1f0, 0x208a }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame4[13] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame4[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xea, OBJ_SIZE_32x16 | 0x1, 0x208a, OBJ_SHAPE_HORIZONTAL | 0x6, OBJ_SIZE_32x16 | 0x1, 0x208a, @@ -2016,7 +2336,7 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame4[13] = { OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0x0, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame5[13] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame5[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xed, OBJ_SIZE_32x16 | 0x8, 0x208a, OBJ_SHAPE_HORIZONTAL | 0x3, OBJ_SIZE_32x16 | 0x8, 0x208a, @@ -2024,7 +2344,7 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame5[13] = { OBJ_SHAPE_HORIZONTAL | 0x0, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0x10, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame6[13] = { +static const u16 sChargedPlasmaBeamOam_Horizontal_Wave_Frame6[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_HORIZONTAL | 0xf1, OBJ_SIZE_32x8 | 0xc, 0x20ca, OBJ_SHAPE_HORIZONTAL | 0xf9, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0xc, 0x20ca, @@ -2032,13 +2352,13 @@ const u16 sChargedPlasmaBeamOAM_Horizontal_Wave_Frame6[13] = { OBJ_SHAPE_HORIZONTAL | 0x7, OBJ_Y_FLIP | OBJ_SIZE_32x8 | 0xc, 0x20ca }; -const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame0[7] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_Wave_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x2080, 0x1, OBJ_SIZE_16x16 | 0x1, 0x20a1 }; -const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame1[19] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_Wave_Frame1[OAM_DATA_SIZE(6)] = { 0x6, 0xf6, OBJ_SIZE_16x16 | 0x1f9, 0x2080, 0xfe, OBJ_SIZE_16x16 | 0x1, 0x20a1, @@ -2048,7 +2368,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame1[19] = { 0x9, OBJ_SIZE_16x16 | 0x9, 0x20a5 }; -const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame2[25] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_Wave_Frame2[OAM_DATA_SIZE(8)] = { 0x8, 0xf3, OBJ_SIZE_16x16 | 0x1fc, 0x2080, 0xfb, OBJ_SIZE_16x16 | 0x4, 0x20a1, @@ -2060,7 +2380,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame2[25] = { 0xf, OBJ_SIZE_16x16 | 0xf, 0x20a5 }; -const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame3[19] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_Wave_Frame3[OAM_DATA_SIZE(6)] = { 0x6, 0xf2, OBJ_SIZE_16x16 | 0x2, 0x2080, 0xfa, OBJ_SIZE_16x16 | 0xa, 0x20a1, @@ -2070,7 +2390,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame3[19] = { 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20a1 }; -const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame4[19] = { +static const u16 sChargedPlasmaBeamOam_Diagonal_Wave_Frame4[OAM_DATA_SIZE(6)] = { 0x6, 0xf3, OBJ_SIZE_16x16 | 0x6, 0x2080, 0xfb, OBJ_SIZE_16x16 | 0xe, 0x20a1, @@ -2080,7 +2400,7 @@ const u16 sChargedPlasmaBeamOAM_Diagonal_Wave_Frame4[19] = { 0x4, OBJ_SIZE_16x16 | 0x4, 0x20a5 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame3[19] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Unused_Frame3[OAM_DATA_SIZE(6)] = { 0x6, 0xfa, OBJ_SIZE_16x16 | 0xa, 0x2080, 0x2, OBJ_SIZE_16x16 | 0x12, 0x20a1, @@ -2090,7 +2410,7 @@ const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame3[19] = { 0x10, OBJ_SIZE_16x16 | 0x10, 0x20a5 }; -const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame4[13] = { +static const u16 sPlasmaBeamOam_Horizontal_Wave_Unused_Frame4[OAM_DATA_SIZE(4)] = { 0x4, 0x2, OBJ_SIZE_16x16 | 0xc, 0x2084, 0xa, OBJ_SIZE_16x16 | 0x14, 0x20a5, @@ -2098,13 +2418,13 @@ const u16 sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame4[13] = { 0x14, OBJ_SIZE_16x16 | 0xa, 0x20a5 }; -const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame0[7] = { +static const u16 sChargedPlasmaBeamOam_Vertical_Wave_Frame0[OAM_DATA_SIZE(2)] = { 0x2, OBJ_SHAPE_VERTICAL | 0xf9, OBJ_SIZE_8x32 | 0x0, 0x2088, OBJ_SHAPE_VERTICAL | 0xf9, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2088 }; -const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame1[19] = { +static const u16 sChargedPlasmaBeamOam_Vertical_Wave_Frame1[OAM_DATA_SIZE(6)] = { 0x6, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_8x32 | 0x2, 0x2088, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1fa, 0x2088, @@ -2114,7 +2434,7 @@ const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame1[19] = { OBJ_SHAPE_VERTICAL | 0x4, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame2[25] = { +static const u16 sChargedPlasmaBeamOam_Vertical_Wave_Frame2[OAM_DATA_SIZE(8)] = { 0x8, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_SIZE_8x32 | 0x6, 0x2088, OBJ_SHAPE_VERTICAL | 0xf7, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1fe, 0x2088, @@ -2126,7 +2446,7 @@ const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame2[25] = { OBJ_SHAPE_VERTICAL | 0x10, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame3[19] = { +static const u16 sChargedPlasmaBeamOam_Vertical_Wave_Frame3[OAM_DATA_SIZE(6)] = { 0x6, OBJ_SHAPE_VERTICAL | 0xfd, OBJ_SIZE_8x32 | 0xb, 0x2088, OBJ_SHAPE_VERTICAL | 0xfd, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x3, 0x2088, @@ -2136,7 +2456,7 @@ const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame3[19] = { OBJ_SHAPE_VERTICAL | 0xf0, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2088 }; -const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame4[19] = { +static const u16 sChargedPlasmaBeamOam_Vertical_Wave_Frame4[OAM_DATA_SIZE(6)] = { 0x6, OBJ_SHAPE_VERTICAL | 0x1, OBJ_SIZE_8x32 | 0xe, 0x2088, OBJ_SHAPE_VERTICAL | 0x1, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x6, 0x2088, @@ -2146,7 +2466,7 @@ const u16 sChargedPlasmaBeamOAM_Vertical_Wave_Frame4[19] = { OBJ_SHAPE_VERTICAL | 0x0, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame1[19] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Unused_Frame1[OAM_DATA_SIZE(6)] = { 0x6, OBJ_SHAPE_VERTICAL | 0x8, OBJ_SIZE_8x32 | 0xb, 0x2088, OBJ_SHAPE_VERTICAL | 0x8, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x3, 0x2088, @@ -2156,7 +2476,7 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame1[19] = { OBJ_SHAPE_VERTICAL | 0x10, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f8, 0x2089 }; -const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame2[13] = { +static const u16 sPlasmaBeamOam_Diagonal_Wave_Unused_Frame2[OAM_DATA_SIZE(4)] = { 0x4, OBJ_SHAPE_VERTICAL | 0xc, OBJ_SIZE_8x32 | 0x1f9, 0x2089, OBJ_SHAPE_VERTICAL | 0xc, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1f1, 0x2089, @@ -2164,7 +2484,7 @@ const u16 sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame2[13] = { OBJ_SHAPE_VERTICAL | 0xc, OBJ_X_FLIP | OBJ_SIZE_8x32 | 0x1ff, 0x2089 }; -const u16 sParticleChargedPlasmaBeamTrailOam_Frame1[13] = { +static const u16 sParticleChargedPlasmaBeamTrailOam_Frame1[OAM_DATA_SIZE(4)] = { 0x4, 0xf8, 0x1f8, 0x20ea, 0xf8, OBJ_X_FLIP | 0x0, 0x20ea, @@ -2172,7 +2492,7 @@ const u16 sParticleChargedPlasmaBeamTrailOam_Frame1[13] = { 0x0, OBJ_X_FLIP | OBJ_Y_FLIP | 0x0, 0x20ea }; -const u16 sParticleChargedFullBeamTrailOam_Frame1[13] = { +static const u16 sParticleChargedFullBeamTrailOam_Frame1[OAM_DATA_SIZE(4)] = { 0x4, 0xf9, 0x1f9, 0x20ea, 0xf9, OBJ_X_FLIP | 0x1ff, 0x20ea, @@ -2180,7 +2500,7 @@ const u16 sParticleChargedFullBeamTrailOam_Frame1[13] = { 0xff, OBJ_X_FLIP | OBJ_Y_FLIP | 0x1ff, 0x20ea }; -const u16 sParticleChargedPlasmaBeamTrailOam_Frame2[13] = { +static const u16 sParticleChargedPlasmaBeamTrailOam_Frame2[OAM_DATA_SIZE(4)] = { 0x4, 0xf8, 0x1f8, 0x20eb, 0xf8, OBJ_X_FLIP | 0x0, 0x20eb, @@ -2188,7 +2508,7 @@ const u16 sParticleChargedPlasmaBeamTrailOam_Frame2[13] = { 0x0, OBJ_X_FLIP | OBJ_Y_FLIP | 0x0, 0x20eb }; -const u16 sParticleChargedFullBeamTrailOam_Frame3[13] = { +static const u16 sParticleChargedFullBeamTrailOam_Frame3[OAM_DATA_SIZE(4)] = { 0x4, 0xf9, 0x1f9, 0x20eb, 0xf9, OBJ_X_FLIP | 0x1ff, 0x20eb, @@ -2196,298 +2516,452 @@ const u16 sParticleChargedFullBeamTrailOam_Frame3[13] = { 0xff, OBJ_X_FLIP | OBJ_Y_FLIP | 0x1ff, 0x20eb }; -const u16 sParticleChargedPlasmaBeamTrailOam_Frame0[4] = { +static const u16 sParticleChargedPlasmaBeamTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20c0 }; -const u16 sParticleChargedFullBeamTrailOam_Frame5[4] = { +static const u16 sParticleChargedFullBeamTrailOam_Frame5[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x2082 }; -const u16 sParticleChargedFullBeamTrailOam_Frame6[4] = { +static const u16 sParticleChargedFullBeamTrailOam_Frame6[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20c4 }; -const u16 sParticleChargedPlasmaBeamTrailOam_Frame3[4] = { +static const u16 sParticleChargedPlasmaBeamTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x2086 }; -const struct FrameData sPlasmaBeamOAM_Horizontal_NoWave[3] = { - sPlasmaBeamOAM_Horizontal_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Horizontal_NoWave_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Horizontal_NoWave[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Horizontal_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Horizontal_NoWave_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Diagonal_NoWave[3] = { - sPlasmaBeamOAM_Diagonal_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Diagonal_NoWave_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Diagonal_NoWave[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Diagonal_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Diagonal_NoWave_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Vertical_NoWave[3] = { - sPlasmaBeamOAM_Vertical_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Vertical_NoWave_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Vertical_NoWave[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Vertical_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Vertical_NoWave_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Horizontal_NoWave_Unused[3] = { - sPlasmaBeamOAM_Horizontal_Wave_Frame5, - 0x3, - sPlasmaBeamOAM_Horizontal_Wave_Frame6, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Horizontal_NoWave_Unused[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Diagonal_NoWave_Unused[3] = { - sPlasmaBeamOAM_Diagonal_Wave_Frame5, - 0x3, - sPlasmaBeamOAM_Diagonal_Wave_Frame6, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Diagonal_NoWave_Unused[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Vertical_NoWave_Unused[3] = { - sPlasmaBeamOAM_Vertical_Wave_Frame5, - 0x3, - sPlasmaBeamOAM_Vertical_Wave_Frame6, - 0x3, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Vertical_NoWave_Unused[3] = { + [0] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame6, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Horizontal_NoWave[3] = { - sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame0, - 0x2, - sChargedPlasmaBeamOAM_Horizontal_NoWave_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Horizontal_NoWave[3] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_NoWave_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_NoWave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Diagonal_NoWave[3] = { - sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame0, - 0x2, - sChargedPlasmaBeamOAM_Diagonal_NoWave_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Diagonal_NoWave[3] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_NoWave_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_NoWave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Vertical_NoWave[3] = { - sChargedPlasmaBeamOAM_Vertical_NoWave_Frame0, - 0x2, - sChargedPlasmaBeamOAM_Vertical_NoWave_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Vertical_NoWave[3] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_NoWave_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_NoWave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Horizontal_Wave[8] = { - sPlasmaBeamOAM_Horizontal_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Horizontal_Wave_Frame1, - 0x2, - sPlasmaBeamOAM_Horizontal_Wave_Frame2, - 0x2, - sPlasmaBeamOAM_Horizontal_Wave_Frame3, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Frame4, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Frame5, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Horizontal_Wave[8] = { + [0] = { + .pFrame = sPlasmaBeamOam_Horizontal_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Diagonal_Wave[8] = { - sPlasmaBeamOAM_Diagonal_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Diagonal_Wave_Frame1, - 0x2, - sPlasmaBeamOAM_Diagonal_Wave_Frame2, - 0x2, - sPlasmaBeamOAM_Diagonal_Wave_Frame3, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Frame4, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Frame5, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Diagonal_Wave[8] = { + [0] = { + .pFrame = sPlasmaBeamOam_Diagonal_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Vertical_Wave[8] = { - sPlasmaBeamOAM_Vertical_NoWave_Frame0, - 0x3, - sPlasmaBeamOAM_Vertical_Wave_Frame1, - 0x2, - sPlasmaBeamOAM_Vertical_Wave_Frame2, - 0x2, - sPlasmaBeamOAM_Vertical_Wave_Frame3, - 0x1, - sPlasmaBeamOAM_Vertical_Wave_Frame4, - 0x1, - sPlasmaBeamOAM_Vertical_Wave_Frame5, - 0x1, - sPlasmaBeamOAM_Vertical_Wave_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Vertical_Wave[8] = { + [0] = { + .pFrame = sPlasmaBeamOam_Vertical_NoWave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Horizontal_Wave_Unused[6] = { - sPlasmaBeamOAM_Horizontal_Wave_Frame5, - 0x3, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame5, - 0x2, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame6, - 0x2, - sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame3, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame4, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Horizontal_Wave_Unused[6] = { + [0] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame5, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame6, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Diagonal_Wave_Unused[6] = { - sPlasmaBeamOAM_Diagonal_Wave_Frame5, - 0x3, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame1, - 0x2, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame2, - 0x2, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame3, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame4, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Diagonal_Wave_Unused[6] = { + [0] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPlasmaBeamOAM_Vertical_Wave_Unused[6] = { - sPlasmaBeamOAM_Vertical_Wave_Frame5, - 0x3, - sPlasmaBeamOAM_Vertical_Wave_Unused_Frame1, - 0x2, - sPlasmaBeamOAM_Vertical_Wave_Unused_Frame2, - 0x2, - sPlasmaBeamOAM_Vertical_Wave_Unused_Frame3, - 0x1, - sPlasmaBeamOAM_Vertical_Wave_Unused_Frame4, - 0x1, - NULL, - 0x0 +const struct FrameData sPlasmaBeamOam_Vertical_Wave_Unused[6] = { + [0] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Frame5, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sPlasmaBeamOam_Vertical_Wave_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Horizontal_Wave[8] = { - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame0, - 0x3, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame1, - 0x2, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame2, - 0x2, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame3, - 0x1, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame4, - 0x1, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame5, - 0x1, - sChargedPlasmaBeamOAM_Horizontal_Wave_Frame6, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Horizontal_Wave[8] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame5, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sChargedPlasmaBeamOam_Horizontal_Wave_Frame6, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Diagonal_Wave[8] = { - sChargedPlasmaBeamOAM_Diagonal_Wave_Frame0, - 0x3, - sChargedPlasmaBeamOAM_Diagonal_Wave_Frame1, - 0x2, - sChargedPlasmaBeamOAM_Diagonal_Wave_Frame2, - 0x2, - sChargedPlasmaBeamOAM_Diagonal_Wave_Frame3, - 0x1, - sChargedPlasmaBeamOAM_Diagonal_Wave_Frame4, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame3, - 0x1, - sPlasmaBeamOAM_Horizontal_Wave_Unused_Frame4, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Diagonal_Wave[8] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_Wave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedPlasmaBeamOam_Diagonal_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Unused_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sPlasmaBeamOam_Horizontal_Wave_Unused_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPlasmaBeamOAM_Vertical_Wave[8] = { - sChargedPlasmaBeamOAM_Vertical_Wave_Frame0, - 0x3, - sChargedPlasmaBeamOAM_Vertical_Wave_Frame1, - 0x2, - sChargedPlasmaBeamOAM_Vertical_Wave_Frame2, - 0x2, - sChargedPlasmaBeamOAM_Vertical_Wave_Frame3, - 0x1, - sChargedPlasmaBeamOAM_Vertical_Wave_Frame4, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame1, - 0x1, - sPlasmaBeamOAM_Diagonal_Wave_Unused_Frame2, - 0x1, - NULL, - 0x0 +const struct FrameData sChargedPlasmaBeamOam_Vertical_Wave[8] = { + [0] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_Wave_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_Wave_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_Wave_Frame2, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [3] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_Wave_Frame3, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [4] = { + .pFrame = sChargedPlasmaBeamOam_Vertical_Wave_Frame4, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [5] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame1, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [6] = { + .pFrame = sPlasmaBeamOam_Diagonal_Wave_Unused_Frame2, + .timer = CONVERT_SECONDS(1.f / 60) + }, + [7] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedPlasmaBeamTrailOam[5] = { - sParticleChargedPlasmaBeamTrailOam_Frame0, - 0x4, - sParticleChargedPlasmaBeamTrailOam_Frame1, - 0x4, - sParticleChargedPlasmaBeamTrailOam_Frame2, - 0x4, - sParticleChargedPlasmaBeamTrailOam_Frame3, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedFullBeamTrailOam[9] = { - sParticleChargedPlasmaBeamTrailOam_Frame1, - 0x3, - sParticleChargedFullBeamTrailOam_Frame1, - 0x3, - sParticleChargedPlasmaBeamTrailOam_Frame2, - 0x3, - sParticleChargedFullBeamTrailOam_Frame3, - 0x3, - sParticleChargedPlasmaBeamTrailOam_Frame0, - 0x4, - sParticleChargedFullBeamTrailOam_Frame5, - 0x4, - sParticleChargedFullBeamTrailOam_Frame6, - 0x4, - sParticleChargedPlasmaBeamTrailOam_Frame3, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sParticleChargedFullBeamTrailOam_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame2, + .timer = CONVERT_SECONDS(.05f) + }, + [3] = { + .pFrame = sParticleChargedFullBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(.05f) + }, + [4] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [5] = { + .pFrame = sParticleChargedFullBeamTrailOam_Frame5, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [6] = { + .pFrame = sParticleChargedFullBeamTrailOam_Frame6, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [7] = { + .pFrame = sParticleChargedPlasmaBeamTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [8] = FRAME_DATA_TERMINATOR }; const u8 sPistolGfx_Top[512] = INCBIN_U8("data/weapons/PistolTop.gfx"); @@ -2495,174 +2969,199 @@ const u8 sPistolGfx_Bottom[512] = INCBIN_U8("data/weapons/PistolBottom.gfx"); const u8 sPistolGfx_Charged_Top[512] = INCBIN_U8("data/weapons/PistolChargedTop.gfx"); const u8 sPistolGfx_Charged_Bottom[512] = INCBIN_U8("data/weapons/PistolChargedBottom.gfx"); -const u16 sPistolOAM_Horizontal_Frame0[4] = { +static const u16 sPistolOam_Horizontal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fa, 0x2080 }; -const u16 sPistolOAM_Horizontal_Frame1[4] = { +static const u16 sPistolOam_Horizontal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_HORIZONTAL | 0xfc, 0x1fa, 0x20a0 }; -const u16 sPistolOAM_Diagonal_Frame0[4] = { +static const u16 sPistolOam_Diagonal_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x2082 }; -const u16 sPistolOAM_Diagonal_Frame1[4] = { +static const u16 sPistolOam_Diagonal_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xf9, OBJ_SIZE_16x16 | 0x1f9, 0x2084 }; -const u16 sPitsolOAM_Vertical_Frame0[4] = { +static const u16 sPitsolOam_Vertical_Frame0[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfa, 0x1fc, 0x2086 }; -const u16 sPitsolOAM_Vertical_Frame1[4] = { +static const u16 sPitsolOam_Vertical_Frame1[OAM_DATA_SIZE(1)] = { 0x1, OBJ_SHAPE_VERTICAL | 0xfa, 0x1fc, 0x2087 }; -const u16 sChargedPistolOAM_Horizontal_Frame0[7] = { +static const u16 sChargedPistolOam_Horizontal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xf8, OBJ_SIZE_16x16 | 0x1fa, 0x20c0, 0xf8, OBJ_SIZE_16x16 | 0x1ff, 0x20c2 }; -const u16 sChargedPistolOAM_Horizontal_Frame1[10] = { +static const u16 sChargedPistolOam_Horizontal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20c2, 0xf8, OBJ_SIZE_16x16 | 0x1, 0x20c0, 0xf8, OBJ_SIZE_16x16 | 0x9, 0x20c2 }; -const u16 sChargedPistolOAM_Diagonal_Frame0[7] = { +static const u16 sChargedPistolOam_Diagonal_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfb, OBJ_SIZE_16x16 | 0x1fb, 0x20c4, 0xfe, OBJ_SIZE_16x16 | 0x1fe, 0x20c6 }; -const u16 sChargedPistolOAM_Diagonal_Frame1[10] = { +static const u16 sChargedPistolOam_Diagonal_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xfa, OBJ_SIZE_16x16 | 0x1fa, 0x20c6, 0xff, OBJ_SIZE_16x16 | 0x1ff, 0x20c4, 0x4, OBJ_SIZE_16x16 | 0x4, 0x20c6 }; -const u16 sChargedPistolOAM_Vertical_Frame0[7] = { +static const u16 sChargedPistolOam_Vertical_Frame0[OAM_DATA_SIZE(2)] = { 0x2, 0xfa, OBJ_SIZE_16x16 | 0x1f8, 0x20c8, 0xff, OBJ_SIZE_16x16 | 0x1f8, 0x20ca }; -const u16 sChargedPistolOAM_Vertical_Frame1[10] = { +static const u16 sChargedPistolOam_Vertical_Frame1[OAM_DATA_SIZE(3)] = { 0x3, 0xf8, OBJ_SIZE_16x16 | 0x1f8, 0x20ca, 0x1, OBJ_SIZE_16x16 | 0x1f8, 0x20c8, 0x9, OBJ_SIZE_16x16 | 0x1f8, 0x20ca }; -const u16 sParticleChargedPistolTrailOam_Frame0[4] = { +static const u16 sParticleChargedPistolTrailOam_Frame0[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ce }; -const u16 sParticleChargedPistolTrailOam_Frame1[4] = { +static const u16 sParticleChargedPistolTrailOam_Frame1[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20cf }; -const u16 sParticleChargedPistolTrailOam_Frame2[4] = { +static const u16 sParticleChargedPistolTrailOam_Frame2[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ee }; -const u16 sParticleChargedPistolTrailOam_Frame3[4] = { +static const u16 sParticleChargedPistolTrailOam_Frame3[OAM_DATA_SIZE(1)] = { 0x1, 0xfc, 0x1fc, 0x20ef }; -const struct FrameData sPistolOAM_Horizontal[3] = { - sPistolOAM_Horizontal_Frame0, - 0x3, - sPistolOAM_Horizontal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPistolOam_Horizontal[3] = { + [0] = { + .pFrame = sPistolOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPistolOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPistolOAM_Diagonal[3] = { - sPistolOAM_Diagonal_Frame0, - 0x3, - sPistolOAM_Diagonal_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPistolOam_Diagonal[3] = { + [0] = { + .pFrame = sPistolOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPistolOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sPistolOAM_Vertical[3] = { - sPitsolOAM_Vertical_Frame0, - 0x3, - sPitsolOAM_Vertical_Frame1, - 0x3, - NULL, - 0x0 +const struct FrameData sPistolOam_Vertical[3] = { + [0] = { + .pFrame = sPitsolOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(.05f) + }, + [1] = { + .pFrame = sPitsolOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(.05f) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPistolOAM_Horizontal[3] = { - sChargedPistolOAM_Horizontal_Frame0, - 0x2, - sChargedPistolOAM_Horizontal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPistolOam_Horizontal[3] = { + [0] = { + .pFrame = sChargedPistolOam_Horizontal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPistolOam_Horizontal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPistolOAM_Diagonal[3] = { - sChargedPistolOAM_Diagonal_Frame0, - 0x2, - sChargedPistolOAM_Diagonal_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPistolOam_Diagonal[3] = { + [0] = { + .pFrame = sChargedPistolOam_Diagonal_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPistolOam_Diagonal_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; -const struct FrameData sChargedPistolOAM_Vertical[3] = { - sChargedPistolOAM_Vertical_Frame0, - 0x2, - sChargedPistolOAM_Vertical_Frame1, - 0x2, - NULL, - 0x0 +const struct FrameData sChargedPistolOam_Vertical[3] = { + [0] = { + .pFrame = sChargedPistolOam_Vertical_Frame0, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [1] = { + .pFrame = sChargedPistolOam_Vertical_Frame1, + .timer = CONVERT_SECONDS(1.f / 30) + }, + [2] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleChargedPistolTrailOam[5] = { - sParticleChargedPistolTrailOam_Frame0, - 0x4, - sParticleChargedPistolTrailOam_Frame1, - 0x4, - sParticleChargedPistolTrailOam_Frame2, - 0x4, - sParticleChargedPistolTrailOam_Frame3, - 0x4, - NULL, - 0x0 + [0] = { + .pFrame = sParticleChargedPistolTrailOam_Frame0, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [1] = { + .pFrame = sParticleChargedPistolTrailOam_Frame1, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [2] = { + .pFrame = sParticleChargedPistolTrailOam_Frame2, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [3] = { + .pFrame = sParticleChargedPistolTrailOam_Frame3, + .timer = CONVERT_SECONDS(1.f / 15) + }, + [4] = FRAME_DATA_TERMINATOR }; const struct FrameData sParticleEscapeOam_Unused[2] = { - gParticleEscapeOamFrames, - UCHAR_MAX, - NULL, - 0x0 + [0] = { + .pFrame = gParticleEscapeOamFrames, + .timer = UCHAR_MAX + }, + [1] = FRAME_DATA_TERMINATOR }; -const struct FrameData sParticleSamusReflectionOAM_Unused[2] = { - gParticleSamusReflectionOamFrames, - UCHAR_MAX, - NULL, - 0x0 +const struct FrameData sParticleSamusReflectionOam_Unused[2] = { + [0] = { + .pFrame = gParticleSamusReflectionOamFrames, + .timer = UCHAR_MAX + }, + [1] = FRAME_DATA_TERMINATOR }; - -// 32ba08 diff --git a/src/particle.c b/src/particle.c index 6b5ac64b..58675615 100644 --- a/src/particle.c +++ b/src/particle.c @@ -120,7 +120,7 @@ void ParticleDraw(struct ParticleEffect* pParticle) else bgPriority = 0; - xFlipped = pParticle->status & PARTICLE_STATUS_XFLIP; + xFlipped = pParticle->status & PARTICLE_STATUS_X_FLIP; for (i = 0; i < partCount; i++) { @@ -603,7 +603,7 @@ void ParticleShootingBeamRight(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage++; - pParticle->status |= PARTICLE_STATUS_XFLIP | PARTICLE_STATUS_LOW_PRIORITY; + pParticle->status |= PARTICLE_STATUS_X_FLIP | PARTICLE_STATUS_LOW_PRIORITY; } } @@ -647,7 +647,7 @@ void ParticleShootingBeamDiagUpRight(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage++; - pParticle->status |= PARTICLE_STATUS_XFLIP | PARTICLE_STATUS_LOW_PRIORITY; + pParticle->status |= PARTICLE_STATUS_X_FLIP | PARTICLE_STATUS_LOW_PRIORITY; } } @@ -691,7 +691,7 @@ void ParticleShootingBeamDiagDownRight(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage++; - pParticle->status |= (PARTICLE_STATUS_XFLIP | PARTICLE_STATUS_LOW_PRIORITY); + pParticle->status |= (PARTICLE_STATUS_X_FLIP | PARTICLE_STATUS_LOW_PRIORITY); } } @@ -735,7 +735,7 @@ void ParticleShootingBeamUpRight(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage++; - pParticle->status |= (PARTICLE_STATUS_XFLIP | PARTICLE_STATUS_LOW_PRIORITY); + pParticle->status |= (PARTICLE_STATUS_X_FLIP | PARTICLE_STATUS_LOW_PRIORITY); } } @@ -779,7 +779,7 @@ void ParticleShootingBeamDownRight(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage++; - pParticle->status |= (PARTICLE_STATUS_XFLIP | PARTICLE_STATUS_LOW_PRIORITY); + pParticle->status |= (PARTICLE_STATUS_X_FLIP | PARTICLE_STATUS_LOW_PRIORITY); } } @@ -1890,7 +1890,7 @@ void ParticleSamusReflection(struct ParticleEffect* pParticle) if (pParticle->stage == 0) { pParticle->stage = 1; - pParticle->status |= PARTICLE_STATUS_LIVE_OFF_SCREEN | PARTICLE_STATUS_LOW_PRIORITY | PARTICLE_STATUS_XFLIP; // Init status + pParticle->status |= PARTICLE_STATUS_LIVE_OFF_SCREEN | PARTICLE_STATUS_LOW_PRIORITY | PARTICLE_STATUS_X_FLIP; // Init status } // Copy the main samus body oam diff --git a/src/power_bomb_explosion.c b/src/power_bomb_explosion.c index 88108869..cd983150 100644 --- a/src/power_bomb_explosion.c +++ b/src/power_bomb_explosion.c @@ -3,6 +3,7 @@ #include "data/engine_pointers.h" +#include "constants/audio.h" #include "constants/clipdata.h" #include "constants/haze.h" #include "constants/game_state.h" @@ -257,7 +258,7 @@ void PowerBombExplosionBegin(void) ScreenShakeStartHorizontal(120, 0x80); - SoundPlay(0x101); // Power bomb explosion + SoundPlay(SOUND_POWER_BOMB_EXPLOSION); } /** diff --git a/src/projectile.c b/src/projectile.c index 6b66d702..0e908fe1 100644 --- a/src/projectile.c +++ b/src/projectile.c @@ -5,6 +5,7 @@ #include "data/sprite_data.h" #include "data/engine_pointers.h" +#include "constants/audio.h" #include "constants/clipdata.h" #include "constants/game_state.h" #include "constants/samus.h" @@ -23,242 +24,239 @@ /** * 50b64 | f8 | Subroutine for a normal beam projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessNormalBeam(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); return; } - else - { - ProjectileMove(pProj, 0x14); - } + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + PIXEL_SIZE); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); return; } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sNormalBeamOAM_Diagonal; + pProj->pOam = sNormalBeamOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sNormalBeamOAM_Vertical; + pProj->pOam = sNormalBeamOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sNormalBeamOAM_Horizontal; + pProj->pOam = sNormalBeamOam_Horizontal; } - pProj->drawDistanceOffset = 0x40; + pProj->drawDistanceOffset = BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0x8; - pProj->hitboxBottom = 0x8; - pProj->hitboxLeft = -0x8; - pProj->hitboxRight = 0x8; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -EIGHTH_BLOCK_SIZE; + pProj->hitboxBottom = EIGHTH_BLOCK_SIZE; + pProj->hitboxLeft = -EIGHTH_BLOCK_SIZE; + pProj->hitboxRight = EIGHTH_BLOCK_SIZE; + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); } - pProj->timer++; - if (pProj->timer > 0xC) // Check if projectile should be killed when going further enough - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * 50c5c | ec | Subroutine for a long beam projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessLongBeam(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - */ - if (pProj->movementStage == 0x2) - { - gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision - { - pProj->status = 0x0; - ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); - } - else - { - ProjectileMove(pProj, 0x18); - pProj->timer++; - } - } - else if (pProj->movementStage == 0x1) - { - gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision - { - pProj->status = 0x0; - ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); - } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - pProj->timer++; - } - } - else - { - switch (pProj->direction) // Set OAM/Flip depending on direction - { + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) + { + gCurrentClipdataAffectingAction = CAA_BEAM; + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) + { + pProj->status = 0; + ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); + return; + } + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + } + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) + { + gCurrentClipdataAffectingAction = CAA_BEAM; + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) + { + pProj->status = 0; + ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); + return; + } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); + } + else + { + // Set animation and flip depending on direction + switch (pProj->direction) + { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sLongBeamOAM_Diagonal; + pProj->pOam = sLongBeamOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sLongBeamOAM_Vertical; + pProj->pOam = sLongBeamOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sLongBeamOAM_Horizontal; - } + pProj->pOam = sLongBeamOam_Horizontal; + } - pProj->drawDistanceOffset = 0x40; - pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0xC; - pProj->hitboxBottom = 0xC; - pProj->hitboxLeft = -0xC; - pProj->hitboxRight = 0xC; - pProj->movementStage = 0x1; - ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_LONG_BEAM); - pProj->timer++; - } + pProj->drawDistanceOffset = BLOCK_SIZE; + pProj->status &= ~PROJ_STATUS_NOT_DRAWN; + + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; + ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_LONG_BEAM); + } + + APPLY_DELTA_TIME_INC(pProj->timer); + /* + if (pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; + */ } /** * 50d48 | 124 | Subroutine for a ice beam projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessIceBeam(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_ICE_BEAM); return; } + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE + PIXEL_SIZE / 2); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - { - ProjectileMove(pProj, 0x1A); - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); - else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); - } + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BEAM; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_ICE_BEAM); return; } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sIceBeamOAM_Diagonal; + pProj->pOam = sIceBeamOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sIceBeamOAM_Vertical; + pProj->pOam = sIceBeamOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sIceBeamOAM_Horizontal; + pProj->pOam = sIceBeamOam_Horizontal; } - pProj->drawDistanceOffset = 0x40; + pProj->drawDistanceOffset = BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0x14; - pProj->hitboxBottom = 0x14; - pProj->hitboxLeft = -0x14; - pProj->hitboxRight = 0x14; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE + PIXEL_SIZE); + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_ICE_BEAM); } - pProj->timer++; - if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * @brief Handles the collision of the wave beam (bigger hitbox because of the wavy pattern) * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer * @return u32 Numbers of block getting touched */ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) @@ -267,8 +265,10 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) u16 xPosition; u8 nbrBlocks; u8 caa; + const u32 hitboxOffset = BLOCK_SIZE; + const u32 hitboxDiagOffset = FRACT_MUL(hitboxOffset, 7, 10) + ONE_SUB_PIXEL; - nbrBlocks = 0x0; + nbrBlocks = 0; caa = CAA_BEAM; yPosition = pProj->yPosition; xPosition = pProj->xPosition; @@ -276,18 +276,18 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) { gCurrentClipdataAffectingAction = caa; if (ProjectileCheckHittingSolidBlock(yPosition, xPosition)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition - 0x2D, xPosition + 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition - hitboxDiagOffset, xPosition + hitboxDiagOffset)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition + 0x2D, xPosition - 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition + hitboxDiagOffset, xPosition - hitboxDiagOffset)) nbrBlocks++; } else @@ -297,28 +297,28 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition - 0x2D, xPosition - 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition - hitboxDiagOffset, xPosition - hitboxDiagOffset)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition + 0x2D, xPosition + 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition + hitboxDiagOffset, xPosition + hitboxDiagOffset)) nbrBlocks++; } break; case ACD_DIAGONALLY_UP: - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) { gCurrentClipdataAffectingAction = caa; if (ProjectileCheckHittingSolidBlock(yPosition, xPosition)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition - 0x2D, xPosition - 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition - hitboxDiagOffset, xPosition - hitboxDiagOffset)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition + 0x2D, xPosition + 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition + hitboxDiagOffset, xPosition + hitboxDiagOffset)) nbrBlocks++; } else @@ -328,11 +328,11 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition - 0x2D, xPosition + 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition - hitboxDiagOffset, xPosition + hitboxDiagOffset)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition + 0x2D, xPosition - 0x2D)) + if (ProjectileCheckHittingSolidBlock(yPosition + hitboxDiagOffset, xPosition - hitboxDiagOffset)) nbrBlocks++; } break; @@ -344,11 +344,11 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition, xPosition + 0x40)) + if (ProjectileCheckHittingSolidBlock(yPosition, xPosition + hitboxOffset)) nbrBlocks++; gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition, xPosition - 0x40)) + if (ProjectileCheckHittingSolidBlock(yPosition, xPosition - hitboxOffset)) nbrBlocks++; break; @@ -357,11 +357,13 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) gCurrentClipdataAffectingAction = caa; if (ProjectileCheckHittingSolidBlock(yPosition, xPosition)) nbrBlocks++; + gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition + 0x40, xPosition)) + if (ProjectileCheckHittingSolidBlock(yPosition + hitboxOffset, xPosition)) nbrBlocks++; + gCurrentClipdataAffectingAction = caa; - if (ProjectileCheckHittingSolidBlock(yPosition - 0x40, xPosition)) + if (ProjectileCheckHittingSolidBlock(yPosition - hitboxOffset, xPosition)) nbrBlocks++; break; } @@ -372,75 +374,81 @@ u32 ProjectileCheckWaveBeamHittingBlocks(struct ProjectileData* pProj) /** * 51068 | 130 | Subroutine for a wave beam projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessWaveBeam(struct ProjectileData* pProj) { - ProjectileCheckWaveBeamHittingBlocks(pProj); // Check collision - if (pProj->movementStage == 0x2) + // Check collision + ProjectileCheckWaveBeamHittingBlocks(pProj); + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { - ProjectileMove(pProj, 0x1C); + ProjectileMove(pProj, HALF_BLOCK_SIZE - PIXEL_SIZE); if (gEquipment.beamBombsActivation & BBF_ICE_BEAM) { - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); } } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { - switch (pProj->direction) // Set OAM/Flip/Hitbox depending on direction + // Set animation, hitbox and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sWaveBeamOAM_Diagonal; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x40; - pProj->hitboxLeft = -0x28; - pProj->hitboxRight = 0x28; + pProj->pOam = sWaveBeamOam_Diagonal; + pProj->hitboxTop = -FRACT_MUL(WAVE_BEAM_HITBOX_LEFT, 8, 10); + pProj->hitboxBottom = FRACT_MUL(WAVE_BEAM_HITBOX_RIGHT, 32, 10); + pProj->hitboxLeft = -FRACT_MUL(WAVE_BEAM_HITBOX_TOP, 5, 8); + pProj->hitboxRight = FRACT_MUL(WAVE_BEAM_HITBOX_BOTTOM, 5, 8); break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sWaveBeamOAM_Vertical; - pProj->hitboxTop = -0x14; - pProj->hitboxBottom = 0x14; - pProj->hitboxLeft = -0x40; - pProj->hitboxRight = 0x40; + pProj->pOam = sWaveBeamOam_Vertical; + pProj->hitboxTop = -WAVE_BEAM_HITBOX_RIGHT; + pProj->hitboxBottom = WAVE_BEAM_HITBOX_LEFT; + pProj->hitboxLeft = -WAVE_BEAM_HITBOX_TOP; + pProj->hitboxRight = WAVE_BEAM_HITBOX_BOTTOM; break; + default: case ACD_FORWARD: - pProj->pOam = sWaveBeamOAM_Horizontal; - pProj->hitboxTop = -0x40; - pProj->hitboxBottom = 0x40; - pProj->hitboxLeft = -0x14; - pProj->hitboxRight = 0x14; + pProj->pOam = sWaveBeamOam_Horizontal; + pProj->hitboxTop = -WAVE_BEAM_HITBOX_TOP; + pProj->hitboxBottom = WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -WAVE_BEAM_HITBOX_LEFT; + pProj->hitboxRight = WAVE_BEAM_HITBOX_RIGHT; } - pProj->drawDistanceOffset = 0xA0; + pProj->drawDistanceOffset = BLOCK_SIZE * 2 + HALF_BLOCK_SIZE; + pProj->status &= ~PROJ_STATUS_NOT_DRAWN; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->movementStage = 0x1; + + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; } - pProj->timer++; - if ((gEquipment.beamBombsActivation & BBF_LONG_BEAM) == 0x0 && pProj->timer > 0xC) // Check despawn - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * 51198 | 1bc | Subroutine for a plasma beam projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessPlasmaBeam(struct ProjectileData* pProj) { @@ -452,176 +460,183 @@ void ProjectileProcessPlasmaBeam(struct ProjectileData* pProj) gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_PLASMA_BEAM); return; } } else - ProjectileCheckWaveBeamHittingBlocks(pProj); - - if (pProj->movementStage == 0x2) { - ProjectileMove(pProj, 0x20); + ProjectileCheckWaveBeamHittingBlocks(pProj); + } + + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) + { + ProjectileMove(pProj, HALF_BLOCK_SIZE); if (gEquipment.beamBombsActivation & BBF_ICE_BEAM) { - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); } } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation, hitbox and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: if (hasWave) { - pProj->pOam = sPlasmaBeamOAM_Diagonal_Wave; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x40; - pProj->hitboxLeft = -0x30; - pProj->hitboxRight = 0x30; + pProj->pOam = sPlasmaBeamOam_Diagonal_Wave; + pProj->hitboxTop = -FRACT_MUL(WAVE_BEAM_HITBOX_LEFT, 8, 10); + pProj->hitboxBottom = FRACT_MUL(WAVE_BEAM_HITBOX_RIGHT, 32, 10); + pProj->hitboxLeft = -FRACT_MUL(WAVE_BEAM_HITBOX_TOP, 3, 4); + pProj->hitboxRight = FRACT_MUL(WAVE_BEAM_HITBOX_BOTTOM, 3, 4); } else - pProj->pOam = sPlasmaBeamOAM_Diagonal_NoWave; + { + pProj->pOam = sPlasmaBeamOam_Diagonal_NoWave; + } break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: if (hasWave) { - pProj->pOam = sPlasmaBeamOAM_Vertical_Wave; - pProj->hitboxTop = -0x20; - pProj->hitboxBottom = 0x20; - pProj->hitboxLeft = -0x40; - pProj->hitboxRight = 0x40; + pProj->pOam = sPlasmaBeamOam_Vertical_Wave; + pProj->hitboxTop = -FRACT_MUL(WAVE_BEAM_HITBOX_LEFT, 16, 10); + pProj->hitboxBottom = FRACT_MUL(WAVE_BEAM_HITBOX_RIGHT, 16, 10); + pProj->hitboxLeft = -WAVE_BEAM_HITBOX_TOP; + pProj->hitboxRight = WAVE_BEAM_HITBOX_BOTTOM; } else - pProj->pOam = sPlasmaBeamOAM_Vertical_NoWave; + { + pProj->pOam = sPlasmaBeamOam_Vertical_NoWave; + } break; case ACD_FORWARD: default: if (hasWave) { - pProj->pOam = sPlasmaBeamOAM_Horizontal_Wave; - pProj->hitboxTop = -0x40; - pProj->hitboxBottom = 0x40; - pProj->hitboxLeft = -0x20; - pProj->hitboxRight = 0x20; + pProj->pOam = sPlasmaBeamOam_Horizontal_Wave; + pProj->hitboxTop = -WAVE_BEAM_HITBOX_TOP; + pProj->hitboxBottom = WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -FRACT_MUL(WAVE_BEAM_HITBOX_LEFT, 16, 10); + pProj->hitboxRight = FRACT_MUL(WAVE_BEAM_HITBOX_RIGHT, 16, 10); } else - pProj->pOam = sPlasmaBeamOAM_Horizontal_NoWave; + { + pProj->pOam = sPlasmaBeamOam_Horizontal_NoWave; + } } if (hasWave) { - pProj->drawDistanceOffset = 0xA0; + pProj->drawDistanceOffset = BLOCK_SIZE * 2 + HALF_BLOCK_SIZE; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; } else { - pProj->drawDistanceOffset = 0x50; - pProj->hitboxTop = -0x14; - pProj->hitboxBottom = 0x14; - pProj->hitboxLeft = -0x14; - pProj->hitboxRight = 0x14; + pProj->drawDistanceOffset = BLOCK_SIZE + QUARTER_BLOCK_SIZE; + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE + PIXEL_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE + PIXEL_SIZE); } pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; } - pProj->timer++; - if ((gEquipment.beamBombsActivation & BBF_LONG_BEAM) == 0x0 && pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * 51354 | ec | Subroutine for a pistol projectile * -* @param pProj Projectile Data Pointer +* @param pProj Projectile data pointer */ void ProjectileProcessPistol(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); + return; } - else - { - ProjectileMove(pProj, 0x16); - pProj->timer++; - } + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + PIXEL_SIZE + PIXEL_SIZE / 2); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); + return; } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - pProj->timer++; - } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sPistolOAM_Diagonal; + pProj->pOam = sPistolOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sPistolOAM_Vertical; + pProj->pOam = sPistolOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sPistolOAM_Horizontal; + pProj->pOam = sPistolOam_Horizontal; } - pProj->drawDistanceOffset = 0x40; + pProj->drawDistanceOffset = BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0x4; - pProj->hitboxBottom = 0x4; - pProj->hitboxLeft = -0x4; - pProj->hitboxRight = 0x4; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -PIXEL_SIZE; + pProj->hitboxBottom = PIXEL_SIZE; + pProj->hitboxLeft = -PIXEL_SIZE; + pProj->hitboxRight = PIXEL_SIZE; + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BOMB_PISTOL, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); - pProj->timer++; } + + APPLY_DELTA_TIME_INC(pProj->timer); } /** @@ -631,301 +646,306 @@ void ProjectileProcessPistol(struct ProjectileData* pProj) */ void ProjectileProcessChargedNormalBeam(struct ProjectileData* pProj) { - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); return; } - else - ProjectileMove(pProj, 0x14); + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + PIXEL_SIZE); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); return; } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sChargedNormalBeamOAM_Diagonal; + pProj->pOam = sChargedNormalBeamOam_Diagonal; break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sChargedNormalBeamOAM_Vertical; + pProj->pOam = sChargedNormalBeamOam_Vertical; break; case ACD_FORWARD: default: - pProj->pOam = sChargedNormalBeamOAM_Horizontal; + pProj->pOam = sChargedNormalBeamOam_Horizontal; } - pProj->drawDistanceOffset = 0x60; + pProj->drawDistanceOffset = BLOCK_SIZE + HALF_BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; - pProj->hitboxTop = -0xC; - pProj->hitboxBottom = 0xC; - pProj->hitboxLeft = -0xC; - pProj->hitboxRight= 0xC; + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxRight= (QUARTER_BLOCK_SIZE - PIXEL_SIZE); - pProj->movementStage = 0x1; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_NORMAL_BEAM); } - pProj->timer++; - if (pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * @brief 51538 | f8 | Subroutine for a charged long beam * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessChargedLongBeam(struct ProjectileData* pProj) { - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); return; } - ProjectileMove(pProj, 0x18); - ProjectileSetTrail(pProj, PE_CHARGED_LONG_BEAM_TRAIL, 0x7); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + ProjectileSetTrail(pProj, PE_CHARGED_LONG_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); return; } pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sChargedLongBeamOAM_Diagonal; + pProj->pOam = sChargedLongBeamOam_Diagonal; break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sChargedLongBeamOAM_Vertical; + pProj->pOam = sChargedLongBeamOam_Vertical; break; case ACD_FORWARD: default: - pProj->pOam = sChargedLongBeamOAM_Horizontal; + pProj->pOam = sChargedLongBeamOam_Horizontal; } - pProj->drawDistanceOffset = 0x80; + pProj->drawDistanceOffset = BLOCK_SIZE * 2; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x10; - pProj->hitboxLeft = -0x10; - pProj->hitboxRight = 0x10; + pProj->hitboxTop = -QUARTER_BLOCK_SIZE; + pProj->hitboxBottom = QUARTER_BLOCK_SIZE; + pProj->hitboxLeft = -QUARTER_BLOCK_SIZE; + pProj->hitboxRight = QUARTER_BLOCK_SIZE; - pProj->movementStage = 0x1; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_LONG_BEAM); } - pProj->timer++; + APPLY_DELTA_TIME_INC(pProj->timer); } /** * @brief 51630 | 134 | Subroutine for a charged ice beam * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessChargedIceBeam(struct ProjectileData* pProj) { - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_ICE_BEAM); return; } - ProjectileMove(pProj, 0x1A); - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE + PIXEL_SIZE / 2); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); - ProjectileSetTrail(pProj, PE_CHARGED_ICE_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); + + ProjectileSetTrail(pProj, PE_CHARGED_ICE_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_ICE_BEAM); return; } pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sChargedIceBeamOAM_Diagonal; + pProj->pOam = sChargedIceBeamOam_Diagonal; break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sChargedIceBeamOAM_Vertical; + pProj->pOam = sChargedIceBeamOam_Vertical; break; case ACD_FORWARD: default: - pProj->pOam = sChargedIceBeamOAM_Horizontal; + pProj->pOam = sChargedIceBeamOam_Horizontal; } - pProj->drawDistanceOffset = 0x80; + pProj->drawDistanceOffset = BLOCK_SIZE * 2; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; - pProj->hitboxTop = -0x18; - pProj->hitboxBottom = 0x18; - pProj->hitboxLeft = -0x18; - pProj->hitboxRight = 0x18; + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); - pProj->movementStage = 0x1; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BEAM, PE_HITTING_SOMETHING_WITH_ICE_BEAM); } - pProj->timer++; - if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * @brief 51764 | 13c | Subroutine for a charged wave beam * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessChargedWaveBeam(struct ProjectileData* pProj) { ProjectileCheckWaveBeamHittingBlocks(pProj); - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { - ProjectileMove(pProj, 0x1C); + ProjectileMove(pProj, HALF_BLOCK_SIZE - PIXEL_SIZE); if (gEquipment.beamBombsActivation & BBF_ICE_BEAM) { - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); } - ProjectileSetTrail(pProj, PE_CHARGED_WAVE_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_CHARGED_WAVE_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation, hitbox and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sChargedWaveBeamOAM_Diagonal; + pProj->pOam = sChargedWaveBeamOam_Diagonal; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x48; - pProj->hitboxLeft = -0x30; - pProj->hitboxRight = 0x30; + pProj->hitboxTop = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_TOP, 10, 45); + pProj->hitboxBottom = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 24, 10); + pProj->hitboxRight = FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_RIGHT, 24, 10); break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sChargedWaveBeamOAM_Vertical; + pProj->pOam = sChargedWaveBeamOam_Vertical; - pProj->hitboxTop = -0x14; - pProj->hitboxBottom = 0x14; - pProj->hitboxLeft = -0x48; - pProj->hitboxRight = 0x48; + pProj->hitboxTop = -CHARGED_WAVE_BEAM_HITBOX_RIGHT; + pProj->hitboxBottom = CHARGED_WAVE_BEAM_HITBOX_LEFT; + pProj->hitboxLeft = -CHARGED_WAVE_BEAM_HITBOX_TOP; + pProj->hitboxRight = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; break; case ACD_FORWARD: default: - pProj->pOam = sChargedWaveBeamOAM_Horizontal; + pProj->pOam = sChargedWaveBeamOam_Horizontal; - pProj->hitboxTop = -0x48; - pProj->hitboxBottom = 0x48; - pProj->hitboxLeft = -0x14; - pProj->hitboxRight = 0x14; + pProj->hitboxTop = -CHARGED_WAVE_BEAM_HITBOX_TOP; + pProj->hitboxBottom = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -CHARGED_WAVE_BEAM_HITBOX_LEFT; + pProj->hitboxRight = CHARGED_WAVE_BEAM_HITBOX_RIGHT; } - pProj->drawDistanceOffset = 0xC0; + pProj->drawDistanceOffset = BLOCK_SIZE * 3; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->movementStage = 0x1; + + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; } - pProj->timer++; - if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * @brief 518a0 | 1dc | Subroutine for a charged plasma beam * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessChargedPlasmaBeam(struct ProjectileData* pProj) { @@ -938,7 +958,7 @@ void ProjectileProcessChargedPlasmaBeam(struct ProjectileData* pProj) gCurrentClipdataAffectingAction = CAA_BEAM; if (ProjectileCheckVerticalCollisionAtPosition(pProj)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_PLASMA_BEAM); return; } @@ -946,271 +966,282 @@ void ProjectileProcessChargedPlasmaBeam(struct ProjectileData* pProj) else ProjectileCheckWaveBeamHittingBlocks(pProj); - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { - ProjectileMove(pProj, 0x20); + ProjectileMove(pProj, HALF_BLOCK_SIZE); if (gEquipment.beamBombsActivation & BBF_ICE_BEAM) { - if (pProj->status & PROJ_STATUS_XFLIP) - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, 0x3); + if (pProj->status & PROJ_STATUS_X_FLIP) + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_LEFT, CONVERT_SECONDS(.05f)); else - ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, 0x3); + ProjectileSetTrail(pProj, PE_BEAM_TRAILING_RIGHT, CONVERT_SECONDS(.05f)); if (hasWave) - ProjectileSetTrail(pProj, PE_CHARGED_FULL_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_CHARGED_FULL_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); else - ProjectileSetTrail(pProj, PE_CHARGED_PLASMA_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_CHARGED_PLASMA_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } else { if (hasWave) - ProjectileSetTrail(pProj, PE_CHARGED_FULL_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_CHARGED_FULL_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); else - ProjectileSetTrail(pProj, PE_CHARGED_PLASMA_BEAM_TRAIL, 0x7); + ProjectileSetTrail(pProj, PE_CHARGED_PLASMA_BEAM_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { pProj->movementStage++; - ProjectileMove(pProj, 0x10); + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { + // Set animation, hitbox and flip depending on direction switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: if (hasWave) { - pProj->pOam = sChargedPlasmaBeamOAM_Diagonal_Wave; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x48; - pProj->hitboxLeft = -0x38; - pProj->hitboxRight = 0x38; + pProj->pOam = sChargedPlasmaBeamOam_Diagonal_Wave; + + pProj->hitboxTop = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_TOP, 10, 45); + pProj->hitboxBottom = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 28, 10); + pProj->hitboxRight = FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_RIGHT, 28, 10); } else - pProj->pOam = sChargedPlasmaBeamOAM_Diagonal_NoWave; + { + pProj->pOam = sChargedPlasmaBeamOam_Diagonal_NoWave; + } break; case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: if (hasWave) { - pProj->pOam = sChargedPlasmaBeamOAM_Vertical_Wave; - pProj->hitboxTop = -0x24; - pProj->hitboxBottom = 0x24; - pProj->hitboxLeft = -0x48; - pProj->hitboxRight = 0x48; + pProj->pOam = sChargedPlasmaBeamOam_Vertical_Wave; + + pProj->hitboxTop = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 18, 10); + pProj->hitboxBottom = FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 18, 10); + pProj->hitboxLeft = -CHARGED_WAVE_BEAM_HITBOX_TOP; + pProj->hitboxRight = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; } else - pProj->pOam = sChargedPlasmaBeamOAM_Vertical_NoWave; + { + pProj->pOam = sChargedPlasmaBeamOam_Vertical_NoWave; + } break; case ACD_FORWARD: default: if (hasWave) { - pProj->pOam = sChargedPlasmaBeamOAM_Horizontal_Wave; - pProj->hitboxTop = -0x48; - pProj->hitboxBottom = 0x48; - pProj->hitboxLeft = -0x24; - pProj->hitboxRight = 0x24; + pProj->pOam = sChargedPlasmaBeamOam_Horizontal_Wave; + + pProj->hitboxTop = -CHARGED_WAVE_BEAM_HITBOX_TOP; + pProj->hitboxBottom = CHARGED_WAVE_BEAM_HITBOX_BOTTOM; + pProj->hitboxLeft = -FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 18, 10); + pProj->hitboxRight = FRACT_MUL(CHARGED_WAVE_BEAM_HITBOX_LEFT, 18, 10); } else - pProj->pOam = sChargedPlasmaBeamOAM_Horizontal_NoWave; + { + pProj->pOam = sChargedPlasmaBeamOam_Horizontal_NoWave; + } } pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; if (hasWave) { - pProj->drawDistanceOffset = 0xE0; + pProj->drawDistanceOffset = BLOCK_SIZE * 3 + HALF_BLOCK_SIZE; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; } else { - pProj->drawDistanceOffset = 0xC0; - pProj->hitboxTop = -0x18; - pProj->hitboxBottom = 0x18; - pProj->hitboxLeft = -0x18; - pProj->hitboxRight = 0x18; + pProj->drawDistanceOffset = BLOCK_SIZE * 3; + + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); } } - pProj->timer++; - if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > 0xC) - pProj->status = 0x0; + APPLY_DELTA_TIME_INC(pProj->timer); + if (!(gEquipment.beamBombsActivation & BBF_LONG_BEAM) && pProj->timer > PROJ_SHORT_BEAM_LIFETIME) + pProj->status = 0; } /** * 51a7c | f8 | Subroutine for a charged pistol projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessChargedPistol(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); + return; } - else - { - ProjectileMove(pProj, 0x16); - ProjectileSetTrail(pProj, PE_CHARGED_PISTOL_TRAIL, 0x7); - pProj->timer++; - } + + ProjectileMove(pProj, QUARTER_BLOCK_SIZE + PIXEL_SIZE + PIXEL_SIZE / 2); + ProjectileSetTrail(pProj, PE_CHARGED_PISTOL_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_LONG_BEAM); + return; } - else - { - pProj->movementStage++; - ProjectileMove(pProj, 0x10); - pProj->timer++; - } + + pProj->movementStage++; + ProjectileMove(pProj, QUARTER_BLOCK_SIZE); } else { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sChargedPistolOAM_Diagonal; + pProj->pOam = sChargedPistolOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sChargedPistolOAM_Vertical; + pProj->pOam = sChargedPistolOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sChargedPistolOAM_Horizontal; + pProj->pOam = sChargedPistolOam_Horizontal; } - pProj->drawDistanceOffset = 0x80; + pProj->drawDistanceOffset = BLOCK_SIZE * 2; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0xC; - pProj->hitboxBottom = 0xC; - pProj->hitboxLeft = -0xC; - pProj->hitboxRight = 0xC; - pProj->movementStage = 0x1; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + + pProj->movementStage = PROJECTILE_STAGE_SPAWNING; ProjectileCheckHitBlock(pProj, CAA_BOMB_PISTOL, PE_HITTING_SOMETHING_WITH_LONG_BEAM); - pProj->timer++; } + + APPLY_DELTA_TIME_INC(pProj->timer); } /** * @brief 51b74 | 38 | Decrements the missile counter * - * @param pProj Projectile data Pointer + * @param pProj Projectile data pointer */ void ProjectileDecrementMissileCounter(struct ProjectileData* pProj) { - if (gEquipment.currentMissiles != 0x0) + if (gEquipment.currentMissiles != 0) { gEquipment.currentMissiles--; - if (gEquipment.currentMissiles == 0x0) + if (gEquipment.currentMissiles == 0) gSamusWeaponInfo.weaponHighlighted ^= WH_MISSILE; } - pProj->drawDistanceOffset = 0x40; + pProj->drawDistanceOffset = BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; } /** * 51bac | 118 | Subroutine for a missile projectile * -* @param pProj Projectile Data Pointer +* @param pProj Projectile data pointer */ void ProjectileProcessMissile(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - 0x7 = Tumbling - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_MISSILE; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) == 0x0) // Check for collision + // Check for collisions + if (ProjectileCheckVerticalCollisionAtPosition(pProj) == COLLISION_AIR) { - ProjectileMove(pProj, pProj->timer + 0x8); - if (pProj->timer < 0xC) + ProjectileMove(pProj, pProj->timer + EIGHTH_BLOCK_SIZE); + + if (pProj->timer < CONVERT_SECONDS(.2f)) pProj->timer++; - ProjectileSetTrail(pProj, PE_MISSILE_TRAIL, 0x7); + + ProjectileSetTrail(pProj, PE_MISSILE_TRAIL, CONVERT_SECONDS(.1f + 1.f / 60)); } else { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_MISSILE); } } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_MISSILE; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_MISSILE); } else { pProj->movementStage++; - ProjectileMove(pProj, 0x30); + ProjectileMove(pProj, HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE); } } - else if (pProj->movementStage == 0x0) + else if (pProj->movementStage == 0) { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sMissileOAM_Diagonal; + pProj->pOam = sMissileOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sMissileOAM_Vertical; + pProj->pOam = sMissileOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sMissileOAM_Horizontal; + pProj->pOam = sMissileOam_Horizontal; } ProjectileDecrementMissileCounter(pProj); - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0x8; - pProj->hitboxBottom = 0x8; - pProj->hitboxLeft = -0x8; - pProj->hitboxRight = 0x8; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -EIGHTH_BLOCK_SIZE; + pProj->hitboxBottom = EIGHTH_BLOCK_SIZE; + pProj->hitboxLeft = -EIGHTH_BLOCK_SIZE; + pProj->hitboxRight = EIGHTH_BLOCK_SIZE; + pProj->movementStage++; ProjectileCheckHitBlock(pProj, CAA_MISSILE, PE_HITTING_SOMETHING_WITH_MISSILE); } @@ -1218,6 +1249,7 @@ void ProjectileProcessMissile(struct ProjectileData* pProj) { if (pProj->status & PROJ_STATUS_NOT_DRAWN) ProjectileDecrementMissileCounter(pProj); // Not sure why this is here ? + ProjectileMoveTumbling(pProj); } } @@ -1225,91 +1257,93 @@ void ProjectileProcessMissile(struct ProjectileData* pProj) /** * @brief 51cc4 | 38 | Decrements the super missile counter * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileDecrementSuperMissileCounter(struct ProjectileData* pProj) { - if (gEquipment.currentSuperMissiles != 0x0) + if (gEquipment.currentSuperMissiles != 0) { gEquipment.currentSuperMissiles--; - if (gEquipment.currentSuperMissiles == 0x0) + if (gEquipment.currentSuperMissiles == 0) gSamusWeaponInfo.weaponHighlighted ^= WH_SUPER_MISSILE; } - pProj->drawDistanceOffset = 0x40; + pProj->drawDistanceOffset = BLOCK_SIZE; pProj->status &= ~PROJ_STATUS_NOT_DRAWN; } /** * @brief 51cfc | 118 | Subroutine for a super missile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcessSuperMissile(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Spawn - 0x2 = Moving - 0x7 = Tumbling - */ - if (pProj->movementStage == 0x2) + if (pProj->movementStage == PROJECTILE_STAGE_MOVING) { gCurrentClipdataAffectingAction = CAA_SUPER_MISSILE; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) == 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) == COLLISION_AIR) { - ProjectileMove(pProj, pProj->timer + 0xC); - if (pProj->timer < 0x10) - pProj->timer++; - ProjectileSetTrail(pProj, PE_SUPER_MISSILE_TRAIL, 0x3); + ProjectileMove(pProj, pProj->timer + (QUARTER_BLOCK_SIZE - PIXEL_SIZE)); + + if (pProj->timer <= CONVERT_SECONDS(.25f)) + APPLY_DELTA_TIME_INC(pProj->timer); + + ProjectileSetTrail(pProj, PE_SUPER_MISSILE_TRAIL, CONVERT_SECONDS(.05f)); } else { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_SUPER_MISSILE); } } - else if (pProj->movementStage == 0x1) + else if (pProj->movementStage == PROJECTILE_STAGE_SPAWNING) { gCurrentClipdataAffectingAction = CAA_SUPER_MISSILE; - if (ProjectileCheckVerticalCollisionAtPosition(pProj) != 0x0) // Check for collision + // Check for collision + if (ProjectileCheckVerticalCollisionAtPosition(pProj) != COLLISION_AIR) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, PE_HITTING_SOMETHING_WITH_SUPER_MISSILE); } else { pProj->movementStage++; - ProjectileMove(pProj, 0x30); + ProjectileMove(pProj, HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE); } } - else if (pProj->movementStage == 0x0) + else if (pProj->movementStage == PROJECTILE_STAGE_INIT) { - switch (pProj->direction) // Set OAM/Flip depending on direction + // Set animation and flip depending on direction + switch (pProj->direction) { case ACD_DIAGONALLY_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_DIAGONALLY_UP: - pProj->pOam = sSuperMissileOAM_Diagonal; + pProj->pOam = sSuperMissileOam_Diagonal; break; + case ACD_DOWN: - pProj->status |= PROJ_STATUS_YFLIP; + pProj->status |= PROJ_STATUS_Y_FLIP; case ACD_UP: - pProj->pOam = sSuperMissileOAM_Vertical; + pProj->pOam = sSuperMissileOam_Vertical; break; + default: case ACD_FORWARD: - pProj->pOam = sSuperMissileOAM_Horizontal; + pProj->pOam = sSuperMissileOam_Horizontal; } ProjectileDecrementSuperMissileCounter(pProj); - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->hitboxTop = -0xC; - pProj->hitboxBottom = 0xC; - pProj->hitboxLeft = -0xC; - pProj->hitboxRight = 0xC; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->hitboxTop = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxBottom = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxLeft = -(QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxRight = (QUARTER_BLOCK_SIZE - PIXEL_SIZE); + pProj->movementStage++; ProjectileCheckHitBlock(pProj, CAA_SUPER_MISSILE, PE_HITTING_SOMETHING_WITH_SUPER_MISSILE); } @@ -1317,6 +1351,7 @@ void ProjectileProcessSuperMissile(struct ProjectileData* pProj) { if (pProj->status & PROJ_STATUS_NOT_DRAWN) ProjectileDecrementSuperMissileCounter(pProj); // Not sure why this is here ? + ProjectileMoveTumbling(pProj); } } @@ -1324,7 +1359,7 @@ void ProjectileProcessSuperMissile(struct ProjectileData* pProj) /** * 51e14 | b8 | Checks if samus is in place to be launched by the morph ball launcher, if yes sets pose to Delay before ballsparking * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileMorphballLauncherCheckLaunchSamus(struct ProjectileData* pProj) { @@ -1355,7 +1390,10 @@ void ProjectileMorphballLauncherCheckLaunchSamus(struct ProjectileData* pProj) projLeft = projX + pProj->hitboxLeft; projRight = projX + pProj->hitboxRight; - if (SpriteUtilCheckObjectsTouching(samusTop, samusBottom, samusLeft, samusRight, projTop, projBottom, projLeft, projRight) && gSamusData.invincibilityTimer == 0x0) + if (!SpriteUtilCheckObjectsTouching(samusTop, samusBottom, samusLeft, samusRight, projTop, projBottom, projLeft, projRight)) + return; + + if (gSamusData.invincibilityTimer == 0) { switch (gSamusData.pose) { @@ -1370,7 +1408,7 @@ void ProjectileMorphballLauncherCheckLaunchSamus(struct ProjectileData* pProj) /** * @brief 51ecc | 12c | Checks if Samus should bounce on a bomb * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileCheckSamusBombBounce(struct ProjectileData* pProj) { @@ -1389,12 +1427,12 @@ void ProjectileCheckSamusBombBounce(struct ProjectileData* pProj) u16 projLeft; u16 projRight; u8 direction; - u16 bombOffset; + u16 bombMiddleX; samusY = gSamusData.yPosition; samusX = gSamusData.xPosition; - if (!(ClipdataProcess(samusY + HALF_BLOCK_SIZE, samusX) & CLIPDATA_TYPE_SOLID_FLAG) || + if (!(ClipdataProcess(samusY + HALF_BLOCK_SIZE, samusX) & CLIPDATA_TYPE_SOLID_FLAG) || !(ClipdataProcess(samusY - (BLOCK_SIZE + HALF_BLOCK_SIZE), samusX) & CLIPDATA_TYPE_SOLID_FLAG)) { previousX = gPreviousXPosition; @@ -1402,34 +1440,30 @@ void ProjectileCheckSamusBombBounce(struct ProjectileData* pProj) samusBottom = samusY + gSamusPhysics.drawDistanceBottom; samusLeft = samusX + gSamusPhysics.drawDistanceLeftOffset; samusRight = samusX + gSamusPhysics.drawDistanceRightOffset; - + projY = pProj->yPosition; projX = pProj->xPosition; projTop = projY + pProj->hitboxTop; projBottom = projY + pProj->hitboxBottom; projLeft = projX + pProj->hitboxLeft; projRight = projX + pProj->hitboxRight; - - if (SpriteUtilCheckObjectsTouching(samusTop, samusBottom, samusLeft, samusRight, - projTop, projBottom, projLeft, projRight)) + + if (SpriteUtilCheckObjectsTouching(samusTop, samusBottom, samusLeft, samusRight, projTop, projBottom, projLeft, projRight)) { - bombOffset = projLeft + (projRight - projLeft) / 0x2; - if (gSamusData.invincibilityTimer == 0x0) + bombMiddleX = projLeft + (projRight - projLeft) / 2; + if (gSamusData.invincibilityTimer == 0) { if (samusY - HALF_BLOCK_SIZE > projY) direction = FORCED_MOVEMENT_BOMB_JUMP_ABOVE; else direction = FORCED_MOVEMENT_BOMB_JUMP; - if (samusX < projX + 0x5 && samusX > projX - 0x5) + if (samusX < projX + (PIXEL_SIZE + ONE_SUB_PIXEL) && samusX > projX - (PIXEL_SIZE + ONE_SUB_PIXEL)) SamusBombBounce(direction + FORCED_MOVEMENT_BOMB_JUMP_UP); + else if (bombMiddleX >= previousX) + SamusBombBounce(direction + FORCED_MOVEMENT_BOMB_JUMP_LEFT); else - { - if (bombOffset >= previousX) - SamusBombBounce(direction + FORCED_MOVEMENT_BOMB_JUMP_LEFT); - else - SamusBombBounce(direction + FORCED_MOVEMENT_BOMB_JUMP_RIGHT); - } + SamusBombBounce(direction + FORCED_MOVEMENT_BOMB_JUMP_RIGHT); } } } @@ -1438,130 +1472,150 @@ void ProjectileCheckSamusBombBounce(struct ProjectileData* pProj) /** * 51ff8 | 1f8 | Subroutine for a bomb projectile * -* @param pProj Projectile Data Pointer +* @param pProj Projectile data pointer */ void ProjectileProcessBomb(struct ProjectileData* pProj) { - u32 timer; - u32 yPosition; - switch (pProj->movementStage) { case BOMB_STAGE_INIT: - pProj->pOam = sBombOAM_Slow; // Bomb spinning at normal speed - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->drawDistanceOffset = 0x20; - pProj->hitboxTop = -0x3C; - pProj->hitboxBottom = 0x30; - pProj->hitboxLeft = -0x30; - pProj->hitboxRight = 0x30; - pProj->status &= ~(PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_XFLIP); // Clear Not Drawn and X Flip status, X Flip is cleared to make it always face the same way, cancelling the automatic X Flip if samus is facing right + pProj->pOam = sBombOam_Slow; // Bomb spinning at normal speed + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + pProj->drawDistanceOffset = HALF_BLOCK_SIZE; + + pProj->hitboxTop = -(BLOCK_SIZE - PIXEL_SIZE); + pProj->hitboxBottom = (HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE); + pProj->hitboxLeft = -(HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE); + pProj->hitboxRight = (HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE); + + // X Flip is cleared to make it always face the same way, cancelling the automatic X Flip if samus is facing right + pProj->status &= ~(PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_X_FLIP); pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->timer = 0x10; // Timer before the bomb starts spinning faster + + // Timer before the bomb starts spinning faster + pProj->timer = CONVERT_SECONDS(.25f + 1.f / 60); pProj->movementStage++; - SoundPlay(0xFE); // Placing bomb sound + + SoundPlay(SOUND_BOMB_SET); break; case BOMB_STAGE_EXPLODING: - if (pProj->timer-- != 0x1) + if (APPLY_DELTA_TIME_DEC(pProj->timer) != 0) { - if (pProj->timer == 0xF) + // Every frame, try to destroy an adjacent block + if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 1) { + // Block center gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - yPosition = pProj->yPosition - 0x8; - ClipdataProcess(yPosition, pProj->xPosition); // Block center - ProjectileCheckSamusBombBounce(pProj); // Checks if samus can bounce - pProj->status &= ~PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; // Clear Can Affect Environement status + ClipdataProcess(pProj->yPosition - EIGHTH_BLOCK_SIZE, pProj->xPosition); + + // Checks if samus can bounce + ProjectileCheckSamusBombBounce(pProj); + pProj->status &= ~PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; } - else if (pProj->timer == 0xE) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 2) { + // Block bottom middle gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition + 0x38, pProj->xPosition); // Block bottom middle + ClipdataProcess(pProj->yPosition + (BLOCK_SIZE - EIGHTH_BLOCK_SIZE), pProj->xPosition); } - else if (pProj->timer == 0xD) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 3) { + // Block right middle gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition - 0x8, pProj->xPosition + 0x30); // Block right middle + ClipdataProcess(pProj->yPosition - EIGHTH_BLOCK_SIZE, pProj->xPosition + (HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE)); } - else if (pProj->timer == 0xC) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 4) { + // Block left middle gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition - 0x8, pProj->xPosition - 0x30); // Block left middle + ClipdataProcess(pProj->yPosition - EIGHTH_BLOCK_SIZE, pProj->xPosition - (HALF_BLOCK_SIZE + QUARTER_BLOCK_SIZE)); } - else if (pProj->timer == 0xB) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 5) { + // Block right bottom gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition + 0x38, pProj->xPosition + 0x24); // Block right bottom + ClipdataProcess(pProj->yPosition + (BLOCK_SIZE - EIGHTH_BLOCK_SIZE), pProj->xPosition + (HALF_BLOCK_SIZE + PIXEL_SIZE)); } - else if (pProj->timer == 0xA) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 6) { + // Block left bottom gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition + 0x38, pProj->xPosition - 0x24); // Block left bottom + ClipdataProcess(pProj->yPosition + (BLOCK_SIZE - EIGHTH_BLOCK_SIZE), pProj->xPosition - (HALF_BLOCK_SIZE + PIXEL_SIZE)); } - else if (pProj->timer == 0x9) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 7) { + // Block top middle gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition - 0x48, pProj->xPosition); // Block top middle + ClipdataProcess(pProj->yPosition - (BLOCK_SIZE + EIGHTH_BLOCK_SIZE), pProj->xPosition); } - else if (pProj->timer == 0x8) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 8) { + // Block right top gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition - 0x48, pProj->xPosition + 0x24); // Block right top + ClipdataProcess(pProj->yPosition - (BLOCK_SIZE + EIGHTH_BLOCK_SIZE), pProj->xPosition + (HALF_BLOCK_SIZE + PIXEL_SIZE)); } - else if (pProj->timer == 0x7) + else if (pProj->timer == BOMB_EXPLOSION_TIMER - DELTA_TIME * 9) { + // Block left top gCurrentClipdataAffectingAction = CAA_BOMB_PISTOL; - ClipdataProcess(pProj->yPosition - 0x48, pProj->xPosition - 0x24); // Block left top + ClipdataProcess(pProj->yPosition - (BLOCK_SIZE + EIGHTH_BLOCK_SIZE), pProj->xPosition - (HALF_BLOCK_SIZE + PIXEL_SIZE)); } } else - pProj->status = 0x0; + { + // Explosion ended, destroy bomb + pProj->status = 0; + } break; case BOMB_STAGE_PLACED_ON_LAUNCHER: - pProj->pOam = sBombOAM_Slow; // Bomb spinning at normal speed - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->timer = 0x10; + pProj->pOam = sBombOam_Slow; // Bomb spinning at normal speed + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->timer = CONVERT_SECONDS(.25f + 1.f / 60); pProj->movementStage++; break; case BOMB_STAGE_FIRST_SPIN: case BOMB_STAGE_FIRST_SPIN_ON_LAUNCHER: - pProj->timer--; - if (pProj->timer == 0x0) + APPLY_DELTA_TIME_DEC(pProj->timer); + if (pProj->timer == 0) { - pProj->pOam = sBombOAM_Fast; // Bomb spinning fast - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->timer = 0x10; + pProj->pOam = sBombOam_Fast; // Bomb spinning fast + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->timer = CONVERT_SECONDS(.25f + 1.f / 60); pProj->movementStage++; } break; case BOMB_STAGE_FAST_SPIN: case BOMB_STAGE_FAST_SPIN_ON_LAUNCHER: - pProj->timer--; - if (pProj->timer == 0x0) + APPLY_DELTA_TIME_DEC(pProj->timer); + if (pProj->timer == 0) { - pProj->timer = 0x10; + pProj->timer = BOMB_EXPLOSION_TIMER; pProj->movementStage++; - pProj->status |= (PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_CAN_AFFECT_ENVIRONMENT); - ParticleSet(pProj->yPosition - 0x10, pProj->xPosition, PE_BOMB); + pProj->status |= PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; + ParticleSet(pProj->yPosition - QUARTER_BLOCK_SIZE, pProj->xPosition, PE_BOMB); } break; case BOMB_STAGE_EXPLODING_ON_LAUNCHER: - ProjectileMorphballLauncherCheckLaunchSamus(pProj); // Calls the launching samus handler - pProj->status = 0x0; + // Calls the launching samus handler + ProjectileMorphballLauncherCheckLaunchSamus(pProj); + pProj->status = 0; } } /** * 521f0 | 4 | Empty function, purpose unknown (most likely a cancelled projectile) * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileProcess_Empty(struct ProjectileData* pProj) { @@ -1571,73 +1625,72 @@ void ProjectileProcess_Empty(struct ProjectileData* pProj) /** * 521f4 | 114 | Subroutine for a power bomb projectile * -* @param pProj Projectile Data Pointer +* @param pProj Projectile data pointer */ void ProjectileProcessPowerBomb(struct ProjectileData* pProj) { - /* - Movement Stage : - 0x0 = Initialization - 0x1 = Check first timer ended (power bomb spinning at normal speed) - 0x2 = Check second timer ended and starts the explosion (power bomb spinning fast) - */ struct SpriteData* pSprite; u16 status; u8 isft; switch (pProj->movementStage) { - case 0x0: - if (gEquipment.currentPowerBombs != 0x0) + case POWER_BOMB_STAGE_INIT: + if (gEquipment.currentPowerBombs != 0) { gEquipment.currentPowerBombs--; - if (gEquipment.currentPowerBombs == 0x0) + if (gEquipment.currentPowerBombs == 0) gSamusWeaponInfo.weaponHighlighted ^= WH_POWER_BOMB; } - pProj->pOam = sPowerBombOAM_Slow; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->drawDistanceOffset = 0x20; - pProj->hitboxTop = -0x10; - pProj->hitboxBottom = 0x10; - pProj->hitboxLeft = -0x10; - pProj->hitboxRight = 0x10; - pProj->status &= ~(PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_XFLIP); + + pProj->pOam = sPowerBombOam_Slow; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->drawDistanceOffset = HALF_BLOCK_SIZE; + + pProj->hitboxTop = -QUARTER_BLOCK_SIZE; + pProj->hitboxBottom = QUARTER_BLOCK_SIZE; + pProj->hitboxLeft = -QUARTER_BLOCK_SIZE; + pProj->hitboxRight = QUARTER_BLOCK_SIZE; + + pProj->status &= ~(PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_X_FLIP); pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->timer = 0x36; + + pProj->timer = CONVERT_SECONDS(.9f); pProj->movementStage++; - pSprite = gSpriteData; - while (pSprite < gSpriteData + MAX_AMOUNT_OF_SPRITES) + for (pSprite = gSpriteData; pSprite < gSpriteData + MAX_AMOUNT_OF_SPRITES; pSprite++) { if (pSprite->status & SPRITE_STATUS_EXISTS) - pSprite->invincibilityStunFlashTimer &= 0x7F; - pSprite++; + pSprite->invincibilityStunFlashTimer &= ~SPRITE_ISFT_POWER_BOMB_STUNNED; } - SoundPlay(0x100); + + SoundPlay(SOUND_POWER_BOMB_SET); gCurrentPowerBomb.powerBombPlaced = TRUE; break; - case 0x1: - pProj->timer--; - if (pProj->timer == 0x0) + case POWER_BOMB_STAGE_FIRST_SPIN: + APPLY_DELTA_TIME_DEC(pProj->timer); + if (pProj->timer == 0) { - pProj->pOam = sPowerBombOAM_Fast; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; - pProj->timer = 0x28; + pProj->pOam = sPowerBombOam_Fast; + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + + pProj->timer = TWO_THIRD_SECOND; pProj->movementStage++; } break; - case 0x2: + case POWER_BOMB_STAGE_FAST_SPIN: if (gGameModeSub1 == SUB_GAME_MODE_PLAYING) { - pProj->timer--; - if (pProj->timer == 0x0) + APPLY_DELTA_TIME_DEC(pProj->timer); + if (pProj->timer == 0) { - PowerBombExplosionStart(pProj->xPosition, pProj->yPosition, 0x0); - pProj->status = 0x0; + PowerBombExplosionStart(pProj->xPosition, pProj->yPosition, FALSE); + pProj->status = 0; } } } diff --git a/src/projectile_util.c b/src/projectile_util.c index c9b6c486..5d9d737b 100644 --- a/src/projectile_util.c +++ b/src/projectile_util.c @@ -6,6 +6,7 @@ #include "data/sprite_data.h" #include "data/engine_pointers.h" +#include "constants/audio.h" #include "constants/clipdata.h" #include "constants/game_state.h" #include "constants/samus.h" @@ -92,7 +93,7 @@ u8 ProjectileCheckNumberOfProjectiles(u8 type, u8 limit) u8 count; struct ProjectileData* pProj; - count = 0x0; + count = 0; for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { @@ -124,29 +125,33 @@ u8 ProjectileInit(u8 type, u16 yPosition, u16 xPosition) for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { - hitbox = 0x1; + hitbox = ONE_SUB_PIXEL; pData = &gSamusData; if (!(pProj->status & PROJ_STATUS_EXISTS)) { if (type > PROJ_TYPE_SUPER_MISSILE) - status = (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN); + status = PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN; else // Bomb, power bomb - status = (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_CAN_AFFECT_ENVIRONMENT); + status = PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; if (pData->direction & KEY_RIGHT) - status |= PROJ_STATUS_XFLIP; + status |= PROJ_STATUS_X_FLIP; pProj->status = status; pProj->type = type; + pProj->yPosition = yPosition; pProj->xPosition = xPosition; - pProj->hitboxTop = -0x1; + + pProj->hitboxTop = -ONE_SUB_PIXEL; pProj->hitboxBottom = hitbox; - pProj->hitboxLeft = -0x1; + pProj->hitboxLeft = -ONE_SUB_PIXEL; pProj->hitboxRight = hitbox; - pProj->movementStage = 0x0; - pProj->timer = pProj->movementStage; + + pProj->movementStage = 0; + pProj->timer = 0; pProj->direction = pData->armCannonDirection; + return TRUE; } } @@ -169,17 +174,22 @@ void ProjectileUpdate(void) if (gGameModeSub1 != SUB_GAME_MODE_PLAYING) return; - + + // Update the arm cannon position offset fields SamusCallUpdateArmCannonPositionOffset(); + + // Samus position is in sub pixels, the offsets are in pixel, and the final result is in sub pixels gArmCannonY = PIXEL_TO_SUB_PIXEL(SUB_PIXEL_TO_PIXEL(gSamusData.yPosition) + gSamusPhysics.armCannonYPositionOffset); gArmCannonX = PIXEL_TO_SUB_PIXEL(SUB_PIXEL_TO_PIXEL(gSamusData.xPosition) + gSamusPhysics.armCannonXPositionOffset); + // Check spawn the charging beam particle effect if (gSamusWeaponInfo.chargeCounter == CHARGE_BEAM_START_THRESHOLD && gEquipment.suitType != SUIT_SUITLESS) { checks = FALSE; for (i = 0; i < MAX_AMOUNT_OF_PARTICLES; i++) { + // Verify it doesn't already exists if (gParticleEffects[i].status & PARTICLE_STATUS_EXISTS && gParticleEffects[i].effect == PE_CHARGING_BEAM) { checks++; @@ -191,21 +201,25 @@ void ProjectileUpdate(void) ParticleSet(gArmCannonY, gArmCannonX, PE_CHARGING_BEAM); } + // Try to spawn the requested new projectile, first it checks for the limit for that kind of projectile, then it tries to spawn it + // If the spawn is successful, cooldown and other things are set depending on the type of projectile. switch (gSamusWeaponInfo.newProjectile) { case PROJECTILE_CATEGORY_CHARGED_BEAM: if (gEquipment.suitType == SUIT_SUITLESS) { - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_CHARGED_PISTOL, 0x2) && ProjectileInit(PROJ_TYPE_CHARGED_PISTOL, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_CHARGED_PISTOL, PROJ_LIMIT_CHARGED_PISTOL) && + ProjectileInit(PROJ_TYPE_CHARGED_PISTOL, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0x7; + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f + 1.f / 60); ProjectileSetBeamParticleEffect(); - gSamusWeaponInfo.beamReleasePaletteTimer = 0x4; - SoundPlay(0xA0); // Charged pistol shot + gSamusWeaponInfo.beamReleasePaletteTimer = CONVERT_SECONDS(1.f / 15); + SoundPlay(SOUND_CHARGED_PISTOL_SHOT); } } else { + // Get the beam type and sound to play depending on the current beams enabled beams = gEquipment.beamBombsActivation; if (beams & BBF_PLASMA_BEAM) { @@ -215,16 +229,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xF7; + beamSound = SOUND_CHARGED_BEAM_PLASMA_WAVE_LONG_ICE_SHOT; else - beamSound = 0xF5; + beamSound = SOUND_CHARGED_BEAM_PLASMA_WAVE_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xF6; + beamSound = SOUND_CHARGED_BEAM_PLASMA_WAVE_ICE_SHOT; else - beamSound = 0xF4; + beamSound = SOUND_CHARGED_BEAM_PLASMA_WAVE_SHOT; } } else @@ -232,16 +246,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xF3; + beamSound = SOUND_CHARGED_BEAM_PLASMA_LONG_ICE_SHOT; else - beamSound = 0xF1; + beamSound = SOUND_CHARGED_BEAM_PLASMA_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xF2; + beamSound = SOUND_CHARGED_BEAM_PLASMA_ICE_SHOT; else - beamSound = 0xF0; + beamSound = SOUND_CHARGED_BEAM_PLASMA_SHOT; } } } @@ -253,16 +267,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xEF; + beamSound = SOUND_CHARGED_BEAM_WAVE_LONG_ICE_SHOT; else - beamSound = 0xED; + beamSound = SOUND_CHARGED_BEAM_WAVE_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xEE; + beamSound = SOUND_CHARGED_BEAM_WAVE_ICE_SHOT; else - beamSound = 0xEC; + beamSound = SOUND_CHARGED_BEAM_WAVE_SHOT; } } else @@ -271,50 +285,54 @@ void ProjectileUpdate(void) { projType = PROJ_TYPE_CHARGED_ICE_BEAM; if (beams & BBF_LONG_BEAM) - beamSound = 0xEB; + beamSound = SOUND_CHARGED_BEAM_LONG_ICE_SHOT; else - beamSound = 0xEA; + beamSound = SOUND_CHARGED_BEAM_ICE_SHOT; } else { if (beams & BBF_LONG_BEAM) { projType = PROJ_TYPE_CHARGED_LONG_BEAM; - beamSound = 0xE9; + beamSound = SOUND_CHARGED_BEAM_LONG_SHOT; } else { projType = PROJ_TYPE_CHARGED_BEAM; - beamSound = 0xE8; + beamSound = SOUND_CHARGED_BEAM_SHOT; } } } } - if (ProjectileCheckNumberOfProjectiles(projType, 0x2) && ProjectileInit(projType, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(projType, PROJ_LIMIT_CHARGED_BEAM) && + ProjectileInit(projType, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0x7; + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f + 1.f / 60); ProjectileSetBeamParticleEffect(); - gSamusWeaponInfo.beamReleasePaletteTimer = 0x4; + gSamusWeaponInfo.beamReleasePaletteTimer = CONVERT_SECONDS(1.f / 15); SoundPlay(beamSound); } } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; case PROJECTILE_CATEGORY_BEAM: if (gEquipment.suitType == SUIT_SUITLESS) { - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_PISTOL, 0x6) && ProjectileInit(PROJ_TYPE_PISTOL, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_PISTOL, PROJ_LIMIT_PISTOL) && + ProjectileInit(PROJ_TYPE_PISTOL, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0x7; + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f + 1.f / 60); ProjectileSetBeamParticleEffect(); - gSamusWeaponInfo.beamReleasePaletteTimer = 0x4; - SoundPlay(0x9F); // Pistol shot + gSamusWeaponInfo.beamReleasePaletteTimer = CONVERT_SECONDS(1.f / 15); + SoundPlay(SOUND_PISTOL_SHOT); } } else { + // Get the beam type and sound to play depending on the current beams enabled beams = gEquipment.beamBombsActivation; if (beams & BBF_PLASMA_BEAM) { @@ -324,16 +342,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xD7; + beamSound = SOUND_BEAM_PLASMA_WAVE_LONG_ICE_SHOT; else - beamSound = 0xD5; + beamSound = SOUND_BEAM_PLASMA_WAVE_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xD6; + beamSound = SOUND_BEAM_PLASMA_WAVE_ICE_SHOT; else - beamSound = 0xD4; + beamSound = SOUND_BEAM_PLASMA_WAVE_SHOT; } } else @@ -341,16 +359,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xD3; + beamSound = SOUND_BEAM_PLASMA_LONG_ICE_SHOT; else - beamSound = 0xD1; + beamSound = SOUND_BEAM_PLASMA_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xD2; + beamSound = SOUND_BEAM_PLASMA_ICE_SHOT; else - beamSound = 0xD0; + beamSound = SOUND_BEAM_PLASMA_SHOT; } } } @@ -362,16 +380,16 @@ void ProjectileUpdate(void) if (beams & BBF_LONG_BEAM) { if (beams & BBF_ICE_BEAM) - beamSound = 0xCF; + beamSound = SOUND_BEAM_WAVE_LONG_ICE_SHOT; else - beamSound = 0xCD; + beamSound = SOUND_BEAM_WAVE_LONG_SHOT; } else { if (beams & BBF_ICE_BEAM) - beamSound = 0xCE; + beamSound = SOUND_BEAM_WAVE_ICE_SHOT; else - beamSound = 0xCC; + beamSound = SOUND_BEAM_WAVE_SHOT; } } else @@ -380,78 +398,98 @@ void ProjectileUpdate(void) { projType = PROJ_TYPE_ICE_BEAM; if (beams & BBF_LONG_BEAM) - beamSound = 0xCB; + beamSound = SOUND_BEAM_LONG_ICE_SHOT; else - beamSound = 0xCA; + beamSound = SOUND_BEAM_ICE_SHOT; } else { if (beams & BBF_LONG_BEAM) { projType = PROJ_TYPE_LONG_BEAM; - beamSound = 0xC9; + beamSound = SOUND_BEAM_LONG_SHOT; } else { projType = PROJ_TYPE_BEAM; - beamSound = 0xC8; + beamSound = SOUND_BEAM_SHOT; } } } } - if (ProjectileCheckNumberOfProjectiles(projType, 0x6) && ProjectileInit(projType, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(projType, PROJ_LIMIT_BEAM) && ProjectileInit(projType, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0x7; + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f + 1.f / 60); ProjectileSetBeamParticleEffect(); - gSamusWeaponInfo.beamReleasePaletteTimer = 0x4; + gSamusWeaponInfo.beamReleasePaletteTimer = CONVERT_SECONDS(1.f / 15); SoundPlay(beamSound); } } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; case PROJECTILE_CATEGORY_MISSILE: - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_MISSILE, 0x4) && ProjectileInit(PROJ_TYPE_MISSILE, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_MISSILE, PROJ_LIMIT_MISSILE) && + ProjectileInit(PROJ_TYPE_MISSILE, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0x9; - SoundPlay(0xF8); // Missile shot - SoundPlay(0xF9); // Missile thrust + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.15f); + + SoundPlay(SOUND_MISSILE_SHOT); + SoundPlay(SOUND_MISSILE_THRUST); } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; case PROJECTILE_CATEGORY_SUPER_MISSILE: - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_SUPER_MISSILE, 0x4) && ProjectileInit(PROJ_TYPE_SUPER_MISSILE, gArmCannonY, gArmCannonX)) + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_SUPER_MISSILE, PROJ_LIMIT_SUPER_MISSILE) && + ProjectileInit(PROJ_TYPE_SUPER_MISSILE, gArmCannonY, gArmCannonX)) { - gSamusWeaponInfo.cooldown = 0xB; - SoundPlay(0xFB); // Super missile shot - SoundPlay(0xFC); // Super missile thrust + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(1.f / 6 + 1.f / 60); + + SoundPlay(SOUND_SUPER_MISSILE_SHOT); + SoundPlay(SOUND_SUPER_MISSILE_THRUST); } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; case PROJECTILE_CATEGORY_BOMB: - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_BOMB, 0x4) && ProjectileInit(PROJ_TYPE_BOMB, gSamusData.yPosition, gSamusData.xPosition)) - gSamusWeaponInfo.cooldown = 0x7; + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_BOMB, PROJ_LIMIT_BOMB) && + ProjectileInit(PROJ_TYPE_BOMB, gSamusData.yPosition, gSamusData.xPosition)) + { + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f + 1.f / 60); + } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; case PROJECTILE_CATEGORY_POWER_BOMB: - if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_POWER_BOMB, 0x1) && gCurrentPowerBomb.animationState == PB_STATE_NONE - && ProjectileInit(PROJ_TYPE_POWER_BOMB, gSamusData.yPosition, gSamusData.xPosition)) - gSamusWeaponInfo.cooldown = 0x5; + if (ProjectileCheckNumberOfProjectiles(PROJ_TYPE_POWER_BOMB, PROJ_LIMIT_POWER_BOMB) && + gCurrentPowerBomb.animationState == PB_STATE_NONE && + ProjectileInit(PROJ_TYPE_POWER_BOMB, gSamusData.yPosition, gSamusData.xPosition)) + { + gSamusWeaponInfo.cooldown = CONVERT_SECONDS(.1f - 1.f / 60); + } + gSamusWeaponInfo.newProjectile = PROJECTILE_CATEGORY_NONE; break; } + // Handle projectile/sprite collision ProjectileCheckHittingSprite(); + // Update projectiles for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { if (pProj->status & PROJ_STATUS_EXISTS) { + // Call AI sProcessProjectileFunctionPointers[pProj->type](pProj); + + // Update animation and check despawn ProjectileUpdateAnimation(pProj); ProjectileCheckDespawn(pProj); } @@ -461,17 +499,19 @@ void ProjectileUpdate(void) /** * @brief 4f304 | Updates the animation of a projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileUpdateAnimation(struct ProjectileData* pProj) { - pProj->animationDurationCounter++; + APPLY_DELTA_TIME_INC(pProj->animationDurationCounter); + if (pProj->pOam[pProj->currentAnimationFrame].timer < pProj->animationDurationCounter) { - pProj->animationDurationCounter = 0x1; + pProj->animationDurationCounter = DELTA_TIME; pProj->currentAnimationFrame++; - if (pProj->pOam[pProj->currentAnimationFrame].timer == 0x0) - pProj->currentAnimationFrame = 0x0; + + if (pProj->pOam[pProj->currentAnimationFrame].timer == 0) + pProj->currentAnimationFrame = 0; } } @@ -483,14 +523,15 @@ void ProjectileDrawAllStatusFalse(void) { struct ProjectileData* pProj; - if (gGameModeSub1 == SUB_GAME_MODE_PLAYING) + if (gGameModeSub1 != SUB_GAME_MODE_PLAYING) + return; + + for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { - for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) + if ((pProj->status & (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_UNKNOWN_80)) == + (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN)) { - if ((pProj->status & (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | - PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_UNKNOWN)) == - (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN)) - ProjectileDraw(pProj); + ProjectileDraw(pProj); } } } @@ -503,14 +544,15 @@ void ProjectileDrawAllStatusTrue(void) { struct ProjectileData* pProj; - if (gGameModeSub1 == SUB_GAME_MODE_PLAYING) + if (gGameModeSub1 != SUB_GAME_MODE_PLAYING) + return; + + for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { - for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) + if ((pProj->status & (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_UNKNOWN_80)) == + (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_UNKNOWN_80)) { - if ((pProj->status & (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | - PROJ_STATUS_NOT_DRAWN | PROJ_STATUS_UNKNOWN)) == - (PROJ_STATUS_EXISTS | PROJ_STATUS_ON_SCREEN | PROJ_STATUS_UNKNOWN)) - ProjectileDraw(pProj); + ProjectileDraw(pProj); } } } @@ -544,19 +586,19 @@ void ProjectileDraw(struct ProjectileData* pProj) partCount = *src++; - if (partCount + prevSlot < 0x80) + if (partCount + prevSlot < OAM_BUFFER_DATA_SIZE) { dst = (u16*)(gOamData + prevSlot); - yPosition = (pProj->yPosition >> 2) - gBg1YPosition / 4; - xPosition = (pProj->xPosition >> 2) - gBg1XPosition / 4; + yPosition = SUB_PIXEL_TO_PIXEL_(pProj->yPosition) - SUB_PIXEL_TO_PIXEL(gBg1YPosition); + xPosition = SUB_PIXEL_TO_PIXEL_(pProj->xPosition) - SUB_PIXEL_TO_PIXEL(gBg1XPosition); - xFlip = pProj->status & PROJ_STATUS_XFLIP; - yFlip = pProj->status & PROJ_STATUS_YFLIP; + xFlip = pProj->status & PROJ_STATUS_X_FLIP; + yFlip = pProj->status & PROJ_STATUS_Y_FLIP; - bgPriority = (gIoRegistersBackup.BG1CNT & 3); + bgPriority = BGCNT_GET_PRIORITY(gIoRegistersBackup.BG1CNT); if (pProj->status & PROJ_STATUS_HIGH_PRIORITY) - bgPriority = 0x0; + bgPriority = 0; else bgPriority++; @@ -597,6 +639,7 @@ void ProjectileDraw(struct ProjectileData* pProj) dst++; } + gNextOamSlot = partCount + prevSlot; } } @@ -694,7 +737,7 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sPistolGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); HudDrawSuitless(); - palOffset = 0x50; + palOffset = 16 * 5; } else { @@ -707,9 +750,9 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sPlasmaBeamGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); if (bba & BBF_ICE_BEAM) - palOffset = 0x20; + palOffset = 16 * 2; else - palOffset = 0x40; + palOffset = 16 * 4; } else if (bba & BBF_WAVE_BEAM) { @@ -719,9 +762,9 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sWaveBeamGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); if (bba & BBF_ICE_BEAM) - palOffset = 0x20; + palOffset = 16 * 2; else - palOffset = 0x30; + palOffset = 16 * 3; } else if (bba & BBF_ICE_BEAM) { @@ -730,7 +773,7 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sIceBeamGfx_Charged_Top, VRAM_BASE + 0x11800, DMA_ENABLE << 16 | 0x100); DMA_SET(3, sIceBeamGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); - palOffset = 0x20; + palOffset = 16 * 2; } else if (bba & BBF_LONG_BEAM) { @@ -739,7 +782,7 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sLongBeamGfx_Charged_Top, VRAM_BASE + 0x11800, DMA_ENABLE << 16 | 0x100); DMA_SET(3, sLongBeamGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); - palOffset = 0x10; + palOffset = 16 * 1; } else { @@ -748,7 +791,7 @@ void ProjectileLoadGraphics(void) DMA_SET(3, sNormalBeamGfx_Charged_Top, VRAM_BASE + 0x11800, DMA_ENABLE << 16 | 0x100); DMA_SET(3, sNormalBeamGfx_Charged_Bottom, VRAM_BASE + 0x11C00, DMA_ENABLE << 16 | 0x100); - palOffset = 0x0; + palOffset = 16 * 0; } } @@ -768,14 +811,14 @@ void ProjectileCallLoadGraphicsAndClearProjectiles(void) if (gPauseScreenFlag == PAUSE_SCREEN_NONE) { for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) - pProj->status = 0x0; + pProj->status = 0; } } /** * @brief 4f954 | c4 | Moves a projectile * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer * @param distance Distance to move */ void ProjectileMove(struct ProjectileData* pProj, u8 distance) @@ -795,42 +838,43 @@ void ProjectileMove(struct ProjectileData* pProj, u8 distance) return; case ACD_DIAGONALLY_UP: - distance = (distance * 7) / 10; + distance = FRACT_MUL(distance, 7, 10); pProj->yPosition -= distance; - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) pProj->xPosition += distance; else pProj->xPosition -= distance; break; case ACD_DIAGONALLY_DOWN: - distance = (distance * 7) / 10; + distance = FRACT_MUL(distance, 7, 10); pProj->yPosition += distance; - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) pProj->xPosition += distance; else pProj->xPosition -= distance; break; default: - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) pProj->xPosition += distance; else pProj->xPosition -= distance; } + // Check add samus' velocity if moving in the same direction samusVelocity = gSamusData.xVelocity; - leftVelocity = gSamusData.xVelocity >> 3; + leftVelocity = VELOCITY_TO_SUB_PIXEL(gSamusData.xVelocity); rightVelocity = leftVelocity; - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) { - if (samusVelocity > 0x0) + if (samusVelocity > 0) pProj->xPosition += leftVelocity; } else { - if (samusVelocity < 0x0) + if (samusVelocity < 0) pProj->xPosition += rightVelocity; } } @@ -868,7 +912,6 @@ u32 ProjectileCheckVerticalCollisionAtPosition(struct ProjectileData* pProj) u32 result; u16 collisionY; u16 collisionX; - u32 clip; yPosition = pProj->yPosition; xPosition = pProj->xPosition; @@ -877,12 +920,17 @@ u32 ProjectileCheckVerticalCollisionAtPosition(struct ProjectileData* pProj) clipdata = ClipdataProcess(yPosition, xPosition); - clip = clipdata & CLIPDATA_TYPE_SOLID_FLAG; - result = COLLISION_SOLID; - if (!clip) - return COLLISION_AIR; + if (clipdata & CLIPDATA_TYPE_SOLID_FLAG) + { + result = COLLISION_SOLID; + } + else + { + result = COLLISION_AIR; + return result; + } - switch (clipdata & 0xFF) + switch (LOW_BYTE(clipdata)) { case CLIPDATA_TYPE_RIGHT_STEEP_FLOOR_SLOPE: collisionY = (s16)((yPosition & BLOCK_POSITION_FLAG) - ((xPosition & SUB_PIXEL_POSITION_FLAG) - 0x3F)); @@ -928,7 +976,7 @@ u32 ProjectileCheckVerticalCollisionAtPosition(struct ProjectileData* pProj) default: collisionY = yPosition & BLOCK_POSITION_FLAG; collisionX = xPosition & BLOCK_POSITION_FLAG; - if (!(pProj->status & PROJ_STATUS_XFLIP)) + if (!(pProj->status & PROJ_STATUS_X_FLIP)) collisionX += BLOCK_SIZE; break; } @@ -958,7 +1006,7 @@ u32 ProjectileCheckVerticalCollisionAtPosition(struct ProjectileData* pProj) default: if (result != 0xC) { - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) { if (xPosition >= collisionX) pProj->xPosition = collisionX; @@ -984,7 +1032,7 @@ u32 ProjectileCheckVerticalCollisionAtPosition(struct ProjectileData* pProj) /** * 4fc38 | a8 | Sets a trail for the projectile using the effect in parameter * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer * @param effect Particle effect * @param delay Delay between each particle */ @@ -1015,7 +1063,7 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay) case ACD_DIAGONALLY_UP: yPosition += FRACT_MUL(movement, 3, 4); - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) xPosition -= FRACT_MUL(movement, 3, 4); else xPosition += FRACT_MUL(movement, 3, 4); @@ -1024,14 +1072,14 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay) case ACD_DIAGONALLY_DOWN: yPosition -= FRACT_MUL(movement, 3, 4); - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) xPosition -= FRACT_MUL(movement, 3, 4); else xPosition += FRACT_MUL(movement, 3, 4); break; default: - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) xPosition -= movement; else xPosition += movement; @@ -1044,13 +1092,12 @@ void ProjectileSetTrail(struct ProjectileData* pProj, u8 effect, u8 delay) /** * 4fce0 | 68 | Handles a projectile moving when tumbling * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer */ void ProjectileMoveTumbling(struct ProjectileData* pProj) { - u8 timer; - s16 movement; - u32 newPosition; + u8 offset; + s32 movement; if (!(pProj->status & PROJ_STATUS_ON_SCREEN)) { @@ -1058,28 +1105,30 @@ void ProjectileMoveTumbling(struct ProjectileData* pProj) return; } - timer = pProj->timer; - movement = sTumblingMissileSpeed[timer]; + offset = pProj->timer; + movement = sTumblingMissileSpeed[offset]; + if (movement == SHORT_MAX) - newPosition = sTumblingMissileSpeed[timer - 1] + pProj->yPosition; + { + movement = sTumblingMissileSpeed[offset - 1]; + pProj->yPosition += movement; + } else { - pProj->timer = timer + 1; - newPosition = pProj->yPosition + movement; + pProj->timer = offset + 1; + pProj->yPosition += movement; } - pProj->yPosition = newPosition; - if (pProj->status & PROJ_STATUS_XFLIP) - newPosition = pProj->xPosition + 0x4; + if (pProj->status & PROJ_STATUS_X_FLIP) + pProj->xPosition += PIXEL_SIZE; else - newPosition = pProj->xPosition - 0x4; - pProj->xPosition = newPosition; + pProj->xPosition -= PIXEL_SIZE; } /** * @brief 4fd48 | 54 | Checks if a projectile is hitting a block * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer * @param caa Clipdata Affecting Action * @param effect Particle effect */ @@ -1093,15 +1142,15 @@ void ProjectileCheckHitBlock(struct ProjectileData* pProj, u8 caa, u8 effect) xPosition = pProj->xPosition; if (pProj->direction == ACD_FORWARD) { - if (pProj->status & PROJ_STATUS_XFLIP) - xPosition -= 0x8; + if (pProj->status & PROJ_STATUS_X_FLIP) + xPosition -= EIGHTH_BLOCK_SIZE; else - xPosition += 0x8; + xPosition += EIGHTH_BLOCK_SIZE; } if (ProjectileCheckHittingSolidBlock(yPosition, xPosition)) { - pProj->status = 0x0; + pProj->status = 0; ParticleSet(pProj->yPosition, pProj->xPosition, effect); } } @@ -1149,7 +1198,8 @@ void ProjectileCheckHittingSprite(void) for (pSprite = gSpriteData; pSprite < gSpriteData + MAX_AMOUNT_OF_SPRITES; pSprite++) { - if ((pSprite->status & statusCheck) == SPRITE_STATUS_EXISTS && pSprite->health != 0 && !(pSprite->invincibilityStunFlashTimer & 0x80)) + if ((pSprite->status & statusCheck) == SPRITE_STATUS_EXISTS && pSprite->health != 0 && + !(pSprite->invincibilityStunFlashTimer & SPRITE_ISFT_POWER_BOMB_STUNNED)) { o2y = pSprite->yPosition; o2x = pSprite->xPosition; @@ -1451,7 +1501,7 @@ void ProjectileCheckHittingSprite(void) if (pSprite->samusCollision == SSC_SPACE_PIRATE) { pSprite->standingOnSprite = SAMUS_STANDING_ON_SPRITE_OFF; - pSprite->freezeTimer = 60; + pSprite->freezeTimer = CONVERT_SECONDS(1.f); pSprite->paletteRow = 1; pSprite->absolutePaletteRow = 1; ParticleSet(o2y, o2x, PE_HITTING_SOMETHING_WITH_LONG_BEAM); @@ -1486,10 +1536,9 @@ void ProjectileCheckHittingSprite(void) } /** - * 50370 | 30 | - * Gets the weakness for the sprite given in parameter + * 50370 | 30 | Gets the weakness for the sprite given in parameter * - * @param pSprite Sprite Data Pointer + * @param pSprite Sprite data pointer * @return The weakness of the sprite */ u16 ProjectileGetSpriteWeakness(struct SpriteData* pSprite) @@ -1504,7 +1553,7 @@ u16 ProjectileGetSpriteWeakness(struct SpriteData* pSprite) /** * 503a0 | 84 | Handles the ice beam dealing damage to a sprite * - * @param pSprite Sprite Data Pointer + * @param pSprite Sprite data pointer * @param damage Damage to inflict * @return The freeze timer */ @@ -1512,36 +1561,39 @@ u8 ProjectileIceBeamDealDamage(struct SpriteData* pSprite, u16 damage) { u8 freezeTimer; - freezeTimer = 0x0; + freezeTimer = 0; if (pSprite->health > damage) { pSprite->health -= damage; - freezeTimer = 0xF0; + freezeTimer = SPRITE_FREEZE_TIMER; } else { - pSprite->health = 0x0; + pSprite->health = 0; pSprite->properties |= SP_DESTROYED; - pSprite->freezeTimer = 0x0; - pSprite->paletteRow = 0x0; + pSprite->freezeTimer = 0; + pSprite->paletteRow = 0; + if (pSprite->standingOnSprite != SAMUS_STANDING_ON_SPRITE_OFF && gSamusData.standingStatus == STANDING_ENEMY) { gSamusData.standingStatus = STANDING_MIDAIR; pSprite->standingOnSprite = SAMUS_STANDING_ON_SPRITE_OFF; } + pSprite->pose = SPRITE_POSE_DESTROYED; - pSprite->ignoreSamusCollisionTimer = 0x1; + pSprite->ignoreSamusCollisionTimer = DELTA_TIME; } - pSprite->invincibilityStunFlashTimer = pSprite->invincibilityStunFlashTimer & 0x80 | 0x11; + SPRITE_CLEAR_AND_SET_ISFT(*pSprite, CONVERT_SECONDS(.285f)); pSprite->properties |= SP_DAMAGED; + return freezeTimer; } /** * 50424 | 88 | Handles a projectile dealing damage to a sprite * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer + * @param pSprite Sprite data pointer * @param damage Damage to inflict * @return bool, dead */ @@ -1582,92 +1634,99 @@ u8 ProjectileDealDamage(struct SpriteData* pSprite, u16 damage) /** * 504ac | 20 | Handles a projectile hitting a sprite immune to projectiles * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer + * @param pSprite Sprite data pointer * @return The parameter */ struct SpriteData* ProjectileHitSpriteImmuneToProjectiles(struct SpriteData* pSprite) { u8 isft; - isft = 0x2; // Needed to force a bcs - if ((pSprite->invincibilityStunFlashTimer & 0x7F) < isft) + isft = CONVERT_SECONDS(1.f / 30); + if (SPRITE_GET_ISFT(*pSprite) < isft) { - pSprite->invincibilityStunFlashTimer &= 0x80; - pSprite->invincibilityStunFlashTimer |= 0x2; - } // Return is implicit + SPRITE_CLEAR_AND_SET_ISFT(*pSprite, isft); + } } /** * 504cc | 20 | Handles a projectile hitting a solid sprite * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer + * @param pSprite Sprite data pointer * @return The parameter */ struct SpriteData* ProjectileHitSolidSprite(struct SpriteData* pSprite) { u8 isft; - isft = 0x3; // Needed to force a bcs - if ((pSprite->invincibilityStunFlashTimer & 0x7F) < isft) + isft = CONVERT_SECONDS(.05f); + if (SPRITE_GET_ISFT(*pSprite) < isft) { - pSprite->invincibilityStunFlashTimer &= 0x80; - pSprite->invincibilityStunFlashTimer |= 0x3; - } // Return is implicit + SPRITE_CLEAR_AND_SET_ISFT(*pSprite, isft); + } } /** * 504ec | c0 | Handles a power bomb dealing damage to a sprite * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer + * @param pSprite Sprite data pointer */ void ProjectilePowerBombDealDamage(struct SpriteData* pSprite) { u8 isft; if (pSprite->properties & SP_IMMUNE_TO_PROJECTILES) - ProjectileHitSpriteImmuneToProjectiles(pSprite); - else { - if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) - ProjectileHitSolidSprite(pSprite); + ProjectileHitSpriteImmuneToProjectiles(pSprite); + return; + } + + if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) + { + ProjectileHitSolidSprite(pSprite); + return; + } + + if (ProjectileGetSpriteWeakness(pSprite) & WEAKNESS_POWER_BOMB) + { + if (pSprite->health > POWER_BOMB_DAMAGE) + { + pSprite->health -= POWER_BOMB_DAMAGE; + } else { - if (ProjectileGetSpriteWeakness(pSprite) & WEAKNESS_POWER_BOMB) - { - if (pSprite->health > POWER_BOMB_DAMAGE) - pSprite->health -= POWER_BOMB_DAMAGE; - else - { - pSprite->health = 0x0; - pSprite->properties |= SP_DESTROYED; - pSprite->freezeTimer = 0x0; - pSprite->paletteRow = 0x0; - if (pSprite->standingOnSprite != SAMUS_STANDING_ON_SPRITE_OFF && gSamusData.standingStatus == STANDING_ENEMY) - { - gSamusData.standingStatus = STANDING_MIDAIR; - pSprite->standingOnSprite = SAMUS_STANDING_ON_SPRITE_OFF; - } - pSprite->pose = SPRITE_POSE_DESTROYED; - pSprite->ignoreSamusCollisionTimer = 0x1; - } - isft = 0x11; - } - else - isft = 0x3; + pSprite->health = 0; + pSprite->properties |= SP_DESTROYED; + pSprite->freezeTimer = 0; + pSprite->paletteRow = 0; - if ((pSprite->invincibilityStunFlashTimer & 0x7F) < isft) - pSprite->invincibilityStunFlashTimer = isft | 0x80; - else - pSprite->invincibilityStunFlashTimer |= 0x80; - pSprite->properties |= SP_DAMAGED; + if (pSprite->standingOnSprite != SAMUS_STANDING_ON_SPRITE_OFF && gSamusData.standingStatus == STANDING_ENEMY) + { + gSamusData.standingStatus = STANDING_MIDAIR; + pSprite->standingOnSprite = SAMUS_STANDING_ON_SPRITE_OFF; + } + + pSprite->pose = SPRITE_POSE_DESTROYED; + pSprite->ignoreSamusCollisionTimer = DELTA_TIME; } + + isft = CONVERT_SECONDS(.285f); } + else + { + isft = CONVERT_SECONDS(.05f); + } + + if (SPRITE_GET_ISFT(*pSprite) < isft) + pSprite->invincibilityStunFlashTimer = isft | SPRITE_ISFT_POWER_BOMB_STUNNED; + else + pSprite->invincibilityStunFlashTimer |= SPRITE_ISFT_POWER_BOMB_STUNNED; + pSprite->properties |= SP_DAMAGED; } /** * 505ac | a8 | Handles a projectile dealing damage to a sprite * - * @param pSprite Sprite Data Pointer to the concerned sprite + * @param pSprite Sprite data pointer * @param yPosition Y Position of the projectile * @param xPosition X Position of the projectile * @param damage Damage inflicted @@ -1677,40 +1736,37 @@ void ProjectileHitSprite(struct SpriteData* pSprite, u16 yPosition, u16 xPositio { u16 weakness; - if ((pSprite->properties & SP_SOLID_FOR_PROJECTILES) != 0x0) + if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) { ProjectileHitSolidSprite(pSprite); ParticleSet(yPosition, xPosition, effect); + return; + } + + if (pSprite->properties & SP_IMMUNE_TO_PROJECTILES) + { + ProjectileHitSpriteImmuneToProjectiles(pSprite); + ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); + return; + } + + weakness = ProjectileGetSpriteWeakness(pSprite); + if (weakness & WEAKNESS_BEAM_BOMBS) + { + ProjectileDealDamage(pSprite, damage); + ParticleSet(yPosition, xPosition, effect); } else { - if ((pSprite->properties & SP_IMMUNE_TO_PROJECTILES) != 0x0) - { - ProjectileHitSpriteImmuneToProjectiles(pSprite); - ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); - } - else - { - weakness = ProjectileGetSpriteWeakness(pSprite); - if ((weakness & WEAKNESS_BEAM_BOMBS) != 0x0) - { - ProjectileDealDamage(pSprite, damage); - ParticleSet(yPosition, xPosition, effect); - } - else - { - ProjectileHitSolidSprite(pSprite); - ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); - } - } + ProjectileHitSolidSprite(pSprite); + ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); } } /** - * 50654 | a8 | - * Handles a charged beam (without ice) dealing damage to a sprite + * 50654 | a8 | Handles a charged beam (without ice) dealing damage to a sprite * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer + * @param pSprite Sprite data pointer * @param yPosition Y Position of the projectile * @param xPosition X Position of the projectile * @param damage Damage inflicted @@ -1724,46 +1780,46 @@ void ProjectileNonIceChargedHitSprite(struct SpriteData* pSprite, u16 yPosition, { ProjectileHitSolidSprite(pSprite); ParticleSet(yPosition, xPosition, effect); + return; } - else if (pSprite->properties & SP_IMMUNE_TO_PROJECTILES) + + if (pSprite->properties & SP_IMMUNE_TO_PROJECTILES) { ProjectileHitSpriteImmuneToProjectiles(pSprite); ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); + return; + } + + weakness = ProjectileGetSpriteWeakness(pSprite); + if (weakness & (WEAKNESS_CHARGE_BEAM_PISTOL | WEAKNESS_BEAM_BOMBS)) + { + ProjectileDealDamage(pSprite, damage); + ParticleSet(yPosition, xPosition, effect); } else { - weakness = ProjectileGetSpriteWeakness(pSprite); - if (weakness & (WEAKNESS_CHARGE_BEAM_PISTOL | WEAKNESS_BEAM_BOMBS)) - { - ProjectileDealDamage(pSprite, damage); - ParticleSet(yPosition, xPosition, effect); - } - else - { - ProjectileHitSolidSprite(pSprite); - ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); - } + ProjectileHitSolidSprite(pSprite); + ParticleSet(yPosition, xPosition, PE_HITTING_SOMETHING_INVINCIBLE); } } /** - * 506fc | 28 | - * Freezes the sprite with the parameters + * 506fc | 28 | Freezes the sprite with the parameters * - * @param pSprite Sprite Data Pointer to Sprite Data Pointer - * @param freeze_timer Freeze timer to apply + * @param pSprite Sprite data pointer + * @param freezeTimer Freeze timer to apply */ void ProjectileFreezeSprite(struct SpriteData* pSprite, u8 freezeTimer) { pSprite->freezeTimer = freezeTimer; - pSprite->paletteRow = 0xF - (pSprite->spritesetGfxSlot + pSprite->frozenPaletteRowOffset); - SoundPlayNotAlreadyPlaying(0x140); + pSprite->paletteRow = NBR_OF_PALETTE_ROWS - (pSprite->spritesetGfxSlot + pSprite->frozenPaletteRowOffset) - SPRITE_FREEZE_PALETTE_OFFSET; + SoundPlayNotAlreadyPlaying(SOUND_FREEZING_SPRITE); } /** * @brief 50724 | 104 | Handles an ice beam (non charged) hitting a sprite * - * @param pSprite Sprite Data Pointer + * @param pSprite Sprite data pointer * @param yPosition Collision Y Position * @param xPosition Collision X Position * @param damage Projectile damage @@ -1775,7 +1831,7 @@ void ProjectileIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosition, u u16 weakness; u16 freezeFlag; - freezeTimer = 0x0; + freezeTimer = 0; if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) { @@ -1811,7 +1867,7 @@ void ProjectileIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosition, u { if (weakness & WEAKNESS_CAN_BE_FROZEN) { - freezeTimer = 0xF0; + freezeTimer = SPRITE_FREEZE_TIMER; ParticleSet(yPosition, xPosition, effect); } else @@ -1831,7 +1887,7 @@ void ProjectileIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosition, u /** * @brief 50828 | ec | Handles an ice beam (charged) hitting a sprite * - * @param pSprite Sprite Data Pointer + * @param pSprite Sprite data pointer * @param yPosition Collision Y Position * @param xPosition Collision X Position * @param damage Projectile damage @@ -1842,7 +1898,7 @@ void ProjectileChargedIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosi u8 freezeTimer; u16 weakness; - freezeTimer = 0x0; + freezeTimer = 0; if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) { @@ -1872,7 +1928,7 @@ void ProjectileChargedIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosi { if (weakness & WEAKNESS_CAN_BE_FROZEN) { - freezeTimer = 0xF0; + freezeTimer = SPRITE_FREEZE_TIMER; ParticleSet(yPosition, xPosition, effect); } else @@ -1882,7 +1938,7 @@ void ProjectileChargedIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosi } } - if (freezeTimer) + if (freezeTimer != 0) { ProjectileFreezeSprite(pSprite, freezeTimer); ParticleSet(yPosition, xPosition, PE_FREEZING_SPRITE_WITH_CHARGED_ICE); @@ -1892,71 +1948,77 @@ void ProjectileChargedIceBeamHittingSprite(struct SpriteData* pSprite, u16 yPosi /** * 50914 | 60 | Sets the projectile to a tumbling state (reserved for missile and super missile) * - * @param pSprite Sprite Data Pointere - * @param pProj Projectile Data Pointer + * @param pSprite Sprite data pointere + * @param pProj Projectile data pointer * @param type The type of the projectile */ void ProjectileStartTumblingMissile(struct SpriteData* pSprite, struct ProjectileData* pProj, u8 type) { - pProj->movementStage = 0x7; // Tumbling - pProj->timer = 0x0; + pProj->movementStage = PROJECTILE_STAGE_TUMBLING; + pProj->timer = 0; + pProj->status &= ~PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; + + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + if (pProj->xPosition > pSprite->xPosition) - pProj->status |= PROJ_STATUS_XFLIP; + pProj->status |= PROJ_STATUS_X_FLIP; else - pProj->status &= ~PROJ_STATUS_XFLIP; + pProj->status &= ~PROJ_STATUS_X_FLIP; if (type == PROJ_TYPE_SUPER_MISSILE) { - pProj->pOam = sSuperMissileOAM_Tumbling; - SoundStop(0xFC); + pProj->pOam = sSuperMissileOam_Tumbling; + SoundStop(SOUND_SUPER_MISSILE_THRUST); } else { - pProj->pOam = sMissileOAM_Tumbling; - SoundStop(0xF9); + pProj->pOam = sMissileOam_Tumbling; + SoundStop(SOUND_MISSILE_THRUST); } } /** * 50974 | 68 | Sets the projectile to a tumbling state (reserved for missile and super missile, uses the current sprite) * - * @param pProj Projectile Data Pointer + * @param pProj Projectile data pointer * @param type Projectile type */ void ProjectileStartTumblingMissileCurrentSprite(struct ProjectileData* pProj, u8 type) { - pProj->movementStage = 0x7; // Tumbling - pProj->timer = 0x0; + pProj->movementStage = PROJECTILE_STAGE_TUMBLING; + pProj->timer = 0; + pProj->status &= ~PROJ_STATUS_CAN_AFFECT_ENVIRONMENT; pProj->status |= PROJ_STATUS_HIGH_PRIORITY; - pProj->animationDurationCounter = 0x0; - pProj->currentAnimationFrame = 0x0; + + pProj->animationDurationCounter = 0; + pProj->currentAnimationFrame = 0; + if (pProj->xPosition > gCurrentSprite.xPosition) - pProj->status |= PROJ_STATUS_XFLIP; + pProj->status |= PROJ_STATUS_X_FLIP; else - pProj->status &= ~PROJ_STATUS_XFLIP; + pProj->status &= ~PROJ_STATUS_X_FLIP; if (type == PROJ_TYPE_SUPER_MISSILE) { - pProj->pOam = sSuperMissileOAM_Tumbling; - SoundStop(0xFC); + pProj->pOam = sSuperMissileOam_Tumbling; + SoundStop(SOUND_SUPER_MISSILE_THRUST); } else { - pProj->pOam = sMissileOAM_Tumbling; - SoundStop(0xF9); + pProj->pOam = sMissileOam_Tumbling; + SoundStop(SOUND_MISSILE_THRUST); } } /** * @brief 509dc | a0 | Handles a missile hitting a sprite * - * @param pSprite Sprite Data Pointer - * @param pProj Projectile Data Pointer + * @param pSprite Sprite data pointer + * @param pProj Projectile data pointer * @param yPosition Collision Y Position * @param xPosition Collision X Position */ @@ -1986,17 +2048,18 @@ void ProjectileMissileHitSprite(struct SpriteData* pSprite, struct ProjectileDat ProjectileStartTumblingMissile(pSprite, pProj, PROJ_TYPE_MISSILE); return; } - - if (pProj->movementStage == 0x0) + + if (pProj->movementStage == 0) ProjectileDecrementMissileCounter(pProj); - pProj->status = 0x0; + + pProj->status = 0; } /** * @brief 50a7c | 9c | Handles a super missile hitting a sprite * - * @param pSprite Sprite Data Pointer - * @param pProj Projectile Data Pointer + * @param pSprite Sprite data pointer + * @param pProj Projectile data pointer * @param yPosition Collision Y Position * @param xPosition Collision X Position */ @@ -2027,32 +2090,35 @@ void ProjectileSuperMissileHitSprite(struct SpriteData* pSprite, struct Projecti return; } - if (pProj->movementStage == 0x0) + if (pProj->movementStage == 0) ProjectileDecrementSuperMissileCounter(pProj); - pProj->status = 0x0; + + pProj->status = 0; } /** * @brief 50b18 | 4c | Handles a bomb hitting a sprite * - * @param pSprite Sprite Data Pointer + * @param pSprite Sprite data pointer * @param yPosition Collision Y Position * @param xPosition Collision X Position */ void ProjectileBombHitSprite(struct SpriteData* pSprite, u16 yPosition, u16 xPosition) { if (pSprite->properties & SP_IMMUNE_TO_PROJECTILES) - ProjectileHitSpriteImmuneToProjectiles(pSprite); - else { - if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) - ProjectileHitSolidSprite(pSprite); - else - { - if (ProjectileGetSpriteWeakness(pSprite) & WEAKNESS_BEAM_BOMBS) - ProjectileDealDamage(pSprite, BOMB_DAMAGE); - else - ProjectileHitSolidSprite(pSprite); - } + ProjectileHitSpriteImmuneToProjectiles(pSprite); + return; } + + if (pSprite->properties & SP_SOLID_FOR_PROJECTILES) + { + ProjectileHitSolidSprite(pSprite); + return; + } + + if (ProjectileGetSpriteWeakness(pSprite) & WEAKNESS_BEAM_BOMBS) + ProjectileDealDamage(pSprite, BOMB_DAMAGE); + else + ProjectileHitSolidSprite(pSprite); } diff --git a/src/sprite.c b/src/sprite.c index 388d0ceb..d28fc9b2 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -456,11 +456,11 @@ void SpriteDraw(struct SpriteData* pSprite, s32 slot) xPosition = SUB_PIXEL_TO_PIXEL_(pSprite->xPosition) - SUB_PIXEL_TO_PIXEL(gBg1XPosition); // Shortcuts for status - xFlip = pSprite->status & SPRITE_STATUS_XFLIP; + xFlip = pSprite->status & SPRITE_STATUS_X_FLIP; status_unk3 = pSprite->status & SPRITE_STATUS_UNKNOWN_80; doubleSize = pSprite->status & SPRITE_STATUS_DOUBLE_SIZE; alphaBlending = pSprite->status & SPRITE_STATUS_ALPHA_BLENDING; - yFlip = pSprite->status & SPRITE_STATUS_YFLIP; + yFlip = pSprite->status & SPRITE_STATUS_Y_FLIP; // Get graphical data // Palette offset by spriteset slot diff --git a/src/sprite_util.c b/src/sprite_util.c index 4eb4ea58..13b13911 100644 --- a/src/sprite_util.c +++ b/src/sprite_util.c @@ -1219,9 +1219,9 @@ void SpriteUtilCurrentSpriteFall(void) void SpriteUtilChooseRandomXFlip(void) { if (MOD_AND(gSpriteRng, 2)) - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } /** @@ -1255,9 +1255,9 @@ void SpriteUtilChooseRandomXDirectionRoomSlot(u8 roomSlot) void SpriteUtilMakeSpriteFaceSamusXFlip(void) { if (gCurrentSprite.xPosition > gSamusData.xPosition) - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } /** @@ -1279,9 +1279,9 @@ void SpriteUtilMakeSpriteFaceSamusDirection(void) void SpriteUtilMakeSpriteFaceAwayFromSamusXFlip(void) { if (gCurrentSprite.xPosition > gSamusData.xPosition) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } /** @@ -1337,7 +1337,7 @@ void unk_f9e4(s16 movement) velocity = movement; SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gPreviousCollisionCheck == COLLISION_RIGHT_STEEP_FLOOR_SLOPE) velocity = (s16)FRACT_MUL(velocity, 2, 3); @@ -1355,7 +1355,7 @@ void unk_f9e4(s16 movement) if (velocity == 0) velocity = 1; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += velocity; else gCurrentSprite.xPosition -= velocity; @@ -1847,7 +1847,7 @@ u32 SpriteUtilCheckSamusNearSpriteFrontBehind(u16 yRange, u16 xRangeFront, u16 x } // Get is flipped, this assume that when flipped the sprite faced right - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xFlip = TRUE; // Check X position @@ -2469,7 +2469,7 @@ u32 SpriteUtilSpriteTakeDamageFromSamusContact(struct SpriteData* pSprite, struc else { isft = CONVERT_SECONDS(.05f); - if (SPRITE_HAS_ISFT(*pSprite) < isft) + if (SPRITE_GET_ISFT(*pSprite) < isft) { SPRITE_CLEAR_AND_SET_ISFT(*pSprite, isft); } @@ -3000,7 +3000,7 @@ void SpriteUtilUpdateStunTimer(struct SpriteData* pSprite) { u8 isft; - if (!SPRITE_HAS_ISFT(*pSprite)) + if (SPRITE_GET_ISFT(*pSprite) == 0) return; isft = APPLY_DELTA_TIME_DEC(pSprite->invincibilityStunFlashTimer); @@ -3412,7 +3412,7 @@ u8 SpriteUtilIsSpriteStunned(void) else stunTimer = CONVERT_SECONDS(.24f); - if (SPRITE_HAS_ISFT(gCurrentSprite) > stunTimer && gCurrentSprite.pose < SPRITE_POSE_DESTROYED) + if (SPRITE_GET_ISFT(gCurrentSprite) > stunTimer && gCurrentSprite.pose < SPRITE_POSE_DESTROYED) { if (gCurrentSprite.animationDurationCounter != 0) APPLY_DELTA_TIME_DEC(gCurrentSprite.animationDurationCounter); @@ -3500,7 +3500,7 @@ void SpriteUtilSyncCurrentSpritePositionWithSubSpriteData1PositionAndOam(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -3536,7 +3536,7 @@ void SpriteUtilSyncCurrentSpritePositionWithSubSpriteData2PositionAndOAM(void) gCurrentSprite.yPosition = gSubSpriteData2.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData2.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData2.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -3589,7 +3589,7 @@ void SpriteUtilSyncCurrentSpritePositionWithSubSpritePositionAndOam(struct SubSp gCurrentSprite.yPosition = pSub->yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = pSub->xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = pSub->xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; diff --git a/src/sprites_AI/acid_worm.c b/src/sprites_AI/acid_worm.c index f93459ca..f6b5fbea 100644 --- a/src/sprites_AI/acid_worm.c +++ b/src/sprites_AI/acid_worm.c @@ -808,7 +808,7 @@ void AcidWormExtended(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { SpriteSpawnSecondary(SSPRITE_ACID_WORM_SPIT, 0x0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_X_FLIP); } else { @@ -822,7 +822,7 @@ void AcidWormExtended(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { SpriteSpawnSecondary(SSPRITE_ACID_WORM_SPIT, 0x1, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_X_FLIP); } else { @@ -836,7 +836,7 @@ void AcidWormExtended(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { SpriteSpawnSecondary(SSPRITE_ACID_WORM_SPIT, 0x2, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3), SPRITE_STATUS_X_FLIP); } else { @@ -1049,7 +1049,7 @@ void AcidWormDeathFlashingAnim(void) AcidWormHandleRotation(); - if (!SPRITE_HAS_ISFT(gCurrentSprite)) + if (!SPRITE_GET_ISFT(gCurrentSprite)) return; isft = --gCurrentSprite.invincibilityStunFlashTimer; @@ -1543,7 +1543,7 @@ void AcidWormSpitMove(void) } } - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += xMovement; else gCurrentSprite.xPosition -= xMovement; diff --git a/src/sprites_AI/atomic.c b/src/sprites_AI/atomic.c index d8b37853..c5b2a82d 100644 --- a/src/sprites_AI/atomic.c +++ b/src/sprites_AI/atomic.c @@ -665,10 +665,10 @@ void AtomicElectricitySpawn(void) // Set direction if (spriteX <= samusX) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; if (spriteY > samusY) - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; else gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; @@ -679,7 +679,7 @@ void AtomicElectricitySpawn(void) gCurrentSprite.work1 = 0x1; // Direction gCurrentSprite.hitboxTop = -0x1C; gCurrentSprite.hitboxBottom = 0x1C; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = 0x0; gCurrentSprite.hitboxRight = 0xA0; @@ -714,7 +714,7 @@ void AtomicElectricitySpawn(void) gCurrentSprite.pOam = sAtomicElectricityOAM_MovingDiagonal; gCurrentSprite.work1 = 0x0; // Direction - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = 0x20; gCurrentSprite.hitboxRight = 0x60; @@ -760,7 +760,7 @@ void AtomicElectricityMove(void) // Check move X if (!(gCurrentSprite.work1 & 0x2)) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += speed; else gCurrentSprite.xPosition -= speed; diff --git a/src/sprites_AI/baristute.c b/src/sprites_AI/baristute.c index ac016d20..c743f1e3 100644 --- a/src/sprites_AI/baristute.c +++ b/src/sprites_AI/baristute.c @@ -280,9 +280,9 @@ void BaristuteIdle(void) // Face samus SpriteUtilMakeSpriteFaceSamusDirection(); if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; // Check should walk or jump, get the collision in front of the baristute if ((gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT @@ -584,7 +584,7 @@ void Baristute(void) } // Check update palette - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) { // Damaged spawnHealth = GET_PSPRITE_HEALTH(gCurrentSprite.spriteId); diff --git a/src/sprites_AI/black_space_pirate.c b/src/sprites_AI/black_space_pirate.c index ec95fd55..61a72b57 100644 --- a/src/sprites_AI/black_space_pirate.c +++ b/src/sprites_AI/black_space_pirate.c @@ -297,7 +297,7 @@ void BlackSpacePirateInit(void) if (gCurrentSprite.roomSlot & 0x80) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; } else diff --git a/src/sprites_AI/boss_statues.c b/src/sprites_AI/boss_statues.c index 693ced38..2bafca8f 100644 --- a/src/sprites_AI/boss_statues.c +++ b/src/sprites_AI/boss_statues.c @@ -570,7 +570,7 @@ void KraidStatue(void) for (pProj = gProjectileData; pProj < gProjectileData + MAX_AMOUNT_OF_PROJECTILES; pProj++) { if (pProj->status & PROJ_STATUS_EXISTS) - pProj->status |= PROJ_STATUS_UNKNOWN; + pProj->status |= PROJ_STATUS_UNKNOWN_80; } if (EventFunction(EVENT_ACTION_CHECKING, EVENT_KRAID_STATUE_OPENED) && EventFunction(EVENT_ACTION_CHECKING, EVENT_RIDLEY_STATUE_OPENED)) diff --git a/src/sprites_AI/chozo_statue.c b/src/sprites_AI/chozo_statue.c index ae35fdf1..a5952f0a 100644 --- a/src/sprites_AI/chozo_statue.c +++ b/src/sprites_AI/chozo_statue.c @@ -49,7 +49,7 @@ void ChozoStatueSyncSubSprites(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -160,7 +160,7 @@ void ChozoStatueSetDirection(void) case PSPRITE_CHOZO_STATUE_VARIA_HINT: case PSPRITE_CHOZO_STATUE_VARIA: case PSPRITE_CHOZO_STATUE_GRAVITY: - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; break; case PSPRITE_CHOZO_STATUE_LONG_HINT: @@ -319,7 +319,7 @@ void ChozoStatueInit(void) gCurrentSprite.properties |= (SP_ALWAYS_ACTIVE | SP_SOLID_FOR_PROJECTILES); ChozoStatueSetDirection(); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSubSpriteData1.xPosition = gCurrentSprite.xPosition + HALF_BLOCK_SIZE; else gSubSpriteData1.xPosition = gCurrentSprite.xPosition - HALF_BLOCK_SIZE; @@ -376,7 +376,7 @@ void ChozoStatueInit(void) gCurrentSprite.pose = CHOZO_STATUE_POSE_WAIT_FOR_ITEM_TO_BE_COLLECTED; // Spawn chozo ball - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_CHOZO_BALL, 0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gSubSpriteData1.yPosition - CHOZO_BALL_OFFSET_Y, @@ -405,19 +405,19 @@ void ChozoStatueInit(void) // Spawn eye gCurrentSprite.work1 = SpriteSpawnSecondary(SSPRITE_CHOZO_STATUE_PART, CHOZO_STATUE_PART_EYE, - gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn arm behavior = SpriteSpawnSecondary(SSPRITE_CHOZO_STATUE_PART, CHOZO_STATUE_PART_ARM, - gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn leg SpriteSpawnSecondary(SSPRITE_CHOZO_STATUE_PART, CHOZO_STATUE_PART_LEG, gfxSlot, ramSlot, - yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn glow newRamSlot = SpriteSpawnSecondary(SSPRITE_CHOZO_STATUE_PART, CHOZO_STATUE_PART_GLOW, gfxSlot, - ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); gSpriteData[newRamSlot].work1 = behavior; } @@ -799,7 +799,7 @@ void ChozoStatuePartArmCheckGrabSamusHint(void) xPosition = gCurrentSprite.xPosition; // Get X offset - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition += CHOZO_STATUE_HAND_X_OFFSET; else xPosition -= CHOZO_STATUE_HAND_X_OFFSET; @@ -839,7 +839,7 @@ void ChozoStatuePartSyncSamusPosition(void) { gSamusData.yPosition = gCurrentSprite.yPosition - CHOZO_STATUE_HAND_Y_OFFSET; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSamusData.xPosition = gCurrentSprite.xPosition + CHOZO_STATUE_HAND_X_OFFSET; else gSamusData.xPosition = gCurrentSprite.xPosition - CHOZO_STATUE_HAND_X_OFFSET; @@ -908,7 +908,7 @@ void ChozoStatuePartArmCheckGrabSamusRefill(void) xPosition = gCurrentSprite.xPosition; // Get X offset - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition += CHOZO_STATUE_HAND_X_OFFSET; else xPosition -= CHOZO_STATUE_HAND_X_OFFSET; diff --git a/src/sprites_AI/chozo_statue_movement.c b/src/sprites_AI/chozo_statue_movement.c index d1d1fc7f..396c7098 100644 --- a/src/sprites_AI/chozo_statue_movement.c +++ b/src/sprites_AI/chozo_statue_movement.c @@ -21,12 +21,12 @@ void SpawnChozoStatueMovement(u8 stage) if (MOD_AND(stage, 2)) { - gSpriteData[i].status = ((gCurrentSprite.status & SPRITE_STATUS_XFLIP) + gSpriteData[i].status = ((gCurrentSprite.status & SPRITE_STATUS_X_FLIP) | (SPRITE_STATUS_EXISTS | SPRITE_STATUS_ONSCREEN | SPRITE_STATUS_IGNORE_PROJECTILES)); } else { - gSpriteData[i].status = ((gCurrentSprite.status & SPRITE_STATUS_XFLIP) + gSpriteData[i].status = ((gCurrentSprite.status & SPRITE_STATUS_X_FLIP) | (SPRITE_STATUS_EXISTS | SPRITE_STATUS_ONSCREEN | SPRITE_STATUS_NOT_DRAWN | SPRITE_STATUS_IGNORE_PROJECTILES)); } diff --git a/src/sprites_AI/deorem.c b/src/sprites_AI/deorem.c index a0d430a6..567997a4 100644 --- a/src/sprites_AI/deorem.c +++ b/src/sprites_AI/deorem.c @@ -508,7 +508,7 @@ void DeoremSpawnGoingDownAnim(void) { gCurrentSprite.pose = 0x22; gCurrentSprite.work0 = 0xA; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; if (gBossWork.work3) { @@ -593,7 +593,7 @@ void DeoremSpawnGoingUpAnim(void) --gCurrentSprite.work0; if (gCurrentSprite.work0 == 0) { - gCurrentSprite.status = (gCurrentSprite.status & ~SPRITE_STATUS_YFLIP) | SPRITE_STATUS_NOT_DRAWN; + gCurrentSprite.status = (gCurrentSprite.status & ~SPRITE_STATUS_Y_FLIP) | SPRITE_STATUS_NOT_DRAWN; gCurrentSprite.pose = 0x24; gCurrentSprite.work0 = 0x3C; @@ -1287,7 +1287,7 @@ void DeoremSegmentInit(void) else if ((u8)(roomSlot - 6) < 6) { gCurrentSprite.pose = 0x22; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; } else if ((u8)(roomSlot - 12) < 3) { @@ -1315,7 +1315,7 @@ void DeoremSegmentInit(void) { gCurrentSprite.pose = 0x11; gCurrentSprite.drawOrder = 3; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.work2 = 0x1C; } else @@ -1492,7 +1492,7 @@ void DeoremSegmentRightIdleAnim(void) else { xPosition = gCurrentSprite.xPosition + 3 * HALF_BLOCK_SIZE; - statusToAdd = SPRITE_STATUS_XFLIP; + statusToAdd = SPRITE_STATUS_X_FLIP; } if (gCurrentSprite.roomSlot == 1 && deoremTimer == 241) @@ -1579,7 +1579,7 @@ void DeoremSegmentLeftIdleAnim(void) if (gBossWork.work3 != 0) { xPosition = gCurrentSprite.xPosition + 3 * HALF_BLOCK_SIZE; - statusToAdd = SPRITE_STATUS_XFLIP; + statusToAdd = SPRITE_STATUS_X_FLIP; } else { @@ -2363,7 +2363,7 @@ void DeoremThornInit(void) gCurrentSprite.drawOrder = 3; gCurrentSprite.health = GET_SSPRITE_HEALTH(gCurrentSprite.spriteId); - if ((gCurrentSprite.status & SPRITE_STATUS_XFLIP) != 0) + if ((gCurrentSprite.status & SPRITE_STATUS_X_FLIP) != 0) { gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; gCurrentSprite.rotation = 0x80; @@ -2373,7 +2373,7 @@ void DeoremThornInit(void) gCurrentSprite.status &= ~SPRITE_STATUS_FACING_RIGHT; gCurrentSprite.rotation = 0; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.yPosition -= 0xC; } diff --git a/src/sprites_AI/dessgeega.c b/src/sprites_AI/dessgeega.c index ca2666cc..444c972f 100644 --- a/src/sprites_AI/dessgeega.c +++ b/src/sprites_AI/dessgeega.c @@ -63,7 +63,7 @@ void DessgeegaInit(void) SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - (BLOCK_SIZE + 4), gCurrentSprite.xPosition); if (gPreviousCollisionCheck & COLLISION_FLAGS_UNKNOWN_F0) { - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.yPosition -= BLOCK_SIZE; } // Should be idle init instead of idle, this skips the initialization of some variables @@ -72,7 +72,7 @@ void DessgeegaInit(void) // Set hitbox and draw distances based on direction gCurrentSprite.work0 = 0x0; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { gCurrentSprite.drawDistanceTop = 0x8; gCurrentSprite.drawDistanceBottom = 0x28; @@ -658,7 +658,7 @@ void DessgeegaDeath(void) { u16 yPosition; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) yPosition = gCurrentSprite.yPosition + 0x30; else { @@ -806,14 +806,14 @@ void Dessgeega(void) DessgeegaJumpWarningInit(); case DESSGEEGA_POSE_JUMP_WARNING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) DessgeegaJumpWarningCeiling(); else DessgeegaJumpWarningGround(); break; case DESSGEEGA_POSE_JUMPING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) DessgeegaJumpingCeiling(); else DessgeegaJumpingGround(); @@ -824,14 +824,14 @@ void Dessgeega(void) break; case DESSGEEGA_POSE_IDLE: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) DessgeegaIdleCeiling(); else DessgeegaIdleGround(); break; case DESSGEEGA_POSE_FALLING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) DessgeegaFallingCeiling(); else DessgeegaFallingGround(); diff --git a/src/sprites_AI/dragon.c b/src/sprites_AI/dragon.c index c80782b1..1be721b9 100644 --- a/src/sprites_AI/dragon.c +++ b/src/sprites_AI/dragon.c @@ -134,7 +134,7 @@ void DragonIdle(void) // Check should turn around if (nslr == NSLR_RIGHT) { - if (!(gCurrentSprite.status & SPRITE_STATUS_XFLIP)) + if (!(gCurrentSprite.status & SPRITE_STATUS_X_FLIP)) { gCurrentSprite.pose = DRAGON_POSE_TURN_AROUND_INIT; return; @@ -142,7 +142,7 @@ void DragonIdle(void) } else if (nslr == NSLR_LEFT) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.pose = DRAGON_POSE_TURN_AROUND_INIT; return; @@ -160,7 +160,7 @@ void DragonIdle(void) // In fact, the fireball never colldes with the block that's checked here yPosition = gCurrentSprite.yPosition - (BLOCK_SIZE * 2 + EIGHTH_BLOCK_SIZE); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE + EIGHTH_BLOCK_SIZE); else xPosition = gCurrentSprite.xPosition - (BLOCK_SIZE + EIGHTH_BLOCK_SIZE); @@ -201,7 +201,7 @@ void DragonTurningAroundFirstHalf(void) gCurrentSprite.currentAnimationFrame = 0; gCurrentSprite.animationDurationCounter = 0; - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; } } @@ -272,14 +272,14 @@ void DragonSpit(void) DragonIdleInit(); yPosition = gCurrentSprite.yPosition - DRAGON_SPIT_Y_OFFSET; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + DRAGON_SPIT_X_OFFSET; else xPosition = gCurrentSprite.xPosition - DRAGON_SPIT_X_OFFSET; // Spawn projectile SpriteSpawnSecondary(SSPRITE_DRAGON_FIREBALL, 0, gCurrentSprite.spritesetGfxSlot, - gCurrentSprite.primarySpriteRamSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.primarySpriteRamSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); } } @@ -311,11 +311,11 @@ void DragonFireballInit(void) gCurrentSprite.bgPriority = MOD_AND(gIoRegistersBackup.BG1CNT, 4); gCurrentSprite.health = GET_SSPRITE_HEALTH(gCurrentSprite.spriteId); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; gCurrentSprite.rotation = PI / 2; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } else { diff --git a/src/sprites_AI/escape_gate.c b/src/sprites_AI/escape_gate.c index e7bab698..beac6652 100644 --- a/src/sprites_AI/escape_gate.c +++ b/src/sprites_AI/escape_gate.c @@ -109,7 +109,7 @@ void EscapeGate(void) gCurrentSprite.yPosition, gCurrentSprite.xPosition - (BLOCK_SIZE * 2), 0); SpriteSpawnPrimary(PSPRITE_BLACK_SPACE_PIRATE, 0x80, gCurrentSprite.spritesetGfxSlot, - gCurrentSprite.yPosition, gCurrentSprite.xPosition - (BLOCK_SIZE * 10), SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition, gCurrentSprite.xPosition - (BLOCK_SIZE * 10), SPRITE_STATUS_X_FLIP); } gCurrentSprite.pose = ESCAPE_GATE_POSE_IDLE; gCurrentSprite.status &= ~SPRITE_STATUS_NOT_DRAWN; diff --git a/src/sprites_AI/gadora.c b/src/sprites_AI/gadora.c index 15314921..18531b0d 100644 --- a/src/sprites_AI/gadora.c +++ b/src/sprites_AI/gadora.c @@ -43,7 +43,7 @@ void GadoraInit(void) return; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.xPosition += PIXEL_SIZE * 3; yPosition = gCurrentSprite.yPosition; @@ -52,7 +52,7 @@ void GadoraInit(void) // Disable hatch GadoraHatchUpdate(xPosition, yPosition, FALSE); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition += QUARTER_BLOCK_SIZE; else xPosition -= QUARTER_BLOCK_SIZE; @@ -176,7 +176,7 @@ void GadoraCheckOpeningEyeAnimEnded(void) // Spawn beam xPosition = gCurrentSprite.xPosition + QUARTER_BLOCK_SIZE; - status = SPRITE_STATUS_XFLIP; + status = SPRITE_STATUS_X_FLIP; SpriteSpawnSecondary(SSPRITE_GADORA_BEAM, 0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition, xPosition, status); @@ -440,7 +440,7 @@ void GadoraEye(void) { // Make vulnerable gCurrentSprite.status &= ~SPRITE_STATUS_IGNORE_PROJECTILES; - if (SPRITE_HAS_ISFT(gCurrentSprite) == 0x10) + if (SPRITE_GET_ISFT(gCurrentSprite) == 0x10) gSpriteData[ramSlot].work0 = 0; // Force close eye if hit } else diff --git a/src/sprites_AI/gamet.c b/src/sprites_AI/gamet.c index 3249aa99..6ac7a57d 100644 --- a/src/sprites_AI/gamet.c +++ b/src/sprites_AI/gamet.c @@ -109,7 +109,7 @@ void GametIdle(void) ramSlot = SpriteSpawnDropFollowers(PSPRITE_GAMET_BLUE_FOLLOWER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + (BLOCK_SIZE + HALF_BLOCK_SIZE), - gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); if (ramSlot != 0xFF) { @@ -120,7 +120,7 @@ void GametIdle(void) ramSlot = SpriteSpawnDropFollowers(PSPRITE_GAMET_BLUE_FOLLOWER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + (BLOCK_SIZE * 2 + HALF_BLOCK_SIZE), - gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); if (ramSlot != 0xFF) { @@ -223,7 +223,7 @@ void GametMove(void) else { gCurrentSprite.work1++; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check should respawn if (gCurrentSprite.xPosition - gSamusData.xPosition > BLOCK_SIZE * 16 || gCurrentSprite.xPosition & 0x8000) diff --git a/src/sprites_AI/geega.c b/src/sprites_AI/geega.c index 238ebb09..968bceeb 100644 --- a/src/sprites_AI/geega.c +++ b/src/sprites_AI/geega.c @@ -110,7 +110,7 @@ void GeegaIdle(void) ramSlot = SpriteSpawnDropFollowers(PSPRITE_GEEGA_FOLLOWER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + (BLOCK_SIZE * 2 + HALF_BLOCK_SIZE), - gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); if (ramSlot != 0xFF) { @@ -208,7 +208,7 @@ void GeegaMove(void) else { gCurrentSprite.work1++; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check should respawn if (gCurrentSprite.xPosition - gSamusData.xPosition > BLOCK_SIZE * 16 || gCurrentSprite.xPosition & 0x8000) diff --git a/src/sprites_AI/geron.c b/src/sprites_AI/geron.c index b20435ef..ce0edec7 100644 --- a/src/sprites_AI/geron.c +++ b/src/sprites_AI/geron.c @@ -170,9 +170,9 @@ void Geron(void) else { // Check should shake - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) { - if (SPRITE_HAS_ISFT(gCurrentSprite) == 0x2) + if (SPRITE_GET_ISFT(gCurrentSprite) == 0x2) { // Set shaking gCurrentSprite.pOam = sGeronOAM_Shaking; diff --git a/src/sprites_AI/hive.c b/src/sprites_AI/hive.c index 90d7b909..c46b1395 100644 --- a/src/sprites_AI/hive.c +++ b/src/sprites_AI/hive.c @@ -1419,7 +1419,7 @@ void MellowSwarm(void) gCurrentSprite.animationDurationCounter = 0x0; gCurrentSprite.pose = 0x9; if (0x78 < (gSamusData.xPosition >> 0x2) -(gBg1XPosition >> 0x2)) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.yPositionSpawn = 0xF0; if (gCurrentSprite.spriteId == PSPRITE_MELLOW_SWARM_HEALTH_BASED) @@ -1479,7 +1479,7 @@ void MellowSwarm(void) return; } - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) x_pos = gSamusData.xPosition + (gSpriteRng * 0x20); else x_pos = gSamusData.xPosition + (gSpriteRng * -0x20); diff --git a/src/sprites_AI/imago.c b/src/sprites_AI/imago.c index 9585812e..de61ac7b 100644 --- a/src/sprites_AI/imago.c +++ b/src/sprites_AI/imago.c @@ -39,7 +39,7 @@ void ImagoSyncSubSprites(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -62,7 +62,7 @@ void ImagoShootNeedles(void) if (gSubSpriteData1.pMultiOam == sImagoMultiSpriteData_Idle) { // Check samus in range for the needles - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gSubSpriteData1.xPosition < gSamusData.xPosition) inRange = TRUE; @@ -88,11 +88,11 @@ void ImagoShootNeedles(void) if (gCurrentSprite.currentAnimationFrame == 0x9 && gCurrentSprite.animationDurationCounter == 0x1) { // Spawn needle - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_IMAGO_NEEDLE, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition + 0x6C, gCurrentSprite.xPosition + 0x1C, SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition + 0x6C, gCurrentSprite.xPosition + 0x1C, SPRITE_STATUS_X_FLIP); } else { @@ -178,7 +178,7 @@ void ImagoCoreFlashingAnim(void) */ void ImagoSetSidesHitbox(void) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = -0x40; gCurrentSprite.hitboxRight = 0x18; @@ -223,7 +223,7 @@ void ImagoInit(void) gCurrentSprite.xPositionSpawn = xPosition; - gCurrentSprite.status |= (SPRITE_STATUS_XFLIP | SPRITE_STATUS_IGNORE_PROJECTILES); + gCurrentSprite.status |= (SPRITE_STATUS_X_FLIP | SPRITE_STATUS_IGNORE_PROJECTILES); gCurrentSprite.drawDistanceTop = 0x20; gCurrentSprite.drawDistanceBottom = 0x28; @@ -256,7 +256,7 @@ void ImagoInit(void) gfxSlot = gCurrentSprite.spritesetGfxSlot; ramSlot = gCurrentSprite.primarySpriteRamSlot; - status = gCurrentSprite.status & SPRITE_STATUS_XFLIP; + status = gCurrentSprite.status & SPRITE_STATUS_X_FLIP; // Spawn parts SpriteSpawnSecondary(SSPRITE_IMAGO_PART, IMAGO_PART_LEFT_WING_INTERNAL, gfxSlot, ramSlot, yPosition, xPosition, status); @@ -319,7 +319,7 @@ void ImagoComingDownInit(void) if (gCurrentSprite.health == 0) { - if (!(gCurrentSprite.status & SPRITE_STATUS_XFLIP)) + if (!(gCurrentSprite.status & SPRITE_STATUS_X_FLIP)) { gCurrentSprite.pose = IMAGO_POSE_CHECK_SAMUS_AT_SUPER_MISSILE; return; @@ -335,7 +335,7 @@ void ImagoComingDownInit(void) gCurrentSprite.work0 = 0; gCurrentSprite.work1 = 0; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.work2 = 0; else { @@ -369,7 +369,7 @@ void ImagoComingDown(void) if (!(gCurrentSprite.work0++ & 0xF) && gCurrentSprite.work2 < 0xC) gCurrentSprite.work2++; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSubSpriteData1.xPosition += gCurrentSprite.work2; // Check should check ground @@ -390,7 +390,7 @@ void ImagoComingDown(void) } // Move Y - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSubSpriteData1.yPosition += 0xC; else gSubSpriteData1.yPosition += 0x14; @@ -413,7 +413,7 @@ void ImagoMoveHorizontally(void) movementStage = IMAGO_MOVEMENT_STAGE_MOVING_HORIZONTALLY; // Move X - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (!(gCurrentSprite.work0++ & 0xF) && gCurrentSprite.work2 < 0x18) gCurrentSprite.work2++; @@ -523,7 +523,7 @@ void ImagoMoveHorizontally(void) return; } - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckVerticalCollisionAtPosition(yPosition, xPosition - QUARTER_BLOCK_SIZE); if (gPreviousVerticalCollisionCheck == COLLISION_LEFT_STEEP_FLOOR_SLOPE || gPreviousVerticalCollisionCheck == COLLISION_LEFT_SLIGHT_FLOOR_SLOPE) @@ -557,7 +557,7 @@ void ImagoGoingUp(void) { // Arrived at ceiling gSubSpriteData1.yPosition = gCurrentSprite.yPositionSpawn; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Set X destination gSubSpriteData1.xPosition = gCurrentSprite.xPositionSpawn + BLOCK_SIZE * 48; @@ -572,7 +572,7 @@ void ImagoGoingUp(void) else { // Set coming down - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = IMAGO_POSE_COMING_DOWN_INIT; } } @@ -590,7 +590,7 @@ void ImagoGoingUp(void) else { // Set coming down - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = IMAGO_POSE_COMING_DOWN_INIT; } } @@ -643,7 +643,7 @@ void ImagoAttackingGoingDown(void) if (checkGround) { // Check for ground - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) movement = BLOCK_SIZE * 2 + HALF_BLOCK_SIZE; else movement = IMAGO_SIZE; @@ -688,7 +688,7 @@ void ImagoAttackingGoingUp(void) { // Arrived at ceiling gSubSpriteData1.yPosition = gCurrentSprite.yPositionSpawn; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check should attack again if (gSubSpriteData1.xPosition < gSamusData.xPosition && gCurrentSprite.health != 0) @@ -700,7 +700,7 @@ void ImagoAttackingGoingUp(void) { // Out of range or dying, set coming down gSubSpriteData1.xPosition = gCurrentSprite.xPositionSpawn + BLOCK_SIZE * 48; - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = IMAGO_POSE_COMING_DOWN_INIT; } } @@ -716,7 +716,7 @@ void ImagoAttackingGoingUp(void) { // Out of range or dying, set coming down gSubSpriteData1.xPosition = gCurrentSprite.xPositionSpawn; - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = IMAGO_POSE_COMING_DOWN_INIT; } } @@ -732,11 +732,11 @@ void ImagoAttackingGoingUp(void) void ImagoDyingInit(void) { // Spawn damaged stinger - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_IMAGO_DAMAGED_STINGER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition + HALF_BLOCK_SIZE, gCurrentSprite.xPosition + 0x1C, SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition + HALF_BLOCK_SIZE, gCurrentSprite.xPosition + 0x1C, SPRITE_STATUS_X_FLIP); } else { @@ -1057,7 +1057,7 @@ void ImagoSetEvent(void) */ void ImagoPartSetBodySidesHitbox(void) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = -0x28; gCurrentSprite.hitboxRight = 0xC0; @@ -1353,7 +1353,7 @@ void Imago(void) { if (!(gFrameCounter8Bit & 3)) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) ParticleSet(gSubSpriteData1.yPosition, gSubSpriteData1.xPosition - BLOCK_SIZE, PE_SPRITE_EXPLOSION_MEDIUM); else ParticleSet(gSubSpriteData1.yPosition, gSubSpriteData1.xPosition + BLOCK_SIZE, PE_SPRITE_EXPLOSION_MEDIUM); @@ -1387,10 +1387,10 @@ void ImagoPart(void) ramSlot = gCurrentSprite.primarySpriteRamSlot; - if (gSpriteData[ramSlot].status & SPRITE_STATUS_XFLIP) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + if (gSpriteData[ramSlot].status & SPRITE_STATUS_X_FLIP) + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; if (gSpriteData[ramSlot].health == 0) { @@ -1510,7 +1510,7 @@ void ImagoNeedle(void) break; case IMAGO_NEEDLE_POSE_MOVING: - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += 0x18; else gCurrentSprite.xPosition -= 0x18; diff --git a/src/sprites_AI/imago_cocoon.c b/src/sprites_AI/imago_cocoon.c index 96a684c2..1a971c92 100644 --- a/src/sprites_AI/imago_cocoon.c +++ b/src/sprites_AI/imago_cocoon.c @@ -273,7 +273,7 @@ void ImagoCocoonInit(void) SpriteSpawnSecondary(SSPRITE_IMAGO_COCOON_VINE, IMAGO_COCOON_PART_VINE_LEFT_RIGHT, gfxSlot, ramSlot, yPosition, xPosition, 0x0); // Spawn winged ripper - newRamSlot = SpriteSpawnSecondary(SSPRITE_WINGED_RIPPER, 0x0, gfxSlot, ramSlot, yPosition + BLOCK_SIZE * 4, xPosition, SPRITE_STATUS_XFLIP); + newRamSlot = SpriteSpawnSecondary(SSPRITE_WINGED_RIPPER, 0x0, gfxSlot, ramSlot, yPosition + BLOCK_SIZE * 4, xPosition, SPRITE_STATUS_X_FLIP); // Set destination of winged ripper gSpriteData[newRamSlot].yPositionSpawn = yPosition + BLOCK_SIZE * 6; gSpriteData[newRamSlot].xPositionSpawn = xPosition - BLOCK_SIZE * 3; @@ -813,7 +813,7 @@ void ImagoCocoonVineSpawnSpore(void) // Spore on the right yPosition = gCurrentSprite.yPosition - IMAGO_COCOON_SPORE_RIGHT_Y_OFFSET; xPosition = gCurrentSprite.xPosition + IMAGO_COCOON_SPORE_RIGHT_X_OFFSET; - status = SPRITE_STATUS_XFLIP; + status = SPRITE_STATUS_X_FLIP; } // Spawn spores @@ -881,7 +881,7 @@ void ImagoCocoonSporeSyncPosition(void) u8 ramSlot; ramSlot = gCurrentSprite.primarySpriteRamSlot; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.yPosition = gSpriteData[ramSlot].yPosition - IMAGO_COCOON_SPORE_RIGHT_Y_OFFSET; gCurrentSprite.xPosition = gSpriteData[ramSlot].xPosition + IMAGO_COCOON_SPORE_RIGHT_X_OFFSET; @@ -1197,14 +1197,14 @@ void WingedRipperMove(void) } else if (gCurrentSprite.pOam == sWingedRipperOam_TurningAround && SpriteUtilCheckEndCurrentSpriteAnim()) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.pOam = sWingedRipperOam_Moving; gCurrentSprite.currentAnimationFrame = 0x0; gCurrentSprite.animationDurationCounter = 0x0; } else - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } } else @@ -1226,8 +1226,8 @@ void WingedRipperMove(void) } else if (gCurrentSprite.pOam == sWingedRipperOam_TurningAround && SpriteUtilCheckEndCurrentSpriteAnim()) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; else { gCurrentSprite.pOam = sWingedRipperOam_Moving; diff --git a/src/sprites_AI/imago_larva.c b/src/sprites_AI/imago_larva.c index 3205c625..3c727cdb 100644 --- a/src/sprites_AI/imago_larva.c +++ b/src/sprites_AI/imago_larva.c @@ -37,7 +37,7 @@ void ImagoLarvaSyncSubSprites(struct SubSpriteData* pSub) gCurrentSprite.yPosition = pSub->yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = pSub->xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = pSub->xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -52,7 +52,7 @@ void ImagoLarvaUpdatePalette(void) u8 timer; u8 timerLimit; - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) return; gCurrentSprite.work2++; @@ -108,7 +108,7 @@ void ImagoLarvaInit(struct SubSpriteData* pSub) if (spriteId == PSPRITE_IMAGO_LARVA_LEFT) { // Left larva - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.hitboxLeft = -IMAGO_LARVA_TAIL_HITBOX; gCurrentSprite.hitboxRight = IMAGO_LARVA_HEAD_HITBOX; gCurrentSprite.pose = IMAGO_LARVA_POSE_IDLE; @@ -166,7 +166,7 @@ void ImagoLarvaInit(struct SubSpriteData* pSub) gfxSlot = gCurrentSprite.spritesetGfxSlot; ramSlot = gCurrentSprite.primarySpriteRamSlot; - status = gCurrentSprite.status & SPRITE_STATUS_XFLIP; + status = gCurrentSprite.status & SPRITE_STATUS_X_FLIP; // Spawn secondaries SpriteSpawnSecondary(SSPRITE_IMAGO_LARVA_PART, IMAGO_LARVA_PART_CLAWS, gfxSlot, ramSlot, yPosition, xPosition, status); @@ -242,7 +242,7 @@ void ImagoLarvaRetreating(struct SubSpriteData* pSub) if (gCurrentSprite.work0-- != 0) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check can move if (pSub->xPosition >= gCurrentSprite.xPositionSpawn - BLOCK_SIZE * 5) @@ -343,7 +343,7 @@ void ImagoLarvaAttacking(struct SubSpriteData* pSub) { ImagoLarvaUpdatePalette(); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { pSub->xPosition += PIXEL_SIZE * 2; if (pSub->xPosition >= gCurrentSprite.xPositionSpawn) @@ -553,7 +553,7 @@ void ImagoLarvaPartInit(struct SubSpriteData* pSub) gCurrentSprite.hitboxTop = -(BLOCK_SIZE * 3 - QUARTER_BLOCK_SIZE); gCurrentSprite.hitboxBottom = 0; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = -IMAGO_LARVA_SHELL_TAIL_HITBOX; gCurrentSprite.hitboxRight = IMAGO_LARVA_SHELL_HEAD_HITBOX; @@ -627,7 +627,7 @@ void ImagoLarvaPartShellIdle(struct SubSpriteData* pSub) else gCurrentSprite.hitboxBottom = 0; - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) { gCurrentSprite.paletteRow = gCurrentSprite.absolutePaletteRow; SPRITE_CLEAR_ISFT(gCurrentSprite); @@ -636,14 +636,14 @@ void ImagoLarvaPartShellIdle(struct SubSpriteData* pSub) } else if (pSub->xPosition < gSamusData.xPosition) { - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) { gCurrentSprite.paletteRow = gCurrentSprite.absolutePaletteRow; SPRITE_CLEAR_ISFT(gCurrentSprite); gCurrentSprite.health = UCHAR_MAX; } } - else if (SPRITE_HAS_ISFT(gCurrentSprite)) + else if (SPRITE_GET_ISFT(gCurrentSprite)) { // Hit by something, check should retreat if (!pSub->workVariable2) @@ -821,7 +821,7 @@ void ImagoLarvaPartDead(struct SubSpriteData* pSub) case IMAGO_LARVA_PART_RIGHT_DOT: yPosition += QUARTER_BLOCK_SIZE; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= BLOCK_SIZE + PIXEL_SIZE * 2; else xPosition += BLOCK_SIZE + PIXEL_SIZE * 2; @@ -829,7 +829,7 @@ void ImagoLarvaPartDead(struct SubSpriteData* pSub) case IMAGO_LARVA_PART_MIDDLE_DOT: yPosition -= QUARTER_BLOCK_SIZE; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= HALF_BLOCK_SIZE; else xPosition += HALF_BLOCK_SIZE; @@ -838,7 +838,7 @@ void ImagoLarvaPartDead(struct SubSpriteData* pSub) case IMAGO_LARVA_PART_SHELL: yPosition -= BLOCK_SIZE; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= BLOCK_SIZE * 2 - PIXEL_SIZE * 2; else xPosition += BLOCK_SIZE * 2 - PIXEL_SIZE * 2; diff --git a/src/sprites_AI/kraid.c b/src/sprites_AI/kraid.c index 7844c71f..7e26a04f 100644 --- a/src/sprites_AI/kraid.c +++ b/src/sprites_AI/kraid.c @@ -305,7 +305,7 @@ void KraidOpenCloseRoutineAndProjectileCollision(void) // Check collide with mouth interior if (projY > (spriteY - yTopOffset) && projY < (spriteY + yBottomOffset) && - pProj->direction == ACD_FORWARD && !(pProj->status & PROJ_STATUS_XFLIP)) + pProj->direction == ACD_FORWARD && !(pProj->status & PROJ_STATUS_X_FLIP)) { // Get damage and particle effect // Plasma beam isn't taken into account and is treated the same as doing nothing diff --git a/src/sprites_AI/metroid.c b/src/sprites_AI/metroid.c index dc0d4891..fff099b3 100644 --- a/src/sprites_AI/metroid.c +++ b/src/sprites_AI/metroid.c @@ -844,7 +844,7 @@ void MetroidDeath(void) yPosition = gCurrentSprite.yPosition; xPosition = gCurrentSprite.xPosition; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) yPosition += rng; else yPosition -= rng; @@ -927,7 +927,7 @@ void Metroid(void) } else { - if (SPRITE_HAS_ISFT(gCurrentSprite) == 2) + if (SPRITE_GET_ISFT(gCurrentSprite) == 2) { if (gCurrentSprite.health == gCurrentSprite.yPositionSpawn) { @@ -1028,7 +1028,7 @@ void MetroidShell(void) yPosition = gCurrentSprite.yPosition; xPosition = gCurrentSprite.xPosition; - if (gSpriteData[slot].status & SPRITE_STATUS_XFLIP) + if (gSpriteData[slot].status & SPRITE_STATUS_X_FLIP) yPosition -= rng; else yPosition += rng; diff --git a/src/sprites_AI/multiviola.c b/src/sprites_AI/multiviola.c index b51ebc32..dd775b1e 100644 --- a/src/sprites_AI/multiviola.c +++ b/src/sprites_AI/multiviola.c @@ -48,7 +48,7 @@ void MultiviolaMove(void) isBouncing = FALSE; yMovement = 0x3; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Move right SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.xPosition + gCurrentSprite.hitboxRight); @@ -57,7 +57,7 @@ void MultiviolaMove(void) else { // Bounce X - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; isBouncing++; } } @@ -70,7 +70,7 @@ void MultiviolaMove(void) else { // Bounce X - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; isBouncing++; } } diff --git a/src/sprites_AI/parasite.c b/src/sprites_AI/parasite.c index 1d357cf2..56ef29d1 100644 --- a/src/sprites_AI/parasite.c +++ b/src/sprites_AI/parasite.c @@ -146,9 +146,9 @@ void ParasiteGrabSamus(struct SpriteData* pSprite) // Set vertical direction if (pSprite->yPosition > gSamusData.yPosition - BLOCK_SIZE) - pSprite->status &= ~SPRITE_STATUS_YFLIP; + pSprite->status &= ~SPRITE_STATUS_Y_FLIP; else - pSprite->status |= SPRITE_STATUS_YFLIP; + pSprite->status |= SPRITE_STATUS_Y_FLIP; } /** @@ -179,11 +179,11 @@ void ParasiteSamusGrabbed(struct SpriteData* pSprite) gParasiteRelated = 0x5A; // Check update vertical direction - if (pSprite->status & SPRITE_STATUS_YFLIP) + if (pSprite->status & SPRITE_STATUS_Y_FLIP) { if (gSamusData.yPosition + gSamusPhysics.drawDistanceBottom < pSprite->yPosition + 0x8) { - pSprite->status &= ~SPRITE_STATUS_YFLIP; + pSprite->status &= ~SPRITE_STATUS_Y_FLIP; pSprite->work0 = gSpriteRng; } } @@ -191,17 +191,17 @@ void ParasiteSamusGrabbed(struct SpriteData* pSprite) { if (gSamusData.yPosition + gSamusPhysics.drawDistanceTop > pSprite->yPosition - 0x8) { - pSprite->status |= SPRITE_STATUS_YFLIP; + pSprite->status |= SPRITE_STATUS_Y_FLIP; pSprite->work0 = gSpriteRng; } } // Check update horizontal direction - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (gSamusData.xPosition + gSamusPhysics.drawDistanceRightOffset < pSprite->xPosition + 0x8) { - pSprite->status &= ~SPRITE_STATUS_XFLIP; + pSprite->status &= ~SPRITE_STATUS_X_FLIP; pSprite->work0 = gSpriteRng; } } @@ -209,7 +209,7 @@ void ParasiteSamusGrabbed(struct SpriteData* pSprite) { if (gSamusData.xPosition + gSamusPhysics.drawDistanceLeftOffset > pSprite->xPosition - 0x8) { - pSprite->status |= SPRITE_STATUS_XFLIP; + pSprite->status |= SPRITE_STATUS_X_FLIP; pSprite->work0 = gSpriteRng; } } @@ -218,7 +218,7 @@ void ParasiteSamusGrabbed(struct SpriteData* pSprite) if (pSprite->work0 == 0x0) { // Update Y offset - if (pSprite->status & SPRITE_STATUS_YFLIP) + if (pSprite->status & SPRITE_STATUS_Y_FLIP) { if (gSpriteRng != 0x0) pSprite->yPositionSpawn++; @@ -230,7 +230,7 @@ void ParasiteSamusGrabbed(struct SpriteData* pSprite) } // Update X offset - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (gSpriteRng != pSprite->primarySpriteRamSlot) pSprite->xPositionSpawn++; @@ -268,7 +268,7 @@ void ParasiteExpulsedInit(struct SpriteData* pSprite) pSprite->animationDurationCounter = 0x0; pSprite->work3 = 0x8; - pSprite->status &= ~SPRITE_STATUS_YFLIP; + pSprite->status &= ~SPRITE_STATUS_Y_FLIP; } /** @@ -300,7 +300,7 @@ void ParasiteExpulsedUp(struct SpriteData* pSprite) pSprite->yPosition = (yPosition & BLOCK_POSITION_FLAG) + (BLOCK_SIZE + QUARTER_BLOCK_SIZE); // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(SpriteUtilGetCollisionAtPosition(yPosition, xPosition + QUARTER_BLOCK_SIZE) & 0xF0)) pSprite->xPosition += pSprite->work2; @@ -341,7 +341,7 @@ void ParasiteMultipleExpulsedUp(struct SpriteData* pSprite) pSprite->yPosition = (yPosition & BLOCK_POSITION_FLAG) + (BLOCK_SIZE + QUARTER_BLOCK_SIZE); // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(ClipdataProcess(yPosition, xPosition + QUARTER_BLOCK_SIZE) & CLIPDATA_TYPE_SOLID_FLAG)) pSprite->xPosition += pSprite->work2; @@ -399,7 +399,7 @@ void ParasiteExpulsedDown(struct SpriteData* pSprite) } else { - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(SpriteUtilGetCollisionAtPosition(yPosition, xPosition + QUARTER_BLOCK_SIZE) & 0xF0)) pSprite->xPosition += pSprite->work2; @@ -456,7 +456,7 @@ void ParasiteMultipleExpulsedDown(struct SpriteData* pSprite) return; } - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(ClipdataProcess(yPosition, xPosition + QUARTER_BLOCK_SIZE) & CLIPDATA_TYPE_SOLID_FLAG)) pSprite->xPosition += pSprite->work2; @@ -501,7 +501,7 @@ void ParasiteJumpingUp(struct SpriteData* pSprite) pSprite->yPosition = (yPosition & BLOCK_POSITION_FLAG) + BLOCK_SIZE + QUARTER_BLOCK_SIZE; // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(SpriteUtilGetCollisionAtPosition(yPosition, xPosition + QUARTER_BLOCK_SIZE) & 0xF0)) pSprite->xPosition += pSprite->work2; @@ -547,7 +547,7 @@ void ParasiteMultipleJumpingUp(struct SpriteData* pSprite) pSprite->yPosition = (yPosition & BLOCK_POSITION_FLAG) + BLOCK_SIZE + QUARTER_BLOCK_SIZE; // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(ClipdataProcess(yPosition, xPosition + QUARTER_BLOCK_SIZE) & CLIPDATA_TYPE_SOLID_FLAG)) pSprite->xPosition += pSprite->work2; @@ -603,7 +603,7 @@ void ParasiteJumpingDown(struct SpriteData* pSprite) else { // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(SpriteUtilGetCollisionAtPosition(yPosition, xPosition + QUARTER_BLOCK_SIZE) & 0xF0)) pSprite->xPosition += pSprite->work2; @@ -658,7 +658,7 @@ void ParasiteMultipleJumpingDown(struct SpriteData* pSprite) else { // Update X position - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (!(ClipdataProcess(yPosition, xPosition + QUARTER_BLOCK_SIZE) & CLIPDATA_TYPE_SOLID_FLAG)) pSprite->xPosition += pSprite->work2; @@ -772,7 +772,7 @@ void ParasiteIdle(struct SpriteData* pSprite) velocity = timer; - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (gPreviousVerticalCollisionCheck & 0xF0 && SpriteUtilGetCollisionAtPosition(pSprite->yPosition - QUARTER_BLOCK_SIZE, pSprite->xPosition + QUARTER_BLOCK_SIZE) == COLLISION_SOLID) pSprite->pose = PARASITE_POSE_TURNING_AROUND_INIT; @@ -878,7 +878,7 @@ void ParasiteMultipleIdle(struct SpriteData* pSprite) else velocity = pSprite->work2; - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { clipdata = ClipdataProcess(pSprite->yPosition - QUARTER_BLOCK_SIZE, pSprite->xPosition + QUARTER_BLOCK_SIZE); if (clipdata & CLIPDATA_TYPE_SOLID_FLAG) @@ -921,7 +921,7 @@ void ParasiteTurningAroundFirstPart(struct SpriteData* pSprite) { if (SpriteUtilCheckEndCurrentSpriteAnim()) { - pSprite->status ^= SPRITE_STATUS_XFLIP; + pSprite->status ^= SPRITE_STATUS_X_FLIP; pSprite->pose = PARASITE_POSE_TURNING_AROUND_SECOND_PART; } } @@ -1056,7 +1056,7 @@ void ParasiteFalling(struct SpriteData* pSprite) */ void ParasiteDyingInit(struct SpriteData* pSprite) { - pSprite->status &= ~(SPRITE_STATUS_UNKNOWN_80 | SPRITE_STATUS_YFLIP); + pSprite->status &= ~(SPRITE_STATUS_UNKNOWN_80 | SPRITE_STATUS_Y_FLIP); pSprite->pose = PARASITE_POSE_DYING; pSprite->pOam = sParasiteOAM_Dying; @@ -1140,9 +1140,9 @@ void ParasiteGrabGeron(struct SpriteData* pSprite) // Set vertical direction if (pSprite->yPosition > gSpriteData[ramSlot].yPosition - (BLOCK_SIZE + HALF_BLOCK_SIZE)) - pSprite->status &= ~SPRITE_STATUS_YFLIP; + pSprite->status &= ~SPRITE_STATUS_Y_FLIP; else - pSprite->status |= SPRITE_STATUS_YFLIP; + pSprite->status |= SPRITE_STATUS_Y_FLIP; } /** @@ -1178,11 +1178,11 @@ void ParasiteGeronGrabbed(struct SpriteData* pSprite) gParasiteRelated = 0x5A; // Check update vertical direction - if (pSprite->status & SPRITE_STATUS_YFLIP) + if (pSprite->status & SPRITE_STATUS_Y_FLIP) { if (gSpriteData[ramSlot].yPosition < pSprite->yPosition + 0x8) { - pSprite->status &= ~SPRITE_STATUS_YFLIP; + pSprite->status &= ~SPRITE_STATUS_Y_FLIP; pSprite->work0 = gSpriteRng; } } @@ -1190,17 +1190,17 @@ void ParasiteGeronGrabbed(struct SpriteData* pSprite) { if (gSpriteData[ramSlot].yPosition + gSpriteData[ramSlot].hitboxTop > pSprite->yPosition - 0x8) { - pSprite->status |= SPRITE_STATUS_YFLIP; + pSprite->status |= SPRITE_STATUS_Y_FLIP; pSprite->work0 = gSpriteRng; } } // Check update horizontal direction - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (gSpriteData[ramSlot].xPosition + gSpriteData[ramSlot].hitboxRight < pSprite->xPosition + 0x8) { - pSprite->status &= ~SPRITE_STATUS_XFLIP; + pSprite->status &= ~SPRITE_STATUS_X_FLIP; pSprite->work0 = gSpriteRng; } } @@ -1208,7 +1208,7 @@ void ParasiteGeronGrabbed(struct SpriteData* pSprite) { if (gSpriteData[ramSlot].xPosition + gSpriteData[ramSlot].hitboxLeft > pSprite->xPosition - 0x8) { - pSprite->status |= SPRITE_STATUS_XFLIP; + pSprite->status |= SPRITE_STATUS_X_FLIP; pSprite->work0 = gSpriteRng; } } @@ -1217,7 +1217,7 @@ void ParasiteGeronGrabbed(struct SpriteData* pSprite) if (pSprite->work0 == 0x0) { // Update Y offset - if (pSprite->status & SPRITE_STATUS_YFLIP) + if (pSprite->status & SPRITE_STATUS_Y_FLIP) { if (gSpriteRng != 0x0) pSprite->yPositionSpawn++; @@ -1229,7 +1229,7 @@ void ParasiteGeronGrabbed(struct SpriteData* pSprite) } // Update X offset - if (pSprite->status & SPRITE_STATUS_XFLIP) + if (pSprite->status & SPRITE_STATUS_X_FLIP) { if (gSpriteRng != pSprite->primarySpriteRamSlot) pSprite->xPositionSpawn++; diff --git a/src/sprites_AI/piston.c b/src/sprites_AI/piston.c index 0a5972d0..8a88d910 100644 --- a/src/sprites_AI/piston.c +++ b/src/sprites_AI/piston.c @@ -172,7 +172,7 @@ void PistonCheckProjectile(void) { if (gCurrentSprite.status & SPRITE_STATUS_SAMUS_COLLIDING) { - if (SPRITE_HAS_ISFT(gCurrentSprite) == 0x10) + if (SPRITE_GET_ISFT(gCurrentSprite) == 0x10) { // Projectile detected SPRITE_CLEAR_ISFT(gCurrentSprite); diff --git a/src/sprites_AI/ridley.c b/src/sprites_AI/ridley.c index 41612fbe..6edee0eb 100644 --- a/src/sprites_AI/ridley.c +++ b/src/sprites_AI/ridley.c @@ -45,7 +45,7 @@ void RidleySyncSubSprites(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -78,7 +78,7 @@ void RidleyTailSyncSubSprites(void) gCurrentSprite.yPosition = gSubSpriteData2.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData2.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData2.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -150,7 +150,7 @@ void RidleyUpdateHealth(void) break; default: - if (SPRITE_HAS_ISFT(gCurrentSprite) == 0x10) + if (SPRITE_GET_ISFT(gCurrentSprite) == 0x10) SoundPlayNotAlreadyPlaying(0x1ED); if (gCurrentSprite.health == 0 && gSubSpriteData1.health != 0) @@ -269,7 +269,7 @@ void RidleyPartClawIdle(u8 ramSlot) updatePosition++; yPosition = gCurrentSprite.yPosition + BLOCK_SIZE * 4; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE * 3 - QUARTER_BLOCK_SIZE); else xPosition = gCurrentSprite.xPosition - (BLOCK_SIZE * 3 - QUARTER_BLOCK_SIZE); @@ -282,7 +282,7 @@ void RidleyPartClawIdle(u8 ramSlot) { case 0: yPosition = gCurrentSprite.yPosition + 0xEC; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + 0xB8; else xPosition = gCurrentSprite.xPosition - 0xB8; @@ -290,7 +290,7 @@ void RidleyPartClawIdle(u8 ramSlot) case 1: yPosition = gCurrentSprite.yPosition + 0xDC; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + 0xD0; else xPosition = gCurrentSprite.xPosition - 0xD0; @@ -298,7 +298,7 @@ void RidleyPartClawIdle(u8 ramSlot) case 2: yPosition = gCurrentSprite.yPosition + 0xC0; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + 0xEC; else xPosition = gCurrentSprite.xPosition - 0xEC; @@ -306,7 +306,7 @@ void RidleyPartClawIdle(u8 ramSlot) case 3: yPosition = gCurrentSprite.yPosition + 0x9C; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE * 4 - QUARTER_BLOCK_SIZE); else xPosition = gCurrentSprite.xPosition - (BLOCK_SIZE * 4 - QUARTER_BLOCK_SIZE); @@ -314,7 +314,7 @@ void RidleyPartClawIdle(u8 ramSlot) case 4: yPosition = gCurrentSprite.yPosition + 0x7C; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE * 4 - QUARTER_BLOCK_SIZE); else xPosition = gCurrentSprite.xPosition - (BLOCK_SIZE * 4 - QUARTER_BLOCK_SIZE); @@ -329,7 +329,7 @@ void RidleyPartClawIdle(u8 ramSlot) yPosition = gCurrentSprite.yPosition + BLOCK_SIZE + HALF_BLOCK_SIZE; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition = gCurrentSprite.xPosition + BLOCK_SIZE * 4; else xPosition = gCurrentSprite.xPosition - BLOCK_SIZE * 4; @@ -434,7 +434,7 @@ void RidleySpawnAscendingFireball(u16 timer) u16 xPosition; u16 yPosition; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { status = SPRITE_STATUS_FACING_RIGHT; xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE * 2 - QUARTER_BLOCK_SIZE); @@ -528,7 +528,7 @@ void RidleyInit(void) gSubSpriteData1.currentAnimationFrame = 0; gCurrentSprite.pose = RIDLEY_POSE_CHECK_PLAY_CUTSCENE; - gCurrentSprite.status |= SPRITE_STATUS_NOT_DRAWN | SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT | SPRITE_STATUS_IGNORE_PROJECTILES; + gCurrentSprite.status |= SPRITE_STATUS_NOT_DRAWN | SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT | SPRITE_STATUS_IGNORE_PROJECTILES; gCurrentSprite.roomSlot = RIDLEY_PART_BODY; yPosition = gSubSpriteData1.yPosition; @@ -538,47 +538,47 @@ void RidleyInit(void) // Spawn left wing SpriteSpawnSecondary(SSPRITE_RIDLEY_PART, RIDLEY_PART_LEFT_WING, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); // Spawn head gSubSpriteData1.workVariable4 = SpriteSpawnSecondary(SSPRITE_RIDLEY_PART, RIDLEY_PART_HEAD, - gfxSlot, ramSlot, yPosition, xPosition, SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, SPRITE_STATUS_X_FLIP); // Spawn tail SpriteSpawnSecondary(SSPRITE_RIDLEY_PART, RIDLEY_PART_TAIL, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_TIP, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_LEFT_MOST, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_LEFT_MIDDLE, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_LEFT_RIGHT, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_RIGHT_MOST, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_RIGHT_MIDDLE, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_RIGHT_LEFT, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_RIDLEY_TAIL, RIDLEY_TAIL_PART_BODY_ATTACHMENT, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); // Spawn claw gSubSpriteData1.workVariable5 = SpriteSpawnSecondary(SSPRITE_RIDLEY_PART, RIDLEY_PART_CLAW, - gfxSlot, ramSlot, yPosition, xPosition, SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, SPRITE_STATUS_X_FLIP); // Spawn right wing SpriteSpawnSecondary(SSPRITE_RIDLEY_PART, RIDLEY_PART_RIGHT_WING, gfxSlot, ramSlot, - yPosition, xPosition, SPRITE_STATUS_XFLIP); + yPosition, xPosition, SPRITE_STATUS_X_FLIP); } /** @@ -840,9 +840,9 @@ void RidleySpawning(void) gCurrentSprite.work1++; if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } break; @@ -919,9 +919,9 @@ void RidleySpawning(void) if (--gCurrentSprite.work2 == 0) { if (gSubSpriteData1.xPosition < gSamusData.xPosition) - gCurrentSprite.status |= (SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT); + gCurrentSprite.status |= (SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT); else - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT); gCurrentSprite.work1 = RIDLEY_SPAWNING_ACTION_GOING_DOWN; } @@ -1076,7 +1076,7 @@ void RidleyIdle(void) { if (MOD_AND(gSpriteData[clawSlot].work0++, 16) == 0) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_RIDLEY_FIREBALL, RIDLEY_FIREBALL_PART_SAMUS_GRABBED, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, @@ -1373,9 +1373,9 @@ void RidleyTurningAroundFirstPart(void) // Flip gCurrentSprite.status ^= SPRITE_STATUS_FACING_RIGHT; if(gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } } @@ -1715,7 +1715,7 @@ void RidleyBigFireballsAttack(void) } else if (gCurrentSprite.work0 == 0x14) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { status = SPRITE_STATUS_FACING_RIGHT; xPosition = gCurrentSprite.xPosition + (BLOCK_SIZE * 2 - QUARTER_BLOCK_SIZE); @@ -1993,7 +1993,7 @@ void RidleyPartSyncPalette(u8 ramSlot) */ void RidleyPartClawUpdateSidesHitbox(void) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = 0xA0; gCurrentSprite.hitboxRight = 0xE0; @@ -2199,7 +2199,7 @@ void RidleyTailChargingAttack(void) gSpriteData[ramSlot].pose = RIDLEY_POSE_TAIL_ATTACKS; // Flip and check do diagonal attack or not - if (gSpriteData[ramSlot].status & SPRITE_STATUS_XFLIP) + if (gSpriteData[ramSlot].status & SPRITE_STATUS_X_FLIP) { if (gSubSpriteData1.xPosition - BLOCK_SIZE * 2 > gSamusData.xPosition) gSpriteData[ramSlot].status &= ~SPRITE_STATUS_FACING_RIGHT; @@ -2443,7 +2443,7 @@ void RidleyTailCheckBackToIdleAnimEnded(void) gCurrentSprite.pose = RIDLEY_TAIL_POSE_IDLE; gSpriteData[ramSlot].pose = RIDLEY_POSE_IDLE_INIT; - if (gSpriteData[ramSlot].status & SPRITE_STATUS_XFLIP) + if (gSpriteData[ramSlot].status & SPRITE_STATUS_X_FLIP) gSpriteData[ramSlot].status |= SPRITE_STATUS_FACING_RIGHT; else gSpriteData[ramSlot].status &= ~SPRITE_STATUS_FACING_RIGHT; @@ -2526,7 +2526,7 @@ void RidleyFireballInit(void) gCurrentSprite.rotation = 0; if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; // Set pattern if (gCurrentSprite.roomSlot == RIDLEY_FIREBALL_PART_SAMUS_GRABBED) @@ -2785,7 +2785,7 @@ void Ridley(void) } } - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = -0x60; gCurrentSprite.hitboxRight = 0x80; @@ -2842,10 +2842,10 @@ void RidleyTail(void) } // Sync flip - if (gSpriteData[ramSlot].status & SPRITE_STATUS_XFLIP) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + if (gSpriteData[ramSlot].status & SPRITE_STATUS_X_FLIP) + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; if (gCurrentSprite.roomSlot != RIDLEY_TAIL_PART_TIP) { @@ -2976,10 +2976,10 @@ void RidleyPart(void) } // Sync flip - if (gSpriteData[ramSlot].status & SPRITE_STATUS_XFLIP) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + if (gSpriteData[ramSlot].status & SPRITE_STATUS_X_FLIP) + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; if (part != RIDLEY_PART_TAIL && gCurrentSprite.status & SPRITE_STATUS_NOT_DRAWN) { diff --git a/src/sprites_AI/ripper.c b/src/sprites_AI/ripper.c index 083df0a2..9fff84f9 100644 --- a/src/sprites_AI/ripper.c +++ b/src/sprites_AI/ripper.c @@ -65,7 +65,7 @@ void RipperMove(void) else speed = 2; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Move right SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, @@ -110,7 +110,7 @@ void RipperTurnAroundFirstPart(void) { if (SpriteUtilCheckEndCurrentSpriteAnim()) { - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = RIPPER_POSE_TURNING_AROUND_SECOND_PART; gCurrentSprite.pOam = sRipperOam_TurningAroundPart2; diff --git a/src/sprites_AI/ripper2.c b/src/sprites_AI/ripper2.c index 1013e84c..753a54f5 100644 --- a/src/sprites_AI/ripper2.c +++ b/src/sprites_AI/ripper2.c @@ -58,7 +58,7 @@ void Ripper2MovingInit(void) */ void Ripper2Move(void) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - QUARTER_BLOCK_SIZE, gCurrentSprite.xPosition + (HALF_BLOCK_SIZE + PIXEL_SIZE * 3)); @@ -104,7 +104,7 @@ void Ripper2TurnAroundPart1(void) { if (SpriteUtilCheckEndCurrentSpriteAnim()) { - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; gCurrentSprite.pose = RIPPER2_POSE_TURNING_AROUND_SECOND_PART; gCurrentSprite.pOam = sRipper2Oam_TurningAroundPart2; diff --git a/src/sprites_AI/ruins_test.c b/src/sprites_AI/ruins_test.c index 168141a4..01fe52f8 100644 --- a/src/sprites_AI/ruins_test.c +++ b/src/sprites_AI/ruins_test.c @@ -941,7 +941,7 @@ void RuinsTestMoveToCenter(void) u16 spriteY; u16 targetY; - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) return; targetY = gBossWork.work1; @@ -2344,7 +2344,7 @@ void RuinsTestLightning(void) // Spawn right lightning SpriteSpawnSecondary(SSPRITE_RUINS_TEST_LIGHTNING, RUINS_TEST_LIGHTNING_PART_GROUND_RIGHT, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, - gCurrentSprite.yPosition, gCurrentSprite.xPosition, SPRITE_STATUS_XFLIP); + gCurrentSprite.yPosition, gCurrentSprite.xPosition, SPRITE_STATUS_X_FLIP); } break; @@ -2356,7 +2356,7 @@ void RuinsTestLightning(void) } // Move - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += velocity; else gCurrentSprite.xPosition -= velocity; @@ -2376,7 +2376,7 @@ void RuinsTestLightning(void) gCurrentSprite.pose = RUINS_TEST_LIGHTNING_POSE_ON_GROUND_VERTICAL; // Update position - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; else { diff --git a/src/sprites_AI/searchlight_eye.c b/src/sprites_AI/searchlight_eye.c index 073342aa..db4754a3 100644 --- a/src/sprites_AI/searchlight_eye.c +++ b/src/sprites_AI/searchlight_eye.c @@ -55,7 +55,7 @@ void SearchlightEyeInit(void) } else { - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; } @@ -79,10 +79,10 @@ void SearchlightEyeInit(void) ramSlot = gCurrentSprite.primarySpriteRamSlot; // Spawn beam - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_SEARCHLIGHT_EYE_BEAM2, 0, gfxSlot, - ramSlot, yPosition, xPosition + SEARCHLIGHT_EYE_BEAM_SIZE, SPRITE_STATUS_XFLIP); + ramSlot, yPosition, xPosition + SEARCHLIGHT_EYE_BEAM_SIZE, SPRITE_STATUS_X_FLIP); } else { @@ -104,7 +104,7 @@ void SearchlightEyeMove(void) yPosition = gCurrentSprite.yPosition; xPosition = gCurrentSprite.xPosition; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= QUARTER_BLOCK_SIZE; else xPosition += QUARTER_BLOCK_SIZE; @@ -204,7 +204,7 @@ void SearchlightEyeShoot(void) if (gCurrentSprite.status & SPRITE_STATUS_ONSCREEN) { // Custom and for some reason - status = gCurrentSprite.status & SPRITE_STATUS_XFLIP ? SPRITE_STATUS_XFLIP : 0; + status = gCurrentSprite.status & SPRITE_STATUS_X_FLIP ? SPRITE_STATUS_X_FLIP : 0; // Spawn beam SpriteSpawnSecondary(SSPRITE_SEARCHLIGHT_EYE_PROJECTILE, 0, @@ -278,7 +278,7 @@ void SearchlightEyeBeamDetectSamus(void) foundBlock = FALSE; // Check for block - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // X start xPosition = gCurrentSprite.xPosition + -(BLOCK_SIZE * 6 + HALF_BLOCK_SIZE - PIXEL_SIZE); @@ -453,7 +453,7 @@ void SearchlightEyeProjectile(void) gCurrentSprite.drawOrder = 3; gCurrentSprite.bgPriority = MOD_AND(gIoRegistersBackup.BG1CNT, 4); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = 0; gCurrentSprite.hitboxRight = (QUARTER_BLOCK_SIZE + EIGHTH_BLOCK_SIZE); @@ -468,7 +468,7 @@ void SearchlightEyeProjectile(void) SoundPlay(0x26D); case 9: - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += PIXEL_SIZE * 3; else gCurrentSprite.xPosition -= PIXEL_SIZE * 3; diff --git a/src/sprites_AI/sidehopper.c b/src/sprites_AI/sidehopper.c index 3791e46c..21275559 100644 --- a/src/sprites_AI/sidehopper.c +++ b/src/sprites_AI/sidehopper.c @@ -41,14 +41,14 @@ void SidehopperInit(void) if (gPreviousCollisionCheck & 0xF0) { - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.yPosition -= BLOCK_SIZE; } gCurrentSprite.work0 = 0x0; gCurrentSprite.pose = SIDEHOPPER_POSE_IDLE; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { gCurrentSprite.drawDistanceTop = 0x8; gCurrentSprite.drawDistanceBottom = 0x28; @@ -107,7 +107,7 @@ void SidehopperJumpingInit(void) else gCurrentSprite.work2 = FALSE; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) gCurrentSprite.hitboxBottom = 0x70; else gCurrentSprite.hitboxTop = -0x70; @@ -128,7 +128,7 @@ void SidehopperLandingInit(void) gCurrentSprite.currentAnimationFrame = 0x0; gCurrentSprite.pOam = sSidehopperOAM_Landing; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) gCurrentSprite.hitboxBottom = 0x5C; else gCurrentSprite.hitboxTop = -0x5C; @@ -629,7 +629,7 @@ void SidehopperDeath(void) { u16 yPosition; - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) yPosition = gCurrentSprite.yPosition + 0x34; else yPosition = gCurrentSprite.yPosition - 0x34; @@ -667,14 +667,14 @@ void Sidehopper(void) SidehopperJumpWarningInit(); case SIDEHOPPER_POSE_JUMP_WARNING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) SidehopperJumpWarningCeiling(); else SidehopperJumpWarningGround(); break; case SIDEHOPPER_POSE_JUMPING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) SidehopperJumpingCeiling(); else SidehopperJumpingGround(); @@ -685,14 +685,14 @@ void Sidehopper(void) break; case SIDEHOPPER_POSE_IDLE: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) SidehopperIdleCeiling(); else SidehopperIdleGround(); break; case SIDEHOPPER_POSE_FALLING: - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) SidehopperFallingCeiling(); else SidehopperFallingGround(); diff --git a/src/sprites_AI/skree.c b/src/sprites_AI/skree.c index 9c42789c..adaf2817 100644 --- a/src/sprites_AI/skree.c +++ b/src/sprites_AI/skree.c @@ -225,13 +225,13 @@ void SkreeCrashGround(void) yPosition - (PIXEL_SIZE * 2), xPosition, 0); SpriteSpawnSecondary(spriteId, SKREE_EXPLOSION_PART_GOING_UP, gfxSlot, ramSlot, - yPosition - (PIXEL_SIZE * 2), xPosition, SPRITE_STATUS_XFLIP); + yPosition - (PIXEL_SIZE * 2), xPosition, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(spriteId, SKREE_EXPLOSION_PART_GOING_DOWN, gfxSlot, ramSlot, yPosition + (PIXEL_SIZE * 2), xPosition - (PIXEL_SIZE * 3), 0); SpriteSpawnSecondary(spriteId, SKREE_EXPLOSION_PART_GOING_DOWN, gfxSlot, ramSlot, - yPosition + (PIXEL_SIZE * 2), xPosition + (PIXEL_SIZE * 3), SPRITE_STATUS_XFLIP); + yPosition + (PIXEL_SIZE * 2), xPosition + (PIXEL_SIZE * 3), SPRITE_STATUS_X_FLIP); gCurrentSprite.status = 0; @@ -288,7 +288,7 @@ void SkreeExplosionMove(void) if (gCurrentSprite.currentAnimationFrame > 1) gCurrentSprite.ignoreSamusCollisionTimer = DELTA_TIME; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.xPosition += PIXEL_SIZE * 2; gCurrentSprite.rotation += PI / 4; diff --git a/src/sprites_AI/skultera.c b/src/sprites_AI/skultera.c index 45bf3ad8..5fa70670 100644 --- a/src/sprites_AI/skultera.c +++ b/src/sprites_AI/skultera.c @@ -19,7 +19,7 @@ */ void SkulteraSetSidesHitbox(void) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxLeft = -SKULTERA_TAIL_HITBOX; gCurrentSprite.hitboxRight = SKULTERA_HEAD_HITBOX; @@ -42,7 +42,7 @@ u8 SkulteraXMovement(u16 movement) s16 negMovement; negMovement = movement; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition + (QUARTER_BLOCK_SIZE * 3 + PIXEL_SIZE * 2)); @@ -136,7 +136,7 @@ void SkulteraMoving(void) else { // Check out of movement territory, if out set turning around - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.xPositionSpawn + SKULTERA_TERRITORY_RANGE < gCurrentSprite.xPosition) gCurrentSprite.pose = SKULTERA_POSE_TURNING_AROUND; @@ -160,7 +160,7 @@ void SkulteraMoving(void) nslr = SpriteUtilCheckSamusNearSpriteLeftRight(BLOCK_SIZE * 3, BLOCK_SIZE * 5); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check on right if (nslr == NSLR_RIGHT) @@ -241,7 +241,7 @@ void SkulteraChasingSamus(void) nslr = SpriteUtilCheckSamusNearSpriteLeftRight(BLOCK_SIZE * 3, BLOCK_SIZE * 5); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (nslr != NSLR_RIGHT) { @@ -291,7 +291,7 @@ void SkulteraCheckTurningAroundAnimEnded(void) SkulteraIdleInit(); // Flip and set hitbox - gCurrentSprite.status ^= SPRITE_STATUS_XFLIP; + gCurrentSprite.status ^= SPRITE_STATUS_X_FLIP; SkulteraSetSidesHitbox(); } diff --git a/src/sprites_AI/sova.c b/src/sprites_AI/sova.c index 31671c71..068abca0 100644 --- a/src/sprites_AI/sova.c +++ b/src/sprites_AI/sova.c @@ -25,7 +25,7 @@ u8 SovaCheckCollidingWithAir(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition); if (gPreviousCollisionCheck == COLLISION_AIR) @@ -81,7 +81,7 @@ void SovaUpdateHitbox(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxTop = -0x1C; gCurrentSprite.hitboxBottom = 0x1C; @@ -136,9 +136,9 @@ void SovaSetCrawlingOAM(void) gCurrentSprite.pOam = sSovaOam_OnGround; if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.animationDurationCounter = 0; @@ -184,7 +184,7 @@ void SovaInit(void) if (gPreviousCollisionCheck & 0xF0) { gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.yPosition -= HALF_BLOCK_SIZE; gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } @@ -200,9 +200,9 @@ void SovaInit(void) if (!(gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN)) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.samusCollision = SSC_HURTS_SAMUS; @@ -282,7 +282,7 @@ void SovaMove(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { @@ -439,9 +439,9 @@ void SovaMove(void) gCurrentSprite.currentAnimationFrame = 0; if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) @@ -500,7 +500,7 @@ void SovaMove(void) gCurrentSprite.pOam = sSovaOam_WalkingOnRightSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } gCurrentSprite.xPosition += speed; @@ -512,7 +512,7 @@ void SovaMove(void) gCurrentSprite.pOam = sSovaOam_WalkingOnLeftSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } gCurrentSprite.xPosition += (speed * 2 / 3); @@ -527,7 +527,7 @@ void SovaMove(void) gCurrentSprite.pOam = sSovaOam_WalkingOnRightSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.xPosition -= speed; @@ -539,7 +539,7 @@ void SovaMove(void) gCurrentSprite.pOam = sSovaOam_WalkingOnLeftSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.xPosition -= (speed * 2 / 3); @@ -571,8 +571,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningEdgeLeft; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_TOP_RIGHT_EDGE: @@ -581,8 +581,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningEdgeLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_BOTTOM_RIGHT_EDGE: @@ -591,8 +591,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningCornerRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_TOP_RIGHT_CORNER: @@ -601,8 +601,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningCornerRight; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_TOP_LEFT_EDGE: @@ -611,8 +611,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_BOTTOM_RIGHT_CORNER: @@ -621,8 +621,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_TOP_LEFT_CORNER: @@ -631,8 +631,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case SOVA_TURNING_DIRECTION_BOTTOM_LEFT_EDGE: @@ -641,8 +641,8 @@ void SovaTurningAroundInit(void) else gCurrentSprite.pOam = sSovaOam_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; default: @@ -660,7 +660,7 @@ void SovaTurningAround(void) return; gCurrentSprite.pose = SOVA_POSE_IDLE; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; gCurrentSprite.work2 = FALSE; switch (gCurrentSprite.work1) @@ -672,7 +672,7 @@ void SovaTurningAround(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -684,7 +684,7 @@ void SovaTurningAround(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -695,7 +695,7 @@ void SovaTurningAround(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -707,7 +707,7 @@ void SovaTurningAround(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -717,12 +717,12 @@ void SovaTurningAround(void) gCurrentSprite.xPosition += 0x1C; gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; gCurrentSprite.yPosition += BLOCK_SIZE; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } else { gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; @@ -734,12 +734,12 @@ void SovaTurningAround(void) gCurrentSprite.xPosition -= 0x1C; gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; gCurrentSprite.yPosition += BLOCK_SIZE; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } else { gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; @@ -750,10 +750,10 @@ void SovaTurningAround(void) { gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; gCurrentSprite.xPosition += 0x18; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; gCurrentSprite.work2 = TRUE; @@ -764,10 +764,10 @@ void SovaTurningAround(void) { gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; gCurrentSprite.xPosition -= 0x1C; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; gCurrentSprite.work2 = TRUE; @@ -796,9 +796,9 @@ void SovaLandingInit(void) SpriteUtilChooseRandomXDirection(); if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } /** @@ -821,7 +821,7 @@ void SovaFallingInit(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; else gCurrentSprite.xPosition += HALF_BLOCK_SIZE; @@ -835,7 +835,7 @@ void SovaFallingInit(void) gCurrentSprite.pose = SOVA_POSE_FALLING; gCurrentSprite.work3 = 0; gCurrentSprite.work2 = 0; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP | SPRITE_STATUS_FACING_DOWN); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP | SPRITE_STATUS_FACING_DOWN); SovaUpdateHitbox(); @@ -895,7 +895,7 @@ void SovaDeath(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= 0x28; else xPosition += 0x28; diff --git a/src/sprites_AI/space_pirate.c b/src/sprites_AI/space_pirate.c index 9a0ddb85..a875ff4b 100644 --- a/src/sprites_AI/space_pirate.c +++ b/src/sprites_AI/space_pirate.c @@ -161,13 +161,13 @@ void SpacePirateFlip(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.hitboxLeft = -0x18; gCurrentSprite.hitboxRight = 0x40; } else { - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.hitboxLeft = -0x40; gCurrentSprite.hitboxRight = 0x18; } @@ -888,23 +888,23 @@ void SpacePirateFireLaserGround(void) if (gCurrentSprite.work1 == SPACE_PIRATE_AIM_FORWARD) { SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_FORWARD, gfxSlot, ramSlot, - yPosition - 0x34, xPosition + 0x44, SPRITE_STATUS_XFLIP); + yPosition - 0x34, xPosition + 0x44, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_FORWARD, gfxSlot, ramSlot, - yPosition - 0x78, xPosition + 0x78, SPRITE_STATUS_XFLIP); + yPosition - 0x78, xPosition + 0x78, SPRITE_STATUS_X_FLIP); } else if (gCurrentSprite.work1 == SPACE_PIRATE_AIM_DIAGONALLY_UP) { SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_DIAGONALLY_UP, gfxSlot, ramSlot, - yPosition - 0x98, xPosition + 0x44, SPRITE_STATUS_XFLIP); + yPosition - 0x98, xPosition + 0x44, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_DIAGONALLY_UP, gfxSlot, ramSlot, - yPosition - 0x5E, xPosition + 0x58, SPRITE_STATUS_XFLIP); + yPosition - 0x5E, xPosition + 0x58, SPRITE_STATUS_X_FLIP); } else if (gCurrentSprite.work1 == SPACE_PIRATE_AIM_DIAGONALLY_DOWN) { SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_DIAGONALLY_DOWN, gfxSlot, ramSlot, - yPosition - 0x1C, xPosition + 0x44, SPRITE_STATUS_XFLIP); + yPosition - 0x1C, xPosition + 0x44, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_DIAGONALLY_DOWN, gfxSlot, ramSlot, - yPosition - 0x60, xPosition + 0x58, SPRITE_STATUS_XFLIP); + yPosition - 0x60, xPosition + 0x58, SPRITE_STATUS_X_FLIP); } } else @@ -959,9 +959,9 @@ void SpacePirateFireLaserWall(void) else { SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_FORWARD, gfxSlot, ramSlot, - yPosition - 0x94, xPosition + 0x44, SPRITE_STATUS_XFLIP); + yPosition - 0x94, xPosition + 0x44, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, SPACE_PIRATE_LASER_PART_FORWARD, gfxSlot, ramSlot, - yPosition - 0x4E, xPosition + 0x44, SPRITE_STATUS_XFLIP); + yPosition - 0x4E, xPosition + 0x44, SPRITE_STATUS_X_FLIP); } } @@ -3111,7 +3111,7 @@ void SpacePirateWaitingAtDoor(void) { SpriteSpawnSecondary(SSPRITE_SPACE_PIRATE_LASER, 0x80, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition - 0x50, - gCurrentSprite.xPosition, SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition, SPRITE_STATUS_X_FLIP); } else { @@ -4182,7 +4182,7 @@ u8 roomSlot; else if (roomSlot == SPACE_PIRATE_LASER_PART_DIAGONALLY_DOWN) { gCurrentSprite.pOam = sSpacePirateLaserOAM_Diagonal; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; } else { @@ -4256,7 +4256,7 @@ void SpacePirateLaserMove(void) case SPACE_PIRATE_LASER_PART_DIAGONALLY_UP: gCurrentSprite.yPosition -= 0xF; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += 0xF; else gCurrentSprite.xPosition -= 0xF; @@ -4265,14 +4265,14 @@ void SpacePirateLaserMove(void) case SPACE_PIRATE_LASER_PART_DIAGONALLY_DOWN: gCurrentSprite.yPosition += 0xF; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += 0xF; else gCurrentSprite.xPosition -= 0xF; break; default: - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += 0x14; else gCurrentSprite.xPosition -= 0x14; diff --git a/src/sprites_AI/space_pirate_carrying_power_bomb.c b/src/sprites_AI/space_pirate_carrying_power_bomb.c index 96b68ade..4aff2974 100644 --- a/src/sprites_AI/space_pirate_carrying_power_bomb.c +++ b/src/sprites_AI/space_pirate_carrying_power_bomb.c @@ -56,7 +56,7 @@ void SpacePirateCarryingPowerBomb(void) gCurrentSprite.samusCollision = SSC_NONE; gCurrentSprite.pose = SPACE_PIRATE_CARRYING_POWER_BOMB_POSE_SPAWNING; - gCurrentSprite.status |= (SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT); + gCurrentSprite.status |= (SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT); break; case SPACE_PIRATE_CARRYING_POWER_BOMB_POSE_SPAWNING: diff --git a/src/sprites_AI/steam.c b/src/sprites_AI/steam.c index 5327abdb..5461aa1e 100644 --- a/src/sprites_AI/steam.c +++ b/src/sprites_AI/steam.c @@ -59,7 +59,7 @@ void Steam(void) { // Steam on ceiling gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.yPosition -= BLOCK_SIZE; if (isLarge) @@ -107,7 +107,7 @@ void Steam(void) { // Steam on right wall gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.yPosition -= HALF_BLOCK_SIZE; gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } @@ -181,7 +181,7 @@ void SteamDiagonal(void) gCurrentSprite.xPosition - (HALF_BLOCK_SIZE + PIXEL_SIZE)); if (!(collision & COLLISION_FLAGS_UNKNOWN_F0)) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; // Flip if wall on left + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; // Flip if wall on left if (gCurrentSprite.spriteId == PSPRITE_STEAM_LARGE_DIAGONAL_UP) { @@ -203,7 +203,7 @@ void SteamDiagonal(void) { gCurrentSprite.work1 = TRUE; // Is large flag - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.drawDistanceTop = SUB_PIXEL_TO_PIXEL(HALF_BLOCK_SIZE); gCurrentSprite.drawDistanceBottom = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 4); gCurrentSprite.drawDistanceHorizontal = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 5); @@ -211,7 +211,7 @@ void SteamDiagonal(void) } else if (gCurrentSprite.spriteId == PSPRITE_STEAM_SMALL_DIAGONAL_DOWN) { - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.drawDistanceTop = SUB_PIXEL_TO_PIXEL(QUARTER_BLOCK_SIZE); gCurrentSprite.drawDistanceBottom = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 2 + HALF_BLOCK_SIZE); gCurrentSprite.drawDistanceHorizontal = SUB_PIXEL_TO_PIXEL(BLOCK_SIZE * 3); diff --git a/src/sprites_AI/tangle_vine.c b/src/sprites_AI/tangle_vine.c index 5fffc905..0f93f50c 100644 --- a/src/sprites_AI/tangle_vine.c +++ b/src/sprites_AI/tangle_vine.c @@ -34,7 +34,7 @@ void TangleVineSyncSprites(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; diff --git a/src/sprites_AI/unknown_item_chozo_statue.c b/src/sprites_AI/unknown_item_chozo_statue.c index 444026c0..1e82c524 100644 --- a/src/sprites_AI/unknown_item_chozo_statue.c +++ b/src/sprites_AI/unknown_item_chozo_statue.c @@ -42,7 +42,7 @@ void UnknownItemChozoStatueSyncSubSprites(void) gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_Y_OFFSET]; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; else gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][MULTI_SPRITE_DATA_ELEMENT_X_OFFSET]; @@ -64,7 +64,7 @@ void UnknownItemChozoStatueInit(void) gCurrentSprite.properties |= (SP_ALWAYS_ACTIVE | SP_SOLID_FOR_PROJECTILES); ChozoStatueSetDirection(); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSubSpriteData1.xPosition = gCurrentSprite.xPosition + HALF_BLOCK_SIZE; else gSubSpriteData1.xPosition = gCurrentSprite.xPosition - HALF_BLOCK_SIZE; @@ -120,7 +120,7 @@ void UnknownItemChozoStatueInit(void) gCurrentSprite.pose = UNKNOWN_ITEM_CHOZO_STATUE_POSE_WAIT_FOR_ITEM_TO_BE_COLLECTED; // Spawn chozo ball - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_CHOZO_BALL, 0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gSubSpriteData1.yPosition - (BLOCK_SIZE + HALF_BLOCK_SIZE), @@ -146,19 +146,19 @@ void UnknownItemChozoStatueInit(void) // Spawn eye gCurrentSprite.work1 = SpriteSpawnSecondary(SSPRITE_UNKNOWN_ITEM_CHOZO_STATUE_PART, UNKNOWN_ITEM_CHOZO_STATUE_PART_EYE, - gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn arm behavior = SpriteSpawnSecondary(SSPRITE_UNKNOWN_ITEM_CHOZO_STATUE_PART, UNKNOWN_ITEM_CHOZO_STATUE_PART_ARM, - gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gfxSlot, ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn leg SpriteSpawnSecondary(SSPRITE_UNKNOWN_ITEM_CHOZO_STATUE_PART, UNKNOWN_ITEM_CHOZO_STATUE_PART_LEG, gfxSlot, ramSlot, - yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); // Spawn glow newRamSlot = SpriteSpawnSecondary(SSPRITE_UNKNOWN_ITEM_CHOZO_STATUE_PART, UNKNOWN_ITEM_CHOZO_STATUE_PART_GLOW, gfxSlot, - ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + ramSlot, yPosition, xPosition, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); gSpriteData[newRamSlot].work1 = behavior; } @@ -520,7 +520,7 @@ void UnknownItemChozoStatuePartArmCheckGrabSamusHint(void) xPosition = gCurrentSprite.xPosition; // Get X offset - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition += UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; else xPosition -= UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; @@ -556,7 +556,7 @@ void UnknownItemChozoStatuePartSyncSamusPosition(void) { gSamusData.yPosition = gCurrentSprite.yPosition - UNKNOWN_ITEM_CHOZO_STATUE_HAND_Y_OFFSET; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gSamusData.xPosition = gCurrentSprite.xPosition + UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; else gSamusData.xPosition = gCurrentSprite.xPosition - UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; @@ -625,7 +625,7 @@ void UnknownItemChozoStatuePartArmCheckGrabSamusRefill(void) xPosition = gCurrentSprite.xPosition; // Get X offset - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition += UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; else xPosition -= UNKNOWN_ITEM_CHOZO_STATUE_HAND_X_OFFSET; @@ -1070,7 +1070,7 @@ void ChozoStatueStandingChangeCcaa(u8 bodyCaa, u8 handCaa) yPosition = gSubSpriteData1.yPosition; xPosition = gSubSpriteData1.xPosition; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { xPosition += HALF_BLOCK_SIZE; @@ -1122,7 +1122,7 @@ void ChozoStatueSeatedChangeCcaa(u8 caa) yPosition = gSubSpriteData1.yPosition; xPosition = gSubSpriteData1.xPosition; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentClipdataAffectingAction = caa; ClipdataProcess(yPosition - HALF_BLOCK_SIZE, xPosition + HALF_BLOCK_SIZE); diff --git a/src/sprites_AI/waver.c b/src/sprites_AI/waver.c index 85b5e490..66ca8b84 100644 --- a/src/sprites_AI/waver.c +++ b/src/sprites_AI/waver.c @@ -51,13 +51,13 @@ void WaverMove(void) xSpeed = PIXEL_SIZE; // Move horizontaly - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition, gCurrentSprite.hitboxRight + gCurrentSprite.xPosition); if (gPreviousCollisionCheck == COLLISION_AIR) gCurrentSprite.xPosition += xSpeed; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; } else { @@ -65,7 +65,7 @@ void WaverMove(void) if (gPreviousCollisionCheck == COLLISION_AIR) gCurrentSprite.xPosition -= xSpeed; else - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; } // Move vertically diff --git a/src/sprites_AI/worker_robot.c b/src/sprites_AI/worker_robot.c index b031418d..9807759a 100644 --- a/src/sprites_AI/worker_robot.c +++ b/src/sprites_AI/worker_robot.c @@ -54,7 +54,7 @@ u8 WorkerRobotCheckSamusInFront(void) if (SpriteUtilCheckObjectsTouching(spriteTop, spriteBottom, spriteLeft, spriteRight, samusTop, samusBottom, samusLeft, samusRight)) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (spriteX < samusX) return TRUE; @@ -92,7 +92,7 @@ void WorkerRobotInit(void) SpriteUtilMakeSpriteFaceAwayFromSamusXFlip(); - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; gCurrentSprite.pose = WORKER_ROBOT_POSE_SLEEPING; @@ -193,12 +193,12 @@ void WorkerRobotWalkingDetectProjectile(void) if (onSide) { - if (pProj->status & PROJ_STATUS_XFLIP) + if (pProj->status & PROJ_STATUS_X_FLIP) { projX = spriteLeft; gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.pOam != sWorkerRobotOAM_Walking) gCurrentSprite.pOam = sWorkerRobotOAM_Walking; @@ -214,7 +214,7 @@ void WorkerRobotWalkingDetectProjectile(void) projX = spriteRight; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_RIGHT; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.pOam != sWorkerRobotOAM_WalkingBackwards) gCurrentSprite.pOam = sWorkerRobotOAM_WalkingBackwards; @@ -306,7 +306,7 @@ void WorkerRobotWalking(void) return; gCurrentSprite.work1 = collision; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (!(gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT)) gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; @@ -344,7 +344,7 @@ void WorkerRobotWalking(void) if (gCurrentSprite.work1 == 0) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (!(gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT)) gCurrentSprite.status |= SPRITE_STATUS_FACING_RIGHT; @@ -452,10 +452,10 @@ void WorkerRobotTurningAround(void) { if (SpriteUtilCheckEndCurrentSpriteAnim()) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT); + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT); else - gCurrentSprite.status |= (SPRITE_STATUS_XFLIP | SPRITE_STATUS_FACING_RIGHT); + gCurrentSprite.status |= (SPRITE_STATUS_X_FLIP | SPRITE_STATUS_FACING_RIGHT); gCurrentSprite.pose = WORKER_ROBOT_POSE_CHECK_TURNING_AROUND_ENDED; diff --git a/src/sprites_AI/zeb.c b/src/sprites_AI/zeb.c index 3acffa4e..4fc36e61 100644 --- a/src/sprites_AI/zeb.c +++ b/src/sprites_AI/zeb.c @@ -177,7 +177,7 @@ void ZebMove(void) else { gCurrentSprite.work1++; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check should respawn if (gCurrentSprite.xPosition - gSamusData.xPosition > BLOCK_SIZE * 16 || gCurrentSprite.xPosition & 0x8000) diff --git a/src/sprites_AI/zebbo.c b/src/sprites_AI/zebbo.c index bda00adc..2ec4bff1 100644 --- a/src/sprites_AI/zebbo.c +++ b/src/sprites_AI/zebbo.c @@ -110,7 +110,7 @@ void ZebboIdle(void) ramSlot = SpriteSpawnDropFollowers(PSPRITE_ZEBBO_GREEN_FOLLOWER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + (BLOCK_SIZE + HALF_BLOCK_SIZE), - gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); if (ramSlot != 0xFF) { @@ -121,7 +121,7 @@ void ZebboIdle(void) ramSlot = SpriteSpawnDropFollowers(PSPRITE_ZEBBO_GREEN_FOLLOWER, gCurrentSprite.roomSlot, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + (BLOCK_SIZE * 2 + HALF_BLOCK_SIZE), - gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition - HALF_BLOCK_SIZE, gCurrentSprite.status & SPRITE_STATUS_X_FLIP); if (ramSlot != 0xFF) { @@ -220,7 +220,7 @@ void ZebboMove(void) else { gCurrentSprite.work1++; - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // Check should respawn if (gCurrentSprite.xPosition - gSamusData.xPosition > BLOCK_SIZE * 16 || gCurrentSprite.xPosition & 0x8000) diff --git a/src/sprites_AI/zeela.c b/src/sprites_AI/zeela.c index ef527682..588ea42f 100644 --- a/src/sprites_AI/zeela.c +++ b/src/sprites_AI/zeela.c @@ -20,7 +20,7 @@ void ZeelaSpawnEyes(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition - 0x18, @@ -34,16 +34,16 @@ void ZeelaSpawnEyes(void) { SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x0, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition - 0x18, - gCurrentSprite.xPosition + 0x30, SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition + 0x30, SPRITE_STATUS_X_FLIP); SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x1, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + 0x18, - gCurrentSprite.xPosition + 0x30, SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition + 0x30, SPRITE_STATUS_X_FLIP); } } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x1, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + 0x30, @@ -51,7 +51,7 @@ void ZeelaSpawnEyes(void) SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x1, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition + 0x30, - gCurrentSprite.xPosition + 0x18, SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition + 0x18, SPRITE_STATUS_X_FLIP); } else { @@ -61,7 +61,7 @@ void ZeelaSpawnEyes(void) SpriteSpawnSecondary(SSPRITE_ZEELA_EYES, 0x2, gCurrentSprite.spritesetGfxSlot, gCurrentSprite.primarySpriteRamSlot, gCurrentSprite.yPosition - 0x30, - gCurrentSprite.xPosition + 0x18, SPRITE_STATUS_XFLIP); + gCurrentSprite.xPosition + 0x18, SPRITE_STATUS_X_FLIP); } } } @@ -77,7 +77,7 @@ u8 ZeelaCheckCollidingWithAir(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition); if (gPreviousCollisionCheck == COLLISION_AIR) @@ -100,7 +100,7 @@ u8 ZeelaCheckCollidingWithAir(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { SpriteUtilCheckCollisionAtPosition(gCurrentSprite.yPosition - 0x4, gCurrentSprite.xPosition - HALF_BLOCK_SIZE); if (gPreviousCollisionCheck == COLLISION_AIR) @@ -133,7 +133,7 @@ void ZeelaUpdateHitbox(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { // On right wall gCurrentSprite.hitboxTop = -ZEELA_RIGHT_HITBOX; @@ -152,7 +152,7 @@ void ZeelaUpdateHitbox(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { // On ceiling gCurrentSprite.hitboxTop = -ZEELA_LEGS_HITBOX; @@ -184,9 +184,9 @@ void ZeelaSetCrawlingOam(void) else { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; else - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.pOam = sZeelaOam_OnGround; } @@ -230,7 +230,7 @@ void ZeelaInit(void) if (gPreviousCollisionCheck & 0xF0) { gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.yPosition -= BLOCK_SIZE; } else @@ -252,7 +252,7 @@ void ZeelaInit(void) if (gPreviousCollisionCheck & 0xF0) { gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.yPosition -= HALF_BLOCK_SIZE; gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } @@ -312,7 +312,7 @@ void ZeelaMove(void) if (SpriteUtilShouldFall()) { - if (gCurrentSprite.status & (SPRITE_STATUS_YFLIP | SPRITE_STATUS_FACING_DOWN)) + if (gCurrentSprite.status & (SPRITE_STATUS_Y_FLIP | SPRITE_STATUS_FACING_DOWN)) gCurrentSprite.pose = ZEELA_POSE_FALLING_INIT; return; @@ -320,7 +320,7 @@ void ZeelaMove(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { @@ -417,7 +417,7 @@ void ZeelaMove(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { @@ -530,7 +530,7 @@ void ZeelaMove(void) { if (gCurrentSprite.pOam != sZeelaOam_WalkingOnSlope) { - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.pOam = sZeelaOam_WalkingOnSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; @@ -542,7 +542,7 @@ void ZeelaMove(void) { if (gCurrentSprite.pOam != sZeelaOam_WalkingOnSlope) { - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.pOam = sZeelaOam_WalkingOnSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; @@ -557,7 +557,7 @@ void ZeelaMove(void) { if (gCurrentSprite.pOam != sZeelaOam_WalkingOnSlope) { - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.pOam = sZeelaOam_WalkingOnSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; @@ -569,7 +569,7 @@ void ZeelaMove(void) { if (gCurrentSprite.pOam != sZeelaOam_WalkingOnSlope) { - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.pOam = sZeelaOam_WalkingOnSlope; gCurrentSprite.animationDurationCounter = 0; gCurrentSprite.currentAnimationFrame = 0; @@ -604,8 +604,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningCornerRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_TOP_RIGHT_EDGE: @@ -614,8 +614,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningCornerRight; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_BOTTOM_RIGHT_EDGE: @@ -624,8 +624,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningEdgeLeft; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_TOP_RIGHT_CORNER: @@ -634,8 +634,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningEdgeLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_TOP_LEFT_EDGE: @@ -644,8 +644,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_BOTTOM_RIGHT_CORNER: @@ -654,8 +654,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_TOP_LEFT_CORNER: @@ -664,8 +664,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZEELA_TURNING_DIRECTION_BOTTOM_LEFT_EDGE: @@ -674,8 +674,8 @@ void ZeelaTurningAroundInit(void) else gCurrentSprite.pOam = sZeelaOam_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; default: @@ -703,7 +703,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -715,7 +715,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -726,7 +726,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -738,7 +738,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -752,7 +752,7 @@ void ZeelaTurning(void) else gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP); gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -766,7 +766,7 @@ void ZeelaTurning(void) else gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP); gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -777,7 +777,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition += 0x1C; } - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -788,7 +788,7 @@ void ZeelaTurning(void) gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -832,17 +832,17 @@ void ZeelaFallingInit(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; else gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } - else if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + else if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) gCurrentSprite.yPosition += HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE; gCurrentSprite.pose = ZEELA_POSE_FALLING; gCurrentSprite.work3 = 0; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP | SPRITE_STATUS_FACING_DOWN); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP | SPRITE_STATUS_FACING_DOWN); ZeelaUpdateHitbox(); ZeelaSetFallingOam(); @@ -902,14 +902,14 @@ void ZeelaDeath(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE; else xPosition += HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE; } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) yPosition += HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE; else yPosition -= HALF_BLOCK_SIZE + EIGHTH_BLOCK_SIZE; @@ -1034,7 +1034,7 @@ void ZeelaEyesMove(void) xMovement = 3; } - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition += xMovement; else gCurrentSprite.xPosition -= xMovement; diff --git a/src/sprites_AI/zipline.c b/src/sprites_AI/zipline.c index fd6655cc..bc6c05fb 100644 --- a/src/sprites_AI/zipline.c +++ b/src/sprites_AI/zipline.c @@ -463,7 +463,7 @@ void ZiplineButtonIdle(void) moving = FALSE; ramSlot = gCurrentSprite.work1; - if (SPRITE_HAS_ISFT(gCurrentSprite)) + if (SPRITE_GET_ISFT(gCurrentSprite)) { // Button hit, set moving gSpriteData[ramSlot].health = ZIPLINE_HEALTH_MOVING; diff --git a/src/sprites_AI/zoomer.c b/src/sprites_AI/zoomer.c index 81ed13ec..c2d0041d 100644 --- a/src/sprites_AI/zoomer.c +++ b/src/sprites_AI/zoomer.c @@ -25,7 +25,7 @@ u8 ZoomerCheckCollidingWithAir(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition) == COLLISION_AIR && SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition + HALF_BLOCK_SIZE, gCurrentSprite.xPosition) == COLLISION_AIR) @@ -40,7 +40,7 @@ u8 ZoomerCheckCollidingWithAir(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - 0x4, gCurrentSprite.xPosition - HALF_BLOCK_SIZE) == COLLISION_AIR && SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - 0x4, gCurrentSprite.xPosition + HALF_BLOCK_SIZE) == COLLISION_AIR) @@ -65,7 +65,7 @@ void ZoomerUpdateHitbox(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { gCurrentSprite.hitboxTop = -0x1C; gCurrentSprite.hitboxBottom = 0x1C; @@ -82,7 +82,7 @@ void ZoomerUpdateHitbox(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { gCurrentSprite.hitboxTop = -0x4; gCurrentSprite.hitboxBottom = 0x34; @@ -146,7 +146,7 @@ void ZoomerInit(void) else if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - 0x44, gCurrentSprite.xPosition) & 0xF0) { gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.yPosition -= BLOCK_SIZE; } else if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition - 0x24) & 0xF0) @@ -158,7 +158,7 @@ void ZoomerInit(void) else if (SpriteUtilGetCollisionAtPosition(gCurrentSprite.yPosition - HALF_BLOCK_SIZE, gCurrentSprite.xPosition + HALF_BLOCK_SIZE) & 0xF0) { gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.yPosition -= HALF_BLOCK_SIZE; gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } @@ -220,14 +220,14 @@ void ZoomerCrawling(void) if (SpriteUtilShouldFall()) { - if (gCurrentSprite.status & (SPRITE_STATUS_YFLIP | SPRITE_STATUS_FACING_DOWN)) + if (gCurrentSprite.status & (SPRITE_STATUS_Y_FLIP | SPRITE_STATUS_FACING_DOWN)) gCurrentSprite.pose = ZOOMER_POSE_FALLING_INIT; return; } if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { @@ -324,7 +324,7 @@ void ZoomerCrawling(void) } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_RIGHT) { @@ -513,8 +513,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningCornerRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_TOP_RIGHT_EDGE: @@ -523,8 +523,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningCornerRight; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_BOTTOM_RIGHT_EDGE: @@ -533,8 +533,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningEdgeLeft; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_TOP_RIGHT_CORNER: @@ -543,8 +543,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningEdgeLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_TOP_LEFT_EDGE: @@ -553,8 +553,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_BOTTOM_RIGHT_CORNER: @@ -563,8 +563,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status &= ~SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_TOP_LEFT_CORNER: @@ -573,8 +573,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningEdgeRight; - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; case ZOOMER_TURNING_DIRECTION_BOTTOM_LEFT_EDGE: @@ -583,8 +583,8 @@ void ZoomerTurningAroundInit(void) else gCurrentSprite.pOam = sZoomerOAM_TurningCornerLeft; - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; break; default: @@ -612,7 +612,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -624,7 +624,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -635,7 +635,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition &= BLOCK_POSITION_FLAG; } - gCurrentSprite.status &= ~SPRITE_STATUS_XFLIP; + gCurrentSprite.status &= ~SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -647,7 +647,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition += BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_XFLIP; + gCurrentSprite.status |= SPRITE_STATUS_X_FLIP; gCurrentSprite.status |= SPRITE_STATUS_FACING_DOWN; break; @@ -661,7 +661,7 @@ void ZoomerTurningAround(void) else gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP); gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -675,7 +675,7 @@ void ZoomerTurningAround(void) else gCurrentSprite.yPosition &= BLOCK_POSITION_FLAG; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP); gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -686,7 +686,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition += 0x1C; } - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -697,7 +697,7 @@ void ZoomerTurningAround(void) gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; } - gCurrentSprite.status |= SPRITE_STATUS_YFLIP; + gCurrentSprite.status |= SPRITE_STATUS_Y_FLIP; gCurrentSprite.status &= ~SPRITE_STATUS_FACING_DOWN; break; @@ -739,17 +739,17 @@ void ZoomerFallingInit(void) { if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) gCurrentSprite.xPosition -= HALF_BLOCK_SIZE; else gCurrentSprite.xPosition += HALF_BLOCK_SIZE; } - else if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + else if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) gCurrentSprite.yPosition += 0x28; gCurrentSprite.pose = ZOOMER_POSE_FALLING; gCurrentSprite.work3 = 0x0; - gCurrentSprite.status &= ~(SPRITE_STATUS_XFLIP | SPRITE_STATUS_YFLIP | SPRITE_STATUS_FACING_DOWN); + gCurrentSprite.status &= ~(SPRITE_STATUS_X_FLIP | SPRITE_STATUS_Y_FLIP | SPRITE_STATUS_FACING_DOWN); ZoomerUpdateHitbox(); ZoomerSetFallingOAM(); @@ -808,14 +808,14 @@ void ZoomerDeath(void) if (gCurrentSprite.status & SPRITE_STATUS_FACING_DOWN) { - if (gCurrentSprite.status & SPRITE_STATUS_XFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_X_FLIP) xPosition -= 0x28; else xPosition += 0x28; } else { - if (gCurrentSprite.status & SPRITE_STATUS_YFLIP) + if (gCurrentSprite.status & SPRITE_STATUS_Y_FLIP) yPosition += 0x28; else yPosition -= 0x28;