Path: blob/master/SonicMania/Objects/Global/COverlay.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: COverlay Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectCOverlay *COverlay;1011void COverlay_Update(void) {}1213void COverlay_LateUpdate(void) {}1415void COverlay_StaticUpdate(void) {}1617void COverlay_Draw(void)18{19RSDK_THIS(COverlay);2021int32 tileX = 0;22for (self->position.x = (ScreenInfo->position.x & 0xFFFFFFF0) << 16; tileX < (ScreenInfo->size.x >> 4) + 2; ++tileX) {23int32 tileY = 0;24for (self->position.y = (ScreenInfo->position.y & 0xFFFFFFF0) << 16; tileY < (ScreenInfo->size.y >> 4) + 2; ++tileY) {25COverlay_DrawTile();26self->position.y += TO_FIXED(16);27}28self->position.x += TO_FIXED(16);29}30}3132void COverlay_Create(void *data)33{34RSDK_THIS(COverlay);3536if (!SceneInfo->inEditor) {37self->active = ACTIVE_ALWAYS;38self->visible = true;39self->drawGroup = Zone->objectDrawGroup[1];40}41}4243void COverlay_StageLoad(void)44{45COverlay->aniFrames = RSDK.LoadSpriteAnimation("Global/PlaneSwitch.bin", SCOPE_STAGE);4647DEBUGMODE_ADD_OBJ(COverlay);48}4950void COverlay_DebugDraw(void)51{52RSDK.SetSpriteAnimation(COverlay->aniFrames, 0, &DebugMode->animator, true, 0);53DebugMode->animator.frameID = 4;5455RSDK.DrawSprite(&DebugMode->animator, NULL, false);56}5758void COverlay_DebugSpawn(void)59{60RSDK_THIS(DebugMode);6162int32 count = 0;63foreach_all(COverlay, overlay)64{65destroyEntity(overlay);66++count;67}6869if (!count)70CREATE_ENTITY(COverlay, NULL, self->position.x, self->position.y);71}7273void COverlay_DrawTile(void)74{75RSDK_THIS(COverlay);7677EntityPlayer *player = RSDK_GET_ENTITY(SLOT_PLAYER1, Player);78int32 tx = 0;79for (int32 x = 0; x < 0x10; ++x) {80uint8 ty = -1;81uint8 th2 = -1;82uint8 ty2 = -1;83uint8 th = -1;84uint8 solid = 0;85for (int32 y = 0; y < 0x10; ++y) {86if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, player->collisionPlane, TO_FIXED(x), TO_FIXED(y), false)) {87solid |= 1;88th2 = y + 1;89if (ty == 0xFF)90ty = y;91}9293if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_ROOF, player->collisionPlane, TO_FIXED(x), TO_FIXED(y), false)) {94solid |= 2;95th = y + 1;96if (ty2 == 0xFF)97ty2 = y - 1;98}99}100101if ((ty <= ty2 || ty == 0xFF) && ty2 != 0xFF)102ty = ty2;103if (th2 < th)104th = th2;105106if (ty != 0xFF) {107switch (solid) {108default: break;109110case 1:111RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),1120xE0E000, 0xFF, INK_NONE, false);113break;114115case 2:116RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),1170xE00000, 0xFF, INK_NONE, false);118break;119120case 3:121RSDK.DrawLine(self->position.x + tx, self->position.y + TO_FIXED(ty), self->position.x + tx, self->position.y + TO_FIXED(th),1220xE0E0E0, 0xFF, INK_NONE, false);123break;124}125}126127tx += TO_FIXED(1);128}129}130131#if GAME_INCLUDE_EDITOR132void COverlay_EditorDraw(void) {}133134void COverlay_EditorLoad(void) {}135#endif136137void COverlay_Serialize(void) {}138139140