More pointers.h

This commit is contained in:
YohannDR 2022-09-16 11:50:25 +02:00
parent f7bd194c3d
commit 3d805837a4
25 changed files with 893 additions and 186 deletions

View File

@ -6,94 +6,7 @@
#include "../src/samus.h"
#include "../src/particle.h"
#include "../src/projectile.h"
#include "../src/sprites_AI/unused_sprites.h"
#include "../src/sprites_AI/charge_beam.h"
#include "../src/sprites_AI/deorem.h"
#include "../src/sprites_AI/dragon.h"
#include "../src/sprites_AI/elevator_pad.h"
#include "../src/sprites_AI/enemy_drop.h"
#include "../src/sprites_AI/explosion_zebes_escape.h"
#include "../src/sprites_AI/geruta.h"
#include "../src/sprites_AI/hive.h"
#include "../src/sprites_AI/imago_cocoon.h"
#include "../src/sprites_AI/map_station.h"
#include "../src/sprites_AI/metroid.h"
#include "../src/sprites_AI/item_banner.h"
#include "../src/sprites_AI/zoomer.h"
#include "../src/sprites_AI/zeela.h"
#include "../src/sprites_AI/ripper.h"
#include "../src/sprites_AI/zeb.h"
#include "../src/sprites_AI/skree.h"
#include "../src/sprites_AI/morph_ball.h"
#include "../src/sprites_AI/chozo_statue.h"
#include "../src/sprites_AI/sova.h"
#include "../src/sprites_AI/multiviola.h"
#include "../src/sprites_AI/squeept.h"
#include "../src/sprites_AI/reo.h"
#include "../src/sprites_AI/gunship.h"
#include "../src/sprites_AI/skultera.h"
#include "../src/sprites_AI/dessgeega.h"
#include "../src/sprites_AI/waver.h"
#include "../src/sprites_AI/power_grip.h"
#include "../src/sprites_AI/imago_larva.h"
#include "../src/sprites_AI/morph_ball_launcher.h"
#include "../src/sprites_AI/space_pirate.h"
#include "../src/sprites_AI/gamet.h"
#include "../src/sprites_AI/zebbo.h"
#include "../src/sprites_AI/worker_robot.h"
#include "../src/sprites_AI/parasite.h"
#include "../src/sprites_AI/piston.h"
#include "../src/sprites_AI/ridley.h"
#include "../src/sprites_AI/security_gate.h"
#include "../src/sprites_AI/zipline_generator.h"
#include "../src/sprites_AI/polyp.h"
#include "../src/sprites_AI/rinka.h"
#include "../src/sprites_AI/viola.h"
#include "../src/sprites_AI/geron_norfair.h"
#include "../src/sprites_AI/holtz.h"
#include "../src/sprites_AI/gekitai_machine.h"
#include "../src/sprites_AI/ruins_test.h"
#include "../src/sprites_AI/save_platform.h"
#include "../src/sprites_AI/kraid.h"
#include "../src/sprites_AI/ripper2.h"
#include "../src/sprites_AI/mella.h"
#include "../src/sprites_AI/atomic.h"
#include "../src/sprites_AI/area_banner.h"
#include "../src/sprites_AI/mother_brain.h"
#include "../src/sprites_AI/acid_worm.h"
#include "../src/sprites_AI/escape_ship.h"
#include "../src/sprites_AI/sidehopper.h"
#include "../src/sprites_AI/geega.h"
#include "../src/sprites_AI/zebetite_and_cannon.h"
#include "../src/sprites_AI/zipline.h"
#include "../src/sprites_AI/imago_larva_right_side.h"
#include "../src/sprites_AI/tangle_vine.h"
#include "../src/sprites_AI/imago.h"
#include "../src/sprites_AI/crocomire.h"
#include "../src/sprites_AI/geron.h"
#include "../src/sprites_AI/glass_tube.h"
#include "../src/sprites_AI/save_platform_chozodia.h"
#include "../src/sprites_AI/baristute.h"
#include "../src/sprites_AI/elevator_statue.h"
#include "../src/sprites_AI/rising_chozo_pillar.h"
#include "../src/sprites_AI/security_laser.h"
#include "../src/sprites_AI/boss_statues.h"
#include "../src/sprites_AI/searchlight_eye.h"
#include "../src/sprites_AI/steam.h"
#include "../src/sprites_AI/unknown_item_block.h"
#include "../src/sprites_AI/unknown_item_chozo_statue.h"
#include "../src/sprites_AI/chozo_ball.h"
#include "../src/sprites_AI/gadora.h"
#include "../src/sprites_AI/searchlight.h"
#include "../src/sprites_AI/primary_sprite_B3.h"
#include "../src/sprites_AI/space_pirate_carrying_power_bomb.h"
#include "../src/sprites_AI/water_drop.h"
#include "../src/sprites_AI/falling_chozo_pillar.h"
#include "../src/sprites_AI/mecha_ridley.h"
#include "../src/sprites_AI/escape_gate.h"
#include "../src/sprites_AI/black_space_pirate.h"
#include "../src/sprites_AI/escape_ship_pirate.h"
#include "../src/sprites_AI/chozo_statue_movement.h"
#include "sprites_AI/sprites.h"
/* generic_data.c */
@ -383,10 +296,6 @@ extern u8 blob_0x875ebf8_0x875f1e7[1520];
extern u8 blob_0x875f31c_0x875f973[16234];
/* projectile_pointers.c */
ProjFunc_T process_projectile_functions_pointers[16];
/* particle_pointers.c */
ParticleFunc_T process_particle_functions_pointer[61];

View File

