Path: blob/master/SonicMania/Objects/Cutscene/FXTrail.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: FXTrail Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectFXTrail *FXTrail;1011void FXTrail_Update(void) {}1213void FXTrail_LateUpdate(void)14{15RSDK_THIS(FXTrail);1617Entity *parent = self->parent;1819if (parent && self->animatorPtr && parent->classID) {20// Update recordings21for (int32 i = FXTRAIL_TRACK_COUNT - 1; i > 0; --i) {22self->statePos[i].x = self->statePos[i - 1].x;23self->statePos[i].y = self->statePos[i - 1].y;24self->stateRotation[i] = self->stateRotation[i - 1];25self->stateDirection[i] = self->stateDirection[i - 1];26self->stateVisible[i] = self->stateVisible[i - 1];27memcpy(&self->stateAnim[i], &self->stateAnim[i - 1], sizeof(Animator));28}2930self->statePos[0].x = self->currentPos.x;31self->statePos[0].y = self->currentPos.y;32self->stateRotation[0] = self->currentRotation;33self->stateDirection[0] = self->currentDirection;34self->stateVisible[0] = self->currentVisible;35memcpy(&self->stateAnim[0], &self->currentAnim, sizeof(Animator));3637// Record Parent38self->drawGroup = parent->drawGroup - 1;39self->currentPos.x = parent->position.x;40self->currentPos.y = parent->position.y;41self->currentRotation = parent->rotation;42self->currentDirection = parent->direction;43memcpy(&self->currentAnim, self->animatorPtr, sizeof(Animator));44}45else {46destroyEntity(self);47}48}4950void FXTrail_StaticUpdate(void) {}5152void FXTrail_Draw(void)53{54RSDK_THIS(FXTrail);5556int32 alpha = 0x60 * self->baseAlpha >> 8;57int32 inc = 0x40 / (IMAGETRAIL_TRACK_COUNT / 3);5859for (int32 i = 2; i >= 0; --i) {60int32 id = (i * 3) - (i - 1);61if (self->stateVisible[id]) {62self->alpha = alpha;63self->rotation = self->stateRotation[id];64self->direction = self->stateDirection[id];65RSDK.DrawSprite(&self->stateAnim[id], &self->statePos[id], false);6667self->drawFX &= ~FX_SCALE;68alpha += inc;69}70}71}7273void FXTrail_Create(void *data)74{75RSDK_THIS(FXTrail);76if (!SceneInfo->inEditor) {77Entity *parent = (Entity *)data;7879self->active = ACTIVE_ALWAYS;80self->visible = true;81self->parent = parent;82self->baseAlpha = 0x100;83self->drawFX = FX_FLIP | FX_ROTATE;84self->inkEffect = INK_ALPHA;8586for (int32 i = FXTRAIL_TRACK_COUNT - 1; i >= 0; --i) {87self->statePos[i].x = parent->position.x;88self->statePos[i].y = parent->position.y;89self->stateRotation[i] = parent->rotation;90self->stateDirection[i] = parent->direction;91self->stateVisible[i] = false;92}93}94}9596void FXTrail_StageLoad(void) {}9798#if GAME_INCLUDE_EDITOR99void FXTrail_EditorDraw(void) {}100101void FXTrail_EditorLoad(void) {}102#endif103104void FXTrail_Serialize(void) {}105106107