Path: blob/master/SonicMania/Objects/Common/Eggman.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: Eggman Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectEggman *Eggman;1011void Eggman_Update(void)12{13RSDK_THIS(Eggman);1415StateMachine_Run(self->state);16}1718void Eggman_LateUpdate(void) {}1920void Eggman_StaticUpdate(void) {}2122void Eggman_Draw(void)23{24RSDK_THIS(Eggman);2526if (self->parent) {27self->position.x = self->parent->position.x + self->offset.x;28self->position.y = self->parent->position.y + self->offset.y;29}3031RSDK.DrawSprite(&self->animator, NULL, false);32}3334void Eggman_Create(void *data)35{36RSDK_THIS(Eggman);3738if (!SceneInfo->inEditor) {39if (globals->gameMode < MODE_TIMEATTACK) {40RSDK.SetSpriteAnimation(Eggman->aniFrames, 0, &self->animator, true, 0);41self->active = ACTIVE_NORMAL;42self->visible = true;43self->drawFX = FX_FLIP;44self->drawGroup = Zone->objectDrawGroup[0];45self->parent = (Entity *)data;46self->updateRange.x = TO_FIXED(64);47self->updateRange.y = TO_FIXED(128);48self->hitbox.left = -10;49self->hitbox.top = -24;50self->hitbox.right = 10;51self->hitbox.bottom = 27;52}53else {54destroyEntity(self);55}56}57}5859void Eggman_StageLoad(void)60{61if (RSDK.CheckSceneFolder("GHZCutscene"))62Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanGHZCutt.bin", SCOPE_STAGE);63else if (RSDK.CheckSceneFolder("FBZ"))64Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanFBZ.bin", SCOPE_STAGE);65else if (RSDK.CheckSceneFolder("TMZ3"))66Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanTMZ.bin", SCOPE_STAGE);67else68Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanAll.bin", SCOPE_STAGE);69}7071void Eggman_State_ProcessAnimation(void)72{73RSDK_THIS(Eggman);7475RSDK.ProcessAnimation(&self->animator);76}7778void Eggman_State_ProcessThenSet(void)79{80RSDK_THIS(Eggman);8182RSDK.ProcessAnimation(&self->animator);8384if (self->animator.frameID >= self->animator.frameCount - 1) {85RSDK.SetSpriteAnimation(Eggman->aniFrames, self->animID, &self->animator, true, 0);86self->state = Eggman_State_ProcessAnimation;87}88}8990void Eggman_State_ProcessUntilEnd(void)91{92RSDK_THIS(Eggman);9394if (self->animator.frameID < self->animator.frameCount - 1)95RSDK.ProcessAnimation(&self->animator);96}9798void Eggman_State_ProcessAirThenSet(void)99{100RSDK_THIS(Eggman);101102RSDK.ProcessAnimation(&self->animator);103104if (self->onGround) {105RSDK.SetSpriteAnimation(Eggman->aniFrames, self->animID, &self->animator, true, 0);106self->state = Eggman_State_ProcessAnimation;107}108else {109self->velocity.y += 0x3800;110self->position.x += self->velocity.x;111self->position.y += self->velocity.y;112}113}114115void Eggman_State_FallUntilTimerReset(void)116{117RSDK_THIS(Eggman);118119RSDK.ProcessAnimation(&self->animator);120121if (self->timer <= 0) {122RSDK.SetSpriteAnimation(Eggman->aniFrames, self->animID, &self->animator, true, 0);123self->velocity.x = 0;124self->velocity.y = 0;125self->state = self->nextState;126}127else {128self->velocity.y += 0x3800;129self->position.x += self->velocity.x;130self->position.y += self->velocity.y;131132self->timer--;133}134}135136void Eggman_State_FallAndCollide(void)137{138RSDK_THIS(Eggman);139140RSDK.ProcessAnimation(&self->animator);141142self->velocity.y += 0x3800;143self->position.y += self->velocity.y;144if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, self->collisionPlane, 0, TO_FIXED(16), true)) {145self->onGround = true;146self->state = Eggman_State_ProcessAnimation;147}148}149150void Eggman_State_WalkOffScreen(void)151{152RSDK_THIS(Eggman);153154RSDK.ProcessAnimation(&self->animator);155156self->position.x += self->velocity.x;157self->velocity.x += 0x200;158159if (!RSDK.CheckOnScreen(self, NULL)) {160self->active = ACTIVE_NEVER;161self->state = Eggman_State_ProcessAnimation;162}163}164165#if GAME_INCLUDE_EDITOR166void Eggman_EditorDraw(void)167{168RSDK_THIS(Eggman);169170RSDK.SetSpriteAnimation(Eggman->aniFrames, 0, &self->animator, true, 0);171self->active = ACTIVE_NORMAL;172self->visible = true;173self->drawFX = FX_FLIP;174self->updateRange.x = 0x400000;175self->updateRange.y = 0x800000;176177RSDK.DrawSprite(&self->animator, NULL, false);178}179180void Eggman_EditorLoad(void)181{182if (RSDK.CheckSceneFolder("GHZCutscene"))183Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanGHZCutt.bin", SCOPE_STAGE);184else if (RSDK.CheckSceneFolder("FBZ"))185Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanFBZ.bin", SCOPE_STAGE);186else if (RSDK.CheckSceneFolder("TMZ3"))187Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanTMZ.bin", SCOPE_STAGE);188else189Eggman->aniFrames = RSDK.LoadSpriteAnimation("Eggman/EggmanAll.bin", SCOPE_STAGE);190}191#endif192193void Eggman_Serialize(void) {}194195196