Path: blob/master/SonicMania/Objects/LRZ/LRZ1Outro.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: LRZ1Outro Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectLRZ1Outro *LRZ1Outro;1011void LRZ1Outro_Update(void)12{13RSDK_THIS(LRZ1Outro);1415LRZ1Outro_StartCutscene();16self->active = ACTIVE_NEVER;17}1819void LRZ1Outro_LateUpdate(void) {}2021void LRZ1Outro_StaticUpdate(void) {}2223void LRZ1Outro_Draw(void) {}2425void LRZ1Outro_Create(void *data)26{27RSDK_THIS(LRZ1Outro);2829self->active = ACTIVE_NORMAL;30}3132void LRZ1Outro_StageLoad(void) {}3334void LRZ1Outro_StartCutscene(void)35{36RSDK_THIS(LRZ1Outro);3738if (Zone->actID) {39CutsceneSeq_StartSequence(self, LRZ1Outro_CutsceneAct2_SetupActors, LRZ1Outro_CutsceneAct2_UsingDashLift, LRZ1Outro_CutsceneAct2_ExitDashLift,40StateMachine_None);41}42else {43CutsceneSeq_StartSequence(self, LRZ1Outro_CutsceneAct1_SetupActors, LRZ1Outro_CutsceneAct1_SetupDashLift, LRZ1Outro_CutsceneAct1_GoToDashLift,44LRZ1Outro_CutsceneAct1_UsingDashLift, StateMachine_None);45}4647#if MANIA_USE_PLUS48CutsceneSeq_SetSkipType(SKIPTYPE_RELOADSCN);49#endif5051for (int32 i = 0; i < 0x100; ++i) RSDK.SetPaletteEntry(5, i, 0x000000);52}5354bool32 LRZ1Outro_CutsceneAct1_SetupActors(EntityCutsceneSeq *host)55{56CutsceneSeq_LockAllPlayerControl();5758foreach_active(Player, player)59{60player->state = Player_State_Ground;61player->stateInput = StateMachine_None;62}6364Vector2 size;65RSDK.GetLayerSize(Zone->fgLayer[0], &size, true);6667for (int32 p = 0; p < Player->playerCount; ++p) Zone->cameraBoundsR[p] = size.x;6869return true;70}7172bool32 LRZ1Outro_CutsceneAct2_SetupActors(EntityCutsceneSeq *host)73{74RSDK_THIS(LRZ1Outro);7576foreach_all(Player, player)77{78player->onGround = true;79player->groundedStore = true;80player->direction = FLIP_X;81RSDK.SetSpriteAnimation(player->aniFrames, ANI_SPINDASH, &player->animator, true, 0);82player->state = Player_State_Spindash;83player->stateInput = StateMachine_None;84player->down = true;8586if (player->camera) {87player->camera->position.x = player->position.x;88player->camera->position.y = player->position.y;89player->camera->offset.x = 0;90player->camera->offset.y = 0;91}92}9394foreach_all(DashLift, lift) { self->lift = lift; }9596self->timer = 256;97RSDK.SetLimitedFade(0, 1, 5, 0x100, 128, 256);98LRZ2Setup->conveyorPalTimer = 0;99100return true;101}102103bool32 LRZ1Outro_CutsceneAct1_SetupDashLift(EntityCutsceneSeq *host)104{105RSDK_THIS(LRZ1Outro);106107foreach_active(Player, player)108{109player->left = false;110player->right = true;111player->jumpPress = false;112player->jumpHold = true;113114if (player->onGround) {115if (player->animator.animationID == ANI_PUSH)116player->jumpPress = true;117118if (!RSDK.ObjectTileCollision(player, player->collisionLayers, CMODE_FLOOR, 0, 0x100000, 0x160000, false))119player->jumpPress = true;120}121}122123self->lift = NULL;124foreach_active(DashLift, lift) { self->lift = lift; }125126return RSDK.GetEntityCount(DashLift->classID, true) > 0;127}128129bool32 LRZ1Outro_CutsceneAct1_GoToDashLift(EntityCutsceneSeq *host)130{131RSDK_THIS(LRZ1Outro);132133EntityDashLift *lift = self->lift;134135foreach_active(Player, player)136{137player->jumpHold = false;138player->jumpPress = false;139140if (player->animator.animationID == ANI_PUSH)141player->jumpPress = true;142143if (lift->position.x - player->position.x < 0x600000 && player->right && player->onGround)144player->jumpPress = true;145146if (player->position.x >= lift->position.x) {147player->position.x = lift->position.x;148player->velocity.x = 0;149player->groundVel = 0;150player->right = false;151player->direction = FLIP_X;152153if (!self->timer && !player->sidekick)154self->timer = 1;155}156}157158if (self->timer > 0)159self->timer++;160161if (self->timer >= 60) {162foreach_active(Player, playerPtr)163{164playerPtr->jumpHold = false;165playerPtr->jumpPress = false;166playerPtr->down = true;167}168169RSDK.CopyPalette(0, 128, 1, 128, 128);170return true;171}172173return false;174}175176bool32 LRZ1Outro_CutsceneAct1_UsingDashLift(EntityCutsceneSeq *host)177{178RSDK_THIS(LRZ1Outro);179180EntityDashLift *lift = self->lift;181182foreach_active(Player, player)183{184player->jumpPress = false;185if (!(Zone->timer & 0xF) && host->timer < 60)186player->jumpPress = true;187188if (player->camera) {189player->camera->offset.x >>= 1;190player->camera->offset.y >>= 1;191}192}193194if (host->timer > 120) {195self->timer += 2;196RSDK.SetLimitedFade(0, 1, 5, self->timer, 128, 256);197198if (self->timer > 256) {199globals->suppressTitlecard = true;200globals->suppressAutoMusic = true;201202Zone_StoreEntities(lift->position.x, lift->position.y);203RSDK.LoadScene();204205return true;206}207}208return false;209}210211bool32 LRZ1Outro_CutsceneAct2_UsingDashLift(EntityCutsceneSeq *host)212{213RSDK_THIS(LRZ1Outro);214215EntityDashLift *lift = self->lift;216217foreach_active(Player, playerPtr)218{219playerPtr->jumpPress = false;220if (!(Zone->timer & 0xF) && host->timer < 60)221playerPtr->jumpPress = true;222}223224if (lift->drawPos.y < lift->amplitude.y) {225if (self->timer > 0)226self->timer -= 2;227228RSDK.SetLimitedFade(0, 1, 5, self->timer, 128, 256);229230LRZ2Setup->conveyorPalTimer = 0;231}232else {233foreach_active(Player, player)234{235player->onGround = false;236player->down = false;237player->jumpPress = false;238player->direction = FLIP_NONE;239player->velocity.x = 0x20000;240player->groundVel = 0x20000;241player->velocity.y = -0x50000;242player->state = Player_State_Air;243244RSDK.SetSpriteAnimation(player->aniFrames, ANI_JUMP, &player->animator, true, 0);245}246247return true;248}249250return false;251}252253bool32 LRZ1Outro_CutsceneAct2_ExitDashLift(EntityCutsceneSeq *host)254{255bool32 landedOnGround = true;256257foreach_active(Player, player)258{259if (player->onGround) {260player->velocity.x = 0;261player->groundVel = 0;262}263else {264player->velocity.x = 0x20000;265landedOnGround = false;266}267}268269if (landedOnGround) {270foreach_active(Player, playerPtr)271{272if (!playerPtr->sidekick)273playerPtr->stateInput = Player_Input_P1;274else275playerPtr->stateInput = Player_Input_P2_AI;276}277278foreach_all(TitleCard, titleCard)279{280titleCard->active = ACTIVE_NORMAL;281titleCard->state = TitleCard_State_SetupBGElements;282titleCard->stateDraw = TitleCard_Draw_SlideIn;283foreach_break;284}285286globals->suppressAutoMusic = false;287Music_PlayTrack(TRACK_STAGE);288289return true;290}291292return false;293}294295#if GAME_INCLUDE_EDITOR296void LRZ1Outro_EditorDraw(void) {}297298void LRZ1Outro_EditorLoad(void) {}299#endif300301void LRZ1Outro_Serialize(void) {}302303304