Path: blob/master/SonicMania/Objects/SSZ/MetalSonic.h
338 views
#ifndef OBJ_METALSONIC_H1#define OBJ_METALSONIC_H23#include "Game.h"45typedef enum {6MS_ANI_IDLE,7MS_ANI_TAUNT,8MS_ANI_READY,9MS_ANI_HOVER,10MS_ANI_HOVERTURN,11MS_ANI_FLY,12MS_ANI_DASHATTACK,13MS_ANI_ELECTRICATTACK,14MS_ANI_BALLATTACK,15MS_ANI_ENTERPANEL,16MS_ANI_DEFEATED,17MS_ANI_BOOSTER_WEAK,18MS_ANI_BOOSTER_STRONG,19MS_ANI_BOOSTER_INTRO,20} MetalSonicAniIDs;2122typedef enum {23MS_ATTACK_DASH,24MS_ATTACK_ELECTRIC,25MS_ATTACK_BALL,26} MetalSonicAttackIDs;2728// Object Class29struct ObjectMetalSonic {30RSDK_OBJECT31int32 unused;32int32 invincibilityTimerPanel;33uint16 finishedAttacks;34uint16 sfxHit;35uint16 sfxExplosion2;36uint16 sfxExplosion3;37uint16 sfxRumble;38uint16 sfxJump2;39uint16 sfxSpecialRing;40uint16 sfxMSElecPulse;41uint16 sfxMSBall;42uint16 sfxMSFireball;43uint16 sfxBeep3;44uint16 sfxBeep4;45uint16 sfxRockemSockem;46uint16 sfxMSShoot;47uint16 sfxMSChargeFire;48#if MANIA_USE_PLUS49uint16 sfxMSTransform;50uint16 sfxTransform2;51#endif52Hitbox hitboxHover;53Hitbox hitboxDash;54uint16 aniFrames;55};5657// Entity Class58struct EntityMetalSonic {59RSDK_ENTITY60StateMachine(state);61Vector2 targetPos;62int32 timer;63int32 unused1;64int32 unused2;65int32 health;66int32 unused3;67Vector2 hoverVelocity;68Vector2 targetVelocity;69int32 attackTimer;70uint8 attackType;71int32 unused4;72int32 invincibilityTimer;73EntityMSPanel *panel;74Vector2 unusedVec1;75Vector2 unusedVec2;76Vector2 unusedVec3;77Hitbox *outerBox;78Hitbox *innerBox;79Animator metalSonicAnimator;80Animator boosterAnimator;81};8283// Object Struct84extern ObjectMetalSonic *MetalSonic;8586// Standard Entity Events87void MetalSonic_Update(void);88void MetalSonic_LateUpdate(void);89void MetalSonic_StaticUpdate(void);90void MetalSonic_Draw(void);91void MetalSonic_Create(void *data);92void MetalSonic_StageLoad(void);93#if GAME_INCLUDE_EDITOR94void MetalSonic_EditorDraw(void);95void MetalSonic_EditorLoad(void);96#endif97void MetalSonic_Serialize(void);9899// Extra Entity Functions100void MetalSonic_HandleStageWrap(void);101void MetalSonic_ProcessBGParallax(int32 mult);102void MetalSonic_HandleVelocity(void);103void MetalSonic_HandleAnimDir(void);104#if !MANIA_USE_PLUS105void MetalSonic_CheckPlayerCollisions(void);106void MetalSonic_Hit(void);107void MetalSonic_Explode(void);108#endif109110// Phase 1111void MetalSonic_State_SetupArena(void);112void MetalSonic_State_AwaitPlayer(void);113void MetalSonic_State_WaitForHologram(void);114void MetalSonic_State_Appear(void);115void MetalSonic_State_Land(void);116void MetalSonic_State_Taunt(void);117void MetalSonic_State_GetReady(void);118void MetalSonic_State_Ready(void);119void MetalSonic_State_Start(void);120void MetalSonic_State_EnterHoverMode(void);121void MetalSonic_State_Hovering(void);122void MetalSonic_State_PrepareAttack(void);123void MetalSonic_State_StartAttack(void);124void MetalSonic_State_SetupBallAttack_Phase1(void);125void MetalSonic_State_BallAttack_Phase1(void);126void MetalSonic_State_SetupElectricAttack_Phase1(void);127void MetalSonic_State_ElectricAttack_Phase1(void);128void MetalSonic_State_SetupDashAttack_Phase1(void);129void MetalSonic_State_DashAttack_Phase1(void);130131// Phase 2132void MetalSonic_State_EnterPanel(void);133void MetalSonic_State_StartPanelSequence(void);134void MetalSonic_HandlePanelAttack(void);135void MetalSonic_State_OpenFactoryDoor(void);136void MetalSonic_State_HandleSilverSonics(void);137void MetalSonic_State_PanelExplosion(void);138void MetalSonic_State_ExitFactory(void);139void MetalSonic_State_PrepareFinalChase(void);140141#if MANIA_USE_PLUS // Phase 3 (VS GigaMetal)142void MetalSonic_State_WaitForRuby(void);143void MetalSonic_State_ObtainRuby(void);144void MetalSonic_State_Transform(void);145void MetalSonic_State_Defeated(void);146#else // Phase 3 (VS Metal Sonic)147void MetalSonic_State_SetupSpikeWall(void);148void MetalSonic_State_FlyToSpikeWall(void);149void MetalSonic_State_LandNearSpikeWall(void);150void MetalSonic_State_Taunt_Phase2(void);151void MetalSonic_State_Ready_Phase2(void);152void MetalSonic_State_StartSpikeWallMovement(void);153void MetalSonic_State_AccelerateSpikeWall(void);154void MetalSonic_State_Hover_Phase2(void);155void MetalSonic_State_SetupBallAttack_Phase2(void);156void MetalSonic_State_BallAttack_Phase2(void);157void MetalSonic_State_FinishAttack_Phase2(void);158void MetalSonic_State_SetupElectricAttack_Phase2(void);159void MetalSonic_State_StartElectricAttack_Phase2(void);160void MetalSonic_State_ElectricAttack_Phase2(void);161void MetalSonic_State_DashAttack_Phase2(void);162void MetalSonic_State_Explode(void);163void MetalSonic_State_Defeated(void);164void MetalSonic_State_Finish(void);165void MetalSonic_State_None(void);166167void MetalSonic_StateWall_Fall(void);168void MetalSonic_StateWall_Move(void);169#endif170171#endif //! OBJ_METALSONIC_H172173174