Path: blob/master/SonicMania/Objects/Puyo/PuyoAttack.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: PuyoAttack Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectPuyoAttack *PuyoAttack;1011void PuyoAttack_Update(void)12{13RSDK_THIS(PuyoAttack);1415if (self->delay > 0) {16if (--self->delay)17return;1819self->visible = true;20}2122RSDK.ProcessAnimation(&self->animator);2324int32 angle = RSDK.ATan2((self->targetPos.x - self->position.x) >> 16, (self->targetPos.y - self->position.y) >> 16);25int32 rot = 2 * angle;26int32 targetRotation = rot - self->rotation;2728if (abs(rot - self->rotation) >= abs(targetRotation - 0x200)) {29if (abs(targetRotation - 0x200) < abs(targetRotation + 0x200))30self->rotation += ((targetRotation - 0x200) >> 3);31else32self->rotation += ((targetRotation + 0x200) >> 3);33}34else {35if (abs(rot - self->rotation) >= abs(targetRotation + 0x200))36self->rotation += ((targetRotation + 0x200) >> 3);37else38self->rotation += (targetRotation >> 3);39}4041self->rotation &= 0x1FF;42self->position.x += self->radius * RSDK.Cos512(self->rotation);43self->position.y += self->radius * RSDK.Sin512(self->rotation);4445if (self->radius < 1024)46self->radius += 8;4748if (self->position.y < self->targetPos.y) {49PuyoMatch_AddPuyoCombo(self->playerID, self->score);50destroyEntity(self);51}52}5354void PuyoAttack_LateUpdate(void) {}5556void PuyoAttack_StaticUpdate(void) {}5758void PuyoAttack_Draw(void)59{60RSDK_THIS(PuyoAttack);6162RSDK.DrawSprite(&self->animator, NULL, false);63}6465void PuyoAttack_Create(void *data)66{67RSDK_THIS(PuyoAttack);6869if (!SceneInfo->inEditor) {70self->delay = 16;71self->radius = 512;72self->drawGroup = Zone->hudDrawGroup;7374self->playerID = VOID_TO_INT(data);75self->rotation = self->playerID ? 0x140 : 0x40;76self->active = ACTIVE_NORMAL;77RSDK.SetSpriteAnimation(PuyoAttack->aniFrames, self->playerID ^ 1, &self->animator, true, 0);78}79}8081void PuyoAttack_StageLoad(void)82{83PuyoAttack->aniFrames = RSDK.LoadSpriteAnimation("Puyo/Combos.bin", SCOPE_STAGE);8485PuyoAttack->sfxAttack = RSDK.GetSfx("Puyo/Attack.wav");86}8788#if GAME_INCLUDE_EDITOR89void PuyoAttack_EditorDraw(void)90{91RSDK_THIS(PuyoAttack);92RSDK.SetSpriteAnimation(PuyoAttack->aniFrames, 0, &self->animator, true, 3);9394PuyoAttack_Draw();95}9697void PuyoAttack_EditorLoad(void) { PuyoAttack->aniFrames = RSDK.LoadSpriteAnimation("Puyo/Combos.bin", SCOPE_STAGE); }98#endif99100void PuyoAttack_Serialize(void) {}101102103