Path: blob/master/SonicMania/Objects/BSS/BSS_Collectable.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: BSS_Collectable Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectBSS_Collectable *BSS_Collectable;1011void BSS_Collectable_Update(void) {}1213void BSS_Collectable_LateUpdate(void) {}1415void BSS_Collectable_StaticUpdate(void)16{17RSDK.ProcessAnimation(&BSS_Collectable->sphereAnimator[BSS_RING]);18RSDK.ProcessAnimation(&BSS_Collectable->sphereAnimator[BSS_RING_SPARKLE]);19RSDK.ProcessAnimation(&BSS_Collectable->sphereAnimator[BSS_MEDAL_SILVER]);20RSDK.ProcessAnimation(&BSS_Collectable->sphereAnimator[BSS_MEDAL_GOLD]);21}2223void BSS_Collectable_Draw(void)24{25RSDK_THIS(BSS_Collectable);26Vector2 drawPos;2728switch (self->type) {29case BSS_RING:30self->drawFX = FX_FLIP | FX_SCALE;31self->scale.x = BSS_Collectable->ringScaleTableX[self->animator.frameID];32self->scale.y = BSS_Collectable->ringScaleTableY[self->animator.frameID];33self->direction = BSS_Collectable->sphereAnimator[self->type].frameID > 8;34drawPos.x = self->position.x;35drawPos.y = self->position.y;36drawPos.y -= BSS_Collectable->screenYValues[self->animator.frameID];37RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[self->type], &drawPos, true);3839self->drawFX = FX_NONE;40return;4142case BSS_RING_SPARKLE: RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[self->type], NULL, true); break;4344case BSS_EMERALD_CHAOS:45case BSS_EMERALD_SUPER:46BSS_Collectable->sphereAnimator[self->type].frameID = self->animator.frameID >> 1;47RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[self->type], NULL, true);48break;4950case BSS_MEDAL_SILVER:51case BSS_MEDAL_GOLD:52self->drawFX = FX_SCALE;53self->scale.x = BSS_Collectable->medalScaleTable[self->animator.frameID];54self->scale.y = BSS_Collectable->medalScaleTable[self->animator.frameID];55drawPos.x = self->position.x;56drawPos.y = self->position.y;57drawPos.y -= BSS_Collectable->screenYValues[self->animator.frameID];58RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[self->type], &drawPos, true);5960self->drawFX = FX_NONE;61break;6263case BSS_SPHERE_GREEN_STOOD:64BSS_Collectable->sphereAnimator[BSS_SPHERE_GREEN].frameID = self->animator.frameID;65self->alpha = 0x80;66self->inkEffect = INK_ALPHA;67RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[BSS_SPHERE_GREEN], NULL, true);6869self->inkEffect = INK_NONE;70break;7172case BSS_BLUE_STOOD:73BSS_Collectable->sphereAnimator[BSS_SPHERE_BLUE].frameID = self->animator.frameID;74self->alpha = 0x80;75self->inkEffect = INK_ALPHA;76RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[BSS_SPHERE_BLUE], NULL, true);7778self->inkEffect = INK_NONE;79break;8081case BSS_SPHERE_PINK_STOOD:82BSS_Collectable->sphereAnimator[BSS_SPHERE_PINK].frameID = self->animator.frameID;83self->alpha = 0x80;84self->inkEffect = INK_ALPHA;85RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[BSS_SPHERE_PINK], NULL, true);8687self->inkEffect = INK_NONE;88break;8990default:91BSS_Collectable->sphereAnimator[self->type].frameID = self->animator.frameID;92RSDK.DrawSprite(&BSS_Collectable->sphereAnimator[self->type], NULL, true);93break;94}95}9697void BSS_Collectable_Create(void *data)98{99RSDK_THIS(BSS_Collectable);100101if (!SceneInfo->inEditor) {102self->active = ACTIVE_NORMAL;103self->visible = true;104self->drawGroup = 3;105self->updateRange.x = 0x800000;106self->updateRange.y = 0x800000;107108for (int32 i = 0; i < 8; ++i) RSDK.SetSpriteAnimation(BSS_Collectable->aniFrames, i, &BSS_Collectable->sphereAnimator[i + 1], true, 0);109110RSDK.SetSpriteAnimation(BSS_Collectable->ringFrames, 0, &BSS_Collectable->sphereAnimator[BSS_RING], true, 0);111RSDK.SetSpriteAnimation(BSS_Collectable->ringFrames, 1, &BSS_Collectable->sphereAnimator[BSS_RING_SPARKLE], true, 0);112RSDK.SetSpriteAnimation(BSS_Collectable->aniFrames, 6, &BSS_Collectable->sphereAnimator[BSS_EMERALD_CHAOS], true, 0);113RSDK.SetSpriteAnimation(BSS_Collectable->aniFrames, 7, &BSS_Collectable->sphereAnimator[BSS_EMERALD_SUPER], true, 0);114RSDK.SetSpriteAnimation(BSS_Collectable->aniFrames, 8, &BSS_Collectable->sphereAnimator[BSS_MEDAL_SILVER], true, 0);115RSDK.SetSpriteAnimation(BSS_Collectable->aniFrames, 9, &BSS_Collectable->sphereAnimator[BSS_MEDAL_GOLD], true, 0);116}117}118119void BSS_Collectable_StageLoad(void)120{121BSS_Collectable->aniFrames = RSDK.LoadSpriteAnimation("SpecialBS/StageObjects.bin", SCOPE_STAGE);122BSS_Collectable->ringFrames = RSDK.LoadSpriteAnimation("SpecialBS/Ring.bin", SCOPE_STAGE);123124if (!BSS_Collectable->initializedTables) {125BSS_Collectable->initializedTables = true;126127int32 id = 0x20;128for (int32 i = 0; i < 0x20; ++i) {129BSS_Collectable->ringScaleTableX[i] *= 14;130BSS_Collectable->ringScaleTableY[i] *= 14;131BSS_Collectable->medalScaleTable[i] *= 16;132BSS_Collectable->screenYValues[i] = id * (BSS_Collectable->ringScaleTableY[i] << 6);133BSS_Collectable->medalScreenYVals[i] = id * (BSS_Collectable->medalScaleTable[i] << 6);134135int32 scale = i * (BSS_Collectable->ringScaleTableY[i] - BSS_Collectable->ringScaleTableX[i]);136int32 scaleX = BSS_Collectable->ringScaleTableX[i];137BSS_Collectable->ringScaleTableY[i] = scaleX + (scale >> 5);138139--id;140}141}142}143144#if GAME_INCLUDE_EDITOR145void BSS_Collectable_EditorDraw(void) {}146147void BSS_Collectable_EditorLoad(void) {}148#endif149150void BSS_Collectable_Serialize(void) {}151152153