Path: blob/master/SonicMania/Objects/SPZ/EggTV.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: EggTV Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectEggTV *EggTV;1011void EggTV_Update(void)12{13RSDK_THIS(EggTV);1415// Scanlines are drawn with INK_BLEND so this doesn't actually do anything...16// (Probably done because it could get real laggy with so many lines)17if (self->scanlineAlpha < 0x60)18self->scanlineAlpha += 4;19}2021void EggTV_LateUpdate(void) {}2223void EggTV_StaticUpdate(void) { RSDK.ProcessAnimation(&EggTV->animator); }2425void EggTV_Draw(void)26{27EggTV_DrawTV();2829if (globals->gameMode != MODE_COMPETITION)30EggTV_DrawScanlines();31}3233void EggTV_Create(void *data)34{35RSDK_THIS(EggTV);3637self->active = ACTIVE_BOUNDS;38self->drawGroup = self->drawOverTV ? Zone->objectDrawGroup[0] : (Zone->fgDrawGroup[0] + 1);3940self->visible = true;41self->drawFX = FX_NONE;42self->updateRange.x = 0x800000 + self->size.x;43self->updateRange.y = 0x800000 + self->size.y;4445self->hitbox.left = -(self->size.x >> 17);46self->hitbox.top = -(self->size.y >> 17);47self->hitbox.right = self->size.x >> 17;48self->hitbox.bottom = self->size.x >> 17;49}5051void EggTV_StageLoad(void)52{53EggTV->aniFrames = RSDK.LoadSpriteAnimation("SPZ2/EggTV.bin", SCOPE_STAGE);54RSDK.SetSpriteAnimation(EggTV->aniFrames, 0, &EggTV->animator, true, 0);55}5657void EggTV_DrawScanlines(void)58{59RSDK_THIS(EggTV);6061int32 y = (((Zone->timer >> 1) & 1) << 16) - (self->size.y >> 1) + self->position.y;62if (self->size.y >= 0 && (self->size.y & 0xFFFF0000)) {63for (int32 i = 0; i < (self->size.y >> 16); i += 2) {64RSDK.DrawLine(self->position.x - (self->size.x >> 1), y, self->position.x + (self->size.x >> 1), y, 0x404060, self->scanlineAlpha,65INK_BLEND, false);66y += 0x20000;67}68}69}70void EggTV_DrawTV(void)71{72RSDK_THIS(EggTV);7374self->alpha = 0xFF;75self->drawFX = FX_SCALE;76self->inkEffect = INK_NONE;77self->scale.x = ((self->size.x >> 16) << 9) / 0x60;78self->scale.y = ((self->size.y >> 16) << 9) / 0x60;79RSDK.DrawSprite(&EggTV->animator, NULL, false);8081self->drawFX = FX_NONE;82}8384#if GAME_INCLUDE_EDITOR85void EggTV_EditorDraw(void)86{87RSDK_THIS(EggTV);8889self->updateRange.x = 0x800000 + self->size.x;90self->updateRange.y = 0x800000 + self->size.y;9192EggTV_DrawTV();9394if (showGizmos()) {95RSDK_DRAWING_OVERLAY(true);9697DrawHelpers_DrawRectOutline(self->position.x, self->position.y, self->size.x, self->size.y, 0xFFFF00);9899RSDK_DRAWING_OVERLAY(false);100}101}102103void EggTV_EditorLoad(void)104{105EggTV->aniFrames = RSDK.LoadSpriteAnimation("SPZ2/EggTV.bin", SCOPE_STAGE);106RSDK.SetSpriteAnimation(EggTV->aniFrames, 0, &EggTV->animator, true, 14);107}108#endif109110void EggTV_Serialize(void)111{112RSDK_EDITABLE_VAR(EggTV, VAR_VECTOR2, size);113RSDK_EDITABLE_VAR(EggTV, VAR_BOOL, drawOverTV);114}115116117