Path: blob/master/SonicMania/Objects/Common/BreakableWall.h
338 views
#ifndef OBJ_BREAKABLEWALL_H1#define OBJ_BREAKABLEWALL_H23#include "Game.h"45typedef enum {6BREAKWALL_TYPE_WALL,7BREAKWALL_TYPE_FLOOR,8BREAKWALL_TYPE_BURROWFLOOR,9BREAKWALL_TYPE_BURROWFLOOR_B,10BREAKWALL_TYPE_BURROWFLOORUP,11BREAKWALL_TYPE_CEILING12} BreakableWallTypes;1314typedef enum {15BREAKWALL_PRIO_HIGH,16BREAKWALL_PRIO_LOW,17} BreakableWallPriorities;1819typedef enum {20BREAKWALL_TILE_FIXED = 1,21BREAKWALL_TILE_DYNAMIC,22} BreakableWallTileTypes;2324// Object Class25struct ObjectBreakableWall {26RSDK_OBJECT27Animator animator;28uint16 aniFrames;29// possibly used before math (and in v4); these are reportedly velocity tables30TABLE(int32 unused1[16], { -0x80000, -0x180000, 0x80000, -0x180000, -0x80000, -0x80000, 0x80000, -0x80000, -0x80000, 0x80000, 0x80000, 0x80000,31-0x80000, 0x180000, 0x80000, 0x180000 });32TABLE(int32 unused2[16], { -0x60000, -0x60000, -0x40000, -0x50000, -0x120000, -0x20000, -0x60000, -0x10000, -0x80000, 0x20000, -0x60000, 0x10000,33-0x60000, 0x60000, -0x40000, 0x50000 });34TABLE(int32 breakOffsets[16], { 0x40000, -0x50000, 0x60000, -0x60000, 0x60000, -0x10000, 0x80000, -0x20000, 0x60000, 0x10000, 0x80000, 0x20000,350x40000, 0x50000, 0x60000, 0x60000 });36TABLE(int32 breakVelocitiesL[8], { -0x80000, -0x80000, 0x80000, -0x80000, -0x80000, 0x80000, 0x80000, 0x80000 });37TABLE(int32 breakVelocitiesR[8], { -0x20000, -0x20000, 0x20000, -0x20000, -0x10000, -0x10000, 0x10000, -0x10000 });38uint16 sfxBreak;39uint16 farPlaneLayer;40};4142// Entity Class43struct EntityBreakableWall {44RSDK_ENTITY45StateMachine(state);46StateMachine(stateDraw);47uint8 type;48bool32 onlyKnux;49bool32 onlyMighty;50BreakableWallPriorities priority;51Vector2 size;52uint16 tileInfo;53uint16 targetLayer;54int32 timer;55Vector2 tilePos;56int32 tileRotation;57int32 gravityStrength;58Hitbox hitbox;59};6061// Object Struct62extern ObjectBreakableWall *BreakableWall;6364// Standard Entity Events65void BreakableWall_Update(void);66void BreakableWall_LateUpdate(void);67void BreakableWall_StaticUpdate(void);68void BreakableWall_Draw(void);69void BreakableWall_Create(void *data);70void BreakableWall_StageLoad(void);71#if GAME_INCLUDE_EDITOR72void BreakableWall_EditorDraw(void);73void BreakableWall_EditorLoad(void);74#endif75void BreakableWall_Serialize(void);7677// Extra Entity Functions7879// States80void BreakableWall_State_FallingTile(void);81void BreakableWall_State_Tile(void);82void BreakableWall_State_Wall(void);83void BreakableWall_State_Floor(void);84void BreakableWall_State_BurrowFloor(void);85void BreakableWall_State_BurrowFloorUp(void);86void BreakableWall_State_Ceiling(void);8788// Draw States89void BreakableWall_Draw_Wall(void);90void BreakableWall_Draw_Floor(void);91void BreakableWall_Draw_Tile(void);9293// Breaking94void BreakableWall_CheckBreak_Wall(void);95void BreakableWall_CheckBreak_Floor(void);96void BreakableWall_CheckBreak_BurrowFloor(void);97void BreakableWall_CheckBreak_BurrowFloorUp(void);98void BreakableWall_CheckBreak_Ceiling(void);99100void BreakableWall_Break(EntityBreakableWall *self, uint8 direction);101102// Misc103void BreakableWall_GiveScoreBonus(EntityPlayer *player);104105#endif //! OBJ_BREAKABLEWALL_H106107108