Path: blob/master/SonicMania/Objects/TMZ/TMZ1Setup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: TMZ1Setup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectTMZ1Setup *TMZ1Setup;1011void TMZ1Setup_Update(void)12{13RSDK_THIS(TMZ1Setup);1415StateMachine_Run(self->state);16}1718void TMZ1Setup_LateUpdate(void) {}1920void TMZ1Setup_StaticUpdate(void)21{22if (!(Zone->timer & 1))23++TMZ1Setup->background1->deformationOffset;2425if (!(Zone->timer & 3)) {26TMZ1Setup->bannerAniFrame += 32;27TMZ1Setup->bannerAniFrame = TMZ1Setup->bannerAniFrame & 0xFF;28RSDK.DrawAniTiles(TMZ1Setup->aniTiles, 34, TMZ1Setup->bannerAniFrame, 0, 32, 112);29}3031if (!(Zone->timer & 1))32RSDK.RotatePalette(0, 204, 207, false);3334if (!RSDK.GetEntityCount(TMZ1Setup->classID, true)) {35RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(2 * Zone->timer) >> 1) + 0x80, 192, 197);36RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(2 * Zone->timer + 0x80) >> 1) + 0x80, 198, 203);37RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(4 * Zone->timer + 0x80) >> 1) + 0x40, 220, 223);38RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(Zone->timer) >> 1) + 0x80, 211, 213);39RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(Zone->timer + 0x80) >> 1) + 0x80, 237, 239);40}4142if (TMZ1Setup->aniTileDuration <= 0) {43TMZ1Setup->angle += 32;44TMZ1Setup->angle &= 0xFF;4546RSDK.SetLimitedFade(0, 1, 2, (RSDK.Sin256(TMZ1Setup->angle) >> 1) + 0x80, 184, 190);4748if (TMZ1Setup->angle == 160) {49TMZ1Setup->aniTileDuration = RSDK.Rand(2, 60);50}51}52else {53TMZ1Setup->aniTileDuration--;54}5556if (TMZ1Setup->stageState < TMZ1_STAGESTATE_LIFT) {57int32 posY = ScreenInfo->center.y + ScreenInfo->position.y;5859// Dunno what the data param is for here, it goes unused, maybe an earlier version of what "stageState" does?60if (posY > 4528 && TMZ1Setup->stageState != TMZ1_STAGESTATE_CITY && !RSDK.GetEntityCount(TMZ1Setup->classID, true)) {61CREATE_ENTITY(TMZ1Setup, INT_TO_VOID(1), 0, 0);62}63else if (posY < 4192 && TMZ1Setup->stageState != TMZ1_STAGESTATE_SKY && !RSDK.GetEntityCount(TMZ1Setup->classID, true)) {64CREATE_ENTITY(TMZ1Setup, INT_TO_VOID(0), 0, 0);65}66}6768EntityActClear *actClear = RSDK_GET_ENTITY(SLOT_ACTCLEAR, ActClear);69if (!TMZ1Setup->hasAchievement && actClear->classID == ActClear->classID && actClear->state == ActClear_State_EnterText && !Player->gotHit[0]) {70API_UnlockAchievement(&achievementList[ACH_TMZ]);71TMZ1Setup->hasAchievement = true;72}73}7475void TMZ1Setup_Draw(void) {}7677void TMZ1Setup_Create(void *data)78{79RSDK_THIS(TMZ1Setup);80self->active = ACTIVE_NORMAL;8182switch (TMZ1Setup->stageState) {83default: self->state = TMZ1Setup_State_FadeOutCurrentBG; break;84case TMZ1_STAGESTATE_NONE: self->state = TMZ1Setup_State_ShowOutsideBGs; break;85case TMZ1_STAGESTATE_LIFT: self->state = TMZ1Setup_State_FadeToLift; break;86}87}8889void TMZ1Setup_StageLoad(void)90{91TMZ1Setup->aniTiles = RSDK.LoadSpriteSheet("TMZ1/AniTiles.gif", SCOPE_STAGE);92TMZ1Setup->aniTileDuration = RSDK.Rand(2, 60);9394TMZ1Setup->angle = 0xC0;95TMZ1Setup->stageState = TMZ1_STAGESTATE_NONE;9697TMZ1Setup->background1 = RSDK.GetTileLayer(0);98int32 ang = 0;99for (int32 i = 0; i < 0x200; ++i) {100TMZ1Setup->background1->deformationData[i] = (4 * RSDK.Sin1024(ang)) >> 10;101ang += 0x10;102}103memcpy(&TMZ1Setup->background1->deformationData[0x200], &TMZ1Setup->background1->deformationData[0], 0x200 * sizeof(int32));104105RSDK.GetTileLayer(2)->scrollPos = -(256 << 16);106RSDK.GetTileLayer(3)->scrollPos = -(256 << 16);107108if (!TMZ1Setup->paletteInit) {109#if MANIA_USE_PLUS110if (SceneInfo->filter & FILTER_ENCORE) {111RSDK.LoadPalette(0, "EncoreTMZ1.act", 0b0000000011111111);112RSDK.LoadPalette(1, "EncoreTMZ1d.act", 0b0000000011111111);113RSDK.LoadPalette(2, "EncoreTMZ1l.act", 0b0000000011111111);114}115#endif116117for (int32 i = 0; i < 256; ++i) RSDK.SetPaletteEntry(5, i, 0x000000);118RSDK.CopyPalette(0, 0, 4, 0, 255);119120TMZ1Setup->paletteInit = true;121}122123RSDK.SetLimitedFade(3, 3, 4, 128, 0, 256);124RSDK.SetLimitedFade(6, 0, 5, 192, 0, 256);125126Animals->animalTypes[0] = ANIMAL_TOCKY;127Animals->animalTypes[1] = ANIMAL_PICKY;128129// BGSwitch is used for Sky <-> Lift BGs, this object manages the city & sky BG changes itself130BGSwitch->switchCallback[TMZ1_BG_CITY] = TMZ1Setup_BGSwitch_ShowSky;131BGSwitch->switchCallback[TMZ1_BG_LIFT] = TMZ1Setup_BGSwitch_ShowLift;132133RSDK.SetDrawGroupProperties(Zone->hudDrawGroup - 1, false, StateMachine_None);134RSDK.SetDrawGroupProperties(Zone->hudDrawGroup, false, StateMachine_None);135136if (isMainGameMode() && CutsceneRules_IsAct1())137Zone->stageFinishCallback = TMZ1Setup_StageFinish_EndAct1;138139if (CutsceneRules_CheckStageReload())140TMZ1Setup->hasAchievement = true;141}142143void TMZ1Setup_BGSwitch_ShowSky(void)144{145RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = 0;146RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = 0;147RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;148RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;149RSDK.GetTileLayer(4)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;150151foreach_active(MonarchBG, monarch) { monarch->visible = true; }152153TMZ1Setup->stageState = TMZ1_STAGESTATE_SKY;154}155156void TMZ1Setup_BGSwitch_ShowLift(void)157{158RSDK.GetTileLayer(0)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;159RSDK.GetTileLayer(1)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;160RSDK.GetTileLayer(2)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;161RSDK.GetTileLayer(3)->drawGroup[BGSwitch->screenID] = DRAWGROUP_COUNT;162RSDK.GetTileLayer(4)->drawGroup[BGSwitch->screenID] = 0;163164foreach_active(MonarchBG, monarch) { monarch->visible = false; }165166TMZ1Setup->stageState = TMZ1_STAGESTATE_LIFT;167}168169void TMZ1Setup_StageFinish_EndAct1(void)170{171foreach_active(CrimsonEye, crimsonEye)172{173if (crimsonEye->state == CrimsonEye_StateContainer_HandleElevator) {174crimsonEye->state = CrimsonEye_StateContainer_Explode;175CREATE_ENTITY(TMZ1Outro, NULL, crimsonEye->position.x, crimsonEye->position.y);176}177}178}179180void TMZ1Setup_State_FadeToLift(void)181{182RSDK_THIS(TMZ1Setup);183184if (self->timer < 256) {185self->timer += 8;186RSDK.SetLimitedFade(0, 4, 3, self->timer, 128, 207);187}188else {189destroyEntity(self);190}191}192193void TMZ1Setup_State_ShowOutsideBGs(void)194{195RSDK_THIS(TMZ1Setup);196197if (++self->timer >= 2) {198if (ScreenInfo->position.y + ScreenInfo->center.y > 4192)199self->state = TMZ1Setup_State_ShowCityBG;200else201self->state = TMZ1Setup_State_ShowSkyBG;202}203}204205void TMZ1Setup_State_FadeOutCurrentBG(void)206{207RSDK_THIS(TMZ1Setup);208209if (self->timer >= 256) {210if (TMZ1Setup->stageState) {211TMZ1Setup->stageState = TMZ1_STAGESTATE_SKY;212213RSDK.GetTileLayer(0)->drawGroup[0] = 0;214RSDK.GetTileLayer(1)->drawGroup[0] = 0;215RSDK.GetTileLayer(2)->drawGroup[0] = DRAWGROUP_COUNT;216RSDK.GetTileLayer(3)->drawGroup[0] = DRAWGROUP_COUNT;217}218else {219TMZ1Setup->stageState = TMZ1_STAGESTATE_CITY;220221RSDK.GetTileLayer(0)->drawGroup[0] = DRAWGROUP_COUNT;222RSDK.GetTileLayer(1)->drawGroup[0] = DRAWGROUP_COUNT;223RSDK.GetTileLayer(2)->drawGroup[0] = 0;224RSDK.GetTileLayer(3)->drawGroup[0] = 0;225}226227self->state = TMZ1Setup_State_FadeIntoOutsideBGs;228}229else {230self->timer += 8;231232if (TMZ1Setup->stageState)233RSDK.SetLimitedFade(0, 3, 4, self->timer >> 1, 128, 207);234else235RSDK.SetLimitedFade(0, 4, 3, self->timer >> 1, 128, 207);236237RSDK.SetLimitedFade(0, 4, 5, self->timer, 208, 256);238}239}240241void TMZ1Setup_State_ShowCityBG(void)242{243RSDK_THIS(TMZ1Setup);244245TMZ1Setup->stageState = TMZ1_STAGESTATE_CITY;246247RSDK.GetTileLayer(0)->drawGroup[0] = DRAWGROUP_COUNT;248RSDK.GetTileLayer(1)->drawGroup[0] = DRAWGROUP_COUNT;249RSDK.GetTileLayer(2)->drawGroup[0] = 0;250RSDK.GetTileLayer(3)->drawGroup[0] = 0;251252RSDK.CopyPalette(3, 128, 0, 128, 80);253254destroyEntity(self);255}256257void TMZ1Setup_State_ShowSkyBG(void)258{259RSDK_THIS(TMZ1Setup);260261TMZ1Setup->stageState = TMZ1_STAGESTATE_SKY;262263RSDK.GetTileLayer(0)->drawGroup[0] = 0;264RSDK.GetTileLayer(1)->drawGroup[0] = 0;265RSDK.GetTileLayer(2)->drawGroup[0] = DRAWGROUP_COUNT;266RSDK.GetTileLayer(3)->drawGroup[0] = DRAWGROUP_COUNT;267268RSDK.CopyPalette(4, 128, 0, 128, 80);269270destroyEntity(self);271}272273void TMZ1Setup_State_FadeIntoOutsideBGs(void)274{275RSDK_THIS(TMZ1Setup);276277if (self->timer <= 0) {278if (TMZ1Setup->stageState)279RSDK.CopyPalette(4, 208, 0, 208, 48);280else281RSDK.CopyPalette(4, 128, 0, 128, 128);282283destroyEntity(self);284}285else {286self->timer -= 8;287288if (TMZ1Setup->stageState)289RSDK.SetLimitedFade(0, 3, 4, self->timer >> 1, 128, 207);290else291RSDK.SetLimitedFade(0, 4, 3, self->timer >> 1, 128, 207);292293RSDK.SetLimitedFade(0, 4, 5, self->timer, 208, 256);294}295}296297#if GAME_INCLUDE_EDITOR298void TMZ1Setup_EditorDraw(void) {}299300void TMZ1Setup_EditorLoad(void)301{302RSDK_ACTIVE_VAR(BGSwitch, bgID);303RSDK_ENUM_VAR("City", TMZ1_BG_CITY);304RSDK_ENUM_VAR("Lift", TMZ1_BG_LIFT);305}306#endif307308void TMZ1Setup_Serialize(void) {}309310311