Path: blob/master/SonicMania/Objects/Title/TitleLogo.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: TitleLogo Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectTitleLogo *TitleLogo;1011void TitleLogo_Update(void)12{13RSDK_THIS(TitleLogo);1415#if MANIA_USE_PLUS16StateMachine_Run(self->state);17#else18switch (self->type) {19case TITLELOGO_RIBBON:20RSDK.ProcessAnimation(&self->mainAnimator);21if (self->showRibbonCenter)22RSDK.ProcessAnimation(&self->ribbonCenterAnimator);23break;2425case TITLELOGO_PRESSSTART: ++self->timer; break;26}27#endif28}2930void TitleLogo_LateUpdate(void) {}3132void TitleLogo_StaticUpdate(void) {}3334void TitleLogo_Draw(void)35{36RSDK_THIS(TitleLogo);3738switch (self->type) {39case TITLELOGO_EMBLEM:40RSDK.SetClipBounds(0, 0, 0, ScreenInfo->size.x, ScreenInfo->size.y);4142self->direction = FLIP_NONE;43RSDK.DrawSprite(&self->mainAnimator, NULL, false);4445self->direction = FLIP_X;46RSDK.DrawSprite(&self->mainAnimator, NULL, false);47break;4849case TITLELOGO_RIBBON:50self->direction = FLIP_X;51RSDK.DrawSprite(&self->mainAnimator, NULL, false);5253self->direction = FLIP_NONE;54RSDK.DrawSprite(&self->mainAnimator, NULL, false);5556if (self->showRibbonCenter)57RSDK.DrawSprite(&self->ribbonCenterAnimator, NULL, false);58break;5960case TITLELOGO_PRESSSTART:61if (!(self->timer & 0x10))62RSDK.DrawSprite(&self->mainAnimator, NULL, false);63break;6465#if MANIA_USE_PLUS66case TITLELOGO_PLUS:67RSDK.DrawSprite(&self->mainAnimator, NULL, false);68RSDK.DrawSprite(&self->plusAnimator, NULL, false);69break;70#endif7172default: RSDK.DrawSprite(&self->mainAnimator, NULL, false); break;73}74}7576void TitleLogo_Create(void *data)77{78RSDK_THIS(TitleLogo);7980self->drawFX = FX_FLIP;8182if (!SceneInfo->inEditor) {83switch (self->type) {84case TITLELOGO_EMBLEM: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 0, &self->mainAnimator, true, 0); break;8586case TITLELOGO_RIBBON:87RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 1, &self->mainAnimator, true, 0);88RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 3, &self->ribbonCenterAnimator, true, 0);89#if MANIA_USE_PLUS90self->state = TitleLogo_State_Ribbon;91#endif92break;9394case TITLELOGO_PRESSSTART:95#if MANIA_USE_PLUS96self->state = TitleLogo_State_PressButton;97#else98TitleLogo_SetupPressStart();99#endif100break;101102#if MANIA_USE_PLUS103case TITLELOGO_PLUS:104if (API.CheckDLC(DLC_PLUS)) {105RSDK.SetSpriteAnimation(TitleLogo->plusFrames, 0, &self->mainAnimator, true, 0);106self->storeY = self->position.y;107}108else {109destroyEntity(self);110return;111}112break;113#endif114115default: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, self->type + 2, &self->mainAnimator, true, 0); break;116}117118switch (self->type) {119case TITLELOGO_EMBLEM:120case TITLELOGO_RIBBON:121case TITLELOGO_GAMETITLE:122case TITLELOGO_COPYRIGHT:123case TITLELOGO_RINGBOTTOM:124case TITLELOGO_PRESSSTART:125#if MANIA_USE_PLUS126case TITLELOGO_PLUS:127#endif128self->visible = false;129self->active = ACTIVE_NEVER;130self->drawGroup = 4;131break;132133default:134self->active = ACTIVE_NORMAL;135self->visible = true;136self->drawGroup = 4;137break;138}139}140}141142void TitleLogo_StageLoad(void)143{144TitleLogo->aniFrames = RSDK.LoadSpriteAnimation("Title/Logo.bin", SCOPE_STAGE);145146#if MANIA_USE_PLUS147if (API.CheckDLC(DLC_PLUS))148TitleLogo->plusFrames = RSDK.LoadSpriteAnimation("Title/PlusLogo.bin", SCOPE_STAGE);149150TitleLogo->sfxPlus = RSDK.GetSfx("Stage/Plus.wav");151#endif152}153154void TitleLogo_SetupPressStart(void)155{156RSDK_THIS(TitleLogo);157158switch (Localization->language) {159case LANGUAGE_EN:160case LANGUAGE_JP: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 0); break;161162case LANGUAGE_FR:163if (sku_platform == PLATFORM_SWITCH)164RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 2);165else166RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 1);167break;168169case LANGUAGE_IT:170if (sku_platform == PLATFORM_XB1 || sku_platform == PLATFORM_SWITCH)171RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 4);172else173RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 3);174break;175176case LANGUAGE_GE:177if (sku_platform == PLATFORM_SWITCH)178RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 6);179else180RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 5);181break;182183case LANGUAGE_SP: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 7); break;184185#if GAME_VERSION != VER_100186case LANGUAGE_KO: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 8); break;187case LANGUAGE_SC: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 9); break;188case LANGUAGE_TC: RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 10); break;189#endif190191default: break;192}193}194195#if MANIA_USE_PLUS196void TitleLogo_State_Ribbon(void)197{198RSDK_THIS(TitleLogo);199200RSDK.ProcessAnimation(&self->mainAnimator);201202if (self->showRibbonCenter)203RSDK.ProcessAnimation(&self->ribbonCenterAnimator);204}205void TitleLogo_State_PressButton(void)206{207RSDK_THIS(TitleLogo);208209++self->timer;210}211void TitleLogo_State_HandleSetup(void)212{213RSDK_THIS(TitleLogo);214215self->position.y += self->velocity.y;216self->velocity.y += 0x3800;217218RSDK.ProcessAnimation(&self->mainAnimator);219220if (self->showRibbonCenter)221RSDK.ProcessAnimation(&self->ribbonCenterAnimator);222223if (self->velocity.y > 0) {224if (self->position.y >= self->storeY) {225--self->timer;226227self->position.y = self->storeY;228self->velocity.y = -(self->velocity.y >> 1);229230if (self->timer <= 0) {231self->timer = 0;232233if (self->type == TITLELOGO_PLUS)234self->state = TitleLogo_State_PlusLogo;235else236self->state = self->type == TITLELOGO_RIBBON ? TitleLogo_State_Ribbon : StateMachine_None;237}238}239}240}241242void TitleLogo_State_PlusLogo(void)243{244RSDK_THIS(TitleLogo);245246if (self->timer <= 0) {247self->timer = RSDK.Rand(120, 240);248249RSDK.SetSpriteAnimation(TitleLogo->plusFrames, 1, &self->plusAnimator, true, 0);250self->state = TitleLogo_State_PlusShine;251}252else {253self->timer--;254}255}256void TitleLogo_State_PlusShine(void)257{258RSDK_THIS(TitleLogo);259260RSDK.ProcessAnimation(&self->plusAnimator);261262if (self->plusAnimator.frameID == self->plusAnimator.frameCount - 1) {263RSDK.SetSpriteAnimation(-1, 0, &self->plusAnimator, true, 0);264self->state = TitleLogo_State_PlusLogo;265}266}267#endif268269#if GAME_INCLUDE_EDITOR270void TitleLogo_EditorDraw(void)271{272RSDK_THIS(TitleLogo);273274self->drawFX = FX_FLIP;275switch (self->type) {276case TITLELOGO_EMBLEM:277RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 0, &self->mainAnimator, true, 0);278279self->direction = FLIP_NONE;280RSDK.DrawSprite(&self->mainAnimator, NULL, false);281282self->direction = FLIP_X;283RSDK.DrawSprite(&self->mainAnimator, NULL, false);284285self->direction = FLIP_NONE;286break;287288case TITLELOGO_RIBBON:289RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 1, &self->mainAnimator, true, 0);290RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 3, &self->ribbonCenterAnimator, true, 0);291292self->direction = FLIP_X;293RSDK.DrawSprite(&self->mainAnimator, NULL, false);294295self->direction = FLIP_NONE;296RSDK.DrawSprite(&self->mainAnimator, NULL, false);297298RSDK.DrawSprite(&self->ribbonCenterAnimator, NULL, false);299break;300301case TITLELOGO_PRESSSTART:302RSDK.SetSpriteAnimation(TitleLogo->aniFrames, 8, &self->mainAnimator, true, 0);303RSDK.DrawSprite(&self->mainAnimator, NULL, false);304break;305306#if MANIA_USE_PLUS307case TITLELOGO_PLUS:308RSDK.SetSpriteAnimation(TitleLogo->plusFrames, 0, &self->mainAnimator, true, 0);309310RSDK.DrawSprite(&self->mainAnimator, NULL, false);311break;312#endif313314default:315RSDK.SetSpriteAnimation(TitleLogo->aniFrames, self->type + 2, &self->mainAnimator, true, 0);316RSDK.DrawSprite(&self->mainAnimator, NULL, false);317break;318}319}320321void TitleLogo_EditorLoad(void)322{323TitleLogo->aniFrames = RSDK.LoadSpriteAnimation("Title/Logo.bin", SCOPE_STAGE);324#if MANIA_USE_PLUS325TitleLogo->plusFrames = RSDK.LoadSpriteAnimation("Title/PlusLogo.bin", SCOPE_STAGE);326#endif327328RSDK_ACTIVE_VAR(TitleLogo, type);329RSDK_ENUM_VAR("Emblem", TITLELOGO_EMBLEM);330RSDK_ENUM_VAR("Ribbon", TITLELOGO_RIBBON);331RSDK_ENUM_VAR("Game Title", TITLELOGO_GAMETITLE);332RSDK_ENUM_VAR("Power LED", TITLELOGO_POWERLED);333RSDK_ENUM_VAR("Copyright", TITLELOGO_COPYRIGHT);334RSDK_ENUM_VAR("Ring Bottom", TITLELOGO_RINGBOTTOM);335RSDK_ENUM_VAR("Press Start", TITLELOGO_PRESSSTART);336#if MANIA_USE_PLUS337RSDK_ENUM_VAR("Plus Logo", TITLELOGO_PLUS);338#endif339}340#endif341342void TitleLogo_Serialize(void) { RSDK_EDITABLE_VAR(TitleLogo, VAR_ENUM, type); }343344345