Path: blob/master/SonicMania/Objects/CPZ/Reagent.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: Reagent Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectReagent *Reagent;1011void Reagent_Update(void)12{13RSDK_THIS(Reagent);1415StateMachine_Run(self->state);16}1718void Reagent_LateUpdate(void) {}1920void Reagent_StaticUpdate(void) {}2122void Reagent_Draw(void)23{24RSDK_THIS(Reagent);2526RSDK.DrawSprite(&self->animator, NULL, false);27}2829void Reagent_Create(void *data)30{31RSDK_THIS(Reagent);3233if (!SceneInfo->inEditor) {34self->visible = true;35self->drawGroup = Zone->objectDrawGroup[0];36self->active = ACTIVE_NORMAL;37self->updateRange.x = 0x800000;38self->updateRange.y = 0x2000000;39self->inkEffect = INK_ALPHA;40self->alpha = 0xC0;41self->velocity.x = ZONE_RAND(-0xC000, 0xC000);42self->type = VOID_TO_INT(data);43self->state = Reagent_State_CheckPoolCollisions;4445switch (self->type) {46case CHEMICALPOOL_BLUE:47self->r = 0x00;48self->g = 0x08;49self->b = 0xC0;50break;5152case CHEMICALPOOL_GREEN:53self->r = 0x18;54self->g = 0x90;55self->b = 0x00;56break;5758case CHEMICALPOOL_CYAN:59self->r = 0x00;60self->g = 0x80;61self->b = 0xB0;62break;63}6465RSDK.SetSpriteAnimation(Reagent->aniFrames, self->type + 1, &self->animator, true, ZONE_RAND(0, 2));66}67}6869void Reagent_StageLoad(void)70{71Reagent->aniFrames = RSDK.LoadSpriteAnimation("CPZ/Syringe.bin", SCOPE_STAGE);7273Reagent->hitbox.left = -2;74Reagent->hitbox.top = -2;75Reagent->hitbox.right = 2;76Reagent->hitbox.bottom = 2;7778Reagent->sfxLand = RSDK.GetSfx("Puyo/Land.wav");79}8081void Reagent_State_CheckPoolCollisions(void)82{83RSDK_THIS(Reagent);8485self->velocity.y += 0x3800;86self->position.x += self->velocity.x;87self->position.y += self->velocity.y;8889foreach_all(ChemicalPool, chemPool)90{91if (RSDK.CheckObjectCollisionTouchBox(self, &Reagent->hitbox, chemPool, &chemPool->hitbox)) {92self->velocity.y >>= 2;93self->originPos.x = self->position.x;94self->state = Reagent_State_ChangingPoolType;95chemPool->active = ACTIVE_NORMAL;96ChemicalPool_ChangeState(chemPool, self->type, self->r, self->g, self->b);97RSDK.PlaySfx(Reagent->sfxLand, false, 255);98}99}100101if (!RSDK.CheckOnScreen(self, NULL))102destroyEntity(self);103}104105void Reagent_State_ChangingPoolType(void)106{107RSDK_THIS(Reagent);108109self->velocity.y -= 0x1800;110self->alpha -= 4;111++self->timer;112self->position.x = self->originPos.x + (RSDK.Sin256(self->timer) << 10);113self->position.y += self->velocity.y;114115if (self->timer == 64)116destroyEntity(self);117}118119#if GAME_INCLUDE_EDITOR120void Reagent_EditorDraw(void)121{122RSDK_THIS(Reagent);123124self->updateRange.x = 0x800000;125self->updateRange.y = 0x2000000;126self->inkEffect = INK_ALPHA;127self->alpha = 0xC0;128129switch (self->type) {130case CHEMICALPOOL_BLUE:131self->r = 0x00;132self->g = 0x08;133self->b = 192;134break;135136case CHEMICALPOOL_GREEN:137self->r = 0x18;138self->g = 0x90;139self->b = 0x00;140break;141142case CHEMICALPOOL_CYAN:143self->r = 0x00;144self->g = 0x80;145self->b = 0xB0;146break;147}148149RSDK.SetSpriteAnimation(Reagent->aniFrames, self->type + 1, &self->animator, true, 0);150151Reagent_Draw();152}153154void Reagent_EditorLoad(void) { Reagent->aniFrames = RSDK.LoadSpriteAnimation("CPZ/Syringe.bin", SCOPE_STAGE); }155#endif156157void Reagent_Serialize(void) {}158159160