Path: blob/master/SonicMania/Objects/AIZ/AIZEncoreTutorial.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: AIZEncoreTutorial Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectAIZEncoreTutorial *AIZEncoreTutorial;1112void AIZEncoreTutorial_Update(void)13{14RSDK_THIS(AIZEncoreTutorial);15RSDK.ProcessAnimation(&self->bubbleAnimator);16StateMachine_Run(self->state);17}1819void AIZEncoreTutorial_LateUpdate(void) {}2021void AIZEncoreTutorial_StaticUpdate(void) {}2223void AIZEncoreTutorial_Draw(void)24{25RSDK_THIS(AIZEncoreTutorial);26Vector2 drawPos;2728self->inkEffect = INK_NONE;29RSDK.DrawSprite(&self->bubbleAnimator, NULL, false);3031self->inkEffect = INK_ALPHA;32drawPos.x = (RSDK.Cos256(self->angle) << 12) + self->position.x;33drawPos.y = ((RSDK.Sin256(self->angle) + 512) << 11) + self->position.y;34RSDK.DrawSprite(&self->playerAnimator, &drawPos, false);3536drawPos.x = (RSDK.Cos256(self->angle + 128) << 12) + self->position.x;37drawPos.y = ((RSDK.Sin256(self->angle + 128) + 512) << 11) + self->position.y;38RSDK.DrawSprite(&self->buddyAnimator, &drawPos, false);3940drawPos.x = self->position.x;41drawPos.y = self->position.y - 0x100000;42RSDK.DrawSprite(&self->buttonPressAnimator, &drawPos, false);4344switch (self->buttonPressAnimator.frameID) {45default: break;4647case 0:48case 2: drawPos.y -= 0x30000; break;49}5051RSDK.DrawSprite(&self->buttonAnimator, &drawPos, false);52}5354void AIZEncoreTutorial_Create(void *data)55{56RSDK_THIS(AIZEncoreTutorial);57if (!SceneInfo->inEditor) {58self->visible = true;59self->drawGroup = Zone->objectDrawGroup[1];60self->active = ACTIVE_BOUNDS;61self->updateRange.x = 0x800000;62self->updateRange.y = 0x800000;63self->state = AIZEncoreTutorial_State_ShowTutBubble;6465RSDK.SetSpriteAnimation(AIZEncoreTutorial->cutsceneFrames, 7, &self->bubbleAnimator, true, 0);66RSDK.SetSpriteAnimation(AIZEncoreTutorial->cutsceneFrames, 4, &self->playerAnimator, true, 0);67RSDK.SetSpriteAnimation(AIZEncoreTutorial->cutsceneFrames, VOID_TO_INT(data), &self->buddyAnimator, true, 0);68RSDK.SetSpriteAnimation(AIZEncoreTutorial->cutsceneFrames, 8, &self->buttonPressAnimator, true, 0);69}70}7172void AIZEncoreTutorial_StageLoad(void)73{74AIZEncoreTutorial->cutsceneFrames = RSDK.LoadSpriteAnimation("AIZ/Cutscene.bin", SCOPE_STAGE);75AIZEncoreTutorial->dustFrames = RSDK.LoadSpriteAnimation("Global/Dust.bin", SCOPE_STAGE);76}7778void AIZEncoreTutorial_State_ShowTutBubble(void)79{80RSDK_THIS(AIZEncoreTutorial);81if (self->bubbleAnimator.frameID == 6) {82HUD_GetButtonFrame(&self->buttonAnimator, KEY_Y);83self->state = AIZEncoreTutorial_State_EnterTutorial;84}85}8687void AIZEncoreTutorial_State_EnterTutorial(void)88{89RSDK_THIS(AIZEncoreTutorial);90if (self->alpha >= 0x100) {91self->state = AIZEncoreTutorial_State_ShowSwapTutorial;92}93else {94self->alpha += 8;95}96}9798void AIZEncoreTutorial_State_ShowSwapTutorial(void)99{100RSDK_THIS(AIZEncoreTutorial);101RSDK.ProcessAnimation(&self->buttonPressAnimator);102HUD_GetButtonFrame(&self->buttonAnimator, KEY_Y);103104if (self->timer >= 60) {105self->angle += 4;106if (self->angle == 0x80 || self->angle == 0x100) {107self->timer = 0;108if (++self->swapCount == 3)109self->state = AIZEncoreTutorial_State_ExitTutorial;110}111self->angle &= 0xFF;112}113else {114self->timer++;115}116}117118void AIZEncoreTutorial_State_ExitTutorial(void)119{120RSDK_THIS(AIZEncoreTutorial);121if (self->alpha <= 0) {122for (int32 i = 0; i < 8; ++i) {123EntityDebris *debris =124CREATE_ENTITY(Debris, NULL, self->position.x + RSDK.Rand(-0x180000, 0x180000), self->position.y + RSDK.Rand(-0x100000, 0x100000));125debris->state = Debris_State_Move;126debris->velocity.x = RSDK.Rand(-0x20000, 0x20000);127debris->velocity.y = RSDK.Rand(-0x20000, 0x20000);128debris->drawFX = FX_FLIP | FX_SCALE;129debris->direction = i & 3;130debris->scale.x = RSDK.Rand(0x200, 0x400);131debris->scale.y = debris->scale.x;132debris->drawGroup = Zone->objectDrawGroup[1];133RSDK.SetSpriteAnimation(AIZEncoreTutorial->dustFrames, 0, &debris->animator, true, RSDK.Rand(0, 4));134}135destroyEntity(self);136}137else {138self->alpha -= 8;139}140}141142void AIZEncoreTutorial_State_ReturnToCutscene(void)143{144EntityCutsceneSeq *cutsceneSeq = RSDK_GET_ENTITY(SLOT_CUTSCENESEQ, CutsceneSeq);145EntityFXRuby *fxRuby = CREATE_ENTITY(FXRuby, NULL, 0, 0);146fxRuby->drawGroup = Zone->playerDrawGroup[1] + 1;147EncoreIntro->fxRuby = fxRuby;148PhantomRuby_PlaySfx(RUBYSFX_ATTACK4);149Music_FadeOut(0.012);150151cutsceneSeq->skipType = SKIPTYPE_DISABLED;152for (int32 i = 0; i < 64; ++i) {153if (cutsceneSeq->cutsceneStates[i] == EncoreIntro_Cutscene_SkipAndFadeOut)154CutsceneSeq_NewState(i, cutsceneSeq);155}156}157158#if GAME_INCLUDE_EDITOR159void AIZEncoreTutorial_EditorDraw(void) {}160161void AIZEncoreTutorial_EditorLoad(void) {}162#endif163164void AIZEncoreTutorial_Serialize(void) {}165#endif166167168