Path: blob/master/SonicMania/Objects/FBZ/FBZ2Outro.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: FBZ2Outro Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectFBZ2Outro *FBZ2Outro;1112void FBZ2Outro_Update(void)13{14RSDK_THIS(FBZ2Outro);1516FBZ2Outro_StartCutscene(self);17self->active = ACTIVE_NEVER;18}1920void FBZ2Outro_LateUpdate(void) {}2122void FBZ2Outro_StaticUpdate(void) {}2324void FBZ2Outro_Draw(void) {}2526void FBZ2Outro_Create(void *data)27{28RSDK_THIS(FBZ2Outro);2930self->active = ACTIVE_NORMAL;31self->isPermanent = true;32}3334void FBZ2Outro_StageLoad(void) {}3536void FBZ2Outro_StartCutscene(EntityFBZ2Outro *outro)37{38CutsceneSeq_StartSequence(outro, FBZ2Outro_Cutscene_SetupGliders, FBZ2Outro_Cutscene_RunToGlider, FBZ2Outro_Cutscene_GlideAway,39StateMachine_None);4041#if MANIA_USE_PLUS42CutsceneSeq_SetSkipType(SKIPTYPE_RELOADSCN);43#endif4445HUD_MoveOut();46}4748bool32 FBZ2Outro_Cutscene_SetupGliders(EntityCutsceneSeq *host)49{50CutsceneSeq_LockAllPlayerControl();5152foreach_active(Player, player)53{54player->state = Player_State_Ground;55player->stateInput = StateMachine_None;56player->right = true;57}5859Vector2 size;60RSDK.GetLayerSize(Zone->fgLayer[0], &size, true);61size.x -= 128;6263for (int32 p = 0; p < Player->playerCount; ++p) {64Zone->cameraBoundsR[p] = size.x;65Zone->playerBoundActiveR[p] = false;66}6768foreach_all(HangGlider, glider) { glider->active = ACTIVE_NORMAL; }6970return true;71}7273bool32 FBZ2Outro_Cutscene_RunToGlider(EntityCutsceneSeq *host)74{75foreach_active(Player, player)76{77player->jumpPress = false;7879if (player->animator.animationID == ANI_PUSH) {80player->jumpPress = true;81player->jumpHold = true;82}83else {84if (player->velocity.y > 0x20000)85player->jumpHold = false;86}8788if (player->sidekick) {89foreach_active(HangGlider, glider)90{91if (player->onGround && glider->position.x - player->position.x < 0x1600000 && player->position.y - glider->position.y > 0x300000) {92player->jumpPress = true;93player->jumpHold = true;94player->jumpStrength = 0x70000;95}96}97}98}99100if (RSDK.GetEntityCount(Player->classID, true)) {101foreach_active(HangGlider, glider)102{103if (glider->state == HangGlider_State_Glide) {104foreach_active(FBZFan, fan)105{106if (abs(fan->position.x - glider->position.x) < 0x400000 && fan->position.y - glider->position.y < 0xA00000)107glider->velocity.y -= 0x3000;108}109}110}111}112else {113for (int32 p = 0; p < Player->playerCount; ++p) Zone->cameraBoundsT[p] = Zone->cameraBoundsB[p] - ScreenInfo->size.y;114115return true;116}117118return false;119}120121bool32 FBZ2Outro_Cutscene_GlideAway(EntityCutsceneSeq *host)122{123EntityPlayer *player1 = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);124125foreach_active(HangGlider, glider)126{127foreach_active(FBZFan, fan)128{129if (abs(fan->position.x - glider->position.x) < 0x400000 && fan->position.y - glider->position.y < 0xA00000)130glider->velocity.y -= 0x3000;131}132133if (glider->attachedPlayer == player1 && !glider->onScreen) {134Zone_StartFadeOut(10, 0x000000);135136return true;137}138}139140return false;141}142143#if GAME_INCLUDE_EDITOR144void FBZ2Outro_EditorDraw(void) {}145146void FBZ2Outro_EditorLoad(void) {}147#endif148149void FBZ2Outro_Serialize(void) {}150#endif151152153