Path: blob/master/SonicMania/Objects/Global/InvisibleBlock.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: InvisibleBlock Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectInvisibleBlock *InvisibleBlock;1011void InvisibleBlock_Update(void)12{13RSDK_THIS(InvisibleBlock);1415foreach_active(Player, player)16{17if ((self->planeFilter <= 0 || player->collisionPlane == (((uint8)self->planeFilter - 1) & 1)) && (!self->noChibi || !player->isChibi)) {18switch (Player_CheckCollisionBox(player, self, &self->hitbox)) {19case C_TOP:20if (!self->noCrush)21player->collisionFlagV |= 1;22break;2324case C_LEFT:25if (!self->noCrush)26player->collisionFlagH |= 1;27break;2829case C_RIGHT:30if (!self->noCrush)31player->collisionFlagH |= 2;32break;3334case C_BOTTOM:35if (!self->noCrush)36player->collisionFlagV |= 2;37break;3839default: break;40}41}42}4344self->visible = DebugMode->debugActive;45}4647void InvisibleBlock_LateUpdate(void) {}4849void InvisibleBlock_StaticUpdate(void) {}5051void InvisibleBlock_Draw(void) { InvisibleBlock_DrawSprites(); }5253void InvisibleBlock_Create(void *data)54{55RSDK_THIS(InvisibleBlock);5657if (!SceneInfo->inEditor) {58if (self->timeAttackOnly && globals->gameMode < MODE_TIMEATTACK)59destroyEntity(self);6061self->visible = false;62self->active = self->activeNormal ? ACTIVE_NORMAL : ACTIVE_BOUNDS;6364self->updateRange.x = (self->width + 5) << 19;65self->updateRange.y = (self->height + 5) << 19;6667self->hitbox.right = 8 * self->width + 8;68self->hitbox.left = -self->hitbox.right;69self->hitbox.bottom = 8 * self->height + 8;70self->hitbox.top = -self->hitbox.bottom;71self->drawGroup = Zone->objectDrawGroup[1];72}73}7475void InvisibleBlock_StageLoad(void)76{77InvisibleBlock->aniFrames = RSDK.LoadSpriteAnimation("Global/ItemBox.bin", SCOPE_STAGE);7879RSDK.SetSpriteAnimation(InvisibleBlock->aniFrames, 2, &InvisibleBlock->animator, true, 0);80InvisibleBlock->animator.frameID = 10;81}8283void InvisibleBlock_DrawSprites(void)84{85RSDK_THIS(InvisibleBlock);8687Vector2 drawPos;88drawPos.x = self->position.x - (self->width << 19);89drawPos.y = self->position.y - (self->height << 19);9091for (int32 y = 0; y <= self->height; ++y) {92for (int32 x = 0; x <= self->width; ++x) {93RSDK.DrawSprite(&InvisibleBlock->animator, &drawPos, false);94drawPos.x += TO_FIXED(16);95}9697drawPos.x += -TO_FIXED(16) - (self->width << 20);98drawPos.y += TO_FIXED(16);99}100}101102#if GAME_INCLUDE_EDITOR103void InvisibleBlock_EditorDraw(void)104{105RSDK_THIS(InvisibleBlock);106107self->updateRange.x = (self->width + 5) << 19;108self->updateRange.y = (self->height + 5) << 19;109110InvisibleBlock_DrawSprites();111}112113void InvisibleBlock_EditorLoad(void)114{115InvisibleBlock->aniFrames = RSDK.LoadSpriteAnimation("Global/ItemBox.bin", SCOPE_STAGE);116RSDK.SetSpriteAnimation(InvisibleBlock->aniFrames, 2, &InvisibleBlock->animator, true, 10);117118RSDK_ACTIVE_VAR(InvisibleBlock, planeFilter);119RSDK_ENUM_VAR("None", PLANEFILTER_NONE);120RSDK_ENUM_VAR("AL", PLANEFILTER_AL);121RSDK_ENUM_VAR("BL", PLANEFILTER_BL);122RSDK_ENUM_VAR("AH", PLANEFILTER_AH);123RSDK_ENUM_VAR("BH", PLANEFILTER_BH);124}125#endif126127void InvisibleBlock_Serialize(void)128{129RSDK_EDITABLE_VAR(InvisibleBlock, VAR_UINT8, width);130RSDK_EDITABLE_VAR(InvisibleBlock, VAR_UINT8, height);131RSDK_EDITABLE_VAR(InvisibleBlock, VAR_ENUM, planeFilter);132RSDK_EDITABLE_VAR(InvisibleBlock, VAR_BOOL, noCrush);133RSDK_EDITABLE_VAR(InvisibleBlock, VAR_BOOL, activeNormal);134RSDK_EDITABLE_VAR(InvisibleBlock, VAR_BOOL, timeAttackOnly);135RSDK_EDITABLE_VAR(InvisibleBlock, VAR_BOOL, noChibi);136}137138139