Path: blob/master/SonicMania/Objects/MSZ/MSZCutsceneST.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: MSZCutsceneST Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectMSZCutsceneST *MSZCutsceneST;1011void MSZCutsceneST_Update(void)12{13RSDK_THIS(MSZCutsceneST);1415if (!self->activated && self->pathNode) {16MSZCutsceneST->tornadoPath = self->pathNode;17MSZCutsceneST_SetupCutscene();18self->activated = true;19}20}2122void MSZCutsceneST_LateUpdate(void) {}2324void MSZCutsceneST_StaticUpdate(void)25{26if (RSDK_GET_ENTITY(SLOT_PAUSEMENU, PauseMenu)->classID == PauseMenu->classID || !MSZCutsceneST->isMayday) {27if (MSZCutsceneST->playingMaydaySfx) {28RSDK.StopSfx(MSZCutsceneST->sfxMayday);29MSZCutsceneST->playingMaydaySfx = false;30}31}32else if (!MSZCutsceneST->playingMaydaySfx) {33RSDK.PlaySfx(MSZCutsceneST->sfxMayday, true, 255);34MSZCutsceneST->playingMaydaySfx = true;35}36}3738void MSZCutsceneST_Draw(void) {}3940void MSZCutsceneST_Create(void *data)41{42RSDK_THIS(MSZCutsceneST);4344INIT_ENTITY(self);45CutsceneRules_SetupEntity(self, &self->size, &self->hitbox);46self->active = ACTIVE_NEVER;47}4849void MSZCutsceneST_StageLoad(void)50{51MSZCutsceneST->finishedAct = false;5253foreach_all(SignPost, signPost)54{55MSZCutsceneST->signPost = signPost;56foreach_break;57}5859foreach_all(CutsceneHBH, hbh)60{61if (hbh->characterID == HBH_MYSTIC)62MSZCutsceneST->mystic = hbh;6364if (hbh->characterID == HBH_ROGUE_FANG) {65MSZCutsceneST->rogues[0] = hbh;66MSZCutsceneST->roguePlatforms[0] = RSDK_GET_ENTITY(RSDK.GetEntitySlot(hbh) + 1, Armadiloid);67}6869if (hbh->characterID == HBH_ROGUE_BEAN) {70MSZCutsceneST->rogues[1] = hbh;71MSZCutsceneST->roguePlatforms[1] = RSDK_GET_ENTITY(RSDK.GetEntitySlot(hbh) + 1, Armadiloid);72}7374if (hbh->characterID == HBH_ROGUE_BARK) {75MSZCutsceneST->rogues[2] = hbh;76MSZCutsceneST->roguePlatforms[2] = RSDK_GET_ENTITY(RSDK.GetEntitySlot(hbh) + 1, Armadiloid);77}78}7980foreach_all(Tornado, tornado)81{82MSZCutsceneST->tornado = tornado;83foreach_break;84}8586MSZCutsceneST->sfxExplosion3 = RSDK.GetSfx("Stage/Explosion3.wav");87MSZCutsceneST->sfxMayday = RSDK.GetSfx("MSZ/Mayday.wav");88MSZCutsceneST->sfxLedgeBreak = RSDK.GetSfx("Stage/LedgeBreak.wav");8990MSZCutsceneST->active = ACTIVE_ALWAYS;91}9293void MSZCutsceneST_SetupCutscene(void)94{95RSDK_THIS(MSZCutsceneST);9697CutsceneSeq_StartSequence(self, MSZCutsceneST_Cutscene_HandleSignPostLand, MSZCutsceneST_Cutscene_AwaitActFinish,98MSZCutsceneST_Cutscene_EnterMystic, MSZCutsceneST_Cutscene_PrepareAmbush, MSZCutsceneST_Cutscene_RoguesAmbush,99MSZCutsceneST_Cutscene_Mayday, MSZCutsceneST_Cutscene_SetPlayerMSZ2SpawnPos, MSZCutsceneST_Cutscene_PanCameraToPlayer,100MSZCutsceneST_Cutscene_SetupMSZ2, StateMachine_None);101102#if MANIA_USE_PLUS103CutsceneSeq_SetSkipType(SKIPTYPE_DISABLED);104#endif105}106107bool32 MSZCutsceneST_Cutscene_HandleSignPostLand(EntityCutsceneSeq *host)108{109EntitySignPost *signPost = MSZCutsceneST->signPost;110EntityCutsceneHBH *mystic = MSZCutsceneST->mystic;111112if (!host->timer) {113RSDK.PlaySfx(SignPost->sfxTwinkle, false, 0xFF);114signPost->state = SignPost_State_Falling;115mystic->visible = true;116foreach_all(ParallaxSprite, sprite) { sprite->visible = true; }117}118119mystic->position.x = signPost->position.x - 0x30000;120121if (signPost->position.y >= MSZCutsceneST->signPostOffsets[mystic->mainAnimator.frameID] + mystic->position.y - 0x3D0000) {122signPost->position.y = MSZCutsceneST->signPostOffsets[mystic->mainAnimator.frameID] + mystic->position.y - 0x3D0000;123signPost->state = SignPost_State_Spin;124RSDK.PlaySfx(SignPost->sfxSlide, false, 255);125signPost->spinCount = 4;126signPost->velocity.y = 0;127Music_FadeOut(0.025);128return true;129}130131return false;132}133134bool32 MSZCutsceneST_Cutscene_AwaitActFinish(EntityCutsceneSeq *host)135{136MANIA_GET_PLAYER(player1, player2, camera);137UNUSED(player2);138UNUSED(camera);139140EntitySignPost *signPost = MSZCutsceneST->signPost;141EntityCutsceneHBH *mystic = MSZCutsceneST->mystic;142143signPost->position.y = MSZCutsceneST->signPostOffsets[mystic->mainAnimator.frameID] + mystic->position.y - 0x3D0000;144if (signPost->state == SignPost_State_Done) {145player1->stateInput = StateMachine_None;146CutsceneSeq_LockAllPlayerControl();147player1->right = false;148player1->left = false;149player1->down = false;150player1->up = false;151player1->jumpPress = false;152player1->jumpHold = false;153}154155if (MSZCutsceneST->finishedAct) {156mystic->oscillate = false;157158TileLayer *fgLow = RSDK.GetTileLayer(Zone->fgLayer[0]);159for (int32 i = 0; i < fgLow->scrollInfoCount; ++i) {160fgLow->scrollInfo[i].parallaxFactor = 0x100;161fgLow->scrollInfo[i].scrollSpeed = 0;162}163164#if MANIA_USE_PLUS165CutsceneSeq_SetSkipType(SKIPTYPE_NEXTSCENE);166#endif167return true;168}169return false;170}171172bool32 MSZCutsceneST_Cutscene_EnterMystic(EntityCutsceneSeq *host)173{174MANIA_GET_PLAYER(player1, player2, camera);175UNUSED(player2);176UNUSED(camera);177178EntityTornado *tornado = MSZCutsceneST->tornado;179EntitySignPost *signPost = MSZCutsceneST->signPost;180EntityCutsceneHBH *mystic = MSZCutsceneST->mystic;181182if (!host->timer) {183Music_PlayTrack(TRACK_HBHMISCHIEF);184RSDK.SetSpriteAnimation(player1->aniFrames, ANI_RIDE, &player1->animator, false, 0);185player1->direction = FLIP_NONE;186}187188if (!host->values[0]) {189int32 x = (tornado->position.x & 0xFFFF0000) + 0x200000;190if (player1->position.x != x)191player1->position.x += (x - player1->position.x) >> 1;192193if (abs(player1->position.x - x) < 0x10000) {194player1->position.x = x;195MSZCutsceneST->tornadoStartPos = tornado->position;196host->storedTimer = host->timer;197host->values[0] = true;198}199}200201tornado->drawGroup = Zone->playerDrawGroup[0];202player1->drawGroup = Zone->playerDrawGroup[1];203mystic->velocity.y -= 0x800;204mystic->position.y += mystic->velocity.y;205mystic->drawGroup = Zone->objectDrawGroup[0];206signPost->position.y = mystic->position.y - 0x3D0000 + MSZCutsceneST->signPostOffsets[mystic->mainAnimator.frameID];207208Vector2 range;209range.x = ScreenInfo->size.x << 16;210range.y = ScreenInfo->size.y << 16;211if (!RSDK.CheckOnScreen(mystic, &range)) {212host->values[2] = true;213destroyEntity(mystic);214return true;215}216return false;217}218219bool32 MSZCutsceneST_Cutscene_PrepareAmbush(EntityCutsceneSeq *host)220{221MANIA_GET_PLAYER(player1, player2, camera);222UNUSED(player2);223UNUSED(camera);224225EntityTornado *tornado = MSZCutsceneST->tornado;226EntityTornadoPath *pathNode = MSZCutsceneST->tornadoPath;227int32 x = pathNode->position.x - 0x600000;228int32 y = pathNode->position.y + 0x300000;229230if (host->timer - host->storedTimer == 120 && !host->values[1]) {231tornado->position.x = x;232tornado->position.y = y;233host->values[0] = 1;234return true;235}236else {237MathHelpers_LerpSin512(&tornado->position, 255 * (host->timer - host->storedTimer) / 120, MSZCutsceneST->tornadoStartPos.x,238MSZCutsceneST->tornadoStartPos.y, x, y);239tornado->position.x &= 0xFFFF0000;240tornado->position.y &= 0xFFFF0000;241242player1->position.x = (tornado->position.x & 0xFFFF0000) + 0x200000;243if (player1->characterID == ID_TAILS)244player1->position.y = (tornado->position.y & 0xFFFF0000) - 0x2C0000;245else246player1->position.y = (tornado->position.y & 0xFFFF0000) - 0x300000;247}248249return false;250}251252bool32 MSZCutsceneST_Cutscene_RoguesAmbush(EntityCutsceneSeq *host)253{254bool32 (*rogueStates[3])(EntityCutsceneSeq *);255rogueStates[0] = MSZCutsceneST_Cutscene_ShowFang;256rogueStates[1] = MSZCutsceneST_Cutscene_ShowBean;257rogueStates[2] = MSZCutsceneST_Cutscene_ShowBark;258259if (!host->timer) {260MSZCutsceneST->rogueID = RSDK.Rand(0, 8) % 3;261262for (int32 i = 0; i < 3; ++i) {263if (i != MSZCutsceneST->rogueID) {264destroyEntity(MSZCutsceneST->rogues[i]);265destroyEntity(MSZCutsceneST->roguePlatforms[i]);266}267}268}269270EntityArmadiloid *armadiloid = MSZCutsceneST->roguePlatforms[MSZCutsceneST->rogueID];271armadiloid->drawGroup = Zone->objectDrawGroup[1];272armadiloid->boosterAnimator.speed = 1;273armadiloid->velocity.x = 0;274275return rogueStates[MSZCutsceneST->rogueID](host);276}277278bool32 MSZCutsceneST_Cutscene_ShowFang(EntityCutsceneSeq *host)279{280EntityTornado *tornado = MSZCutsceneST->tornado;281EntityTornadoPath *pathNode = MSZCutsceneST->tornadoPath;282EntityCutsceneHBH *rogue = MSZCutsceneST->rogues[MSZCutsceneST->rogueID];283EntityArmadiloid *armadiloid = MSZCutsceneST->roguePlatforms[MSZCutsceneST->rogueID];284285if (!host->timer)286armadiloid->state = Armadiloid_State_PlatformFlying;287288int32 x = pathNode->position.x + 0x600000;289int32 y = armadiloid->startPos.y;290291if (armadiloid->position.x > x) {292MathHelpers_Lerp2Sin1024(&armadiloid->position, 255 * host->timer / 180, armadiloid->startPos.x, armadiloid->startPos.y, x, y);293armadiloid->position.x &= 0xFFFF0000;294armadiloid->position.y &= 0xFFFF0000;295}296297if (host->timer == 180) {298armadiloid->position.x = x;299armadiloid->position.y = y;300host->values[0] = 1;301}302303if (host->values[0] && !host->values[1]) {304if (!rogue->mainAnimator.animationID)305RSDK.SetSpriteAnimation(rogue->aniFrames, 1, &rogue->mainAnimator, true, 0);306307if (rogue->mainAnimator.animationID == 1 && rogue->mainAnimator.frameID == rogue->mainAnimator.frameCount - 1308&& rogue->mainAnimator.timer == 12) {309RSDK.SetSpriteAnimation(rogue->aniFrames, 2, &rogue->mainAnimator, true, 0);310rogue->velocity.y = -0x20000;311RSDK.PlaySfx(HeavyMystic->sfxPon, false, 255);312313EntityDebris *debris = CREATE_ENTITY(Debris, NULL, rogue->position.x, rogue->position.y - 0x40000);314debris->position.x -= 0x180000;315debris->velocity.x = -0x20000;316debris->drawGroup = Zone->playerDrawGroup[1];317debris->state = Debris_State_Move;318debris->direction = FLIP_X;319debris->drawFX = FX_FLIP;320RSDK.SetSpriteAnimation(rogue->aniFrames, 4, &debris->animator, true, 0);321322MSZCutsceneST->projectile = (Entity *)debris;323}324325if (rogue->mainAnimator.animationID == 2) {326rogue->position.y += rogue->velocity.y;327rogue->velocity.y += 0x3800;328}329}330331rogue->position.x = armadiloid->position.x + 0x20000;332if (rogue->position.y > armadiloid->position.y - 0x200000) {333rogue->position.y = armadiloid->position.y - 0x200000;334rogue->velocity.y = 0;335336if (rogue->mainAnimator.animationID == 2) {337RSDK.SetSpriteAnimation(rogue->aniFrames, 1, &rogue->mainAnimator, true, 2);338rogue->mainAnimator.loopIndex = 3;339host->values[1] = 1;340}341}342343if (MSZCutsceneST->projectile && MSZCutsceneST->projectile->position.x <= tornado->position.x + 0x300000) {344destroyEntity(MSZCutsceneST->projectile);345return true;346}347348return false;349}350351bool32 MSZCutsceneST_Cutscene_ShowBean(EntityCutsceneSeq *host)352{353EntityTornado *tornado = MSZCutsceneST->tornado;354EntityTornadoPath *pathNode = MSZCutsceneST->tornadoPath;355EntityCutsceneHBH *rogue = MSZCutsceneST->rogues[MSZCutsceneST->rogueID];356EntityArmadiloid *armadiloid = MSZCutsceneST->roguePlatforms[MSZCutsceneST->rogueID];357358int32 x = pathNode->position.x + 0x600000;359int32 y = armadiloid->startPos.y;360361if (!host->timer)362armadiloid->state = Armadiloid_State_PlatformFlying;363364if (armadiloid->position.x > x) {365MathHelpers_Lerp2Sin1024(&armadiloid->position, 255 * host->timer / 180, armadiloid->startPos.x, armadiloid->startPos.y, x, y);366armadiloid->position.x &= 0xFFFF0000;367armadiloid->position.y &= 0xFFFF0000;368}369370if (host->timer == 180) {371armadiloid->position.x = x;372armadiloid->position.y = y;373host->values[0] = 1;374}375376if (host->values[0] && !host->values[1]) {377if (rogue->mainAnimator.animationID == 5) {378RSDK.SetSpriteAnimation(rogue->aniFrames, 7, &rogue->mainAnimator, true, 0);379}380381if (rogue->mainAnimator.animationID == 7) {382if (rogue->mainAnimator.frameID == 2 && !MSZCutsceneST->projectile) {383RSDK.PlaySfx(HeavyMystic->sfxDrop, false, 255);384EntityDebris *debris = CREATE_ENTITY(Debris, NULL, rogue->position.x, rogue->position.y - 0x130000);385debris->position.x += 0xB0000;386debris->velocity.x = -0x48000;387debris->velocity.y = -0x40000;388debris->gravityStrength = 0x3800;389debris->drawGroup = Zone->playerDrawGroup[1];390debris->state = Debris_State_Fall;391RSDK.SetSpriteAnimation(rogue->aniFrames, 11, &debris->animator, true, 0);392MSZCutsceneST->projectile = (Entity *)debris;393}394395if (rogue->mainAnimator.animationID == 7 && rogue->mainAnimator.frameID == 5 && rogue->mainAnimator.timer == 2) {396RSDK.SetSpriteAnimation(rogue->aniFrames, 5, &rogue->mainAnimator, true, 0);397host->values[1] = 1;398}399}400}401402rogue->position.x = armadiloid->position.x + 0x40000;403rogue->position.y = armadiloid->position.y - 0x200000;404405if (MSZCutsceneST->projectile && MSZCutsceneST->projectile->position.y >= tornado->position.y - 0x100000) {406destroyEntity(MSZCutsceneST->projectile);407return true;408}409410return false;411}412413bool32 MSZCutsceneST_Cutscene_ShowBark(EntityCutsceneSeq *host)414{415EntityTornado *tornado = MSZCutsceneST->tornado;416EntityTornadoPath *pathNode = MSZCutsceneST->tornadoPath;417EntityCutsceneHBH *rogue = MSZCutsceneST->rogues[MSZCutsceneST->rogueID];418EntityArmadiloid *armadiloid = MSZCutsceneST->roguePlatforms[MSZCutsceneST->rogueID];419420int32 x = pathNode->position.x + 0x600000;421int32 y = armadiloid->startPos.y;422423if (!host->timer)424armadiloid->state = Armadiloid_State_PlatformFlying;425426if (armadiloid->position.x > x) {427MathHelpers_Lerp2Sin1024(&armadiloid->position, 255 * host->timer / 180, armadiloid->startPos.x, armadiloid->startPos.y, x, y);428armadiloid->position.x &= 0xFFFF0000;429armadiloid->position.y &= 0xFFFF0000;430}431432if (host->timer == 180) {433armadiloid->position.x = x;434armadiloid->position.y = y;435host->values[0] = 1;436}437438if (host->values[0] && !host->values[1]) {439if (rogue->mainAnimator.animationID == 12)440RSDK.SetSpriteAnimation(rogue->aniFrames, 14, &rogue->mainAnimator, true, 0);441442if (rogue->mainAnimator.animationID == 14) {443if (rogue->mainAnimator.frameID == 3 && rogue->mainAnimator.timer == 1) {444RSDK.PlaySfx(HeavyMystic->sfxImpact2, false, 255);445Camera_ShakeScreen(0, 0, 2);446armadiloid->timer = 0;447armadiloid->state = Armadiloid_State_PlatformShoot;448RSDK.SetSpriteAnimation(Armadiloid->aniFrames, 2, &armadiloid->headAnimator, true, 0);449}450451if (rogue->mainAnimator.animationID == 14 && rogue->mainAnimator.frameID == 7 && rogue->mainAnimator.timer == 2) {452RSDK.SetSpriteAnimation(rogue->aniFrames, 12, &rogue->mainAnimator, true, 0);453host->values[1] = true;454}455}456}457458if (!MSZCutsceneST->projectile) {459foreach_active(Projectile, projectile)460{461MSZCutsceneST->projectile = (Entity *)projectile;462projectile->drawGroup = Zone->playerDrawGroup[1];463foreach_break;464}465}466467rogue->position.x = armadiloid->position.x + 0x40000;468rogue->position.y = armadiloid->position.y - 0x2C0000;469470if (MSZCutsceneST->projectile && MSZCutsceneST->projectile->position.x <= tornado->position.x + 0x300000) {471destroyEntity(MSZCutsceneST->projectile);472return true;473}474475return false;476}477478bool32 MSZCutsceneST_Cutscene_Mayday(EntityCutsceneSeq *host)479{480MANIA_GET_PLAYER(player1, player2, camera);481UNUSED(camera);482483EntityTornado *tornado = MSZCutsceneST->tornado;484EntityTornadoPath *pathNode = MSZCutsceneST->tornadoPath;485486if (!host->timer) {487RSDK.PlaySfx(MSZCutsceneST->sfxExplosion3, false, 255);488host->fadeWhite = 512;489MSZCutsceneST->isMayday = true;490RSDK.SetSpriteAnimation(-1, 0, &tornado->animatorPropeller, true, 0);491RSDK.SetSpriteAnimation(-1, 0, &tornado->animatorPilot, true, 0);492tornado->drawFX |= FX_ROTATE;493tornado->state = Tornado_State_Mayday;494tornado->rotation = 48;495player1->state = Player_State_Static;496player1->direction = FLIP_X;497RSDK.SetSpriteAnimation(player1->aniFrames, ANI_CLING, &player1->animator, true, 0);498player1->rotation = tornado->rotation;499tornado->active = ACTIVE_NORMAL;500pathNode->state = TornadoPath_State_SetTornadoSpeed;501destroyEntity(MSZCutsceneST->rogues[MSZCutsceneST->rogueID]);502destroyEntity(MSZCutsceneST->roguePlatforms[MSZCutsceneST->rogueID]);503504TileLayer *background1 = RSDK.GetTileLayer(0);505for (int32 i = 0; i < background1->scrollInfoCount; ++i) background1->scrollInfo[i].scrollPos = 0;506507TileLayer *background2 = RSDK.GetTileLayer(1);508for (int32 i = 0; i < background2->scrollInfoCount; ++i) background2->scrollInfo[i].scrollPos = 0;509510foreach_active(ParallaxSprite, sprite) { sprite->scrollPos.x = 0; }511512MSZSetup_ReloadBGParallax_Multiply(0x800);513}514515if (!host->values[2]) {516player1->position.x = tornado->position.x - 0x280000;517if (player1->characterID == ID_TAILS)518player1->position.y = tornado->position.y - 0x340000;519else520player1->position.y = tornado->position.y - 0x380000;521}522523if (!host->values[0]) {524host->fadeWhite = CLAMP(512 - ((host->timer - 45) << 9) / 60, 0, 512);525if (!host->fadeWhite)526host->values[0] = 1;527}528529if (host->timer == 150) {530player1->onGround = true;531player1->velocity.x = 0;532player1->velocity.y = 0;533player1->groundVel = 0;534player1->nextAirState = StateMachine_None;535player1->nextGroundState = StateMachine_None;536Player_Action_Jump(player1);537player1->direction = FLIP_NONE;538player1->velocity.x = 0xE0000;539host->values[2] = true;540if (player2->classID == Player->classID) {541player2->state = MSZSetup_PlayerState_PostCrashJumpIn;542player2->active = ACTIVE_NORMAL;543}544}545546if (TornadoPath->moveVel.y > 0 && !(Zone->timer % 5))547Camera_ShakeScreen(0, 2, 2);548549if (TornadoPath->moveVel.y < 0 && !host->values[3]) {550MSZCutsceneST->isMayday = false;551Camera_ShakeScreen(0, 0, 5);552MSZSetup_ReloadBGParallax_Multiply(0x200);553host->values[3] = true;554tornado->onGround = true;555host->storedTimer = host->timer;556Music_FadeOut(0.02);557RSDK.PlaySfx(MSZCutsceneST->sfxLedgeBreak, false, 255);558}559560if (tornado->onGround && !((host->timer - host->storedTimer) % 16)) {561EntityDebris *debris = CREATE_ENTITY(Debris, NULL, tornado->position.x, tornado->position.y);562debris->position.x += 0x2C0000;563debris->position.y += 0xC0000;564debris->drawGroup = Zone->objectDrawGroup[0];565debris->state = Debris_State_Move;566debris->timer = 53;567RSDK.SetSpriteAnimation(UberCaterkiller->aniFrames, 4, &debris->animator, true, 0);568MSZCutsceneST->projectile = (Entity *)debris;569}570571if (TornadoPath->crashFinished) {572MSZSetup_ReloadBGParallax_Multiply(0x000);573tornado->state = StateMachine_None;574return true;575}576577return false;578}579580bool32 MSZCutsceneST_Cutscene_SetPlayerMSZ2SpawnPos(EntityCutsceneSeq *host)581{582EntityPlayer *player1 = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);583584if (!host->timer) {585player1->position.x = 0x3DA00000;586player1->position.y = 0x5300000;587}588589return host->timer == 90;590}591592bool32 MSZCutsceneST_Cutscene_PanCameraToPlayer(EntityCutsceneSeq *host)593{594MANIA_GET_PLAYER(player1, player2, camera);595596if (!host->timer) {597TornadoPath->camera = NULL;598camera->boundsB = 0x5A00000;599Camera_SetupLerp(CAMERA_LERP_NORMAL, 0, player1->position.x + 0x340000, player1->position.y - 0x140000, 2);600MSZSetup_ReloadBGParallax_Multiply(0x400);601}602603if (camera->position.x == player1->position.x + 0x340000 && camera->position.y == player1->position.y - 0x140000) {604MSZSetup_ReloadBGParallax_Multiply(0x000);605606TileLayer *background1 = RSDK.GetTileLayer(0);607for (int32 i = 0; i < background1->scrollInfoCount; ++i) background1->scrollInfo[i].scrollPos &= 0xFFFF0000;608609TileLayer *background2 = RSDK.GetTileLayer(1);610for (int32 i = 0; i < background2->scrollInfoCount; ++i) background2->scrollInfo[i].scrollPos &= 0xFFFF0000;611612foreach_active(ParallaxSprite, sprite) { sprite->scrollPos.x &= 0xFFFF0000; }613614Zone->cameraBoundsL[0] = (player1->position.x >> 16) - 160;615Zone->cameraBoundsB[0] = (player1->position.y >> 16) - 112;616if (player2->classID != Player->classID || player2->onGround)617return true;618}619620return false;621}622623bool32 MSZCutsceneST_Cutscene_SetupMSZ2(EntityCutsceneSeq *host)624{625if (host->timer == 10) {626MSZSetup_State_StoreMSZ1ScrollPos_ST();627return true;628}629630return false;631}632633#if GAME_INCLUDE_EDITOR634void MSZCutsceneST_EditorDraw(void)635{636RSDK_THIS(MSZCutsceneST);637638CutsceneRules_DrawCutsceneBounds(self, &self->size);639}640641void MSZCutsceneST_EditorLoad(void) {}642#endif643644void MSZCutsceneST_Serialize(void) { RSDK_EDITABLE_VAR(MSZCutsceneST, VAR_VECTOR2, size); }645646647