Path: blob/master/SonicMania/Objects/LRZ/HPZEmerald.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: HPZEmerald Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectHPZEmerald *HPZEmerald;1011void HPZEmerald_Update(void)12{13RSDK_THIS(HPZEmerald);1415RSDK.ProcessAnimation(&self->emeraldAnimator);1617if (self->solid) {18if (self->type != HPZEMERALD_MASTER) {19foreach_active(Player, player) { Player_CheckCollisionPlatform(player, self, self->hitbox); }20}2122foreach_active(HeavyKing, king)23{24if (king->bodyAnimator.animationID != 5 && !king->onGround25&& RSDK.CheckObjectCollisionPlatform(self, self->hitbox, king, &HeavyKing->hitboxBody, true)) {26Camera_ShakeScreen(0, 0, 3);27RSDK.PlaySfx(HeavyKing->sfxImpact2, false, 255);28}29}30}3132if (!self->onGround) {33self->velocity.y += 0x3800;34self->position.y += self->velocity.y;3536if (self->position.y >= self->startPos.y && self->velocity.y > 0) {37self->position.y = self->startPos.y;38self->velocity.y = -(self->velocity.y >> 1);3940if (!self->velocity.y)41self->onGround = true;42}43}44}4546void HPZEmerald_LateUpdate(void) {}4748void HPZEmerald_StaticUpdate(void) {}4950void HPZEmerald_Draw(void)51{52RSDK_THIS(HPZEmerald);5354self->inkEffect = INK_NONE;5556if (self->solid) {57RSDK.DrawSprite(&self->emeraldAnimator, NULL, false);58}59else {60RSDK.DrawSprite(&self->emeraldAnimator, NULL, false);6162self->inkEffect = INK_ADD;63RSDK.DrawSprite(&self->overlayAnimator, NULL, false);64}65}6667void HPZEmerald_Create(void *data)68{69RSDK_THIS(HPZEmerald);7071if (!SceneInfo->inEditor) {72self->visible = true;7374switch (self->type) {75default:76case HPZEMERALD_MASTER: self->drawGroup = 1; break;7778case HPZEMERALD_EMERALD_LOW:79self->solid = true;80self->drawGroup = Zone->objectDrawGroup[0];81break;8283case HPZEMERALD_EMERALD_HIGH:84self->solid = true;85self->drawGroup = Zone->objectDrawGroup[1];86break;87}8889self->startPos = self->position;90self->active = ACTIVE_BOUNDS;91self->updateRange.x = 0x800000;92self->updateRange.y = 0x800000;93self->onGround = true;9495if (self->type != HPZEMERALD_MASTER) {96RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 1, &self->emeraldAnimator, true, 0);97}98else {99RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 0, &self->emeraldAnimator, true, 0);100RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 0, &self->overlayAnimator, true, 1);101}102103self->hitbox = RSDK.GetHitbox(&self->emeraldAnimator, 0);104}105}106107void HPZEmerald_StageLoad(void) { HPZEmerald->aniFrames = RSDK.LoadSpriteAnimation("LRZ3/Emerald.bin", SCOPE_STAGE); }108109#if GAME_INCLUDE_EDITOR110void HPZEmerald_EditorDraw(void)111{112RSDK_THIS(HPZEmerald);113114self->solid = false;115switch (self->type) {116default:117case HPZEMERALD_MASTER:118case HPZEMERALD_EMERALD_LOW: self->solid = true; break;119120case HPZEMERALD_EMERALD_HIGH: self->solid = true; break;121}122123if (self->type) {124RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 1, &self->emeraldAnimator, true, 0);125}126else {127RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 0, &self->emeraldAnimator, true, 0);128RSDK.SetSpriteAnimation(HPZEmerald->aniFrames, 0, &self->overlayAnimator, true, 1);129}130131HPZEmerald_Draw();132}133134void HPZEmerald_EditorLoad(void)135{136HPZEmerald->aniFrames = RSDK.LoadSpriteAnimation("LRZ3/Emerald.bin", SCOPE_STAGE);137138RSDK_ACTIVE_VAR(HPZEmerald, type);139RSDK_ENUM_VAR("Master Emerald", HPZEMERALD_MASTER);140RSDK_ENUM_VAR("Stone Emerald (Low Group)", HPZEMERALD_EMERALD_LOW);141RSDK_ENUM_VAR("Stone Emerald (High Group)", HPZEMERALD_EMERALD_HIGH);142}143#endif144145void HPZEmerald_Serialize(void) { RSDK_EDITABLE_VAR(HPZEmerald, VAR_UINT8, type); }146147148