Path: blob/master/SonicMania/Objects/CPZ/CPZSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: CPZSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectCPZSetup *CPZSetup;1011void CPZSetup_Update(void) {}1213void CPZSetup_LateUpdate(void) {}1415void CPZSetup_StaticUpdate(void)16{17// Animate the converyor belt thingys in the background18if (!(Zone->timer & 3)) {19--CPZSetup->aniTileFrame;20CPZSetup->aniTileFrame &= 0xF;21RSDK.DrawAniTiles(CPZSetup->aniTiles, 762, 109, CPZSetup->aniTileFrame + 48, 16, 16);22}2324if (!(Zone->timer & 7)) {25++CPZSetup->background->deformationOffset;2627++CPZSetup->bgTowerLightPalIndex;28CPZSetup->bgTowerLightPalIndex &= 15;29RSDK.SetPaletteEntry(0, 159, RSDK.GetPaletteEntry(3, CPZSetup->bgTowerLightPalIndex));3031++CPZSetup->rainbowLightPalIndex;32CPZSetup->rainbowLightPalIndex %= 21;33RSDK.SetPaletteEntry(0, 158, RSDK.GetPaletteEntry(3, CPZSetup->rainbowLightPalIndex + 16));3435CPZSetup->chemLiquidPalIndex1 += 3;36CPZSetup->chemLiquidPalIndex1 %= 27;37RSDK.SetPaletteEntry(0, 141, RSDK.GetPaletteEntry(3, CPZSetup->chemLiquidPalIndex1 + 48));3839CPZSetup->chemLiquidPalIndex2 += 3;40CPZSetup->chemLiquidPalIndex2 %= 27;41RSDK.SetPaletteEntry(0, 142, RSDK.GetPaletteEntry(3, CPZSetup->chemLiquidPalIndex2 + 48));4243CPZSetup->chemLiquidPalIndex3 += 3;44CPZSetup->chemLiquidPalIndex3 %= 27;45RSDK.SetPaletteEntry(0, 143, RSDK.GetPaletteEntry(3, CPZSetup->chemLiquidPalIndex3 + 48));46}47}4849void CPZSetup_Draw(void) {}5051void CPZSetup_Create(void *data) {}5253void CPZSetup_StageLoad(void)54{55CPZSetup->aniTiles = RSDK.LoadSpriteSheet("CPZ/Objects.gif", SCOPE_STAGE);5657RSDK.SetDrawGroupProperties(0, 0, Water_DrawHook_ApplyWaterPalette);58RSDK.SetDrawGroupProperties(Zone->hudDrawGroup, 0, Water_DrawHook_RemoveWaterPalette);59Water->waterPalette = 2;6061CPZSetup->chemLiquidPalIndex1 = 0;62CPZSetup->chemLiquidPalIndex2 = 1;63CPZSetup->chemLiquidPalIndex3 = 2;6465CPZSetup->background = RSDK.GetTileLayer(0);66for (int32 i = 0; i < 0x400; ++i) {67CPZSetup->background->deformationData[i] = CPZSetup->deformation[i & 0x3F];68}6970#if MANIA_USE_PLUS71if (SceneInfo->filter & FILTER_ENCORE) {72RSDK.LoadPalette(0, "EncoreCPZ.act", 0b0000000011111111);73RSDK.LoadPalette(2, "EncoreCPZw.act", 0b0000000011111111);74RSDK.CopyPalette(0, 128, 1, 0, 10);75}76#endif7778Animals->animalTypes[0] = ANIMAL_LOCKY;79Animals->animalTypes[1] = ANIMAL_POCKY;8081if (Zone->actID) {82RSDK.SetPaletteMask(0x00F000);83RSDK.SetPaletteEntry(0, 0xFF, 0x00F000);8485BGSwitch->switchCallback[CPZ_BG_CPZ2] = CPZSetup_BGSwitch_Act2BG;86BGSwitch->switchCallback[CPZ_BG_CPZ1] = CPZSetup_BGSwitch_Act1BG;8788BGSwitch->layerIDs[0] = CPZ_BG_CPZ1;89BGSwitch->layerIDs[1] = CPZ_BG_CPZ1;90BGSwitch->layerIDs[2] = CPZ_BG_CPZ1;91BGSwitch->layerIDs[3] = CPZ_BG_CPZ1;9293bool32 setCPZ1BG = false;94if (!CutsceneRules_CheckStageReload() && CutsceneRules_CheckPlayerPos(TO_FIXED(172), TO_FIXED(6288), TO_FIXED(598), TO_FIXED(6528))) {95setCPZ1BG = true;9697Zone->cameraBoundsB[0] = 6528;98Zone->cameraBoundsB[1] = 6528;99Zone->cameraBoundsB[2] = 6528;100Zone->cameraBoundsB[3] = 6528;101}102103if (isMainGameMode() && globals->atlEnabled) {104if (!CutsceneRules_CheckStageReload())105Zone_ReloadStoredEntities(TO_FIXED(384), TO_FIXED(6528), true);106}107108if (isMainGameMode() && CutsceneRules_IsAct2()) {109foreach_all(CPZ2Outro, outro)110{111CPZSetup->outro = outro;112Zone->stageFinishCallback = CPZSetup_StageFinish_EndAct2;113foreach_break;114}115}116117BGSwitch->screenID = 0;118if (setCPZ1BG) {119for (; BGSwitch->screenID < RSDK.GetVideoSetting(VIDEOSETTING_SCREENCOUNT); BGSwitch->screenID++) CPZSetup_BGSwitch_Act1BG();120121BGSwitch->layerIDs[0] = CPZ_BG_CPZ1;122BGSwitch->layerIDs[1] = CPZ_BG_CPZ1;123BGSwitch->layerIDs[2] = CPZ_BG_CPZ1;124BGSwitch->layerIDs[3] = CPZ_BG_CPZ1;125126TileLayer *backgroundAct1 = RSDK.GetTileLayer(3);127128backgroundAct1->scrollPos += -0x118000 * backgroundAct1->parallaxFactor;129for (int32 i = 0; i < backgroundAct1->scrollInfoCount; ++i)130backgroundAct1->scrollInfo[i].scrollPos += TO_FIXED(71) * backgroundAct1->scrollInfo[i].parallaxFactor;131}132else {133for (; BGSwitch->screenID < RSDK.GetVideoSetting(VIDEOSETTING_SCREENCOUNT); BGSwitch->screenID++) CPZSetup_BGSwitch_Act2BG();134135BGSwitch->layerIDs[0] = CPZ_BG_CPZ2;136BGSwitch->layerIDs[1] = CPZ_BG_CPZ2;137BGSwitch->layerIDs[2] = CPZ_BG_CPZ2;138BGSwitch->layerIDs[3] = CPZ_BG_CPZ2;139}140}141else {142if (isMainGameMode()) {143if (globals->enableIntro) {144if (!CutsceneRules_CheckStageReload()) {145globals->suppressAutoMusic = true;146globals->suppressTitlecard = true;147}148}149}150151if (isMainGameMode()) {152if (CutsceneRules_IsAct1())153Zone->stageFinishCallback = CPZSetup_StageFinish_EndAct1;154}155156RSDK.SetPaletteEntry(0, 0xFF, 0xF0F0F0);157RSDK.SetPaletteEntry(2, 0xFF, RSDK.GetPaletteEntry(2, 137));158}159}160161void CPZSetup_BGSwitch_Act2BG(void)162{163RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = 0;164RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = 0;165RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = 0;166RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;167}168169void CPZSetup_BGSwitch_Act1BG(void)170{171RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;172RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;173RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;174RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = 0;175}176177void CPZSetup_StageFinish_EndAct1(void)178{179RSDK.GetTileLayer(0);180Zone_StoreEntities(TO_FIXED(ScreenInfo->position.x + ScreenInfo->center.x), TO_FIXED(ScreenInfo->size.y + ScreenInfo->position.y));181RSDK.LoadScene();182}183184void CPZSetup_StageFinish_EndAct2(void) { CPZSetup->outro->active = ACTIVE_NORMAL; }185186#if GAME_INCLUDE_EDITOR187void CPZSetup_EditorDraw(void) {}188189void CPZSetup_EditorLoad(void)190{191RSDK_ACTIVE_VAR(BGSwitch, bgID);192RSDK_ENUM_VAR("Act 2 BG", CPZ_BG_CPZ2);193RSDK_ENUM_VAR("Act 1 BG", CPZ_BG_CPZ1);194195RSDK_ACTIVE_VAR(Decoration, type);196RSDK_ENUM_VAR("Warning Sign", CPZ_DECORATION_WARNSIGN);197198RSDK_ACTIVE_VAR(ParallaxSprite, aniID);199RSDK_ENUM_VAR("Girder", CPZ_PARALLAXSPRITE_GIRDER);200RSDK_ENUM_VAR("Chemical 1", CPZ_PARALLAXSPRITE_CHEMICAL1);201RSDK_ENUM_VAR("Chemical 2", CPZ_PARALLAXSPRITE_CHEMICAL2);202}203#endif204205void CPZSetup_Serialize(void) {}206207208