Path: blob/master/SonicMania/Objects/ERZ/KleptoMobile.h
338 views
#ifndef OBJ_KLEPTOMOBILE_H1#define OBJ_KLEPTOMOBILE_H23#include "Game.h"45typedef enum {6KLEPTOMOBILE_EGGMAN,7KLEPTOMOBILE_ARM_L,8KLEPTOMOBILE_ARM_R,9KLEPTOMOBILE_HAND,10} KleptoMobileTypes;1112// Object Class13struct ObjectKleptoMobile {14RSDK_OBJECT15TABLE(int32 debrisInfo[29], { 4, 0, 0, -0x20000, -0x28000, 1, 0, -0x20000, -0x28000, 2, 0, 0x20000, -0x20000, 3, 0, 0x28000,16-0x20000, 4, 0, -0x10000, -0x10000, 5, 0, 0x10000, -0x10000, 6, 0, -0x8000, -0x10000 });17int32 boundsL;18int32 boundsR;19int32 boundsM;20int32 boundsT;21int32 boundsB;22uint16 sfxHit;23uint16 sfxExplosion;24uint16 sfxFlail;25uint16 sfxWhack;26uint16 sfxPowerUp;27uint16 sfxRocketJet;28uint16 aniFrames;29bool32 defeated;30};3132// Entity Class33struct EntityKleptoMobile {34RSDK_ENTITY35StateMachine(state);36StateMachine(stateDraw);37int32 type;38int32 timer;39int32 invincibilityTimer;40int32 health;41Vector2 originPos;42int32 armAngles[10]; // array of angles for the arm nodes, not actually used lol, possibly leftover from ERZ/PhantomKing?43Vector2 armPositions[10];44Vector2 armBezierPos;45Vector2 bashArmTargetPos;46Vector2 bashArmStartPos;47int32 attackCount;48int32 bashArmDelay;49int32 bashArmID;50bool32 canBashAttack;51Vector2 rubyPos;52bool32 holdingRuby;53int32 armAngle;54int32 circleRadius;55int32 explosionVolume;56EntityKleptoMobile *parent;57Animator basicAnimator; // not actually used it seems58Animator mobileTopAnimator;59Animator eggmanAnimator;60Animator mobileAnimator;61Animator unusedAnimator1;62Animator unusedAnimator2;63Animator orbAnimator;64Animator handAnimator;65Animator finger1Animator;66Animator finger2Animator;67Animator rubyAnimator;68Hitbox hitbox;69};7071// Object Struct72extern ObjectKleptoMobile *KleptoMobile;7374// Standard Entity Events75void KleptoMobile_Update(void);76void KleptoMobile_LateUpdate(void);77void KleptoMobile_StaticUpdate(void);78void KleptoMobile_Draw(void);79void KleptoMobile_Create(void *data);80void KleptoMobile_StageLoad(void);81#if GAME_INCLUDE_EDITOR82void KleptoMobile_EditorDraw(void);83void KleptoMobile_EditorLoad(void);84#endif85void KleptoMobile_Serialize(void);8687// Extra Entity Functions88void KleptoMobile_HandleAnimations(void);89void KleptoMobile_CheckPlayerCollisions(void);90void KleptoMobile_Hit(void);91void KleptoMobile_Explode(void);92void KleptoMobile_HandleFrames(void);93void KleptoMobile_SwitchToKing(void);9495void KleptoMobile_Draw_KleptoMobile(void);96void KleptoMobile_State_SetupArena(void);97void KleptoMobile_State_CutsceneControlled(void);98void KleptoMobile_State_MoveAround(void);99void KleptoMobile_State_Hover(void);100void KleptoMobile_HandleArmPositions(void);101void KleptoMobile_HandleChargeFinish(void);102void KleptoMobile_State_FirstChargeAttack(void);103void KleptoMobile_State_NextChargeAttacks(void);104void KleptoMobile_State_Switch(void);105void KleptoMobile_State_HitFall(void);106107void KleptoMobile_StateHand_Cutscene(void);108void KleptoMobile_StateHand_Boss(void);109void KleptoMobile_Draw_Hand(void);110111void KleptoMobile_CheckPlayerCollisions_Arm(void);112113void KleptoMobile_StateArm_Cutscene(void);114void KleptoMobile_StateArm_Idle(void);115void KleptoMobile_StateArm_BashAttack(void);116void KleptoMobile_StateArm_ChargeAttack(void);117void KleptoMobile_Draw_Arm(void);118119void KleptoMobile_State_Destroyed(void);120void KleptoMobile_State_Explode(void);121void KleptoMobile_State_CutsceneExplode(void);122123#endif //! OBJ_KLEPTOMOBILE_H124125126