Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/CPZ/AmoebaDroid.h
338 views
1
#ifndef OBJ_AMOEBADROID_H
2
#define OBJ_AMOEBADROID_H
3
4
#include "Game.h"
5
6
#define AMOEBADROID_BLOB_COUNT (8)
7
8
typedef enum {
9
AMOEBADROID_BOSS,
10
AMOEBADROID_BLOB_BIG,
11
AMOEBADROID_BLOB_SMALL,
12
AMOEBADROID_POOLSPLASH,
13
AMOEBADROID_POOLSPLASH_DELAY,
14
} AmoebaDroidTypes;
15
16
// Object Class
17
struct ObjectAmoebaDroid {
18
RSDK_OBJECT
19
TABLE(int32 debrisInfo1[17], { 4, 0, 0, -0x20000, -0x28000, 1, 0, 0x20000, -0x28000, 2, 0, -0x28000, -0x20000, 3, 0, 0x28000, -0x20000 });
20
TABLE(int32 debrisInfo2[13], { 3, 4, 0, 0, -0x20000, 5, 0, -0x28000, -0x20000, 5, 1, 0x28000, -0x20000 });
21
int32 boundsL;
22
int32 boundsR;
23
int32 boundsM;
24
int32 boundsT;
25
int32 boundsB;
26
uint16 sfxHit;
27
uint16 sfxExplosion;
28
uint16 sfxGather;
29
uint16 sfxBounce;
30
uint16 sfxRelease;
31
uint16 aniFrames;
32
uint16 waterFrames;
33
};
34
35
// Entity Class
36
struct EntityAmoebaDroid {
37
RSDK_ENTITY
38
StateMachine(state);
39
StateMachine(stateDraw);
40
int32 type;
41
int32 timer;
42
int32 invincibleTimer;
43
int32 health;
44
int32 blobAngleX;
45
int32 blobAngleY;
46
int32 blobAmplitude;
47
int32 blobRadius;
48
Vector2 offsetPos;
49
EntityAmoebaDroid *blobs[AMOEBADROID_BLOB_COUNT];
50
EntityAmoebaDroid *parent;
51
Animator animator;
52
Animator attractorTopAnimator;
53
Animator attractorSideAnimator;
54
Hitbox hitbox;
55
};
56
57
// Object Struct
58
extern ObjectAmoebaDroid *AmoebaDroid;
59
60
// Standard Entity Events
61
void AmoebaDroid_Update(void);
62
void AmoebaDroid_LateUpdate(void);
63
void AmoebaDroid_StaticUpdate(void);
64
void AmoebaDroid_Draw(void);
65
void AmoebaDroid_Create(void *data);
66
void AmoebaDroid_StageLoad(void);
67
#if GAME_INCLUDE_EDITOR
68
void AmoebaDroid_EditorDraw(void);
69
void AmoebaDroid_EditorLoad(void);
70
#endif
71
void AmoebaDroid_Serialize(void);
72
73
// Extra Entity Functions
74
void AmoebaDroid_HandleSmallBlobMovement(void);
75
void AmoebaDroid_HandleSmallBlobRelease(bool32 interact);
76
77
// Interaction funcs
78
void AmoebaDroid_Hit(void);
79
void AmoebaDroid_Explode(void);
80
void AmoebaDroid_CheckHit(void);
81
void AmoebaDroid_CheckPlayerHit(void);
82
83
// Draw States
84
void AmoebaDroid_Draw_AmoebaDroid(void);
85
void AmoebaDroid_Draw_BigBlob(void);
86
87
// Boss States
88
void AmoebaDroid_State_SetupArena(void);
89
void AmoebaDroid_State_SetupWaterLevel(void);
90
void AmoebaDroid_State_DropIn(void);
91
void AmoebaDroid_State_DropIntoPool(void);
92
void AmoebaDroid_State_SurfaceFromPool(void);
93
void AmoebaDroid_State_ChooseAttack(void);
94
void AmoebaDroid_State_SwimLeft(void);
95
void AmoebaDroid_State_SwimRight(void);
96
void AmoebaDroid_State_ExitPool(void);
97
void AmoebaDroid_State_BounceAttack(void);
98
void AmoebaDroid_State_GatherBlobs(void);
99
void AmoebaDroid_State_SpinBlobs(void);
100
101
// Blob States
102
void AmoebaDroid_State_BigBlob(void);
103
void AmoebaDroid_State_SmallBlob(void);
104
void AmoebaDroid_State_BigBlob_Disappear(void);
105
106
// Splash States
107
void AmoebaDroid_State_PoolSplash_Delayed(void);
108
void AmoebaDroid_State_PoolSplash(void);
109
110
// Boss States (Continued)
111
void AmoebaDroid_State_Destroyed(void);
112
void AmoebaDroid_State_DropSignPost(void);
113
114
#endif //! OBJ_AMOEBADROID_H
115
116