Path: blob/master/SonicMania/Objects/Global/EncoreRoute.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: EncoreRoute Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectEncoreRoute *EncoreRoute;1112void EncoreRoute_Update(void)13{14RSDK_THIS(EncoreRoute);1516uint8 layerSrc = -1;17uint8 layerDest = -1;1819switch (self->layerSrc) {20case EROUTE_LAYER_FGLOW: layerSrc = Zone->fgLayer[0]; break;21case EROUTE_LAYER_FGHIGH: layerSrc = Zone->fgLayer[1]; break;22case EROUTE_LAYER_MOVE: layerSrc = Zone->moveLayer; break;23case EROUTE_LAYER_SCRATCH: layerSrc = Zone->scratchLayer; break;24default: break;25}2627switch (self->layerDest) {28case EROUTE_LAYER_FGLOW: layerDest = Zone->fgLayer[0]; break;29case EROUTE_LAYER_FGHIGH: layerDest = Zone->fgLayer[1]; break;30case EROUTE_LAYER_MOVE: layerDest = Zone->moveLayer; break;31case EROUTE_LAYER_SCRATCH: layerDest = Zone->scratchLayer; break;32default: break;33}3435int32 srcX = self->offset.x >> 16;36int32 srcY = self->offset.y >> 16;37int32 dstX = self->position.x >> 20;38int32 dstY = self->position.y >> 20;3940for (int32 y = 0; y < (self->size.y >> 16); ++y) {41for (int32 x = 0; x < (self->size.x >> 16); ++x) {42uint16 tile = RSDK.GetTile(layerSrc, srcX + x, srcY + y);43RSDK.SetTile(layerDest, dstX + x, dstY + y, tile);44}45}4647destroyEntity(self);48}4950void EncoreRoute_LateUpdate(void) {}5152void EncoreRoute_StaticUpdate(void) {}5354void EncoreRoute_Draw(void) {}5556void EncoreRoute_Create(void *data)57{58RSDK_THIS(EncoreRoute);5960self->active = ACTIVE_ALWAYS;61}6263void EncoreRoute_StageLoad(void) {}6465#if GAME_INCLUDE_EDITOR66void EncoreRoute_EditorDraw(void)67{68RSDK_THIS(EncoreRoute);6970Vector2 drawPos;7172self->drawFX = FX_FLIP;73self->active = ACTIVE_NORMAL;7475Vector2 *positions[2] = { &self->position, &self->offset };7677Vector2 size;78size.x = TILE_SIZE * self->size.x;79size.y = TILE_SIZE * self->size.y;8081int32 count = showGizmos() ? 2 : 1;82for (int32 i = 0; i < count; ++i) {83if (i >= 1)84RSDK_DRAWING_OVERLAY(true);8586drawPos.x = positions[i]->x + (size.x >> 1);87drawPos.y = positions[i]->y + (size.y >> 1);8889DrawHelpers_DrawRectOutline(drawPos.x, drawPos.y, size.x, size.y, 0xFFFF00);9091drawPos.x = positions[i]->x;92drawPos.y = positions[i]->y;9394self->direction = FLIP_NONE;95RSDK.DrawSprite(&EncoreRoute->animator, &drawPos, false);9697drawPos.x += size.x;98self->direction = FLIP_X;99RSDK.DrawSprite(&EncoreRoute->animator, &drawPos, false);100101drawPos.y += size.y;102self->direction = FLIP_XY;103RSDK.DrawSprite(&EncoreRoute->animator, &drawPos, false);104105drawPos.x -= size.x;106self->direction = FLIP_Y;107RSDK.DrawSprite(&EncoreRoute->animator, &drawPos, false);108109if (i >= 1)110RSDK_DRAWING_OVERLAY(false);111}112113if (showGizmos()) {114// Point to where the tiles come from115RSDK_DRAWING_OVERLAY(true);116DrawHelpers_DrawArrow(self->offset.x + (size.x >> 1), self->offset.y + (size.y >> 1), self->position.x + (size.x >> 1),117self->position.y + (size.y >> 1), 0xE0E0E0, INK_NONE, 0xFF);118RSDK_DRAWING_OVERLAY(false);119}120}121122void EncoreRoute_EditorLoad(void)123{124EncoreRoute->aniFrames = RSDK.LoadSpriteAnimation("Global/TicMark.bin", SCOPE_STAGE);125RSDK.SetSpriteAnimation(EncoreRoute->aniFrames, 0, &EncoreRoute->animator, true, 0);126127RSDK_ACTIVE_VAR(EncoreRoute, layerSrc);128RSDK_ENUM_VAR("FG Low", EROUTE_LAYER_FGLOW);129RSDK_ENUM_VAR("FG High", EROUTE_LAYER_FGHIGH);130RSDK_ENUM_VAR("Move", EROUTE_LAYER_MOVE);131RSDK_ENUM_VAR("Scratch", EROUTE_LAYER_SCRATCH);132133RSDK_ACTIVE_VAR(EncoreRoute, layerDest);134RSDK_ENUM_VAR("FG Low", EROUTE_LAYER_FGLOW);135RSDK_ENUM_VAR("FG High", EROUTE_LAYER_FGHIGH);136RSDK_ENUM_VAR("Move", EROUTE_LAYER_MOVE);137RSDK_ENUM_VAR("Scratch", EROUTE_LAYER_SCRATCH);138139RSDK_ACTIVE_VAR(EncoreRoute, frameID);140RSDK_ENUM_VAR("(Unused)", EROUTE_FRAME_UNUSED);141}142#endif143144void EncoreRoute_Serialize(void)145{146RSDK_EDITABLE_VAR(EncoreRoute, VAR_VECTOR2, offset);147RSDK_EDITABLE_VAR(EncoreRoute, VAR_VECTOR2, size);148RSDK_EDITABLE_VAR(EncoreRoute, VAR_UINT8, layerSrc);149RSDK_EDITABLE_VAR(EncoreRoute, VAR_UINT8, layerDest);150RSDK_EDITABLE_VAR(EncoreRoute, VAR_ENUM, frameID);151}152#endif153154155