Path: blob/master/SonicMania/Objects/PGZ/PSZ1Intro.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: PSZ1Intro Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectPSZ1Intro *PSZ1Intro;1112void PSZ1Intro_Update(void)13{14RSDK_THIS(PSZ1Intro);1516CutsceneSeq_StartSequence(self, PSZ1Intro_Cutscene_SetupGliders, PSZ1Intro_Cutscene_GlideAndJump, PSZ1Intro_Cutscene_HandleLanding,17StateMachine_None);1819#if MANIA_USE_PLUS20CutsceneSeq_SetSkipType(SKIPTYPE_DISABLED);21#endif2223self->active = ACTIVE_NEVER;24}2526void PSZ1Intro_LateUpdate(void) {}2728void PSZ1Intro_StaticUpdate(void) {}2930void PSZ1Intro_Draw(void) {}3132void PSZ1Intro_Create(void *data)33{34RSDK_THIS(PSZ1Intro);3536if (!SceneInfo->inEditor) {37self->active = ACTIVE_NORMAL;38self->isPermanent = true;3940if (!isMainGameMode() || !globals->enableIntro || CutsceneRules_CheckStageReload()) {41destroyEntity(self);4243foreach_all(HangGlider, glider) { destroyEntity(glider); }44}45}46}4748void PSZ1Intro_StageLoad(void) {}4950void PSZ1Intro_HandleGliderJump(EntityHangGlider *glider)51{52EntityPlayer *player = glider->attachedPlayer;5354if (player) {55player->state = Player_State_Air;56player->onGround = false;57player->velocity.x = glider->velocity.x >> 2;58player->velocity.y = -0x20000;59player->active = ACTIVE_NORMAL;60player->stateInput = StateMachine_None;61RSDK.SetSpriteAnimation(player->aniFrames, ANI_JUMP, &player->animator, true, 0);62glider->attachedPlayer = NULL;63}64}6566bool32 PSZ1Intro_Cutscene_SetupGliders(EntityCutsceneSeq *host)67{68RSDK_THIS(PSZ1Intro);6970CutsceneSeq_LockAllPlayerControl();7172int32 id = 0;73foreach_all(HangGlider, glider)74{75if (id < Player->playerCount) {76EntityPlayer *player = RSDK_GET_ENTITY(id, Player);77player->position.x = glider->position.x;78player->position.y = glider->position.y;79player->active = ACTIVE_NEVER;80glider->active = ACTIVE_NORMAL;81glider->attachedPlayer = player;82glider->velocity.x = 0x40000;83glider->velocity.y = -0x20000;8485RSDK.SetSpriteAnimation(player->aniFrames, ANI_SPRING_DIAGONAL, &glider->playerAnimator, true, 0);86glider->playerAnimator.rotationStyle = ROTSTYLE_FULL;87glider->rotation = 0x80;88glider->drawFX = FX_ROTATE;89glider->state = HangGlider_State_Glide;9091EntityCamera *camera = player->camera;92if (camera) {93camera->position.x = glider->position.x;94camera->position.y = glider->position.y;95camera->disableYOffset = true;96camera->offset.y = 0x200000;97}98else {99glider->velocity.x = 0x38000;100glider->gravityStrength = 0xE00;101}102103self->gliders[id] = glider;104}105else {106destroyEntity(glider);107}108109++id;110}111112BGSwitch->screenID = 0;113114RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = 0; // Background 1115RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT; // Background 2116RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT; // Background 3117118return true;119}120121bool32 PSZ1Intro_Cutscene_GlideAndJump(EntityCutsceneSeq *host)122{123RSDK_THIS(PSZ1Intro);124125if (++self->timer == 90) {126if (self->gliders[0])127PSZ1Intro_HandleGliderJump(self->gliders[0]);128}129130if (self->timer == 120) {131self->timer = 0;132133if (self->gliders[1])134PSZ1Intro_HandleGliderJump(self->gliders[1]);135136return true;137}138139return false;140}141142bool32 PSZ1Intro_Cutscene_HandleLanding(EntityCutsceneSeq *host)143{144foreach_active(HangGlider, glider)145{146if (!glider->onScreen)147destroyEntity(glider);148}149150foreach_active(Player, player)151{152if (player->onGround) {153if (player->sidekick) {154if (player->stateInput == StateMachine_None) {155player->stateInput = Player_Input_P2_AI;156157for (int32 i = 0; i < 16; ++i) Player->leaderPositionBuffer[i] = player->position;158}159}160else {161player->stateInput = Player_Input_P1;162}163164player->collisionPlane = 0;165player->groundVel = 0;166player->direction = FLIP_NONE;167}168else if (player->stateInput == StateMachine_None) {169return false;170}171}172173return true;174}175176#if GAME_INCLUDE_EDITOR177void PSZ1Intro_EditorDraw(void) {}178179void PSZ1Intro_EditorLoad(void) {}180#endif181182void PSZ1Intro_Serialize(void) {}183#endif184185186