Path: blob/master/SonicMania/Objects/FBZ/FBZFan.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: FBZFan Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectFBZFan *FBZFan;1011void FBZFan_Update(void)12{13RSDK_THIS(FBZFan);1415FBZFan->hitboxFan.top = (RSDK.Sin256(2 * Zone->timer) >> 5) - 80;16FBZFan->hitboxFan.bottom = FBZFan->hitboxFan.top + 96;1718self->hitboxTrigger.top = -96;19self->hitboxTrigger.bottom = -8;2021foreach_active(Player, player)22{23bool32 isFanning = false;2425int32 playerID = RSDK.GetEntitySlot(player);26Player_CheckCollisionBox(player, self, &FBZFan->hitboxSolid);2728if (player->state != Player_State_Static && Player_CheckValidState(player) && player->animator.animationID != ANI_HURT29&& RSDK.CheckObjectCollisionTouchBox(self, &FBZFan->hitboxFan, player, &FBZFan->hitboxPlayer)) {30isFanning = true;31RSDK.SetSpriteAnimation(player->aniFrames, ANI_FAN, &player->animator, false, 0);32player->state = Player_State_Air;33player->onGround = false;3435int32 vel = (self->position.y + (FBZFan->hitboxFan.top << 16) - player->position.y) >> 4;36if (player->velocity.y <= vel) {37player->velocity.y = vel;38}39else {40player->velocity.y += ((self->position.y + (FBZFan->hitboxFan.top << 16) - player->position.y) >> 6)41+ ((self->position.y + (FBZFan->hitboxFan.top << 16) - player->position.y) >> 5);4243if (player->velocity.y < vel)44player->velocity.y = vel;45}4647if (!((1 << playerID) & FBZFan->activePlayers)) {48if (player->velocity.y > -0x40000 && player->velocity.y < 0)49player->velocity.x += (32 * player->velocity.x / 31) >> 5;5051FBZFan->activePlayers |= 1 << playerID;52}53}5455if (RSDK.CheckObjectCollisionTouchBox(self, &self->hitboxTrigger, player, &FBZFan->hitboxPlayer)) {56if (!((1 << playerID) & self->activePlayers) && isFanning) {57RSDK.PlaySfx(FBZFan->sfxFan, false, 255);58self->activePlayers |= (1 << playerID);59}60}61else {62self->activePlayers &= ~(1 << playerID);63}64}65}6667void FBZFan_LateUpdate(void) {}6869void FBZFan_StaticUpdate(void)70{71RSDK.ProcessAnimation(&FBZFan->fanAnimator);72RSDK.ProcessAnimation(&FBZFan->fan2Animator);7374FBZFan->activePlayers = 0;75}7677void FBZFan_Draw(void)78{79RSDK.DrawSprite(&FBZFan->baseAnimator, NULL, false);80RSDK.DrawSprite(&FBZFan->fanAnimator, NULL, false);81RSDK.DrawSprite(&FBZFan->fan2Animator, NULL, false);82}8384void FBZFan_Create(void *data)85{86RSDK_THIS(FBZFan);87if (!SceneInfo->inEditor) {88self->active = ACTIVE_BOUNDS;89self->visible = true;90self->drawGroup = Zone->objectDrawGroup[0] + 1;91self->updateRange.x = 0x800000;92self->updateRange.y = 0x800000;9394self->hitboxTrigger.left = -64;95self->hitboxTrigger.right = 64;96}97}9899void FBZFan_StageLoad(void)100{101FBZFan->aniFrames = RSDK.LoadSpriteAnimation("FBZ/FBZFan.bin", SCOPE_STAGE);102103FBZFan->sfxFan = RSDK.GetSfx("FBZ/FBZFan.wav");104105RSDK.SetSpriteAnimation(FBZFan->aniFrames, 0, &FBZFan->baseAnimator, true, 0);106RSDK.SetSpriteAnimation(FBZFan->aniFrames, 1, &FBZFan->fanAnimator, true, 0);107RSDK.SetSpriteAnimation(FBZFan->aniFrames, 2, &FBZFan->fan2Animator, true, 0);108109FBZFan->hitboxSolid.left = -64;110FBZFan->hitboxSolid.top = -16;111FBZFan->hitboxSolid.right = 64;112FBZFan->hitboxSolid.bottom = 16;113114FBZFan->hitboxFan.left = -64;115FBZFan->hitboxFan.right = 64;116117FBZFan->hitboxPlayer.left = -1;118FBZFan->hitboxPlayer.top = -1;119FBZFan->hitboxPlayer.right = 1;120FBZFan->hitboxPlayer.bottom = 1;121}122123#if GAME_INCLUDE_EDITOR124void FBZFan_EditorDraw(void) { FBZFan_Draw(); }125126void FBZFan_EditorLoad(void)127{128FBZFan->aniFrames = RSDK.LoadSpriteAnimation("FBZ/FBZFan.bin", SCOPE_STAGE);129130RSDK.SetSpriteAnimation(FBZFan->aniFrames, 0, &FBZFan->baseAnimator, true, 0);131RSDK.SetSpriteAnimation(FBZFan->aniFrames, 1, &FBZFan->fanAnimator, true, 0);132RSDK.SetSpriteAnimation(FBZFan->aniFrames, 2, &FBZFan->fan2Animator, true, 0);133}134#endif135136void FBZFan_Serialize(void) {}137138139