Path: blob/master/SonicMania/Objects/Common/Water.h
338 views
#ifndef OBJ_WATER_H1#define OBJ_WATER_H23#include "Game.h"45typedef enum {6WATER_WATERLEVEL,7WATER_POOL,8WATER_BUBBLER,9WATER_HEIGHT_TRIGGER,10WATER_BIG_BUBBLER,11WATER_BTN_BIG_BUBBLE,12WATER_SPLASH,13WATER_BUBBLE,14WATER_COUNTDOWN,15} WaterTypes;1617typedef enum {18WATER_PRIORITY_LOWEST,19WATER_PRIORITY_LOW,20WATER_PRIORITY_HIGH,21WATER_PRIORITY_HIGHEST,22} WaterPriorities;2324// Object Class25struct ObjectWater {26RSDK_OBJECT27int32 waterLevel;28int32 newWaterLevel;29int32 targetWaterLevel;30int32 waterMoveSpeed;31int32 constBubbleTimer[PLAYER_COUNT];32int32 randBubbleTimer[PLAYER_COUNT];33int32 unused1[PLAYER_COUNT]; // unused but set to 0 on bubble timer sets. maybe an old bubble/drowning timer?34TABLE(int32 bubbleSizes[18], { 2, 4, 2, 2, 2, 2, 4, 2, 4, 2, 2, 4, 2, 4, 2, 2, 4, 2 });35uint16 aniFrames;36uint16 bigBubbleFrames;37uint16 wakeFrames;38Hitbox hitboxPlayerBubble;39Hitbox hitboxPoint;40uint16 sfxSplash;41uint16 sfxBreathe;42uint16 sfxWarning;43uint16 sfxDrownAlert;44uint16 sfxDrown;45uint16 sfxSkim;46uint16 sfxDNAGrab;47uint16 sfxDNABurst;48uint16 sfxWaterLevelL;49uint16 sfxWaterLevelR;50int32 waterLevelChannelL;51int32 waterLevelChannelR;52int32 unused2;53bool32 playingWaterLevelSfx;54bool32 moveWaterLevel;55int32 waterLevelVolume;56int32 waterPalette;57bool32 disableWaterSplash; // this is never set except for once and it's used in if ! statements to link the player or not58int32 wakePosX[PLAYER_COUNT];59uint8 wakeDir[PLAYER_COUNT];60Animator wakeAnimator;61int32 unused3;62bool32 playingSkimSfx;63};6465// Entity Class66struct EntityWater {67RSDK_ENTITY68StateMachine(state);69StateMachine(stateDraw);70int32 type;71void *childPtr;72int32 bubbleX;73int8 bubbleType1;74uint8 dudsRemaining;75uint8 bubbleFlags;76int8 bubbleType2;77int32 numDuds;78int32 countdownID;79bool32 playerInBubble;80Vector2 size;81Vector2 height;82int32 speed;83int32 buttonTag;84uint8 r;85uint8 g;86uint8 b;87uint8 priority;88bool32 destroyOnTrigger;89Hitbox hitbox;90bool32 isBigBubble;91int32 bigBubbleTimer;92int32 timer;93uint8 activePlayers;94uint8 releasedPlayers;95Vector2 bubbleOffset;96Vector2 bubbleVelocity;97EntityButton *taggedButton;98Animator animator;99};100101// Object Struct102extern ObjectWater *Water;103104// Standard Entity Events105void Water_Update(void);106void Water_LateUpdate(void);107void Water_StaticUpdate(void);108void Water_Draw(void);109void Water_Create(void *data);110void Water_StageLoad(void);111#if GAME_INCLUDE_EDITOR112void Water_EditorDraw(void);113void Water_EditorLoad(void);114#endif115void Water_Serialize(void);116117// Extra Entity Functions118119// Palette stuff120void Water_DrawHook_ApplyWaterPalette(void);121void Water_DrawHook_RemoveWaterPalette(void);122123// Utils124void Water_SetupTagLink(void);125void Water_SpawnBubble(EntityPlayer *player, int32 id);126void Water_SpawnCountDownBubble(EntityPlayer *player, int32 id, uint8 bubbleID);127EntityWater *Water_GetPlayerBubble(EntityPlayer *entityPtr);128void Water_HandleBubbleMovement(void);129void Water_PopBigBubble(EntityWater *self, bool32 jumpedOut);130131void Water_State_Water(void);132void Water_State_Pool(void);133void Water_State_Splash(void);134void Water_State_Bubble(void);135void Water_State_BubbleBreathed(void);136void Water_State_BigBubble(void);137void Water_State_BtnBigBubble(void);138void Water_State_Bubbler(void);139void Water_State_Countdown(void);140void Water_State_CountdownFollow(void);141void Water_State_HeightTrigger(void);142143// Draw States144void Water_Draw_Water(void);145void Water_Draw_Pool(void);146void Water_Draw_Splash(void);147void Water_Draw_Countdown(void);148void Water_Draw_Bubbler(void);149void Water_Draw_Bubble(void);150151#endif //! OBJ_WATER_H152153154