Path: blob/master/SonicMania/Objects/MSZ/MSZCutsceneK.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: MSZCutsceneK Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectMSZCutsceneK *MSZCutsceneK;1011void MSZCutsceneK_Update(void)12{13RSDK_THIS(MSZCutsceneK);1415if (!self->activated) {16MSZCutsceneK_StartCutscene();17self->activated = true;18}19}2021void MSZCutsceneK_LateUpdate(void) {}2223void MSZCutsceneK_StaticUpdate(void) {}2425void MSZCutsceneK_Draw(void) {}2627void MSZCutsceneK_Create(void *data)28{29RSDK_THIS(MSZCutsceneK);3031INIT_ENTITY(self);32CutsceneRules_SetupEntity(self, &self->size, &self->hitbox);33self->active = ACTIVE_BOUNDS;34}3536void MSZCutsceneK_StageLoad(void)37{38MSZCutsceneK->playerFrames = RSDK.LoadSpriteAnimation("Players/KnuxCutsceneAIZ.bin", SCOPE_STAGE);3940MSZCutsceneK->sfxImpact = RSDK.GetSfx("Stage/Impact5.wav");41MSZCutsceneK->sfxDrop = RSDK.GetSfx("Stage/Drop.wav");4243MSZCutsceneK->mystic = NULL;44MSZCutsceneK->tornado = NULL;4546foreach_all(HeavyMystic, mystic)47{48MSZCutsceneK->mystic = mystic;49foreach_break;50}5152foreach_all(Tornado, tornado)53{54MSZCutsceneK->tornado = tornado;55foreach_break;56}57}5859#if MANIA_USE_PLUS60void MSZCutsceneK_Cutscene_SkipCB(void)61{62RSDK.SetScene("Mania Mode", "");63SceneInfo->listPos += TimeAttackData_GetManiaListPos(ZONE_MSZ, ACT_1, CHAR_KNUX);64}65#endif6667void MSZCutsceneK_StartCutscene(void)68{69RSDK_THIS(MSZCutsceneK);7071CutsceneSeq_StartSequence(self, MSZCutsceneK_Cutscene_RidingTornado, MSZCutsceneK_Cutscene_KnockedOffTornado, StateMachine_None);7273#if MANIA_USE_PLUS74CutsceneSeq_SetSkipTypeCallback(MSZCutsceneK_Cutscene_SkipCB);75#endif76}7778void MSZCutsceneK_SetupP2(int32 x, int32 y)79{80Player->sonicFrames = RSDK.LoadSpriteAnimation("Players/Sonic.bin", SCOPE_STAGE);81Player->superFrames = RSDK.LoadSpriteAnimation("Players/SuperSonic.bin", SCOPE_STAGE);8283RSDK.ResetEntitySlot(SLOT_PLAYER2, Player->classID, NULL);8485EntityPlayer *player2 = RSDK_GET_ENTITY(SLOT_PLAYER2, Player);86++Player->playerCount;87player2->characterID = ID_SONIC;88player2->position.x = x;89player2->position.y = y;90player2->aniFrames = Player->sonicFrames;91player2->tailFrames = -1;92player2->jumpOffset = 0x50000;93player2->stateAbility = Player_JumpAbility_Sonic;94player2->sensorY = 0x140000;95player2->stateInput = StateMachine_None;96player2->state = Player_State_Static;97RSDK.SetSpriteAnimation(Player->sonicFrames, ANI_RIDE, &player2->animator, true, 0);98}99100bool32 MSZCutsceneK_Cutscene_RidingTornado(EntityCutsceneSeq *host)101{102MANIA_GET_PLAYER(player1, player2, camera);103UNUSED(player2);104UNUSED(camera);105106EntityHeavyMystic *mystic = MSZCutsceneK->mystic;107EntityTornado *tornado = MSZCutsceneK->tornado;108if (!host->timer) {109SceneInfo->timeEnabled = false;110SceneInfo->milliseconds = 0;111player1->state = Player_State_Static;112player1->stateInput = StateMachine_None;113CutsceneSeq_LockAllPlayerControl();114player1->velocity.x = 0;115player1->velocity.y = 0;116RSDK.SetSpriteAnimation(MSZCutsceneK->playerFrames, 6, &player1->animator, true, 0);117MSZCutsceneK_SetupP2(0xCC0000, 0x29E0000);118}119120if (mystic->position.x > tornado->position.x - 0x100000) {121MSZCutsceneK->tornadoDistanceP1.x = player1->position.x - tornado->position.x;122MSZCutsceneK->tornadoDistanceP1.y = player1->position.y - tornado->position.y;123MSZCutsceneK->tornadoDistanceP2.x = player2->position.x - tornado->position.x;124MSZCutsceneK->tornadoDistanceP2.y = player2->position.y - tornado->position.y;125return true;126}127128return false;129}130131bool32 MSZCutsceneK_Cutscene_KnockedOffTornado(EntityCutsceneSeq *host)132{133MANIA_GET_PLAYER(player1, player2, camera);134UNUSED(player2);135UNUSED(camera);136137EntityTornado *tornado = MSZCutsceneK->tornado;138139if (!host->timer) {140Music_Stop();141RSDK.PlaySfx(MSZCutsceneK->sfxImpact, false, 0xFF);142tornado->velocity.y = -0x10000;143if (!host->values[0]) {144host->values[0] = true;145RSDK.PlaySfx(MSZCutsceneK->sfxDrop, false, 0xFF);146RSDK.SetSpriteAnimation(MSZCutsceneK->playerFrames, 4, &player1->animator, true, 0);147player1->velocity.x = -0x10000;148player1->velocity.y = -0x30000;149}150}151152tornado->position.x += tornado->velocity.x;153tornado->position.y += tornado->velocity.y;154155if (tornado->position.y >= tornado->movePos.y) {156tornado->velocity.y = 0;157tornado->position.y = tornado->movePos.y;158}159else {160tornado->velocity.y += 0x3800;161}162163if (host->values[0]) {164if (!host->values[2])165player1->velocity.y += 0x3800;166}167else {168player1->position.x = tornado->position.x + MSZCutsceneK->tornadoDistanceP1.x;169player1->position.y = tornado->position.y + MSZCutsceneK->tornadoDistanceP1.y;170}171172if (host->values[1]) {173if (host->timer - host->storedTimer == 15) {174globals->suppressTitlecard = true;175globals->suppressAutoMusic = true;176globals->enableIntro = true;177RSDK.SetScene("Mania Mode", "");178SceneInfo->listPos += TimeAttackData_GetManiaListPos(ZONE_MSZ, ACT_1, CHAR_KNUX);179Zone_StartFadeOut(10, 0x000000);180}181else if (host->timer - host->storedTimer == 60) {182player1->velocity.y = 0;183host->values[2] = true;184}185}186else if (player1->position.y > tornado->position.y) {187TornadoPath->camera = NULL;188host->values[1] = true;189host->storedTimer = host->timer;190MSZCutsceneK->pos3 = camera->position;191MSZCutsceneK->pos3.y += 0x1E00000;192Camera_SetupLerp(CAMERA_LERP_NORMAL, 0, MSZCutsceneK->pos3.x, MSZCutsceneK->pos3.y, 3);193}194195player2->position.x = tornado->position.x + MSZCutsceneK->tornadoDistanceP2.x;196player2->position.y = tornado->position.y + MSZCutsceneK->tornadoDistanceP2.y;197return false;198}199200#if GAME_INCLUDE_EDITOR201void MSZCutsceneK_EditorDraw(void)202{203RSDK_THIS(MSZCutsceneK);204205CutsceneRules_DrawCutsceneBounds(self, &self->size);206}207208void MSZCutsceneK_EditorLoad(void) {}209#endif210211void MSZCutsceneK_Serialize(void) { RSDK_EDITABLE_VAR(MSZCutsceneK, VAR_VECTOR2, size); }212213214