Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/SPZ/EggJanken.h
338 views
1
#ifndef OBJ_EGGJANKEN_H
2
#define OBJ_EGGJANKEN_H
3
4
#include "Game.h"
5
6
#define EGGJANKEN_ARM_COUNT (2)
7
#define EGGJANKEN_JOINT_COUNT (3)
8
#define EGGJANKEN_SEGMENT_COUNT (EGGJANKEN_JOINT_COUNT + 1)
9
10
// Object Class
11
struct ObjectEggJanken {
12
RSDK_OBJECT
13
uint16 aniFrames;
14
Animator armAnimator;
15
Hitbox hitboxBody;
16
Hitbox hitboxButtonSolid;
17
Hitbox hitboxButton;
18
Hitbox hitboxArm;
19
StateMachine(stateJankenResult[9]);
20
uint16 sfxBeep3;
21
uint16 sfxBeep4;
22
uint16 sfxFail;
23
uint16 sfxClick;
24
uint16 sfxHit;
25
uint16 sfxDrop;
26
uint16 sfxImpact4;
27
uint16 sfxImpact3;
28
uint16 sfxExplosion;
29
};
30
31
// Entity Class
32
struct EntityEggJanken {
33
RSDK_ENTITY
34
StateMachine(state);
35
StateMachine(stateDraw);
36
StateMachine(stateEyes);
37
uint8 health;
38
int32 timer;
39
uint8 invincibilityTimer;
40
int32 slotTimer;
41
Vector2 solidPos;
42
Vector2 moveOffset;
43
uint16 radius;
44
Vector2 origin;
45
int32 startY;
46
int32 storedXVel;
47
uint8 eyeFrames[EGGJANKEN_ARM_COUNT];
48
uint8 jankenResult2[EGGJANKEN_ARM_COUNT];
49
int32 jointFlags[EGGJANKEN_ARM_COUNT];
50
int32 jointAngleVels[EGGJANKEN_ARM_COUNT];
51
int32 armRadius[EGGJANKEN_ARM_COUNT];
52
int32 armRadiusSpeed[EGGJANKEN_ARM_COUNT];
53
Vector2 armPos[EGGJANKEN_ARM_COUNT];
54
StateMachine(stateArm[EGGJANKEN_ARM_COUNT]);
55
int32 jointAngles[EGGJANKEN_SEGMENT_COUNT * EGGJANKEN_ARM_COUNT];
56
int32 jointTargetAngles[EGGJANKEN_SEGMENT_COUNT * EGGJANKEN_ARM_COUNT];
57
int32 jointDirection[EGGJANKEN_SEGMENT_COUNT * EGGJANKEN_ARM_COUNT];
58
int32 jointDelays[EGGJANKEN_SEGMENT_COUNT * EGGJANKEN_ARM_COUNT];
59
uint8 attackingArmID;
60
uint8 armID;
61
uint8 armJointID;
62
int32 fullRotation;
63
bool32 isMoving;
64
Animator eyeAnimator;
65
Animator bodyAnimator;
66
Animator buttonAnimator;
67
Animator propellorLAnimator;
68
Animator propellorRAnimator;
69
};
70
71
// Object Entity
72
extern ObjectEggJanken *EggJanken;
73
74
// Standard Entity Events
75
void EggJanken_Update(void);
76
void EggJanken_LateUpdate(void);
77
void EggJanken_StaticUpdate(void);
78
void EggJanken_Draw(void);
79
void EggJanken_Create(void *data);
80
void EggJanken_StageLoad(void);
81
#if GAME_INCLUDE_EDITOR
82
void EggJanken_EditorDraw(void);
83
void EggJanken_EditorLoad(void);
84
#endif
85
void EggJanken_Serialize(void);
86
87
// Extra Entity Functions
88
void EggJanken_CheckPlayerCollisions(void);
89
void EggJanken_HandleMovement(void);
90
void EggJanken_Explode(void);
91
92
void EggJanken_ResetStates(void);
93
void EggJanken_SwapArmSwingDir(void);
94
95
// Result States
96
void EggJanken_Result_PlayerWins(void);
97
void EggJanken_Result_PlayerLoses(void);
98
void EggJanken_Result_PlayerDraws(void);
99
100
// Boss States
101
void EggJanken_State_SetupArena(void);
102
void EggJanken_State_StartFight(void);
103
void EggJanken_State_EnterJanken(void);
104
void EggJanken_State_AwaitButtonPress(void);
105
void EggJanken_State_Opened(void);
106
void EggJanken_State_InitialArmExtend(void);
107
void EggJanken_State_InitialArmRaise(void);
108
void EggJanken_State_None(void);
109
void EggJanken_State_Destroyed(void);
110
void EggJanken_State_ButtonPressed(void);
111
112
void EggJanken_State_ResultPlayerWinner(void);
113
void EggJanken_State_HitShake(void);
114
115
void EggJanken_State_FinishedBeingHit(void);
116
void EggJanken_State_RaiseArms(void);
117
void EggJanken_State_SwingDropArms(void);
118
void EggJanken_State_ResultPlayerDraw(void);
119
void EggJanken_State_WaitForArmAttackExtend(void);
120
void EggJanken_State_PrepareArmAttack(void);
121
void EggJanken_State_ArmAttack(void);
122
void EggJanken_State_FinishedArmAttack(void);
123
124
void EggJanken_State_ResultPlayerLoser(void);
125
void EggJanken_State_FlipOver(void);
126
void EggJanken_State_ExtendDropArms(void);
127
void EggJanken_State_DropTarget(void);
128
void EggJanken_State_Drop(void);
129
void EggJanken_State_DropArms(void);
130
void EggJanken_State_Dropped(void);
131
void EggJanken_State_RetractDropArms(void);
132
void EggJanken_State_RiseUp(void);
133
void EggJanken_State_FlipBackOver(void);
134
135
// Eyes States
136
void EggJanken_Eyes_Setup(void);
137
void EggJanken_Eyes_ChangeSlots(void);
138
void EggJanken_Eyes_None(void);
139
140
// Arm States
141
void EggJanken_Arm_None(void);
142
void EggJanken_Arm_Idle(void);
143
void EggJanken_Arm_RetractArm(void);
144
void EggJanken_Arm_ExtendArm(void);
145
void EggJanken_Arm_StretchRetractArm(void);
146
void EggJanken_Arm_SwingArm(void);
147
void EggJanken_Arm_ArmAttack(void);
148
void EggJanken_Arm_Dropping(void);
149
150
// Draw States
151
void EggJanken_Draw_Closed(void);
152
void EggJanken_Draw_Active(void);
153
void EggJanken_Draw_Destroyed(void);
154
155
#endif //! OBJ_EGGJANKEN_H
156
157