@ -1,5 +1,10 @@
#include "../types.h"
#include "../samus.h"
#include "../projectile.h"
#include "../particle.h"
#include "../sprites_AI/sprites.h"
// 75e6a8
static const SamusFunc_T sSamusPoseFunctionPointers[MAX_AMOUNT_OF_SAMUS_POSES] = {
[SPOSE_RUNNING] = SamusRunning,
@ -350,12 +355,12 @@ static const Func_T sPrimarySpritesAIPointers[206] = {
[PSPRITE_RINKA_MOTHER_BRAIN6] = RinkaMotherBrain
};
static const u32* const sSpritesGraphicsPointers[190] = {
static const u32* sSpritesGraphicsPointers[190] = {
NULL
};
static const u16* const sSpritesPalettePointers[190] = {
static const u16* sSpritesPalettePointers[190] = {
NULL
};
static const Func_T sSecondarySpritesAIPointers[190] = {
@ -438,11 +443,11 @@ static const Func_T sSecondarySpritesAIPointers[190] = {
[SSPRITE_MOTHER_BRAIN_GLASS_BREAKING] = MotherBrainGlassBreaking
};
static const u8* const sSpritesetPointers[114] = {
static const u8* sSpritesetPointers[114] = {
NULL
};
static const struct FrameData* const sChozoStatueFrameDataPointers[16] = {
static const struct FrameData* sChozoStatueFrameDataPointers[16] = {
sChozoStatuePartOAM_LegStanding,
sChozoStatuePartOAM_LegSitting,
sChozoStatuePartOAM_LegSeated,
@ -461,6 +466,347 @@ static const struct FrameData* const sChozoStatueFrameDataPointers[16] = {
sChozoStatuePartOAM_GlowIdle,
};
static const struct FrameData* const sUnknownItemChozoStatueFrameDataPointers[16] = {
static const struct FrameData* sUnknownItemChozoStatueFrameDataPointers[16] = {
sUnknownItemChozoStatuePartOAM_LegStanding,
sUnknownItemChozoStatuePartOAM_LegSitting,
sUnknownItemChozoStatuePartOAM_LegSeated,
sUnknownItemChozoStatueOAM_Idle,
sUnknownItemChozoStatuePartOAM_EyeOpened,
sUnknownItemChozoStatuePartOAM_EyeClosing,
sUnknownItemChozoStatuePartOAM_EyeOpening,
sUnknownItemChozoStatuePartOAM_EyeClosed,
sUnknownItemChozoStatuePartOAM_ArmIdle,
sUnknownItemChozoStatuePartOAM_ArmGlow,
sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed,
sChozoBallOAM_UnknownClosed,
sChozoBallOAM_UnknownRevealed,
sUnknownItemChozoStatueRefillOAM,
sUnknownItemChozoStatuePartOAM_GlowIdle
};
};
static const struct FrameData* sKraidFrameDataPointers[38] = {
sKraidOAM_MouthClosed,
sKraidOAM_MouthClosedBlink,
sKraidOAM_OpeningMouth,
sKraidOAM_MouthOpened,
sKraidOAM_Rising,
sKraidOAM_ClosingMouth,
sKraidPartOAM_2cac5c,
sKraidPartOAM_LeftArmIdle,
sKraidPartOAM_LeftArmDying,
sKraidPartOAM_LeftArmThrowingNails,
sKraidPartOAM_2cadc4,
sKraidPartOAM_RightArmIdle,
sKraidPartOAM_RightArmAttacking,
sKraidPartOAM_RightArmDying,
sKraidPartOAM_LeftFeetRising,
sKraidPartOAM_LeftFeetIdle1,
sKraidPartOAM_LeftFeetMovingRight,
sKraidPartOAM_LeftFeetIdle2,
sKraidPartOAM_LeftFeetMovedRight,
sKraidPartOAM_LeftFeetMovingLeft,
sKraidPartOAM_LeftFeetMovedLeft,
sKraidPartOAM_RightFeetRising,
sKraidPartOAM_RightFeetIdle1,
sKraidPartOAM_RightFeetMovedRight,
sKraidPartOAM_RightFeetIdle2,
sKraidPartOAM_RightFeetMovingRight,
sKraidPartOAM_RightFeetMovedLeft,
sKraidPartOAM_RightFeetMovingLeft,
sKraidPartOAM_TopHoleLeft,
sKraidPartOAM_TopHoleRight,
sKraidPartOAM_MiddleHoleLeft,
sKraidPartOAM_MiddleHoleRight,
sKraidPartOAM_BottomHoleLeft,
sKraidPartOAM_BottomHoleRight,
sKraidNailOAM,
sKraidOAM_2cb29c,
sKraidOAM_2cb2ac,
sKraidSpikeOAM
};
static const struct FrameData* sImagoLarvaFrameDataPointers[23] = {
sImagoLarvaPartOAM_ShellAttacking,
sImagoLarvaPartOAM_ShellIdle,
sImagoLarvaPartOAM_ShellRetreating,
sImagoLarvaPartOAM_ShellDying,
sImagoLarvaPartOAM_ClawsAttacking,
sImagoLarvaPartOAM_ClawsIdle,
sImagoLarvaPartOAM_ClawsRetreating,
sImagoLarvaPartOAM_ClawsTakingDamage,
sImagoLarvaPartOAM_LeftDotAppearing,
sImagoLarvaPartOAM_MiddleDotAppearing,
sImagoLarvaPartOAM_RightDotAppearing,
sImagoLarvaPartOAM_LeftDotVisible,
sImagoLarvaPartOAM_MiddleDotVisible,
sImagoLarvaPartOAM_RightDotVisible,
sImagoLarvaPartOAM_LeftDotDisappearing,
sImagoLarvaPartOAM_MiddleDotDisappearing,
sImagoLarvaPartOAM_RightDotDisappearing,
sImagoLarvaPartOAM_ShellWarning,
sImagoLarvaOAM_Idle,
sImagoLarvaPartOAM_ClawsWarningFirstPart,
sImagoLarvaPartOAM_ClawsWarningSecondPart,
sImagoLarvaOAM_Warning,
sImagoLarvaPartOAM_ShellTakingDamage
};
static const struct FrameData* sImagoCocoonFrameDataPointers[21] = {
sImagoCocoonOAM_CeilingVineMotionless,
sImagoCocoonOAM_CeilingVineMoving,
sImagoCocoonOAM_CeilingVineBroken,
sImagoCocoonOAM_DecorativeVinesLeft,
sImagoCocoonOAM_DecorativeVinesRight,
sImagoCocoonVineOAM_LeftMiddle,
sImagoCocoonVineOAM_RightMiddle,
sImagoCocoonVineOAM_LeftRight,
sImagoCocoonVineOAM_RightRight,
sImagoCocoonVineOAM_LeftLeft,
sImagoCocoonVineOAM_RightLeft,
sImagoCocoonOAM_Idle,
sImagoCocoonOAM_2e0bb0,
sImagoCocoonOAM_Static,
sImagoCocoonSporeOAM_Spawning,
sImagoCocoonSpore_Nest,
sImagoCocoonSpore_Moving,
sImagoCocoonSpore_Exploding,
sWingedRipperOAM_Moving,
sWingedRipperOAM_TurningAround,
sDefeatedImagoCocoonOAM
};
static const struct FrameData* sRidleyFrameDataPointers[33] = {
sRidleyOAM_Idle,
sRidleyOAM_SpittingFireballs,
sRidleyOAM_TurningAroundFirstPart,
sRidleyOAM_TurningAroundSecondPart,
sRidleyPartOAM_HeadIdle,
sRidleyPartOAM_OpeningMouth,
sRidleyPartOAM_MouthOpened,
sRidleyPartOAM_HeadDying,
sRidleyPartOAM_HeadTurningAround,
sRidleyPartOAM_ClawIdle,
sRidleyPartOAM_ClawSpittingFireballs,
sRidleyPartOAM_ClawTurningAroundFirstPart,
sRidleyPartOAM_ClawTurningAroundSecondPart,
sRidleyPartOAM_ClawCarryingSamus,
sRidleyPartOAM_ClawLiftingSamus,
sRidleyPartOAM_ClawSamusLifted,
sRidleyPartOAM_ClawReleasingSamus,
sRidleyPartOAM_LeftWingIdle,
sRidleyPartOAM_RightWingIdle,
sRidleyPartOAM_LeftWing_Unused,
sRidleyPartOAM_RightWing_Unused,
sRidleyPartOAM_LeftWingSpittingFireballs,
sRidleyPartOAM_RightWingSpittingFireballs,
sRidleyTailOAM_Part,
sRidleyTailOAM_TipPointingDown,
sRidleyTailOAM_TipPointingUp,
sRidleyTailOAM_TipPointingDiagonallyDownRight,
sRidleyTailOAM_TipPointingDiagonallyUpRight,
sRidleyTailOAM_TipPointingDiagonallyDownLeft,
sRidleyTailOAM_TipPointingDiagonallyUpLeft,
sRidleyOAM_Square,
sRidleyFireballOAM_Small,
sRidleyFireballOAM_Big
};
static const u8 sAtomicDynamicPaletteData[33][2] = {
{ 0, 4 },
{ 2, 4 },
{ 0, 4 },
{ 2, 4 },
{ 0, 4 },
{ 2, 4 },
{ 0, 4 },
{ 2, 4 },
{ 3, 4 },
{ 2, 4 },
{ 3, 4 },
{ 2, 4 },
{ 3, 4 },
{ 2, 4 },
{ 3, 4 },
{ 2, 4 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 3, 2 },
{ 2, 2 },
{ 0, 0 }
};
static const struct FrameData* sMotheBrainFrameDataPointers[10] = {
sMotherBrainOAM_Idle,
sMotherBrainOAM_ChargingBeam,
sMotherBrainPartOAM_EyeClosed,
sMotherBrainPartOAM_2fa934,
sMotherBrainPartOAM_EyeOpening,
sMotherBrainPartOAM_2fa984,
sMotherBrainPartOAM_EyeDying,
sMotherBrainPartOAM_Bottom,
sMotherBrainPartOAM_BeamSpawning,
sMotherBrainBeamOAM_Moving
};
static const struct FrameData* sTangleVineFrameDataPointers[13] = {
sTangleVineTallOAM_OnGround,
sTangleVineMediumOAM_OnGround,
sTangleVineShortOAM_OnGround,
sTangleVineCurvedOAM_OnGround,
sTangleVineTallOAM_OnCeiling,
sTangleVineMediumOAM_OnCeiling,
sTangleVineShortOAM_OnCeiling,
sTangleVineCurvedOAM_OnCeiling,
sTangleVineGerutaPartOAM_Grip,
sTangleVineGerutaOAM_Root,
sTangleVineGerutaOAM_Full,
sTangleVineRedGerutaOAM,
sTangleVineGerutaPartOAM_Geruta
};
static const struct FrameData* sImagoFrameDataPointers[17] = {
sImagoPartOAM_BodyIdle,
sImagoPartOAM_BodyGrowling,
sImagoOAM_BrokenStinger,
sImagoPartOAM_LeftWingIdle,
sImagoPartOAM_LeftWingShootingNeedles,
sImagoPartOAM_LeftWingDying,
sImagoPartOAM_RightWingIdle,
sImagoPartOAM_RightWingShootingNeedles,
sImagoPartOAM_RIghtWingDying,
sImagoPartOAM_Core,
simagoOAM_Flying,
sImagoOAM_ShootingNeedles,
sImagoOAM_RechargingNeedles,
sImagoDamagedStingerOAM,
sImagoNeedleOAM,
sImagoDamagedStingerOAM_Unused,
sImagoEggOAM_Breaking
};
static const struct FrameData* sCrocomireFrameDataPointers[25] = {
sCrocomirePartOAM_BodyIdle,
sCrocomirePartOAM_BodyAngry,
sCrocomireOAM_Idle,
sCrocomireOAM_Screaming,
sCrocomireOAM_Dying,
sCrocomirePartOAM_RightArmIdle,
sCrocomirePartOAM_LeftArmIdle,
sCrocomirePartOAM_LeftArmScreaming,
sCrocomirePartOAM_RightArmWalkingForward,
sCrocomirePartOAM_LeftArmWalkingForward,
sCrocomirePartOAM_RightArmWalkingBackwards,
sCrocomirePartOAM_LeftArmWalkingBackwards,
sCrocomirePartOAM_RightArmDying,
sCrocomirePartOAM_LeftArmDying,
sCrocomirePartOAM_LegsIdle,
sCrocomirePartOAM_LegsWalkingForward,
sCrocomirePartOAM_LegsWalkingBackwards,
sCrocomirePartOAM_LegsDying,
sCrocomirePartOAM_Tongue,
sCrocomirePartOAM_TongueDying,
sCrocomireProjectileOAM,
sCrocomirePartOAM_307028,
sCrocomirePartOAM_307058,
sCrocomirePartOAM_307088,
sCrocomirePartOAM_3070b8,
};
static const struct FrameData* sMechaRidleyFrameDataPointers[63] = {
NULL
};
static const ProjFunc_T sProcessProjectileFunctionPointers[16] = {
[PROJ_TYPE_BEAM] = ProjectileProcessNormalBeam,
[PROJ_TYPE_LONG_BEAM] = ProjectileProcessLongBeam,
[PROJ_TYPE_ICE_BEAM] = ProjectileProcessIceBeam,
[PROJ_TYPE_WAVE_BEAM] = ProjectileProcessWaveBeam,
[PROJ_TYPE_PLASMA_BEAM] = ProjectileProcessPlasmaBeam,
[PROJ_TYPE_PISTOL] = ProjectileProcessPistol,
[PROJ_TYPE_CHARGED_BEAM] = ProjectileProcessChargedNormalBeam,
[PROJ_TYPE_CHARGED_LONG_BEAM] = ProjectileProcessChargedLongBeam,
[PROJ_TYPE_CHARGED_ICE_BEAM] = ProjectileProcessChargedIceBeam,
[PROJ_TYPE_CHARGED_WAVE_BEAM] = ProjectileProcessChargedWaveBeam,
[PROJ_TYPE_CHARGED_PLASMA_BEAM] = ProjectileProcessChargedPlasmaBeam,
[PROJ_TYPE_CHARGED_PISTOL] = ProjectileProcessChargedPistol,
[PROJ_TYPE_MISSILE] = ProjectileProcessMissile,
[PROJ_TYPE_SUPER_MISSILE] = ProjectileProcessSuperMissile,
[PROJ_TYPE_BOMB] = ProjectileProcessBomb,
[PROJ_TYPE_POWER_BOMB] = ProjectileProcessPowerBomb
};
static const ParticleFunc_T sProcessParticleFunctionPointers[61] = {
[PE_SPRITE_SPLASH_WATER_SMALL] = ParticleSpriteSplashWaterSmall,
[PE_SPRITE_SPLASH_WATER_BIG] = ParticleSpriteSplashWaterBig,
[PE_SPRITE_SPLASH_WATER_HUGE] = ParticleSpriteSplashWaterHuge,
[PE_SPRITE_SPLASH_LAVA_SMALL] = ParticleSpriteSplashLavaSmall,
[PE_SPRITE_SPLASH_LAVA_BIG] = ParticleSpriteSplashLavaBig,
[PE_SPRITE_SPLASH_LAVA_HUGE] = ParticleSpriteSplashLavaHuge,
[PE_SPRITE_SPLASH_ACID_SMALL] = ParticleSpriteSplashAcidSmall,
[PE_SPRITE_SPLASH_ACID_BIG] = ParticleSpriteSplashAcidBig,
[PE_SPRITE_SPLASH_ACID_HUGE] = ParticleSpriteSplashAcidHuge,
[PE_SHOOTING_BEAM_LEFT] = ParticleShootingBeamLeft,
[PE_SHOOTING_BEAM_DIAG_UP_LEFT] = ParticleShootingBeamDiagUpLeft,
[PE_SHOOTING_BEAM_DIAG_DOWN_LEFT] = ParticleShootingBeamDiagDownLeft,
[PE_SHOOTING_BEAM_UP_LEFT] = ParticleShootingBeamUpLeft,
[PE_SHOOTING_BEAM_DOWN_LEFT] = ParticleShootingBeamDiagDownLeft,
[PE_SHOOTING_BEAM_RIGHT] = ParticleShootingBeamRight,
[PE_SHOOTING_BEAM_DIAG_UP_RIGHT] = ParticleShootingBeamDiagUpRight,
[PE_SHOOTING_BEAM_DIAG_DOWN_RIGHT] = ParticleShootingBeamDiagDownRight,
[PE_SHOOTING_BEAM_UP_RIGHT] = ParticleShootingBeamDiagUpRight,
[PE_SHOOTING_BEAM_DOWN_RIGHT] = ParticleShootingBeamDownRight,
[PE_BOMB] = ParticleBomb,
[PE_MISSILE_TRAIL] = ParticleMissileTrail,
[PE_SUPER_MISSILE_TRAIL] = ParticleSuperMissileTrail,
[PE_BEAM_TRAILING_RIGHT] = ParticleBeamTrailingRight,
[PE_BEAM_TRAILING_LEFT] = ParticleBeamTrailingLeft,
[PE_CHARGED_LONG_BEAM_TRAIL] = ParticleChargedLongBeamTrail,
[PE_CHARGED_ICE_BEAM_TRAIL] = ParticleChargedIceBeamTrail,
[PE_CHARGED_WAVE_BEAM_TRAIL] = ParticleChargedWaveBeamTrail,
[PE_CHARGED_PLASMA_BEAM_TRAIL] = ParticleChargedPlasmaBeamTrail,
[PE_CHARGED_FULL_BEAM_TRAIL] = ParticleChargedFullBeamTrail,
[PE_CHARGED_PISTOL_TRAIL] = ParticleChargedPistolTrail,
[PE_SPRITE_EXPLOSION_HUGE] = ParticleSpriteExplosionHuge,
[PE_SPRITE_EXPLOSION_SMALL] = ParticleSpriteExplosionSmall,
[PE_SPRITE_EXPLOSION_MEDIUM] = ParticleSpriteExplosionMedium,
[PE_SPRITE_EXPLOSION_BIG] = ParticleSpriteExplosionBig,
[PE_SPRITE_EXPLOSION_SINGLE_THEN_BIG] = ParticleSpriteExplosionSingleThenBig,
[PE_SCREW_ATTACK_DESTROYED] = ParticleScrewAttackDestroyed,
[PE_SHINESPARK_DESTROYED] = ParticleShinesparkDestroyed,
[PE_SUDO_SCREW_DESTROYED] = ParticleSudoScrewDestroyed,
[PE_SPEEDBOOSTER_DESTROYED] = ParticleSpeedboosterDestroyed,
[PE_MAIN_BOSS_DEATH] = ParticleMainBossDeath,
[PE_FREEZING_SPRITE_WITH_ICE] = ParticleFreezingSpriteWithIce,
[PE_FREEZING_SPRITE_WITH_CHARGED_ICE] = ParticleFreezingSpriteWithChargedIce,
[PE_HITTING_SOMETHING_WITH_BASE_BEAM] = ParticleHittingSomethingWithBaseBeam,
[PE_HITTING_SOMETHING_WITH_LONG_BEAM] = ParticleHittingSomethingWithLongBeam,
[PE_HITTING_SOMETHING_WITH_ICE_BEAM] = ParticleHittingSomethingWithIceBeam,
[PE_HITTING_SOMETHING_WITH_WAVE_BEAM] = ParticleHittingSomethingWithWaveBeam,
[PE_HITTING_SOMETHING_WITH_PLASMA_BEAM] = ParticleHittingSomethingWithPlasmaBeam,
[PE_HITTING_SOMETHING_INVINCIBLE] = ParticleHittingSomethingInvincible,
[PE_HITTING_SOMETHING_WITH_MISSILE] = ParticleHittingSomethingWithMissile,
[PE_HITTING_SOMETHING_WITH_SUPER_MISSILE] = ParticleHittingSomethingWithSuperMissile,
[PE_HITTING_SOMETHING_WITH_FULL_BEAM_NO_PLASMA] = ParticleHittingSomethingWithFullBeamNoPlasma,
[PE_HITTING_SOMETHING_WITH_FULL_BEAM] = ParticleHittingSomethingWithFullBeam,
[PE_SMALL_DUST] = ParticleSmallDust,
[PE_MEDIUM_DUST] = ParticleMediumDust,
[PE_TWO_MEDIUM_DUST] = ParticleTwoMediumDust,
[PE_SECOND_SMALL_DUST] = ParticleSecondSmallDust,
[PE_SECOND_MEDIUM_DUST] = ParticleSecondMediumDust,
[PE_SECOND_TWO_MEDIUM_DUST] = ParticleSecondTwoMediumDust,
[PE_SAMUS_REFLECTION] = ParticleSamusReflection,
[PE_CHARGING_BEAM] = ParticleChargingBeam,
[PE_ESCAPE] = ParticleEscape,
};

View File

@ -3,6 +3,7 @@
#include "screen_shake.h"
#include "music.h"
#include "../data/data.h"
#include "data/pointers.h"
#include "globals.h"
/**
@ -126,31 +127,28 @@ void ParticleDraw(struct ParticleEffect* pParticle)
*/
void ParticleProcessAll(void)
{
/*struct ParticleEffect* pParticle;
struct ParticleEffect* pParticle;
u8 status;
if (gGameModeSub1 != 0x2 && (gGameModeSub1 == 0x1 || gGameModeSub1 == 0x3))
{
pParticle = gParticleEffects;
while (pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES)
for (pParticle = gParticleEffects; pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES; pParticle++)
{
if (pParticle->status & PARTICLE_STATUS_EXISTS && pParticle->effect == PE_ESCAPE) // Probably a priority system
{
process_particle_functions_pointer[pParticle->effect](pParticle); // Call subroutine
sProcessParticleFunctionPointers[pParticle->effect](pParticle); // Call subroutine
if ((pParticle->status & PARTICLE_STATUS_EXISTS) != 0x0)
ParticleDraw(pParticle);
}
pParticle++;
}
}
else
{
pParticle = gParticleEffects;
while (pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES)
for (pParticle = gParticleEffects; pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES; pParticle++)
{
if ((pParticle->status & (PARTICLE_STATUS_EXISTS | PARTICLE_STATUS_EXPLOSION)) == (PARTICLE_STATUS_EXISTS | PARTICLE_STATUS_EXPLOSION))
{
process_particle_functions_pointer[pParticle->effect](pParticle); // Call subroutine
sProcessParticleFunctionPointers[pParticle->effect](pParticle); // Call subroutine
if ((pParticle->status & PARTICLE_STATUS_EXISTS) != 0x0)
{
ParticleCheckOnScreen(pParticle);
@ -159,15 +157,13 @@ void ParticleProcessAll(void)
ParticleDraw(pParticle);
}
}
pParticle++;
}
pParticle = gParticleEffects;
while (pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES)
for (pParticle = gParticleEffects; pParticle < gParticleEffects + MAX_AMOUNT_OF_PARTICLES; pParticle++)
{
if ((pParticle->status & (PARTICLE_STATUS_EXISTS | PARTICLE_STATUS_EXPLOSION)) == PARTICLE_STATUS_EXISTS)
{
process_particle_functions_pointer[pParticle->effect](pParticle); // Call subroutine
sProcessParticleFunctionPointers[pParticle->effect](pParticle); // Call subroutine
if (pParticle->status & PARTICLE_STATUS_EXISTS)
{
ParticleCheckOnScreen(pParticle);
@ -176,10 +172,9 @@ void ParticleProcessAll(void)
ParticleDraw(pParticle);
}
}
pParticle++;
}
EscaepUpdateTimer();
}*/
}
}
/**
@ -289,7 +284,7 @@ void ParticleSetCurrentOAMFramePointer(struct ParticleEffect* pParticle, struct
*
* @param pParticle Particle Effect Pointer
*/
void ParticleSpriteSplashSmall(struct ParticleEffect* pParticle)
void ParticleSpriteSplashWaterSmall(struct ParticleEffect* pParticle)
{
pParticle->frameCounter++;
if (ParticleUpdateAnimation(pParticle, particle_sprite_splash_water_small_oam))

View File

@ -112,7 +112,7 @@ void ParticleProcessAll(void);
void ParticleSet(u16 yPosition, u16 xPosition, u8 effect);
u8 ParticleUpdateAnimation(struct ParticleEffect* pParticle, struct FrameData* pOam);
void ParticleSetCurrentOAMFramePointer(struct ParticleEffect* pParticle, struct FrameData* pOam);
void ParticleSpriteSplashSmall(struct ParticleEffect* pParticle);
void ParticleSpriteSplashWaterSmall(struct ParticleEffect* pParticle);
void ParticleSpriteSplashWaterBig(struct ParticleEffect* pParticle);
void ParticleSpriteSplashWaterHuge(struct ParticleEffect* pParticle);
void ParticleSpriteSplashLavaSmall(struct ParticleEffect* pParticle);

View File

@ -6,6 +6,7 @@
#include "music.h"
#include "game_modes.h"
#include "../data/data.h"
#include "data/pointers.h"
#include "globals.h"
void ProjectileSetBeamParticleEffect(void)
@ -428,7 +429,7 @@ void ProjectileUpdate(void)
{
if (pProj->status & PROJ_STATUS_EXISTS)
{
process_projectile_functions_pointers[pProj->type](pProj);
sProcessProjectileFunctionPointers[pProj->type](pProj);
ProjectileUpdateAnimation(pProj);
ProjectileCheckDespawn(pProj);
}

View File

@ -85,7 +85,7 @@ struct ProjectileData {
// Typedef
typedef (*ProjFunc_T)(struct ProjectileData*);
typedef void (*ProjFunc_T)(struct ProjectileData*);
// Functions

View File

@ -1,5 +1,6 @@
#include "crocomire.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sCrocomireMultiSpriteData_Idle_Frame0[18] = {
@ -1255,9 +1256,28 @@ const struct FrameData sCrocomirePartOAM_3070b8[6] = {
0x0
};
/**
* @brief 43d88 | 68 | Synchronize the sub sprites of Crocomire
*
*/
void CrocomireSyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sCrocomireFrameDataPointers[offset])
{
gCurrentSprite.pOam = sCrocomireFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -18,6 +18,34 @@
#define CROCOMIRE_PART_POSE_IDLE 0x9
#define CROCOMIRE_PART_POSE_DYING 0x67
extern const struct FrameData sCrocomirePartOAM_BodyIdle[5];
extern const struct FrameData sCrocomirePartOAM_BodyAngry[5];
extern const struct FrameData sCrocomireOAM_Idle[5];
extern const struct FrameData sCrocomireOAM_Screaming[9];
extern const struct FrameData sCrocomireOAM_Dying[3];
extern const struct FrameData sCrocomirePartOAM_RightArmIdle[5];
extern const struct FrameData sCrocomirePartOAM_LeftArmIdle[5];
extern const struct FrameData sCrocomirePartOAM_LeftArmScreaming[3];
extern const struct FrameData sCrocomirePartOAM_RightArmWalkingForward[18];
extern const struct FrameData sCrocomirePartOAM_LeftArmWalkingForward[18];
extern const struct FrameData sCrocomirePartOAM_RightArmWalkingBackwards[18];
extern const struct FrameData sCrocomirePartOAM_LeftArmWalkingBackwards[18];
extern const struct FrameData sCrocomirePartOAM_RightArmDying[3];
extern const struct FrameData sCrocomirePartOAM_LeftArmDying[3];
extern const struct FrameData sCrocomirePartOAM_LegsIdle[3];
extern const struct FrameData sCrocomirePartOAM_LegsWalkingForward[8];
extern const struct FrameData sCrocomirePartOAM_LegsWalkingBackwards[9];
extern const struct FrameData sCrocomirePartOAM_LegsDying[7];
extern const struct FrameData sCrocomirePartOAM_Tongue[5];
extern const struct FrameData sCrocomirePartOAM_TongueDying[5];
extern const struct FrameData sCrocomireProjectileOAM[2];
extern const struct FrameData sCrocomirePartOAM_307028[6];
extern const struct FrameData sCrocomirePartOAM_307058[6];
extern const struct FrameData sCrocomirePartOAM_307088[6];
extern const struct FrameData sCrocomirePartOAM_3070b8[6];
void CrocomireSyncSubSprites(void);
void CrocomireInit(void);
void CrocomireIdleInit(void);

View File

@ -1,5 +1,6 @@
#include "imago.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sImagoMultiSpriteData_Idle_Frame0[21] = {
@ -930,7 +931,25 @@ const struct FrameData sImagoEggOAM_Standing[2] = {
void ImagoSyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sImagoFrameDataPointers[offset])
{
gCurrentSprite.pOam = sImagoFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -58,6 +58,26 @@
#define IMAGO_EGG_PART_NORMAL 0x0
#define IMAGO_EGG_PART_LAST 0x80
extern const struct FrameData sImagoPartOAM_BodyIdle[8];
extern const struct FrameData sImagoPartOAM_BodyGrowling[16];
extern const struct FrameData sImagoOAM_BrokenStinger[3];
extern const struct FrameData sImagoPartOAM_LeftWingIdle[8];
extern const struct FrameData sImagoPartOAM_LeftWingShootingNeedles[6];
extern const struct FrameData sImagoPartOAM_LeftWingDying[7];
extern const struct FrameData sImagoPartOAM_RightWingIdle[8];
extern const struct FrameData sImagoPartOAM_RightWingShootingNeedles[6];
extern const struct FrameData sImagoPartOAM_RIghtWingDying[5];
extern const struct FrameData sImagoPartOAM_Core[9];
extern const struct FrameData simagoOAM_Flying[9];
extern const struct FrameData sImagoOAM_ShootingNeedles[11];
extern const struct FrameData sImagoOAM_RechargingNeedles[4];
extern const struct FrameData sImagoDamagedStingerOAM[2];
extern const struct FrameData sImagoNeedleOAM[2];
extern const struct FrameData sImagoDamagedStingerOAM_Unused[9];
extern const struct FrameData sImagoEggOAM_Breaking[10];
extern const struct FrameData sImagoEggOAM_Standing[2];
void ImagoSyncSubSprites(void);
void ImagoShootNeedles(void);
void ImagoCoreFlashingAnim(void);

View File

@ -1,5 +1,6 @@
#include "imago_cocoon.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sImagoCocoonMultiSpriteData_Idle_Frame0[30] = {
@ -881,7 +882,7 @@ const struct FrameData sImagoCocoonVineOAM_LeftMiddle[5] = {
0x0
};
const struct FrameData sImagoCocoonVineOAM_RIghtMiddle[5] = {
const struct FrameData sImagoCocoonVineOAM_RightMiddle[5] = {
sImagoCocoonVineOAM_RightMiddle_Frame0,
0x6,
sImagoCocoonVineOAM_RightMiddle_Frame1,
@ -1089,9 +1090,27 @@ const struct FrameData sDefeatedImagoCocoonOAM[9] = {
};
/**
* @brief 26c38 | 68 | Sync the sub sprites of Imago cocoon
*
*/
void ImagoCocoonSyncSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sImagoCocoonFrameDataPointers[offset])
{
gCurrentSprite.pOam = sImagoCocoonFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -60,6 +60,31 @@
#define WINGED_RIPPER_POSE_MOVING_INIT 0x8
#define WINGED_RIPPER_POSE_MOVING 0x9
extern const struct FrameData sImagoCocoonOAM_CeilingVineMotionless[5];
extern const struct FrameData sImagoCocoonOAM_CeilingVineMoving[10];
extern const struct FrameData sImagoCocoonOAM_CeilingVineBroken[2];
extern const struct FrameData sImagoCocoonOAM_DecorativeVinesLeft[6];
extern const struct FrameData sImagoCocoonOAM_DecorativeVinesRight[6];
extern const struct FrameData sImagoCocoonVineOAM_LeftMiddle[5];
extern const struct FrameData sImagoCocoonVineOAM_RightMiddle[5];
extern const struct FrameData sImagoCocoonVineOAM_LeftRight[5];
extern const struct FrameData sImagoCocoonVineOAM_RightRight[5];
extern const struct FrameData sImagoCocoonVineOAM_LeftLeft[5];
extern const struct FrameData sImagoCocoonVineOAM_RightLeft[5];
extern const struct FrameData sImagoCocoonOAM_Idle[5];
extern const struct FrameData sImagoCocoonOAM_2e0bb0[2];
extern const struct FrameData sImagoCocoonOAM_Static[2];
extern const struct FrameData sImagoCocoonSporeOAM_Spawning[5];
extern const struct FrameData sImagoCocoonSpore_Nest[4];
extern const struct FrameData sImagoCocoonSpore_Moving[4];
extern const struct FrameData sImagoCocoonSpore_Exploding[5];
extern const struct FrameData sWingedRipperOAM_Moving[10];
extern const struct FrameData sWingedRipperOAM_TurningAround[10];
extern const struct FrameData sDefeatedImagoCocoonOAM[9];
void ImagoCocoonSyncSprites(void);
void ImagoCocoonChangeOneCCAA(u8 caa);
void ImagoCocoonChangeTwoMiddleCCAA(u8 caa);

View File

@ -1,6 +1,7 @@
#include "imago_larva.h"
#include "../sprite_util.h" // sprite_util.h include is REQUIRED
#include "../sprite_util.h" // sprite_util.h include required?
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sImagoLarvaMultiSpriteData_Attacking_Frame0[18] = {
@ -1566,9 +1567,33 @@ const struct FrameData sImagoLarvaPartOAM_ShellTakingDamage[5] = {
0x0
};
/**
* @brief 259a0 | 84 | Synchronize the sub sprites of an Imago larva
*
* @param pSub
*/
void ImagoLarvaSyncSubSprites(struct SubSpriteData* pSub)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])pSub->pMultiOam[pSub->currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sImagoLarvaFrameDataPointers[offset])
{
gCurrentSprite.pOam = sImagoLarvaFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = pSub->yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = pSub->xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = pSub->xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -38,6 +38,31 @@
#define IMAGO_LARVA_PART_SHELL 0x4
#define IMAGO_LARVA_PART_LARVA 0x5
extern const struct FrameData sImagoLarvaPartOAM_ShellAttacking[12];
extern const struct FrameData sImagoLarvaPartOAM_ShellIdle[5];
extern const struct FrameData sImagoLarvaPartOAM_ShellRetreating[12];
extern const struct FrameData sImagoLarvaPartOAM_ShellDying[9];
extern const struct FrameData sImagoLarvaPartOAM_ClawsAttacking[5];
extern const struct FrameData sImagoLarvaPartOAM_ClawsIdle[5];
extern const struct FrameData sImagoLarvaPartOAM_ClawsRetreating[5];
extern const struct FrameData sImagoLarvaPartOAM_ClawsTakingDamage[4];
extern const struct FrameData sImagoLarvaPartOAM_LeftDotAppearing[4];
extern const struct FrameData sImagoLarvaPartOAM_MiddleDotAppearing[4];
extern const struct FrameData sImagoLarvaPartOAM_RightDotAppearing[4];
extern const struct FrameData sImagoLarvaPartOAM_LeftDotVisible[2];
extern const struct FrameData sImagoLarvaPartOAM_MiddleDotVisible[2];
extern const struct FrameData sImagoLarvaPartOAM_RightDotVisible[2];
extern const struct FrameData sImagoLarvaPartOAM_LeftDotDisappearing[4];
extern const struct FrameData sImagoLarvaPartOAM_MiddleDotDisappearing[4];
extern const struct FrameData sImagoLarvaPartOAM_RightDotDisappearing[4];
extern const struct FrameData sImagoLarvaPartOAM_ShellWarning[10];
extern const struct FrameData sImagoLarvaOAM_Idle[9];
extern const struct FrameData sImagoLarvaPartOAM_ClawsWarningFirstPart[3];
extern const struct FrameData sImagoLarvaPartOAM_ClawsWarningSecondPart[3];
extern const struct FrameData sImagoLarvaOAM_Warning[10];
extern const struct FrameData sImagoLarvaPartOAM_ShellTakingDamage[5];
void ImagoLarvaSyncSubSprites(struct SubSpriteData* pSub);
void ImagoLarvaUpdatePalette(void);
void ImagoLarvaInit(struct SubSpriteData* pSub);

View File

@ -1,5 +1,6 @@
#include "kraid.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sKraidMultiSpriteData_Rising_Frame0[36] = {
@ -2615,9 +2616,27 @@ const struct FrameData sKraidSpikeOAM[9] = {
};
/**
* @brief 183d8 | 68 | Synchronize the sub sprites of Kraid
*
*/
void KraidSyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sKraidFrameDataPointers[offset])
{
gCurrentSprite.pOam = sKraidFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -48,6 +48,48 @@
#define KRAID_SPIKE_POSE_MOVING 0x23
#define KRAID_SPIKE_POSE_IN_WALL 0x25
extern const struct FrameData sKraidOAM_MouthClosed[6];
extern const struct FrameData sKraidOAM_MouthClosedBlink[11];
extern const struct FrameData sKraidOAM_OpeningMouth[9];
extern const struct FrameData sKraidOAM_MouthOpened[7];
extern const struct FrameData sKraidOAM_Rising[3];
extern const struct FrameData sKraidOAM_ClosingMouth[5];
extern const struct FrameData sKraidPartOAM_2cac5c[2];
extern const struct FrameData sKraidPartOAM_LeftArmIdle[11];
extern const struct FrameData sKraidPartOAM_LeftArmDying[11];
extern const struct FrameData sKraidPartOAM_LeftArmThrowingNails[21];
extern const struct FrameData sKraidPartOAM_2cadc4[2];
extern const struct FrameData sKraidPartOAM_RightArmIdle[11];
extern const struct FrameData sKraidPartOAM_RightArmAttacking[13];
extern const struct FrameData sKraidPartOAM_RightArmDying[13];
extern const struct FrameData sKraidPartOAM_LeftFeetRising[2];
extern const struct FrameData sKraidPartOAM_LeftFeetIdle1[5];
extern const struct FrameData sKraidPartOAM_LeftFeetMovingRight[8];
extern const struct FrameData sKraidPartOAM_LeftFeetIdle2[5];
extern const struct FrameData sKraidPartOAM_LeftFeetMovedRight[9];
extern const struct FrameData sKraidPartOAM_LeftFeetMovingLeft[8];
extern const struct FrameData sKraidPartOAM_LeftFeetMovedLeft[5];
extern const struct FrameData sKraidPartOAM_RightFeetRising[2];
extern const struct FrameData sKraidPartOAM_RightFeetIdle1[5];
extern const struct FrameData sKraidPartOAM_RightFeetMovedRight[9];
extern const struct FrameData sKraidPartOAM_RightFeetIdle2[5];
extern const struct FrameData sKraidPartOAM_RightFeetMovingRight[8];
extern const struct FrameData sKraidPartOAM_RightFeetMovedLeft[5];
extern const struct FrameData sKraidPartOAM_RightFeetMovingLeft[8];
extern const struct FrameData sKraidPartOAM_TopHoleLeft[5];
extern const struct FrameData sKraidPartOAM_TopHoleRight[5];
extern const struct FrameData sKraidPartOAM_MiddleHoleRight[5];
extern const struct FrameData sKraidPartOAM_MiddleHoleLeft[5];
extern const struct FrameData sKraidPartOAM_BottomHoleRight[5];
extern const struct FrameData sKraidPartOAM_BottomHoleLeft[5];
extern const struct FrameData sKraidNailOAM[2];
extern const struct FrameData sKraidOAM_2cb29c[2];
extern const struct FrameData sKraidOAM_2cb2ac[2];
extern const struct FrameData sKraidSpikeOAM[9];
void KraidSyncSubSprites(void);
void KraidCheckProjectilesCollidingWithBelly(void);
void KraidOpenCloseRoutineAndProjectileCollision(void);

View File

@ -1,5 +1,6 @@
#include "mother_brain.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const u16 sMotherBrainMultiSpriteData_Part0[12] = {
@ -647,83 +648,29 @@ const struct FrameData sMotherBrainPartOAM_EyeClosing[4] = {
0x0
};
/*asm("
.align 2, 0
.global MotherBrainSyncSubSpritesPosition
.thumb
.type MotherBrainSyncSubSpritesPosition, %function
MotherBrainSyncSubSpritesPosition: @ 0x0803c964
push {r4, lr}
ldr r4, lbl_0803c9c0 @ =0x0300070c
ldrh r0, [r4, #4]
ldr r1, [r4]
lsl r0, r0, #3
add r0, r0, r1
ldr r3, [r0]
ldr r2, lbl_0803c9c4 @ =0x03000738
ldrb r1, [r2, #0x1e]
lsl r0, r1, #1
add r0, r0, r1
lsl r0, r0, #1
add r0, r0, r3
ldrh r0, [r0]
ldr r1, lbl_0803c9c8 @ =0x0875f774
lsl r0, r0, #2
add r0, r0, r1
ldr r1, [r2, #0x18]
ldr r0, [r0]
cmp r1, r0
beq lbl_0803c996
str r0, [r2, #0x18]
movs r0, #0
strb r0, [r2, #0x1c]
strh r0, [r2, #0x16]
lbl_0803c996:
ldrb r1, [r2, #0x1e]
lsl r0, r1, #1
add r0, r0, r1
lsl r0, r0, #1
add r0, r0, r3
ldrh r0, [r0, #2]
ldrh r1, [r4, #6]
add r0, r0, r1
strh r0, [r2, #2]
ldrb r1, [r2, #0x1e]
lsl r0, r1, #1
add r0, r0, r1
lsl r0, r0, #1
add r0, r0, r3
ldrh r0, [r0, #4]
ldrh r4, [r4, #8]
add r0, r0, r4
strh r0, [r2, #4]
pop {r4}
pop {r0}
bx r0
.align 2, 0
lbl_0803c9c0: .4byte 0x0300070c
lbl_0803c9c4: .4byte 0x03000738
lbl_0803c9c8: .4byte 0x0875f774");*/
/*void MotherBrainSyncSubSpritesPosition(void)
/**
* @brief 3c964 | 68 | Synchronize the sub sprites of Mother Brain
*
*/
void MotherBrainSyncSubSpritesPosition(void)
{
// Function doesn't match without the necessary data (which isn't currently available)
const u16 (*pFrame)[3];
u32 offset;
pFrame = (const u16 (*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pFrame[gCurrentSprite.roomSlot][0]; // Frame data ID
if (gCurrentSprite.pOam != ((const struct FrameData**)0x875f774)[offset])
if (gCurrentSprite.pOam != sMotheBrainFrameDataPointers[offset])
{
gCurrentSprite.pOam = ((const struct FrameData**)0x875f774)[offset];
gCurrentSprite.pOam = sMotheBrainFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pFrame[gCurrentSprite.roomSlot][1]; // Y offset
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pFrame[gCurrentSprite.roomSlot][2]; // X offset
}*/
}
/**
* @brief 3c9cc | 80 | Updates the palette of mother brain when firing

View File

@ -23,6 +23,20 @@
#define MOTHER_BRAIN_PART_POSE_UPDATE 0x32
#define MOTHER_BRAIN_PART_POSE_GLASS_BREAKING 0x62
extern const struct FrameData sMotherBrainOAM_Idle[12];
extern const struct FrameData sMotherBrainOAM_ChargingBeam[5];
extern const struct FrameData sMotherBrainPartOAM_EyeClosed[12];
extern const struct FrameData sMotherBrainPartOAM_2fa934[5];
extern const struct FrameData sMotherBrainPartOAM_EyeOpening[5];
extern const struct FrameData sMotherBrainPartOAM_2fa984[8];
extern const struct FrameData sMotherBrainPartOAM_EyeDying[5];
extern const struct FrameData sMotherBrainPartOAM_Bottom[7];
extern const struct FrameData sMotherBrainPartOAM_BeamSpawning[5];
extern const struct FrameData sMotherBrainBeamOAM_Moving[3];
extern const struct FrameData sMotherBrainGlassBreakingOAM_Breaking[18];
extern const struct FrameData sMotherBrainPartOAM_EyeClosing[4];
void MotherBrainSyncSubSpritesPosition(void);
void MotherBrainUpdatePalette(void);
void MotherBrainInit(void);

View File

@ -1,5 +1,6 @@
#include "ridley.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sRidleyMultiSpriteData_Idle_Frame0[18] = {
@ -1784,14 +1785,65 @@ const struct FrameData sRidleyFireballOAM_Big[2] = {
0x0
};
/**
* @brief 31aa4 | 9c | Synchronize the sub sprites of Ridley
*
*/
void RidleySyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sRidleyFrameDataPointers[offset])
{
gCurrentSprite.pOam = sRidleyFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
if (gCurrentSprite.roomSlot == RIDLEY_PART_TAIL)
{
gSubSpriteData2.yPosition = gCurrentSprite.yPosition;
gSubSpriteData2.xPosition = gCurrentSprite.xPosition;
}
}
/**
* @brief 31b40 | 88 | Synchronize the sub sprites of the Ridley tail
*
*/
void RidleyTailSyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData2.pMultiOam[gSubSpriteData2.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sRidleyFrameDataPointers[offset])
{
gCurrentSprite.pOam = sRidleyFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData2.yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = gSubSpriteData2.xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = gSubSpriteData2.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -104,6 +104,43 @@
#define RIDLEY_FIREBALL_POSE_MOVE_DIAGONAL_PATTERN 0x29
#define RIDLEY_FIREBALL_POSE_DESTROY 0x42
extern const struct FrameData sRidleyOAM_Idle[7];
extern const struct FrameData sRidleyOAM_SpittingFireballs[5];
extern const struct FrameData sRidleyOAM_TurningAroundFirstPart[3];
extern const struct FrameData sRidleyOAM_TurningAroundSecondPart[3];
extern const struct FrameData sRidleyPartOAM_HeadIdle[3];
extern const struct FrameData sRidleyPartOAM_OpeningMouth[2];
extern const struct FrameData sRidleyPartOAM_MouthOpened[3];
extern const struct FrameData sRidleyPartOAM_HeadDying[5];
extern const struct FrameData sRidleyPartOAM_HeadTurningAround[2];
extern const struct FrameData sRidleyPartOAM_ClawIdle[7];
extern const struct FrameData sRidleyPartOAM_ClawSpittingFireballs[5];
extern const struct FrameData sRidleyPartOAM_ClawTurningAroundFirstPart[3];
extern const struct FrameData sRidleyPartOAM_ClawTurningAroundSecondPart[3];
extern const struct FrameData sRidleyPartOAM_ClawCarryingSamus[2];
extern const struct FrameData sRidleyPartOAM_ClawLiftingSamus[6];
extern const struct FrameData sRidleyPartOAM_ClawSamusLifted[2];
extern const struct FrameData sRidleyPartOAM_ClawReleasingSamus[6];
extern const struct FrameData sRidleyPartOAM_LeftWingIdle[11];
extern const struct FrameData sRidleyPartOAM_RightWingIdle[11];
extern const struct FrameData sRidleyPartOAM_LeftWing_Unused[11];
extern const struct FrameData sRidleyPartOAM_RightWing_Unused[11];
extern const struct FrameData sRidleyPartOAM_LeftWingSpittingFireballs[7];
extern const struct FrameData sRidleyPartOAM_RightWingSpittingFireballs[7];
extern const struct FrameData sRidleyTailOAM_Part[2];
extern const struct FrameData sRidleyTailOAM_TipPointingDown[2];
extern const struct FrameData sRidleyTailOAM_TipPointingUp[2];
extern const struct FrameData sRidleyTailOAM_TipPointingDiagonallyDownRight[2];
extern const struct FrameData sRidleyTailOAM_TipPointingDiagonallyUpRight[2];
extern const struct FrameData sRidleyTailOAM_TipPointingDiagonallyDownLeft[2];
extern const struct FrameData sRidleyTailOAM_TipPointingDiagonallyUpLeft[2];
extern const struct FrameData sRidleyOAM_Square[2];
extern const struct FrameData sRidleyFireballOAM_Small[2];
extern const struct FrameData sRidleyFireballOAM_Big[2];
void RidleySyncSubSprites(void);
void RidleyTailSyncSubSprites(void);
void RidleyIdleYFloatingMovement(void);

88
src/sprites_AI/sprites.h Normal file
View File

@ -0,0 +1,88 @@
#include "../src/sprites_AI/unused_sprites.h"
#include "../src/sprites_AI/charge_beam.h"
#include "../src/sprites_AI/deorem.h"
#include "../src/sprites_AI/dragon.h"
#include "../src/sprites_AI/elevator_pad.h"
#include "../src/sprites_AI/enemy_drop.h"
#include "../src/sprites_AI/explosion_zebes_escape.h"
#include "../src/sprites_AI/geruta.h"
#include "../src/sprites_AI/hive.h"
#include "../src/sprites_AI/imago_cocoon.h"
#include "../src/sprites_AI/map_station.h"
#include "../src/sprites_AI/metroid.h"
#include "../src/sprites_AI/item_banner.h"
#include "../src/sprites_AI/zoomer.h"
#include "../src/sprites_AI/zeela.h"
#include "../src/sprites_AI/ripper.h"
#include "../src/sprites_AI/zeb.h"
#include "../src/sprites_AI/skree.h"
#include "../src/sprites_AI/morph_ball.h"
#include "../src/sprites_AI/chozo_statue.h"
#include "../src/sprites_AI/sova.h"
#include "../src/sprites_AI/multiviola.h"
#include "../src/sprites_AI/squeept.h"
#include "../src/sprites_AI/reo.h"
#include "../src/sprites_AI/gunship.h"
#include "../src/sprites_AI/skultera.h"
#include "../src/sprites_AI/dessgeega.h"
#include "../src/sprites_AI/waver.h"
#include "../src/sprites_AI/power_grip.h"
#include "../src/sprites_AI/imago_larva.h"
#include "../src/sprites_AI/morph_ball_launcher.h"
#include "../src/sprites_AI/space_pirate.h"
#include "../src/sprites_AI/gamet.h"
#include "../src/sprites_AI/zebbo.h"
#include "../src/sprites_AI/worker_robot.h"
#include "../src/sprites_AI/parasite.h"
#include "../src/sprites_AI/piston.h"
#include "../src/sprites_AI/ridley.h"
#include "../src/sprites_AI/security_gate.h"
#include "../src/sprites_AI/zipline_generator.h"
#include "../src/sprites_AI/polyp.h"
#include "../src/sprites_AI/rinka.h"
#include "../src/sprites_AI/viola.h"
#include "../src/sprites_AI/geron_norfair.h"
#include "../src/sprites_AI/holtz.h"
#include "../src/sprites_AI/gekitai_machine.h"
#include "../src/sprites_AI/ruins_test.h"
#include "../src/sprites_AI/save_platform.h"
#include "../src/sprites_AI/kraid.h"
#include "../src/sprites_AI/ripper2.h"
#include "../src/sprites_AI/mella.h"
#include "../src/sprites_AI/atomic.h"
#include "../src/sprites_AI/area_banner.h"
#include "../src/sprites_AI/mother_brain.h"
#include "../src/sprites_AI/acid_worm.h"
#include "../src/sprites_AI/escape_ship.h"
#include "../src/sprites_AI/sidehopper.h"
#include "../src/sprites_AI/geega.h"
#include "../src/sprites_AI/zebetite_and_cannon.h"
#include "../src/sprites_AI/zipline.h"
#include "../src/sprites_AI/imago_larva_right_side.h"
#include "../src/sprites_AI/tangle_vine.h"
#include "../src/sprites_AI/imago.h"
#include "../src/sprites_AI/crocomire.h"
#include "../src/sprites_AI/geron.h"
#include "../src/sprites_AI/glass_tube.h"
#include "../src/sprites_AI/save_platform_chozodia.h"
#include "../src/sprites_AI/baristute.h"
#include "../src/sprites_AI/elevator_statue.h"
#include "../src/sprites_AI/rising_chozo_pillar.h"
#include "../src/sprites_AI/security_laser.h"
#include "../src/sprites_AI/boss_statues.h"
#include "../src/sprites_AI/searchlight_eye.h"
#include "../src/sprites_AI/steam.h"
#include "../src/sprites_AI/unknown_item_block.h"
#include "../src/sprites_AI/unknown_item_chozo_statue.h"
#include "../src/sprites_AI/chozo_ball.h"
#include "../src/sprites_AI/gadora.h"
#include "../src/sprites_AI/searchlight.h"
#include "../src/sprites_AI/primary_sprite_B3.h"
#include "../src/sprites_AI/space_pirate_carrying_power_bomb.h"
#include "../src/sprites_AI/water_drop.h"
#include "../src/sprites_AI/falling_chozo_pillar.h"
#include "../src/sprites_AI/mecha_ridley.h"
#include "../src/sprites_AI/escape_gate.h"
#include "../src/sprites_AI/black_space_pirate.h"
#include "../src/sprites_AI/escape_ship_pirate.h"
#include "../src/sprites_AI/chozo_statue_movement.h"

View File

@ -1,5 +1,6 @@
#include "tangle_vine.h"
#include "../../data/data.h"
#include "../data/pointers.h"
#include "../globals.h"
const i16 sTangleVineGerutaMultiSpriteData_Idle_Frame0[9] = {
@ -797,9 +798,32 @@ const struct FrameData sTangleVineLarvaLeftOAM[5] = {
0x0
};
/**
* @brief 413c4 | 88 | Synchronize the sub sprites of a tangle vine
*
*/
void TangleVineSyncSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sTangleVineFrameDataPointers[offset])
{
gCurrentSprite.pOam = sTangleVineFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -9,6 +9,23 @@
#define TANGLE_VINE_GERUTA_PART_GERUTA 0x1
#define TANGLE_VINE_GERUTA_PART_ROOT 0x2
extern const struct FrameData sTangleVineTallOAM_OnGround[5];
extern const struct FrameData sTangleVineMediumOAM_OnGround[5];
extern const struct FrameData sTangleVineShortOAM_OnGround[5];
extern const struct FrameData sTangleVineCurvedOAM_OnGround[7];
extern const struct FrameData sTangleVineTallOAM_OnCeiling[5];
extern const struct FrameData sTangleVineMediumOAM_OnCeiling[5];
extern const struct FrameData sTangleVineShortOAM_OnCeiling[5];
extern const struct FrameData sTangleVineCurvedOAM_OnCeiling[5];
extern const struct FrameData sTangleVineGerutaPartOAM_Grip[9];
extern const struct FrameData sTangleVineGerutaOAM_Root[9];
extern const struct FrameData sTangleVineGerutaOAM_Full[5];
extern const struct FrameData sTangleVineRedGerutaOAM[5];
extern const struct FrameData sTangleVineGerutaPartOAM_Geruta[9];
extern const struct FrameData sTangleVineLarvaRightOAM[5];
extern const struct FrameData sTangleVineLarvaLeftOAM[5];
void TangleVineSyncSprites(void);
void TangleVineGeruta(void);
void TangleVineGerutaPart(void);

View File

@ -2,6 +2,7 @@
#include "item_banner.h"
#include "chozo_statue.h"
#include "../globals.h"
#include "../data/pointers.h"
const i16 sUnknownItemChozoStatueMultiSpriteData_Standing_Frame0[15] = {
8, -176, -104,
@ -932,9 +933,32 @@ const u16 sChozoStatueGravitySuitPAL[80];
const u32 sChozoStatuePlasmaBeamGFX[1357];
const u16 sChozoStatuePlasmaBeamPAL[80];
/**
* @brief 150a8 | 88 | Synchronize the sub sprites of an unknown item chozo statue
*
*/
void UnknownItemChozoStatueSyncSubSprites(void)
{
u16 (*pData)[3];
u32 offset;
pData = (u16(*)[3])gSubSpriteData1.pMultiOam[gSubSpriteData1.currentAnimationFrame].pFrame;
offset = pData[gCurrentSprite.roomSlot][0];
if (gCurrentSprite.pOam != sUnknownItemChozoStatueFrameDataPointers[offset])
{
gCurrentSprite.pOam = sUnknownItemChozoStatueFrameDataPointers[offset];
gCurrentSprite.animationDurationCounter = 0x0;
gCurrentSprite.currentAnimationFrame = 0x0;
}
gCurrentSprite.yPosition = gSubSpriteData1.yPosition + pData[gCurrentSprite.roomSlot][1];
if (gCurrentSprite.status & SPRITE_STATUS_XFLIP)
gCurrentSprite.xPosition = gSubSpriteData1.xPosition - pData[gCurrentSprite.roomSlot][2];
else
gCurrentSprite.xPosition = gSubSpriteData1.xPosition + pData[gCurrentSprite.roomSlot][2];
}
/**

View File

@ -3,11 +3,22 @@
#include "../types.h"
extern const struct FrameData sUnknownItemChozoStatuePartOAM_LegStanding[2];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_LegSitting[10];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_LegSeated[2];
extern const struct FrameData sUnknownItemChozoStatueOAM_Idle[2];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_EyeOpened[2];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_EyeClosing[3];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_EyeOpening[3];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_EyeClosed[2];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_ArmIdle[2];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_ArmGlow[9];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_ArmSamusGrabbed[2];
extern const struct FrameData sChozoBallOAM_UnknownClosed[5];
extern const struct FrameData sChozoBallOAM_UnknownRevealing[4];
extern const struct FrameData sChozoBallOAM_UnknownRevealed[5];
extern const struct FrameData sUnknownItemChozoStatueRefillOAM[41];
extern const struct FrameData sUnknownItemChozoStatuePartOAM_GlowIdle[41];
void UnknownItemChozoStatueSyncSubSprites(void);
void UnknownItemChozoStatueInit(void);