Path: blob/master/SonicMania/Objects/FBZ/MagSpikeBall.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: MagSpikeBall Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectMagSpikeBall *MagSpikeBall;1011void MagSpikeBall_Update(void)12{13RSDK_THIS(MagSpikeBall);1415self->position.y += self->velocity.y;16if (self->direction) {17self->velocity.y -= 0x3800;18if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_ROOF, 0, 0, -0xC0000, true))19self->velocity.y = 0;2021self->direction = FLIP_NONE;22}23else {24self->velocity.y += 0x3800;25if (self->velocity.y <= 0 && RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_ROOF, 0, 0, -0xC0000, true))26self->velocity.y = 0;2728bool32 collided = RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0xC0000, true);2930foreach_all(MagPlatform, platform)31{32platform->position.x = platform->drawPos.x - platform->collisionOffset.x;33platform->position.y = platform->drawPos.y - platform->collisionOffset.y;34Hitbox *hitbox = RSDK.GetHitbox(&platform->animator, 0);35collided |= RSDK.CheckObjectCollisionPlatform(platform, hitbox, self, &MagSpikeBall->hitboxSpikeBall, true);3637platform->position.x = platform->centerPos.x;38platform->position.y = platform->centerPos.y;39}4041if (collided) {42self->velocity.y = 0;43self->active = ACTIVE_BOUNDS;44}45}4647foreach_active(Player, player)48{49if (Player_CheckCollisionTouch(player, self, &MagSpikeBall->hitboxSpikeBall)) {50#if MANIA_USE_PLUS51if (player->onGround && (self->velocity.y > 0 || !Player_CheckMightyUnspin(player, 0x400, true, &player->uncurlTimer)))52#endif53Player_Hurt(player, self);54}55}56}5758void MagSpikeBall_LateUpdate(void) {}5960void MagSpikeBall_StaticUpdate(void) {}6162void MagSpikeBall_Draw(void)63{64RSDK_THIS(MagSpikeBall);6566RSDK.DrawSprite(&self->animator, NULL, false);67}6869void MagSpikeBall_Create(void *data)70{71RSDK_THIS(MagSpikeBall);7273self->active = ACTIVE_BOUNDS;74self->visible = true;75self->updateRange.x = 0x400000;76self->updateRange.y = 0x400000;77self->drawGroup = Zone->objectDrawGroup[0];7879RSDK.SetSpriteAnimation(MagSpikeBall->aniFrames, 0, &self->animator, true, 0);80}8182void MagSpikeBall_StageLoad(void)83{84if (RSDK.CheckSceneFolder("FBZ"))85MagSpikeBall->aniFrames = RSDK.LoadSpriteAnimation("FBZ/MagSpikeBall.bin", SCOPE_STAGE);8687MagSpikeBall->hitboxSpikeBall.left = -12;88MagSpikeBall->hitboxSpikeBall.top = -12;89MagSpikeBall->hitboxSpikeBall.right = 12;90MagSpikeBall->hitboxSpikeBall.bottom = 12;91}9293#if GAME_INCLUDE_EDITOR94void MagSpikeBall_EditorDraw(void) { MagSpikeBall_Draw(); }9596void MagSpikeBall_EditorLoad(void) { MagSpikeBall->aniFrames = RSDK.LoadSpriteAnimation("FBZ/MagSpikeBall.bin", SCOPE_STAGE); }97#endif9899void MagSpikeBall_Serialize(void) {}100101102