Path: blob/master/SonicMania/Objects/Credits/TAEmerald.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: TAEmerald Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectTAEmerald *TAEmerald;1011void TAEmerald_Update(void)12{13RSDK_THIS(TAEmerald);1415StateMachine_Run(self->state);16}1718void TAEmerald_LateUpdate(void) {}1920void TAEmerald_StaticUpdate(void) {}2122void TAEmerald_Draw(void)23{24RSDK_THIS(TAEmerald);2526RSDK.SetActivePalette(3, 0, ScreenInfo->size.y);27RSDK.DrawSprite(&self->animator, NULL, false);28}2930void TAEmerald_Create(void *data)31{32RSDK_THIS(TAEmerald);3334if (!SceneInfo->inEditor) {35self->originPos = self->position;36self->angle = 16 * self->color;37self->visible = true;38self->drawGroup = 1;39self->active = ACTIVE_NORMAL;40self->updateRange.x = 0x800000;41self->updateRange.y = 0x800000;4243self->state = TAEmerald_State_Oscillate;44RSDK.SetSpriteAnimation(TAEmerald->aniFrames, 7, &self->animator, true, self->color);4546if (SaveGame_GetSaveRAM() && SaveGame_GetEmerald(self->color)) {47self->visible = false;48}49}50}5152void TAEmerald_StageLoad(void) { TAEmerald->aniFrames = RSDK.LoadSpriteAnimation("Special/Results.bin", SCOPE_STAGE); }5354void TAEmerald_State_Oscillate(void)55{56RSDK_THIS(TAEmerald);5758self->position.y = (RSDK.Sin256(self->angle) << 11) + self->originPos.y;59self->angle = (self->angle + 4) & 0xFF;60}6162void TAEmerald_State_MoveCircle(void)63{64RSDK_THIS(TAEmerald);6566if (self->timer > 0) {67self->timer--;68}69else {70if (self->direction) {71self->angle += 2;7273if (self->angle >= 0) {74self->direction = FLIP_NONE;75self->state = StateMachine_None;76}77}78else {79self->angle -= 2;8081if (self->angle <= -0x80) {82self->direction = FLIP_X;83self->state = StateMachine_None;84}85}8687self->rotation = 4 * self->angle;88self->position.x = 0x4800 * RSDK.Cos256(self->angle) + self->originPos.x;89self->position.y = 0x4800 * RSDK.Sin256(self->angle) + self->originPos.y;90}91}9293#if GAME_INCLUDE_EDITOR94void TAEmerald_EditorDraw(void)95{96RSDK_THIS(TAEmerald);9798RSDK.SetSpriteAnimation(TAEmerald->aniFrames, 7, &self->animator, true, self->color);99RSDK.DrawSprite(&self->animator, NULL, false);100}101102void TAEmerald_EditorLoad(void)103{104TAEmerald->aniFrames = RSDK.LoadSpriteAnimation("Special/Results.bin", SCOPE_STAGE);105106RSDK_ACTIVE_VAR(TAEmerald, color);107RSDK_ENUM_VAR("Green", CHAOSEMERALD_GREEN);108RSDK_ENUM_VAR("Yellow", CHAOSEMERALD_YELLOW);109RSDK_ENUM_VAR("Blue", CHAOSEMERALD_BLUE);110RSDK_ENUM_VAR("Purple", CHAOSEMERALD_PURPLE);111RSDK_ENUM_VAR("Gray", CHAOSEMERALD_GRAY);112RSDK_ENUM_VAR("Cyan", CHAOSEMERALD_CYAN);113RSDK_ENUM_VAR("Red", CHAOSEMERALD_RED);114}115#endif116117void TAEmerald_Serialize(void) { RSDK_EDITABLE_VAR(TAEmerald, VAR_UINT8, color); }118119120