Path: blob/master/SonicMania/Objects/FBZ/Mine.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: Mine Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectMine *Mine;1011void Mine_Update(void)12{13RSDK_THIS(Mine);1415if (self->timer <= 0) {16foreach_active(Player, player)17{18if (Player_CheckCollisionTouch(player, self, &Mine->hitboxMine)) {19self->active = ACTIVE_NORMAL;20self->timer = 30;21}22}2324#if MANIA_USE_PLUS25Mine_CheckMightyHit();26#endif27}28else {29self->animator.frameID ^= 1;30if (--self->timer) {31#if MANIA_USE_PLUS32Mine_CheckMightyHit();33#endif34}35else {36foreach_active(FBZMissile, missile)37{38if (missile->type == FBZMISSILE_HULL39&& RSDK.CheckObjectCollisionTouchBox(missile, &FBZMissile->hitboxHull, self, &FBZMissile->hitboxMissileV)) {40if (--missile->timer <= 0) {41destroyEntity(missile);42RSDK.PlaySfx(Player->sfxRelease, false, 255);43}4445int32 x = self->position.x;46int32 y = self->position.y + 0x30000;47CREATE_ENTITY(Explosion, INT_TO_VOID(EXPLOSION_BOSSPUFF), x, y)->drawGroup = Zone->objectDrawGroup[1];48RSDK.PlaySfx(FBZMissile->sfxExplosion, false, 255);49destroyEntity(self);50foreach_return;51}52}5354foreach_active(Player, player)55{56if (Player_CheckCollisionTouch(player, self, &Mine->hitboxMine)) {57#if MANIA_USE_PLUS58if (Player_CheckMightyUnspin(player, 0x400, true, &player->uncurlTimer))59player->onGround = false;60else61#endif62Player_Hurt(player, self);63}64}6566CREATE_ENTITY(Explosion, INT_TO_VOID(EXPLOSION_ENEMY), self->position.x, self->position.y - 0x30000)->drawGroup =67Zone->objectDrawGroup[1];68RSDK.PlaySfx(Mine->sfxExplosion, false, 255);69#if MANIA_USE_PLUS70Mine_CheckMightyHit();71#endif72destroyEntity(self);73}74}75}7677void Mine_LateUpdate(void) {}7879void Mine_StaticUpdate(void) {}8081void Mine_Draw(void)82{83RSDK_THIS(Mine);8485RSDK.DrawSprite(&self->animator, NULL, false);86}8788void Mine_Create(void *data)89{90RSDK_THIS(Mine);9192if (!SceneInfo->inEditor) {93self->active = ACTIVE_BOUNDS;94self->visible = true;95self->drawGroup = Zone->objectDrawGroup[0];96self->updateRange.x = 0x400000;97self->updateRange.y = 0x400000;9899RSDK.SetSpriteAnimation(Mine->aniFrames, 0, &self->animator, true, 0);100}101}102103void Mine_StageLoad(void)104{105Mine->aniFrames = RSDK.LoadSpriteAnimation("FBZ/Mine.bin", SCOPE_STAGE);106107Mine->hitboxMine.top = -6;108Mine->hitboxMine.left = -12;109Mine->hitboxMine.right = 12;110Mine->hitboxMine.bottom = 0;111112Mine->sfxExplosion = RSDK.GetSfx("Stage/Explosion2.wav");113}114115#if MANIA_USE_PLUS116void Mine_CheckMightyHit(void)117{118RSDK_THIS(Mine);119120foreach_active(Player, player)121{122if (Player_CheckBadnikTouch(player, self, &Mine->hitboxMine) && (player->characterID == ID_MIGHTY && player->jumpAbilityState > 1)) {123self->timer = 1;124}125}126}127#endif128129#if GAME_INCLUDE_EDITOR130void Mine_EditorDraw(void)131{132RSDK_THIS(Mine);133self->drawGroup = Zone->objectDrawGroup[0];134RSDK.SetSpriteAnimation(Mine->aniFrames, 0, &self->animator, true, 0);135136Mine_Draw();137}138139void Mine_EditorLoad(void) { Mine->aniFrames = RSDK.LoadSpriteAnimation("FBZ/Mine.bin", SCOPE_STAGE); }140#endif141142void Mine_Serialize(void) {}143144145