Path: blob/master/SonicMania/Objects/MMZ/MMZ2Outro.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: MMZ2Outro Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectMMZ2Outro *MMZ2Outro;1112void MMZ2Outro_Update(void)13{14RSDK_THIS(MMZ2Outro);1516MMZ2Outro_StartCutscene();17self->active = ACTIVE_NEVER;18}1920void MMZ2Outro_LateUpdate(void) {}2122void MMZ2Outro_StaticUpdate(void) {}2324void MMZ2Outro_Draw(void) {}2526void MMZ2Outro_Create(void *data)27{28RSDK_THIS(MMZ2Outro);29self->active = ACTIVE_NORMAL;30self->isPermanent = true;31}3233void MMZ2Outro_StageLoad(void)34{35MMZ2Outro->sfxThunda = RSDK.GetSfx("MMZ/ThundaVerb.wav");36MMZ2Outro->sfxLightsOut = RSDK.GetSfx("MMZ/LightsOut.wav");37MMZ2Outro->sfxTMZEyes = RSDK.GetSfx("MMZ/TMZEyes.wav");38}3940void MMZ2Outro_StartCutscene(void)41{42RSDK_THIS(MMZ2Outro);4344CutsceneSeq_StartSequence(self, MMZ2Outro_Cutscene_PowerDown, MMZ2Outro_Cutscene_Rumble, MMZ2Outro_Cutscene_CameraMoveToWindow,45MMZ2Outro_Cutscene_PlayerMoveToWindow, MMZ2Outro_Cutscene_EnterMonarchEyes, MMZ2Outro_Cutscene_ViewMonarch,46StateMachine_None);4748#if MANIA_USE_PLUS49CutsceneSeq_SetSkipType(SKIPTYPE_RELOADSCN);50#endif5152RSDK.CopyPalette(0, 1, 1, 1, 0xFF);5354for (int32 i = 128; i < 256; ++i) RSDK.SetPaletteEntry(2, i, 0x000000);55for (int32 i = 0; i < 256; ++i) RSDK.SetPaletteEntry(5, i, 0xFFFFFF);5657RSDK.GetTileLayer(0)->drawGroup[0] = DRAWGROUP_COUNT;58RSDK.GetTileLayer(1)->drawGroup[0] = DRAWGROUP_COUNT;59RSDK.GetTileLayer(2)->drawGroup[0] = 0;60RSDK.GetTileLayer(3)->drawGroup[0] = 0;61RSDK.GetTileLayer(4)->drawGroup[0] = 0;6263HUD_MoveOut();64}6566bool32 MMZ2Outro_Cutscene_PowerDown(EntityCutsceneSeq *host)67{68RSDK_THIS(MMZ2Outro);6970if (++self->timer == 60) {71self->timer = 0;72Camera_ShakeScreen(0, 0, 4);7374foreach_active(Player, player)75{76player->stateInput = StateMachine_None;7778if (player->onGround) {79player->state = Player_State_Static;80RSDK.SetSpriteAnimation(player->aniFrames, ANI_BALANCE_1, &player->animator, false, 0);81}82else {83player->state = Player_State_Air;84player->velocity.x = 0;85}86}8788RSDK.PlaySfx(MMZ2Outro->sfxLightsOut, false, 0xFF);89Zone->cameraBoundsT[0] = 0;9091return true;92}9394return false;95}9697bool32 MMZ2Outro_Cutscene_Rumble(EntityCutsceneSeq *host)98{99RSDK_THIS(MMZ2Outro);100101self->timer += 16;102if (self->timer <= 128)103RSDK.SetLimitedFade(0, 1, 2, self->timer, 128, 224);104105RSDK.SetLimitedFade(0, 1, 2, self->timer, 224, 256);106if (self->timer == 1024) {107self->timer = -256;108foreach_active(Player, player) { player->state = Player_State_Ground; }109return true;110}111else {112foreach_active(Player, player)113{114if (player->onGround && player->state != Player_State_Static) {115player->state = Player_State_Static;116player->groundVel = 0;117RSDK.SetSpriteAnimation(player->aniFrames, ANI_BALANCE_1, &player->animator, false, 0);118}119}120}121122return false;123}124125bool32 MMZ2Outro_Cutscene_CameraMoveToWindow(EntityCutsceneSeq *host)126{127RSDK_THIS(MMZ2Outro);128129CutsceneSeq_LockAllPlayerControl();130131foreach_active(Player, player)132{133player->state = Player_State_Ground;134player->right = true;135player->groundVel = 1;136137if (player->camera) {138player->camera->boundsR += 0x240;139player->camera = NULL;140}141}142143for (int32 p = 0; p < Player->playerCount; ++p) {144Zone->cameraBoundsR[p] += 0x240;145Zone->playerBoundsR[p] += 0x2400000;146}147148self->position.x = (Zone->cameraBoundsR[0] - ScreenInfo->center.x) << 16;149self->position.y = (Zone->cameraBoundsB[0] - ScreenInfo->center.y) << 16;150151RSDK_GET_ENTITY(SLOT_CAMERA1, Camera)->position.x = (ScreenInfo->position.x + ScreenInfo->center.x) << 16;152Camera_SetupLerp(CAMERA_LERP_SIN512, 0, self->position.x, self->position.y, 2);153154return true;155}156157bool32 MMZ2Outro_Cutscene_PlayerMoveToWindow(EntityCutsceneSeq *host)158{159RSDK_THIS(MMZ2Outro);160161bool32 finished = true;162163foreach_active(Player, player)164{165player->jumpPress = false;166167if (player->animator.animationID == ANI_PUSH) {168player->jumpPress = true;169player->jumpHold = true;170}171else if (player->velocity.y > 0x20000) {172player->jumpHold = false;173}174175if (player->groundVel > 0x40000)176player->groundVel = 0x40000;177178if (player->position.x <= self->position.x - 0x180000 * player->playerID - 0x200000) {179finished = false;180}181else {182player->groundVel = 0;183player->right = false;184}185}186187return finished;188}189190bool32 MMZ2Outro_Cutscene_EnterMonarchEyes(EntityCutsceneSeq *host)191{192RSDK_THIS(MMZ2Outro);193194self->timer += 8;195RSDK.SetLimitedFade(0, 2, 1, self->timer, 231, 234);196197if (self->timer == 256)198RSDK.PlaySfx(MMZ2Outro->sfxTMZEyes, false, 255);199200if (self->timer == 512) {201foreach_active(Player, player) { player->up = true; }202}203204if (self->timer == 768) {205self->timer = 0;206self->flashTimer = 0;207return true;208}209210return false;211}212213bool32 MMZ2Outro_Cutscene_ViewMonarch(EntityCutsceneSeq *host)214{215RSDK_THIS(MMZ2Outro);216217if (--self->flashTimer <= 0) {218CREATE_ENTITY(MMZLightning, MMZLightning_State_BeginFadeIn, 0, 0);219CREATE_ENTITY(MMZLightning, MMZLightning_State_SetupLightningBig, 0, 0);220221RSDK.PlaySfx(MMZ2Outro->sfxThunda, false, 255);222self->flashTimer = RSDK.Rand(120, 240);223224foreach_active(Player, player)225{226if (player->characterID == ID_TAILS) {227player->state = Player_State_Air;228player->onGround = false;229player->velocity.y = -0x30000;230RSDK.SetSpriteAnimation(player->aniFrames, ANI_HURT, &player->animator, false, 0);231}232}233}234235if ((self->timer & 7) == 4 && self->flashTimer < 48)236CREATE_ENTITY(MMZLightning, MMZLightning_State_SetupLightningSmall, 0, 0);237238if (++self->timer == 120) {239EntityCamera *camera = RSDK_GET_ENTITY(SLOT_CAMERA1, Camera);240Camera_SetupLerp(CAMERA_LERP_SIN512, 0, camera->position.x, camera->position.y - 0x1000000, 1);241}242243if (self->timer == 600) {244Zone_StartFadeOut(10, 0x000000);245return true;246}247248return false;249}250251#if GAME_INCLUDE_EDITOR252void MMZ2Outro_EditorDraw(void) {}253254void MMZ2Outro_EditorLoad(void) {}255#endif256257void MMZ2Outro_Serialize(void) {}258#endif259260261