Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/PGZ/Ice.h
338 views
1
#ifndef OBJ_ICE_H
2
#define OBJ_ICE_H
3
4
#include "Game.h"
5
6
#if MANIA_USE_PLUS
7
typedef enum {
8
ICEANI_ICEBLOCK,
9
ICEANI_PLAYERBLOCK,
10
ICEANI_PLAYERGLINT,
11
ICEANI_PILLARBLOCK,
12
ICEANI_PILLARGLINT,
13
ICEANI_SHARD,
14
ICEANI_LARGEGLINT,
15
ICEANI_SMALLGLINT,
16
ICEANI_PIECE,
17
ICEANI_RINGS,
18
ICEANI_SONICIDLE,
19
ICEANI_SONICLEFT,
20
ICEANI_SONICRIGHT,
21
ICEANI_SONICSHAKE,
22
ICEANI_SUPERSONICIDLE,
23
ICEANI_SUPERSONICLEFT,
24
ICEANI_SUPERSONICRIGHT,
25
ICEANI_SUPERSONICSHAKE,
26
ICEANI_TAILSIDLE,
27
ICEANI_TAILSLEFT,
28
ICEANI_TAILSRIGHT,
29
ICEANI_TAILSSHAKE,
30
ICEANI_KNUXIDLE,
31
ICEANI_KNUXLEFT,
32
ICEANI_KNUXRIGHT,
33
ICEANI_KNUXSHAKE,
34
ICEANI_MIGHTYIDLE,
35
ICEANI_MIGHTYLEFT,
36
ICEANI_MIGHTYRIGHT,
37
ICEANI_MIGHTYSHAKE,
38
ICEANI_RAYIDLE,
39
ICEANI_RAYLEFT,
40
ICEANI_RAYRIGHT,
41
ICEANI_RAYSHAKE
42
} IceAni;
43
#else
44
typedef enum {
45
ICEANI_ICEBLOCK,
46
ICEANI_PLAYERBLOCK,
47
ICEANI_RINGS,
48
ICEANI_SONIC,
49
ICEANI_TAILS,
50
ICEANI_KNUX,
51
ICEANI_PILLARBLOCK,
52
ICEANI_PLAYERGLINT,
53
ICEANI_PILLARGLINT,
54
ICEANI_SHARD,
55
ICEANI_LARGEGLINT,
56
ICEANI_SMALLGLINT,
57
ICEANI_PIECE
58
} IceAni;
59
#endif
60
61
typedef enum {
62
ICE_SIZE_LARGE,
63
ICE_SIZE_SMALL,
64
} IceSizes;
65
66
typedef enum {
67
ICE_BLOCK,
68
ICE_1RING,
69
ICE_3RINGS,
70
ICE_5RINGS,
71
ICE_SPIKES,
72
ICE_ITEMBOX_RINGS,
73
ICE_ITEMBOX_BLUESHIELD,
74
ICE_ITEMBOX_BUBBLESHIELD,
75
ICE_ITEMBOX_FIRESHIELD,
76
ICE_ITEMBOX_LIGHTNINGSHIELD,
77
ICE_ITEMBOX_INVINCIBILITY,
78
ICE_ITEMBOX_SNEAKERS,
79
ICE_ITEMBOX_1UP,
80
ICE_ITEMBOX_EGGMAN,
81
ICE_ITEMBOX_HYPERRING,
82
ICE_ITEMBOX_SWAP,
83
ICE_ITEMBOX_RANDOM,
84
ICE_ITEMBOX_SUPER,
85
ICE_SPRING,
86
} IceTypes;
87
88
typedef enum {
89
ICE_CHILD_NONE,
90
ICE_CHILD_PLAYER,
91
ICE_CHILD_PILLAR,
92
ICE_CHILD_SHARD,
93
} IceChildTypes;
94
95
// Object Class
96
struct ObjectIce {
97
RSDK_OBJECT
98
uint16 aniFrames;
99
Hitbox hitboxPlayerBlockInner;
100
Hitbox hitboxPlayerBlockOuter;
101
int32 playerTimers[PLAYER_COUNT];
102
uint16 sfxFreeze;
103
uint16 sfxLedgeBreak;
104
uint16 sfxWindowShatter;
105
uint16 sfxStruggle;
106
};
107
108
// Entity Class
109
struct EntityIce {
110
RSDK_ENTITY
111
StateMachine(state);
112
StateMachine(stateDraw);
113
uint8 size;
114
uint8 type;
115
uint8 subType;
116
uint8 subFlip;
117
bool32 bottomSmash;
118
bool32 knuxSmash;
119
uint8 timer;
120
uint8 animationID;
121
Animator blockAnimator;
122
Animator contentsAnimator;
123
Animator altContentsAnimator;
124
Animator glintAnimator;
125
EntityPlayer *playerPtr;
126
Vector2 playerMoveOffset;
127
Vector2 contentsOffset;
128
int32 glintTimer;
129
Hitbox hitboxBlock;
130
Hitbox hitboxFallCheck;
131
Hitbox hitboxPlayerBlockCheck;
132
};
133
134
// Object Struct
135
extern ObjectIce *Ice;
136
137
// Standard Entity Events
138
void Ice_Update(void);
139
void Ice_LateUpdate(void);
140
void Ice_StaticUpdate(void);
141
void Ice_Draw(void);
142
void Ice_Create(void *data);
143
void Ice_StageLoad(void);
144
#if GAME_INCLUDE_EDITOR
145
void Ice_EditorDraw(void);
146
void Ice_EditorLoad(void);
147
#endif
148
void Ice_Serialize(void);
149
150
// Extra Entity Functions
151
void Ice_VSSwap_CheckFrozen(void);
152
153
void Ice_FreezePlayer(EntityPlayer *player);
154
bool32 Ice_CheckPlayerBlockSmashH(void);
155
bool32 Ice_CheckPlayerBlockSmashV(void);
156
void Ice_PlayerState_Frozen(void);
157
void Ice_ShatterGenerator(int32 count, int32 sizeX, int32 sizeY, int32 velX, int32 velY, int32 canBreak);
158
void Ice_FullShatter(EntityPlayer *player, int32 velX, int32 velY);
159
void Ice_BreakPlayerBlock(EntityPlayer *player);
160
EntityItemBox *Ice_Shatter(EntityIce *ice, int32 velX, int32 velY);
161
void Ice_TimeOver_CheckFrozen(void);
162
163
void Ice_UpdateBlockGravity(void);
164
void Ice_State_IceBlock(void);
165
void Ice_State_StartBlockFall(void);
166
void Ice_State_BlockFallDelay(void);
167
void Ice_State_IceBlockFall(void);
168
void Ice_State_PlayerBlock(void);
169
void Ice_State_Shard(void);
170
171
void Ice_Draw_IceBlock(void);
172
void Ice_Draw_PlayerBlock(void);
173
void Ice_Draw_Pillar(void);
174
void Ice_Draw_Shard(void);
175
176
#endif //! OBJ_ICE_H
177
178