Path: blob/master/SonicMania/Objects/Title/TitleEggman.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: TitleEggman Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectTitleEggman *TitleEggman;1112void TitleEggman_Update(void)13{14RSDK_THIS(TitleEggman);1516StateMachine_Run(self->state);17}1819void TitleEggman_LateUpdate(void) {}2021void TitleEggman_StaticUpdate(void) {}2223void TitleEggman_Draw(void)24{25RSDK_THIS(TitleEggman);2627if (self->state == TitleEggman_State_Dust) {28RSDK.DrawSprite(&self->smokeAnimator, NULL, false);29}30else {31Vector2 drawPos;32self->drawFX = FX_NONE;33int32 angle = RSDK.Sin256(2 * self->timer) >> 1;3435for (int32 i = 1; i < 5; ++i) {36drawPos.x = (i << 8) * RSDK.Sin1024(angle) + self->position.x;37drawPos.y = self->position.y + 0x80000 + (i << 8) * RSDK.Cos1024(angle);38RSDK.DrawSprite(&self->chainAnimator, &drawPos, false);39}4041self->drawFX = FX_ROTATE;42drawPos.x = 0x500 * RSDK.Sin1024(angle) + self->position.x;43drawPos.y = 0x500 * RSDK.Cos1024(angle) + self->position.y + 0x80000;44self->rotation = -(angle >> 2);45RSDK.DrawSprite(&self->capsuleAnimator, &drawPos, false);4647self->drawFX = FX_FLIP;48RSDK.DrawSprite(&self->eggmanAnimator, NULL, false);49}50}5152void TitleEggman_Create(void *data)53{54RSDK_THIS(TitleEggman);5556if (!SceneInfo->inEditor) {57self->visible = true;58self->drawGroup = 3;59self->active = ACTIVE_NORMAL;6061if (data) {62RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 5, &self->smokeAnimator, true, 0);63self->state = TitleEggman_State_Dust;64}65else {66RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 2, &self->eggmanAnimator, true, 0);67RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 3, &self->chainAnimator, true, 0);68RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 4, &self->capsuleAnimator, true, 0);6970self->originPos = self->position;71self->velocity.x = 0x10000;72self->state = TitleEggman_State_Wait;73}74}75}7677void TitleEggman_StageLoad(void)78{79if (API.CheckDLC(DLC_PLUS))80TitleEggman->aniFrames = RSDK.LoadSpriteAnimation("Title/PlusLogo.bin", SCOPE_STAGE);81}8283void TitleEggman_State_Dust(void)84{85RSDK_THIS(TitleEggman);8687RSDK.ProcessAnimation(&self->smokeAnimator);8889if (self->smokeAnimator.frameID == self->smokeAnimator.frameCount - 1)90destroyEntity(self);91}92void TitleEggman_State_Wait(void)93{94RSDK_THIS(TitleEggman);9596if (++self->timer == 120) {97self->timer = 0;98self->state = TitleEggman_State_Move;99}100}101void TitleEggman_State_Move(void)102{103RSDK_THIS(TitleEggman);104105self->position.x += self->velocity.x;106self->originPos.y -= 0x6000;107108self->position.y = self->originPos.y + (RSDK.Sin256(4 * self->timer) << 10);109110++self->timer;111if (!(self->timer & 0xF))112CREATE_ENTITY(TitleEggman, INT_TO_VOID(true), self->position.x - 0xE0000, self->position.y + 0x80000);113114RSDK.ProcessAnimation(&self->eggmanAnimator);115RSDK.ProcessAnimation(&self->capsuleAnimator);116}117118#if GAME_INCLUDE_EDITOR119void TitleEggman_EditorDraw(void)120{121RSDK_THIS(TitleEggman);122123RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 2, &self->eggmanAnimator, true, 0);124RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 3, &self->chainAnimator, true, 0);125RSDK.SetSpriteAnimation(TitleEggman->aniFrames, 4, &self->capsuleAnimator, true, 0);126self->originPos = self->position;127128TitleEggman_Draw();129}130131void TitleEggman_EditorLoad(void) { TitleEggman->aniFrames = RSDK.LoadSpriteAnimation("Title/PlusLogo.bin", SCOPE_STAGE); }132#endif133134void TitleEggman_Serialize(void) {}135#endif136137138