Path: blob/master/SonicMania/Objects/Continue/ContinueSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: ContinueSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectContinueSetup *ContinueSetup;1011void ContinueSetup_Update(void)12{13RSDK_THIS(ContinueSetup);1415StateMachine_Run(self->state);1617self->angle = (self->angle - 2) & 0x3FF;18}1920void ContinueSetup_LateUpdate(void) {}2122void ContinueSetup_StaticUpdate(void) {}2324void ContinueSetup_Draw(void)25{26RSDK_THIS(ContinueSetup);2728RSDK.Prepare3DScene(ContinueSetup->sceneIndex);2930RSDK.MatrixTranslateXYZ(&self->matTranslate, 0, -0xF0000, 0x500000, true);31RSDK.MatrixRotateX(&self->matRotateX, self->rotationX);32RSDK.MatrixRotateZ(&self->matRotateY, self->angle);3334// Number 1 (tens)35RSDK.MatrixTranslateXYZ(&self->matTemp, -0x120000, 0, 0, true);36RSDK.MatrixMultiply(&self->matFinal, &self->matRotateY, &self->matRotateX);37RSDK.MatrixMultiply(&self->matFinal, &self->matTemp, &self->matFinal);38RSDK.MatrixMultiply(&self->matFinal, &self->matFinal, &self->matTranslate);39RSDK.AddModelTo3DScene(ContinueSetup->countIndex[self->countTimer / 10 % 10], ContinueSetup->sceneIndex, S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN,40&self->matFinal, &self->matFinal, self->numberColor);4142// Number 2 (single digits)43RSDK.MatrixTranslateXYZ(&self->matTemp, 0x120000, 0, 0, true);44RSDK.MatrixMultiply(&self->matFinal, &self->matRotateY, &self->matRotateX);45RSDK.MatrixMultiply(&self->matFinal, &self->matTemp, &self->matFinal);46RSDK.MatrixMultiply(&self->matFinal, &self->matFinal, &self->matTranslate);47RSDK.AddModelTo3DScene(ContinueSetup->countIndex[self->countTimer % 10], ContinueSetup->sceneIndex, S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN,48&self->matFinal, &self->matFinal, self->numberColor);4950RSDK.Draw3DScene(ContinueSetup->sceneIndex);5152Vector2 drawPos;53drawPos.y = 0x600000;54drawPos.x = ((ScreenInfo->center.x + 4) << 16) - (globals->continues << 19);55if (self->showContinues && globals->continues > 0) {56RSDK.DrawSprite(&ContinueSetup->animator, &drawPos, true);57}5859drawPos.x += 0x140000;60for (int32 i = 0; i < globals->continues; ++i) {61RSDK.DrawSprite(&ContinueSetup->animator, &drawPos, true);62drawPos.x += 0x140000;63}64}6566void ContinueSetup_Create(void *data)67{68RSDK_THIS(ContinueSetup);6970if (!SceneInfo->inEditor) {71self->active = ACTIVE_NORMAL;72self->visible = true;73self->drawGroup = 1;74self->rotationX = 240;75self->angle = 256;76self->countTimer = 10;77self->numberColor = 0xFF00FF;78self->showContinues = true;79self->state = ContinueSetup_State_FadeIn;80self->updateRange.x = 0x4000000;8182self->updateRange.y = 0x4000000;83switch (GET_CHARACTER_ID(1)) {84default:85case ID_SONIC: RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, CONTPLR_ANI_ICON, &ContinueSetup->animator, true, 0); break;86case ID_TAILS: RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, CONTPLR_ANI_ICON, &ContinueSetup->animator, true, 1); break;87case ID_KNUCKLES: RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, CONTPLR_ANI_ICON, &ContinueSetup->animator, true, 2); break;88#if MANIA_USE_PLUS89case ID_MIGHTY: RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, CONTPLR_ANI_ICON, &ContinueSetup->animator, true, 3); break;90case ID_RAY: RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, CONTPLR_ANI_ICON, &ContinueSetup->animator, true, 4); break;91#endif92}93RSDK.SetActivePalette(1, 0, ScreenInfo->size.y);94}95}9697void ContinueSetup_StageLoad(void)98{99const char *paths[10] = {100"Continue/Count0.bin", "Continue/Count1.bin", "Continue/Count2.bin", "Continue/Count3.bin", "Continue/Count4.bin",101"Continue/Count5.bin", "Continue/Count6.bin", "Continue/Count7.bin", "Continue/Count8.bin", "Continue/Count9.bin",102};103104for (int32 i = 0; i < 10; ++i) ContinueSetup->countIndex[i] = RSDK.LoadMesh(paths[i], SCOPE_STAGE);105106ContinueSetup->sceneIndex = RSDK.Create3DScene("View:Continue", 4096, SCOPE_STAGE);107108RSDK.SetDiffuseColor(ContinueSetup->sceneIndex, 0xA0, 0xA0, 0xA0);109RSDK.SetDiffuseIntensity(ContinueSetup->sceneIndex, 8, 8, 8);110RSDK.SetSpecularIntensity(ContinueSetup->sceneIndex, 15, 15, 15);111112ContinueSetup->sfxAccept = RSDK.GetSfx("Global/MenuAccept.wav");113}114115void ContinueSetup_State_FadeIn(void)116{117RSDK_THIS(ContinueSetup);118119if (++self->timer >= 8 && !RSDK.GetEntityCount(FXFade->classID, true)) {120self->timer = 0;121self->state = ContinueSetup_State_HandleCountdown;122}123}124125void ContinueSetup_State_HandleCountdown(void)126{127RSDK_THIS(ContinueSetup);128129if (++self->secondTimer == 60) {130self->secondTimer = 0;131132if (self->countTimer > 0) {133self->countTimer--;134135if (self->alpha < 0xFF)136self->alpha += 0x18;137138self->numberColor = RSDK.GetPaletteEntry(2, self->alpha);139}140}141142if (ControllerInfo->keyA.press || ControllerInfo->keyStart.press || TouchInfo->count) {143foreach_active(ContinuePlayer, player)144{145if (!player->isPlayer2)146RSDK.SetSpriteAnimation(ContinuePlayer->aniFrames, player->animator.animationID + 1, &player->animator, true, 0);147148player->state = ContinuePlayer_State_Idle;149}150151self->state = ContinueSetup_State_ContinueGame;152RSDK.PlaySfx(ContinueSetup->sfxAccept, false, 255);153}154155if (!self->countTimer && ++self->timer == 60) {156self->timer = 0;157self->state = ContinueSetup_State_ReturnToMenu;158159EntityFXFade *fade = CREATE_ENTITY(FXFade, NULL, self->position.x, self->position.y);160fade->speedIn = 12;161fade->wait = 240;162}163}164165void ContinueSetup_State_ContinueGame(void)166{167RSDK_THIS(ContinueSetup);168169if (++self->timer == 90) {170Music_FadeOut(0.0125);171}172173if (self->timer == 180) {174EntityFXFade *fade = CREATE_ENTITY(FXFade, NULL, self->position.x, self->position.y);175fade->speedIn = 12;176fade->wait = 240;177}178179if (self->timer == 260) {180#if MANIA_USE_PLUS181if (globals->gameMode == MODE_ENCORE)182RSDK.SetScene("Encore Mode", "");183else184#endif185RSDK.SetScene("Mania Mode", "");186187SaveGame_GetSaveRAM()->continues = globals->continues;188SceneInfo->listPos = SaveGame_GetSaveRAM()->storedStageID;189RSDK.LoadScene();190}191192if (self->timer < 58) {193self->showContinues = ((self->timer >> 1) & 1);194}195196if (self->timer == 60) {197self->showContinues = true;198199if (globals->continues > 0)200globals->continues--;201}202}203204void ContinueSetup_State_ReturnToMenu(void)205{206RSDK_THIS(ContinueSetup);207208if (++self->timer == 80) {209RSDK.SetScene("Presentation", "Menu");210RSDK.LoadScene();211}212}213214#if GAME_INCLUDE_EDITOR215void ContinueSetup_EditorDraw(void) {}216217void ContinueSetup_EditorLoad(void) {}218#endif219220void ContinueSetup_Serialize(void) {}221222223