Path: blob/master/SonicMania/Objects/CPZ/Syringe.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: Syringe Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectSyringe *Syringe;1011void Syringe_Update(void)12{13RSDK_THIS(Syringe);1415if (self->activated) {16if (self->offsetY < 0x280000) {17self->offsetY += 0x8000;18if (!(Zone->timer & 3))19CREATE_ENTITY(Reagent, INT_TO_VOID(self->type), self->position.x, self->position.y + 0x680000);20}2122self->active = ACTIVE_NORMAL;23}24else if (!RSDK.CheckOnScreen(self, NULL)) {25self->active = ACTIVE_BOUNDS;26self->offsetY = 0;27}2829foreach_active(Player, player)30{31Player_CheckCollisionPlatform(player, self, &Syringe->hitboxBody);32self->position.y += self->offsetY;3334if (Player_CheckCollisionPlatform(player, self, &Syringe->hitboxHandle)) {35self->activated = true;36player->position.y += 0x10000;3738EntityCamera *camera = player->camera;39if (camera) {40if (camera->lookPos.y < 96) {41camera->lookPos.y += 8;42camera->lookPos.y = MIN(camera->lookPos.y, 80);43}44}45}4647self->position.y -= self->offsetY;48}49}5051void Syringe_LateUpdate(void) {}5253void Syringe_StaticUpdate(void) {}5455void Syringe_Draw(void)56{57RSDK_THIS(Syringe);58Vector2 drawPos;5960drawPos.x = self->position.x;61drawPos.y = self->position.y + self->offsetY;62RSDK.DrawRect(drawPos.x - 0x100000, drawPos.y, 0x200000, 0x4E0000 - self->offsetY, self->color, 0xC0, INK_ALPHA, false);63RSDK.DrawSprite(&self->handleAnimator, &drawPos, false);64RSDK.DrawSprite(&self->containerAnimator, NULL, false);65}6667void Syringe_Create(void *data)68{69RSDK_THIS(Syringe);7071if (!SceneInfo->inEditor) {72self->visible = true;73self->drawGroup = Zone->objectDrawGroup[0];74self->active = ACTIVE_BOUNDS;75self->updateRange.x = 0x800000;76self->updateRange.y = 0x800000;7778switch (self->type) {79case CHEMICALPOOL_BLUE: self->color = 0x0008C0; break;80case CHEMICALPOOL_GREEN: self->color = 0x189000; break;81case CHEMICALPOOL_CYAN: self->color = 0x0080B0; break;82}8384RSDK.SetSpriteAnimation(Syringe->aniFrames, 0, &self->handleAnimator, true, 0);85RSDK.SetSpriteAnimation(Syringe->aniFrames, 0, &self->containerAnimator, true, 1);86}87}8889void Syringe_StageLoad(void)90{91Syringe->aniFrames = RSDK.LoadSpriteAnimation("CPZ/Syringe.bin", SCOPE_STAGE);9293Syringe->hitboxBody.left = -16;94Syringe->hitboxBody.top = 0;95Syringe->hitboxBody.right = 16;96Syringe->hitboxBody.bottom = 8;9798Syringe->hitboxHandle.left = -24;99Syringe->hitboxHandle.top = -49;100Syringe->hitboxHandle.right = 24;101Syringe->hitboxHandle.bottom = -40;102103Syringe->sfxBloop = RSDK.GetSfx("Stage/Bloop.wav");104}105106#if GAME_INCLUDE_EDITOR107void Syringe_EditorDraw(void)108{109RSDK_THIS(Syringe);110111switch (self->type) {112case CHEMICALPOOL_BLUE: self->color = 0x0008C0; break;113case CHEMICALPOOL_GREEN: self->color = 0x189000; break;114case CHEMICALPOOL_CYAN: self->color = 0x0080B0; break;115}116117RSDK.SetSpriteAnimation(Syringe->aniFrames, 0, &self->handleAnimator, true, 0);118RSDK.SetSpriteAnimation(Syringe->aniFrames, 0, &self->containerAnimator, true, 1);119120Syringe_Draw();121}122123void Syringe_EditorLoad(void)124{125Syringe->aniFrames = RSDK.LoadSpriteAnimation("CPZ/Syringe.bin", SCOPE_STAGE);126127RSDK_ACTIVE_VAR(Syringe, type);128RSDK_ENUM_VAR("Blue", CHEMICALPOOL_BLUE);129RSDK_ENUM_VAR("Green", CHEMICALPOOL_GREEN);130RSDK_ENUM_VAR("Cyan", CHEMICALPOOL_CYAN);131}132#endif133134void Syringe_Serialize(void)135{136RSDK_EDITABLE_VAR(Syringe, VAR_ENUM, type);137RSDK_EDITABLE_VAR(Syringe, VAR_UINT8, tag);138}139140141