Path: blob/master/SonicMania/Objects/GHZ/GHZSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: GHZSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectGHZSetup *GHZSetup;1011void GHZSetup_Update(void) {}1213void GHZSetup_LateUpdate(void) {}1415void GHZSetup_StaticUpdate(void)16{17GHZSetup->paletteTimer += 42;18if (GHZSetup->paletteTimer >= 0x100) {19GHZSetup->paletteTimer -= 0x100;20RSDK.RotatePalette(1, 181, 184, true);21RSDK.RotatePalette(2, 181, 184, true);22RSDK.RotatePalette(1, 197, 200, true);23RSDK.RotatePalette(2, 197, 200, true);24}25RSDK.SetLimitedFade(0, 1, 2, GHZSetup->paletteTimer, 181, 184);26RSDK.SetLimitedFade(0, 1, 2, GHZSetup->paletteTimer, 197, 200);2728--GHZSetup->sunFlowerTimer;29if (GHZSetup->sunFlowerTimer < 1) {30++GHZSetup->sunFlowerFrame;31GHZSetup->sunFlowerFrame &= 7;32GHZSetup->sunFlowerTimer = GHZSetup->sunFlowerDurationTable[GHZSetup->sunFlowerFrame];33RSDK.DrawAniTiles(GHZSetup->aniTiles, 427, 0, 32 * GHZSetup->sunFlowerFrame, 32, 32);34}3536--GHZSetup->extendFlowerTimer;37if (GHZSetup->extendFlowerTimer < 1) {38++GHZSetup->extendFlowerFrame;39GHZSetup->extendFlowerFrame &= 0xF;40GHZSetup->extendFlowerTimer = GHZSetup->extendFlowerDurationTable[GHZSetup->extendFlowerFrame];41RSDK.DrawAniTiles(GHZSetup->aniTiles, 431, 0, 48 * GHZSetup->extendFlowerFrame + 256, 32, 48);42}43}4445void GHZSetup_Draw(void) {}4647void GHZSetup_Create(void *data) {}4849void GHZSetup_StageLoad(void)50{51GHZSetup->aniTiles = RSDK.LoadSpriteSheet("GHZ/AniTiles.gif", SCOPE_STAGE);5253Animals->animalTypes[0] = ANIMAL_FLICKY;54Animals->animalTypes[1] = ANIMAL_POCKY;5556if (Zone->actID) {57BGSwitch->switchCallback[GHZ_BG_OUTSIDE] = GHZSetup_BGSwitch_Outside_Act2;58BGSwitch->switchCallback[GHZ_BG_CAVES] = GHZSetup_BGSwitch_Caves_Act2;5960BGSwitch->layerIDs[0] = GHZ_BG_OUTSIDE;61BGSwitch->layerIDs[1] = GHZ_BG_OUTSIDE;62BGSwitch->layerIDs[2] = GHZ_BG_OUTSIDE;63BGSwitch->layerIDs[3] = GHZ_BG_OUTSIDE;6465if (isMainGameMode() && globals->atlEnabled) {66if (!CutsceneRules_CheckStageReload())67GHZSetup_HandleActTransition();68}6970if (isMainGameMode() && CutsceneRules_IsAct2())71Zone->stageFinishCallback = GHZSetup_StageFinish_EndAct2;72}73else {74TileLayer *backgroundOutside = RSDK.GetTileLayer(0);75backgroundOutside->scrollPos = 0x180000;76backgroundOutside->parallaxFactor = -backgroundOutside->parallaxFactor;7778BGSwitch->switchCallback[GHZ_BG_OUTSIDE] = GHZSetup_BGSwitch_Outside_Act1;79BGSwitch->switchCallback[GHZ_BG_CAVES] = GHZSetup_BGSwitch_Caves_Act1;8081if (!isMainGameMode() || !globals->atlEnabled || CutsceneRules_CheckStageReload()) {82BGSwitch->layerIDs[0] = GHZ_BG_OUTSIDE;83BGSwitch->layerIDs[1] = GHZ_BG_OUTSIDE;84BGSwitch->layerIDs[2] = GHZ_BG_OUTSIDE;85BGSwitch->layerIDs[3] = GHZ_BG_OUTSIDE;86}87else {88GHZSetup_SetupAct1BG();89}9091if (isMainGameMode() && CutsceneRules_IsAct1())92Zone->stageFinishCallback = GHZSetup_StageFinish_EndAct1;93}9495#if MANIA_USE_PLUS96if (SceneInfo->filter & FILTER_ENCORE || (RSDK.CheckSceneFolder("GHZCutscene") && globals->gameMode == MODE_ENCORE)) {97RSDK.LoadPalette(0, "EncoreGHZ.act", 0b0000000011111111);98RSDK.CopyPalette(0, 128, 1, 128, 80);99RSDK.CopyPalette(0, 128, 2, 128, 80);100RSDK.RotatePalette(2, 181, 184, true);101RSDK.RotatePalette(2, 197, 200, true);102103if (Water) {104foreach_all(Water, water)105{106water->r = 0xA0;107water->g = 0xA0;108water->b = 0xE0;109}110}111}112#endif113}114115void GHZSetup_SetupAct1BG(void)116{117if (CHECK_CHARACTER_ID(ID_KNUCKLES, 1)) {118BGSwitch->layerIDs[0] = GHZ_BG_CAVES;119BGSwitch->layerIDs[1] = GHZ_BG_CAVES;120BGSwitch->layerIDs[2] = GHZ_BG_CAVES;121BGSwitch->layerIDs[3] = GHZ_BG_CAVES;122123for (BGSwitch->screenID = 0; BGSwitch->screenID < RSDK.GetVideoSetting(VIDEOSETTING_SCREENCOUNT); ++BGSwitch->screenID) {124GHZSetup_BGSwitch_Caves_Act2();125}126Zone_ReloadStoredEntities(WIDE_SCR_XCENTER << 16, 1724 << 16, true);127}128else {129Zone_ReloadStoredEntities(WIDE_SCR_XCENTER << 16, 1004 << 16, true);130TileLayer *outsideLayer = RSDK.GetTileLayer(RSDK.GetTileLayerID("BG Outside"));131EntityPlayer *player = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);132133player->onGround = true;134player->state = Player_State_Ground;135for (int32 s = 0; s < outsideLayer->scrollInfoCount; ++s) {136outsideLayer->scrollInfo[s].scrollPos += globals->parallaxOffset[0] * outsideLayer->scrollInfo[s].scrollSpeed;137}138}139}140void GHZSetup_StageFinish_EndAct1(void)141{142Zone_StoreEntities(15792 << 16, 1588 << 16);143RSDK.LoadScene();144}145void GHZSetup_HandleActTransition(void)146{147Zone->cameraBoundsL[0] = 256 - ScreenInfo->center.x;148Zone->cameraBoundsB[0] = 1412;149150Zone_ReloadStoredEntities(256 << 16, 1412 << 16, true);151152TileLayer *bgCave1 = RSDK.GetTileLayer(2);153bgCave1->scrollPos += 0xB000 * bgCave1->parallaxFactor;154for (int32 s = 0; s < bgCave1->scrollInfoCount; ++s) {155bgCave1->scrollInfo[s].scrollPos += 0x3CB000 * bgCave1->scrollInfo[s].parallaxFactor;156}157158TileLayer *bgCave2 = RSDK.GetTileLayer(3);159bgCave2->scrollPos += 0xB000 * bgCave2->parallaxFactor;160for (int32 s = 0; s < bgCave2->scrollInfoCount; ++s) {161bgCave2->scrollInfo[s].scrollPos += 0x3CB000 * bgCave2->scrollInfo[s].parallaxFactor;162}163164for (BGSwitch->screenID = 0; BGSwitch->screenID < RSDK.GetVideoSetting(VIDEOSETTING_SCREENCOUNT); ++BGSwitch->screenID) {165GHZSetup_BGSwitch_Caves_Act2();166}167}168void GHZSetup_BGSwitch_Outside_Act2(void)169{170RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = 0;171RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = 0;172RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;173RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;174}175void GHZSetup_BGSwitch_Caves_Act2(void)176{177RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;178RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;179RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = 0;180RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = 0;181}182void GHZSetup_BGSwitch_Outside_Act1(void)183{184RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = 0;185RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;186RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;187}188void GHZSetup_BGSwitch_Caves_Act1(void)189{190RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;191RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = 0;192RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = 0;193}194void GHZSetup_StageFinish_EndAct2(void) { CREATE_ENTITY(GHZ2Outro, INT_TO_VOID(true), 0, 0); }195196#if GAME_INCLUDE_EDITOR197void GHZSetup_EditorDraw(void) {}198199void GHZSetup_EditorLoad(void)200{201RSDK_ACTIVE_VAR(BGSwitch, bgID);202RSDK_ENUM_VAR("Outside BG", GHZ_BG_OUTSIDE);203RSDK_ENUM_VAR("Caves BG", GHZ_BG_CAVES);204205RSDK_ACTIVE_VAR(Decoration, type);206RSDK_ENUM_VAR("Bridge Post", GHZ_DECORATION_BRIDGEPOST);207}208#endif209210void GHZSetup_Serialize(void) {}211212213