GearLoader 1.1.0
Mod loader for GGXXACPR
Loading...
Searching...
No Matches
ggxxacpr.hpp
1/*-------------------------------------------------------------------------------------------------
2* This header is a C++ extension of `ggxxacpr_c.h`
3*
4* Mod Developers:
5* This header is included by `baseMod.hpp`. If you're forgoing the basemod
6* include this header instead to interface with the game directly.
7*
8* GearLoader Developers:
9* This should only alias types from `ggxxacpr_c.h` and define helper classes/methods
10* This should not include any ABI additions.
11*--------------------------------------------------------------------------------------------------*/
12
13#ifndef GGXXACPR_HPP
14#define GGXXACPR_HPP
15
16#include "ggxxacpr_c.h"
17#include <type_traits>
18#include <utility>
19#include <version>
20
21#ifdef __cpp_lib_span
22 #include <span>
23#endif
24
25namespace ggxxacpr {
26
27 /* ========== #ENUMS ========== */
28
29 enum class Language : uint32_t {
30 JPN = ACPR_LANG_JPN,
31 ENG = ACPR_LANG_ENG,
32 FRA = ACPR_LANG_FRA,
33 ITA = ACPR_LANG_ITA,
34 GER = ACPR_LANG_GER,
35 POR = ACPR_LANG_POR,
36 SPA = ACPR_LANG_SPA,
37 KOR = ACPR_LANG_KOR
38 };
39
40 enum class GameVersion : uint32_t {
41 ACCENT_CORE = GAME_VERSION_ACCENT_CORE,
42 PLUS_R = GAME_VERSION_PLUS_R,
43 };
44
45 enum class MenuItem : uint32_t {
46 ARCADE = MAIN_MENU_ITEM_ARCADE,
47 MOM = MAIN_MENU_ITEM_MOM,
48 VERSUS = MAIN_MENU_ITEM_VERSUS,
49 ONLINE = MAIN_MENU_ITEM_ONLINE,
50 VS_CPU = MAIN_MENU_ITEM_VS_CPU,
51 TEAM_VERSUS = MAIN_MENU_ITEM_TEAM_VERSUS,
52 TEAM_VS_CPU = MAIN_MENU_ITEM_TEAM_VS_CPU,
53 TRAINING = MAIN_MENU_ITEM_TRAINING,
54 SURVIVAL = MAIN_MENU_ITEM_SURVIVAL,
55 MISSION = MAIN_MENU_ITEM_MISSION,
56 STORY = MAIN_MENU_ITEM_STORY,
57 GALLERY = MAIN_MENU_ITEM_GALLERY,
58 REPLAY_THEATER = MAIN_MENU_ITEM_REPLAY_THEATER,
59 SOUND_TEST = MAIN_MENU_ITEM_SOUND_TEST,
60 };
61
62 // Dictates high-level program flow
63 enum class JobMode : uint32_t {
64 AUTO_LOAD = JOB_MODE_AUTO_LOAD,
65 AUTO_SAVE = JOB_MODE_AUTO_SAVE,
66 TITLE_SCREEN = JOB_MODE_TITLE_SCREEN,
67 INIT_GAME_INFO = JOB_MODE_INIT_GAME_INFO,
68 GAME_INIT = JOB_MODE_GAME_INIT,
69 BATTLE = JOB_MODE_BATTLE,
70 DEMO = JOB_MODE_DEMO,
71 TITLE_MAIN = JOB_MODE_TITLE_MAIN,
72 MENUS = JOB_MODE_MENUS,
73 LOAD_CHAR_SELECT = JOB_MODE_LOAD_CHAR_SELECT,
74 LOAD_STAGE_SELECT = JOB_MODE_LOAD_STAGE_SELECT,
75 LOAD_VERSUS_SCREEN = JOB_MODE_LOAD_VERSUS_SCREEN,
76 LOAD_STORY_MODE_SPLASH_SCREEN = JOB_MODE_LOAD_STORY_MODE_SPLASH_SCREEN,
77 LOAD_WIN_SCREEN = JOB_MODE_LOAD_WIN_SCREEN,
78 LOAD_STORY_ENDING = JOB_MODE_LOAD_STORY_ENDING,
79 OPTION_MENU = JOB_MODE_OPTION_MENU,
80 DEBUG_SOUND_MENU = JOB_MODE_DEBUG_SOUND_MENU,
81 MISSION_MENU = JOB_MODE_MISSION_MENU,
82 STORY_INIT = JOB_MODE_STORY_INIT,
83 SREXEC = JOB_MODE_SREXEC,
84 CREXEC = JOB_MODE_CREXEC,
85 MOVIE_EXECUTE = JOB_MODE_MOVIE_EXECUTE,
86 MATC = JOB_MODE_MATC,
87 MISSION_WIN = JOB_MODE_MISSION_WIN,
88 SURVIVAL_START = JOB_MODE_SURVIVAL_START,
89 GALLERY_MAIN = JOB_MODE_GALLERY_MAIN,
90 SURVIVAL = JOB_MODE_SURVIVAL,
91 TEAM_VS = JOB_MODE_TEAM_VS,
92 FRAMERATE_TEST = JOB_MODE_FRAMERATE_TEST,
93 REPLAY_SELECT = JOB_MODE_REPLAY_SELECT,
94 SOUND_MODE_EXECUTE = JOB_MODE_SOUND_MODE_EXECUTE,
95 VERSUS_SPLASH = JOB_MODE_VERSUS_SPLASH,
96 };
97
98 enum class GameModeFeatureFlags : uint32_t {
99 NONE = GAME_MODE_FEATURE_FLAGS_NONE,
100 P1_CONTROL = GAME_MODE_FEATURE_FLAGS_P1_CONTROL,
101 P2_CONTROL = GAME_MODE_FEATURE_FLAGS_P2_CONTROL,
102 TRAINING = GAME_MODE_FEATURE_FLAGS_TRAINING,
103 SURVIVAL = GAME_MODE_FEATURE_FLAGS_SURVIVAL,
104 DEMO = GAME_MODE_FEATURE_FLAGS_DEMO,
105 VERSUS = GAME_MODE_FEATURE_FLAGS_VERSUS,
106 VERSUS_CPU = GAME_MODE_FEATURE_FLAGS_VERSUS_CPU,
107 STORY = GAME_MODE_FEATURE_FLAGS_STORY,
108 MISSION = GAME_MODE_FEATURE_FLAGS_MISSION,
109 WATCH = GAME_MODE_FEATURE_FLAGS_WATCH,
110 FREE_PLAY = GAME_MODE_FEATURE_FLAGS_FREE_PLAY,
111 TEAM_VERSUS = GAME_MODE_FEATURE_FLAGS_TEAM_VERSUS,
112 };
113
114 enum class EntityId : uint16_t {
115 NONE = ENTITY_ID_NONE,
116 SOL = ENTITY_ID_SOL,
117 KY = ENTITY_ID_KY,
118 MAY = ENTITY_ID_MAY,
119 MILLIA = ENTITY_ID_MILLIA,
120 AXL = ENTITY_ID_AXL,
121 POTEMKIN = ENTITY_ID_POTEMKIN,
122 CHIPP = ENTITY_ID_CHIPP,
123 EDDIE = ENTITY_ID_EDDIE,
124 BAIKEN = ENTITY_ID_BAIKEN,
125 FAUST = ENTITY_ID_FAUST,
126 TESTAMENT = ENTITY_ID_TESTAMENT,
127 JAM = ENTITY_ID_JAM,
128 ANJI = ENTITY_ID_ANJI,
129 JOHNNY = ENTITY_ID_JOHNNY,
130 VENOM = ENTITY_ID_VENOM,
131 DIZZY = ENTITY_ID_DIZZY,
132 SLAYER = ENTITY_ID_SLAYER,
133 I_NO = ENTITY_ID_I_NO,
134 ZAPPA = ENTITY_ID_ZAPPA,
135 BRIDGET = ENTITY_ID_BRIDGET,
136 ROBO_KY = ENTITY_ID_ROBO_KY,
137 ABA = ENTITY_ID_ABA,
138 ORDER_SOL = ENTITY_ID_ORDER_SOL,
139 KLIFF = ENTITY_ID_KLIFF,
140 JUSTICE = ENTITY_ID_JUSTICE,
141 DIZZY_ENTITY_1 = ENTITY_ID_DIZZY_ENTITY_1, // Scythe / Ice Spike
142 MILLIA_ENTITY_1 = ENTITY_ID_MILLIA_ENTITY_1, // Everything but hair pin and IK
143 VENOM_ENTITY_1 = ENTITY_ID_VENOM_ENTITY_1, // Normal balls
144 EDDIE_ENTITY_SHADOW = ENTITY_ID_EDDIE_ENTITY_SHADOW,
145 KY_ENTITY = ENTITY_ID_KY_ENTITY,
146 FAUST_ENTITY_1 = ENTITY_ID_FAUST_ENTITY_1, // Items except for the minis
147 SOL_ENTITY = ENTITY_ID_SOL_ENTITY,
148 MILLIA_ENTITY_2 = ENTITY_ID_MILLIA_ENTITY_2, // Hair pin / IK
149 JAM_ENTITY = ENTITY_ID_JAM_ENTITY,
150 VENOM_ENTITY_2 = ENTITY_ID_VENOM_ENTITY_2, // Charged ball
151 VENOM_ENTITY_3 = ENTITY_ID_VENOM_ENTITY_3, // Dark Angel / IK
152 MILLIA_ENTITY_3 = ENTITY_ID_MILLIA_ENTITY_3, // Main IK entity
153 MAY_ENTITY_INSTANT_KILL_1 = ENTITY_ID_MAY_ENTITY_INSTANT_KILL_1, // Jellyfish pirates
154 BAIKEN_ENTITY = ENTITY_ID_BAIKEN_ENTITY,
155 BAIKEN_ENTITY_INSTANT_KILL = ENTITY_ID_BAIKEN_ENTITY_INSTANT_KILL,
156 CHIPP_ENTITY = ENTITY_ID_CHIPP_ENTITY,
157 POTEMKIN_ENTITY = ENTITY_ID_POTEMKIN_ENTITY,
158 JOHNNY_ENTITY = ENTITY_ID_JOHNNY_ENTITY,
159 FAUST_ENTITY_2 = ENTITY_ID_FAUST_ENTITY_2, // Love explosion / IK
160 EDDIE_ENTITY = ENTITY_ID_EDDIE_ENTITY,
161 DIZZY_ENTITY_2 = ENTITY_ID_DIZZY_ENTITY_2, // Fish / Knife / Bubble / Supers
162 MAY_ENTITY_1 = ENTITY_ID_MAY_ENTITY_1, // Dolphins
163 MAY_ENTITY_2 = ENTITY_ID_MAY_ENTITY_2, // Supers
164 MAY_ENTITY_3 = ENTITY_ID_MAY_ENTITY_3, // Hoop
165 FAUST_ENTITY_3 = ENTITY_ID_FAUST_ENTITY_3, // Minis / Love
166 MAY_ENTITY_INSTANT_KILL_2 = ENTITY_ID_MAY_ENTITY_INSTANT_KILL_2, // Granny / Mech girl pirates
167 ANJI_ENTITY = ENTITY_ID_ANJI_ENTITY,
168 AXL_ENTITY_1 = ENTITY_ID_AXL_ENTITY_1, // Rensen / Kokuu Geki / Super / Counter bandana visual / IK
169 ANJI_ENTITY_BUTTERFLY = ENTITY_ID_ANJI_ENTITY_BUTTERFLY,
170 TESTAMENT_ENTITY_1 = ENTITY_ID_TESTAMENT_ENTITY_1, // Curse / Net / Nightmare Circular
171 TESTAMENT_ENTITY_2 = ENTITY_ID_TESTAMENT_ENTITY_2, // Tree / EXE Beast
172 AXL_ENTITY_2 = ENTITY_ID_AXL_ENTITY_2, // Unblockable / Counter visual / Shiranami no Homura explosion
173 TESTAMENT_ENTITY_CROW = ENTITY_ID_TESTAMENT_ENTITY_CROW,
174 JOHNNY_ENTITY_COIN = ENTITY_ID_JOHNNY_ENTITY_COIN,
175 I_NO_ENTITY = ENTITY_ID_I_NO_ENTITY,
176 ZAPPA_ENTITY_RAOU = ENTITY_ID_ZAPPA_ENTITY_RAOU,
177 SLAYER_ENTITY = ENTITY_ID_SLAYER_ENTITY,
178 ZAPPA_ENTITY = ENTITY_ID_ZAPPA_ENTITY,
179 ZAPPA_ENTITY_TRIPLETS = ENTITY_ID_ZAPPA_ENTITY_TRIPLETS,
180 BRIDGET_ENTITY_1 = ENTITY_ID_BRIDGET_ENTITY_1,
181 ZAPPA_ENTITY_SWORD = ENTITY_ID_ZAPPA_ENTITY_SWORD,
182 BRIDGET_ENTITY_2 = ENTITY_ID_BRIDGET_ENTITY_2, // KSMH~Stop / Maintenance Disaster / IK
183 ZAPPA_ENTITY_DOG = ENTITY_ID_ZAPPA_ENTITY_DOG,
184 ROBO_KY_ENTITY_1 = ENTITY_ID_ROBO_KY_ENTITY_1, // 6P / 6H / 2D / Rocket / Install explosion
185 ROBO_KY_ENTITY_2 = ENTITY_ID_ROBO_KY_ENTITY_2, // 2H / Air Rocket Punch / Mini-Robo-Kys in IK
186 ABA_ENTITY = ENTITY_ID_ABA_ENTITY,
187 ORDER_SOL_ENTITY_1 = ENTITY_ID_ORDER_SOL_ENTITY_1,
188 ORDER_SOL_ENTITY_2 = ENTITY_ID_ORDER_SOL_ENTITY_2, // Little fire visual on Tyrant Rave (maybe others)
189 KLIFF_ENTITY = ENTITY_ID_KLIFF_ENTITY,
190 JUSTICE_ENTITY_1 = ENTITY_ID_JUSTICE_ENTITY_1, // Everything but nukes
191 JUSTICE_ENTITY_2 = ENTITY_ID_JUSTICE_ENTITY_2, // Nukes
192 BURST_ENTITY = ENTITY_ID_BURST_ENTITY,
193 };
194
195 enum class StageId : uint32_t {
196 GREY = STAGE_ID_GREY,
197 LONDON = STAGE_ID_LONDON,
198 COLONY = STAGE_ID_COLONY,
199 RUSSIA = STAGE_ID_RUSSIA,
200 CHINA = STAGE_ID_CHINA,
201 MAY_SHIP = STAGE_ID_MAY_SHIP,
202 ZEPP = STAGE_ID_ZEPP,
203 NIRVANA = STAGE_ID_NIRVANA,
204 PARIS = STAGE_ID_PARIS,
205 HELL = STAGE_ID_HELL,
206 GROVE = STAGE_ID_GROVE,
207 VERDANT = STAGE_ID_VERDANT,
208 CASTLE = STAGE_ID_CASTLE,
209 BABYLON = STAGE_ID_BABYLON,
210 PHANTOM_CITY = STAGE_ID_PHANTOM_CITY,
211 UNKNOWN = STAGE_ID_UNKNOWN,
212 FRASCO = STAGE_ID_FRASCO,
213 AD2172 = STAGE_ID_AD2172,
214 GRAVE = STAGE_ID_GRAVE,
215 HEAVEN = STAGE_ID_HEAVEN,
216 KOREA = STAGE_ID_KOREA,
217
218 LONDON_RELOAD = STAGE_ID_LONDON_RELOAD,
219 COLONY_RELOAD = STAGE_ID_COLONY_RELOAD,
220 RUSSIA_RELOAD = STAGE_ID_RUSSIA_RELOAD,
221 CHINA_RELOAD = STAGE_ID_CHINA_RELOAD,
222 MAY_SHIP_RELOAD = STAGE_ID_MAY_SHIP_RELOAD,
223 ZEPP_RELOAD = STAGE_ID_ZEPP_RELOAD,
224 NIRVANA_RELOAD = STAGE_ID_NIRVANA_RELOAD,
225 PARIS_RELOAD = STAGE_ID_PARIS_RELOAD,
226 HELL_RELOAD = STAGE_ID_HELL_RELOAD,
227 GROVE_RELOAD = STAGE_ID_GROVE_RELOAD,
228 VERDANT_RELOAD = STAGE_ID_VERDANT_RELOAD,
229 CASTLE_RELOAD = STAGE_ID_CASTLE_RELOAD,
230 BABYLON_RELOAD = STAGE_ID_BABYLON_RELOAD,
231 PHANTOM_CITY_RELOAD = STAGE_ID_PHANTOM_CITY_RELOAD,
232 UNKNOWN_RELOAD = STAGE_ID_UNKNOWN_RELOAD,
233 FRASCO_RELOAD = STAGE_ID_FRASCO_RELOAD,
234 AD2172_RELOAD = STAGE_ID_AD2172_RELOAD,
235 GRAVE_RELOAD = STAGE_ID_GRAVE_RELOAD,
236 HEAVEN_RELOAD = STAGE_ID_HEAVEN_RELOAD,
237 KOREA_RELOAD = STAGE_ID_KOREA_RELOAD,
238
239 LONDON_SLASH = STAGE_ID_LONDON_SLASH,
240 COLONY_SLASH = STAGE_ID_COLONY_SLASH,
241 RUSSIA_SLASH = STAGE_ID_RUSSIA_SLASH,
242 CHINA_SLASH = STAGE_ID_CHINA_SLASH,
243 MAY_SHIP_SLASH = STAGE_ID_MAY_SHIP_SLASH,
244 ZEPP_SLASH = STAGE_ID_ZEPP_SLASH,
245 NIRVANA_SLASH = STAGE_ID_NIRVANA_SLASH,
246 PARIS_SLASH = STAGE_ID_PARIS_SLASH,
247 HELL_SLASH = STAGE_ID_HELL_SLASH,
248 GROVE_SLASH = STAGE_ID_GROVE_SLASH,
249 VERDANT_SLASH = STAGE_ID_VERDANT_SLASH,
250 CASTLE_SLASH = STAGE_ID_CASTLE_SLASH,
251 BABYLON_SLASH = STAGE_ID_BABYLON_SLASH,
252 PHANTOM_CITY_SLASH = STAGE_ID_PHANTOM_CITY_SLASH,
253 UNKNOWN_SLASH = STAGE_ID_UNKNOWN_SLASH,
254 FRASCO_SLASH = STAGE_ID_FRASCO_SLASH,
255 AD2172_SLASH = STAGE_ID_AD2172_SLASH,
256 GRAVE_SLASH = STAGE_ID_GRAVE_SLASH,
257 HEAVEN_SLASH = STAGE_ID_HEAVEN_SLASH,
258 KOREA_SLASH = STAGE_ID_KOREA_SLASH,
259 };
260
261 enum class ColliderId : uint16_t {
262 DUMMY = COLLIDER_ID_DUMMY,
263 HIT_BOX = COLLIDER_ID_HIT_BOX,
264 HURT_BOX = COLLIDER_ID_HURT_BOX,
265 // Signals the game to use the hitbox of the same array index in `Entity::extraHitboxSet`
266 // instead. This behavior can be seen on Dizzy's knife projectile (421S).
267 USE_EXTRA = COLLIDER_ID_USE_EXTRA,
268 // Rather than acting like a collider, contains dimensions for
269 // a push box adjustment. Can be seen on Sol's 6H.
270 ADJUST_PUSH = COLLIDER_ID_ADJUST_PUSH,
271 // Defines a spawn location for a sub-entity
272 SPAWN = COLLIDER_ID_SPAWN,
273 UNKNOWN_6 = COLLIDER_ID_UNKNOWN_6,
274 };
275
276 /* ========== #BITFIELD ENUMS ========== */
277 enum class ActionState : uint32_t {
278 NONE = ACTION_STATE_NONE,
279 IS_ENTITY = ACTION_STATE_IS_ENTITY, /* Typically always set unless the entity is despawning */
280 COLLIDES_WITH_P2 = ACTION_STATE_COLLIDES_WITH_P2,
281 COLLIDES_WITH_P1 = ACTION_STATE_COLLIDES_WITH_P1,
282 DRAW_SPRITE = ACTION_STATE_DRAW_SPRITE,
283 IS_AIRBORNE = ACTION_STATE_IS_AIRBORNE,
284 IS_IN_HITSTUN = ACTION_STATE_IS_IN_HITSTUN,
285 DISABLE_HITBOXES = ACTION_STATE_DISABLE_HITBOXES,
286 DISABLE_HURTBOXES = ACTION_STATE_DISABLE_HURTBOXES, /* Essentially identical to StrikeInvuln but some mechanics/moves use one over the other. */
287 KNOCKED_DOWN = ACTION_STATE_KNOCKED_DOWN,
288 IS_IN_BLOCKSTUN = ACTION_STATE_IS_IN_BLOCKSTUN,
289 IS_CROUCHING = ACTION_STATE_IS_CROUCHING,
290 IS_CORNERED = ACTION_STATE_IS_CORNERED,
291 LANDING_FLAG = ACTION_STATE_LANDING_FLAG,
292 IS_AT_SCREEN_LIMIT = ACTION_STATE_IS_AT_SCREEN_LIMIT, /* Bounded by screen edge, but not necessarily cornered */
293 PROJECTILE_INVULN = ACTION_STATE_PROJECTILE_INVULN, /* A legacy value, that's mainly used in throw animations as a sort of invuln flag. */
294 WAKEUP = ACTION_STATE_WAKEUP,
295 DISABLE_WAKEUP = ACTION_STATE_DISABLE_WAKEUP, /* Set at round end for the KO'd player. */
296 STRIKE_INVULN = ACTION_STATE_STRIKE_INVULN,
297 IS_IDLE = ACTION_STATE_IS_IDLE,
298 SUPER_FLASH = ACTION_STATE_SUPER_FLASH, /* Set only when the entity is frozen in super flash. */
299 NO_COLLISION = ACTION_STATE_NO_COLLISION,
300 GRAVITY = ACTION_STATE_GRAVITY,
301 UNKNOWN_BIT_22 = ACTION_STATE_UNKNOWN_BIT_22,
302 THROW_INVULN = ACTION_STATE_THROW_INVULN,
303 UNKNOWN_BIT_24 = ACTION_STATE_UNKNOWN_BIT_24,
304 UNKNOWN_BIT_25 = ACTION_STATE_UNKNOWN_BIT_25,
305 UNKNOWN_BIT_26 = ACTION_STATE_UNKNOWN_BIT_26,
306 UNKNOWN_BIT_27 = ACTION_STATE_UNKNOWN_BIT_27,
307 UNKNOWN_BIT_28 = ACTION_STATE_UNKNOWN_BIT_28,
308 UNKNOWN_BIT_29 = ACTION_STATE_UNKNOWN_BIT_29,
309 IGNORE_RECEIVED_HIT_EFFECTS = ACTION_STATE_IGNORE_RECEIVED_HIT_EFFECTS, /* Used for Dizzy bubble. Essentially disables hitstop. */
310 DESPAWN = ACTION_STATE_DESPAWN, /* Entity is marked for despawn */
311 };
312
313 enum class AttackState : uint32_t {
314 NONE = ATTACK_STATE_NONE,
315 IS_ATTACK = ATTACK_STATE_IS_ATTACK,
316 UNKNOWN_BIT_1 = ATTACK_STATE_UNKNOWN_BIT_1,
317 UNKNOWN_BIT_2 = ATTACK_STATE_UNKNOWN_BIT_2,
318 UNKNOWN_BIT_3 = ATTACK_STATE_UNKNOWN_BIT_3,
319 IN_GATLING_WINDOW = ATTACK_STATE_IN_GATLING_WINDOW,
320 SPECIAL_CANCEL_OKAY = ATTACK_STATE_SPECIAL_CANCEL_OKAY,
321 UNKNOWN_BIT_6 = ATTACK_STATE_UNKNOWN_BIT_6,
322 UNKNOWN_BIT_7 = ATTACK_STATE_UNKNOWN_BIT_7,
323 HOMING_JUMP_OKAY = ATTACK_STATE_HOMING_JUMP_OKAY,
324 KARA_FD_OKAY = ATTACK_STATE_KARA_FD_OKAY,
325 NO_SPECIAL_CANCEL = ATTACK_STATE_NO_SPECIAL_CANCEL,
326 IN_RECOVERY = ATTACK_STATE_IN_RECOVERY,
327 HAS_CONNECTED = ATTACK_STATE_HAS_CONNECTED,
328 UNKNOWN_BIT_13 = ATTACK_STATE_UNKNOWN_BIT_13,
329 UNKNOWN_BIT_14 = ATTACK_STATE_UNKNOWN_BIT_14,
330 UNKNOWN_BIT_15 = ATTACK_STATE_UNKNOWN_BIT_15,
331 JUMP_CANCELABLE = ATTACK_STATE_JUMP_CANCELABLE,
332 HAS_HIT_OPPONENT = ATTACK_STATE_HAS_HIT_OPPONENT,
333 UNKNOWN_BIT_18 = ATTACK_STATE_UNKNOWN_BIT_18,
334 UNKNOWN_BIT_19 = ATTACK_STATE_UNKNOWN_BIT_19,
335 UNKNOWN_BIT_20 = ATTACK_STATE_UNKNOWN_BIT_20, /* maybe related to guardpoint */
336 UNKNOWN_BIT_21 = ATTACK_STATE_UNKNOWN_BIT_21,
337 UNKNOWN_BIT_22 = ATTACK_STATE_UNKNOWN_BIT_22,
338 UNKNOWN_BIT_23 = ATTACK_STATE_UNKNOWN_BIT_23,
339 };
340
341 enum class CommandState : uint32_t {
342 NONE = COMMAND_STATE_NONE,
343 NO_NEUTRAL = COMMAND_STATE_NO_NEUTRAL,
344 NO_FORWARD = COMMAND_STATE_NO_FORWARD,
345 NO_BACKWARD = COMMAND_STATE_NO_BACKWARD,
346 NO_CROUCH = COMMAND_STATE_NO_CROUCH,
347 NO_JUMP = COMMAND_STATE_NO_JUMP,
348 UNKNOWN_BIT_5 = COMMAND_STATE_UNKNOWN_BIT_5,
349 NO_ATTACK = COMMAND_STATE_NO_ATTACK,
350 UNKNOWN_BIT_7 = COMMAND_STATE_UNKNOWN_BIT_7,
351 GUARD = COMMAND_STATE_GUARD,
352 UNKNOWN_BIT_9 = COMMAND_STATE_UNKNOWN_BIT_9,
353 AIR_DASH = COMMAND_STATE_AIR_DASH,
354 UKEMI = COMMAND_STATE_UKEMI,
355 PREJUMP = COMMAND_STATE_PREJUMP,
356 DISABLE_THROW = COMMAND_STATE_DISABLE_THROW,
357 FAUST_CRAWL_FORWARD = COMMAND_STATE_FAUST_CRAWL_FORWARD,
358 FAUST_CRAWL_BACKWARD = COMMAND_STATE_FAUST_CRAWL_BACKWARD,
359 };
360
361 enum class GuardState : uint16_t {
362 NONE = GUARD_STATE_NONE,
363 STAND_BLOCKING = GUARD_STATE_STAND_BLOCKING,
364 CROUCH_BLOCKING = GUARD_STATE_CROUCH_BLOCKING,
365 AIR_BLOCKING = GUARD_STATE_AIR_BLOCKING,
366 FAULTLESS_DEFENSE = GUARD_STATE_FAULTLESS_DEFENSE,
367 UNKNOWN_BIT_4 = GUARD_STATE_UNKNOWN_BIT_4,
368 UNKNOWN_BIT_5 = GUARD_STATE_UNKNOWN_BIT_5,
369 IN_BLOCKSTUN = GUARD_STATE_IN_BLOCKSTUN,
370 UNKNOWN_BIT_7 = GUARD_STATE_UNKNOWN_BIT_7,
371 UNKNOWN_BIT_8 = GUARD_STATE_UNKNOWN_BIT_8,
372 GUARD_POINT = GUARD_STATE_GUARD_POINT,
373 ARMOR = GUARD_STATE_ARMOR,
374 PARRY_1 = GUARD_STATE_PARRY_1,
375 PARRY_2 = GUARD_STATE_PARRY_2,
376 UNKNOWN_BIT_13 = GUARD_STATE_UNKNOWN_BIT_13,
377 UNKNOWN_BIT_14 = GUARD_STATE_UNKNOWN_BIT_14,
378 UNKNOWN_BIT_15 = GUARD_STATE_UNKNOWN_BIT_15,
379 };
380
381 enum class BackgroundState : uint32_t {
382 NONE = BACKGROUND_STATE_NONE,
383 UNKNOWN_BIT_0 = BACKGROUND_STATE_UNKNOWN_BIT_0,
384 HUD_OFF = BACKGROUND_STATE_HUD_OFF,
385 DEFAULT = BACKGROUND_STATE_DEFAULT,
386 BLACK_BACKGROUND = BACKGROUND_STATE_BLACK_BACKGROUND,
387 POST_FLASH_DIM = BACKGROUND_STATE_POST_FLASH_DIM,
388 UNKNOWN_BIT_5 = BACKGROUND_STATE_UNKNOWN_BIT_5,
389 UNKNOWN_BIT_6 = BACKGROUND_STATE_UNKNOWN_BIT_6,
390 UNKNOWN_BIT_7 = BACKGROUND_STATE_UNKNOWN_BIT_7,
391 UNKNOWN_BIT_8 = BACKGROUND_STATE_UNKNOWN_BIT_8,
392 UNKNOWN_BIT_9 = BACKGROUND_STATE_UNKNOWN_BIT_9,
393 UNKNOWN_BIT_10 = BACKGROUND_STATE_UNKNOWN_BIT_10,
394 SUPER_FLASH = BACKGROUND_STATE_SUPER_FLASH,
395 UNKNOWN_BIT_12 = BACKGROUND_STATE_UNKNOWN_BIT_12,
396 UNKNOWN_BIT_13 = BACKGROUND_STATE_UNKNOWN_BIT_13,
397 FORCE_BREAK_SUPER_FLASH = BACKGROUND_STATE_FORCE_BREAK_SUPER_FLASH,
398 LIGHTNING = BACKGROUND_STATE_LIGHTNING,
399 };
400
401 enum class SpriteRenderState : uint32_t {
402 NONE = SPRITE_RENDER_STATE_NONE,
403 IGNORE_UNIVERSAL_Y_OFFSET = SPRITE_RENDER_STATE_IGNORE_UNIVERSAL_Y_OFFSET,
404 DEAD_ANGLE_OR_FRC_FLASH = SPRITE_RENDER_STATE_DEAD_ANGLE_OR_FRC_FLASH,
405 STROBE = SPRITE_RENDER_STATE_STROBE, /* Usually paired with `FIRE` */
406 FIRE = SPRITE_RENDER_STATE_FIRE,
407 INSTALL_FLASH = SPRITE_RENDER_STATE_INSTALL_FLASH,
408 INVISIBLE = SPRITE_RENDER_STATE_INVISIBLE,
409 SILHOUETTE = SPRITE_RENDER_STATE_SILHOUETTE,
410 MOROHA_MODE_FLASH = SPRITE_RENDER_STATE_MOROHA_MODE_FLASH, /* Also used for Justice's install */
411 POISON_FLASH = SPRITE_RENDER_STATE_POISON_FLASH,
412 INSTANT_BLOCK_FLASH = SPRITE_RENDER_STATE_INSTANT_BLOCK_FLASH,
413 COUNTER_HIT_FLASH = SPRITE_RENDER_STATE_COUNTER_HIT_FLASH,
414 EASY_FRC_FLASH = SPRITE_RENDER_STATE_EASY_FRC_FLASH, /* Survival mode mechanic */
415 LIGHT_GREEN_FLASH = SPRITE_RENDER_STATE_LIGHT_GREEN_FLASH,
416 LIGHT_YELLOW_FLASH = SPRITE_RENDER_STATE_LIGHT_YELLOW_FLASH,
417 LIGHT_BLUE_FLASH = SPRITE_RENDER_STATE_LIGHT_BLUE_FLASH,
418 };
419
420 enum class DrawSpriteAttributes : uint16_t {
421 ALIGN_LEFT = ACPR_DRAW_SPRITE_ALIGN_LEFT,
422 ALIGN_X_CENTER = ACPR_DRAW_SPRITE_ALIGN_X_CENTER,
423 ALIGN_TOP = ACPR_DRAW_SPRITE_ALIGN_TOP,
424 ALIGN_Y_CENTER = ACPR_DRAW_SPRITE_ALIGN_Y_CENTER,
425 FLIP_TEXTURE_U = ACPR_DRAW_SPRITE_FLIP_TEXTURE_U,
426 FLIP_TEXTURE_Y = ACPR_DRAW_SPRITE_FLIP_TEXTURE_Y,
427 ROTATE_CCW_90 = ACPR_DRAW_SPRITE_ROTATE_CCW_90,
428 ROTATE_180 = ACPR_DRAW_SPRITE_ROTATE_180,
429 };
430
431 enum class RawControllerInput : uint32_t {
432 NONE = INPUT_NONE,
433 SELECT = INPUT_SELECT,
434 L3 = INPUT_L3,
435 R3 = INPUT_R3,
436 START = INPUT_START,
437 UP = INPUT_UP,
438 RIGHT = INPUT_RIGHT,
439 DOWN = INPUT_DOWN,
440 LEFT = INPUT_LEFT,
441 L2 = INPUT_L2,
442 R2 = INPUT_R2,
443 L1 = INPUT_L1,
444 R1 = INPUT_R1,
445 TOP_FACE = INPUT_TOP_FACE,
446 RIGHT_FACE = INPUT_RIGHT_FACE,
447 BOTTOM_FACE = INPUT_BOTTOM_FACE,
448 LEFT_FACE = INPUT_LEFT_FACE,
449 };
450
451 enum class TrainingState : uint16_t {
452 DEFAULT = ACPR_TRAINING_STATE_DEFAULT,
453 SWITCH = ACPR_TRAINING_STATE_SWITCH,
454 RECORDING_STANDBY = ACPR_TRAINING_STATE_RECORDING_STANDBY,
455 RECORDING_RECORD = ACPR_TRAINING_STATE_RECORDING_RECORD,
456 RECORDING_PLAYBACK = ACPR_TRAINING_STATE_RECORDING_PLAYBACK,
457 PRACTICE_UNUSED = ACPR_TRAINING_STATE_PRACTICE_UNUSED,
458 };
459
460
461 // bitflag operators
462 template<typename E>
463 struct bitflags : std::false_type {};
464 template<> struct bitflags<ActionState> : std::true_type {};
465 template<> struct bitflags<AttackState> : std::true_type {};
466 template<> struct bitflags<CommandState> : std::true_type {};
467 template<> struct bitflags<GuardState> : std::true_type {};
468 template<> struct bitflags<BackgroundState> : std::true_type {};
469 template<> struct bitflags<SpriteRenderState> : std::true_type {};
470 template<> struct bitflags<RawControllerInput> : std::true_type {};
471 template<> struct bitflags<GameModeFeatureFlags> : std::true_type {};
472
473 template<typename E>
474 constexpr std::enable_if_t<bitflags<E>::value, E>
475 operator|(E a, E b) noexcept {
476 using U = std::underlying_type_t<E>;
477 return static_cast<E>(
478 static_cast<U>(a) | static_cast<U>(b));
479 }
480 template <typename E>
481 constexpr std::enable_if_t<bitflags<E>::value, E>
482 operator&(E a, E b) noexcept {
483 using U = std::underlying_type_t<E>;
484 return static_cast<E>(
485 static_cast<U>(a) & static_cast<U>(b));
486 }
487 template <typename E>
488 constexpr std::enable_if_t<bitflags<E>::value, E>
489 operator~(E flags) noexcept {
490 using U = std::underlying_type_t<E>;
491 return static_cast<E>(~static_cast<U>(flags));
492 }
493 template <typename E>
494 constexpr std::enable_if_t<bitflags<E>::value, E>
495 operator|=(E& a, E b) noexcept {
496 a = a | b;
497 return a;
498 }
499 template <typename E>
500 constexpr std::enable_if_t<bitflags<E>::value, E>
501 operator&=(E& a, E b) noexcept {
502 a = a & b;
503 return a;
504 }
505
506 /* ========== #STRUCT ALIASING ========== */
507
508 using LocaleState = GGXXACPR_LocaleState;
509 using FiberData = GGXXACPR_FiberData;
510 using PlayerInput = GGXXACPR_PlayerInput;
511 using Collider = GGXXACPR_Collider;
512 using ActionHeader = GGXXACPR_ActionHeader;
513 using HitParam = GGXXACPR_HitParam;
514 using DamageParam = GGXXACPR_DamageParam;
515 using Screenshake = GGXXACPR_Screenshake;
516 using Vector = GGXXACPR_Vector;
517 using Color = GGXXACPR_Color;
518 using ColorVertex = GGXXACPR_ColorVertex;
519 using DrawSpriteParams = GGXXACPR_DrawSpriteParams;
520 using ReversalRecordingState = GGXXACPR_ReversalRecordingState;
521 using DummyRecordingState = GGXXACPR_DummyRecordingState;
522
523 using CharacterSpecific = GGXXACPR_CharacterSpecificVariables;
524 namespace CharacterSpecificStructs {
525 using Sol = GGXXACPR_CharacterSpecificVariables_Sol;
526 using May = GGXXACPR_CharacterSpecificVariables_May;
527 using Millia = GGXXACPR_CharacterSpecificVariables_Millia;
528 using Axl = GGXXACPR_CharacterSpecificVariables_Axl;
529 using Potemkin = GGXXACPR_CharacterSpecificVariables_Potemkin;
530 using Chipp = GGXXACPR_CharacterSpecificVariables_Chipp;
531 using Eddie = GGXXACPR_CharacterSpecificVariables_Eddie;
532 using Faust = GGXXACPR_CharacterSpecificVariables_Faust;
533 using Testament = GGXXACPR_CharacterSpecificVariables_Testament;
534 using Jam = GGXXACPR_CharacterSpecificVariables_Jam;
535 using Anji = GGXXACPR_CharacterSpecificVariables_Anji;
536 using Johnny = GGXXACPR_CharacterSpecificVariables_Johnny;
537 using Venom = GGXXACPR_CharacterSpecificVariables_Venom;
538 using Dizzy = GGXXACPR_CharacterSpecificVariables_Dizzy;
539 using Zappa = GGXXACPR_CharacterSpecificVariables_Zappa;
540 using Bridget = GGXXACPR_CharacterSpecificVariables_Bridget;
541 using RoboKy = GGXXACPR_CharacterSpecificVariables_RoboKy;
542 using ABA = GGXXACPR_CharacterSpecificVariables_ABA;
543 using OrderSol = GGXXACPR_CharacterSpecificVariables_OrderSol;
544 using Kliff = GGXXACPR_CharacterSpecificVariables_Kliff;
545 using Justice = GGXXACPR_CharacterSpecificVariables_Justice;
546 }
547
548
549 /* ========== #VIEWS ========== */
550
558 struct WorldCoordinate { int x; int y; };
569 struct ModelCoordinate { int x; int y; };
578 struct Scale {
579 int16_t _rawX = -1;
580 int16_t _rawY = -1;
581 float x() {
582 return (_rawX < 0 ? 1.0F : _rawX) / 1000.0F;
583 };
584 float y() {
585 if (_rawY < 0 && _rawX < 0) return 1.0F;
586 return (_rawY < 0 ? _rawX : _rawY) / 1000.0F;
587 };
588 };
589 struct Angle {
593 uint16_t rawValue;
597 float degrees() { return rawValue / 182.0444F; }
601 float radian() { return rawValue / 10430.378F; }
602 };
603
604
605 class Camera {
606 public:
607 Camera(GGXXACPR_Camera* ref = nullptr)
608 : raw(ref) {};
609 GGXXACPR_Camera* getRaw() { return raw; }
610
619 return {
620 raw->cameraXPos_actual,
621 raw->cameraYPos_actual
622 };
623 }
624
625 int left() { return raw->leftEdgePos; }
627 int right() { return left() + raw->cameraWidth_actual; }
629 int top() { return bottom() - raw->cameraHeight; }
631 int bottom() { return raw->cameraYPos_actual + (raw->cameraHeight / 12); }
636 return {
637 static_cast<int>(raw->cameraWidth_actual),
638 static_cast<int>(raw->cameraHeight)
639 };
640 }
641
646 float zoom() {
647 return raw->zoom;
648 }
649
650 float zoomTimer() {
651 return raw->zoomTimer;
652 }
653
654 private:
655 GGXXACPR_Camera* raw;
656 };
657
667 class Player {
668 public:
669 Player(GGXXACPR_Entity* ref = nullptr)
670 : raw(ref) {};
677 bool isValid() { return raw != nullptr; }
681 GGXXACPR_Entity* getRaw() { return raw; }
682
683
684 EntityId id() {
685 return static_cast<EntityId>(raw->id);
686 }
687 bool isFacingRight() {
688 return static_cast<bool>(raw->bIsFacingRight);
689 }
690 bool isLeftSide() {
691 return static_cast<bool>(raw->bIsLeftSide);
692 }
693 ActionState actionState() {
694 return static_cast<ActionState>(raw->actionState);
695 }
696 auto actId() { return raw->actId; }
697 auto actTimer() { return raw->actTimer; }
698 auto health() { return raw->health; }
699 auto playerIndex() { return raw->playerIndex; }
700 GuardState guardState() {
701 return static_cast<GuardState>(raw->guardState);
702 }
703 AttackState attackState() {
704 return static_cast<AttackState>(raw->attackState);
705 }
711 ModelCoordinate corePos() { return {raw->coreX, raw->coreY}; }
718 Scale scale() { return {raw->scale, raw->scaleY}; }
719
720 #ifdef __cpp_lib_span
726 std::span<GGXXACPR_Collider> colliders() {
727 return std::span(raw->colliderSetPtr, raw->boxCount);
728 }
734 std::span<GGXXACPR_Collider> extraColliders() {
735 return std::span<GGXXACPR_Collider>(raw->extraColliderSetPtr, raw->boxCount);
736 }
737 #endif
738
744 WorldCoordinate position() { return {raw->xPos, raw->yPos}; }
748 WorldCoordinate velocity() { return {raw->xVelocity, raw->yVelocity}; }
755 int16_t drawPriority() { return raw->drawPriority; }
759 uint8_t damage() { return raw->actHeader.damage; }
763 uint8_t hitstopTime() { return raw->hitstopTime; }
764
765
766 /* PlayerData fields -------------------------------------------------- */
767
768 #define SAFE_GET_PDATA_FN(TYPE, FIELD_NAME, DEFAULT) \
769 TYPE FIELD_NAME() { \
770 return raw->playerEntityDataPtr ? \
771 raw->playerEntityDataPtr->FIELD_NAME : \
772 DEFAULT; \
773 }
774
775 SAFE_GET_PDATA_FN(uint16_t, tension, 0)
776 SAFE_GET_PDATA_FN(uint8_t, staggerShakeTime, 0)
777 SAFE_GET_PDATA_FN(uint16_t, currentGlobalProration, 0)
778 SAFE_GET_PDATA_FN(int16_t, negativePenaltyTimer, 0)
779 SAFE_GET_PDATA_FN(int16_t, throwProtectionTimer, 0)
780 SAFE_GET_PDATA_FN(int16_t, guardBar, 0)
781 SAFE_GET_PDATA_FN(int16_t, untechTimer, 0)
782 SAFE_GET_PDATA_FN(uint8_t, invulnCounter, 0)
783 SAFE_GET_PDATA_FN(int16_t, tensionGainPenaltyTimer, 0)
784 SAFE_GET_PDATA_FN(uint8_t, frcTime, 0)
785 SAFE_GET_PDATA_FN(uint8_t, frcLockoutTimer, 0)
786 SAFE_GET_PDATA_FN(uint8_t, instantBlockTimer, 0)
787 SAFE_GET_PDATA_FN(int16_t, instantBlockLockoutTimer, 0)
788 SAFE_GET_PDATA_FN(uint8_t, jumpCount, 0)
789 SAFE_GET_PDATA_FN(uint8_t, airDashCount, 0)
790 SAFE_GET_PDATA_FN(int16_t, dizzyBuildup, 0)
791 SAFE_GET_PDATA_FN(int16_t, dizzyDuration, 0)
792 SAFE_GET_PDATA_FN(bool, cpu, false)
793 SAFE_GET_PDATA_FN(uint8_t, dizzyThreshold, 0)
794 SAFE_GET_PDATA_FN(CharacterSpecific, characterSpecific, CharacterSpecific{})
795 SAFE_GET_PDATA_FN(int16_t, tensionPulse, 0)
796 SAFE_GET_PDATA_FN(int16_t, comboTime, 0)
797 SAFE_GET_PDATA_FN(int16_t, burstMeter, 0)
798 SAFE_GET_PDATA_FN(int16_t, comboCounter, 0)
799 SAFE_GET_PDATA_FN(int32_t, cleanHitCounter, 0)
800
801 #undef SAFE_GET_PDATA_FN
802
803
804 /* Setters -------------------------------------------------- */
805
806 void setActionState(ActionState state) {raw->actionState = static_cast<uint32_t>(state); };
807 void setHealth(uint16_t value) { raw->health = value; }
808 void setGuardState(GuardState state) {raw->guardState = static_cast<uint16_t>(state); }
809 void setAttackState(AttackState state) {raw->attackState = static_cast<uint32_t>(state); }
810 void setCommandState(CommandState state) {raw->commandFlags = static_cast<uint32_t>(state); }
811 void setScale(Scale scale) {
812 raw->scale = scale._rawX;
813 raw->scaleY = scale._rawY;
814 }
815 void setPosition(WorldCoordinate pos) {
816 raw->xPos = pos.x;
817 raw->yPos = pos.y;
818 }
819
820
821 /* PlayerData setters -------------------------------------------------- */
822
823 void setTension(uint16_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->tension = value; }
824 void setGuardBar(int16_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->guardBar = value; }
825 void setInvulnCounter(uint8_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->invulnCounter = value; }
826 void setFRCTime(uint8_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->frcTime = value; }
827 void setDizzyBuildup(int16_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->dizzyBuildup = value; }
828 void setBurstMeter(int16_t value) { if (raw->playerEntityDataPtr) raw->playerEntityDataPtr->burstMeter = value; }
829
830 private:
831 GGXXACPR_Entity *raw;
832 };
833
843 class Entity {
844 public:
845 Entity(GGXXACPR_Entity* ref = nullptr)
846 : raw(ref) {}
850 bool isValid() {
851 return raw != nullptr && raw->id != 0;
852 }
853
857 return raw;
858 }
859
860 EntityId id() {
861 return static_cast<EntityId>(raw->id);
862 }
863 bool isFacingRight() {
864 return static_cast<bool>(raw->bIsFacingRight);
865 }
866 bool isLeftSide() {
867 return static_cast<bool>(raw->bIsLeftSide);
868 }
869 Entity prev() { return raw->prevPtr; }
870 Entity next() { return raw->nextPtr; }
871 ActionState actionState() {
872 return static_cast<ActionState>(raw->actionState);
873 }
880 auto actId() { return raw->actId; }
881 auto actTimer() { return raw->actTimer; }
885 auto playerIndex() { return raw->playerIndex; }
886 GuardState guardState() {
887 return static_cast<GuardState>(raw->guardState);
888 }
889 AttackState attackState() {
890 return static_cast<AttackState>(raw->attackState);
891 }
897 ModelCoordinate corePos() { return {raw->coreX, raw->coreY}; }
904 Scale scale() { return { raw->scale, raw->scaleY }; }
905
906 #ifdef __cpp_lib_span
910 std::span<GGXXACPR_Collider> colliders() {
911 return std::span(raw->colliderSetPtr, raw->boxCount);
912 }
916 std::span<GGXXACPR_Collider> extraColliders() {
917 return std::span<GGXXACPR_Collider>(raw->extraColliderSetPtr, raw->boxCount);
918 }
919 #endif
920
926 WorldCoordinate position() { return {raw->xPos, raw->yPos}; }
930 WorldCoordinate velocity() { return {raw->xVelocity, raw->yVelocity}; }
934 Angle angle() { return { raw->angle }; }
941 int16_t drawPriority() { return raw->drawPriority; }
945 uint8_t damage() { return raw->actHeader.damage; }
949 uint8_t hitstopTime() { return raw->hitstopTime; }
950
951
952 private:
953 GGXXACPR_Entity *raw;
954 };
955}
956
957#endif
WorldCoordinate size()
Camera size dimensions in world coordinates.
Definition ggxxacpr.hpp:635
float zoomTimer()
The delay timer before the camera begins to zoom in.
Definition ggxxacpr.hpp:650
int right()
X-coordinate of the right edge of the screen.
Definition ggxxacpr.hpp:627
float zoom()
The zoom factor of the camera.
Definition ggxxacpr.hpp:646
int bottom()
Y-coordinate of the bottom edge of the screen.
Definition ggxxacpr.hpp:631
int left()
X-coordinate of the left edge of the screen.
Definition ggxxacpr.hpp:625
int top()
Y-coordinate of the top edge of the screen.
Definition ggxxacpr.hpp:629
WorldCoordinate position()
the camera position in world coordinates.
Definition ggxxacpr.hpp:618
uint8_t hitstopTime()
A counter for hitstop.
Definition ggxxacpr.hpp:949
WorldCoordinate position()
The position of the player.
Definition ggxxacpr.hpp:926
WorldCoordinate velocity()
Player velocity given in world coordinates per frame.
Definition ggxxacpr.hpp:930
Scale scale()
The scaling factor that should be applied to this player's colliders.
Definition ggxxacpr.hpp:904
uint8_t damage()
The damage value of the current action.
Definition ggxxacpr.hpp:945
auto playerIndex()
the player index of the player that owns this entity.
Definition ggxxacpr.hpp:885
ModelCoordinate corePos()
The position of the player's center point in model space.
Definition ggxxacpr.hpp:897
bool isValid()
Checks if the underlying reference is valid.
Definition ggxxacpr.hpp:850
int16_t drawPriority()
Determines which sprites draw in which order.
Definition ggxxacpr.hpp:941
Angle angle()
Angle of the entity's sprite.
Definition ggxxacpr.hpp:934
auto actId()
The current action id.
Definition ggxxacpr.hpp:880
GGXXACPR_Entity * getRaw()
Returns the underlying GGXXACPR_Entity struct pointer.
Definition ggxxacpr.hpp:856
Scale scale()
The scaling factor that should be applied to this player's colliders.
Definition ggxxacpr.hpp:718
WorldCoordinate position()
The position of the player.
Definition ggxxacpr.hpp:744
bool isValid()
Checks if the underlying reference is valid.
Definition ggxxacpr.hpp:677
uint8_t hitstopTime()
A counter for hitstop.
Definition ggxxacpr.hpp:763
uint8_t damage()
The damage value of the current action.
Definition ggxxacpr.hpp:759
GGXXACPR_Entity * getRaw()
Returns the underlying GGXXACPR_Entity struct pointer.
Definition ggxxacpr.hpp:681
WorldCoordinate velocity()
Player velocity given in world coordinates per frame.
Definition ggxxacpr.hpp:748
ModelCoordinate corePos()
The position of the player's center point in model space.
Definition ggxxacpr.hpp:711
int16_t drawPriority()
Determines which sprites draw in which order.
Definition ggxxacpr.hpp:755
Definition ggxxacpr_c.h:593
Definition ggxxacpr_c.h:1045
Definition ggxxacpr.hpp:589
float degrees()
degree approximation
Definition ggxxacpr.hpp:597
float radian()
radian approximation
Definition ggxxacpr.hpp:601
uint16_t rawValue
65536 units per full rotation (i.e. UINT16_MAX)
Definition ggxxacpr.hpp:593
A point in model space.
Definition ggxxacpr.hpp:569
Render scale for sprites.
Definition ggxxacpr.hpp:578
A point in the world.
Definition ggxxacpr.hpp:558
Definition ggxxacpr.hpp:463