Click to expand
#define MSL_PPC_EABI_CRITICAL_REGIONS_GAMECUBE_H
void __kill_critical_regions(void);
#define MSL_ABORT_EXIT_H
void exit(int code);
#define _ANSI_FP
#define SIGDIGLEN 36
typedef struct decimal {
    char sign;
    char unk1;
    short exp;
    struct {
        unsigned char length;
        unsigned char text[36];
        unsigned char unk41;
    } sig;
} decimal;
typedef struct decform {
    char style;
    char unk1;
    short digits;
} decform;
void __num2dec(const decform* f, double x, decimal* d);
#define _BUFFER_IO
#define _STDIO_H_
#define _STDARG_H_
typedef struct {
    char gpr;
    char fpr;
    char reserved[2];
    char* input_arg_area;
    char* reg_save_area;
} __va_list[1];
typedef __va_list va_list;
extern void __builtin_va_info(void*);
void* __va_arg(va_list v_list, unsigned char type);
#define va_start(ap, fmt) ((void) fmt, __builtin_va_info(&ap))
#define va_arg(ap, t) (*((t*) __va_arg(ap, _var_arg_typeof(t))))
#define va_end(ap) (void) 0
#define __STDDEF_H__
typedef unsigned short wchar_t;
typedef unsigned long size_t;
typedef signed int intptr_t;
typedef unsigned int uintptr_t;
#define offsetof(type, member) ((size_t) &(((type*) 0)->member))
#define NULL 0L
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#define __ungetc_buffer_size 2
typedef unsigned long __file_handle;
typedef unsigned long fpos_t;
typedef unsigned short wchar_t;
enum __io_modes {
    __read = 1,
    __write = 2,
    __read_write = 3,
    __append = 4,
};
enum __file_kinds {
    __closed_file,
    __disk_file,
    __console_file,
    __unavailable_file,
};
enum __file_orientation {
    __unoriented,
    __char_oriented,
    __wide_oriented,
};
enum __io_results {
    __no_io_error,
    __io_error,
    __io_EOF,
};
typedef struct {
    unsigned int open_mode : 2;
    unsigned int io_mode : 3;
    unsigned int buffer_mode : 2;
    unsigned int file_kind : 3;
    unsigned int file_orientation : 2;
    unsigned int binary_io : 1;
} __file_modes;
enum __io_states {
    __neutral,
    __writing,
    __reading,
    __rereading,
};
typedef struct {
    unsigned int io_state : 3;
    unsigned int free_buffer : 1;
    unsigned char eof;
    unsigned char error;
} __file_state;
typedef void (*__idle_proc)(void);
typedef int (*__pos_proc)(__file_handle file, fpos_t* position, int mode,
                          __idle_proc idle_proc);
typedef int (*__io_proc)(__file_handle file, unsigned char* buff,
                         size_t* count, __idle_proc idle_proc);
typedef int (*__close_proc)(__file_handle file);
typedef struct _IO_FILE {
    __file_handle handle;
    __file_modes mode;
    __file_state state;
    unsigned char char_buffer;
    unsigned char char_buffer_overflow;
    unsigned char ungetc_buffer[2];
    wchar_t ungetwc_buffer[2];
    unsigned long position;
    unsigned char* buffer;
    unsigned long buffer_size;
    unsigned char* buffer_ptr;
    unsigned long buffer_len;
    unsigned long buffer_alignment;
    unsigned long saved_buffer_len;
    unsigned long buffer_pos;
    __pos_proc position_proc;
    __io_proc read_proc;
    __io_proc write_proc;
    __close_proc close_proc;
    __idle_proc idle_proc;
} FILE;
typedef struct {
    char* CharStr;
    size_t MaxCharCount;
    size_t CharsWritten;
} __OutStrCtrl;
typedef struct {
    char* NextChar;
    int NullCharDetected;
} __InStrCtrl;
#define EOF -1L
enum __ReadProcActions {
    __GetAChar,
    __UngetAChar,
    __TestForError,
};
int __StringRead(void* str, int ch, int behavior);
#define _IONBF 0
#define _IOLBF 1
#define _IOFBF 2
extern FILE __files[3];
#define stdin (&__files[0])
#define stdout (&__files[1])
#define stderr (&__files[2])
int printf(const char* format, ...);
int sprintf(char* s, const char* format, ...);
int vprintf(const char* format, va_list arg);
int vsprintf(char* s, const char* format, va_list arg);
size_t fwrite(const void*, size_t memb_size, size_t num_memb, FILE*);
enum {
    __align_buffer,
    __dont_align_buffer
};
void __convert_from_newlines(unsigned char* p, size_t* n);
void __convert_to_newlines(unsigned char* p, size_t* n);
void __prep_buffer(FILE*);
int __load_buffer(FILE*, size_t* bytes_loaded, int alignment);
int __flush_buffer(FILE*, size_t* bytes_flushed);
#define MSL_CONSOLE_IO_H
#define RUNTIME_PLATFORM_H
#define STDBOOL_H
/// A signed integer used to contain boolean values
/// @todo Maybe some versions of MetroWerks support @c _Bool?
typedef int bool;
/// #bool true
/// @todo Make this and #false part of an @c enum. Fake usages, such as
/// assigning to a @c u32, will need to be addressed.
#define true 1
/// #bool false
#define false 0
#define _DOLPHIN_TYPES_H_
typedef signed char s8;
typedef unsigned char u8;
typedef signed short int s16;
typedef unsigned short int u16;
typedef signed long s32;
typedef unsigned long u32;
typedef signed long long int s64;
typedef unsigned long long int u64;
typedef float f32;
typedef double f64;
typedef volatile f32 vf32;
typedef volatile f64 vf64;
typedef char* Ptr;
typedef int BOOL;
#define FALSE 0
#define TRUE 1
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
#define MSL_CTYPE_H
extern const unsigned char __ctype_map[];
extern const unsigned char __lower_map[];
extern const unsigned char __upper_map[];
#define EOF -1L
#define __control_char 0x01
#define __motion_char 0x02
#define __space_char 0x04
#define __punctuation 0x08
#define __digit 0x10
#define __hex_digit 0x20
#define __lower_case 0x40
#define __upper_case 0x80
#define __letter (__lower_case | __upper_case)
#define __alphanumeric (__letter | __digit)
#define __graphic (__alphanumeric | __punctuation)
#define __printable (__graphic | __space_char)
#define __whitespace (__motion_char | __space_char)
#define __control (__motion_char | __control_char)
#define __zero_fill(c) ((int) (unsigned char) (c))
static inline int isalpha(int c)
{
    return (int) (__ctype_map[(unsigned char) c] & (0x40 | 0x80));
}
static inline int isdigit(int c)
{
    return (int) (__ctype_map[(unsigned char) c] & 0x10);
}
static inline int isspace(int c)
{
    return (int) (__ctype_map[(unsigned char) c] & (0x02 | 0x04));
}
static inline int isupper(int c)
{
    return (int) (__ctype_map[(unsigned char) c] & 0x80);
}
static inline int isxdigit(int c)
{
    return (int) (__ctype_map[(unsigned char) c] & 0x20);
}
int toupper(int c);
int tolower(int c);
#define _STRING_H_
char* strcpy(char* dst, const char* src);
char* strncpy(char* dst, const char* src, size_t num);
char* strcat(char* dest, const char* src);
size_t strlen(const char* s);
int strcmp(const char* s1, const char* s2);
int strncmp(const char* s1, const char* s2, size_t n);
char* strchr(const char* str, int chr);
void* memchr(const void* p, int val, size_t n);
int memcmp(const void* p1, const void* p2, size_t n);
void* memset(void* dst, int val, size_t n);
void* memcpy(void* dst, const void* src, size_t n);
void* memmove(void* dst, const void* src, size_t n);
#define _DOLPHIN_CMATH_H_
f32 powf(f32 x, f32 y);
f32 tanf(f32);
/// @typedef bool
/// @note Dolphin's #BOOL macro is not supported.
/// @typedef BOOL
/// @deprecated Use #bool instead.
#undef BOOL
/// @def false
/// @note Dolphin's #FALSE macro is not supported.
/// @def FALSE
/// @deprecated Use #false instead.
#undef FALSE
/// @def true
/// @note Dolphin's #TRUE macro is not supported.
/// @def TRUE
/// @deprecated Use #true instead.
#undef TRUE
/// The underlying type of an @c enum, used as a placeholder
typedef int enum_t;
/// Signed variant of ::size_t
typedef signed int ssize_t;
/// A @c void callback with no arguments.
typedef void (*Event)(void);
typedef bool (*Predicate)(void);
#define ASM
#define UNUSED
#define ATTRIBUTE_NORETURN
#define ATTRIBUTE_NONSTRING
#define AT_ADDRESS(x)
#define U8_MAX 0xFF
#define U16_MAX 0xFFFF
#define U32_MAX 0xFFFFFFFF
#define U64_MAX 0xFFFFFFFFFFFFFFFF
#define S8_MAX 0x7F
#define S16_MAX 0x7FFF
#define S32_MAX 0x7FFFFFFF
#define F32_MAX 3.4028235e38f
#define SQ(x) ((x) * (x))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
/// Add @p b to @p a, saturating at @p max.
#define SAT_ADD(a, b, max) (((a) + (b) > (max)) ? (max) : (a) + (b))
#define STATIC_ASSERT(cond)
#define ASSERT_SIZE(expr, size)
#define ASSERT_OFFSET(expr, member, offset)
#define RETURN_IF(cond) do { if ((cond)) { return; } } while (0)
#define SDATA
#define DATA
#define WEAK
#define SECTION_INIT
#define SECTION_CTORS
#define SECTION_DTORS
#define ATTRIBUTE_RESTRICT
#define M_TAU 6.283185307179586
#define M_PI_3 (M_PI / 3)
#define M_PI_F 3.14159265358979323846F
#define M_TAU_F 6.283185307179586F
#define M_PI_2_F (M_PI_F / 2.0F)
#define M_PI_3_F (M_PI_F / 3.0F)
#define M_PI_L 3.14159265358979323846L
#define M_TAU_L 6.283185307179586L
#define M_PI_2_L (M_PI_L / 2.0L)
#define M_PI_3_L (M_PI_L / 3.0L)
#define SIGNF(x) ((x) > 0.0f ? 1.0f : -1.0f)
#define FLT_EPSILON 1.00000001335e-10F
#define ABS(x) ((x) < 0 ? -(x) : (x))
s32 MSL_ConsoleIo_80325F18(void);
int __write_console(__file_handle, u8* buf, size_t* n, __idle_proc f);
int __read_console(__file_handle, u8* buf, size_t* n, __idle_proc f);
int __close_console(__file_handle);
#define MSL_COMMON_SRC_ERRNO_H
#define ENOERR 0
#define EDOM 33
#define ERANGE 34
#define EFPOS 40
#define ESIGPARM 36
extern int errno;
#define _STD_LIMITS_H
#define CHAR_BIT 8
#define SCHAR_MIN (-0x7F - 1)
#define SCHAR_MAX 0x7F
#define UCHAR_MAX 0xFF
#define CHAR_MIN 0
#define CHAR_MAX SCHAR_MAX
#define SHRT_MIN (-0x7FFF - 1)
#define SHRT_MAX 0x7FFF
#define USHRT_MAX 0xFFFF
#define INT_MIN (-0x7FFFFFFF - 1)
#define INT_MAX 0x7FFFFFFF
#define UINT_MAX 0xFFFFFFFF
#define LONG_MIN (-0x7FFFFFFFL - 1)
#define LONG_MAX 0x7FFFFFFFL
#define ULONG_MAX 0xFFFFFFFFUL
#define LLONG_MIN (-0x7FFFFFFFFFFFFFFFLL - 1)
#define LLONG_MAX 0x7FFFFFFFFFFFFFFFLL
#define ULLONG_MAX 0xFFFFFFFFFFFFFFFFULL
#define MSL_MATH_H
#define MSL_HI(x) *(int*) &x
#define MSL_LO(x) *(1 + (int*) &x)
#define M_PI 3.14159265358979323846
#define M_PI_2 (M_PI / 2)
enum FloatType {
    FP_NAN = 1,
    FP_INFINITE = 2,
    FP_ZERO = 3,
    FP_NORMAL = 4,
    FP_SUBNORMAL = 5
};
static inline s32 __fpclassifyf(float x)
{
    const s32 exp_mask = 0x7F800000;
    const s32 mantissa_mask = 0x007FFFFF;
    switch ((*(s32*) &x) & exp_mask) {
    case exp_mask:
        return ((*(s32*) &x) & mantissa_mask) ? FP_NAN : FP_INFINITE;
    case 0:
        return ((*(s32*) &x) & mantissa_mask) ? FP_SUBNORMAL : FP_ZERO;
    default:
        return FP_NORMAL;
    }
}
extern int __HI(double);
extern int __LO(double);
static inline s32 __fpclassifyd(double x)
{
    switch (__HI(x) & 0x7ff00000) {
    case 0x7ff00000:
        return ((__HI(x) & 0x000fffff) || (__LO(x) & 0xffffffff))
                   ? FP_NAN
                   : FP_INFINITE;
    case 0:
        return ((__HI(x) & 0x000fffff) || (__LO(x) & 0xffffffff))
                   ? FP_SUBNORMAL
                   : FP_ZERO;
    default:
        return FP_NORMAL;
    }
}
#define fpclassify(x) ((sizeof(x) == sizeof(float)) ? __fpclassifyf((float) (x)) : __fpclassifyd((double) (x)))
double fabs(double);
double frexp(double x, int* exponent);
float acosf(float);
float asinf(float);
float atan2f(float y, float x);
float atanf(float);
float cos__Ff(float x);
float cosf(float);
float expf(float);
float fabsf(float);
float fabsf__Ff(float);
float logf(float);
float sin__Ff(float x);
float sinf(float);
float sqrt(double);
float sqrtf(float);
void __sinit_trigf_c(void);
static inline float fmodf(float a, float b)
{
    s64 quotient;
    if (fabsf(b) > fabsf(a)) {
        return a;
    }
    quotient = a / b;
    return a - b * quotient;
}
#define _MATH_PPC_H_ // IWYU pragma: always_keep
#define METROTRK_INTRINSICS_H
void __sync(void);
void __isync(void);
int __cntlzw(unsigned int);
float sqrtf__Ff(float);
float __fnmsubs(float, float, float);
double __fabs(double);
float __fabsf(float);
double __frsqrte(double);
int __rlwinm(int, int, int, int);
int __rlwimi(int, int, int, int, int);
void* __memcpy(void* dst, const void* src, size_t n);
#pragma push
#pragma cplusplus on
extern inline float sqrtf(float x)
{
    volatile float y;
    if (x > 0.0f) {
        double guess = __frsqrte((double) x); // returns an approximation to
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 12 sig bits
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 24 sig bits
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 32 sig bits
        y = (float) (x * guess);
        return y;
    }
    return x;
}
#pragma pop
static inline float sqrtf_accurate(float x)
{
    volatile float y;
    if (x > 0.0f) {
        double guess = __frsqrte((double) x); // returns an approximation to
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 12 sig bits
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 24 sig bits
        guess =
            0.5 * guess * (3.0 - guess * guess * x); // now have 32 sig bits
        guess = 0.5 * guess * (3.0 - guess * guess * x); // extra iteration
        y = (float) (x * guess);
        return y;
    }
    return x;
}
#define __MEM_FUNCS_H__
void __copy_longs_aligned(void* dst, const void* src, size_t len);
void __copy_longs_rev_aligned(void* dst, const void* src, size_t len);
void __copy_longs_unaligned(void* dst, const void* src, size_t len);
void __copy_longs_rev_unaligned(void* dst, const void* src, size_t len);
#define GALE01_323CF0
/* 323DC8 */ int vsnprintf(char* s, size_t n, const char* format, va_list);
#define MSL_SETJMP_H
#define RUNTIME_GECKO_SETJMP_H
typedef struct jmp_buf {
    unsigned long pc; /*	0: saved PC			*/
    unsigned long cr; /*	4: saved CR			*/
    unsigned long sp; /*  8: saved SP			*/
    unsigned long rtoc; /* 12: saved RTOC		*/
    unsigned long reserved; /* 16: not used			*/
    unsigned long gprs[19]; /* 20: saved R13-R31	*/
    double fp14; /* 96: saved FP14-FP31	 */
    double fp15;
    double fp16;
    double fp17;
    double fp18;
    double fp19;
    double fp20;
    double fp21;
    double fp22;
    double fp23;
    double fp24;
    double fp25;
    double fp26;
    double fp27;
    double fp28;
    double fp29;
    double fp30;
    double fp31;
    double fpscr; /* 240: saved FPSCR		*/
    int pad[8];
} jmp_buf;
void __longjmp(register jmp_buf* env, int val);
int __setjmp(register jmp_buf* env);
#define setjmp(env) __setjmp(&(env))
#define longjmp(env, val) __longjmp(&(env), val)
#define _STDLIB_H_
#define _MSL_COMMON_STRTOUL_H
long strtol(const char* str, char** end, int base);
unsigned long strtoul(const char* str, char** end, int base);
unsigned long __strtoul(int base, int max_width,
                        int (*ReadProc)(void*, int, int), void* ReadProcArg,
                        int* chars_scanned, int* negative, int* overflow);
#define _WCHAR_H_
int fwide(FILE* stream, int mode);
#define RAND_MAX 32767
void srand(unsigned int seed);
int rand(void);
void exit(int status);
size_t wcstombs(char* dest, const wchar_t* src, size_t max);
int atoi(const char* str);
typedef int (*_compare_function)(const void*, const void*);
void qsort(void*, size_t, size_t, _compare_function);
#define abs(x) __abs(x)
#define _METROTRK_EXCEPTION_H
extern u8 gTRKInterruptVectorTable[];
#define _METROTRK_DISPATCH_H
#define _METROTRK_DSERROR_H
typedef enum DSError {
    kUARTError = -0x0001,
    kNoError = 0x0000,
    kStepError = 0x0001,
    kParameterError = 0x0002,
    kEventQueueFull = 0x0100,
    kNoMessageBufferAvailable = 0x0300,
    kMessageBufferOverflow = 0x0301,
    kMessageBufferReadError = 0x0302,
    kDispatchError = 0x0500,
    kInvalidMemory = 0x0700,
    kInvalidRegister = 0x0701,
    kCWDSException = 0x0702,
    kUnsupportedError = 0x0703,
    kInvalidProcessId = 0x0704,
    kInvalidThreadId = 0x0705,
    kOsError = 0x0706,
    kWaitACKError = 0x0800
} DSError;
#define _METROTRK_MSGBUF_H
#define _METROTRK_MUTEX_TRK_H
typedef unsigned int DSMutex;
DSError TRKReleaseMutex(void* p1);
DSError TRKAcquireMutex(void* p1);
DSError TRKInitializeMutex(void* p1);
typedef unsigned char u128[16];
typedef int MessageBufferID;
#define TRKMessageBufferGet(buf, type, offset) (*(type*) (buf->data + offset))
#define kMessageBufferSize 0x800 + 0x80
#define NUM_BUFFERS 3
typedef struct MessageBuffer {
    /* 0x00 */ DSMutex fMutex;
    /* 0x00 */ bool fInUse;
    /* 0x04 */ u32 fLength;
    /* 0x08 */ u32 fPosition;
    /* 0x0C */ u8 fData[0x800 + 0x80];
} MessageBuffer; // size = 0x88C
typedef struct TRKMsgBufs {
    /* 0x00 */ MessageBuffer buffers[3];
} TRKMsgBufs; // size = 0x19A4
/* 326C9C */ DSError TRK_InitializeMessageBuffers(void);
/* 326D14 */ DSError TRKGetFreeBuffer(int*, MessageBuffer**);
/* 326DB0 */ MessageBuffer* TRKGetBuffer(int);
/* 326DDC */ void TRKReleaseBuffer(int);
/* 326E44 */ void TRKResetBuffer(MessageBuffer*, u8);
/* 326E84 */ DSError TRKSetBufferPosition(MessageBuffer*, u32);
/* 326EB4 */ DSError TRKAppendBuffer(MessageBuffer*, const void*, size_t);
/* 326F58 */ DSError TRKReadBuffer(MessageBuffer*, void*, size_t);
DSError TRKInitializeMessageBuffers(void);
/* 326FE4 */ DSError TRKAppendBuffer1_ui16(MessageBuffer* buffer,
                                           const u16 data);
/* 327038 */ DSError TRKAppendBuffer1_ui32(MessageBuffer* buffer,
                                           const u32 data);
/* 32709C */ DSError TRKAppendBuffer1_ui64(MessageBuffer* buffer,
                                           const u64 data);
/* 327124 */ DSError TRKAppendBuffer_ui8(MessageBuffer* buffer, const u8* data,
                                         int count);
/* 32718C */ DSError TRKAppendBuffer_ui32(MessageBuffer* buffer,
                                          const u32* data, int count);
/* 327208 */ DSError TRKReadBuffer1_ui8(MessageBuffer* buffer, u8* data);
/* 32722C */ DSError TRKReadBuffer1_ui16(MessageBuffer* buffer, u16* data);
/* 3272AC */ DSError TRKReadBuffer1_ui32(MessageBuffer* buffer, u32* data);
/* 32733C */ DSError TRKReadBuffer1_ui64(MessageBuffer* buffer, u64* data);
/* 3273EC */ DSError TRKReadBuffer_ui8(MessageBuffer* buffer, u8* data,
                                       int count);
/* 327460 */ DSError TRKReadBuffer_ui32(MessageBuffer* buffer, u32* data,
                                        int count);
static inline DSError TRKAppendBuffer1_ui8(MessageBuffer* buffer,
                                           const u8 data)
{
    if (buffer->fPosition >= 0x800 + 0x80) {
        return kMessageBufferOverflow;
    }
    buffer->fData[buffer->fPosition++] = data;
    buffer->fLength++;
    return kNoError;
}
extern TRKMsgBufs gTRKMsgBufs;
/* 3276A8 */ DSError TRKInitializeDispatcher(void);
/* 3276BC */ DSError TRKDispatchMessage(MessageBuffer* buf);
#define METROTRK_DOLPHIN_TRK_H
 void __TRK_reset(void);
void InitMetroTRK(void);
void EnableMetroTRKInterrupts(void);
u32 TRKTargetTranslate(u32 addr);
DSError TRKInitializeTarget(void);
#define _METROTRK_TRK_GLUE_H
#define _DOLPHIN_OS_H_
typedef s64 OSTime;
typedef u32 OSTick;
typedef s16 __OSInterrupt;
typedef u32 OSInterruptMask;
#define _DOLPHIN_OSCONTEXT_H_
#define __OS_CONTEXT_FRAME 768
#define OS_CONTEXT_R0 0
#define OS_CONTEXT_R1 4
#define OS_CONTEXT_R2 8
#define OS_CONTEXT_R3 12
#define OS_CONTEXT_R4 16
#define OS_CONTEXT_R5 20
#define OS_CONTEXT_R6 24
#define OS_CONTEXT_R7 28
#define OS_CONTEXT_R8 32
#define OS_CONTEXT_R9 36
#define OS_CONTEXT_R10 40
#define OS_CONTEXT_R11 44
#define OS_CONTEXT_R12 48
#define OS_CONTEXT_R13 52
#define OS_CONTEXT_R14 56
#define OS_CONTEXT_R15 60
#define OS_CONTEXT_R16 64
#define OS_CONTEXT_R17 68
#define OS_CONTEXT_R18 72
#define OS_CONTEXT_R19 76
#define OS_CONTEXT_R20 80
#define OS_CONTEXT_R21 84
#define OS_CONTEXT_R22 88
#define OS_CONTEXT_R23 92
#define OS_CONTEXT_R24 96
#define OS_CONTEXT_R25 100
#define OS_CONTEXT_R26 104
#define OS_CONTEXT_R27 108
#define OS_CONTEXT_R28 112
#define OS_CONTEXT_R29 116
#define OS_CONTEXT_R30 120
#define OS_CONTEXT_R31 124
#define OS_CONTEXT_CR 128
#define OS_CONTEXT_LR 132
#define OS_CONTEXT_CTR 136
#define OS_CONTEXT_XER 140
#define OS_CONTEXT_FPR0 144
#define OS_CONTEXT_FPR1 152
#define OS_CONTEXT_FPR2 160
#define OS_CONTEXT_FPR3 168
#define OS_CONTEXT_FPR4 176
#define OS_CONTEXT_FPR5 184
#define OS_CONTEXT_FPR6 192
#define OS_CONTEXT_FPR7 200
#define OS_CONTEXT_FPR8 208
#define OS_CONTEXT_FPR9 216
#define OS_CONTEXT_FPR10 224
#define OS_CONTEXT_FPR11 232
#define OS_CONTEXT_FPR12 240
#define OS_CONTEXT_FPR13 248
#define OS_CONTEXT_FPR14 256
#define OS_CONTEXT_FPR15 264
#define OS_CONTEXT_FPR16 272
#define OS_CONTEXT_FPR17 280
#define OS_CONTEXT_FPR18 288
#define OS_CONTEXT_FPR19 296
#define OS_CONTEXT_FPR20 304
#define OS_CONTEXT_FPR21 312
#define OS_CONTEXT_FPR22 320
#define OS_CONTEXT_FPR23 328
#define OS_CONTEXT_FPR24 336
#define OS_CONTEXT_FPR25 344
#define OS_CONTEXT_FPR26 352
#define OS_CONTEXT_FPR27 360
#define OS_CONTEXT_FPR28 368
#define OS_CONTEXT_FPR29 376
#define OS_CONTEXT_FPR30 384
#define OS_CONTEXT_FPR31 392
#define OS_CONTEXT_FPSCR 400
#define OS_CONTEXT_SRR0 408
#define OS_CONTEXT_SRR1 412
#define OS_CONTEXT_MODE 416
#define OS_CONTEXT_STATE 418
#define OS_CONTEXT_GQR0 420
#define OS_CONTEXT_GQR1 424
#define OS_CONTEXT_GQR2 428
#define OS_CONTEXT_GQR3 432
#define OS_CONTEXT_GQR4 436
#define OS_CONTEXT_GQR5 440
#define OS_CONTEXT_GQR6 444
#define OS_CONTEXT_GQR7 448
#define __OSCONTEXT_PADDING 452
#define OS_CONTEXT_PSF0 456
#define OS_CONTEXT_PSF1 464
#define OS_CONTEXT_PSF2 472
#define OS_CONTEXT_PSF3 480
#define OS_CONTEXT_PSF4 488
#define OS_CONTEXT_PSF5 496
#define OS_CONTEXT_PSF6 504
#define OS_CONTEXT_PSF7 512
#define OS_CONTEXT_PSF8 520
#define OS_CONTEXT_PSF9 528
#define OS_CONTEXT_PSF10 536
#define OS_CONTEXT_PSF11 544
#define OS_CONTEXT_PSF12 552
#define OS_CONTEXT_PSF13 560
#define OS_CONTEXT_PSF14 568
#define OS_CONTEXT_PSF15 576
#define OS_CONTEXT_PSF16 584
#define OS_CONTEXT_PSF17 592
#define OS_CONTEXT_PSF18 600
#define OS_CONTEXT_PSF19 608
#define OS_CONTEXT_PSF20 616
#define OS_CONTEXT_PSF21 624
#define OS_CONTEXT_PSF22 632
#define OS_CONTEXT_PSF23 640
#define OS_CONTEXT_PSF24 648
#define OS_CONTEXT_PSF25 656
#define OS_CONTEXT_PSF26 664
#define OS_CONTEXT_PSF27 672
#define OS_CONTEXT_PSF28 680
#define OS_CONTEXT_PSF29 688
#define OS_CONTEXT_PSF30 696
#define OS_CONTEXT_PSF31 704
#define OS_CONTEXT_STATE_EXC 0x02u
#define OS_CONTEXT_STATE_FPSAVED 0x01u
typedef struct OSContext {
    /*0x000*/ u32 gpr[32];
    /*0x080*/ u32 cr;
    /*0x084*/ u32 lr;
    /*0x088*/ u32 ctr;
    /*0x08C*/ u32 xer;
    /*0x090*/ f64 fpr[32];
    /*0x190*/ u32 fpscr_pad;
    /*0x194*/ u32 fpscr;
    /*0x198*/ u32 srr0;
    /*0x19C*/ u32 srr1;
    /*0x1A0*/ u16 mode;
    /*0x1A2*/ u16 state;
    /*0x1A4*/ u32 gqr[8];
    /*0x1C4*/ f64 psf[32];
} OSContext;
u32 OSGetStackPointer(void);
void OSDumpContext(OSContext* context);
void OSLoadContext(OSContext* context);
u32 OSSaveContext(OSContext* context);
void OSClearContext(OSContext* context);
OSContext* OSGetCurrentContext(void);
void OSSetCurrentContext(OSContext* context);
void OSLoadFPUContext(OSContext* fpuContext);
void OSSaveFPUContext(OSContext* fpuContext);
u32 OSSwitchStack(u32 newsp);
int OSSwitchFiber(u32 pc, u32 newsp);
void OSInitContext(OSContext* context, u32 pc, u32 newsp);
void OSFillFPUContext(OSContext* context);
typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt,
                                     OSContext* context);
// IWYU pragma: begin_exports
#define _DOLPHIN_OSALARM_H_
typedef struct OSAlarm OSAlarm;
typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context);
struct OSAlarm {
    OSAlarmHandler handler;
    u32 tag;
    OSTime fire;
    OSAlarm* prev;
    OSAlarm* next;
    OSTime period;
    OSTime start;
};
BOOL OSCheckAlarmQueue(void);
void OSInitAlarm(void);
void OSCreateAlarm(OSAlarm* alarm);
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler);
void OSSetAbsAlarm(struct OSAlarm* alarm, long long time,
                   void (*handler)(struct OSAlarm*, struct OSContext*));
void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period,
                        OSAlarmHandler handler);
void OSCancelAlarm(OSAlarm* alarm);
#define _DOLPHIN_OSALLOC_H_
typedef int OSHeapHandle;
extern volatile OSHeapHandle __OSCurrHeap;
void* OSAllocFromHeap(int heap, unsigned long size);
void* OSAllocFixed(void* rstart, void* rend);
void OSFreeToHeap(int heap, void* ptr);
int OSSetCurrentHeap(int heap);
void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps);
int OSCreateHeap(void* start, void* end);
void OSDestroyHeap(int heap);
void OSAddToHeap(int heap, void* start, void* end);
long OSCheckHeap(int heap);
unsigned long OSReferentSize(void* ptr);
void OSDumpHeap(int heap);
void OSVisitAllocated(void (*visitor)(void*, unsigned long));
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
#define _DOLPHIN_OSCACHE_H_
void DCInvalidateRange(void* addr, u32 nBytes);
void DCFlushRange(void* addr, u32 nBytes);
void DCStoreRange(void* addr, u32 nBytes);
void DCFlushRangeNoSync(void* addr, u32 nBytes);
void DCStoreRangeNoSync(void* addr, u32 nBytes);
void DCZeroRange(void* addr, u32 nBytes);
void DCTouchRange(void* addr, u32 nBytes);
void ICInvalidateRange(void* addr, u32 nBytes);
#define LC_BASE_PREFIX 0xE000
#define LC_BASE (LC_BASE_PREFIX << 16)
#define LCGetBase() ((void*) LC_BASE)
void LCEnable(void);
void LCDisable(void);
void LCLoadBlocks(void* destTag, void* srcAddr, u32 numBlocks);
void LCStoreBlocks(void* destAddr, void* srcTag, u32 numBlocks);
u32 LCLoadData(void* destAddr, void* srcAddr, u32 nBytes);
u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes);
u32 LCQueueLength(void);
void LCQueueWait(u32 len);
void LCFlushQueue(void);
void __OSCacheInit(void);
#define _DOLPHIN_OSDC_H_
void DCFlashInvalidate(void);
void DCEnable(void);
void DCDisable(void);
void DCFreeze(void);
void DCUnfreeze(void);
void DCTouchLoad(void* addr);
void DCBlockZero(void* addr);
void DCBlockStore(void* addr);
void DCBlockFlush(void* addr);
void DCBlockInvalidate(void* addr);
#define _DOLPHIN_OSERROR_H_
typedef u16 OSError;
typedef void (*OSErrorHandler)(OSError error, OSContext* context, ...);
#define OS_ERROR_SYSTEM_RESET 0
#define OS_ERROR_MACHINE_CHECK 1
#define OS_ERROR_DSI 2
#define OS_ERROR_ISI 3
#define OS_ERROR_EXTERNAL_INTERRUPT 4
#define OS_ERROR_ALIGNMENT 5
#define OS_ERROR_PROGRAM 6
#define OS_ERROR_FLOATING_POINT 7
#define OS_ERROR_DECREMENTER 8
#define OS_ERROR_SYSTEM_CALL 9
#define OS_ERROR_TRACE 10
#define OS_ERROR_PERFORMACE_MONITOR 11
#define OS_ERROR_BREAKPOINT 12
#define OS_ERROR_SYSTEM_INTERRUPT 13
#define OS_ERROR_THERMAL_INTERRUPT 14
#define OS_ERROR_MAX (OS_ERROR_THERMAL_INTERRUPT + 1)
extern OSErrorHandler OSErrorTable[15];
OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler);
#define _DOLPHIN_OSEXCEPTION_H_
#define __OS_EXCEPTION_SYSTEM_RESET 0
#define __OS_EXCEPTION_MACHINE_CHECK 1
#define __OS_EXCEPTION_DSI 2
#define __OS_EXCEPTION_ISI 3
#define __OS_EXCEPTION_EXTERNAL_INTERRUPT 4
#define __OS_EXCEPTION_ALIGNMENT 5
#define __OS_EXCEPTION_PROGRAM 6
#define __OS_EXCEPTION_FLOATING_POINT 7
#define __OS_EXCEPTION_DECREMENTER 8
#define __OS_EXCEPTION_SYSTEM_CALL 9
#define __OS_EXCEPTION_TRACE 10
#define __OS_EXCEPTION_PERFORMACE_MONITOR 11
#define __OS_EXCEPTION_BREAKPOINT 12
#define __OS_EXCEPTION_SYSTEM_INTERRUPT 13
#define __OS_EXCEPTION_THERMAL_INTERRUPT 14
#define __OS_EXCEPTION_MEMORY_PROTECTION 15
#define __OS_EXCEPTION_MAX (__OS_EXCEPTION_THERMAL_INTERRUPT + 1)
typedef u8 __OSException;
typedef void (*__OSExceptionHandler)(__OSException exception,
                                     OSContext* context);
__OSExceptionHandler __OSSetExceptionHandler(__OSException exception,
                                             __OSExceptionHandler handler);
__OSExceptionHandler __OSGetExceptionHandler(__OSException exception);
#define OS_EXCEPTION_SAVE_GPRS(context) stw r0, OS_CONTEXT_R0(context); stw r1, OS_CONTEXT_R1(context); stw r2, OS_CONTEXT_R2(context); stmw r6, OS_CONTEXT_R6(context); mfspr r0, GQR1; stw r0, OS_CONTEXT_GQR1(context); mfspr r0, GQR2; stw r0, OS_CONTEXT_GQR2(context); mfspr r0, GQR3; stw r0, OS_CONTEXT_GQR3(context); mfspr r0, GQR4; stw r0, OS_CONTEXT_GQR4(context); mfspr r0, GQR5; stw r0, OS_CONTEXT_GQR5(context); mfspr r0, GQR6; stw r0, OS_CONTEXT_GQR6(context); mfspr r0, GQR7; stw r0, OS_CONTEXT_GQR7(context);
#define _DOLPHIN_OSFONT_H_
#define OS_FONT_ENCODE_ANSI 0u
#define OS_FONT_ENCODE_SJIS 1u
#define OS_FONT_SIZE_ANSI (288 + 131072) // 9 sheets
#define OS_FONT_SIZE_SJIS (3840 + 1179648) // 1 sheet
#define OS_FONT_ROM_SIZE_ANSI 0x03000
#define OS_FONT_ROM_SIZE_SJIS 0x4D000
typedef struct OSFontHeader {
    /*0x00*/ u16 fontType;
    u16 firstChar;
    u16 lastChar;
    u16 invalChar;
    /*0x08*/ u16 ascent;
    u16 descent;
    u16 width;
    u16 leading;
    /*0x10*/ u16 cellWidth;
    u16 cellHeight;
    /*0x14*/ u32 sheetSize;
    /*0x18*/ u16 sheetFormat;
    u16 sheetColumn;
    u16 sheetRow;
    u16 sheetWidth;
    /*0x20*/ u16 sheetHeight;
    u16 widthTable;
    u32 sheetImage;
    u32 sheetFullSize;
    u8 c0;
    u8 c1;
    u8 c2;
    u8 c3;
} OSFontHeader;
u16 OSGetFontEncode(void);
BOOL OSInitFont(OSFontHeader* fontData);
u32 OSLoadFont(OSFontHeader* fontData, void* temp);
char* OSGetFontTexture(char* string, void** image, s32* x, s32* y, s32* width);
char* OSGetFontWidth(char* string, s32* width);
char* OSGetFontTexel(char* string, void* image, s32 pos, s32 stride,
                     s32* width);
#define _DOLPHIN_OSIC_H_
void ICFlashInvalidate(void);
void ICEnable(void);
void ICDisable(void);
void ICFreeze(void);
void ICUnfreeze(void);
void ICBlockInvalidate(void* addr);
void ICSync(void);
#define _DOLPHIN_OSINTERRUPT_H_
#define __OS_INTERRUPT_MEM_0 0
#define __OS_INTERRUPT_MEM_1 1
#define __OS_INTERRUPT_MEM_2 2
#define __OS_INTERRUPT_MEM_3 3
#define __OS_INTERRUPT_MEM_ADDRESS 4
#define __OS_INTERRUPT_DSP_AI 5
#define __OS_INTERRUPT_DSP_ARAM 6
#define __OS_INTERRUPT_DSP_DSP 7
#define __OS_INTERRUPT_AI_AI 8
#define __OS_INTERRUPT_EXI_0_EXI 9
#define __OS_INTERRUPT_EXI_0_TC 10
#define __OS_INTERRUPT_EXI_0_EXT 11
#define __OS_INTERRUPT_EXI_1_EXI 12
#define __OS_INTERRUPT_EXI_1_TC 13
#define __OS_INTERRUPT_EXI_1_EXT 14
#define __OS_INTERRUPT_EXI_2_EXI 15
#define __OS_INTERRUPT_EXI_2_TC 16
#define __OS_INTERRUPT_PI_CP 17
#define __OS_INTERRUPT_PI_PE_TOKEN 18
#define __OS_INTERRUPT_PI_PE_FINISH 19
#define __OS_INTERRUPT_PI_SI 20
#define __OS_INTERRUPT_PI_DI 21
#define __OS_INTERRUPT_PI_RSW 22
#define __OS_INTERRUPT_PI_ERROR 23
#define __OS_INTERRUPT_PI_VI 24
#define __OS_INTERRUPT_PI_DEBUG 25
#define __OS_INTERRUPT_PI_HSP 26
#define __OS_INTERRUPT_MAX 32
#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt))
#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0)
#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1)
#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2)
#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3)
#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS)
#define OS_INTERRUPTMASK_MEM (OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS)
#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI)
#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM)
#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP)
#define OS_INTERRUPTMASK_DSP (OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP)
#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI)
#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI)
#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI)
#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC)
#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT)
#define OS_INTERRUPTMASK_EXI_0 (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT)
#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI)
#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC)
#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT)
#define OS_INTERRUPTMASK_EXI_1 (OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT)
#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI)
#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC)
#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
#define OS_INTERRUPTMASK_EXI (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN)
#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH)
#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH)
#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP)
#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI)
#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI)
#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW)
#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR)
#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI)
#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG)
#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP)
#define OS_INTERRUPTMASK_PI (OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | OS_INTERRUPTMASK_PI_HSP)
extern volatile __OSInterrupt __OSLastInterrupt;
extern volatile u32 __OSLastInterruptSrr0;
extern volatile OSTime __OSLastInterruptTime;
__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt,
                                             __OSInterruptHandler handler);
__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt interrupt);
void __OSDispatchInterrupt(__OSException exception, OSContext* context);
OSInterruptMask OSGetInterruptMask(void);
OSInterruptMask OSSetInterruptMask(OSInterruptMask mask);
OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask);
OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask);
#define _DOLPHIN_OSL2_H_
void L2Enable(void);
void L2Disable(void);
void L2GlobalInvalidate(void);
void L2SetDataOnly(BOOL dataOnly);
void L2SetWriteThrough(BOOL writeThrough);
#define _DOLPHIN_OSLC_H_
void LCAllocOneTag(BOOL invalidate, void* tag);
void LCAllocTags(BOOL invalidate, void* startTag, u32 numBlocks);
void LCAlloc(void* addr, u32 nBytes);
void LCAllocNoInvalidate(void* addr, u32 nBytes);
#define _DOLPHIN_OSMESSAGE_H_
#define _DOLPHIN_OSTHREAD_H_
typedef s32 OSPriority;
struct OSThread;
struct OSMutex;
struct OSMutexQueue;
typedef struct OSThread OSThread;
typedef struct OSThreadQueue {
    struct OSThread* head;
    struct OSThread* tail;
} OSThreadQueue;
typedef struct OSThreadLink {
    struct OSThread* next;
    struct OSThread* prev;
} OSThreadLink;
typedef struct OSMutexQueue {
    struct OSMutex* head;
    struct OSMutex* tail;
} OSMutexQueue;
typedef struct OSMutexLink {
    struct OSMutex* next;
    struct OSMutex* prev;
} OSMutexLink;
typedef struct OSThread {
    /*0x000*/ struct OSContext context;
    /*0x2C8*/ u16 state;
    /*0x2CA*/ u16 attr;
    /*0x2CC*/ s32 suspend;
    /*0x2D0*/ OSPriority priority;
    /*0x2D4*/ OSPriority base;
    /*0x2D8*/ void* val;
    /*0x2DC*/ struct OSThreadQueue* queue;
    /*0x2E0*/ struct OSThreadLink link;
    /*0x2E8*/ struct OSThreadQueue queueJoin;
    /*0x2F0*/ struct OSMutex* mutex;
    /*0x2F4*/ struct OSMutexQueue queueMutex;
    /*0x2FC*/ struct OSThreadLink linkActive;
    /*0x304*/ u8* stackBase;
    /*0x308*/ u32* stackEnd;
} OSThread;
enum OS_THREAD_STATE {
    OS_THREAD_STATE_READY = 1,
    OS_THREAD_STATE_RUNNING = 2,
    OS_THREAD_STATE_WAITING = 4,
    OS_THREAD_STATE_MORIBUND = 8,
};
#define OS_PRIORITY_MIN 0 // highest
#define OS_PRIORITY_MAX 31 // lowest
#define OS_PRIORITY_IDLE OS_PRIORITY_MAX
#define OS_THREAD_ATTR_DETACH 0x0001u
#define OS_THREAD_STACK_MAGIC 0xDEADBABE
void OSInitThreadQueue(OSThreadQueue* queue);
void OSSleepThread(OSThreadQueue* queue);
void OSWakeupThread(OSThreadQueue* queue);
s32 OSSuspendThread(OSThread* thread);
s32 OSResumeThread(OSThread* thread);
void OSCancelThread(OSThread* thread);
OSThread* OSGetCurrentThread(void);
s32 OSEnableScheduler(void);
s32 OSDisableScheduler(void);
long OSCheckActiveThreads(void);
int OSCreateThread(struct OSThread* thread, void* (*func)(void*), void* param,
                   void* stack, unsigned long stackSize, long priority,
                   unsigned short attr);
#define IsSuspended(suspend) (suspend > 0)
struct OSMessageQueue {
    struct OSThreadQueue queueSend;
    struct OSThreadQueue queueReceive;
    void* msgArray;
    long msgCount;
    long firstIndex;
    long usedCount;
};
void OSInitMessageQueue(struct OSMessageQueue* mq, void* msgArray,
                        long msgCount);
int OSSendMessage(struct OSMessageQueue* mq, void* msg, long flags);
int OSReceiveMessage(struct OSMessageQueue* mq, void* msg, long flags);
int OSJamMessage(struct OSMessageQueue* mq, void* msg, long flags);
#define _DOLPHIN_OSMODULE_H_
#define OS_MODULE_VERSION 1
typedef struct OSModuleHeader OSModuleHeader;
typedef u32 OSModuleID;
typedef struct OSModuleQueue OSModuleQueue;
typedef struct OSModuleLink OSModuleLink;
typedef struct OSModuleInfo OSModuleInfo;
typedef struct OSSectionInfo OSSectionInfo;
typedef struct OSImportInfo OSImportInfo;
typedef struct OSRel OSRel;
struct OSModuleQueue {
    OSModuleInfo* head;
    OSModuleInfo* tail;
};
struct OSModuleLink {
    OSModuleInfo* next;
    OSModuleInfo* prev;
};
struct OSModuleInfo {
    OSModuleID id; // unique identifier for the module
    OSModuleLink link; // doubly linked list of modules
    u32 numSections; // # of sections
    u32 sectionInfoOffset; // offset to section info table
    u32 nameOffset; // offset to module name
    u32 nameSize; // size of module name
    u32 version; // version number
};
struct OSModuleHeader {
    // CAUTION: info must be the 1st member
    OSModuleInfo info;
    // OS_MODULE_VERSION == 1
    u32 bssSize; // total size of bss sections in bytes
    u32 relOffset;
    u32 impOffset;
    u32 impSize; // size in bytes
    u8 prologSection; // section # for prolog function
    u8 epilogSection; // section # for epilog function
    u8 unresolvedSection; // section # for unresolved function
    u8 bssSection; // section # for bss section (set at run-time)
    u32 prolog; // prolog function offset
    u32 epilog; // epilog function offset
    u32 unresolved; // unresolved function offset
    // OS_MODULE_VERSION == 2
    // OS_MODULE_VERSION == 3
};
#define OSGetSectionInfo(module) ((OSSectionInfo*) (((OSModuleInfo*) (module))->sectionInfoOffset))
struct OSSectionInfo {
    u32 offset;
    u32 size;
};
// OSSectionInfo.offset bit
#define OS_SECTIONINFO_EXEC 0x1
#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1)
struct OSImportInfo {
    OSModuleID id; // external module id
    u32 offset; // offset to OSRel instructions
};
struct OSRel {
    u16 offset; // byte offset from the previous entry
    u8 type;
    u8 section;
    u32 addend;
};
#define R_DOLPHIN_NOP 201 //  C9h current offset += OSRel.offset
#define R_DOLPHIN_SECTION 202 //  CAh current section = OSRel.section
#define R_DOLPHIN_END 203 //  CBh
#define R_DOLPHIN_MRKREF 204 //  CCh
void OSSetStringTable(const void* stringTable);
BOOL OSLink(OSModuleInfo* newModule, void* bss);
BOOL OSUnlink(OSModuleInfo* oldModule);
OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset);
// debugger notification
void OSNotifyLink(void);
void OSNotifyUnlink(void);
#define _DOLPHIN_OSMUTEX_H_
typedef struct OSMutex {
    /*0x00*/ OSThreadQueue queue;
    /*0x08*/ OSThread* thread;
    /*0x0C*/ s32 count;
    /*0x10*/ OSMutexLink link;
} OSMutex;
struct OSCond {
    OSThreadQueue queue;
};
void OSInitMutex(struct OSMutex* mutex);
void OSLockMutex(struct OSMutex* mutex);
void OSUnlockMutex(struct OSMutex* mutex);
BOOL OSTryLockMutex(struct OSMutex* mutex);
void OSInitCond(struct OSCond* cond);
void OSWaitCond(struct OSCond* cond, struct OSMutex* mutex);
void OSSignalCond(struct OSCond* cond);
#define _DOLPHIN_OSREBOOT_H_
typedef void (*RunCallback)(void);
void Run(RunCallback);
void __OSReboot(u32 resetCode, u32 bootDol);
#define _DOLPHIN_OSRESET_H_
#define OS_RESET_RESTART 0
#define OS_RESET_HOTRESET 1
#define OS_RESET_SHUTDOWN 2
struct OSResetFunctionQueue {
    struct OSResetFunctionInfo* head;
    struct OSResetFunctionInfo* tail;
};
typedef BOOL (*OSResetFunction)(BOOL);
typedef struct OSResetFunctionInfo OSResetFunctionInfo;
struct OSResetFunctionInfo {
    OSResetFunction func;
    u32 priority;
    OSResetFunctionInfo* next;
    OSResetFunctionInfo* prev;
};
void OSRegisterResetFunction(OSResetFunctionInfo* info);
void OSUnregisterResetFunction(OSResetFunctionInfo* info);
void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu);
unsigned long OSGetResetCode();
#define _DOLPHIN_OSRESETSW_H_
typedef void (*OSResetCallback)(void);
OSResetCallback OSSetResetCallback(OSResetCallback callback);
BOOL OSGetResetSwitchState();
BOOL OSGetResetButtonState(void);
#define _DOLPHIN_OSRTC_H_
// make the assert happy
#define OS_SOUND_MODE_MONO 0
#define OS_SOUND_MODE_STEREO 1
// make the asserts happy
#define OS_VIDEO_MODE_NTSC 0
#define OS_VIDEO_MODE_MPAL 2
struct SramControl {
    unsigned char sram[64];
    u32 offset;
    int enabled;
    int locked;
    int sync;
    void (*callback)();
};
typedef struct OSSram {
    unsigned short checkSum;
    unsigned short checkSumInv;
    u32 ead0;
    u32 ead1;
    u32 counterBias;
    signed char displayOffsetH;
    unsigned char ntd;
    unsigned char language;
    unsigned char flags;
} OSSram;
typedef struct OSSramEx {
    unsigned char flashID[2][12];
    u32 wirelessKeyboardID;
    unsigned short wirelessPadID[4];
    unsigned char dvdErrorCode;
    unsigned char _padding0;
    unsigned char flashIDCheckSum[2];
    unsigned char _padding1[4];
} OSSramEx;
u32 OSGetSoundMode();
void OSSetSoundMode(u32 mode);
u32 OSGetVideoMode();
void OSSetVideoMode(u32 mode);
unsigned char OSGetLanguage();
void OSSetLanguage(unsigned char language);
u32 OSGetProgressiveMode(void);
void OSSetProgressiveMode(u32 mode);
u16 OSGetWirelessID(s32);
#define _DOLPHIN_OSSERIAL_H
#define _DOLPHIN_HW_REGS_H_
#define __VIRegs ((volatile u16*) 0xCC002000)
#define __PIRegs ((volatile u32*) 0xCC003000)
#define __MEMRegs ((volatile u16*) 0xCC004000)
#define __DSPRegs ((volatile u16*) 0xCC005000)
#define __DIRegs ((volatile u32*) 0xCC006000)
#define __SIRegs ((volatile u32*) 0xCC006400)
#define __EXIRegs ((volatile u32*) 0xCC006800)
#define __AIRegs ((volatile u32*) 0xCC006C00)
// Offsets for __VIRegs
// offsets for __VIRegs[i]
#define VI_VERT_TIMING (0)
#define VI_DISP_CONFIG (1)
#define VI_HORIZ_TIMING_0L (2)
#define VI_HORIZ_TIMING_0U (3)
#define VI_HORIZ_TIMING_1L (4)
#define VI_HORIZ_TIMING_1U (5)
#define VI_VERT_TIMING_ODD (6)
#define VI_VERT_TIMING_ODD_U (7)
#define VI_VERT_TIMING_EVEN (8)
#define VI_VERT_TIMING_EVEN_U (9)
#define VI_BBI_ODD (10) // burst blanking interval
#define VI_BBI_ODD_U (11) // burst blanking interval
#define VI_BBI_EVEN (12) // burst blanking interval
#define VI_BBI_EVEN_U (13) // burst blanking interval
#define VI_TOP_FIELD_BASE_LEFT (14) // top in 2d, top of left pic in 3d
#define VI_TOP_FIELD_BASE_LEFT_U (15) // top in 2d, top of left pic in 3d
#define VI_TOP_FIELD_BASE_RIGHT (16) // top of right pic in 3d
#define VI_TOP_FIELD_BASE_RIGHT_U (17) // top of right pic in 3d
#define VI_BTTM_FIELD_BASE_LEFT (18) // bottom in 2d, bottom of left pic in 3d
#define VI_BTTM_FIELD_BASE_LEFT_U (19) // bottom in 2d, bottom of left pic in 3d
#define VI_BTTM_FIELD_BASE_RIGHT (20) // bottom of right pic in 3d
#define VI_BTTM_FIELD_BASE_RIGHT_U (21) // bottom of right pic in 3d
#define VI_VERT_COUNT (22) // vertical display position
#define VI_HORIZ_COUNT (23) // horizontal display position
#define VI_DISP_INT_0 (24) // display interrupt 0L
#define VI_DISP_INT_0U (25) // display interrupt 0U
#define VI_DISP_INT_1 (26) // display interrupt 1L
#define VI_DISP_INT_1U (27) // display interrupt 1U
#define VI_DISP_INT_2 (28) // display interrupt 2L
#define VI_DISP_INT_2U (29) // display interrupt 2U
#define VI_DISP_INT_3 (30) // display interrupt 3L
#define VI_DISP_INT_3U (31) // display interrupt 3U
#define VI_HSW (36) // horizontal scaling width
#define VI_HSR (37) // horizontal scaling register
#define VI_FCT_0 (38) // filter coefficient table 0L
#define VI_FCT_0U (39) // filter coefficient table 0U
#define VI_FCT_1 (40) // filter coefficient table 1L
#define VI_FCT_1U (41) // filter coefficient table 1U
#define VI_FCT_2 (42) // filter coefficient table 2L
#define VI_FCT_2U (43) // filter coefficient table 2U
#define VI_FCT_3 (44) // filter coefficient table 3L
#define VI_FCT_3U (45) // filter coefficient table 3U
#define VI_FCT_4 (46) // filter coefficient table 4L
#define VI_FCT_4U (47) // filter coefficient table 4U
#define VI_FCT_5 (48) // filter coefficient table 5L
#define VI_FCT_5U (49) // filter coefficient table 5U
#define VI_FCT_6 (50) // filter coefficient table 6L
#define VI_FCT_6U (51) // filter coefficient table 6U
#define VI_CLOCK_SEL (54) // clock select
#define VI_DTV_STAT (55) // DTV status
#define VI_WIDTH (56)
// offsets for __DSPRegs[i]
#define DSP_MAILBOX_IN_HI (0)
#define DSP_MAILBOX_IN_LO (1)
#define DSP_MAILBOX_OUT_HI (2)
#define DSP_MAILBOX_OUT_LO (3)
#define DSP_CONTROL_STATUS (5)
#define DSP_ARAM_SIZE (9)
#define DSP_ARAM_MODE (11)
#define DSP_ARAM_REFRESH (13)
#define DSP_ARAM_DMA_MM_HI (16) // Main mem address
#define DSP_ARAM_DMA_MM_LO (17)
#define DSP_ARAM_DMA_ARAM_HI (18) // ARAM address
#define DSP_ARAM_DMA_ARAM_LO (19)
#define DSP_ARAM_DMA_SIZE_HI (20) // DMA buffer size
#define DSP_ARAM_DMA_SIZE_LO (21)
#define DSP_DMA_START_HI (24) // DMA start address
#define DSP_DMA_START_LO (25)
#define DSP_DMA_CONTROL_LEN (27)
#define DSP_DMA_BYTES_LEFT (29)
#define DSP_DMA_START_FLAG (0x8000) // set to start DSP
#define CHAN_NONE -1
#define SI_MAX_CHAN 4
#define SI_COMCSR_IDX 13
#define SI_STATUS_IDX 14
#define SI_COMCSR_TCINT_MASK (1 << 31)
#define SI_COMCSR_TCINTMSK_MASK (1 << 30)
#define SI_COMCSR_COMERR_MASK (1 << 29)
#define SI_COMCSR_RDSTINT_MASK (1 << 28)
#define SI_COMCSR_RDSTINTMSK_MASK (1 << 27)
// 4 bits of padding
#define SI_COMCSR_OUTLNGTH_MASK (1 << 22) | (1 << 21) | (1 << 20) | (1 << 19) | (1 << 18) | (1 << 17) | (1 << 16)
// 1 bit of padding
#define SI_COMCSR_INLNGTH_MASK (1 << 14) | (1 << 13) | (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8)
// 5 bits of padding
#define SI_COMCSR_CHANNEL_MASK (1 << 2) | (1 << 1)
#define SI_COMCSR_TSTART_MASK (1 << 0)
typedef void (*SITypeAndStatusCallback)(long chan, unsigned long type);
struct SIControl {
    long chan;
    unsigned long poll;
    unsigned long inputBytes;
    void* input;
    void (*callback)(long, unsigned long, struct OSContext*);
};
struct SIPacket {
    long chan;
    void* output;
    unsigned long outputBytes;
    void* input;
    unsigned long inputBytes;
    void (*callback)(long, unsigned long, struct OSContext*);
    long long time;
};
int SIBusy();
BOOL SIIsChanBusy(int chan);
BOOL SIRegisterPollingHandler(__OSInterruptHandler);
BOOL SIUnregisterPollingHandler(__OSInterruptHandler);
void SIInit();
unsigned long SISync();
unsigned long SIGetStatus(int);
void SISetCommand(long chan, unsigned long command);
unsigned long SIGetCommand(long chan);
void SITransferCommands();
unsigned long SISetXY(unsigned long x, unsigned long y);
unsigned long SIEnablePolling(unsigned long poll);
unsigned long SIDisablePolling(unsigned long poll);
int SIGetResponse(long chan, void* data);
int SITransfer(long chan, void* output, unsigned long outputBytes, void* input,
               unsigned long inputBytes,
               void (*callback)(long, unsigned long, struct OSContext*),
               OSTime delay);
unsigned long SIGetType(long chan);
unsigned long SIGetTypeAsync(long chan, SITypeAndStatusCallback callback);
#define _DOLPHIN_OSSTOPWATCH_H_
struct OSStopwatch {
    char* name;
    long long total;
    unsigned long hits;
    long long min;
    long long max;
    long long last;
    int running;
};
void OSInitStopwatch(struct OSStopwatch* sw, char* name);
void OSStartStopwatch(struct OSStopwatch* sw);
void OSStopStopwatch(struct OSStopwatch* sw);
long long OSCheckStopwatch(struct OSStopwatch* sw);
void OSResetStopwatch(struct OSStopwatch* sw);
void OSDumpStopwatch(struct OSStopwatch* sw);
#define _DOLPHIN_OSTIME_H_
// Time base frequency = 1/4 bus clock
#define OS_TIME_SPEED (OS_BUS_CLOCK / 4)
// OS time -> Real time
#define OS_TICKS_TO_SEC(x) ((x) / (OS_TIME_SPEED))
#define OS_TICKS_TO_MSEC(x) ((x) / (OS_TIME_SPEED / 1000))
#define OS_TICKS_TO_USEC(x) (((x) * 8) / (OS_TIME_SPEED / 125000))
#define OS_TICKS_TO_NSEC(x) (((x) * 8000) / (OS_TIME_SPEED / 125000))
// Real time -> OS time
#define OS_SEC_TO_TICKS(x) ((x) * (OS_TIME_SPEED))
#define OS_MSEC_TO_TICKS(x) ((x) * (OS_TIME_SPEED / 1000))
#define OS_USEC_TO_TICKS(x) ((x) * (OS_TIME_SPEED / 125000) / 8)
#define OS_NSEC_TO_TICKS(x) ((x) * (OS_TIME_SPEED / 125000) / 8000)
#define USEC_MAX 1000
#define MSEC_MAX 1000
#define MONTH_MAX 12
#define WEEK_DAY_MAX 7
#define YEAR_DAY_MAX 365
#define SECS_IN_MIN 60
#define SECS_IN_HOUR (SECS_IN_MIN * 60)
#define SECS_IN_DAY (SECS_IN_HOUR * 24)
#define SECS_IN_YEAR (SECS_IN_DAY * 365)
#define BIAS 0xB2575
// IWYU pragma: end_exports
// private macro, maybe shouldn't be defined here?
#define OFFSET(addr, align) (((u32) (addr) & ((align) - 1)))
#define ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1))
#define TRUNC(n, a) (((u32) (n)) & ~((a) - 1))
u32 OSGetPhysicalMemSize(void);
u32 OSGetConsoleSimulatedMemSize(void);
// Upper words of the masks, since UIMM is only 16 bits
#define OS_CACHED_REGION_PREFIX 0x8000
#define OS_UNCACHED_REGION_PREFIX 0xC000
#define OS_PHYSICAL_MASK 0x3FFF
#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16)
#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16)
#define __OSBusClock (*(u32*) (OS_BASE_CACHED | 0x00F8))
#define __OSCoreClock (*(u32*) (OS_BASE_CACHED | 0x00FC))
#define OS_BUS_CLOCK __OSBusClock
#define OS_CORE_CLOCK __OSCoreClock
#define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4)
#define OSTicksToSeconds(ticks) ((ticks) / (OS_TIMER_CLOCK))
#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000))
#define OSTicksToMicroseconds(ticks) ((ticks) * 8 / (OS_TIMER_CLOCK / 125000))
#define OSSecondsToTicks(sec) ((sec) * (OS_TIMER_CLOCK))
#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000))
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
unsigned long OSGetConsoleType(void);
void OSInit(void);
void* OSGetArenaHi(void);
void* OSGetArenaLo(void);
void OSSetArenaHi(void*);
void OSSetArenaLo(void*);
void* OSAllocFromArenaLo(u32 size, u32 align);
void* OSAllocFromArenaHi(u32 size, u32 align);
u32 OSGetPhysicalMemSize(void);
void __OSPSInit();
u32 __OSGetDIConfig(void);
typedef struct OSCalendarTime {
    /*0x00*/ int sec;
    /*0x04*/ int min;
    /*0x08*/ int hour;
    /*0x0C*/ int mday;
    /*0x10*/ int mon;
    /*0x14*/ int year;
    /*0x18*/ int wday;
    /*0x1C*/ int yday;
    /*0x20*/ int msec;
    /*0x24*/ int usec;
} OSCalendarTime;
#define _DOLPHIN_DVD_H_
typedef struct DVDDiskID {
    char gameName[4];
    char company[2];
    u8 diskNumber;
    u8 gameVersion;
    u8 streaming;
    u8 streamingBufSize;
    u8 padding[22];
} DVDDiskID;
typedef struct DVDCommandBlock DVDCommandBlock;
typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
struct DVDCommandBlock {
    /*0x00*/ DVDCommandBlock* next;
    /*0x04*/ DVDCommandBlock* prev;
    /*0x08*/ u32 command;
    /*0x0C*/ s32 state;
    /*0x10*/ u32 offset;
    /*0x14*/ u32 length;
    /*0x18*/ void* addr;
    /*0x1C*/ u32 currTransferSize;
    /*0x20*/ u32 transferredSize;
    /*0x24*/ DVDDiskID* id;
    /*0x28*/ DVDCBCallback callback;
    /*0x2C*/ void* userData;
};
typedef struct DVDFileInfo DVDFileInfo;
typedef void (*DVDCallback)(s32 result, DVDFileInfo* fileInfo);
struct DVDFileInfo {
    /*0x00*/ DVDCommandBlock cb;
    /*0x30*/ u32 startAddr;
    /*0x34*/ u32 length;
    /*0x38*/ DVDCallback callback;
};
typedef struct {
    u32 entryNum;
    u32 location;
    u32 next;
} DVDDir;
typedef struct {
    u32 entryNum;
    BOOL isDir;
    char* name;
} DVDDirEntry;
typedef struct DVDBB2 {
    /* 0x00 */ u32 bootFilePosition;
    /* 0x04 */ u32 FSTPosition;
    /* 0x08 */ u32 FSTLength;
    /* 0x0C */ u32 FSTMaxLength;
    /* 0x10 */ void* FSTAddress;
    /* 0x14 */ u32 userPosition;
    /* 0x18 */ u32 userLength;
    /* 0x1C */ u32 padding0;
} DVDBB2;
typedef struct DVDDriveInfo {
    /* 0x00 */ u16 revisionLevel;
    /* 0x02 */ u16 deviceCode;
    /* 0x04 */ u32 releaseDate;
    /* 0x08 */ u8 padding[24];
} DVDDriveInfo;
void DVDDumpWaitingQueue(void);
int DVDLowRead(void* addr, unsigned long length, unsigned long offset,
               void (*callback)(unsigned long));
int DVDLowSeek(unsigned long offset, void (*callback)(unsigned long));
int DVDLowWaitCoverClose(void (*callback)(unsigned long));
int DVDLowReadDiskID(struct DVDDiskID* diskID,
                     void (*callback)(unsigned long));
int DVDLowStopMotor(void (*callback)(unsigned long));
int DVDLowRequestError(void (*callback)(unsigned long));
int DVDLowInquiry(struct DVDDriveInfo* info, void (*callback)(unsigned long));
int DVDLowAudioStream(unsigned long subcmd, unsigned long length,
                      unsigned long offset, void (*callback)(unsigned long));
int DVDLowRequestAudioStatus(unsigned long subcmd,
                             void (*callback)(unsigned long));
int DVDLowAudioBufferConfig(int enable, unsigned long size,
                            void (*callback)(unsigned long));
void DVDLowReset();
void (*DVDLowSetResetCoverCallback(void (*callback)(unsigned long)))(
    unsigned long);
int DVDLowBreak();
void (*DVDLowClearCallback())(unsigned long);
unsigned long DVDLowGetCoverStatus();
// dvd.c
void DVDInit();
int DVDReadAbsAsyncPrio(struct DVDCommandBlock* block, void* addr, long length,
                        long offset,
                        void (*callback)(long, struct DVDCommandBlock*),
                        long prio);
int DVDSeekAbsAsyncPrio(struct DVDCommandBlock* block, long offset,
                        void (*callback)(long, struct DVDCommandBlock*),
                        long prio);
int DVDReadAbsAsyncForBS(struct DVDCommandBlock* block, void* addr,
                         long length, long offset,
                         void (*callback)(long, struct DVDCommandBlock*));
int DVDReadDiskID(struct DVDCommandBlock* block, struct DVDDiskID* diskID,
                  void (*callback)(long, struct DVDCommandBlock*));
int DVDPrepareStreamAbsAsync(struct DVDCommandBlock* block,
                             unsigned long length, unsigned long offset,
                             void (*callback)(long, struct DVDCommandBlock*));
int DVDCancelStreamAsync(struct DVDCommandBlock* block,
                         void (*callback)(long, struct DVDCommandBlock*));
long DVDCancelStream(struct DVDCommandBlock* block);
int DVDStopStreamAtEndAsync(struct DVDCommandBlock* block,
                            void (*callback)(long, struct DVDCommandBlock*));
long DVDStopStreamAtEnd(struct DVDCommandBlock* block);
int DVDGetStreamErrorStatusAsync(struct DVDCommandBlock* block,
                                 void (*callback)(long,
                                                  struct DVDCommandBlock*));
long DVDGetStreamErrorStatus(struct DVDCommandBlock* block);
int DVDGetStreamPlayAddrAsync(struct DVDCommandBlock* block,
                              void (*callback)(long, struct DVDCommandBlock*));
long DVDGetStreamPlayAddr(struct DVDCommandBlock* block);
int DVDGetStreamStartAddrAsync(struct DVDCommandBlock* block,
                               void (*callback)(long,
                                                struct DVDCommandBlock*));
long DVDGetStreamStartAddr(struct DVDCommandBlock* block);
int DVDGetStreamLengthAsync(struct DVDCommandBlock* block,
                            void (*callback)(long, struct DVDCommandBlock*));
long DVDGetStreamLength(struct DVDCommandBlock* block);
int DVDChangeDiskAsyncForBS(struct DVDCommandBlock* block,
                            void (*callback)(long, struct DVDCommandBlock*));
int DVDChangeDiskAsync(struct DVDCommandBlock* block, struct DVDDiskID* id,
                       void (*callback)(long, struct DVDCommandBlock*));
long DVDChangeDisk(struct DVDCommandBlock* block, struct DVDDiskID* id);
int DVDInquiryAsync(struct DVDCommandBlock* block, struct DVDDriveInfo* info,
                    void (*callback)(long, struct DVDCommandBlock*));
long DVDInquiry(struct DVDCommandBlock* block, struct DVDDriveInfo* info);
void DVDReset();
int DVDResetRequired();
long DVDGetCommandBlockStatus(struct DVDCommandBlock* block);
long DVDGetDriveStatus();
int DVDSetAutoInvalidation(int autoInval);
void DVDPause();
void DVDResume();
int DVDCancelAsync(struct DVDCommandBlock* block,
                   void (*callback)(long, struct DVDCommandBlock*));
long DVDCancel(volatile struct DVDCommandBlock* block);
int DVDCancelAllAsync(DVDCBCallback callback);
long DVDCancelAll(void);
struct DVDDiskID* DVDGetCurrentDiskID(void);
BOOL DVDCheckDisk(void);
// dvdfs.c
s32 DVDConvertPathToEntrynum(const char* pathPtr);
BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
BOOL DVDOpen(char* fileName, DVDFileInfo* fileInfo);
BOOL DVDClose(DVDFileInfo* fileInfo);
BOOL DVDGetCurrentDir(char* path, u32 maxlen);
BOOL DVDChangeDir(char* dirName);
BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length,
                      s32 offset, DVDCallback callback, s32 prio);
long DVDReadPrio(struct DVDFileInfo* fileInfo, void* addr, long length,
                 long offset, long prio);
int DVDSeekAsyncPrio(struct DVDFileInfo* fileInfo, long offset,
                     void (*callback)(long, struct DVDFileInfo*), long prio);
long DVDSeekPrio(struct DVDFileInfo* fileInfo, long offset, long prio);
long DVDGetFileInfoStatus(struct DVDFileInfo* fileInfo);
int DVDOpenDir(char* dirName, DVDDir* dir);
int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent);
int DVDCloseDir(DVDDir* dir);
void* DVDGetFSTLocation();
BOOL DVDPrepareStreamAsync(DVDFileInfo* fileInfo, u32 length, u32 offset,
                           DVDCallback callback);
s32 DVDPrepareStream(DVDFileInfo* fileInfo, u32 length, u32 offset);
s32 DVDGetTransferredSize(DVDFileInfo* fileinfo);
#define DVDReadAsync(fileInfo, addr, length, offset, callback) DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
#define DVD_RESULT_GOOD 0
#define DVD_RESULT_FATAL_ERROR -1
#define DVD_RESULT_IGNORED -2
#define DVD_RESULT_CANCELED -6
#define DVD_STATE_FATAL_ERROR -1
#define DVD_STATE_END 0
#define DVD_STATE_BUSY 1
#define DVD_STATE_WAITING 2
#define DVD_STATE_COVER_CLOSED 3
#define DVD_STATE_NO_DISK 4
#define DVD_STATE_COVER_OPEN 5
#define DVD_STATE_WRONG_DISK 6
#define DVD_STATE_MOTOR_STOPPED 7
#define DVD_STATE_PAUSING 8
#define DVD_STATE_IGNORED 9
#define DVD_STATE_CANCELED 10
#define DVD_STATE_RETRY 11
#define DVD_MIN_TRANSFER_SIZE 32
// could be bitfields
#define DVD_INTTYPE_TC 1
#define DVD_INTTYPE_DE 2
// unk type 3
#define DVD_INTTYPE_CVR 4
// DVD Commands
#define DVD_COMMAND_NONE 0
#define DVD_COMMAND_READ 1
#define DVD_COMMAND_SEEK 2
#define DVD_COMMAND_CHANGE_DISK 3
#define DVD_COMMAND_BSREAD 4
#define DVD_COMMAND_READID 5
#define DVD_COMMAND_INITSTREAM 6
#define DVD_COMMAND_CANCELSTREAM 7
#define DVD_COMMAND_STOP_STREAM_AT_END 8
#define DVD_COMMAND_REQUEST_AUDIO_ERROR 9
#define DVD_COMMAND_REQUEST_PLAY_ADDR 10
#define DVD_COMMAND_REQUEST_START_ADDR 11
#define DVD_COMMAND_REQUEST_LENGTH 12
#define DVD_COMMAND_AUDIO_BUFFER_CONFIG 13
#define DVD_COMMAND_INQUIRY 14
#define DVD_COMMAND_BS_CHANGE_DISK 15
// unidentified externs
extern int DVDReadAbsAsyncForBS(struct DVDCommandBlock* block, void* addr,
                                long length, long offset,
                                void (*callback)(long,
                                                 struct DVDCommandBlock*));
extern int DVDReadDiskID(struct DVDCommandBlock* block,
                         struct DVDDiskID* diskID,
                         void (*callback)(long, struct DVDCommandBlock*));
extern void DVDReset(void);
int DVDReadAbsAsyncPrio(
    struct DVDCommandBlock* block /* r29 */, void* addr /* r1+0xC */,
    long length /* r1+0x10 */, long offset /* r1+0x14 */,
    void (*callback)(long, struct DVDCommandBlock*) /* r1+0x18 */,
    long prio /* r31 */);
int DVDSeekAbsAsyncPrio(
    struct DVDCommandBlock* block /* r31 */, long offset /* r28 */,
    void (*callback)(long, struct DVDCommandBlock*) /* r1+0x10 */,
    long prio /* r1+0x14 */);
int DVDPrepareStreamAbsAsync(
    struct DVDCommandBlock* block /* r31 */, unsigned long length /* r1+0xC */,
    unsigned long offset /* r1+0x10 */,
    void (*callback)(long, struct DVDCommandBlock*) /* r1+0x14 */);
void __DVDStoreErrorCode(u32 error);
typedef struct OSBootInfo_s {
    // total size: 0x40
    DVDDiskID DVDDiskID; // offset 0x0, size 0x20
    unsigned long magic; // offset 0x20, size 0x4
    unsigned long version; // offset 0x24, size 0x4
    unsigned long memorySize; // offset 0x28, size 0x4
    unsigned long consoleType; // offset 0x2C, size 0x4
    void* arenaLo; // offset 0x30, size 0x4
    void* arenaHi; // offset 0x34, size 0x4
    void* FSTLocation; // offset 0x38, size 0x4
    unsigned long FSTMaxLength; // offset 0x3C, size 0x4
} OSBootInfo;
OSTick OSGetTick(void);
OSTime OSGetTime(void);
void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td);
OSTime OSCalendarTimeToTicks(OSCalendarTime* td);
BOOL OSEnableInterrupts(void);
BOOL OSDisableInterrupts(void);
BOOL OSRestoreInterrupts(BOOL level);
#define OS_CONSOLE_MASK 0xf0000000
#define OS_CONSOLE_RETAIL 0x00000000
#define OS_CONSOLE_DEVELOPMENT 0x10000000
#define OS_CONSOLE_TDEV 0x20000000
#define OS_CONSOLE_RETAIL4 0x00000004
#define OS_CONSOLE_RETAIL3 0x00000003
#define OS_CONSOLE_RETAIL2 0x00000002
#define OS_CONSOLE_RETAIL1 0x00000001
#define OS_CONSOLE_TDEVHW4 0x20000007
#define OS_CONSOLE_TDEVHW3 0x20000006
#define OS_CONSOLE_TDEVHW2 0x20000005
#define OS_CONSOLE_TDEVHW1 0x20000004
#define OS_CONSOLE_DEVHW4 0x10000007
#define OS_CONSOLE_DEVHW3 0x10000006
#define OS_CONSOLE_DEVHW2 0x10000005
#define OS_CONSOLE_DEVHW1 0x10000004
#define OS_CONSOLE_MINNOW 0x10000003
#define OS_CONSOLE_ARTHUR 0x10000002
#define OS_CONSOLE_PC_EMULATOR 0x10000001
#define OS_CONSOLE_EMULATOR 0x10000000
#define OS_SOUND_MODE_MONO 0
#define OS_SOUND_MODE_STEREO 1
u32 OSGetSoundMode(void);
void OSSetSoundMode(u32 mode);
#define DOLPHIN_ATTRIBUTE_NORETURN
void OSReport(char*, ...);
 void OSPanic(const char* file, int line,
                                        const char* msg, ...);
#define OSRoundUp32B(x) (((u32) (x) + 32 - 1) & ~(32 - 1))
#define OSRoundDown32B(x) (((u32) (x)) & ~(32 - 1))
void* OSPhysicalToCached(u32 paddr);
void* OSPhysicalToUncached(u32 paddr);
u32 OSCachedToPhysical(void* caddr);
u32 OSUncachedToPhysical(void* ucaddr);
void* OSCachedToUncached(void* caddr);
void* OSUncachedToCached(void* ucaddr);
#define OSPhysicalToCached(paddr) ((void*) ((u32) (OS_BASE_CACHED + (u32) (paddr))))
#define OSPhysicalToUncached(paddr) ((void*) ((u32) (OS_BASE_UNCACHED + (u32) (paddr))))
#define OSCachedToPhysical(caddr) ((u32) ((u32) (caddr) - OS_BASE_CACHED))
#define OSUncachedToPhysical(ucaddr) ((u32) ((u32) (ucaddr) - OS_BASE_UNCACHED))
#define OSCachedToUncached(caddr) ((void*) ((u8*) (caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED)))
#define OSUncachedToCached(ucaddr) ((void*) ((u8*) (ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
typedef enum {
    HARDWARE_GDEV = 0,
    HARDWARE_NDEV = 1,
    HARDWARE_BBA = 2
} HardwareType;
typedef int (*DBCommFunc)(void);
typedef void (*DBCommInitFunc)(volatile u8**, __OSInterruptHandler);
typedef int (*DBCommReadFunc)(void*, u32);
typedef int (*DBCommWriteFunc)(const void*, u32);
typedef struct DBCommTable {
    /* 0x00 */ DBCommInitFunc initialize_func;
    /* 0x04 */ DBCommFunc initinterrupts_func;
    /* 0x08 */ DBCommFunc peek_func;
    /* 0x0C */ DBCommReadFunc read_func;
    /* 0x10 */ DBCommWriteFunc write_func;
    /* 0x14 */ DBCommFunc open_func;
    /* 0x18 */ DBCommFunc close_func;
} DBCommTable; // size = 0x1C
int InitMetroTRKCommTable(int);
void TRKUARTInterruptHandler(void);
DSError TRK_InitializeIntDrivenUART(u32, u32, void*);
void EnableEXI2Interrupts(void);
int TRKPollUART(void);
DSError TRK_ReadUARTN(void*, u32);
DSError TRK_WriteUARTN(const void*, u32);
void ReserveEXI2Port(void);
void UnreserveEXI2Port(void);
void TRK_board_display(char*);
void InitializeProgramEndTrap(void);
DSError TRKInitializeIntDrivenUART(u32 r3, u32 r4, u32 r5, void* r6);
#define _METROTRK_FLUSH_CACHE_H
 void TRK_flush_cache(u32 addr, u32 length);
#define _METROTRK_M7XX_M603E_REG_H
#define _METROTRK_PPC_REG_H
/*
 *    Default register block (all registers typically requested by debugger)
 */
typedef u32 DefaultType;
typedef u32 Extended1Type;
typedef u64 FloatType;
typedef FloatType FPType; /* TRK core calls it FPType */
typedef struct Default_PPC {
    /* 0x00 */ DefaultType GPR[32];
    /* 0x80 */ DefaultType PC;
    /* 0x84 */ DefaultType LR;
    /* 0x88 */ DefaultType CR;
    /* 0x8C */ DefaultType CTR;
    /* 0x90 */ DefaultType XER;
} Default_PPC; // size = 0x94
/*
** Register indices
*/
#define TRK_DEFAULT_GPR(x) (x)
#define TRK_DEFAULT_PC 32
#define TRK_DEFAULT_LR 33
#define TRK_DEFAULT_CR 34
#define TRK_DEFAULT_CTR 35
#define TRK_DEFAULT_XER 36
#define TRK_DEFAULT_MIN_REGISTER 0
#define TRK_DEFAULT_MAX_REGISTER (sizeof(Default_PPC) / sizeof(DefaultType) - 1)
#define TRK_DEFAULT_SIZE (sizeof(DefaultType))
typedef struct Float_PPC {
    /* 0x000 */ FloatType FPR[32];
    /* 0x100 */ FloatType FPSCR;
    /* 0x108 */ FloatType FPECR;
} Float_PPC; // size = 0x110
/*
** Register indices
*/
#define TRK_FLOAT_FPR(x) (x)
#define TRK_FLOAT_FPSCR 32
#define TRK_FLOAT_FPECR 33
#define TRK_FLOAT_MIN_REGISTER 0
#define TRK_FLOAT_MAX_REGISTER (sizeof(Float_PPC) / sizeof(FloatType) - 1)
#define TRK_FLOAT_SIZE (sizeof(FloatType))
/*
 * Info stored in NotifyStopped message.
 */
typedef DefaultType PCType;
typedef u32 InstructionType;
typedef u16 ExceptionCauseType;
typedef struct StopInfo_PPC {
    /* 0x00 */ PCType PC;
    /* 0x04 */ InstructionType PCInstruction;
    /* 0x08 */ ExceptionCauseType exceptionID;
} StopInfo_PPC; // size = 0x0A
//
/// Info stored in NotifyException message.
//
typedef StopInfo_PPC ExceptionInfo_PPC;
/*
** Info used by breakpoint code to restore (unset)
** breakpoints.  For software breakpoints it is just
** the saved instruction.
*/
typedef InstructionType BreakpointRestore;
#define TRK_EXTENDED2_SIZE (sizeof(Extended2Type))
/// Special purpose registers
#define SPR_XER 1
#define SPR_LR 8
#define SPR_CTR 9
#define SPR_DSISR 18
#define SPR_DAR 19
#define SPR_DEC 22
#define SPR_SDR1 25
#define SPR_SRR0 26
#define SPR_SRR1 27
#define TBR_TBL_READ 268
#define TBR_TBU_READ 269
#define SPR_SPRG0 272
#define SPR_SPRG1 273
#define SPR_SPRG2 274
#define SPR_SPRG3 275
#define SPR_EAR 282
#define TBR_TBL_WRITE 284
#define TBR_TBU_WRITE 285
#define SPR_PVR 287
#define SPR_IBAT0U 528
#define SPR_IBAT0L 529
#define SPR_IBAT1U 530
#define SPR_IBAT1L 531
#define SPR_IBAT2U 532
#define SPR_IBAT2L 533
#define SPR_IBAT3U 534
#define SPR_IBAT3L 535
#define SPR_DBAT0U 536
#define SPR_DBAT0L 537
#define SPR_DBAT1U 538
#define SPR_DBAT1L 539
#define SPR_DBAT2U 540
#define SPR_DBAT2L 541
#define SPR_DBAT3U 542
#define SPR_DBAT3L 543
#define SPR_IBAT4U 560
#define SPR_IBAT4L 561
#define SPR_IBAT5U 562
#define SPR_IBAT5L 563
#define SPR_IBAT6U 564
#define SPR_IBAT6L 565
#define SPR_IBAT7U 566
#define SPR_IBAT7L 567
#define SPR_DBAT4U 568
#define SPR_DBAT4L 569
#define SPR_DBAT5U 570
#define SPR_DBAT5L 571
#define SPR_DBAT6U 572
#define SPR_DBAT6L 573
#define SPR_DBAT7U 574
#define SPR_DBAT7L 575
#define SPR_GQR0 912
#define SPR_GQR1 913
#define SPR_GQR2 914
#define SPR_GQR3 915
#define SPR_GQR4 916
#define SPR_GQR5 917
#define SPR_GQR6 918
#define SPR_GQR7 919
#define SPR_HID2 920
#define SPR_WPAR 921
#define SPR_DMAU 922
#define SPR_DMAL 923
#define SPR_UMMCR0 936
#define SPR_UPMC1 937
#define SPR_UPMC2 938
#define SPR_USIA 939
#define SPR_UMMCR1 940
#define SPR_UPMC3 941
#define SPR_UPMC4 942
#define SPR_USDA 943
#define SPR_MMCR2 944
#define SPR_BAMR 951
#define SPR_MMCR0 952
#define SPR_PMC1 953
#define SPR_PMC2 954
#define SPR_SIA 955
#define SPR_MMCR1 956
#define SPR_PMC3 957
#define SPR_PMC4 958
#define SPR_SDA 959
#define SPR_DMISS 976
#define SPR_DCMP 977
#define SPR_HASH1 978
#define SPR_HASH2 979
#define SPR_IMISS 980
#define SPR_ICMP 981
#define SPR_RPA 982
#define SPR_HID0 1008
#define SPR_HID1 1009
#define SPR_IABR 1010
#define SPR_HID4 1011
#define SPR_TDCL 1012
#define SPR_DABR 1013
#define SPR_MSSCR0 1014
#define SPR_MSSCR1 1015
#define SPR_L2CR 1017
#define SPR_TDCH 1018
#define SPR_ICTC 1019
#define SPR_THRM1 1020
#define SPR_THRM2 1021
#define SPR_THRM3 1022
#define SPR_FPECR 1022
#define SPR_PIR 1023
/// MSR Register bits
#define COND_EQ 2
#define MSR_SE 0x0400 /* SE bit of MSR (bit 21) */
#define MSR_EE 0x8000 /* EE bit of MSR (bit 16) */
#define MSR_RI 0x0002 /* RI bit of MSR (bit 30) */
#define MSR_DR 0x0010 /* DR bit of MSR (bit 27) */
#define MSR_IR 0x0020 /* IR bit of MSR (bit 26) */
#define MSR_FP 0x2000 /* FP bit of MSR (bit 18) */
#define MSR_VEC 0x02000000 /* VEC bit of MSR (bit 6) */ /* AltiVec support */
typedef struct Extended1_PPC_6xx_7xx {
    /* 0x000 */ u32 SR[16];
    /* 0x040 */ u32 TBL;
    /* 0x044 */ u32 TBU;
    /* 0x048 */ u32 HID0;
    /* 0x04C */ u32 HID1;
    /* 0x050 */ u32 MSR;
    /* 0x054 */ u32 PVR;
    /* 0x058 */ u32 IBAT0U;
    /* 0x05C */ u32 IBAT0L;
    /* 0x060 */ u32 IBAT1U;
    /* 0x064 */ u32 IBAT1L;
    /* 0x068 */ u32 IBAT2U;
    /* 0x06C */ u32 IBAT2L;
    /* 0x070 */ u32 IBAT3U;
    /* 0x074 */ u32 IBAT3L;
    /* 0x078 */ u32 DBAT0U;
    /* 0x07C */ u32 DBAT0L;
    /* 0x080 */ u32 DBAT1U;
    /* 0x084 */ u32 DBAT1L;
    /* 0x088 */ u32 DBAT2U;
    /* 0x08C */ u32 DBAT2L;
    /* 0x090 */ u32 DBAT3U;
    /* 0x094 */ u32 DBAT3L;
    /* 0x098 */ u32 DMISS;
    /* 0x09C */ u32 DCMP;
    /* 0x0A0 */ u32 HASH1;
    /* 0x0A4 */ u32 HASH2;
    /* 0x0A8 */ u32 IMISS;
    /* 0x0AC */ u32 ICMP;
    /* 0x0B0 */ u32 RPA;
    /* 0x0B4 */ u32 SDR1;
    /* 0x0B8 */ u32 DAR;
    /* 0x0BC */ u32 DSISR;
    /* 0x0C0 */ u32 SPRG0;
    /* 0x0C4 */ u32 SPRG1;
    /* 0x0C8 */ u32 SPRG2;
    /* 0x0CC */ u32 SPRG3;
    /* 0x0D0 */ u32 DEC;
    /* 0x0D4 */ u32 IABR;
    /* 0x0D8 */ u32 EAR;
    /* 0x0DC */ u32 DABR;
    /* 0x0E0 */ u32 PMC1;
    /* 0x0E4 */ u32 PMC2;
    /* 0x0E8 */ u32 PMC3;
    /* 0x0EC */ u32 PMC4;
    /* 0x0F0 */ u32 SIA;
    /* 0x0F4 */ u32 MMCR0;
    /* 0x0F8 */ u32 MMCR1;
    /* 0x0FC */ u32 THRM1;
    /* 0x100 */ u32 THRM2;
    /* 0x104 */ u32 THRM3;
    /* 0x108 */ u32 ICTC;
    /* 0x10C */ u32 L2CR;
    /* 0x110 */ u32 UMMCR2;
    /* 0x114 */ u32 UBAMR;
    /* 0x118 */ u32 UMMCR0;
    /* 0x11C */ u32 UPMC1;
    /* 0x120 */ u32 UPMC2;
    /* 0x124 */ u32 USIA;
    /* 0x128 */ u32 UMMCR1;
    /* 0x12C */ u32 UPMC3;
    /* 0x130 */ u32 UPMC4;
    /* 0x134 */ u32 USDA;
    /* 0x138 */ u32 MMCR2;
    /* 0x13C */ u32 BAMR;
    /* 0x140 */ u32 SDA;
    /* 0x144 */ u32 MSSCR0;
    /* 0x148 */ u32 MSSCR1;
    /* 0x14C */ u32 PIR;
    /* 0x150 */ u32 exceptionID;
    /* 0x154 */ u32 GQR[8];
    /* 0x158 */ u32 HID_G;
    /* 0x15C */ u32 WPAR;
    /* 0x160 */ u32 DMA_U;
    /* 0x164 */ u32 DMA_L;
} Extended1_PPC_6xx_7xx; // size = 0x168
#define DS_EXTENDED1_MIN_REGISTER_6xx_7xx 0
#define DS_EXTENDED1_MAX_REGISTER_6xx_7xx (sizeof(Extended1_PPC_6xx_7xx) / sizeof(Extended1Type) - 1)
typedef struct Extended2_PPC_6xx_7xx {
    /* 0x00 */ u32 PSR[32][2];
} Extended2_PPC_6xx_7xx; // size = 0x100
typedef struct ProcessorState_PPC_6xx_7xx {
    /* 0x000 */ Default_PPC Default;
    /* 0x094 */ Float_PPC Float;
    /* 0x1A0 */ Extended1_PPC_6xx_7xx Extended1;
    /* 0x2A0 */ Extended2_PPC_6xx_7xx Extended2;
    /* 0x2A4 */ DefaultType transport_handler_saved_ra;
} ProcessorState_PPC_6xx_7xx; // size = 0x2A8
typedef ProcessorState_PPC_6xx_7xx ProcessorState_PPC;
#define _METROTRK_MAIN_TRK_H
u8 TRKTargetCPUMinorType(void);
int TRK_main(void);
#define _METROTRK_MAINLOOP_H
#define _METROTRK_NUBEVENT_H
typedef unsigned long NubEventID;
typedef enum NubEventType {
    kNullEvent = 0,
    kShutdownEvent = 1,
    kRequestEvent = 2,
    kBreakpointEvent = 3,
    kExceptionEvent = 4,
    kSupportEvent = 5
} NubEventType;
typedef struct NubEvent {
    /* 0x00 */ u8 fType;
    /* 0x04 */ NubEventID fID;
    /* 0x08 */ MessageBufferID fMessageBufferID;
} NubEvent; // size = 0x0C
DSError TRKInitializeEventQueue(void);
bool TRKGetNextEvent(NubEvent*);
DSError TRKPostEvent(NubEvent*);
void* TRKCopyEvent(void* src, void* dst);
void TRKConstructEvent(NubEvent*, int);
void TRKDestructEvent(NubEvent*);
void TRKHandleRequestEvent(NubEvent*);
void TRKHandleSupportEvent(NubEvent* ev);
void TRKIdle(void);
void TRKNubMainLoop(void);
#define __MEM_TRK_H__
 void* TRK_memcpy(void* dst, const void* src, size_t n);
 void* TRK_memset(void* dst, int val, size_t n);
void TRK_fill_mem(void* dest, int val, size_t count);
#define _METROTRK_MEMMAP_H
typedef struct memRange {
    /* 0x00 */ u8* start;
    /* 0x04 */ u8* end;
    /* 0x08 */ bool readable;
    /* 0x0C */ bool writeable;
} memRange; // size = 0x10
const memRange gTRKMemMap[] = { { (u8*) 0x00000000, (u8*) 0xFFFFFFFF, 1,
                                  1 } };
#define GALE01_32A868
/* 32A868 */ void TRKSaveExtended1Block(void);
/* 32AA20 */ void TRKRestoreExtended1Block(void);
#define _METROTRK_MSG_H
typedef struct TRKPacketSeq {
    /* 0x00 */ u16 unk00;
    /* 0x02 */ u8 unk02[6];
} TRKPacketSeq; // size = 0x08
DSError TRKMessageSend(MessageBuffer* buf);
#define _METROTRK_MSGCMD_H
#define DSFetch_s8(_p_) (*((s8*) _p_))
#define DSFetch_s16(_p_) (*((s16*) _p_))
#define DSFetch_s32(_p_) (*((s32*) _p_))
#define DSFetch_s64(_p_) (*((s64*) _p_))
#define DSFetch_u8(_p_) (*((u8*) _p_))
#define DSFetch_u16(_p_) (*((u16*) _p_))
#define DSFetch_u32(_p_) (*((u32*) _p_))
#define DSFetch_u64(_p_) (*((u64*) _p_))
#define DS_PROTOCOL_MAJOR_VERSION_1 1
#define DS_PROTOCOL_MINOR_VERSION_10 10
#define DS_PROTOCOL_MAJOR_VERSION DS_PROTOCOL_MAJOR_VERSION_1
#define DS_PROTOCOL_MINOR_VERSION DS_PROTOCOL_MINOR_VERSION_10
#define DS_KERNEL_MAJOR_VERSION 0
#define DS_KERNEL_MINOR_VERSION 4
typedef enum MessageCommandID {
    kDSPing = 0x00,
    kDSConnect = 0x01,
    kDSDisconnect = 0x02,
    kDSReset = 0x03,
    kDSVersions = 0x04,
    kDSSupportMask = 0x05,
    kDSOverride = 0x07,
    kDSReadMemory = 0x10,
    kDSWriteMemory = 0x11,
    kDSReadRegisters = 0x12,
    kDSWriteRegisters = 0x13,
    kDSSetOption = 0x17,
    kDSContinue = 0x18,
    kDSStep = 0x19,
    kDSStop = 0x1A,
    kDSReplyACK = 0x80,
    kDSReplyNAK = 0xFF,
    kDSNotifyStopped = 0x90,
    kDSNotifyException = 0x91,
    kDSWriteFile = 0xD0,
    kDSReadFile = 0xD1,
    kDSOpenFile = 0xD2,
    kDSCloseFile = 0xD3,
    kDSPositionFile = 0xD4
} MessageCommandID;
#define DS_MIN_MSG_LENGTH 1
#define DS_MIN_REPLY_LENGTH 2
#define DS_MIN_MSG_VERSIONS_LENGTH DS_MIN_MSG_LENGTH
#define DS_MIN_REPLY_VERSIONS_LENGTH (DS_MIN_REPLY_LENGTH + 4)
/*
** CPU Major types.
*/
#define DS_CPU_MAJOR_PPC 0x00
#define DS_CPU_MAJOR_MIPS 0x01
#define DS_CPU_MAJOR_NEC_V8XX 0x02
#define DS_CPU_MAJOR_MOT_DSP 0x03
#define DS_CPU_MAJOR_ARM 0x04
#define DS_CPU_MAJOR_X86 0x05
#define DS_CPU_MAJOR_MCORE 0x06
#define DS_CPU_MAJOR_M68K 0x07 /* includes ColdFire */
#define DS_CPU_MAJOR_SUPERH 0x08
/*
** MIPS CPU minor types.
*/
#define DS_CPU_MIPS_R3000 0x00
#define DS_CPU_MIPS_R3081E 0x01
#define DS_CPU_MIPS_VR4100 0x20
#define DS_CPU_MIPS_VR4300 0x21
#define DS_CPU_MIPS_VR4500 0x22
#define DS_CPU_MIPS_VR4111 0x23
#define DS_CPU_MIPS_TR4101 0x24
#define DS_CPU_MIPS_VR5000 0x40
/*
** PowerPC CPU minor types.
*/
#define DS_CPU_PPC_403 0x00
#define DS_CPU_PPC_5XX 0x20 /* used when not precisely known */
#define DS_CPU_PPC_505 0x21
#define DS_CPU_PPC_509 0x22
#define DS_CPU_PPC_50X 0x27 /* used when not precisely known */
#define DS_CPU_PPC_555 0x28
#define DS_CPU_PPC_603E 0x40
#define DS_CPU_PPC_7XX 0x50 /* used when not precisely known */
#define DS_CPU_PPC_740 0x51
#define DS_CPU_PPC_750 0x52
#define DS_CPU_PPC_7400 0x53
#define DS_CPU_PPC_7410 0x54
#define DS_CPU_PPC_8260 0x61
#define DS_CPU_PPC_8XX 0x80 /* used when not precisely known */
#define DS_CPU_PPC_821 0x81
#define DS_CPU_PPC_823 0x82
#define DS_CPU_PPC_860 0x83
/*
** NEC V8xx CPU minor types.
*/
#define DS_CPU_NEC_V8XX_V810 0x00
#define DS_CPU_NEC_V8XX_V821 0x01
#define DS_CPU_NEC_V8XX_V830 0x10
#define DS_CPU_NEC_V8XX_V831 0x11
#define DS_CPU_NEC_V8XX_V832 0x12
#define DS_CPU_NEC_V8XX_V850 0x20
#define DS_CPU_NEC_V8XX_V853 0x21
#define DS_CPU_NEC_V8XX_V850E 0x22
#define DS_CPU_NEC_V8XX_V850_SA1 0x23
/*
** M68K/Coldfire CPU minor types.
*/
#define DS_CPU_M68K_68000 0x00
#define DS_CPU_M68K_68020 0x02
#define DS_CPU_M68K_68030 0x04
#define DS_CPU_M68K_68040 0x06
#define DS_CPU_M68K_68060 0x08
#define DS_CPU_M68K_68302 0x20
#define DS_CPU_M68K_68306 0x22
#define DS_CPU_M68K_68307 0x24
#define DS_CPU_M68K_68328 0x26
#define DS_CPU_M68K_68EZ328 0x28
#define DS_CPU_M68K_68VZ328 0x29
#define DS_CPU_M68K_68340 0x2A
#define DS_CPU_M68K_68360 0x2C
#define DS_CPU_M68K_CF5102 0x80
#define DS_CPU_M68K_CF5202 0x82
#define DS_CPU_M68K_CF5204 0x84
#define DS_CPU_M68K_CF5206 0x86
#define DS_CPU_M68K_CF5206E 0x88
#define DS_CPU_M68K_CF5307 0x8A
/*
** MCore CPU minor types.
*/
#define DS_CPU_MCORE_200 0x00
#define DS_CPU_MCORE_340 0x20
typedef u8 DSSupportMask[32]; /* 256 bits total */
#define DS_MIN_MSG_SUPPORTMASK_LENGTH DS_MIN_MSG_LENGTH
#define DS_MIN_REPLY_SUPPORTMASK_LENGTH (DS_MIN_REPLY_LENGTH + sizeof(DSSupportMask) + 1)
#define DS_MIN_MSG_READMEMORY_LENGTH (DS_MIN_MSG_LENGTH + 15)
#define DS_MIN_REPLY_READMEMORY_LENGTH (DS_MIN_REPLY_LENGTH + 2)
#define DS_MIN_MSG_WRITEMEMORY_LENGTH (DS_MIN_MSG_LENGTH + 15)
#define DS_MIN_REPLY_WRITEMEMORY_LENGTH (DS_MIN_REPLY_LENGTH + 2)
/// Memory commands options
#define DS_MSG_MEMORY_SEGMENTED 0x01 /* non-flat addr space */
#define DS_MSG_MEMORY_EXTENDED 0x02 /* > 32-bit data addr */
#define DS_MSG_MEMORY_PROTECTED 0x04 /* non-user memory */
#define DS_MSG_MEMORY_USERVIEW 0x08 /* breakpoints are invisible */
#define DS_MSG_MEMORY_SPACE_PROGRAM 0x00
#define DS_MSG_MEMORY_SPACE_DATA 0x40
#define DS_MSG_MEMORY_SPACE_IO 0x80
#define TRK_MSG_HEADER_LENGTH DS_MSG_MEMORY_SPACE_DATA
#define TRK_MSG_REPLY_HEADER_LENGTH (TRK_MSG_HEADER_LENGTH + DS_MIN_MSG_LENGTH)
/// Others
#define DS_MSG_MEMORY_SPACE_MASK 0xC0
#define DS_MAXREADWRITELENGTH 0x0800 /* 2K data portion */
#define DS_MAXMESSAGESIZE (DS_MAXREADWRITELENGTH + 0x80)
/* max size of all message including cmd hdr */
#define MAXMESSAGESIZE DS_MAXMESSAGESIZE
#define DS_MIN_MSG_FLUSHCACHE_LENGTH (DS_MIN_MSG_LENGTH + 9)
#define DS_MIN_REPLY_FLUSHCACHE_LENGTH (DS_MIN_REPLY_LENGTH)
#define DS_MIN_MSG_READREGISTERS_LENGTH (DS_MIN_MSG_LENGTH + 13)
#define DS_MIN_REPLY_READREGISTERS_LENGTH DS_MIN_REPLY_LENGTH
#define DS_MIN_MSG_WRITEREGISTERS_LENGTH (DS_MIN_MSG_LENGTH + 13)
#define DS_MIN_REPLY_WRITEREGISTERS_LENGTH DS_MIN_REPLY_LENGTH
/// Register commands options
typedef enum {
    kDSRegistersDefault = 0x0, /* Default register block */
    kDSRegistersFP = 0x1, /* floating point registers */
    kDSRegistersExtended1 = 0x2, /* Extended register set 1 */
    kDSRegistersExtended2 = 0x3 /* Extended register set 2 */
} DSMessageRegisterOptions;
#define DS_MIN_MSG_STEP_COUNT_LENGTH (DS_MIN_MSG_LENGTH + 10)
#define DS_MIN_MSG_STEP_RANGE_LENGTH (DS_MIN_MSG_LENGTH + 17)
#define DS_MIN_MSG_STEP_LENGTH (DS_MIN_MSG_STEP_COUNT_LENGTH)
#define DS_MIN_REPLY_STEP_LENGTH DS_MIN_REPLY_LENGTH
/// Step command options
typedef enum {
    kDSStepIntoCount = 0x00, /* Exec count instructions & stop */
    kDSStepIntoRange = 0x01, /* Exec until PC is out of specified range */
    kDSStepOverCount = 0x10, /* Step over 1*count instructions & stop */
    kDSStepOverRange = 0x11 /* Step over until PC is out of specified range */
} DSMessageStepOptions;
/*
** These are the predefined file handles.  Additional files may
** be opened via the kDSOpenFile command.  New file handles
** returned by that command may be used in addition to the
** ones defined here.
*/
typedef enum DSFileHandle {
    kDSStdin = 0x00,
    kDSStdout = 0x01,
    kDSStderr = 0x02
} DSFileHandle;
/*
** The result of an I/O command can be any one of the following.
*/
typedef enum DSIOResult {
    kDSIONoError = 0x00,
    kDSIOError = 0x01,
    kDSIOEOF = 0x02
} DSIOResult;
/// Reply errors
typedef enum DSReplyError {
    kDSReplyNoError = 0x00,
    kDSReplyError = 0x01,
    kDSReplyPacketSizeError = 0x02,
    kDSReplyCWDSError = 0x03,
    kDSReplyEscapeError = 0x04,
    kDSReplyBadFCS = 0x05,
    kDSReplyOverflow = 0x06,
    kDSReplySequenceMissing = 0x07,
    kDSReplyUnsupportedCommandError = 0x10,
    kDSReplyParameterError = 0x11,
    kDSReplyUnsupportedOptionError = 0x12,
    kDSReplyInvalidMemoryRange = 0x13,
    kDSReplyInvalidRegisterRange = 0x14,
    kDSReplyCWDSException = 0x15,
    kDSReplyNotStopped = 0x16,
    kDSReplyBreakpointsFull = 0x17,
    kDSReplyBreakpointConflict = 0x18,
    kDSReplyOsError = 0x20,
    kDSReplyInvalidProcessId = 0x21,
    kDSReplyInvalidThreadId = 0x22,
    kDSDebugSecurityError = 0x23
} DSReplyError;
#define _METROTRK_MSGHNDLR_H
typedef struct msgbuf_t {
    /* 0x00 */ u32 msgLength;
    /// @todo fix enum size shenanigans
    /* 0x04 */ union {
        u8 commandId;
        MessageCommandID commandIdInt;
    };
    /* 0x08 */ union {
        u8 replyError;
        DSReplyError replyErrorInt;
    };
    /* 0x0C */ u32 unk0C;
    /* 0x10 */ u8 unk10[0x30];
} msgbuf_t; // size = 0x40
void TRKMessageIntoReply(MessageBuffer*, MessageCommandID, DSReplyError);
DSError TRKDoUnsupported(MessageBuffer*);
DSError TRKDoCPUType(MessageBuffer*);
DSError TRKDoFlushCache(MessageBuffer*);
bool GetTRKConnected(void);
DSError TRKDoConnect(MessageBuffer* buf);
DSError TRKDoDisconnect(MessageBuffer* buf);
DSError TRKDoReset(MessageBuffer* buf);
DSError TRKDoOverride(MessageBuffer* buf);
DSError TRKDoVersions(MessageBuffer* buf);
DSError TRKDoSupportMask(MessageBuffer* buf);
DSError TRKDoReadMemory(MessageBuffer* buf);
DSError TRKDoWriteMemory(MessageBuffer* buf);
DSError TRKDoReadRegisters(MessageBuffer* buf);
DSError TRKDoWriteRegisters(MessageBuffer* buf);
DSError TRKDoContinue(MessageBuffer* buf);
DSError TRKDoStep(MessageBuffer* buf);
DSError TRKDoStop(MessageBuffer* buf);
DSError TRKDoSetOption(MessageBuffer* buf);
DSError TRKStandardACK(MessageBuffer* b, MessageCommandID commandId,
                       DSReplyError replyError);
#define _METROTRK_NOTIFY_H
DSError TRKDoNotifyStopped(u8 cmdId);
#define GALE01_326AD8
DSError TRKInitializeNub(void);
DSError TRKTerminateNub(void);
void TRKNubWelcome(void);
bool TRKInitializeEndian(void);
extern bool gTRKBigEndian;
#define _METROTRK_PPC_EXCEPT_H
#define PPC_SYSTEMRESET 0x0100
#define PPC_MACHINECHECK 0x0200
#define PPC_DATAACCESSERROR 0x0300
#define PPC_INSTACCESSERROR 0x0400
#define PPC_EXTERNALINTERRUPT 0x0500
#define PPC_ALIGNMENTERROR 0x0600
#define PPC_PROGRAMERROR 0x0700
#define PPC_FPUNAVAILABLE 0x0800
#define PPC_DECREMENTERINTERRUPT 0x0900
#define PPC_RESERVED_0A00 0x0A00
#define PPC_RESERVED_0B00 0x0B00
#define PPC_SYSTEMCALL 0x0C00
#define PPC_TRACE 0x0D00
#define PPC_FPASSIST 0x0E00
#define PPC_PERFORMANCE_MONITOR 0x0F00 /* PPC 740 and 750 */
#define PPC_ALTIVEC_UNAVAILABLE 0x0F20 /* PPC 7400 (Max processor) */
#define PPC5xx_8xx_SOFTWAREEMULATION 0x1000 /* PPC 505, 821, and 860 */
#define PPC8xx_INSTTLBMISS 0x1100 /* PPC 821 and 860 */
#define PPC8xx_DATATLBMISS 0x1200 /* PPC 821 and 860 */
#define PPC8xx_INSTTLBERROR 0x1300 /* PPC 821, 860, and 555 */
#define PPC8xx_DATATLBERROR 0x1400 /* PPC 821, 860, and 555 */
#define PPC_DENORM_DETECT_JAVA_MODE 0x1600 /* PPC 7400 (Max processor) */
#define PPC603E_INSTR_TLB_MISS 0x1000 /* PPC 603e */
#define PPC603E_DATA_LOAD_TLB_MISS 0x1100 /* PPC 603e */
#define PPC603E_DATA_STORE_TLB_MISS 0x1200 /* PPC 603e */
#define PPC7xx_603E_INSTR_ADDR_BREAK 0x1300 /* PPC 603e, 740, 750 */
#define PPC7xx_603E_SYS_MANAGE 0x1400 /* PPC 603e, 740, 750 */
#define PPC_RESERVED_1500 0x1500
#define PPC_RESERVED_1600 0x1600
#define PPC_THERMAL_MANAGE 0x1700 /* PPC 740 and 750 */
#define PPC_RESERVED_1800 0x1800
#define PPC_RESERVED_1900 0x1900
#define PPC_RESERVED_1A00 0x1A00
#define PPC_RESERVED_1B00 0x1B00
#define PPC_DATABREAKPOINT 0x1C00 /* PPC 821, 860, and 505 */
#define PPC_INSTBREAKPOINT 0x1D00 /* PPC 821, 860, and 505 */
#define PPC_PERIPHERALBREAKPOINT 0x1E00 /* PPC 821, 860, and 505 */
#define PPC_NMDEVELOPMENTPORT 0x1F00 /* PPC 821, 860, and 505 */
#define _METROTRK_PPC_MEM_H
static inline u8 ppc_readbyte1(const u8* ptr)
{
    u32* alignedPtr = (u32*) ((u32) ptr & ~3);
    return (u8) (*alignedPtr >> ((3 - ((u32) ptr - (u32) alignedPtr)) << 3));
}
static inline void ppc_writebyte1(const u8* ptr, u8 val)
{
    u32* alignedPtr = (u32*) ((u32) ptr & ~3);
    u32 v = *alignedPtr;
    u32 uVar3 = 0xFF << ((3 - ((u32) ptr - (u32) alignedPtr)) << 3);
    u32 iVar1 = (3 - ((u32) ptr - (u32) alignedPtr)) << 3;
    *alignedPtr = (v & ~uVar3) | (uVar3 & (val << iVar1));
}
#define _METROTRK_PPC_TARGIMPL_H
typedef struct TRKState_PPC {
    /* 0x00 */ DefaultType GPR[32];
    /* 0x80 */ DefaultType LR;
    /* 0x84 */ DefaultType CTR;
    /* 0x88 */ DefaultType XER;
    /* 0x8C */ Extended1Type MSR;
    /* 0x90 */ Extended1Type DAR;
    /* 0x94 */ Extended1Type DSISR;
    /* 0x98 */ bool stopped;
    /* 0x9C */ bool inputActivated;
    /* 0xA0 */ u8* inputPendingPtr;
} TRKState_PPC; // size = 0xA4
extern TRKState_PPC gTRKState;
typedef struct ProcessorRestoreFlags_PPC {
    /* 0x00 */ u8 TBR;
    /* 0x01 */ u8 DEC;
    /* 0x02 */ u8 linker_padding[9 - 2];
} ProcessorRestoreFlags_PPC; // size = 0x09
extern ProcessorRestoreFlags_PPC gTRKRestoreFlags;
extern ProcessorState_PPC gTRKCPUState;
u32 __TRK_get_MSR(void);
void __TRK_set_MSR(register u32 val);
u32 __TRK_get_PVR(void);
u32 __TRK_get_IBAT0U(void);
u32 __TRK_get_IBAT0L(void);
u32 __TRK_get_IBAT1U(void);
u32 __TRK_get_IBAT1L(void);
u32 __TRK_get_IBAT2U(void);
u32 __TRK_get_IBAT2L(void);
u32 __TRK_get_IBAT3U(void);
u32 __TRK_get_IBAT3L(void);
u32 __TRK_get_DBAT0U(void);
u32 __TRK_get_DBAT0L(void);
u32 __TRK_get_DBAT1U(void);
u32 __TRK_get_DBAT1L(void);
u32 __TRK_get_DBAT2U(void);
u32 __TRK_get_DBAT2L(void);
u32 __TRK_get_DBAT3U(void);
u32 __TRK_get_DBAT3L(void);
DSError TRKPPCAccessSPR(void* srcDestPtr, u32 spr, bool read);
DSError TRKPPCAccessPairedSingleRegister(void* srcDestPtr, u32 psr, bool read);
DSError TRKPPCAccessFPRegister(void* srcDestPtr, u32 fpr, bool read);
DSError TRKPPCAccessSpecialReg(void* srcDestPtr, u32* instructionData,
                               bool read);
void TRKPostInterruptEvent(void);
u32 ConvertAddress(u32);
#define _METROTRK_SERPOLL_H
typedef unsigned char FCSType;
typedef enum ReceiverState {
    kWaitFlag = 0,
    kFoundFlag = 1,
    kInFrame = 2,
    kFrameOverflow = 3
} ReceiverState;
typedef struct FramingState {
    /* 0x00 */ MessageBufferID fBufferID;
    /* 0x04 */ MessageBuffer* fBuffer;
    /* 0x08 */ u8 fReceiveState;
    /* 0x0C */ int fEscape;
    /* 0x10 */ FCSType fFCS;
} FramingState; // size = 0x11
void TRKGetInput(void);
void TRKProcessInput(int);
DSError TRKInitializeSerialHandler(void);
DSError TRKTerminateSerialHandler(void);
MessageBufferID TRKTestForPacket(void);
extern void* gTRKInputPendingPtr;
#define _METROTRK_SUPPORT_H
DSError TRKSuppAccessFile(u32, u8*, size_t*, u8*, bool, bool);
DSError TRKRequestSend(MessageBuffer* msgBuf, int* bufferId, u32 p1, u32 p2,
                       int p3);
DSError HandleOpenFileSupportRequest(const char*, u8, u32*, DSIOResult*);
DSError HandleCloseFileSupportRequest(int, DSIOResult*);
DSError HandlePositionFileSupportRequest(u32, u32*, u8, DSIOResult*);
#define _METROTRK_TARGCONT_H
DSError TRKTargetContinue(void);
#define _METROTRK_TARGET_OPTIONS_H
void SetUseSerialIO(u8);
u8 GetUseSerialIO(void);
#define _METROTRK_TARGIMPL_H
typedef enum ValidMemoryOptions {
    kValidMemoryReadable = 0,
    kValidMemoryWriteable = 1
} ValidMemoryOptions;
typedef enum MemoryAccessOptions {
    kUserMemory = 0,
    kDebuggerMemory = 1
} MemoryAccessOptions;
typedef struct DSVersions {
    /* 0x00 */ u8 kernelMajor;
    /* 0x01 */ u8 kernelMinor;
    /* 0x02 */ u8 protocolMajor;
    /* 0x03 */ u8 protocolMinor;
} DSVersions; // size = 0x04
typedef struct DSCPUType {
    /* 0x00 */ u8 cpuMajor;
    /* 0x01 */ u8 cpuMinor;
    /* 0x02 */ u8 bigEndian;
    /* 0x03 */ u8 defaultTypeSize;
    /* 0x04 */ u8 fpTypeSize;
    /* 0x05 */ u8 extended1TypeSize;
    /* 0x06 */ u8 extended2TypeSize;
} DSCPUType; // size = 0x07
OSThreadQueue __OSActiveThreadQueue ;
OSThread* __OSCurrentThread ;
void TRKTargetSetStopped(bool);
void TRKTargetSetInputPendingPtr(void*);
DSError TRKTargetAccessMemory(void*, u32, size_t*, MemoryAccessOptions, bool);
DSError TRKTargetAccessDefault(u32, u32, MessageBuffer*, size_t*, bool);
DSError TRKTargetAccessFP(u32 firstRegister, u32 lastRegister,
                          MessageBuffer* b, size_t* registerStorageSize,
                          s32 read);
DSError TRKTargetAccessExtended1(u32 firstRegister, u32 lastRegister,
                                 MessageBuffer* b, size_t* registerStorageSize,
                                 s32 read);
DSError TRKTargetAccessExtended2(u32, u32, MessageBuffer*, size_t*, bool);
DSError TRKTargetVersions(DSVersions*);
DSError TRKTargetSupportMask(DSSupportMask*);
DSError TRKTargetCheckException(void);
void TRKSwapAndGo(void);
DSError TRKTargetInterrupt(NubEvent*);
DSError TRKTargetAddStopInfo(MessageBuffer*);
void TRKTargetAddExceptionInfo(MessageBuffer*);
DSError TRKTargetSingleStep(u32, bool);
DSError TRKTargetStepOutOfRange(u32, u32, bool);
u32 TRKTargetGetPC(void);
DSError TRKTargetSupportRequest(void);
DSError TRKTargetFlushCache(u8, u32, u32);
bool TRKTargetStopped(void);
DSError TRKTargetStop(void);
void TRKInterruptHandler(u16);
DSError TRKTargetCPUType(DSCPUType* cpuType);
void TRKInterruptHandlerEnableInterrupts(void);
bool TRKTargetStepDone(void);
DSError TRKTargetDoStep(void);
#define _METROTRK_TARGSUPP_H
extern u32 TRKAccessFile(u32, u32, u32*, u8*);
extern u32 TRKOpenFile(u32, u32, u32*, u8*);
extern u32 TRKCloseFile(u32, u32);
extern u32 TRKPositionFile(u32, u32, u32*, u8*);
#define _METROTRK_TRK_H
#define _METROTRK_USR_PUT_H
void usr_puts_serial(const char* msg);
void usr_put_initialize(void);
#define RUNTIME_GECKO_EXCEPTIONPPC_H
typedef struct __eti_init_info {
    void* eti_start;
    void* eti_end;
    void* code_start;
    unsigned long code_size;
} __eti_init_info;
int __register_fragment(__eti_init_info*, char* TOC);
void __unregister_fragment(int fragmentID);
#define RUNTIME___INIT_CPP_EXCEPTIONS_H
void __fini_cpp_exceptions(void);
void __init_cpp_exceptions(void);
void __destroy_global_chain(void);
#define RUNTIME_GLOBAL_DESTRUCTOR_CHAIN_H
void __destroy_global_chain(void);
#define RUNTIME_RUNTIME_H
 void __div2u(void);
 void __div2i(void);
 void __mod2u(void);
 void __mod2i(void);
 void __shl2i(void);
 void __shr2u(void);
 void __shr2i(void);
 void __cvt_sll_dbl(void);
 void __cvt_ull_dbl(void);
 void __cvt_sll_flt(void);
 void __cvt_ull_flt(void);
 u64 __cvt_dbl_usll(double);
 void __cvt_dbl_ull(void);
 unsigned long __cvt_fp2unsigned(register double d);
/** @file
 * This header contains macros emitted by m2c in "valid syntax" mode,
 * which can be enabled by passing `--valid-syntax` on the command line.
 *
 * In this mode, unhandled types and expressions are emitted as macros so
 * that the output is compilable without human intervention.
 */
#define M2C_MACROS_H
/* Unknown types */
typedef s32 M2C_UNK;
typedef s8 M2C_UNK8;
typedef s16 M2C_UNK16;
typedef s32 M2C_UNK32;
typedef s64 M2C_UNK64;
/* Unknown field access, like `*(type_ptr) &expr->unk_offset` */
#define M2C_FIELD(expr, type_ptr, offset) (*(type_ptr) ((s8*) (expr) + (offset)))
/* Bitwise (reinterpret) cast */
#define M2C_BITWISE(type, expr) ((type) (expr))
/* Unaligned reads */
#define M2C_LWL(expr) (expr)
#define M2C_FIRST3BYTES(expr) (expr)
#define M2C_UNALIGNED32(expr) (expr)
/* Unhandled instructions */
#define M2C_ERROR(desc) (0)
#define M2C_TRAP_IF(cond) (0)
#define M2C_BREAK() (0)
#define M2C_SYNC() (0)
/* Carry bit from partially-implemented instructions */
#define M2C_CARRY 0
/* Memcpy patterns */
#define M2C_MEMCPY_ALIGNED memcpy
#define M2C_MEMCPY_UNALIGNED memcpy
#define GALE01_028B9C
#define MELEE_CM_FORWARD_H
#define HSD_GOBJ_CLASS_CAMERA 19
typedef enum CameraType {
    CAMERA_STANDARD = 0, ///< mode used during normal gameplay
    CAMERA_PAUSE = 1, ///< mode used during pause menu
    CAMERA_TRAINING_MENU = 2, ///< mode used when the training menu is open
    CAMERA_CLEAR = 3, ///< camera zooms in on the target. gets set when
                              // clearing a stage 1p modes
    CAMERA_FIXED = 4,
    CAMERA_FREE =
        5, ///< used in training mode, and special melee "Camera Mode"
    CAMERA_BOSS_INTRO =
        6, ///< used during master/crazy hand match spawn. rotates
           // around the player then the boss
    CAMERA_DEBUG_FOLLOW =
        7, ///< follows the player, but can change pos/rotation offset
    CAMERA_DEBUG_FREE = 8,
} CameraType;
#define CAM_BOUNDS_INSIDE 0
#define CAM_BOUNDS_OUTSIDE_TOP (1 << 0) ///< 0x1
#define CAM_BOUNDS_OUTSIDE_BOTTOM (1 << 1) ///< 0x2
#define CAM_BOUNDS_OUTSIDE_LEFT (1 << 2) ///< 0x4
#define CAM_BOUNDS_OUTSIDE_RIGHT (1 << 3) ///< 0x8
typedef struct Camera Camera;
typedef struct CameraBounds CameraBounds;
typedef struct Camera_x2D0 Camera_x2D0;
typedef struct CameraQuake CameraQuake;
typedef struct CmSubject CmSubject;
typedef struct CameraTransformState CameraTransformState;
typedef struct CameraUnkGlobals CameraUnkGlobals;
typedef struct CameraDebugMode CameraDebugMode;
typedef struct CameraModeCallbacks CameraModeCallbacks;
typedef struct CameraInputs CameraInputs;
/// @remarks @c CmSnapStatus_Sleep is named by an assert in
/// #cmSnap_800315C8.
typedef enum CmSnapStatus {
    /* 0x0 */ CmSnapStatus_Sleep,
    /* 0x1 */ CmSnapStatus_Unk1,
    /* 0x2 */ CmSnapStatus_Unk2,
    /* 0x3 */ CmSnapStatus_Unk3,
    /* 0x4 */ CmSnapStatus_Unk4,
    /* 0x5 */ CmSnapStatus_Unk5,
} CmSnapStatus;
typedef enum CmSubjectState {
    /* 0x0 */ CmSubjectState_Active, ///< always framed by a camera
    /* 0x1 */ CmSubjectState_Inactive, ///< never framed by a camera
    /* 0x2 */ CmSubjectState_Auto, ///< framed only when inside the camera
                                   ///< bounds, inactive otherwise. (eg. Items,
                                   ///< Arwing, etc)
} CmSubjectState;
typedef enum CmQuakeKind {
    /* 0x0 */ QuakeKind_None,
    /* 0x1 */ QuakeKind_Loop,
    /* 0x2 */ QuakeKind_Small,
    /* 0x3 */ QuakeKind_Medium,
    /* 0x4 */ QuakeKind_Large,
    /* 0x5 */ QuakeKind_Count
} CmQuakeKind;
#define SYSDOLPHIN_BASELIB_FORWARD_H
typedef struct GObjFuncs GObjFuncs;
typedef struct HSD_AnimJoint HSD_AnimJoint;
typedef struct HSD_AObj HSD_AObj;
typedef struct HSD_AObjDesc HSD_AObjDesc;
typedef struct HSD_Archive HSD_Archive;
typedef struct HSD_ArchiveExternInfo HSD_ArchiveExternInfo;
typedef struct HSD_ArchiveHeader HSD_ArchiveHeader;
typedef struct HSD_ArchivePublicInfo HSD_ArchivePublicInfo;
typedef struct HSD_ArchiveRelocationInfo HSD_ArchiveRelocationInfo;
typedef struct HSD_ByteCodeExpDesc HSD_ByteCodeExpDesc;
typedef struct HSD_CameraAnim HSD_CameraAnim;
typedef struct HSD_CameraDescCommon HSD_CameraDescCommon;
typedef struct HSD_CameraDescFrustum HSD_CameraDescFrustum;
typedef struct HSD_CameraDescPerspective HSD_CameraDescPerspective;
typedef struct HSD_CObj HSD_CObj;
typedef struct HSD_CObjInfo HSD_CObjInfo;
typedef struct HSD_DevCom HSD_DevCom;
typedef struct HSD_DObj HSD_DObj;
typedef struct HSD_DObjDesc HSD_DObjDesc;
typedef struct HSD_DObjInfo HSD_DObjInfo;
typedef struct HSD_Envelope HSD_Envelope;
typedef struct HSD_EnvelopeDesc HSD_EnvelopeDesc;
typedef struct HSD_Exp HSD_Exp;
typedef struct HSD_ExpDesc HSD_ExpDesc;
typedef struct HSD_FObj HSD_FObj;
typedef struct HSD_Fog HSD_Fog;
typedef struct HSD_FogAdj HSD_FogAdj;
typedef struct HSD_FogAdjDesc HSD_FogAdjDesc;
typedef struct HSD_FogAdjInfo HSD_FogAdjInfo;
typedef struct HSD_FogDesc HSD_FogDesc;
typedef struct HSD_FogInfo HSD_FogInfo;
typedef struct HSD_Generator HSD_Generator;
typedef struct HSD_GObj HSD_GObj;
typedef struct HSD_GObjProc HSD_GObjProc;
typedef struct HSD_Hash HSD_Hash;
typedef struct HSD_HashEntry HSD_HashEntry;
typedef struct HSD_IKHint HSD_IKHint;
typedef struct HSD_IKHintDesc HSD_IKHintDesc;
typedef struct HSD_ImageDesc HSD_ImageDesc;
typedef struct HSD_JObj HSD_JObj;
typedef struct HSD_Joint HSD_Joint;
typedef struct HSD_LightAnim HSD_LightAnim;
typedef struct HSD_LightAttn HSD_LightAttn;
typedef struct HSD_LightDesc HSD_LightDesc;
typedef struct HSD_LightPoint HSD_LightPoint;
typedef struct HSD_LightPointDesc HSD_LightPointDesc;
typedef struct HSD_LightSpot HSD_LightSpot;
typedef struct HSD_LightSpotDesc HSD_LightSpotDesc;
typedef struct HSD_LObj HSD_LObj;
typedef struct HSD_LObjInfo HSD_LObjInfo;
typedef struct HSD_MatAnimJoint HSD_MatAnimJoint;
typedef struct HSD_Material HSD_Material;
typedef struct HSD_MObj HSD_MObj;
typedef struct HSD_MObjInfo HSD_MObjInfo;
typedef struct HSD_Obj HSD_Obj;
typedef struct HSD_PadData HSD_PadData;
typedef struct HSD_PadRumbleListData HSD_PadRumbleListData;
typedef struct HSD_PadStatus HSD_PadStatus;
typedef struct HSD_Particle HSD_Particle;
typedef struct HSD_PEDesc HSD_PEDesc;
typedef struct HSD_PObj HSD_PObj;
typedef struct HSD_PObjDesc HSD_PObjDesc;
typedef struct HSD_PObjInfo HSD_PObjInfo;
typedef struct HSD_psAppSRT HSD_psAppSRT;
typedef struct HSD_RObj HSD_RObj;
typedef struct HSD_RObjAnimJoint HSD_RObjAnimJoint;
typedef struct HSD_RObjDesc HSD_RObjDesc;
typedef struct HSD_RumbleData HSD_RumbleData;
typedef struct HSD_Rvalue HSD_Rvalue;
typedef struct HSD_RvalueList HSD_RvalueList;
typedef struct HSD_Shadow HSD_Shadow;
typedef struct HSD_ShapeAnim HSD_ShapeAnim;
typedef struct HSD_ShapeAnimDObj HSD_ShapeAnimDObj;
typedef struct HSD_ShapeAnimJoint HSD_ShapeAnimJoint;
typedef struct HSD_ShapeSet HSD_ShapeSet;
typedef struct HSD_ShapeSetDesc HSD_ShapeSetDesc;
typedef struct HSD_SM HSD_SM;
typedef struct HSD_SObj HSD_SObj;
typedef struct HSD_TExpDag HSD_TExpDag;
typedef struct HSD_TExpRes HSD_TExpRes;
typedef struct HSD_Text HSD_Text;
typedef struct HSD_TObj HSD_TObj;
typedef struct HSD_ViewingRect HSD_ViewingRect;
typedef struct HSD_VtxDescList HSD_VtxDescList;
typedef struct HSD_WObj HSD_WObj;
typedef struct HSD_WObjAnim HSD_WObjAnim;
typedef struct HSD_WObjDesc HSD_WObjDesc;
typedef struct HSD_WObjInfo HSD_WObjInfo;
typedef struct PadLibData PadLibData;
typedef struct RumbleCommand RumbleCommand;
typedef struct RumbleInfo RumbleInfo;
typedef struct SisBlock SisBlock;
typedef struct sislib_UnkAlloc3 sislib_UnkAlloc3;
typedef union HSD_CObjDesc HSD_CObjDesc;
typedef union HSD_ObjData HSD_ObjData;
typedef union HSD_Rumble HSD_Rumble;
typedef union HSD_TExp HSD_TExp;
typedef uintptr_t HSD_IDKey;
typedef void (*GObj_RenderFunc)(HSD_GObj* gobj, intptr_t code);
typedef void (*HSD_ObjUpdateFunc)(void* obj, enum_t type, HSD_ObjData* fval);
typedef void (*HSD_DevComCallback)(int, uintptr_t, void*, bool cancelflag);
typedef void (*HSD_GObjEvent)(HSD_GObj* gobj);
typedef void (*HSD_UserDataEvent)(void* user_data);
typedef bool (*HSD_GObjPredicate)(HSD_GObj* gobj);
typedef void (*HSD_GObjInteraction)(HSD_GObj* gobj0, HSD_GObj* gobj1);
typedef void (*HSD_MObjSetupFunc)(HSD_MObj* mobj, u32 rendermode);
#define HSD_A_S_W0 2
#define HSD_DEFAULT_MAX_SHAPE_VERTICES 2000
#define HSD_DEFAULT_MAX_SHAPE_NORMALS 2000
#define POBJ_ANIM (1 << 3)
#define POBJ_SKIN (0 << 12)
#define POBJ_SHAPEANIM (1 << 12)
#define POBJ_ENVELOPE (2 << 12)
#define pobj_type(o) (o->flags & 0x3000)
#define POBJ_CULLFRONT (1 << 14)
#define POBJ_CULLBACK (1 << 15)
#define SHAPESET_AVERAGE 1
#define SHAPESET_ADDITIVE 1 << 1
typedef enum PObjSetupFlag {
    SETUP_NORMAL = 1,
    SETUP_REFLECTION = 2,
    SETUP_HIGHLIGHT = 4,
    SETUP_NORMAL_PROJECTION = 6,
    SETUP_JOINT0 = 1,
    SETUP_JOINT1 = 2,
    SETUP_NONE = 0
} PObjSetupFlag;
typedef enum HSD_TrspMask {
    HSD_TRSP_OPA = 1,
    HSD_TRSP_XLU = 2,
    HSD_TRSP_TEXEDGE = 4,
    HSD_TRSP_ALL = 7,
} HSD_TrspMask;
#define HSD_A_L_LITC_R 9
#define HSD_A_L_LITC_G 10
#define HSD_A_L_LITC_B 11
#define HSD_A_L_VIS 12
#define HSD_A_L_A0 13
#define HSD_A_L_A1 14
#define HSD_A_L_A2 15
#define HSD_A_L_K0 16
#define HSD_A_L_K1 17
#define HSD_A_L_K2 18
#define HSD_A_L_CUTOFF 19
#define HSD_A_L_REFDIST 20
#define HSD_A_L_REFBRIGHT 21
#define HSD_A_L_LITC_A 22
#define LOBJ_AMBIENT (0 << 0)
#define LOBJ_INFINITE (1 << 0)
#define LOBJ_POINT (2 << 0)
#define LOBJ_SPOT (3 << 0)
#define LOBJ_FLAGS_B1 (1 << 1)
#define LOBJ_DIFFUSE (1 << 2)
#define LOBJ_SPECULAR (1 << 3)
#define LOBJ_ALPHA (1 << 4)
#define LOBJ_HIDDEN (1 << 5)
#define LOBJ_RAW_PARAM (1 << 6)
#define LOBJ_DIFF_DIRTY (1 << 7)
#define LOBJ_SPEC_DIRTY (1 << 8)
#define LOBJ_TYPE_MASK (LOBJ_INFINITE | LOBJ_FLAGS_B1)
#define LOBJ_LIGHT_ATTN_NONE 0
#define LOBJ_LIGHT_ATTN 1
#define _DOLPHIN_GX_GXSTRUCT_H_
#define _DOLPHIN_GX_GXENUM_H_
typedef u8 GXBool;
#define GX_FALSE ((GXBool) 0)
#define GX_TRUE ((GXBool) 1)
#define GX_ENABLE ((GXBool) 1)
#define GX_DISABLE ((GXBool) 0)
typedef enum _GXProjectionType {
    GX_PERSPECTIVE,
    GX_ORTHOGRAPHIC,
} GXProjectionType;
typedef enum _GXCompare {
    GX_NEVER,
    GX_LESS,
    GX_EQUAL,
    GX_LEQUAL,
    GX_GREATER,
    GX_NEQUAL,
    GX_GEQUAL,
    GX_ALWAYS,
} GXCompare;
typedef enum _GXAlphaOp {
    GX_AOP_AND,
    GX_AOP_OR,
    GX_AOP_XOR,
    GX_AOP_XNOR,
    GX_MAX_ALPHAOP,
} GXAlphaOp;
typedef enum _GXZFmt16 {
    GX_ZC_LINEAR,
    GX_ZC_NEAR,
    GX_ZC_MID,
    GX_ZC_FAR,
} GXZFmt16;
typedef enum _GXGamma {
    GX_GM_1_0,
    GX_GM_1_7,
    GX_GM_2_2,
} GXGamma;
typedef enum _GXPixelFmt {
    GX_PF_RGB8_Z24,
    GX_PF_RGBA6_Z24,
    GX_PF_RGB565_Z16,
    GX_PF_Z24,
    GX_PF_Y8,
    GX_PF_U8,
    GX_PF_V8,
    GX_PF_YUV420,
} GXPixelFmt;
typedef enum _GXPrimitive {
    GX_QUADS = 0x80,
    GX_TRIANGLES = 0x90,
    GX_TRIANGLESTRIP = 0x98,
    GX_TRIANGLEFAN = 0xA0,
    GX_LINES = 0xA8,
    GX_LINESTRIP = 0xB0,
    GX_POINTS = 0xB8,
} GXPrimitive;
typedef enum _GXVtxFmt {
    GX_VTXFMT0,
    GX_VTXFMT1,
    GX_VTXFMT2,
    GX_VTXFMT3,
    GX_VTXFMT4,
    GX_VTXFMT5,
    GX_VTXFMT6,
    GX_VTXFMT7,
    GX_MAX_VTXFMT,
} GXVtxFmt;
typedef enum _GXAttr {
    GX_VA_PNMTXIDX,
    GX_VA_TEX0MTXIDX,
    GX_VA_TEX1MTXIDX,
    GX_VA_TEX2MTXIDX,
    GX_VA_TEX3MTXIDX,
    GX_VA_TEX4MTXIDX,
    GX_VA_TEX5MTXIDX,
    GX_VA_TEX6MTXIDX,
    GX_VA_TEX7MTXIDX,
    GX_VA_POS,
    GX_VA_NRM,
    GX_VA_CLR0,
    GX_VA_CLR1,
    GX_VA_TEX0,
    GX_VA_TEX1,
    GX_VA_TEX2,
    GX_VA_TEX3,
    GX_VA_TEX4,
    GX_VA_TEX5,
    GX_VA_TEX6,
    GX_VA_TEX7,
    GX_POS_MTX_ARRAY,
    GX_NRM_MTX_ARRAY,
    GX_TEX_MTX_ARRAY,
    GX_LIGHT_ARRAY,
    GX_VA_NBT,
    GX_VA_MAX_ATTR,
    GX_VA_NULL = 0xFF,
} GXAttr;
typedef enum _GXAttrType {
    GX_NONE,
    GX_DIRECT,
    GX_INDEX8,
    GX_INDEX16,
} GXAttrType;
#define _GX_TF_CTF 0x20
#define _GX_TF_ZTF 0x10
typedef enum _GXTexFmt {
    GX_TF_I4 = 0x0,
    GX_TF_I8 = 0x1,
    GX_TF_IA4 = 0x2,
    GX_TF_IA8 = 0x3,
    GX_TF_RGB565 = 0x4,
    GX_TF_RGB5A3 = 0x5,
    GX_TF_RGBA8 = 0x6,
    GX_TF_CMPR = 0xE,
    GX_CTF_R4 = 0x0 | 0x20,
    GX_CTF_RA4 = 0x2 | 0x20,
    GX_CTF_RA8 = 0x3 | 0x20,
    GX_CTF_YUVA8 = 0x6 | 0x20,
    GX_CTF_A8 = 0x7 | 0x20,
    GX_CTF_R8 = 0x8 | 0x20,
    GX_CTF_G8 = 0x9 | 0x20,
    GX_CTF_B8 = 0xA | 0x20,
    GX_CTF_RG8 = 0xB | 0x20,
    GX_CTF_GB8 = 0xC | 0x20,
    GX_TF_Z8 = 0x1 | 0x10,
    GX_TF_Z16 = 0x3 | 0x10,
    GX_TF_Z24X8 = 0x6 | 0x10,
    GX_CTF_Z4 = 0x0 | 0x10 | 0x20,
    GX_CTF_Z8M = 0x9 | 0x10 | 0x20,
    GX_CTF_Z8L = 0xA | 0x10 | 0x20,
    GX_CTF_Z16L = 0xC | 0x10 | 0x20,
    GX_TF_A8 = GX_CTF_A8,
    GX_TF_C4 = 0x8,
    GX_TF_C8 = 0x9,
    GX_TF_C14X2 = 0xA,
} GXTexFmt;
typedef enum _GXTexWrapMode {
    GX_CLAMP,
    GX_REPEAT,
    GX_MIRROR,
    GX_MAX_TEXWRAPMODE,
} GXTexWrapMode;
typedef enum _GXTexFilter {
    GX_NEAR,
    GX_LINEAR,
    GX_NEAR_MIP_NEAR,
    GX_LIN_MIP_NEAR,
    GX_NEAR_MIP_LIN,
    GX_LIN_MIP_LIN,
} GXTexFilter;
typedef enum _GXAnisotropy {
    GX_ANISO_1,
    GX_ANISO_2,
    GX_ANISO_4,
    GX_MAX_ANISOTROPY,
} GXAnisotropy;
typedef enum _GXTexMapID {
    GX_TEXMAP0,
    GX_TEXMAP1,
    GX_TEXMAP2,
    GX_TEXMAP3,
    GX_TEXMAP4,
    GX_TEXMAP5,
    GX_TEXMAP6,
    GX_TEXMAP7,
    GX_MAX_TEXMAP,
    GX_TEXMAP_NULL = 0xFF,
    GX_TEX_DISABLE = 0x100,
} GXTexMapID;
typedef enum _GXTexCoordID {
    GX_TEXCOORD0,
    GX_TEXCOORD1,
    GX_TEXCOORD2,
    GX_TEXCOORD3,
    GX_TEXCOORD4,
    GX_TEXCOORD5,
    GX_TEXCOORD6,
    GX_TEXCOORD7,
    GX_MAX_TEXCOORD,
    GX_TEXCOORD_NULL = 0xFF,
} GXTexCoordID;
typedef enum _GXTevStageID {
    GX_TEVSTAGE0,
    GX_TEVSTAGE1,
    GX_TEVSTAGE2,
    GX_TEVSTAGE3,
    GX_TEVSTAGE4,
    GX_TEVSTAGE5,
    GX_TEVSTAGE6,
    GX_TEVSTAGE7,
    GX_TEVSTAGE8,
    GX_TEVSTAGE9,
    GX_TEVSTAGE10,
    GX_TEVSTAGE11,
    GX_TEVSTAGE12,
    GX_TEVSTAGE13,
    GX_TEVSTAGE14,
    GX_TEVSTAGE15,
    GX_MAX_TEVSTAGE,
} GXTevStageID;
typedef enum _GXTevMode {
    GX_MODULATE,
    GX_DECAL,
    GX_BLEND,
    GX_REPLACE,
    GX_PASSCLR,
} GXTevMode;
typedef enum _GXTexMtxType {
    GX_MTX3x4,
    GX_MTX2x4,
} GXTexMtxType;
typedef enum _GXTexGenType {
    GX_TG_MTX3x4,
    GX_TG_MTX2x4,
    GX_TG_BUMP0,
    GX_TG_BUMP1,
    GX_TG_BUMP2,
    GX_TG_BUMP3,
    GX_TG_BUMP4,
    GX_TG_BUMP5,
    GX_TG_BUMP6,
    GX_TG_BUMP7,
    GX_TG_SRTG,
} GXTexGenType;
typedef enum _GXPosNrmMtx {
    GX_PNMTX0 = 0,
    GX_PNMTX1 = 3,
    GX_PNMTX2 = 6,
    GX_PNMTX3 = 9,
    GX_PNMTX4 = 12,
    GX_PNMTX5 = 15,
    GX_PNMTX6 = 18,
    GX_PNMTX7 = 21,
    GX_PNMTX8 = 24,
    GX_PNMTX9 = 27,
} GXPosNrmMtx;
typedef enum _GXTexMtx {
    GX_TEXMTX0 = 30,
    GX_TEXMTX1 = 33,
    GX_TEXMTX2 = 36,
    GX_TEXMTX3 = 39,
    GX_TEXMTX4 = 42,
    GX_TEXMTX5 = 45,
    GX_TEXMTX6 = 48,
    GX_TEXMTX7 = 51,
    GX_TEXMTX8 = 54,
    GX_TEXMTX9 = 57,
    GX_IDENTITY = 60,
} GXTexMtx;
typedef enum _GXChannelID {
    GX_COLOR0,
    GX_COLOR1,
    GX_ALPHA0,
    GX_ALPHA1,
    GX_COLOR0A0,
    GX_COLOR1A1,
    GX_COLOR_ZERO,
    GX_ALPHA_BUMP,
    GX_ALPHA_BUMPN,
    GX_COLOR_NULL = 0xFF,
} GXChannelID;
typedef enum _GXTexGenSrc {
    GX_TG_POS,
    GX_TG_NRM,
    GX_TG_BINRM,
    GX_TG_TANGENT,
    GX_TG_TEX0,
    GX_TG_TEX1,
    GX_TG_TEX2,
    GX_TG_TEX3,
    GX_TG_TEX4,
    GX_TG_TEX5,
    GX_TG_TEX6,
    GX_TG_TEX7,
    GX_TG_TEXCOORD0,
    GX_TG_TEXCOORD1,
    GX_TG_TEXCOORD2,
    GX_TG_TEXCOORD3,
    GX_TG_TEXCOORD4,
    GX_TG_TEXCOORD5,
    GX_TG_TEXCOORD6,
    GX_TG_COLOR0,
    GX_TG_COLOR1,
} GXTexGenSrc;
typedef enum _GXBlendMode {
    GX_BM_NONE,
    GX_BM_BLEND,
    GX_BM_LOGIC,
    GX_BM_SUBTRACT,
    GX_MAX_BLENDMODE,
} GXBlendMode;
typedef enum _GXBlendFactor {
    GX_BL_ZERO,
    GX_BL_ONE,
    GX_BL_SRCCLR,
    GX_BL_INVSRCCLR,
    GX_BL_SRCALPHA,
    GX_BL_INVSRCALPHA,
    GX_BL_DSTALPHA,
    GX_BL_INVDSTALPHA,
    GX_BL_DSTCLR = GX_BL_SRCCLR,
    GX_BL_INVDSTCLR = GX_BL_INVSRCCLR,
} GXBlendFactor;
typedef enum _GXLogicOp {
    GX_LO_CLEAR,
    GX_LO_AND,
    GX_LO_REVAND,
    GX_LO_COPY,
    GX_LO_INVAND,
    GX_LO_NOOP,
    GX_LO_XOR,
    GX_LO_OR,
    GX_LO_NOR,
    GX_LO_EQUIV,
    GX_LO_INV,
    GX_LO_REVOR,
    GX_LO_INVCOPY,
    GX_LO_INVOR,
    GX_LO_NAND,
    GX_LO_SET,
} GXLogicOp;
typedef enum _GXCompCnt {
    GX_POS_XY = 0,
    GX_POS_XYZ = 1,
    GX_NRM_XYZ = 0,
    GX_NRM_NBT = 1,
    GX_NRM_NBT3 = 2,
    GX_CLR_RGB = 0,
    GX_CLR_RGBA = 1,
    GX_TEX_S = 0,
    GX_TEX_ST = 1,
} GXCompCnt;
typedef enum _GXCompType {
    GX_U8 = 0,
    GX_S8 = 1,
    GX_U16 = 2,
    GX_S16 = 3,
    GX_F32 = 4,
    GX_RGB565 = 0,
    GX_RGB8 = 1,
    GX_RGBX8 = 2,
    GX_RGBA4 = 3,
    GX_RGBA6 = 4,
    GX_RGBA8 = 5,
} GXCompType;
typedef enum _GXPTTexMtx {
    GX_PTTEXMTX0 = 64,
    GX_PTTEXMTX1 = 67,
    GX_PTTEXMTX2 = 70,
    GX_PTTEXMTX3 = 73,
    GX_PTTEXMTX4 = 76,
    GX_PTTEXMTX5 = 79,
    GX_PTTEXMTX6 = 82,
    GX_PTTEXMTX7 = 85,
    GX_PTTEXMTX8 = 88,
    GX_PTTEXMTX9 = 91,
    GX_PTTEXMTX10 = 94,
    GX_PTTEXMTX11 = 97,
    GX_PTTEXMTX12 = 100,
    GX_PTTEXMTX13 = 103,
    GX_PTTEXMTX14 = 106,
    GX_PTTEXMTX15 = 109,
    GX_PTTEXMTX16 = 112,
    GX_PTTEXMTX17 = 115,
    GX_PTTEXMTX18 = 118,
    GX_PTTEXMTX19 = 121,
    GX_PTIDENTITY = 125,
} GXPTTexMtx;
typedef enum _GXTevRegID {
    GX_TEVPREV,
    GX_TEVREG0,
    GX_TEVREG1,
    GX_TEVREG2,
    GX_MAX_TEVREG,
} GXTevRegID;
typedef enum _GXDiffuseFn {
    GX_DF_NONE,
    GX_DF_SIGN,
    GX_DF_CLAMP,
} GXDiffuseFn;
typedef enum _GXColorSrc {
    GX_SRC_REG,
    GX_SRC_VTX,
} GXColorSrc;
typedef enum _GXAttnFn {
    GX_AF_SPEC,
    GX_AF_SPOT,
    GX_AF_NONE,
} GXAttnFn;
typedef enum _GXLightID {
    GX_LIGHT0 = 0x001,
    GX_LIGHT1 = 0x002,
    GX_LIGHT2 = 0x004,
    GX_LIGHT3 = 0x008,
    GX_LIGHT4 = 0x010,
    GX_LIGHT5 = 0x020,
    GX_LIGHT6 = 0x040,
    GX_LIGHT7 = 0x080,
    GX_MAX_LIGHT = 0x100,
    GX_LIGHT_NULL = 0,
} GXLightID;
typedef enum _GXTexOffset {
    GX_TO_ZERO,
    GX_TO_SIXTEENTH,
    GX_TO_EIGHTH,
    GX_TO_FOURTH,
    GX_TO_HALF,
    GX_TO_ONE,
    GX_MAX_TEXOFFSET,
} GXTexOffset;
typedef enum _GXSpotFn {
    GX_SP_OFF,
    GX_SP_FLAT,
    GX_SP_COS,
    GX_SP_COS2,
    GX_SP_SHARP,
    GX_SP_RING1,
    GX_SP_RING2,
} GXSpotFn;
typedef enum _GXDistAttnFn {
    GX_DA_OFF,
    GX_DA_GENTLE,
    GX_DA_MEDIUM,
    GX_DA_STEEP,
} GXDistAttnFn;
typedef enum _GXCullMode {
    GX_CULL_NONE,
    GX_CULL_FRONT,
    GX_CULL_BACK,
    GX_CULL_ALL
} GXCullMode;
typedef enum _GXTevSwapSel {
    GX_TEV_SWAP0 = 0,
    GX_TEV_SWAP1,
    GX_TEV_SWAP2,
    GX_TEV_SWAP3,
    GX_MAX_TEVSWAP
} GXTevSwapSel;
typedef enum _GXTevColorChan {
    GX_CH_RED = 0,
    GX_CH_GREEN,
    GX_CH_BLUE,
    GX_CH_ALPHA
} GXTevColorChan;
typedef enum _GXFogType {
    GX_FOG_NONE = 0,
    GX_FOG_LIN = 2,
    GX_FOG_EXP = 4,
    GX_FOG_EXP2 = 5,
    GX_FOG_REVEXP = 6,
    GX_FOG_REVEXP2 = 7
} GXFogType;
typedef enum _GXTevColorArg {
    GX_CC_CPREV,
    GX_CC_APREV,
    GX_CC_C0,
    GX_CC_A0,
    GX_CC_C1,
    GX_CC_A1,
    GX_CC_C2,
    GX_CC_A2,
    GX_CC_TEXC,
    GX_CC_TEXA,
    GX_CC_RASC,
    GX_CC_RASA,
    GX_CC_ONE,
    GX_CC_HALF,
    GX_CC_KONST,
    GX_CC_ZERO,
    GX_CC_TEXRRR,
    GX_CC_TEXGGG,
    GX_CC_TEXBBB,
    GX_CC_QUARTER = GX_CC_KONST
} GXTevColorArg;
typedef enum _GXTevAlphaArg {
    GX_CA_APREV,
    GX_CA_A0,
    GX_CA_A1,
    GX_CA_A2,
    GX_CA_TEXA,
    GX_CA_RASA,
    GX_CA_KONST,
    GX_CA_ZERO,
    GX_CA_ONE = GX_CA_KONST
} GXTevAlphaArg;
typedef enum _GXTevOp {
    GX_TEV_ADD = 0,
    GX_TEV_SUB = 1,
    GX_TEV_COMP_R8_GT = 8,
    GX_TEV_COMP_R8_EQ = 9,
    GX_TEV_COMP_GR16_GT = 10,
    GX_TEV_COMP_GR16_EQ = 11,
    GX_TEV_COMP_BGR24_GT = 12,
    GX_TEV_COMP_BGR24_EQ = 13,
    GX_TEV_COMP_RGB8_GT = 14,
    GX_TEV_COMP_RGB8_EQ = 15,
    GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT,
    GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ
} GXTevOp;
typedef enum _GXTevBias {
    GX_TB_ZERO,
    GX_TB_ADDHALF,
    GX_TB_SUBHALF,
    GX_MAX_TEVBIAS
} GXTevBias;
typedef enum _GXTevClampMode {
    GX_TC_LINEAR,
    GX_TC_GE,
    GX_TC_EQ,
    GX_TC_LE,
    GX_MAX_TEVCLAMPMODE
} GXTevClampMode;
typedef enum _GXTevScale {
    GX_CS_SCALE_1,
    GX_CS_SCALE_2,
    GX_CS_SCALE_4,
    GX_CS_DIVIDE_2,
    GX_MAX_TEVSCALE
} GXTevScale;
typedef enum _GXTevKColorSel {
    GX_TEV_KCSEL_1 = 0x00,
    GX_TEV_KCSEL_7_8 = 0x01,
    GX_TEV_KCSEL_3_4 = 0x02,
    GX_TEV_KCSEL_5_8 = 0x03,
    GX_TEV_KCSEL_1_2 = 0x04,
    GX_TEV_KCSEL_3_8 = 0x05,
    GX_TEV_KCSEL_1_4 = 0x06,
    GX_TEV_KCSEL_1_8 = 0x07,
    GX_TEV_KCSEL_K0 = 0x0C,
    GX_TEV_KCSEL_K1 = 0x0D,
    GX_TEV_KCSEL_K2 = 0x0E,
    GX_TEV_KCSEL_K3 = 0x0F,
    GX_TEV_KCSEL_K0_R = 0x10,
    GX_TEV_KCSEL_K1_R = 0x11,
    GX_TEV_KCSEL_K2_R = 0x12,
    GX_TEV_KCSEL_K3_R = 0x13,
    GX_TEV_KCSEL_K0_G = 0x14,
    GX_TEV_KCSEL_K1_G = 0x15,
    GX_TEV_KCSEL_K2_G = 0x16,
    GX_TEV_KCSEL_K3_G = 0x17,
    GX_TEV_KCSEL_K0_B = 0x18,
    GX_TEV_KCSEL_K1_B = 0x19,
    GX_TEV_KCSEL_K2_B = 0x1A,
    GX_TEV_KCSEL_K3_B = 0x1B,
    GX_TEV_KCSEL_K0_A = 0x1C,
    GX_TEV_KCSEL_K1_A = 0x1D,
    GX_TEV_KCSEL_K2_A = 0x1E,
    GX_TEV_KCSEL_K3_A = 0x1F
} GXTevKColorSel;
typedef enum _GXTevKAlphaSel {
    GX_TEV_KASEL_1 = 0x00,
    GX_TEV_KASEL_7_8 = 0x01,
    GX_TEV_KASEL_3_4 = 0x02,
    GX_TEV_KASEL_5_8 = 0x03,
    GX_TEV_KASEL_1_2 = 0x04,
    GX_TEV_KASEL_3_8 = 0x05,
    GX_TEV_KASEL_1_4 = 0x06,
    GX_TEV_KASEL_1_8 = 0x07,
    GX_TEV_KASEL_K0_R = 0x10,
    GX_TEV_KASEL_K1_R = 0x11,
    GX_TEV_KASEL_K2_R = 0x12,
    GX_TEV_KASEL_K3_R = 0x13,
    GX_TEV_KASEL_K0_G = 0x14,
    GX_TEV_KASEL_K1_G = 0x15,
    GX_TEV_KASEL_K2_G = 0x16,
    GX_TEV_KASEL_K3_G = 0x17,
    GX_TEV_KASEL_K0_B = 0x18,
    GX_TEV_KASEL_K1_B = 0x19,
    GX_TEV_KASEL_K2_B = 0x1A,
    GX_TEV_KASEL_K3_B = 0x1B,
    GX_TEV_KASEL_K0_A = 0x1C,
    GX_TEV_KASEL_K1_A = 0x1D,
    GX_TEV_KASEL_K2_A = 0x1E,
    GX_TEV_KASEL_K3_A = 0x1F
} GXTevKAlphaSel;
typedef enum _GXTevKColorID {
    GX_KCOLOR0 = 0,
    GX_KCOLOR1,
    GX_KCOLOR2,
    GX_KCOLOR3,
    GX_MAX_KCOLOR
} GXTevKColorID;
typedef enum _GXZTexOp {
    GX_ZT_DISABLE,
    GX_ZT_ADD,
    GX_ZT_REPLACE,
    GX_MAX_ZTEXOP,
} GXZTexOp;
typedef enum _GXIndTexFormat {
    GX_ITF_8,
    GX_ITF_5,
    GX_ITF_4,
    GX_ITF_3,
    GX_MAX_ITFORMAT,
} GXIndTexFormat;
typedef enum _GXIndTexBiasSel {
    GX_ITB_NONE,
    GX_ITB_S,
    GX_ITB_T,
    GX_ITB_ST,
    GX_ITB_U,
    GX_ITB_SU,
    GX_ITB_TU,
    GX_ITB_STU,
    GX_MAX_ITBIAS,
} GXIndTexBiasSel;
typedef enum _GXIndTexAlphaSel {
    GX_ITBA_OFF,
    GX_ITBA_S,
    GX_ITBA_T,
    GX_ITBA_U,
    GX_MAX_ITBALPHA,
} GXIndTexAlphaSel;
typedef enum _GXIndTexMtxID {
    GX_ITM_OFF,
    GX_ITM_0,
    GX_ITM_1,
    GX_ITM_2,
    GX_ITM_S0 = 5,
    GX_ITM_S1,
    GX_ITM_S2,
    GX_ITM_T0 = 9,
    GX_ITM_T1,
    GX_ITM_T2,
} GXIndTexMtxID;
typedef enum _GXIndTexWrap {
    GX_ITW_OFF,
    GX_ITW_256,
    GX_ITW_128,
    GX_ITW_64,
    GX_ITW_32,
    GX_ITW_16,
    GX_ITW_0,
    GX_MAX_ITWRAP,
} GXIndTexWrap;
typedef enum _GXIndTexStageID {
    GX_INDTEXSTAGE0,
    GX_INDTEXSTAGE1,
    GX_INDTEXSTAGE2,
    GX_INDTEXSTAGE3,
    GX_MAX_INDTEXSTAGE,
} GXIndTexStageID;
typedef enum _GXIndTexScale {
    GX_ITS_1,
    GX_ITS_2,
    GX_ITS_4,
    GX_ITS_8,
    GX_ITS_16,
    GX_ITS_32,
    GX_ITS_64,
    GX_ITS_128,
    GX_ITS_256,
    GX_MAX_ITSCALE,
} GXIndTexScale;
typedef enum _GXPerf0 {
    GX_PERF0_VERTICES,
    GX_PERF0_CLIP_VTX,
    GX_PERF0_CLIP_CLKS,
    GX_PERF0_XF_WAIT_IN,
    GX_PERF0_XF_WAIT_OUT,
    GX_PERF0_XF_XFRM_CLKS,
    GX_PERF0_XF_LIT_CLKS,
    GX_PERF0_XF_BOT_CLKS,
    GX_PERF0_XF_REGLD_CLKS,
    GX_PERF0_XF_REGRD_CLKS,
    GX_PERF0_CLIP_RATIO,
    GX_PERF0_TRIANGLES,
    GX_PERF0_TRIANGLES_CULLED,
    GX_PERF0_TRIANGLES_PASSED,
    GX_PERF0_TRIANGLES_SCISSORED,
    GX_PERF0_TRIANGLES_0TEX,
    GX_PERF0_TRIANGLES_1TEX,
    GX_PERF0_TRIANGLES_2TEX,
    GX_PERF0_TRIANGLES_3TEX,
    GX_PERF0_TRIANGLES_4TEX,
    GX_PERF0_TRIANGLES_5TEX,
    GX_PERF0_TRIANGLES_6TEX,
    GX_PERF0_TRIANGLES_7TEX,
    GX_PERF0_TRIANGLES_8TEX,
    GX_PERF0_TRIANGLES_0CLR,
    GX_PERF0_TRIANGLES_1CLR,
    GX_PERF0_TRIANGLES_2CLR,
    GX_PERF0_QUAD_0CVG,
    GX_PERF0_QUAD_NON0CVG,
    GX_PERF0_QUAD_1CVG,
    GX_PERF0_QUAD_2CVG,
    GX_PERF0_QUAD_3CVG,
    GX_PERF0_QUAD_4CVG,
    GX_PERF0_AVG_QUAD_CNT,
    GX_PERF0_CLOCKS,
    GX_PERF0_NONE,
} GXPerf0;
typedef enum _GXPerf1 {
    GX_PERF1_TEXELS,
    GX_PERF1_TX_IDLE,
    GX_PERF1_TX_REGS,
    GX_PERF1_TX_MEMSTALL,
    GX_PERF1_TC_CHECK1_2,
    GX_PERF1_TC_CHECK3_4,
    GX_PERF1_TC_CHECK5_6,
    GX_PERF1_TC_CHECK7_8,
    GX_PERF1_TC_MISS,
    GX_PERF1_VC_ELEMQ_FULL,
    GX_PERF1_VC_MISSQ_FULL,
    GX_PERF1_VC_MEMREQ_FULL,
    GX_PERF1_VC_STATUS7,
    GX_PERF1_VC_MISSREP_FULL,
    GX_PERF1_VC_STREAMBUF_LOW,
    GX_PERF1_VC_ALL_STALLS,
    GX_PERF1_VERTICES,
    GX_PERF1_FIFO_REQ,
    GX_PERF1_CALL_REQ,
    GX_PERF1_VC_MISS_REQ,
    GX_PERF1_CP_ALL_REQ,
    GX_PERF1_CLOCKS,
    GX_PERF1_NONE,
} GXPerf1;
typedef enum _GXVCachePerf {
    GX_VC_POS = 0,
    GX_VC_NRM = 1,
    GX_VC_CLR0 = 2,
    GX_VC_CLR1 = 3,
    GX_VC_TEX0 = 4,
    GX_VC_TEX1 = 5,
    GX_VC_TEX2 = 6,
    GX_VC_TEX3 = 7,
    GX_VC_TEX4 = 8,
    GX_VC_TEX5 = 9,
    GX_VC_TEX6 = 10,
    GX_VC_TEX7 = 11,
    GX_VC_ALL = 15,
} GXVCachePerf;
typedef enum _GXClipMode {
    GX_CLIP_ENABLE = 0,
    GX_CLIP_DISABLE = 1,
} GXClipMode;
typedef enum _GXFBClamp {
    GX_CLAMP_NONE = 0,
    GX_CLAMP_TOP = 1,
    GX_CLAMP_BOTTOM = 2,
} GXFBClamp;
typedef enum _GXCopyMode {
    GX_COPY_PROGRESSIVE = 0,
    GX_COPY_INTLC_EVEN = 2,
    GX_COPY_INTLC_ODD = 3,
} GXCopyMode;
typedef enum _GXAlphaReadMode {
    GX_READ_00,
    GX_READ_FF,
    GX_READ_NONE,
} GXAlphaReadMode;
typedef enum _GXTexCacheSize {
    GX_TEXCACHE_32K,
    GX_TEXCACHE_128K,
    GX_TEXCACHE_512K,
    GX_TEXCACHE_NONE,
} GXTexCacheSize;
typedef enum _GXTlut {
    GX_TLUT0,
    GX_TLUT1,
    GX_TLUT2,
    GX_TLUT3,
    GX_TLUT4,
    GX_TLUT5,
    GX_TLUT6,
    GX_TLUT7,
    GX_TLUT8,
    GX_TLUT9,
    GX_TLUT10,
    GX_TLUT11,
    GX_TLUT12,
    GX_TLUT13,
    GX_TLUT14,
    GX_TLUT15,
    GX_BIGTLUT0,
    GX_BIGTLUT1,
    GX_BIGTLUT2,
    GX_BIGTLUT3,
} GXTlut;
typedef enum _GXTlutFmt {
    GX_TL_IA8,
    GX_TL_RGB565,
    GX_TL_RGB5A3,
    GX_MAX_TLUTFMT,
} GXTlutFmt;
typedef enum _GXTlutSize {
    GX_TLUT_16 = 1,
    GX_TLUT_32 = 2,
    GX_TLUT_64 = 4,
    GX_TLUT_128 = 8,
    GX_TLUT_256 = 16,
    GX_TLUT_512 = 32,
    GX_TLUT_1K = 64,
    GX_TLUT_2K = 128,
    GX_TLUT_4K = 256,
    GX_TLUT_8K = 512,
    GX_TLUT_16K = 1024,
} GXTlutSize;
typedef enum _GXMiscToken {
    GX_MT_XF_FLUSH = 1,
    GX_MT_DL_SAVE_CONTEXT = 2,
    GX_MT_NULL = 0,
} GXMiscToken;
#define _DOLPHIN_VITYPES_H_
#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace))
#define VI_INTERLACE 0
#define VI_NON_INTERLACE 1
#define VI_PROGRESSIVE 2
#define VI_NTSC 0
#define VI_PAL 1
#define VI_MPAL 2
#define VI_DEBUG 3
#define VI_DEBUG_PAL 4
#define VI_EURGB60 5
typedef enum {
    VI_TVMODE_NTSC_INT = (((0) << 2) + (0)),
    VI_TVMODE_NTSC_DS = (((0) << 2) + (1)),
    VI_TVMODE_NTSC_PROG = (((0) << 2) + (2)),
    VI_TVMODE_PAL_INT = (((1) << 2) + (0)),
    VI_TVMODE_PAL_DS = (((1) << 2) + (1)),
    VI_TVMODE_EURGB60_INT = (((5) << 2) + (0)),
    VI_TVMODE_EURGB60_DS = (((5) << 2) + (1)),
    VI_TVMODE_MPAL_INT = (((2) << 2) + (0)),
    VI_TVMODE_MPAL_DS = (((2) << 2) + (1)),
    VI_TVMODE_DEBUG_INT = (((3) << 2) + (0)),
    VI_TVMODE_DEBUG_PAL_INT = (((4) << 2) + (0)),
    VI_TVMODE_DEBUG_PAL_DS = (((4) << 2) + (1)),
    VI_TVMODE_3 = 3,
} VITVMode;
typedef enum {
    VI_XFBMODE_SF = 0,
    VI_XFBMODE_DF
} VIXFBMode;
typedef void (*VIRetraceCallback)(u32 retraceCount);
typedef struct _GXRenderModeObj {
    /*0x00*/ VITVMode viTVmode;
    /*0x04*/ u16 fbWidth;
    /*0x06*/ u16 efbHeight;
    /*0x08*/ u16 xfbHeight;
    /*0x0A*/ u16 viXOrigin;
    /*0x0C*/ u16 viYOrigin;
    /*0x0E*/ u16 viWidth;
    /*0x10*/ u16 viHeight;
    /*0x14*/ VIXFBMode xFBmode;
    /*0x18*/ u8 field_rendering;
    /*0x19*/ u8 aa;
    /*0x20*/ u8 sample_pattern[12][2];
    /*0x38*/ u8 vfilter[7];
} GXRenderModeObj;
typedef struct _GXColor {
    u8 r, g, b, a;
} GXColor;
typedef struct _GXColorS10 {
    s16 r, g, b, a;
} GXColorS10;
typedef struct _GXTexObj {
    u32 dummy[8];
} GXTexObj;
typedef struct _GXLightObj {
    u32 dummy[16];
} GXLightObj;
typedef struct _GXTexRegion {
    u32 dummy[4];
} GXTexRegion;
typedef struct _GXTlutObj {
    u32 dummy[3];
} GXTlutObj;
typedef struct _GXTlutRegion {
    u32 dummy[4];
} GXTlutRegion;
typedef struct _GXFogAdjTable {
    u16 r[10];
} GXFogAdjTable;
typedef struct _GXVtxDescList {
    GXAttr attr;
    GXAttrType type;
} GXVtxDescList;
typedef struct _GXVtxAttrFmtList {
    GXAttr attr;
    GXCompCnt cnt;
    GXCompType type;
    u8 frac;
} GXVtxAttrFmtList;
#define _DOLPHIN_MTX_H_
typedef struct {
    f32 x, y;
} Vec2, *Vec2Ptr, Point2d, *Point2dPtr;
typedef struct {
    f32 x, y, z;
} Vec, Vec3, *VecPtr, Point3d, *Point3dPtr;
typedef struct {
    s8 x, y, z;
} S8Vec3, S8Vec, *S8Vec3Ptr, *S8VecPtr;
typedef struct {
    u8 x, y, z, w;
} U8Vec4, *U8Vec4Ptr;
typedef struct {
    s16 x, y, z;
} S16Vec, S16Vec3, *S16VecPtr, *S16Vec3Ptr;
typedef struct {
    int x, y;
} IntVec2, *IntVec2Ptr;
typedef struct {
    s32 x, y;
} S32Vec2, *S32Vec2Ptr;
typedef struct {
    int x, y, z;
} IntVec3, *IntVec3Ptr;
typedef struct {
    s32 x, y, z;
} S32Vec, S32Vec3, *S32VecPtr, *S32Vec3Ptr;
typedef struct {
    f32 x, y, z, w;
} Quaternion, Vec4, *QuaternionPtr, Qtrn, *QtrnPtr;
typedef f32 Mtx[3][4];
typedef f32 Mtx44[4][4];
typedef f32 (*MtxPtr)[4];
typedef f32 (*Mtx44Ptr)[4];
typedef f32 ROMtx[4][3];
typedef f32 (*ROMtxPtr)[3];
#define MTXDegToRad(a) ((a) * 0.01745329252f)
#define MTXRadToDeg(a) ((a) * 57.29577951f)
void MTXFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
void MTXPerspective(Mtx m, f32 fovY, f32 aspect, f32 n, f32 f);
void MTXOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
void MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f);
void C_MTXLookAt(Mtx m, Point3dPtr camPos, VecPtr camUp, Point3dPtr target);
#define VECSquareMag PSVECSquareMag
#define VECNormalize PSVECNormalize
#define VECAdd PSVECAdd
#define VECSubtract PSVECSubtract
#define VECMag PSVECMag
#define VECDotProduct PSVECDotProduct
#define VECSquareDistance PSVECSquareDistance
#define VECCrossProduct PSVECCrossProduct
#define VECScale PSVECScale
#define MTXMultVec PSMTXMultVec
#define MTXMultVecSR PSMTXMultVecSR
#define MTXMultVecArray PSMTXMultVecArray
#define MTXCopy PSMTXCopy
#define MTXConcat PSMTXConcat
#define MTXInverse PSMTXInverse
#define MTXTrans PSMTXTrans
#define MTXTranspose PSMTXTranspose
#define MTXScale PSMTXScale
#define MTXRotAxisRad PSMTXRotAxisRad
#define MTXRotTrig PSMTXRotTrig
#define MTXQuat PSMTXQuat
#define MTXIdentity PSMTXIdentity
// asm only
#define MTXReorder PSMTXReorder
#define MTXROMultVecArray PSMTXROMultVecArray
#define MTXROSkin2VecArray PSMTXROSkin2VecArray
#define MTXROMultS16VecArray PSMTXROMultS16VecArray
#define MTXMultS16VecArray PSMTXMultS16VecArray
// mtx.c
// functions
void MTXRotRad(Mtx m, char axis, f32 rad);
void PSMTXTrans(Mtx m, f32 xT, f32 yT, f32 zT);
void MTXTransApply(Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
void MTXScaleApply(Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
void MTXReflect(Mtx m, Vec* p, Vec* n);
void MTXLookAt(Mtx m, Vec* camPos, Vec* camUp, Vec* target);
void MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS,
                     f32 scaleT, f32 transS, f32 transT);
void MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT,
                         f32 transS, f32 transT);
void MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT,
                   f32 transS, f32 transT);
// C functions
void C_MTXIdentity(Mtx m);
void C_MTXCopy(Mtx src, Mtx dst);
void C_MTXConcat(Mtx a, Mtx b, Mtx ab);
void C_MTXTranspose(Mtx src, Mtx xPose);
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void C_MTXRotAxisRad(Mtx m, Vec* axis, f32 rad);
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
void C_MTXQuat(Mtx m, QuaternionPtr q);
u32 C_MTXInverse(Mtx src, Mtx inv);
u32 C_MTXInvXpose(Mtx src, Mtx invX);
// asm functions
void PSMTXIdentity(Mtx m);
void PSMTXCopy(Mtx src, Mtx dst);
void PSMTXConcat(Mtx mA, Mtx mB, Mtx mAB);
void PSMTXTranspose(Mtx src, Mtx xPose);
void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void PSMTXRotAxisRad(Mtx m, Vec* axis, f32 rad);
void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
void PSMTXQuat(Mtx m, QuaternionPtr q);
u32 PSMTXInverse(Mtx src, Mtx inv);
u32 PSMTXInvXpose(Mtx src, Mtx invX);
// mtxstack.c
typedef struct {
    u32 numMtx;
    Mtx* stackBase;
    Mtx* stackPtr;
} MTXStack;
void MTXInitStack(MTXStack* sPtr, u32 numMtx);
Mtx* MTXPush(MTXStack* sPtr, Mtx m);
Mtx* MTXPushFwd(MTXStack* sPtr, Mtx m);
Mtx* MTXPushInv(MTXStack* sPtr, Mtx m);
Mtx* MTXPushInvXpose(MTXStack* sPtr, Mtx m);
Mtx* MTXPop(MTXStack* sPtr);
Mtx* MTXGetStackPtr(MTXStack* sPtr);
// mtxvec.c
void C_MTXMultVecSR(Mtx44 m, Vec* src, Vec* dst);
void PSMTXMultVecSR(Mtx44 m, Vec* src, Vec* dst);
void MTXMultVecArraySR(Mtx44 m, Vec* srcBase, Vec* dstBase, u32 count);
// C functions
void C_MTXMultVec(Mtx44 m, Vec* src, Vec* dst);
void C_MTXMultVecArray(Mtx m, Vec* srcBase, Vec* dstBase, u32 count);
// asm functions
void PSMTXMultVec(Mtx44 m, Vec* src, Vec* dst);
void PSMTXMultVecArray(Mtx m, Vec* srcBase, Vec* dstBase, u32 count);
// psmtx.c
void PSMTXReorder(Mtx src, ROMtx dest);
void PSMTXROMultVecArray(ROMtx* m, Vec* srcBase, Vec* dstBase, u32 count);
void PSMTXROSkin2VecArray(ROMtx* m0, ROMtx* m1, f32* wtBase, Vec* srcBase,
                          Vec* dstBase, u32 count);
void PSMTXROMultS16VecArray(ROMtx* m, S16Vec* srcBase, Vec* dstBase,
                            u32 count);
void PSMTXMultS16VecArray(Mtx44* m, S16Vec* srcBase, Vec* dstBase, u32 count);
// vec.c
f32 C_VECMag(Vec* v);
f32 PSVECMag(Vec* v);
void VECHalfAngle(Vec* a, Vec* b, Vec* half);
void VECReflect(Vec* src, Vec* normal, Vec* dst);
f32 VECDistance(Vec* a, Vec* b);
// C functions
void C_VECAdd(Vec* a, Vec* b, Vec* c);
void C_VECSubtract(Vec* a, Vec* b, Vec* c);
void C_VECScale(Vec* src, Vec* dst, f32 scale);
void C_VECNormalize(Vec* src, Vec* unit);
f32 C_VECSquareMag(Vec* v);
f32 C_VECDotProduct(Vec* a, Vec* b);
void C_VECCrossProduct(Vec* a, Vec* b, Vec* axb);
f32 C_VECSquareDistance(Vec* a, Vec* b);
// Asm functions
void PSVECAdd(Vec* a, Vec* b, Vec* c);
void PSVECSubtract(Vec* a, Vec* b, Vec* c);
void PSVECScale(Vec* src, Vec* dst, f32 scale);
void PSVECNormalize(Vec* vec1, Vec* dst);
f32 PSVECSquareMag(Vec* vec1);
f32 PSVECDotProduct(Vec* vec1, Vec* vec2);
void PSVECCrossProduct(Vec* vec1, Vec* vec2, Vec* dst);
f32 PSVECSquareDistance(Vec* vec1, Vec* vec2);
#define _cobj_h_
#define _object_h_
#define _class_h_
#define HSD_CLASS_INFO(o) ((HSD_ClassInfo*) o)
#define HSD_CLASS_METHOD(o) (((HSD_Class*) o)->class_info)
#define HSD_PARENT_INFO(o) ((o)->parent.head.parent)
#define next_p(p) (p != NULL ? p->next : NULL)
typedef struct _HSD_Class {
    struct _HSD_ClassInfo* class_info;
} HSD_Class;
typedef struct _HSD_ClassInfoHead {
    void (*info_init)(void);
    u32 flags;
    char* library_name;
    char* class_name;
    s16 obj_size;
    s16 info_size;
    struct _HSD_ClassInfo* parent;
    struct _HSD_ClassInfo* next;
    struct _HSD_ClassInfo* child;
    u32 nb_exist;
    u32 nb_peak;
} HSD_ClassInfoHead;
typedef struct _HSD_ClassInfo {
    struct _HSD_ClassInfoHead head;
    HSD_Class* (*alloc)(struct _HSD_ClassInfo* c);
    int (*init)(struct _HSD_Class* c);
    void (*release)(struct _HSD_Class* c);
    void (*destroy)(struct _HSD_Class* c);
    void (*amnesia)(struct _HSD_ClassInfo* c);
} HSD_ClassInfo;
typedef struct _HSD_FreeList {
    struct _HSD_FreeList* next;
} HSD_FreeList;
typedef struct _HSD_MemoryEntry {
    u32 size;
    u32 nb_alloc;
    u32 nb_free;
    struct _HSD_FreeList* free_list;
    struct _HSD_MemoryEntry* next;
} HSD_MemoryEntry;
extern HSD_ClassInfo hsdClass;
/// void hsdDelete(void* object);
void ClassInfoInit(HSD_ClassInfo* info);
void hsdInitClassInfo(HSD_ClassInfo* class_info, HSD_ClassInfo* parent_info,
                      char* base_class_library, char* type, s32 info_size,
                      s32 class_size);
void OSReport_PrintSpaces(s32 count);
void* hsdAllocMemPiece(s32 size);
void hsdFreeMemPiece(void* mem, s32 size);
void* hsdNew(HSD_ClassInfo*);
bool hsdChangeClass(void* object, void* class_info);
bool hsdIsDescendantOf(void* info, void* p);
bool hsdObjIsDescendantOf(HSD_Obj* o, HSD_ClassInfo* p);
HSD_ClassInfo* hsdSearchClassInfo(const char* class_name);
void hsdForgetClassLibrary(const char* library_name);
HSD_MemoryEntry* GetMemoryEntry(s32 idx);
HSD_Class* _hsdClassAlloc(HSD_ClassInfo* info);
int _hsdClassInit(HSD_Class* arg0);
void _hsdClassRelease(HSD_Class* cls);
void _hsdClassDestroy(HSD_Class* cls);
void _hsdClassAmnesia(HSD_ClassInfo* info);
void class_set_flags(HSD_ClassInfo* class_info, s32 set, s32 reset);
void ForgetClassLibraryReal(HSD_ClassInfo* class_info);
void DumpClassStat(HSD_ClassInfo* info, s32 level);
void hsdDumpClassStat(HSD_ClassInfo* info, bool recursive, s32 level);
void ForgetClassLibraryChild(const char* library_name,
                             HSD_ClassInfo* class_info);
static inline void hsdDelete(void* object)
{
    if (object == 0L) {
        return;
    }
    (((HSD_Class*) object)->class_info)->release((HSD_Class*) object);
    (((HSD_Class*) object)->class_info)->destroy((HSD_Class*) object);
}
#define SYSDOLPHIN_BASELIB_DEBUG_H
typedef void (*ReportCallback)(const unsigned char*, size_t);
typedef void (*PanicCallback)(OSContext*, ...);
 void __assert(const char*, u32, const char*);
void HSD_LogInit(void);
 void HSD_Panic(const char*, u32, const char*);
/// @todo Take @c file as another arg, ignore it if not `MUST_MATCH`.
#define HSD_ASSERT(line, cond) ((cond) ? ((void) 0) : __assert(__FILE__, __LINE__, #cond))
#define HSD_ASSERTMSG(line, cond, msg) ((cond) ? ((void) 0) : __assert(__FILE__, __LINE__, msg))
#define HSD_ASSERTREPORT(line, cond, ...) ((cond) ? (void) 0 : (OSReport(__VA_ARGS__), __assert(__FILE__, __LINE__, #cond)))
void HSD_SetReportCallback(ReportCallback cb);
void HSD_SetPanicCallback(PanicCallback cb);
#define HSD_OBJ_NOREF ((u16) - 1)
#define HSD_OBJ(o) ((HSD_Obj*) o)
#define HSD_OBJECT_INFO(o) (o.parent.parent)
#define HSD_OBJECT_METHOD(o) (o->parent.parent.class_info)
#define HSD_OBJECT_PARENT_INFO(o) ((o)->parent.parent.head.parent)
typedef enum _HSD_Type {
    AOBJ_TYPE = 1,
    COBJ_TYPE,
    DOBJ_TYPE,
    FOBJ_TYPE,
    FOG_TYPE,
    JOBJ_TYPE,
    LOBJ_TYPE,
    MOBJ_TYPE,
    POBJ_TYPE,
    ROBJ_TYPE,
    TOBJ_TYPE,
    WOBJ_TYPE,
    RENDER_TYPE,
    CHAN_TYPE,
    TEVREG_TYPE,
    CBOBJ_TYPE,
    HSD_MAX_TYPE,
} HSD_Type;
#define MASK_OF(type) (1 << ((type) - 1))
typedef enum _HSD_TypeMask {
    AOBJ_MASK = (1 << ((AOBJ_TYPE) - 1)),
    COBJ_MASK = (1 << ((COBJ_TYPE) - 1)),
    DOBJ_MASK = (1 << ((DOBJ_TYPE) - 1)),
    FOBJ_MASK = (1 << ((FOBJ_TYPE) - 1)),
    FOG_MASK = (1 << ((FOG_TYPE) - 1)),
    JOBJ_MASK = (1 << ((JOBJ_TYPE) - 1)),
    LOBJ_MASK = (1 << ((LOBJ_TYPE) - 1)),
    MOBJ_MASK = (1 << ((MOBJ_TYPE) - 1)),
    POBJ_MASK = (1 << ((POBJ_TYPE) - 1)),
    ROBJ_MASK = (1 << ((ROBJ_TYPE) - 1)),
    TOBJ_MASK = (1 << ((TOBJ_TYPE) - 1)),
    WOBJ_MASK = (1 << ((WOBJ_TYPE) - 1)),
    RENDER_MASK = (1 << ((RENDER_TYPE) - 1)),
    CHAN_MASK = (1 << ((CHAN_TYPE) - 1)),
    TEVREG_MASK = (1 << ((TEVREG_TYPE) - 1)),
    CBOBJ_MASK = (1 << ((CBOBJ_TYPE) - 1)),
    ALL_TYPE_MASK = (1 << ((HSD_MAX_TYPE) - 1)) - 1,
} HSD_TypeMask;
struct HSD_Obj {
    struct _HSD_Class parent;
    u16 ref_count;
    u16 ref_count_individual;
};
typedef struct _HSD_ObjInfo {
    struct _HSD_ClassInfo parent;
} HSD_ObjInfo;
extern HSD_ClassInfo hsdObj;
void ObjInfoInit(void);
static inline bool ref_DEC(void* o)
{
    bool ret;
    if ((ret = (((HSD_Obj*) o)->ref_count == ((u16) - 1)))) {
        return ret;
    }
    return ((HSD_Obj*) o)->ref_count-- == 0;
}
static inline void ref_INC(void* o)
{
    if (o != 0L) {
        ((HSD_Obj*) o)->ref_count++;
        ((((HSD_Obj*) o)->ref_count != ((u16) - 1)) ? ((void) 0) : __assert("src/sysdolphin/baselib/object.h", 87, "HSD_OBJ(o)->ref_count != HSD_OBJ_NOREF"));
    }
}
static inline int ref_CNT(void* o)
{
    if (((HSD_Obj*) o)->ref_count == ((u16) - 1)) {
        return -1;
    } else {
        return ((HSD_Obj*) o)->ref_count;
    }
}
static inline int iref_CNT(void* o)
{
    return ((HSD_Obj*) o)->ref_count_individual;
}
static inline bool iref_DEC(void* o)
{
    bool ret;
    if ((ret = (((HSD_Obj*) o)->ref_count_individual == 0))) {
        return ret;
    }
    ((HSD_Obj*) o)->ref_count_individual -= 1;
    return ((HSD_Obj*) o)->ref_count_individual == 0;
}
static inline void iref_INC(void* o)
{
    ((HSD_Obj*) o)->ref_count_individual++;
    ((((HSD_Obj*) o)->ref_count_individual != 0) ? ((void) 0) : __assert("src/sysdolphin/baselib/object.h", 118, "HSD_OBJ(o)->ref_count_individual != 0"));
}
#define PROJ_PERSPECTIVE 1
#define PROJ_FRUSTUM 2
#define PROJ_ORTHO 3
typedef struct _Scissor {
    u16 left;
    u16 right;
    u16 top;
    u16 bottom;
} Scissor;
typedef struct _HSD_RectS16 {
    s16 xmin;
    s16 xmax;
    s16 ymin;
    s16 ymax;
} HSD_RectS16;
typedef struct _HSD_RectF32 {
    f32 xmin;
    f32 xmax;
    f32 ymin;
    f32 ymax;
} HSD_RectF32;
struct HSD_CObj {
    /*  +0 */ HSD_Obj parent;
    /*  +8 */ u32 flags;
    /*  +C */ HSD_RectF32 viewport;
    /* +1C */ Scissor scissor;
    /* +24 */ HSD_WObj* eyepos;
    /* +28 */ HSD_WObj* interest;
    union {
        /* +2C */ f32 roll;
        /* +2C */ Vec3 up;
    } u;
    /* +38 */ f32 near;
    /* +3C */ f32 far;
    union {
        struct {
            f32 fov;
            f32 aspect;
        } perspective;
        struct {
            f32 top;
            f32 bottom;
            f32 left;
            f32 right;
        } frustum;
        struct {
            f32 top;
            f32 bottom;
            f32 left;
            f32 right;
        } ortho;
    } projection_param;
    /* +50 */ u8 projection_type;
    /* +54 */ Mtx view_mtx;
    /* +84 */ HSD_AObj* aobj;
    /* +88 */ Mtx* proj_mtx;
};
struct HSD_CameraDescCommon {
    char* class_name; // 0x00
    u16 flags; // 0x04
    u16 projection_type; // 0x06
    HSD_RectS16 viewport;
    Scissor scissor;
    HSD_WObjDesc* eyepos; // 0x18
    HSD_WObjDesc* interest; // 0x1C
    f32 roll; // 0x20
    Vec3* up_vector; // 0x24
    f32 nnear; // 0x28
    f32 ffar; // 0x2C
};
struct HSD_CameraDescFrustum {
    char* class_name; // 0x00
    u16 flags; // 0x04
    u16 projection_type; // 0x06
    HSD_RectS16 viewport;
    Scissor scissor;
    HSD_WObjDesc* eyepos; // 0x18
    HSD_WObjDesc* interest; // 0x1C
    f32 roll; // 0x20
    Vec3* up_vector; // 0x24
    f32 nnear; // 0x28
    f32 ffar; // 0x2C
    f32 top;
    f32 bottom;
    f32 left;
    f32 right;
};
struct HSD_CameraDescPerspective {
    char* class_name; // 0x00
    u16 flags; // 0x04
    u16 projection_type; // 0x06
    HSD_RectS16 viewport;
    Scissor scissor;
    HSD_WObjDesc* eyepos; // 0x18
    HSD_WObjDesc* interest; // 0x1C
    f32 roll; // 0x20
    Vec3* up_vector; // 0x24
    f32 nnear; // 0x28
    f32 ffar; // 0x2C
    f32 fov;
    f32 aspect;
};
union HSD_CObjDesc {
    char* class_name;
    HSD_CameraDescCommon common;
    HSD_CameraDescFrustum frustum;
    HSD_CameraDescFrustum ortho;
    HSD_CameraDescPerspective perspective;
};
;
struct HSD_CObjInfo {
    HSD_ObjInfo parent;
    int (*load)(HSD_CObj* cobj, HSD_CObjDesc* desc);
};
struct HSD_CameraAnim {
    HSD_AObjDesc* aobjdesc;
    HSD_WObjAnim* eye_anim;
    HSD_WObjAnim* interest_anim;
};
typedef struct _cobj_Unk1 cobj_Unk1;
#define HSD_COBJ(o) ((HSD_CObj*) (o))
#define HSD_COBJ_INFO(i) ((HSD_CObjInfo*) (i))
#define HSD_COBJ_METHOD(o) HSD_COBJ_INFO(HSD_OBJECT_METHOD(o))
void HSD_CObjEraseScreen(HSD_CObj* cobj, s32 enable_color, s32 enable_alpha,
                         s32 enable_depth);
void HSD_CObjRemoveAnim(HSD_CObj* cobj);
HSD_WObj* HSD_CObjGetInterestWObj(HSD_CObj* cobj);
void HSD_CObjSetInterestWObj(HSD_CObj* cobj, HSD_WObj* interest);
HSD_WObj* HSD_CObjGetEyePositionWObj(HSD_CObj* cobj);
void HSD_CObjSetEyePositionWObj(HSD_CObj* cobj, HSD_WObj* eyepos);
void HSD_CObjSetInterest(HSD_CObj* cobj, Vec3*);
void HSD_CObjSetEyePosition(HSD_CObj* cobj, Vec3*);
bool HSD_CObjSetCurrent(HSD_CObj*);
void HSD_CObjEndCurrent(void);
void HSD_CObjSetViewportfx4(HSD_CObj*, f32, f32, f32, f32);
void HSD_CObjGetEyePosition(HSD_CObj* cobj, Vec3* cam_pos);
int HSD_CObjGetEyeVector(HSD_CObj* cobj, Vec3* eye);
int HSD_CObjGetUpVector(HSD_CObj* cobj, Vec3* up);
void HSD_CObjGetInterest(HSD_CObj* cobj, Vec3* interest);
HSD_CObj* HSD_CObjAlloc(void);
void HSD_CObjRemoveAnimByFlags(HSD_CObj* cobj, u32 flags);
void HSD_CObjAddAnim(HSD_CObj* cobj, HSD_CameraAnim* canim);
void HSD_CObjAnim(HSD_CObj* cobj);
void HSD_CObjReqAnim(HSD_CObj* cobj, f32 startframe);
GXProjectionType makeProjectionMtx(HSD_CObj* cobj, Mtx44 mtx);
void HSD_CObjSetupViewingMtx(HSD_CObj* cobj);
f32 HSD_CObjGetEyeDistance(HSD_CObj* cobj);
void HSD_CObjSetUpVector(HSD_CObj* cobj, Vec3* up);
int HSD_CObjGetLeftVector(HSD_CObj* cobj, Vec3* left);
void HSD_CObjSetMtxDirty(HSD_CObj* cobj);
bool HSD_CObjMtxIsDirty(HSD_CObj*);
void HSD_CObjGetViewingMtx(HSD_CObj* cobj, Mtx mtx);
MtxPtr HSD_CObjGetInvViewingMtxPtrDirect(HSD_CObj* cobj);
MtxPtr HSD_CObjGetViewingMtxPtr(HSD_CObj* cobj);
MtxPtr HSD_CObjGetInvViewingMtxPtr(HSD_CObj* cobj);
void HSD_CObjSetRoll(HSD_CObj* cobj, f32);
f32 HSD_CObjGetFov(HSD_CObj* cobj);
void HSD_CObjSetFov(HSD_CObj*, f32);
f32 HSD_CObjGetAspect(HSD_CObj* cobj);
void HSD_CObjSetAspect(HSD_CObj* cobj, f32 aspect);
f32 HSD_CObjGetTop(HSD_CObj* cobj);
void HSD_CObjSetTop(HSD_CObj* cobj, f32 top);
f32 HSD_CObjGetBottom(HSD_CObj* cobj);
void HSD_CObjSetBottom(HSD_CObj* cobj, f32 bottom);
f32 HSD_CObjGetLeft(HSD_CObj* cobj);
void HSD_CObjSetLeft(HSD_CObj* cobj, f32 left);
f32 HSD_CObjGetRight(HSD_CObj* cobj);
void HSD_CObjSetRight(HSD_CObj* cobj, f32 right);
f32 HSD_CObjGetNear(HSD_CObj*);
void HSD_CObjSetNear(HSD_CObj* cobj, f32 near);
f32 HSD_CObjGetFar(HSD_CObj*);
void HSD_CObjSetFar(HSD_CObj* cobj, f32 far);
void HSD_CObjGetScissor(HSD_CObj* cobj, Scissor*);
void HSD_CObjSetScissor(HSD_CObj* cobj, Scissor*);
void HSD_CObjSetScissorx4(HSD_CObj*, u16 left, u16 right, u16 top, u16 bottom);
void HSD_CObjGetViewportf(HSD_CObj* cobj, HSD_RectF32*);
void HSD_CObjSetViewport(HSD_CObj* cobj, HSD_RectS16* viewport);
void HSD_CObjSetViewportf(HSD_CObj* cobj, HSD_RectF32*);
int HSD_CObjGetProjectionType(HSD_CObj*);
void HSD_CObjSetProjectionType(HSD_CObj*, u32);
void HSD_CObjSetPerspective(HSD_CObj* cobj, f32 fov, f32 aspect);
void HSD_CObjSetFrustum(HSD_CObj*, f32 top, f32 bottom, f32 left, f32 right);
void HSD_CObjSetOrtho(HSD_CObj*, f32 top, f32 bottom, f32 left, f32 right);
void HSD_CObjGetPerspective(HSD_CObj* cobj, f32* top, f32* bottom);
void HSD_CObjGetOrtho(HSD_CObj*, f32* top, f32* bottom, f32* left, f32* right);
u32 HSD_CObjGetFlags(HSD_CObj* cobj);
void HSD_CObjSetFlags(HSD_CObj*, u32);
void HSD_CObjClearFlags(HSD_CObj*, u32);
HSD_CObj* HSD_CObjGetCurrent(void);
void HSD_CObjInit(HSD_CObj* cobj, HSD_CObjDesc* desc);
HSD_CObj* HSD_CObjLoadDesc(HSD_CObjDesc* desc);
void HSD_CObjSetDefaultClass(HSD_ClassInfo* info);
static inline MtxPtr HSD_CObjGetViewingMtxPtrDirect(HSD_CObj* cobj)
{
    return cobj->view_mtx;
}
/* 028B9C */ void Camera_Init(int);
/* 028F5C */ void Camera_80028F5C(CmSubject*, CmSubjectState);
/* 029020 */ CmSubject* Camera_80029020(void);
/* 029044 */ CmSubject* Camera_80029044(int);
/* 0290D4 */ void Camera_800290D4(CmSubject*);
/* 029124 */ u32 Camera_80029124(Vec3*, s32);
/* 02928C */ bool Camera_8002928C(CmSubject*);
/* 0293E0 */ void Camera_800293E0(void);
/* 02958C */ void Camera_8002958C(CameraBounds*, CameraTransformState*);
/* 029BC4 */ void Camera_80029BC4(CameraBounds*, CameraTransformState*);
/* 029C88 */ void Camera_80029C88(CameraBounds*, CameraTransformState*, f32);
/* 029CF8 */ void Camera_80029CF8(CameraBounds*, CameraTransformState*);
/* 02A0C0 */ void Camera_ApplyQuake(CameraBounds*, CameraTransformState*);
/* 02A278 */ void Camera_SetQuakeOffset(float x, float y);
/* 02A28C */ void Camera_UpdateQuakes(CameraBounds*);
/* 02A4AC */ void Camera_8002A4AC(HSD_GObj*);
/* 02A768 */ void Camera_8002A768(CameraTransformState*, s32);
/* 02AF68 */ void Camera_8002AF68(HSD_CObj*, CameraTransformState*);
/* 02B0E0 */ void Camera_8002B0E0(void);
/* 02B1F8 */ void Camera_8002B1F8(CameraTransformState*);
/* 02B3D4 */ void Camera_8002B3D4(void*);
/* 02B694 */ void Camera_8002B694(CameraInputs*, s32);
/* 02BA00 */ s32 Camera_8002BA00(s32, s32);
/* 02BAA8 */ void Camera_8002BAA8(f32);
/* 02BC78 */ s32 Camera_8002BC78(Vec3*, Vec3*, Vec3*);
/* 02BD88 */ void Camera_8002BD88(f32, f32);
/* 02C010 */ void Camera_8002C010(f32, f32);
/* 02C1A8 */ void Camera_8002C1A8(void);
/* 02C5B4 */ void Camera_8002C5B4(Camera_x2D0*);
/* 02C908 */ void Camera_8002C908(void*);
/* 02CB0C */ void Camera_8002CB0C(CameraBounds*);
/* 02CDDC */ void Camera_8002CDDC(void* unused);
/* 02D318 */ void Camera_8002D318(void* unused);
/* 02D85C */ void Camera_8002D85C(void* unused);
/* 02DDC4 */ void Camera_8002DDC4(void*);
/* 02DFE4 */ s32 Camera_8002DFE4(Vec3*, Vec3*, Vec3*);
/* 02E158 */ bool Camera_8002E158(f32*, f32, f32);
/* 02E234 */ bool Camera_8002E234(void);
/* 02E490 */ void Camera_8002E490(void*);
/* 02E6FC */ void Camera_8002E6FC(int);
/* 02E818 */ void Camera_8002E818(Vec*);
/* 02E948 */ void Camera_8002E948(bool (*)(Vec*));
/* 02EA64 */ void Camera_8002EA64(Vec*);
/* 02EB5C */ void Camera_8002EB5C(float arg0);
/* 02EC7C */ void Camera_8002EC7C(float arg0);
/* 02ED9C */ void Camera_8002ED9C(float arg0);
/* 02EEC8 */ void Camera_8002EEC8(float);
/* 02EF14 */ void Camera_8002EF14(void);
/* 02F0E4 */ void Camera_8002F0E4(s32);
/* 02F260 */ bool Camera_8002F260(void);
/* 02F274 */ void Camera_8002F274(void);
/* 02F360 */ void fn_8002F360(HSD_GObj*);
/* 02F3AC */ void Camera_8002F3AC(void);
/* 02F474 */ void Camera_SetModeToStandard(void);
/* 02F488 */ s32 Camera_SetBounds(Vec4*);
/**
 * @brief Switches the camera to pause-camera mode.
 *
 * Configures pause-camera bounds, eye offset, and zoom from stage data for the
 * given pauser. Called when a match is paused (e.g. via
 * #gm_EnablePlayerPauseCamera or #Camera_8002F760).
 *
 * @param[in] pauserSlot Player slot to center the pause camera on, or a
 * special slot id. Valid player slots are 0-5; slots @c 0xA and @c 0xB
 * are also accepted (@c 0xB is used when no valid slot is available).
 * Out-of-range values default to @c 0.
 *
 * @param[in] pauserId   Controller port / player id of the pauser. Valid ids
 * are 0-3; ids 4-5 are also accepted. Out-of-range values default to @c 4.
 * @param[in] arg2       Initial zoom preset: @c 0 uses the stage's default
 * pause distance; @c 1 uses the current minimum zoom.
 */
/* 02F4D4 */ void Camera_SetUpPauseCamera(s8, s8, s32);
/**
 * @brief Switches the camera to pause-camera mode with default stage zoom.
 *
 * Wrapper around #Camera_SetUpPauseCamera with @p arg2 set to @c 0.
 */
/* 02F73C */ void Camera_SetUpPauseCameraWithDefaultZoom(s8, s8);
/* 02F760 */ void Camera_8002F760(s8, s8);
/* 02F784 */ void Camera_8002F784(s8, s8);
/* 02F7AC */ void Camera_8002F7AC(s8);
/* 02F8F4 */ void Camera_SetModeToFixed(void);
/* 02F908 */ s32 fn_8002F908(HSD_RectF32* arg0);
/* 02F9E4 */ void Camera_8002F9E4(s8 arg0, s8 arg1);
/* 02FBA0 */ s32 fn_8002FBA0(HSD_RectF32* arg0);
/* 02FC7C */ void Camera_8002FC7C(s8, s8);
/* 02FE38 */ void Camera_8002FE38(void);
/* 02FEEC */ void Camera_8002FEEC(s32);
/* 03006C */ void Camera_8003006C(void);
/* 0300F0 */ void Camera_800300F0(void);
/* 03010C */ bool Camera_8003010C(void);
/* 030130 */ bool Camera_80030130(void);
/* 030154 */ bool Camera_80030154(void);
/* 030178 */ bool Camera_80030178(void);
/* 03019C */ Vec3* Camera_8003019C(void);
/* 0304E0 */ void Camera_800304E0(HSD_GObj*);
/* 030688 */ void Camera_Create(void);
/* 030730 */ void Camera_80030730(f32);
/// @param r The red component.
/// @param g The green component.
/// @param b The blue component.
/* 030740 */ void Camera_SetBackgroundColor(u8 r, u8 g, u8 b);
/* 030758 */ GXColor Camera_GetBackgroundColor(void);
/* 030788 */ void Camera_GetTransformPosition(Vec*);
/* 0307AC */ void Camera_GetTransformInterest(Vec*);
/* 0307D0 */ bool Camera_800307D0(f32*, f32*, f32*);
/* 030A50 */ HSD_GObj* Camera_80030A50(void);
/* 030A60 */ void Camera_80030A60(bool);
/* 030A78 */ bool Camera_80030A78(void);
/* 030A8C */ void Camera_80030A8C(bool);
/* 030AA4 */ void Camera_SetStageVisible(int);
/* 030AC4 */ bool Camera_80030AC4(void);
/* 030AE0 */ void Camera_80030AE0(bool);
/* 030AF8 */ bool Camera_80030AF8(void);
/* 030B0C */ void Camera_80030B0C(bool);
/* 030B24 */ bool Camera_80030B24(void);
/* 030B38 */ void Camera_80030B38(bool);
/* 030B50 */ bool Camera_80030B50(void);
/* 030B64 */ void Camera_80030B64(bool);
/* 030B7C */ bool Camera_80030B7C(void);
/* 030B90 */ void Camera_80030B90(bool);
/* 030BA8 */ bool Camera_80030BA8(void);
/* 030BBC */ bool Camera_80030BBC(Vec3*, S32Vec2*);
/* 030CD8 */ bool Camera_80030CD8(CmSubject*, S32Vec2*);
/* 030CFC */ bool Camera_80030CFC(CmSubject*, float);
/* 030DE4 */ void Camera_80030DE4(f32, f32);
/* 030DF8 */ void Camera_80030DF8(void);
/* 030E10 */ float Camera_80030E10(void);
/* 030E34 */ void Camera_SetQuakeScale(f32);
/* 030E44 */ void Camera_RequestQuake(CmQuakeKind, Vec*);
/* 031044 */ void Camera_StopQuake(CmQuakeKind);
/* 031060 */ enum_t Camera_80031060(void);
/* 031074 */ void Camera_80031074(u8);
/* 03108C */ enum_t Camera_8003108C(void);
/* 0310A0 */ void Camera_800310A0(u8);
/* 0310B8 */ HSD_CObj* Camera_800310B8(void);
/* 0310E8 */ void Camera_800310E8(void);
/* 031144 */ float Camera_80031144(void);
/* 031154 */ bool Camera_80031154(Vec3*);
/* 03118C */ bool Camera_8003118C(Vec3*, float);
/* 0311CC */ void Camera_800311CC(f32);
/* 0311DC */ void Camera_800311DC(f32);
/* 0311EC */ void Camera_800311EC(HSD_GObj*, u64);
/* 031328 */ void Camera_80031328(HSD_GObj*, u64);
/* 0313E0 */ void Camera_800313E0(HSD_GObj*, u64);
extern CmSubject* cm_804D6468;
extern CameraDebugMode cm_80453004;
#define _CMSNAP_H_
#define GALE01_390730
#define _objalloc_h_
typedef struct _objheap {
    uintptr_t top;
    uintptr_t curr;
    u32 size;
    u32 remain;
} objheap;
typedef struct _HSD_ObjAllocLink {
    struct _HSD_ObjAllocLink* next;
} HSD_ObjAllocLink;
typedef struct _HSD_ObjAllocData {
    u32 num_limit_flag : 1;
    u32 heap_limit_flag : 1;
    HSD_ObjAllocLink* freehead;
    u32 used;
    u32 free;
    u32 peak;
    u32 num_limit;
    u32 heap_limit_size;
    u32 heap_limit_num;
    u32 size;
    u32 align;
    struct _HSD_ObjAllocData* next;
} HSD_ObjAllocData;
;
static inline u32 HSD_ObjAllocGetUsing(HSD_ObjAllocData* data)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 37, "data"));
    return data->used;
}
static inline u32 HSD_ObjAllocGetFreed(HSD_ObjAllocData* data)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 43, "data"));
    return data->free;
}
static inline u32 HSD_ObjAllocGetPeak(HSD_ObjAllocData* data)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 49, "data"));
    return data->peak;
}
static inline void HSD_ObjAllocSetNumLimit(HSD_ObjAllocData* data,
                                           u32 num_limit)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 56, "data"));
    data->num_limit = num_limit;
}
static inline void HSD_ObjAllocEnableNumLimit(HSD_ObjAllocData* data)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 62, "data"));
    data->num_limit_flag = 1;
}
static inline void HSD_ObjAllocDisableNumLimit(HSD_ObjAllocData* data)
{
    ((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 68, "data"));
    data->num_limit_flag = 0;
}
/// A NULL pool uses HSD_MemAlloc for backing storage.
void HSD_ObjSetHeap(u32 size, void* ptr);
s32 HSD_ObjAllocAddFree(HSD_ObjAllocData* data, u32 num);
void* HSD_ObjAlloc(HSD_ObjAllocData* data);
void HSD_ObjFree(HSD_ObjAllocData* data, void* obj);
void _HSD_ObjAllocForgetMemory(void* low, void* high);
void HSD_ObjAllocInit(HSD_ObjAllocData* data, size_t size, u32 align);
#define HSD_GOBJ_GXLINK_NONE ((u8) 0xFF)
#define HSD_GOBJ_OBJ_NONE 0xFF
#define HSD_GOBJ_PLINK_MAX 63
#define HSD_GOBJ_GX_LINK_MAX 63
#define HSD_GOBJPROC_PRI_MAX 2
typedef struct HSD_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ HSD_GObj* next;
    /*  +C */ HSD_GObj* prev;
    /* +10 */ HSD_GObj* next_gx;
    /* +14 */ HSD_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ GObj_RenderFunc render_cb;
    /* +20 */ u64 gxlink_prios;
    /* +28 */ void* hsd_obj;
    /* +2C */ void* user_data;
    /* +30 */ void (*user_data_remove_func)(void* data);
    /* +34 */ void* x34_unk;
} HSD_GObj;
typedef void (*GObjFunc)(HSD_Obj*);
struct GObjFuncs {
    struct GObjFuncs* next;
    u8 size;
    GObjFunc* funcs;
};
typedef struct _HSD_GObjLibInitDataType {
    u8 p_link_max; // 804CE380
    u8 gx_link_max; // 804CE381
    u8 gproc_pri_max; // 804CE382
    GObjFuncs* funcs; // 804CE384
    u64* unk_2; // 804CE388
} HSD_GObjLibInitDataType;
extern struct _unk_gobj_struct {
    union {
        u32 flags;
        struct {
            u32 in_delayed_proc : 1;
            u32 delay_remove_gobj : 1;
            u32 delay_remove_proc : 1;
            u32 delay_change_gobj_pri : 1;
        };
    };
    u32 type;
    u8 p_link;
    u8 p_prio;
    HSD_GObj* gobj;
} HSD_GObj_DelayedProcInfo;
extern GObjFunc* HSD_GObj_804D7810;
extern HSD_GObj* HSD_GObj_804D7814;
extern HSD_GObj* HSD_GObj_804D7818;
extern HSD_GObj* HSD_GObj_CurrentInvokedProcGObj;
extern HSD_GObj** HSD_GObj_804D7820;
extern HSD_GObj** HSD_GObjGXLinkHead;
extern HSD_GObj** plinklow_gobjs;
extern HSD_GObj** HSD_GObjPLinkHead;
extern HSD_GObjProc* HSD_GObj_NextInvokedProc;
extern s32 HSD_GObj_CurrentInvokedSLink;
extern HSD_GObjProc* HSD_GObj_CurrentInvokedProc;
extern s32 HSD_GObj_804D783C;
extern HSD_GObjProc** HSD_GObj_GObjProcHead;
extern HSD_GObjProc** HSD_GObj_ProcList;
extern s8 HSD_GObj_FogKind;
extern u8 HSD_GObj_JObjKind;
extern s8 HSD_GObj_LightKind;
extern u8 HSD_GObj_CameraKind;
extern HSD_ObjAllocData gobj_alloc_data;
extern HSD_ObjAllocData gobjproc_alloc_data;
extern HSD_GObjLibInitDataType HSD_GObjLibInitData;
void HSD_GObj_80390C5C(HSD_GObj* gobj);
void HSD_GObj_80390C84(HSD_GObj* gobj);
void HSD_GObj_80390CAC(HSD_GObj* gobj);
u32 HSD_GObj_80390EB8(s32 i);
void HSD_GObj_803910D8(HSD_GObj*, intptr_t);
u8 HSD_GObj_803912A8(HSD_GObjLibInitDataType*, GObjFuncs*);
HSD_GObj* GObj_Create(u16 classifier, u8 p_link, u8 priority);
void HSD_GObj_JObjCallback(HSD_GObj* gobj, intptr_t arg1);
void HSD_GObj_80390CD4(HSD_GObj* gobj);
void HSD_GObj_RunProcs(void);
void HSD_GObj_80390FC0(void);
void HSD_GObj_LObjCallback(HSD_GObj* gobj, intptr_t unused);
void HSD_GObj_FogCallback(HSD_GObj* gobj, intptr_t unused);
void HSD_GObj_80391120(HSD_Obj* obj);
void HSD_GObj_803911C0(HSD_Obj* obj);
void HSD_GObj_80391260(HSD_GObjLibInitDataType*);
void HSD_GObjSetInitDefaults(HSD_GObjLibInitDataType* arg0);
void HSD_GObj_80390ED0(HSD_GObj* gobj, u32 mask);
void HSD_GObjInit(HSD_GObjLibInitDataType*);
static inline void* HSD_GObjGetUserData(HSD_GObj* gobj)
{
    return gobj->user_data;
}
static inline void* HSD_GObjGetHSDObj(HSD_GObj* gobj)
{
    return gobj->hsd_obj;
}
static inline u16 HSD_GObjGetClassifier(HSD_GObj* gobj)
{
    return gobj->classifier;
}
static inline HSD_GObj* HSD_GObjGetNext(HSD_GObj* gobj)
{
    return gobj->next;
}
#define GET_COBJ(gobj) ((HSD_CObj*) HSD_GObjGetHSDObj(gobj))
#define GET_FOG(gobj) ((HSD_Fog*) HSD_GObjGetHSDObj(gobj))
#define GET_JOBJ(gobj) ((HSD_JObj*) HSD_GObjGetHSDObj(gobj))
#define GET_LOBJ(gobj) ((HSD_LObj*) HSD_GObjGetHSDObj(gobj))
void cmSnap_800315C8(void);
void cmSnap_800316B4(void);
void* cmSnap_80031618(void);
void cmSnap_80031640(HSD_GObj* gobj, intptr_t code);
#define MELEE_CM_TYPES_H
typedef struct CmSubjectExtents {
    Vec2 h; ///< Horizontal extents: @c .x left, @c .y right.
    /// Vertical extents: @c .x up, @c .y down, @c .z forward (used by
    /// shadows).
    Vec3 v;
} CmSubjectExtents;
/**
 * A point of interest ("camera box") that the match camera tries to keep in
 * frame.
 * @note Name from the <tt>"couldn't get CmSubject struct."</tt> @c OSReport
 * in #Camera_80029044 at @c 80029070.
 */
struct CmSubject {
    /* +00 */ CmSubject* next;
    /* +04 */ CmSubject* prev;
    /* +08 */ CmSubjectState state;
    /// Set while the owning fighter is in a Cliff motion state. Never read.
    /* +0C:0 */ u8 on_ledge : 1;
    /**
     * Excludes the subject from framing regardless of #CmSubject::state. Set
     * only by Home-Run Contest, cleared only by #Camera_80028F5C.
     */
    /* +0C:1 */ u8 force_inactive : 1;
    /**
     * Set while the subject is framed. #CmSubjectState_Auto uses it as an edge
     * detector: cleared when the subject leaves the bounds, arming
     * #CmSubject::state_timer.
     */
    /* +0C:2 */ u8 was_framed : 1;
    /**
     * #CmSubjectState_Auto lockout. Armed to @c 600 when the subject leaves
     * the bounds; while non-zero it counts down once per framing check and the
     * subject is not framed.
     */
    /* +0E */ s16 state_timer;
    /// Anchor point of the subject's framing box. Only x/y are read.
    /* +10 */ Vec3 pos;
    /// Position of the owning fighter's camera bone (#ftLib_800866DC).
    /* +1C */ Vec3 bone_pos;
    /* +28 */ float facing_dir; ///< Facing direction of the subject (±1).
    /**
     * Current framing extents, eased toward #CmSubject::target_ext by 0.5 per
     * frame in #Camera_800293E0.
     */
    /* +2C */ CmSubjectExtents ext;
    /// Target framing extents, set by the subject's owner.
    /* +40 */ CmSubjectExtents target_ext;
    /* +54 */ Vec3 x54; ///< Zeroed but unused.
    /* +60 */ Vec3 x60; ///< Zeroed but unused.
};
struct CameraTransformState {
    /*  +0 */ Vec3 interest;
    /*  +C */ Vec3 target_interest;
    /* +18 */ Vec3 position;
    /* +24 */ Vec3 target_position;
    /* +30 */ float fov;
    /* +34 */ float target_fov;
};
struct CameraBounds {
    float x_min;
    float y_min;
    float x_max;
    float y_max;
    int total_subjects;
    float z_pos;
};
struct Camera_x2D0 {
    /* +0x00 */ f32 y_max;
    /* +0x04 */ f32 y_min;
    /* +0x08 */ f32 x_min;
    /* +0x0C */ f32 x_max;
    /* +0x10 */ f32 z_max;
    /* +0x14 */ f32 z_min;
    /* +0x18 */ f32 angle_up;
    /* +0x1C */ f32 angle_down;
    /* +0x20 */ f32 angle_right;
    /* +0x24 */ f32 angle_left;
    /* +0x28 */ f32 unk28;
    /* +0x2C */ f32 unk2C;
    /* +0x30 */ void (*callback)(Camera_x2D0*);
};
struct CameraQuake {
    /* 0x0 */ Vec3 epicenter;
    /* 0xC */ CmQuakeKind kind;
};
struct CameraDebugMode {
    CameraType last_mode;
    int ply_slot;
    Vec3 follow_int_offset;
    Vec3 follow_eye_offset;
    Vec3 follow_eye_pos;
    Vec3 follow_int_pos;
    float follow_fov;
    Vec3 free_int_pos;
    Vec3 free_eye_pos;
    float free_fov;
    u8 _58[4];
};
struct Camera {
    /* 0x000 */ HSD_GObj* gobj;
    /* 0x004 */ CameraType mode;
    /* 0x008 */ GXColor background_color;
    /* 0x00C */ f32 nearz;
    /* 0x010 */ f32 farz;
    /* 0x014 */ CameraTransformState transform;
    /* 0x04C */ CameraTransformState
        transform_copy; // this runs the same tween logic, but isnt used for
                        // anything?
    /* 0x084 */ Vec2 translation;
    /* 0x08C */ s32 quake_frames_left[QuakeKind_Count];
    /* 0x0A0 */ HSD_GObj* quake_gobj;
    /* 0x0A4 */ Vec2
        quake_offset; ///< offset from the quake model, before scaling
    /* 0x0AC */ f32 quake_scale;
    /* 0x0B0 */ struct CameraQuake quakes[2][16];
    /* 0x2B0 */ float x2B0;
    /* 0x2B4 */ float x2B4;
    /* 0x2B8 */ s16 x2B8;
    /* 0x2BA */ s16 x2BA;
    /* 0x2BC */ f32 x2BC;
    /* 0x2C0 */ f32 x2C0;
    /* 0x2C4 */ s8 x2C4; ///< pauser slot
    /* 0x2C5 */ s8 x2C5; ///< pauser id
    /* 0x2C6 */ char pad_2C6[0x2C8 - 0x2C6];
    /* 0x2C8 */ float pitch_offset;
    /* 0x2CC */ float yaw_offset;
    /* 0x2D0 */ Camera_x2D0 x2D0;
    /* 0x304 */ s8 x304;
    /* 0x305 */ s8 x305;
    /* 0x306 */ s8 x306;
    /* 0x307 */ s8 x307;
    /* 0x308 */ Vec3 x308;
    /* 0x314 */ Vec3 x314;
    /* 0x320 */ Vec3 pause_eye_offset; /* offset from focused player */
    /* 0x32C */ f32 x32C;
    /* 0x330 */ f32 pause_eye_distance; /* distance to focused player */
    /* 0x334 */ Vec3 pause_up; /* up vector */
    /* 0x340 */ u8 x340;
    /* 0x341:0 */ u8 x341_b0 : 1;
    /* 0x341:1 */ u8 x341_b1_b2 : 2;
    /* 0x341:3 */ u8 x341_b3_b4 : 2;
    /* 0x341:5 */ u8 x341_b5_b6 : 2;
    /* 0x341:7 */ u8 x341_b7 : 1;
    /* 0x342 */ char x342_pad[2];
    /* 0x344 */ union {
        s32 slot;
        Vec3 vec;
        s32 (*cb)(Vec3*);
    } x344;
    /* 0x350 */ Vec3 x350;
    /* 0x35C */ union {
        Vec3 vec;
        s32 (*cb)(Vec3*);
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 pad;
            s16 distance;
            f32 pitch;
            f32 yaw;
        } orbit;
    } x35C;
    /* 0x368 */ union {
        Vec3 vec;
        struct {
            s16 distance;
            f32 pitch;
            f32 yaw;
        } orbit;
    } x368;
    /* 0x374 */ f32 x374;
    /* 0x378 */ union {
        f32 f32_v;
        s32 s32_v;
    } x378;
    // /* 0x378 */ f32 x378;
    /* 0x37C */ union {
        s32 s32_v;
        f32 f32_v;
    } x37C;
    /* 0x380 */ u8 x380[0x18];
    /* 0x398:0 */ u8 x398_b0 : 1;
    /* 0x398:1 */ u8 x398_b1 : 1;
    /* 0x398:2 */ u8 x398_b2 : 1;
    /* 0x398:3 */ u8 x398_b3 : 1;
    /* 0x398:4 */ u8 x398_b4 : 1;
    /* 0x398:5 */ u8 x398_b5 : 1;
    /* 0x398:6 */ u8 x398_b6_b7 : 2;
    /* 0x399:0 */ u8 x399_b0_b1 : 2;
    /* 0x399:2 */ u8 x399_b2 : 1;
    /* 0x399:3 */ u8 x399_b3 : 1;
    /* 0x399:4 */ u8 x399_b4 : 1;
    /* 0x399:5 */ u8 x399_b5 : 1;
    /* 0x399:6 */ u8 x399_b6 : 1;
    /* 0x399:7 */ u8 x399_b7 : 1;
    /* 0x39A:0 */ u8 x39A_b0 : 1;
    /* 0x39A:1 */ u8 x39A_b1 : 1;
    /* 0x39A:2 */ u8 x39A_b2 : 1;
    /* 0x39A:3 */ u8 x39A_b3 : 1;
    /* 0x39A:4 */ u8 x39A_b4 : 1;
    /* 0x39A:5 */ u8 x39A_b5 : 1;
    /* 0x39A:6 */ u8 x39A_b6 : 1;
    /* 0x39A:7 */ u8 x39A_b7 : 1;
    /* 0x39B */ char pad_39B; /* maybe part of unk_39A[6]? */
};
;
struct CameraUnkGlobals {
    /*  +0 */ float x0;
    /*  +4 */ float x4;
    /*  +8 */ float x8;
    /*  +C */ float xC;
    /* +10 */ float x10;
    /* +14 */ float x14;
    /* +18 */ float x18;
    /* +1C */ float x1C;
    /* +20 */ float x20;
    /* +24 */ float x24;
    /* +28 */ float x28;
    /* +2C */ float x2C;
    /* +30 */ float x30;
    /* +34 */ float x34;
    /* +38 */ float x38;
    /* +3C */ float x3C;
    /* +40 */ float x40;
    /* +44 */ float x44;
    /* +48 */ float x48;
    /* +4C */ float x4C;
    /* +50 */ float x50;
    /* +54 */ float x54;
    /* +58 */ float x58;
    /* +5C */ float x5C;
    /* +60 */ float x60;
    /* +64 */ float x64;
    /* +68 */ float x68;
    /* +6C */ float x6C;
    /* +70 */ float x70;
    /* +74 */ float x74;
    /* +78 */ float x78;
    /* +7C */ float x7C;
    /* +80 */ float x80;
    /* +84 */ float x84;
    /* +88 */ float x88;
    /* +8C */ float x8C;
    /* +90 */ float x90;
    /* +94 */ float x94;
    /* +98 */ float x98;
    /* +9C */ float x9C;
    /* +A0 */ float xA0;
    /* +A4 */ float xA4;
    /* +A8 */ float xA8;
    /* +AC */ float xAC;
    /* +B0 */ float xB0;
    /* +B4 */ float xB4;
    /* +B8 */ float xB8;
    /* +BC */ float xBC;
    /* +C0 */ float xC0;
    /* +C4 */ float xC4;
    /* +C8 */ float xC8;
    /* +CC */ float xCC;
    /* +D0 */ float xD0;
    /* +D4 */ float xD4;
    /* +D8 */ float xD8;
    /* +DC */ float xDC;
    /* +E0 */ float xE0;
    /* +E4 */ float xE4;
    /* +E8 */ float xE8;
    /* +EC */ float xEC;
};
struct CameraModeCallbacks {
    void (*(callback[9]))(void*);
};
struct CameraInputs {
    /* +00 */ f32 stick_x;
    /* +04 */ f32 stick_y;
    /* +08 */ f32 substick_x;
    /* +0C */ f32 substick_y;
    /* +10 */ u64 buttons_pressed;
    /* +18 */ u64 buttons_triggered;
};
#define MELEE_DB_H
#define MELEE_FT_FORWARD_H
#define MELEE_GR_FORWARD_H
#define MELEE_LB_FORWARD_H
#define HSD_GOBJ_CLASS_SISLIB_UNK 9
#define HSD_GOBJ_CLASS_FOG 10
#define HSD_GOBJ_CLASS_LIGHT 11
#define HSD_GOBJ_PLINK_LIGHT 3
#define HSD_GOBJ_CLASS_SOUND 23
#define HSD_GOBJ_CLASS_MEMCARD 24
#define HSD_GOBJ_PLINK_MEMCARD (HSD_GOBJ_PLINK_MAX - 2)
#define HSD_GOBJ_PLINK_AUDIO_AX (HSD_GOBJ_PLINK_MAX - 1)
struct lb_80011A50_t;
typedef struct AbsorbDesc AbsorbDesc;
typedef struct CollData CollData;
typedef struct ColorOverlay ColorOverlay;
typedef struct CommandInfo CommandInfo;
typedef struct DynamicsDesc DynamicsDesc;
typedef struct FigaTrack FigaTrack;
typedef struct FigaTree FigaTree;
typedef struct FighterHurtCapsule FighterHurtCapsule;
typedef struct ColorOverlay_UnkInner ColorOverlay_UnkInner;
typedef struct ftDeviceUnk2 ftDeviceUnk2;
typedef struct HitCapsule HitCapsule;
typedef struct HitResult HitResult;
typedef struct HitVictim HitVictim;
typedef struct HSD_AllocEntry HSD_AllocEntry;
typedef struct HurtCapsule HurtCapsule;
typedef struct lbCardNew_SnapshotEntry lbCardNew_SnapshotEntry;
typedef struct lbRefract_CallbackData lbRefract_CallbackData;
typedef struct PreloadCache PreloadCache;
typedef struct PreloadedGameModeState PreloadedGameModeState;
typedef struct PreloadCacheSceneEntry PreloadCacheSceneEntry;
typedef struct PreloadEntry PreloadEntry;
typedef struct ReflectDesc ReflectDesc;
typedef struct ShieldDesc ShieldDesc;
typedef struct Unk80433380_48 Unk80433380_48;
typedef struct LbShadow LbShadow;
typedef enum HurtCapsuleState {
    HurtCapsule_Enabled,
    HurtCapsule_Disabled,
    HurtCapsule_Intangible
} HurtCapsuleState;
typedef enum HitElement {
    HitElement_Normal,
    HitElement_Fire,
    HitElement_Electric,
    HitElement_Slash,
    HitElement_Coin,
    HitElement_Ice,
    /// Sleep for 103 frames
    HitElement_Nap,
    /// Sleep for 412 frames
    HitElement_Sleep,
    HitElement_Catch,
    HitElement_Ground,
    HitElement_Cape,
    HitElement_Inert,
    HitElement_Disable,
    HitElement_Dark,
    /// Screw Attack
    HitElement_Scball,
    HitElement_Lipstick,
    /// Formerly presumed empty, this hitbox element is used by
    ///  ReDead grab attacks
    HitElement_Leadead,
} HitElement;
typedef enum HitCapsuleState {
    HitCapsule_Disabled,
    HitCapsule_Enabled,
    HitCapsule_Unk2,
    HitCapsule_Unk3,
    HitCapsule_Unk4,
    HitCapsule_Max = HitCapsule_Unk4,
} HitCapsuleState;
;
typedef enum HurtHeight {
    HurtHeight_Low,
    HurtHeight_Mid,
    HurtHeight_High,
} HurtHeight;
typedef void (*RefractCallbackTypeA)(struct lbRefract_CallbackData*, s32, u32,
                                     s8, s8);
typedef void (*RefractCallbackTypeB)(struct lbRefract_CallbackData*, s32, u32,
                                     s8, s8, s8, s8);
typedef void (*RefractCallbackTypeC)(struct lbRefract_CallbackData*, s32, u32,
                                     s32*, s32*, s32*, s32*);
typedef struct lbColl_80008D30_arg1 {
    /*  +0 */ HitCapsuleState state;
    /*  +4 */ u32 damage;
    /*  +8 */ int kb_angle;
    /*  +C */ u32 unkC;
    /* +10 */ u32 unk10;
    /* +14 */ u32 unk14;
    /* +18 */ u32 element;
    /* +1C */ int sfx_severity;
    /* +20 */ enum_t sfx_kind;
} lbColl_80008D30_arg1;
typedef enum ECBSourceKind {
    ECBSource_None,
    ECBSource_JObj,
    ECBSource_Fixed,
} ECBSourceKind;
/// Size of the memory card task array.
typedef enum LbCardNewTaskArray {
    /* 0x0B */ LbCardNewTaskArray_Max = 11,
} LbCardNewTaskArray;
typedef enum lbDvdPreloadKind {
    lbDvdPreload_0,
    lbDvdPreload_1,
    lbDvdPreload_2,
    lbDvdPreload_3,
} lbDvdPreloadKind;
#define HSD_GOBJ_CLASS_STAGE 3
#define HSD_GOBJ_CLASS_GROUND 13
#define HSD_GOBJ_PLINK_GROUND 5
struct grCorneria_GroundVars;
typedef struct grDynamicAttr_UnkStruct grDynamicAttr_UnkStruct;
typedef struct GrJoint GrJoint;
typedef struct Ground Ground;
typedef struct GroundParam GroundParam;
typedef struct StageData StageData;
typedef struct StageInfo StageInfo;
typedef struct StageParam StageParam;
typedef struct UnkArchiveStruct UnkArchiveStruct;
typedef struct unkCastle unkCastle;
typedef struct UnkStageDat UnkStageDat;
typedef struct UnkStageDatInternal UnkStageDatInternal;
#ifdef M2C
typedef struct Ground_GObj Ground_GObj;
struct Ground_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ Ground_GObj* next;
    /*  +C */ Ground_GObj* prev;
    /* +10 */ Ground_GObj* next_gx;
    /* +14 */ Ground_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ void (*rendered)(Ground_GObj* gobj, s32 code);
    /* +20 */ u64 gxlink_prios;
    /* +28 */ HSD_JObj* hsd_obj;
    /* +2C */ Ground* user_data;
    /* +30 */ void (*user_data_remove_func)(Ground* data);
    /* +34 */ void* x34_unk;
};
#else
typedef HSD_GObj Ground_GObj;
#endif
/** @remarks
 * Selects the @c Gr??.dat archive, indexing #stage_datas. Several #StKind
 * values can share one #GrKind.
 *
 * Member names follow the per-stage @c gr*.c module names the asserts embed.
 */
typedef enum GrKind {
    /* 0x00 */ Gr_Kind_Unk00,
    /* 0x01 */ Gr_Kind_Test,
    /* 0x02 */ Gr_Kind_Castle, // Princess Peach's Castle
    /* 0x03 */ Gr_Kind_RCruise, // Rainbow Cruise
    /* 0x04 */ Gr_Kind_Kongo, // Kongo Jungle
    /* 0x05 */ Gr_Kind_Garden, // Jungle Japes
    /* 0x06 */ Gr_Kind_GreatBay, // Great Bay
    /* 0x07 */ Gr_Kind_Shrine, // Hyrule Temple
    /* 0x08 */ Gr_Kind_Zebes, // Brinstar
    /* 0x09 */ Gr_Kind_Kraid, // Brinstar Depths
    /* 0x0A */ Gr_Kind_Story, // Yoshi's Story
    /* 0x0B */ Gr_Kind_Yorster, // Yoshi's Island
    /* 0x0C */ Gr_Kind_Izumi, // Fountain of Dreams
    /* 0x0D */ Gr_Kind_Greens, // Green Greens
    /* 0x0E */ Gr_Kind_Corneria, // Corneria
    /* 0x0F */ Gr_Kind_Venom, // Venom
    /* 0x10 */ Gr_Kind_PStadium, // Pokemon Stadium
    /* 0x11 */ Gr_Kind_Pura, // Poke Floats
    /* 0x12 */ Gr_Kind_MuteCity, // Mute City
    /* 0x13 */ Gr_Kind_BigBlue, // Big Blue
    /* 0x14 */ Gr_Kind_Onett, // Onett
    /* 0x15 */ Gr_Kind_Fourside, // Fourside
    /* 0x16 */ Gr_Kind_Icemt, // Icicle Mountain
    /* 0x17 */ Gr_Kind_Unk23,
    /* 0x18 */ Gr_Kind_Inishie1, // Mushroom Kingdom
    /* 0x19 */ Gr_Kind_Inishie2, // Mushroom Kingdom II
    /* 0x1A */ Gr_Kind_Unk26,
    /* 0x1B */ Gr_Kind_Flatzone, // Flat Zone
    /* 0x1C */ Gr_Kind_OldPupupu, // Dream Land
    /* 0x1D */ Gr_Kind_OldYoshi, // Yoshi's Island (64)
    /* 0x1E */ Gr_Kind_OldKongo, // Kongo Jungle (64)
    /* 0x1F */ Gr_Kind_KinokoRoute,
    /* 0x20 */ Gr_Kind_ShrineRoute,
    /* 0x21 */ Gr_Kind_ZebesRoute,
    /* 0x22 */ Gr_Kind_BigBlueRoute,
    /* 0x23 */ Gr_Kind_Unk35,
    /* 0x24 */ Gr_Kind_Battle, // Battlefield
    /* 0x25 */ Gr_Kind_Last, // Final Destination
    /* 0x26 */ Gr_Kind_FigureGet,
    /* 0x27 */ Gr_Kind_Pushon,
    /* 0x28 */ Gr_Kind_TMario,
    /* 0x29 */ Gr_Kind_TCaptain,
    /* 0x2A */ Gr_Kind_TClink,
    /* 0x2B */ Gr_Kind_TDonkey,
    /* 0x2C */ Gr_Kind_TDrmario,
    /* 0x2D */ Gr_Kind_TFalco,
    /* 0x2E */ Gr_Kind_TFox,
    /* 0x2F */ Gr_Kind_TIceclimber,
    /* 0x30 */ Gr_Kind_TKirby,
    /* 0x31 */ Gr_Kind_TKoopa,
    /* 0x32 */ Gr_Kind_TLink,
    /* 0x33 */ Gr_Kind_TLuigi,
    /* 0x34 */ Gr_Kind_TMars,
    /* 0x35 */ Gr_Kind_TMewtwo,
    /* 0x36 */ Gr_Kind_TNess,
    /* 0x37 */ Gr_Kind_TPeach,
    /* 0x38 */ Gr_Kind_TPichu,
    /* 0x39 */ Gr_Kind_TPikachu,
    /* 0x3A */ Gr_Kind_TPurin,
    /* 0x3B */ Gr_Kind_TSamus,
    /* 0x3C */ Gr_Kind_TSeak,
    /* 0x3D */ Gr_Kind_TYoshi,
    /* 0x3E */ Gr_Kind_TZelda,
    /* 0x3F */ Gr_Kind_TGamewatch,
    /* 0x40 */ Gr_Kind_TEmblem,
    /* 0x41 */ Gr_Kind_TGanon,
    /* 0x42 */ Gr_Kind_Heal,
    /* 0x43 */ Gr_Kind_Homerun, // Home run contest
    /* 0x44 */ Gr_Kind_Figure1,
    /* 0x45 */ Gr_Kind_Figure2,
    /* 0x46 */ Gr_Kind_Figure3,
    /* 0x46 */ Gr_Kind_Count = 221,
} GrKind;
/** @remarks
 * The numbering used by #StartMeleeRules::xE and Stage_802251E8.
 * #stage_id_map converts it to #GrKind, and each archive's @c grGroundParam
 * list is keyed by it; entries 0x21+ are single-player, event, and other mode
 * variants.
 *
 * Both names come from ground.c's report
 * `not found stage param in DAT(grkind=%d stkind=%d,num=%d)`, which passes
 * #StageInfo::grkind and then this value. Member names follow the stage list
 * the develop-mode menu prints.
 */
typedef enum StKind {
    /* 0x00 */ St_Kind_Dummy,
    /* 0x01 */ St_Kind_Test,
    /* 0x02 */ St_Kind_Izumi,
    /* 0x03 */ St_Kind_PStadium,
    /* 0x04 */ St_Kind_Castle,
    /* 0x05 */ St_Kind_Kongo,
    /* 0x06 */ St_Kind_Zebes,
    /* 0x07 */ St_Kind_Corneria,
    /* 0x08 */ St_Kind_Story,
    /* 0x09 */ St_Kind_Onett,
    /* 0x0A */ St_Kind_MuteCity,
    /* 0x0B */ St_Kind_RCruise,
    /* 0x0C */ St_Kind_Garden,
    /* 0x0D */ St_Kind_GreatBay,
    /* 0x0E */ St_Kind_Shrine,
    /* 0x0F */ St_Kind_Kraid,
    /* 0x10 */ St_Kind_Yoster, // the gr module spells it yorster
    /* 0x11 */ St_Kind_Greens,
    /* 0x12 */ St_Kind_Fourside,
    /* 0x13 */ St_Kind_Inishie1,
    /* 0x14 */ St_Kind_Inishie2,
    /* 0x15 */ St_Kind_Akaneia,
    /* 0x16 */ St_Kind_Venom,
    /* 0x17 */ St_Kind_Pura,
    /* 0x18 */ St_Kind_BigBlue,
    /* 0x19 */ St_Kind_Icemt,
    /* 0x1A */ St_Kind_Icetop,
    /* 0x1B */ St_Kind_Flatzone,
    /* 0x1C */ St_Kind_OldPupupu,
    /* 0x1D */ St_Kind_OldYoshi,
    /* 0x1E */ St_Kind_OldKongo,
    /* 0x1F */ St_Kind_Battle,
    /* 0x20 */ St_Kind_Last,
    /* 0x49 */ St_Kind_BigBlueRoute = 73,
    /* 0x55 */ St_Kind_Unk84 = 84,
    /* 0x55 */ St_Kind_Heal,
    /* 0x148 */ St_Kind_Unk328 = 328,
} StKind;
typedef enum StadiumGrType {
    PsType_Display = 1,
} StadiumGrType;
/// Size of the Home-Run Contest parts array, named by an assert in
/// #grHomeRun_8021CB20.
typedef enum Gr_Homerun_Parts {
    /* 0x10 */ Gr_Homerun_Parts_Back = 16,
    /* 0x40 */ Gr_Homerun_Parts_Max = 64,
} Gr_Homerun_Parts;
typedef void (*unkCastleCallback)(void*, struct unkCastle*);
typedef void (*unkCastleCallback2)(void*, struct unkCastle*, Ground_GObj*);
typedef int (*GrIceMtSegmentLookup)(Ground_GObj*);
typedef DynamicsDesc* (*GrTouchLineCallback)(int index);
typedef bool (*GrCheckShadowRenderCallback)(Vec3* fighter_pos, int,
                                            HSD_JObj* jobj);
#define HSD_GOBJ_CLASS_FIGHTER 4
#define HSD_GOBJ_PLINK_FIGHTER 8
#define FIGHTERVARS_SIZE 0xF8
typedef enum_t FtMotionId;
typedef struct ArticleDynamicBones ArticleDynamicBones;
typedef struct CostumeTObjList CostumeTObjList;
typedef struct DObjList DObjList;
typedef struct Fighter Fighter;
typedef struct Fighter_804D653C_t Fighter_804D653C_t;
typedef struct Fighter_CostumeStrings Fighter_CostumeStrings;
typedef struct Fighter_DemoStrings Fighter_DemoStrings;
typedef struct Fighter_x1670_t Fighter_x1670_t;
typedef struct FighterBone FighterBone;
typedef struct FighterPartsTable FighterPartsTable;
typedef struct ft_800898B4_t ft_800898B4_t;
typedef struct ftCo_803C6594_t ftCo_803C6594_t;
typedef struct ftCo_DatAttrs_xBC_t ftCo_DatAttrs_xBC_t;
typedef struct ftCommonData ftCommonData;
typedef struct ftData ftData;
typedef struct ftData_UnkCountStruct ftData_UnkCountStruct;
typedef struct ftData_x58_t ftData_x58_t;
typedef struct ftData_x8 ftData_x8;
typedef struct ftData_x8_x8 ftData_x8_x8;
typedef struct ftDynamics ftDynamics;
typedef struct ftLk_SpecialN_Vec3Group ftLk_SpecialN_Vec3Group;
typedef struct ftMaterial_UnkTevStruct ftMaterial_UnkTevStruct;
typedef struct FtPartsDesc FtPartsDesc;
typedef struct FtPartsVis FtPartsVis;
typedef struct FtPartsVisLookup FtPartsVisLookup;
typedef struct FtSFX FtSFX;
typedef struct gmScriptEventDefault gmScriptEventDefault;
typedef struct IKState IKState;
typedef struct KirbyHatStruct KirbyHatStruct;
typedef struct MotionState MotionState;
typedef struct TempS TempS;
typedef struct UnkCostumeStruct UnkCostumeStruct;
typedef struct UnkFloat6_Camera UnkFloat6_Camera;
typedef u32 MotionFlags;
#ifdef M2C
typedef struct Fighter_GObj Fighter_GObj;
struct Fighter_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ Fighter_GObj* next;
    /*  +C */ Fighter_GObj* prev;
    /* +10 */ Fighter_GObj* next_gx;
    /* +14 */ Fighter_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ void (*rendered)(Fighter_GObj* gobj, s32 code);
    /* +20 */ u64 gxlink_prios;
    /* +28 */ HSD_JObj* hsd_obj;
    /* +2C */ Fighter* user_data;
    /* +30 */ void (*user_data_remove_func)(Fighter* data);
    /* +34 */ void* x34_unk;
};
#else
typedef struct HSD_GObj Fighter_GObj;
#endif
typedef char* (*Fighter_MotionFileStringGetter)(enum_t arg0);
typedef void (*Fighter_ItemEvent)(HSD_GObj* gobj, bool arg1);
typedef void (*Fighter_ModelEvent)(Fighter* fp, int arg1, bool arg2);
typedef void (*Fighter_UnkMtxEvent)(HSD_GObj* gobj, int arg1, Mtx vmtx);
typedef void (*Fighter_UnkPtrEvent)(int arg0, int* arg1, int* arg2);
typedef void (*FighterEvent)(Fighter* fp);
typedef void (*FtCmd)(Fighter_GObj*, CommandInfo*);
typedef void (*FtCmd2)(Fighter_GObj*, CommandInfo*, int);
typedef bool (*ftDevice_Callback0)(Ground_GObj*, Fighter_GObj*, Vec3*);
typedef enum FighterKind {
    /* 00 */ Ft_Kind_Mario,
    /* 01 */ Ft_Kind_Fox,
    /* 02 */ Ft_Kind_Captain,
    /* 03 */ Ft_Kind_Donkey,
    /* 04 */ Ft_Kind_Kirby,
    /* 05 */ Ft_Kind_Koopa,
    /* 06 */ Ft_Kind_Link,
    /* 07 */ Ft_Kind_Seak,
    /* 08 */ Ft_Kind_Ness,
    /* 09 */ Ft_Kind_Peach,
    /* 0A */ Ft_Kind_Popo,
    /* 0B */ Ft_Kind_Nana,
    /* 0C */ Ft_Kind_Pikachu,
    /* 0D */ Ft_Kind_Samus,
    /* 0E */ Ft_Kind_Yoshi,
    /* 0F */ Ft_Kind_Purin,
    /* 10 */ Ft_Kind_Mewtwo,
    /* 11 */ Ft_Kind_Luigi,
    /* 12 */ Ft_Kind_Mars,
    /* 13 */ Ft_Kind_Zelda,
    /* 14 */ Ft_Kind_CLink,
    /* 15 */ Ft_Kind_DrMario,
    /* 16 */ Ft_Kind_Falco,
    /* 17 */ Ft_Kind_Pichu,
    /* 18 */ Ft_Kind_GameWatch,
    /* 19 */ Ft_Kind_Ganon,
    /* 1A */ Ft_Kind_Emblem,
    /* 1B */ Ft_Kind_MasterH,
    /* 1C */ Ft_Kind_CrezyH,
    /* 1D */ Ft_Kind_Boy,
    /* 1E */ Ft_Kind_Girl,
    /* 1F */ Ft_Kind_GKoops,
    /* 20 */ Ft_Kind_Sandbag,
    /* 21 */ Ft_Kind_None,
    /* 21 */ Ft_Kind_Max = Ft_Kind_None
} FighterKind;
typedef enum CharacterKind {
    /* 00 */ CKind_Captain, // Captain Falcon (Captain)
    /* 01 */ CKind_Donkey, // Donkey Kong (Donkey)
    /* 02 */ CKind_Fox, // Fox
    /* 03 */ CKind_GameWatch, // Mr. Game & Watch (GameWatch)
    /* 04 */ CKind_Kirby, // Kirby
    /* 05 */ CKind_Koopa, // Bowser (Koopa)
    /* 06 */ CKind_Link, // Link
    /* 07 */ CKind_Luigi, // Luigi
    /* 08 */ CKind_Mario, // Mario
    /* 09 */ CKind_Mars, // Marth (Mars)
    /* 0A */ CKind_Mewtwo, // Mewtwo
    /* 0B */ CKind_Ness, // Ness
    /* 0C */ CKind_Peach, // Peach
    /* 0D */ CKind_Pikachu, // Pikachu
    /* 0E */ CKind_PopoNana, // Ice Climbers (Popo & Nana)
    /* 0F */ CKind_Purin, // Jigglypuff (Purin)
    /* 10 */ CKind_Samus, // Samus
    /* 11 */ CKind_Yoshi, // Yoshi
    /* 12 */ CKind_Zelda, // Zelda (ZE->SE)
    /* 13 */ CKind_Seak, // Sheik (SE->ZE)
    /* 14 */ CKind_Falco, // Falco
    /* 15 */ CKind_CLink, // Young Link (CLink)
    /* 16 */ CKind_DrMario, // Dr. Mario
    /* 17 */ CKind_Emblem, // Roy (Emblem)
    /* 18 */ CKind_Pichu, // Pichu
    /* 19 */ CKind_Ganon, // Ganondorf (Ganon)
    /* 1A */ CKind_Playable_Count,
    /* 1A */ CKind_MasterH = CKind_Playable_Count, // Master Hand (MasterH)
    /* 1B */ CKind_Boy, // Male Wireframe (Boy)
    /* 1C */ CKind_Girl, // Female Wireframe (Girl)
    /* 1D */ CKind_GKoops, // Giga Bowser (GKoops)
    /* 1E */ CKind_CrezyH, // Crazy Hand (CrezyH)
    /* 1F */ ChKind_Sandbag, // Sandbag
    /* 20 */ ChKind_Popo, // Popo
    /* 21 */ ChKind_None, // None
    /* 21 */ ChKind_Max = ChKind_None
} CharacterKind;
static MotionFlags const Ft_MF_None = 0;
static MotionFlags const Ft_MF_KeepFastFall = 1 << 0;
static MotionFlags const Ft_MF_KeepGfx = 1 << 1;
/// Preserve full body collision state
static MotionFlags const Ft_MF_KeepColAnimHitStatus = 1 << 2;
/// Keep hitboxes
static MotionFlags const Ft_MF_SkipHit = 1 << 3;
/// Ignore model state change ?
static MotionFlags const Ft_MF_SkipModel = 1 << 4;
static MotionFlags const Ft_MF_SkipAnimVel = 1 << 5;
static MotionFlags const Ft_MF_Unk06 = 1 << 6;
/// Ignore switching to character's "hurt" textures ?
static MotionFlags const Ft_MF_SkipMatAnim = 1 << 7;
/// Resets thrower GObj pointer to NULL if false?
static MotionFlags const Ft_MF_SkipThrowException = 1 << 8;
static MotionFlags const Ft_MF_KeepSfx = 1 << 9;
/// Ignore Parasol state change
static MotionFlags const Ft_MF_SkipParasol = 1 << 10;
/// Ignore rumble update?
static MotionFlags const Ft_MF_SkipRumble = 1 << 11;
static MotionFlags const Ft_MF_SkipColAnim = 1 << 12;
/// Keep respawn platform?
static MotionFlags const Ft_MF_KeepAccessory = 1 << 13;
/// Run all Subaction Events up to the current animation frame
static MotionFlags const Ft_MF_UpdateCmd = 1 << 14;
static MotionFlags const Ft_MF_SkipNametagVis = 1 << 15;
/// Assume this is for individual bones?
static MotionFlags const Ft_MF_KeepColAnimPartHitStatus = 1 << 16;
static MotionFlags const Ft_MF_KeepSwordTrail = 1 << 17;
/// Used by Ness during Up/Down Smash
static MotionFlags const Ft_MF_SkipItemVis = 1 << 18;
/// Skips updating bit 5 of #Fighter::x2222_flag?
static MotionFlags const Ft_MF_Unk19 = 1 << 19;
static MotionFlags const Ft_MF_UnkUpdatePhys = 1 << 20;
/// Sets anim rate to 0 and some other stuff
static MotionFlags const Ft_MF_FreezeState = 1 << 21;
static MotionFlags const Ft_MF_SkipModelPartVis = 1 << 22;
static MotionFlags const Ft_MF_SkipMetalB = 1 << 23;
static MotionFlags const Ft_MF_Unk24 = 1 << 24;
static MotionFlags const Ft_MF_SkipAttackCount = 1 << 25;
static MotionFlags const Ft_MF_SkipModelFlags = 1 << 26;
static MotionFlags const Ft_MF_Unk27 = 1 << 27;
static MotionFlags const Ft_MF_SkipHitStun = 1 << 28;
/// Keeps current fighter animation?
static MotionFlags const Ft_MF_SkipAnim = 1 << 29;
static MotionFlags const Ft_MF_Unk30 = 1 << 30;
/// Unused?
static MotionFlags const Ft_MF_Unk31 = 1 << 31;
/// Ledge Grab Macros
#define CLIFFCATCH_BOTH 0
#define CLIFFCATCH_LEFT -1
#define CLIFFCATCH_RIGHT 1
typedef enum Fighter_Part {
    FtPart_TopN,
    FtPart_TransN,
    FtPart_XRotN,
    FtPart_YRotN,
    FtPart_HipN,
    FtPart_WaistN,
    FtPart_LLegJA,
    FtPart_LLegJ,
    FtPart_LKneeJ,
    FtPart_LFootJA,
    FtPart_LFootJ,
    FtPart_RLegJA,
    FtPart_RLegJ,
    FtPart_RKneeJ,
    FtPart_RFootJA,
    FtPart_RFootJ,
    FtPart_BustN,
    FtPart_LShoulderN,
    FtPart_LShoulderJA,
    FtPart_LShoulderJ,
    FtPart_LArmJ,
    FtPart_LHandN,
    FtPart_L1stNa,
    FtPart_L1stNb,
    FtPart_L2ndNa,
    FtPart_L2ndNb,
    FtPart_L3rdNa,
    FtPart_L3rdNb,
    FtPart_L4thNa,
    FtPart_L4thNb,
    FtPart_LThumbNa,
    FtPart_LThumbNb,
    FtPart_LHandNb,
    FtPart_NeckN,
    FtPart_HeadN,
    FtPart_RShoulderN,
    FtPart_RShoulderJA,
    FtPart_RShoulderJ,
    FtPart_RArmJ,
    FtPart_RHandN,
    FtPart_R1stNa,
    FtPart_R1stNb,
    FtPart_R2ndNa,
    FtPart_R2ndNb,
    FtPart_R3rdNa,
    FtPart_R3rdNb,
    FtPart_R4thNa,
    FtPart_R4thNb,
    FtPart_RThumbNa,
    FtPart_RThumbNb,
    FtPart_RHandNb,
    FtPart_ThrowN,
    FtPart_TransN2,
    FtPart_56 = 56,
    FtPart_109 = 109,
} Fighter_Part;
typedef enum FtWalkType {
    FtWalkType_Slow,
    FtWalkType_Middle,
    FtWalkType_Fast,
} FtWalkType;
typedef enum FtMoveId {
    FtMoveId_None,
    FtMoveId_Default,
    FtMoveId_Attack11,
    FtMoveId_Attack12,
    FtMoveId_Attack13,
    FtMoveId_Attack100,
    FtMoveId_AttackDash,
    FtMoveId_AttackS3,
    FtMoveId_AttackHi3,
    FtMoveId_AttackLw3,
    FtMoveId_AttackS4,
    FtMoveId_AttackHi4,
    FtMoveId_AttackLw4,
    FtMoveId_AttackAirN,
    FtMoveId_AttackAirF,
    FtMoveId_AttackAirB,
    FtMoveId_AttackAirHi,
    FtMoveId_AttackAirLw,
    FtMoveId_SpecialN,
    FtMoveId_SpecialS,
    FtMoveId_SpecialHi,
    FtMoveId_SpecialLw,
    FtMoveId_KbSpecialNMr,
    FtMoveId_KbSpecialNFx,
    FtMoveId_KbSpecialNCa,
    FtMoveId_KbSpecialNDk,
    FtMoveId_KbSpecialNKp,
    FtMoveId_KbSpecialNLk,
    FtMoveId_KbSpecialNSk,
    FtMoveId_KbSpecialNNs,
    FtMoveId_KbSpecialNPe,
    FtMoveId_KbSpecialNPp,
    FtMoveId_KbSpecialNPk,
    FtMoveId_KbSpecialNSs,
    FtMoveId_KbSpecialNYs,
    FtMoveId_KbSpecialNPr,
    FtMoveId_KbSpecialNMt,
    FtMoveId_KbSpecialNLg,
    FtMoveId_KbSpecialNMs,
    FtMoveId_KbSpecialNZd,
    FtMoveId_KbSpecialNCl,
    FtMoveId_KbSpecialNDr,
    FtMoveId_KbSpecialNFc,
    FtMoveId_KbSpecialNPc,
    FtMoveId_KbSpecialNGw,
    FtMoveId_KbSpecialNGn,
    FtMoveId_KbSpecialNFe,
    FtMoveId_KbSpecialNGk,
    FtMoveId_Unk48,
    FtMoveId_Unk49,
    FtMoveId_DownAttackU,
    FtMoveId_DownAttackD,
    FtMoveId_CatchAttack,
    FtMoveId_ThrowF,
    FtMoveId_ThrowB,
    FtMoveId_ThrowHi,
    FtMoveId_ThrowLw,
    FtMoveId_CargoThrowF,
    FtMoveId_CargoThrowB,
    FtMoveId_CargoThrowHi,
    FtMoveId_CargoThrowLw,
    FtMoveId_CliffAttackSlow,
    FtMoveId_CliffAttackQuick,
    FtMoveId_SwordSwing1,
    FtMoveId_SwordSwing3,
    FtMoveId_SwordSwing4,
    FtMoveId_SwordSwingDash,
    FtMoveId_BatSwing1,
    FtMoveId_BatSwing3,
    FtMoveId_BatSwing4,
    FtMoveId_BatSwingDash,
    FtMoveId_ParasolSwing1,
    FtMoveId_ParasolSwing3,
    FtMoveId_ParasolSwing4,
    FtMoveId_ParasolSwingDash,
    FtMoveId_HarisenSwing1,
    FtMoveId_HarisenSwing3,
    FtMoveId_HarisenSwing4,
    FtMoveId_HarisenSwingDash,
    FtMoveId_StarRodSwing1,
    FtMoveId_StarRodSwing3,
    FtMoveId_StarRodSwing4,
    FtMoveId_StarRodSwingDash,
    FtMoveId_LipstickSwing1,
    FtMoveId_LipstickSwing3,
    FtMoveId_LipstickSwing4,
    FtMoveId_LipstickSwingDash,
    FtMoveId_Parasol,
    FtMoveId_LGunShoot,
    FtMoveId_FireFlowerShoot,
    FtMoveId_Screw,
    FtMoveId_ScopeRapid,
    FtMoveId_ScopeFire,
    FtMoveId_Hammer,
    FtMoveId_WarpStarFall,
} FtMoveId;
typedef enum SmashState {
    SmashState_None,
    SmashState_PreCharge,
    SmashState_Charging,
    SmashState_Release,
} SmashState;
typedef enum ftCommon_BuryType {
    BuryType_Unk0,
    BuryType_Unk1,
    BuryType_Unk2,
    BuryType_Unk3,
} ftCommon_BuryType;
enum {
    Ft_Dynamics_NumMax = 10,
};
enum EntityKind {
    EntityKind_None,
    EntityKind_Fighter,
    EntityKind_Item,
    EntityKind_UNKNOWN,
};
typedef enum GroundOrAir {
    GA_Ground,
    GA_Air,
} GroundOrAir;
/// @todo ::ftCo_800B2AFC
typedef enum CpuKind {
    CpuKind_0,
    CpuKind_1,
    CpuKind_2,
    CpuKind_3,
    CpuKind_4,
    CpuKind_5,
    CpuKind_Nana,
    CpuKind_7,
    CpuKind_8,
    CpuKind_9,
    CpuKind_10,
    CpuKind_11,
    CpuKind_12,
    CpuKind_13,
    CpuKind_14,
    CpuKind_15,
    CpuKind_16,
    CpuKind_17,
    CpuKind_18,
    CpuKind_19,
    CpuKind_20,
    CpuKind_21,
    CpuKind_22,
    CpuKind_23,
    CpuKind_24,
    CpuKind_25,
    CpuKind_26,
    CpuKind_27,
    CpuKind_28,
    CpuKind_29,
} CpuKind;
/// Color animation ID.
typedef enum FtColAnim {
    /// IDs starting here index the separate spycloak list after subtraction.
    /* 0x7B */ FtColAnim_SpycloakStart = 0x7B,
} FtColAnim;
#define MELEE_IT_FORWARD_H
#define HSD_GOBJ_CLASS_ITEM 6
#define HSD_GOBJ_PLINK_ITEM 9
/// @def HSD_GOBJ_CLASS_ITEMLINK
/// Used by chain-type items in-game to link multiple parts together
#define HSD_GOBJ_CLASS_ITEMLINK 7
typedef struct Article Article;
typedef struct BobOmbRain BobOmbRain;
typedef struct BoneDynamicsDesc BoneDynamicsDesc;
typedef struct CameraBoxFlags CameraBoxFlags;
typedef struct DynamicBoneTable DynamicBoneTable;
typedef struct flag32 flag32;
typedef struct HSD_ObjAllocUnk HSD_ObjAllocUnk;
typedef struct Item_FtTrack Item_FtTrack;
typedef struct RandomItemSpawner RandomItemSpawner;
typedef struct PokemonSelectionState PokemonSelectionState;
typedef struct HSD_ObjAllocUnk5 HSD_ObjAllocUnk5;
typedef struct ItemPickTable ItemPickTable;
typedef struct itUnk2_DatAttrs itUnk2_DatAttrs;
typedef struct Item Item;
typedef struct Item_DynamicBones Item_DynamicBones;
typedef struct ItemAttr ItemAttr;
typedef struct ItemCommonData ItemCommonData;
typedef struct ItemDynamics ItemDynamics;
typedef struct ItemModelDesc ItemModelDesc;
typedef struct ItemModStruct ItemModStruct;
typedef struct ItemStateArray ItemStateArray;
typedef struct ItemStateDesc ItemStateDesc;
typedef struct itSword_ItemVars itSword_ItemVars;
typedef struct SpawnItem SpawnItem;
typedef struct UnkItemArticles3 UnkItemArticles3;
#ifdef M2C
typedef struct Item_GObj Item_GObj;
struct Item_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ Item_GObj* next;
    /*  +C */ Item_GObj* prev;
    /* +10 */ Item_GObj* next_gx;
    /* +14 */ Item_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ void (*rendered)(Item_GObj* gobj, s32 code);
    /* +20 */ u64 gxlink_prios;
    /* +28 */ HSD_JObj* hsd_obj;
    /* +2C */ Item* user_data;
    /* +30 */ void (*user_data_remove_func)(Item* data);
    /* +34 */ void* x34_unk;
};
#else
typedef HSD_GObj Item_GObj;
#endif
typedef void (*ItCmd)(Item_GObj* gobj, CommandInfo* cmd);
typedef enum Item_StateChangeFlags {
    ITEM_UNK_0x1 = (1 << 0),
    /**
     * Updates item model with target Item State's AnimJoint, MatAnimJoint and
     * extra HSD archive node if available
     */
    ITEM_ANIM_UPDATE = (1 << 1),
    /// Copies #Item::xC44 to #Item::xC40 if enabled.
    ITEM_DROP_UPDATE = (1 << 2),
    ITEM_MODEL_UPDATE = (1 << 3), ///< Runs some #HSD_JObj function
    ITEM_HIT_PRESERVE = (1 << 4), ///< Keep current hitboxes
    ITEM_SFX_PRESERVE = (1 << 5), ///< Keep current SFX
    ITEM_COLANIM_PRESERVE = (1 << 6), ///< Keep current color overlay
    ITEM_UNK_UPDATE = (1 << 7),
    /// Run item's Subaction Events up to its current animation frame
    ITEM_CMD_UPDATE = (1 << 8),
} Item_StateChangeFlags;
/**
 * @todo Doxygen can't seem to find enums by name...
 * These are used in #it_8026C258 to determine whether Samus' Homing Missile
 * should lock on its target.
 */
typedef enum Item_UnkKinds {
    ITEM_UNK_MATO = 4, ///< Item type: Target (Mato)
    ITEM_UNK_LOCKON,
    ITEM_UNK_ENEMY, ///< Item type: Stage Enemy (Goomba, Koopa Troopa, etc.)
    ITEM_UNK_7
} Item_UnkKinds;
/// Combine with Item_UnkKinds?
typedef enum Item_HoldKinds {
    ITEM_HOLD_0, // Common items, besides It_Kind_Foods
    ITEM_HOLD_1, // Item-related items
    ITEM_HOLD_2, // It_Kind_Foods
    ITEM_HOLD_3, // It_PKind_Random
    ITEM_HOLD_4, // Monsters 2 and Stage-specific items, besides
                  // It_Kind_Arwing_Laser, It_Kind_GreatFox_Laser, and
                  // It_Kind_Kyasarin_Egg
    ITEM_HOLD_5, // (Stage-specific projectile items) It_Kind_Arwing_Laser,
                  // It_Kind_GreatFox_Laser, and It_Kind_Kyasarin_Egg
    ITEM_HOLD_6, // Monster items, besides It_Kind_Octarock_Stone
    ITEM_HOLD_7, // It_Kind_Octarock_Stone
    ITEM_HOLD_8, // Character-related items, besides It_Kind_Unk4 and
                  // It_Kind_Coin
    ITEM_HOLD_9, // Pokemon items
    ITEM_HOLD_10, // Pokemon-related items
    ITEM_HOLD_11, // It_Kind_Coin
    ITEM_HOLD_12, // It_Kind_Unk4
    // More?
} Item_HoldKinds;
/// Based on "ID Lists" from the SSBM datasheet, in-game references, and
/// further research by VetriTheRetri
/// https://docs.google.com/spreadsheets/d/1JX2w-r2fuvWuNgGb6D3Cs4wHQKLFegZe2jhbBuIhCG8
/// Development JP name strings are listed starting at data address 0x803EA7A8
#define It_Common_Start It_Kind_Capsule
#define It_Common_End It_Kind_L_Gun_Ray
typedef enum ItemKind {
    /// @name COMMON ITEMS
    /// @{
    /* 00 */ It_Kind_Capsule, // Capsule
    /* 01 */ It_Kind_Box, // Crate
    /* 02 */ It_Kind_Taru, // Barrel
    /* 03 */ It_Kind_Egg, // Egg
    /* 04 */ It_Kind_Kusudama, // Party Ball (Kusudama)
    /* 05 */ It_Kind_TaruCann, // Barrel Cannon (TaruCann)
    /* 06 */ It_Kind_BombHei, // Bob-omb (BombHei)
    /* 07 */ It_Kind_Dosei, // Mr. Saturn (Dosei)
    /* 08 */ It_Kind_Heart, // Heart Container
    /* 09 */ It_Kind_Tomato, // Maxim Tomato
    /* 0A */ It_Kind_Star, // Starman (Super Star)
    /* 0B */ It_Kind_Bat, // Home-Run Bat
    /* 0C */ It_Kind_Sword, // Beam Sword
    /* 0D */ It_Kind_Parasol, // Parasol
    /* 0E */ It_Kind_G_Shell, // Green Shell (G Shell)
    /* 0F */ It_Kind_R_Shell, // Red Shell (R Shell)
    /* 10 */ It_Kind_L_Gun, // Ray Gun (L Gun)
    /* 11 */ It_Kind_Freeze, // Freezie (Freeze)
    /* 12 */ It_Kind_Foods, // Food
    /* 13 */ It_Kind_MSBomb, // Proximity Mine (MSBomb)
    /* 14 */ It_Kind_Flipper, // Flipper
    /* 15 */ It_Kind_S_Scope, // Super Scope (S Scope)
    /* 16 */ It_Kind_StarRod, // Star Rod
    /* 17 */ It_Kind_LipStick, // Lip's Stick
    /* 18 */ It_Kind_Harisen, // Fan (Harisen)
    /* 19 */ It_Kind_F_Flower, // Fire Flower (F Flower)
    /* 1A */ It_Kind_Kinoko, // Super Mushroom (Kinoko)
    /* 1B */ It_Kind_DKinoko, // Poison Mushroom (DKinoko)
    /* 1C */ It_Kind_Hammer, // Hammer
    /* 1D */ It_Kind_WStar, // Warp Star (WStar)
    /* 1E */ It_Kind_ScBall, // Screw Attack (ScBall)
    /* 1F */ It_Kind_RabbitC, // Bunny Hood (RabbitC)
    /* 20 */ It_Kind_MetalB, // Metal Box
    /* 21 */ It_Kind_Spycloak, // Cloaking Device (Spycloak)
    /* 22 */ It_Kind_M_Ball, // Poke Ball (M Ball)
    /// @}
    /// @name ITEM-RELATED
    /// @{
    It_Kind_L_Gun_Ray, // Ray Gun recoil effect (?)
    It_Kind_StarRod_Star, // Star Rod Star
    It_Kind_LipStick_Spore, // Lips Stick Dust
    It_Kind_S_Scope_Beam, // Super Scope Beam
    It_Kind_L_Gun_Beam, // Ray Gun Beam
    It_Kind_Hammer_Head, // Hammer Head
    It_Kind_F_Flower_Flame, // Flower
    It_Kind_EvYoshiEgg, // Yoshi's Egg (Event)
    /// @}
    /// @name MONSTERS
    /// @{
    It_Kind_Kuriboh, // Goomba (Kuriboh)
    It_Kind_Leadead, // Redead (Leadead)
    It_Kind_Octarock, // Octarok (Octarock)
    It_Kind_Ottosea, // Ottosea
    It_Kind_Octarock_Stone, // Stone (Octarok Projectile)
    /// @}
    /// @name CHARACTER-RELATED
    /// @{
    It_Kind_Mario_Fire, // Mario's fireball
    It_Kind_DrMario_Vitamin, // Dr. Mario's pill
    It_Kind_Kirby_CBeam, // Kirby's Cutter beam
    It_Kind_Kirby_Hammer, // Kirby's Hammer
    It_Kind_Unk1, // Maybe Kirby copy star?
    It_Kind_Unk2,
    It_Kind_Fox_Laser, // Fox's Laser
    It_Kind_Falco_Laser, // Falco's Laser
    It_Kind_Fox_Illusion, // Fox's Illusion
    It_Kind_Falco_Phantasm, // Falco's Phantasm
    It_Kind_Link_Bomb, // Link's bomb
    It_Kind_CLink_Bomb, // Young Link's bomb
    It_Kind_Link_Boomerang, // Link's boomerang
    It_Kind_CLink_Boomerang, // Young Link's boomerang
    It_Kind_Link_HShot, // Link's Hookshot
    It_Kind_CLink_HShot, // Young Link's Hookshot
    It_Kind_Link_Arrow, // Link's Arrow
    It_Kind_CLink_Arrow, // Young Link's Fire Arrow
    It_Kind_Ness_PKFire, // PK Fire
    It_Kind_Ness_PKFire_Flame, // PK Fire Pillar
    It_Kind_Ness_PKFlush, // PK Flash (charging state)
    It_Kind_Ness_PKThunder, // PK Thunder (Ball)
    It_Kind_Ness_PKThunder1, // PK Thunder (Trail 1)
    It_Kind_Ness_PKThunder2, // PK Thunder (Trail 2)
    It_Kind_Ness_PKThunder3, // PK Thunder (Trail 3)
    It_Kind_Ness_PKThunder4, // PK Thunder (Trail 4)
    It_Kind_Fox_Blaster, // Fox's Blaster
    It_Kind_Falco_Blaster, // Falco's Blaster
    It_Kind_Link_Bow, // Link's Bow
    It_Kind_CLink_Bow, // Young Link's Bow
    It_Kind_Ness_PKFlush_Explode, // PK Flash (explosion)
    It_Kind_Seak_NeedleThrow, // Needle (thrown)
    It_Kind_Seak_NeedleHeld, // Needle (held)
    It_Kind_Pikachu_Thunder, // Pikachu's Thunder
    It_Kind_Pichu_Thunder, // Pichu's Thunder
    It_Kind_Mario_Cape, // Mario's cape
    It_Kind_DrMario_Sheet, // Dr. Mario's cape
    It_Kind_Seak_Vanish, // Smoke (Sheik)
    It_Kind_Yoshi_EggThrow, // Yoshi's Egg (thrown)
    It_Kind_Yoshi_EggLay, // Yoshi's Egg Lay???
    It_Kind_Yoshi_Star, // Yoshi's Star
    It_Kind_Pikachu_TJolt_Ground, // Pikachu's thunder (B)
    It_Kind_Pikachu_TJolt_Air, // Pikachu's thunder (B)
    It_Kind_Pichu_TJolt_Ground, // Pichu's thunder (B)
    It_Kind_Pichu_TJolt_Air, // Pichu's thunder (B)
    It_Kind_Samus_Bomb, // Samus's bomb
    It_Kind_Samus_Charge, // Samus's chargeshot
    It_Kind_Samus_Missile, // Missile
    It_Kind_Samus_GBeam, // Grapple beam
    It_Kind_Seak_Chain, // Sheik's chain
    It_Kind_Peach_Explode, // Peach Bomber explosion?
    It_Kind_Peach_Turnip, // Peach's turnip
    It_Kind_Koopa_Flame, // Bowser's flame
    It_Kind_Ness_Bat, // Ness's baseball bat
    It_Kind_Ness_Yoyo, // Ness's Yo-Yo
    It_Kind_Peach_Parasol, // Peach's parasol
    It_Kind_Peach_Toad, // Peach's Toad special
    It_Kind_Luigi_Fire, // Luigi's fireball
    It_Kind_IceClimber_Ice, // Ice (Ice Climbers)
    It_Kind_IceClimber_Blizzard, // Blizzard
    It_Kind_Zelda_DinFire, // Din's Fire (charging state)
    It_Kind_Zelda_DinFire_Explode, // Din's Fire (explosion)
    It_Kind_Mewtwo_Disable, // Mewtwo's Disable Projectile
    It_Kind_Peach_ToadSpore, // Peach Toad's spore effect
    It_Kind_Mewtwo_ShadowBall, // Mewtwo's Shadowball
    It_Kind_IceClimber_GumStrings, // Ice Climbers Belay (Up B)
    It_Kind_GameWatch_Greenhouse, // Mr. Game & Watch's Insecticide Spray
    It_Kind_GameWatch_Manhole, // Mr. Game & Watch's Manhole
    It_Kind_GameWatch_Fire, // Mr. Game & Watch's Fire (?)
    It_Kind_GameWatch_Parachute, // Mr. Game & Watch's Parachute
    It_Kind_GameWatch_Turtle, // Mr. Game & Watch's Turtle
    It_Kind_GameWatch_Breath, // Mr. Game & Watch's Sparky
    It_Kind_GameWatch_Judge, // Mr. Game & Watch's Judge
    It_Kind_GameWatch_Panic, // Mr. Game & Watch's Oil Panic (?)
    It_Kind_GameWatch_Chef, // Sausage
    It_Kind_CLink_Milk, // Milk (Young Link)
    It_Kind_GameWatch_Rescue, // Mr. Game & Watch's Firefighter
    It_Kind_MasterHand_Laser, // Master Hand's Laser
    It_Kind_MasterHand_Bullet, // Master Hand's Bullet
    It_Kind_CrazyHand_Laser, // Crazy Hand's Laser
    It_Kind_CrazyHand_Bullet, // Crazy Hand's Bullet
    It_Kind_CrazyHand_Bomb, // Crazy Hand's Bomb
    It_Kind_Kirby_MarioFire, // Kirby copy Mario's Fire (B)
    It_Kind_Kirby_DrMarioVitamin, // Kirby copy Dr. Mario's Capsule (B)
    It_Kind_Kirby_LuigiFire, // Kirby copy Luigi's Fire (B)
    It_Kind_Kirby_IceClimberIce, // Kirby copy Ice Climbers' Ice Shot (B)
    It_Kind_Kirby_PeachToad, // Kirby copy Peach's Toad (B)
    It_Kind_Kirby_PeachToadSpore, // Kirby copy Toad's Spore (B)
    It_Kind_Kirby_FoxLaser, // Kirby copy Fox's Laser (B)
    It_Kind_Kirby_FalcoLaser, // Kirby copy Falco's Laser (B)
    It_Kind_Kirby_FoxBlaster, // Kirby copy Fox's Blaster (B)
    It_Kind_Kirby_FalcoBlaster, // Kirby copy Falco's Blaster (B)
    It_Kind_Kirby_LinkArrow, // Kirby copy Link's Arrow (B)
    It_Kind_Kirby_CLinkArrow, // Kirby copy Young Link's Arrow (B)
    It_Kind_Kirby_LinkBow, // Kirby copy Link's Arrow (B)
    It_Kind_Kirby_CLinkBow, // Kirby copy Young Link's Arrow (B)
    It_Kind_Kirby_MewtwoShadowBall, // Kirby copy Mewtwo's Shadowball (B)
    It_Kind_Kirby_NessPKFlush, // Kirby copy PK Flash (B)
    It_Kind_Kirby_NessPKFlush_Explode, // Kirby copy PK Flash Explosion (B)
    It_Kind_Kirby_PikachuTJolt_Ground, // Kirby copy Pikachu's Thunder (B)
    It_Kind_Kirby_PikachuTJolt_Air, // Kirby copy Pikachu's Thunder (B)
    It_Kind_Kirby_PichuTJolt_Ground, // Kirby copy Pichu's Thunder (B)
    It_Kind_Kirby_PichuTJolt_Air, // Kirby copy Pichu's Thunder (B)
    It_Kind_Kirby_SamusCharge, // Kirby copy Samus' Chargeshot (B)
    It_Kind_Kirby_SeakNeedleThrow, // Kirby copy Sheik's Needle (thrown) (B)
    It_Kind_Kirby_SeakNeedleHeld, // Kirby copy Sheik's Needle (ground) (B)
    It_Kind_Kirby_KoopaFlame, // Kirby copy Bowser's Flame (B)
    It_Kind_Kirby_GameWatchChef, // Kirby copy Mr. Game & Watch's Sausage (B)
    It_Kind_Kirby_GameWatchChefPan, // Kirby copy Mr. Game & Watch's Chef Pan
                                    // (B)
    It_Kind_Kirby_YoshiEggLay, // Kirby's Yoshi Egg Lay??? (B)
    It_Kind_Unk4, // (unique)
    It_Kind_Coin, // Coin (?)
    /// @}
    /// @name POKEMON
    /// @{
    /* 0xA0 */ It_PKind_Random, ///< Used for Random Pokemon value
    /* 0xA1 */ It_PKind_Start, ///< First Poke Ball Pokemon, named by an
                                ///< assert in #pl_8003E70C.
    /* 0xA1 */ It_PKind_Tosakinto = It_PKind_Start, ///< Goldeen (Tosakinto)
    /* 0xA2 */ It_PKind_Chicorita, ///< Chikorita (Chicorita)
    /* 0xA3 */ It_PKind_Kabigon, ///< Snorlax (Kabigon)
    /* 0xA4 */ It_PKind_Kamex, ///< Blastoise (Kamex)
    /* 0xA5 */ It_PKind_Matadogas, ///< Weezing (Matadogas)
    /* 0xA6 */ It_PKind_Lizardon, ///< Charizard (Lizardon)
    /* 0xA7 */ It_PKind_Fire, ///< Moltres (Fire)
    /* 0xA8 */ It_PKind_Thunder, ///< Zapdos (Thunder)
    /* 0xA9 */ It_PKind_Freezer, ///< Articuno (Freezer)
    /* 0xAA */ It_PKind_Sonans, ///< Wobbuffet (Sonans)
    /* 0xAB */ It_PKind_Hassam, ///< Scizor (Hassam)
    /* 0xAC */ It_PKind_Unknown, ///< Unown (Unknown)
    /* 0xAD */ It_PKind_Entei, ///< Entei
    /* 0xAE */ It_PKind_Raikou, ///< Raikou
    /* 0xAF */ It_PKind_Suikun, ///< Suicune (Suikun)
    /* 0xB0 */ It_PKind_Kireihana, ///< Bellossom (Kireihana)
    /* 0xB1 */ It_PKind_Marumine, ///< Electrode (Marumine)
    /* 0xB2 */ It_PKind_Lugia, ///< Lugia
    /* 0xB3 */ It_PKind_Houou, ///< Ho-oh (Houou)
    /* 0xB4 */ It_PKind_Metamon, ///< Ditto (Metamon)
    /* 0xB5 */ It_PKind_Pippi, ///< Clefairy (Pippi)
    /* 0xB6 */ It_PKind_Togepy, ///< Togepi (Togepy)
    /* 0xB7 */ It_PKind_Mew, ///< Mew
    /* 0xB8 */ It_PKind_Cerebi, ///< Celebi (Cerebi)
    /* 0xB9 */ It_PKind_Hitodeman, ///< Staryu (Hitodeman)
    /* 0xBA */ It_PKind_Lucky, ///< Chansey (Lucky)
    /* 0xBB */ It_PKind_Porygon2, ///< Porygon2
    /* 0xBC */ It_PKind_Hinoarashi, ///< Cyndaquil (Hinoarashi)
    /* 0xBD */ It_PKind_Maril, ///< Marill (Maril)
    /* 0xBE */ It_PKind_Fushigibana, ///< Venusaur (Fushigibana)
    /* 0xBF */ It_PKind_Terminate, ///< One past the last Poke Ball Pokemon.
    /// @}
    /// @name POKEMON-RELATED
    /// @{
    /* 0xBF */ It_Kind_Chicorita_Leaf =
        It_PKind_Terminate, ///< Chikorita's Leaf
    /* 0xC0 */ It_Kind_Kamex_HydroPump, ///< Blastoise's Water
    /* 0xC1 */ It_Kind_Matadogas_Gas1, ///< Weezing's Gas
    /* 0xC2 */ It_Kind_Matadogas_Gas2, ///< Weezing's Gas
    /* 0xC3 */ It_Kind_Lizardon_Flame1, ///< Charizard's Breath
    /* 0xC4 */ It_Kind_Lizardon_Flame2, ///< Charizard's Breath
    /* 0xC5 */ It_Kind_Lizardon_Flame3, ///< Charizard's Breath
    /* 0xC6 */ It_Kind_Lizardon_Flame4, ///< Charizard's Breath
    /* 0xC7 */ It_Kind_Unknown_Swarm, ///< Mini-Unowns
    /* 0xC8 */ It_Kind_Lugia_Aeroblast, ///< Lugia's Aeroblast
    /* 0xC9 */ It_Kind_Lugia_Aeroblast2, ///< Lugia's Aeroblast
    /* 0xCA */ It_Kind_Lugia_Aeroblast3, ///< Lugia's Aeroblast
    /* 0xCB */ It_Kind_Houou_SacredFire, ///< Ho-Oh's Flame
    /* 0xCC */ It_Kind_Hitodeman_Star, ///< Staryu's Star
    /* 0xCD */ It_Kind_Lucky_Egg, ///< Chansey's Healing Egg
    /* 0xCE */ It_Kind_Hinoarashi_Flame, ///< Cyndaquil's Fire
    /* 0xCF */ It_Kind_Pokemon_Unk, ///< ???
    /// @}
    /// @name MONSTERS 2
    /// @{
    It_Kind_Old_Kuri, // Old Goomba (old-Kuri)
    It_Kind_Mato, // Target (Mato)
    It_Kind_Heiho, // Yoshi's Story Shy Guy (Heiho)
    It_Kind_Nokonoko, // Koopa Troopa (Green) (Nokonoko)
    It_Kind_Patapata, // Koopa Troopa (Red) (Patapata)
    It_Kind_Likelike, // Like-Like (likelike)
    It_Kind_Old_Lead, // Old Redead (old-lead) [invalid]
    It_Kind_Old_Octa, // Old Octorok (old-octa) [invalid]
    It_Kind_Old_Otto, // Old Ottosea (old-otto)
    It_Kind_Whitebea, // Polar Bear (whitebea)
    It_Kind_Klap, // Klaptrap (klap)
    It_Kind_ZGShell, // Green Shell (zgshell)
    It_Kind_ZRShell, // Red Shell (green act) (zrshell)
    /// @}
    /// @name STAGE-SPECIFIC
    /// @{
    It_Kind_Tincle, // Tingle (Tincle) (on balloon)
    It_Kind_Invalid1, // [Invalid]
    It_Kind_Invalid2, // [Invalid]
    It_Kind_Invalid3, // [Invalid]
    It_Kind_WhispyApple, // Whispy Apple
    It_Kind_WhispyHealApple, // Whispy's Healing Apple
    It_Kind_Invalid4, // [Invalid]
    It_Kind_Invalid5, // [Invalid]
    It_Kind_Invalid6, // [Invalid]
    It_Kind_Tools, // Tool (Flatzone)
    It_Kind_Invalid7, // [Invalid]
    It_Kind_Invalid8, // [Invalid]
    It_Kind_Kyasarin, // Birdo (Kyasarin)
    It_Kind_Arwing_Laser, // Arwing Laser
    It_Kind_GreatFox_Laser, // Great Fox's Laser
    It_Kind_Kyasarin_Egg, // Birdo's Egg
    /// @}
    It_Kind_Unselected = -1,
    It_Kind_None = -999,
} ItemKind;
#define _controller_h_
#define _DOLPHIN_PAD_H_
#define PAD_SPEC_0 0
#define PAD_SPEC_1 1
#define PAD_SPEC_2 2
#define PAD_SPEC_3 3
#define PAD_SPEC_4 4
#define PAD_SPEC_5 5
#define PAD_MOTOR_STOP 0
#define PAD_MOTOR_RUMBLE 1
#define PAD_MOTOR_STOP_HARD 2
#define PAD_CHAN0_BIT 0x80000000
#define PAD_CHAN1_BIT 0x40000000
#define PAD_CHAN2_BIT 0x20000000
#define PAD_CHAN3_BIT 0x10000000
#define PAD_MAX_CONTROLLERS 4
#define PAD_BUTTON_LEFT (1 << 0) // 0x0001
#define PAD_BUTTON_RIGHT (1 << 1) // 0x0002
#define PAD_BUTTON_DOWN (1 << 2) // 0x0004
#define PAD_BUTTON_UP (1 << 3) // 0x0008
#define PAD_TRIGGER_Z (1 << 4) // 0x0010
#define PAD_TRIGGER_R (1 << 5) // 0x0020
#define PAD_TRIGGER_L (1 << 6) // 0x0040
#define PAD_BUTTON_A (1 << 8) // 0x0100
#define PAD_BUTTON_B (1 << 9) // 0x0200
#define PAD_BUTTON_X (1 << 10) // 0x0400
#define PAD_BUTTON_Y (1 << 11) // 0x0800
#define PAD_BUTTON_MENU (1 << 12) // 0x1000
#define PAD_BUTTON_START (1 << 12) // 0x1000
#define PAD_STICK_UP (1 << 16) // 0x10000
#define PAD_STICK_DOWN (1 << 17) // 0x20000
#define PAD_STICK_LEFT (1 << 18) // 0x40000
#define PAD_STICK_RIGHT (1 << 19) // 0x80000
#define PAD_SUBSTICK_UP (1 << 20) // 0x100000
#define PAD_SUBSTICK_DOWN (1 << 21) // 0x200000
#define PAD_SUBSTICK_LEFT (1 << 22) // 0x400000
#define PAD_SUBSTICK_RIGHT (1 << 23) // 0x800000
#define PAD_TRIGGER_LR (1 << 31) // 0x80000000
#define PAD_CONFIRM (1ULL << 32) // 0x100000000
#define PAD_CANCEL (1ULL << 33) // 0x200000000
#define PAD_LR_START (1ULL << 34) // 0x400000000
#define PAD_LRA_START (1ULL << 35) // 0x800000000
#define PAD_ANY_UP (1ULL << 36) // 0x1000000000
#define PAD_ANY_DOWN (1ULL << 37) // 0x2000000000
#define PAD_ANY_LEFT (1ULL << 38) // 0x4000000000
#define PAD_ANY_RIGHT (1ULL << 39) // 0x8000000000
#define PAD_ERR_NONE 0
#define PAD_ERR_NO_CONTROLLER -1
#define PAD_ERR_NOT_READY -2
#define PAD_ERR_TRANSFER -3
#define RES_WIRELESS_LITE 0x40000
typedef struct PADStatus {
    /*0x00*/ u16 button;
    /*0x02*/ s8 stickX;
    /*0x03*/ s8 stickY;
    /*0x04*/ s8 substickX;
    /*0x05*/ s8 substickY;
    /*0x06*/ u8 triggerLeft;
    /*0x07*/ u8 triggerRight;
    /*0x08*/ u8 analogA;
    /*0x09*/ u8 analogB;
    /*0x0A*/ s8 err;
} PADStatus;
// PAD.c
int PADReset(unsigned long mask);
BOOL PADRecalibrate(u32 mask);
BOOL PADInit();
u32 PADRead(struct PADStatus* status);
void PADSetSamplingRate(unsigned long msec);
void __PADTestSamplingRate(unsigned long tvmode);
void PADControlAllMotors(const u32* commandArray);
void PADControlMotor(s32 chan, u32 command);
void PADSetSpec(u32 spec);
unsigned long PADGetSpec();
int PADGetType(long chan, unsigned long* type);
BOOL PADSync(void);
void PADSetAnalogMode(u32 mode);
BOOL __PADDisableRecalibration(int arg0);
void SIRefreshSamplingRate(void);
// Padclamp.c
void PADClamp(PADStatus* status);
#define SYSDOLPHIN_BASELIB_RUMBLE_H
struct HSD_RumbleData {
    u8 last_status;
    u8 status;
    u8 direct_status;
    u16 nb_list;
    HSD_PadRumbleListData* listdatap;
};
/// One command of a rumble script.
struct RumbleCommand {
    u16 op : 3;
    u16 frame : 13;
};
union HSD_Rumble {
    u16 def;
    RumbleCommand command;
};
struct RumbleInfo {
    u16 max_list;
    u8 unk2;
    HSD_PadRumbleListData* listdatap;
};
struct HSD_PadRumbleListData {
    /*0x00*/ HSD_PadRumbleListData* next;
    /*0x04*/ u32 id;
    /*0x08*/ u8 pause;
    /*0x09*/ u8 pri;
    /*0x0A*/ u8 status;
    /*0x0C*/ u16 loop_count;
    /*0x0E*/ u16 wait;
    /*0x10*/ s32 frame;
    /*0x14*/ HSD_Rumble* stack;
    /*0x18*/ HSD_Rumble* listp;
    /*0x1C*/ HSD_Rumble* headp;
};
void HSD_PadRumbleRemoveId(u8, int);
void HSD_PadRumbleFree(HSD_RumbleData* a, HSD_PadRumbleListData* b);
void HSD_PadRumbleRemove(u8 no);
void HSD_PadRumbleRemoveAll(void);
void HSD_PadRumblePause(u8 no, int status);
void HSD_PadRumblePauseAll(void);
void HSD_PadRumbleUnpauseAll(void);
void func_80378430_inline(HSD_PadRumbleListData** r6,
                          HSD_PadRumbleListData* r7);
int HSD_PadRumbleAdd(u8 no, int id, int frame, int pri, void* listp);
void HSD_Rumble_80378524(int max);
int HSD_PadRumbleInterpret1(HSD_PadRumbleListData* a, u8* b);
void HSD_PadRumbleInterpret(void);
void HSD_PadRumbleInit(u16 a, void* b);
void HSD_PadRumbleOn(u8 no);
void HSD_PadRumbleOffN(u8 no);
typedef u32 HSD_Pad;
#define HSD_PAD_DPADLEFT (1 << 0)
#define HSD_PAD_DPADRIGHT (1 << 1)
#define HSD_PAD_DPADDOWN (1 << 2)
#define HSD_PAD_DPADUP (1 << 3)
#define HSD_PAD_Z (1 << 4)
#define HSD_PAD_R (1 << 5)
#define HSD_PAD_L (1 << 6)
#define HSD_PAD_7 (1 << 7)
/// @remarks Also covers Z-Button macro in-game.
#define HSD_PAD_A (1 << 8)
#define HSD_PAD_B (1 << 9)
#define HSD_PAD_X (1 << 10)
#define HSD_PAD_Y (1 << 11)
#define HSD_PAD_START (1 << 12)
/// Digital input of either L or R
#define HSD_PAD_LR (1 << 31)
#define HSD_PAD_AB (HSD_PAD_A | HSD_PAD_B)
#define HSD_PAD_XY (HSD_PAD_X | HSD_PAD_Y)
#define PAD_ERR_NO_CONTROLLER -1
typedef enum _HSD_FlushType {
    HSD_PAD_FLUSH_QUEUE_MERGE,
    HSD_PAD_FLUSH_QUEUE_THROWAWAY,
    HSD_PAD_FLUSH_QUEUE_LEAVE1,
    HSD_PAD_FLUSH_QUEUE_TERMINATE,
} HSD_FlushType;
struct HSD_PadData {
    PADStatus stat[4];
};
struct HSD_PadStatus {
    u32 button;
    u32 last_button;
    u32 trigger;
    u32 repeat;
    u32 release;
    s32 repeat_count;
    s8 stickX;
    s8 stickY;
    s8 subStickX;
    s8 subStickY;
    u8 analogL;
    u8 analogR;
    u8 analogA;
    u8 analogB;
    f32 nml_stickX;
    f32 nml_stickY;
    f32 nml_subStickX;
    f32 nml_subStickY;
    f32 nml_analogL;
    f32 nml_analogR;
    f32 nml_analogA;
    f32 nml_analogB;
    u8 cross_dir;
    s8 err;
};
struct PadLibData {
    /*0x00*/ u8 qnum;
    /*0x01*/ u8 qread;
    /*0x02*/ u8 qwrite;
    /*0x03*/ u8 qcount;
    /*0x04*/ u8 qtype;
    /*0x08*/ HSD_PadData* queue;
    /*0x0C*/ s32 repeat_start;
    /*0x10*/ s32 repeat_interval;
    /*0x14*/ s8 adc_type;
    /*0x15*/ s8 adc_th;
    /*0x18*/ f32 adc_angle;
    /*0x1C*/ u8 clamp_stickType;
    /*0x1D*/ u8 clamp_stickShift;
    /*0x1E*/ s8 clamp_stickMax;
    /*0x1F*/ s8 clamp_stickMin;
    /*0x20*/ u8 clamp_analogLRShift;
    /*0x21*/ u8 clamp_analogLRMax;
    /*0x22*/ u8 clamp_analogLRMin;
    /*0x23*/ u8 clamp_analogABShift;
    /*0x24*/ u8 clamp_analogABMax;
    /*0x25*/ u8 clamp_analogABMin;
    /*0x26*/ s8 scale_stick;
    /*0x27*/ u8 scale_analogLR;
    /*0x28*/ u8 scale_analogAB;
    /*0x29*/ u8 cross_dir;
    /*0x2A*/ u8 reset_switch_status;
    /*0x2B*/ u8 reset_switch;
    /*0x2C*/ struct RumbleInfo rumble_info;
};
extern HSD_PadStatus HSD_PadMasterStatus[4];
extern HSD_PadStatus HSD_PadGameStatus[4];
extern HSD_PadStatus HSD_PadCopyStatus[4];
static inline float HSD_PadGetNmlStickY(u8 slot)
{
    return HSD_PadCopyStatus[slot].nml_stickY;
}
static inline float HSD_PadGetNmlSubStickY(u8 slot)
{
    return HSD_PadCopyStatus[slot].nml_subStickY;
}
void HSD_PadFlushQueue(HSD_FlushType);
u8 HSD_PadGetRawQueueCount(void);
s32 HSD_PadGetResetSwitch(void);
void HSD_PadRenewRawStatus(bool);
void HSD_PadRenewMasterStatus(void);
void HSD_PadRenewCopyStatus(void);
void HSD_PadRenewGameStatus(void);
void HSD_PadRenewStatus(void);
void HSD_PadReset(void);
void HSD_PadInit(u8, HSD_PadData*, u16, HSD_PadRumbleListData*);
extern PadLibData HSD_PadLibData;
typedef enum DbLKind {
    DbLKind_Master = 0,
    DbLKind_NoDebugRom = 1,
    DbLKind_DebugDevelop = 2,
    DbLKind_DebugRom = 3,
    DbLKind_Develop = 4,
} DbLKind;
/* 225374 */ void db_GetGameLaunchButtonState(void);
/* 2254B8 */ void db_Setup(void);
/* 22558C */ HSD_Pad db_ButtonsDown(int player);
/* 2255A4 */ HSD_Pad db_ButtonsPressed(int player);
/* 2255BC */ HSD_Pad db_ButtonsRepeat(int player);
/* 2255D4 */ void db_PrintEntityCounts(void);
/* 2256CC */ void db_PrintThreadInfo(void);
/* 225754 */ void db_RunEveryFrame(void);
/* 225A00 */ void fn_SetupItemAndPokemonMenu(void);
/* 225A54 */ void fn_80225A54(int arg0);
/* 225B0C */ u32 db_ShowEnemyStompRange(void);
/* 225B20 */ u32 db_ShowItemPickupRange(void);
/* 225B34 */ u32 db_ShowCoinPickupRange(void);
/* 225B48 */ void fn_EnableShowCoinPickupRange(void);
/* 225B9C */ void fn_DisableShowCoinPickupRange(void);
/* 225BF0 */ void fn_EnableShowEnemyStompRange(void);
/* 225C44 */ void fn_DisableShowEnemyStompRange(void);
/* 225C8C */ void fn_EnableShowItemPickupRange(void);
/* 225CD4 */ void fn_DisableShowItemPickupRange(void);
/* 225D1C */ s32 db_GetCurrentlySelectedPokemon(void);
/* 225D2C */ void db_DisableItemSpawns(void);
/* 225D40 */ void db_EnableItemSpawns(void);
/* 225D54 */ s32 db_AreItemSpawnsEnabled(void);
/* 225D64 */ void db_80225D64(Item_GObj* item, Fighter_GObj* owner);
/* 225D7C */ void fn_ToggleItemCollisionBubbles(void);
/* 225DD8 */ void db_80225DD8(Item_GObj* item, Fighter_GObj* owner);
/* 225E6C */ void fn_80225E6C(Fighter_GObj* owner, Fighter*);
/* 225F20 */ void db_HandleItemPokemonMenuInput(int player);
/* 2260D4 */ void fn_ShowOrCreateItemAndPokemonMenu(int player);
/* 2261BC */ void fn_UpdateItemAndPokemonMenu(int player);
/* 2262E0 */ void db_CheckAndSpawnItem(int player);
/* 2264C4 */ void fn_CheckItemAndPokemonMenu(int player);
/* 22659C */ void fn_SetupCpuHandicapInfo(void);
/* 22666C */ void fn_UpdateCpuHandicapInfo(void);
/* 226730 */ void fn_CheckCpuHandicapInfo(int arg0);
/* 2267C8 */ void fn_SetupAnimationInfo(void);
/* 2268B8 */ void fn_ToggleMiscFighterVisuals(void);
/* 22697C */ u8 fn_8022697C(Fighter_GObj* owner);
/* 2269C0 */ void fn_UpdateAnimationInfo(void);
/* 226BD4 */ void fn_CheckAnimationInfo(int player);
/* 226E00 */ void fn_SetupMiscStageVisuals(void);
/* 226E0C */ void fn_CheckMiscStageEffects(int arg0);
/* 227174 */ void fn_SetupCameraInfo(void);
/* 227484 */ void fn_CheckCameraInfo(int player, int buttons_down,
                                     int buttons_pressed, f32 cstick_x,
                                     f32 cstick_y);
/* 22873C */ void fn_CheckMiscVisualEffects(int player);
/* 2287C4 */ void fn_Setup5xSpeed(void);
/* 2287D8 */ void fn_Check5xSpeed(int player);
/* 228820 */ void fn_Toggle5xSpeed(void);
/* 22886C */ void db_InitScreenshot(void);
/* 22887C */ void db_CheckScreenshot(void);
/* 22892C */ void db_TakeScreenshotIfPending(void);
/* 228A64 */ void db_ClearFPUExceptions(void);
/* 228C4C */ void db_SetupCrashHandler(void);
/* 228CF4 */ void fn_SetupBonusInfo(void);
/* 2291A0 */ void fn_CheckBonusInfo(int arg0);
/* 229220 */ void fn_SetupObjAllocLimiter(void);
/* 229240 */ void fn_UpdateObjAllocLimiter(int arg0);
/* 3EA6C8 */ extern char db_build_timestamp[];
/* 4D4A08 */ extern DbLKind DbLevel;
/* 4D6B20 */ extern bool db_804D6B20;
/* 4D6B24 */ extern char** db_submotion_names;
/* 4D6B28 */ extern char** db_motionstate_names;
/* 4D6B2C */ extern char** db_bonus_names;
/* 4D6B30 */ extern u16 db_gameLaunchButtonState;
/* 4D6B80 */ extern int db_MiscVisualEffectsStatus;
#define GALE01_228318
/* 228318 */ void fn_SetupSoundInfo(void);
/* 2283F0 */ void fn_UpdateSoundInfo(void);
/* 228620 */ void fn_CheckSoundInfo(int player);
/* 4D4AF8 */ extern int db_804D4AF8;
#define MELEE_EF_EFALT_H
void* efAlt_Spawn(s32, HSD_GObj*, va_list);
#define MELEE_EF_EFASYNC_H
#define MELEE_EF_FORWARD_H
#define HSD_GOBJ_CLASS_EFFECT 8
#define HSD_GOBJ_PLINK_EFFECT_UNK0 11
#define HSD_GOBJ_PLINK_EFFECT_UNK1 12
typedef struct EF_Effect EF_Effect;
typedef struct EF_QueuedEffect EF_QueuedEffect;
typedef struct EF_EffectDesc EF_EffectDesc;
typedef void (*EF_UpdateFn)(EF_Effect*);
typedef enum EfId {
    /* 0x03E8 */ Ef_Id_Unk1000 = 1000,
    /* 0x03E9 */ Ef_Id_Unk1001,
    /* 0x03EA */ Ef_Id_Unk1002,
    /* 0x03EB */ Ef_Id_Unk1003,
    /* 0x03EC */ Ef_Id_Unk1004,
    /* 0x03ED */ Ef_Id_Unk1005,
    /* 0x0416 */ Ef_Id_Unk1046 = 1046,
    /* 0x0479 */ Ef_Id_Unk1145 = 1145,
    /* 0x04E7 */ Ef_Id_Unk1255 = 1255,
} EfId;
/* 063930 */ void* efAsync_Dispatch(s32 gfx_id, HSD_GObj* gobj, va_list vlist);
/* 06729C */ void efAsync_LoadAsync(int index);
/* 06730C */ void efAsync_OnLoad(HSD_Archive* archive, u8* data, u32 length,
                                 int index);
/* 06737C */ void efAsync_LoadSync(int index);
/* 06744C */ void efAsync_QueueProcessDeferred(HSD_GObj* gobj,
                                               EF_QueuedEffect* queued_effect);
/* 067624 */ void efAsync_QueueFlush(HSD_GObj* gobj, EF_QueuedEffect** head);
/* 067688 */ void efAsync_QueueClear(EF_QueuedEffect** head);
/* 0676F0 */ void efAsync_Spawn(HSD_GObj* gobj, EF_QueuedEffect** queue_head,
                                u32 spawn_kind, u32 gfx_id, HSD_JObj* jobj,
                                ...);
/* 0676F0 */ void efAsync_QueueInit(void);
#define MELEE_EF_DATA_H
extern HSD_ObjAllocData efLib_AllocData;
extern HSD_ObjAllocData efAsync_AllocData;
extern u32 efLib_LoadKind;
extern u32 efLib_EffectCount;
extern s32 efLib_AnimCount;
#define MELEE_EF_EFLIB_H
typedef struct EF_ParamEntry {
    /* 0x0 */ void* gobj;
    /* 0x4 */ u16 gfx_id;
    /* 0x6 */ u16 alpha;
} EF_ParamEntry; /* size = 0x8 */
;
/* 05B4B8 */ void efLib_Init(void);
/* 05B704 */ void efLib_SetFlags(HSD_GObj* gobj, s32 expires);
/* 05B780 */ void efLib_Destroy(HSD_GObj* gobj);
/* 05B880 */ void efLib_DestroyAll(HSD_GObj* gobj);
/* 05BA40 */ void efLib_PauseAll(HSD_GObj* gobj);
/* 05BAC4 */ void efLib_ResumeAll(HSD_GObj* gobj);
/* 05BB40 */ void efLib_remove_user_data(void* user_data);
/* 05BBB4 */ void efLib_RemoveLast(void);
/* 05BC50 */ void efLib_Update(HSD_GObj* gobj);
// Create effects
/* 05BE88 */ EF_Effect* efLib_Create(int gfx_id, HSD_GObj* parent_gobj);
/* 05C1B4 */ EF_Effect* efLib_Create_Attach(u32 gfx_id, HSD_GObj* gobj,
                                            HSD_JObj* jobj);
/* 05C2BC */ EF_Effect* efLib_Create_AttachChild(u32 gfx_id, HSD_GObj* gobj,
                                                 HSD_JObj* jobj);
/* 05C3DC */ EF_Effect* efLib_Create_Attach_Scale(u32 gfx_id, HSD_GObj* gobj,
                                                  HSD_JObj* jobj);
/* 05C5C4 */ EF_Effect*
efLib_Create_AttachChild_Scale(u32 gfx_id, HSD_GObj* gobj, HSD_JObj* jobj);
/* 05C6F4 */ EF_Effect* efLib_Create_Attach_Scale_FacingDir(u32 gfx_id,
                                                            HSD_GObj* gobj,
                                                            HSD_JObj* jobj);
/* 05C814 */ EF_Effect* efLib_Create_Attach_Pos(u32 gfx_id, HSD_GObj* gobj,
                                                Vec3* position);
// Particle processing callbacks
/* 05C9A4 */ void efLib_particles_proc_main(HSD_GObj* gobj);
/* 05C9D0 */ void efLib_particles_proc_aux(HSD_GObj* gobj);
// Create generators
/* 05C9FC */ HSD_Generator* efLib_CreateGenerator(s32 gfx_id, Vec3* pos);
/* 05CAB0 */ HSD_Generator* efLib_CreateGenerator_AddAppSRT(s32 gfx_id);
/* 05CB34 */ HSD_Generator*
efLib_CreateGenerator_Translate_FacingDir(s32 gfx_id, Vec3* translation,
                                          f32 direction);
/* 05CC2C */ HSD_Generator* efLib_CreateGenerator_Attach(s32 gfx_id,
                                                         HSD_JObj* jobj);
/* 05CC84 */ HSD_Generator*
efLib_CreateGenerator_Attach_AddAppSRT(s32 gfx_id, HSD_JObj* jobj);
/* 05CD2C */ HSD_Generator*
efLib_CreateGenerator_Attach_Scale(s32 gfx_id, va_list vlist, HSD_GObj* gobj);
/* 05CE48 */ HSD_Generator*
efLib_CreateGenerator_AppSRT_SetScale(s32 gfx_id, va_list vlist);
/* 05CF40 */ HSD_Generator*
efLib_CreateGenerator_AppSRT_SetFacingDir(s32 gfx_id, va_list vlist);
/* 05D044 */ HSD_Generator*
efLib_CreateGenerator_AppSRT_SetFacingDirScale(s32 gfx_id, va_list vlist);
// Called by particles library
/* 05D174 */ void efLib_SpawnParticleEffect(int bank, s32 gfx_id,
                                            HSD_JObj* jobj, bool flag);
// Particle-related callbacks
/* 05DB20 */ void efLib_Cb_SPtcl(s32 linkNo, s32 bank, s32 gfx_id,
                                 HSD_JObj* jobj);
/* 05DB70 */ void efLib_Cb_DPtcl(int linkNo, int bank, int gfx_id,
                                 HSD_JObj* jobj);
/* 05DBC0 */ void efLib_Cb_ParticleRender(HSD_Particle* particle);
/* 05DCD0 */ void efLib_Cb_PtclAppSRTHook(HSD_Generator* particle);
// Effect callbacks
/* 05DDB8 */ void efLib_Cb_SetOffsetY_FromParamY(EF_Effect* effect);
/* 05DE94 */ void efLib_Cb_SetScale_FromParamX(EF_Effect* effect);
/* 05E090 */ void efLib_Cb_SetRotYAndTransition(EF_Effect* effect);
/* 05E1D8 */ void efLib_Cb_SetJObjOffsetZ(EF_Effect* effect);
/* 05E2B4 */ void efLib_Cb_SetRotY_FromFighterDir(EF_Effect* effect);
/* 05E3A0 */ void efLib_Cb_SetRotYZ_FromFighter(EF_Effect* effect);
/* 05E648 */ void efLib_Cb_Fall_FromParamY(EF_Effect* effect);
/* 05E950 */ void efLib_Cb_SetOffset_FromParams(EF_Effect* effect);
/* 05EB70 */ void efLib_Cb_LifetimeEndSpawn(EF_Effect* effect);
/* 05EBC8 */ void efLib_Cb_SetScaleRotY_FromFighter(EF_Effect* effect);
/* 05EDDC */ void efLib_Cb_SetRotYZ_FromParamZ_FighterDir(EF_Effect* effect);
/* 05F08C */ void efLib_Cb_ftMr_SpecialLw(EF_Effect* effect);
/* 05F270 */ void efLib_Cb_ftLg_SpecialLw(EF_Effect* effect);
/* 05F454 */ void efLib_Cb_ftKp_SpecialHi(EF_Effect* effect);
/* 05F748 */ void efLib_Cb_ftCo_Bury(EF_Effect* effect);
// Property setting
/* 05F774 */ void efLib_SetTevKonstColor(HSD_JObj* jobj, s32 count, u32 konst,
                                         u32 tev0);
/* 05F864 */ void efLib_SetParamAlpha(HSD_GObj* gobj, u8 alpha);
/* 05F990 */ void efLib_SetParamGfxId(HSD_GObj* gobj, s32 gfx_id);
// More effect callbacks (?)
/* 05FAB8 */ void efLib_Cb_ApplyStoredAlpha(EF_Effect* effect);
/* 05FBE4 */ void efLib_Cb_AccumOffset_FromParams(EF_Effect* effect);
// Misplaced generator creation
/* 05FCD8 */ EF_Effect* efLib_CreateGenerator_AppSRT_SetPos(int gfx_id,
                                                            HSD_GObj* gobj,
                                                            HSD_JObj* jobj,
                                                            Vec3* vec);
extern EF_ParamEntry efLib_AnimQueue[0x10];
extern EF_ParamEntry efLib_ParamTable[0x8];
#define MELEE_EF_EFSYNC_H
void* efSync_Spawn(s32 gfx_id, HSD_GObj* arg_gobj, ...);
#define MELEE_EF_INLINES_H
#ifdef M2C
#define GET_EFFECT(gobj) ((EF_Effect*) HSD_GObjGetUserData((HSD_GObj*) gobj))
#else
#define GET_EFFECT(gobj) ((EF_Effect*) HSD_GObjGetUserData(gobj))
#endif
#define MELEE_EF_TYPES_H
#define MELEE_SC_TYPES_H
#define MELEE_SC_FORWARD_H
typedef struct DynamicModelDesc DynamicModelDesc;
typedef struct LightList LightList;
typedef struct SceneDesc SceneDesc;
typedef struct StaticModelDesc StaticModelDesc;
/// Model with a single animation or no animation
struct StaticModelDesc {
    HSD_Joint* joint;
    HSD_AnimJoint* animjoint;
    HSD_MatAnimJoint* matanim_joint;
    HSD_ShapeAnimJoint* shapeanim_joint;
};
/// Model with multiple animations
struct DynamicModelDesc {
    HSD_Joint* joint;
    HSD_AnimJoint** anims;
    HSD_MatAnimJoint** matanims;
    HSD_ShapeAnimJoint** shapeanims;
};
typedef struct SceneCameraDesc {
    HSD_CObjDesc* desc;
    HSD_CameraAnim** anims;
} SceneCameraDesc;
typedef struct LightList {
    HSD_LightDesc* desc;
    HSD_LightAnim** anims;
} LightList;
typedef struct SceneFogDesc {
    HSD_FogDesc* desc;
    HSD_CameraAnim** anims;
} SceneFogDesc;
/// The basis of a rendered scene, like a stage, menu, or HUD overlay
struct SceneDesc {
    DynamicModelDesc** models;
    SceneCameraDesc* cameras;
    LightList** lights;
    SceneFogDesc* fogs;
};
// How efAsync_Spawn resolves position and forwards args to efSync_Spawn.
// ATTACH = passes jobj directly (effect tracks the joint).
// POS    = converts jobj to world coords via lb_8000B1CC (effect at fixed
// pos). OFFSET = Vec3 offset applied during world-pos calculation. PARAM  =
// extra float(s) forwarded to efSync_Spawn after the position arg.
typedef enum EF_SpawnKind {
    EF_SPAWN_ATTACH =
        0, // (jobj)                 -> efSync(gfx_id, gobj, jobj)
    EF_SPAWN_POS = 1, // (jobj)                 -> worldpos(jobj) ->
                      // efSync(gfx_id, gobj, &pos)
    EF_SPAWN_POS_OFFSET = 2, // (jobj, &ofs)           -> worldpos(jobj, &ofs)
                             // -> efSync(gfx_id, gobj, &pos)
    EF_SPAWN_ATTACH_PARAM =
        3, // (jobj, &f)             -> efSync(gfx_id, gobj, jobj, &f)
    EF_SPAWN_POS_PARAM = 4, // (jobj, &f)             -> worldpos(jobj) ->
                            // efSync(gfx_id, gobj, &pos, &f)
    EF_SPAWN_POS_OFFSET_PARAM =
        5, // (jobj, &ofs, &f)       -> worldpos(jobj, &ofs)             ->
           // efSync(..., &pos, &f)
    EF_SPAWN_POS_OFFSET_PARAM2 =
        6, // (jobj, &ofs, &f1, &f2) -> worldpos(jobj, &ofs)             ->
           // efSync(..., &f1, &f2)
    EF_SPAWN_ATTACH_OFFSET =
        7, // (jobj, &vec)           -> efSync(gfx_id, gobj, jobj, &vec)
    EF_SPAWN_CAMERA_SHAKE =
        8, // (jobj, &ofs)           -> worldpos(jobj, &ofs)             ->
           // Camera_RequestQuake(gfx_id, &pos)
} EF_SpawnKind;
// 0 = async load (default)
// 1 = sync load
#define EF_LOADKIND_ASYNC 0
#define EF_LOADKIND_SYNC 1
// EF_Effect: scale_flags
#define EF_SCALE_NO_INHERIT 0x00
#define EF_SCALE_INHERIT 0x01
// EF_Effect: expire_flags
#define EF_DOES_NOT_EXPIRE 0x00
#define EF_DOES_EXPIRE 0x01
// EF_Effect: state_flags
#define EF_STATE_ACTIVE 0x00
#define EF_STATE_ENTERING_PAUSE 0x01
#define EF_STATE_PAUSED 0x02
#define EF_STATE_ASYNC 0x80
struct EF_Effect {
    /*  +0 */ EF_Effect* next;
    /*  +4 */ HSD_GObj* gobj;
    /*  +8 */ HSD_GObj* parent_gobj;
    /*  +C */ HSD_JObj* attach_jobj;
    /* +10 */ EF_UpdateFn update;
    /* +14 */ void* user_data;
    /* +18 */ Vec3 params; // callback parameters, usage depends per-callback
    /* +24 */ u16 lifetime;
    /* +26 */ s8 expire_flags;
    /* +27 */ u8 scale_flags;
    /* +28 */ u8 state_flags;
    /* +29 */ u8 is_async;
    /* +2A */ s8 x2A;
    /* +2B */ s8 x2B;
}; /* size = 0x2C */
struct EF_EffectDesc {
    /* +0 */ float lifetime;
    /* +4 */ StaticModelDesc model_desc;
}; /* size = 0x14 */
struct EF_QueuedEffect {
    /* +0 */ EF_QueuedEffect* next;
    /* +4 */ u8 spawn_kind; // EF_SpawnKind
    /* +8 */ s32 gfx_id;
    /* +C */ HSD_JObj* jobj;
    /* +10 */ Vec3 params; // parameters depending on spawn_kind
    /* +1C */ f32 extra1; // forwarded to efSync_Spawn depending on spawn_kind
    /* +20 */ f32 extra2; // second extra float used depending on spawn_kind
}; /* size = 0x24 */
typedef struct EF_DAT_Entry {
    /* 0x0 */ char* ef_DAT_file; // ex. "EfCoData.dat"
    /* 0x4 */ char* effDataTable_name; // ex. "effCommonDataTable"
    /* 0x8 */ void* data; // loaded data pointer
} EF_DAT_Entry; /* size = 0xC */
;
struct EF_QueuedEffect_ObjAlloc {
    char pad_0[0x24];
};
;
#define MELEE_FT_DOBJLIST_H
/**
 * @todo This was split out of ft/types.h to break a circular dependency with
 * fighter-specific types.h headers. Figure out a better place for it.
 */
struct DObjList {
    u32 count;
    HSD_DObj** data;
};
struct CostumeTObjList {
    /*  fp+5CC */ u32 n_costume_tobjs;
    /*  fp+5D0 */ u16* x5D0;
    /*  fp+5D4 */ HSD_TObj* costume_tobjs[5];
};
struct TempS {
    int x0;
    u8* x4;
};
struct FtPartsVisLookup {
    int x0;
    TempS* x4;
};
struct FtPartsVis {
    /* fp+5AC */ u32 model_num;
    /* fp+5B0 */ u8 cleared[5];
    /* fp+5B8 */ FtPartsVisLookup* xC[5];
};
#define GALE01_0679B0
#define PLACEHOLDER_H
/// A label in a jump table
typedef void (*jmp_t)(void);
/// A jump table
typedef jmp_t jtbl_t[];
#define __frsqrte(x) sqrt(x)
#define sqrtf__Ff(x) sqrtf(x)
#define sqrtf_accurate(x) sqrtf(x)
#define __fabs(f) fabsf(f)
#define UNK_T M2C_UNK
#define U32_TO_F32 4503599627370496.0
#define S32_TO_F32 4503601774854144.0
#define PAD_STACK(bytes) do { UNUSED unsigned char _[(bytes)]; } while (0)
/// @warning Creates fake @c .rodata entries!
#define FORCE_PAD_STACK(bytes) do { UNUSED unsigned char _[(bytes)] = { 0 }; } while (0)
#define FORCE_PAD_STACK_4 do { UNUSED u32 _0 = 0; } while (0)
#define FORCE_PAD_STACK_8 do { UNUSED u64 _0 = 0; } while (0)
#define FORCE_PAD_STACK_16 do { UNUSED u64 _0 = 0, _1 = 0; } while (0)
#define FORCE_PAD_STACK_32 do { UNUSED u64 _0 = 0, _1 = 0, _2 = 0, _3 = 0; } while (0)
#define MELEE_FT_INLINES_H
#define MELEE_MP_FORWARD_H
typedef struct CollJoint CollJoint;
typedef struct CollLine CollLine;
typedef struct CollVtx CollVtx;
typedef struct MapCollData MapCollData;
typedef struct MapJoint MapJoint;
typedef struct MapLine MapLine;
typedef struct mp_UnkStruct0 mp_UnkStruct0;
typedef struct mp_UnkStruct3 mp_UnkStruct3;
typedef struct mpCollisionBox mpCollisionBox;
typedef struct mpisland mpisland;
typedef struct mpIsland_Palette mpIsland_Palette;
typedef struct mpIsland_PaletteEntry mpIsland_PaletteEntry;
typedef enum mp_Terrain {
    mp_Terrain_Basic,
    mp_Terrain_Rock,
    mp_Terrain_Grass,
    mp_Terrain_Dirt,
    mp_Terrain_Wood,
    mp_Terrain_LightMetal,
    mp_Terrain_HeavyMetal,
    mp_Terrain_Paper,
    mp_Terrain_Goop,
    mp_Terrain_Birdo, // used in GrI2
    mp_Terrain_Water,
    mp_Terrain_Unk11, // used in GrTe
    mp_Terrain_UFO,
    mp_Terrain_Turtle,
    mp_Terrain_Snow,
    mp_Terrain_Ice,
    mp_Terrain_GnW,
    mp_Terrain_Unk17, // used in GrTe
    mp_Terrain_Checkered,
    mp_Terrain_Unk19,
} mp_Terrain;
typedef enum mpLib_GroundEnum {
    mpLib_GroundEnum_Unk0,
    mpLib_GroundEnum_Unk1,
    mpLib_GroundEnum_Unk2,
} mpLib_GroundEnum;
/**
 * @brief Joint collision callback for ground surfaces.
 * @param user_data Saved untyped data attached to the callback.
 * @param coll_x50 %Unknown, sourced from #CollData::x50.
 *                 `dist` according to #fn_801FC9AC?
 * @param delta_y Relative y-offset since the collision started, equal to
 *                `coll->cur_pos.y - coll->last_pos.y`
 */
typedef void (*mpLib_JointCollisionCallback)(void* user_data, int joint_id,
                                             CollData* coll, int coll_x50,
                                             mpLib_GroundEnum ground_kind,
                                             float delta_y);
typedef bool (*mpColl_Callback)(CollData*, u32);
typedef enum CollLineKind {
    CollLine_Floor = 1 << 0,
    CollLine_Ceiling = 1 << 1,
    CollLine_RightWall = 1 << 2,
    CollLine_LeftWall = 1 << 3,
} CollLineKind;
#define LINE_FLAG_KIND (0xF)
#define LINE_FLAG_EMPTY (1 << 7)
#define LINE_FLAG_PLATFORM (1 << 8)
#define LINE_FLAG_LEDGE (1 << 9)
#define LINE_FLAG_ENABLED (1 << 16)
#define LINE_FLAG_HIDDEN (1 << 18)
#define MPCOLL_WALLID_MAX 9
enum CollDataX130Flags {
    CollData_X130_Locked = 1 << 4,
    CollData_X130_Clear = 1 << 5,
};
enum CollJointFlags {
    CollJoint_B8 = 1 << 8,
    CollJoint_B9 = 1 << 9,
    CollJoint_B10 = 1 << 10,
    CollJoint_B11 = 1 << 11,
    CollJoint_TooFar = 1 << 12,
    CollJoint_Enabled = 1 << 16,
    CollJoint_Hidden = 1 << 18,
};
/// COLLISION FLAGS
/// @todo These (and #CollData::env_flags) should be a bitfield struct
#define Collide_LeftWallPush 0x1
#define Collide_LeftWallHug 0x20
#define Collide_LeftWallMask 0x3F
#define Collide_RightWallPush 0x40
#define Collide_RightWallHug 0x800
#define Collide_RightWallMask 0xFC0
#define Collide_WallMask (Collide_LeftWallMask | Collide_RightWallMask)
#define Collide_CeilingPush 0x2000
#define Collide_CeilingHug 0x4000
#define Collide_CeilingMask (Collide_CeilingPush | Collide_CeilingHug)
#define Collide_FloorPush 0x8000
#define Collide_FloorHug 0x10000
#define Collide_FloorMask (Collide_FloorPush | Collide_FloorHug)
#define Collide_LeftEdge 0x100000
#define Collide_RightEdge 0x200000
#define Collide_Edge 0x800000
#define Collide_LeftLedgeGrab 0x1000000
#define Collide_RightLedgeGrab 0x2000000
#define Collide_LedgeGrabMask (Collide_LeftLedgeGrab | Collide_RightLedgeGrab)
#define Collide_LeftLedgeSlip 0x10000000
#define Collide_RightLedgeSlip 0x20000000
#define MELEE_FTANIM_H
#define MELEE_FT_TYPES_H
#define _DOLPHIN_GX_H_
// IWYU pragma: begin_exports
#define _DOLPHIN_GX_GXBUMP_H_
void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
                      GXIndTexFormat format, GXIndTexBiasSel bias_sel,
                      GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s,
                      GXIndTexWrap wrap_t, GXBool add_prev, GXBool utc_lod,
                      GXIndTexAlphaSel alpha_sel);
void GXSetIndTexMtx(GXIndTexMtxID mtx_id, f32 offset[2][3], s8 scale_exp);
void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s,
                           GXIndTexScale scale_t);
void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord,
                      GXTexMapID tex_map);
void GXSetNumIndStages(u8 nIndStages);
void GXSetTevDirect(GXTevStageID tev_stage);
void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
                     u8 signed_offset, u8 replace_mode,
                     GXIndTexMtxID matrix_sel);
void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
                     u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s,
                     u16 tilespacing_t, GXIndTexFormat format,
                     GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel,
                     GXIndTexAlphaSel alpha_sel);
void GXSetTevIndBumpST(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
                       GXIndTexMtxID matrix_sel);
void GXSetTevIndBumpXYZ(GXTevStageID tev_stage, GXIndTexStageID ind_stage,
                        GXIndTexMtxID matrix_sel);
void GXSetTevIndRepeat(GXTevStageID tev_stage);
#define _DOLPHIN_GX_GXCOMMANDLIST_H_
#define GX_NOP 0x00
#define GX_LOAD_CP_REG 0x08
#define GX_LOAD_XF_REG 0x10
#define GX_LOAD_INDX_A 0x20
#define GX_LOAD_INDX_B 0x28
#define GX_LOAD_INDX_C 0x30
#define GX_LOAD_INDX_D 0x38
#define GX_LOAD_BP_REG 0x61
#define GX_DRAW_QUADS 0x80
#define GX_DRAW_TRIANGLES 0x90
#define GX_DRAW_TRIANGLE_STRIP 0x98
#define GX_DRAW_TRIANGLE_FAN 0xA0
#define GX_DRAW_LINES 0xA8
#define GX_DRAW_LINE_STRIP 0xB0
#define GX_DRAW_POINTS 0xB8
#define GX_OPCODE_MASK 0xF8
#define GX_VAT_MASK 0x07
extern u8 GXTexMode0Ids[8];
extern u8 GXTexMode1Ids[8];
extern u8 GXTexImage0Ids[8];
extern u8 GXTexImage1Ids[8];
extern u8 GXTexImage2Ids[8];
extern u8 GXTexImage3Ids[8];
extern u8 GXTexTlutIds[8];
#define _DOLPHIN_GX_GXCPU2EFB_H_
void GXPokeAlphaMode(GXCompare func, u8 threshold);
void GXPokeAlphaRead(GXAlphaReadMode mode);
void GXPokeAlphaUpdate(GXBool update_enable);
void GXPokeBlendMode(GXBlendMode type, GXBlendFactor src_factor,
                     GXBlendFactor dst_factor, GXLogicOp op);
void GXPokeColorUpdate(GXBool update_enable);
void GXPokeDstAlpha(GXBool enable, u8 alpha);
void GXPokeDither(GXBool dither);
void GXPokeZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
void GXPeekARGB(u16 x, u16 y, u32* color);
void GXPokeARGB(u16 x, u16 y, u32 color);
void GXPeekZ(u16 x, u16 y, u32* z);
void GXPokeZ(u16 x, u16 y, u32 z);
u32 GXCompressZ16(u32 z24, GXZFmt16 zfmt);
u32 GXDecompressZ16(u32 z16, GXZFmt16 zfmt);
#define _DOLPHIN_GX_GXCULL_H_
void GXSetScissor(u32 left, u32 top, u32 wd, u32 ht);
void GXSetCullMode(GXCullMode mode);
void GXSetCoPlanar(GXBool enable);
#define _DOLPHIN_GX_GXDISPLIST_H_
void GXBeginDisplayList(void* list, u32 size);
u32 GXEndDisplayList(void);
void GXCallDisplayList(void* list, u32 nbytes);
#define _DOLPHIN_GX_GXDRAW_H_
void GXDrawCylinder(u8 numEdges);
void GXDrawTorus(f32 rc, u8 numc, u8 numt);
void GXDrawSphere(u8 numMajor, u8 numMinor);
void GXDrawCube(void);
void GXDrawDodeca(void);
void GXDrawOctahedron(void);
void GXDrawIcosahedron(void);
void GXDrawSphere1(u8 depth);
u32 GXGenNormalTable(u8 depth, f32* table);
#define _DOLPHIN_GX_GXFIFO_H_
typedef struct {
    u8 pad[128];
} GXFifoObj;
typedef void (*GXBreakPtCallback)(void);
void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size);
void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr);
void GXInitFifoLimits(GXFifoObj* fifo, u32 hiWatermark, u32 loWatermark);
void GXSetCPUFifo(GXFifoObj* fifo);
void GXSetGPFifo(GXFifoObj* fifo);
void GXSaveCPUFifo(GXFifoObj* fifo);
void GXSaveGPFifo(GXFifoObj* fifo);
void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle,
                   GXBool* cmdIdle, GXBool* brkpt);
void GXGetFifoStatus(GXFifoObj* fifo, GXBool* overhi, GXBool* underflow,
                     u32* fifoCount, GXBool* cpuWrite, GXBool* gpRead,
                     GXBool* fifowrap);
void GXGetFifoPtrs(GXFifoObj* fifo, void** readPtr, void** writePtr);
void* GXGetFifoBase(GXFifoObj* fifo);
u32 GXGetFifoSize(GXFifoObj* fifo);
void GXGetFifoLimits(GXFifoObj* fifo, u32* hi, u32* lo);
GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb);
void GXEnableBreakPt(void* break_pt);
void GXDisableBreakPt(void);
OSThread* GXSetCurrentGXThread(void);
OSThread* GXGetCurrentGXThread(void);
GXFifoObj* GXGetCPUFifo(void);
GXFifoObj* GXGetGPFifo(void);
u32 GXGetOverflowCount(void);
u32 GXResetOverflowCount(void);
volatile void* GXRedirectWriteGatherPipe(void* ptr);
void GXRestoreWriteGatherPipe(void);
#define _DOLPHIN_GX_GXFRAMEBUFFER_H_
#define GX_MAX_Z24 0x00ffffff
extern GXRenderModeObj GXNtsc240Ds;
extern GXRenderModeObj GXNtsc240DsAa;
extern GXRenderModeObj GXNtsc240Int;
extern GXRenderModeObj GXNtsc240IntAa;
extern GXRenderModeObj GXNtsc480IntDf;
extern GXRenderModeObj GXNtsc480Int;
extern GXRenderModeObj GXNtsc480IntAa;
extern GXRenderModeObj GXNtsc480Prog;
extern GXRenderModeObj GXNtsc480ProgAa;
extern GXRenderModeObj GXMpal240Ds;
extern GXRenderModeObj GXMpal240DsAa;
extern GXRenderModeObj GXMpal240Int;
extern GXRenderModeObj GXMpal240IntAa;
extern GXRenderModeObj GXMpal480IntDf;
extern GXRenderModeObj GXMpal480Int;
extern GXRenderModeObj GXMpal480IntAa;
extern GXRenderModeObj GXPal264Ds;
extern GXRenderModeObj GXPal264DsAa;
extern GXRenderModeObj GXPal264Int;
extern GXRenderModeObj GXPal264IntAa;
extern GXRenderModeObj GXPal528IntDf;
extern GXRenderModeObj GXPal528Int;
extern GXRenderModeObj GXPal528IntAa;
void GXAdjustForOverscan(GXRenderModeObj* rmin, GXRenderModeObj* rmout,
                         u16 hor, u16 ver);
void GXSetDispCopySrc(u16 left, u16 top, u16 wd, u16 ht);
void GXSetTexCopySrc(u16 left, u16 top, u16 wd, u16 ht);
void GXSetDispCopyDst(u16 wd, u16 ht);
void GXSetTexCopyDst(u16 wd, u16 ht, GXTexFmt fmt, GXBool mipmap);
void GXSetDispCopyFrame2Field(GXCopyMode mode);
void GXSetCopyClamp(GXFBClamp clamp);
u32 GXSetDispCopyYScale(f32 vscale);
void GXSetCopyClear(GXColor clear_clr, u32 clear_z);
void GXSetCopyFilter(GXBool aa, const u8 sample_pattern[12][2], GXBool vf,
                     const u8 vfilter[7]);
void GXSetDispCopyGamma(GXGamma gamma);
void GXCopyDisp(void* dest, GXBool clear);
void GXCopyTex(void* dest, GXBool clear);
void GXClearBoundingBox(void);
void GXReadBoundingBox(u16* left, u16* top, u16* right, u16* bottom);
#define _DOLPHIN_GX_GXGEOMETRY_H_
#define GXSETARRAY(attr, data, size, stride, le) GXSetArray((attr), (data), (stride))
void GXSetVtxDesc(GXAttr attr, GXAttrType type);
void GXSetVtxDescv(const GXVtxDescList* attrPtr);
void GXClearVtxDesc(void);
void GXSetVtxAttrFmt(GXVtxFmt vtxfmt, GXAttr attr, GXCompCnt cnt,
                     GXCompType type, u8 frac);
void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list);
void GXSetArray(GXAttr attr, const void* base_ptr, u8 stride);
void GXInvalidateVtxCache(void);
void GXSetTexCoordGen2(GXTexCoordID dst_coord, GXTexGenType func,
                       GXTexGenSrc src_param, u32 mtx, GXBool normalize,
                       u32 pt_texmtx);
void GXSetNumTexGens(u8 nTexGens);
static inline void GXSetTexCoordGen(GXTexCoordID dst_coord, GXTexGenType func,
                                    GXTexGenSrc src_param, u32 mtx)
{
    GXSetTexCoordGen2(dst_coord, func, src_param, mtx, ((GXBool) 0),
                      GX_PTIDENTITY);
}
void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts);
static inline void GXEnd(void)
{
}
void GXSetLineWidth(u8 width, GXTexOffset texOffsets);
void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets);
void GXEnableTexOffsets(GXTexCoordID coord, u8 line_enable, u8 point_enable);
#define _DOLPHIN_GX_GXGET_H_
// Attr
void GXGetVtxDesc(GXAttr attr, GXAttrType* type);
void GXGetVtxDescv(GXVtxDescList* vcd);
void GXGetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt* cnt,
                     GXCompType* type, u8* frac);
void GXGetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList* vat);
// Geometry
void GXGetLineWidth(u8* width, GXTexOffset* texOffsets);
void GXGetPointSize(u8* pointSize, GXTexOffset* texOffsets);
void GXGetCullMode(GXCullMode* mode);
// Light
void GXGetLightAttnA(GXLightObj* lt_obj, f32* a0, f32* a1, f32* a2);
void GXGetLightAttnK(GXLightObj* lt_obj, f32* k0, f32* k1, f32* k2);
void GXGetLightPos(GXLightObj* lt_obj, f32* x, f32* y, f32* z);
void GXGetLightDir(GXLightObj* lt_obj, f32* nx, f32* ny, f32* nz);
void GXGetLightColor(GXLightObj* lt_obj, GXColor* color);
// Texture
GXBool GXGetTexObjMipMap(const GXTexObj* to);
GXTexFmt GXGetTexObjFmt(const GXTexObj* to);
u16 GXGetTexObjWidth(const GXTexObj* to);
u16 GXGetTexObjHeight(const GXTexObj* to);
GXTexWrapMode GXGetTexObjWrapS(const GXTexObj* to);
GXTexWrapMode GXGetTexObjWrapT(const GXTexObj* to);
void* GXGetTexObjData(const GXTexObj* to);
;
void GXGetTexObjAll(const GXTexObj* obj, void** image_ptr, u16* width,
                    u16* height, GXTexFmt* format, GXTexWrapMode* wrap_s,
                    GXTexWrapMode* wrap_t, u8* mipmap);
void GXGetTexObjLODAll(const GXTexObj* tex_obj, GXTexFilter* min_filt,
                       GXTexFilter* mag_filt, f32* min_lod, f32* max_lod,
                       f32* lod_bias, u8* bias_clamp, u8* do_edge_lod,
                       GXAnisotropy* max_aniso);
GXTexFilter GXGetTexObjMinFilt(const GXTexObj* tex_obj);
GXTexFilter GXGetTexObjMagFilt(const GXTexObj* tex_obj);
f32 GXGetTexObjMinLOD(const GXTexObj* tex_obj);
f32 GXGetTexObjMaxLOD(const GXTexObj* tex_obj);
f32 GXGetTexObjLODBias(const GXTexObj* tex_obj);
GXBool GXGetTexObjBiasClamp(const GXTexObj* tex_obj);
GXBool GXGetTexObjEdgeLOD(const GXTexObj* tex_obj);
GXAnisotropy GXGetTexObjMaxAniso(const GXTexObj* tex_obj);
u32 GXGetTexObjTlut(const GXTexObj* tex_obj);
void GXGetTlutObjAll(const GXTlutObj* tlut_obj, void** data, GXTlutFmt* format,
                     u16* numEntries);
void* GXGetTlutObjData(const GXTlutObj* tlut_obj);
GXTlutFmt GXGetTlutObjFmt(const GXTlutObj* tlut_obj);
u16 GXGetTlutObjNumEntries(const GXTlutObj* tlut_obj);
void GXGetTexRegionAll(const GXTexRegion* region, u8* is_cached,
                       u8* is_32b_mipmap, u32* tmem_even, u32* size_even,
                       u32* tmem_odd, u32* size_odd);
void GXGetTlutRegionAll(const GXTlutRegion* region, u32* tmem_addr,
                        GXTlutSize* tlut_size);
// Transform
void GXGetProjectionv(f32* ptr);
void GXGetViewportv(f32* vp);
void GXGetScissor(u32* left, u32* top, u32* wd, u32* ht);
#define _DOLPHIN_GX_GXLIGHTING_H_
void GXInitLightAttn(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2, f32 k0,
                     f32 k1, f32 k2);
void GXInitLightAttnA(GXLightObj* lt_obj, f32 a0, f32 a1, f32 a2);
void GXInitLightAttnK(GXLightObj* lt_obj, f32 k0, f32 k1, f32 k2);
void GXInitLightSpot(GXLightObj* lt_obj, f32 cutoff, GXSpotFn spot_func);
void GXInitLightDistAttn(GXLightObj* lt_obj, f32 ref_dist, f32 ref_br,
                         GXDistAttnFn dist_func);
void GXInitLightPos(GXLightObj* lt_obj, f32 x, f32 y, f32 z);
void GXInitLightDir(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz);
void GXInitSpecularDir(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz);
void GXInitSpecularDirHA(GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz, f32 hx,
                         f32 hy, f32 hz);
void GXInitLightColor(GXLightObj* lt_obj, GXColor color);
void GXLoadLightObjImm(GXLightObj* lt_obj, GXLightID light);
void GXLoadLightObjIndx(u32 lt_obj_indx, GXLightID light);
void GXSetChanAmbColor(GXChannelID chan, GXColor amb_color);
void GXSetChanMatColor(GXChannelID chan, GXColor mat_color);
void GXSetNumChans(u8 nChans);
void GXSetChanCtrl(GXChannelID chan, GXBool enable, GXColorSrc amb_src,
                   GXColorSrc mat_src, u32 light_mask, GXDiffuseFn diff_fn,
                   GXAttnFn attn_fn);
#define _DOLPHIN_GX_GXMANAGE_H_
typedef void (*GXDrawSyncCallback)(u16 token);
typedef void (*GXDrawDoneCallback)(void);
// Init
BOOL IsWriteGatherBufferEmpty(void);
GXFifoObj* GXInit(void* base, u32 size);
// Misc
void GXSetMisc(GXMiscToken token, u32 val);
void GXFlush(void);
void GXResetWriteGatherPipe(void);
void GXAbortFrame(void);
void GXSetDrawSync(u16 token);
u16 GXReadDrawSync(void);
void GXSetDrawDone(void);
void GXWaitDrawDone(void);
void GXDrawDone(void);
void GXPixModeSync(void);
void GXTexModeSync(void);
GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb);
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb);
#define _DOLPHIN_GX_GXPERF_H_
void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1);
void GXReadGPMetric(u32* cnt0, u32* cnt1);
void GXClearGPMetric(void);
u32 GXReadGP0Metric(void);
u32 GXReadGP1Metric(void);
void GXReadMemMetric(u32* cp_req, u32* tc_req, u32* cpu_rd_req,
                     u32* cpu_wr_req, u32* dsp_req, u32* io_req, u32* vi_req,
                     u32* pe_req, u32* rf_req, u32* fi_req);
void GXClearMemMetric(void);
void GXReadPixMetric(u32* top_pixels_in, u32* top_pixels_out,
                     u32* bot_pixels_in, u32* bot_pixels_out,
                     u32* clr_pixels_in, u32* copy_clks);
void GXClearPixMetric(void);
void GXSetVCacheMetric(GXVCachePerf attr);
void GXReadVCacheMetric(u32* check, u32* miss, u32* stall);
void GXClearVCacheMetric(void);
void GXInitXfRasMetric(void);
void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy,
                       u32* clocks);
u32 GXReadClksPerVtx(void);
#define _DOLPHIN_GX_GXPIXEL_H_
void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz,
              GXColor color);
void GXInitFogAdjTable(GXFogAdjTable* table, u16 width, f32 projmtx[4][4]);
void GXSetFogRangeAdj(GXBool enable, u16 center, GXFogAdjTable* table);
void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor,
                    GXBlendFactor dst_factor, GXLogicOp op);
void GXSetColorUpdate(GXBool update_enable);
void GXSetAlphaUpdate(GXBool update_enable);
void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
void GXSetZCompLoc(GXBool before_tex);
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
void GXSetDither(GXBool dither);
void GXSetDstAlpha(GXBool enable, u8 alpha);
void GXSetFieldMask(GXBool odd_mask, GXBool even_mask);
void GXSetFieldMode(GXBool field_mode, GXBool half_aspect_ratio);
#define _DOLPHIN_GX_GXTEV_H_
void GXSetTevOp(GXTevStageID id, GXTevMode mode);
void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b,
                     GXTevColorArg c, GXTevColorArg d);
void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b,
                     GXTevAlphaArg c, GXTevAlphaArg d);
void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias,
                     GXTevScale scale, GXBool clamp, GXTevRegID out_reg);
void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias,
                     GXTevScale scale, GXBool clamp, GXTevRegID out_reg);
void GXSetTevColor(GXTevRegID id, GXColor color);
void GXSetTevColorS10(GXTevRegID id, GXColorS10 color);
void GXSetTevKColor(GXTevKColorID id, GXColor color);
void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel sel);
void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel sel);
void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel ras_sel,
                      GXTevSwapSel tex_sel);
void GXSetTevSwapModeTable(GXTevSwapSel table, GXTevColorChan red,
                           GXTevColorChan green, GXTevColorChan blue,
                           GXTevColorChan alpha);
void GXSetTevClampMode(int, int);
void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1,
                       u8 ref1);
void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias);
void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map,
                   GXChannelID color);
void GXSetNumTevStages(u8 nStages);
#define _DOLPHIN_GX_GXTEXTURE_H_
typedef GXTexRegion* (*GXTexRegionCallback)(GXTexObj* t_obj, GXTexMapID id);
typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 idx);
u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, u8 mipmap,
                       u8 max_lod);
void GXInitTexObj(GXTexObj* obj, void* image_ptr, u16 width, u16 height,
                  GXTexFmt format, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t,
                  u8 mipmap);
void GXInitTexObjCI(GXTexObj* obj, void* image_ptr, u16 width, u16 height,
                    GXTexFmt format, GXTexWrapMode wrap_s,
                    GXTexWrapMode wrap_t, u8 mipmap, u32 tlut_name);
void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt,
                     f32 min_lod, f32 max_lod, f32 lod_bias, GXBool bias_clamp,
                     GXBool do_edge_lod, GXAnisotropy max_aniso);
void GXInitTexObjData(GXTexObj* obj, void* image_ptr);
void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t);
void GXInitTexObjTlut(GXTexObj* obj, u32 tlut_name);
void GXInitTexObjUserData(GXTexObj* obj, void* user_data);
void* GXGetTexObjUserData(const GXTexObj* obj);
void GXLoadTexObjPreLoaded(GXTexObj* obj, GXTexRegion* region, GXTexMapID id);
void GXLoadTexObj(GXTexObj* obj, GXTexMapID id);
void GXInitTlutObj(GXTlutObj* tlut_obj, void* lut, GXTlutFmt fmt,
                   u16 n_entries);
void GXLoadTlut(GXTlutObj* tlut_obj, u32 tlut_name);
void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even,
                          GXTexCacheSize size_even, u32 tmem_odd,
                          GXTexCacheSize size_odd);
void GXInitTexPreLoadRegion(GXTexRegion* region, u32 tmem_even, u32 size_even,
                            u32 tmem_odd, u32 size_odd);
void GXInitTlutRegion(GXTlutRegion* region, u32 tmem_addr,
                      GXTlutSize tlut_size);
void GXInvalidateTexRegion(GXTexRegion* region);
void GXInvalidateTexAll(void);
GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback f);
GXTlutRegionCallback GXSetTlutRegionCallback(GXTlutRegionCallback f);
void GXPreLoadEntireTexture(GXTexObj* tex_obj, GXTexRegion* region);
void GXSetTexCoordScaleManually(GXTexCoordID coord, u8 enable, u16 ss, u16 ts);
void GXSetTexCoordCylWrap(GXTexCoordID coord, u8 s_enable, u8 t_enable);
void GXSetTexCoordBias(GXTexCoordID coord, u8 s_enable, u8 t_enable);
#define _DOLPHIN_GX_GXTRANSFORM_H_
#define GX_PROJECTION_SZ 7
#define GX_VIEWPORT_SZ 6
void GXProject(f32 x, f32 y, f32 z, f32 mtx[3][4], f32* pm, f32* vp, f32* sx,
               f32* sy, f32* sz);
void GXSetProjection(f32 mtx[4][4], GXProjectionType type);
void GXSetProjectionv(f32* ptr);
void GXLoadPosMtxImm(f32 mtx[3][4], u32 id);
void GXLoadPosMtxIndx(u16 mtx_indx, u32 id);
void GXLoadNrmMtxImm(f32 mtx[3][4], u32 id);
void GXLoadNrmMtxImm3x3(f32 mtx[3][3], u32 id);
void GXLoadNrmMtxIndx3x3(u16 mtx_indx, u32 id);
void GXSetCurrentMtx(u32 id);
void GXLoadTexMtxImm(f32 mtx[][4], u32 id, GXTexMtxType type);
void GXLoadTexMtxIndx(u16 mtx_indx, u32 id, GXTexMtxType type);
void GXSetViewportJitter(f32 left, f32 top, f32 wd, f32 ht, f32 nearz,
                         f32 farz, u32 field);
void GXSetViewport(f32 left, f32 top, f32 wd, f32 ht, f32 nearz, f32 farz);
void GXSetScissorBoxOffset(s32 x_off, s32 y_off);
void GXSetClipMode(GXClipMode mode);
#define _DOLPHIN_GX_GXVERIFY_H_
typedef enum {
    GX_WARN_NONE,
    GX_WARN_SEVERE,
    GX_WARN_MEDIUM,
    GX_WARN_ALL
} GXWarningLevel;
typedef void (*GXVerifyCallback)(GXWarningLevel level, u32 id, char* msg);
void GXSetVerifyLevel(GXWarningLevel level);
GXVerifyCallback GXSetVerifyCallback(GXVerifyCallback cb);
#define _DOLPHIN_GX_GXVERT_H_
#define GXFIFO_ADDR 0xCC008000
typedef union {
    u8 u8;
    u16 u16;
    u32 u32;
    u64 u64;
    s8 s8;
    s16 s16;
    s32 s32;
    s64 s64;
    f32 f32;
    f64 f64;
} PPCWGPipe;
#define GXWGFifo (*(volatile PPCWGPipe*) GXFIFO_ADDR)
// inline functions
#define FUNC_1PARAM(name, T) static inline void name##1##T(T x) { GXWGFifo.T = x; }
#define FUNC_2PARAM(name, T) static inline void name##2##T(T x, T y) { GXWGFifo.T = x; GXWGFifo.T = y; }
#define FUNC_3PARAM(name, T) static inline void name##3##T(T x, T y, T z) { GXWGFifo.T = x; GXWGFifo.T = y; GXWGFifo.T = z; }
#define FUNC_4PARAM(name, T) static inline void name##4##T(T x, T y, T z, T w) { GXWGFifo.T = x; GXWGFifo.T = y; GXWGFifo.T = z; GXWGFifo.T = w; }
#define FUNC_INDEX8(name) static inline void name##1x8(u8 x) { GXWGFifo.u8 = x; }
#define FUNC_INDEX16(name) static inline void name##1x16(u16 x) { GXWGFifo.u16 = x; }
// GXCmd
static inline void GXCmd1u8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
static inline void GXCmd1u16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXCmd1u32(u32 x) { (*(volatile PPCWGPipe*) 0xCC008000).u32 = x; }
// GXParam
static inline void GXParam1u8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
static inline void GXParam1u16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXParam1u32(u32 x) { (*(volatile PPCWGPipe*) 0xCC008000).u32 = x; }
static inline void GXParam1s8(s8 x) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; }
static inline void GXParam1s16(s16 x) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; }
static inline void GXParam1s32(s32 x) { (*(volatile PPCWGPipe*) 0xCC008000).s32 = x; }
static inline void GXParam1f32(f32 x) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; }
static inline void GXParam3f32(f32 x, f32 y, f32 z) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; (*(volatile PPCWGPipe*) 0xCC008000).f32 = z; }
static inline void GXParam4f32(f32 x, f32 y, f32 z, f32 w) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; (*(volatile PPCWGPipe*) 0xCC008000).f32 = z; (*(volatile PPCWGPipe*) 0xCC008000).f32 = w; }
// GXPosition
static inline void GXPosition3f32(f32 x, f32 y, f32 z) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; (*(volatile PPCWGPipe*) 0xCC008000).f32 = z; }
static inline void GXPosition3u8(u8 x, u8 y, u8 z) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; (*(volatile PPCWGPipe*) 0xCC008000).u8 = y; (*(volatile PPCWGPipe*) 0xCC008000).u8 = z; }
static inline void GXPosition3s8(s8 x, s8 y, s8 z) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; (*(volatile PPCWGPipe*) 0xCC008000).s8 = y; (*(volatile PPCWGPipe*) 0xCC008000).s8 = z; }
static inline void GXPosition3u16(u16 x, u16 y, u16 z) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; (*(volatile PPCWGPipe*) 0xCC008000).u16 = y; (*(volatile PPCWGPipe*) 0xCC008000).u16 = z; }
static inline void GXPosition3s16(s16 x, s16 y, s16 z) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; (*(volatile PPCWGPipe*) 0xCC008000).s16 = y; (*(volatile PPCWGPipe*) 0xCC008000).s16 = z; }
static inline void GXPosition2f32(f32 x, f32 y) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; }
static inline void GXPosition2u8(u8 x, u8 y) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; (*(volatile PPCWGPipe*) 0xCC008000).u8 = y; }
static inline void GXPosition2s8(s8 x, s8 y) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; (*(volatile PPCWGPipe*) 0xCC008000).s8 = y; }
static inline void GXPosition2u16(u16 x, u16 y) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; (*(volatile PPCWGPipe*) 0xCC008000).u16 = y; }
static inline void GXPosition2s16(s16 x, s16 y) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; (*(volatile PPCWGPipe*) 0xCC008000).s16 = y; }
static inline void GXPosition1x16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXPosition1x8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
// GXNormal
static inline void GXNormal3f32(f32 x, f32 y, f32 z) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; (*(volatile PPCWGPipe*) 0xCC008000).f32 = z; }
static inline void GXNormal3s16(s16 x, s16 y, s16 z) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; (*(volatile PPCWGPipe*) 0xCC008000).s16 = y; (*(volatile PPCWGPipe*) 0xCC008000).s16 = z; }
static inline void GXNormal3s8(s8 x, s8 y, s8 z) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; (*(volatile PPCWGPipe*) 0xCC008000).s8 = y; (*(volatile PPCWGPipe*) 0xCC008000).s8 = z; }
static inline void GXNormal1x16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXNormal1x8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
// GXColor
static inline void GXColor4u8(u8 x, u8 y, u8 z, u8 w) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; (*(volatile PPCWGPipe*) 0xCC008000).u8 = y; (*(volatile PPCWGPipe*) 0xCC008000).u8 = z; (*(volatile PPCWGPipe*) 0xCC008000).u8 = w; }
static inline void GXColor1u32(u32 x) { (*(volatile PPCWGPipe*) 0xCC008000).u32 = x; }
static inline void GXColor3u8(u8 x, u8 y, u8 z) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; (*(volatile PPCWGPipe*) 0xCC008000).u8 = y; (*(volatile PPCWGPipe*) 0xCC008000).u8 = z; }
static inline void GXColor1u16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXColor1x16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXColor1x8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
// GXTexCoord
static inline void GXTexCoord2f32(f32 x, f32 y) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; (*(volatile PPCWGPipe*) 0xCC008000).f32 = y; }
static inline void GXTexCoord2s16(s16 x, s16 y) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; (*(volatile PPCWGPipe*) 0xCC008000).s16 = y; }
static inline void GXTexCoord2u16(u16 x, u16 y) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; (*(volatile PPCWGPipe*) 0xCC008000).u16 = y; }
static inline void GXTexCoord2s8(s8 x, s8 y) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; (*(volatile PPCWGPipe*) 0xCC008000).s8 = y; }
static inline void GXTexCoord2u8(u8 x, u8 y) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; (*(volatile PPCWGPipe*) 0xCC008000).u8 = y; }
static inline void GXTexCoord1f32(f32 x) { (*(volatile PPCWGPipe*) 0xCC008000).f32 = x; }
static inline void GXTexCoord1s16(s16 x) { (*(volatile PPCWGPipe*) 0xCC008000).s16 = x; }
static inline void GXTexCoord1u16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXTexCoord1s8(s8 x) { (*(volatile PPCWGPipe*) 0xCC008000).s8 = x; }
static inline void GXTexCoord1u8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
static inline void GXTexCoord1x16(u16 x) { (*(volatile PPCWGPipe*) 0xCC008000).u16 = x; }
static inline void GXTexCoord1x8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
// GXMatrixIndex
static inline void GXMatrixIndex1u8(u8 x) { (*(volatile PPCWGPipe*) 0xCC008000).u8 = x; }
// IWYU pragma: end_exports
// unsorted GX externs
// GXMisc
void (*GXSetDrawSyncCallback(void (*cb)(unsigned short)))(unsigned short);
void GXSetDrawSync(unsigned short token);
#define GALE01_08A698
typedef struct WaitStruct {
    union {
        struct {
            int* x;
            int* y;
        } p;
        struct {
            int x;
            int y;
        } i;
    } u;
} WaitStruct;
/* 08A698 */ bool ftCo_8008A698(Fighter* fp);
/* 08A6D8 */ void ftCo_8008A6D8(Fighter_GObj* gobj, s32 anim_id);
/* 08A7A8 */ void ftCo_8008A7A8(Fighter_GObj* gobj, WaitStruct* arg1);
/* 3C54A8 */ extern char ftWaitAnim_803C54A8[];
/* 3C54C4 */ extern char ftWaitAnim_803C54C4[];
#define MELEE_FT_CHARA_FTCAPTAIN_TYPES_H
#define MELEE_FT_CHARA_FTCAPTAIN_FORWARD_H
#define MELEE_FT_CHARA_FTCOMMON_FORWARD_H
typedef struct ftHurtboxInit ftHurtboxInit;
typedef struct ftCollisionBox ftCollisionBox;
static MotionFlags const ftCommon_GroundAirColl_MF =
    Ft_MF_SkipMatAnim | Ft_MF_SkipColAnim | Ft_MF_UpdateCmd |
    Ft_MF_SkipItemVis | Ft_MF_Unk19 | Ft_MF_SkipModelPartVis |
    Ft_MF_SkipModelFlags | Ft_MF_Unk27;
typedef enum ftCo_JumpInput {
    JumpInput_None,
    JumpInput_LStick,
    JumpInput_CStick,
    JumpInput_XY,
} ftCo_JumpInput;
static MotionFlags const ftCo_MF_5_6 = Ft_MF_SkipAnimVel | Ft_MF_Unk06;
static MotionFlags const ftCo_MF_2_5_6 =
    ftCo_MF_5_6 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_Squat = ftCo_MF_2_5_6 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_Dash = ftCo_MF_Squat | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_Run = ftCo_MF_5_6 | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_Appeal =
    ftCo_MF_5_6 | Ft_MF_KeepFastFall | Ft_MF_SkipModel;
static MotionFlags const ftCo_MF_9_10 = Ft_MF_KeepSfx | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_LandingAirN =
    ftCo_MF_9_10 | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_LandingAirF =
    ftCo_MF_LandingAirN | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_LandingAirB =
    ftCo_MF_LandingAirN | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_LandingAirHi =
    ftCo_MF_LandingAirB | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_LandingAirLw = ftCo_MF_9_10 | Ft_MF_SkipModel;
static MotionFlags const ftCo_MF_Turn = ftCo_MF_2_5_6 | Ft_MF_KeepAccessory;
static MotionFlags const ftCo_MF_Walk =
    ftCo_MF_2_5_6 | Ft_MF_KeepGfx | Ft_MF_UpdateCmd;
static MotionFlags const ftCo_MF_3_5_6 = ftCo_MF_5_6 | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_Jump =
    ftCo_MF_3_5_6 | Ft_MF_KeepFastFall | Ft_MF_SkipNametagVis;
static MotionFlags const ftCo_MF_JumpAir =
    ftCo_MF_3_5_6 | Ft_MF_KeepGfx | Ft_MF_KeepColAnimPartHitStatus;
static MotionFlags const ftCo_MF_GuardReflect =
    ftCo_MF_5_6 | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_SkipModel |
    Ft_MF_SkipColAnim | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftCo_MF_Guard = Ft_MF_Unk19 | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftCo_MF_AttackBase =
    Ft_MF_KeepSfx | Ft_MF_SkipItemVis;
static MotionFlags const ftCo_MF_Attack =
    ftCo_MF_AttackBase | Ft_MF_FreezeState;
static MotionFlags const ftCo_MF_Attack_2 =
    ftCo_MF_Attack | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_AttackDash =
    ftCo_MF_Attack_2 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_AttackS3 = ftCo_MF_Attack_2 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_AttackHi3 =
    ftCo_MF_AttackS3 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_AttackLw3 = ftCo_MF_Attack | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_CliffAttackQuick =
    ftCo_MF_AttackLw3 | Ft_MF_KeepFastFall | Ft_MF_KeepGfx |
    Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipModel | Ft_MF_SkipAnimVel;
static MotionFlags const ftCo_MF_AttackAir =
    ftCo_MF_Attack | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_AttackAirN =
    ftCo_MF_AttackAir | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipHit |
    Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_AttackAirF =
    ftCo_MF_AttackAirN | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_AttackAirB =
    ftCo_MF_AttackAirN | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_AttackAirHi =
    ftCo_MF_AttackAirF | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_AttackAirLw =
    ftCo_MF_AttackAir | Ft_MF_SkipModel;
static MotionFlags const ftCo_MF_Attack4 =
    ftCo_MF_AttackLw3 | Ft_MF_SkipRumble;
static MotionFlags const ftCo_MF_AttackS4 =
    ftCo_MF_Attack4 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_AttackHi4 = ftCo_MF_Attack4 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_AttackLw4 =
    ftCo_MF_Attack4 | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_Attack1 = ftCo_MF_Attack | Ft_MF_Unk19;
static MotionFlags const ftCo_MF_Attack11 =
    ftCo_MF_Attack1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_Attack12 = ftCo_MF_Attack1 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_Attack13 =
    ftCo_MF_Attack12 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_Attack100 =
    ftCo_MF_Attack1 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_ItemScope =
    Ft_MF_SkipItemVis | Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_SwordSwing1 = ftCo_MF_ItemScope | Ft_MF_Unk06;
static MotionFlags const ftCo_MF_SwordSwing3 =
    ftCo_MF_SwordSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_SwordSwingDash =
    ftCo_MF_SwordSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_BatSwing1 =
    ftCo_MF_SwordSwing1 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_BatSwing3 =
    ftCo_MF_BatSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_BatSwingDash =
    ftCo_MF_BatSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_ParasolSwing1 =
    ftCo_MF_SwordSwing1 | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_ParasolSwing3 =
    ftCo_MF_ParasolSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_ParasolSwingDash =
    ftCo_MF_ParasolSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_HarisenSwing1 =
    ftCo_MF_BatSwing1 | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_HarisenSwing3 =
    ftCo_MF_HarisenSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_HarisenSwingDash =
    ftCo_MF_HarisenSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_StarRodSwing1 =
    ftCo_MF_SwordSwing1 | Ft_MF_SkipModel;
static MotionFlags const ftCo_MF_StarRodSwing3 =
    ftCo_MF_StarRodSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_StarRodSwingDash =
    ftCo_MF_StarRodSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_LipstickSwing1 =
    ftCo_MF_StarRodSwing1 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_LipstickSwing3 =
    ftCo_MF_LipstickSwing1 | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_LipstickSwingDash =
    ftCo_MF_LipstickSwing3 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_ParasolOpen =
    ftCo_MF_ParasolSwing1 | Ft_MF_SkipModel;
static MotionFlags const ftCo_MF_HammerBase =
    ftCo_MF_LipstickSwing1 | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_Hammer = ftCo_MF_HammerBase | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_WarpStarFall =
    ftCo_MF_Hammer | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_ItemScope_5_6 =
    ftCo_MF_5_6 | ftCo_MF_ItemScope;
static MotionFlags const ftCo_MF_ItemThrow =
    ftCo_MF_ItemScope_5_6 | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_LGunShoot =
    ftCo_MF_ItemScope | Ft_MF_KeepFastFall | Ft_MF_SkipHit | Ft_MF_SkipModel |
    Ft_MF_Unk06 | Ft_MF_SkipThrowException;
static MotionFlags const ftCo_MF_ItemScopeFire =
    ftCo_MF_LGunShoot | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_HammerFall =
    ftCo_MF_Hammer | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_ItemThrowAir =
    ftCo_MF_ItemThrow | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_LGunShootAir =
    ftCo_MF_LGunShoot | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_ItemScopeAir =
    ftCo_MF_HammerBase | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException |
    Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_Swing4 = Ft_MF_KeepGfx | Ft_MF_SkipRumble;
static MotionFlags const ftCo_MF_SwordSwing4 =
    ftCo_MF_SwordSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_BatSwing4 =
    ftCo_MF_BatSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_ParasolSwing4 =
    ftCo_MF_ParasolSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_HarisenSwing4 =
    ftCo_MF_HarisenSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_StarRodSwing4 =
    ftCo_MF_StarRodSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_LipstickSwing4 =
    ftCo_MF_LipstickSwing1 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_ItemThrow4 =
    ftCo_MF_ItemScope_5_6 | ftCo_MF_Swing4;
static MotionFlags const ftCo_MF_ItemThrowAir4 =
    ftCo_MF_ItemThrow4 | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_HammerMove =
    ftCo_MF_HammerBase | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_HammerTurn =
    ftCo_MF_HammerMove | Ft_MF_KeepAccessory;
static MotionFlags const ftCo_MF_HammerWalk =
    ftCo_MF_HammerMove | Ft_MF_UpdateCmd;
static MotionFlags const ftCo_MF_ItemFall =
    Ft_MF_SkipHit | Ft_MF_SkipModel | Ft_MF_Unk06 | Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_ItemScrewBase =
    ftCo_MF_AttackBase | ftCo_MF_ItemFall | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_ItemScrew =
    ftCo_MF_ItemScrewBase | Ft_MF_SkipNametagVis;
static MotionFlags const ftCo_MF_HammerJump =
    ftCo_MF_HammerMove | Ft_MF_SkipParasol | Ft_MF_SkipNametagVis;
static MotionFlags const ftCo_MF_ItemScrewAir =
    ftCo_MF_ItemScrewBase | Ft_MF_SkipParasol | Ft_MF_KeepColAnimPartHitStatus;
static MotionFlags const ftCo_MF_LiftWait =
    Ft_MF_Unk19 | Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_LiftMove = ftCo_MF_LiftWait |
                                            Ft_MF_KeepColAnimHitStatus |
                                            Ft_MF_SkipAnimVel | Ft_MF_Unk06;
static MotionFlags const ftCo_MF_LiftTurn =
    ftCo_MF_LiftMove | Ft_MF_KeepAccessory;
static MotionFlags const ftCo_MF_LiftWalk =
    ftCo_MF_LiftMove | Ft_MF_KeepGfx | Ft_MF_UpdateCmd;
static MotionFlags const ftCo_MF_ParasolFall =
    ftCo_MF_ItemFall | Ft_MF_SkipItemVis | Ft_MF_Unk19;
static MotionFlags const ftCo_MF_FireFlowerShoot =
    ftCo_MF_ParasolFall | Ft_MF_KeepGfx | Ft_MF_SkipThrowException;
static MotionFlags const ftCo_MF_ItemScopeRapid =
    ftCo_MF_ParasolFall | Ft_MF_KeepColAnimHitStatus |
    Ft_MF_SkipThrowException | Ft_MF_Unk19;
static MotionFlags const ftCo_MF_FireFlowerShootAir =
    ftCo_MF_FireFlowerShoot | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_ItemScopeAirRapid =
    ftCo_MF_ItemScopeRapid | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_Dazed =
    Ft_MF_UnkUpdatePhys | Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_Damage = ftCo_MF_Dazed | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_DamageScrew =
    ftCo_MF_Damage | Ft_MF_SkipNametagVis;
static MotionFlags const ftCo_MF_DamageScrewAir =
    ftCo_MF_Damage | Ft_MF_KeepColAnimPartHitStatus;
static MotionFlags const ftCo_MF_Down = Ft_MF_SkipHit | Ft_MF_SkipAnimVel |
                                        Ft_MF_Unk06 | Ft_MF_FreezeState |
                                        Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_DownU =
    ftCo_MF_Down | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_DownD = ftCo_MF_DownU | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_DownDamageU =
    ftCo_MF_DownU | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_DownDamageD =
    ftCo_MF_DownD | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_DownAttack =
    ftCo_MF_Attack | Ft_MF_SkipModel | Ft_MF_SkipAnimVel |
    Ft_MF_SkipModelPartVis;
static MotionFlags const ftCo_MF_DownAttackU =
    ftCo_MF_DownAttack | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_DownAttackD =
    ftCo_MF_DownAttack | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_PassiveWall =
    ftCo_MF_Dazed | Ft_MF_FreezeState;
static MotionFlags const ftCo_MF_Passive = ftCo_MF_Down | Ft_MF_KeepGfx |
                                           Ft_MF_KeepColAnimHitStatus |
                                           Ft_MF_UnkUpdatePhys;
static MotionFlags const ftCo_MF_StopWall =
    Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_SkipHit | Ft_MF_SkipAnimVel |
    Ft_MF_Unk06 | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_Pass =
    ftCo_MF_StopWall | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_OttottoWait = Ft_MF_Unk19 | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_CliffAction =
    Ft_MF_UnkUpdatePhys | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_CliffAction_4_5 =
    ftCo_MF_CliffAction | Ft_MF_SkipModel | Ft_MF_SkipAnimVel;
static MotionFlags const ftCo_MF_CliffCatch =
    ftCo_MF_CliffAction_4_5 | Ft_MF_Unk06;
static MotionFlags const ftCo_MF_CliffAttackSlow =
    ftCo_MF_AttackBase | ftCo_MF_CliffAction_4_5 | Ft_MF_KeepGfx |
    Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_CliffWait = ftCo_MF_CliffAction | Ft_MF_Unk19;
static MotionFlags const ftCo_MF_CatchWait =
    Ft_MF_FreezeState | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_CatchBase =
    ftCo_MF_CatchWait | Ft_MF_SkipModel | Ft_MF_SkipAnimVel;
static MotionFlags const ftCo_MF_Catch =
    ftCo_MF_CatchBase | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_Throw = ftCo_MF_CatchBase | Ft_MF_SkipItemVis;
static MotionFlags const ftCo_MF_CatchAttack =
    ftCo_MF_Throw | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCo_MF_ThrowF =
    ftCo_MF_CatchAttack | Ft_MF_KeepFastFall;
static MotionFlags const ftCo_MF_ThrowB = ftCo_MF_CatchAttack | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_ThrowHi = ftCo_MF_ThrowF | Ft_MF_KeepGfx;
static MotionFlags const ftCo_MF_ThrowLw = ftCo_MF_Throw | Ft_MF_SkipHit;
static MotionFlags const ftCo_MF_Capture =
    ftCo_MF_CatchWait | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftCo_MF_CaptureAir =
    ftCo_MF_Capture | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_Thrown =
    ftCo_MF_Capture | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_ThrownAir =
    ftCo_MF_Thrown | Ft_MF_SkipParasol;
static MotionFlags const ftCo_MF_Shouldered = ftCo_MF_Capture | Ft_MF_Unk19;
static MotionFlags const ftCo_MF_Rebirth =
    Ft_MF_SkipModelPartVis | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_ThrownStar =
    ftCo_MF_Rebirth | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_Dead = ftCo_MF_Dazed | Ft_MF_SkipMetalB;
static MotionFlags const ftCo_MF_Sleep = ftCo_MF_Dead | Ft_MF_KeepSwordTrail;
static MotionFlags const ftCo_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
typedef enum ftCommon_MotionState {
    ftCo_MS_None = -1,
    ftCo_MS_DeadDown,
    ftCo_MS_DeadLeft,
    ftCo_MS_DeadRight,
    ftCo_MS_DeadUp,
    ftCo_MS_DeadUpStar,
    ftCo_MS_DeadUpStarIce,
    ftCo_MS_DeadUpFall,
    ftCo_MS_DeadUpFallHitCamera,
    ftCo_MS_DeadUpFallHitCameraFlat,
    ftCo_MS_DeadUpFallIce,
    ftCo_MS_DeadUpFallHitCameraIce,
    ftCo_MS_Sleep,
    ftCo_MS_Rebirth,
    ftCo_MS_RebirthWait,
    ftCo_MS_Wait,
    ftCo_MS_WalkSlow,
    ftCo_MS_WalkMiddle,
    ftCo_MS_WalkFast,
    ftCo_MS_Turn,
    ftCo_MS_TurnRun,
    ftCo_MS_Dash,
    ftCo_MS_Run,
    ftCo_MS_RunDirect,
    ftCo_MS_RunBrake,
    ftCo_MS_KneeBend,
    ftCo_MS_JumpF,
    ftCo_MS_JumpB,
    ftCo_MS_JumpAerialF,
    ftCo_MS_JumpAerialB,
    ftCo_MS_Fall,
    ftCo_MS_FallF,
    ftCo_MS_FallB,
    ftCo_MS_FallAerial,
    ftCo_MS_FallAerialF,
    ftCo_MS_FallAerialB,
    ftCo_MS_FallSpecial,
    ftCo_MS_FallSpecialF,
    ftCo_MS_FallSpecialB,
    ftCo_MS_DamageFall,
    ftCo_MS_Squat,
    ftCo_MS_SquatWait,
    ftCo_MS_SquatRv,
    ftCo_MS_Landing,
    ftCo_MS_LandingFallSpecial,
    ftCo_MS_Attack11,
    ftCo_MS_Attack12,
    ftCo_MS_Attack13,
    ftCo_MS_Attack100Start,
    ftCo_MS_Attack100Loop,
    ftCo_MS_Attack100End,
    ftCo_MS_AttackDash,
    ftCo_MS_AttackS3Hi,
    ftCo_MS_AttackS3HiS,
    ftCo_MS_AttackS3S,
    ftCo_MS_AttackS3LwS,
    ftCo_MS_AttackS3Lw,
    ftCo_MS_AttackHi3,
    ftCo_MS_AttackLw3,
    ftCo_MS_AttackS4Hi,
    ftCo_MS_AttackS4HiS,
    ftCo_MS_AttackS4S,
    ftCo_MS_AttackS4LwS,
    ftCo_MS_AttackS4Lw,
    ftCo_MS_AttackHi4,
    ftCo_MS_AttackLw4,
    ftCo_MS_AttackAirN,
    ftCo_MS_AttackAirF,
    ftCo_MS_AttackAirB,
    ftCo_MS_AttackAirHi,
    ftCo_MS_AttackAirLw,
    ftCo_MS_LandingAirN,
    ftCo_MS_LandingAirF,
    ftCo_MS_LandingAirB,
    ftCo_MS_LandingAirHi,
    ftCo_MS_LandingAirLw,
    ftCo_MS_DamageHi1,
    ftCo_MS_DamageHi2,
    ftCo_MS_DamageHi3,
    ftCo_MS_DamageN1,
    ftCo_MS_DamageN2,
    ftCo_MS_DamageN3,
    ftCo_MS_DamageLw1,
    ftCo_MS_DamageLw2,
    ftCo_MS_DamageLw3,
    ftCo_MS_DamageAir1,
    ftCo_MS_DamageAir2,
    ftCo_MS_DamageAir3,
    ftCo_MS_DamageFlyHi,
    ftCo_MS_DamageFlyN,
    ftCo_MS_DamageFlyLw,
    ftCo_MS_DamageFlyTop,
    ftCo_MS_DamageFlyRoll,
    ftCo_MS_LightGet,
    ftCo_MS_HeavyGet,
    ftCo_MS_LightThrowF,
    ftCo_MS_LightThrowB,
    ftCo_MS_LightThrowHi,
    ftCo_MS_LightThrowLw,
    ftCo_MS_LightThrowDash,
    ftCo_MS_LightThrowDrop,
    ftCo_MS_LightThrowAirF,
    ftCo_MS_LightThrowAirB,
    ftCo_MS_LightThrowAirHi,
    ftCo_MS_LightThrowAirLw,
    ftCo_MS_HeavyThrowF,
    ftCo_MS_HeavyThrowB,
    ftCo_MS_HeavyThrowHi,
    ftCo_MS_HeavyThrowLw,
    ftCo_MS_LightThrowF4,
    ftCo_MS_LightThrowB4,
    ftCo_MS_LightThrowHi4,
    ftCo_MS_LightThrowLw4,
    ftCo_MS_LightThrowAirF4,
    ftCo_MS_LightThrowAirB4,
    ftCo_MS_LightThrowAirHi4,
    ftCo_MS_LightThrowAirLw4,
    ftCo_MS_HeavyThrowF4,
    ftCo_MS_HeavyThrowB4,
    ftCo_MS_HeavyThrowHi4,
    ftCo_MS_HeavyThrowLw4,
    ftCo_MS_SwordSwing1,
    ftCo_MS_SwordSwing3,
    ftCo_MS_SwordSwing4,
    ftCo_MS_SwordSwingDash,
    ftCo_MS_BatSwing1,
    ftCo_MS_BatSwing3,
    ftCo_MS_BatSwing4,
    ftCo_MS_BatSwingDash,
    ftCo_MS_ParasolSwing1,
    ftCo_MS_ParasolSwing3,
    ftCo_MS_ParasolSwing4,
    ftCo_MS_ParasolSwingDash,
    ftCo_MS_HarisenSwing1,
    ftCo_MS_HarisenSwing3,
    ftCo_MS_HarisenSwing4,
    ftCo_MS_HarisenSwingDash,
    ftCo_MS_StarRodSwing1,
    ftCo_MS_StarRodSwing3,
    ftCo_MS_StarRodSwing4,
    ftCo_MS_StarRodSwingDash,
    ftCo_MS_LipstickSwing1,
    ftCo_MS_LipstickSwing3,
    ftCo_MS_LipstickSwing4,
    ftCo_MS_LipstickSwingDash,
    ftCo_MS_ItemParasolOpen,
    ftCo_MS_ItemParasolFall,
    ftCo_MS_ItemParasolFallSpecial,
    ftCo_MS_ItemParasolDamageFall,
    ftCo_MS_LGunShoot,
    ftCo_MS_LGunShootAir,
    ftCo_MS_LGunShootEmpty,
    ftCo_MS_LGunShootAirEmpty,
    ftCo_MS_FireFlowerShoot,
    ftCo_MS_FireFlowerShootAir,
    ftCo_MS_ItemScrew,
    ftCo_MS_ItemScrewAir,
    ftCo_MS_DamageScrew,
    ftCo_MS_DamageScrewAir,
    ftCo_MS_ItemScopeStart,
    ftCo_MS_ItemScopeRapid,
    ftCo_MS_ItemScopeFire,
    ftCo_MS_ItemScopeEnd,
    ftCo_MS_ItemScopeAirStart,
    ftCo_MS_ItemScopeAirRapid,
    ftCo_MS_ItemScopeAirFire,
    ftCo_MS_ItemScopeAirEnd,
    ftCo_MS_ItemScopeStartEmpty,
    ftCo_MS_ItemScopeRapidEmpty,
    ftCo_MS_ItemScopeFireEmpty,
    ftCo_MS_ItemScopeEndEmpty,
    ftCo_MS_ItemScopeAirStartEmpty,
    ftCo_MS_ItemScopeAirRapidEmpty,
    ftCo_MS_ItemScopeAirFireEmpty,
    ftCo_MS_ItemScopeAirEndEmpty,
    ftCo_MS_LiftWait,
    ftCo_MS_LiftWalk1,
    ftCo_MS_LiftWalk2,
    ftCo_MS_LiftTurn,
    ftCo_MS_GuardOn,
    ftCo_MS_Guard,
    ftCo_MS_GuardOff,
    ftCo_MS_GuardSetOff,
    ftCo_MS_GuardReflect,
    ftCo_MS_DownBoundU,
    ftCo_MS_DownWaitU,
    ftCo_MS_DownDamageU,
    ftCo_MS_DownStandU,
    ftCo_MS_DownAttackU,
    ftCo_MS_DownFowardU,
    ftCo_MS_DownBackU,
    ftCo_MS_DownSpotU,
    ftCo_MS_DownBoundD,
    ftCo_MS_DownWaitD,
    ftCo_MS_DownDamageD,
    ftCo_MS_DownStandD,
    ftCo_MS_DownAttackD,
    ftCo_MS_DownFowardD,
    ftCo_MS_DownBackD,
    ftCo_MS_DownSpotD,
    ftCo_MS_Passive,
    ftCo_MS_PassiveStandF,
    ftCo_MS_PassiveStandB,
    ftCo_MS_PassiveWall,
    ftCo_MS_PassiveWallJump,
    ftCo_MS_PassiveCeil,
    ftCo_MS_ShieldBreakFly,
    ftCo_MS_ShieldBreakFall,
    ftCo_MS_ShieldBreakDownU,
    ftCo_MS_ShieldBreakDownD,
    ftCo_MS_ShieldBreakStandU,
    ftCo_MS_ShieldBreakStandD,
    ftCo_MS_Furafura, ///< Dazed
    ftCo_MS_Catch,
    ftCo_MS_CatchPull,
    ftCo_MS_CatchDash,
    ftCo_MS_CatchDashPull,
    ftCo_MS_CatchWait,
    ftCo_MS_CatchAttack,
    ftCo_MS_CatchCut,
    ftCo_MS_ThrowF,
    ftCo_MS_ThrowB,
    ftCo_MS_ThrowHi,
    ftCo_MS_ThrowLw,
    ftCo_MS_CapturePulledHi,
    ftCo_MS_CaptureWaitHi,
    ftCo_MS_CaptureDamageHi,
    ftCo_MS_CapturePulledLw,
    ftCo_MS_CaptureWaitLw,
    ftCo_MS_CaptureDamageLw,
    ftCo_MS_CaptureCut,
    ftCo_MS_CaptureJump,
    ftCo_MS_CaptureNeck,
    ftCo_MS_CaptureFoot,
    ftCo_MS_EscapeF,
    ftCo_MS_EscapeB,
    ftCo_MS_EscapeN,
    ftCo_MS_EscapeAir,
    ftCo_MS_ReboundStop,
    ftCo_MS_Rebound,
    ftCo_MS_ThrownF,
    ftCo_MS_ThrownB,
    ftCo_MS_ThrownHi,
    ftCo_MS_ThrownLw,
    ftCo_MS_ThrownlwWomen,
    ftCo_MS_Pass,
    ftCo_MS_Ottotto, ///< teeter
    ftCo_MS_OttottoWait, ///< teeter wait
    ftCo_MS_FlyReflectWall,
    ftCo_MS_FlyReflectCeil,
    ftCo_MS_StopWall,
    ftCo_MS_StopCeil,
    ftCo_MS_MissFoot,
    ftCo_MS_CliffCatch,
    ftCo_MS_CliffWait,
    ftCo_MS_CliffClimbSlow,
    ftCo_MS_CliffClimbQuick,
    ftCo_MS_CliffAttackSlow,
    ftCo_MS_CliffAttackQuick,
    ftCo_MS_CliffEscapeSlow,
    ftCo_MS_CliffEscapeQuick,
    ftCo_MS_CliffJumpSlow1,
    ftCo_MS_CliffJumpSlow2,
    ftCo_MS_CliffJumpQuick1,
    ftCo_MS_CliffJumpQuick2,
    ftCo_MS_AppealSR,
    ftCo_MS_AppealSL,
    ftCo_MS_ShoulderedWait,
    ftCo_MS_ShoulderedWalkSlow,
    ftCo_MS_ShoulderedWalkMiddle,
    ftCo_MS_ShoulderedWalkFast,
    ftCo_MS_ShoulderedTurn,
    ftCo_MS_ThrownFF,
    ftCo_MS_ThrownFB,
    ftCo_MS_ThrownFHi,
    ftCo_MS_ThrownFLw,
    ftCo_MS_CaptureCaptain,
    ftCo_MS_CaptureYoshi,
    ftCo_MS_YoshiEgg,
    ftCo_MS_CaptureKoopa,
    ftCo_MS_CaptureDamageKoopa,
    ftCo_MS_CaptureWaitKoopa,
    ftCo_MS_ThrownKoopaF,
    ftCo_MS_ThrownKoopaB,
    ftCo_MS_CaptureKoopaAir,
    ftCo_MS_CaptureDamageKoopaAir,
    ftCo_MS_CaptureWaitKoopaAir,
    ftCo_MS_ThrownKoopaAirF,
    ftCo_MS_ThrownKoopaAirB,
    ftCo_MS_CaptureKirby,
    ftCo_MS_CaptureWaitKirby,
    ftCo_MS_ThrownKirbyStar,
    ftCo_MS_ThrownCopyStar,
    ftCo_MS_ThrownKirby,
    ftCo_MS_BarrelWait,
    ftCo_MS_Bury,
    ftCo_MS_BuryWait,
    ftCo_MS_BuryJump,
    ftCo_MS_DamageSong,
    ftCo_MS_DamageSongWait,
    ftCo_MS_DamageSongRv,
    ftCo_MS_DamageBind,
    ftCo_MS_CaptureMewtwo,
    ftCo_MS_CaptureMewtwoAir,
    ftCo_MS_ThrownMewtwo,
    ftCo_MS_ThrownMewtwoAir,
    ftCo_MS_WarpStarJump,
    ftCo_MS_WarpStarFall,
    ftCo_MS_HammerWait,
    ftCo_MS_HammerWalk,
    ftCo_MS_HammerTurn,
    ftCo_MS_HammerKneeBend,
    ftCo_MS_HammerFall,
    ftCo_MS_HammerJump,
    ftCo_MS_HammerLanding,
    ftCo_MS_KinokoGiantStart,
    ftCo_MS_KinokoGiantStartAir,
    ftCo_MS_KinokoGiantEnd,
    ftCo_MS_KinokoGiantEndAir,
    ftCo_MS_KinokoSmallStart,
    ftCo_MS_KinokoSmallStartAir,
    ftCo_MS_KinokoSmallEnd,
    ftCo_MS_KinokoSmallEndAir,
    ftCo_MS_Entry,
    ftCo_MS_EntryStart,
    ftCo_MS_EntryEnd,
    ftCo_MS_DamageIce,
    ftCo_MS_DamageIceJump,
    ftCo_MS_CaptureMasterHand,
    ftCo_MS_CaptureDamageMasterHand,
    ftCo_MS_CaptureWaitMasterHand,
    ftCo_MS_ThrownMasterHand,
    ftCo_MS_CaptureKirbyYoshi,
    ftCo_MS_KirbyYoshiEgg,
    ftCo_MS_CaptureLeadead,
    ftCo_MS_CaptureLikelike,
    ftCo_MS_DownReflect,
    ftCo_MS_CaptureCrazyHand,
    ftCo_MS_CaptureDamageCrazyHand,
    ftCo_MS_CaptureWaitCrazyHand,
    ftCo_MS_ThrownCrazyHand,
    ftCo_MS_Barrel,
    ftCo_MS_Count
} ftCommon_MotionState;
typedef enum ftCo_Submotion {
    ftCo_SM_None = -1,
    ftCo_SM_DeadUpFallHitCamera,
    ftCo_SM_DeadUpFallHitCameraFlat,
    ftCo_SM_Wait1_0,
    ftCo_SM_Wait2,
    ftCo_SM_Unk004,
    ftCo_SM_Unk005,
    ftCo_SM_Wait1_1,
    ftCo_SM_WalkSlow,
    ftCo_SM_WalkMiddle,
    ftCo_SM_WalkFast,
    ftCo_SM_Turn,
    ftCo_SM_TurnRun,
    ftCo_SM_Dash,
    ftCo_SM_Run,
    ftCo_SM_RunBrake,
    ftCo_SM_Kneebend,
    ftCo_SM_JumpF,
    ftCo_SM_JumpB,
    ftCo_SM_JumpAerialF,
    ftCo_SM_JumpAerialB,
    ftCo_SM_Fall,
    ftCo_SM_FallF,
    ftCo_SM_FallB,
    ftCo_SM_FallAerial,
    ftCo_SM_FallAerialF,
    ftCo_SM_FallAerialB,
    ftCo_SM_FallSpecial,
    ftCo_SM_FallSpecialF,
    ftCo_SM_FallSpecialB,
    ftCo_SM_DamageFall,
    ftCo_SM_Squat,
    ftCo_SM_SquatWait,
    ftCo_SM_Unk032,
    ftCo_SM_SquatWaitItem,
    ftCo_SM_SquatRv,
    ftCo_SM_Landing,
    ftCo_SM_LandingFallSpecial,
    ftCo_SM_GuardOn,
    ftCo_SM_Guard,
    ftCo_SM_GuardOff,
    ftCo_SM_GuardDamage,
    ftCo_SM_EscapeN,
    ftCo_SM_EscapeF,
    ftCo_SM_EscapeB,
    ftCo_SM_EscapeAir,
    ftCo_SM_Rebound,
    ftCo_SM_Attack11,
    ftCo_SM_Attack12,
    ftCo_SM_Attack13,
    ftCo_SM_Attack100Start,
    ftCo_SM_Attack100Loop,
    ftCo_SM_Attack100End,
    ftCo_SM_AttackDash,
    ftCo_SM_AttackS3Hi,
    ftCo_SM_AttackS3HiS,
    ftCo_SM_AttackS3,
    ftCo_SM_AttackS3LwS,
    ftCo_SM_AttackS3Lw,
    ftCo_SM_AttackHi3,
    ftCo_SM_AttackLw3,
    ftCo_SM_AttackS4Hi,
    ftCo_SM_AttackS4HiS,
    ftCo_SM_AttackS4,
    ftCo_SM_AttackS4LwS,
    ftCo_SM_AttackS4Lw,
    ftCo_SM_Unk065,
    ftCo_SM_AttackHi4,
    ftCo_SM_AttackLw4,
    ftCo_SM_AttackAirN,
    ftCo_SM_AttackAirF,
    ftCo_SM_AttackAirB,
    ftCo_SM_AttackAirHi,
    ftCo_SM_AttackAirLw,
    ftCo_SM_LandingAirN,
    ftCo_SM_LandingAirF,
    ftCo_SM_LandingAirB,
    ftCo_SM_LandingAirHi,
    ftCo_SM_LandingAirLw,
    ftCo_SM_LightGet,
    ftCo_SM_LightThrowF,
    ftCo_SM_LightThrowB,
    ftCo_SM_LightThrowHi,
    ftCo_SM_LightThrowLw,
    ftCo_SM_LightThrowDash,
    ftCo_SM_LightThrowDrop,
    ftCo_SM_LightThrowAirF,
    ftCo_SM_LightThrowAirB,
    ftCo_SM_LightThrowAirHi,
    ftCo_SM_LightThrowAirLw,
    ftCo_SM_HeavyGet,
    ftCo_SM_HeavyWalk1,
    ftCo_SM_HeavyWalk2,
    ftCo_SM_HeavyThrowF,
    ftCo_SM_HeavyThrowB,
    ftCo_SM_HeavyThrowHi,
    ftCo_SM_HeavyThrowLw,
    ftCo_SM_LightThrowF4,
    ftCo_SM_LightThrowB4,
    ftCo_SM_LightThrowHi4,
    ftCo_SM_LightThrowLw4,
    ftCo_SM_LightThrowAirF4,
    ftCo_SM_LightThrowAirB4,
    ftCo_SM_LightThrowAirHi4,
    ftCo_SM_LightThrowAirLw4,
    ftCo_SM_HeavyThrowF4,
    ftCo_SM_HeavyThrowB4,
    ftCo_SM_HeavyThrowHi4,
    ftCo_SM_HeavyThrowLw4,
    ftCo_SM_SwordSwing1,
    ftCo_SM_SwordSwing3,
    ftCo_SM_SwordSwing4,
    ftCo_SM_SwordSwingDash,
    ftCo_SM_BatSwing1,
    ftCo_SM_BatSwing3,
    ftCo_SM_BatSwing4,
    ftCo_SM_BatSwingDash,
    ftCo_SM_ParasolSwing1,
    ftCo_SM_ParasolSwing3,
    ftCo_SM_ParasolSwing4,
    ftCo_SM_ParasolSwingDash,
    ftCo_SM_HarisenSwing1,
    ftCo_SM_HarisenSwing3,
    ftCo_SM_HarisenSwing4,
    ftCo_SM_HarisenSwingDash,
    ftCo_SM_StarRodSwing1,
    ftCo_SM_StarRodSwing3,
    ftCo_SM_StarRodSwing4,
    ftCo_SM_StarRodSwingDash,
    ftCo_SM_LipstickSwing1,
    ftCo_SM_LipstickSwing3,
    ftCo_SM_LipstickSwing4,
    ftCo_SM_LipstickSwingDash,
    ftCo_SM_HammerWait,
    ftCo_SM_HammerMove,
    ftCo_SM_ItemParasolOpen,
    ftCo_SM_ItemParasolFall,
    ftCo_SM_ItemParasolFallSpecial,
    ftCo_SM_ItemParasolDamageFall,
    ftCo_SM_LGunShoot,
    ftCo_SM_LGunShootAir,
    ftCo_SM_LGunShootEmpty,
    ftCo_SM_LGunShootAirEmpty,
    ftCo_SM_FireFlowerShoot,
    ftCo_SM_FireFlowerShootAir,
    ftCo_SM_ItemScrew,
    ftCo_SM_ItemScrewAir,
    ftCo_SM_ItemScrewDamage,
    ftCo_SM_ItemScrewDamageAir,
    ftCo_SM_ItemBlind,
    ftCo_SM_ItemScopeStart,
    ftCo_SM_ItemScopeRapid,
    ftCo_SM_ItemScopeFire,
    ftCo_SM_ItemScopeEnd,
    ftCo_SM_ItemScopeAirStart,
    ftCo_SM_ItemScopeAirRapid,
    ftCo_SM_ItemScopeAirFire,
    ftCo_SM_ItemScopeAirEnd,
    ftCo_SM_ItemScopeStartEmpty,
    ftCo_SM_ItemScopeRapidEmpty,
    ftCo_SM_ItemScopeFireEmpty,
    ftCo_SM_ItemScopeEndEmpty,
    ftCo_SM_ItemScopeAirStartEmpty,
    ftCo_SM_ItemScopeAirRapidEmpty,
    ftCo_SM_ItemScopeAirFireEmpty,
    ftCo_SM_ItemScopeAirEndEmpty,
    ftCo_SM_DamageHi1,
    ftCo_SM_DamageHi2,
    ftCo_SM_DamageHi3,
    ftCo_SM_DamageN1,
    ftCo_SM_DamageN2,
    ftCo_SM_DamageN3,
    ftCo_SM_DamageLw1,
    ftCo_SM_DamageLw2,
    ftCo_SM_DamageLw3,
    ftCo_SM_DamageAir1,
    ftCo_SM_DamageAir2,
    ftCo_SM_DamageAir3,
    ftCo_SM_DamageFlyHi,
    ftCo_SM_DamageFlyN,
    ftCo_SM_DamageFlyLw,
    ftCo_SM_DamageFlyTop,
    ftCo_SM_DamageFlyRoll,
    ftCo_SM_Unk182,
    ftCo_SM_DownBoundU,
    ftCo_SM_DownWaitU,
    ftCo_SM_DownDamageU,
    ftCo_SM_DownStandU,
    ftCo_SM_DownAttackU,
    ftCo_SM_DownFowardU,
    ftCo_SM_DownBackU,
    ftCo_SM_DownSpotU,
    ftCo_SM_DownBoundD,
    ftCo_SM_DownWaitD,
    ftCo_SM_DownDamageD,
    ftCo_SM_DownStandD,
    ftCo_SM_DownAttackD,
    ftCo_SM_DownFowardD,
    ftCo_SM_DownBackD,
    ftCo_SM_DownSpotD,
    ftCo_SM_Passive,
    ftCo_SM_PassiveStandF,
    ftCo_SM_PassiveStandB,
    ftCo_SM_PassiveWall,
    ftCo_SM_PassiveWallJump,
    ftCo_SM_PassiveCeil,
    ftCo_SM_FuraFura,
    ftCo_SM_FuraSleepStart,
    ftCo_SM_FuraSleepLoop,
    ftCo_SM_FuraSleepEnd,
    ftCo_SM_Pass,
    ftCo_SM_Ottotto, ///< teeter
    ftCo_SM_OttottoWait, ///< teeter wait
    ftCo_SM_WallDamage,
    ftCo_SM_StopWall,
    ftCo_SM_StopCeil,
    ftCo_SM_MissFoot,
    ftCo_SM_CliffCatch,
    ftCo_SM_CliffWait,
    ftCo_SM_Unk218,
    ftCo_SM_CliffClimbSlow,
    ftCo_SM_CliffClimbQuick,
    ftCo_SM_CliffAttackSlow,
    ftCo_SM_CliffAttackQuick,
    ftCo_SM_CliffEscapeSlow,
    ftCo_SM_CliffEscapeQuick,
    ftCo_SM_CliffJumpSlow1,
    ftCo_SM_CliffJumpSlow2,
    ftCo_SM_CliffJumpQuick1,
    ftCo_SM_CliffJumpQuick2,
    ftCo_SM_Unk229,
    ftCo_SM_Unk230,
    ftCo_SM_Unk231,
    ftCo_SM_Unk232,
    ftCo_SM_Unk233,
    ftCo_SM_Unk234,
    ftCo_SM_Unk235,
    ftCo_SM_Unk236,
    ftCo_SM_Unk237,
    ftCo_SM_EntryStart,
    ftCo_SM_AppealSR,
    ftCo_SM_AppealSL,
    ftCo_SM_Unk241,
    ftCo_SM_Catch,
    ftCo_SM_CatchDash,
    ftCo_SM_CatchWait,
    ftCo_SM_CatchAttack,
    ftCo_SM_CatchCut,
    ftCo_SM_ThrowF,
    ftCo_SM_ThrowB,
    ftCo_SM_ThrowHi,
    ftCo_SM_ThrowLw,
    ftCo_SM_CapturePulledHi,
    ftCo_SM_CaptureWaitHi,
    ftCo_SM_CaptureDamageHi,
    ftCo_SM_CapturePulledLw,
    ftCo_SM_CaptureWaitLw,
    ftCo_SM_CaptureDamageLw,
    ftCo_SM_CaptureCut,
    ftCo_SM_CaptureJump,
    ftCo_SM_CaptureNeck,
    ftCo_SM_CaptureFoot,
    ftCo_SM_Unk261,
    ftCo_SM_ThrownF,
    ftCo_SM_ThrownB,
    ftCo_SM_ThrownHi,
    ftCo_SM_ThrownLw,
    ftCo_SM_ThrownlwWomen,
    ftCo_SM_ShoulderedWait,
    ftCo_SM_ShoulderedWalkSlow,
    ftCo_SM_ShoulderedWalkMiddle,
    ftCo_SM_ShoulderedWalkFast,
    ftCo_SM_ShoulderedTurn,
    ftCo_SM_ThrownFF,
    ftCo_SM_ThrownFB,
    ftCo_SM_ThrownFHi,
    ftCo_SM_ThrownFLw,
    ftCo_SM_CaptureCaptain,
    ftCo_SM_YoshiEgg,
    ftCo_SM_CaptureDamageKoopa,
    ftCo_SM_ThrownKoopaF,
    ftCo_SM_ThrownKoopaB,
    ftCo_SM_CaptureDamageKoopaAir,
    ftCo_SM_ThrownKoopaAirF,
    ftCo_SM_ThrownKoopaAirB,
    ftCo_SM_ThrownCopyStar,
    ftCo_SM_ThrownKirbyStar,
    ftCo_SM_ShieldBreakFly,
    ftCo_SM_ShieldBreakFall,
    ftCo_SM_ShieldBreakDownU,
    ftCo_SM_ShieldBreakDownD,
    ftCo_SM_ShieldBreakStandU,
    ftCo_SM_ShieldBreakStandD,
    ftCo_SM_ThrownMewtwo,
    ftCo_SM_ThrownMewtwoAir,
    ftCo_SM_KirbyYoshiEgg,
    ftCo_SM_Count,
} ftCo_Submotion;
typedef enum ftCo_Surface {
    FTCO_Surface_None,
    ftCo_Surface_LeftWall,
    ftCo_Surface_RightWall,
    ftCo_Surface_Ceiling,
} ftCo_Surface;
typedef struct ftCaptain_DatAttrs ftCaptain_DatAttrs;
typedef union ftCaptain_MotionVars ftCaptain_MotionVars;
static MotionFlags const ftCa_MF_Special = ftCo_MF_Special | Ft_MF_KeepSfx;
static MotionFlags const ftCa_MF_SpecialN =
    ftCa_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftCa_MF_SpecialAirN =
    ftCa_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftCa_MF_SpecialS = ftCa_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftCa_MF_SpecialAirSStart =
    ftCa_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftCa_MF_SpecialAirS =
    ftCa_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftCa_MF_SpecialHi =
    ftCo_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftCa_MF_SpecialAirHi =
    ftCa_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftCa_MF_SpecialLw =
    ftCa_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftCa_MF_SpecialLwRebound =
    ftCa_MF_SpecialLw | Ft_MF_SkipParasol;
typedef enum ftCaptain_MotionState {
    ftCa_MS_SwordSwing4 = ftCo_MS_Count,
    ftCa_MS_BatSwing4,
    ftCa_MS_ParasolSwing4,
    ftCa_MS_HarisenSwing4,
    ftCa_MS_StarRodSwing4,
    ftCa_MS_LipstickSwing4,
    ftCa_MS_SpecialN,
    ftCa_MS_SpecialAirN,
    ftCa_MS_SpecialSStart,
    ftCa_MS_SpecialS,
    ftCa_MS_SpecialAirSStart,
    ftCa_MS_SpecialAirS,
    ftCa_MS_SpecialHi,
    ftCa_MS_SpecialAirHi,
    ftCa_MS_SpecialHiCatch,
    ftCa_MS_SpecialHiThrow,
    ftCa_MS_SpecialLw,
    ftCa_MS_SpecialLwEnd,
    ftCa_MS_SpecialAirLw,
    ftCa_MS_SpecialAirLwEnd,
    ftCa_MS_SpecialAirLwEndAir,
    ftCa_MS_SpecialLwEndAir,
    ftCa_MS_SpecialHiThrow1,
    ftCa_MS_Count,
    ftCa_MS_SelfCount = ftCa_MS_Count - ftCo_MS_Count,
} ftCaptain_MotionState;
typedef enum ftCa_Submotion {
    ftCa_SM_SwordSwing4 = ftCo_SM_Count,
    ftCa_SM_BatSwing4,
    ftCa_SM_ParasolSwing4,
    ftCa_SM_HarisenSwing4,
    ftCa_SM_StarRodSwing4,
    ftCa_SM_LipstickSwing4,
    ftCa_SM_SpecialN,
    ftCa_SM_SpecialAirN,
    ftCa_SM_SpecialSStart,
    ftCa_SM_SpecialS,
    ftCa_SM_SpecialAirSStart,
    ftCa_SM_SpecialAirS,
    ftCa_SM_SpecialHi,
    ftCa_SM_SpecialAirHi,
    ftCa_SM_SpecialHiCatch,
    ftCa_SM_SpecialHiThrow0,
    ftCa_SM_SpecialLw,
    ftCa_SM_SpecialLwEnd,
    ftCa_SM_SpecialAirLw,
    ftCa_SM_SpecialAirLwEnd,
    ftCa_SM_SpecialLwEndAir,
    ftCa_SM_SpecialAirLwEndAir,
    ftCa_SM_SpecialHiThrow1,
    ftCa_SM_Count,
    ftCa_SM_SelfCount = ftCa_SM_Count - ftCo_SM_Count,
} ftCa_Submotion;
struct ftCaptain_FighterVars {
    /**
     * @c true during the Raptor Boost startup state. Used to keep track of the
     * GFX. Cleared when the state ends and on death.
     */
    /* 0x222C */ u32 during_specials_start;
    /**
     * @c true during the Raptor Boost lunge state. Used to keep track of the
     * GFX. Cleared when the state ends and on death.
     */
    /* 0x2230 */ u32 during_specials;
    u8 _[0xF8 - 8];
};
struct ftCaptain_DatAttrs {
    /// Minimum control stick range required for downward angle (Negative Y).
    /* +0 */ float specialn_stick_range_y_neg;
    /// Minimum control stick range required for upward angle (Positive Y).
    /* +4 */ float specialn_stick_range_y_pos;
    /// Maximum angle change from control stick input.
    /* +8 */ float specialn_angle_diff;
    /// Momentum gained from aerial Falcon/Warlock Punch.
    /* +C */ float specialn_vel_x;
    /// Additional momentum from angled Falcon/Warlock Punch.
    /* +10 */ float specialn_vel_mul;
    /* +14 */ float specials_gr_vel_x;
    /* +18 */ float specials_grav;
    /* +1C */ float specials_terminal_vel;
    /* +20 */ float specials_unk0;
    /* +24 */ float specials_unk1;
    /* +28 */ float specials_unk2;
    /* +2C */ float specials_unk3;
    /* +30 */ float specials_unk4;
    /// @remarks All of these Unk variables are unused.
    /* +34 */ float specials_unk5;
    /* +38 */ float specials_miss_landing_lag;
    /* +3C */ float specials_hit_landing_lag;
    /* +40 */ float specialhi_air_friction_mul;
    /* +44 */ float specialhi_horz_vel;
    /* +48 */ float specialhi_freefall_air_spd_mul;
    /* +4C */ float specialhi_landing_lag;
    /* +50 */ float specialhi_unk0;
    /* +54 */ float specialhi_unk1;
    /* +58 */ float specialhi_input_var;
    /* +5C */ float specialhi_unk2;
    /* +60 */ float specialhi_catch_grav;
    /* +64 */ s32 specialhi_air_var; ///< Gravity of aerial Raptor Boost.
    /* +68 */ float x68; ///< Completely unknown.
    /* +6C */ u32 speciallw_unk1;
    /* +70 */ float speciallw_flame_particle_angle;
    /* +74 */ float speciallw_on_hit_spd_modifier;
    /* +78 */ s32 speciallw_unk2;
    /* +7C */ float speciallw_ground_lag_mul;
    /* +80 */ float speciallw_landing_lag_mul;
    /* +84 */ float speciallw_ground_traction;
    /* +88 */ float speciallw_air_landing_traction;
};
union ftCaptain_MotionVars {
    struct ftCaptainSpecialSVars {
        /* fp+2340 */ float grav;
    } specials;
    struct ftCaptainSpecialHiVars {
        /* fp+2340 */ u16 x0;
        /* fp+2342:0 */ u8 x2_b0 : 1;
        /* fp+2342:1 */ u8 x2_b1 : 1;
        /* fp+2342:2 */ u8 x2_b2 : 1;
        /* fp+2342:3 */ u8 x2_b3 : 1;
        /* fp+2342:4 */ u8 x2_b4 : 1;
        /* fp+2342:5 */ u8 x2_b5 : 1;
        /* fp+2342:6 */ u8 x2_b6 : 1;
        /* fp+2342:7 */ u8 x2_b7 : 1;
        /* fp+2343 */ u8 x3;
        /* fp+2344 */ Vec2 vel;
    } specialhi;
    struct ftCaptainSpecialLwVars {
        /* fp+2340 */ u16 x0;
        /* fp+2342 */ u16 x2;
        /* fp+2344 */ float friction;
        /* fp+2348 */ s32 x4;
    } speciallw;
};
#define MELEE_FT_CHARA_FTCOMMON_TYPES_H
struct ftCollisionBox {
    /*  +0 */ float top;
    /*  +4 */ float bottom;
    /*  +8 */ Vec2 left;
    /* +10 */ Vec2 right;
};
struct ftHurtboxInit {
    Fighter_Part bone_idx;
    HurtHeight height;
    u32 is_grabbable;
    Vec3 a_offset;
    Vec3 b_offset;
    float scale;
};
union ftCommon_MotionVars {
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ Vec3 x4;
        /* fp+2350 */ M2C_UNK x10;
        /* fp+2354 */ float x14;
        /* fp+2358 */ float x18;
        /* fp+235C */ float x1C;
        /* fp+2360 */ float x20;
        /* fp+2364 */ float x24;
        /* fp+2368 */ Vec3 x28;
        /* fp+2374 */ Vec3 x34;
        /* fp+2380 */ Vec3 x40;
        /* fp+238C */ Vec3 x4C;
        /* fp+2398 */ Vec3 x58;
    } common;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ FtMotionId msid;
        /* fp+2348 */ float slow_anim_frame;
        /* fp+234C */ float middle_anim_frame;
        /* fp+2350 */ float fast_anim_frame;
        /* fp+2354 */ float slow_anim_rate;
        /* fp+2358 */ float middle_anim_rate;
        /* fp+235C */ float fast_anim_rate;
        /* fp+2360 */ float accel_mul;
    } walk;
    struct {
        /* fp+2340 */ bool has_turned;
        /* fp+2344 */ float facing_after;
        /* fp+2348 */ float x8;
        /* fp+234C */ u8 pad_xC[4];
        /* fp+2350 */ float frames_to_turn;
        /* fp+2354 */ u8 pad_x14[4];
        /* fp+2358 */ bool just_turned;
        /* fp+235C */ HSD_Pad x1C;
    } turn;
    struct {
        /* fp+2340 */ u8 pad_x0[12];
        /* fp+234C */ float accel_mul;
        /* fp+2350 */ u8 pad_x10[4];
        /* fp+2354 */ int x14;
    } turnrun;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ int x4;
    } dash;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ float x4;
    } run;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ float frames;
    } runbrake;
    struct {
        /* fp+2340 */ int is_short_hop;
        /* fp+2344 */ ftCo_JumpInput jump_input;
    } kneebend;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ bool x4;
        /* fp+2348 */ float jump_mul;
    } jump;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ float init_h_vel;
    } jumpaerial;
    struct {
        /* fp+2340 */ FtMotionId smid;
        /* fp+2344 */ float x4;
    } fall;
    struct {
        /* fp+2340 */ FtMotionId smid;
        /* fp+2344 */ float x4;
    } fallaerial;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ float x4;
    } squat;
    struct {
        /* fp+2340 */ bool allow_interrupt;
    } landing;
    struct {
        /* fp+2340 */ bool x0;
    } attack1;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ bool x4;
    } attack100;
    struct {
        /* fp+2340 */ int x0;
    } attackdash;
    struct {
        /* fp+2340 */ bool x0;
    } attacklw3;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ M2C_UNK xC;
        /* fp+2350 */ M2C_UNK x10;
        /* fp+2354 */ float x14;
        /* fp+2358 */ u8 x18;
        /* fp+2359 */ u8 x19;
        /* fp+235A */ u8 x1A;
        /* fp+235B */ u8 x1B;
    } damage;
    struct {
        /* fp+2340 */ u8 wall_hit_dir;
        /* fp+2344 */ float rot_speed;
        /* fp+2348 */ ftCollisionBox ice_coll;
    } damageice;
    struct {
        /* fp+2340 */ float escape_timer;
    } damageicejump;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ float x4;
        /* fp+2348 */ float x8;
        /* fp+234C */ bool xC;
        /* fp+2350 */ float x10;
        /* fp+2354 */ float x14;
        /* fp+2358 */ float x18;
        /* fp+235C */ int x1C;
        /* fp+2360 */ int x20;
        /* fp+2364 */ int x24;
        /* fp+2368 */ M2C_UNK x28;
        /* fp+236C */ float x2C;
    } guard;
    struct {
        /* fp+2340 */ bool x0; // itemget action is heavy type?
    } itemget;
    struct {
        /* fp+2340 */ M2C_UNK x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ HSD_GObj* victim;
        /* fp+2350 */ float self_vel_y;
        /* fp+2354 */ float self_vel_x;
    } fighterthrow;
    struct {
        /* fp+2340 */ float facing_dir;
        /* fp+2344 */ float x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ int xC;
        /* fp+2350 */ float x10;
        /* fp+2354 */ int x14;
        /* fp+2358 */ M2C_UNK x18;
        /* fp+235C */ M2C_UNK x1C;
        /* fp+2360 */ int x20;
    } itemthrow;
    struct {
        /* fp+2340 */ int unk_timer;
        /* fp+2344 */ float anim_spd;
        /* fp+2348 */ Vec3 x8;
    } itemthrow4;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ float x4;
        /* fp+2348 */ float mobility;
        /* fp+234C */ int xC;
        /* fp+2350 */ bool x10;
        /* fp+2354 */ float landing_lag;
        /* fp+2358 */ bool allow_interrupt;
    } fallspecial;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ float x4;
        /* fp+2348 */ bool x8;
    } lift;
    struct {
        /* fp+2340 */ float x0;
    } downwait;
    struct {
        /* fp+2340 */ u8 pad_x0[4];
        /* fp+2344 */ u8 x4;
    } downspot;
    struct {
        /* fp+2340 */ float x0;
    } catch_;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ bool x4;
    } escape;
    struct {
        /* fp+2340 */ int timer;
        /* fp+2344 */ Vec3 self_vel;
    } escapeair;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ float anim_speed;
    } rebound;
    struct {
        /* fp+2340 */ u8 pad_x0[4];
        /* fp+2344 */ u8 x4;
    } downreflect;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ float x4;
    } pass;
    struct {
        /**
         * Used to check against opponent's #Fighter::213C while they're
         * occupying a ledge within grab range
         */
        /* fp+2340 */ int ledge_id;
        /* fp+2344 */ float x4;
        /* fp+2348 */ bool x8;
    } cliff;
    struct {
        /* fp+2340 */ bool x0;
    } cliffjump;
    struct {
        /* fp+2340 */ bool x0;
    } cargoturn;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ float x8;
    } cargokneebend;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ int x4;
    } shouldered;
    struct {
        /* fp+2340 */ float x0;
    } downdamage;
    struct {
        /* fp+2340 */ Fighter_GObj* x0;
        /* fp+2344 */ bool x4;
        /* fp+2348 */ float x8;
        /* fp+234C */ float xC;
        /* fp+2350 */ float x10;
        /* fp+2354 */ float x14;
        /* fp+2358 */ Vec3 x18;
        /* fp+2364 */ Vec3 scale;
    } yoshiegg;
    struct {
        /* fp+2340 */ bool x0;
        /* fp+2344 */ M2C_UNK x4;
        /* fp+2348 */ float x8;
        /* fp+234C */ float xC;
        /* fp+2350 */ float x10;
    } capturekoopa;
    struct {
        /* fp+2340 */ Vec2 pos_offset;
        /* fp+2348 */ Vec2 x8;
        /* fp+2350 */ Vec2 x10;
        /* fp+2358 */ bool x18;
        /* fp+235C */ M2C_UNK x1C;
        /* fp+2360 */ M2C_UNK x20;
        /* fp+2364 */ M2C_UNK x24;
        /* fp+2368 */ M2C_UNK x28;
        /* fp+236C */ Vec3 scale;
    } capturekirby;
    struct {
        /* fp+2340 */ Fighter_GObj* thrower_gobj;
        /* fp+2344 */ float x4;
        /* fp+2348 */ float x8;
        /* fp+234C */ float xC;
        /* fp+2350 */ float x10;
        /* fp+2354 */ bool x14;
        union {
            u8 x18;
            struct {
                /* fp+2358:0 */ u8 x18_b0 : 1;
                /* fp+2358:1 */ u8 x18_b1 : 1;
                /* fp+2358:2 */ u8 x18_b2 : 1;
                /* fp+2358:3 */ u8 x18_b3 : 1;
                /* fp+2358:4 */ u8 x18_b4 : 1;
                /* fp+2358:5 */ u8 x18_b5 : 1;
                /* fp+2358:6 */ u8 x18_b6 : 1;
                /* fp+2358:7 */ u8 x18_b7 : 1;
            };
        };
        /* fp+235C */ Vec3 scale;
        /* fp+2368 */ ftCollisionBox coll_box;
    } thrownkirby;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ ftCollisionBox coll_box;
        /* fp+235C */ float x1C;
        /* fp+2360 */ enum_t x20;
        /* fp+2364 */ Vec3 translate;
    } bury;
    struct {
        /* fp+2340 */ float x0;
    } buryjump;
    struct {
        /* fp+2340 */ int timer;
        /* fp+2344 */ int x4;
        /* fp+2348 */ bool x8;
        /* fp+234C */ int vel_y_exponent;
    } passivewall;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ float x4;
    } aircatchhit;
    struct {
        /* fp+2340 */ float x0;
    } aircatch;
    struct {
        /* fp+2340 */ Vec3 cur_pos;
        /* fp+234C */ Vec3 self_vel;
        /* fp+2358 */ float facing_dir;
        /* fp+235C */ int x1C;
        /* fp+2360 */ ftCollisionBox ecb;
    } warpstar;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ float x8;
    } hammerkneebend;
    struct {
        /* fp+2340 */ M2C_UNK x0;
        /* fp+2344 */ float x4;
    } hammerlanding;
    struct {
        /* fp+2340 */ Item_GObj* x0;
    } captureleadead;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ float x4;
        /* fp+2348 */ u8 pad_x8[0x18 - 0x8];
        /* fp+2358 */ HSD_JObj* x18;
    } capturedamage;
    struct {
        /* fp+2340 */ int timer;
        /* fp+2344 */ float x4;
        /* fp+2348 */ Vec3 x8;
        /* fp+2354 */ Vec3 x14;
        /* fp+2360 */ float x20;
        /* fp+2364 */ float x24;
        /* fp+2368 */ float x28;
        /* fp+236C */ ftCollisionBox x2C;
    } entry;
    struct {
        /* fp+2340 */ Item_GObj* x0;
        /* fp+2344 */ int x4;
    } capturelikelike;
    struct {
        /* fp+2340 */ HSD_GObjEvent x0;
        /* fp+2344 */ HSD_GObjEvent x4;
        /* fp+2348 */ int x8;
    } mushroom;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ Item_GObj* x8;
    } barrel;
    struct {
        /* fp+2340 */ HSD_GObjEvent x0;
    } unk_800D2890;
    struct {
        /* fp+2340 */ u8 pad_x0[0x6c - 0x40];
        /* fp+236C */ int x6C;
        /* fp+2370 */ int x70;
    } unk_800D331C;
    struct {
        /* fp+2340 */ u8 pad_x0[0x6c - 0x40];
        /* fp+236C */ int x6C;
        /* fp+2370 */ int x70;
    } unk_800D34E0;
    struct {
        /* fp+2340 */ int x40;
        /* fp+2344 */ u8 pad_x44[0x6c - 0x44];
        /* fp+236C */ int x6C;
        /* fp+2370 */ int x70;
        /* fp+2374 */ void* x74;
    } unk_800D3680;
    struct {
        /* fp+2340 */ int x40;
    } unk_deadleft;
    struct {
        /* fp+2340 */ int x40;
        /* fp+2344 */ int x44;
        /* fp+2348 */ u8 pad_x48[0x4C - 0x48];
        /* fp+234C */ float x4C;
        /* fp+2350 */ Vec3 x50;
        /* fp+235C */ Vec3 x5C;
        /* fp+2368 */ int x68;
    } unk_deadup;
    struct {
        /* fp+2340 */ bool unk_bool;
        /* fp+2344 */ float anim_timer;
        /* fp+2348 */ M2C_UNK x8;
        /* fp+234C */ u8 xC;
    } thrown;
    struct {
        /* fp+2340 */ FtMotionId prev_msid;
    } parasol_open;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2344 */ float x8;
    } swing;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ Vec xC;
    } throw_;
    struct {
        /* fp+2340 */ float x0;
        /* fp+2344 */ float x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ u8 xC;
    } capturewait;
};
/// @todo Fake, need to find real size of #HitCapsule
struct SmallerHitCapsule {
    /*  +0 */ HitCapsuleState state;
    /*  +4 */ u32 x4;
    /*  +8 */ u32 unk_count;
    /*  +C */ float damage;
    /* +10 */ Vec3 b_offset;
    /* +1C */ float scale;
    /* +20 */ int kb_angle;
    /* +24 */ u32 x24;
    /* +28 */ u32 x28;
    /* +2C */ u32 x2C;
    /* +30 */ u32 element;
    /* +34 */ char pad_34[0xFC];
};
struct TetherAttributes {
    char pad_0[0x38];
    /* +38 */ float pos_x_0;
    /* +3C */ float x3C;
    /* +40 */ float pos_x_1;
};
#define MELEE_FT_CHARA_FTDONKEY_TYPES_H
struct ftDonkey_FighterVars {
    /* 0x222C */ s32 x222C;
    /* 0x2230 */ s32 x2230;
};
union ftDonkey_MotionVars {
    struct ftDonkey_SpecialNVars {
        s32 x0;
        s32 x4;
        s32 x8;
        s32 xC;
        s32 x10;
        s32 x14;
    } specialn;
    struct ftDonkey_SpecialLwVars {
        s32 x0;
    } speciallw;
    /// @todo Rename to correct state.
    struct ftDonkey_State5Vars {
        bool x0;
        s32 x4;
        float x8;
    } unk5;
    /// @todo Rename to correct state.
    struct ftDonkey_State7Vars {
        s32 x0;
        s32 x4;
        float x8;
    } unk7;
    /// @todo Rename to correct state.
    struct ftDonkey_State8Vars {
        s32 x0;
        float x4;
    } unk8;
};
typedef struct _ftDonkeyAttributes {
    s32 motion_state;
    s32 x4_motion_state;
    //// used by ftdonkeyheavywalk.c (maybe Cargo Hold) ////
    float x8;
    float xC;
    float x10;
    float x14;
    float x18;
    float x1C;
    /////////////////////////////////////////////////
    struct {
        float x20_TURN_SPEED;
        float x24_JUMP_STARTUP_LAG;
        float x28_LANDING_LAG;
    } cargo_hold;
    //// Giant Punch
    struct {
        s32 x2C_MAX_ARM_SWINGS;
        s32 x30_DAMAGE_PER_SWING;
        float x34_PUNCH_HORIZONTAL_VEL;
        float x38_LANDING_LAG;
    } SpecialN;
    //// Headbutt
    struct {
        float x3C_MIN_STICK_X_MOMENTUM;
        float x40_MOMENTUM_TRANSITION_MODIFIER;
        float x44_AERIAL_GRAVITY;
    } SpecialS;
    float x48_UNKNOWN;
    //// Spinning Kong
    struct {
        float x4C_AERIAL_VERTICAL_VELOCITY;
        float x50_AERIAL_GRAVITY;
        float x54_GROUNDED_HORIZONTAL_VELOCITY;
        float x58_AERIAL_HORIZONTAL_VELOCITY;
        float x5C_GROUNDED_MOBILITY;
        float x60_AERIAL_MOBILITY;
        float x64_LANDING_LAG;
    } SpecialHi;
    /// Hand Slap
    struct {
        float x68;
        float x6C;
        float x70;
    } SpecialLw;
} ftDonkeyAttributes;
#define MELEE_FT_CHARA_FTFOX_TYPES_H
#define MELEE_FT_CHARA_FTFOX_FORWARD_H
typedef struct ftFox_DatAttrs ftFox_DatAttrs;
static MotionFlags const ftFx_MF_Appeal =
    Ft_MF_KeepGfx | Ft_MF_SkipModel | Ft_MF_SkipAnimVel | Ft_MF_Unk06;
static MotionFlags const ftFx_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftFx_MF_SpecialN =
    ftFx_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftFx_MF_SpecialS =
    ftFx_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftFx_MF_SpecialHi =
    ftFx_MF_SpecialS | Ft_MF_KeepFastFall;
static MotionFlags const ftFx_MF_SpecialAirN =
    ftFx_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftFx_MF_SpecialAirS =
    ftFx_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftFx_MF_SpecialAirHiHold =
    ftFx_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftFx_MF_SpecialLw =
    ftFx_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipColAnim;
static MotionFlags const ftFx_MF_SpecialAirLw =
    ftFx_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftFx_MF_SpecialNLoop = ftFx_MF_SpecialN | Ft_MF_Unk19;
static MotionFlags const ftFx_MF_SpecialAirNLoop =
    ftFx_MF_SpecialNLoop | Ft_MF_SkipParasol;
static MotionFlags const ftFx_MF_SpecialLwLoop =
    ftFx_MF_SpecialLw | Ft_MF_Unk19;
static MotionFlags const ftFx_MF_SpecialAirLwLoop =
    ftFx_MF_SpecialLwLoop | Ft_MF_SkipParasol;
typedef enum ftFox_MotionState {
    ftFx_MS_SpecialNStart = ftCo_MS_Count,
    ftFx_MS_SpecialNLoop,
    ftFx_MS_SpecialNEnd,
    ftFx_MS_SpecialAirNStart,
    ftFx_MS_SpecialAirNLoop,
    ftFx_MS_SpecialAirNEnd,
    ftFx_MS_SpecialSStart,
    ftFx_MS_SpecialS,
    ftFx_MS_SpecialSEnd,
    ftFx_MS_SpecialAirSStart,
    ftFx_MS_SpecialAirS,
    ftFx_MS_SpecialAirSEnd,
    ftFx_MS_SpecialHiHold,
    ftFx_MS_SpecialHiHoldAir,
    ftFx_MS_SpecialHi,
    ftFx_MS_SpecialAirHi,
    ftFx_MS_SpecialHiLanding,
    ftFx_MS_SpecialHiFall,
    ftFx_MS_SpecialHiBound,
    ftFx_MS_SpecialLwStart,
    ftFx_MS_SpecialLwLoop,
    ftFx_MS_SpecialLwHit,
    ftFx_MS_SpecialLwEnd,
    ftFx_MS_SpecialLwTurn,
    ftFx_MS_SpecialAirLwStart,
    ftFx_MS_SpecialAirLwLoop,
    ftFx_MS_SpecialAirLwHit,
    ftFx_MS_SpecialAirLwEnd,
    ftFx_MS_SpecialAirLwTurn,
    ftFx_MS_AppealSStartR,
    ftFx_MS_AppealSStartL,
    ftFx_MS_AppealSR,
    ftFx_MS_AppealSL,
    ftFx_MS_AppealSEndR,
    ftFx_MS_AppealSEndL,
    ftFx_MS_Count,
    ftFx_MS_SelfCount = ftFx_MS_Count - ftCo_MS_Count,
} ftFox_MotionState;
typedef enum ftFx_Submotion {
    ftFx_SM_SpecialNStart = ftCo_SM_Count,
    ftFx_SM_SpecialNLoop,
    ftFx_SM_SpecialNEnd,
    ftFx_SM_SpecialAirNStart,
    ftFx_SM_SpecialAirNLoop,
    ftFx_SM_SpecialAirNEnd,
    ftFx_SM_SpecialSStart,
    ftFx_SM_SpecialS,
    ftFx_SM_SpecialSEnd,
    ftFx_SM_SpecialAirSStart,
    ftFx_SM_SpecialAirS,
    ftFx_SM_SpecialAirSEnd,
    ftFx_SM_SpecialHiHold,
    ftFx_SM_SpecialHiHoldAir,
    ftFx_SM_SpecialHi,
    ftFx_SM_SpecialHiLanding,
    ftFx_SM_SpecialHiFall,
    ftFx_SM_SpecialHiBound,
    ftFx_SM_SpecialLwStart,
    ftFx_SM_SpecialLwLoop,
    ftFx_SM_SpecialLwHit,
    ftFx_SM_SpecialLwEnd,
    ftFx_SM_SpecialAirLwStart,
    ftFx_SM_SpecialAirLwLoop,
    ftFx_SM_SpecialAirLwHit,
    ftFx_SM_SpecialAirLwEnd,
    ftFx_SM_AppealSStartR,
    ftFx_SM_AppealSStartL,
    ftFx_SM_AppealSR,
    ftFx_SM_AppealSL,
    ftFx_SM_AppealSEndR,
    ftFx_SM_AppealSEndL,
    ftFx_SM_Count,
    ftFx_SM_SelfCount = ftFx_SM_Count - ftCo_SM_Count,
} ftFx_Submotion;
typedef enum ftFx_SpecialNIndex {
    // msid = currASID - ftFx_MS_SpecialNStart;
    ftFx_SpecialNIndex_Start,
    ftFx_SpecialNIndex_Loop,
    ftFx_SpecialNIndex_End,
    ftFx_SpecialNIndex_AirStart,
    ftFx_SpecialNIndex_AirLoop,
    ftFx_SpecialNIndex_AirEnd,
    // msid = currASID - ftCo_MS_CatchDash;
    ftFx_SpecialNIndex_ThrowB,
    ftFx_SpecialNIndex_ThrowHi,
    ftFx_SpecialNIndex_ThrowLw,
    // ftFx_SpecialNIndex_None,
} ftFx_SpecialNIndex;
#define MELEE_LB_TYPES_H
typedef union CmdUnion CmdUnion;
struct HitResult {
    HSD_JObj* bone;
    /// Follows attach bone position if toggled OFF
    u8 skip_update_pos : 1;
    Vec3 pos;
    Vec3 offset;
    float size;
};
struct HitVictim {
    M2C_UNK victim;
    u32 x4;
};
struct HitCapsule {
    /*  +0 */ HitCapsuleState state;
    /*  +4 */ u32 x4;
    /*  +8 */ u32 unk_count;
    /*  +C */ float damage;
    /* +10 */ Vec3 b_offset;
    /* +1C */ float scale;
    /* +20 */ int kb_angle;
    /* +24 */ u32 x24;
    /* +28 */ u32 x28;
    /* +2C */ u32 x2C;
    /* +30 */ u32 element;
    /* +34 */ int x34;
    /* +38 */ int sfx_severity;
    /* +3C */ enum_t sfx_kind;
    /* +40 */ u16 x40_b0 : 1;
    /* +40 */ u16 x40_b1 : 1;
    /* +40 */ u16 x40_b2 : 1;
    /* +40 */ u16 x40_b3 : 1;
    /* +40 */ u16 x40_b4 : 8;
    /* +41:4 */ u16 x41_b4 : 1;
    /* +41:5 */ u16 x41_b5 : 1;
    /* +41:6 */ u16 x41_b6 : 1;
    /* +41:7 */ u16 x41_b7 : 1;
    /* +42:0 */ u8 x42_b0 : 1;
    /* +42:1 */ u8 x42_b1 : 1;
    /* +42:2 */ u8 x42_b2 : 1;
    /* +42:3 */ u8 x42_b3 : 1;
    /* +42:4 */ u8 x42_b4 : 1;
    /* +42:5 */ u8 x42_b5 : 1;
    /* +42:6 */ u8 x42_b6 : 1;
    /* +42:7 */ u8 x42_b7 : 1;
    /* +43:0 */ u8 x43_b0 : 1;
    /* +43:1 */ u8 x43_b1 : 1;
    /* +43:2 */ u8 x43_b2 : 1;
    /* +43:3 */ u8 x43_b3 : 1;
    /* +43:4 */ u8 x43_b4 : 1;
    /* +43:5 */ u8 x43_b5 : 1;
    /* +43:6 */ u8 x43_b6 : 1;
    /* +43:7 */ u8 x43_b7 : 1;
    /* +44 */ u8 x44; // victims_1 count
    /* +45 */ u8 x45; // victims_2 count
    /* +46 */ u8 x46[0x48 - 0x46];
    /* +48 */ HSD_JObj* jobj;
    /* +4C */ Vec3 x4C;
    /* +58 */ Vec3 x58;
    /* +64 */ Vec3 hurt_coll_pos;
    /* +70 */ float coll_distance;
    /* +74 */ HitVictim victims_1[12];
    /* +D4 */ HitVictim victims_2[12];
    /* +134 */ union {
        HSD_GObj* owner;
        u8 hit_grabbed_victim_only : 1;
    };
};
;
struct HurtCapsule {
    HurtCapsuleState state;
    Vec3 a_offset;
    Vec3 b_offset;
    float scale;
    HSD_JObj* bone; // 0x20
    u8 skip_update_pos : 1;
    u8 x24_b1 : 1; // 0x24 0x40
    u8 x24_b2 : 1; // 0x24 0x20
    u8 x24_b3 : 1; // 0x24 0x10
    u8 x24_b4 : 1; // 0x24 0x08
    u8 x24_b5 : 1; // 0x24 0x04
    u8 x24_b6 : 1; // 0x24 0x02
    u8 x24_b7 : 1; // 0x24 0x01
    Vec3 a_pos;
    Vec3 b_pos;
    int bone_idx; // 0x40
};
struct FighterHurtCapsule {
    HurtCapsule capsule;
    HurtHeight height; // 0x44. 0 = low, 1 = mid, 2 = high
    bool is_grabbable; // 0x48
};
;
struct ReflectDesc {
    u32 x0_bone_id;
    s32 x4_max_damage;
    Vec3 x8_offset;
    float x14_size;
    float x18_damage_mul;
    float x1C_speed_mul;
    /// @remarks Setting this to 1 causes the reflector to skip ownership
    /// change
    u8 x20_behavior;
};
struct AbsorbDesc {
    /*  +0 */ int x0_bone_id;
    /*  +4 */ Vec3 x4_offset;
    /* +10 */ float x10_size;
};
struct ShieldDesc {
    int bone;
    Vec3 pos;
    float radius;
    float dmg_mul;
    float vel_mul;
    u8 flags : 8;
};
struct lbRefract_CallbackData {
    void* buffer; /// @brief Base address of texture buffer.
    s32 format; /// @brief Texture format (3=IA4, 4=IA8, 6=RGBA8).
    u32 width; /// @brief Texture width in pixels.
    u32 height; /// @brief Texture height in pixels.
    u32 row_stride; /// @brief Bytes per row (32/64-byte aligned).
    s32 buffer_size; /// @brief Total buffer size from GXGetTexBufferSize.
    void* callback0; /// @brief Write callback function.
    void* callback1; /// @brief Read callback function.
};
typedef struct _ECBFlagStruct {
    u8 b0 : 1;
    u8 b1234 : 4; ///< @todo Used as #s32, fix type to eliminate casts
    u8 b5 : 1;
    u8 b6 : 1;
    u8 b7 : 1;
} ECBFlagStruct;
typedef struct SurfaceData {
    int index;
    u32 flags;
    Vec3 normal;
} SurfaceData;
typedef struct _itECB {
    f32 top;
    f32 bottom;
    f32 right;
    f32 left;
} itECB;
typedef struct _ftECB {
    Vec2 top;
    Vec2 bottom;
    Vec2 right;
    Vec2 left;
} ftECB;
typedef struct ECBSource {
    /* fp+7F4 */ ECBSourceKind kind;
    /* fp+7F8 */ union {
        /* fp+7F8 */ struct {
            /* fp+7F8 */ HSD_JObj* x108_joint;
            /* fp+7FC */ HSD_JObj* x10C_joint[6];
        };
        /* fp+7F8 */ struct {
            /* fp+7F8 */ float up;
            /* fp+7FC */ float down;
            /* fp+800 */ float front;
            /* fp+804 */ float back;
            /* fp+808 */ float angle;
        };
    };
    /* fp+814 */ float x124;
    /* fp+818 */ float x128;
    /* fp+81C */ float x12C;
} ECBSource;
struct CollData {
    /* fp+6F0 */ HSD_GObj* x0_gobj; // Player GObj
    /* fp+6F4 */ Vec3 cur_pos;
    // position on the previous step of collision
    /* fp+700 */ Vec3 prev_pos;
    // position before collision routine started
    /* fp+70C */ Vec3 last_pos;
    /* fp+718 */ Vec3 x28_vec;
    /* fp+724 */ ECBFlagStruct x34_flags;
    /* fp+725 */ ECBFlagStruct x35_flags;
    /* fp+726 */ s16 facing_dir;
    /* fp+728 */ int x38;
    /* fp+72C */ int floor_skip;
    /* fp+730 */ int ledge_id_right;
    /* fp+734 */ int ledge_id_left;
    /* fp+738 */ int joint_id_skip;
    /* fp+73C */ int joint_id_only;
    /* fp+740 */ float x50;
    /* fp+744 */ float ledge_snap_x;
    /* fp+748 */ float ledge_snap_y;
    /* fp+74C */ float ledge_snap_height;
    /* fp+750 */ float lstick_x;
    /* fp+754 */ ftECB x64_ecb;
    /* fp+774 */ ftECB desired_ecb;
    /* fp+794 */ ftECB ecb;
    // ECB on the previous step of collision
    /* fp+7B4 */ ftECB prev_ecb;
    /* fp+7D4 */ ftECB xE4_ecb;
    /* fp+7F4 */ ECBSource ecb_source;
    /* fp+820 */ u32 x130_flags;
    /* fp+824 */ s32 env_flags;
    /* fp+828 */ s32 prev_env_flags;
    /* fp+82C */ s32 x13C;
    /* fp+830 */ Vec3 contact;
    /* fp+83C */ SurfaceData floor;
    /* fp+850 */ SurfaceData left_facing_wall;
    /* fp+864 */ SurfaceData right_facing_wall;
    /* fp+878 */ SurfaceData ceiling;
};
struct PreloadCacheSceneEntry {
    int char_id;
    u8 color;
    u8 x5;
};
struct PreloadEntry {
    s8 state;
    s8 type;
    s8 heap;
    s8 load_state;
    u8 unknown004;
    u8 field5_0x5;
    s16 entry_num;
    s16 load_score;
    u8 field8_0xa;
    u8 field9_0xb;
    size_t size;
    HSD_AllocEntry* raw_data;
    HSD_AllocEntry* archive;
    s32 effect_index;
};
struct GameCache {
    u8 mode_kind; ///< ::GameModeKind
    u8 x1;
    u8 x2;
    u8 x3;
    StKind stkind;
    PreloadCacheSceneEntry entries[8];
};
struct PreloadedGameModeState {
    bool is_heap_persistent[2];
    struct GameCache game_cache;
    s32 mode_scene_changes;
};
struct PreloadCache {
    s32 persistent_heaps;
    PreloadedGameModeState scene;
    PreloadedGameModeState new_scene;
    PreloadEntry entries[80];
    s32 persistent_heap;
    bool preloaded;
    M2C_UNK x974;
};
struct CameraBlurData {
    /* 0x00 */ f32 pos_x;
    /* 0x04 */ f32 pos_y;
    /* 0x08 */ f32 scale_x;
    /* 0x0C */ f32 scale_y;
    /* 0x10 */ u8 base_alpha;
    /* 0x11 */ u8 blur_size;
    /* 0x12 */ u8 mode;
    /* 0x13 */ char pad_13[0x18 - 0x13];
    /* 0x18 */ HSD_GObjEvent callback;
    /* 0x1C */ HSD_ImageDesc* efb_copy;
    /* 0x20 */ f32 tint_factor;
};
struct lb_80432A68_38_t {
    /* 0x0 */ s32 lb_error;
    /* 0x4 */ s32 hsd_result;
};
;
struct lbCardNew_SnapshotEntry {
    /* 0x0 */ u32 time;
    /* 0x4 */ s16 file_no;
    /* 0x6 */ u16 blocks;
};
;
struct ColorOverlay_UnkInner {
    /*  +0 */ int x0;
    /*  +0 */ u8 x4[0x7B - 0x4];
    /* +7B */ u8 x7B;
};
union ColorOverlay_x8_t {
    GXColor light_color;
    struct {
        s32 unk : 6;
        s32 x : 13;
        s32 yz : 13;
    } light_rot1;
    struct {
        u32 x0_0 : 1;
        u32 x0_1 : 1;
        u32 x0_2 : 1;
        u32 x0_3 : 1;
        u32 x0_4 : 1;
        u32 x0_5 : 1;
        u32 light_enable : 1;
        u32 x0_7 : 1;
        s32 x : 12;
        s32 yz : 12;
    } light_rot2;
    struct {
        u32 unk : 6;
        u32 timer : 26;
    } unk;
};
;
struct ColorOverlay {
    s32 x0_timer; // 0x0
    s32 x4_pri; // 0x4  this colanims priority, lower = will persist
    union ColorOverlay_x8_t* x8_ptr1; // 0x8
    s32 xC_loop; // 0xc
    s32* x10_ptr2; // 0x10
    s32 x14; // 0x14
    s32* x18_alloc; // 0x18
    s32 x1c; // 0x1c
    s32 x20; // 0x20
    s32 x24; // 0x24
    union {
        enum_t i;
        struct ColorOverlay_UnkInner* ptr;
    } x28_colanim; // 0x28, id for the color animation in effect
    GXColor x2C_hex; // 0x2C
    f32 x30_color_red; // 0x30
    f32 x34_color_green; // 0x34
    f32 x38_color_blue; // 0x38
    f32 x3C_color_alpha; // 0x3C
    f32 x40_colorblend_red; // 0x40
    f32 x44_colorblend_green; // 0x44
    f32 x48_colorblend_blue; // 0x48
    f32 x4C_colorblend_alpha; // 0x4C
    GXColor x50_light_color; // 0x50
    f32 x54_light_red; // 0x54
    f32 x58_light_green; // 0x58
    f32 x5C_light_blue; // 0x5C
    f32 x60_light_alpha; // 0x60
    f32 x64_lightblend_red; // 0x64
    f32 x68_lightblend_green; // 0x68
    f32 x6C_lightblend_blue; // 0x6c
    f32 x70_lightblend_alpha; // 0x70
    f32 x74_light_rot_x; // 0x74
    f32 x78_light_rot_yz; // 0x78
    u8 x7C_color_enable : 1; // 0x7c, 0x80
    u8 x7C_flag2 : 1; // 0x7c, 0x40
    u8 x7C_light_enable : 1; // 0x7c, 0x20
    u8 x7C_flag4 : 1; // 0x7c, 0x10
    u8 x7C_flag5 : 1; // 0x7c, 0x08
    u8 x7C_flag6 : 1; // 0x7c, 0x04
    u8 x7C_flag7 : 1; // 0x7c, 0x02
    u8 x7C_flag8 : 1; // 0x7c, 0x01
};
;
struct lb_80011A50_t {
    /*  +0 */ u8 x0;
    /*  +1 */ u8 x1;
    /*  +2 */ s8 x2;
    /*  +3 */ s8 x3;
    /*  +4 */ Vec3 x4;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 unk_scale;
    /* +24 */ f32 x24;
    /* +28 */ int unk_count0;
    /* +2C */ f32 unk_angle_float;
    /* +30 */ int unk_angle_int;
    /* +34 */ struct lb_80011A50_t* next;
};
struct lb_80014638_arg0_t {
    /*  +0 */ Vec3 x0;
    /*  +C */ Vec3 xC;
};
;
struct lb_80014638_arg1_t {
    /*  +0 */ float unk_x;
    /*  +4 */ float unk_y;
    /*  +8 */ Vec3 x8;
};
;
struct Fighter_804D653C_t {
    void* unk;
    u8 unk4;
    u8 unk5;
};
;
struct lb_00F9_UnkDesc1Inner {
    /* 0x00 */ f32 unk_0;
    /* 0x04 */ f32 unk_4; /* inferred */
    /* 0x08 */ Quaternion unk_8;
    /* 0x18 */ f32 unk_18; /* inferred */
    /* 0x1C */ Vec3 unk_1C; /* inferred */
    /* 0x28 */ Vec3 unk_28; /* inferred */
    /* 0x34 */ f32 unk_34; /* inferred */
    /* 0x38 */ f32 unk_38; /* inferred */
};
;
struct lb_00F9_UnkDesc1 {
    struct lb_00F9_UnkDesc1Inner array[2];
};
struct lb_00F9_UnkDesc0 {
    /* 0x00 */ HSD_JObj* jobj;
    /* 0x04 */ Quaternion rotate;
    /* 0x14 */ Vec3 translate;
    /* 0x20 */ Vec3 scale;
    /* 0x2C */ Vec3 unk_2C;
    /* 0x38 */ Vec3 unk_38;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ s32 unk_54;
    /* 0x58 */ Quaternion unk_58;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ Vec3 unk_6C;
    /* 0x78 */ Vec3 unk_78;
    /* 0x84 */ f32 unk_84;
    /* 0x88 */ f32 unk_88;
    /* 0x8C */ f32 unk_8C;
};
union PolymorphicDesc {
    u8 _[0x90];
    struct lb_00F9_UnkDesc0 lb_unk0;
    struct lb_00F9_UnkDesc1 lb_unk1;
    struct AbsorbDesc absorb;
    struct HurtCapsule hurt;
};
;
struct DynamicsData {
    union PolymorphicDesc desc;
    /* 0x90 */ struct DynamicsData* next;
    /* 0x94 */ s32 unk_94;
}; /* size = 0x98 */
;
struct DynamicsDesc {
    /* +0 */ struct DynamicsData* data;
    /* +4 */ unsigned int count;
    /* +8 */ Vec3 pos;
};
struct BoneDynamicsDesc {
    enum_t bone_id;
    DynamicsDesc dyn_desc;
};
struct lb_8000FD18_t {
    char pad_0[0x94];
};
struct lb_804D63A0_t {
    /* +0 */ struct DynamicsData entries[0x140];
};
;
struct lb_804D63A8_t {
    /* +0 */ struct lb_80011A50_t entries[8];
};
;
struct lbColl_8000A10C_arg0_t {
    float x0;
    float x4;
    Vec3 x8;
    Vec3 x14;
};
struct Command_00 {
    u32 code : 6;
    u32 value : 26;
};
struct Command_02 {
    u32 code : 6;
    u32 value : 26;
};
struct Command_03 {
    u32 code : 6;
    u32 value : 26;
};
struct Command_04 {
    u32 x;
};
struct Command_05 {
    CmdUnion* ptr;
};
struct Command_07 {
    CmdUnion* ptr;
};
struct Command_09 {
    u32 id : 6;
    u32 param_1 : 8;
    u32 param_2 : 18;
};
struct unk0 {
    u32 opcode : 6; ///< Bits 0~5
    u32 unk1 : 8; ///< Bits 6~13
    u32 unk2 : 18; ///< Bits 14~31
};
struct unk1 {
    u32 opcode : 6; ///< Bits 0~5
    u32 unk0 : 2; ///< Bits 6~7
    u32 unk1 : 4; ///< Bits 8~11
    u32 unk2 : 1; ///< Bit 12
};
struct set_throw_flags {
    u32 opcode : 6; ///< Bits 0~5
    u32 hit_idx : 26; ///< Bits 6~31
};
struct unk3 {
    s32 unk0 : 7; ///< Bits 0~6
    s32 unk1 : 25; ///< Bits 7~31
};
struct unk4 {
    u16 opcode : 6; ///< Bits 0~5
    u16 unk1 : 8; ///< Bits 6~13
};
struct unk5 {
    s32 unk0 : 14; ///< Bits 0~13
    s32 unk1 : 18; ///< Bits 14~31
};
struct unk6 {
    u8 opcode : 6; ///< Bits 0~5
    u8 unk1 : 1; ///< Bit 6
};
struct set_airborne_state {
    u32 opcode : 6; ///< Bits 0~5
    u32 state : 26; ///< Bits 6~31
}; ///< #ftAction_80071998
struct unk8 {
    int unk0;
};
struct part_anim {
    s32 opcode : 6;
    s32 unk1 : 7;
    s32 unk2 : 7;
    u32 unk3 : 12;
};
struct unk9 {
    s32 unk0 : 6;
    u32 unk1 : 13;
    u32 unk2 : 13;
};
struct unk10 {
    s32 unk0 : 6;
    u32 unk1 : 1;
    u32 unk2 : 12;
    u32 unk3 : 13;
};
struct unk11 {
    s32 unk0 : 6;
    u32 unk1 : 26;
};
struct unk12 {
    u32 unk0 : 6;
    u32 unk1 : 2;
    u32 unk2 : 10;
    u32 unk3 : 14;
};
struct unk13 {
    u32 unk0 : 6;
    u32 unk1 : 8;
    u32 unk2 : 18;
};
struct unk14 {
    u32 unk0 : 6;
    u32 unk1 : 8;
};
struct unk15 {
    u32 unk0 : 6;
    u32 unk1 : 26;
}; ///< #ftAction_80072B14
struct unk16 {
    u32 unk0 : 6;
    s32 unk3 : 1;
    s32 unk4 : 25;
}; ///< #ftAction_80072B3C
struct unk17 {
    u32 unk0 : 6;
    s32 unk1 : 26;
}; ///< #ftAction_80072B94
struct unk18 {
    u32 unk0 : 6;
    s32 damage_amount : 26;
}; ///< #ftAction_80072BF4
struct unk19 {
    u32 unk0 : 6;
    u32 unk1 : 26;
}; ///< #ftAction_80072C6C
struct unk20 {
    u32 unk0 : 6;
    u32 unk1 : 26;
}; ///< #ftAction_80072CB0
struct unk21 {
    u32 unk0 : 6;
    u32 unk1 : 1;
    u32 unk2 : 8;
}; ///< #ftAction_800730B8
struct set_hitbox_damage {
    u32 opcdoe : 6;
    u32 idx : 3;
    u32 value : 23;
}; ///< #ftAction_8007162C
struct set_hitbox_scale {
    u32 opcode : 6;
    u32 idx : 3;
    u32 value : 23;
}; ///< #ftAction_8007169C
struct set_hitbox_x42_b57 {
    u32 opcode : 6;
    u32 idx : 24;
    u32 type : 1;
    u32 value : 1;
}; ///< #ftAction_80071708
struct set_cmd_var {
    u32 opcode : 6;
    u32 idx : 2;
    u32 value : 24;
}; ///< #ftAction_80071708
struct set_hurt_state {
    u32 opcode : 6;
    u32 bone_idx : 8;
    u32 state : 18;
}; ///< #ftAction_80071A9C
struct set_jab_combo {
    u32 opcode : 6;
    u32 disabled : 26;
}; ///< #ftAction_80071AE8
struct set_jab_rapid {
    u32 opcode : 6;
    u32 state : 26;
}; ///< #ftAction_80071B28
struct set_dobj_flags {
    u32 opcode : 6;
    s32 idx : 7;
    s32 value : 19;
}; ///< #ftAction_80071D40
struct set_throw_hitbox_0 {
    u32 opcode : 6;
    u32 idx : 3;
    u32 damage : 23;
}; ///< #ftAction_80071E04
struct set_throw_hitbox_1 {
    u32 unk0 : 9;
    u32 hit_x24 : 9;
    u32 hit_x28 : 9;
}; ///< #ftAction_80071E04
struct set_throw_hitbox_2 {
    u32 hit_x2C : 9;
    u32 element : 4;
    u32 sfx_severity : 3;
    u32 sfx_kind : 4;
}; ///< #ftAction_80071E04
struct unk27 {
    u32 opcode : 6;
    u32 value : 26;
}; ///< #ftAction_80071F34
struct set_article_vis {
    u32 opcode : 6;
    u32 value : 26;
}; ///< #ftAction_80071F78
struct set_fighter_vis {
    u32 opcode : 6;
    u32 value : 26;
}; ///< #ftAction_80071FA0
struct set_tex_anim {
    u32 opcode : 6;
    u32 b : 1;
    s32 idx : 7;
    s32 idx2 : 7;
    s32 frame : 11;
}; ///< #ftAction_800726F4
struct unk31 {
    u32 opcode : 6;
    u32 unk0 : 10;
    u32 unk1 : 16;
}; ///< #ftAction_80073008
struct unk32 {
    u32 opcode : 6;
    u32 unk0 : 13;
    u32 unk1 : 13;
}; ///< #ftAction_80073008
struct unk33 {
    u32 opcode : 6;
    u32 unk0 : 13;
    u32 unk1 : 13;
}; ///< #it_8027990C
struct spawn_gfx_0 {
    u32 opcode : 6;
    u32 boneId : 8;
    u32 useCommonBoneIDs : 1;
    u32 destroyOnStateChange : 1;
    u32 useUnkBone : 1;
    u32 unk1 : 15;
};
struct spawn_gfx_1 {
    u32 gfxID : 16;
    u32 unkFloat : 16;
};
struct spawn_gfx_2 {
    s16 offsetZ : 16;
    s16 offsetY : 16;
};
struct spawn_gfx_3 {
    s16 offsetX : 16;
    u16 rangeZ : 16;
};
struct spawn_gfx_4 {
    u16 rangeY : 16;
    u16 rangeX : 16;
};
struct spawn_hitbox_0 {
    u32 opcode : 6;
    u32 id : 3;
    u32 hit_group : 3;
    u32 only_hit_grabbed : 1;
    u32 bone : 8;
    u32 use_common_bone_ids : 1;
    u32 damage : 10;
};
struct spawn_hitbox_1 {
    u32 size : 16;
    s32 z_offset : 16;
};
struct spawn_hitbox_2 {
    s32 y_offset : 16;
    s32 x_offset : 16;
};
struct spawn_hitbox_3 {
    u32 angle : 9;
    u32 knockback_growth : 9;
    u32 weight_set_knockback : 9;
    u32 item_hit_interaction : 1;
    u32 ignore_thrown_fighters : 1;
    u32 ignore_fighter_scale : 1;
    u32 clank : 1;
    u32 rebound : 1;
};
struct spawn_hitbox_4 {
    u32 base_knockback : 9;
    u32 element : 5;
    s32 shield_damage : 8;
    u32 hit_sfx_severity : 3;
    u32 hit_sfx_kind : 5;
    u32 hit_grounded : 1;
    u32 hit_aerial : 1;
};
struct spawn_hitbox_5 {
    u32 x0 : 8;
    u32 x1_b0 : 1;
    u32 x1_b1 : 1;
    u32 x1_b2 : 1;
    u32 x1_b3 : 1;
    u32 x1_b4 : 1;
    u32 x1_b5 : 1;
    u32 x1_b6 : 1;
    u32 x1_b7 : 1;
};
struct it_create_hitbox_0 {
    u32 opcode : 6;
    u32 id : 3;
    u32 hit_group : 3;
    u32 bone : 7;
    u32 damage : 13;
};
struct it_create_hitbox_4 {
    u32 base_knockback : 9;
    u32 element : 5;
    u32 x40_b0 : 1;
    s32 shield_damage : 8;
    u32 sfx_severity : 3;
    u32 sfx_kind : 4;
    u32 x40_b3 : 1;
    u32 x40_b2 : 1;
};
struct spawn_hitbox_skip {
    u8 _0[0xF];
    u32 xF_b0 : 1;
    u32 xF_b1 : 1;
    u32 xF_b2 : 1;
    u32 xF_b3 : 1;
    u32 xF_b4 : 1;
};
struct sound_effect_0 {
    u32 opcode : 6;
    u32 behavior : 8;
    u32 unknown : 18;
};
struct sound_effect_1 {
    u32 sfx_id;
};
struct sound_effect_2 {
    u32 padding : 16;
    u32 volume : 8;
    u32 panning : 8;
};
struct pseudo_random_sfx_0 {
    u32 opcode : 6;
    u32 volume : 8;
    u32 panning : 8;
    u32 behavior : 4;
    u32 random_range : 6;
};
struct pseudo_random_sfx_1 {
    u32 sfx_id;
};
struct stage_sfx_0 {
    u32 opcode : 6;
    u32 sfx_base : 10;
    u32 x2_b0_7 : 8;
    u32 pitch_select : 8;
};
struct stage_sfx_1 {
    u32 sfx_id;
};
struct stage_sfx_2 {
    u32 x0_b0_15 : 16;
    u32 x2_b0_15 : 16;
};
struct stage_sfx_3 {
    u32 x0_b0_15 : 16;
    u32 x2_b0_7 : 8;
    u32 x3_b0_7 : 8;
};
struct footstep_fx_0 {
    u32 opcode : 6;
    u32 boneId : 8;
    u32 use_alt_bone : 1;
    u32 x1_b7 : 1;
    u32 x2_b0_7 : 8;
    u32 x3_b0_7 : 8;
};
struct unk_fx_0 {
    u32 opcode : 6;
    u32 x0_b6_7 : 2;
    u32 x1_b0_7 : 8;
    u32 x2_b0_7 : 8;
    u32 x3_b0_7 : 8;
};
struct smash_charge_0 {
    u32 opcode : 6;
    u32 charge_frames : 10;
    u32 charge_rate : 16;
};
struct smash_charge_1 {
    u32 color_anim : 8;
    u32 x1_b0_23 : 24;
};
struct wind_fx_0 {
    u32 opcode : 6;
    u32 x0_b6_17 : 18;
    u32 bone : 8;
};
struct wind_fx_1 {
    s16 timer : 16;
    s16 x : 16;
};
struct wind_fx_2 {
    s16 y : 16;
    s16 mag : 16;
};
struct wind_fx_3 {
    s16 angle : 16;
    s16 decay : 16;
};
union CmdUnion {
    struct Command_00 Command_00;
    struct Command_02 Command_02;
    struct Command_03 Command_03;
    struct Command_04 Command_04;
    struct Command_05 Command_05;
    struct Command_07 Command_07;
    struct Command_09 Command_09;
    struct unk0 unk0;
    struct unk1 unk1;
    struct set_throw_flags set_throw_flags;
    struct unk3 unk3;
    struct unk4 unk4;
    struct unk5 unk5;
    struct unk6 unk6;
    struct set_airborne_state set_airborne_state; ///< #ftAction_80071998
    struct unk8 unk8;
    struct part_anim part_anim;
    struct unk9 unk9;
    struct unk10 unk10;
    struct unk11 unk11;
    struct unk12 unk12;
    struct unk13 unk13;
    struct unk14 unk14;
    struct unk15 unk15; ///< #ftAction_80072B14
    struct unk16 unk16; ///< #ftAction_80072B3C
    struct unk17 unk17; ///< #ftAction_80072B94
    struct unk18 unk18; ///< #ftAction_80072BF4
    struct unk19 unk19; ///< #ftAction_80072C6C
    struct unk20 unk20; ///< #ftAction_80072CB0
    struct unk21 unk21; ///< #ftAction_800730B8
    struct set_hitbox_damage set_hitbox_damage; ///< #ftAction_8007162C
    struct set_hitbox_scale set_hitbox_scale; ///< #ftAction_8007169C
    struct set_hitbox_x42_b57 set_hitbox_x42_b57; ///< #ftAction_80071708
    struct set_cmd_var set_cmd_var; ///< #ftAction_80071708
    struct set_hurt_state set_hurt_state; ///< #ftAction_80071A9C
    struct set_jab_combo set_jab_combo; ///< #ftAction_80071AE8
    struct set_jab_rapid set_jab_rapid; ///< #ftAction_80071B28
    struct set_dobj_flags set_dobj_flags; ///< #ftAction_80071D40
    struct set_throw_hitbox_0 set_throw_hitbox_0; ///< #ftAction_80071E04
    struct set_throw_hitbox_1 set_throw_hitbox_1; ///< #ftAction_80071E04
    struct set_throw_hitbox_2 set_throw_hitbox_2; ///< #ftAction_80071E04
    struct unk27 unk27; ///< #ftAction_80071F34
    struct set_article_vis set_article_vis; ///< #ftAction_80071F78
    struct set_fighter_vis set_fighter_vis; ///< #ftAction_80071FA0
    struct set_tex_anim set_tex_anim; ///< #ftAction_800726F4
    struct unk31 unk31; ///< #ftAction_80073008
    struct unk32 unk32; ///< #ftAction_80073008
    struct unk33 unk33; ///< #it_8027990C
    struct spawn_gfx_0 spawn_gfx_0; ///< ftAction_80071028
    struct spawn_gfx_1 spawn_gfx_1;
    struct spawn_gfx_2 spawn_gfx_2;
    struct spawn_gfx_3 spawn_gfx_3;
    struct spawn_gfx_4 spawn_gfx_4;
    struct spawn_hitbox_0 create_hitbox_0; ///< ftAction_8007121C
    struct spawn_hitbox_1 create_hitbox_1;
    struct spawn_hitbox_2 create_hitbox_2;
    struct spawn_hitbox_3 create_hitbox_3;
    struct spawn_hitbox_4 create_hitbox_4;
    struct spawn_hitbox_5 create_hitbox_5;
    struct it_create_hitbox_0 it_create_hitbox_0;
    struct it_create_hitbox_4 it_create_hitbox_4;
    struct sound_effect_0 sound_effect_0;
    struct sound_effect_1 sound_effect_1;
    struct sound_effect_2 sound_effect_2;
    struct pseudo_random_sfx_0 pseudo_random_sfx_0;
    struct pseudo_random_sfx_1 pseudo_random_sfx_1;
    struct stage_sfx_0 stage_sfx_0;
    struct stage_sfx_1 stage_sfx_1;
    struct stage_sfx_2 stage_sfx_2;
    struct stage_sfx_3 stage_sfx_3;
    struct footstep_fx_0 footstep_fx_0;
    struct unk_fx_0 unk_fx_0;
    struct smash_charge_0 smash_charge_0;
    struct smash_charge_1 smash_charge_1;
    struct wind_fx_0 wind_fx_0;
    struct wind_fx_1 wind_fx_1;
    struct wind_fx_2 wind_fx_2;
    struct wind_fx_3 wind_fx_3;
};
struct CommandInfo {
    f32 timer; // 0x00
    f32 frame_count; // 0x04
    union {
        u32* ptr[1]; ///< @todo Hack to match #Command_04
        /// @todo eventually clean this up, probably have each struct as its
        /// own union?
        CmdUnion* u;
    };
    u32 loop_count; // 0x0C
    union CmdUnion*
        event_return[3]; // 0x10 - Array Size is purely made-up for now
    u32 loop_count_dup; // 0x14
    u32 unk_x18; // 0x18
};
struct LbShadow {
    u8 x0_b0 : 1;
    u8 x0_b1 : 1;
    u8 x0_b2 : 1;
    u8 x0_b3 : 1;
    u8 x0_b4 : 1;
    u8 x0_b5 : 1;
    u8 x0_b6 : 1;
    u8 x0_b7 : 1;
    HSD_Shadow* shadow;
};
typedef struct {
    s8 x, y;
} S8Vec2, *S8Vec2Ptr;
typedef struct {
    u8 x, y;
} U8Vec2;
struct ftFox_FighterVars {
    /* 0x222C */ HSD_GObj* x222C_blasterGObj;
};
typedef struct ftFoxSpecialN {
    /// 0x2340 - Check to allow repeated blaster shots
    bool isBlasterLoop;
} ftFoxSpecialN;
typedef struct ftFoxSpecialS {
    /// 0x2340 - Number of frames to pass before gravity takes effect
    s32 gravityDelay;
    /// 0x2344 through 0x2370 - Related to Illusion/Phantasm model's position?
    Vec3 ghostEffectPos[4];
    /// 0x2374 through 0x2380 - ColAnim blend frames?
    float blendFrames[4];
    /// 0x2384 - Illusion/Phantasm GObj pointer
    HSD_GObj* ghostGObj;
} ftFoxSpecialS;
typedef struct ftFoxSpecialHi {
    /// 0x2340 - Number of frames to pass before gravity takes effect
    s32 gravityDelay;
    /// 0x2344 - Used to rotate Fox/Falco's model?
    float rotateModel;
    /// 0x2348 - Number of frames Firefox/Firebird's launch animation lasts for
    s32 travelFrames;
    /// 0x234C - ???
    s32 unk;
    /// 0x2350 - ???
    s32 unk2;
} ftFoxSpecialHi;
typedef struct ftFoxSpecialLw {
    /// 0x2340 - Auto lag frames after initializing Reflector if B is not being
    /// held. Reflector is immediately released with no lag once these frames
    /// have passed
    s32 releaseLag;
    /// 0x2344 - Number of frames it takes Fox/Falco to turn around on command
    s32 turnFrames;
    /// 0x2348 - Check if Fox/Falco is no longer holding B
    bool isRelease;
    /// 0x234C - Number of frames to pass before gravity takes effect
    s32 gravityDelay;
} ftFoxSpecialLw;
typedef struct ftFoxAppealS {
    /// 0x2340 - Fox/Falco's facing direction as a boolean variable, used to
    /// load indexed ASIDs from the AppealS struct
    bool facingDir;
    /// 0x2344 - Incremented every time one of the three stages of the AppealS
    /// animation is completed
    s32 animCount;
} ftFoxAppealS;
typedef union ftFox_MotionVars {
    ftFoxSpecialN SpecialN;
    ftFoxSpecialS SpecialS;
    ftFoxSpecialHi SpecialHi;
    ftFoxSpecialLw SpecialLw;
    ftFoxAppealS AppealS;
} ftFox_MotionVars;
struct ftFox_DatAttrs {
    // NEUTRAL SPECIAL - BLASTER
    float x0_FOX_BLASTER_UNK1;
    float x4_FOX_BLASTER_UNK2;
    float x8_FOX_BLASTER_UNK3;
    float xC_FOX_BLASTER_UNK4;
    /// Angle at which Blaster shots are fired
    float x10_FOX_BLASTER_ANGLE;
    /// Velocity at which Blaster shots are fired
    float x14_FOX_BLASTER_VEL;
    float x18_FOX_BLASTER_LANDING_LAG;
    ItemKind x1C_FOX_BLASTER_SHOT_ITKIND;
    ItemKind x20_FOX_BLASTER_GUN_ITKIND;
    // SIDE SPECIAL - FOX ILLUSION / FALCO PHANTASM
    float x24_FOX_ILLUSION_GRAVITY_DELAY; // Frames required to pass before
                                          // gravity is applied
    float x28_FOX_ILLUSION_GROUND_VEL_X; // Horizontal velocity?
    float x2C_FOX_ILLUSION_UNK1;
    float x30_FOX_ILLUSION_UNK2;
    float x34_FOX_ILLUSION_GROUND_END_VEL_X;
    float x38_FOX_ILLUSION_GROUND_FRICTION;
    float x3C_FOX_ILLUSION_AIR_END_VEL_X;
    float x40_FOX_ILLUSION_AIR_MUL_X;
    float x44_FOX_ILLUSION_FALL_ACCEL;
    float x48_FOX_ILLUSION_TERMINAL_VELOCITY;
    float x4C_FOX_ILLUSION_FREEFALL_MOBILITY;
    float x50_FOX_ILLUSION_LANDING_LAG;
    // UP SPECIAL - FIREFOX / FIREBIRD
    float x54_FOX_FIREFOX_GRAVITY_DELAY;
    float x58_FOX_FIREFOX_VEL_X; // Initial velocity
    float x5C_FOX_FIREFOX_AIR_MOMENTUM_PRESERVE_X;
    float x60_FOX_FIREFOX_FALL_ACCEL;
    float x64_FOX_FIREFOX_DIRECTION_STICK_RANGE_MIN; // Minimum control stick
                                                     // range required for
                                                     // direction change
    float
        x68_FOX_FIREFOX_DURATION; // Amount of frames Firefox/Firebird travels
    s32 x6C_FOX_FIREFOX_BOUNCE_VAR;
    float x70_FOX_FIREFOX_DURATION_END;
    float x74_FOX_FIREFOX_SPEED;
    float x78_FOX_FIREFOX_REVERSE_ACCEL; // ???
    float x7C_FOX_FIREFOX_GROUND_MOMENTUM_END;
    float x80_FOX_FIREFOX_UNK2;
    float x84_FOX_FIREFOX_BOUND_VEL_X; // Horizontal velocity of SpecialHiBound
                                       // action state
    float
        x88_FOX_FIREFOX_FACING_STICK_RANGE_MIN; // Minimum control stick range
                                                // required to change
                                                // character's facing direction
    float x8C_FOX_FIREFOX_FREEFALL_MOBILITY;
    float x90_FOX_FIREFOX_LANDING_LAG;
    float x94_FOX_FIREFOX_BOUND_ANGLE;
    // DOWN SPECIAL - REFLECTOR
    /**
     * Auto lag frames after initializing Reflector if B is not being held.
     * Reflector is immediately released with no lag once these frames have
     * passed.
     */
    float x98_FOX_REFLECTOR_RELEASE_LAG;
    /// Amount of turn frames for changing Reflector direction
    float x9C_FOX_REFLECTOR_TURN_FRAMES;
    float xA0_FOX_REFLECTOR_UNK1;
    s32 xA4_FOX_REFLECTOR_GRAVITY_DELAY;
    float xA8_FOX_REFLECTOR_MOMENTUM_PRESERVE_X;
    float xAC_FOX_REFLECTOR_FALL_ACCEL;
    ReflectDesc xB0_FOX_REFLECTOR_REFLECTION;
};
#define MELEE_FT_CHARA_FTGAMEWATCH_TYPES_H
#define MELEE_FT_CHARA_FTGAMEWATCH_FORWARD_H
static MotionFlags const ftGw_MF_Base = Ft_MF_SkipItemVis | Ft_MF_FreezeState;
static MotionFlags const ftGw_MF_Landing = Ft_MF_KeepColAnimHitStatus |
                                           Ft_MF_SkipHit | Ft_MF_KeepSfx |
                                           Ft_MF_SkipParasol;
static MotionFlags const ftGw_MF_LandingAirB = ftGw_MF_Landing | Ft_MF_KeepGfx;
static MotionFlags const ftGw_MF_LandingAirHi =
    ftGw_MF_LandingAirB | Ft_MF_KeepFastFall;
static MotionFlags const ftGw_MF_Attack = ftGw_MF_Base | Ft_MF_KeepSfx;
static MotionFlags const ftGw_MF_AttackLw3 = ftGw_MF_Attack | Ft_MF_SkipHit;
static MotionFlags const ftGw_MF_AttackAirN = ftGw_MF_Attack | ftGw_MF_Landing;
static MotionFlags const ftGw_MF_AttackAirB =
    ftGw_MF_AttackAirN | Ft_MF_KeepGfx;
static MotionFlags const ftGw_MF_AttackAirHi =
    ftGw_MF_AttackAirB | Ft_MF_KeepFastFall;
static MotionFlags const ftGw_MF_AttackS4 =
    ftGw_MF_AttackLw3 | Ft_MF_KeepFastFall | Ft_MF_SkipRumble;
static MotionFlags const ftGw_MF_Attack11 =
    ftGw_MF_Attack | Ft_MF_KeepFastFall | Ft_MF_Unk19;
static MotionFlags const ftGw_MF_Attack100 =
    ftGw_MF_Attack | Ft_MF_KeepColAnimHitStatus | Ft_MF_Unk19;
static MotionFlags const ftGw_MF_Special =
    ftGw_MF_Base | Ft_MF_SkipModel | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftGw_MF_SpecialS = ftGw_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftGw_MF_SpecialHi =
    ftGw_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftGw_MF_SpecialLwCatch =
    ftGw_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftGw_MF_SpecialN =
    ftGw_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftGw_MF_SpecialAirS =
    ftGw_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftGw_MF_SpecialAirHi =
    ftGw_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftGw_MF_SpecialAirLwCatch =
    ftGw_MF_SpecialLwCatch | Ft_MF_SkipParasol;
static MotionFlags const ftGw_MF_SpecialAirN =
    ftGw_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftGw_MF_SpecialLw =
    ftGw_MF_SpecialLwCatch | Ft_MF_Unk19;
static MotionFlags const ftGw_MF_SpecialAirLw =
    ftGw_MF_SpecialLw | Ft_MF_SkipParasol;
/// Mr. Game & Watch Motion State IDs
typedef enum ftGameWatch_MotionState {
    ftGw_MS_Attack11 = ftCo_MS_Count,
    ftGw_MS_Attack100Start,
    ftGw_MS_Attack100Loop,
    ftGw_MS_Attack100End,
    ftGw_MS_AttackLw3,
    ftGw_MS_AttackS4,
    ftGw_MS_AttackAirN,
    ftGw_MS_AttackAirB,
    ftGw_MS_AttackAirHi,
    ftGw_MS_LandingAirN,
    ftGw_MS_LandingAirB,
    ftGw_MS_LandingAirHi,
    ftGw_MS_SpecialN,
    ftGw_MS_SpecialAirN,
    ftGw_MS_SpecialS1,
    ftGw_MS_SpecialS2,
    ftGw_MS_SpecialS3,
    ftGw_MS_SpecialS4,
    ftGw_MS_SpecialS5,
    ftGw_MS_SpecialS6,
    ftGw_MS_SpecialS7,
    ftGw_MS_SpecialS8,
    ftGw_MS_SpecialS9,
    ftGw_MS_SpecialAirS1,
    ftGw_MS_SpecialAirS2,
    ftGw_MS_SpecialAirS3,
    ftGw_MS_SpecialAirS4,
    ftGw_MS_SpecialAirS5,
    ftGw_MS_SpecialAirS6,
    ftGw_MS_SpecialAirS7,
    ftGw_MS_SpecialAirS8,
    ftGw_MS_SpecialAirS9,
    ftGw_MS_SpecialHi,
    ftGw_MS_SpecialAirHi,
    ftGw_MS_SpecialLw,
    ftGw_MS_SpecialLwCatch,
    ftGw_MS_SpecialLwShoot,
    ftGw_MS_SpecialAirLw,
    ftGw_MS_SpecialAirLwCatch,
    ftGw_MS_SpecialAirLwShoot,
    ftGw_MS_Count,
    ftGw_MS_SelfCount = ftGw_MS_Count - ftCo_MS_Count,
} ftGameWatch_MotionState;
typedef enum ftGw_Submotion {
    ftGw_SM_SpecialN = ftCo_SM_Count,
    ftGw_SM_SpecialAirN,
    ftGw_SM_SpecialS1,
    ftGw_SM_SpecialS2,
    ftGw_SM_SpecialS3,
    ftGw_SM_SpecialS4,
    ftGw_SM_SpecialS5,
    ftGw_SM_SpecialS6,
    ftGw_SM_SpecialS7,
    ftGw_SM_SpecialS8,
    ftGw_SM_SpecialS9,
    ftGw_SM_SpecialAirS1,
    ftGw_SM_SpecialAirS2,
    ftGw_SM_SpecialAirS3,
    ftGw_SM_SpecialAirS4,
    ftGw_SM_SpecialAirS5,
    ftGw_SM_SpecialAirS6,
    ftGw_SM_SpecialAirS7,
    ftGw_SM_SpecialAirS8,
    ftGw_SM_SpecialAirS9,
    ftGw_SM_SpecialHi,
    ftGw_SM_SpecialAirHi,
    ftGw_SM_SpecialLw,
    ftGw_SM_SpecialLwCatch,
    ftGw_SM_SpecialLwShoot,
    ftGw_SM_SpecialAirLw,
    ftGw_SM_SpecialAirLwCatch,
    ftGw_SM_SpecialAirLwShoot,
    ftGw_SM_Count,
    ftGw_SM_SelfCount = ftGw_SM_Count - ftCo_SM_Count,
} ftGw_Submotion;
typedef enum ftGameWatch_PanicLevel {
    ftGw_Panic_Empty,
    ftGw_Panic_Low,
    ftGw_Panic_Mid,
    ftGw_Panic_Full,
} ftGameWatch_PanicLevel;
struct ftGameWatch_FighterVars {
    /* 0x222C */ s32 x222C_judgeVar1;
    /* 0x2230 */ s32 x2230_judgeVar2;
    /* 0x2234 */ u32 x2234;
    /* 0x2238 */ s32 x2238_panicCharge;
    /* 0x223C */ s32 x223C_panicDamage;
    /* 0x2240 */ s32 x2240_chefVar1;
    /* 0x2244 */ s32 x2244_chefVar2;
    /* 0x2248 */ HSD_GObj* x2248_manholeGObj;
    /* 0x224C */ HSD_GObj* x224C_greenhouseGObj;
    /* 0x2250 */ HSD_GObj* x2250_manholeGObj2;
    /* 0x2254 */ HSD_GObj* x2254_fireGObj;
    /* 0x2258 */ HSD_GObj* x2258_parachuteGObj;
    /* 0x225C */ HSD_GObj* x225C_turtleGObj;
    /* 0x2260 */ HSD_GObj* x2260_sparkyGObj;
    /* 0x2264 */ HSD_GObj* x2264_judgementGObj;
    /* 0x2268 */ HSD_GObj* x2268_panicGObj;
    /* 0x226C */ HSD_GObj* x226C_rescueGObj;
};
typedef struct ftGameWatchChef {
    int sausageCount[6];
} ftGameWatchChef;
typedef struct ftGameWatchJudge {
    s32 rollVar[9];
} ftGameWatchJudge;
typedef struct _ftGameWatchAttributes {
    /// MISC. ATTRIBUTES
    /// Mr. Game & Watch's Z-Axis stretch; 0.01 by default
    float x0_GAMEWATCH_WIDTH;
    /// Array of four GXColor values, one for each Mr. Game & Watch costume
    /// color
    GXColor x4_GAMEWATCH_COLOR[4];
    /// Outline color of Mr. Game & Watch's model
    GXColor x14_GAMEWATCH_OUTLINE;
    /// NEUTRAL SPECIAL - CHEF
    /// Allow rapid-firing sausages from this frame onward
    float x18_GAMEWATCH_CHEF_LOOPFRAME;
    /// Maximum amount of sausages created per Chef use
    float x1C_GAMEWATCH_CHEF_MAX;
    /// SIDE SPECIAL - JUDGEMENT
    /// Horizontal momentum preservation value
    float x20_GAMEWATCH_JUDGE_MOMENTUM_PRESERVE;
    /// Multiplies momentum preservation value
    float x24_GAMEWATCH_JUDGE_MOMENTUM_MUL;
    float x28_GAMEWATCH_JUDGE_VEL_Y;
    float x2C_GAMEWATCH_JUDGE_FRICTION1;
    float x30_GAMEWATCH_JUDGE_FRICTION2;
    /// Array of BOOLs that toggle respective Judgement numbers ON/OFF. If a
    /// number is OFF, it is excluded from RNG rolls. Game panics if less than
    /// 2 numbers are ON.
    s32 x34_GAMEWATCH_JUDGE_ROLL[9];
    /// UP SPECIAL - FIRE RESCUE
    /// Minimum control stick range required for directional influence? Also
    /// affects how far Mr. Game & Watch flings horizontally (?)
    float x58_GAMEWATCH_RESCUE_STICK_RANGE;
    /// Radians -- controls how far Mr. Game & Watch can angle Fire Rescue?
    float x5C_GAMEWATCH_RESCUE_ANGLE_UNK;
    /// Landing lag / Freefall toggle
    float x60_GAMEWATCH_RESCUE_LANDING;
    /// DOWN SPECIAL - OIL PANIC
    /// Horizontal momentum preservation value
    float x64_GAMEWATCH_PANIC_MOMENTUM_PRESERVE;
    /// Multiplies momentum preservation value
    float x68_GAMEWATCH_PANIC_MOMENTUM_MUL;
    /// Falling acceleration
    float x6C_GAMEWATCH_PANIC_FALL_ACCEL;
    /// Terminal Y velocity?
    float x70_GAMEWATCH_PANIC_VEL_Y_MAX;
    /// Extra damage added to Oil Panic after formula
    float x74_GAMEWATCH_PANIC_DAMAGE_ADD;
    /// Damage multiplier
    float x78_GAMEWATCH_PANIC_DAMAGE_MUL;
    float x7C_GAMEWATCH_PANIC_TURN_FRAMES;
    /// Oil Panic absorption attributes
    AbsorbDesc x80_GAMEWATCH_PANIC_ABSORPTION;
} ftGameWatchAttributes;
typedef union ftGameWatch_MotionVars {
    struct ftGameWatch_Attack11Vars {
        /// 0x2340 - Set to 0 but never used?
        bool unk;
    } Attack11;
    struct ftGameWatch_SpecialNVars {
        /// 0x2340
        bool isChefLoopDisable;
        /// 0x2344 - Maximum number of sausages able to be spawned per Chef use
        s32 maxSausage;
    } SpecialN;
    struct ftGameWatch_SpecialLwVars {
        /// 0x2340 - bool to check if Mr. Game & Watch is no longer holding B
        bool isRelease;
        /// 0x2344 - Number of frames it takes Mr. Game & Watch to turn around
        /// on command
        s32 turnFrames;
    } SpecialLw;
} ftGameWatch_MotionVars;
#define MELEE_FT_CHARA_FTKIRBY_TYPES_H
struct ftKb_FighterVars {
    /* fp+222C */ struct ftKb_Hat {
        /*  +0   fp+222C */ Item_GObj* x0;
        /*  +4   fp+2230 */ s32 x4;
        /*  +8:0 fp+2234:0 */ u8 x8_b0 : 1;
        /*  +9   fp+2235 */ u8 x9[3];
        /*  +C   fp+2238 */ FighterKind kind;
        /* +10   fp+223C */ HSD_JObj* jobj;
        /* +14   fp+2240 */ DObjList x14;
        /* +1C   fp+2248 */ DObjList x1C;
        /* +24   fp+2250 */ FtPartsVis x24;
    } hat;
    /* fp+2270   */ CostumeTObjList x44;
    /* fp+228C   */ s32 x60;
    /* fp+2290   */ bool x64;
    /* fp+2294   */ s32 x68;
    /* fp+2298   */ s32 x6C;
    /* fp+229C   */ u8 _70[0x74 - 0x70];
    /* fp+22A0   */ Item_GObj* x74;
    /* fp+22A4   */ Item_GObj* x78;
    /* fp+22A8   */ Item_GObj* ns_flash_gobj;
    /* fp+22AC   */ s32 x80;
    /* fp+22B0   */ float x84; ///< Bowser fire breath scale 1
    /* fp+22B4   */ float x88; ///< Bowser fire breath scale 2
    /* fp+22B8   */ Vec3 x8C;
    /* fp+22C4   */ Item_GObj* x98; ///< Mewtwo shadow ball item
    /* fp+22C8   */ int x9C;
    /* fp+22CC   */ HSD_GObj* xA0; ///< Mewtwo effect gobj
    /* fp+22D0   */ M2C_UNK xA4;
    /* fp+22D4   */ int xA8;
    /* fp+22D8   */ M2C_UNK xAC;
    /* fp+22DC   */ HSD_GObj* xB0; ///< Fox/Falco blaster item
    /* fp+22E0   */ int xB4;
    /* fp+22E4   */ Item_GObj* xB8; ///< Sheik needle item
    /* fp+22E8   */ int xBC;
    /* fp+22EC   */ Item_GObj* xC0;
    /* fp+22F0   */ bool xC4;
    /* fp+22F4   */ float xC8;
    /* fp+22F8   */ bool xCC;
    /* fp+22FC   */ Item_GObj* xD0; ///< Peach toad item
    /* fp+2300   */ int xD4;
    /* fp+2304   */ int xD8;
    /* fp+2308   */ Item_GObj* xDC; ///< Game & Watch pan item
    /* fp+230C   */ int xE0;
    /* fp+2310   */ short xE4;
    /* fp+2314   */ float xE8;
    /* fp+2318   */ float xEC;
    /* fp+231C   */ float xF0;
    /* fp+2320:0 */ u8 xF4_b0 : 1;
};
;
struct ftKb_SpecialNMs_DatAttrs {
    /* da+35C */ u32 charge_iterations;
    /* da+360 */ u32 base_damage;
    /* da+364 */ u32 additional_damage_per_iteration;
    /* da+368 */ float air_horizontal_momentum_preservation;
    /* da+36C */ float air_horizontal_deceleration_rate;
};
;
/// @todo Every hat is its own struct.
struct ftKb_DatAttrs {
    // Midair Jumps
    /*   +0 */ u32 jumpaerial_turn_duration;
    /*   +4 */ float jumpaerial_horizontal_momentum_backwards;
    /*   +8 */ float jumpaerial_horizontal_momentum_forwards;
    /*   +C */ float jumpaerial_momentum_from_turning;
    /*  +10 */ float jumpaerial_horizontal_momentum;
    /*  +14 */ float jumpaerial_jump1_vertical_momentum;
    /*  +18 */ float jumpaerial_jump2_vertical_momentum;
    /*  +1C */ float jumpaerial_jump3_vertical_momentum;
    /*  +20 */ float jumpaerial_jump4_vertical_momentum;
    /*  +24 */ float jumpaerial_jump5_vertical_momentum;
    /*  +28 */ u32 jumpaerial_number_of_jumps;
    /*  +2C */ u32 jumpaerial_first_jump_action_state;
    /*  +30 */ u32 jumpaerial_final_jump_action_state;
    /*  +34 */ s16 jumpaerial_unk;
    // Neutral B (no hat)
    /*  +38 */ float specialn_x_offset_inhaled;
    /*  +3C */ float specialn_y_offset_inhaled;
    /*  +40 */ float specialn_z_offset_inhaled;
    /*  +44 */ float specialn_gravity_of_inhaled;
    /*  +48 */ float specialn_velocity_outer_grab_box;
    /*  +4C */ float specialn_velocity_inner_grab_box;
    /*  +50 */ float specialn_inhale_velocity;
    /*  +54 */ float specialn_inhale_resistance;
    /*  +58 */ float specialn_duration_divisor;
    /*  +5C */ float specialn_base_duration;
    /*  +60 */ float specialn_star_deceleration_rate;
    /*  +64 */ float specialn_star_duration_divisor;
    /*  +68 */ float specialn_star_base_duration;
    /*  +6C */ float specialn_frames_in_swallow_star;
    /*  +70 */ float specialn_spit_spin;
    /*  +74 */ float specialn_x_axis_range_walk;
    /*  +78 */ float specialn_y_axis_range_jump;
    /*  +7C */ float specialn_walk_speed;
    /*  +80 */ float specialn_jump_height;
    /*  +84 */ float specialn_stop_momentum;
    /*  +88 */ float specialn_ground_spit_initial_horizontal_velocity;
    /*  +8C */ float specialn_spit_deceleration_rate;
    /*  +90 */ float specialn_spit_out_release_angle; // In radians
    /*  +94 */ float specialn_swallow_star_vertical_velocity;
    /*  +98 */ float specialn_swallow_star_gravity;
    /*  +9C */ float specialn_opponent_horizontal_velocity;
    /*  +A0 */ float specialn_opponent_vertical_velocity;
    /*  +A4 */ float specialn_ability_loss_star_x;
    /*  +A8 */ float specialn_ability_loss_star_y;
    /*  +AC */ float specialn_ability_loss_star_z;
    /*  +B0 */ float specialn_odds_lose_ability_on_hit;
    /*  +B4 */ float specialn_unk1;
    /*  +B8 */ float specialn_swallow_star_y_release;
    /*  +BC */ float specialn_unk2;
    /*  +C0 */ float specialn_unk3;
    /*  +C4 */ float specialn_unk4;
    /*  +C8 */ float specialn_unk5;
    // Side B
    /*  +CC */ float specials_aerial_vertical_momentum;
    /*  +D0 */ float specials_landing_lag;
    // Up B
    /*  +D4 */ float specialhi_vertical_momentum;
    /*  +D8 */ float specialhi_horizontal_momentum;
    /*  +DC */ float specialhi_projectile_spawn_x;
    /*  +E0 */ float specialhi_projectile_spawn_y;
    /*  +E4 */ float specialhi_reverse_upb_stick_range;
    /*  +E8 */ float specialhi_unk;
    // Down B
    /*  +EC */ u32 speciallw_max_time_in_stone;
    /*  +F0 */ u32 speciallw_min_time_in_stone;
    /*  +F4 */ float speciallw_min_slant_angle_slide;
    /*  +F8 */ float speciallw_max_slant_angle_slide;
    /*  +FC */ float speciallw_slide_acceleration;
    /* +100 */ float speciallw_slide_max_speed;
    /* +104 */ float speciallw_gravity;
    /* +108 */ s32 speciallw_hp;
    /* +10C */ u32 speciallw_resistance;
    /* +110 */ u32 speciallw_unk;
    /* +114 */ float speciallw_freefall_toggle;
    // Bowser
    // In frames, checked in this many frame intervals
    /* +118 */ u32 specialn_kp_b_button_check_frequency;
    /* +11C */ float specialn_kp_fuel_recharge_rate;
    /* +120 */ float specialn_kp_flame_size_recharge_rate;
    /* +124 */ float specialn_kp_max_fuel;
    /* +128 */ float specialn_kp_spew_flame_velocity;
    /* +12C */ float specialn_kp_flame_scale;
    /* +130 */ float specialn_kp_lowest_charge_graphic_size;
    /* +134 */ s32 specialn_kp_screen_shake_frequency;
    /* +138 */ float specialn_kp_breath_x_offset;
    // Values repeat below here
    /* +13C */ float specialn_kp_breath_y_offset;
    // Giga Bowser
    // In frames, checked in this many frame intervals
    /* +140 */ u32 specialn_gk_b_button_check_frequency;
    /* +144 */ float specialn_gk_fuel_recharge_rate;
    /* +148 */ float specialn_gk_flame_size_recharge_rate;
    /* +14C */ float specialn_gk_max_fuel;
    /* +150 */ float specialn_gk_spew_flame_velocity;
    /* +154 */ float specialn_gk_flame_scale;
    /* +158 */ float specialn_gk_lowest_charge_graphic_size;
    /* +15C */ u32 specialn_gk_screen_shake_frequency;
    /* +160 */ float specialn_gk_breath_x_offset;
    /* +164 */ float specialn_gk_breath_y_offset;
    // Samus
    /* +168 */ float specialn_ss_charge_time;
    /* +16C */ float specialn_ss_aerial_shot_recoil;
    /* +170 */ s32 specialn_ss_frames_per_charge_level;
    /* +174 */ float specialn_ss_freefall_toggle;
    // Peach
    /* +178 */ float specialn_pe_friction;
    /* +17C */ float specialn_pe_air_horizontal_momentum_preservation;
    /* +180 */ float specialn_pe_air_initial_vertical_momentum;
    /* +184 */ float specialn_pe_fall_acceleration;
    /* +188 */ float specialn_pe_unk2;
    /* +18C */ float specialn_pe_unk3;
    // Donkey Kong
    /* +190 */ int specialn_dk_swings_to_full_charge;
    /* +194 */ u32 specialn_dk_damage_increase_per_swing;
    /* +198 */ float specialn_dk_grounded_punch_horizontal_velocity;
    /* +19C */ float specialn_dk_freefall_toggle;
    // Ness
    /* +1A0 */ int specialn_ns_frames_to_loop_charge_ground;
    /* +1A4 */ int specialn_ns_frames_to_loop_charge_air;
    /* +1A8 */ int specialn_ns_falling_acceleration_delay;
    /* +1AC */ int specialn_ns_charge_release_delay;
    /* +1B0 */ float specialn_ns_unk1;
    /* +1B4 */ float specialn_ns_gravity;
    /* +1B8 */ float specialn_ns_unk2;
    /* +1BC */ float specialn_ns_freefall_toggle;
    // Pikachu
    /* +1C0 */ Vec2 specialn_pk_spawn_offset;
    /* +1C8 */ Vec2 specialairn_pk_spawn_offset;
    /* +1D0 */ float specialairn_pk_landing_lag;
    /* +1D4 */ ItemKind specialn_pk_itkind;
    /* +1D8 */ ItemKind specialairn_pk_itkind;
    // Pichu
    /* +1DC */ Vec2 specialn_pc_spawn_offset;
    /* +1E4 */ Vec2 specialairn_pc_spawn_offset;
    /* +1EC */ float specialairn_pc_landing_lag;
    /* +1F0 */ ItemKind specialn_pc_itkind;
    /* +1F4 */ ItemKind specialairn_pc_itkind;
    // Captain Falcon
    /* +1F8 */ float specialn_ca_x_axis_range;
    /* +1FC */ float specialn_ca_y_axis_range;
    /* +200 */ float specialn_ca_angle_difference;
    /* +204 */ float specialn_ca_forward_momentum;
    /* +208 */ float specialn_ca_additional_vertical_momentum;
    // Ganondorf
    /* +20C */ float specialn_gn_x_axis_range;
    /* +210 */ float specialn_gn_y_axis_range;
    /* +214 */ float specialn_gn_angle_difference;
    /* +218 */ float specialn_gn_forward_momentum;
    /* +21C */ float specialn_gn_additional_vertical_momentum;
    // Fox
    /* +220 */ float specialn_fx_unk1;
    /* +224 */ float specialn_fx_unk2;
    /* +228 */ float specialn_fx_unk3;
    /* +22C */ float specialn_fx_unk4;
    /* +230 */ float specialn_fx_launch_angle;
    /* +234 */ float specialn_fx_launch_speed;
    /* +238 */ float specialn_fx_freefall_toggle;
    /* +23C */ u32 specialn_fx_blaster_projectile_id;
    /* +240 */ u32 specialn_fx_blaster_item_id;
    // Falco
    /* +244 */ float specialn_fc_unk1;
    /* +248 */ float specialn_fc_unk2;
    /* +24C */ float specialn_fc_unk3;
    /* +250 */ float specialn_fc_unk4;
    /* +254 */ float specialn_fc_launch_angle;
    /* +258 */ float specialn_fc_launch_speed;
    /* +25C */ float specialn_fc_freefall_toggle;
    /* +260 */ u32 specialn_fc_blaster_projectile_id;
    /* +264 */ u32 specialn_fc_blaster_item_id;
    // Link
    /// In frames
    /* +268 */ float specialn_lk_max_charge;
    /* +26C */ float specialn_lk_arrow_charge_speed;
    /* +270 */ float specialn_lk_freefall_toggle;
    /* +274 */ u32 specialn_lk_bow_item_loader_id;
    /* +278 */ u32 specialn_lk_bow_item_id;
    // Young Link
    // In frames
    /* +27C */ float specialn_cl_max_charge;
    /* +280 */ float specialn_cl_arrow_charge_speed;
    /* +284 */ float specialn_cl_freefall_toggle;
    /* +288 */ u32 specialn_cl_bow_item_loader_id;
    /* +28C */ u32 specialn_cl_bow_item_id;
    // Sheik
    /* +290 */ float specialn_sk_graphic_x_offset_ground;
    /* +294 */ float specialn_sk_graphic_y_offset_ground;
    /* +298 */ float specialn_sk_graphic_x_offset_air;
    /* +29C */ float specialn_sk_graphic_y_offset_air;
    /* +2A0 */ float specialn_sk_freefall_toggle;
    // Zelda
    /* +2A4 */ float specialn_zd_unk1;
    /* +2A8 */ u32 specialn_zd_frames_before_gravity;
    /* +2AC */ float specialn_zd_horizontal_momentum_preservation;
    /* +2B0 */ float specialn_zd_fall_acceleration;
    // Jigglypuff
    /* +2B4 */ u32 specialn_pr_duration;
    /* +2B8 */ u32 specialn_pr_unk;
    /* +2BC */ float specialn_pr_air_height_offset_at_start;
    /* +2C0 */ float specialn_pr_bounciness;
    /* +2C4 */ float specialn_pr_unk1;
    /* +2C8 */ float specialn_pr_gravity_during_roll;
    /* +2CC */ float specialn_pr_base_speed;
    /* +2D0 */ float specialn_pr_max_speed;
    /* +2D4 */ float specialn_pr_unk2;
    /* +2D8 */ float specialn_pr_air_x_axis_momentum;
    /* +2DC */ float specialn_pr_air_y_axis_momentum;
    /* +2E0 */ float specialn_pr_air_initial_momentum;
    /* +2E4 */ float specialn_pr_max_momentum;
    /* +2E8 */ float specialn_pr_spinning_speed;
    /* +2EC */ float specialn_pr_spinning_speed_turn;
    /* +2F0 */ u32 specialn_pr_delay_per_smoke;
    /* +2F4 */ float specialn_pr_unk3;
    /* +2F8 */ float specialn_pr_bounce1;
    /* +2FC */ float specialn_pr_bounce2;
    /* +300 */ float specialn_pr_base_damage;
    /* +304 */ float specialn_pr_damage_multiplier;
    /* +308 */ float specialn_pr_horizontal_bounce_momentum_on_hit;
    /* +30C */ float specialn_pr_vertical_bounce_momentum_on_hit;
    /* +310 */ float specialn_pr_forward_momentum_from_stick;
    /* +314 */ float specialn_pr_unk4;
    /* +318 */ float specialn_pr_unk5;
    /* +31C */ u32 specialn_pr_unk6;
    /* +320 */ float specialn_pr_charge_rate1;
    /* +324 */ float specialn_pr_charge_time;
    /* +328 */ float specialn_pr_charge_rate2;
    /* +32C */ float specialn_pr_charge_spin_animation;
    /* +330 */ float specialn_pr_unk7;
    /* +334 */ float specialn_pr_unk8;
    /* +338 */ float specialn_pr_some_speed_var;
    /* +33C */ float specialn_pr_spin_anim_speed_after_collision;
    /* +340 */ float specialn_pr_air_speed;
    /* +344 */ float specialn_pr_turn_rate_related;
    /* +348 */ float specialn_pr_unk9;
    /* +34C */ float specialn_pr_unk10;
    /* +350 */ float specialn_pr_unk11;
    /* +354 */ float specialn_pr_unk12;
    /* +358 */ float specialn_pr_freefall_toggle;
    struct ftKb_SpecialNMs_DatAttrs ms, fe;
    // Mewtwo
    /* +384 */ float specialn_mt_charge_time;
    /* +388 */ float specialn_mt_ground_horizontal_momentum;
    /* +38C */ float specialn_mt_air_horizontal_momentum;
    /* +390 */ u32 specialn_mt_loops_to_full_charge;
    /* +394 */ s32 specialn_mt_frames_to_transition;
    /* +398 */ float specialn_mt_freefall_toggle;
    // Ice Climbers
    /* +39C */ float specialn_pp_air_vertical_momentum;
    /* +3A0 */ float specialn_pp_landing_lag;
    /* +3A4 */ float specialn_pp_x_spawn;
    /* +3A8 */ float specialn_pp_y_spawn;
    // Yoshi
    /* +3AC */ float specialn_ys_initial_horizontal_momentum;
    /* +3B0 */ float specialn_ys_initial_vertical_momentum;
    /* +3B4 */ float specialn_ys_damage_multiplier;
    /* +3B8 */ float specialn_ys_unk;
    /* +3BC */ float specialn_ys_growth_time;
    /* +3C0 */ float specialn_ys_base_duration;
    /* +3C4 */ float specialn_ys_egg_breakout_resistance;
    /* +3C8 */ float specialn_ys_frames_reduced_per_input;
    /* +3CC */ float specialn_ys_unk1;
    /* +3D0 */ float specialn_ys_unk2;
    /* +3D4 */ u32 specialn_ys_iframes_on_release;
    /* +3D8 */ float specialn_ys_horizontal_velocity_on_breakout;
    /* +3DC */ float specialn_ys_vertical_velocity_on_breakout;
    /* +3E0 */ float specialn_ys_unk3;
    // Mr. Game & Watch
    /* +3E4 */ float specialn_gw_frame_on_repeat;
    /* +3E8 */ float specialn_gw_max_sausages_per_use;
    /* +3EC */ AbsorbDesc specialn_pe_absorbdesc;
    /* +400 */ ReflectDesc specialn_zd_reflectdesc;
};
;
union ftKb_MotionVars {
    struct ftKb_SpecialNPe_Vars {
        /* fp+2340 */ int facing_dir;
    } specialn_pe;
    struct ftKb_SpecialHiVars {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ union {
            int i;
            float f;
        } x8; ///< Used as both int and float
        /* fp+234C */ int xC;
        /* fp+2350 */ union {
            int i;
            float f;
        } x10; ///< Used as both int and float
        /* fp+2354 */ int x14;
        /* fp+2358 */ Vec3 x18;
        char pad1[0x60];
        /* fp+23C4 */ float xC4;
    } specialhi;
    struct ftKb_SpecialNKp_Vars {
        /* fp+2340 */ int x0[4];
        /* fp+2350 */ int x10;
        /* fp+2354 */ int x14;
        /* fp+2358 */ int x18;
    } specialn_kp;
    struct ftKb_SpecialLWVars {
        /* fp+2340 */ s16 x0;
        /* fp+2342 */ s16 x2;
        /* fp+2344 */ s16 x4;
        /* fp+2346 */ s16 x6;
        /* fp+2348 */ int x8;
        /* fp+234C */ int xC;
        /* fp+2350 */ int x10;
        /* fp+2354 */ int x14;
        /* fp+2358 */ Vec3 x18;
        /* fp+2364 */ Vec3 x24[4];
        /* fp+2394 */ Vec3 x54[4];
        /* fp+23C4 */ float x84;
        /*fp+23C8 */ float x88[9];
    } speciallw;
};
#define MELEE_FT_CHARA_FTKOOPA_TYPES_H
struct ftKoopa_FighterVars {
    /* 0x222C */ float x222C;
    /* 0x2230 */ float x2230;
};
union ftKoopa_MotionVars {
    /// @todo Proper state name.
    struct ftKoopa_State1Vars {
        M2C_UNK x0;
        bool x4;
        M2C_UNK x8;
        bool xC;
    } unk1;
    /// @todo Possibly #ftKoopa_State1Vars.
    struct ftKoopa_SpecialSVars {
        /* fp+2340 */ bool b_held;
        /* fp+2344 */ bool x4;
        /* fp+2348 */ int facing_dir;
        /* fp+2348 */ bool xC;
        /* fp+234C */ s32 x10;
        /* fp+2350 */ s32 x14;
        /* fp+2354 */ s32 x18;
    } specials;
    struct ftKoopa_SpecialNVars {
        /* fp+2340 */ int x0;
        /* fp+2344 */ u32 x4;
        /* fp+2348 */ int facing_dir;
        /* fp+2348 */ s32 flame_timer;
        /* fp+234C */ s32 x10;
        /* fp+2350 */ s32 x14;
        /* fp+2354 */ s32 x18;
    } specialn;
};
typedef struct _ftKoopaAttributes {
    float x0;
    s32 flame_limit;
    float x8;
    float xC;
    float x10;
    float x14;
    float x18;
    float x1C;
    s32 x20;
    float x24;
    float x28;
    u32 x2C;
    float x30;
    float x34;
    float x38;
    float x3C;
    float x40;
    float x44;
    float x48;
    float x4C;
    u32 unk50;
    float x54;
    float x58;
    float x5C;
    float x60;
    float x64;
    float x68;
    float x6C;
    float x70;
    float x74;
    float x78;
    float x7C;
    float x80;
    float x84;
    float x88;
    float x8C;
    float x90;
    float x94;
    float x98;
    float x9C;
} ftKoopaAttributes;
typedef struct _ftKoopaVars {
    float x0;
    float x4;
} ftKoopaVars;
#define MELEE_FT_CHARA_FTLINK_TYPES_H
#define MELEE_FT_CHARA_FTLINK_FORWARD_H
typedef struct ftLk_DatAttrs ftLk_DatAttrs;
typedef struct ftLk_FighterVars ftLk_FighterVars;
typedef union ftLk_MotionVars ftLk_MotionVars;
static MotionFlags const ftLk_MF_Base0 =
    Ft_MF_SkipModel | Ft_MF_SkipThrowException;
static MotionFlags const ftLk_MF_Base1 = Ft_MF_SkipItemVis | Ft_MF_FreezeState;
static MotionFlags const ftLk_MF_Base2 = ftLk_MF_Base1 | Ft_MF_KeepFastFall;
static MotionFlags const ftLk_MF_Base3 = ftLk_MF_Base0 | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftLk_MF_AttackS42 = ftLk_MF_Base2 | Ft_MF_SkipHit;
static MotionFlags const ftLk_MF_SpecialN = ftLk_MF_Base2 | ftLk_MF_Base3;
static MotionFlags const ftLk_MF_SpecialNFullyCharged =
    ftLk_MF_SpecialN | Ft_MF_Unk19;
static MotionFlags const ftLk_MF_SpecialAirNCharge =
    ftLk_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftLk_MF_SpecialAirNFullyCharged =
    ftLk_MF_SpecialNFullyCharged | Ft_MF_SkipParasol;
static MotionFlags const ftLk_MF_SpecialAirNFire =
    ftLk_MF_SpecialAirNCharge | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftLk_MF_SpecialSThrow =
    ftLk_MF_Base3 | ftLk_MF_Base1 | Ft_MF_KeepGfx;
static MotionFlags const ftLk_MF_SpecialSCatch =
    ftLk_MF_SpecialSThrow | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftLk_MF_SpecialAirSThrow =
    ftLk_MF_SpecialSThrow | ftLk_MF_Base3 | Ft_MF_SkipParasol;
static MotionFlags const ftLk_MF_SpecialAirSThrowEmpty =
    ftLk_MF_SpecialSCatch | ftLk_MF_Base1 | Ft_MF_SkipParasol;
static MotionFlags const ftLk_MF_SpecialHi =
    Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_SkipModel | Ft_MF_KeepSfx |
    Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys | Ft_MF_FreezeState;
static MotionFlags const ftLk_MF_SpecialLw =
    Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipModel | Ft_MF_SkipItemVis |
    Ft_MF_UnkUpdatePhys | Ft_MF_FreezeState;
static MotionFlags const ftLk_MF_SpecialAirLw =
    ftLk_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftLk_MF_ZairCatch =
    Ft_MF_SkipModelPartVis | Ft_MF_SkipMetalB;
typedef enum ftLink_MotionState {
    ftLk_MS_AttackS42 = ftCo_MS_Count,
    ftLk_MS_AppealSR,
    ftLk_MS_AppealSL,
    ftLk_MS_SpecialNStart,
    ftLk_MS_SpecialNLoop,
    ftLk_MS_SpecialNEnd,
    ftLk_MS_SpecialAirNStart,
    ftLk_MS_SpecialAirNLoop,
    ftLk_MS_SpecialAirNEnd,
    ftLk_MS_SpecialS1,
    ftLk_MS_SpecialS2,
    ftLk_MS_SpecialS1Empty,
    ftLk_MS_SpecialAirS1,
    ftLk_MS_SpecialAirS2,
    ftLk_MS_SpecialAirS1Empty,
    ftLk_MS_SpecialHi,
    ftLk_MS_SpecialAirHi,
    ftLk_MS_SpecialLw,
    ftLk_MS_SpecialAirLw,
    ftLk_MS_AirCatch,
    ftLk_MS_AirCatchHit,
    ftLk_MS_Count,
    ftLk_MS_SelfCount = ftLk_MS_Count - ftCo_MS_Count,
} ftLink_MotionState;
typedef enum ftLk_SpecialNIndex {
    ftLk_SpecialNIndex_Start,
    ftLk_SpecialNIndex_Loop,
    ftLk_SpecialNIndex_End,
    ftLk_SpecialNIndex_AirStart,
    ftLk_SpecialNIndex_AirLoop,
    ftLk_SpecialNIndex_AirEnd,
    ftLk_SpecialNIndex_None,
} ftLk_SpecialNIndex;
typedef enum ftLk_Submotion {
    ftLk_SM_AttackS42 = ftCo_SM_Count,
    ftLk_SM_SpecialNStart,
    ftLk_SM_SpecialNLoop,
    ftLk_SM_SpecialNEnd,
    ftLk_SM_SpecialAirNStart,
    ftLk_SM_SpecialAirNLoop,
    ftLk_SM_SpecialAirNEnd,
    ftLk_SM_SpecialS1,
    ftLk_SM_SpecialS2,
    ftLk_SM_SpecialS1Empty,
    ftLk_SM_SpecialAirS1,
    ftLk_SM_SpecialAirS2,
    ftLk_SM_SpecialAirS1Empty,
    ftLk_SM_SpecialHi,
    ftLk_SM_SpecialAirHi,
    ftLk_SM_SpecialLw,
    ftLk_SM_SpecialAirLw,
    ftLk_SM_AirCatch,
    ftLk_SM_AirCatchHit,
    ftLk_SM_Count,
    ftLk_SM_SelfCount = ftLk_SM_Count - ftCo_SM_Count,
} ftLk_Submotion;
#define MELEE_FT_CHARA_FTMARS_TYPES_H
struct ftMars_FighterVars {
    /* 0x222C */ u32 x222C;
    u8 _[0xF8 - 4];
};
struct SwordAttrs {
    /* +0x0 */ f32 x0;
    /* +0x4 */ f32 x4;
    /* +0x8 */ u8 x8;
    /* +0x9 */ u8 x9;
    /* +0xA */ u8 xA;
    /* +0xB */ u8 xB;
    /* +0xC */ u8 xC;
    /* +0xD */ u8 xD;
    /* +0xE */ u8 xE;
    /* +0xF */ u8 xF;
    /* +0x10 */ u8 x10;
    u8 pad_x11[3];
    int x14;
    float x18;
    float x1C;
};
typedef struct _MarsAttributes {
    int x0;
    int x4;
    int x8;
    float specialn_friction;
    float specialn_start_friction;
    float x14;
    float x18;
    float x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    float x30;
    float x34;
    float x38;
    float x3C;
    float x40;
    float x44;
    float x48;
    float x4C;
    float x50;
    float x54;
    float x58;
    float x5C;
    float x60;
    AbsorbDesc x64;
    struct SwordAttrs x78;
} MarsAttributes;
union ftMars_MotionVars {
    struct ftMars_Unk0MotionVars {
        bool x0;
    } unk0;
    struct ftMars_SpecialNVars {
        int cur_frame;
    } specialn;
    struct ftMars_SpecialSVars {
        int x0;
    } specials;
    struct ftMars_SpecialLwVars {
        int x0;
    } speciallw;
};
struct ftLk_DatAttrs {
    /* +0 */ float x0;
    /* +4 */ float specialn_anim_rate;
    /* +8 */ float x8;
    /* +C */ int xC;
    /* +10 */ int x10;
    /* +14 */ float x14;
    /* +18 */ float x18;
    /* +1C */ float x1C;
    /* +20 */ float x20;
    /* +24 */ float x24;
    /* +28 */ float specialhi_pos_y_offset;
    /* +2C */ int x2C;
    /* +30 */ float x30;
    /* +34 */ float x34;
    /* +38 */ float specialairhi_drift_stick_mul;
    /* +3C */ float specialairhi_drift_max_mul;
    /* +40 */ float x40;
    /* +44 */ float specialhi_grav_mul;
    /* +48 */ int x48;
    /* +4C */ float attackairlw_hit_vel_y;
    /* +50 */ float attackairlw_hit_anim_frame_start;
    /* +54 */ float attackairlw_hit_anim_frame_end;
    /* +58 */ u32 attackairlw_anim_flags[3];
    /* +64 */ struct SwordAttrs x64;
    /* +84 */ s32 x84;
    /* +88 */ s32 x88;
    /* +8C */ s32 x8C;
    /* +90 */ s32 x90;
    /* +94 */ M2C_UNK x94;
    /* +98 */ s32 x98;
    /* +9C */ M2C_UNK x9C;
    /* +A0 */ M2C_UNK xA0;
    /* +A4 */ int xA4;
    /* +A8 */ s32 xA8;
    /* +AC */ int xAC;
    /* +B0 */ int xB0;
    /* +B4 */ float xB4;
    /* +B8 */ int xB8;
    /* +BC */ int xBC;
    /* +C0 */ u8 xC0_filler[0xC4 - 0xC0];
    /* +C4 */ AbsorbDesc xC4;
    /* +D8 */ float xD8;
};
struct ftLk_FighterVars {
    /* fp+222C */ bool used_boomerang;
    /* fp+2230 */ bool x4;
    /* fp+2234 */ Item_GObj* boomerang_gobj;
    /* fp+2238 */ Item_GObj* xC;
    /* fp+223C */ Item_GObj* arrow_gobj;
    /* fp+2240 */ Item_GObj* x14;
    /* fp+2244 */ Item_GObj* x18;
    /* fp+2248 */ u32 x1C;
};
union ftLk_MotionVars {
    struct ftLk_AttackAirVars {
        /* fp+2340 */ float lw_frame_start;
    } attackair;
    struct ftLk_SpecialNVars {
        /* fp+2340 */ Vec2 x0;
        /* fp+2348 */ Vec3 x8;
        /* fp+2354 */ float x14;
        /* fp+2358 */ int unk_timer;
    } specialn;
};
struct ftLk_SpecialN_Vec3Group {
    /*  +0 */ Vec3 a;
    /*  +C */ Vec3 b;
    /* +18 */ Vec3 c;
};
#define MELEE_FT_CHARA_FTLUIGI_TYPES_H
struct ftLuigi_FighterVars {
    /* 0x222C */ bool x222C_cycloneCharge;
    /* 0x2230 */ u32 x2230;
    /* 0x2234 */ u32 x2234;
    u8 _[0xF8 - 0xC];
};
typedef struct _ftLuigiAttributes {
    /// SIDE SPECIAL - GREEN MISSILE
    float x0_LUIGI_GREENMISSILE_UNK1;
    float x4_LUIGI_GREENMISSILE_SMASH;
    float x8_LUIGI_GREENMISSILE_CHARGE_RATE;
    float xC_LUIGI_GREENMISSILE_MAX_CHARGE_FRAMES;
    float x10_LUIGI_GREENMISSILE_DAMAGE_TILT;
    /// (base damage + charge duration) * this value?
    float x14_LUIGI_GREENMISSILE_DAMAGE_SLOPE;
    float x18_LUIGI_GREENMISSILE_TRACTION;
    float x1C_LUIGI_GREENMISSILE_UNK2;
    float x20_LUIGI_GREENMISSILE_FALLING_SPEED;
    float x24_LUIGI_GREENMISSILE_VEL_X;
    float x28_LUIGI_GREENMISSILE_MUL_X;
    float x2C_LUIGI_GREENMISSILE_VEL_Y;
    float x30_LUIGI_GREENMISSILE_MUL_Y;
    float x34_LUIGI_GREENMISSILE_GRAVITY_START;
    float x38_LUIGI_GREENMISSILE_FRICTION_END;
    float x3C_LUIGI_GREENMISSILE_X_DECEL;
    float x40_LUIGI_GREENMISSILE_GRAVITY_MUL;
    /// 1.0f divided by this value
    float x44_LUIGI_GREENMISSILE_MISFIRE_CHANCE;
    float x48_LUIGI_GREENMISSILE_MISFIRE_VEL_X;
    float x4C_LUIGI_GREENMISSILE_MISFIRE_VEL_Y;
    /// UP SPECIAL - SUPER JUMP PUNCH
    /// Multiplies Luigi's max horionztal aerial mobility
    float x50_LUIGI_SUPERJUMP_FREEFALL_MOBILITY;
    float x54_LUIGI_SUPERJUMP_LANDING_LAG;
    /// Minimum stick range required for turnaround
    float x58_LUIGI_SUPERJUMP_REVERSE_STICK_RANGE;
    /// Minimum stick range required for horionztal momentum?
    float x5C_LUIGI_SUPERJUMP_MOMENTUM_STICK_RANGE;
    float x60_LUIGI_SUPERJUMP_ANGLE_DIFF;
    float x64_LUIGI_SUPERJUMP_VEL_X;
    float x68_LUIGI_SUPERJUMP_GRAVITY_START;
    float x6C_LUIGI_SUPERJUMP_VEL_Y;
    /// DOWN SPECIAL - LUIGI CYCLONE
    /// Vertical momentum from (first?) B button tap
    float x70_LUIGI_CYCLONE_TAP_MOMENTUM;
    float x74_LUIGI_CYCLONE_MOMENTUM_X_GROUND;
    float x78_LUIGI_CYCLONE_MOMENTUM_X_AIR;
    float x7C_LUIGI_CYCLONE_MOMENTUM_X_MUL_GROUND;
    float x80_LUIGI_CYCLONE_MOMENTUM_X_MUL_AIR;
    float x84_LUIGI_CYCLONE_FRICTION_END;
    s32 x88_LUIGI_CYCLONE_UNK;
    float x8C_LUIGI_CYCLONE_TAP_Y_VEL_MAX;
    float x90_LUIGI_CYCLONE_TAP_GRAVITY;
    s32 x94_LUIGI_CYCLONE_LANDING_LAG;
} ftLuigiAttributes;
typedef struct ftLuigiSpecialS {
    /// 0x2340 - Number of frames Green Missile has been charged
    s32 chargeFrames;
    /// 0x2344 - Check if Green Missile will misfire
    bool isMisfire;
} ftLuigiSpecialS;
typedef struct ftLuigiSpecialLw {
    /// 0x2340 - Grounded momentum of Luigi Cyclone
    float groundVelX;
    /// 0x2344 - Set but never used?
    s32 unk;
    /// 0x2348 - Skipped entirely
    s32 _;
    /// 0x234C - Checked in collision, related to some angle calculation
    bool isUnkColl;
} ftLuigiSpecialLw;
typedef union ftLuigi_MotionVars {
    ftLuigiSpecialS SpecialS;
    ftLuigiSpecialLw SpecialLw;
} ftLuigi_MotionVars;
#define MELEE_FT_CHARA_FTMARIO_TYPES_H
#define MELEE_FT_CHARA_FTMARIO_FORWARD_H
static MotionFlags const ftMr_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftMr_MF_SpecialN =
    ftMr_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftMr_MF_SpecialHi =
    ftMr_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftMr_MF_SpecialLw =
    ftMr_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_KeepSfx;
static MotionFlags const ftMr_MF_SpecialAirN =
    ftMr_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftMr_MF_SpecialAirHi =
    ftMr_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftMr_MF_SpecialAirLw =
    ftMr_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftMr_MF_SpecialS =
    ftMr_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipModel | Ft_MF_SkipColAnim;
typedef enum ftMario_MotionState {
    ftMr_MS_AppealSR = ftCo_MS_Count,
    ftMr_MS_AppealSL,
    ftMr_MS_SpecialN,
    ftMr_MS_SpecialAirN,
    ftMr_MS_SpecialS,
    ftMr_MS_SpecialAirS,
    ftMr_MS_SpecialHi,
    ftMr_MS_SpecialAirHi,
    ftMr_MS_SpecialLw,
    ftMr_MS_SpecialAirLw,
    ftMr_MS_Count,
    ftMr_MS_SelfCount = ftMr_MS_Count - ftCo_MS_Count,
} ftMario_MotionState;
typedef enum ftMr_Submotion {
    ftMr_SM_SpecialN = ftCo_SM_Count,
    ftMr_SM_SpecialAirN,
    ftMr_SM_SpecialS,
    ftMr_SM_SpecialAirS,
    ftMr_SM_SpecialHi,
    ftMr_SM_SpecialAirHi,
    ftMr_SM_SpecialLw,
    ftMr_SM_SpecialAirLw,
    ftMr_SM_Count,
    ftMr_SM_SelfCount = ftMr_SM_Count - ftCo_SM_Count,
} ftMr_Submotion;
struct ftMario_FighterVars {
    /// Current Megavitamin color combo
    /* 0x222C */ int x222C_vitaminCurr;
    /// Previous Megavitamin color combo
    /* 0x2230 */ int x2230_vitaminPrev;
    /* 0x2234 */ bool x2234_tornadoCharge;
    /* 0x2238 */ bool x2238_isCapeBoost;
    /* 0x223C */ HSD_GObj* x223C_capeGObj;
    /* 0x2240 */ HSD_GObj* x2240;
    u8 _[0xF8 - 0x18];
};
typedef struct ftMario_DatAttrs {
    struct ftMario_SpecialS_DatAttrs {
        float vel_x_decay;
        Vec2 vel;
        float grav;
        float terminal_vel;
        ItemKind cape_kind;
    } specials;
    struct ftMario_SpecialHi_DatAttrs {
        float freefall_mobility;
        float landing_lag;
        float reverse_stick_range;
        float momentum_stick_range;
        float angle_diff;
        float vel_x;
        float grav;
        float vel_mul;
    } specialhi;
    struct ftMario_SpecialLw_DatAttrs {
        float vel_y; ///< Vertical momentum from initial grounded B-tap
        float momentum_x;
        float air_momentum_x;
        float momentum_x_mul;
        float air_momentum_x_mul;
        float friction_end;
        s32 unk0;
        float tap_y_vel_max;
        float tap_grav;
        s32 landing_lag;
    } speciallw;
    ReflectDesc cape_reflection;
} ftMario_DatAttrs;
typedef struct ftMario_SpecialLw_ECB {
    u8 x0_str_arr[3];
    u8 x3_balign;
    u32 x4;
    u32 x8;
    u32 xC;
    u32 x10;
    u32 x14;
} ftMario_SpecialLw_ECB;
typedef struct ftMarioSpecialS {
    /// 0x2340 - bool to check if reflect bubble should be enabled
    bool reflecting;
} ftMarioSpecialS;
typedef struct ftMarioSpecialLw {
    /// 0x2340 - Grounded momentum of Mario / Dr. Tornado
    float groundVelX;
    /// 0x2344 - Set but never used?
    s32 unk;
    /// 0x2348 - Skipped entirely
    s32 _;
    /// 0x234C - Checked in collision, related to some angle calculation
    bool isUnkColl;
} ftMarioSpecialLw;
typedef union ftMario_MotionVars {
    ftMarioSpecialS SpecialS;
    ftMarioSpecialLw SpecialLw;
} ftMario_MotionVars;
#define MELEE_FT_CHARA_FTMASTERHAND_TYPES_H
#define MELEE_FT_CHARA_FTMASTERHAND_FORWARD_H
typedef struct ftMasterHand_SpecialAttrs ftMasterHand_SpecialAttrs;
typedef enum ftMasterHand_UnkEnum0 {
    ftMh_UnkEnum0_Unk00,
    ftMh_UnkEnum0_Unk01,
    ftMh_UnkEnum0_Unk02,
    ftMh_UnkEnum0_Unk03,
    ftMh_UnkEnum0_Unk04,
    ftMh_UnkEnum0_Unk05,
    ftMh_UnkEnum0_Unk06,
    ftMh_UnkEnum0_Unk07,
    ftMh_UnkEnum0_Unk08,
    ftMh_UnkEnum0_Unk09,
    ftMh_UnkEnum0_Unk10,
} ftMasterHand_UnkEnum0;
typedef enum ftMasterhand_MotionState {
    ftMh_MS_Wait1_0 = ftCo_MS_Count,
    ftMh_MS_Wait2_0,
    ftMh_MS_Entry,
    ftMh_MS_Damage,
    ftMh_MS_Damage2,
    ftMh_MS_WaitSweep,
    ftMh_MS_SweepLoop,
    ftMh_MS_SweepWait,
    ftMh_MS_Slap,
    ftMh_MS_Walk2,
    ftMh_MS_WalkLoop,
    ftMh_MS_WalkWait,
    ftMh_MS_WalkShoot,
    ftMh_MS_Drill,
    ftMh_MS_RockCrushUp,
    ftMh_MS_RockCrushWait,
    ftMh_MS_RockCrushDown,
    ftMh_MS_PaperCrush,
    ftMh_MS_Poke1,
    ftMh_MS_Poke2,
    ftMh_MS_FingerBeamStart,
    ftMh_MS_FingerBeamLoop,
    ftMh_MS_FingerBeamEnd,
    ftMh_MS_FingerGun1,
    ftMh_MS_FingerGun2,
    ftMh_MS_FingerGun3,
    ftMh_MS_BackAirplane1,
    ftMh_MS_BackAirplane2,
    ftMh_MS_BackAirplane3,
    ftMh_MS_BackPunch,
    ftMh_MS_BackCrush,
    ftMh_MS_BackDisappear,
    ftMh_MS_Wait1_1,
    ftMh_MS_Grab,
    ftMh_MS_Cancel,
    ftMh_MS_Squeezing0,
    ftMh_MS_Squeezing1,
    ftMh_MS_Squeeze,
    ftMh_MS_Throw,
    ftMh_MS_Slam,
    ftMh_MS_Fail,
    ftMh_MS_TagCrush,
    ftMh_MS_TagApplaud,
    ftMh_MS_TagRockPaper,
    ftMh_MS_TagGrab,
    ftMh_MS_TagSqueeze,
    ftMh_MS_TagFail,
    ftMh_MS_TagCancel,
    ftMh_MS_Wait1_2,
    ftMh_MS_Wait2_1,
    ftMh_MS_Count,
    ftMh_MS_SelfCount = ftMh_MS_Count - ftCo_MS_Count,
} ftMasterhand_MotionState;
typedef enum ftMh_Submotion {
    ftMh_SM_Wait1_0 = ftCo_SM_Count,
    ftMh_SM_Wait2_0,
    ftMh_SM_Entry,
    ftMh_SM_Damage,
    ftMh_SM_Damage2,
    ftMh_SM_WaitSweep,
    ftMh_SM_SweepLoop,
    ftMh_SM_SweepWait,
    ftMh_SM_Slap,
    ftMh_SM_Walk2,
    ftMh_SM_WalkLoop,
    ftMh_SM_WalkWait,
    ftMh_SM_WalkShoot,
    ftMh_SM_Drill,
    ftMh_SM_RockCrushUp,
    ftMh_SM_RockCrushWait,
    ftMh_SM_RockCrushDown,
    ftMh_SM_PaperCrush,
    ftMh_SM_Poke1,
    ftMh_SM_Poke2,
    ftMh_SM_FingerBeamStart,
    ftMh_SM_FingerBeamLoop,
    ftMh_SM_FingerBeamEnd,
    ftMh_SM_FingerGun1,
    ftMh_SM_FingerGun2,
    ftMh_SM_FingerGun3,
    ftMh_SM_BackAirplane1,
    ftMh_SM_BackAirplane2,
    ftMh_SM_BackAirplane3,
    ftMh_SM_BackPunch,
    ftMh_SM_BackCrush,
    ftMh_SM_BackDisappear,
    ftMh_SM_Wait1_1,
    ftMh_SM_Grab,
    ftMh_SM_Cancel,
    ftMh_SM_Squeezing0,
    ftMh_SM_Squeezing1,
    ftMh_SM_Squeeze,
    ftMh_SM_Throw,
    ftMh_SM_Slam,
    ftMh_SM_Fail,
    ftMh_SM_TagCrush,
    ftMh_SM_TagApplaud,
    ftMh_SM_TagRockPaper,
    ftMh_SM_TagGrab,
    ftMh_SM_TagSqueeze,
    ftMh_SM_TagFail,
    ftMh_SM_TagCancel,
    ftMh_SM_Wait1_2,
    ftMh_SM_Wait2_1,
    ftMh_SM_Count,
    ftMh_SM_SelfCount = ftMh_SM_Count - ftCo_SM_Count,
} ftMh_Submotion;
struct ftMasterhand_FighterVars {
    /* 0x222C */ HSD_GObj* x222C;
    /* 0x2230 */ u32 x2230;
    /* 0x2234 */ u32 x2234;
    /* 0x2238 */ float x2238;
    /* 0x223C */ float x223C;
    /* 0x2240 */ Vec3 x2240_pos;
    /* 0x224C */ u32 x224C;
    /* 0x2250 */ s32 x2250;
    /* 0x2254 */ s32 x2254;
    /* 0x2258 */ s32 x2258;
};
struct ftMasterHand_SpecialAttrs {
    s32 x0;
    s32 x4;
    s32 x8;
    s32 xC;
    s32 x10;
    s32 x14;
    s32 x18;
    s32 x1C;
    s32 x20;
    s32 x24;
    float x28;
    float x2C;
    Vec2 x30_pos2;
    float x38;
    float x3C;
    Vec3 x40_pos;
    float x4C;
    Vec2 x50;
    float x58;
    float x5C;
    float x60;
    float x64;
    float x68;
    s32 x6C;
    s32 x70;
    s32 x74;
    float x78;
    s32 x7C;
    float x80;
    s32 x84;
    Vec2 x88_pos;
    s32 x90;
    s32 x94;
    float x98;
    float x9C;
    s32 xA0;
    float xA4;
    Vec2 xA8_pos;
    s32 xB0;
    s32 xB4;
    float xB8;
    Vec2 xBC_pos;
    Vec2 xC4_pos;
    Vec2 xCC_pos;
    float xD4;
    float xD8;
    float xDC;
    float xE0;
    float xE4;
    float xE8;
    s32 xEC;
    s32 xF0;
    float xF4;
    float xF8;
    float xFC;
    float x100;
    float x104;
    float x108;
    float x10C;
    Vec2 x110_pos;
    Vec2 x118_pos;
    float x120;
    Vec2 x124_pos;
    Vec2 x12C_pos;
    Vec2 x134_pos;
    Vec2 x13C_pos;
    s32 x144;
    s32 x148;
    float x14C;
    float x150;
    float x154;
    float x158;
    float x15C;
    s32 x160;
    s32 x164;
    s32 x168;
    s32 x16C;
    s32 x170;
    s32 x174;
    float x178;
};
union ftMasterHand_MotionVars {
    struct ftMasterHand_Unk0Vars {
        float x0;
        HSD_GObjEvent x4;
        int x8;
        Vec3 xC;
        float x18;
        float x1C;
        int x20;
        float x24;
        int x28;
        int x2C;
        int x30;
        int x34;
        int x38;
        int x3C;
        int x40;
        int x44;
        int x48;
        int x4C;
        float x50;
        int x54;
        Vec3 x58;
        Vec3 x64;
        int x70;
        int x74;
        int x78;
    } unk0;
    struct ftMasterHand_Unk4Vars {
        ftMasterHand_UnkEnum0 x0;
        int x4;
        int x8;
    } unk4;
    struct ftMasterHand_Unk13Vars {
        float x0;
        float x4;
    } unk13;
    struct ftMasterHand_FingerBeamVars {
        /*  +0 fp+2340 */ char pad_0[0x34];
        /* +34 fp+2374 */ Item_GObj* x34;
        /* +38 fp+2378 */ Item_GObj* x38;
        /* +3C fp+237C */ Item_GObj* x3C;
        /* +40 fp+2380 */ Item_GObj* x40;
    } fingerbeam;
    struct ftMasterHand_GrabVars {
        char pad_0[0x28];
        Item_GObj* x28;
        Item_GObj* x2C;
        Item_GObj* x30;
        Item_GObj* x34;
    } grab;
    struct ftMasterHand_Damage_0 {
        /*  +0 fp+2340 */ char pad_0[0x28];
        /* +28 fp+2368 */ int x28;
        /* +2C fp+236C */ int x2C;
        /* +30 fp+2370 */ int x30;
        /* +34 fp+2374 */ Item_GObj* x34;
        /* +38 fp+2378 */ Item_GObj* x38;
        /* +3C fp+237C */ Item_GObj* x3C;
        /* +40 fp+2380 */ Item_GObj* x40;
    } dmg0;
    struct ftCrazyHand_DamageVars {
        /*  +0 fp+2340 */ char pad_0[0x60];
        /* +60 fp+23A0 */ int x60;
        /* +64 fp+23A4 */ int x64;
    } ch_dmg;
    struct ftCrazyHand_BackCrushVars {
        /* +0 fp+2340 */ char pad_0[0x44];
        /* +44 fp+2384 */ Vec3 x44;
        /* +50 fp+2390 */ Vec3 x50;
        /* +5C fp+239C */ int x5C;
    } ch_backcrush;
};
#define MELEE_FT_CHARA_FTMEWTWO_TYPES_H
struct ftMewtwo_FighterVars {
    /* 0x222C */ HSD_GObj* x222C_disableGObj;
    /* 0x2230 */ HSD_GObj*
        x2230_shadowHeldGObj; // GObj of Shadow Ball while in Mewtwo's hands?
    /* 0x2234 */ s32 x2234_shadowBallCharge; // Number of cycles Shadow Ball
                                             // has been charged
    /* 0x2238 */ HSD_GObj* x2238_shadowBallGObj;
    /* 0x223C */ bool x223C_isConfusionBoost;
};
typedef struct ftMewtwoSpecialHi {
    /// 0x2340 - Number of frames Teleport's zoom animation lasts for
    s32 travelFrames;
    float stickX;
    float stickY;
    /// 0x234C - ???
    s32 unk4;
    float velX;
    float velY;
    float groundVelX;
} ftMewtwoSpecialHi;
typedef struct ftMewtwoSpecialS {
    /// 0x2340 - ???
    u8 isConfusionReflect : 1;
} ftMewtwoSpecialS;
typedef struct ftMewtwoSpecialN {
    bool isFull;
    s32 x2344;
    bool x2348;
    s32 releaseLag;
    /// 0x2350 - Charge level of Shadow Ball
    float chargeLevel;
} ftMewtwoSpecialN;
typedef union ftMewtwo_MotionVars {
    ftMewtwoSpecialN SpecialN;
    ftMewtwoSpecialS SpecialS;
    ftMewtwoSpecialHi SpecialHi;
} ftMewtwo_MotionVars;
typedef struct _ftMewtwoAttributes {
    // NEUTRAL SPECIAL - SHADOW BALL (SpecialN/SpecialAirN)
    float x0_MEWTWO_SHADOWBALL_CHARGE_CYCLES; // Number of frames each
                                              // iteration cycle lasts?
    float x4_MEWTWO_SHADOWBALL_GROUND_RECOIL_X;
    float x8_MEWTWO_SHADOWBALL_AIR_RECOIL_X;
    s32 xC_MEWTWO_SHADOWBALL_CHARGE_ITERATIONS; // Number of iterations
                                                // required for full charge
    s32 x10_MEWTWO_SHADOWBALL_RELEASE_LAG;
    float x14_MEWTWO_SHADOWBALL_LANDING_LAG;
    // SIDE SPECIAL - CONFUSION (SpecialS/SpecialAirS)
    float x18_MEWTWO_CONFUSION_AIR_BOOST;
    ReflectDesc x1C_MEWTWO_CONFUSION_REFLECTION;
    // UP SPECIAL - TELEPORT (SpecialHi/SpecialAirHi)
    float x40_MEWTWO_TELEPORT_VEL_DIV_X;
    float x44_MEWTWO_TELEPORT_VEL_DIV_Y;
    float x48_MEWTWO_TELEPORT_GRAVITY;
    float x4C_MEWTWO_TELEPORT_TERMINAL_VELOCITY;
    s32 x50_MEWTWO_TELEPORT_DURATION;
    float x54_MEWTWO_TELEPORT_UNK2;
    float x58_MEWTWO_TELEPORT_STICK_RANGE_MIN;
    float x5C_MEWTWO_TELEPORT_MOMENTUM;
    float x60_MEWTWO_TELEPORT_MOMENTUM_ADD;
    float x64_MEWTWO_TELEPORT_DRIFT;
    int x68_MEWTWO_TELEPORT_ANGLE_CLAMP; // Clamp teleport travel if surface
                                         // angle is greater than this value
    float x6C_MEWTWO_TELEPORT_MOMENTUM_END_MUL;
    float x70_MEWTWO_TELEPORT_FREEFALL_MOBILITY;
    float x74_MEWTWO_TELEPORT_LANDING_LAG;
    // DOWN SPECIAL - DISABLE (SpecialLw/SpecialAirLw)
    float x78_MEWTWO_DISABLE_GRAVITY;
    float x7C_MEWTWO_DISABLE_TERMINAL_VELOCITY;
    float x80_MEWTWO_DISABLE_OFFSET_X;
    float x84_MEWTWO_DISABLE_OFFSET_Y;
} ftMewtwoAttributes;
#define MELEE_FT_CHARA_FTNESS_TYPES_H
#define MELEE_FT_CHARA_FTNESS_FORWARD_H
static MotionFlags const ftNs_MF_Attack4 =
    Ft_MF_SkipHit | Ft_MF_SkipRumble | Ft_MF_SkipItemVis | Ft_MF_FreezeState;
static MotionFlags const ftNs_MF_AttackHi4 = ftNs_MF_Attack4 | Ft_MF_KeepGfx;
static MotionFlags const ftNs_MF_AttackLw4 =
    ftNs_MF_AttackHi4 | Ft_MF_KeepFastFall;
static MotionFlags const ftNs_MF_AttackHi4Start =
    ftNs_MF_AttackHi4 | Ft_MF_KeepSfx;
static MotionFlags const ftNs_MF_AttackLw4Start =
    ftNs_MF_AttackLw4 | Ft_MF_KeepSfx;
static MotionFlags const ftNs_MF_AttackS4 =
    ftNs_MF_Attack4 | Ft_MF_KeepFastFall | Ft_MF_KeepSfx | Ft_MF_SkipColAnim;
static MotionFlags const ftNs_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftNs_MF_SpecialLw =
    ftNs_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftNs_MF_Special_SkipUpdateThrowException =
    ftNs_MF_Special | Ft_MF_SkipThrowException;
static MotionFlags const ftNs_MF_SpecialN =
    ftNs_MF_Special_SkipUpdateThrowException | Ft_MF_KeepFastFall;
static MotionFlags const ftNs_MF_SpecialS =
    ftNs_MF_Special_SkipUpdateThrowException | Ft_MF_KeepGfx;
static MotionFlags const ftNs_MF_SpecialHi = ftNs_MF_SpecialN | Ft_MF_KeepGfx;
static MotionFlags const ftNs_MF_SpecialAirLw =
    ftNs_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftNs_MF_SpecialAirN =
    ftNs_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftNs_MF_SpecialAirS =
    ftNs_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftNs_MF_SpecialAirHi =
    ftNs_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftNs_MF_SpecialLwLoop =
    ftNs_MF_SpecialLw | Ft_MF_Unk19;
static MotionFlags const ftNs_MF_SpecialAirLwLoop =
    ftNs_MF_SpecialLwLoop | Ft_MF_SkipParasol;
typedef enum ftNess_MotionState {
    ftNs_MS_AttackS4 = ftCo_MS_Count,
    ftNs_MS_AttackHi4,
    ftNs_MS_AttackHi4Charge,
    ftNs_MS_AttackHi4Release,
    ftNs_MS_AttackLw4,
    ftNs_MS_AttackLw4Charge,
    ftNs_MS_AttackLw4Release,
    /* 15C */ ftNs_MS_SpecialNStart,
    /* 15D */ ftNs_MS_SpecialNHold,
    /* 15E */ ftNs_MS_SpecialNRelease,
    /* 15F */ ftNs_MS_SpecialNEnd,
    ftNs_MS_SpecialAirNStart,
    ftNs_MS_SpecialAirNHold,
    ftNs_MS_SpecialAirNRelease,
    ftNs_MS_SpecialAirNEnd,
    ftNs_MS_SpecialS,
    ftNs_MS_SpecialAirS,
    /* 166 */ ftNs_MS_SpecialHiStart,
    /* 167 */ ftNs_MS_SpecialHiHold,
    /* 168 */ ftNs_MS_SpecialHiEnd,
    /* 169 */ ftNs_MS_SpecialHi,
    /* 16A */ ftNs_MS_SpecialAirHiStart,
    /* 16B */ ftNs_MS_SpecialAirHiHold,
    /* 16C */ ftNs_MS_SpecialAirHiEnd,
    /* 16D */ ftNs_MS_SpecialAirHi,
    /* 16E */ ftNs_MS_SpecialAirHiRebound,
    ftNs_MS_SpecialLwStart,
    ftNs_MS_SpecialLwHold,
    ftNs_MS_SpecialLwHit,
    ftNs_MS_SpecialLwEnd,
    ftNs_MS_SpecialLwTurn,
    ftNs_MS_SpecialAirLwStart,
    ftNs_MS_SpecialAirLwHold,
    ftNs_MS_SpecialAirLwHit,
    ftNs_MS_SpecialAirLwEnd,
    ftNs_MS_SpecialAirLwTurn,
    ftNs_MS_Count,
    ftNs_MS_SelfCount = ftNs_MS_Count - ftCo_MS_Count,
} ftNess_MotionState;
typedef enum ftNs_Submotion {
    ftNs_SM_AttackHi4Charge = ftCo_SM_Count,
    ftNs_SM_AttackHi4Release,
    ftNs_SM_AttackLw4Charge,
    ftNs_SM_AttackLw4Release,
    ftNs_SM_SpecialNStart,
    ftNs_SM_SpecialNHold0,
    ftNs_SM_SpecialNHold1,
    ftNs_SM_SpecialNEnd,
    ftNs_SM_SpecialAirNStart,
    ftNs_SM_SpecialAirNHold0,
    ftNs_SM_SpecialAirNHold1,
    ftNs_SM_SpecialAirNEnd,
    ftNs_SM_SpecialS,
    ftNs_SM_SpecialAirS,
    ftNs_SM_SpecialHiStart,
    ftNs_SM_SpecialHiHold,
    ftNs_SM_SpecialHiEnd,
    ftNs_SM_SpecialHi,
    ftNs_SM_SpecialAirHiStart,
    ftNs_SM_SpecialAirHiHold,
    ftNs_SM_SpecialAirHiEnd,
    ftNs_SM_SpecialAirHi,
    ftNs_SM_SpecialAirHiRebound,
    ftNs_SM_SpecialLwStart,
    ftNs_SM_SpecialLwHold,
    ftNs_SM_SpecialLwHit,
    ftNs_SM_SpecialLwEnd,
    ftNs_SM_SpecialAirLwStart,
    ftNs_SM_SpecialAirLwHold,
    ftNs_SM_SpecialAirLwHit,
    ftNs_SM_SpecialAirLwEnd,
    ftNs_SM_Count,
    ftNs_SM_SelfCount = ftNs_SM_Count - ftCo_SM_Count,
} ftNs_Submotion;
struct ftNess_FighterVars {
    /* 0x222C */ HSD_GObj* yoyo_gobj;
    /* 0x2230 */ Vec3 yoyo_hitbox_pos;
    /* 0x223C */ float x223C;
    /* 0x2240 */ HSD_GObj* pkflash_gobj;
    /* 0x2244 */ HSD_GObj* pkthunder_gobj;
    /* 0x2248 */ HSD_GObj* bat_gobj;
    /// bool for PK Thunder GFX?
    /* 0x224C */ u32 pkthunder_gfx;
};
struct ftNess_YoyoVars {
    /// 0x2340 - Current frame of Up/Down Smash animation as an integer
    s32 yoyoCurrentFrame;
    /// 0x2344 - Frames until Up/Down Smash hitbox automatically refreshes;
    /// part of why the Yo-Yo Glitch occurs
    s32 yoyoRehitTimer;
    /// 0x2348 - bool to indicate whether Ness can charge the Yo-Yo
    bool isChargeDisable;
    /// 0x234C - bool to indicate whether Yo-Yo hitbox position should
    /// update based on raw Vec3 input (false) or modified calculations
    /// (true)
    bool isPosUpdateMod;
};
union ftNess_MotionVars {
    struct ftNess_YoyoVars attackhi4;
    struct ftNess_YoyoVars attacklw4;
    struct ftNess_SpecialNVars {
        /// 0x2340 - Number of frames Ness remains in the "charge loop"
        /// animation after releasing PK Flash
        /* fp+2340 */ int frames_to_loop_charge_ground;
        /// 0x2344 - Number of extra frames Ness remains in the "charge loop"
        /// animation after releasing PK Flash?
        /* fp+2344 */ int frames_to_loop_charge_air;
        /// 0x2348 - Number of frames to pass before gravity takes effect
        /* fp+2348 */ int falling_acceleration_delay;
        /// 0x234C - Minimum number of frames required to pass for PK Flash to
        /// auto-release if B is not being held
        /* fp+234C */ int charge_release_delay;
    } specialn;
    struct ftNess_SpecialHiVars {
        /// 0x2340 - PK Thunder collision type? Used to check if PK Thunder is
        /// colliding with Ness
        s32 thunderColl;
        /// 0x2344 - Number of frames Ness remains in the "control loop"
        /// animation after PK Thunder despawns
        s32 thunderTimerLoop1;
        /// 0x2348 - Number of extra frames Ness remains in the "control loop"
        /// animation after PK Thunder despawns?
        s32 thunderTimerLoop2;
        /// 0x234C - Number of frames to pass before gravity takes effect
        s32 gravityDelay;
        /// 0x2350 - ???
        Vec3 collPos1;
        /// 0x235C - ???
        Vec3 collPos2;
        /// 0x2368 - Aerial velocity of PK Thunder 2 (Self-Hit)
        float aerialVel;
        /// 0x236C - Set various times but never actually used?
        float unkVar;
        /// 0x2370 - Facing direction change frorm PK Thunder collision
        float facingDir;
        /// 0x2374 through 0x237C - Unused vector
        Vec3 unkVector1;
        /// 0x2380 - bool used in a weird way to switch to PK Thunder 2 GFX
        s32 jibakuGFX;
        /// 0x2384 - Fall acceleration of PK Thunder 2 (Self-Hit)
        float fallAccel;
        /// 0x2388 - Set various times but never actually used?
        float unkVar3;
        /// 0x238C - Set various times but never actually used?
        float unkVar4;
    } specialhi;
    struct ftNess_SpecialLwVars {
        /// 0x2340 - Auto lag frames after initializing PSI Magnet if B is not
        /// being held; PSI Magnet is immediately released with no lag once
        /// these frames have passed
        s32 releaseLag;
        /// 0x2344 - Unused turnaround timer
        s32 turnFrames;
        /// 0x2348 - Check if Ness is no longer holding B
        bool isRelease;
        /// 0x234C - Number of frames to pass before gravity takes effect
        s32 gravityDelay;
        s32 x10;
    } speciallw;
};
/// Special Attributes
typedef struct ftNessAttributes {
    // Neutral Special - PK Flash
    s32 x0_PKFLASH_TIMER1_LOOPFRAMES;
    s32 x4_PKFLASH_TIMER2_LOOPFRAMES;
    s32 x8_PKFLASH_GRAVITY_DELAY;
    s32 xC_PKFLASH_MINCHARGEFRAMES;
    float x10_PKFLASH_UNK1;
    float x14_PKFLASH_FALL_ACCEL;
    float x18_PKFLASH_UNK2;
    float x1C_PKFLASH_LANDING_LAG; // If set to 0, Ness does not enter freefall
                                   // after aerial PK Flash, but loses his
                                   // double jump.
    // Side Special - PK Fire
    float x20_PKFIRE_AERIAL_LAUNCH_TRAJECTORY; // Radians
    float x24_PKFIRE_AERIAL_VELOCITY;
    float x28_PKFIRE_GROUNDED_LAUNCH_TRAJECTORY; // Radians
    float x2C_PKFIRE_GROUNDED_VELOCITY;
    float x30_PKFIRE_SPAWN_X;
    float x34_PKFIRE_SPAWN_Y;
    float x38_PKFIRE_LANDING_LAG;
    // Up Special - PK Thunder
    float x3C_PK_THUNDER_UNK1;
    u32 x40_PK_THUNDER_LOOP1;
    u32 x44_PK_THUNDER_LOOP2;
    u32 x48_PK_THUNDER_GRAVITY_DELAY;
    float x4C_PK_THUNDER_UNK2;
    float x50_PK_THUNDER_FALL_ACCEL;
    // Up Special - PK Thunder 2 (Self-Hit)
    float x54_PK_THUNDER_2_MOMENTUM;
    float x58_PK_THUNDER_2_UNK1;
    float x5C_PK_THUNDER_2_DECELERATION_RATE;
    float x60_PK_THUNDER_2_KNOCKDOWN_ANGLE; // Angle to determine whether to
                                            // enter PK Thunder 2 or DownBound
                                            // state (Ground Only)
    float x64_PK_THUNDER_2_WALLHUG_ANGLE; // Surface angle to determine whether
                                          // PK Thunder 2 wallhugs or bounces
    float x68_PK_THUNDER_2_UNK2;
    float
        x6C_PK_THUNDER_2_FREEFALL_ANIM_BLEND; // Amount of animation blend
                                              // frames Ness goes through when
                                              // entering FallSpecial through
                                              // his SpecialHi Motion States
    float x70_PK_THUNDER_2_LANDING_LAG; // If set to 0, Ness does not enter
                                        // freefall after aerial PK Thunder,
                                        // but loses his double jump.
    // Down Special - PSI Magnet
    float x74_PSI_MAGNET_RELEASE_LAG; // Auto lag frames after initializing PSI
                                      // Magnet if B is not being held. PSI
                                      // Magnet is immediately released with no
                                      // lag once these frames have passed.
    float x78_PSI_MAGNET_UNK1; // Note: Reminiscent of Fox and Falco's
                               // Reflector turn duration attribute? Unused.
    float x7C_PSI_MAGNET_UNK2; // Note: Reminiscent of Fox and Falco's
                               // Reflector Unk1 attribute? Unused.
    float x80_PSI_MAGNET_UNK3; // Unused.
    s32 x84_PSI_MAGNET_FRAMES_BEFORE_GRAVITY;
    float x88_PSI_MAGNET_MOMENTUM_PRESERVATION;
    float x8C_PSI_MAGNET_FALL_ACCEL;
    float x90_PSI_MAGNET_UNK4; // Unused.
    float x94_PSI_MAGNET_HEAL_MUL; // Multiplies projectile damage by this
                                   // value and heals result
    AbsorbDesc x98_PSI_MAGNET_ABSORPTION;
    // Up/Down Smash - Yo-Yo
    float xAC_YOYO_CHARGE_DURATION; // Amount of frames Yo-Yo can be charged
    float
        xB0_YOYO_DAMAGE_MUL; // Charged Yo-Yo damage multiplier; 350 by
                             // default, identical to the Smash Charge standard
    float xB4_YOYO_REHIT_RATE; // Amount of frames needed for the Yo-Yo to hit
                               // again after colliding with a hurtbox
    // Forward Smash - Baseball Bat
    ReflectDesc xB8_BASEBALL_BAT;
} ftNessAttributes;
#define MELEE_FT_CHARA_FTPEACH_TYPES_H
#define MELEE_FT_CHARA_FTPEACH_FORWARD_H
static MotionFlags const ftPe_MF_Base = Ft_MF_SkipItemVis | Ft_MF_FreezeState;
static MotionFlags const ftPe_MF_FloatAttack =
    ftPe_MF_Base | Ft_MF_SkipParasol;
static MotionFlags const ftPe_MF_FloatAttackAirN =
    ftPe_MF_FloatAttack | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipHit;
static MotionFlags const ftPe_MF_Move_14 =
    ftPe_MF_FloatAttackAirN | Ft_MF_KeepFastFall;
static MotionFlags const ftPe_MF_FloatAttackAirB =
    ftPe_MF_FloatAttackAirN | Ft_MF_KeepGfx;
static MotionFlags const ftPe_MF_FloatAttackAirHi =
    ftPe_MF_FloatAttackAirN | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftPe_MF_Move_17 =
    ftPe_MF_FloatAttack | Ft_MF_SkipModel;
static MotionFlags const ftPe_MF_AttackS4 = ftPe_MF_Base | Ft_MF_KeepFastFall |
                                            Ft_MF_SkipHit | Ft_MF_KeepSfx |
                                            Ft_MF_SkipRumble;
static MotionFlags const ftPe_MF_Special =
    ftPe_MF_Base | Ft_MF_SkipModel | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftPe_MF_SpecialN =
    ftPe_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftPe_MF_SpecialHi = ftPe_MF_SpecialN | Ft_MF_KeepGfx;
static MotionFlags const ftPe_MF_SpecialLw =
    ftPe_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPe_MF_SpecialS =
    ftPe_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftPe_MF_SpecialAirN =
    ftPe_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftPe_MF_SpecialAirHi =
    ftPe_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftPe_MF_SpecialAirS =
    ftPe_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftPe_MF_ParasolOpen =
    Ft_MF_SkipHit | Ft_MF_SkipModel | Ft_MF_Unk06 | Ft_MF_SkipItemVis |
    Ft_MF_SkipModelPartVis;
static MotionFlags const ftPe_MF_ParasolFallSpecial =
    ftPe_MF_ParasolOpen | Ft_MF_Unk19;
typedef enum ftPeach_MotionState {
    ftPe_MS_Float = ftCo_MS_Count,
    ftPe_MS_FloatFallF,
    ftPe_MS_FloatFallB,
    ftPe_MS_FloatAttackAirN,
    ftPe_MS_FloatAttackAirF,
    ftPe_MS_FloatAttackAirB,
    ftPe_MS_FloatAttackAirHi,
    ftPe_MS_FloatAttackAirLw,
    ftPe_MS_AttackS4Club,
    ftPe_MS_AttackS4Pan,
    ftPe_MS_AttackS4Racket,
    ftPe_MS_SpecialLw,
    ftPe_MS_SpecialAirLw,
    ftPe_MS_SpecialSStart,
    ftPe_MS_SpecialSEnd,
    ftPe_MS_SpecialSJump,
    ftPe_MS_SpecialAirSStart,
    ftPe_MS_SpecialAirSEnd_0,
    ftPe_MS_SpecialAirSEnd_1,
    ftPe_MS_SpecialAirSJump,
    ftPe_MS_SpecialHiStart,
    ftPe_MS_SpecialHiEnd,
    ftPe_MS_SpecialAirHiStart,
    ftPe_MS_SpecialAirHiEnd,
    ftPe_MS_SpecialN,
    ftPe_MS_SpecialNHit,
    ftPe_MS_SpecialAirN,
    ftPe_MS_SpecialAirNHit,
    ftPe_MS_ItemParasolOpen,
    ftPe_MS_ItemParasolFall,
    ftPe_MS_Count,
    ftPe_MS_SelfCount = ftPe_MS_Count - ftCo_MS_Count,
} ftPeach_MotionState;
typedef enum ftPe_Submotion {
    ftPe_SM_Float = ftCo_SM_Count,
    ftPe_SM_FloatFallF,
    ftPe_SM_FloatFallB,
    ftPe_SM_AttackS4_0,
    ftPe_SM_AttackS4_1,
    ftPe_SM_AttackS4_2,
    ftPe_SM_SpecialLw,
    ftPe_SM_SpecialSStart,
    ftPe_SM_SpecialSEnd,
    ftPe_SM_SpecialSJump,
    ftPe_SM_SpecialAirSStart,
    ftPe_SM_SpecialAirSEnd_0,
    ftPe_SM_SpecialAirSEnd_1,
    ftPe_SM_SpecialHiStart,
    ftPe_SM_SpecialHiEnd,
    ftPe_SM_SpecialAirHiStart,
    ftPe_SM_SpecialAirHiEnd,
    ftPe_SM_SpecialN,
    ftPe_SM_SpecialNHit,
    ftPe_SM_SpecialAirN,
    ftPe_SM_SpecialAirNHit,
    ftPe_SM_ItemParasolOpen,
    ftPe_SM_ItemParasolFall,
    ftPe_SM_Count,
    ftPe_SM_SelfCount = ftPe_SM_Count - ftCo_SM_Count,
} ftPe_Submotion;
struct ftPeach_FighterVars {
    /* fp+222C */ bool has_float;
    /* fp+2230 */ float x4;
    /* fp+2234 */ FtMotionId attacks4_motion_id;
    /* fp+2238 */ Item_GObj* parasol_gobj_0;
    /* fp+223C */ Item_GObj* parasol_gobj_1;
    /* fp+2240 */ bool specialairn_used;
    /* fp+2244 */ Item_GObj* toad_gobj;
    /* fp+2248 */ Item_GObj* veg_gobj;
};
typedef struct ftPe_DatAttrs {
    /* +0 */ float floatfallf_anim_start;
    /* +4 */ float floatfallb_anim_start;
    /* +8 */ float floatfall_anim_start_offset;
    /* +C */ float xC;
    /* +10 */ int speciallw_item_table_count;
    /* +14 */ int x14;
    /* +1C */ struct ftPe_ItemChance {
        /* +0 */ int randi_max;
        /* +4 */ ItemKind kind;
    } speciallw_item_table[3];
    /* +30 */ int x30;
    /* +34 */ float x34;
    /* +38 */ float specials_start_accel;
    /* +3C */ float specials_start_vel_x;
    /* +40 */ float x40;
    /* +44 */ float specials_vel_x;
    /* +48 */ float specials_smash_vel_x;
    /* +4C */ float specials_vel_y;
    /* +50 */ float x50_gravity;
    /* +54 */ float x54;
    /* +58 */ float x58_gravity;
    /* +5C */ float x5C_terminal_vel;
    /* +60 */ float specials_end_vel_x;
    /* +64 */ float specials_end_vel_y;
    /* +68 */ float x68;
    /* +6C */ float x6C;
    /* +70 */ float x70;
    /* +74 */ float x74;
    /* +78 */ float x78;
    /* +7C */ float x7C;
    /* +80 */ float x80;
    /* +84 */ float x84;
    /* +88 */ float x88;
    /* +8C */ float x8C;
    /* +90 */ int x90;
    /* +94 */ float specialairn_vel_x_div;
    /* +98 */ float x98;
    /* +9C */ float specialairn_vel_y;
    /* +A0 */ float xA0;
    /* +A4 */ float xA4;
    /* +A8 */ float xA8;
    /* +AC */ AbsorbDesc xAC;
} ftPe_DatAttrs;
union ftPe_MotionVars {
    struct ftPe_FloatAttackVars {
        /* fp+2340 */ bool x0;
    } floatattack;
    struct ftPe_SpecialSVars {
        /* fp+2340 */ bool x0;
    } specials;
    struct ftPe_SpecialHiVars {
        /* fp+2340 */ ItemKind kind;
    } specialhi;
    struct ftPe_SpecialNVars {
        /* fp+2340 */ int facing_dir;
    } specialn;
};
#define MELEE_FT_CHARA_FTPIKACHU_TYPES_H
struct ftPikachu_FighterVars {
    char filler0[0xF8];
};
typedef struct _ftPikachuAttributes {
    Vec2 specialn_spawn_offset;
    Vec2 specialairn_spawn_offset;
    float specialairn_landing_lag;
    ItemKind specialn_itkind;
    ItemKind specialairn_itkind;
    float x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    float x30;
    float specials_start_friction;
    float specials_start_gravity;
    float x3C;
    float x40;
    float x44;
    float x48;
    float x4C;
    float x50;
    float x54;
    float x58;
    int x5C;
    s32 x60; // up b zip duration
    float x64;
    float x68; // up b angle offset 1
    Vec3 x6C_scale;
    float x78; // up b angle offset 2
    Vec3 x7C_scale;
    float x88;
    float x8C; // up b minimum stick magnitude
    float x90; // up b zip stick magnitude to velocity slope
    float x94; // up b zip stick magnitude to velocity intercept
    float x98; // second zip velocity decay
    float x9C;
    int xA0;
    float xA4;
    s32 xA8; // minimum stick angle difference between two up b zips
    float xAC;
    float xB0;
    float xB4;
    float xB8;
    float xBC;
    float xC0;
    float xC4;
    float xC8;
    float xCC;
    float xD0;
    s32 xD4;
    s32 xD8;
    u32 xDC;
    ftCollisionBox height_attributes;
} ftPikachuAttributes;
union ftPikachu_MotionVars {
    /// @todo Proper state name.
    struct ftPikachu_State2Vars {
        s32 x0;
    } unk2;
    /// @todo Proper state name.
    struct ftPikachu_State3Vars {
        s32 x0;
    } unk3;
    struct ftPikachu_SpecialHiVars {
        int x0;
        s32 x4;
        s32 x8;
        int xC;
        Vec2 x10;
        s32 x18;
        Vec2 x1C;
        float x24;
    } specialhi;
    struct ftPikachu_SpecialLwVars {
        Item_GObj* x0;
        bool x4;
    } speciallw;
};
#define MELEE_FT_CHARA_FTPOPO_TYPES_H
struct ftPopo_FighterVars {
    /* 0x222C */ Item_GObj* x222C;
    /* 0x2230:0 */ u8 x2230_b0 : 1;
    /* 0x2231 */ u8 filler_x2231[3];
    /* 0x2234 */ u32 x2234;
    /* 0x2238 */ Item_GObj* x2238;
    /* 0x223C */ u32 x223C;
    /* 0x2240 */ Vec x2240;
    /* 0x224C */ u32 x224C;
    /* 0x2250 */ float x2250;
};
typedef struct ftIceClimberAttributes {
    float x0;
    float x4;
    float x8;
    float xC;
    float x10;
    float x14;
    float x18;
    int x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    float x30;
    float x34;
    float x38;
    float x3C;
    float x40;
    float x44;
    float x48;
    float x4C_gravity;
    float x50_gravity;
    float x54_terminal_vel;
    float x58_terminal_vel;
    float x5C;
    float x60;
    float x64;
    int x68;
    float x6C;
    float x70;
    float x74;
    float x78;
    float x7C;
    float x80;
    float x84;
    float x88;
    float x8C;
    float x90;
    float x94;
    float x98;
    float x9C;
    float xA0;
    float xA4;
    float xA8;
    float xAC;
    float xB0;
    float xB4;
    float xB8;
    float xBC;
    float xC0;
    float xC4;
    float xC8;
    u8 _CC[0xD0 - 0xCC];
    float xD0;
    u8 _D4[0x12C - 0xD4];
    float x12C;
    float x130;
    float x134;
    float x138;
    float x13C;
    float x140;
    float x144;
    float x148;
    float x14C;
    u8 _150[0x15C - 0x150];
} ftIceClimberAttributes;
;
union ftPp_MotionVars {
    struct ftPp_SpecialSVars {
        /* fp+2340 */ float x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ struct ftPp_SpecialSVars_x8_t {
            int x0;
            HSD_GObj* x4;
        }* x8;
        /* fp+234C */ int xC;
        /* fp+2350 */ int x10;
        /* fp+2354 */ int x14;
        /* fp+2358 */ int x18;
        /* fp+235C */ float x1C;
    } specials;
    struct {
        /* fp+2340 */ int x0;
    } unk_80123954;
    struct {
        /* fp+2340 */ int x0;
        /* fp+2344:0 */ u8 x4_b0 : 1;
    } speciallw;
};
#define MELEE_FT_CHARA_FTPURIN_TYPES_H
struct ftPurin_FighterVars {
    /* 0x222C */ u32 x222C;
    /* 0x2230 */ Vec3 x2230;
    /* 0x223C */ HSD_JObj* x223C;
    /* 0x2240 */ DObjList x2240;
    /* 0x2248 */ FtPartsVis x2248;
};
typedef union ftPurin_MotionVars {
    struct ftPurin_SpecialHiVars {
        bool x0;
    } specialhi;
    struct ftPurin_SpecialNVars {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ int xC;
        /* fp+2350 */ float x10;
        /* fp+2354 */ float x14;
        /* fp+2358 */ float x18;
        /* fp+235C */ float x1C;
        /* fp+2360 */ float facing_dir;
        /* fp+2364 */ int x24;
        /* fp+2368 */ int x28;
        /* fp+236C */ int x2C;
        /* fp+2370 */ int x30;
        /* fp+2374 */ Vec3 x34;
    } specialn;
} ftPurin_MotionVars;
typedef struct _ftPurinAttributes {
    float x0;
    float x4;
    float x8;
    float xC;
    float x10;
    s32 x14;
    float x18;
    s32 x1C;
    s32 x20;
    s32 x24;
    s32 x28;
    s32 x2C;
    s32 x30;
    s32 x34;
    s32 x38;
    float x3C;
    float x40;
    float x44;
    u8 _48[0x4C - 0x48];
    float x4C;
    float x50;
    float x54;
    float x58;
    float x5C;
    u8 _60[0x68 - 0x60];
    float x68;
    float x6C;
    s32 x70;
    float x74;
    float x78;
    float x7C;
    float x80;
    float x84;
    Vec2 specialn_vel;
    float x90;
    float x94;
    float x98;
    s32 x9C;
    float xA0;
    float xA4;
    float xA8;
    float xAC;
    u8 _B0[0xB4 - 0xB0];
    float xB4;
    float xB8;
    float xBC;
    float xC0;
    float xC4;
    float xC8;
    float xCC;
    float xD0;
    float xD4;
    float xD8;
    float xDC;
    float xE0;
    float xE4;
    M2C_UNK xE8;
    M2C_UNK xEC;
    float xF0;
    float xF4;
    u8 _F8[0x100 - 0xF8];
} ftPurinAttributes;
;
#define MELEE_FT_CHARA_FTSAMUS_TYPES_H
struct ftSamus_FighterVars {
    /* 0x222C */ Item_GObj* x222C;
    /* 0x2230 */ s32 x2230;
    /* 0x2234 */ u32 x2234;
    /* 0x2238 */ u32 x2238;
    /* 0x223C */ Item_GObj* x223C;
    /* 0x2240 */ u8 x2240;
    /* 0x2241 */ u8 x2241;
    /* 0x2242 */ u8 x2242;
    /* 0x2243 */ u8 x2243;
    /* 0x2244 */ u32 x2244;
    /* 0x2248 */ u32 x2248;
};
typedef struct _ftSamusAttributes {
    /*  +0 */ float x0;
    /*  +4 */ float x4;
    /*  +8 */ float x8;
    /*  +C */ float xC;
    /* +10 */ float x10;
    /* +14 */ float x14;
    /* +18 */ float x18;
    /* +1C */ float x1C;
    /* +20 */ int x20;
    /* +24 */ float x24;
    /* +28 */ float x28;
    /* +2C */ float x2C;
    /* +30 */ float x30;
    /* +34 */ float x34;
    /* +38 */ float x38;
    /* +3C */ float x3C;
    /* +40 */ float x40;
    /* +44 */ float x44;
    /* +48 */ float x48;
    /* +4C */ float x4C;
    /* +50 */ float x50;
    /* +54 */ float x54;
    /* +58 */ float x58;
    /* +5C */ float x5C;
    /* +60 */ float x60;
    /* +64 */ float x64;
    /* +68 */ float x68;
    /* +6C */ float x6C;
    /* +70 */ float x70;
    /* +74 */ Vec3 x74_vec;
    /* +80 */ float x80;
    /* +84 */ ftCollisionBox height_attributes;
    /* +9C */ s32 x9C;
    /* +A0 */ s32 xA0;
    /* +A4 */ s32 xA4;
    /* +A8 */ s32 xA8;
    /* +AC */ s32 xAC;
    /* +B0 */ s32 xB0;
    /* +B4 */ s32 xB4;
    /* +B8 */ s32 xB8;
    /* +BC */ int xBC;
    /* +C0 */ int xC0;
    /* +C4 */ int xC4;
    /* +C8 */ int xC8;
    /* +CC */ f32 xCC;
    /* +D0 */ M2C_UNK xD0;
} ftSs_DatAttrs;
/// maybe Samus grapple?
struct UNK_SAMUS_S1 {
    HSD_Joint* x0_joint;
    HSD_AnimJoint** x4_anim_joints;
    HSD_AnimJoint* x8_anim_joint;
    HSD_MatAnimJoint* xC_matanim_joint;
};
union ftSamus_MotionVars {
    /// @todo Proper state name.
    struct ftSamus_State2Vars {
        s32 x0;
    } unk2;
    /// SpecialN charge shot state - x4 is frame counter (integer)
    struct ftSamus_State3Vars {
        s32 x0;
        s32 x4;
        float x8;
    } unk3;
    /// Grapple beam state - x4 is duration (float)
    struct ftSamus_GrappleVars {
        s32 x0;
        float x4;
        float x8;
    } grapple;
    /// @todo Proper state name.
    struct ftSamus_State5Vars {
        s32 x0;
    } unk5;
    /// @todo Proper state name.
    struct ftSamus_State6Vars {
        s32 x0;
    } unk6;
    /// @todo Proper state name.
    struct ftSamus_State7Vars {
        f32 x0;
    } unk7;
};
#define MELEE_FT_CHARA_FTSANDBAG_TYPES_H
struct ftSandbag_FighterVars {
    char filler0[0xF8];
};
#define MELEE_FT_CHARA_FTSEAK_TYPES_H
struct ftSeak_FighterVars {
    /* fp+222C */ int x0;
    /* fp+2230 */ Item_GObj* x4;
    /* fp+2234 */ HSD_GObj* x8;
    /* fp+2238 */ Vec3 xC[4];
    /* fp+2268 */ Vec3 x3C[4];
    /* fp+2298 */ Vec3 lstick_delta;
};
typedef struct _ftSeakAttributes { // x2D4 (fp->dat_attrs)
    float x0;
    float x4;
    float x8;
    float xC;
    float x10;
    float x14;
    float x18;
    float x1C;
    float x20;
    float x24;
    float x28;
    float self_vel_y;
    f32 x30;
    f32 x34;
    int x38;
    f32 x3C;
    f32 x40;
    f32 x44;
    f32 x48;
    f32 x4C;
    int x50;
    f32 x54;
    f32 x58;
    f32 x5C;
    f32 x60;
    f32 x64;
    f32 x68;
    f32 x6C;
    f32 x70;
    // u8 data_filler_1[0x04];
} ftSeakAttributes;
struct itChainSegment {
    float x00;
    float x04;
    float x08;
    float x0C;
    float x10;
    float x14;
    float x18;
    float x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    float x30;
    float x34;
    float x38;
    float x3C;
    float x40;
    float x44;
    float x48;
    float x4C;
    float x50;
};
union ftSeak_MotionVars {
    struct ftSeak_SpecialNVars {
        enum_t x0;
        bool x4;
        s32 x8;
        s32 xC;
        s32 x10;
        s32 x14;
        s32 x18;
        s32 x1C;
        s32 x20;
        s32 x24;
        s32 x28;
        s32 x2C;
    } specialn;
    struct ftSeak_SpecialSVars {
        s32 x0;
        s32 x4;
        s32 x8;
        s32 xC;
        float x10;
        float x14;
        float x18;
        s32 x1C;
        s32 x20;
        s32 x24;
        s32 x28;
        s32 x2C;
    } specials;
    struct ftSeakSpecialHi {
        s32 x0;
        Vec2 vel;
        s32 xC;
        s32 x10;
        s32 x14;
        s32 x18;
        s32 x1C;
        s32 x20;
        s32 x24;
        s32 x28;
        s32 x2C;
    } specialhi;
};
#define MELEE_FT_CHARA_FTYOSHI_TYPES_H
struct ftYoshi_FighterVars {
    /* 0x222C */ Vec3 x222C;
    /* 0x2238 */ Item_GObj* x2238;
};
typedef struct _ftYoshiAttributes { // x2D4 (fp->dat_attrs)
    s32 x0;
    float x4;
    float x8;
    float xC;
    float x10;
    float x14;
    float x18;
    float x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    float x30;
    float x34;
    int x38;
    Vec2 x3C;
    float x44;
    int x48;
    int x4C;
    int x50;
    float x54;
    float x58;
    float x5C;
    float x60;
    float x64;
    float x68;
    float specials_start_gravity;
    float specials_start_terminal_vel;
    float x74;
    float x78;
    float x7C;
    float x80;
    float x84;
    float x88;
    float x8C;
    float x90;
    float x94;
    float x98;
    float x9C;
    float xA0;
    int xA4;
    float xA8;
    float xAC;
    float xB0;
    float xB4;
    float xB8;
    float xBC;
    float xC0;
    float xC4;
    float xC8;
    float xCC;
    float xD0;
    float xD4;
    float xD8;
    int xDC;
    float xE0;
    float xE4;
    float xE8;
    u8 pad_xEC[0x114 - 0xEC];
    float x114;
    float x118;
    float x11C;
    float x120;
    float x124;
    float x128;
    u8 x12C[0x138 - 0x12C];
} ftYoshiAttributes;
;
struct ftYs_DatAttrs {
    /*   +0 */ char pad_0[0x10];
    /*  +10 */ Vec2 x10;
    /*  +18 */ float x18;
    /*  +1C */ M2C_UNK x1C;
    /*  +20 */ M2C_UNK x20;
    /*  +24 */ float x24;
    /*  +28 */ char pad_28[0xEC - 0x28];
    /*  +EC */ float xEC;
    /*  +F0 */ float xF0;
    /*  +F4 */ float xF4;
    /*  +F8 */ float specialhi_base_angle;
    /*  +FC */ float xFC;
    /* +100 */ float x100;
    /* +104 */ float x104;
    /* +108 */ float x108;
    /* +10C */ float x10C;
    /* +110 */ float x110;
    /* +114 */ char pad_114[0x118 - 0x114];
    /* +118 */ Vec2 speciallw_star_offset;
};
;
struct S_UNK_YOSHI2 {
    s32 x0;
    s32 x4;
    s32 x8_end_index;
    u8* xC_start_index;
};
struct S_UNK_YOSHI1 {
    s32 x0;
    struct S_UNK_YOSHI2* unk_struct;
};
union ftYoshi_MotionVars {
    struct ftYoshi_SpecialNVars {
        /* fp+2340:0 */ u8 x0_b0 : 1;
        /* fp+2340:1 */ u8 x0_b1 : 1;
        /* fp+2340:2 */ u8 x0_b2 : 1;
        /* fp+2340:3 */ u8 x0_b3 : 1;
    } specialn;
    struct ftYoshi_SpecialSVars {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
        /* fp+2348 */ int x8;
        /* fp+234C */ int xC;
        /* fp+2350 */ f32 x10;
        /* fp+2354 */ f32 x14;
        /* fp+2358 */ f32 x18;
        /* fp+235C */ f32 x1C;
        /* fp+2360 */ f32 x20;
        /* fp+2364 */ f32 x24;
        /* fp+2368 */ int x28;
        /* fp+236C */ int x2C;
        /* fp+2370 */ int x30;
    } specials;
    struct ftYoshi_SpecialHiVars {
        /* fp+2340 */ int x0;
        /* fp+2344 */ int x4;
    } specialhi;
    struct ftYoshi_GuardVars {
        /* fp+2340 */ f32 x0;
        /* fp+2344 */ u8 _pad[8];
        /* fp+234C */ bool xC;
        /* fp+2350 */ f32 x10;
        /* fp+2354 */ f32 x14;
        /* fp+2358 */ f32 x18;
        /* fp+235C */ M2C_UNK x1C;
        /* fp+2360 */ int x20;
        /* fp+2364 */ int x24;
    } guard;
};
#define MELEE_FT_CHARA_FTZAKOBOY_TYPES_H
struct ftZakoBoy_FighterVars {
    char filler0[0xF8];
};
typedef struct _ftZakoboyAttributes {
    s32 x0;
} ftZakoboyAttributes;
#define MELEE_FT_CHARA_FTZELDA_TYPES_H
struct ftZelda_FighterVars {
    /* 0x222C */ HSD_GObj* x222C;
};
typedef struct ftZelda_DatAttrs {
    float x0;
    s32 x4; // Type confirmed
    float x8;
    float xC;
    s32 x10; // Type confirmed
    s32 x14; // Type confirmed
    s32 x18; // Type confirmed
    s32 x1C; // Type confirmed
    float x20; // Type confirmed
    float x24; // Type confirmed
    s32 x28;
    float x2C; // Type confirmed
    s32 x30;
    float x34; // Type confirmed
    float x38; // Type confirmed
    float x3C; // Type confirmed
    float x40; // Type confirmed
    float x44; // Type confirmed
    s32 x48; // Type confirmed
    float x4C; // Type confirmed
    float x50; // Type confirmed
    float x54;
    float x58;
    float x5C;
    int x60; // Type confirmed
    float x64; // Type confirmed
    float x68; // Type confirmed
    float x6C; // Type confirmed
    float x70; // Type confirmed
    float x74; // Type confirmed
    float x78; // Type confirmed
    float x7C; // Type confirmed
    float x80; // Type confirmed
    ReflectDesc x84;
} ftZelda_DatAttrs;
union ftZelda_MotionVars {
    struct ftZelda_SpecialHiVars {
        int x0;
        Vec2 x4;
        int xC;
        Vec2 x10;
        float x18;
    } specialhi;
    struct ftZelda_SpecialNVars {
        int x0;
    } specialn;
    struct ftZelda_SpecialSVars {
        int x0;
        int x4;
        int x8;
        int xC;
    } specials;
};
#define MELEE_GM_TYPES_H
#define MELEE_GM_FORWARD_H
#define HSD_GOBJ_PLINK_20 20
#define HSD_GOBJ_PLINK_27 27
/// @todo Put in proper places. ::GM_MAX_PLAYERS is ::Gm_Player_NumMax but
/// needs to be used for array size declarations.
/// @{
#define GM_MAX_PLAYERS 6
#define GM_MAX_TEAMS 5
#define GM_NAMETAG_COUNT 120
#define GM_FPS 60
#define GM_GAMEMODESTATE_TERMINATE 0xFF
/// @}
typedef enum GameModeKind {
    /* 00 */ GM_TITLE,
    /* 01 */ GM_MENU,
    /* 02 */ GM_VS,
    /* 03 */ GM_CLASSIC,
    /* 04 */ GM_ADVENTURE,
    /* 05 */ GM_ALLSTAR,
    /* 06 */ GM_DEBUG,
    /* 07 */ GM_DEBUG_SOUND_TEST,
    /* 08 */ GM_HANYU_CSS,
    /* 09 */ GM_HANYU_SSS,
    /* 0A */ GM_CAMERA_MODE,
    /* 0B */ GM_TOY_GALLERY,
    /* 0C */ GM_TOY_LOTTERY,
    /* 0D */ GM_TOY_COLLECTION,
    /* 0E */ GM_DEBUG_VS,
    /* 0F */ GM_TARGET_TEST,
    /* 10 */ GM_SUPER_SUDDEN_DEATH_VS,
    /* 11 */ GM_INVISIBLE_VS,
    /* 12 */ GM_SLOMO_VS,
    /* 13 */ GM_LIGHTNING_VS,
    /* 14 */ GM_CHALLENGER_APPROACH,
    /* 15 */ GM_CLASSIC_GOVER,
    /* 16 */ GM_ADVENTURE_GOVER,
    /* 17 */ GM_ALLSTAR_GOVER,
    /* 18 */ GM_OPENING_MV,
    /* 19 */ GM_DEBUG_CUTSCENE,
    /* 1A */ GM_DEBUG_GOVER, ///< trophy fall and 'congrats'
    /* 1B */ GM_TOURNAMENT,
    /* 1C */ GM_TRAINING,
    /* 1D */ GM_TINY_VS,
    /* 1E */ GM_GIANT_VS,
    /* 1F */ GM_STAMINA_VS,
    /* 20 */ GM_HOME_RUN_CONTEST,
    /* 21 */ GM_10MAN_VS,
    /* 22 */ GM_100MAN_VS,
    /* 23 */ GM_3MIN_VS,
    /* 24 */ GM_15MIN_VS,
    /* 25 */ GM_ENDLESS_VS,
    /* 26 */ GM_CRUEL_VS,
    /* 27 */ GM_PROGRESSIVE_SCAN,
    /* 28 */ GM_BOOT,
    /* 29 */ GM_MEMCARD,
    /* 2A */ GM_CAMERA_VS,
    /* 2B */ GM_EVENT,
    /* 2C */ GM_SINGLE_BUTTON_VS,
    /* 2D */ GM_COUNT,
} GameModeKind;
/// Index into #gmm_x0_vsmodes::table.
typedef enum GmVsMode {
    /* 00 */ GmVsMode_Melee,
    /* 01 */ GmVsMode_SuperSuddenDeath,
    /* 02 */ GmVsMode_Invisible,
    /* 03 */ GmVsMode_Camera,
    /* 04 */ GmVsMode_FixedCamera,
    /* 05 */ GmVsMode_SingleButton,
    /* 06 */ GmVsMode_Training,
    /* 07 */ GmVsMode_Tiny,
    /* 08 */ GmVsMode_Giant,
    /* 09 */ GmVsMode_Stamina,
    /* 0A */ GmVsMode_Slomo,
    /* 0B */ GmVsMode_Lightning,
    /* 0C */ GmVsMode_Multiman, ///< 10/100-man, 3/15 min, endless, cruel
    /* 0D */ GmVsMode_UnkD, ///< unused?
    /* 0E */ GmVsMode_Opening, ///< opening movie?
    GmVsMode_Count,
} GmVsMode;
typedef enum GameSceneKind {
    /* +00 */ GS_TITLE,
    /* +01 */ GS_MENU,
    /* +02 */ GS_VS,
    /* +03 */ GS_SUDDEN_DEATH,
    /* +04 */ GS_TRAINING,
    /* +05 */ GS_RESULTS,
    /* +06 */ GS_0x6, ///< Unused? It is skipped in the table entirely
    /* +07 */ GS_DEBUG_MENU,
    /* +08 */ GS_CSS,
    /* +09 */ GS_SSS,
    /* +0A */ GS_UNK10, ///< Unused? Empty in the table
    /* +0B */ GS_TOY_GALLERY,
    /* +0C */ GS_TOY_LOTTERY,
    /* +0D */ GS_TOY_COLLECTION,
    /* +0E */ GS_INTRO_NORMAL, ///< Adventure Mode intro
    /* +0F */ GS_REGEND_TOYFALL, ///< Trophy fall scene that happens when you
                                  ///< win in 1p mode
    /* +10 */ GS_REGEND_CONGRATS, ///< "REG" may refer to any 1p mode
    /* +11 */ GS_CUTSCENE_LUIGI, ///< "Vi0102.dat" - "visual0102Scene"
    /* +12 */ GS_CUTSCENE_BRINSTAR, ///< "Vi0401.dat" - "visual0401Scene" -
                                      ///< "visual0401InfoScene"
    /* +13 */ GS_CUTSCENE_EXPLOSION, ///< Planet Explosion / "Vi0402.dat" -
                                      ///< "visual0402Scene"
    /* +14 */ GS_CUTSCENE_3KIRBYS, ///< "Vi0501.dat" - "visual0501Scene"
    /* +15 */ GS_CUTSCENE_GIANTKIRBY, ///< "Vi0502.dat" - "visual0502Scene"
    /* +16 */ GS_CUTSCENE_STARFOX, ///< "Vi0601.dat" - "visual0601Scene"
    /* +17 */ GS_CUTSCENE_FZERO, ///< "Vi0801.dat" - "visual0801Scene"
    /* +18 */ GS_CUTSCENE_METAL, ///< Metal Mario/Luigi / "Vi1101.dat" -
                                 ///< "visual1101Scene" - "visual1101Cam2Scene"
    /* +19 */ GS_CUTSCENE_BOWSERTOY, ///< "Vi1201v1.dat" - "visual1201v1Scene"
    /* +1A */ GS_CUTSCENE_GIGATRANSFORM, ///< "Vi1201v2.dat" -
                                         ///< "visual1201v2Scene"
    /* +1B */ GS_CUTSCENE_GIGADEFEATED, ///< "Vi1202.dat" - "visual1202Scene"
    /* +1C */ GS_MOVIE_OPENING,
    /* +1D */ GS_MOVIE_END, ///< 1p mode ending movie
    /* +1E */ GS_MOVIE_HOWTO,
    /* +1F */ GS_MOVIE_OMAKE15, ///< "Special Movie"
    /* +20 */ GS_INTRO_EASY, ///< Classic Mode splash screen
    /* +21 */ GS_INTRO_ALLSTAR, ///< Unused?
    /* +22 */ GS_GAMEOVER,
    /* +23 */ GS_COMING_SOON,
    /* +24 */ GS_TOU_SETUP, ///< Selections and settings
    /* +25 */ GS_TOU_BRACKET, ///< Tournament "Match Type"
    /* +26 */ GS_TOU_ALT, ///< Winner Out/Loser Out "Match Type"
    /* +27 */ GS_PRIZE_INTERFACE, ///< Achievement/Special Message Pop-up
    /* +28 */ GS_PROG_SCAN,
    /* +29 */ GS_APPROACH, ///< Challenger Approaching
    /* +2A */ GS_MEMCARD, ///< Memcard Prompt
    /* +2B */ GS_STAFFROLL, ///< Credits
    /* +2C */ GS_CAMERA_VS,
    /* +2D */ GS_COUNT
} GameSceneKind;
typedef enum MatchOutcome {
    /* 0 */ OUTCOME_NONE, ///< Match in progress, or no match played since boot
    /* 1 */ OUTCOME_TIMEOUT,
    /* 2 */ OUTCOME_ELIMINATION,
    /* 3 */ OUTCOME_TEAM_ELIMINATION, ///< Seen when a team battle ends
                                      ///< Also seen when player beats any 1p
                                      ///< mode stage that is a single
                                      ///< non-horde, non-event-match battle
    /* 4 */ OUTCOME_1P_GAME_OVER,
    /* 5 */ OUTCOME_UNK_1P_HORDE_BATTLE_VICTORY, ///< Applies to any victory in
                                                 ///< story mode against a
                                                 ///< horde of (usually weak)
                                                 ///< enemies.
    /* 6 */ OUTCOME_UNK_1P_BONUS_STAGE_END, ///< Applies to all stages that
                                            ///< aren't just a single match.
                                            ///< Target Test, Undergrond Maze,
                                            ///< Grand Prix, Race to the
                                            ///< finish, etc;
    /* 7 */ OUTCOME_NO_CONTEST,
    /* 8 */ OUTCOME_RETRY,
    /* 9 */ OUTCOME_TERMINATED,
} MatchOutcome;
struct gm_801677C0_s;
struct lbl_8046B488_t;
typedef struct CameraVsData CameraVsData;
typedef struct datetime datetime;
typedef struct DebugGameOverData DebugGameOverData;
typedef struct GameMode GameMode;
typedef struct GameRules GameRules;
typedef struct GameModeState GameModeState;
typedef struct GameScene GameScene;
typedef struct GameSceneInfo GameSceneInfo;
typedef struct gm_8016A92C_arg0_t gm_8016A92C_arg0_t;
typedef struct gm_8017DB6C_arg0_t gm_8017DB6C_arg0_t;
typedef struct gmm_x0_528_t gmm_x0_528_t;
struct GmStats;
typedef struct gmm_x1868_1A8_t gmm_x1868_1A8_t;
typedef struct VsSceneState VsSceneState;
typedef struct VsSceneController VsSceneController;
typedef struct ChallengerData ChallengerData;
typedef struct MatchEnd MatchEnd;
typedef struct MatchExitInfo MatchExitInfo;
typedef struct MatchPlayerData MatchPlayerData;
typedef struct MenuEnterData MenuEnterData;
typedef struct MenuExitData MenuExitData;
typedef struct Placeholder_8016AE38_flags Placeholder_8016AE38_flags;
typedef struct Placeholder_8016AE38_flags_2 Placeholder_8016AE38_flags_2;
typedef struct Placeholder_8016AE50_ret_val Placeholder_8016AE50_ret_val;
typedef struct ResultsData ResultsData;
typedef struct ResultsMatchInfo ResultsMatchInfo;
typedef struct TmAnimTimers TmAnimTimers;
typedef struct TmData TmData;
typedef struct TmVsData TmVsData;
typedef struct Unk1PData Unk1PData;
typedef struct Unk1PData_x24 Unk1PData_x24;
typedef struct UnkAdventureData UnkAdventureData;
typedef struct UnkAllstarData UnkAllstarData;
typedef struct UnkMultimanData UnkMultimanData;
typedef struct VsApproachData VsApproachData;
typedef bool (*GmRouteCallback)(int);
/// Player slot indices.
/// @remarks @c Gm_Player_NumMax is named by an assert in #pl_8004049C.
/// @c Gm_Player_Other is named by asserts in #setFlag and #setPointValue.
typedef enum Gm_Player {
    /* 0x00 */ Gm_Player_Unk0,
    /* 0x01 */ Gm_Player_Unk1,
    /* 0x02 */ Gm_Player_Unk2,
    /* 0x03 */ Gm_Player_Unk3,
    /* 0x04 */ Gm_Player_Unk4,
    /* 0x05 */ Gm_Player_Unk5,
    /* 0x06 */ Gm_Player_NumMax = 6,
    /* 0x06 */ Gm_Player_Other = Gm_Player_NumMax,
} Gm_Player;
typedef enum MatchKind {
    MatchKind_Time,
    MatchKind_Stock,
    MatchKind_Coin,
    MatchKind_Bonus,
} MatchKind;
#define MELEE_PL_FORWARD_H
typedef struct StaleMoveTable StaleMoveTable;
typedef struct plAllocInfo2 plAllocInfo2;
typedef struct plActionStats plActionStats;
typedef struct pl_800386E8_arg0_t pl_800386E8_arg0_t;
typedef struct pl_804D6470_t pl_804D6470_t;
typedef struct pl_StaleMoveTableExt_t pl_StaleMoveTableExt_t;
typedef enum {
    Gm_PKind_Human,
    Gm_PKind_Cpu,
    Gm_PKind_Demo,
    Gm_PKind_NA,
    Gm_PKind_Boss,
} Gm_PKind;
typedef enum {
    /* 00 */ StatsAttack_None,
    /* 01 */ StatsAttack_Attack11,
    /* 02 */ StatsAttack_Attack12,
    /* 03 */ StatsAttack_Attack13,
    /* 04 */ StatsAttack_Attack100,
    /* 05 */ StatsAttack_AttackDash,
    /* 06 */ StatsAttack_AttackS3,
    /* 07 */ StatsAttack_AttackHi3,
    /* 08 */ StatsAttack_AttackLw3,
    /* 09 */ StatsAttack_AttackS4,
    /* 0A */ StatsAttack_AttackHi4,
    /* 0B */ StatsAttack_AttackLw4,
    /* 0C */ StatsAttack_AttackAirN,
    /* 0D */ StatsAttack_AttackAirF,
    /* 0E */ StatsAttack_AttackAirB,
    /* 0F */ StatsAttack_AttackAirHi,
    /* 10 */ StatsAttack_AttackAirLw,
    /* 11 */ StatsAttack_SpecialN,
    /* 12 */ StatsAttack_SpecialS,
    /* 13 */ StatsAttack_SpecialHi,
    /* 14 */ StatsAttack_SpecialLw,
    /* 15 */ StatsAttack_KbSpecialNMr,
    /* 16 */ StatsAttack_KbSpecialNFx,
    /* 17 */ StatsAttack_KbSpecialNCa,
    /* 18 */ StatsAttack_KbSpecialNDk,
    /* 19 */ StatsAttack_KbSpecialNKp,
    /* 1A */ StatsAttack_KbSpecialNLk,
    /* 1B */ StatsAttack_KbSpecialNSk,
    /* 1C */ StatsAttack_KbSpecialNNs,
    /* 1D */ StatsAttack_KbSpecialNPe,
    /* 1E */ StatsAttack_KbSpecialNPp,
    /* 1F */ StatsAttack_KbSpecialNPk,
    /* 20 */ StatsAttack_KbSpecialNSs,
    /* 21 */ StatsAttack_KbSpecialNYs,
    /* 22 */ StatsAttack_KbSpecialNPr,
    /* 23 */ StatsAttack_KbSpecialNMt,
    /* 24 */ StatsAttack_KbSpecialNLg,
    /* 25 */ StatsAttack_KbSpecialNMs,
    /* 26 */ StatsAttack_KbSpecialNZd,
    /* 27 */ StatsAttack_KbSpecialNCl,
    /* 28 */ StatsAttack_KbSpecialNDr,
    /* 29 */ StatsAttack_KbSpecialNFc,
    /* 2A */ StatsAttack_KbSpecialNPc,
    /* 2B */ StatsAttack_KbSpecialNGw,
    /* 2C */ StatsAttack_KbSpecialNGn,
    /* 2D */ StatsAttack_KbSpecialNFe,
    /* 2E */ StatsAttack_KbSpecialNGk,
    /* 2F */ StatsAttack_47,
    /* 30 */ StatsAttack_48,
    /* 31 */ StatsAttack_DownAttackU,
    /* 32 */ StatsAttack_DownAttackD,
    /* 33 */ StatsAttack_Catch,
    /* 34 */ StatsAttack_CatchAttack,
    /* 35 */ StatsAttack_ThrowF,
    /* 36 */ StatsAttack_ThrowB,
    /* 37 */ StatsAttack_ThrowHi,
    /* 38 */ StatsAttack_ThrowLw,
    /* 39 */ StatsAttack_CargoThrowF,
    /* 3A */ StatsAttack_CargoThrowB,
    /* 3B */ StatsAttack_CargoThrowHi,
    /* 3C */ StatsAttack_CargoThrowLw,
    /* 3D */ StatsAttack_61,
    /* 3E */ StatsAttack_LedgeAttackSlow,
    /* 3F */ StatsAttack_LedgeAttackQuick,
    /* 40 */ StatsAttack_SwordSwing1,
    /* 41 */ StatsAttack_SwordSwing3,
    /* 42 */ StatsAttack_SwordSwing4,
    /* 43 */ StatsAttack_SwordSwingDash,
    /* 44 */ StatsAttack_BatSwing1,
    /* 45 */ StatsAttack_BatSwing3,
    /* 46 */ StatsAttack_BatSwing4,
    /* 47 */ StatsAttack_BatSwingDash,
    /* 48 */ StatsAttack_ParasolSwing1,
    /* 49 */ StatsAttack_ParasolSwing3,
    /* 4A */ StatsAttack_ParasolSwing4,
    /* 4B */ StatsAttack_ParasolSwingDash,
    /* 4C */ StatsAttack_HarisenSwing1,
    /* 4D */ StatsAttack_HarisenSwing3,
    /* 4E */ StatsAttack_HarisenSwing4,
    /* 4F */ StatsAttack_HarisenSwingDash,
    /* 50 */ StatsAttack_StarRodSwing1,
    /* 51 */ StatsAttack_StarRodSwing3,
    /* 52 */ StatsAttack_StarRodSwing4,
    /* 53 */ StatsAttack_StarRodSwingDash,
    /* 54 */ StatsAttack_LipstickSwing1,
    /* 55 */ StatsAttack_LipstickSwing3,
    /* 56 */ StatsAttack_LipstickSwing4,
    /* 57 */ StatsAttack_LipstickSwingDash,
    /* 58 */ StatsAttack_Parasol,
    /* 59 */ StatsAttack_LGun, ///< ray gun
    /* 5A */ StatsAttack_FireFlowerShoot,
    /* 5B */ StatsAttack_Screw,
    /* 5C */ StatsAttack_ScopeRapid,
    /* 5D */ StatsAttack_ScopeFire,
    /* 5E */ StatsAttack_Hammer,
    /* 5F */ StatsAttack_WarpStarFall, ///< on fall
    /* 60 */ StatsAttack_Pokeball, ///< on open
    /* 61 */ StatsAttack_MSBomb, ///< on explode
    /* 62 */ StatsAttack_ItemThrow,
    /* 63 */ StatsAttack_99,
    /* 64 */ StatsAttack_Count,
} plStats_Attack;
typedef enum PlATK {
    PlATK_AttackNormal_Start = 1,
    PlATK_AttackNormal_End = 16,
} PlATK;
/// Bonus item-log indices.
/// @remarks @c Pl_ItemLog_Terminate is named by asserts in #pl_8003E2CC and
/// #pl_8003E334.
typedef enum Pl_ItemLog {
    /* 0x00 */ Pl_ItemLog_Unk00,
    /* 0x01 */ Pl_ItemLog_Unk01,
    /* 0x02 */ Pl_ItemLog_Unk02,
    /* 0x03 */ Pl_ItemLog_Unk03,
    /* 0x04 */ Pl_ItemLog_Unk04,
    /* 0x05 */ Pl_ItemLog_Unk05,
    /* 0x06 */ Pl_ItemLog_Unk06,
    /* 0x07 */ Pl_ItemLog_Unk07,
    /* 0x08 */ Pl_ItemLog_Unk08,
    /* 0x09 */ Pl_ItemLog_Unk09,
    /* 0x0A */ Pl_ItemLog_Unk10,
    /* 0x0B */ Pl_ItemLog_Unk11,
    /* 0x0C */ Pl_ItemLog_Unk12,
    /* 0x0D */ Pl_ItemLog_Unk13,
    /* 0x0E */ Pl_ItemLog_Unk14,
    /* 0x0F */ Pl_ItemLog_Unk15,
    /* 0x10 */ Pl_ItemLog_Unk16,
    /* 0x11 */ Pl_ItemLog_Unk17,
    /* 0x12 */ Pl_ItemLog_Unk18,
    /* 0x13 */ Pl_ItemLog_Unk19,
    /* 0x14 */ Pl_ItemLog_Unk20,
    /* 0x15 */ Pl_ItemLog_Unk21,
    /* 0x16 */ Pl_ItemLog_Unk22,
    /* 0x17 */ Pl_ItemLog_Unk23,
    /* 0x18 */ Pl_ItemLog_Unk24,
    /* 0x19 */ Pl_ItemLog_Unk25,
    /* 0x1A */ Pl_ItemLog_Unk26,
    /* 0x1B */ Pl_ItemLog_Unk27,
    /* 0x1C */ Pl_ItemLog_Unk28,
    /* 0x1D */ Pl_ItemLog_Unk29,
    /* 0x1E */ Pl_ItemLog_Unk30,
    /* 0x1F */ Pl_ItemLog_Unk31,
    /* 0x20 */ Pl_ItemLog_Unk32,
    /* 0x21 */ Pl_ItemLog_Unk33,
    /* 0x22 */ Pl_ItemLog_Unk34,
    /* 0x23 */ Pl_ItemLog_Unk35,
    /* 0x24 */ Pl_ItemLog_Unk36,
    /* 0x25 */ Pl_ItemLog_Unk37,
    /* 0x26 */ Pl_ItemLog_Unk38,
    /* 0x27 */ Pl_ItemLog_Terminate = 39,
} Pl_ItemLog;
typedef enum {
    TeamColor_Red,
    TeamColor_Blue,
    TeamColor_Green,
} TeamColor;
typedef enum {
    CostumeId_Normal,
    CostumeId_Red,
    CostumeId_Blue,
    CostumeId_Green,
    CostumeId_Extra1,
    CostumeId_Extra2,
} CostumeId;
#define MELEE_TY_FORWARD_H
#define TY_TROPHY_COUNT 293
struct un_804D6EE0_t;
typedef struct DigitInit DigitInit;
typedef struct PosArray PosArray;
typedef struct PosArrayFull PosArrayFull;
typedef struct Toy Toy;
typedef struct Toy26B8 Toy26B8;
typedef struct Toy6E68 Toy6E68;
typedef struct ToyAnimState ToyAnimState;
typedef struct ToyCameraControl ToyCameraControl;
typedef struct ToyDataJObj ToyDataJObj;
typedef struct ToyDataX8 ToyDataX8;
typedef struct ToyED8Data ToyED8Data;
typedef struct ToyEntry ToyEntry;
typedef struct ToyGlobalsS_ ToyGlobalsS_;
typedef struct ToyJObjNode ToyJObjNode;
typedef struct ToyListEntry ToyListEntry;
typedef struct ToyModelFile ToyModelFile;
typedef struct ToyNameData ToyNameData;
typedef struct ToyParamEditor ToyParamEditor;
typedef struct ToySubStructS_ ToySubStructS_;
typedef struct ToyTable ToyTable;
typedef struct ToyTransitionObj ToyTransitionObj;
typedef struct TrophyData TrophyData;
typedef struct Ty25Entry Ty25Entry;
typedef struct TyArchiveData TyArchiveData;
typedef struct TyCameraData_ TyCameraData_;
typedef struct TyCleanupObj TyCleanupObj;
typedef struct tyDispData tyDispData;
typedef struct TyDisplayData TyDisplayData;
typedef struct TyDspArchiveHolder TyDspArchiveHolder;
typedef struct TyDspArchNames TyDspArchNames;
typedef struct TyDspBaseData TyDspBaseData;
typedef struct TyDspBgData TyDspBgData;
typedef struct TyDspConfig TyDspConfig;
typedef struct TyDspEntry TyDspEntry;
typedef struct TyDspGrid TyDspGrid;
typedef struct TyDspNameTables TyDspNameTables;
typedef struct TyDspPos TyDspPos;
typedef struct TyFiguponData TyFiguponData;
typedef struct TyFiguponED4 TyFiguponED4;
typedef struct TyFiguponInner TyFiguponInner;
typedef struct TyFiguponUD TyFiguponUD;
typedef struct TyGObjX8_ TyGObjX8_;
typedef struct TyLightFile TyLightFile;
typedef struct TyLightIndexEntry TyLightIndexEntry;
typedef struct TyLightSymbolEntry TyLightSymbolEntry;
typedef struct TyListArg TyListArg;
typedef struct TyListData TyListData;
typedef struct TyListGobjEntry TyListGobjEntry;
typedef struct TyListRow TyListRow;
typedef struct TyListState TyListState;
typedef struct TyListWaitData TyListWaitData;
typedef struct TyModeState TyModeState;
typedef struct TySortElem TySortElem;
typedef struct tyUnkStruct tyUnkStruct;
typedef struct TyViewData TyViewData;
typedef struct un_804D6E68_t un_804D6E68_t;
#define MELEE_MN_TYPES_H
#define MELEE_MN_FORWARD_H
#ifdef M2C
typedef struct mnInfo_GObj mnInfo_GObj;
typedef struct mnSoundTest_GObj mnSoundTest_GObj;
#else
typedef struct HSD_GObj mnInfo_GObj;
typedef struct HSD_GObj mnSoundTest_GObj;
#endif
typedef struct AnimLoopSettings AnimLoopSettings;
typedef struct CountEntry CountEntry;
typedef struct CSSData CSSData;
typedef struct CSSDoor CSSDoor;
typedef struct CSSDoorsData CSSDoorsData;
typedef struct CSSIcon CSSIcon;
typedef struct CSSIconsData CSSIconsData;
typedef struct CSSKOStar CSSKOStar;
typedef struct CSSModeInfo CSSModeInfo;
typedef struct CSSTag CSSTag;
typedef struct CSSTagData CSSTagData;
typedef struct Diagram Diagram;
typedef struct Diagram2 Diagram2;
typedef struct Diagram3 Diagram3;
typedef struct MnDiagram2RowLayout MnDiagram2RowLayout;
typedef struct Menu Menu;
typedef struct MenuKindData MenuKindData;
typedef struct MnInfoData MnInfoData;
typedef struct PlayerInitData PlayerInitData;
typedef struct soundtest_user_data soundtest_user_data;
typedef struct SSSData SSSData;
typedef struct StartMeleeData StartMeleeData;
typedef struct StartMeleeRules StartMeleeRules;
typedef struct VsModeData VsModeData;
typedef unsigned char MenuKind8;
typedef unsigned char MenuState8;
typedef enum _Mode {
    Mode_Time,
    Mode_Stock,
    Mode_Coin,
    Mode_Bonus
} Mode;
typedef enum _StageSelectMode {
    StageSelectMode_On,
    StageSelectMode_Random,
    StageSelectMode_Ordered,
    StageSelectMode_Turns,
    StageSelectMode_Loser
} StageSelectMode;
/// Not same as CharacterKind bc not as many characters as icons (missing
/// Sheik, Master Hand, etc)
typedef enum CSSIconHud {
    ICONHUD_CAPTAIN = 0x00,
    ICONHUD_DONKEY = 0x01,
    ICONHUD_FOX = 0x02,
    ICONHUD_GAMEWATCH = 0x03,
    ICONHUD_KIRBY = 0x04,
    ICONHUD_KOOPA = 0x05,
    ICONHUD_LINK = 0x06,
    ICONHUD_LUIGI = 0x07,
    ICONHUD_MARIO = 0x08,
    ICONHUD_MARS = 0x09,
    ICONHUD_MEWTWO = 0x0A,
    ICONHUD_NESS = 0x0B,
    ICONHUD_PEACH = 0x0C,
    ICONHUD_PIKACHU = 0x0D,
    ICONHUD_POPONANA = 0x0E,
    ICONHUD_PURIN = 0x0F,
    ICONHUD_SAMUS = 0x10,
    ICONHUD_YOSHI = 0x11,
    ICONHUD_ZELDA = 0x12,
    ICONHUD_FALCO = 0x13,
    ICONHUD_CLINK = 0x14,
    ICONHUD_DRMARIO = 0x15,
    ICONHUD_EMBLEM = 0x16,
    ICONHUD_PICHU = 0x17,
    ICONHUD_GANON = 0x18
} CSSIconHud;
typedef enum MenuKind {
    /* +00 */ MENU_KIND_MAIN = 0,
    /* +01 */ MENU_KIND_1P = 1,
    /* +02 */ MENU_KIND_VS = 2,
    /* +03 */ MENU_KIND_TOY = 3,
    /* +04 */ MENU_KIND_SETTINGS = 4,
    /* +05 */ MENU_KIND_DATA = 5,
    /* +06 */ MENU_KIND_REG = 6,
    /* +07 */ MENU_KIND_EVENT = 7,
    /* +08 */ MENU_KIND_8 = 8,
    /* +09 */ MENU_KIND_STADIUM = 9,
    /* +0A */ MENU_KIND_10 = 10,
    /* +0B */ MENU_KIND_11 = 11,
    /* +0C */ MENU_KIND_SPECIAL = 12,
    /* +0D */ MENU_KIND_RULES = 13,
    /* +0E */ MENU_KIND_14 = 14,
    /* +0F */ MENU_KIND_RULES_EXTRA = 15,
    /* +10 */ MENU_KIND_RULES_ITEMS = 16,
    /* +11 */ MENU_KIND_RULES_STAGE = 17,
    /* +12 */ MENU_KIND_NAME_ENTRY = 18,
    /* +13 */ MENU_KIND_SETTINGS_RUMBLE = 19,
    /* +14 */ MENU_KIND_SETTINGS_SOUND = 20,
    /* +15 */ MENU_KIND_DISPLAY = 21,
    /* +16 */ MENU_KIND_22 = 22,
    /* +17 */ MENU_KIND_SETTINGS_LANG = 23,
    /* +18 */ MENU_KIND_SETTINGS_ERASE = 24,
    /* +19 */ MENU_KIND_DATA_SNAP = 25,
    /* +1A */ MENU_KIND_DATA_ARCHIVES = 26,
    /* +1B */ MENU_KIND_27 = 27,
    /* +1C */ MENU_KIND_RECORDS = 28,
    /* +1D */ MENU_KIND_DATA_SPECIAL = 29,
    /* +1E */ MENU_KIND_RECORDS_VS = 30,
    /* +1F */ MENU_KIND_RECORDS_BONUS = 31,
    /* +20 */ MENU_KIND_RECORDS_MISC = 32,
    /* +21 */ MENU_KIND_MULTI_VS = 33,
    /* +22 */ MENU_KIND_34 = 34,
} MenuKind;
typedef enum MenuState {
    MENU_STATE_IDLE = 0,
    MENU_STATE_ENTER_TO = 1,
    MENU_STATE_EXIT_FROM = 2,
    MENU_STATE_EXIT_TO = 3,
    MENU_STATE_ENTER_FROM = 4,
    MENU_STATE_5 = 5,
} MenuState;
/// @brief selection refers to the invidual options inside menus/submenus
/// @todo should these be moved into their respective TU's?
typedef enum MainMenuSelection {
    SEL_MAIN_1P = 0,
    SEL_MAIN_VS = 1,
    SEL_MAIN_TOY = 2,
    SEL_MAIN_SETTINGS = 3,
    SEL_MAIN_DATA = 4,
} MainMenuSelection;
typedef enum OnePlayerMenuSelection {
    SEL_1P_REG = 0,
    SEL_1P_EVENT = 1,
    SEL_1P_2 = 2, ///< hidden
    SEL_1P_STADIUM = 3,
    SEL_1P_TRAINING = 4,
} OnePlayerMenuSelection;
typedef enum RegMatchMenuSelection {
    SEL_REG_CLASSIC = 0,
    SEL_REG_ADVENTURE = 1,
    SEL_REG_ALLSTAR = 2,
} RegMatchMenuSelection;
typedef enum StadiumMenuSelection {
    SEL_STADIUM_TARGET = 0,
    SEL_STADIUM_HOMERUN = 1,
    SEL_STADIUM_MULTIMAN = 2,
} StadiumMenuSelection;
typedef enum VsMenuSelection {
    SEL_VS_MELEE = 0,
    SEL_VS_TOURNAMENT = 1,
    SEL_VS_SPECIAL = 2,
    SEL_VS_RULES = 3,
    SEL_VS_NAME = 4,
} VsMenuSelection;
typedef enum SpecialVsMenuSelection {
    SEL_SPECIAL_VS_CAMERA = 0,
    SEL_SPECIAL_VS_STAMINA = 1,
    SEL_SPECIAL_VS_SUDDEN_DEATH = 2,
    SEL_SPECIAL_VS_GIANT = 3,
    SEL_SPECIAL_VS_TINY = 4,
    SEL_SPECIAL_VS_INVISIBLE = 5,
    SEL_SPECIAL_VS_FIXED_CAMERA = 6,
    SEL_SPECIAL_VS_SINGLE_BUTTON = 7,
    SEL_SPECIAL_VS_LIGHTNING = 8,
    SEL_SPECIAL_VS_SLOMO = 9,
} SpecialVsMenuSelection;
typedef enum SettingsMenuSelection {
    SEL_SETTINGS_RUMBLE = 0,
    SEL_SETTINGS_SOUND = 1,
    SEL_SETTINGS_DISPLAY = 2,
    SEL_SETTINGS_3 = 3, ///< hidden
    SEL_SETTINGS_LANG = 4,
    SEL_SETTINGS_ERASE = 5,
} SettingsMenuSelection;
typedef enum DataMenuSelection {
    SEL_DATA_SNAP = 0,
    SEL_DATA_ARCHIVES = 1,
    SEL_DATA_SOUND = 2,
    SEL_DATA_RECORDS = 3,
    SEL_DATA_SPECIAL = 4,
} DataMenuSelection;
typedef enum RecordsMenuSelection {
    SEL_RECORDS_VS = 0,
    SEL_RECORDS_BONUS = 1,
    SEL_RECORDS_MISC = 2,
} RecordsMenuSelection;
typedef enum TrophyMenuSelection {
    SEL_TOY_GALLERY = 0,
    SEL_TOY_LOTTERY = 1,
    SEL_TOY_2 = 2, ///< hidden
    SEL_TOY_COLLECTION = 3,
} TrophyMenuSelection;
typedef enum MultiVsMenuSelection {
    SEL_MULTI_VS_10MAN = 0,
    SEL_MULTI_VS_100MAN = 1,
    SEL_MULTI_VS_3MIN = 2,
    SEL_MULTI_VS_15MIN = 3,
    SEL_MULTI_VS_ENDLESS = 4,
    SEL_MULTI_VS_CRUEL = 5,
} MultiVsMenuSelection;
#ifdef M2C
struct mnInfo_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ mnInfo_GObj* next;
    /*  +C */ mnInfo_GObj* prev;
    /* +10 */ mnInfo_GObj* next_gx;
    /* +14 */ mnInfo_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ void (*rendered)(mnInfo_GObj* gobj, s32 code);
    /* +20 */ u64 gxlink_prios;
    /* +28 */ HSD_JObj* hsd_obj;
    /* +2C */ MnInfoData* user_data;
    /* +30 */ void (*user_data_remove_func)(mnInfo_GObj* data);
    /* +34 */ void* x34_unk;
};
struct mnSoundTest_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ HSD_GObj* next;
    /*  +C */ HSD_GObj* prev;
    /* +10 */ HSD_GObj* next_gx;
    /* +14 */ HSD_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ GObj_RenderFunc render_cb;
    /* +20 */ u64 gxlink_prios;
    /* +28 */ void* hsd_obj;
    /* +2C */ soundtest_user_data* user_data;
    /* +30 */ void (*user_data_remove_func)(void* data);
    /* +34 */ void* x34_unk;
};
#endif
struct Menu {
    u8 cursor;
    u8 unk1;
    u8 unk2;
    u8 unk3;
    HSD_Text* text;
};
;
struct CountEntry {
    u8 selkind;
    u8 pad[3];
    u32 stat_value;
};
#ifdef M2C
typedef struct Menu_GObj Menu_GObj;
struct Menu_GObj {
    /*  +0 */ u16 classifier;
    /*  +2 */ u8 p_link;
    /*  +3 */ u8 gx_link;
    /*  +4 */ u8 p_priority;
    /*  +5 */ u8 render_priority;
    /*  +6 */ u8 obj_kind;
    /*  +7 */ u8 user_data_kind;
    /*  +8 */ Menu_GObj* next;
    /*  +C */ Menu_GObj* prev;
    /* +10 */ Menu_GObj* next_gx;
    /* +14 */ Menu_GObj* prev_gx;
    /* +18 */ HSD_GObjProc* proc;
    /* +1C */ void (*rendered)(Menu_GObj* gobj, s32 code);
    /* +20 */ u64 gxlink_prios;
    /* +28 */ HSD_JObj* hsd_obj;
    /* +2C */ Menu* user_data;
    /* +30 */ void (*user_data_remove_func)(Fighter* data);
    /* +34 */ void* x34_unk;
};
#else
typedef struct HSD_GObj Menu_GObj;
#endif
struct PlayerInitData {
    s8 ckind; ///< ::CharacterKind
    u8 slot_type; ///< ::Gm_PKind
    s8 stocks;
    u8 color;
    u8 slot;
    s8 spawn_pos;
    s8 spawn_dir;
    u8 sub_color;
    s8 handicap;
    u8 team;
    u8 nametag;
    u8 xB; ///< ::enum_t
    u8 rumble_enabled : 1;
    u8 xC_b1 : 1;
    u8 vs_metal : 1;
    u8 xC_b3 : 1;
    u8 vs_invisible : 1;
    u8 xC_b5 : 1;
    u8 xC_b6 : 1;
    u8 xC_b7 : 1;
    u8 xD_b0 : 1;
    u8 xD_b1 : 1;
    u8 xD_b2 : 1;
    u8 xD_b3 : 1;
    u8 xD_b4 : 1;
    u8 xD_b5 : 1;
    u8 xD_b6 : 1;
    u8 xD_b7 : 1;
    u8 cpu_kind; ///< CPU type
    u8 cpu_level; ///< CPU level
    u16 damage; ///< some damage value
    u16 damage1; ///< some damage value
    u16 hp; ///< hit points, for stamina mode
    float attack_ratio;
    float defense_ratio;
    float model_scale;
};
struct lbl_8046B668_t {
    /* 0x00 */ s8 arr1[0x1C];
    /* 0x1C */ s8 arr2[0x1C];
};
;
typedef struct PerfLabelLine {
    /* 0x00 */ struct PerfLabelLine* next;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ char text[0x80];
} PerfLabelLine; /* size = 0x88 */
;
typedef struct lbl_8046B378_t {
    /* 0x000 */ PerfLabelLine line0;
    /* 0x088 */ PerfLabelLine line1;
} lbl_8046B378_t; /* size = 0x110 */
;
struct StartMeleeRules {
    u32 match_kind : 3; ///< ::MatchKind
    u32 x0_3 : 3; ///< unknown enum
    u32 timer_enabled : 1;
    u32 timer_counts_up : 1; ///< ::bool
    u32 x1_0 : 1;
    u32 x1_1 : 1;
    u32 x1_2 : 1;
    u32 x1_3 : 1;
    u32 x1_4 : 1;
    u32 x1_5 : 1;
    u32 timer_shows_hours : 1; // false=65:00.00, true=1:05:00.00
    u32 friendly_fire : 1; ///< friendly fire on
    u32 is_stock : 1;
    u32 x2_1 : 1;
    u32 x2_2 : 1;
    u32 single_button : 1; ///< single-button mode enabled
    u32 disable_pausing : 1; ///< When set, pausing is disabled for both active
                             ///< gameplay and pause menus. Sourced from the
                             ///< rules pause option and from several game-mode
                             ///< setups.
    u32 x2_5 : 1;
    u32 x2_6 : 1;
    u32 x2_7 : 1;
    u32 x3_0 : 1;
    u32 x3_1 : 1;
    u32 x3_2 : 1;
    u32 x3_3 : 1;
    u32 x3_4 : 1;
    u32 x3_5 : 1;
    u32 x3_6 : 1;
    u32 x3_7 : 1;
    u32 x4_0 : 1; ///< pause camera enabled?
    u32 is_vs : 1; ///< Set only by ::gmVsMelee_EnterVs
    u32 x4_2 : 1;
    u32 x4_3 : 1;
    u32 x4_4 : 1;
    u32 x4_5 : 1;
    u32 x4_6 : 1;
    u32 x4_7 : 1;
    u32 x5_0 : 1;
    u32 x5_1 : 1;
    u32 x5_2 : 1;
    u32 x5_3 : 1;
    u32 x5_4 : 1;
    u32 x5_5 : 1;
    u32 x5_6 : 1;
    u32 x5_7 : 1;
    u8 x6;
    u8 x7; // end graphic / SFX type
    u8 is_teams;
    u8 x9;
    u8 xA;
    s8 item_freq;
    s8 sd_penalty;
    u8 xD;
    u16 stkind;
    u32 time_limit; ///< time limit in seconds
    u8 x14;
    u32 x18;
    u32 x1C_pad[(0x20 - 0x1C) / 4];
    u64 x20; // item mask
    int x28;
    float x2C;
    float x30; ///< damage ratio
    float game_speed; ///< game speed
    void (*on_unpause_override)(
        int); ///< on unpause callback. When set, this method is called with
              ///< the pauser playerId when a player unpauses the match. If not
              ///< set, falls back to #Ground_EnableMatchCamera;
              ///< #StartMeleeRules::x4_0 must also be true.
    void (*on_pause_override)(
        int); ///< on pause callback. When set, this method is called when a
              ///< player presses Start during an unpaused match. Otherwise,
              ///< #gm_EnablePlayerPauseCamera is called;
              ///< #StartMeleeRules::x4_0 must also be true.
    int (*check_for_pauser_override)(
        void); ///< When set, this method is used for checking if a
               ///< player/which player has pressed pause while unpaused.
               ///< Otherwise falls back to #gm_DefaultVSGetPauser;
               ///< #StartMeleeRules::x4_0 must also be true.
    Event on_match_start; ///< on VS match start callback
    Event on_frame_start; ///< ingame pre-frame callback
    Event on_frame_end; ///< ingame post-frame callback
    void (*on_match_end)(u8 outcome); ///< on VS match end callback.
                                      ///< @param outcome ::MatchOutcome
    struct {
        u8 pad_x0[0x10];
        u8 x10_b0 : 1;
        u8 x10_b1 : 1;
    }* x54;
    struct lbl_8046B668_t* x58;
    u8 pad_x5C[0x60 - 0x5C];
};
struct StartMeleeData {
    StartMeleeRules rules;
    PlayerInitData players[6];
};
struct VsModeData {
    /* +0 */ s8 loser;
    /* +1 */ s8 ordered_stage_index;
    /* +2 */ s8 winner;
    /* +3 */ u8 unk_0x3;
    /* +4 */ u8 unk_0x4;
    /* +5 */ u8 unk_0x5;
    /* +6 */ u8 unk_0x6;
    /* +7 */ u8 unk_0x7;
    /* +8 */ StartMeleeData start;
};
typedef enum CSSMatchType {
    VS_MELEE = 0x0,
    VS_CAMERA = 0x1,
    VS_STAMINA = 0x2,
    VS_SUDDEN_DEATH = 0x3,
    VS_GIANT = 0x4,
    VS_TINY = 0x5,
    VS_INVISIBLE = 0x6,
    VS_FIXED_CAMERA = 0x7,
    VS_SINGLE_BUTTON = 0x8,
    VS_LIGHTNING = 0x9,
    VS_SLOWMO = 0xA,
    REG_CLASSIC = 0xB,
    REG_ADVENTURE = 0xC,
    REG_ALLSTAR = 0xD,
    EVENT_MATCH = 0xE,
    STADIUM_TARGET = 0xF,
    STADIUM_HOMERUN = 0x10,
    STADIUM_MULTIMAN_10 = 0x11,
    STADIUM_MULTIMAN_100 = 0x12,
    STADIUM_3_MIN_MELEE = 0x13,
    STADIUM_15_MIN_MELEE = 0x14,
    STADIUM_ENDLESS_MELEE = 0x15,
    STADIUM_CRUEL_MELEE = 0x16,
    TRAINING_MODE = 0x17
} CSSMatchType;
typedef enum CSSPendingSceneChangeKind {
    CSSPendingSceneChange_2 = 2,
} CSSSceneChangeKind;
struct CSSData {
    u16 unk_0x0; ///< 1p port?
    u8 match_type; ///< ::CSSMatchType
    u8 pending_scene_change; ///< ::CSSPendingSceneChangeKind
    u8* ko_counts;
    VsModeData vs;
};
struct CSSModeInfo {
    u16 mode_ffa_frame; // 0x00 - Anim frame used for top-left mode texture
    u16 mode_teams_frame; // 0x02 - Anim frame used for top-left mode texture
    int enter_sfx; // 0x04 - Announcer sfx when entering CSS
};
typedef enum CSSIconState {
    ICONSTATE_LOCKED,
    ICONSTATE_TEMP,
    ICONSTATE_UNLOCKED
} CSSIconState;
typedef enum CSSIconJointId {
    ICONJOINT_DRMARIO = 0x04,
    ICONJOINT_FALCO = 0x08,
    ICONJOINT_GANON = 0x06,
    ICONJOINT_CLINK = 0x0A,
    ICONJOINT_PICHU = 0x0C,
    ICONJOINT_EMBLEM = 0x0E,
    ICONJOINT_MARIO = 0x10,
    ICONJOINT_LUIGI = 0x11,
    ICONJOINT_KOOPA = 0x12,
    ICONJOINT_PEACH = 0x13,
    ICONJOINT_YOSHI = 0x14,
    ICONJOINT_DONKEY = 0x15,
    ICONJOINT_CAPTAIN = 0x16,
    ICONJOINT_FOX = 0x17,
    ICONJOINT_NESS = 0x18,
    ICONJOINT_POPONANA = 0x19,
    ICONJOINT_KIRBY = 0x1A,
    ICONJOINT_SAMUS = 0x1B,
    ICONJOINT_ZELDA = 0x1C,
    ICONJOINT_LINK = 0x1D,
    ICONJOINT_PIKACHU = 0x1E,
    ICONJOINT_PURIN = 0x1F,
    ICONJOINT_MEWTWO = 0x20,
    ICONJOINT_GAMEWATCH = 0x21,
    ICONJOINT_MARS = 0x22
} CSSIconJointId;
/**
 * @brief Identifier for a single selectable character as seen in high-scores
 * or on the CSS.
 *
 * #SelectableCharacterKind mirrors the first @c 0x19 entries of
 * #CharacterKind (i.e. up to and including #CKind_Ganon),
 * but with #CKind_Seak (Sheik) removed and collapsed into
 * #CKind_Zelda under the single #SELKIND_ZELDA_SEAK value.
 * Index @c 0x12 (#SELKIND_ZELDA_SEAK) therefore
 * represents both Zelda and Sheik as a single selectable character.
 *
 * @see #gm_SelKindToCKind
 * @see #gm_CKindToSelKind
 * @see #selkind_to_ckind_map
 * @see #ckind_to_selkind_map
 */
typedef enum SelectableCharacterKind {
    /* 00 */ SELKIND_CAPTAIN, // Captain Falcon (Captain)
    /* 01 */ SELKIND_DONKEY, // Donkey Kong (Donkey)
    /* 02 */ SELKIND_FOX, // Fox
    /* 03 */ SELKIND_GAMEWATCH, // Mr. Game & Watch (GameWatch)
    /* 04 */ SELKIND_KIRBY, // Kirby
    /* 05 */ SELKIND_KOOPA, // Bowser (Koopa)
    /* 06 */ SELKIND_LINK, // Link
    /* 07 */ SELKIND_LUIGI, // Luigi
    /* 08 */ SELKIND_MARIO, // Mario
    /* 09 */ SELKIND_MARS, // Marth (Mars)
    /* 0A */ SELKIND_MEWTWO, // Mewtwo
    /* 0B */ SELKIND_NESS, // Ness
    /* 0C */ SELKIND_PEACH, // Peach
    /* 0D */ SELKIND_PIKACHU, // Pikachu
    /* 0E */ SELKIND_POPONANA, // Ice Climbers (Popo & Nana)
    /* 0F */ SELKIND_PURIN, // Jigglypuff (Purin)
    /* 10 */ SELKIND_SAMUS, // Samus
    /* 11 */ SELKIND_YOSHI, // Yoshi
    /* 12 */ SELKIND_ZELDA_SEAK, // Zelda + Sheik
    /* 13 */ SELKIND_FALCO, // Falco
    /* 14 */ SELKIND_CLINK, // Young Link (CLink)
    /* 15 */ SELKIND_DRMARIO, // Dr. Mario
    /* 16 */ SELKIND_EMBLEM, // Roy (Emblem)
    /* 17 */ SELKIND_PICHU, // Pichu
    /* 18 */ SELKIND_GANON, // Ganondorf (Ganon)
    /* 19 */ SELKIND_COUNT
} SelectableCharacterKind;
struct CSSIcon {
    u8 ft_hudindex; // 0x00 - used for getting combo count @ 8025C0C4
    u8 char_kind; // 0x01 - icons external ID
    u8 state; // 0x02 - 0x0 Not Unlocked, 0x01 Unlocked, 0x02 Unlocked and disp
    u8 anim_timer; // 0x03 - 0xC when char is chosen
    u8 joint_id_vs; // 0x04 - Vs Icon Bg Jobj ID
    u8 joint_id_1p; // 0x05 - Vs Icon Bg Jobj ID
    int sfx; // 0x08
    float bound_l; // 0x0C
    float bound_r; // 0x10
    float bound_u; // 0x14
    float bound_d; // 0x18
};
struct CSSIconsData {
    u8 gnw_name[0x1C]; // 0x0
    CSSModeInfo mode_info[24]; // 0x1c
};
struct CSSDoor {
    u8 emblem_joint; // 0x00
    u8 costume_joint; // 0x01
    u8 team_joint; // 0x02
    u8 door_joint; // 0x03
    u8 bg_joint; // 0x04
    u8 player_indicator_joint; // 0x05 - Nametag window joint id (to scroll and
                               // choose a name)
    u8 slidername_joint; // 0x06 - Slider name joint
    u8 cpuslider_joint; // 0x07 - Used when only CPU is showing
    u8 cpuslider2_joint; // 0x08 - Used when handicap is also showing
    u8 selected_since_load; // 0x09 - Determines when player selected since the
                            // CSS loaded
    u8 team; // 0x0A
    u8 p_kind; // 0x0B - PlayerKind, 0x0 = HMN, 0x1 = CPU, 0x3 = Closed
    u8 p_kind_prev; // 0x0C
    u8 costume; // 0x0D
    u8 sel_icon; // 0x0E - Icon this player has selected
    u8 sel_icon_prev; // 0x0F
    u8 dooranim_timer; // 0x10
    u8 slideranim_timer; // 0x11
    u8 is_hold_cpu_slider; // 0x12
    u8 is_hold_handicap_slider; // 0x13
    float togglebtn_left; // 0x14 - HMN button bound
    float togglebtn_right; // 0x18 - HMN button bound
    float teambtn_left; // 0x1C - Team button bound
    float teambtn_right; // 0x20 - Team button bound
};
struct CSSTagData {
    HSD_Text* text; // 0x00
    HSD_Text* name_ls; // 0x04
    float x8; // 0x08
    float scroll_amt; // 0x0C
    float scroll_force; // 0x10
    int timer; // 0x14
    u8 next_tag; // 0x18
    u8 port; // 0x19
    u8 state; // 0x1A
    u8 use_tag; // 0x1B
};
struct CSSTag {
    CSSTagData* data; // 0x00
    u8 x4; // 0x04
    u8 list_joint; // 0x05
    u8 name_jointl; // 0x06
    u8 x7; // 0x07
    u8 kostar_text_joint; // 0x08
    u8 x9; // 0x09
    u8 xa; // 0x0A
    u8 xb; // 0x0B
};
struct CSSKOStar {
    HSD_Text* text; // 0x00
    float x4; // 0x04
    u8 joint; // 0x08
    u8 joint2; // 0x09
    int xc; // 0x0C
    int x10; // 0x10
    int x14; // 0x14
    int x18; // 0x18
    int x1c; // 0x1C
};
struct CSSDoorsData {
    CSSDoor doors[4]; // 0x00
};
struct CSSDoorsMisc {
    u8 xc0;
    u8 xc1;
    u8 xc2;
    u8 xc3;
    u8 xc4;
    u8 name_list_joint;
    u8 tag_box_joint;
    u8 xc7;
    u8 xc8;
    u8 xc9;
    u8 xca;
    u8 xcb;
    u8 xcc;
    u8 cpu_level;
    u8 cpu_level_shown;
    u8 scroll_flag;
    float cpu_slider_x;
    HSD_Text* xd3;
    float cpudown_left;
    float cpudown_right;
    float cpuup_left;
    float cpuup_right;
    float cpubtn_top;
    float cpubtn_btm;
};
struct CSSDoorsData2 {
    u8 xf0[5];
    u8 stocks;
    u8 xf6;
    u8 xf7;
    float xf8;
    float xfc;
    float x100;
    float x104;
    float x108;
    float x10c;
    CSSKOStar ko_stars[4]; // 0x110
};
struct mnSnap_804A0B90_t {
    char pad_0[0x96000];
};
;
struct SSSData {
    /* +00 */ u8 unk_stage;
    /* +01 */ u8 x1;
    /* +02 */ u8 no_lras;
    /* +03 */ s8 force_stage_id;
    /* +04 */ u8 start_game; ///< ::bool
    /* +08 */ VsModeData vs;
};
struct AnimLoopSettings {
    /* +00 */ f32 start_frame;
    /* +04 */ f32 end_frame;
    /* +08 */ f32 loop_frame; ///< if this is -0.1f, dont loop
};
/// User data for VS Records diagram screen (mnDiagram)
struct Diagram {
    /* 0x00 */ u8 saved_menu; ///< Saved menu ID on entry
    /* 0x01 */ u8 pad_1;
    /* 0x02 */ u16 saved_selection; ///< Saved hovered selection on entry
    /* 0x04 */ u8 anim_state; ///< 0 = idle, 1 = intro anim playing
    /* 0x05 */ u8 pad_5[3];
    /* 0x08 */ HSD_JObj* jobjs[13]; ///< JObj references, filled by lb_80011E24
    /* 0x3C */ u16
        fighter_cursor_pos; ///< Fighter mode cursor (row << 8 | col)
    /* 0x3E */ u16 name_cursor_pos; ///< Name mode cursor (row << 8 | col)
    /* 0x40 */ HSD_GObj* popup_gobj; ///< Popup window GObj (or NULL)
    /* 0x44 */ u8 is_name_mode; ///< 0 = fighter mode, 1 = name mode
    /* 0x45 */ u8 pad_45[3];
    /* 0x48 */ HSD_Text* col_header_text; ///< Column header text object
    /* 0x4C */ HSD_Text* row_header_text; ///< Row header text object
};
struct MenuKindData {
    AnimLoopSettings* anim_loop;
    float start_frame;
    u16* description_indices; ///< array of sis idx's for each selection
    u8 selection_count; ///< number of options/cursors in the menu
    void (*think)(HSD_GObj*);
};
struct MnDiagram2RowLayout {
    /* 0x00 */ Vec3 header_pos;
    /* 0x0C */ Vec3 label_pos;
    /* 0x18 */ Vec3 value_pos;
    /* 0x24 */ Vec3 icon_pos;
    /* 0x30 */ u16 label_ids[24];
    /* 0x60 */ u16 unit_glyph_ids[24];
};
/// User data for VS Records page 2 (character details screen)
/// Total size: 0xC8 bytes
struct Diagram2 {
    /* 0x00 */ u8 saved_menu; ///< Saved menu ID on entry
    /* 0x01 */ u8 pad_1;
    /* 0x02 */ u16 saved_selection; ///< Saved hovered selection on entry
    /* 0x04 */ u8 anim_state; ///< 0 = idle, 1 = intro anim playing
    /* 0x05 */ u8 pad_5[3];
    /* 0x08 */ HSD_JObj* x8;
    /* 0x0C */ HSD_JObj* xC;
    /* 0x10 */ HSD_JObj* x10;
    /* 0x14 */ HSD_JObj* fighter_mode_header; ///< shown in fighter mode
    /* 0x18 */ HSD_JObj* x18;
    /* 0x1C */ HSD_JObj* x1C;
    /* 0x20 */ HSD_JObj* name_mode_header; ///< shown in name mode
    /* 0x24 */ HSD_JObj* x24;
    /* 0x28 */ HSD_JObj* icon_parent; ///< parent for character icons
    /* 0x2C */ HSD_JObj* row0_ref; ///< row 0 position reference
    /* 0x30 */ HSD_JObj* row1_ref; ///< row 1 position reference
    /* 0x34 */ HSD_JObj* down_arrow; ///< hidden when at bottom
    /* 0x38 */ HSD_JObj* up_arrow; ///< hidden when scroll_offset == 0
    /* 0x3C */ HSD_JObj* left_arrow; ///< hidden at first selection
    /* 0x40 */ HSD_JObj* right_arrow; ///< hidden at last selection
    /* 0x44 */ u16 scroll_offset; ///< current scroll position
    /* 0x46 */ u8 selected_fighter_idx; ///< fighter mode selection
    /* 0x47 */ u8 selected_name_idx; ///< name mode selection
    /* 0x48 */ u8 is_name_mode; ///< 0 = fighter, 1 = name mode
    /* 0x49 */ u8 pad_49[3];
    /* 0x4C */ HSD_Text* row_labels[10]; ///< stat category label text
    /* 0x74 */ HSD_Text* row_values[10]; ///< stat value text
    /* 0x9C */ HSD_Text* row_icons[10]; ///< optional stat icons
    /* 0xC4 */ HSD_Text* header_text; ///< entity name header
};
/// User data for VS Records page 3 (stat rankings screen)
/// Total size: 0x78 bytes
struct Diagram3 {
    /* 0x00 */ u8 saved_menu;
    /* 0x01 */ u8 cursor_row;
    /* 0x02 */ u8 pad_2[2];
    /* 0x04 */ u8 scroll_offset;
    /* 0x05 */ u8 anim_state;
    /* 0x06 */ u8 is_name_mode;
    /* 0x07 */ u8 pad_7;
    /* 0x08 */ HSD_JObj* jobjs[10];
    /* 0x30 */ HSD_Text* row_labels[10];
    /* 0x58 */ HSD_Text* title_text;
    /* 0x5C */ HSD_Text* value_text;
    /* 0x60 */ HSD_Text* row_icons[5];
    /* 0x74 */ HSD_GObj* popup_gobj;
};
/// VS Records stat types for mnDiagram2 (page 2 of VS Records menu).
/// Fighter mode shows stats 0x00-0x14 (21 types).
/// Name mode shows stats 0x00-0x17 (24 types, including character icon stats).
typedef enum VSRecordsStatType {
    /* 0x00 */ VSSTAT_TOTAL_KOS, ///< Total KOs across all opponents
    /* 0x01 */ VSSTAT_TOTAL_FALLS, ///< Total falls (deaths)
    /* 0x02 */ VSSTAT_SD_COUNT, ///< Self-destructs (FD+0x34 / ND+0xF0)
    /* 0x03 */ VSSTAT_HIT_PERCENTAGE, ///< Attack accuracy % (calculated)
    /* 0x04 */ VSSTAT_DAMAGE_DEALT, ///< Total damage dealt (FD+0x40 / ND+0xFC)
    /* 0x05 */ VSSTAT_DAMAGE_TAKEN, ///< Total damage received (FD+0x44 /
                                    ///< ND+0x100)
    /* 0x06 */ VSSTAT_DAMAGE_RECOVERED, ///< Damage healed (FD+0x48 / ND+0x104)
    /* 0x07 */ VSSTAT_PEAK_DAMAGE, ///< Highest % survived (FD+0x4C / ND+0x108)
    /* 0x08 */ VSSTAT_MATCH_COUNT, ///< Total matches played (FD+0x4E /
                                   ///< ND+0x10A)
    /* 0x09 */ VSSTAT_VICTORIES, ///< Total wins (FD+0x50 / ND+0x10C)
    /* 0x0A */ VSSTAT_LOSSES, ///< Total losses (FD+0x52 / ND+0x10E)
    /* 0x0B */ VSSTAT_PLAY_TIME, ///< Total play time in frames (FD+0x54 /
                                   ///< ND+0x110)
    /* 0x0C */ VSSTAT_PLAY_PERCENTAGE, ///< % of total VS play time
                                       ///< (calculated)
    /* 0x0D */ VSSTAT_AVG_PLAYERS, ///< Average player count (calculated)
    /* 0x0E */ VSSTAT_WALK_DISTANCE, ///< Distance walked in ft (FD+0x5C /
                                       ///< ND+0x118)
    /* 0x0F */ VSSTAT_RUN_DISTANCE, ///< Distance run in ft (FD+0x60 /
                                       ///< ND+0x11C)
    /* 0x10 */ VSSTAT_FALL_DISTANCE, ///< Distance fallen in ft (FD+0x64 /
                                       ///< ND+0x120)
    /* 0x11 */ VSSTAT_PEAK_HEIGHT, ///< Max height reached in ft (FD+0x68 /
                                       ///< ND+0x124)
    /* 0x12 */ VSSTAT_COINS_COLLECTED, ///< Coins picked up (FD+0x6C /
                                       ///< ND+0x128)
    /* 0x13 */ VSSTAT_COINS_SWIPED, ///< Coins stolen from opponents (FD+0x70 /
                                    ///< ND+0x12C)
    /* 0x14 */ VSSTAT_COINS_LOST, ///< Coins lost to opponents (FD+0x74 /
                                    ///< ND+0x130)
    /* 0x15 */ VSSTAT_MOST_PLAYED, ///< Most played fighter (Name mode only,
                                    ///< icon)
    /* 0x16 */ VSSTAT_SECOND_PLAYED, ///< 2nd most played fighter (Name mode
                                     ///< only, icon)
    /* 0x17 */ VSSTAT_LEAST_PLAYED, ///< Least played fighter (Name mode only,
                                     ///< icon)
    VSSTAT_COUNT_FIGHTER = 0x15, ///< Number of stats in fighter mode
    VSSTAT_COUNT_NAME = 0x18, ///< Number of stats in name mode
} VSRecordsStatType;
typedef struct GlyphVariantEntry {
    /* 0x00 */ u8 selection;
    /* 0x01 */ u8 pad_01[3];
    /* 0x04 */ HSD_JObj* jobjs[7];
    /* 0x20 */ HSD_Text* text;
} GlyphVariantEntry; /* size = 0x24 */
typedef struct NameNewEntry {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 x1;
    /* 0x02 */ u8 x2;
    /* 0x03 */ u8 x3;
    /* 0x04 */ HSD_JObj* jobjs[19];
    /* 0x50 */ u8 mode;
    /* 0x51 */ u8 last_key_sel;
    /* 0x52 */ u8 pad_52[2];
    /* 0x54 */ HSD_GObj* variant_gobj;
    /* 0x58 */ u8 cursor_pos;
    /* 0x59 */ u8 name_index;
    /* 0x5A */ u8 auto_history[5];
    /* 0x5F */ u8 pad_5F;
    /* 0x60 */ HSD_Text* key_text;
    /* 0x64 */ HSD_Text* name_disp_text;
    /* 0x68 */ HSD_Text* desc_text;
} NameNewEntry; /* size = 0x6C */
/// seems like each menu probably has its own struct, and isnt just #Menu
struct MnInfoData {
    /* +00 */ u8 scroll_idx;
    /* +04 */ u32 anim_timer; ///< decrements from 10 when transitioning from
                              ///< main menu to special menu
    /* +08 */ HSD_Text*
        left_column[4]; ///< date and time of achievement unlock
    /* +18 */ HSD_Text* right_column[4]; ///< achievement
    /* +28 */ HSD_Text* description;
};
struct soundtest_user_data {
    u8 unk0;
    u8 unk1;
    u8 unk2;
    u8 unk3;
    u16 unk4;
    f32 unk8;
    f32 unkC;
    HSD_Text* unk10;
    HSD_Text* unk14;
    HSD_Text* unk18;
    HSD_Text* unk1C;
};
#define GM_NAMETAG_BANK_COUNT 7
#define GM_NAMETAG_BANK_SIZE 19
/// @deprecated Replace with inline bitfields
typedef union UnkFlagStruct {
    u8 byte;
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    };
} UnkFlagStruct;
struct UnkMultimanData {
    u16 x0_0 : 1;
    u16 x2;
    int x4;
};
struct DebugGameOverData {
    /* 00 */ u32 x0;
    /* 04 */ int x4;
    /* 08 */ u32 x8;
    /* 0C */ int xC;
    /* 10 */ u32 ckind;
    /* 14 */ u8 slot;
    /* 15 */ u8 x15;
    /* 16 */ u16 x16;
    /* 18 */ u16 x18;
};
;
typedef struct un_804A1F48_t {
    u16 x0;
    u16 x2;
    s32 x4;
    M2C_UNK x8;
} un_804A1F48_t;
;
struct GameSceneInfo {
    /**
     * The #GameSceneKind associated with this scene. This is the value
     * matched by #gm_FindGameSceneHandler to look up the corresponding
     * #GameScene supplying the #GameScene::on_enter, #GameScene::on_exit,
     * and #GameScene::on_frame callbacks invoked for this scene. Not to be
     * confused with #GameModeState::id, which is the scene graph
     * traversal index.
     */
    /* +0 */ u8 scene_kind; ///< ::GameSceneKind
    /* +4 */ void* enter_data; ///< data passed to GameScene::on_enter
    /* +8 */ void* exit_data; ///< data passed to GameScene::on_exit
};
/**
 * @note Colloquially known as "Minor Scene"
 *
 * A single entry in a #GameMode's scene graph. Each scene is looked up by
 * its #GameModeState::id during scene graph traversal. The scene graph is
 * walked comparing each entry's @c idx against #GameRouting::curr_scene_idx,
 * and #nextScene advances to the next scene whose @c idx is greater than the
 * current one. An @c idx value of @c 0xFF terminates a collection of
 * GameModeState.
 */
struct GameModeState {
    /**
     * Scene graph index searched against #GameRouting::curr_scene_idx during
     * scene graph traversal. This is the value matched when the scene graph is
     * walked to find the current scene. Not to be confused with
     * @c GameModeState::info.scene_kind, which is the scene's
     * #GameSceneKind.
     */
    /* +0 */ u8 id; ///< locally defined by game mode
    /* +1 */ u8 preload; ///< ::lbDvdPreloadKind
    /* +2 */ u16 flags;
    /* +4 */ void (*on_enter)(GameModeState*);
    /* +8 */ void (*on_exit)(GameModeState*);
    GameSceneInfo info;
};
/// @note Colloquially known as "Major Scene"
struct GameMode {
    u8 preloaded; ///< ::bool
    u8 kind; ///< ::GameModeKind
    void (*on_load)(void);
    void (*on_unload)(void);
    void (*on_init)(void);
    GameModeState* states;
};
/// @note Colloquially known as "Minor Scene"
struct GameScene {
    u8 kind; ///< ::GameSceneKind
    /// Referenced from @c gm_801A4014 when passed to #gm_801A4D34.
    void (*on_frame)(void);
    void (*on_enter)(void*);
    void (*on_exit)(void*);
     M2C_UNK unused;
};
;
struct GamePrefs {
    /* +0 */ u8 item_freq;
    /* +8 */ u64 item_mask;
    /* +10 */ u8 rumble_enabled[4];
    /* +14 */ s8 sound_balance;
    /* +15 */ u8 deflicker;
    /* +16 */ u8 saved_language; /* 0x1CC6 */
    /* +18 */ u32 stage_mask;
};
/// Match statistics shared by #FighterData and #NameTagData.
struct GmStats {
    /* 0x00 */ u16 sd_count;
    /* 0x02 */ u8 pad_2[2];
    /* 0x04 */ u32 attacks_hit;
    /* 0x08 */ u32 attacks_total;
    /* 0x0C */ s32 damage_dealt;
    /* 0x10 */ s32 damage_taken;
    /* 0x14 */ s32 damage_recovered;
    /* 0x18 */ u16 peak_damage;
    /* 0x1A */ u16 match_count;
    /* 0x1C */ u16 victories;
    /* 0x1E */ u16 losses;
    /* 0x20 */ u32 play_time;
    /* 0x24 */ u32 total_player_count;
    /* 0x28 */ s32 walk_distance;
    /* 0x2C */ s32 run_distance;
    /* 0x30 */ s32 fall_distance;
    /* 0x34 */ s32 peak_height;
    /* 0x38 */ s32 coins_collected;
    /* 0x3C */ s32 coins_swiped;
    /* 0x40 */ s32 coins_lost;
};
;
struct FighterData {
    /* 0x00 */ u16 fighter_kos[SELKIND_COUNT];
    /* 0x32 */ u8 padding_0x32[2];
    /* 0x34 */ struct GmStats stats;
    /* 0x78 */ s8 x78;
    /* 0x79 */ s8 x79;
    /* 0x7A */ UnkFlagStruct x7A;
    /* 0x7B */ s8 x7B;
    /* 0x7C */ struct {
        u16 b0 : 1;
        u16 b1 : 1;
        u16 b2 : 1;
        u16 b3 : 1;
        u16 b4 : 1;
        u16 b5 : 1;
        u16 b6 : 1;
        u16 b789 : 3; ///< stocks
        u16 b10_to_12 : 3; ///< stocks
        u16 b13_to_15 : 3; ///< stocks
        u16 x7E;
        u8 x80;
        u8 x81;
        u8 x82;
        s8 x83;
        s32 x84;
        s32 x88;
        s32 x8C;
        s32 x90;
        u32 x94;
        s32 x98;
        s32 x9C;
        u16 xA0;
        u16 xA2;
        s32 xA4;
        s32 xA8;
    } x7C;
};
struct NameTagData {
    /* 0x000 */ u16 vs_kos[120];
    /* 0x0F0 */ struct GmStats stats;
    /* 0x134 */ u32 play_time_by_fighter[SELKIND_COUNT];
    /* 0x198 */ char namedata[8];
    /* 0x1A0 */ s8 x1A0;
    /* 0x1A1 */ u8 rumble_enabled;
    /* 0x1A2 */ s8 x1A2;
    /* 0x1A3 */ u8 padding_x1A2;
};
struct NameTagDataBank {
    struct NameTagData inner[19];
};
struct GameRules {
    /* 0x00 */ u8 force_main_menu;
    /* 0x01 */ u8 bgm;
    /* 0x02 */ u8 mode;
    /* 0x03 */ u8 time_limit;
    /* 0x04 */ u8 stock_count;
    /* 0x05 */ u8 handicap;
    /* 0x06 */ u8 damage_ratio;
    /* 0x07 */ u8 stage_sel; ///< ::StageSelectMode
    /* 0x08 */ u8 stock_time_limit;
    /* 0x09 */ u8 friendly_fire;
    /* 0x0A */ u8 pause;
    /* 0x0B */ u8 score_display;
    /* 0x0C */ u8 unk_xc;
    /* 0x0D */ u8 xD;
    /* 0x0E */ u8 xE;
    /* 0x0F */ u8 xF;
    /* 0x10 */ u8 unk_x10;
    /* 0x11 */ u8 x11;
    /* 0x12 */ u8 x12;
    /* 0x13 */ u8 x13;
    /* 0x14 */ s32 unk_14; /* inferred */
}; /* size = 0x18 */
;
struct gmm_retval_ED98 {
    u32 x0;
    u32 x4;
    u8 padding[0x4];
    s32 xC;
    s32 x10;
    s32 x14;
    s32 x18;
    s32 x1C;
};
struct gmm_retval_EDB0 {
    s32 x0;
    s32 x4;
};
struct gmm_retval_EDBC {
    s32 x0;
    u32 x4;
    s32 x8;
    u32 xC;
    int x10;
    u32 x14;
    u16 x18[SELKIND_COUNT];
    s32 x4C[4];
    u8 padding_x4C[0xB0 - 0x4C - 4 * 4];
    s32 xB0[SELKIND_COUNT];
    int x114[SELKIND_COUNT];
};
struct gmm_x1868_1A8_t {
    /* 0x01A8 +0 */ u32 x0;
    /* 0x01AC +4 */ u8 x4; ///< true/false
    /* 0x01AD +5 */ u8 x5;
    /* 0x01AE +6 */ u8 x6;
};
typedef struct {
    /* 0x0000 */ u16 unlocked_characters; ///< unlocked characters bitmask
    /* 0x0002 */ u16 x186A; ///< unlocked stages bitmask
    /* 0x0004 */ u8 x186C; ///< unlocked features bitmask - score
                           ///< display/random stage etc...
    /// @remarks this would make sense to be apart of x186C, but seems unused.
    // perhaps features got removed from the unlock system? item switch comes
    // to mind as plausible
    /* 0x0005 */ char pad_5[3];
    /* 0x0008 */ struct gmm_retval_ED98 unk_8;
    /* 0x0028 */ struct gmm_retval_EDB0 unk_28;
    /* 0x0030 */ struct gmm_retval_EDBC unk_30;
    gmm_x1868_1A8_t unk_1A8;
    /* 0x01B0 */ u32 time_matches;
    /* 0x01B4 */ u32 stock_matches;
    /* 0x01B8 */ u32 coin_matches;
    /* 0x01BC */ u32 bonus_matches;
    /* 0x01C0 */ u32 stamina_matches;
    /* 0x01C4 */ u32 match_resets;
    /* 0x01C8 */ s32 x1A30;
    /* 0x01CC */ s32 x1A34;
    /* 0x01D0 */ s32 x1A38;
    /* 0x01D4 */ s32 x1A3C;
    /* 0x01D8 */ s32 x1A40;
    /* 0x01DC */ s32 x1A44;
    /* 0x01E0 */ u32 x1A48;
    /* 0x01E4 */ s32 x1A4C;
    /* 0x01E8 */ s32 x1A50;
    /* 0x01EC */ int x1A54;
    /* 0x01F0 */ s32 x1A58;
    /* 0x01F4 */ s32 x1A5C;
    /* 0x01F8 */ s32 x1A60;
    /* 0x01FC */ s32 x1A64;
    /* 0x0200 */ s64 x1A68;
    /* 0x0208 */ s32 x1A70[4];
    /* 0x0218 */ u8 padding_x1A70[0xBC];
    /* 0x02D4 */ u8 x1B3C;
    /* 0x02D5 */ char pad_2D5[3]; /* maybe part of x1B3C[4]? */
    /* 0x02D8 */ u32 x1B40[3];
    /* 0x02E4 */ u32 x1B4C[3];
    /* 0x02F0 */ u32
        x1B58[(293 + 31) / 32]; ///< one bit per trophy
    /* 0x0318 */ u32 x1B80[66];
    /* 0x0420 */ u32 x1C88[3];
    /* 0x042C */ u8 padding_x1C88[0x1C];
    /* 0x0448 */ struct GamePrefs x1CB0;
    /* 0x0468 */ s16 trophy_count;
    /* 0x046A */ u16 trophy_category_flags;
    /* 0x046C */ u16 trophy_flags[293];
    /* 0x06B6 */ u8 padding_trophy_flags[0xE];
    /* 0x06C4 */ struct FighterData x1F2C[SELKIND_COUNT];
} GmSaveData;
;
struct GmCardData {
    /*    +0 */ GmSaveData save_data;
    /* +1760 */ struct NameTagDataBank nametag_banks[7];
};
struct gmm_x0_528_t {
    /* 0x051C */ s8 c_kind;
    /* 0x051D */ u8 stocks;
    /* 0x051E */ u8 color;
    /* 0x051F */ u8 cpu_level;
    /* 0x0520 */ u8 nametag;
    /* 0x0521 */ u8 x5;
};
struct gmm_x0_584_t {
    /* 0x0584 */ s8 unk_584;
    /* 0x0585 */ u8 unk_585;
    /* 0x0586 */ u8 unk_586;
    /* 0x0587 */ s8 unk_587;
};
struct EventData {
    /* 0x0530 */ u8 x0;
    /* 0x0531 */ u8 x1;
    /* 0x0532 */ s8 x2;
    /* 0x0533 */ u8 x3;
    /* 0x0534 */ u8 nametag;
    /* 0x0535 */ u8 unk_535;
    /* 0x0536 */ u8 x6;
    /* 0x0537 */ u8 x7;
    /* 0x0538 */ s8 x8;
    /* 0x0539 */ s8 x9;
    /* 0x053A */ s8 xA;
    /* 0x053B */ u8 xB_0 : 1;
    /* 0x053B */ u8 xB_1 : 1;
    /* 0x053B */ u8 xB_2 : 1;
    /* 0x053B */ u8 xB_3 : 1;
    /* 0x053B */ u8 xB_4 : 1;
    /* 0x053B */ u8 xB_5 : 1;
    /* 0x053B */ u8 xB_6 : 1;
    /* 0x053B */ u8 xB_7 : 1;
    /* 0x053C */ int xC;
    /* 0x0540 */ int x10;
    /* 0x0544 */ int x14;
    /* 0x0548 */ int x18;
    /* 0x054C */ float x1C;
    /* 0x0550 */ int x20;
    /* 0x0554 */ int x24;
    /* 0x0558 */ int x28;
    /* 0x055C */ int x2C; // timer seconds
    /* 0x0560 */ int x30;
    /* 0x0564 */ int x34;
    /* 0x0568 */ u8 x38;
    /* 0x056C */ int x3C;
    /* 0x0570 */ int x40;
    /* 0x0574 */ s8 x44;
    /* 0x0575 */ u8 x45;
    /* 0x0578 */ StKind x48;
    /* 0x057C */ s8 x4C[4]; ///< CharacterKind
    /* 0x0580 */ u8 x50[4]; ///< character color
    struct gmm_x0_584_t unk_584;
};
struct gmm_x0_vsdata {
    gmm_x0_528_t unk_51C, unk_522, unk_528;
    struct EventData unk_530;
};
/// Per-trophy unlock state, indexed by trophy id.
struct gmm_x0_44_t {
    /* 0x0044 */ u32
        flags[(293 + 31) / 32]; ///< one bit per trophy
    /* 0x006C */ u32 times[293]; ///< #lbTime_GetTimeInSeconds
    /* 0x0500 */ char pad_500[0x1C];
};
struct gmm_x0_vsmodes {
    /* 0x0588 */ s8 nametags[4];
    /* 0x0590 */ VsModeData table[GmVsMode_Count]; ///< indexed by ::GmVsMode
};
struct gmm_x0 {
    /* 0x0000 */ u8 language;
    /* 0x0001 */ u8 unk_1;
    /* 0x0002 */ u8 unk_2;
    /* 0x0003 */ char pad_3[0x36]; /* maybe part of x1[0x38]? */
    /* 0x0039 */ u8 x39[0xB];
    /* 0x0044 */ struct gmm_x0_44_t unk_44;
    /** @remarks `gmMainLib_8015CDC8` hands out a pointer to the start of this
     * block and its callers read on into `unk_530`, so the three slots and the
     * event data form one object. */
    struct gmm_x0_vsdata vs;
    /** @remarks Directly follows #gmm_x0_vsdata; `gmMainLib_8015DBF4` and
     * `gmMainLib_8015EA80` walk the table from a pointer to that block. */
    struct gmm_x0_vsmodes modes;
    /* 0x1850 */ GameRules x1850;
    /* 0x1898 */ struct GmCardData thing;
};
;
;
;
;
;
struct Placeholder_8016AE38_flags_2 {
    /* +0:0 */ u8 x0_b0_b2 : 3;
    /* +0:3 */ u8 x0_b3 : 1;
    /* +0:4 */ u8 x0_b4 : 1;
    /* +0:5 */ u8 x0_b5 : 1;
    /* +0:6 */ u8 x0_b6 : 1;
    /* +0:7 */ u8 x0_b7 : 1;
    /* +1:0 */ u8 x1_b0 : 1;
    /* +1:1 */ u8 x1_b1 : 1;
    /* +1:2 */ u8 x1_b2 : 1;
    /* +1:3 */ u8 x1_b3 : 1;
    /* +1:4 */ u8 x1_b4 : 1;
    /* +1:5 */ u8 x1_b5 : 1;
    /* +1:6 */ u8 x1_b6 : 1;
    /* +1:7 */ u8 x1_b7 : 1;
    /* +2:0 */ u8 x2_b0 : 1;
    /* +2:1 */ u8 x2_b1 : 1;
    /* +2:2 */ u8 x2_b2 : 1;
    /* +2:3 */ u8 x2_b3 : 1;
    /* +2:4 */ u8 x2_b4 : 1;
    /* +2:5 */ u8 x2_b5 : 1;
    /* +2:6 */ u8 x2_b6 : 1;
    /* +2:7 */ u8 x2_b7 : 1;
};
struct lbl_8046B6A0_FighterMatchInfoFlags {
    u8 x4_b0 : 1; ///< metal
    u8 x4_b1 : 1;
    u8 x4_b2 : 1; ///< invisible
    u8 x4_b3 : 1;
    u8 x4_b4 : 1; ///< Zelda/Sheik transforming on load
    u8 x4_b5 : 1;
    u8 x4_b6 : 1;
    u8 x4_b7 : 1;
};
struct VsSceneFighter {
    u8 x0; ///< CharacterKind
    u8 x1;
    u8 slot_type;
    s8 spawn_point;
    union {
        struct {
            u8 x4_b0 : 1; ///< metal
            u8 x4_b1 : 1;
            u8 x4_b2 : 1; ///< invisible
            u8 x4_b3 : 1;
            u8 x4_b4 : 1; ///< Zelda/Sheik transforming on load
            u8 x4_b5 : 1;
            u8 x4_b6 : 1;
            u8 x4_b7 : 1;
        };
        struct lbl_8046B6A0_FighterMatchInfoFlags flags;
    };
    u8 x5;
    u16 x6;
    u8 x8;
    u8 x9;
    u8 respawn_timer;
    u8 xB;
    u16 xC;
};
struct datetime {
    u16 year;
    u8 month, day, hour, minute, second;
};
struct gm_8017DB6C_arg0_t {
    /* +0 */ u8 x0;
    /* +1 */ u8 x1;
    /* +2 */ u8 _1[0xC - 0x2];
};
;
struct gmMainLib_8046B0F0_t {
    /* 00 */ bool skip_intro; ///< Skips the opening movie when booting
    /* 04 */ bool resetting; ///< reset switch pressed
    /* 08 */ bool progressive; ///< true = progressive, false = interlaced
    /* 0C */ bool xC; // movie playback done, maybe?
    /* 10 */ int x10, x14;
};
typedef struct gm_803DF94C_t {
    void (*x0)(HSD_GObj*);
    void (*x4)(int);
} gm_803DF94C_t;
struct MatchTeamData {
    /* 0x00 */ int score;
    /* 0x04 */ int subscore;
    /* 0x08 */ u8 is_big_loser;
    /* 0x09 */ u8 is_small_loser;
    /* 0x0A */ u8 active;
}; // padded to 0x0C
;
struct MatchPlayerData {
    u8 pkind; ///< ::Gm_PKind
    s8 ckind; ///< ::CharacterKind
    s8 ftkind; ///< ::FighterKind
    union {
        struct {
            u8 x3_b0 : 6;
            u8 x3_b6 : 1;
            u8 x3_b7 : 1;
        };
        u8 x3;
    };
    u8 x4;
    u8 is_big_loser;
    u8 is_small_loser;
    u8 team;
    s8 stocks;
    u8 x9;
    u16 self_destructs;
    u16 percent;
    u16 xE;
    u16 kills[4];
    u16 x18;
    s32 x1C;
    u32 x20;
    int x24;
    u32 x28;
    int score;
    u32 x30;
    u8 x34;
    u8 x35_pad[0x38 - 0x35];
    u32 x38;
    u32 x3C;
    u32 x40;
    u32 x44;
    u32 x48;
    u32 x4C;
    u32 x50;
    u32 x54;
    u32 x58;
    u32 x5C;
    u32 x60;
    u32 x64;
    u32 x68;
    u32 x6C;
    u32 x70;
    u32 x74;
    u32 x78;
    u32 x7C;
    u32 x80;
    u32 x84;
    u32 x88;
    u32 x8C;
    u32 x90;
    u32 x94;
    u32 x98;
    int x9C;
    int xA0;
    u32 xA4;
};
;
struct UnkResultPlayerData {
    u8 x0[0x101];
    int x104[0x101];
};
struct MatchEnd {
    /* 0x00 */ u32 x0; ///< timer
    /* 0x04 */ u8 outcome; ///< ::MatchOutcome
    /* 0x05 */ u8 match_kind; ///< ::MatchKind
    /* 0x06 */ u8 is_teams; ///< @todo enum between teams/not-teams
    /* 0x07 */ u8 x7;
    /* 0x08 */ u32 frame_count;
    /* 0x0C */ s8 sd_penalty;
    /* 0x0D */ u8 n_winners;
    /* 0x0E */ u8 n_team_winners;
    /* 0x0F */ u8 loser;
    /* 0x10 */ u8 winners[6];
    /* 0x16 */ u8 team_winners[5];
    /* 0x1B */ struct MatchTeamData team_standings[5];
    /* 0x58 */ struct MatchPlayerData player_standings[6];
    /* 0x448 */ u8 _x448[4]; // offset by 1 because of the previous struct
    /* 0x44C */ struct UnkResultPlayerData x44C[6]; // 0x508 * 6 = 0x1820
};
;
struct MatchExitInfo {
    int x0;
    u32 x4; ///< remaining time shown on timer, in frames
    int x8;
    MatchEnd match_end;
};
;
struct ResultsMatchInfo {
    u8 x0_0 : 1;
    u8 x0_1 : 1;
    u8 x1;
    int x4;
    MatchEnd match_end;
};
/// @todo This appears within other structs too, need to consolidate.
/// Also not yet clear how many fields this has.
typedef struct gmPlayerData {
    /* 00 */ s8 ckind;
    /* 01 */ u8 color;
    /* 02 */ u8 cpu_level;
    /* 03 */ u8 slot;
    /* 04 */ u8 nametag;
    /* 05 */ u8 stocks;
    /* 06 */ u8 x6;
    /* 07 */ u8 mode; ///< @todo Actually ::GameModeState::id
} gmPlayerData;
typedef struct Unk1PData_x24 {
    /* 24 */ s8 ckind;
    /* 25 */ u8 color;
    /* 26 */ u8 cpu_level;
    /* 27 */ u8 cpu_kind;
    /* 28 */ float attack_ratio;
    /* 2C */ float defense_ratio;
} Unk1PData_x24;
typedef struct Unk1PData_xC {
    /* 0C */ u8 xC;
    /* 0D */ u8 xD;
    /* 0E */ u8 xE;
    /* 0F */ u8 xF;
    /* 10 */ u8 x10;
    /* 11 */ u8 x11;
    /* 12 */ u8 x12;
    /* 13 */ u8 x13;
    /* 14 */ u16 x14;
    /* 18 */ int x18;
    /* 1C */ int x1C;
    /* 20 */ u32 x20;
    Unk1PData_x24 x24[3];
} Unk1PData_xC;
struct Unk1PData {
    struct gmPlayerData x0;
    /* 08 */ u8 x8;
    /* 09 */ u8 x9;
    /* 0A */ u8 xA;
    /* 0B */ u8 xB;
    /* 0C */ Unk1PData_xC xC;
    /* 48 */ u8 (*x48)(u8, u8);
    /* 4C */ u8 (*x4C)(u8, u8, u8);
    /* 50 */ u8 (*x50)(u8, u8, u8);
    /* 54 */ u8 (*x54)(u8, u8, u8);
    /* 58 */ u8 (*x58)(u8, u8, u8);
    /* 5C */ u8 (*x5C)(u8, u8, u8);
    /* 60 */ u8 (*x60)(u8, u8, u8);
    /* 64 */ float (*x64)(u8, u8);
    /* 68 */ float (*x68)(u8, u8);
    /* 6C */ float (*x6C)(u8, u8);
    /* 70 */ float (*x70)(u8, u8);
};
struct UnkAdventureData {
    /*  +0 */ struct Unk1PData x0;
    /* 74 */ u8 x74;
    /* 75 */ u8 x75;
    /* 76 */ u8 x76;
    /* 77 */ u8 x77;
    /* 78 */ u8 x78;
    /* 79 */ s8 pad_x79[0x7C - 0x79];
    /* 7C */ u8 x7C; ///< CharacterKind
    /* 7D */ s8 pad_x7D[0x80 - 0x7D];
};
;
struct UnkAllstarData {
    /*  +0 */ struct Unk1PData x0;
    /* +74*/ u16 x74; ///< current percent
    /* +76*/ u8 x76[CKind_Playable_Count]; ///< character id array
    /* +90*/ u8 x90[4];
    /* +94*/ u8 _94[2];
    /* +94*/ u8 x96[6];
    /* +9C*/ u32 x9C; ///< current time (frames)
};
;
struct TmData {
    int cur_option;
    int match_type;
    int combatants;
    int entrants;
    int hmn_cpu_count;
    int stage_selection_type;
    int cpu_level;
    s32 x1C;
    int x20;
    int x24;
    u32 x28; ///< stage id
    u8 x2C;
    u8 x2D;
    u8 x2E;
    u8 x2F;
    u8 x30;
    u8 x31;
    u8 x32;
    u8 x33;
    u8 pad_x34[0x37 - 0x34];
    struct TmUnkMenuData {
        u8 x0;
        u8 x1;
        u8 x2;
        u8 x3;
        u8 x4;
        u8 x5;
        u8 x6;
        u8 x7;
        u8 x8;
        u16 x9;
        u8 xB;
        u8 xC;
        u8 xD;
        u8 xE;
        u8 xF;
        u8 pad_X10[0x12 - 0x10];
    } x37[64];
    u8 pad_x4B7[0x4B8 - 0x4B7];
    struct UnkSelections {
        u8 x0; ///< slot type
        u8 x1; ///< CSSIconHud
        u8 x2;
        u8 x3; ///< color
        u8 x4; ///< CPU level
        u8 x5;
        u16 x6;
        u8 pad_x4[0xA - 0x8];
    } x4B8[4];
    HSD_Text* x4E0;
    HSD_Text* x4E4;
    HSD_Text* x4E8[6];
    HSD_Text* x500[6];
    HSD_Text* x518[3];
    HSD_Text* x524[4];
    HSD_Text* x534[3];
    u8 pad_x540[0x574 - 0x540];
};
;
struct NameData {
    // a lot of this is shared with a struct for character stats as well
    /* x0F0 */ s32 self_destructs;
    /* x0F4 */ s32 attacks_hit;
    /* x0F8 */ s32 attacks_total;
    /* x0FC */ s32 damage_given;
    /* x100 */ s32 damage_taken;
    /* x104 */ s32 damage_recovered;
    /* x108 */ s16 peak_damage;
    /* x10A */ s16 matches;
    /* x10C */ s16 victories;
    /* x10E */ s16 losses;
    /* x110 */ s32 play_time; // in minutes
    /* x114 */ s32 x114;
    /* x118 */ s32 ground_distance; // in meters
    /* x11C */ s32 jump_distance;
    /* x120 */ s32 drop_distance;
    /* x124 */ s32 flight_distance;
    /* x128 */ s32 coin_points;
    /* x12C */ s32 swiped_coins;
    /* x130 */ s32 lost_coins;
    /* x1A1 */ bool rumble_toggle;
    /* x198 */ void* x198; // some kind of text representation of the name
};
struct CameraVsData {
    u32* x0; ///< state? gets set on button presses in OnFrame
    union {
        struct {
            HSD_Text* slot_a;
            HSD_Text* slot_b;
            HSD_Text* bottom_text;
        };
        HSD_Text* text[3];
    };
};
struct TmVsData {
    StKind stkind;
    Gm_PKind slot_type[4];
    u32 char_id[4];
    u32 color[4];
};
struct gm_DbPauseInputHandlers {
    /*  +0 */ Predicate check_pause;
    /*  +4 */ Predicate check_framestep;
};
struct gm_801677C0_s {
    /*  +0 */ u8 x0;
    /*  +1 */ u8 x1;
    /*  +2 */ u8 x2;
    /*  +3 */ u8 x3;
    /*  +4 */ struct gm_DbPauseInputHandlers db_input;
    /* +20 */ u64 unk_20;
    /* +28 */ u64 unk_28;
    /* +30 */ void (*pre_gobj_proc)(void);
    /* +34 */ int unk_34;
    /* +38 */ u8 unk_38_0 : 1;
    /* +38 */ u8 unk_38_1 : 1;
};
struct gm_80479D58_t {
    /*  +0 */ u32 unk_0;
    /*  +4 */ u32 unk_4;
    /*  +8 */ u32 unk_8;
    /*  +C */ int unk_C;
    /* +10 */ struct gm_801677C0_s unk_10;
};
struct ResultsPlayerData {
    /* +00 */ u8 x0_0 : 1; ///< confirmed flag
    /* +00 */ u8 x0_1 : 1;
    /* +00 */ u8 x0_2 : 1;
    /* +00 */ u8 x0_3 : 1;
    /* +00 */ u8 x0_4 : 1;
    /* +00 */ u8 x0_567 : 3;
    /* +01 */ u8 page;
    /* +02 */ u16 x2;
    /* +04 */ f32 scroll_offset;
    /* +08 */ HSD_GObj* fighter_gobj;
    /* +0C */ HSD_GObj* camera;
    /* +10 */ HSD_Text* stats_text[3][10]; ///< 3 pages with 10 entries?
    // /* +10 */ HSD_Text* stats_x10[10]; ///< these text arrays are the
    // scrollable stats
    // /* +3C */ HSD_Text* stats_x3C[10];
    // /* +60 */ HSD_Text* stats_x60[10];
    /* +88 */ HSD_Text* ko_count;
    /* +8C */ HSD_Text* ko_time;
    /* +90 */ HSD_JObj* jobjs[15];
    /* +CC */ Vec3 stats_position;
};
struct ResultsData {
    /* +00 */ u8 x0_0 : 1;
    /* +00 */ u8 x0_1 : 1;
    /* +00 */ u8 x0_23 : 2; ///< phase (0=idle, 1=init, 2=active)
    /* +00 */ u8 x0_4 : 1;
    /* +00 */ u8 x0_5 : 1;
    /* +00 */ u8 x0_6 : 1;
    /* +00 */ u8 x0_7 : 1;
    /* +01 */ u8 x1; ///< some sort of state
    /* +02 */ u8 num_pages;
    /* +03 */ u8 x3;
    /* +04 */ u8 x4; ///< winner?
    /* +05 */ u8 x5; ///< team winner?
    /* +06 */ u8 x6; ///< also winner?
    /* +08 */ s32 x8;
    /* +0C */ f32 xC;
    /* +10 */ SceneDesc* pnlsce;
    /* +14 */ SceneDesc* flmsce;
    /* +18 */ HSD_GObj* x18; ///< main proc?
    /* +1C */ HSD_CObj* cobj;
    /* +20 */ HSD_JObj* x20; ///< winner logo?
    /* +24 */ HSD_JObj* x24;
    /* +28 */ HSD_JObj* x28;
    /* +2C */ HSD_Text* x2C;
    /* +30 */ HSD_JObj* x30;
    /* +34 */ HSD_JObj* x34[6];
    /* +4C */ Vec3 x4C[6];
    /* +94 */ MatchEnd* x94;
    /* +98 */ struct ResultsPlayerData player_data[6];
};
;
struct gm_803DE650_t {
    u8 x0;
    u8 x1; // rule flags?
    u16 x2;
    u16 x4;
    u16 x6;
    u8 x8;
    u8 x9;
    s8 xA[3]; ///< CharacterKind (opponents?)
    u8 xD;
    u8 xE;
    u8 xF;
};
struct ChallengerData {
    u8 human_ckind;
    u8 human_color;
    u8 human_slot;
    u8 human_nametag;
    u8 cpu_ckind;
    u8 curr_mode; ///< ::GameModeKind
    u8 prev_mode; ///< ::GameModeKind
    u16 x8;
};
struct VsApproachData {
    u8 cpu_ckind; ///< ::CharacterKind
    u8 human_slot;
};
/// @brief data passed to OnLoad callback for GM_MENU
struct MenuEnterData {
    /* +00 */ u8 menu_kind; ///< will set the next menu kind
    /* +01 */ u8 hovered_selection; ///< will set the next hovered selection
    /* +02 */ u8
        load_assets; ///< checks if the assets need to be loaded or not
    /* +03 */ s8 x3;
};
;
/// @brief data passed to OnLeave callback for GM_MENU
struct MenuExitData {
    /* +00 */ s8 pending_mode; ///< will set the next game mode
    /* +01 */ u8 _1[0x3];
};
;
struct gmClassicMatchup;
typedef struct gm_803DDEC8Struct {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 x1;
    /* 0x02 */ u8 x2;
    /* 0x03 */ u8 pad03;
    /* 0x04 */ u16 x4;
    /* 0x06 */ u16 x6;
    /* 0x08 */ u8 x8;
    /* 0x09 */ u8 pad09[3];
    /* 0x0C */ struct gmClassicMatchup* xC;
} gm_803DDEC8Struct;
typedef struct CssSubStruct {
    /* 0x000 */ u8 x00;
    /* 0x001 */ u8 x01;
    /* 0x002 */ u8 pad02;
    /* 0x003 */ u8 x03;
    /* 0x004 */ u8 pad04[2];
    /* 0x006 */ s16 stage_id;
    /* 0x008 */ u8 pad08[0xC];
    /* 0x014 */ PlayerInitData saved_players[4];
    /* 0x0A4 */ HSD_GObj* gobj;
    /* 0x0A8 */ HSD_JObj* jobjs[39];
    /* 0x144 */ s32 anim_frames[39];
    /* 0x1E0 */ s32 menu_values[7];
    /* 0x1FC */ HSD_Text* text;
    /* 0x200 */ u8 pad200[4];
} CssSubStruct;
typedef struct TrainingModeState {
    /* 0x000 */ s32 count;
    /* 0x004 */ s32 mode;
    /* 0x008 */ s32 char_data[25];
    /* 0x06C */ s32 pad_6C[2];
    /* 0x074 */ PlayerInitData players[4];
    /* 0x104 */ s32 result_cache[4];
} TrainingModeState;
struct gm_8049E548_t {
    /* 0x00 */ u8 c_kind[4];
    /* 0x04 */ u8 x4[4];
    /* 0x08 */ u8 unk_8;
    /* 0x09 */ u8 unk_9;
    /* 0x0A */ u8 unk_A;
    /* 0x0B */ char pad_B[1];
    /* 0x0C */ u16 unk_C; ///< GrKind
    /* 0x0E */ s8 unk_E; /* inferred */
    /* 0x0F */ char pad_F[1];
}; /* size = 0x10 */
;
struct TmBoxArrays {
    void* box2;
    void* box3;
    void* box4;
};
;
struct Lbl804799B8_t {
    u8 x0;
    u8 x1;
    u8 x2;
    u8 x3;
    u8 x4;
    u8 x5;
    u8 x6;
    u8 x7;
    u8 x8;
    u8 x9;
    u8 xA;
    u8 xB;
    u16 xC_counter;
    u8 xE;
    u8 xF;
    u8 pad2[0x10];
};
struct Lbl804799D8_t {
    u32 x0; // 0x00 counter
    u32 x4; // 0x04 frame counter
    s32 x8; // 0x08
    s32 xC; // 0x0C
    u16 x10; // 0x10
    u16 x12[4]; // 0x12 per-player u16 counters
    u8 x1A; // 0x1A
    u8 x1B; // 0x1B
    u8 x1C; // 0x1C
    u8 x1D[4]; // 0x1D per-player bytes
    u8 x21[4]; // 0x21 per-player anim counters
    u8 x25[4]; // 0x25 per-player bytes
    u8 x29; // 0x29
    struct { // 0x2A per-player anim data (stride 6)
        u8 start; // +0
        u8 cur; // +1
        u8 end; // +2
        u8 state; // +3
        u8 done; // +4
        u8 loop; // +5
    } x2A[4];
    u8 _pad0[2]; // 0x42-0x43
    u8 x44[4]; // 0x44 per-player state
    struct MatchEnd* x48; // 0x48 current tournament match results
    u8 x4C; // 0x4C
    u8 x4D; // 0x4D
    u8 x4E[20]; // 0x4E
    u8 _pad1[2]; // 0x62-0x63
    Vec3 x64; // 0x64
    Vec3 x70; // 0x70
    u8 _pad2[4]; // 0x7C-0x7F
};
/// @todo :: this isnt exactly right
struct TmAnimTimers {
    u32 x0;
    u16 x4;
    u16 x6[4];
    u8 xE;
    u8 xF;
    u8 x10[4];
    u8 pad_x14[0x18 - 0x14];
    u8 x18[4];
    u8 x1C;
    struct {
        u8 a;
        u8 b;
        u8 c;
        u8 x0;
        u8 x1;
        u8 x2;
    } x1D[4]; ///< per-player jobj/anim states
    u8 pad_x35[0x38 - 0x35];
    u8 x38[4];
    u8 pad_x3C[0x40 - 0x3C];
};
struct lbl_803D9F0C_t {
    int x0, x4, x8;
};
struct lbl_803DA2E0_t {
    u8 x0[0x20];
    f32 x20[0x29];
};
struct lbl_8046B488_t {
    /* 0x000 */ s8 x0;
    /* 0x001 */ s8 x1;
    /* 0x002 */ s8 x2;
    /* 0x003 */ s8 x3;
    /* 0x004 */ s8 x4;
    /* 0x005 */ s8 x5;
    /* 0x006 */ u8 x6;
    /* 0x007 */ u8 x7;
    /* 0x008 */ u8 x8;
    /* 0x009 */ u8 x9;
    /* 0x00A */ u8 xA;
    /* 0x00B */ u8 xB;
    /* 0x00C */ u8 xC;
    /* 0x00D */ u8 xD;
    /* 0x00E */ u8 xE;
    /* 0x00F */ u8 xF;
    /* 0x010:0 */ u8 unk_10_b0 : 1;
    /* 0x010:1 */ u8 unk_10_b1 : 1;
    /* 0x010:2 */ u8 unk_10_b2 : 1;
    /* 0x010:3 */ u8 unk_10_b3 : 1;
    /* 0x010:4 */ u8 unk_10_b4 : 1;
    /* 0x010:5 */ u8 unk_10_b5 : 1;
    /* 0x010:6 */ u8 unk_10_b6 : 1;
    /* 0x010:7 */ u8 unk_10_b7 : 1;
    /* 0x011 */ char pad_11[0x14 - 0x11];
    /* 0x014 */ f32 x14;
    /* 0x018 */ f32 x18;
    /* 0x01C */ f32 x1C;
    /* 0x020 */ s8 x20[0xA2 - 0x20];
    /* 0x0A2 */ s8 xA2[0x124 - 0xA2];
    /* 0x124 */ s8 x124[0x1A6 - 0x124];
    /* 0x1A6 */ s8 x1A6[0x1AC - 0x1A6];
    /* 0x1AC */ u8 x1AC;
    /* 0x1AD */ u8 x1AD;
    /* 0x1AE */ s8 x1AE[0x1B2 - 0x1AE];
    /* 0x1B2 */ u8 x1B2;
    /* 0x1AE */ s8 x1B3[0x1B8 - 0x1B3];
    /* 0x1B8 */ GmRouteCallback x1B8;
    /* 0x1BC */ char pad_1BC[0x1C0 - 0x1BC];
    /* 0x1C0 */ s8 x1C0[0x1B];
    /* 0x1DB */ char pad_1DB[0x1E0 - 0x1DB];
}; /* size = 0x1E0 */
;
typedef struct TmSettingTable {
    u8 pad_0[0x40];
    u8 min[6][2];
    u8 max[6][2];
} TmSettingTable;
;
;
;
/// Start/end/loop anim frame triplet for one tournament model anim state.
typedef struct TmAnimFrames {
    /* 0x0 */ u16 start;
    /* 0x2 */ u16 end;
    /* 0x4 */ u16 loop;
} TmAnimFrames;
;
/// Table of anim frame triplets (raw s32 words in ROM), see fn_8019C048.
typedef union TmAnimFrameTable {
    TmAnimFrames states[6];
    s32 words[9];
} TmAnimFrameTable;
;
/// Repeating per-slot unit of BracketEntry, one per tournament bracket
/// slot starting at 0x2C. Field names keep their slot-0 offsets from the
/// original flat BracketEntry layout (slots[1].x4C is 0x78 in the parent,
/// and so on).
typedef struct BracketEntrySlot {
    /* +0x00 */ HSD_GObj* x2C;
    /* +0x04 */ u8 x30;
    /* +0x05 */ u8 pad31;
    /* +0x06 */ u8 x32;
    /* +0x07 */ u8 pad33;
    /* +0x08 */ s32 x34;
    /* +0x0C */ s32 x38;
    /* +0x10 */ s32 x3C;
    /* +0x14 */ s32 x40;
    /* +0x18 */ s32 x44;
    /* +0x1C */ s32 x48;
    /* +0x20 */ u8 x4C;
    /* +0x21 */ u8 x4D;
    /* +0x22 */ u8 x4E;
    /* +0x23 */ u8 x4F;
    /* +0x24 */ u8 x50;
    /* +0x25 */ u8 x51;
    /* +0x26 */ u8 x52;
    /* +0x27 */ u8 pad53;
    /* +0x28 */ u16 x54;
    /* +0x2A */ u8 pad56[0x2C - 0x2A];
} BracketEntrySlot;
;
typedef struct BracketEntry {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 x1;
    /* 0x02 */ u8 x2;
    /* 0x03 */ u8 x3;
    /* 0x04 */ u8 x4;
    /* 0x05 */ u8 x5;
    /* 0x06 */ u8 x6;
    /* 0x07 */ u8 pad7[0x0C - 0x07];
    /* 0x0C */ s32 xC;
    /* 0x10 */ s32 x10;
    /* 0x14 */ s32 x14;
    /* 0x18 */ s32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ GXColor x20;
    /* 0x24 */ u8 x24;
    /* 0x25 */ u8 x25;
    /* 0x26 */ u8 x26;
    /* 0x27 */ u8 x27;
    /* 0x28 */ u8 x28;
    /* 0x29 */ u8 pad29[0x2C - 0x29];
    /* 0x2C */ BracketEntrySlot slots[4];
} BracketEntry;
;
struct lbl_803D9D20_t {
    /*  +0 */ u8 x0[0x20];
    /* +20 */ u8 x20[0x59 - 0x20];
    /* +59 */ u8 x59[0x72 - 0x59];
    /* +72 */ u8 x72[0x8C - 0x72];
};
struct lbl_803DA0D0_t {
    /* 0x00 */ u8 icon_model_map[0x18];
    /* 0x18 */ u8 pad_0x18[0x1E - 0x18];
    /* 0x1E */ u8 rank_thresholds[32][6];
    /* 0xDE */ u8 pad_0xDE[0xE0 - 0xDE];
    /* 0xE0 */ f32 bounce_y[41];
}; /* size = 0x184 */
;
typedef struct gm_8019ECAC_OnEnter_t {
    u32 x0;
    s32 x4;
    u8 pad_x8[0x14 - 0x8];
    u32 x14;
} gm_8019ECAC_OnEnter_t;
struct VsSceneState {
    /* 0x0000 */ u8 unk_0; ///< 0 During a match
                           ///< 1 While GAME! or "TIMEOUT!" is displayed/match
                           ///< is frozen on final frame 2 While in 1p and
                           ///< scores are shown calculating 3 When match is
                           ///< finished. Stays 0 when LRA+Start ends a match
    /* 0x0001 */ s8 pauser;
    /* 0x0002 */ u8
        pause_timer; ///< Frames remaining before unpause input is accepted
                     ///< after pausing. Set to @c 0xA on pause and decremented
                     ///< each frame while paused.
    /* 0x0003 */ u8 unk_3;
    /* 0x0004 */ u8
        unpause_timer; ///< Frames remaining before pause input is accepted
                       ///< after unpausing. Set to @c 0xA on unpause and
                       ///< decremented each frame while unpaused. Mirrors
                       ///< #VsSceneController::pause_timer semantics.
    /* 0x0005 */ u8 hud_enabled;
    /* 0x0006 */ u8 terminate_match;
    /* 0x0007 */ u8 is_singleplayer;
    /* 0x0008 */ u8 match_result; ///< MatchOutcome
                                  ///< Sticky, stays until a new match starts
    /* 0x0009 */ u8 unk_9; //< 1 during classic mode stage-clear points screen
                           // and between stages
    /* 0x000A */ u8 unk_A;
    /* 0x000B */ u8 unk_B; // end graphic / SFX type
    /* 0x000C */ u8 unk_C;
    /* 0x000D */ u8 unk_D;
    /* 0x000E */ u8 match_over;
    /* 0x000F */ u8 unk_F;
    /* 0x0010 */ s32 unk_10;
    /* 0x0014 */ s32 unk_14;
    /* 0x0018 */ u8 unk_18; /* maybe part of unk_14[4]? */
    /* 0x001C */ u32* unk_1C;
    /* 0x0020 */ u32* unk_20;
    /* 0x0024 */ u32 frame_count;
    /* 0x0028 */ u32 timer_seconds;
    /* 0x002C */ u16 unk_2C; ///< timer frames
    /* 0x002E */ u16 unk_2E;
    /* 0x0030 */ u8 unk_30;
    /* 0x0034 */ f32 unk_34;
    /* 0x0038 */ struct VsSceneFighter fighters[6];
    /* 0x0038 */ char pad_8C[0x24C - 0x8C]; /* maybe part of unk_34[0x925]? */
    /* 0x024C */ MatchEnd x24C;
};
struct VsSceneController {
    /* 0x0000 */ struct VsSceneState state;
    /* 0x24C8 */ struct StartMeleeRules start;
}; /* size = 0x2528 */
;
#define FTPART_INVALID 0xFF
/// Table in PlCo.dat
struct FighterPartsTable {
    u8* joint_to_part;
    u8* part_to_joint;
    u32 parts_num;
};
typedef struct FallCommon {
    /* +520 */ int x520;
    /* +524 */ int x524;
    /* +528 */ int x528;
    /* +52C */ int x52C;
    /* +530 */ int x530;
    /* +534 */ int x534;
    /* +538 */ Vec3 x538;
    /* +544 */ Vec3 x544;
    /* +550 */ float x550;
    /* +554 */ float x554;
    /* +558 */ float x558;
    /* +55C */ float x55C;
    /* +560 */ float x560_radians;
    /* +564 */ float x564;
    /**
     * @brief Points to data in `PlCo.dat`.
     * @details When the game reads the stick, it reads it using an integer
     * value with a max value of 80, this means the sticks only have 161 values
     * (80 per side + zero) possible analog values The same thing happens to
     * the triggers, but it gets quantified to 140 instead.
     */
} FallCommon;
/// @todo Determine size and add remaining members.
struct ftCommonData {
    /// @datvalue{GALE01, PlCo.dat, 0.28}
    /*   +0 */ float horizontal_stick_deadzone;
    /// @datvalue{GALE01, PlCo.dat, 0.28}
    /*   +4 */ float vertical_stick_deadzone;
    /// @datvalue{GALE01, PlCo.dat, 0.25}
    /**
     * @name Stick Smash Deadzones
     * Surprisingly these are 0.25 in vanilla, which is lower than the
     * absolute stick deadzone above, which is always applied, which is 0.28.
     * @{
     * @}
     */
    /// Surprisingly these smash deadzones are 0.25 in vanilla, which is lower
    /// than the absolute stick deadzone above (0.28), which is always applied.
    /*   +8 */ float horizontal_stick_smash_deadzone;
    /// @datvalue{GALE01, PlCo.dat, 0.25}
    /*   +C */ float vertical_stick_smash_deadzone;
    /// @datvalue{GALE01, PlCo.dat, 0.3}
    /*  +10 */ float analog_shoulder_deadzone;
    /// @datvalue{GALE01, PlCo.dat, 0.35}
    /*  +14 */ float z_press_analog_value;
    /// @datvalue{GALE01, PlCo.dat, 0.25}
    /*  +18 */ float shield_press_threshold;
    /*  +1C */ int x1C;
    /*  +20 */ float x20_radians;
    /**
     * Yet another threshold that's lower than the global deadzone, so in
     * practical terms it goes unused.
     *
     * @datvalue{GALE01, PlCo.dat, 0.18}
     */
    /*  +24 */ float walk_stick_threshold;
    /*  +28 */ float walk_middle_animation_stick_threshold;
    /*  +2C */ float walk_fast_stick_threshold;
    /**
     * @brief Ease out for the walk.
     * Also affects the maximum possible acceleration, i.e. if this is 0.5
     * then the maximum possible acceleration when walking will be 0.5 *
     * `walk_acceleration`.
     */
    /*  +30 */ float walk_accel_taper_gain;
    /*  +34 */ float x34;
    /*  +38 */ float x38_someLStickXThreshold;
    /*  +3C */ float dash_smash_stick_threshold;
    /**
     * @brief Frames since the stick left the deadzone where a dash or a smash
     * can be input.
     */
    /*  +40 */ int dash_smash_window;
    /*  +44 */ float x44;
    /*  +48 */ float x48;
    /*  +4C */ float x4C;
    /*  +50 */ float x50;
    /*  +54 */ float x54;
    /*  +58 */ float x58_someLStickXThreshold;
    /*  +5C */ float run_accel_taper_gain; ///< @brief Ease out for the run.
    /// @datvalue{GALE01, PlCo.dat, 1.0}
    /**
     * @brief Extra frictino multiplier applied to run/dash/turn, since
     * it's 1.0 it                                        has no effect.
     */
    /*  +60 */ float run_dash_turn_friction_multiplier;
    /*  +64 */ float x64;
    /*  +68 */ float x68;
    /**
     * @brief The game adds extra friction when the player's speed is above
     * walk speed only in wait and turn state.
     * @datvalue{GALE01, PlCo.dat, 2.0}
     */
    /*  +6C */ float friction_when_above_walk_speed;
    /// @datvalue{GALE01, PlCo.dat, 0.6625}
    /*  +70 */ float tap_jump_threshold;
    /**
     * @brief Frames since the stick left the deadzone where a tap jump can be
     * input.
     * @datvalue{GALE01, PlCo.dat, 4}
     */
    /*  +74 */ int tap_jump_window;
    /*  +78 */ float x78;
    /*  +7C */ float tap_jump_release_threshold;
    /**
     * @brief For some strange reason, some ground states have a smaller
     * threshold.
     * @datvalue{GALE01, PlCo.dat, 0.5625}
     */
    /*  +80 */ float relaxed_tap_jump_threshold;
    /*  +84 */ float x84;
    /*  +88 */ float x88;
    /*  +8C */ int x8C;
    /*  +90 */ float x90;
    /*  +94 */ float x94;
    /*  +98 */ float x98;
    /*  +9C */ float x9C_radians;
    /*  +A0 */ float xA0_radians;
    /*  +A4 */ float xA4_radians;
    /*  +A8 */ float xA8_radians;
    /*  +AC */ float attackhi3_stick_threshold_y;
    /*  +B0 */ float xB0;
    /*  +B4 */ float xB4;
    /*  +B8 */ float xB8_radians;
    /*  +BC */ float xBC_radians;
    /*  +C0 */ float xC0_radians;
    /*  +C4 */ float xC4_radians;
    /*  +C8 */ float xC8;
    /*  +CC */ float xCC;
    /*  +D0 */ float xD0;
    /*  +D4 */ float xD4;
    /*  +D8 */ float xD8;
    /*  +DC */ float xDC;
    /*  +E0 */ float xE0;
    /*  +E4 */ int xE4;
    /*  +E8 */ float xE8;
    /*  +EC */ float xEC;
    /*  +F0 */ float xF0;
    /*  +F4 */ float xF4;
    /*  +F8 */ float xF8;
    /*  +FC */ int xFC;
    /* +100 */ float x100;
    /* +104 */ float kb_min;
    /* +108 */ float x108;
    /* +10C */ float x10C;
    /* +110 */ float x110;
    /* +114 */ float x114;
    /* +118 */ float x118;
    /* +11C */ float x11C;
    /* +120 */ float x120;
    /* +124 */ float kb_squat_mul;
    /* +128 */ float x128;
    /* +12C */ float x12C;
    /* +130 */ int x130;
    /* +134 */ int x134;
    /* +138 */ float x138;
    /* +13C */ float x13C;
    /* +140 */ float x140;
    /* +144 */ float x144_radians;
    /* +148 */ float x148;
    /* +14C */ float x14C;
    /* +150 */ float x150;
    /* +154 */ float x154;
    /* +158 */ float x158;
    /* +15C */ float x15C;
    /* +160 */ float x160;
    /* +164 */ float max_grounded_kb_on_landing;
    /* +168 */ float x168;
    /* +16C */ float x16C;
    /* +170 */ float x170;
    /* +174 */ float x174;
    /* +178 */ float x178;
    /* +17C */ float x17C;
    /* +180 */ float x180;
    /* +184 */ float x184;
    /* +188 */ float x188;
    /* +18C */ int x18C;
    /* +190 */ float x190;
    /* +194 */ float x194_unkHitLagFrames;
    /* +198 */ float x198;
    /* +19C */ float x19C;
    /* +1A0 */ float x1A0;
    /* +1A4 */ float x1A4;
    /* +1A8 */ float x1A8;
    /* +1AC */ float x1AC;
    /* +1B0 */ float x1B0;
    /* +1B4 */ float x1B4;
    /* +1B8 */ int x1B8;
    /* +1BC */ float x1BC;
    /* +1C0 */ float x1C0;
    /* +1C4 */ float x1C4;
    /* +1C8 */ float x1C8;
    /* +1CC */ float x1CC;
    /* +1D0 */ float x1D0;
    /* +1D4 */ float x1D4;
    /* +1D8 */ float x1D8;
    /* +1DC */ int x1DC;
    /* +1E0 */ float x1E0;
    /* +1E4 */ float x1E4;
    /* +1E8 */ float x1E8_radians;
    /* +1EC */ float x1EC;
    /* +1F0 */ float x1F0;
    /* +1F4 */ float x1F4;
    /* +1F8 */ float x1F8;
    /* +1FC */ float
        aerial_friction_oob; // friction when velocity exceeds maximum
    /* +200 */ float x200;
    /* +204 */ float x204_knockbackFrameDecay;
    /* +208 */ float x208;
    /* +20C */ float x20C;
    /* +210 */ float x210;
    /* +214 */ int x214;
    /* +218 */ float x218;
    /* +21C */ float x21C;
    /* +220 */ float x220;
    /* +224 */ int x224;
    /* +228 */ float x228;
    /* +22C */ float x22C;
    /* +230 */ float x230;
    /* +234 */ float x234_radians;
    /* +238 */ float x238_radians;
    /* +23C */ int x23C;
    /* +240 */ float x240;
    /* +244 */ float x244;
    /* +248 */ float x248;
    /* +24C */ float x24C;
    /* +250 */ float x250;
    /* +254 */ float x254;
    /* +258 */ float x258;
    /* +25C */ float x25C;
    /* +260 */ float x260_startShieldHealth;
    /* +264 */ float x264;
    /* +268 */ float x268;
    /* +26C */ float x26C;
    /* +270 */ float x270;
    /* +274 */ int x274;
    /* +278 */ float x278;
    /* +27C */ float x27C;
    /* +280 */ float x280_unkShieldHealth;
    /* +284 */ float x284;
    /* +288 */ float x288;
    /* +28C */ float x28C;
    /* +290 */ float x290;
    /* +294 */ float x294;
    /* +298 */ float x298;
    /* +29C */ float x29C;
    /**
     * @brief Frames after trigger becomes non 0 where a full press results in
     * a powershield.
     */
    /* +2A0 */ int powershield_input_window;
    /* +2A4 */ float x2A4;
    /* +2A8 */ float x2A8;
    /* +2AC */ float x2AC;
    /* +2B0 */ float x2B0;
    /* +2B4 */ float x2B4;
    /* +2B8 */ int x2B8;
    /* +2BC */ float x2BC;
    /* +2C0 */ float x2C0;
    /* +2C4 */ float x2C4;
    /* +2C8 */ float x2C8;
    /* +2CC */ float x2CC;
    /* +2D0 */ float x2D0;
    /* +2D4 */ float x2D4;
    /* +2D8 */ float x2D8;
    /* +2DC */ float x2DC;
    /* +2E0 */ float x2E0;
    /* +2E4 */ float x2E4;
    /* +2E8 */ float x2E8;
    /* +2EC */ float x2EC;
    /* +2F0 */ float x2F0;
    /* +2F4 */ float x2F4;
    /* +2F8 */ float x2F8;
    /* +2FC */ float x2FC;
    /* +300 */ float x300;
    /* +304 */ float x304;
    /* +308 */ float x308;
    /* +30C */ float x30C;
    /* +310 */ float x310;
    /* +314 */ float x314;
    /* +318 */ int x318;
    /* +31C */ float x31C;
    /* +320 */ int x320;
    /* +324 */ int x324;
    /* +328 */ float x328;
    /* +32C */ Vec2 escapeair_deadzone;
    /* +334 */ int x334;
    /* +338 */ float escapeair_force;
    /* +33C */ float escapeair_decay;
    /* +340 */ float x340;
    /* +344 */ float x344;
    /* +348 */ int x348;
    /* +34C */ float x34C;
    /* +350 */ float x350;
    /* +354 */ float x354;
    /* +358 */ float x358;
    /* +35C */ float x35C;
    /* +360 */ float x360;
    /* +364 */ float x364;
    /* +368 */ float x368;
    /* +36C */ float x36C;
    /* +370 */ float x370;
    /* +374 */ float x374;
    /* +378 */ float x378;
    /* +37C */ float x37C;
    /* +380 */ lbColl_80008D30_arg1 x380;
    /* +3A4 */ float grab_timer_decrement;
    /* +3A8 */ float x3A8;
    /* +3AC */ float x3AC;
    /* +3B0 */ float x3B0;
    /* +3B4 */ float shouldered_anim_rate;
    /* +3B8 */ float x3B8;
    /* +3BC */ float x3BC;
    /* +3C0 */ int x3C0;
    /* +3C4 */ float x3C4;
    /* +3C8 */ float x3C8;
    /* +3CC */ int x3CC;
    /* +3D0 */ float x3D0;
    /* +3D4 */ float x3D4;
    /* +3D8 */ float x3D8;
    /* +3DC */ float x3DC;
    /* +3E0 */ float x3E0;
    /* +3E4 */ float x3E4;
    /* +3E8 */ float x3E8_shieldKnockbackFrameDecay;
    /* +3EC */ float x3EC_shieldGroundFrictionMultiplier;
    /* +3F0 */ float x3F0;
    /* +3F4 */ int x3F4;
    /* +3F8 */ int x3F8;
    /* +3FC */ int x3FC;
    /* +400 */ float x400;
    /* +404 */ float x404;
    /* +408 */ float x408;
    /* +40C */ float x40C;
    /* +410 */ int x410;
    /* +414 */ int x414;
    /* +418 */ int x418;
    /* +41C */ int x41C;
    /* +420 */ float x420;
    /* +424 */ float x424;
    /* +428 */ int x428;
    /* +42C */ float x42C;
    /* +430 */ float x430;
    /* +434 */ float x434;
    /* +438 */ float x438;
    /* +43C */ float x43C;
    /* +440 */ float x440;
    /* +444 */ float x444;
    /* +448 */ float x448;
    /* +44C */ float x44C;
    /* +450 */ float x450;
    /* +454 */ float x454;
    /* +458 */ float x458;
    /* +45C */ float x45C;
    /* +460 */ float x460;
    /* +464 */ float x464;
    /* +468 */ float x468;
    /* +46C */ float x46C;
    /* +470 */ float x470;
    /// @datvalue{GALE01, PlCo.dat, 0.75}
    /* +474 */ float teeter_walk_threshold;
    /* +478 */ float x478;
    /* +47C */ float x47C;
    /* +480 */ float x480;
    /* +484 */ float x484;
    /* +488 */ int x488;
    /* +48C */ float x48C;
    /* +490 */ float x490;
    /* +494 */ float x494;
    /* +498 */ int ledge_cooldown;
    /* +49C */ int x49C;
    /* +4A0 */ float x4A0;
    /* +4A4 */ float x4A4;
    /* +4A8 */ float x4A8;
    /* +4AC */ float x4AC;
    /* +4B0 */ float sdi_min_stick_mag;
    /* +4B4 */ int sdi_stick_window;
    /* +4B8 */ float sdi_pos_scale;
    /* +4BC */ float x4BC;
    /* +4C0 */ float x4C0;
    /* +4C4 */ int x4C4;
    /* +4C8 */ int x4C8;
    /* +4CC */ int x4CC;
    /* +4D0 */ float x4D0;
    /* +4D4 */ float x4D4;
    /* +4D8 */ u32 x4D8;
    /* +4DC */ Vec2 x4DC;
    /* +4E4 */ Vec3 x4E4;
    /* +4F0 */ float x4F0;
    /* +4F4 */ float x4F4;
    /* +4F8 */ u32 x4F8;
    /* +4FC */ u32 x4FC;
    /* +500 */ int x500;
    /* +504 */ int x504;
    /* +508 */ int x508;
    /* +50C */ int x50C;
    /* +510 */ float x510;
    /* +514 */ float x514;
    /* +518 */ int x518;
    /* +51C */ float x51C_radians;
    /* +520 */ FallCommon fall_common;
    /* +568 */ float x568;
    /* +56C */ float x56C;
    /* +570 */ float x570;
    /* +574 */ float x574;
    /* +578 */ float x578;
    /* +57C */ int x57C;
    /* +580 */ int x580;
    /* +584 */ int x584;
    /* +588 */ int x588;
    /* +58C */ float x58C;
    /* +590 */ float x590;
    /* +594 */ float open_parasol_threshold;
    /* +598 */ float close_parasol_threshold;
    /* +59C */ float x59C;
    /* +5A0 */ float x5A0;
    /* +5A4 */ int x5A4;
    /* +5A8 */ float x5A8;
    /* +5AC */ float x5AC;
    /* +5B0 */ float x5B0;
    /* +5B4 */ int x5B4;
    /* +5B8 */ float x5B8;
    /* +5BC */ int x5BC;
    /* +5C0 */ float x5C0;
    /* +5C4 */ int x5C4;
    /* +5C8 */ int x5C8;
    /* +5CC */ float x5CC;
    /* +5D0 */ int rebirth_countdown;
    /* +5D4 */ int rebirth_wait;
    /* +5D8 */ int x5D8;
    /* +5DC */ u32 bury_timer_unk1;
    /* +5E0 */ u32 bury_timer_unk2;
    /* +5E4 */ u32 bury_timer_unk3;
    /* +5E8 */ float x5E8;
    /* +5EC */ u32 x5EC;
    /* +5F0 */ u32 x5F0;
    /* +5F4 */ int x5F4;
    /* +5F8 */ float x5F8;
    /* +5FC */ float x5FC;
    /* +600 */ float x600;
    /* +604 */ float x604;
    /* +608 */ float x608;
    /* +60C */ float x60C;
    /* +610 */ float x610;
    /* +614 */ float x614;
    /* +618 */ float x618;
    /* +61C */ float x61C;
    /* +620 */ int x620;
    /* +624 */ float x624;
    /* +628 */ float x628;
    /* +62C */ float x62C;
    /* +630 */ float x630;
    /* +634 */ float x634;
    /* +638 */ float x638;
    /* +63C */ float x63C;
    /* +640 */ float x640;
    /* +644 */ float x644;
    /* +648 */ int x648;
    /* +64C */ float x64C;
    /* +650 */ float x650;
    /* +654 */ float x654;
    /* +658 */ float x658;
    /* +65C */ float x65C;
    /* +660 */ float x660;
    /* +664 */ float x664;
    /* +668 */ float pressed_inputs;
    /* +66C */ float released_inputs;
    /* +670 */ float x670;
    /* +674 */ float x674;
    /* +678 */ float x678;
    /* +67C */ float x67C;
    /* +680 */ float x680;
    /* +684 */ float x684;
    /* +688 */ int x688;
    /* +68C */ int x68C;
    /* +690 */ int x690;
    /* +694 */ float x694;
    /* +698 */ float x698;
    /* +69C */ float warpstarfall_drift_scaling;
    /* +6A0 */ float warpstarfall_drift_flat;
    /* +6A4 */ float warpstarfall_drift_max;
    /* +6A8 */ float x6A8;
    /* +6AC */ int x6AC;
    /* +6B0 */ int x6B0;
    /* +6B4 */ int x6B4;
    /* +6B8 */ int x6B8;
    /* +6BC */ int x6BC;
    /* +6C0 */ int x6C0;
    /* +6C4 */ float x6C4;
    /* +6C8 */ int x6C8;
    /* +6CC */ int x6CC;
    /* +6D0 */ float x6D0;
    /* +6D4 */ int x6D4;
    /* +6D8 */ int x6D8;
    /* +6DC */ GXColor
        sub_colors[5]; ///< Array of tint colors, see #gm_SetupSubColors and
                       ///< #Fighter_UnkInitLoad_80068914
    /* +6F0 */ float metal_armor;
    /* +6F4 */ int x6F4_unkDamage;
    /* +6F8 */ int x6F8;
    /* +6FC */ int x6FC;
    /* +700 */ int x700;
    /* +704 */ float x704;
    /* +708 */ float x708;
    /* +70C */ float x70C;
    /* +710 */ float x710;
    /* +714 */ float x714;
    /* +718 */ float kb_ice_mul;
    /* +71C */ float x71C;
    /* +720 */ float x720;
    /* +724 */ float x724;
    /* +728 */ float x728;
    /* +72C */ float x72C;
    /* +730 */ float x730;
    /// @brief Leadead capture timer decrement.
    /* +734 */ float leadead_grab_timer_step;
    /// @brief Leadead grab break threshold.
    /* +738 */ float leadead_grab_break_threshold;
    /* +73C */ int x73C;
    /* +740 */ float x740;
    /* +744 */ float x744;
    /* +748 */ float x748;
    /* +74C */ float x74C;
    /* +750 */ float x750;
    /* +754 */ float x754;
    /* +758 */ float x758;
    /* +75C */ float x75C;
    /* +760 */ int x760;
    /* +764 */ int x764;
    /* +768 */ float x768;
    /* +76C */ float x76C;
    /* +770 */ float x770;
    /* +774 */ int x774;
    /* +778 */ float passive_wall_vel_y_base;
    /* +77C */ float damageice_gravity_mult;
    /* +780 */ float damageice_min_speed;
    /* +784 */ float damageice_speed_mult_on_break;
    /* +788 */ float damageice_rot_speed_min;
    /* +78C */ float damageice_rot_speed_max;
    /* +790 */ float x790_damageice_unk;
    /* +794 */ float x794_damageice_unk;
    /* +798 */ float x798_damageice_unk;
    /* +79C */ float damageice_dmg_time_reduction_mult;
    /* +7A0 */ float damageice_ice_size;
    /* +7A4 */ float damageicejump_escape_time;
    /* +7A8 */ float x7A8;
    /* +7AC */ int x7AC;
    /* +7B0 */ int x7B0;
    /* +7B4 */ int x7B4_unkDamage;
    /* +7B8 */ float x7B8;
    /* +7BC */ float x7BC;
    /* +7C0 */ float x7C0;
    /* +7C4 */ float kb_smashcharge_mul;
    /* +7C8 */ float x7C8;
    /* +7CC */ int x7CC;
    /* +7D0 */ int x7D0;
    /* +7D4 */ float hit_weight_mul;
    /* +7D8 */ GXColor x7D8;
    /* +7DC */ int x7DC;
    /* +7E0 */ int x7E0;
    /* +7E4 */ float x7E4_scaleZ;
    /* +7E8 */ u32 unk_kb_angle_min;
    /* +7EC */ u32 unk_kb_angle_max;
    /* +7F0 */ int x7F0;
    /* +7F4 */ float x7F4;
    /* +7F8 */ float x7F8;
    /* +7FC */ float x7FC;
    /* +800 */ float x800;
    /* +804 */ float x804;
    /* +804 */ Vec3 x808;
    /* +814 */ int x814;
};
typedef struct _FtSFXArr {
    int num;
    s32* sfx_ids;
} FtSFXArr;
struct FtSFX {
    FtSFXArr* smash;
    int x4;
    int x8;
    int xC;
    int x10;
    int x14;
    int x18;
    FtSFXArr* x1C;
    FtSFXArr* x20;
    int x24;
    int x28;
    int x2C;
    int x30;
    int x34;
};
typedef struct ftData_x44_t {
    s16 unk0;
    s16 unk2;
    s16 unk4;
    s16 unk6;
    s16 unk8;
    s16 unkA;
    float unkC;
    float ledge_snap_x;
    float ledge_snap_y;
    float ledge_snap_height;
} ftData_x44_t;
struct ftData_x8_x8 {
    /*  +8 */ u32 x8;
    /*  +C */ u16** xC;
};
struct FtPartsDesc {
    /*  +0 */ u32 model_num;
    /*  +4 */ void* (*vis_table)[4];
};
typedef struct ftData_x20 {
    /* +0 */ HSD_Joint** x0;
    /* +4 */ f32 x8;
} ftData_x20;
typedef struct ftData_x34 {
    /* +0 */ Fighter_Part x0;
    /* +4 */ float scale;
} ftData_x34;
typedef struct ftData_x38 {
    int x0;
    Vec3 x4;
    float x10;
} ftData_x38;
typedef struct ftData_x1C {
    u16 x0; ///< Fighter_Part
    u16 x2;
    u8* x4; ///< an array of Fighter part indices
    HSD_AnimJoint** x8;
} ftData_x1C;
typedef struct ftData_x30 {
    /* +0 */ int count;
    /* +4 */ ftHurtboxInit* inits;
} ftData_x30;
typedef struct _ThrowFlags {
    union {
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 b3 : 1;
            u8 b4 : 1;
            u8 b5 : 1;
            u8 b6 : 1;
            u8 b7 : 1;
        };
        u32 flags;
    };
} ThrowFlags;
struct ftCo_DatAttrs_xBC_t {
    float size;
    Vec3 x4;
    Vec3 x10;
    float x1C;
};
typedef struct ftCo_DatAttrs {
    /**
     * @brief Multiplciative walk acceleration, based on how much the control
     * stick is pushed.
     */
    /* +000 fp+110 */ float walk_accel_mul;
    /// @brief Base walk acceleration, always applied when walking.
    /* +004 fp+114 */ float walk_accel_base;
    /* +008 fp+118 */ float walk_max_vel;
    /* +00C fp+11C */ float slow_walk_max;
    /* +010 fp+120 */ float mid_walk_point;
    /* +014 fp+124 */ float fast_walk_min;
    /* +018 fp+128 */ float ground_friction;
    /* +01C fp+12C */ float dash_initial_velocity;
    /* +020 fp+130 */ float dash_accel_mul;
    /* +024 fp+134 */ float dash_accel_base;
    /* +028 fp+138 */ float dash_max_velocity;
    /* +02C fp+13C */ float run_animation_scaling;
    /* +030 fp+140 */ float max_run_brake_frames;
    /* +034 fp+144 */ float ground_max_horizontal_velocity;
    /* +038 fp+148 */ float jump_startup_time;
    /* +03C fp+14C */ float jump_h_initial_velocity;
    /* +040 fp+150 */ float jump_v_initial_velocity;
    /* +044 fp+154 */ float ground_to_air_jump_momentum_multiplier;
    /* +048 fp+158 */ float jump_h_max_velocity;
    /* +04C fp+15C */ float hop_v_initial_velocity;
    /* +050 fp+160 */ float air_jump_v_multiplier;
    /* +054 fp+164 */ float air_jump_h_multiplier;
    /* +058 fp+168 */ int max_jumps;
    /* +05C fp+16C */ float gravity;
    /* +060 fp+170 */ float terminal_velocity;
    /* +064 fp+174 */ float air_drift_stick_mul;
    /* +068 fp+178 */ float aerial_drift_base;
    /* +06C fp+17C */ float air_drift_max;
    /* +070 fp+180 */ float aerial_friction;
    /* +074 fp+184 */ float fast_fall_velocity;
    /* +078 fp+188 */ float air_max_horizontal_velocity;
    /* +07C fp+18C */ float jab_2_input_window;
    /* +080 fp+190 */ float jab_3_input_window;
    /* +084 fp+194 */ float standing_turn_frames;
    /* +088 fp+198 */ float weight;
    /* +08C fp+19C */ float model_scaling;
    /* +090 fp+1A0 */ float initial_shield_size;
    /* +094 fp+1A4 */ float shield_break_initial_velocity;
    /* +098 fp+1A8 */ int rapid_jab_window;
    /* +09C fp+1AC */ float clank_animation_length;
    /// @brief `0` = normal spark, `1` = none.
    /* +0A0 fp+1B0 */ int hit_spark_variant;
    /// @brief Not used anywhere in the codebase.
    /* +0A4 fp+1B4 */ int unused_0;
    /* +0A8 fp+1B8 */ float ledge_jump_horizontal_velocity;
    /* +0AC fp+1BC */ float ledge_jump_vertical_velocity;
    /* +0B0 fp+1C0 */ float item_throw_velocity_multiplier;
    /* +0B4 fp+1C4 */ float heavy_throw_velocity_multiplier;
    /**
     * @brief What percentage of the existing velocity is kept when performing
     * a side special. `1.0` = keep all momentum, `0.0` = stop dead in its
     * tracks.
     */
    /* +0B8 fp+1C8 */ float specials_ground_speed_retention;
    /* +0BC fp+1CC */ ftCo_DatAttrs_xBC_t xBC;
    /* +0DC fp+1EC */ float xDC;
    /* +0E0 fp+1F0 */ float kirby_b_star_damage;
    /* +0E4 fp+1F4 */ float normal_landing_lag;
    /* +0E8 fp+1F8 */ float landingairn_lag;
    /* +0EC fp+1FC */ float landingairf_lag;
    /* +0F0 fp+200 */ float landingairb_lag;
    /* +0F4 fp+204 */ float landingairhi_lag;
    /* +0F8 fp+208 */ float landingairlw_lag;
    /* +0FC fp+20C */ float name_tag_height;
    /* +100 fp+210 */ float passivewall_vel_x;
    /* +104 fp+214 */ float wall_jump_horizontal_velocity;
    /* +108 fp+218 */ float wall_jump_vertical_velocity;
    /* +10C fp+21C */ float passiveceil_vel_x;
    /* +110 fp+220 */ float trophy_scale;
    /* +114 fp+224 */ Vec3 x114;
    /* +120 fp+230 */ Vec3 x120;
    /* +12C fp+23C */ float x12C;
    /* +130 fp+240 */ Vec3 x130;
    /* +13C fp+24C */ float x13C;
    /**
     * @brief When hit by a screw attack item, the speed is hard set to
     * (0, this, 0).
     */
    /* +140 fp+250 */ float screw_attack_launch_velocity;
    /* +144 fp+254 */ float x144;
    /* +148 fp+258 */ float wall_jump_min_approach_speed;
    /* +14C fp+25C */ float damageice_ice_size;
    /* +150 fp+260 */ float x150_damageice_unk;
    /* +154 fp+264 */ float x154_damageice_unk;
    /* +158 fp+268 */ float damageicejump_vel_y;
    /* +15C fp+26C */ float damageicejump_vel_x_mult;
    /* +160 fp+270 */ float respawn_platform_scale;
    /* +164 fp+274 */ float warp_star_hitbox_scale;
    /* +168 fp+278 */ float x168;
    /* +16C fp+27C */ int camera_zoom_target_bone;
    /* +170 fp+280 */ Vec3 x170;
    /* +17C fp+28C */ float x17C;
    /* +180 fp+290 */ u8 weight_independent_throws_mask;
} ftCo_DatAttrs;
typedef struct Fighter_WaitAnimData {
    char* x0;
    s32 x4;
    s32 x8;
    CmdUnion* xC;
    s32 x10_animCurrFlags;
    uintptr_t x14;
} Fighter_WaitAnimData;
struct ftData {
    /*  +0 */ ftCo_DatAttrs* x0;
    /*  +4 */ void* ext_attr;
    /*  +8 */ struct ftData_x8 {
        /*  +0 */ FtPartsDesc x0;
        /*  +8 */ ftData_x8_x8 x8;
        /* +10 */ u8 x10; ///< Fighter_Part
        /* +11 */ u8 x11;
        /* +12 */ u8 x12;
        /* +13 */ u8 x13;
        /* +14 */ u8 x14;
    }* x8;
    /*  +C */ Fighter_WaitAnimData* xC;
    /* +10 */ u8 (*x10)[2];
    /* +14 */ Fighter_WaitAnimData* x14;
    /* +18 */ u8 (*x18)[2];
    /* +1C */ ftData_x1C** x1C;
    /* +20 */ ftData_x20* x20;
    /* +24 */ M2C_UNK x24;
    /* +28 */ WaitStruct* x28;
    /* +2C */ struct ftDynamics* x2C;
    /* +30 */ ftData_x30* x30;
    /* +34 */ ftData_x34* x34;
    /* +38 */ ftData_x38* x38;
    /* +3C */ struct UnkFloat6_Camera* x3C;
    /* +40 */ struct itPickup* x40;
    /* +44 */ ftData_x44_t* x44;
    /* +48 */ M2C_UNK* x48_items; ///< @todo might be similar to KirbyHat? see
                                ///< ftPr_Init_8013C360
    /* +4C */ FtSFX* x4C_sfx;
    /* +50 */ Vec2* x50;
    /* +54 */ int* x54;
    /* +58 */ struct ftData_x58_t* x58;
    /* +5C */ HSD_Joint* x5C;
};
struct FighterBone {
    /* +0 */ HSD_JObj* joint;
    /* +4 */ HSD_JObj* x4_jobj2; ///< used for interpolation
    union {
        struct {
            /* +8:0 */ u8 flags_b0 : 1;
            /* +8:1 */ u8 flags_b1 : 1;
            /* +8:2 */ u8 flags_b2 : 1;
            /* +8:3 */ u8 flags_b3 : 1;
            /* +8:4 */ u8 flags_b4 : 1;
            /* +8:5 */ u8 flags_b5 : 1;
            /* +8:6 */ u8 flags_b6 : 1;
            /* +8:7 */ u8 flags_b7 : 1; ///< jobj lighting flag
            /* +9:0 */ u8 flags2_b0 : 1; ///< jobj texgen flag
            /* +9:1 */ u8 flags2_b1 : 1; ///< jobj specular flag
            /* +9:2 */ u8 flags2_b2 : 1;
            /* +9:3 */ u8 flags2_b3 : 1;
            /* +9:4 */ u8 flags2_b4 : 1;
            /* +9:5 */ u8 flags2_b5 : 1;
            /* +9:6 */ u8 flags2_b6 : 1;
            /* +9:7 */ u8 flags2_b7 : 1;
        };
        struct {
            u8 hi;
            u8 lo;
        };
        u16 flags8;
    };
    union {
        struct {
            /* +C */ u8 xC;
            /* +D */ u8 xD : 7;
        };
        u32 flagsC;
    };
};
;
/* fp+2114 */ typedef struct _SmashAttr {
    /* fp+2114 */ SmashState state;
    /// number of frames fp has charged for
    /* fp+2118 */ float x2118_frames;
    /// frame that charge begins/ends
    /* fp+211C */ float x211C_holdFrame;
    /// damage multiplier
    /* fp+2120 */ float x2120_damageMul;
    /// speed multiplier?
    /* fp+2124 */ float x2124_frameSpeedMul;
    /* fp+2128 */ s32 x2128;
    /* fp+212C */ u8 x212C;
    /* fp+212D */ u8 x212D;
    /* fp+212E */ s8 x212E;
    /* fp+212F */ s8 x212F;
    /// bool for smash sfx?
    /* fp+2130 */ s32 x2130_sfxBool;
    /* fp+2134 */ u8 x2134_vibrateFrame;
    /* fp+2135 */ s8 x2135;
    /* fp+2136 */ s8 x2136;
    /* fp+2137 */ s8 x2137;
    /* fp+2138 */ float x2138_smashSinceHitbox;
} SmashAttr;
typedef struct itPickup {
    /*  +0 */ Vec4 gr_light_offset;
    /* +10 */ Vec4 gr_heavy_offset;
    /* +20 */ Vec4 air_light_offset;
} itPickup;
struct UnkCostumeStruct {
    /*  +0 */ HSD_Joint* joint;
    /*  +4 */ HSD_MatAnimJoint* x4;
    /*  +8 */ u32 pad_x8; // Probably a pointer.
    /*  +C */ u32 pad_xC;
    /* +10 */ u32 pad_x10;
    /* +14 */ HSD_Archive* x14_archive;
};
struct UnkCostumeList {
    UnkCostumeStruct* costume_list;
    u8 numCostumes;
};
struct MotionState {
    enum_t anim_id;
    enum_t x4_flags;
    union {
        /// @todo Try to match without this being a @c union.
        u32 _;
        struct {
            u8 move_id : 8;
            struct {
                u8 x9_b0 : 1;
                u8 x9_b1 : 1;
                u8 x9_b2 : 1;
                u8 x9_b3 : 1;
                u8 x9_b4 : 1;
                u8 x9_b5 : 1;
                u8 x9_b6 : 1;
                u8 x9_b7 : 1;
            };
            u8 xA;
            u8 xB;
        };
    };
    HSD_GObjEvent anim_cb;
    HSD_GObjEvent input_cb;
    HSD_GObjEvent phys_cb;
    HSD_GObjEvent coll_cb;
    HSD_GObjEvent cam_cb;
};
struct Fighter_CostumeStrings {
    char* dat_filename;
    char* joint_name;
    char* matanim_joint_name;
};
struct Fighter_DemoStrings {
    char* result_filename;
    char* intro_filename;
    char* ending_filename;
    char* vi_wait_filename;
};
/// @todo Rename this and its members; investigate using it elsewhere.
/* fp+2070 */ union Struct2070 {
    /* fp+2070 */ struct {
        /* fp+2070 */ s8 x2070;
        /* fp+2071:0 */ u8 x2071_b0_3 : 4;
        /* fp+2071:4 */ u8 x2071_b4 : 1;
        /* fp+2071:5 */ u8 x2071_b5 : 1;
        /* fp+2071:6 */ u8 x2071_b6 : 1;
        /* fp+2071:7 */ u8 x2071_b7 : 1;
        /* fp+2072:0 */ u8 x2072_b0 : 1;
        /* fp+2072:1 */ u8 x2072_b1 : 1;
        /* fp+2072:2 */ u8 x2072_b2 : 1;
        /* fp+2072:3 */ u8 count_x1A4 : 1;
        /* fp+2072:4 */ u8 count_thrown_items : 1;
        /* fp+2072:5 */ u8 count_aerials : 1;
        /* fp+2072:6 */ u8 count_x1A0 : 1;
        /* fp+2072:7 */ u8 count_specials : 1;
        /* fp+2073 */ u8 x2073;
    };
    /* fp+2070 */ int x2070_int;
};
struct Struct207C {
    f32 x;
    s32 y;
};
/// @todo See if this should likewise be instituted for item->xD94 thru
/// xDA4_word/xDA8_short
/* fp+2074 */ struct Struct2074 {
    /* fp+2074 */ S32Vec2 x2074_vec;
    /* fp+207C */ struct Struct207C x207C;
    /* fp+2084 */ union {
        u32 x2084;
        struct {
            u8 x2084_b0 : 1;
            u8 x2084_b1 : 1;
            u8 x2084_b2 : 1;
            u8 x2084_b3 : 1;
            u8 x2084_b4 : 1;
            u8 x2084_b5 : 1;
            u8 x2084_b6 : 1;
            u8 x2084_b7 : 1;
            u8 x2085_b0 : 1;
            u8 x2085_b1 : 1;
            u8 x2085_b2 : 1;
            u8 x2085_b3 : 1;
            u8 x2085_b4 : 1;
            u8 x2085_b5 : 1;
            u8 x2085_b6 : 1;
            u8 x2085_b7 : 1;
        };
    };
    /* fp+2088 */ u16 x2088;
};
struct ftDeviceUnk3 {
    Ground_GObj* ground;
    u32 type; ///< ftCommon_BuryType for ftDevice_BuryThings
    ftDevice_Callback0 active_cb;
};
struct ftDeviceUnk4 {
    int x0;
    M2C_UNK x4;
};
;
/// TODO same as ftDeviceUnk3
struct ftDeviceUnk5 {
    M2C_UNK x0;
    ftCommon_BuryType x4;
    bool (*cb)(M2C_UNK, Fighter_GObj*);
};
;
struct Fighter_x1A88_xFC_t {
    /*  +0 */ HSD_Pad x0;
    /*  +4 */ u8 x4;
    /*  +5 */ u8 x5;
    /*  +6 */ S8Vec2 lstick;
    /*  +8 */ S8Vec2 cstick;
    /*  +A */ u8 xA;
    /*  +B */ u8 xB;
    /*  +C */ Vec3 cur_pos;
    /* +18 */ float facing_dir;
};
;
struct CpuFighter {
    /*   +0 */ HSD_Pad buttons;
    /*   +4 */ S8Vec2 lstick;
    /*   +6 */ S8Vec2 cstick;
    /*   +8 */ u8 ltrigger;
    /*   +9 */ u8 rtrigger; ///< R trigger analog value, 0 to 255
    /*   +C */ CpuKind kind;
    /*  +10 */ int level; ///< CPU level, 0-9
    /*  +14 */ int x14;
    /*  +18 */ int x18;
    /*  +1C */ int x1C;
    /*  +20 */ int x20;
    /*  +24 */ int x24;
    /*  +28 */ int x28;
    /*  +2C */ int x2C;
    /*  +30 */ int x30;
    /*  +34 */ int x34;
    /*  +38 */ float x38;
    /*  +3C */ float x3C;
    /*  +40 */ float x40;
    /*  +44 */ Fighter* x44;
    /*  +48 */ M2C_UNK x48;
    /*  +4C */ Item* x4C;
    /*  +50 */ Item* x50;
    /*  +54 */ Vec2 x54;
    /*  +5C */ float x5C;
    /*  +60 */ int x60;
    /*  +64 */ Vec2 x64;
    /*  +6C */ Vec2 x6C;
    /*  +74 */ Vec2 x74;
    /*  +7C */ int x7C;
    /*  +80 */ int x80;
    /*  +84 */ int x84;
    /*  +88 */ int x88;
    /*  +8C */ int x8C;
    /*  +90 */ int x90;
    /*  +94 */ int x94;
    /*  +98 */ Vec3 x98;
    /*  +A4 */ int xA4;
    /*  +A8 */ s32
        xA8_array[8]; ///< defend move queue (up to 8 entries, count in xC8)
    /*  +C8 */ u8 xC8; ///< defend move queue count
    /*  +C9 */ u8 pad_xC9[0xCC - 0xC9];
    /*  +CC */ s32
        xCC_array[8]; ///< attack move queue (up to 8 entries, count in xEC)
    /*  +EC */ u8 xEC; ///< attack move queue count
    /*  +ED */ u8 pad_xED[0xF0 - 0xED];
    /*  +F0 */ Fighter* xF0;
    /*  +F4 */ Item* xF4;
    /*  +F8:0 */ u8 xF8_b0 : 1;
    /*  +F8:1 */ u8 xF8_b12 : 2;
    /*  +F8:3 */ u8 xF8_b34 : 2;
    /*  +F8:5 */ u8 xF8_b5 : 1;
    /*  +F8:6 */ u8 xF8_b6 : 1;
    /*  +F8:7 */ u8 xF8_b7 : 1;
    /*  +F9:0 */ u8 xF9_b0 : 1;
    /*  +F9:1 */ u8 xF9_b1 : 1;
    /*  +F9:2 */ u8 xF9_b2 : 1;
    /*  +F9:3 */ u8 xF9_b3 : 1;
    /*  +F9:4 */ u8 xF9_b4 : 1;
    /*  +F9:5 */ u8 xF9_b5 : 1;
    /*  +F9:6 */ u8 xF9_b6 : 1;
    /*  +F9:7 */ u8 xF9_b7 : 1;
    /*  +FA:0 */ u8 xFA_b0 : 1;
    /*  +FA:1 */ u8 xFA_b1 : 1;
    /*  +FA:2 */ u8 xFA_b2 : 1;
    /*  +FA:3 */ u8 xFA_b34 : 2;
    /*  +FA:5 */ u8 xFA_b5 : 1;
    /*  +FA:6 */ u8 xFA_b6 : 1;
    /*  +FA:7 */ u8 xFA_b7 : 1;
    /*  +FB:0 */ u8 xFB_b0 : 1;
    /*  +FB:1 */ u8 xFB_b1 : 1;
    /*  +FB:2 */ u8 xFB_b2 : 1;
    /*  +FB:3 */ u8 xFB_b3 : 1;
    /*  +FB:4 */ u8 xFB_b4 : 1;
    /*  +FB:5 */ u8 xFB_b5 : 1;
    /*  +FB:6 */ u8 xFB_b6 : 1;
    /*  +FB:7 */ u8 xFB_b7 : 1;
    /*  +FC */ struct Fighter_x1A88_xFC_t xFC[30];
    /* +444 */ struct Fighter_x1A88_xFC_t* x444;
    /* +448 */ struct Fighter_x1A88_xFC_t* x448;
    /* +44C */ u32 command_duration;
    /* +450 */ s8* csP; ///< command script pointer, for reading commands
    /* +454 */ s8 buffer[0x100]; ///< command script buffer area
    /* +554 */ s8* write_pos; ///< where to write commands in the buffer area
    /* +558 */ float x558;
    /* +55C */ float x55C;
    /* +560 */ float x560;
    /* +564 */ float x564;
    /* +568 */ float x568;
    /* +56C */ float x56C;
    /* +570 */ float x570;
    /* +574 */ float half_width;
    /* +578 */ float half_height;
};
;
struct Fighter_x59C_t {
    u8 x0[0x8000];
};
;
struct ft_800898B4_t {
    /*  +0  */ int x0;
    /*  +4  */ int x4;
    /*  +8  */ float kb_applied1;
    /*  +C  */ int xC;
    /*  +10 */ u8 x10_b0 : 1;
    /*  +10 */ u8 x10_b1 : 1;
    /*  +10 */ u8 x10_b2 : 1;
    /*  +10 */ u8 x10_b3 : 1;
    /*  +10 */ u8 x10_b4 : 1;
    /*  +10 */ u8 x10_b5 : 1;
    /*  +10 */ u8 x10_b6 : 1;
    /*  +10 */ u8 x10_b7 : 1;
    /*  +11 */ u8 x11_b0 : 1;
    /*  +11 */ u8 x11_b1 : 1;
    /*  +11 */ u8 x11_b2 : 1;
    /*  +11 */ u8 x11_b3 : 1;
    /*  +11 */ u8 x11_b4 : 1;
};
typedef struct Fighter_x1614_t {
    f32 x0;
    HSD_JObj* x4;
    Vec3 x8;
    Vec3 x14;
    Vec3 x20;
} Fighter_x1614_t;
typedef struct Fighter_x8B0_t {
    int x0;
    float x4;
    float x8;
    float xC;
    s8 x10;
    s8 x11;
} Fighter_x8B0_t;
typedef struct Fighter_x20B0_t {
    Vec3 x0;
    Vec3 xC;
} Fighter_x20B0_t;
typedef struct Fighter_x2D0_t {
    /// @warning i didnt confirm these comments, they come from altimors
    /// ghidra db
    int x0; ///< turn frames
    float x4; ///< turn threshold
    float x8; ///< x impulse
    float xC; ///< accel mult
    float x10; ///< speed mult
    float x14[5]; ///< y impulse
    int x28; ///< state count
    enum_t x2C; ///< start state
    enum_t x30; ///< start state helmet
} Fighter_x2D0_t;
typedef struct Fighter_x1670_t {
    /* +00 */ Vec3 v1;
    /* +0C */ float v2;
    /* +10 */ HSD_JObj* jobj;
    /* +14 */ float x14;
    /* +18 */ Vec3 x18;
    /* +24 */ int x24;
} Fighter_x1670_t; ///< @todo figure out proper size
typedef struct FtInputTimers {
    /* +00 */ U8Vec2 lstick;
    /* +02 */ u8 trigger;
} FtInputTimers;
struct Fighter {
    /*    fp+0 */ HSD_GObj* gobj;
    /*    fp+4 */ FighterKind kind;
    /*    fp+8 */ s32 x8_spawnNum;
    /*    fp+C */ u8
        player_idx; ///< Index into player_slots[Gm_Player_NumMax];
    /*   fp+10 */ FtMotionId motion_id;
    /*   fp+14 */ enum_t anim_id;
    /*   fp+18 */ s32 x18;
    /*   fp+1C */ MotionState* x1C_actionStateList;
    /*   fp+20 */ MotionState* x20_actionStateList;
    /*   fp+24 */ struct Fighter_WaitAnimData* x24;
    /*   fp+28 */ u8 (*x28)[2];
    /*   fp+2C */ float facing_dir;
    /*   fp+30 */ float facing_dir1;
    /*   fp+34 */ Vec3 x34_scale;
    /*   fp+40 */ float x40;
    /*   fp+44 */ Mtx x44_mtx;
    /*   fp+74 */ Vec3 x74_self_accel;
    /*   fp+80 */ Vec3 self_vel;
    /*   fp+8C */ Vec3 x8c_kb_vel;
    /*   fp+98 */ Vec3 x98_atk_shield_kb;
    /*   fp+A4 */ Vec3 xA4_unk_vel;
    /*   fp+B0 */ Vec3 cur_pos;
    /*   fp+BC */ Vec3 prev_pos;
    /*   fp+C8 */ Vec3 pos_delta;
    /*   fp+D4 */ Vec3 xD4_unk_vel;
    /*   fp+E0 */ GroundOrAir ground_or_air;
    /*   fp+E4 */ float xE4_ground_accel_1;
    /*   fp+E8 */ float xE8_ground_accel_2;
    /*   fp+EC */ float gr_vel;
    /*   fp+F0 */ float xF0_ground_kb_vel;
    /*   fp+F4 */ float xF4_ground_attacker_shield_kb_vel;
    /*   fp+F8 */ Vec2 xF8_playerNudgeVel;
    /*  fp+100 */ float x100;
    /*  fp+104 */ u8 x104;
    /*  fp+105 */ s8 x105;
    /*  fp+106 */ s8 x106;
    /*  fp+107 */ s8 x107;
    /*  fp+108 */ HSD_Joint* x108_costume_joint;
    /*  fp+10C */ ftData* ft_data;
    /*  fp+110 */ ftCo_DatAttrs co_attrs;
    /*  fp+294 */ itPickup x294_itPickup;
    /*  fp+2C4 */ Vec2 x2C4;
    /*  fp+2CC */ ftDonkeyAttributes* x2CC;
    /*  fp+2D0 */ Fighter_x2D0_t* x2D0; ///< multi jump stats
    /*  fp+2D4 */ void* dat_attrs;
    /*  fp+2D8 */ void* dat_attrs_backup;
    /*  fp+2DC */ float x2DC;
    /*  fp+2E0 */ float x2E0;
    /*  fp+2E4 */ float x2E4;
    /*  fp+2E8 */ float x2E8;
    /*  fp+2EC */ float x2EC;
    /*  fp+2F0 */ BoneDynamicsDesc dynamic_bone_sets[Ft_Dynamics_NumMax];
    /*  fp+3E0 */ int dynamics_num;
    /*  fp+3E4 */ CommandInfo x3E4_fighterCmdScript;
    /*  fp+408 */ ColorOverlay x408;
    /*  fp+488 */ ColorOverlay x488;
    /*  fp+508 */ ColorOverlay x508;
    /*  fp+588 */ HSD_LObj* x588;
    /*  fp+58C */ u32 x58C;
    /*  fp+590 */ FigaTree* x590;
    /*  fp+594 */ union {
        struct {
            /* fp+594:0 */ u8 x594_b0 : 1;
            /* fp+594:1 */ u8 x594_b1_loop : 1;
            /* fp+594:2 */ u8 x594_b2 : 1;
            /* fp+594:3 */ u8 x594_b3 : 1;
            /* fp+594:4 */ u8 x594_b4 : 1;
            /* fp+594:5 */ u8 x594_b5 : 1;
            /* fp+594:6 */ u8 x594_b6 : 1;
            /* fp+594:7 */ u8 x594_b7 : 1;
            /* fp+596 */ struct {
                /* fp+596:0 */ u8 x0 : 7;
                /* fp+596:7 */ u16 x7 : 3;
            } x596_bits;
        };
        struct {
            u32 x594_pad : 10;
            u32 x594_bits : 13;
            u32 x594_pad2 : 3;
            u32 x597_bits : 6; // FighterKind of this fighter's x590 FigaTree
        };
        /* fp+594 */ s32 x594_s32;
    };
    /*  fp+598 */ FigaTree* x598;
    /*  fp+59C */ struct Fighter_x59C_t* x59C;
    /*  fp+5A0 */ struct Fighter_x59C_t* x5A0;
    /*  fp+5A4 */ uintptr_t x5A4;
    /*  fp+5A8 */ uintptr_t x5A8;
    /*  fp+5AC */ FtPartsVis x5AC;
    /*  fp+5CC */ CostumeTObjList tobj_list;
    /*  fp+5E8 */ FighterBone* parts;
    /*  fp+5EC */ DObjList dobj_list;
    /*  fp+5F4 */ struct {
        /*  fp+5F4 */ s8 prev, idx;
    } x5F4_arr[12];
    /*  fp+60C */ EF_QueuedEffect* x60C;
    /*  fp+610 */ GXColor x610_color_rgba[2];
    /*  fp+618 */ u8 pad_port; ///< Physical controller port for this fighter
    /*  fp+619 */ u8 costume_id;
    /*  fp+61A */ u8 sub_color;
    /*  fp+61B */ u8 team;
    /*  fp+61C */ s8 x61C;
    /*  fp+61D */ u8 x61D;
    /*  fp+61E */ u8 filler_x61E[0x620 - 0x61E];
    /*  fp+620 */ struct {
        /*  fp+620 */ Vec2 lstick[3]; ///< lstick buffer
        /*  fp+638 */ Vec2 cstick[3]; ///< cstick buffer
        /*  fp+650 */ float triggers[3]; ///< analog trigger buffer
        /*  fp+65C */ HSD_Pad held_buttons[3]; ///< buttons buffer
        /*  fp+668 */ HSD_Pad pressed_buttons; ///< buttons pressed this frame
        /*  fp+66C */ HSD_Pad
            released_buttons; ///< buttons released this frame
    } input;
    /**
     * Frames since each analog input last crossed its threshold: the stick
     * smash deadzones, #shield_press_threshold for the trigger.
     */
    /*  fp+670 */ FtInputTimers active_timer; ///< consumers stamp 254
    /*  fp+673 */ FtInputTimers active_sticky; ///< no consumer resets it
    /*  fp+676 */ FtInputTimers active_duration; ///< survives the input ending
    /*  fp+679 */ FtInputTimers activity_timer; ///< input-count stat only
    /*  fp+67C */ u8 x67C;
    /*  fp+67D */ u8 x67D;
    /*  fp+67E */ u8 x67E;
    /*  fp+67F */ u8 x67F;
    /*  fp+680 */ u8 x680;
    /*  fp+681 */ u8 x681;
    /*  fp+682 */ u8 x682;
    /*  fp+683 */ u8 x683;
    /*  fp+684 */ u8 x684;
    /*  fp+685 */ u8 x685;
    /*  fp+686 */ u8 x686;
    /*  fp+687 */ u8 x687;
    /*  fp+688 */ u8 x688;
    /*  fp+689 */ u8 x689;
    /*  fp+68A */ u8 x68A;
    /*  fp+68B */ u8 x68B;
    /*  fp+68C */ Vec3 x68C_transNPos;
    /*  fp+698 */ Vec3 x698;
    /*  fp+6A4 */ Vec3 x6A4_transNOffset;
    /*  fp+6B0 */ Vec3 x6B0;
    /*  fp+6BC */ float lstick_angle;
    /*  fp+6C0 */ Vec3 x6C0;
    /*  fp+6CC */ Vec3 x6CC;
    /*  fp+6D8 */ Vec3 x6D8;
    /*  fp+6E4 */ Vec3 x6E4;
    /*  fp+6F0 */ CollData coll_data;
    /*  fp+88C */ s32 ecb_lock;
    /*  fp+890 */ CmSubject* x890_cameraBox;
    /*  fp+894 */ float cur_anim_frame;
    /*  fp+898 */ float x898_unk;
    /*  fp+89C */ float frame_speed_mul;
    /*  fp+8A0 */ float x8A0_unk;
    /*  fp+8A4 */ float x8A4_animBlendFrames;
    /*  fp+8A8 */ float x8A8_anim_frame;
    /*  fp+8AC */ HSD_JObj* x8AC_animSkeleton;
    /*  fp+8B0 */ Fighter_x8B0_t x8B0[5];
    /*  fp+914 */ HitCapsule x914[4];
    /*  fp+DF4 */ HitCapsule xDF4[2];
    /* fp+1064 */ HitCapsule x1064_thrownHitbox;
    /* fp+119C */ u8 x119C_teamUnk;
    /* fp+119D */ u8 grabber_unk1;
    /* fp+119E */ u8 hurt_capsules_len;
    /* fp+119F */ u8 x119F;
    /* fp+11A0 */ FighterHurtCapsule hurt_capsules[15];
    /* fp+1614 */ Fighter_x1614_t x1614[2];
    /* fp+166C */ u8 x166C; ///< number of valid entries in x1670 array
    /* fp+1670 */ Fighter_x1670_t x1670[1]; ///< @todo figure out proper size
    /* fp+1674 */ u8 filler_x1674[0x1828 - 0x1670 - 0x28];
    /* fp+1828 */ enum_t x1828;
    /* fp+182C */ struct dmg {
        /* fp+182C */ float x182c_behavior;
        /* fp+1830 */ float x1830_percent;
        /* fp+1834 */ float x1834;
        /* fp+1838 */ float x1838_percentTemp;
        /* fp+183C */ int x183C_applied;
        /* fp+1840 */ int x1840;
        /* fp+1844 */ float facing_dir_1;
        /* fp+1848 */ int x1848_kb_angle;
        /* fp+184C */ int x184c_damaged_hurtbox;
        /* fp+1850 */ float kb_applied;
        /* fp+1854 */ Vec3 x1854_collpos;
        /* fp+1860 */ u32 x1860_element;
        /* fp+1864 */ int x1864;
        /* fp+1868 */ HSD_GObj* x1868_source;
        /* fp+186C */ int x186c;
        /* fp+1870 */ struct DmgLogEntry* x1870;
        /* fp+1874 */ int x1874;
        /* fp+1878 */ int x1878;
        /* fp+187C */ float x187c;
        /* fp+1880 */ Vec3 x1880;
        /* fp+188C */ int x188c;
        /* fp+1890 */ int x1890;
        /* fp+1894 */ HSD_GObj* x1894;
        /* fp+1898 */ float x1898;
        /* fp+189C */ float x189C_unk_num_frames;
        /* fp+18A0 */ float x18a0;
        /// kb magnitude
        /* fp+18A4 */ float x18A4_knockbackMagnitude;
        /* fp+18A8 */ float x18A8;
        /// in frames
        /* fp+18AC */ int x18ac_time_since_hit;
        /* fp+18B0 */ float armor0;
        /* fp+18B4 */ float armor1;
        /* fp+18B8 */ float x18B8;
        /* fp+18BC */ float x18BC;
        /* fp+18C0 */ int x18C0;
        /// damage source ply number
        /* fp+18C4 */ int x18c4_source_ply;
        /* fp+18C8 */ int x18C8;
        /* fp+18CC */ int x18CC;
        /* fp+18D0 */ int x18D0;
        /* fp+18D4 */ union Struct2070 x18d4;
        /* fp+18D8 */ ft_800898B4_t x18d8;
        /// Last Move Instance This Player Was Hit by
        /* fp+18EC */ u16 x18ec_instancehitby;
        /* fp+18F0 */ int x18F0;
        /* fp+18F4 */ int x18F4;
        /* fp+18F8 */ u8 x18F8;
        /* fp+18F9 */ u8 x18f9;
        /* fp+18FA */ u16 x18fa_model_shift_frames;
        /* fp+18FC */ u8 x18FC;
        /* fp+18FD */ u8 x18FD;
        /* fp+1900 */ float x1900;
        /* fp+1904 */ float x1904;
        /* fp+1908 */ enum_t x1908;
        /* fp+190C */ M2C_UNK x190C;
        /* fp+1910 */ int x1910;
        /* fp+1914 */ int x1914;
        /* fp+1918 */ int int_value;
        /* fp+191C */ float x191C;
        /* fp+1920 */ float facing_dir;
        /* fp+1924 */ int x1924;
        /* fp+1928 */ float x1928;
        /* fp+192C */ float x192c;
        /* fp+1930 */ struct lb_80014638_arg0_t x1930;
        /* fp+1948 */ int x1948;
        /* fp+194C */ int x194C;
        /* fp+1950 */ bool x1950;
        /* fp+1954 */ float x1954;
        /* fp+1958 */ float x1958;
        /* fp+195C */ float x195c_hitlag_frames;
    } dmg;
    /* fp+1960 */ float x1960_vibrateMult;
    /* fp+1964 */ float x1964;
    /* fp+1968 */ u8 x1968_jumpsUsed;
    /* fp+1969 */ u8 x1969_walljumpUsed;
    /* fp+196C */ float hitlag_mul;
    /* fp+1970 */ enum_t unk_msid;
    /* fp+1974 */ Item_GObj* item_gobj;
    /* fp+1978 */ Item_GObj* x1978; // held item
    /* fp+197C */ HSD_GObj* x197C; ///< bunny hood
    /* fp+1980 */ HSD_GObj* x1980;
    /* fp+1984 */ Item_GObj* x1984_heldItemSpec;
    /* fp+1988 */ enum_t x1988;
    /* fp+198C */ s32 x198C;
    /* fp+1990 */ s32 x1990;
    /* fp+1994 */ int x1994;
    /* fp+1998 */ float shield_health;
    /* fp+199C */ float lightshield_amount;
    /* fp+19A0 */ s32 x19A0_shieldDamageTaken;
    /* fp+19A4 */ int x19A4;
    /* fp+19A8 */ HSD_GObj* x19A8;
    /* fp+19AC */ float specialn_facing_dir;
    /* fp+19B0 */ enum_t x19B0;
    /* fp+19B4 */ float shield_unk0;
    /* fp+19B8 */ float shield_unk1;
    /* fp+19BC */ s32 x19BC_shieldDamageTaken3;
    /* fp+19C0 */ HitResult shield_hit;
    /* fp+19E4 */ HitResult reflect_hit;
    /* fp+1A08 */ HitResult absorb_hit;
    /* fp+1A2C */ struct {
        /* fp+1A2C */ float x1A2C_reflectHitDirection;
        /* fp+1A30 */ s32 x1A30_maxDamage;
        /* fp+1A34 */ float x1A34_damageMul;
        /* fp+1A38 */ float x1A38_speedMul;
        /// % damage over the maximum reflectable damage threshold
        /* fp+1A3C */ s32 x1A3C_damageOver;
    } ReflectAttr;
    /* fp+1A40 */ struct {
        /* fp+1A40 */ float x1A40_absorbHitDirection;
        /// unconfirmed?
        /* fp+1A44 */ s32 x1A44_damageTaken;
        /// unconfirmed?
        /* fp+1A48 */ s32 x1A48_hitsTaken;
    } AbsorbAttr;
    /* fp+1A4C */ float grab_timer;
    /* fp+1A50 */ s8 x1A50;
    /* fp+1A51 */ s8 x1A51;
    /* fp+1A52 */ u8 x1A52;
    /* fp+1A53 */ u8 x1A53;
    /* fp+1A54 */ s32 x1A54;
    /* fp+1A58 */ Fighter_GObj* victim_gobj;
    /* fp+1A5C */ Fighter_GObj* x1A5C;
    /* fp+1A60 */ Item_GObj* target_item_gobj;
    /* fp+1A64 */ M2C_UNK x1A64;
    /* fp+1A68 */ u16 x1A68;
    /* fp+1A6A */ u16 x1A6A;
    /* fp+1A6C */ float x1A6C;
    /* fp+1A70 */ Vec3 x1A70;
    /* fp+1A7C */ Vec3 x1A7C;
    /* fp+x1A88 */ struct CpuFighter cpu;
    /* fp+2004 */ int x2004;
    /* fp+2008 */ s32 x2008;
    /* fp+200C */ s32 x200C;
    /* fp+2010 */ s32 x2010;
    /* fp+2014 */ s32 x2014;
    /* fp+2018 */ s32 x2018;
    /* fp+201C */ s32 x201C;
    /* fp+2020 */ s8 x2020;
    /* fp+2021 */ s8 x2021;
    /* fp+2022 */ s8 x2022;
    /* fp+2024 */ s32 x2024;
    /* fp+2028 */ int metal_timer;
    /* fp+202C */ int metal_health;
    /* fp+2030 */ s32 x2030;
    /* fp+2034 */ s32 x2034;
    /* fp+2038 */ s32 x2038;
    /* fp+203C */ DObjList x203C;
    /* fp+2044 */ u8 filler_x2044[0x2064 - 0x2044];
    /* fp+2064 */ int x2064_ledgeCooldown;
    /* fp+2068 */ s32 x2068_attackID;
    /* fp+206C */ u16 x206C_attack_instance;
    /* fp+206E */ s16 x206E;
    /* fp+2070 */ union Struct2070 x2070;
    /* fp+2074 */ struct Struct2074 x2074;
    /* fp+208C */ s32 x208C;
    /* fp+2090 */ u16 x2090;
    /* fp+2092 */ u16 x2092;
    /// GObj pointer of combo victim?
    /* fp+2094 */ Fighter_GObj* x2094;
    /* fp+2098 */ u16 x2098;
    /* fp+209A */ u16 x209A;
    /* fp+209C */ u16 x209C;
    /* fp+20A0 */ HSD_JObj* x20A0_accessory;
    /* fp+20A4 */ LbShadow x20A4;
    /* fp+20AC */ HSD_GObj* unk_gobj;
    /* fp+20B0 */ Fighter_x20B0_t x20B0[3];
    /* fp+20F8 */ float x20F8;
    /* fp+20FC */ float x20FC;
    /* fp+2100 */ s8 x2100;
    /* fp+2101:0 */ u8 x2101_bits_0to6 : 7;
    /* fp+2101:7 */ u8 x2101_bits_8 : 1;
    /* fp+2102 */ s8 x2102;
    /* fp+2103 */ s8 x2103;
    /* fp+2104 */ int x2104;
    /* fp+2108 */ int capture_timer;
    /* fp+210C */ u8 wall_jump_input_timer;
    /* fp+210C */ u8 filler_x210C[3];
    /* fp+2110 */ float x2110_walljumpWallSide;
    /* fp+2114 */ SmashAttr smash_attrs;
    /* fp+213C */ s32 x213C;
    /* fp+2140 */ float x2140;
    /* fp+2144 */ int x2144; ///< AXDriver voice
    /* fp+2148 */ s32 x2148; ///< AXDriver voice
    /* fp+214C */ s32 x214C; ///< AXDriver voice
    /* fp+2150 */ s32 x2150; ///< AXDriver voice
    /* fp+2154 */ s32 x2154; ///< AXDriver voice
    /* fp+2158 */ s32 x2158; ///< AXDriver voice
    /* fp+215C */ s32 x215C; ///< AXDriver voice
    /* fp+2160 */ s32 x2160; ///< AXDriver voice
    /* fp+2164 */ int x2164;
    /* fp+2168 */ int x2168;
    /* fp+216C */ float unk_grab_val;
    /* fp+2170 */ float x2170;
    /* fp+2174 */ Vec x2174;
    /* fp+2180 */ s32 x2180;
    /* fp+2184 */ HSD_JObj* x2184;
    /* fp+2188 */ S32Vec2 x2188;
    /// callback struct. Not all of them used by fighter.c.
    /* fp+2190 */ HSD_GObjEvent grab_cb;
    /* fp+2194 */ HSD_GObjEvent x2194;
    /* fp+2198 */ HSD_GObjInteraction grabbed_cb;
    /* fp+219C */ HSD_GObjEvent input_cb;
    /* fp+21A0 */ HSD_GObjEvent anim_cb;
    /* fp+21A4 */ HSD_GObjEvent phys_cb;
    /* fp+21A8 */ HSD_GObjEvent coll_cb;
    /* fp+21AC */ HSD_GObjEvent cam_cb;
    /* fp+21B0 */ HSD_GObjEvent accessory1_cb;
    /* fp+21B4 */ HSD_GObjEvent accessory2_cb;
    /* fp+21B8 */ HSD_GObjEvent accessory3_cb;
    /* fp+21BC */ HSD_GObjEvent accessory4_cb;
    /* fp+21C0 */ HSD_GObjEvent deal_dmg_cb;
    /* fp+21C4 */ HSD_GObjEvent shield_hit_cb;
    /* fp+21C8 */ HSD_GObjEvent reflect_hit_cb;
    /* fp+21CC */ HSD_GObjEvent x21CC;
    /* fp+21D0 */ HSD_GObjEvent hitlag_cb;
    /* fp+21D4 */ HSD_GObjEvent pre_hitlag_cb;
    /* fp+21D8 */ HSD_GObjEvent post_hitlag_cb;
    /* fp+21DC */ HSD_GObjEvent take_dmg_cb;
    /* fp+21E0 */ HSD_GObjEvent death1_cb;
    /// @remarks Used. Internally Dead_Proc as evidenced by 800F5430.
    /* fp+21E4 */ HSD_GObjEvent death2_cb;
    /* fp+21E8 */ HSD_GObjEvent death3_cb;
    /* fp+21EC */ HSD_GObjEvent x21EC;
    /* fp+21F0 */ HSD_GObjEvent take_dmg_2_cb;
    /* fp+21F4 */ HSD_GObjEvent hurtbox_detect_cb;
    /* fp+21F8 */ HSD_GObjEvent x21F8;
    /* fp+21FC */ UnkFlagStruct x21FC_flag;
    /* fp+21FC */ u8 filler_x21FC[0x2200 - 0x21FD];
    /* fp+2200 */ u32 cmd_vars[4];
    /* fp+2210 */ union {
        u32 throw_flags;
        struct {
            u8 throw_flags_b0 : 1;
            u8 throw_flags_b1 : 1;
            u8 throw_flags_b2 : 1;
            u8 throw_flags_b3 : 1;
            u8 throw_flags_b4 : 1;
            u8 throw_flags_b5 : 1;
            u8 throw_flags_b6 : 1;
            u8 throw_flags_b7 : 1;
        };
    };
    /* fp+2214 */ float cmd_timer;
    /* fp+2218:0 */ u8 allow_interrupt : 1;
    /* fp+2218:1 */ u8 x2218_b1 : 1;
    /* fp+2218:2 */ u8 x2218_b2 : 1;
    /* fp+2218:3 */ u8 reflecting : 1;
    /* fp+2218:4 */ u8 x2218_b4 : 1;
    /* fp+2218:5 */ u8 x2218_b5 : 1;
    /* fp+2218:6 */ u8 x2218_b6 : 1;
    /* fp+2218:7 */ u8 x2218_b7 : 1;
    /* fp+2219:0 */ u8 x2219_b0 : 1;
    /* fp+2219:1 */ u8 x2219_b1 : 1;
    /* fp+2219:2 */ u8 x2219_b2 : 1;
    /* fp+2219:3 */ u8 x2219_b3 : 1;
    /* fp+2219:4 */ u8 x2219_b4 : 1;
    /* fp+2219:5 */ u8 x2219_b5 : 1;
    /* fp+2219:6 */ u8 x2219_b6 : 1;
    /* fp+2219:7 */ u8 x2219_b7 : 1;
    /* fp+221A:0 */ u8 x221A_b0 : 1;
    /* fp+221A:1 */ u8 x221A_b1 : 1;
    /* fp+221A:2 */ u8 allow_sdi : 1;
    /* fp+221A:3 */ u8 x221A_b3 : 1;
    /* fp+221A:4 */ u8 fall_fast : 1;
    /* fp+221A:5 */ u8 x221A_b5 : 1;
    /* fp+221A:6 */ u8 x221A_b6 : 1;
    /* fp+221A:7 */ u8 x221A_b7 : 1;
    /* fp+221B */ struct {
        /* fp+221B:0 */ u8 x221B_b0 : 1;
        /* fp+221B:1 */ u8 x221B_b1 : 1;
        /* fp+221B:2 */ u8 x221B_b2 : 1;
        /* fp+221B:3 */ u8 x221B_b3 : 1;
        /* fp+221B:4 */ u8 x221B_b4 : 1;
        /* fp+221B:5 */ u8 x221B_b5 : 1;
        /* fp+221B:6 */ u8 x221B_b6 : 1;
        /* fp+221B:7 */ u8 x221B_b7 : 1;
    };
    /* fp+221C:0 */ u16 x221C_b0 : 1;
    /* fp+221C:1 */ u16 x221C_b1 : 1;
    /* fp+221C:2 */ u16 x221C_b2 : 1;
    /* fp+221C:3 */ u16 x221C_b3 : 1;
    /* fp+221C:4 */ u16 x221C_b4 : 1;
    /* fp+221C:5 */ u16 x221C_b5 : 1;
    /* fp+221C:6 */ u16 x221C_b6 : 1;
    /* fp+221C:7 */ u16 x221C_u16_y : 3;
    /* fp+221D:2 */ u16 x221D_b2 : 1;
    /* fp+221D:3 */ u16 has_prev_input : 1;
    /* fp+221D:4 */ u16 input_disabled : 1;
    /* fp+221D:5 */ u16 x221D_b5 : 1;
    /* fp+221D:6 */ u16 x221D_b6 : 1;
    /* fp+221D:7 */ u16 x221D_b7 : 1;
    /* fp+221E:0 */ u8 invisible : 1;
    /* fp+221E:1 */ u8 x221E_b1 : 1;
    /* fp+221E:2 */ u8 x221E_b2 : 1;
    /* fp+221E:3 */ u8 x221E_b3 : 1;
    /* fp+221E:4 */ u8 x221E_b4 : 1;
    /* fp+221E:5 */ u8 x221E_b5 : 1;
    /* fp+221E:6 */ u8 x221E_b6 : 1;
    /* fp+221E:7 */ u8 x221E_b7 : 1;
    /* fp+221F:0 */ u8 x221F_b0 : 1;
    /* fp+221F:1 */ u8 x221F_b1 : 1;
    /* fp+221F:2 */ u8 x221F_b2 : 1;
    /* fp+221F:3 */ u8 is_sleeping : 1;
    /* fp+221F:4 */ u8 is_sub_fighter : 1;
    /* fp+221F:5 */ u8 x221F_b5 : 1;
    /* fp+221F:6 */ u8 x221F_b6 : 1;
    /* fp+221F:7 */ u8 x221F_b7 : 1;
    /* fp+2220:0 */ u8 x2220_b0 : 3;
    /* fp+2220:3 */ u8 x2220_b3 : 1;
    /* fp+2220:4 */ u8 x2220_b4 : 1;
    /* fp+2220:5 */ u8 x2220_b5 : 1;
    /* fp+2220:6 */ u8 x2220_b6 : 1;
    /* fp+2220:7 */ u8 x2220_b7 : 1;
    /* fp+2221:0 */ u8 x2221_b0 : 1;
    /* fp+2221:1 */ u8 x2221_b1 : 1;
    /* fp+2221:2 */ u8 x2221_b2 : 1;
    /* fp+2221:3 */ u8 x2221_b3 : 1;
    /* fp+2221:4 */ u8 x2221_b4 : 1; ///< parasol-related
    /* fp+2221:5 */ u8 x2221_b5 : 1; ///< parasol-related
    /* fp+2221:6 */ u8 x2221_b6 : 1; ///< parasol-related
    /* fp+2221:7 */ u8 x2221_b7 : 1;
    /* fp+2222:0 */ u8 x2222_b0 : 1; ///< can cargo grab? only set for DK
    /* fp+2222:1 */ u8 can_multijump : 1; ///< set for Kirby and Jigglypuff
    /* fp+2222:2 */ u8 x2222_b2 : 1;
    /* fp+2222:3 */ u8 x2222_b3 : 1;
    /* fp+2222:4 */ u8 x2222_b4 : 1;
    /* fp+2222:5 */ u8 x2222_b5 : 1;
    /* fp+2222:6 */ u8 x2222_b6 : 1;
    /* fp+2222:7 */ u8 x2222_b7 : 1;
    /* fp+2223:0 */ u8 x2223_b0 : 1;
    /* fp+2223:1 */ u8 x2223_b1 : 1;
    /* fp+2223:2 */ u8 x2223_b2 : 1;
    /* fp+2223:3 */ u8 x2223_b3 : 1;
    /* fp+2223:4 */ u8 x2223_b4 : 1;
    /* fp+2223:5 */ u8 x2223_b5 : 1;
    /* fp+2223:6 */ u8 is_always_metal : 1; ///< e.g. classic metal mario
    /* fp+2223:7 */ u8 is_metal : 1;
    /* fp+2224:0 */ u8 x2224_b0 : 1;
    /* fp+2224:1 */ u8 x2224_b1 : 1;
    /* fp+2224:2 */ u8 stamina_dead : 1;
    /* fp+2224:3 */ u8 x2224_b3 : 1;
    /* fp+2224:4 */ u8 x2224_b4 : 1;
    /* fp+2224:5 */ u8 x2224_b5 : 1;
    /* fp+2224:6 */ u8 x2224_b6 : 1;
    /* fp+2224:7 */ u8 can_walljump : 1;
    /* fp+2225:0 */ u8 x2225_b0 : 1;
    /* fp+2225:1 */ u8 x2225_b1 : 1;
    /* fp+2225:2 */ u8 x2225_b2 : 1;
    /* fp+2225:3 */ u8 x2225_b3 : 1;
    /* fp+2225:4 */ u8 x2225_b4 : 1;
    /* fp+2225:5 */ u8 x2225_b5 : 1;
    /* fp+2225:6 */ u8 x2225_b6 : 1;
    /* fp+2225:7 */ u8 x2225_b7 : 1;
    /* fp+2226:0 */ u8 x2226_b0 : 1;
    /* fp+2226:1 */ u8 x2226_b1 : 1;
    /* fp+2226:2 */ u8 x2226_b2 : 1;
    /* fp+2226:3 */ u8 x2226_b3 : 1;
    /* fp+2226:4 */ u8 x2226_b4 : 1;
    /* fp+2226:5 */ u8 x2226_b5 : 1;
    /* fp+2226:6 */ u8 x2226_b6 : 1;
    /* fp+2226:7 */ u8 x2226_b7 : 1;
    /* fp+2227:0 */ u8 x2227_b0 : 1;
    /* fp+2227:1 */ u8 x2227_b1 : 1;
    /* fp+2227:2 */ u8 x2227_b2 : 1;
    /* fp+2227:3 */ u8 x2227_b3 : 1;
    /* fp+2227:4 */ u8 x2227_b4 : 1;
    /* fp+2227:5 */ u8 x2227_b5 : 1;
    /* fp+2227:6 */ u8 x2227_b6 : 1;
    /* fp+2227:7 */ u8 x2227_b7 : 1;
    /* fp+2228:0 */ u8 x2228_b0 : 1;
    /* fp+2228:1 */ u8 x2228_b1 : 1;
    /* fp+2228:2 */ u8 is_sandbag : 1;
    /* fp+2228:3 */ u8 x2228_b3 : 2;
    /* fp+2228:5 */ u8 x2228_b5 : 1;
    /* fp+2228:6 */ u8 used_tether : 1;
    /* fp+2228:7 */ u8 x2228_b7 : 1;
    /* fp+2229:0 */ u8 x2229_b0 : 1;
    /* fp+2229:1 */ u8 x2229_b1 : 1;
    /* fp+2229:2 */ u8 x2229_b2 : 1;
    /* fp+2229:3 */ u8 x2229_b3 : 1;
    /* fp+2229:4 */ u8 x2229_b4 : 1;
    /* fp+2229:5 */ u8 no_normal_motion : 1;
    /* fp+2229:6 */ u8 x2229_b6 : 1;
    /* fp+2229:7 */ u8 no_kb : 1;
    /* fp+222A:0 */ u8 x222A_b0 : 1;
    /* fp+222A:1 */ u8 x222A_b1 : 1;
    /* fp+222A:2 */ u8 x222A_b2 : 1;
    /* fp+222A:3 */ u8 x222A_b3 : 2;
    /* fp+222A:5 */ u8 x222A_b5 : 1;
    /* fp+222A:6 */ u8 x222A_b6 : 1;
    /* fp+222A:7 */ u8 x222A_b7 : 1;
    /* fp+222C */ union Fighter_FighterVars {
        /* fp+222C */ struct ftCaptain_FighterVars ca, gn;
        /* fp+222C */ struct ftDonkey_FighterVars dk;
        /* fp+222C */ struct ftFox_FighterVars fx, fc;
        /* fp+222C */ struct ftGameWatch_FighterVars gw;
        /* fp+222C */ struct ftKb_FighterVars kb;
        /* fp+222C */ struct ftKoopa_FighterVars kp, gk;
        /* fp+222C */ struct ftLk_FighterVars lk;
        /* fp+222C */ struct ftLuigi_FighterVars lg;
        /* fp+222C */ struct ftMario_FighterVars mr;
        /* fp+222C */ struct ftMars_FighterVars ms;
        /* fp+222C */ struct ftMasterhand_FighterVars mh, ch;
        /* fp+222C */ struct ftMewtwo_FighterVars mt;
        /* fp+222C */ struct ftNess_FighterVars ns;
        /* fp+222C */ struct ftPeach_FighterVars pe;
        /* fp+222C */ struct ftPikachu_FighterVars pk, pc;
        /* fp+222C */ struct ftPopo_FighterVars pp, nn;
        /* fp+222C */ struct ftPurin_FighterVars pr;
        /* fp+222C */ struct ftSamus_FighterVars ss;
        /* fp+222C */ struct ftSandbag_FighterVars sb;
        /* fp+222C */ struct ftSeak_FighterVars sk;
        /* fp+222C */ struct ftYoshi_FighterVars ys;
        /* fp+222C */ struct ftZakoBoy_FighterVars bo, gl;
        /* fp+222C */ struct ftZelda_FighterVars zd;
    } u;
    /* fp+2324 */ GrKind bury_grkind;
    /* fp+2328 */ u32 bury_timer_1;
    /* fp+232C */ u32 bury_timer_2;
    /* fp+2330 */ IntVec2 x2330;
    /* fp+2338 */ IntVec2 x2338;
    /* fp+2340 */ union Fighter_MotionVars {
        /* fp+2340 */ u8 _[0x23EC - 0x2340];
        /* fp+2340 */ union ftCaptain_MotionVars ca, gn;
        /* fp+2340 */ union ftCommon_MotionVars co;
        /* fp+2340 */ union ftDonkey_MotionVars dk;
        /* fp+2340 */ union ftFox_MotionVars fx, fc;
        /* fp+2340 */ union ftGameWatch_MotionVars gw;
        /* fp+2340 */ union ftKb_MotionVars kb;
        /* fp+2340 */ union ftKoopa_MotionVars kp;
        /* fp+2340 */ union ftLk_MotionVars lk;
        /* fp+2340 */ union ftLuigi_MotionVars lg;
        /* fp+2340 */ union ftMario_MotionVars mr, dr;
        /* fp+2340 */ union ftMars_MotionVars ms, fe;
        /* fp+2340 */ union ftMasterHand_MotionVars mh, ch;
        /* fp+2340 */ union ftMewtwo_MotionVars mt;
        /* fp+2340 */ union ftNess_MotionVars ns;
        /* fp+2340 */ union ftPe_MotionVars pe;
        /* fp+2340 */ union ftPikachu_MotionVars pk, pc;
        /* fp+2340 */ union ftPp_MotionVars pp;
        /* fp+2340 */ union ftPurin_MotionVars pr;
        /* fp+2340 */ union ftSamus_MotionVars ss;
        /* fp+2340 */ union ftSeak_MotionVars sk;
        /* fp+2340 */ union ftYoshi_MotionVars ys;
        /* fp+2340 */ union ftZelda_MotionVars zd;
    } mv;
};
;
struct gmScriptEventDefault {
    u32 opcode : 6;
    u32 value1 : 26;
};
struct ftData_UnkCountStruct {
    void* data;
    int count;
};
struct UnkFloat6_Camera {
    Vec3 x0;
    Vec3 xC;
};
typedef struct ftData_UnkModelStruct {
    Fighter_ModelEvent model_events[Ft_Kind_Max];
    HSD_JObj* (*getter[Ft_Kind_Max])(HSD_GObj*);
} ftData_UnkModelStruct;
struct ftData_80085FD4_ret {
    /* +0 */ const char* x0;
    /* +4 */ M2C_UNK x4;
    /* +8 */ size_t x8;
    /* +C */ M2C_UNK xC;
    /* +10:0 */ u8 x10_b0 : 1;
    /* +10:1 */ u8 x10_b1 : 1;
    /* +14 */ uintptr_t x14;
};
struct ArticleDynamicBones {
    BoneDynamicsDesc array[Ft_Dynamics_NumMax];
};
struct ftDynamics {
    /// @todo Very similar to #ItemDynamics.
    struct {
        /*  +0 */ int dynamicsNum;
        /*  +4 */ ArticleDynamicBones* ftDynamicBones;
    };
    /*  +8 */ int x4;
    /*  +C */ struct ftData_x38* x8;
    /* +10 */ FigaTree*** x10;
};
struct KirbyHatStruct {
    /*  +0 */ HSD_Joint* hat_joint;
    /*  +4 */ FtPartsDesc desc;
    /*  +C */ ftDynamics* hat_dynamics[5];
};
typedef struct Kirby_Unk {
    /*  +0 */ HSD_Joint* x0;
    /*  +4 */ FtPartsDesc x4;
    /*  +C */ M2C_UNK xC;
    /* +10 */ ftDynamics* x10;
    /* +14 */ M2C_UNK x14;
    /* +18 */ ftDynamics* x18;
    /* +1C */ ftDynamics* x1C;
} Kirby_Unk;
struct ft_80459B88_t {
    /* +0 */ Kirby_Unk* x0;
    /* +4 */ KirbyHatStruct* hats[Ft_Kind_Max];
};
;
struct IKState {
    /* 0x00 */ HSD_JObj* jobj0;
    /* 0x04 */ HSD_JObj* jobj1;
    /* 0x08 */ HSD_JObj* jobj2;
    /* 0x0C */ Vec3 pos0;
    /* 0x18 */ Vec3 pos1;
    /* 0x24 */ Vec3 pos2;
    /* 0x30 */ Vec3 pos3;
    /* 0x3C */ Vec3 pos4;
    /* 0x48 */ f32 len0;
    /* 0x4C */ f32 len1;
    /* 0x50 */ f32 angle_max;
    /* 0x54 */ f32 angle_limit;
};
typedef struct DmgLogEntry {
    /*  +0 */ enum EntityKind x0;
    /*  +4 */ FighterKind kind;
    /*  +8 */ HSD_GObj* gobj;
    /// @todo Might be a fake union
    /*  +C */ union {
        HitCapsule* hit0;
        DynamicsDesc* unk_anim0;
    };
    /// @todo Might be a fake union
    /* +10 */ union {
        HitCapsule* hit1;
        FighterHurtCapsule* hurt1;
    };
    /* +14 */ Vec3 pos;
    /* +20 */ float x20;
    /* +24 */ size_t size_of_xC;
} DmgLogEntry;
;
struct ftData_x58_t {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 x1;
    /* 0x02 */ u8 pad_02[2];
    /* 0x04 */ f32 x4;
    /* 0x08 */ u8 x8;
    /* 0x09 */ u8 x9;
    /* 0x0A */ u8 pad_0A[2];
    /* 0x0C */ f32 xC;
    /* 0x10 */ u8 x10;
    /* 0x11 */ u8 x11;
    /* 0x12 */ u8 pad_12[6];
    /* 0x18 */ f32 x18;
};
struct ftCo_803C6594_t {
    /* 00 */ Vec3 x0;
    /* 0C */ f32 xC;
    /* 10 */ f32 x10;
    /* 14 */ f32 x14;
    /* 18 */ f32 x18;
    /* 1C */ f32 x1C;
    /* 20 */ f32 x20;
    /* 24 */ f32 x24;
    /* 28 */ f32 x28;
    /* 2C */ f32 x2C;
    /* 30 */ f32 x30;
    /* 34 */ f32 x34;
    /* 38 */ f32 x38;
    /* 3C */ f32 x3C;
    /* 40 */ f32 x40;
    /* 44 */ u8 x44;
    /* 48 */ f32 x48;
    /* 4C */ f32 x4C;
    /* 50 */ struct ftCo_803C6594_t* next;
};
/* 06DBF4 */ void ftAnim_GetNextAnimJointInTree(HSD_AnimJoint**, int*);
/* 06DCF4 */ void ftAnim_GetNextMatAnimJointInTree(HSD_MatAnimJoint**, int*);
/* 06DE00 */ void ftAnim_GetNextJointInTree(HSD_Joint**, s32* pdepth);
/* 06DF0C */ void ftAnim_8006DF0C(Fighter*);
/* 06E054 */ void ftAnim_8006E054(Fighter*, HSD_JObj*, HSD_JObj*, HSD_JObj*);
/* 06E7B8 */ void ftAnim_8006E7B8(Fighter*, Fighter_Part);
/* 06E9B4 */ void ftAnim_8006E9B4(Fighter_GObj*);
/* 06EBA4 */ void ftAnim_8006EBA4(Fighter_GObj*);
/* 06EBE8 */ void ftAnim_8006EBE8(HSD_GObj*, float anim_start, float anim_rate,
                                  float anim_blend_frames);
/* 06EDD0 */ void ftAnim_8006EDD0(Fighter*, int, float, float);
/* 06EED4 */ void ftAnim_8006EED4(Fighter*, Fighter_Part, FigaTree*, float,
                                  float);
/* 06F0FC */ void ftAnim_8006F0FC(Fighter_GObj*, float anim_rate);
/* 06F190 */ void ftAnim_SetAnimRate(Fighter_GObj*, float);
/* 06F238 */ bool ftAnim_IsFramesRemaining(Fighter_GObj*);
/* 06F368 */ bool ftAnim_8006F368(Fighter*, Fighter_Part);
/* 06F3DC */ float ftAnim_8006F3DC(Fighter_GObj*);
/* 06F484 */ float ftAnim_8006F484(Fighter_GObj*);
/* 06F4C8 */ void ftAnim_8006F4C8(Fighter*, bool, FigaTree*);
/* 06F628 */ void ftAnim_8006F628(Fighter*, Fighter_Part, bool);
/* 06F7C8 */ void ftAnim_8006F7C8(Fighter*, Fighter_Part, int, FigaTree*);
/* 06F954 */ void ftAnim_8006F954(Fighter*, Fighter_Part, bool,
                                  FigaTree* unused);
/* 06F994 */ HSD_Joint* ftAnim_8006F994(Fighter*, HSD_JObj*, HSD_Joint*);
/* 06FA58 */ void ftAnim_8006FA58(Fighter*, Fighter_Part, HSD_Joint*);
/* 06FB88 */ void ftAnim_8006FB88(Fighter*, Fighter_Part, HSD_Joint*);
/* 06FCE4 */ void ftAnim_8006FCE4(Fighter*, bool);
/* 06FE08 */ void ftAnim_8006FE08(Fighter*, bool);
/* 06FE48 */ void ftAnim_8006FE48(Fighter_GObj*);
/* 06FE9C */ void ftAnim_8006FE9C(Fighter*, Fighter_Part start, float, float);
/* 06FF74 */ void ftAnim_8006FF74(Fighter*, Fighter_Part start);
/* 070010 */ void ftAnim_80070010(Fighter*, Fighter_Part, float, float,
                                  HSD_Joint*);
/* 070108 */ void ftAnim_80070108(Fighter*, Fighter_Part, float, float,
                                  HSD_Joint*);
/* 070200 */ void ftAnim_80070200(Fighter*, ftData_x8_x8*, CostumeTObjList*,
                                  DObjList*);
/* 070308 */ void ftAnim_80070308(Fighter_GObj*);
/* 070458 */ void ftAnim_80070458(Fighter*, CostumeTObjList*, u32 tobj_idx,
                                  float frame);
/* 0704F0 */ void ftAnim_800704F0(Fighter_GObj*, int tobj_idx, float frame);
/* 0705E0 */ void ftAnim_800705E0(CostumeTObjList* tobj_list);
/* 070654 */ void ftAnim_80070654(Fighter_GObj*);
/* 070710 */ void ftAnim_80070710(HSD_JObj*, float frame);
/* 070734 */ void ftAnim_80070734(HSD_JObj*, float frame);
/* 070758 */ void ftAnim_80070758(HSD_JObj*);
/* 07077C */ void ftAnim_8007077C(Fighter_GObj*);
/* 0707B0 */ void ftAnim_800707B0(Fighter_GObj*);
/* 070904 */ void ftAnim_80070904(Fighter*, Fighter_Part start,
                                  HSD_AnimJoint*);
/* 070A10 */ void ftAnim_80070A10(Fighter*, Fighter_Part, FigaTree*);
/* 070B88 */ void ftAnim_ApplyPartAnim(Fighter_GObj*, s32, s32, float);
/* 070C48 */ void ftAnim_80070C48(Fighter_GObj*, s32);
/* 070CC4 */ void ftAnim_80070CC4(Fighter_GObj*, int);
/* 070E74 */ void ftAnim_80070E74(Fighter_GObj*);
/* 070F28 */ void ftAnim_80070F28(Fighter_GObj*);
/* 070FB4 */ void ftAnim_80070FB4(Fighter_GObj*, s32, s32);
/* 070FD0 */ bool ftAnim_80070FD0(Fighter*);
#define GALE01_26B1D4
/// Apply Item Damage
/* 26B1D4 */ float it_8026B1D4(Item_GObj* gobj, HitCapsule* itemHitboxUnk);
/// Copy Item position vector
/* 26B294 */ void it_8026B294(Item_GObj* gobj, Vec3* pos);
/// Check if item is heavy
/* 26B2B4 */ bool itIsHeavy(Item_GObj* gobj);
/// Check if item is heavy again?
/* 26B2D8 */ bool it_8026B2D8(Item_GObj* gobj);
/// Get Item ID
/* 26B300 */ ItemKind itGetKind(Item_GObj* gobj);
/// Return flag from Item Attributes
/* 26B30C */ enum_t it_8026B30C(Item_GObj* gobj);
/// Return item hold kind
/* 26B320 */ Item_HoldKinds itGetHoldKind(Item_GObj* gobj);
/// Return item damage multiplier
/* 26B334 */ float itGetDamageMultiplier(Item_GObj* gobj);
/// Unknown item position math, related to velocity?
/* 26B344 */ void it_8026B344(Item_GObj* gobj, Vec3* pos);
/// Return item's X-Axis grab range?
/* 26B378 */ float itGetGrabRangeX(Item_GObj* gobj);
/// Return item's Y-Axis grab range?
/* 26B384 */ float itGetGrabRangeY(Item_GObj* gobj);
/// Toggle item flag 0x15 in 0xDC8 word ON
/* 26B390 */ void it_8026B390(Item_GObj* gobj);
/// Toggle item flag 0x15 in 0xDC8 word OFF
/* 26B3A8 */ void it_8026B3A8(Item_GObj* gobj);
/// Count item entities of identical kind?
/* 26B3C0 */ int it_8026B3C0(ItemKind kind);
/// Store Item article pointer to table
/* 26B3F8 */ void it_8026B3F8(Article* article, s32 kind);
/// Store Stage Item article pointer to table
/* 26B40C */ void it_8026B40C(Article* article, s32 kind);
/// Item Damage Math
/* 26B424 */ float it_8026B424(int damage);
/// Get heal value of healing items
/* 26B47C */ s32 it_8026B47C(Item_GObj* gobj);
/// Check if item is a healing item
/* 26B4F0 */ bool it_8026B4F0(Item_GObj* gobj);
/// Get unknown float from 0x0 of item's special attributes
/* 26B54C */ float it_8026B54C(Item_GObj* gobj);
/// Identical to #it_8026B54C but likely using a different itAttributes struct
/* 26B560 */ float it_8026B560(Item_GObj* gobj);
/// Get unknown float from 0x4 of item's special attributes
/* 26B574 */ float it_8026B574(Item_GObj* gobj);
/// Get unknown integer from itCommonData
/* 26B588 */ s32 it_8026B588(void);
/// Check if item can fire projectiles
/* 26B594 */ bool it_8026B594(Item_GObj* gobj);
/// Unknown item camera check?
/* 26B5E4 */ HSD_GObj* it_8026B5E4(Vec3* vector, Vec3* vector2,
                                   Item_GObj* gobj);
/// Unknown item camera check 2?
/* 26B634 */ Fighter_GObj* it_8026B634(Vec3*, Vec3*, Item_GObj*, float);
/// Get facing direction of fp (?) with argument 0
/* 26B684 */ float it_8026B684(Vec3* pos);
/// Get facing direction of fp (?) with variable argument
/* 26B6A8 */ float it_8026B6A8(Vec3* pos, HSD_GObj* arg);
/// Check if item is a stage item?
/* 26B6C8 */ bool it_8026B6C8(Item_GObj* gobj);
/// Set item's hitlag frames
/* 26B718 */ void it_8026B718(Item_GObj* gobj, float hitlagFrames);
/// Toggle bit 3 of 0xDC8 word ON
/* 26B724 */ void it_8026B724(Item_GObj* gobj);
/// Toggle bits in 0xDC8 word
/* 26B73C */ void it_8026B73C(Item_GObj* gobj);
/// Bitwise operations in 0xDC8 word
/* 26B774 */ bool it_8026B774(Item_GObj* gobj, u8 arg1);
/// Get Item State ID
/* 26B7A4 */ s32 itGetMotionId(Item_GObj* gobj);
/// Get Item Team ID
/* 26B7B0 */ u8 itGetTeamId(Item_GObj* gobj);
/// Get flag 0x14 of 0xDC8 word
/* 26B7BC */ s32 it_8026B7BC(Item_GObj* gobj);
/// Get 0x1C of Item - something to do with stale moves?
/* 26B7CC */ s32 it_8026B7CC(Item_GObj* gobj);
/// Get unknown var from global data
/* 26B7D8 */ s32 it_8026B7D8(void);
/// Get unknown var from global data
/* 26B7E0 */ s32 it_8026B7E0(void);
/// Get bit 1 of 0xDC8 word
/* 26B7E8 */ s32 it_8026B7E8(Item_GObj* gobj);
/// Remove item from player on death?
/* 26B7F8 */ void it_8026B7F8(Item_GObj* gobj);
/// Remove all GObj interaction references from item
/* 26B894 */ bool it_8026B894(Item_GObj* gobj, HSD_GObj* referenced_gobj);
/// Return result of unk item check
/* 26B924 */ s32 it_8026B924(Item_GObj* gobj);
/// Return float result of item kind and state checks
/* 26B960 */ float it_8026B960(Item_GObj* gobj);
/// Transfer item on character swap - used for Zelda <-> Sheik
/* 26B9A8 */ void it_8026B9A8(Item_GObj* gobj, HSD_GObj* arg1,
                              Fighter_Part arg2);
/// Multiply item's scale
/* 26BAE8 */ void it_8026BAE8(Item_GObj* gobj, float scale_mul);
/// Clear JObj flags on item model
/* 26BB20 */ void it_8026BB20(Item_GObj* gobj);
/// Set JObj flags on item model
/* 26BB44 */ void it_8026BB44(Item_GObj* gobj);
/// Adjust item's position to fp bone
/* 26BB68 */ void it_8026BB68(Item_GObj* gobj, Vec3* pos);
/// Adjust item's position based on ECB?
/* 26BB88 */ void it_8026BB88(Item_GObj* gobj, Vec3* pos);
/// Adjust item's ECB position?
/* 26BBCC */ void it_8026BBCC(Item_GObj* gobj, Vec3* pos);
/// Check if item owner is a fp + decrement hitlag
/* 26BC14 */ void it_8026BC14(Item_GObj* gobj);
/// Return bit 0 of 0xDD0
/* 26BC68 */ bool it_8026BC68(Item_GObj* gobj);
/// Get item owner
/* 26BC78 */ HSD_GObj* itGetOwner(Item_GObj* gobj);
/// Get item attack kind
/* 26BC84 */ s32 itGetAttackId(Item_GObj* gobj);
/// Unknown item ECB / position update
/* 26BC90 */ void it_8026BC90(Item_GObj* gobj, Vec3* pos);
/// Toggle bit 2 of 0xDCD OFF
/* 26BCF4 */ void it_8026BCF4(Item_GObj* gobj);
/// Toggle bit 2 of 0xDCD ON
/* 26BD0C */ void it_8026BD0C(Item_GObj* gobj);
/// Toggle bit 3 of 0xDD0 ON
/* 26BD24 */ void it_8026BD24(Item_GObj* gobj);
/// Toggle bit 3 of 0xDCC ON
/* 26BD3C */ void it_8026BD3C(Item_GObj* gobj);
/// Toggle bit 3 of 0xDCC OFF
/* 26BD54 */ void it_8026BD54(Item_GObj* gobj);
/// Toggle bit 3 of 0xDCD ON
/* 26BD6C */ void it_8026BD6C(Item_GObj* gobj);
/// Toggle bit 4 of 0xDCD ON
/* 26BD84 */ void it_8026BD84(Item_GObj* gobj);
/// Toggle 0x1A of 0xDC8 word ON
/* 26BD9C */ void it_8026BD9C(Item_GObj* gobj);
/// Toggle 0x1A of 0xDC8 word OFF
/* 26BDB4 */ void it_8026BDB4(Item_GObj* gobj);
/// Toggle several item flags
/* 26BDCC */ void it_8026BDCC(Item_GObj* gobj);
/// Toggle several item flags, inverted
/* 26BE28 */ void it_8026BE28(Item_GObj* gobj);
/// Bob-Omb Rain Switch
/* 26BE84 */ HSD_GObj* it_8026BE84(BobOmbRain* bobOmbRain);
/// Get item's CollData pointer
/* 26C100 */ CollData* it_8026C100(Item_GObj* gobj);
/// Check if Hammer item's head should break off
/* 26C16C */ void it_8026C16C(Item_GObj* gobj, bool isHeadless);
/// Check if item has a hitbox
/* 26C1B4 */ bool it_8026C1B4(Item_GObj* gobj);
/// Get unknown var from r13 pointer
/* 26C1D4 */ u32 it_8026C1D4(void);
/// Check if item has grabbed a GObj?
/* 26C1E8 */ bool it_8026C1E8(Item_GObj* gobj);
/// Get item owner's port number
/* 26C220 */ void it_8026C220(Item_GObj* gobj, HSD_GObj* arg1);
/// Find the closest item to the given position?
/* 26C258 */ HSD_GObj* it_8026C258(Vec3* vector, float facingDir);
/// Unknown item position / ECB update
/* 26C334 */ void it_8026C334(Item_GObj* gobj, Vec3* pos);
/// Run bomb item explosion callbacks
/* 26C368 */ void it_8026C368(Item_GObj* gobj);
/// Toggle bit 3 of 0xDC8 ON for all active item GObjs?
/* 26C3FC */ void it_8026C3FC(void);
/// Toggle bits in 0xDC8 for all active item GObjs?
/* 26C42C */ void it_8026C42C(void);
#define GALE01_00D2EC
static inline float lbVector_Len(Vec3* vec)
{
    return sqrtf(vec->x * vec->x + vec->y * vec->y + vec->z * vec->z);
}
static inline float lbVector_Len_xy(Vec3* vec)
{
    return sqrtf(vec->x * vec->x + vec->y * vec->y);
}
float lbVector_Normalize(Vec3* vec);
float lbVector_NormalizeXY(Vec3* a);
Vec3* lbVector_Add(Vec3* a, Vec3* b);
Vec3* lbVector_Add_xy(Vec3* a, Vec3* b);
Vec3* lbVector_Sub(Vec3* a, Vec3* b);
Vec3* lbVector_Diff(Vec3* a, Vec3* b, Vec3* result);
Vec3* lbVector_CrossprodNormalized(Vec3* a, Vec3* b, Vec3* result);
float lbVector_Angle(Vec3* a, Vec3* b);
float lbVector_AngleXY(Vec3* a, Vec3* b);
void lbVector_RotateAboutUnitAxis(Vec3* v, Vec3* axis, float angle);
void lbVector_Rotate(Vec3* v, int axis, float angle);
void lbVector_Mirror(Vec3* a, Vec3* b);
float lbVector_CosAngle(Vec3* a, Vec3* b);
Vec3* lbVector_Lerp(Vec3* a, Vec3* b, Vec3* result, float f);
Vec3* lbVector_8000DE38(const Vec3 points[3], Vec3* v, float c);
Vec3* lbVector_EulerAnglesFromONB(Vec3* result_angles, Vec3* a, Vec3* b,
                                  Vec3* c);
Vec3* lbVector_EulerAnglesFromPartialONB(Vec3* result_angles, Vec3* a,
                                         Vec3* c);
Vec3* lbVector_ApplyEulerRotation(Vec3* v, Vec3* angles);
float lbVector_sqrtf_accurate(float x);
Vec3* lbVector_WorldToScreen(HSD_CObj* cobj, const Vec3* pos3d,
                             Vec3* screenCoords, int d);
void lbVector_CreateEulerMatrix(Mtx m, Quaternion* angles);
float lbVector_8000E838(Vec3* a, Vec3* b, Vec3* c, Vec3* d);
#define _archive_h_
#define HSD_ARCHIVE_DONT_FREE 1
struct HSD_ArchiveHeader {
    u32 file_size; /* 0x00 */
    u32 data_size; /* 0x04 */
    u32 nb_reloc; /* 0x08 */
    u32 nb_public; /* 0x0C */
    u32 nb_extern; /* 0x10 */
    u8 version[4]; /* 0x14 */
    u32 pad[2]; /* 0x18 */
};
;
struct HSD_ArchiveRelocationInfo {
    u32 offset;
};
struct HSD_ArchivePublicInfo {
    u32 offset; /* 0x00 */
    u32 symbol; /* 0x04 */
};
struct HSD_ArchiveExternInfo {
    u32 offset; /* 0x00 */
    u32 symbol; /* 0x04 */
};
struct HSD_Archive {
    HSD_ArchiveHeader header; /* 0x00 */
    u8* data; /* 0x20 */
    HSD_ArchiveRelocationInfo* reloc_info; /* 0x24 */
    HSD_ArchivePublicInfo* public_info; /* 0x28 */
    HSD_ArchiveExternInfo* extern_info; /* 0x2C */
    char* symbols; /* 0x30 */
    HSD_Archive* next; /* 0x34 */
    char* name; /* 0x38 */
    u32 flags; /* 0x3C */
    void* top_ptr; /* 0x40 */
};
;
s32 HSD_ArchiveParse(HSD_Archive*, u8*, size_t file_size);
void* HSD_ArchiveGetPublicAddress(HSD_Archive*, const char*);
char* HSD_ArchiveGetExtern(HSD_Archive*, int);
void HSD_ArchiveLocateExtern(HSD_Archive*, const char*, void*);
#define SYSDOLPHIN_BASELIB_DOBJ_H
#define _mobj_h_
#define _texp_h_
#define HSD_TEXP_RAS ((HSD_TExp*) -2)
#define HSD_TEXP_TEX ((HSD_TExp*) -1)
#define HSD_TEXP_ZERO ((HSD_TExp*) 0)
#define TEVCONF_MODE 1
typedef enum _HSD_TEInput {
    HSD_TE_END = 0,
    HSD_TE_RGB = 1,
    HSD_TE_R = 2,
    HSD_TE_G = 3,
    HSD_TE_B = 4,
    HSD_TE_A = 5,
    HSD_TE_X = 6,
    HSD_TE_0 = 7,
    HSD_TE_1 = 8,
    HSD_TE_1_8 = 9,
    HSD_TE_2_8 = 10,
    HSD_TE_3_8 = 11,
    HSD_TE_4_8 = 12,
    HSD_TE_5_8 = 13,
    HSD_TE_6_8 = 14,
    HSD_TE_7_8 = 15,
    HSD_TE_INPUT_MAX = 16,
    HSD_TE_UNDEF = 0xFF
} HSD_TEInput;
typedef enum _HSD_TEType {
    HSD_TE_U8 = 0,
    HSD_TE_U16 = 1,
    HSD_TE_U32 = 2,
    HSD_TE_F32 = 3,
    HSD_TE_F64 = 4,
    HSD_TE_COMP_TYPE_MAX = 5
} HSD_TEType;
typedef enum _HSD_TExpType {
    HSD_TE_ZERO = 0,
    HSD_TE_TEV = 1,
    HSD_TE_TEX = 2,
    HSD_TE_RAS = 3,
    HSD_TE_CNST = 4,
    HSD_TE_IMM = 5,
    HSD_TE_KONST = 6,
    HSD_TE_ALL = 7,
    HSD_TE_TYPE_MAX = 8
} HSD_TExpType;
typedef struct _HSD_TevConf {
    GXTevOp clr_op;
    GXTevColorArg clr_a;
    GXTevColorArg clr_b;
    GXTevColorArg clr_c;
    GXTevColorArg clr_d;
    GXTevScale clr_scale;
    GXTevBias clr_bias;
    u8 clr_clamp;
    GXTevRegID clr_out_reg;
    GXTevOp alpha_op;
    GXTevAlphaArg alpha_a;
    GXTevAlphaArg alpha_b;
    GXTevAlphaArg alpha_c;
    GXTevAlphaArg alpha_d;
    GXTevScale alpha_scale;
    GXTevBias alpha_bias;
    u8 alpha_clamp;
    GXTevRegID alpha_out_reg;
    GXTevClampMode mode;
    GXTevSwapSel ras_swap;
    GXTevSwapSel tex_swap;
    GXTevKColorSel kcsel;
    GXTevKAlphaSel kasel;
} HSD_TevConf;
typedef struct HSD_TExpRes {
    int failed;
    int texmap;
    int cnst_remain;
    struct {
        u8 color;
        u8 alpha;
    } reg[8];
    u8 c_ref[4];
    u8 a_ref[4];
    u8 c_use[4];
    u8 a_use[4];
} HSD_TExpRes;
typedef struct _HSD_TevDesc {
    struct _HSD_TevDesc* next;
    u32 flags;
    u32 stage;
    u32 coord;
    u32 map;
    u32 color;
    union {
        HSD_TevConf tevconf;
        struct {
            u32 tevmode;
        } tevop;
    } u;
} HSD_TevDesc;
typedef struct _HSD_TExpTevDesc {
    struct _HSD_TevDesc desc;
    HSD_TObj* tobj;
} HSD_TExpTevDesc;
typedef struct _HSD_TECommon {
    HSD_TExpType type;
    HSD_TExp* next;
} HSD_TECommon;
typedef struct _HSD_TECnst {
    HSD_TExpType type; ///< must be HSD_TE_CNST for this union member
    HSD_TExp* next;
    void* val;
    HSD_TEInput comp; ///< if TE_RGB, val points to RGB array, else 1 value
    HSD_TEType ctype; ///< pointer type of val
    u8 reg;
    u8 idx;
    u8 ref;
    u8 range;
} HSD_TECnst;
typedef struct _HSD_TEArg {
    u8 type;
    u8 sel;
    u8 arg;
    HSD_TExp* exp;
} HSD_TEArg;
typedef struct _HSD_TETev {
    HSD_TExpType type;
    HSD_TExp* next;
    s32 c_ref;
    u8 c_dst;
    u8 c_op;
    u8 c_clamp;
    u8 c_bias;
    u8 c_scale;
    u8 c_range;
    s32 a_ref;
    u8 a_dst;
    u8 a_op;
    u8 a_clamp;
    u8 a_bias;
    u8 a_scale;
    u8 tex_swap;
    u8 ras_swap;
    u8 kcsel;
    u8 kasel;
    HSD_TEArg c_in[4];
    HSD_TEArg a_in[4];
    HSD_TObj* tex;
    u8 chan;
} HSD_TETev;
union HSD_TExp {
    HSD_TExpType type;
    struct _HSD_TECommon comm;
    struct _HSD_TETev tev;
    struct _HSD_TECnst cnst;
};
HSD_TExpType HSD_TExpGetType(HSD_TExp* texp);
HSD_TExp* HSD_TExpTev(HSD_TExp**);
HSD_TExp* HSD_TExpCnst(void*, HSD_TEInput, HSD_TEType, HSD_TExp**);
void HSD_TExpOrder(HSD_TExp*, HSD_TObj*, GXChannelID);
void HSD_TExpColorOp(HSD_TExp*, GXTevOp, GXTevBias, GXTevScale, u8);
void HSD_TExpColorIn(HSD_TExp*, HSD_TEInput, HSD_TExp*, HSD_TEInput, HSD_TExp*,
                     HSD_TEInput, HSD_TExp*, HSD_TEInput, HSD_TExp*);
void HSD_TExpAlphaOp(HSD_TExp*, GXTevOp, GXTevBias, GXTevScale, u8);
void HSD_TExpAlphaIn(HSD_TExp* texp, HSD_TEInput sel_a, HSD_TExp* exp_a,
                     HSD_TEInput sel_b, HSD_TExp* exp_b, HSD_TEInput sel_c,
                     HSD_TExp* exp_c, HSD_TEInput sel_d, HSD_TExp* exp_d);
void HSD_TExpFreeTevDesc(HSD_TExpTevDesc*);
HSD_TExp* HSD_TExpFreeList(HSD_TExp*, HSD_TExpType, s32);
int HSD_TExpCompile(HSD_TExp*, HSD_TExpTevDesc**, HSD_TExp**);
void HSD_TExpSetupTev(HSD_TExpTevDesc*, HSD_TExp*);
void HSD_TExpFree(HSD_TExp* texp);
void HSD_TExpRef(HSD_TExp* texp, u8 sel);
void HSD_TExpUnref(HSD_TExp* texp, u8 sel);
void HSD_TExpSetReg(HSD_TExp* texp);
static inline bool IsThroughColor(HSD_TExp* texp)
{
    return texp->tev.c_op == GX_TEV_ADD && texp->tev.c_in[0].sel == HSD_TE_0 &&
           texp->tev.c_in[1].sel == HSD_TE_0 && texp->tev.c_bias == 0 &&
           texp->tev.c_scale == 0;
}
static inline bool IsThroughAlpha(HSD_TExp* texp)
{
    return texp->tev.a_op == GX_TEV_ADD && texp->tev.a_in[0].sel == HSD_TE_0 &&
           texp->tev.a_in[1].sel == HSD_TE_0 && texp->tev.a_bias == 0 &&
           texp->tev.a_scale == 0;
}
#define _hsd_tobj_h_
struct HSD_TObj;
#define TOBJ_ANIM 0x10
#define HSD_A_T_TIMG 1
#define HSD_A_T_TRAU 2
#define HSD_A_T_TRAV 3
#define HSD_A_T_SCAU 4
#define HSD_A_T_SCAV 5
#define HSD_A_T_ROTX 6
#define HSD_A_T_ROTY 7
#define HSD_A_T_ROTZ 8
#define HSD_A_T_BLEND 9
#define HSD_A_T_TCLT 10
#define HSD_A_T_LOD_BIAS 11
#define HSD_A_T_KONST_R 12
#define HSD_A_T_KONST_G 13
#define HSD_A_T_KONST_B 14
#define HSD_A_T_KONST_A 15
#define HSD_A_T_TEV0_R 16
#define HSD_A_T_TEV0_G 17
#define HSD_A_T_TEV0_B 18
#define HSD_A_T_TEV0_A 19
#define HSD_A_T_TEV1_R 20
#define HSD_A_T_TEV1_G 21
#define HSD_A_T_TEV1_B 22
#define HSD_A_T_TEV1_A 23
#define HSD_A_T_TS_BLEND 24
#define TOBJ_TEV_CC_KONST_RGB (0x01 << 7 | 0)
#define TOBJ_TEV_CC_KONST_RRR (0x01 << 7 | 1)
#define TOBJ_TEV_CC_KONST_GGG (0x01 << 7 | 2)
#define TOBJ_TEV_CC_KONST_BBB (0x01 << 7 | 3)
#define TOBJ_TEV_CC_KONST_AAA (0x01 << 7 | 4)
#define TOBJ_TEV_CC_TEX0_RGB (0x01 << 7 | 5)
#define TOBJ_TEV_CC_TEX0_AAA (0x01 << 7 | 6)
#define TOBJ_TEV_CC_TEX1_RGB (0x01 << 7 | 7)
#define TOBJ_TEV_CC_TEX1_AAA (0x01 << 7 | 8)
#define TOBJ_TEV_CA_KONST_R (0x01 << 6 | 0)
#define TOBJ_TEV_CA_KONST_G (0x01 << 6 | 1)
#define TOBJ_TEV_CA_KONST_B (0x01 << 6 | 2)
#define TOBJ_TEV_CA_KONST_A (0x01 << 6 | 3)
#define TOBJ_TEV_CA_TEX0_A (0x01 << 6 | 4)
#define TOBJ_TEV_CA_TEX1_A (0x01 << 6 | 5)
#define TOBJ_TEVREG_ACTIVE_KONST_R (0x01 << 0)
#define TOBJ_TEVREG_ACTIVE_KONST_G (0x01 << 1)
#define TOBJ_TEVREG_ACTIVE_KONST_B (0x01 << 2)
#define TOBJ_TEVREG_ACTIVE_KONST_A (0x01 << 3)
#define TOBJ_TEVREG_ACTIVE_KONST (TOBJ_TEVREG_ACTIVE_KONST_R | TOBJ_TEVREG_ACTIVE_KONST_G | TOBJ_TEVREG_ACTIVE_KONST_B | TOBJ_TEVREG_ACTIVE_KONST_A)
#define TOBJ_TEVREG_ACTIVE_TEV0_R (0x01 << 4)
#define TOBJ_TEVREG_ACTIVE_TEV0_G (0x01 << 5)
#define TOBJ_TEVREG_ACTIVE_TEV0_B (0x01 << 6)
#define TOBJ_TEVREG_ACTIVE_TEV0_A (0x01 << 7)
#define TOBJ_TEVREG_ACTIVE_TEV0 (TOBJ_TEVREG_ACTIVE_TEV0_R | TOBJ_TEVREG_ACTIVE_TEV0_G | TOBJ_TEVREG_ACTIVE_TEV0_B | TOBJ_TEVREG_ACTIVE_TEV0_A)
#define TOBJ_TEVREG_ACTIVE_TEV1_R (0x01 << 8)
#define TOBJ_TEVREG_ACTIVE_TEV1_G (0x01 << 9)
#define TOBJ_TEVREG_ACTIVE_TEV1_B (0x01 << 10)
#define TOBJ_TEVREG_ACTIVE_TEV1_A (0x01 << 11)
#define TOBJ_TEVREG_ACTIVE_TEV1 (TOBJ_TEVREG_ACTIVE_TEV1_R | TOBJ_TEVREG_ACTIVE_TEV1_G | TOBJ_TEVREG_ACTIVE_TEV1_B | TOBJ_TEVREG_ACTIVE_TEV1_A)
#define TOBJ_TEVREG_ACTIVE_COLOR_TEV (0x01 << 30)
#define TOBJ_TEVREG_ACTIVE_ALPHA_TEV (0x01U << 31)
#define TEX_COORD_UV 0
#define TEX_COORD_REFLECTION 1
#define TEX_COORD_HILIGHT 2
#define TEX_COORD_SHADOW 3
#define TEX_COORD_TOON 4
#define TEX_COORD_GRADATION 5
#define TEX_COORD_BACKLIGHT 6
#define TEX_COORD_MASK (0x0f)
#define tobj_coord(T) ((T)->flags & TEX_COORD_MASK)
#define TEX_COLORMAP_NONE (0 << 16)
#define TEX_COLORMAP_ALPHA_MASK (1 << 16)
#define TEX_COLORMAP_RGB_MASK (2 << 16)
#define TEX_COLORMAP_BLEND (3 << 16)
#define TEX_COLORMAP_MODULATE (4 << 16)
#define TEX_COLORMAP_REPLACE (5 << 16)
#define TEX_COLORMAP_PASS (6 << 16)
#define TEX_COLORMAP_ADD (7 << 16)
#define TEX_COLORMAP_SUB (8 << 16)
#define TEX_COLORMAP_MASK (0x0f << 16)
#define tobj_colormap(T) ((T)->flags & TEX_COLORMAP_MASK)
#define TEX_ALPHAMAP_NONE (0 << 20)
#define TEX_ALPHAMAP_ALPHA_MASK (1 << 20)
#define TEX_ALPHAMAP_BLEND (2 << 20)
#define TEX_ALPHAMAP_MODULATE (3 << 20)
#define TEX_ALPHAMAP_REPLACE (4 << 20)
#define TEX_ALPHAMAP_PASS (5 << 20)
#define TEX_ALPHAMAP_ADD (6 << 20)
#define TEX_ALPHAMAP_SUB (7 << 20)
#define TEX_ALPHAMAP_MASK (0x0f << 20)
#define tobj_alphamap(T) ((T)->flags & TEX_ALPHAMAP_MASK)
#define TEX_LIGHTMAP_DIFFUSE (0x1 << 4)
#define TEX_LIGHTMAP_SPECULAR (0x1 << 5)
#define TEX_LIGHTMAP_AMBIENT (0x1 << 6)
#define TEX_LIGHTMAP_EXT (0x1 << 7)
#define TEX_LIGHTMAP_SHADOW (0x1 << 8)
#define TEX_LIGHTMAP_MASK (TEX_LIGHTMAP_DIFFUSE | TEX_LIGHTMAP_SPECULAR | TEX_LIGHTMAP_AMBIENT | TEX_LIGHTMAP_EXT | TEX_LIGHTMAP_SHADOW)
#define tobj_lightmap(T) ((T)->flags & TEX_LIGHTMAP_MASK)
#define TEX_BUMP (0x1 << 24)
#define tobj_bump(T) ((T)->flags & TEX_BUMP)
#define TEX_MTX_DIRTY (1U << 31)
/// Texture Object
struct HSD_TObj {
    HSD_Obj parent;
    HSD_TObj* next;
    GXTexMapID id;
    GXTexGenSrc src;
    u32 mtxid;
    Quaternion rotate;
    Vec3 scale;
    Vec3 translate;
    GXTexWrapMode wrap_s;
    GXTexWrapMode wrap_t;
    u8 repeat_s;
    u8 repeat_t;
    u32 flags;
    f32 blending;
    GXTexFilter magFilt;
    struct HSD_ImageDesc* imagedesc;
    struct _HSD_Tlut* tlut;
    struct _HSD_TexLODDesc* lod;
    HSD_AObj* aobj;
    struct HSD_ImageDesc** imagetbl;
    struct _HSD_Tlut** tluttbl;
    u8 tlut_no;
    Mtx mtx;
    GXTexCoordID coord;
    struct _HSD_TObjTev* tev;
};
typedef struct _HSD_TObjDesc {
    char* class_name;
    struct _HSD_TObjDesc* next;
    GXTexMapID id;
    GXTexGenSrc src;
    Vec3 rotate;
    Vec3 scale;
    Vec3 translate;
    GXTexWrapMode wrap_s;
    GXTexWrapMode wrap_t;
    u8 repeat_s;
    u8 repeat_t;
    u32 blend_flags;
    f32 blending;
    GXTexFilter magFilt;
    struct HSD_ImageDesc* imagedesc;
    struct _HSD_TlutDesc* tlutdesc;
    struct _HSD_TexLODDesc* lod;
    struct _HSD_TObjTevDesc* tev;
} HSD_TObjDesc;
typedef struct _HSD_Tlut {
    void* lut;
    GXTlutFmt fmt;
    u32 tlut_name;
    u16 n_entries;
} HSD_Tlut;
typedef struct _HSD_TlutDesc {
    void* lut;
    GXTlutFmt fmt;
    u32 tlut_name;
    u16 n_entries;
} HSD_TlutDesc;
typedef struct _HSD_TexLODDesc {
    GXTexFilter minFilt;
    f32 LODBias;
    GXBool bias_clamp;
    GXBool edgeLODEnable;
    GXAnisotropy max_anisotropy;
} HSD_TexLODDesc;
struct HSD_ImageDesc {
    void* image_ptr;
    u16 width;
    u16 height;
    GXTexFmt format;
    u32 mipmap;
    f32 minLOD;
    f32 maxLOD;
};
typedef struct _HSD_TObjTev {
    u8 color_op;
    u8 alpha_op;
    u8 color_bias;
    u8 alpha_bias;
    u8 color_scale;
    u8 alpha_scale;
    u8 color_clamp;
    u8 alpha_clamp;
    u8 color_a, color_b, color_c, color_d;
    u8 alpha_a, alpha_b, alpha_c, alpha_d;
    GXColor konst, tev0, tev1;
    u32 active;
} HSD_TObjTev;
typedef struct _HSD_TObjTevDesc {
    u8 color_op;
    u8 alpha_op;
    u8 color_bias;
    u8 alpha_bias;
    u8 color_scale;
    u8 alpha_scale;
    u8 color_clamp;
    u8 alpha_clamp;
    u8 color_a, color_b, color_c, color_d;
    u8 alpha_a, alpha_b, alpha_c, alpha_d;
    GXColor konst, tev0, tev1;
    u32 active;
} HSD_TObjTevDesc;
typedef struct _HSD_TObjInfo {
    HSD_ClassInfo parent;
    void (*make_mtx)(HSD_TObj* tobj);
    int (*load)(HSD_TObj* tobj, HSD_TObjDesc* desc);
    void (*make_texp)(HSD_TObj* tobj, u32 lightmap, u32 lightmap_done,
                      HSD_TExp** c, HSD_TExp** a, HSD_TExp** list);
} HSD_TObjInfo;
typedef struct _HSD_TexAnim {
    struct _HSD_TexAnim* next;
    GXTexMapID id;
    HSD_AObjDesc* aobjdesc;
    struct HSD_ImageDesc** imagetbl;
    struct _HSD_TlutDesc** tluttbl;
    u16 n_imagetbl;
    u16 n_tluttbl;
} HSD_TexAnim;
extern HSD_TObjInfo hsdTObj;
#define HSD_TOBJ(o) ((HSD_TObj*) (o))
#define HSD_TOBJ_INFO(i) ((HSD_TObjInfo*) (i))
#define HSD_TOBJ_METHOD(o) HSD_TOBJ_INFO(HSD_OBJECT_METHOD(o))
void HSD_TObjRemoveAnimAll(HSD_TObj* tobj);
void HSD_TObjAddAnim(HSD_TObj* tobj, HSD_TexAnim* texanim);
void HSD_TObjAddAnimAll(HSD_TObj* tobj, HSD_TexAnim* texanim);
void HSD_TObjReqAnimAllByFlags(HSD_TObj* tobj, f32 startframe, u32 flags);
void HSD_TObjReqAnim(HSD_TObj* tobj, f32 startframe);
void HSD_TObjReqAnimAll(HSD_TObj* tobj, f32 startframe);
void HSD_TObjAnim(HSD_TObj* tobj);
void HSD_TObjAnimAll(HSD_TObj* tobj);
HSD_TObj* HSD_TObjLoadDesc(HSD_TObjDesc* td);
HSD_Tlut* HSD_TlutLoadDesc(HSD_TlutDesc* tlutdesc);
HSD_TObjTev* HSD_TObjTevLoadDesc(HSD_TObjTevDesc* tevdesc);
HSD_TObj* _HSD_TObjGetCurrentByType(HSD_TObj* from, u32 mapping);
void HSD_TObjRemove(HSD_TObj* tobj);
void HSD_TObjRemoveAll(HSD_TObj* tobj);
HSD_TObj* HSD_TObjGetNext(HSD_TObj* tobj);
HSD_TObj* HSD_TObjAlloc(void);
void HSD_TObjFree(HSD_TObj* tobj);
void HSD_TObjSetDefaultClass(HSD_TObjInfo* info);
HSD_TObjInfo* HSD_TObjGetDefaultClass(void);
HSD_Tlut* HSD_TlutAlloc(void);
void HSD_TlutFree(HSD_Tlut* tlut);
void HSD_TlutRemove(HSD_Tlut* tlut);
HSD_TObjTev* HSD_TObjTevAlloc(void);
void HSD_TObjTevFree(HSD_TObjTev* tev);
void HSD_TObjTevRemove(HSD_TObjTev* tev);
HSD_ImageDesc* HSD_ImageDescAlloc(void);
void HSD_ImageDescFree(HSD_ImageDesc* idesc);
void HSD_ImageDescCopyFromEFB(HSD_ImageDesc* idesc, u16 origx, u16 origy,
                              GXBool clear, bool sync);
void HSD_TObjSetupTextureCoordGen(HSD_TObj* tobj);
void HSD_TObjSetupVolatileTev(HSD_TObj* tobj, u32 rendermode);
s32 HSD_TObjAssignResources(HSD_TObj* tobj_top);
void HSD_TObjSetup(HSD_TObj* tobj);
u32 HSD_TGTex2Index(GXTexGenSrc tgtex);
GXTexGenSrc HSD_TexCoordID2TexGenSrc(GXTexCoordID coord);
u32 HSD_TexCoord2Index(GXTexCoordID coord_id);
GXTexCoordID HSD_Index2TexCoord(u32 index);
u32 HSD_TexMtx2Index(GXTexMtx texmtx);
GXTexMtx HSD_Index2TexMtx(u32 index);
GXTexMapID HSD_Index2TexMap(u32 index);
u32 HSD_TexMap2Index(GXTexMapID mapid);
void HSD_TObjRemoveAnim(HSD_TObj* tobj);
void HSD_TObjReqAnimByFlags(HSD_TObj* tobj, f32 startframe, u32 flags);
#define MOBJ_ANIM 0x4
#define TOBJ_ANIM 0x10
#define ALL_ANIM 0x7FF
#define HSD_A_M_AMBIENT_R 1
#define HSD_A_M_AMBIENT_G 2
#define HSD_A_M_AMBIENT_B 3
#define HSD_A_M_DIFFUSE_R 4
#define HSD_A_M_DIFFUSE_G 5
#define HSD_A_M_DIFFUSE_B 6
#define HSD_A_M_SPECULAR_R 7
#define HSD_A_M_SPECULAR_G 8
#define HSD_A_M_SPECULAR_B 9
#define HSD_A_M_ALPHA 10
#define HSD_A_M_PE_REF0 11
#define HSD_A_M_PE_REF1 12
#define HSD_A_M_PE_DSTALPHA 13
#define RENDER_DIFFUSE_SHIFT 0
#define RENDER_DIFFUSE_BITS (3 << RENDER_DIFFUSE_SHIFT)
#define RENDER_DIFFUSE_MAT0 (0 << RENDER_DIFFUSE_SHIFT)
#define RENDER_DIFFUSE_MAT (1 << RENDER_DIFFUSE_SHIFT)
#define RENDER_DIFFUSE_VTX (2 << RENDER_DIFFUSE_SHIFT)
#define RENDER_DIFFUSE_BOTH (3 << RENDER_DIFFUSE_SHIFT)
#define RENDER_CONSTANT (1 << 0)
#define RENDER_VERTEX (1 << 1)
#define RENDER_DIFFUSE (1 << 2)
#define RENDER_SPECULAR (1 << 3)
#define CHANNEL_FIELD (RENDER_CONSTANT | RENDER_VERTEX | RENDER_DIFFUSE | RENDER_SPECULAR)
#define RENDER_TEX0 (1 << 4)
#define RENDER_TEX1 (1 << 5)
#define RENDER_TEX2 (1 << 6)
#define RENDER_TEX3 (1 << 7)
#define RENDER_TEX4 (1 << 8)
#define RENDER_TEX5 (1 << 9)
#define RENDER_TEX6 (1 << 10)
#define RENDER_TEX7 (1 << 11)
#define RENDER_TEXTURES (RENDER_TEX0 | RENDER_TEX1 | RENDER_TEX2 | RENDER_TEX3 | RENDER_TEX4 | RENDER_TEX5 | RENDER_TEX6 | RENDER_TEX7)
#define RENDER_TOON (1 << 12)
#define RENDER_ALPHA_SHIFT 13
#define RENDER_ALPHA_BITS (3 << RENDER_ALPHA_SHIFT)
#define RENDER_ALPHA_COMPAT (0 << RENDER_ALPHA_SHIFT)
#define RENDER_ALPHA_MAT (1 << RENDER_ALPHA_SHIFT)
#define RENDER_ALPHA_VTX (2 << RENDER_ALPHA_SHIFT)
#define RENDER_ALPHA_BOTH (3 << RENDER_ALPHA_SHIFT)
#define RENDER_SHADOW (1 << 26)
#define RENDER_ZMODE_ALWAYS (1 << 27)
#define RENDER_NO_ZUPDATE (1 << 29)
#define RENDER_XLU (1 << 30)
#define RENDER_BLENDING (RENDER_XLU | RENDER_NO_ZUPDATE)
struct HSD_MObj {
    HSD_Class parent;
    u32 rendermode;
    HSD_TObj* tobj;
    HSD_Material* mat;
    HSD_PEDesc* pe;
    HSD_AObj* aobj;
    struct _HSD_TExpTevDesc* tevdesc;
    HSD_TExp* texp;
};
struct HSD_Material {
    GXColor ambient;
    GXColor diffuse;
    GXColor specular;
    f32 alpha;
    f32 shininess;
};
struct HSD_PEDesc {
    u8 flags;
    u8 ref0;
    u8 ref1;
    u8 dst_alpha;
    u8 type;
    u8 src_factor;
    u8 dst_factor;
    u8 logic_op;
    u8 z_comp;
    u8 alpha_comp0;
    u8 alpha_op;
    u8 alpha_comp1;
};
typedef struct _HSD_MObjDesc {
    char* class_name;
    u32 rendermode;
    struct _HSD_TObjDesc* texdesc;
    HSD_Material* mat;
    void* renderdesc;
    HSD_PEDesc* pedesc;
} HSD_MObjDesc;
typedef struct _HSD_ChanAnim {
    struct _HSD_ChanAnim* next;
    HSD_AObjDesc* aobjdesc;
} HSD_ChanAnim;
typedef struct _HSD_TevRegAnim {
    struct _HSD_TevRegAnim* next;
    HSD_AObjDesc* aobjdesc;
} HSD_TevRegAnim;
typedef struct _HSD_RenderAnim {
    struct _HSD_ChanAnim* chananim;
    struct _HSD_TevRegAnim* reganim;
} HSD_RenderAnim;
typedef struct _HSD_MatAnim {
    struct _HSD_MatAnim* next;
    HSD_AObjDesc* aobjdesc;
    struct _HSD_TexAnim* texanim;
    struct _HSD_RenderAnim* renderanim;
} HSD_MatAnim;
struct HSD_MatAnimJoint {
    HSD_MatAnimJoint* child;
    HSD_MatAnimJoint* next;
    HSD_MatAnim* matanim;
};
struct HSD_MObjInfo {
    /*  +0 */ HSD_ClassInfo parent;
    /* +3C */ HSD_MObjSetupFunc setup;
    /* +40 */ int (*load)(HSD_MObj* mobj, HSD_MObjDesc* desc);
    /* +44 */ HSD_TExp* (*make_texp)(HSD_MObj* mobj, HSD_TObj* tobj_top,
                                     HSD_TExp** list);
    /* +48 */ void (*setup_tev)(HSD_MObj* mobj, HSD_TObj* tobj,
                                u32 rendermode);
    /* +4C */ void (*unset)(HSD_MObj* mobj, u32 rendermode);
};
#define HSD_MOBJ(o) ((HSD_MObj*) (o))
#define HSD_MOBJ_INFO(i) ((HSD_MObjInfo*) (i))
#define HSD_MOBJ_METHOD(o) HSD_MOBJ_INFO(HSD_CLASS_METHOD(o))
extern HSD_MObjInfo hsdMObj;
void HSD_MObjSetCurrent(HSD_MObj* mobj);
void HSD_MObjSetFlags(HSD_MObj* mobj, u32 flags);
void HSD_MObjClearFlags(HSD_MObj* mobj, u32 flags);
void HSD_MObjRemoveAnimByFlags(HSD_MObj* mobj, u32 flags);
void HSD_MObjAddAnim(HSD_MObj* mobj, HSD_MatAnim* matanim);
void HSD_MObjReqAnimByFlags(HSD_MObj* mobj, f32 startframe, u32 flags);
void HSD_MObjReqAnim(HSD_MObj* mobj, f32 startframe);
void HSD_MObjAnim(HSD_MObj* mobj);
HSD_MObj* HSD_MObjLoadDesc(HSD_MObjDesc* mobjdesc);
HSD_TObj* HSD_MObjGetTObj(HSD_MObj* mobj);
void HSD_MObjRemove(HSD_MObj* mobj);
HSD_MObj* HSD_MObjAlloc(void);
HSD_Material* HSD_MaterialAlloc(void);
void HSD_MObjCompileTev(HSD_MObj* mobj);
void HSD_MObjDeleteShadowTexture(HSD_TObj* tobj);
HSD_TExp* MObjMakeTExp(HSD_MObj* mobj, HSD_TObj* tobj_top, HSD_TExp** list);
void MObjSetupTev(HSD_MObj* mobj, HSD_TObj* tobj, u32 arg2);
void HSD_MObjSetup(HSD_MObj* mobj, u32 rendermode);
void HSD_MObjUnset(HSD_MObj* mobj, u32 rendermode);
void HSD_MObjSetToonTextureImage(HSD_ImageDesc* imagedesc);
void HSD_MObjSetDiffuseColor(HSD_MObj* mobj, u8 r, u8 g, u8 b);
void HSD_MObjSetAlpha(HSD_MObj* mobj, f32 alpha);
void HSD_MObjAddShadowTexture(HSD_TObj* tobj);
extern HSD_TObj* tobj_shadows;
extern HSD_TObj* tobj_toon;
#define DOBJ_HIDDEN 0x1
struct HSD_DObj {
    HSD_Class parent;
    HSD_DObj* next; // 0x04
    HSD_MObj* mobj; // 0x08
    HSD_PObj* pobj; // 0x0C
    HSD_AObj* aobj; // 0x10
    u32 flags; // 0x14
};
struct HSD_DObjDesc {
    char* class_name;
    HSD_DObjDesc* next;
    HSD_MObjDesc* mobjdesc;
    HSD_PObjDesc* pobjdesc;
};
struct HSD_DObjInfo {
    HSD_ClassInfo parent;
    void (*disp)(HSD_DObj* dobj, Mtx vmtx, Mtx pmtx, u32 rendermode); // 0x3C
    int (*load)(HSD_DObj* dobj, HSD_DObjDesc* desc); // 0x40
};
struct HSD_ShapeAnimDObj {
    HSD_ShapeAnimDObj* next;
    HSD_ShapeAnim* shapeanim;
};
#define HSD_DOBJ(o) ((HSD_DObj*) (o))
#define HSD_DOBJ_INFO(i) ((HSD_DObjInfo*) (i))
#define HSD_DOBJ_METHOD(o) HSD_DOBJ_INFO(HSD_CLASS_METHOD(o))
void HSD_DObjSetCurrent(HSD_DObj* dobj);
u32 HSD_DObjGetFlags(HSD_DObj* dobj);
void HSD_DObjSetFlags(HSD_DObj* dobj, u32 flags);
void HSD_DObjClearFlags(HSD_DObj* dobj, u32 flags);
void HSD_DObjModifyFlags(HSD_DObj* dobj, u32 flags, u32 mask);
void HSD_DObjRemoveAnimByFlags(HSD_DObj* dobj, u32 flags);
void HSD_DObjRemoveAnimAllByFlags(HSD_DObj* dobj, u32 flags);
void HSD_DObjAddAnim(HSD_DObj* dobj, HSD_MatAnim* mat_anim,
                     HSD_ShapeAnimDObj* sh_anim);
void HSD_DObjAddAnimAll(HSD_DObj* dobj, HSD_MatAnim* matanim,
                        HSD_ShapeAnimDObj* shapeanimdobj);
void HSD_DObjReqAnimByFlags(HSD_DObj* dobj, f32 startframe, u32 flags);
void HSD_DObjReqAnimAllByFlags(HSD_DObj* dobj, f32 startframe, u32 flags);
void HSD_DObjReqAnimAll(HSD_DObj* dobj, f32 startframe);
void HSD_DObjAnim(HSD_DObj* dobj);
void HSD_DObjAnimAll(HSD_DObj* dobj);
HSD_DObj* HSD_DObjLoadDesc(HSD_DObjDesc* desc);
void HSD_DObjRemoveAll(HSD_DObj* dobj);
HSD_DObj* HSD_DObjAlloc(void);
void HSD_DObjResolveRefs(HSD_DObj* dobj, HSD_DObjDesc* desc);
void HSD_DObjResolveRefsAll(HSD_DObj* dobj, HSD_DObjDesc* desc);
void HSD_DObjDisp(HSD_DObj* dobj, Mtx vmtx, Mtx pmtx, u32 rendermode);
void HSD_DObjRemove(HSD_DObj* dobj);
void HSD_DObjSetDefaultClass(HSD_ClassInfo* info);
void forceStringAllocation(HSD_DObj* dobj, HSD_MObj* mobj);
extern HSD_DObjInfo hsdDObj;
#define SYSDOLPHIN_BASELIB_LOBJ_H
#define MAX_GXLIGHT 9
struct HSD_LightPoint {
    f32 cutoff;
    u32 point_func;
    f32 ref_br;
    f32 ref_dist;
    u32 dist_func;
};
struct HSD_LightPointDesc {
    f32 ref_br;
    f32 ref_dist;
    u32 dist_func;
};
struct HSD_LightSpot {
    f32 cutoff;
    u32 spot_func;
    f32 ref_br;
    f32 ref_dist;
    u32 dist_func;
};
struct HSD_LightSpotDesc {
    f32 cutoff;
    u32 spot_func;
    f32 ref_br;
    f32 ref_dist;
    u32 dist_func;
};
struct HSD_LightAttn {
    f32 a0;
    f32 a1;
    f32 a2;
    f32 k0;
    f32 k1;
    f32 k2;
};
struct HSD_LObj {
    /* 0x00 - 0x04 */ HSD_Obj parent;
    /* 0x08 */ u16 flags;
    /* 0x0A */ u16 priority;
    /* 0x0C */ HSD_LObj* next;
    /* 0x10 */ GXColor color;
    /* 0x14 */ GXColor hw_color;
    /* 0x18 */ HSD_WObj* position;
    /* 0x1C */ HSD_WObj* interest;
    /* 0x20 - 0x34 */ union {
        HSD_LightPoint point;
        HSD_LightSpot spot;
        HSD_LightAttn attn;
    } u;
    /* 0x38 */ f32 shininess;
    /* 0x3C - 0x44 */ Vec3 lvec;
    /* 0x48 */ HSD_AObj* aobj;
    /* 0x4C */ GXLightID id;
    /* 0x50 */ GXLightObj lightobj;
    /* 0x90 */ GXLightID spec_id;
    /* 0x94 */ GXLightObj spec_lightobj;
};
struct HSD_LightDesc {
    /* 0x00 */ char* class_name;
    /* 0x04 */ HSD_LightDesc* next;
    /* 0x08 */ u16 flags;
    /* 0x0A */ u16 attnflags;
    /* 0x0C */ GXColor color;
    /* 0x10 */ HSD_WObjDesc* position;
    /* 0x14 */ HSD_WObjDesc* interest;
    union {
        void* p;
        f32* shininess;
        HSD_LightPointDesc* point;
        HSD_LightSpotDesc* spot;
        HSD_LightAttn* attn;
    } u;
};
struct HSD_LightAnim {
    HSD_LightAnim* next;
    HSD_AObjDesc* aobjdesc;
    HSD_WObjAnim* position_anim;
    HSD_WObjAnim* interest_anim;
};
struct HSD_LObjInfo {
    HSD_ObjInfo parent;
    int (*load)(HSD_LObj* lobj, HSD_LightDesc* ldesc);
};
#define HSD_LOBJ(o) ((HSD_LObj*) (o))
#define HSD_LOBJ_INFO(i) ((HSD_LObjInfo*) (i))
#define HSD_LOBJ_METHOD(o) HSD_LOBJ_INFO(HSD_OBJECT_METHOD((o)))
static inline u8 HSD_LObjGetPriority(HSD_LObj* lobj)
{
    ((lobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/lobj.h", 113, "lobj"));
    return lobj->priority;
}
extern HSD_LObjInfo hsdLobj;
u32 HSD_LObjGetFlags(HSD_LObj* lobj);
void HSD_LObjSetFlags(HSD_LObj* lobj, u32 flags);
void HSD_LObjClearFlags(HSD_LObj* lobj, u32 flags);
GXLightID HSD_LObjGetLightMaskDiffuse(void);
s32 HSD_LObjGetLightMaskAttnFunc(void);
s32 HSD_LObjGetLightMaskAlpha(void);
s32 HSD_LObjGetLightMaskSpecular(void);
void HSD_LObjSetActive(HSD_LObj* lobj);
s32 HSD_LObjGetNbActive(void);
HSD_LObj* HSD_LObjGetActiveByID(GXLightID id);
HSD_LObj* HSD_LObjGetActiveByIndex(s32 idx);
void HSD_LObjClearActive(void);
void LObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
void HSD_LObjAddAnim(HSD_LObj* lobj, HSD_LightAnim* lanim);
void HSD_LObjAddAnimAll(HSD_LObj* lobj, HSD_LightAnim* lanim);
void HSD_LObjAnim(HSD_LObj* lobj);
void HSD_LObjAnimAll(HSD_LObj* lobj);
void HSD_LObjReqAnim(HSD_LObj* lobj, f32 startframe);
void HSD_LObjReqAnimAll(HSD_LObj* lobj, f32 startframe);
void HSD_LObjGetLightVector(HSD_LObj* lobj, Vec3* dir);
void HSD_LObjSetup(HSD_LObj* lobj, GXColor color, f32 shininess);
bool HSD_LObjGetPosition(HSD_LObj*, Vec3*);
bool HSD_LObjGetInterest(HSD_LObj*, Vec3*);
HSD_WObj* HSD_LObjGetPositionWObj(HSD_LObj* lobj);
HSD_WObj* HSD_LObjGetInterestWObj(HSD_LObj* lobj);
void HSD_LObjSetPositionWObj(HSD_LObj* lobj, HSD_WObj* wobj);
void HSD_LObjSetInterestWObj(HSD_LObj* lobj, HSD_WObj* wobj);
u32 HSD_LightID2Index(GXLightID);
void HSD_LObjDeleteCurrent(HSD_LObj* lobj);
s32 HSD_Index2LightID(u32);
void HSD_LObjRemoveAll(HSD_LObj* lobj);
void HSD_LObjSetPosition(HSD_LObj* lobj, Vec3* position);
void HSD_LObjSetInterest(HSD_LObj* lobj, Vec3* interest);
void HSD_LObj_803668EC(HSD_LObj* lobj);
void HSD_LObjSetupInit(HSD_CObj* arg0);
void HSD_LObjSetColor(HSD_LObj* lobj, GXColor color);
void HSD_LObjGetColor(HSD_LObj* lobj, GXColor* color);
void HSD_LObjSetSpot(HSD_LObj* lobj, f32 cutoff, s32 point_func);
void HSD_LObjSetDistAttn(HSD_LObj* lobj, f32 ref_dist, f32 ref_br,
                         s32 dist_func);
void HSD_LObjSetAttnA(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2);
void HSD_LObjSetAttnK(HSD_LObj* lobj, f32 k0, f32 k1, f32 k2);
void HSD_LObjSetAttn(HSD_LObj* lobj, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1,
                     f32 k2);
void HSD_LObjSetupSpecularInit(Mtx pmtx);
u32 HSD_LObjGetType(HSD_LObj* lobj);
void HSD_LObjAddCurrent(HSD_LObj* lobj);
void HSD_LObjUnrefThis(HSD_LObj* lobj);
void HSD_LObjDeleteCurrentAll(HSD_LObj* lobj);
void HSD_LObjSetCurrentAll(HSD_LObj* lobj);
HSD_LObj* HSD_LObjGetCurrentByType(u16 type);
void HSD_LObjSetDefaultClass(HSD_LObjInfo* info);
HSD_LObjInfo* HSD_LObjGetDefaultClass(void);
HSD_LObj* HSD_LObjAlloc(void);
HSD_LObj* HSD_LObjLoadDesc(HSD_LightDesc* ldesc);
static inline HSD_LObj* HSD_LObjGetNext(HSD_LObj* lobj)
{
    if (lobj == 0L) {
        return 0L;
    } else {
        return lobj->next;
    }
}
static inline void HSD_LObjSetNext(HSD_LObj* lobj, HSD_LObj* next)
{
    ((lobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/lobj.h", 194, "lobj"));
    lobj->next = next;
}
#define PUSH_ATTRS(fp, attributeName) do { void* backup = (fp)->dat_attrs_backup; attributeName* src = (attributeName*) (fp)->ft_data->ext_attr; void** da = &(fp)->dat_attrs; *(attributeName*) (fp)->dat_attrs_backup = *src; *da = backup; } while (0)
/// @todo Remove declarations. Doesn't really need to be a macro.
#define COPY_ATTRS(gobj, attributeName) Fighter* fp = GET_FIGHTER(gobj); attributeName* sA2 = (attributeName*) fp->dat_attrs; attributeName* ext_attr = (attributeName*) fp->ft_data->ext_attr; *sA2 = *ext_attr;
#ifdef M2C
#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj))
#else
#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData(gobj))
#endif
static inline void Fighter_SetEffectHitlagCallbacks(Fighter* fp)
{
    fp->pre_hitlag_cb = efLib_PauseAll;
    fp->post_hitlag_cb = efLib_ResumeAll;
}
/// @deprecated Use #GET_FIGHTER instead.
static inline Fighter* getFighter(Fighter_GObj* gobj)
{
    return gobj->user_data;
}
/// @deprecated use #GET_FIGHTER instead.
static inline Fighter* getFighterPlus(Fighter_GObj* gobj)
{
    Fighter* fp = gobj->user_data;
    return fp;
}
static inline void* getFtSpecialAttrs(Fighter* fp)
{
    void* fighter_attr = fp->dat_attrs;
    return fighter_attr;
}
static inline void* getFtSpecialAttrsD(Fighter* fp) // Direct
{
    return fp->dat_attrs;
}
static inline s32 ftGetKind(Fighter* fp)
{
    return fp->kind;
}
static inline s32 ftGetAction(Fighter* fp)
{
    return fp->motion_id;
}
static inline void* getFtSpecialAttrs2CC(Fighter* fp)
{
    void* fighter_attr = fp->x2CC;
    return fighter_attr;
}
static inline ftCo_DatAttrs* getFtAttrs(Fighter* fp)
{
    return &fp->co_attrs;
}
static inline CollData* getFtColl(Fighter* fp)
{
    return &fp->coll_data;
}
static inline Fighter_GObj* getFtVictim(Fighter* fp)
{
    return fp->victim_gobj;
}
static inline Item_GObj* getFtTargetItem(Fighter* fp)
{
    return fp->target_item_gobj;
}
static inline bool ftGetGroundAir(Fighter* fp)
{
    return fp->ground_or_air;
}
static inline int getStickDirX(Fighter* fp)
{
    if (fp->input.lstick[0].x < 0.0f) {
        return -1;
    } else {
        return +1;
    }
}
static inline float stickGetDir(float x1, float x2)
{
    if (x1 < x2) {
        return -x1;
    } else {
        return x1;
    }
}
static inline void getAccelAndTarget(Fighter* fp, float* accel,
                                     float* target_vel)
{
    ftCo_DatAttrs* co_attrs = &fp->co_attrs;
    *accel = fp->input.lstick[0].x * fp->co_attrs.dash_accel_mul;
    *accel += fp->input.lstick[0].x > 0 ? +co_attrs->dash_accel_base
                                        : -co_attrs->dash_accel_base;
    *target_vel = fp->input.lstick[0].x * co_attrs->dash_max_velocity;
}
/// used for all fighters except Kirby and Purin
static inline void Fighter_OnItemPickup(Fighter_GObj* gobj, bool catchItemFlag,
                                        bool bool2, bool bool3)
{
    Fighter* fp = GET_FIGHTER(gobj);
    if (!itIsHeavy(fp->item_gobj)) {
        switch (itGetHoldKind(fp->item_gobj)) {
        case 1:
            ftAnim_80070FB4(gobj, bool2, 1);
            break;
        case 2:
            ftAnim_80070FB4(gobj, bool2, 0);
            break;
        case 3:
            ftAnim_80070FB4(gobj, bool2, 2);
            break;
        case 4:
            ftAnim_80070FB4(gobj, bool2, 3);
            break;
        default:
            break;
        }
        if (catchItemFlag) {
            ftAnim_80070C48(gobj, bool3);
        }
    }
}
static inline void Fighter_OnItemInvisible(Fighter_GObj* gobj, bool flag)
{
    Fighter* fp = GET_FIGHTER(gobj);
    if (!itIsHeavy(fp->item_gobj)) {
        ftAnim_80070CC4(gobj, flag);
    }
}
static inline void Fighter_OnItemVisible(Fighter_GObj* gobj, bool flag)
{
    Fighter* fp = GET_FIGHTER(gobj);
    if (!itIsHeavy(fp->item_gobj)) {
        ftAnim_80070C48(gobj, flag);
    }
}
static inline void Fighter_OnItemDrop(Fighter_GObj* gobj, bool dropItemFlag,
                                      bool bool2, bool bool3)
{
    ftAnim_80070FB4(gobj, bool2, -1);
    if (dropItemFlag) {
        ftAnim_80070CC4(gobj, bool3);
    }
}
static inline void Fighter_OnKnockbackEnter(Fighter_GObj* gobj, s32 arg1)
{
    ftAnim_800704F0(gobj, arg1, 3.0f);
    ftAnim_800704F0(gobj, 0, 3.0f);
}
static inline void Fighter_OnKnockbackExit(Fighter_GObj* gobj, s32 arg1)
{
    ftAnim_800704F0(gobj, arg1, 0.0f);
    ftAnim_800704F0(gobj, 0, 0.0f);
}
static inline void Fighter_UnsetCmdVar0(Fighter_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->cmd_vars[0] = 0;
}
static inline void Fighter_SetDamageCallback(Fighter_GObj* gobj,
                                             HSD_GObjEvent cb)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->take_dmg_cb = cb;
    fp->death2_cb = cb;
}
static inline void Fighter_SetDamageCallbacks(Fighter* fp,
                                              HSD_GObjEvent take_dmg_cb,
                                              HSD_GObjEvent death2_cb)
{
    fp->take_dmg_cb = take_dmg_cb;
    fp->death2_cb = death2_cb;
}
static inline void Fighter_ClearCmdVars(Fighter* fp)
{
    fp->cmd_vars[3] = 0;
    fp->cmd_vars[2] = 0;
    fp->cmd_vars[1] = 0;
    fp->cmd_vars[0] = 0;
}
static inline CollData* Fighter_GetCollData(Fighter* fp)
{
    return &fp->coll_data;
}
static inline void ftCommon_HandleTeleportCollisions(Fighter_GObj* gobj,
                                                     Fighter* fp,
                                                     CollData* coll,
                                                     const int* angle_clamp,
                                                     HSD_GObjEvent on_collide)
{
    if ((coll->env_flags & (0x2000 | 0x4000)) &&
        lbVector_AngleXY(&coll->ceiling.normal, &fp->self_vel) >
            ((90.0f + *angle_clamp) * 0.01745329252f))
    {
        on_collide(gobj);
    }
    if ((coll->env_flags & 0x3F) &&
        lbVector_AngleXY(&coll->left_facing_wall.normal, &fp->self_vel) >
            ((90.0f + *angle_clamp) * 0.01745329252f))
    {
        on_collide(gobj);
    }
    if ((coll->env_flags & 0xFC0) &&
        lbVector_AngleXY(&coll->right_facing_wall.normal, &fp->self_vel) >
            ((90.0f + *angle_clamp) * 0.01745329252f))
    {
        on_collide(gobj);
    }
}
/// @todo This and #ftCheckThrowB3, etc. are probably one macro or something.
static inline bool ftCheckThrowB0(Fighter* fp)
{
    if (fp->throw_flags_b0) {
        fp->throw_flags_b0 = 0;
        return 1;
    } else {
        return 0;
    }
}
static inline bool ftCheckThrowB3(Fighter* fp)
{
    if (fp->throw_flags_b3) {
        fp->throw_flags_b3 = 0;
        return 1;
    } else {
        return 0;
    }
}
static inline bool ftCheckThrowB4(Fighter* fp)
{
    if (fp->throw_flags_b4) {
        fp->throw_flags_b4 = 0;
        return 1;
    } else {
        return 0;
    }
}
static inline float ftGetFacingDir(Fighter_GObj* gobj)
{
    return GET_FIGHTER(gobj)->facing_dir;
}
static inline int ftGetFacingDirInt(Fighter* fp)
{
    if (fp->facing_dir < 0.0f) {
        return -1;
    } else {
        return +1;
    }
}
/**
 * @todo #Fighter_804D64FC..#Fighter_804D6550 are initialized to 0 in
 *       #Fighter_LoadCommonData, probably all pointers
 */
extern struct Fighter_804D64FC_t {
    u8** cmdscripts; ///< +00 per-character command script arrays
    void** x4; ///< +04 ground attack tables (per character)
    void** x8; ///< +08 air attack tables (per character)
    M2C_UNK* xC; ///< +0C ranged/projectile attack tables
    void** x10; ///< +10 smash attack tables (per character)
    void** x14; ///< +14 special action tables (per character)
    void** x18; ///< +18 weapon attack tables (per character)
    void** x1C; ///< +1C edge guard tables (per character)
    float* x20; ///< +20 distance thresholds (per character)
    float* x24; ///< +24 weapon reach bonus table
}* Fighter_804D64FC;
struct plAllocInfo;
/* 0679B0 */ void Fighter_800679B0(void);
/* 067A84 */ void Fighter_FirstInitialize_80067A84(void);
/* 067ABC */ void Fighter_LoadCommonData(void);
/* 067BB4 */ void Fighter_UpdateModelScale(Fighter_GObj* gobj);
/* 067C98 */ void Fighter_UnkInitReset_80067C98(Fighter*);
/* 068354 */ void Fighter_Spawn(Fighter_GObj* gobj);
/* 0686E4 */ void Fighter_UnkUpdateCostumeJoint_800686E4(Fighter_GObj* gobj);
/* 06876C */ void Fighter_UnkUpdateVecFromBones_8006876C(Fighter* fp);
/* 068854 */ void Fighter_ResetInputData_80068854(Fighter_GObj* gobj);
/* 068914 */ void Fighter_UnkInitLoad_80068914(Fighter_GObj* gobj,
                                               struct plAllocInfo* argdata);
/* 068E40 */ u32 Fighter_NewSpawn_80068E40(void);
/* 068E64 */ void Fighter_80068E64(Fighter_GObj* gobj);
/* 068E98 */ Fighter_GObj* Fighter_Create(struct plAllocInfo* input);
/* 0693AC */ void Fighter_ChangeMotionState(Fighter_GObj* gobj,
                                            FtMotionId msid, MotionFlags flags,
                                            f32 anim_start, f32 anim_speed,
                                            f32 anim_blend,
                                            Fighter_GObj* arg3);
/* 06A1BC */ void Fighter_procHitlag(Fighter_GObj* gobj);
/* 06A360 */ void Fighter_procAnim(Fighter_GObj* gobj);
/* 06ABA0 */ void Fighter_procCpu(Fighter_GObj* gobj);
/* 06ABEC */ void Fighter_UnkIncrementCounters_8006ABEC(Fighter_GObj* gobj);
/* 06AD10 */ void Fighter_procInput(Fighter_GObj* gobj);
/* 06B82C */ void Fighter_procUpdate(Fighter_GObj* gobj);
/* 06C0F0 */ void Fighter_UnkApplyTransformation_8006C0F0(Fighter_GObj* gobj);
/* 06C27C */ void Fighter_procMap(Fighter_GObj* gobj);
/* 06C5F4 */ void Fighter_procIK(Fighter_GObj* gobj);
/* 06C624 */ void Fighter_procAccessory(Fighter_GObj* gobj);
/* 06C80C */ void Fighter_procCollPos(Fighter_GObj* gobj);
/* 06CA5C */ void Fighter_procGrabColl(Fighter_GObj* gobj);
/* 06CB94 */ void Fighter_procAttackColl(Fighter_GObj* gobj);
/* 06CC30 */ void Fighter_UnkTakeDamage_8006CC30(Fighter* fp,
                                                 float damage_amount);
/* 06CC7C */ void Fighter_TakeDamage_8006CC7C(Fighter*, float);
/* 06CDA4 */ void Fighter_8006CDA4(Fighter* fp, s32 arg1);
/* 06CF5C */ void Fighter_8006CF5C(Fighter* fp, s32 arg1);
/* 06CFBC */ void Fighter_UnkSetFlag_8006CFBC(Fighter_GObj* gobj);
/* 06CFE0 */ void Fighter_8006CFE0(Fighter_GObj* gobj);
/* 06D044 */ void Fighter_UnkRecursiveFunc_8006D044(Fighter_GObj* gobj);
/* 06D10C */ void Fighter_8006D10C(Fighter_GObj* gobj);
/* 06D1EC */ void Fighter_procCollResolve(Fighter_GObj* gobj);
/* 06D9AC */ void Fighter_procDynamics(Fighter_GObj* gobj);
/* 06D9EC */ void Fighter_procCamera(Fighter_GObj* gobj);
/* 06DA4C */ void Fighter_procPlayer(Fighter_GObj* gobj);
/* 06DABC */ void Fighter_Unload_8006DABC(void* user_data);
/* 458FD0 */ extern HSD_ObjAllocData fighter_alloc_data;
/* 458FFC */ extern HSD_ObjAllocData fighter_dat_attrs_alloc_data;
/* 459028 */ extern HSD_ObjAllocData fighter_parts_alloc_data;
/* 459054 */ extern HSD_ObjAllocData fighter_dobj_list_alloc_data;
/* 459080 */ extern HSD_ObjAllocData fighter_x2040_alloc_data;
/* 4590AC */ extern HSD_ObjAllocData fighter_x59C_alloc_data;
/* 4D6504 */ extern HSD_Joint* Fighter_804D6504;
/* 4D6508 */ extern u8* Fighter_804D6508;
/* 4D650C */ extern u8* Fighter_804D650C;
/* 4D6510 */ extern M2C_UNK Fighter_804D6510;
/* 4D6514 */ extern HSD_Joint*
    Fighter_804D6514; ///< trophy platform model when characters spawn
/* 4D6518 */ extern struct Fighter_804D6518_t {
    f32 x0; ///< gravity mult
    f32 x4; ///< weight mult
}* Fighter_804D6518;
/* 4D651C */ extern struct Fighter_804D651C_t {
    f32 x0;
    f32 x4; ///< jump y impulse fullhop
    f32 x8; ///< jump y impulse shorthop
    f32 xC; ///< gravity
    f32 x10; ///< fall speed
    f32 x14; ///< fast fall speed
    f32 x18; ///< weight
    f32 x1C; ///< ledge jump y impulse
    f32 x20; ///< wall jump y impulse
}* Fighter_804D651C; ///< metal modifiers - used in 0x800d105c
/* 4D6520 */ extern struct Fighter_804D6520_t {
    f32 x0; ///< walk speed scale
    f32 x4; ///< dash accel a
    f32 x8; ///< dash accel b
    f32 xC; ///< dash max speed
    f32 x10; ///< jump x impulse
    f32 x14; ///< jump y impulse fullhop
    f32 x18; ///< jump y impulse shorthop
    f32 x1C; ///< jump x max speed
    f32 x20; ///< gravity
    f32 x24; ///< fall speed
    f32 x28; ///< fast fall speed
    f32 x2C; ///< ledge jump x impulse
    f32 x30; ///< ledge jump y impulse
    f32 x34; ///< wall jump x impulse
    f32 x38; ///< wall jump y impulse
}* Fighter_804D6520; ///< bunnyhood modifiers - used in 0x800d105c
/* 4D6524 */ extern struct Fighter_804D6524_t {
    /// @warning not all comments not confirmed - from altimors ghidra db
    float x0; ///< knockback recieved mult
    float x4; ///< damage dealt mult
    float x8; ///<
    float xC; ///<
    float x10; ///< walk anim scale
    float x14; ///< walk middle speed
    float x18; ///< walk fast speed mult
    float x1C; ///< dash max speed
    float x20; ///<
    float x24; ///< jump squat mult
    float x28; ///< jump y impulse fullhop mult
    float x2C; ///< jump y impulse shorthop mult
    float x30; ///< gravity mult
    float x34; ///< fall speed mult
    float x38; ///< air accel a mult
    float x3C; ///< air accel b mult
    float x40; ///< air speed mult
    float x44; ///< fast fall speed mult
    float x48; ///< weight mult
    float x4C; ///< shield break y vel mult
    float x50; ///<
    float x54; ///<
    float x58; ///<
    float x5C; ///<
    float x60; ///<
    float x64; ///<
    float x68; ///<
    float x6C; ///< empty land lag mult
    float x70; ///< nair land lag mult
    float x74; ///< fair land lag mult
    float x78; ///< bair land lag mult
    float x7C; ///< uair land lag mult
    float x80; ///< dair land lag mult
    float x84; ///<
    float x88; ///<
    float x8C; ///<
    float x90; ///<
    float x94; ///< cmsubject offset mult
    float x98; ///<
}* Fighter_804D6524; ///< fighter scale modifiers - used in 0x800d105c
/* 4D6528 */ extern struct Fighter_ShakeTable_t {
    Vec2* x0;
    int x4;
}* Fighter_SmashChargeShakeTable; ///< smash-charge shake table
/// Grab-mash shake table
/* 4D652C */ extern struct Fighter_ShakeTable_t* Fighter_GrabMashShake;
/* 4D6530 */ extern Vec2** Fighter_804D6530;
/* 4D6534 */ extern M2C_UNK Fighter_804D6534;
/* 4D6538 */ extern struct Fighter_804D653C_t* Fighter_804D6538;
/* 4D653C */ extern struct Fighter_804D653C_t* Fighter_804D653C;
typedef struct Fighter_804D6540_x0_t {
    u8 x0;
    u8 x1;
    u8 x2;
    u8 x3;
} Fighter_804D6540_x0_t;
typedef struct Fighter_804D6540_t {
    Fighter_804D6540_x0_t* x0;
    int x4;
} Fighter_804D6540_t;
extern Fighter_804D6540_t** Fighter_804D6540;
/* 4D6544 */ extern FighterPartsTable** ftPartsTable;
/* 4D6548 */ extern float* Fighter_804D6548;
/* 4D654C */ extern float (*Fighter_804D654C)[5];
/* 4D6550 */ extern int** Fighter_804D6550;
/* 4D6554 */ extern ftCommonData* p_ftCommonData;
#define GALE01_800C703C
/* 703C */ void ftCo_800C703C(Fighter_GObj* gobj);
#define GALE01_800C7070
/* 7070 */ void ftCo_800C7070(Fighter_GObj* gobj);
#define GALE01_800C70D0
/* 70D0 */ void ftCo_800C70D0(Fighter_GObj* gobj);
/* 7158 */ void ftCo_800C7158(Fighter_GObj* gobj);
#define GALE01_800C7178
/* 7178 */ void ftCo_800C7178(Fighter_GObj* gobj);
/* 7200 */ void ftCo_800C7200(Fighter_GObj* gobj);
#define GALE01_800C7220
/* 7220 */ void ftCo_800C7220(Fighter_GObj* gobj);
/* 7294 */ void ftCo_800C7294(Fighter_GObj* gobj);
/* 7308 */ void ftCo_800C7308(Fighter_GObj* gobj);
/* 737C */ void ftCo_800C737C(Fighter_GObj* gobj);
#define GALE01_800C739C
/* 739C */ void ftCo_800C739C(Fighter_GObj* gobj);
/* 7414 */ void ftCo_800C7414(Fighter_GObj* gobj);
#define GALE01_800C7434
/* 0C7434 */ void ftCo_800C7434(Fighter_GObj* gobj);
/* 0C74AC */ void ftCo_800C74AC(Fighter_GObj* gobj);
/* 0C74CC */ void fn_800C74CC(Fighter_GObj* gobj);
/* 0C74F4 */ bool ftCo_800C74F4(Fighter_GObj* gobj);
/* 0C7568 */ void fn_800C7568(Fighter_GObj* gobj);
#define GALE01_800C7590
/* 7590 */ void ftCo_800C7590(Fighter_GObj* gobj);
/* 7734 */ void ftCo_CaptureLeadead_Anim(Fighter_GObj* gobj);
/* 77B0 */ void ftCo_CaptureLeadead_IASA(Fighter_GObj* gobj);
/* 77B4 */ void ftCo_CaptureLeadead_Phys(Fighter_GObj* gobj);
/* 77BC */ void ftCo_CaptureLeadead_Coll(Fighter_GObj* gobj);
/* 7800 */ void ftCo_800C7800(Fighter_GObj* gobj);
/* 7890 */ void fn_800C7890(Fighter_GObj* gobj);
#define GALE01_800C78B0
/* 78B0 */ void ftCo_800C78B0(HSD_GObj* gobj, HSD_GObj* owner);
/* 7A30 */ void ftCo_800C7A30(Fighter_GObj* gobj);
/* 7A58 */ void ftCo_CaptureLikelike_Anim(Fighter_GObj* gobj);
/* 7AD4 */ void ftCo_CaptureLikelike_IASA(Fighter_GObj* gobj);
/* 7AD8 */ void ftCo_CaptureLikelike_Phys(Fighter_GObj* gobj);
/* 7ADC */ void ftCo_CaptureLikelike_Coll(Fighter_GObj* gobj);
/* 7AE0 */ void fn_800C7AE0(Fighter_GObj* gobj);
/* 7B0C */ void ftCo_800C7B0C(Fighter_GObj* gobj, Vec3* arg1, Vec3* arg2,
                              lbColl_80008D30_arg1* arg3, f32 arg4);
/* 7C60 */ void ftCo_800C7C60(Fighter_GObj* gobj, int damage_amount);
#define GALE01_800C7CA0
extern HSD_MObj* ft_804D6580;
/* 7CA0 */ bool ftCo_800C7CA0(Fighter_GObj* gobj);
/* 7DC4 */ void fn_800C7DC4(HSD_GObj* gobj, s32 motion_state, Vec3* normal,
                            Vec3* offset);
/* 7FC8 */ void ftCo_DownReflect_Anim(Fighter_GObj* gobj);
/* 8004 */ void ftCo_DownReflect_IASA(Fighter_GObj* gobj);
/* 8008 */ void ftCo_DownReflect_Phys(Fighter_GObj* gobj);
/* 8028 */ void ftCo_DownReflect_Coll(Fighter_GObj* gobj);
/* 8064 */ void ftCo_800C8064(void);
/* 80A4 */ void ft_800C80A4(Fighter* fp);
#define GALE01_07C114
/* 07C114 */ void ft_8007C114(Fighter_GObj* gobj);
/* 07C17C */ void ft_8007C17C(Fighter_GObj* gobj);
/* 07C224 */ void ft_8007C224(Fighter_GObj* gobj);
/* 07C2E0 */ void ft_8007C2E0(Fighter* fp0, HitCapsule* hit0, Fighter* fp1,
                              HitCapsule* hit1);
/* 07C4BC */ void ft_8007C4BC(Fighter_GObj* gobj);
#define GALE01_07C630
/* 07C630 */ void ft_8007C630(Fighter_GObj* gobj);
/* 07C6DC */ void ft_8007C6DC(Fighter_GObj* gobj);
/* 07C77C */ void ft_8007C77C(Fighter_GObj* gobj);
#define GALE01_081938
/* 081938 */ void ft_80081938(HSD_GObj* gobj);
/* 0819A8 */ void ft_800819A8(HSD_GObj* gobj);
/* 081A00 */ bool ft_80081A00(Fighter_GObj* gobj);
#define GALE01_081B38
// TODO transitive include hack, should be included directly by dependers
/* 081B38 */ void ft_80081B38(Fighter_GObj* gobj);
/* 081C88 */ void ft_80081C88(Fighter_GObj* dst_gobj, float scl_y);
/* 081D0C */ GroundOrAir ft_80081D0C(Fighter_GObj* gobj);
/* 081DD4 */ bool ft_80081DD4(Fighter_GObj* gobj);
/* 081F2C */ bool ft_80081F2C(Fighter_GObj* gobj);
/* 082084 */ bool ft_80082084(Fighter_GObj* gobj);
/* 0821DC */ bool ft_800821DC(Fighter_GObj* gobj);
/// @todo Name does not follow our conventions.
/* 0822A4 */ bool ft_CheckGroundAndLedge(Fighter_GObj* gobj, int direction);
/* 08239C */ bool ft_8008239C(Fighter_GObj* gobj, int facing_direction,
                              ftCollisionBox* height_attributes);
/* 0824A0 */ bool ft_800824A0(Fighter_GObj*, ftCollisionBox*);
/* 082578 */ bool ft_80082578(Fighter_GObj*);
/* 082638 */ bool ft_80082638(Fighter_GObj* gobj, ftCollisionBox*);
/* 082708 */ GroundOrAir ft_80082708(Fighter_GObj* gobj);
/* 0827A0 */ bool ft_800827A0(Fighter_GObj* gobj);
/* 082838 */ ftCollisionBox* ft_80082838(ftCollisionBox*, ftCollisionBox*,
                                         float);
/* 082888 */ bool ft_80082888(Fighter_GObj*, ftCollisionBox*);
/* 082978 */ bool ft_80082978(Fighter_GObj*, ftCollisionBox*);
/* 082A68 */ bool ft_80082A68(Fighter_GObj* gobj);
/* 082B1C */ void ft_80082B1C(Fighter_GObj* gobj);
/* 082B78 */ void ftCo_AirCatchHit_Coll(Fighter_GObj*);
/* 082C74 */ void ft_80082C74(Fighter_GObj* gobj, HSD_GObjEvent);
/* 082D40 */ void ft_80082D40(Fighter_GObj* gobj, float);
/* 082E3C */ Fighter_GObj* ft_80082E3C(Fighter_GObj* gobj);
/* 082F28 */ void ft_80082F28(Fighter_GObj* gobj);
/* 083090 */ void ft_80083090(Fighter_GObj* gobj, bool (*)(Fighter_GObj*, int),
                              HSD_GObjEvent);
/* 0831CC */ void ft_800831CC(Fighter_GObj*, bool (*)(Fighter_GObj*, int),
                              HSD_GObjEvent);
/* 083318 */ void ft_80083318(Fighter_GObj* gobj,
                              bool (*)(Fighter_GObj* gobj, int),
                              HSD_GObjEvent);
/* 083464 */ void ft_80083464(Fighter_GObj* gobj,
                              bool (*)(Fighter_GObj* gobj, int),
                              HSD_GObjEvent);
/* 0835B0 */ void ft_800835B0(Fighter_GObj* gobj,
                              bool (*)(Fighter_GObj* gobj, int),
                              HSD_GObjEvent);
/* 08370C */ void ft_8008370C(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083844 */ void ft_80083844(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083910 */ void ft_80083910(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083A48 */ void ft_80083A48(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083B68 */ void ft_80083B68(Fighter_GObj* gobj);
/* 083C00 */ void ft_80083C00(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083CE4 */ void ft_80083CE4(Fighter_GObj* gobj, bool (*)(Fighter_GObj*, int),
                              HSD_GObjEvent cb2);
/* 083DCC */ void ft_80083DCC(Fighter_GObj* gobj);
/* 083E64 */ void ft_80083E64(Fighter_GObj* gobj, ftCollisionBox* ecb,
                              HSD_GObjEvent cb);
/* 083F88 */ void ft_80083F88(Fighter_GObj* gobj);
/* 08403C */ void ft_8008403C(Fighter_GObj*, HSD_GObjEvent);
/// CollisionCheck_StopLedge
/* 084104 */ void ft_80084104(Fighter_GObj* gobj);
/* 0841B8 */ void ft_800841B8(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 084280 */ void ft_80084280(Fighter_GObj*);
/* 0843FC */ void ft_800843FC(Fighter_GObj* gobj);
/* 0844EC */ void ft_800844EC(Fighter_GObj* gobj);
/* 0845B4 */ void ft_800845B4(Fighter_GObj* gobj);
/* 0846B0 */ void ft_800846B0(Fighter_GObj* gobj, ftCollisionBox* box,
                              HSD_GObjEvent cb);
/* 0847D0 */ void ft_800847D0(Fighter_GObj* gobj, ftCollisionBox*);
/* 0848DC */ void ft_800848DC(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 0849EC */ void ft_800849EC(Fighter*, Fighter*);
/* 084A18 */ bool ft_80084A18(Fighter_GObj*);
/* 084A40 */ float ft_GetGroundFrictionMultiplier(Fighter* fp);
/* 084A80 */ bool ft_80084A80(int arg0, Fighter_GObj* gobj, int*, int*, int*);
/* 084BFC */ bool ft_80084BFC(Fighter_GObj* gobj, int*, int*, int*);
/* 084C38 */ bool ft_80084C38(Fighter_GObj*, int*, int*, int*);
/* 084C74 */ bool ft_80084C74(Fighter_GObj*, int*, int*, int*);
/* 084CB0 */ void ft_80084CB0(Fighter*, ftCollisionBox*);
/* 084CE4 */ bool ft_80084CE4(Fighter* attacker, Fighter* victim);
/* 084DB0 */ void ft_80084DB0(Fighter_GObj*);
#define MELEE_FT_084E_H
/* 084E1C */ void ft_80084E1C(Fighter_GObj* gobj, float, float, float);
/* 084EEC */ void ft_80084EEC(Fighter_GObj* gobj);
/// Fighter_PhysGround_ApplyFriction
/* 084F3C */ void ft_80084F3C(Fighter_GObj* gobj);
/* 084FA8 */ void ft_80084FA8(Fighter_GObj* gobj);
/* 085004 */ void ft_80085004(Fighter_GObj* gobj);
/* 085030 */ void ft_80085030(Fighter_GObj*, float gr_friction,
                              float facing_dir);
/* 085088 */ void ft_80085088(Fighter_GObj*);
/* 0850B4 */ void ft_800850B4(Fighter_GObj*);
/* 0850E0 */ void ft_800850E0(Fighter_GObj*, float, float);
/* 085134 */ void ft_80085134(Fighter_GObj* gobj);
/* 085154 */ void ft_80085154(Fighter_GObj* gobj);
/* 0851C0 */ void ft_800851C0(Fighter_GObj*);
/* 0851D0 */ void ft_800851D0(Fighter_GObj*);
/* 085204 */ void ft_80085204(Fighter_GObj* gobj);
#define GALE01_0877F8
/* 0877F8 */ bool ft_800877F8(Fighter_GObj*, s32);
/* 087818 */ bool ft_80087818(Fighter_GObj*, s32);
/* 087838 */ bool ft_80087838(Fighter_GObj* gobj);
/* 087858 */ bool ft_80087858(Fighter_GObj* gobj);
/* 087878 */ bool ft_80087878(Fighter_GObj*, s32);
/* 0878BC */ bool ft_800878BC(Fighter_GObj* gobj);
/* 087900 */ bool ft_80087900(Fighter_GObj* gobj);
/* 087944 */ bool ft_80087944(Fighter_GObj* gobj);
/* 087988 */ bool ft_80087988(Fighter_GObj* gobj);
/* 0879D8 */ bool ft_800879D8(Fighter_GObj* gobj);
/* 0879F8 */ bool ft_800879F8(Fighter_GObj* gobj);
/* 087A18 */ bool ft_80087A18(Fighter_GObj* gobj);
/* 087A80 */ int ft_80087A80(Fighter_GObj* gobj);
/* 087A8C */ float ft_80087A8C(Fighter_GObj* gobj);
/* 087A98 */ s32 ft_80087A98(Fighter_GObj* gobj);
/* 087AA4 */ bool ft_80087AA4(Fighter_GObj* gobj);
/* 087AB4 */ u8 ft_80087AB4(Fighter_GObj* gobj);
/* 087AC0 */ void ft_80087AC0(Fighter_GObj*, s32);
/* 087AEC */ bool ft_80087AEC(Fighter_GObj* gobj);
/* 087B34 */ s32 ft_80087B34(Fighter_GObj* gobj);
/* 087BAC */ void ft_80087BAC(Fighter_GObj*, s32);
/* 087BC0 */ void ft_80087BC0(Fighter_GObj*, int);
/* 087BEC */ void ft_80087BEC(Fighter_GObj*, int);
/* 087C1C */ s32 ft_GetFtKindMask(void);
/* 087C58 */ s32 ft_80087C58(Fighter_GObj* gobj);
/* 087C64 */ void ft_80087C64(Fighter_GObj*, s32);
/* 087C70 */ s32 ft_80087C70(Fighter*, s32);
/* 087D0C */ s32 ft_80087D0C(Fighter*, s32);
/* 08805C */ void ft_8008805C(Fighter*, s32);
/* 088080 */ void ft_80088080(Fighter*);
/* 0880AC */ void ft_800880AC(Fighter*);
/* 0880D8 */ void ft_800880D8(Fighter*);
/* 088110 */ void ft_80088110(Fighter*);
/// SFX_PlayCharacterSFX
/* 088148 */ void ft_PlaySFX(Fighter*, enum_t, u8, u8);
/* 3C57D0 */ extern char ftMr_Init_DatFilename[];
/* 3C57DC */ extern char ftMr_Init_DataName[];
/* 3C595C */ extern char ftMr_Init_AnimDatFilename[];
/* 3C5A28 */ extern Fighter_CostumeStrings ftMr_Init_CostumeStrings[];
#define GALE01_0881D8
/* 0881D8 */ void ft_800881D8(Fighter* fp, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 088328 */ void ft_80088328(Fighter* fp, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 088478 */ void ft_80088478(Fighter*, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 088510 */ void ft_80088510(Fighter*, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 0885A8 */ void ft_800885A8(Fighter* fp, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 088640 */ void ft_80088640(Fighter*, int sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 0886D8 */ void ftCo_800886D8(Fighter* fp, int sfx_id, u8 sfx_vol,
                                u8 sfx_pan);
/* 088770 */ void ft_80088770(Fighter* fp);
/* 0887CC */ void ft_800887CC(Fighter* fp);
/* 088828 */ void ft_80088828(Fighter* fp);
/* 088884 */ void ft_80088884(Fighter* fp);
/* 0888E0 */ void ft_800888E0(Fighter* fp);
/* 08893C */ void ft_8008893C(Fighter* fp);
/* 088998 */ void ft_80088998(Fighter*);
/* 0889F4 */ void ft_800889F4(Fighter* fp, FtSFXArr* sfx);
/* 088A50 */ void ft_80088A50(Fighter* fp);
/* 088C5C */ void ft_80088C5C(Fighter_GObj* gobj);
/* 0890BC */ void ft_800890BC(Fighter* fp);
/* 0890D0 */ void ft_800890D0(Fighter* fp, u32 move_id);
/* 089228 */ float ft_80089228(Fighter*, int, int, f32);
/* 0892A0 */ void ft_800892A0(Fighter_GObj* gobj);
#define GALE01_0892D4
/* 0892D4 */ void ft_800892D4(Fighter*);
/* 089460 */ void ft_80089460(Fighter*);
/* 0895E0 */ void ft_800895E0(Fighter*, int);
/* 089768 */ void ft_80089768(S32Vec2*);
/* 089824 */ void ft_80089824(Fighter_GObj* gobj);
/* 089884 */ union Struct2070* ft_80089884(Fighter_GObj* gobj);
/* 089890 */ union Struct2070* ft_80089890(Fighter_GObj* gobj);
/* 08989C */ u16 ft_8008989C(Fighter_GObj* gobj);
/* 0898A8 */ struct Struct2074* ft_800898A8(Fighter_GObj* gobj);
/* 0898B4 */ ft_800898B4_t* ft_800898B4(Fighter_GObj* gobj);
/* 0898C0 */ bool ft_800898C0(HSD_GObj*);
/* 089914 */ s32 ft_80089914(HSD_GObj* gobj, int msid);
/* 08A1FC */ bool ft_8008A1FC(Fighter_GObj* gobj);
/* 08A244 */ bool ft_8008A244(Fighter_GObj* gobj);
/* 08A2BC */ void ft_8008A2BC(Fighter_GObj* gobj);
/* 08A324 */ void ft_8008A324(Fighter_GObj* gobj);
/* 08A348 */ void ft_8008A348(Fighter_GObj* gobj, float);
#define GALE01_08A1B8
/* 089B08 */ void ft_80089B08(Fighter_GObj* gobj);
/* 08A1B8 */ void ft_8008A1B8(Fighter_GObj* gobj, u32 flags);
#define GALE01_0BECB0
/* 0BECB0 */ void ftCo_800BECB0(Fighter_GObj* gobj);
/* 0BED84 */ void ftCo_800BED84(Fighter_GObj* gobj);
/* 0BED88 */ void ftCo_800BED88(Fighter_GObj* gobj);
/* 0BEF00 */ void ftCo_800BEF00(Fighter_GObj* gobj);
/* 0BEF04 */ void ftCo_800BEF04(Fighter_GObj* gobj);
/* 0BEFD0 */ void ftCo_800BEFD0(Fighter_GObj* gobj);
#define GALE01_0BEFD4
/* 0BEFD4 */ void ftCo_800BEFD4(Fighter_GObj* gobj);
#define GALE01_0BF034
/* 0BF034 */ void ftCo_800BF034(Fighter_GObj* gobj);
/* 0BF108 */ void ftCo_800BF108(Fighter_GObj* gobj);
/* 0BF228 */ bool ftCo_800BF228(Fighter_GObj* gobj);
#define GALE01_0C31
/* 0C61B0 */ void ftCo_800C61B0(Fighter_GObj* gobj);
/* 0C6370 */ void ftCo_Entry_Anim(Fighter_GObj* gobj);
/* 0C63B4 */ void ftCo_Entry_IASA(Fighter_GObj* gobj);
/* 0C63B8 */ void ftCo_Entry_Phys(Fighter_GObj* gobj);
/* 0C6404 */ void ftCo_Entry_Coll(Fighter_GObj* gobj);
/* 0C6408 */ void ftCo_800C6408(Fighter_GObj* gobj);
/* 0C6700 */ void ftCo_EntryStart_Anim(Fighter_GObj* gobj);
/* 0C673C */ void ftCo_EntryStart_IASA(Fighter_GObj* gobj);
/* 0C6740 */ void ftCo_EntryStart_Phys(Fighter_GObj* gobj);
/* 0C6950 */ void ftCo_EntryStart_Coll(Fighter_GObj* gobj);
/* 0C69F4 */ void fn_800C69F4(Fighter_GObj* gobj);
/* 0C6B6C */ void ftCo_800C6B6C(Fighter_GObj* gobj);
/* 0C6CC8 */ void ftCo_EntryEnd_Anim(Fighter_GObj* gobj);
/* 0C6D34 */ void ftCo_EntryEnd_IASA(Fighter_GObj* gobj);
/* 0C6D38 */ void ftCo_EntryEnd_Phys(Fighter_GObj* gobj);
/* 0C6E90 */ void ftCo_EntryEnd_Coll(Fighter_GObj* gobj);
/* 0C6F34 */ void fn_800C6F34(Fighter_GObj* gobj);
#define GALE01_0C884C
/* 0C884C */ void ftCo_800C884C(Fighter_GObj* gobj);
/* 0C88A0 */ void ftCo_800C88A0(Fighter*);
/* 0C88D4 */ void ftCo_800C88D4(Fighter_GObj* gobj, int, bool);
/* 0C89A0 */ void ftCo_800C89A0(Fighter_GObj* gobj);
/* 0C8A64 */ void ftCo_800C8A64(Fighter_GObj* gobj);
/* 0C8AF0 */ void ftCo_800C8AF0(Fighter*);
/* 0C8B1C */ void fn_800C8B1C(Fighter_GObj* gobj);
/* 0C8B2C */ bool ftCo_800C8B2C(Fighter*, int, bool);
/* 0C8B60 */ void ftCo_800C8B60(Fighter* fp, u8, u8);
#define GALE01_0C8C84
#define SFX_VOLUME_MAX 127
#define SFX_PAN_MID 64
/* 0C8C84 */ bool ftCo_800C8C84(Fighter_GObj* gobj);
/* 0C8D00 */ void ftCo_800C8D00(Fighter_GObj* gobj);
/* 0C8E40 */ void fn_800C8E40(Fighter* fp, FtSFX* sfx);
/* 0C8E74 */ void fn_800C8E74(Fighter_GObj* gobj);
/* 0C8F6C */ void ftCo_800C8F6C(void);
/* 0C8FC4 */ void ftCo_800C8FC4(Fighter_GObj* gobj);
/* 0C9034 */ void ftCo_800C9034(Fighter_GObj* gobj);
/* 4D6588 */ extern HSD_MObj* ft_804D6588;
#define GALE01_0CD140
/* 0CD140 */ void ftCo_800CD140(Fighter_GObj*, int, int, int, float);
/* 0CD1BC */ void ftCo_800CD1BC(Fighter_GObj*);
/* 0CD204 */ void ftCo_800CD204(Fighter_GObj*);
/* 0CD278 */ void ftCo_800CD278(Fighter_GObj*);
/* 0CD2C4 */ void ftCo_800CD2C4(Fighter_GObj*, void (*)(Fighter_GObj*));
/* 0CD31C */ void ft_800CD31C(Fighter_GObj*);
/* 0CD350 */ void ftCo_800CD350(Fighter_GObj*, int, int, float);
/* 0CD390 */ void ftCo_SwordSwing_Anim(Fighter_GObj* gobj);
/* 0CD3B0 */ void ftCo_SwordSwing_IASA(Fighter_GObj* gobj);
/* 0CD3D0 */ void ftCo_SwordSwing_Phys(Fighter_GObj* gobj);
/* 0CD3F0 */ void ftCo_SwordSwing_Coll(Fighter_GObj* gobj);
/* 0CD418 */ void ftCo_800CD418(Fighter_GObj*, int, int, float);
/* 0CD458 */ void ftCo_BatSwing_Anim(Fighter_GObj* gobj);
/* 0CD478 */ void ftCo_BatSwing_IASA(Fighter_GObj* gobj);
/* 0CD498 */ void ftCo_BatSwing_Phys(Fighter_GObj* gobj);
/* 0CD4B8 */ void ftCo_BatSwing_Coll(Fighter_GObj* gobj);
/* 0CD4E0 */ void ftCo_800CD4E0(Fighter_GObj*, int, int, float);
/* 0CD520 */ void ftCo_ParasolSwing_Anim(Fighter_GObj* gobj);
/* 0CD540 */ void ftCo_ParasolSwing_IASA(Fighter_GObj* gobj);
/* 0CD560 */ void ftCo_ParasolSwing_Phys(Fighter_GObj* gobj);
/* 0CD580 */ void ftCo_ParasolSwing_Coll(Fighter_GObj* gobj);
/* 0CD5A8 */ void ftCo_800CD5A8(Fighter_GObj*, int, int, float);
/* 0CD604 */ void ft_800CD604(Fighter_GObj*);
/* 0CD65C */ void ft_800CD65C(Fighter_GObj* gobj);
/* 0CD6A0 */ void ftCo_HarisenSwing_Anim(Fighter_GObj* gobj);
/* 0CD7C4 */ void ftCo_HarisenSwing_IASA(Fighter_GObj* gobj);
/* 0CD7E4 */ void ftCo_HarisenSwing_Phys(Fighter_GObj* gobj);
/* 0CD804 */ void ftCo_HarisenSwing_Coll(Fighter_GObj* gobj);
#define GALE01_0CDD14
/* 0CDD14 */ void ftCo_Attack_800CDD14(Fighter_GObj* gobj);
/* 0CDDA0 */ void ftCo_800CDDA0(Fighter_GObj*);
/* 0CDE18 */ void ftCo_800CDE18(Fighter_GObj*);
/* 0CDE54 */ void ftCo_800CDE54(Fighter_GObj*);
/* 0CDE74 */ void ftCo_800CDE74(Fighter_GObj*);
/* 0CDE94 */ void ftCo_800CDE94(Fighter* fighter, Vec3* arg1, Vec3* arg2);
/* 0CDF5C */ void ftCo_800CDF5C(Fighter_GObj*);
/* 0CE010 */ void ftCo_800CE010(Fighter_GObj*);
/* 0CE308 */ void ftCo_LGunShoot_Anim(Fighter_GObj* gobj);
/* 0CE328 */ void ftCo_LGunShootAir_Anim(Fighter_GObj* gobj);
/* 0CE348 */ void ftCo_LGunShoot_IASA(Fighter_GObj* gobj);
/* 0CE34C */ void ftCo_LGunShootAir_IASA(Fighter_GObj* gobj);
/* 0CE350 */ void ftCo_LGunShoot_Phys(Fighter_GObj* gobj);
/* 0CE370 */ void ftCo_LGunShootAir_Phys(Fighter_GObj* gobj);
/* 0CE390 */ void ftCo_LGunShoot_Coll(Fighter_GObj* gobj);
/* 0CE3B8 */ void ftCo_LGunShootAir_Coll(Fighter_GObj* gobj);
/* 0CE3E0 */ void ftCo_800CE3E0(Fighter_GObj*);
/* 0CE480 */ void ftCo_800CE480(Fighter_GObj*);
/* 0CE528 */ void ft_800CE528(Fighter_GObj*);
/* 0CE5A0 */ void ft_800CE5A0(Fighter_GObj*);
/* 0CE650 */ void ftCo_800CE650(Fighter_GObj* gobj);
/* 0CEAF0 */ void ftCo_FireFlowerShoot_Anim(Fighter_GObj* gobj);
/* 0CEBA0 */ void ftCo_FireFlowerShootAir_Anim(Fighter_GObj* gobj);
/* 0CEC50 */ void ftCo_FireFlowerShoot_IASA(Fighter_GObj* gobj);
/* 0CEC54 */ void ftCo_FireFlowerShootAir_IASA(Fighter_GObj* gobj);
/* 0CEC58 */ void ftCo_FireFlowerShoot_Phys(Fighter_GObj* gobj);
/* 0CEC78 */ void ftCo_FireFlowerShootAir_Phys(Fighter_GObj* gobj);
/* 0CEC98 */ void ftCo_FireFlowerShoot_Coll(Fighter_GObj* gobj);
/* 0CECC0 */ void ftCo_FireFlowerShootAir_Coll(Fighter_GObj* gobj);
#define GALE01_0D2770
/* 0D2770 */ void ftCo_800D2770(Fighter_GObj*, f32);
/* 0D27C4 */ bool ftCo_800D27C4(Fighter*);
/* 0D2818 */ bool fn_800D2818(Fighter*);
/* 0D2890 */ void fn_800D2890(Fighter_GObj*, int);
/* 0D290C */ void fn_800D290C(Fighter_GObj*);
/* 0D299C */ void fn_800D299C(Fighter_GObj*, int, f32, f32);
/* 0D2A3C */ bool fn_800D2A3C(Fighter_GObj*);
/* 0D2AD8 */ void fn_800D2AD8(Fighter*);
/* 0D2B04 */ void fn_800D2B04(Fighter*);
/* 0D2B30 */ void fn_800D2B30(Fighter_GObj*);
/* 0D2BF8 */ void fn_800D2BF8(Fighter_GObj*);
/* 0D2CA0 */ void fn_800D2CA0(Fighter*);
/* 0D2CD4 */ void fn_800D2CD4(Fighter*);
/* 0D2D0C */ bool ft_800D2D0C(Fighter_GObj*);
#define GALE01_0D3158
/* 0D3158 */ bool ftCo_800D3158(Fighter_GObj* gobj);
/* 0D331C */ void ftCo_800D331C(Fighter_GObj*);
/* 0D34E0 */ void ftCo_800D34E0(Fighter_GObj*);
/* 0D35FC */ void ftCo_800D35FC(Fighter*);
/* 0D3680 */ void ftCo_800D3680(Fighter_GObj*);
/* 0D38B8 */ void ftCo_800D38B8(Fighter* fp, int arg1);
/* 0D3910 */ void ftCo_DeadLeft_Anim(Fighter_GObj* gobj);
/* 0D394C */ void ftCo_DeadLeft_Cam(Fighter_GObj* gobj);
/* 0D3950 */ void ftCo_800D3950(Fighter_GObj*);
/* 0D3B88 */ void ftCo_DeadRight_Anim(Fighter_GObj* gobj);
/* 0D3BC4 */ void ftCo_DeadRight_Cam(Fighter_GObj* gobj);
/* 0D3BC8 */ void ftCo_800D3BC8(Fighter_GObj*);
/* 0D3E00 */ void ftCo_DeadDown_Anim(Fighter_GObj* gobj);
/* 0D3E3C */ void ftCo_DeadDown_Cam(Fighter_GObj* gobj);
/* 0D3E40 */ void ftCo_800D3E40(Fighter_GObj*);
/* 0D4078 */ void ftCo_DeadUp_Anim(Fighter_GObj* gobj);
/* 0D40B4 */ void ftCo_DeadUp_Cam(Fighter_GObj* gobj);
/* 0D40B8 */ void ftCo_800D40B8(Fighter_GObj*);
/* 0D41C4 */ void ftCo_800D41C4(Fighter_GObj*);
/* 0D42E4 */ void ftCo_DeadUpStar_Anim(Fighter_GObj* gobj);
/* 0D4560 */ void ftCo_DeadUpStar_Cam(Fighter_GObj* gobj);
/* 0D4580 */ void ftCo_800D4580(Fighter_GObj*, int);
/* 0D4780 */ void ftCo_800D4780(Fighter_GObj*);
/* 0D47B8 */ void ftCo_800D47B8(Fighter_GObj*);
/* 0D481C */ void ftCo_800D481C(Fighter_GObj*, s32);
/* 0D4A08 */ void ftCo_DeadUpFall_Anim(Fighter_GObj* gobj);
/* 0D4CE8 */ void ftCo_DeadUpFall_Phys(Fighter_GObj* gobj);
#define GALE01_0D4DD4
/* 0D4DD4 */ void fn_800D4DD4(Fighter_GObj* gobj);
/* 0D4E30 */ void ftCo_DeadUpFall_Cam(Fighter_GObj* gobj);
/* 0D4E50 */ void ftCo_800D4E50(Fighter*, Vec3*, int, float);
/* 0D4F24 */ void ftCo_800D4F24(Fighter_GObj* gobj, int index);
/* 0D4FF4 */ void ftCo_800D4FF4(Fighter_GObj* gobj);
/* 0D52F8 */ void ftCo_Rebirth_Anim(Fighter_GObj* gobj);
/* 0D5358 */ void ftCo_Rebirth_IASA(Fighter_GObj* gobj);
/* 0D535C */ void ftCo_Rebirth_Phys(Fighter_GObj* gobj);
/* 0D5470 */ void ftCo_Rebirth_Coll(Fighter_GObj* gobj);
/* 0D54A4 */ void fn_800D54A4(Fighter_GObj* gobj);
/* 0D55B4 */ void fn_800D55B4(Fighter_GObj* gobj);
/* 0D5600 */ void ftCo_800D5600(Fighter_GObj* gobj);
/* 0D56EC */ void ftCo_RebirthWait_Anim(Fighter_GObj* gobj);
/* 0D575C */ void ftCo_RebirthWait_IASA(Fighter_GObj* gobj);
/* 0D58F4 */ void ftCo_RebirthWait_Phys(Fighter_GObj* gobj);
/* 0D5A08 */ void ftCo_RebirthWait_Coll(Fighter_GObj* gobj);
/* 0D5A30 */ void fn_800D5A30(Fighter_GObj* gobj);
/* 0D5A6C */ void ftCo_Rebirth_Cam(Fighter_GObj* gobj);
#define GALE01_0DF0D0
/* 0DEE84 */ void ftCo_800DEE84(Fighter_GObj* gobj, u32, f32, f32);
/* 0DEEA8 */ void ftCo_800DEEA8(Fighter_GObj* gobj);
/* 0DEEB8 */ float ftCo_800DEEB8(Fighter* fp, f32);
/* 0DEEE8 */ Vec2* ftCo_800DEEE8(Fighter* fp, Vec2* shift);
/* 0DEF38 */ void ftCo_800DEF38(Fighter_GObj* gobj);
/* 0DF0D0 */ void ftCo_800DF0D0(Fighter_GObj* gobj);
#define GALE01_0DF1C8
/* 0DF1C8 */ bool ftCo_800DF1C8(Fighter* fp);
/* 0DF21C */ bool ftCo_800DF21C(Fighter* fp);
/* 0DF2D8 */ bool ftCo_800DF2D8(Fighter* fp);
/* 0DF30C */ bool ftCo_800DF30C(Fighter* fp);
/* 0DF3A8 */ bool ftCo_800DF3A8(Fighter* fp);
/* 0DF3DC */ bool ftCo_800DF3DC(Fighter* fp);
/* 0DF478 */ bool ftCo_800DF478(Fighter* fp);
/* 0DF50C */ bool ftCo_800DF50C(Fighter* fp);
/* 0DF608 */ bool ftCo_800DF608(Fighter* fp);
/* 0DF644 */ bool ftCo_800DF644(Fighter* fp);
/* 0DF678 */ bool ftCo_800DF678(Fighter* fp);
/* 0DF6F8 */ bool ftCo_800DF6F8(Fighter* fp);
/* 0DF72C */ bool ftCo_800DF72C(Fighter* fp);
/* 0DF79C */ bool ftCo_800DF79C(Fighter* fp);
/* 0DF7F4 */ bool ftCo_800DF7F4(Fighter* fp);
/* 0DF844 */ bool ftCo_800DF844(Fighter* fp);
/* 0DF878 */ bool ftCo_800DF878(Fighter* fp);
/* 0DF8B0 */ bool ftCo_800DF8B0(Fighter* fp);
/* 0DF8E8 */ bool ftCo_800DF8E8(Fighter* fp);
/* 0DF910 */ bool ftCo_800DF910(Fighter* fp);
#define MELEE_FT_FT_3C61_H
/* 3C6594 */ extern ftCo_803C6594_t* ftCo_803C6594[Gr_Kind_Count];
#define GALE01_071028
/* 071028 */ void ftAction_80071028(Fighter_GObj* gobj, CommandInfo* cmd);
/* 0711DC */ void ftAction_800711DC(Fighter_GObj* gobj, CommandInfo* cmd);
/* 071B50 */ void ftAction_80071B50(Fighter_GObj* gobj, CommandInfo* cmd);
/* 071CA4 */ void ftAction_80071CA4(Fighter_GObj* gobj, CommandInfo* cmd);
/* 0730B8 */ void ftAction_800730B8(Fighter_GObj* gobj, CommandInfo* cmd);
/* 073108 */ void ftAction_80073108(Fighter_GObj* gobj, CommandInfo* cmd);
/* 073240 */ void ftAction_80073240(Fighter_GObj* gobj);
/* 073354 */ void ftAction_80073354(Fighter_GObj* gobj);
/* 07349C */ void ftAction_8007349C(Fighter_GObj* gobj);
#define GALE01_0C2600
/* 0C2600 */ void ftCo_800C2600(Fighter_GObj* gobj, u32 arg1);
/* 0C2FD8 */ void ftCo_800C2FD8(Fighter_GObj* gobj);
#define GALE01_0CECE8
/* 0CECE8 */ bool ftCo_800CECE8(Fighter_GObj* gobj);
/* 0CED30 */ void ftCo_800CED30(Fighter_GObj* gobj);
/* 0CEDE0 */ void ftCo_AttackS42_Anim(Fighter_GObj* gobj);
/* 0CEE00 */ void ftCo_AttackS42_IASA(Fighter_GObj* gobj);
/* 0CEE30 */ void ftCo_AttackS42_Phys(Fighter_GObj* gobj);
/* 0CEE50 */ void ftCo_AttackS42_Coll(Fighter_GObj* gobj);
#define GALE01_15BD20
/* 15BD20 */ void ftBossLib_8015BD20(HSD_GObj*);
/* 15BD24 */ void ftBossLib_8015BD24(s32, float*, float, s32, s32, s32);
/* 15BDB4 */ void ftBossLib_ReportGObjSlotType(HSD_GObj*);
/* 15BE40 */ void ftBossLib_8015BE40(HSD_GObj* gobj, Vec3*, float*, float,
                                     float);
/* 15BF74 */ void ftBossLib_8015BF74(HSD_GObj* gobj, float x_diff_max);
/* 15C010 */ void ftBossLib_8015C010(HSD_GObj*, float);
/* 15C09C */ void ftBossLib_8015C09C(HSD_GObj* gobj, float facing_dir);
/* 15C190 */ void ftBossLib_8015C190(HSD_GObj*);
/* 15C208 */ void ftBossLib_8015C208(HSD_GObj*, Vec3*);
/* 15C244 */ HSD_GObj* ftBossLib_8015C244(HSD_GObj*, Vec3*);
/* 15C270 */ bool ftBossLib_IsMasterHandEntry(void);
/* 15C2A8 */ bool ftBossLib_8015C2A8(void);
/* 15C2E0 */ bool ftBossLib_8015C2E0(void);
/* 15C31C */ bool ftBossLib_8015C31C(void);
/* 15C358 */ bool ftBossLib_8015C358(void);
/* 15C3A0 */ bool ftBossLib_8015C3A0(void);
/* 15C3E8 */ HSD_GObj* ftBossLib_GetFighterGObj(FighterKind arg0);
/**
 * Fighter_GetState(FighterKind)
 * @returns A fighter action state ID.
 */
/* 15C44C */ enum_t ftBossLib_GetMotionId(FighterKind kind);
/* 15C4C4 */ enum_t ftBossLib_8015C4C4(void);
/* 15C530 */ s32 ftBossLib_8015C530(int cpu_level);
/* 15C5F8 */ void ftBossLib_8015C5F8(HSD_GObj*);
/* 15C6BC */ ftMasterHand_SpecialAttrs* ftBossLib_8015C6BC(void);
/* 15C74C */ s32 ftBossLib_8015C74C(void);
/* 15C7EC */ s32 ftBossLib_8015C7EC(void);
/* 15C88C */ s32 ftBossLib_8015C88C(void);
/* 15C92C */ s32 ftBossLib_8015C92C(void);
/* 15C9CC */ s32 ftBossLib_8015C9CC(void);
/* 15CA6C */ void ftBossLib_8015CA6C(s32 arg0);
/* 15CB7C */ void ftBossLib_8015CB7C(void);
/* 15CB9C */ void ftBossLib_8015CB9C(s32 arg0);
/* 15CC14 */ void ftBossLib_8015CC14(void);
#define GALE01_076018
/* 076018 */ void ftCamera_80076018(UnkFloat6_Camera* in,
                                    UnkFloat6_Camera* out, float mul);
/* 076064 */ void ftCamera_80076064(Fighter*);
/* 0761C8 */ void ftCamera_UpdateCameraBox(HSD_GObj* gobj);
/* 0762F4 */ void ftCamera_800762F4(HSD_GObj* gobj);
/* 076320 */ void ftCamera_80076320(HSD_GObj* gobj);
#define GALE01_0CF138
/* 0CF138 */ float ftCo_CalcYScaledKnockback(float, float, float);
/* 0CF6E8 */ void ftCo_800CF6E8(ftCo_DatAttrs*, f32);
/* 0D0CBC */ void ftCo_800D0CBC(Fighter_GObj* gobj);
/* 0D0EC8 */ float ftCo_800D0EC8(Fighter* fp);
/* 0D0FA0 */ void ftCo_800D0FA0(Fighter_GObj* gobj);
/* 0D105C */ void ftCo_800D105C(Fighter_GObj* gobj);
#define GALE01_081298
/* 081298 */ bool ftCliffCommon_80081298(Fighter_GObj* gobj);
/* 081370 */ void ftCliffCommon_80081370(Fighter_GObj* gobj);
/* 081504 */ void ftCo_CliffCatch_Anim(Fighter_GObj* gobj);
/* 081540 */ void ftCo_CliffCatch_IASA(Fighter_GObj* gobj);
/* 081544 */ void ftCo_CliffCatch_Phys(Fighter_GObj* gobj);
/* 0815E4 */ void ftCo_CliffCatch_Coll(Fighter_GObj* gobj);
/* 081644 */ void ftCo_Cliff_Cam(Fighter_GObj* gobj);
#define MELEE_FT_CMDSCRIPT_H
typedef enum CPUCommand {
    // These commands press or release buttons
    CpuCmd_PressA = 1,
    CpuCmd_ReleaseA,
    CpuCmd_PressB,
    CpuCmd_ReleaseB,
    CpuCmd_PressX,
    CpuCmd_ReleaseX,
    CpuCmd_PressY,
    CpuCmd_ReleaseY,
    CpuCmd_PressR,
    CpuCmd_ReleaseR,
    CpuCmd_PressL,
    CpuCmd_ReleaseL,
    CpuCmd_PressZ,
    CpuCmd_ReleaseZ,
    CpuCmd_PressUp,
    CpuCmd_ReleaseUp,
    CpuCmd_PressDown,
    CpuCmd_ReleaseDown,
    CpuCmd_PressRight,
    CpuCmd_ReleaseRight,
    CpuCmd_PressLeft,
    CpuCmd_ReleaseLeft,
    CpuCmd_PressStart,
    CpuCmd_ReleaseStart,
    CpuCmd_ReleaseAll,
    // Signifies the end of a command sequence
    CpuCmd_Done = 0x7F,
    // These commands set analog stick/trigger values
    CpuCmd_SetLstickX,
    CpuCmd_SetLstickY,
    CpuCmd_SetCstickX,
    CpuCmd_SetCstickY,
    CpuCmd_SetRtrigger,
    CpuCmd_SetLtrigger,
    // These commands press/release a button and wait a specified duration
    CpuCmd_PressAFor,
    CpuCmd_ReleaseAFor,
    CpuCmd_PressBFor,
    CpuCmd_ReleaseBFor,
    CpuCmd_PressXFor,
    CpuCmd_ReleaseXFor,
    CpuCmd_PressYFor,
    CpuCmd_ReleaseYFor,
    CpuCmd_WaitFor,
    CpuCmd_LstickTowardDestination,
    CpuCmd_LstickXTowardDestination,
    CpuCmd_LstickXForward,
    CpuCmd_WaitIfMotionId,
    CpuCmd_Unk0x93, ///< Set scenario ID?
    CpuCmd_LstickTowardFighter,
    CpuCmd_LstickXTowardFighter,
    CpuCmd_OneArgEnd = 0xBF, ///< Previous commands take one argument
    CpuCmd_LstickTowardDestinationClamped,
    CpuCmd_LstickXTowardDestinationClamped,
    CpuCmd_LstickForwardClamped,
    CpuCmd_Count,
} CPUCommand;
/// CPU commands must fit in a u8!
;
typedef CPUCommand cmd_t;
typedef s8 arg_t;
/* 0B3E04 */ void ftCo_800B3E04(Fighter*); ///< Run any pending CPU commands
/* 0B463C */ void ftCo_800B463C(Fighter*, cmd_t cmd);
/* 0B46B8 */ void ftCo_800B46B8(Fighter*, cmd_t cmd, arg_t arg);
/* 0B462C */ void ftCo_800B462C(Fighter*);
/* 0B4778 */ void ftCo_800B4778(Fighter*, cmd_t cmd, arg_t arg1, arg_t arg2);
/* 0B4880 */ void ftCo_800B4880(Fighter*, int script_idx);
/* 0B49F4 */ void ftCo_800B49F4(Fighter*);
/* 0B4A78 */ void ftCo_800B4A78(Fighter*);
#define GALE01_0BFE6C
/* 0BFD04 */ void ftCo_800BFD04(Fighter_GObj* gobj);
/* 0BFD9C */ void ftCo_800BFD9C(Fighter_GObj* gobj);
/* 0BFE6C */ void ftCo_Sleep_Anim(Fighter_GObj* gobj);
/* 0BFE70 */ void ftCo_Sleep_IASA(Fighter_GObj* gobj);
/* 0BFFAC */ void ftCo_800BFFAC(Fighter* fp);
/// Fighter Apply Color Animation
/* 0BFFD0 */ bool ftCo_800BFFD0(Fighter*, FtColAnim, bool);
/* 0C0074 */ void ftCo_800C0074(Fighter* fp);
/* 0C0098 */ void ft_800C0098(Fighter* fp);
/* 0C0134 */ void ftCo_800C0134(Fighter* fp);
/* 0C0200 */ void ftCo_800C0200(Fighter* fp, int);
/* 0C0358 */ void ftCo_800C0358(Fighter* fp, Fighter*, s32);
/* 0C0408 */ void ftCo_800C0408(Fighter_GObj* gobj);
#define GALE01_0763C0
/// Combo Count Logic
/* 0763C0 */ void ftColl_800763C0(Fighter_GObj* attacker, Fighter_GObj* victim,
                                  enum_t attackID);
/* 076444 */ void ftColl_80076444(Fighter_GObj* attacker,
                                  Fighter_GObj* victim);
/* 07646C */ void ftColl_8007646C(Fighter_GObj* attackItem,
                                  Fighter_GObj* victim);
/* 0764DC */ void ftColl_800764DC(Fighter_GObj* gobj);
/* 076528 */ void ftColl_80076528(Fighter_GObj* gobj);
/* 0765AC */ void ftColl_800765AC(Fighter_GObj* victim);
/* 0765E0 */ void ftColl_800765E0(void);
/* 0765F0 */ float ftColl_800765F0(Fighter* fp, Fighter_GObj* victim,
                                   float unk_floatvar);
/* 076640 */ bool ftColl_80076640(Fighter*, float*);
/* 076764 */ void ftColl_80076764(int, enum_t, Fighter_GObj*, DynamicsDesc*,
                                  Fighter* fp, FighterHurtCapsule*);
/* 076808 */ void ftColl_80076808(Fighter* fp, HitCapsule* hit, int arg2,
                                  void* victim, bool arg4);
/* 0768A0 */ void ftColl_800768A0(Fighter* fp, HitCapsule* dst);
/* 07699C */ bool ftColl_8007699C(Fighter*, HitCapsule*, Fighter*,
                                  HitCapsule*);
/* 076CBC */ void ftColl_80076CBC(Fighter*, HitCapsule*, Fighter*);
/* 076ED8 */ bool ftColl_80076ED8(Fighter* fp0, HitCapsule* hit0, Fighter* fp1,
                                  HitCapsule* hit1);
/* 077464 */ void ftColl_80077464(Item*, HitCapsule*, Fighter*);
/* 077688 */ void ftColl_80077688(Item*, HitCapsule*, Fighter*, Vec3*, f32);
/* 077970 */ void ftColl_80077970(Item*, HitCapsule*, Fighter*, HitCapsule*);
/* 077C60 */ bool ftColl_80077C60(Item*, HitCapsule*, Fighter*, HitCapsule*);
/* 078384 */ void ftColl_80078384(Fighter*, FighterHurtCapsule*, HitCapsule*);
/* 078488 */ void ftColl_80078488(Fighter*);
/* 0784B4 */ void ftColl_800784B4(Fighter*, HitCapsule*, HitCapsule*);
/* 078538 */ void ftColl_80078538(Fighter_GObj*, Vec3*, u32, float, float);
/* 07861C */ void ftColl_8007861C(Fighter_GObj*, Fighter_GObj* gobj, int, int,
                                  int, M2C_UNK, u16, M2C_UNK, int);
/* 078710 */ void ftColl_80078710(Fighter_GObj*, Fighter_GObj*, M2C_UNK arg2);
/* 078754 */ void ftColl_80078754(Fighter_GObj*, Fighter_GObj*, bool);
/* 0787B4 */ void ftColl_800787B4(Item_GObj*, Fighter_GObj*, int);
/* 0788D4 */ void ftColl_800788D4(Fighter_GObj* gobj);
/* 07891C */ void ftColl_8007891C(Fighter_GObj*, Fighter_GObj*, float);
/* 078998 */ void ftColl_80078998(HSD_GObj*, HSD_GObj*, float);
/* 078A2C */ void ftColl_80078A2C(Fighter_GObj*);
/* 078C70 */ void ftColl_80078C70(Fighter_GObj*);
/* 07925C */ void ftColl_8007925C(Fighter_GObj*);
/* 079AB0 */ float ftColl_80079AB0(Fighter*, HitCapsule*, u32, float, float,
                                   float, float);
/* 079C70 */ float ftColl_80079C70(Fighter*, Fighter*, HitCapsule*, int);
/* 079EA8 */ float ftColl_80079EA8(Fighter*, HitCapsule*, u32);
/* 07AB48 */ void ftColl_8007AB48(Fighter_GObj*);
/* 07AB80 */ void ftColl_8007AB80(Fighter_GObj*);
/* 07ABD0 */ void ftColl_8007ABD0(HitCapsule*, u32 damageAmount,
                                  Fighter_GObj*);
/* 07AC68 */ bool ftColl_8007AC68(u32 kb_angle);
/* 07AC9C */ void ftColl_8007AC9C(HitCapsule*, int, Fighter_GObj*);
/* 07AD18 */ void ftColl_8007AD18(Fighter* fp, HitCapsule*);
/* 07AE80 */ void ftColl_8007AE80(Fighter_GObj*);
/* 07AEE0 */ void ftColl_8007AEE0(Fighter_GObj*);
/// Enable Reflect Bubble Update
/* 07AEF8 */ void ftColl_8007AEF8(Fighter_GObj*);
/* 07AF10 */ void ftColl_8007AF10(Fighter_GObj*);
/* 07AF28 */ void ftColl_8007AF28(Fighter_GObj* gobj);
/* 07AF60 */ void ftColl_8007AF60(Fighter_GObj*);
/* 07AFC8 */ void ftColl_8007AFC8(Fighter_GObj* gobj, int hit_idx);
/* 07AFF8 */ void ftColl_8007AFF8(Fighter_GObj*);
/* 07B064 */ void ftColl_8007B064(Fighter_GObj* gobj, enum_t);
/* 07B0C0 */ void ftColl_8007B0C0(Fighter_GObj*, HurtCapsuleState);
/* 07B128 */ void ftColl_8007B128(Fighter_GObj* gobj, int bone_id,
                                  HurtCapsuleState state);
/* 07B1B8 */ void ftColl_8007B1B8(Fighter_GObj* gobj, ShieldDesc* shield,
                                  HSD_GObjEvent cb);
/* 07B23C */ void ftColl_CreateReflectHit(Fighter_GObj*, ReflectDesc*,
                                          HSD_GObjEvent on_reflect);
/* 07B2C4 */ void ftColl_CreateAbsorbHit(Fighter_GObj*, AbsorbDesc*);
/* 07B320 */ void ftColl_8007B320(Fighter_GObj*);
/* 07B4E0 */ void ftColl_8007B4E0(Fighter_GObj*);
/* 07B5AC */ void ftColl_HurtboxInit(Fighter* fp, FighterHurtCapsule*,
                                     ftHurtboxInit*);
/* 07B62C */ void ftColl_8007B62C(Fighter_GObj*, enum_t);
/* 07B6A0 */ void ftColl_8007B6A0(Fighter_GObj* gobj);
/* 07B6EC */ void ftColl_8007B6EC(Fighter_GObj*);
/* 07B760 */ void ftColl_8007B760(Fighter_GObj*, int);
/* 07B7A4 */ void ftColl_8007B7A4(Fighter_GObj* gobj, int);
/* 07B7FC */ void ftColl_8007B7FC(Fighter*, int);
/* 07B868 */ s32 ftColl_8007B868(Fighter_GObj* gobj);
///  Update hitbox positions
/* 07B8A8 */ void ftColl_8007B8A8(HitCapsule*, Vec3*);
/* 07B8CC */ void ftColl_8007B8CC(Fighter*, Fighter_GObj*);
/* 07B8E8 */ void ftColl_8007B8E8(Fighter_GObj*);
/* 07B924 */ void ftColl_GetWindOffsetVec(Fighter_GObj*, Vec3* out_wind);
/* 07BA0C */ void ftColl_8007BA0C(Fighter_GObj*);
/* 07BAC0 */ void ftColl_8007BAC0(Fighter_GObj*);
/* 07BBCC */ float ftColl_8007BBCC(Fighter_GObj* gobj);
/* 07BC90 */ void ftColl_8007BC90(Fighter_GObj*);
/* 07BE3C */ void ftColl_8007BE3C(Fighter_GObj*);
#define GALE01_07C930
/* 07C930 */ void ftCommon_CalcGroundAccel_Deaccel(Fighter*, float);
/* 07C98C */ void ftCommon_CalcGroundAccel_DashRun(Fighter*, float accel,
                                                   float target_vel,
                                                   float friction);
/* 07CA80 */ void ftCommon_CalcGroundAccel_AccelToVel(Fighter* fp, float accel,
                                                      float target_vel, float);
/* 07CADC */ void ftCommon_CalcGroundAccel_AccelToLStickX(Fighter*, float,
                                                          float, float);
/* 07CB74 */ void ftCommon_SetSelfMovementFromGroundedMovement(Fighter_GObj*);
/* 07CC1C */ void
ftCommon_SetSelfMovementFromGroundedMovement_NoFriction(Fighter_GObj*);
/* 07CC78 */ void ftCommon_ClampGroundVel(Fighter*, float);
/* 07CCA0 */ void ftCommon_ApplyGroundedKnockbackFriction(Fighter*, float);
/* 07CCE8 */ void ftCommon_SetGroundedKnockbackIfLanded(Fighter*);
/* 07CD6C */ float ftCommon_SandbagKnockbackDeaccel(float, float decrement);
/* 07CDA4 */ float ftCommon_SandbagGetKnockbackDeaccelX(Fighter*);
/* 07CDF8 */ float ftCommon_SandbagGetKnockbackDeaccelY(Fighter*);
/* 07CE4C */ void ftCommon_ApplyShieldKnockbackFriction(Fighter*, float);
/* 07CE94 */ void ftCommon_CalcSelfAccel_Deaccel(Fighter*, float);
/* 07CEF4 */ void ftCommon_CalcSelfAccel_DeaccelAir(Fighter*);
/* 07CF58 */ bool ftCommon_CalcSelfAccel_DeaccelQuickAir(Fighter*);
/* 07D050 */ bool ftCommon_CalcSelfAccel_DeaccelQuick(Fighter*, float);
/* 07D140 */ void ftCommon_CalcSelfAccel_AccelToVelClamped(Fighter*, float,
                                                           float, float);
/* 07D174 */ void ftCommon_CalcSelfAccel_AccelToVelClampedFrom(Fighter*, float,
                                                               float, float,
                                                               float);
/* 07D268 */ void ftCommon_CalcSelfAccel_Drift(Fighter*);
/* 07D28C */ void ftCommon_CalcSelfAccel_DriftFrom(Fighter*, float);
/* 07D2E8 */ void ftCommon_CalcSelfAccel_AccelToVel(Fighter*, float accel,
                                                    float target_vel,
                                                    float unused);
/* 07D344 */ void ftCommon_CalcSelfAccel_DriftSimple(Fighter*, float threshold,
                                                     float accel_max,
                                                     float target_max);
/* 07D3A8 */ void ftCommon_CalcSelfAccel_DriftSimple_NoFriction(
    Fighter*, float threshold, float accel_max, float target_max);
/* 07D440 */ void ftCommon_ClampSelfVelX(Fighter*, float);
/* 07D468 */ void ftCommon_ClampAirDrift(Fighter*);
/* 07D494 */ void ftCommon_Fall(Fighter*, float, float);
/* 07D4B8 */ void ftCommon_FallBasic(Fighter*);
/* 07D4E4 */ void ftCommon_FallFast(Fighter*);
/* 07D4F4 */ void ftCommon_ClampFallSpeed(Fighter*, float);
/* 07D508 */ void ftCommon_Ascend(Fighter*, float, float);
/* 07D528 */ bool ftCommon_CheckFallFast(Fighter*);
/* 07D5BC */ void ftCommon_UnlockECB(Fighter*);
/// Air_StoreBool_LoseGroundJump_NoECBfor10Frames
/* 07D5D4 */ void ftCommon_8007D5D4(Fighter*);
/* 07D60C */ void ftCommon_8007D60C(Fighter*);
/* 07D698 */ void ftCommon_UseAllJumps(Fighter*);
/* 07D6A4 */ void ftCommon_8007D6A4(Fighter*);
/* 07D780 */ void ftCommon_8007D780(Fighter*);
/* 07D7FC */ void ftCommon_8007D7FC(Fighter*);
/* 07D92C */ void ftCommon_8007D92C(Fighter_GObj*);
/* 07D964 */ float ftCo_GetLStickAngle(Fighter* fp);
/* 07D99C */ float ftCo_GetCStickAngle(Fighter* fp);
/* 07D9D4 */ float ftCommon_8007D9D4(Fighter*);
/* 07D9FC */ void ftCommon_UpdateFacing(Fighter*);
/* 07DA24 */ void ftCommon_8007DA24(Fighter*);
/* 07DA74 */ float ftCommon_CalcHitlag(int dmg, FtMotionId msid, float mul);
/* 07DB24 */ void ftCommon_8007DB24(Fighter_GObj*);
/* 07DB58 */ void ftCommon_8007DB58(Fighter_GObj*);
/* 07DBCC */ void ftCommon_InitGrab(Fighter*, bool, float);
/* 07DC08 */ bool ftCommon_GrabMash(Fighter*, float);
/* 07DD7C */ void ftCommon_8007DD7C(Fighter_GObj*, Vec3*);
/* 07DFD0 */ void ftCommon_8007DFD0(Fighter_GObj* gobj, Vec3* arg1);
/* 07E0E4 */ void ftCommon_8007E0E4(Fighter_GObj*);
/* 07E2A4 */ Fighter_GObj* ftCommon_8007E2A4(Fighter_GObj*);
/* 07E2D0 */ void ftCommon_8007E2D0(Fighter* fp, s16 arg1,
                                    HSD_GObjEvent grab_cb,
                                    HSD_GObjEvent unk_cb,
                                    void (*grabbed_cb)(HSD_GObj*, HSD_GObj*));
/* 07E2F4 */ void ftCommon_8007E2F4(Fighter*, s16 val);
/// Fighter_KillAllVelocity
/* 07E2FC */ void ftCommon_8007E2FC(Fighter_GObj*);
/* 07E358 */ void ftCommon_8007E358(Fighter_GObj*);
/* 07E3EC */ void ftCommon_8007E3EC(Fighter_GObj*);
/* 07E5AC */ void ftCommon_8007E5AC(Fighter*);
/* 07E620 */ void ftCommon_SetAccessory(Fighter*, HSD_Joint*);
/* 07E690 */ void ftCommon_8007E690(Fighter*, HSD_AnimJoint*);
/* 07E6DC */ void ftCommon_8007E6DC(Fighter_GObj*, Fighter_GObj* gobj, s32);
/* 07E79C */ void ftCommon_8007E79C(Fighter_GObj*, s32);
/* 07E7E4 */ void ftCommon_8007E7E4(Fighter_GObj*, s32);
/* 07E82C */ void ftCommon_8007E82C(Fighter_GObj*);
/* 07E83C */ void ftCommon_8007E83C(Fighter_GObj*, s32, float div);
/* 07E994 */ s32 ftGetParasolStatus(Fighter_GObj*);
/* 07EA90 */ void ftCommon_8007EA90(Fighter*, s32);
/* 07EBAC */ void ftCommon_8007EBAC(Fighter*, u32, u32);
/* 07EC30 */ void ftCommon_8007EC30(u32, u32);
/* 07ECD4 */ void ftCommon_8007ECD4(Fighter*, s32);
/* 07ED2C */ void ftCommon_8007ED2C(Fighter*);
/* 07ED50 */ void ftCommon_8007ED50(Fighter*, s32);
/* 07EE0C */ void ftCommon_8007EE0C(Fighter*, s32);
/* 07EEC8 */ void ftCommon_8007EEC8(Fighter*, s32, s32);
/* 07EF5C */ void ftCommon_8007EF5C(Fighter*, s32);
/* 07EFC0 */ void ftCommon_8007EFC0(Fighter*, u32 val);
/* 07EFC8 */ void ftCommon_8007EFC8(Fighter_GObj*, void (*)(Fighter_GObj*));
/* 07F578 */ void ftCommon_8007F578(Fighter_GObj*);
/* 07F5CC */ void ftCommon_8007F5CC(Item_GObj*, bool);
/* 07F694 */ float ftCommon_GetModelScale(Fighter*);
/* 07F6A4 */ void ftCommon_8007F6A4(Fighter*, HSD_JObj*);
/* 07F76C */ void ftCommon_8007F76C(Fighter_GObj*);
/* 07F7B4 */ void ftCommon_8007F7B4(Fighter_GObj*);
/* 07F804 */ MtxPtr ftCommon_8007F804(Fighter*);
/* 07F824 */ void ftCommon_8007F824(Fighter_GObj*);
/* 07F86C */ void ftCommon_8007F86C(Fighter_GObj*);
/* 07F8B4 */ void ftCommon_8007F8B4(Fighter*, Vec3* v);
/* 07F8E8 */ void ftCommon_8007F8E8(Fighter_GObj*);
/* 07F948 */ void ftCommon_8007F948(Fighter_GObj*, Fighter_GObj*, s32);
/* 07F9B4 */ void ftCommon_8007F9B4(Fighter_GObj*);
/* 07FA00 */ void ftCommon_8007FA00(Fighter_GObj*);
/* 07FA58 */ void ftCommon_8007FA58(Fighter_GObj*, Item_GObj*);
/* 07FC7C */ void ftCommon_8007FC7C(Fighter_GObj*, float);
/* 07FDA0 */ void ftCommon_8007FDA0(Fighter_GObj*);
/// @todo static
/* 07FE84 */ void ftCommon_8007FE84(Fighter_GObj*, Fighter_GObj*, s32, float);
/* 07FF74 */ void ftCommon_8007FF74(Fighter_GObj*);
/* 07FFD8 */ bool ftCommon_8007FFD8(Fighter*, float);
/* 080144 */ bool ftCommon_80080144(Fighter*);
/* 080174 */ void ftCommon_80080174(Fighter* fp);
/* 08021C */ void ftCommon_8008021C(Fighter_GObj*);
/* 08031C */ void ftCommon_8008031C(Fighter_GObj*);
/* 080460 */ void ftCommon_80080460(Fighter*);
/* 080474 */ void ftCommon_80080474(Fighter*);
/* 080484 */ void ftCommon_80080484(Fighter*);
/* 0804A0 */ void ftCommon_800804A0(Fighter*, float);
/**
 * @todo @c DataOffset_PlayerScale_MultiplyBySomething
 * @returns <tt>fp->x40*fp->x34</tt>
 */
/* 0804EC */ float ftCommon_800804EC(Fighter*);
/* 0804FC */ void ftCommon_800804FC(Fighter*);
#define MELEE_FT_CPUATTACK_H
struct ftCo_AttackEntry;
/* 0B4AB0 */ int ftCo_800B4AB0(Fighter*, Fighter*, void*);
/* 0B52AC */ int ftCo_800B52AC(Fighter*, Fighter*, void*, float);
/* 0B5AB0 */ int ftCo_800B5AB0(Fighter*, void*, void*);
/* 0B6208 */ int ftCo_800B6208(struct ftCo_AttackEntry*);
/* 0B630C */ bool ftCo_800B630C(Fighter*);
/* 0B63D8 */ void ftCo_800B63D8(Fighter*);
/* 0B658C */ void ftCo_800B658C(Fighter*);
/* 0B683C */ void ftCo_800B683C(Fighter*);
/* 0B7180 */ void ftCo_800B7180(Fighter*);
/* 0B732C */ int ftCo_800B732C(Fighter*);
/* 0B7638 */ int ftCo_800B7638(Fighter*);
/* 0B77E8 */ void ftCo_800B77E8(Fighter*);
/* 0B885C */ bool ftCo_800B885C(Fighter*);
/* 0B89CC */ bool ftCo_800B89CC(Fighter*);
/* 0B8A9C */ bool ftCo_800B8A9C(Fighter*);
/* 0B9020 */ void ftCo_800B9020(Fighter*);
/* 0B920C */ void ftCo_800B920C(Fighter*);
/* 0B92D4 */ void ftCo_800B92D4(Fighter*);
/* 0B9340 */ void ftCo_800B9340(Fighter*);
/* 0B9504 */ void ftCo_800B9504(Fighter*);
/* 0B9704 */ void ftCo_800B9704(Fighter*);
/* 0B9790 */ bool ftCo_800B9790(Fighter*, float, float);
/* 0B98C8 */ bool ftCo_800B98C8(Fighter*, float, float);
/* 0B9A04 */ bool ftCo_800B9A04(Fighter*, Item*, float, float);
/* 0B9CBC */ bool ftCo_800B9CBC(Fighter*);
/* 0B9F6C */ bool ftCo_800B9F6C(Fighter*);
/* 0B9F90 */ void ftCo_800B9F90(Fighter*);
/* 0BA080 */ void ftCo_800BA080(Fighter*);
/* 0BA160 */ void ftCo_800BA160(Fighter*);
/* 0BA224 */ void ftCo_800BA224(Fighter*);
/* 0BA2E8 */ bool ftCo_800BA2E8(Fighter*, Fighter*);
/* 0BA674 */ void ftCo_800BA674(Fighter*, Fighter*);
/* 0BA9A0 */ void ftCo_800BA9A0(Fighter*);
/* 0BB104 */ bool ftCo_800BB104(Fighter*, Fighter*, Vec3*, float);
/* 0BB220 */ int ftCo_800BB220(Fighter*, Item* ip, Vec3*, float);
/* 0BB768 */ bool ftCo_800BB768(Fighter*, Fighter*);
/* 0BB9B4 */ int ftCo_800BB9B4(Fighter*);
#define GALE01_085560
/* 08521C */ void ft_8008521C(Fighter_GObj* gobj);
/* 0852B0 */ void ft_800852B0(void);
/* 08549C */ void ft_8008549C(void);
/* 085560 */ void ftData_80085560(int idx, int increment);
/* 0855C8 */ void ftData_800855C8(FighterKind kind, u8 color);
/* 08572C */ void ftData_8008572C(FighterKind);
/* 08578C */ void ftData_8008578C(int, u8 color);
/* 0857E0 */ void ftData_800857E0(FighterKind);
/* 085820 */ void ftData_80085820(FighterKind, int costume_id);
/* 0858E4 */ void ftData_800858E4(FighterKind, int costume_id);
/* 0859A8 */ void ftData_800859A8(Fighter*);
/* 085A14 */ void ftData_80085A14(FighterKind);
/* 085B10 */ void ftData_80085B10(Fighter*);
/* 085B98 */ void ftData_80085B98(Fighter*, int, int);
/* 085CD8 */ void ftData_80085CD8(Fighter*, Fighter*, enum_t msid);
/// Animation_GetAddress
/* 085E50 */ FigaTree* ftData_80085E50(Fighter*, enum_t msid);
/* 085FD4 */ struct ftData_80085FD4_ret* ftData_80085FD4(Fighter* fp,
                                                         FtMotionId msid);
/* 086060 */ Fighter* ftData_80086060(Fighter* arg0);
/* 3C0EC0 */ extern struct UnkCostumeList
    CostumeListsForeachCharacter[Ft_Kind_Max];
/* 3C0FC8 */ extern struct ftData_UnkCountStruct
    ftData_Table_Unk0[Ft_Kind_Max];
/* 3C10D0 */ extern Event ftData_Table_Unk1[Ft_Kind_Max];
/* 3C10D0 */ extern struct ftData_UnkCountStruct
    ftData_UnkIntPairs[Ft_Kind_Max];
/// One load  callback for every character.
/* 3C1154 */ extern HSD_GObjEvent ftData_OnLoad[Ft_Kind_Max];
/// One death callback for every character.-
/* 3C11D8 */ extern HSD_GObjEvent ftData_OnDeath[Ft_Kind_Max];
/* 3C125C */ extern HSD_GObjEvent ftData_OnUserDataRemove[Ft_Kind_Max];
/* 3C13E8 */ extern HSD_GObjEvent ftData_SpecialS[Ft_Kind_Max];
/* 3C146C */ extern HSD_GObjEvent ftData_SpecialAirHi[Ft_Kind_Max];
/* 3C14F0 */ extern HSD_GObjEvent ftData_SpecialAirLw[Ft_Kind_Max];
/* 3C1574 */ extern HSD_GObjEvent ftData_SpecialAirS[Ft_Kind_Max];
/* 3C15F8 */ extern HSD_GObjEvent ftData_SpecialAirN[Ft_Kind_Max];
/* 3C167C */ extern HSD_GObjEvent ftData_SpecialN[Ft_Kind_Max];
/* 3C1700 */ extern HSD_GObjEvent ftData_SpecialLw[Ft_Kind_Max];
/* 3C1784 */ extern HSD_GObjEvent ftData_SpecialHi[Ft_Kind_Max];
/* 3C1808 */ extern HSD_GObjEvent ftData_OnAbsorb[Ft_Kind_Max];
/* 3C188C */ extern Fighter_ItemEvent ftData_OnItemPickupExt[Ft_Kind_Max];
/// probably ft_OnSomething
/* 3C1DB4 */ extern HSD_GObjEvent ftData_UnkMotionStates3[Ft_Kind_Max];
/* 3C1E38 */ extern HSD_GObjEvent ftData_UnkMotionStates4[Ft_Kind_Max];
/* 3C20CC */ extern Fighter_UnkMtxEvent ftData_UnkMtxFunc0[Ft_Kind_Max];
/* 3C2150 */ extern ftData_UnkModelStruct ftData_UnkIntBoolFunc0;
/* 3C2468 */ extern Fighter_DemoStrings* ftData_803C2468[Ft_Kind_Max];
/* 3C24EC */ extern Fighter_MotionFileStringGetter
    ftData_803C24EC[Ft_Kind_Max];
/* 3C2570 */ extern Fighter_UnkPtrEvent ftData_UnkDemoCallbacks0[Ft_Kind_Max];
/* 3C26FC */ extern u8 ftData_UnkBytePerCharacter[Ft_Kind_Max];
/* 3C2800 */ extern MotionState ftData_MotionStateList[ftCo_MS_Count];
/* 3C52A0 */ extern MotionState ftData_803C52A0[14];
/* 4598B8 */ extern ftData* gFtDataList[Ft_Kind_Max];
#define GALE01_0BE7E0
/* 0BE7E0 */ Fighter_GObj* ftDemo_CreateFighter(plAllocInfo2* alloc_info);
/* 0BEB28 */ void ftDemo_ObjAllocInit(void);
/* 0BEB60 */ void ftDemo_SetArchiveData(int pairs_idx, HSD_Archive* arg1,
                                        int arr_idx);
/* 0BEC08 */ char* ftDemo_GetMotionFileString(int arg0, int arg1);
/* 0BEC74 */ void ftDemo_SetFacingDirection(Fighter_GObj* gobj,
                                            float facing_dir);
/* 3C1364 */ extern MotionState* ftData_UnkMotionStates0[Ft_Kind_Max];
#define GALE01_0C0658
/* 0C0658 */ ColorOverlay* ftCo_800C0658(Fighter* fp);
/* 0C0674 */ ColorOverlay* ftCo_800C0674(Fighter_GObj* gobj);
/* 0C0694 */ enum_t ftCo_800C0694(Fighter* fp);
/* 0C06B4 */ int ftCo_800C06B4(Fighter* fp);
/* 0C06C0 */ void ftCo_800C06C0(void);
/* 0C06E8 */ void ftCo_800C06E8(Ground_GObj*, int, void*);
/* 0C0764 */ void ftCo_800C0764(Ground_GObj*, u32, void*);
/* 0C07F8 */ void ftCo_800C07F8(Ground_GObj*, u32, void*);
/* 459A68 */ extern struct ftDeviceUnk3 ft_80459A68[1];
/* 459A74 */ extern struct ftDeviceUnk5 ftDevice_BuryThings[2];
/* 459A8C */ extern struct ftDeviceUnk3 ft_80459A8C[1];
/* 4D6570 */ extern int ft_804D6570;
/* 4D6574 */ extern int ftDevice_BuryThingCount;
/* 4D6578 */ extern struct ftDeviceUnk4 ft_804D6578;
#define GALE01_08051C
/* 08051C */ MtxPtr ftDrawCommon_8008051C(HSD_GObj*, MtxPtr);
/* 0805C8 */ void ftDrawCommon_800805C8(HSD_GObj*, s32, bool);
/* 080C28 */ void ftDrawCommon_80080C28(HSD_GObj*, intptr_t);
/* 080E18 */ void ftDrawCommon_80080E18(HSD_GObj*, intptr_t);
/* 081118 */ void ftDrawCommon_80081118(void);
/* 081140 */ void ftDrawCommon_80081140(void);
/* 081168 */ void ftDrawCommon_80081168(void);
/* 081200 */ void ftDrawCommon_80081200(void);
#define GALE01_09CB40
#define MELEE_FT_CHARA_FTKIRBY_FORWARD_H
typedef struct Fighter ftKb_Fighter;
typedef struct ftKb_DatAttrs ftKb_DatAttrs;
/// @todo Clean up factorization
static MotionFlags const ftKb_MF_MultiJump =
    Ft_MF_KeepGfx | Ft_MF_SkipHit | Ft_MF_SkipAnimVel | Ft_MF_Unk06;
static MotionFlags const ftKb_MF_AttackDash =
    Ft_MF_KeepFastFall | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipItemVis |
    Ft_MF_FreezeState;
static MotionFlags const ftKb_MF_AttackDashAir =
    ftKb_MF_AttackDash | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_18_20_21 =
    Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys | Ft_MF_FreezeState;
static MotionFlags const ftKb_MF_4_18_20_21 =
    ftKb_MF_18_20_21 | Ft_MF_SkipModel;
static MotionFlags const ftKb_MF_2_4_18_20_21 =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_5_18_20_21 =
    ftKb_MF_18_20_21 | Ft_MF_SkipAnimVel;
static MotionFlags const ftKb_MF_SpecialN =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialS = ftKb_MF_4_18_20_21 | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialHi =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialNMr =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepFastFall | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_SpecialNKp =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepFastFall | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNPe =
    ftKb_MF_2_4_18_20_21 | Ft_MF_KeepFastFall | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNYs =
    ftKb_MF_5_18_20_21 | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNLg =
    ftKb_MF_5_18_20_21 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_SpecialNZd =
    ftKb_MF_5_18_20_21 | Ft_MF_KeepGfx | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_SpecialNDr =
    ftKb_MF_5_18_20_21 | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNGk =
    ftKb_MF_SpecialNZd | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNFx =
    ftKb_MF_2_4_18_20_21 | Ft_MF_KeepGfx | Ft_MF_SkipThrowException;
static MotionFlags const ftKb_MF_SpecialNLk = ftKb_MF_4_18_20_21 |
                                              Ft_MF_KeepGfx | Ft_MF_SkipHit |
                                              Ft_MF_SkipThrowException;
static MotionFlags const ftKb_MF_SpecialNSk =
    ftKb_MF_SpecialNLk | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNNs =
    ftKb_MF_2_4_18_20_21 | Ft_MF_SkipHit | Ft_MF_SkipThrowException;
static MotionFlags const ftKb_MF_SpecialNPp =
    ftKb_MF_SpecialNNs | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialNPk =
    ftKb_MF_SpecialNPp | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNSs =
    ftKb_MF_5_18_20_21 | Ft_MF_SkipThrowException;
static MotionFlags const ftKb_MF_SpecialNSs_1 =
    ftKb_MF_SpecialNSs | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialNMt =
    ftKb_MF_SpecialNSs_1 | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNCl =
    ftKb_MF_SpecialNMt | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_SpecialNFc =
    ftKb_MF_SpecialNDr | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftKb_MF_SpecialNPc =
    ftKb_MF_SpecialNSs_1 | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNGw =
    ftKb_MF_SpecialNPc | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialLw =
    ftKb_MF_2_4_18_20_21 | Ft_MF_KeepSfx;
static MotionFlags const ftKb_MF_SpecialNCa =
    ftKb_MF_SpecialLw | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialNDk =
    ftKb_MF_4_18_20_21 | Ft_MF_SkipHit | Ft_MF_KeepSfx;
static MotionFlags const ftKb_MF_5_9_18_20_21 =
    ftKb_MF_5_18_20_21 | Ft_MF_KeepSfx;
static MotionFlags const ftKb_MF_2_5_9_18_20_21 =
    ftKb_MF_5_9_18_20_21 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftKb_MF_SpecialNPr =
    ftKb_MF_5_9_18_20_21 | Ft_MF_KeepGfx;
static MotionFlags const ftKb_MF_SpecialNMs =
    ftKb_MF_2_5_9_18_20_21 | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNGn =
    ftKb_MF_2_5_9_18_20_21 | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialNFeStart =
    ftKb_MF_SpecialNMs | Ft_MF_SkipHit;
static MotionFlags const ftKb_MF_SpecialAirN =
    ftKb_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirS =
    ftKb_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirHi =
    ftKb_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNMr =
    ftKb_MF_SpecialNMr | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNKp =
    ftKb_MF_SpecialNKp | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPe =
    ftKb_MF_SpecialNPe | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNYs =
    ftKb_MF_SpecialNYs | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNLg =
    ftKb_MF_SpecialNLg | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNZd =
    ftKb_MF_SpecialNZd | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNDr =
    ftKb_MF_SpecialNDr | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNGk =
    ftKb_MF_SpecialNGk | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNFx =
    ftKb_MF_SpecialNFx | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNLk =
    ftKb_MF_SpecialNLk | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNSk =
    ftKb_MF_SpecialNSk | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNNs =
    ftKb_MF_SpecialNNs | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPp =
    ftKb_MF_SpecialNPp | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPk =
    ftKb_MF_SpecialNPk | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNSs =
    ftKb_MF_SpecialNSs | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNMt =
    ftKb_MF_SpecialNMt | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNCl =
    ftKb_MF_SpecialNCl | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNFc =
    ftKb_MF_SpecialNFc | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPc =
    ftKb_MF_SpecialNPc | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNGw =
    ftKb_MF_SpecialNGw | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirLw =
    ftKb_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNCa =
    ftKb_MF_SpecialNCa | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNDk =
    ftKb_MF_SpecialNDk | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPr =
    ftKb_MF_SpecialNPr | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNMs =
    ftKb_MF_SpecialNMs | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNGn =
    ftKb_MF_SpecialNGn | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialNFe =
    ftKb_MF_SpecialNFeStart | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_0_4_18_20_21 =
    ftKb_MF_4_18_20_21 | Ft_MF_KeepFastFall;
static MotionFlags const ftKb_MF_SpecialNCaptureTurn =
    ftKb_MF_0_4_18_20_21 | Ft_MF_KeepAccessory;
static MotionFlags const ftKb_MF_SpecialAirNCaptureTurn =
    ftKb_MF_SpecialNCaptureTurn | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialNCaptureWalk =
    ftKb_MF_0_4_18_20_21 | Ft_MF_UpdateCmd;
static MotionFlags const ftKb_MF_SpecialNCaptureJumpSquat =
    ftKb_MF_0_4_18_20_21 | Ft_MF_SkipNametagVis;
static MotionFlags const ftKb_MF_SpecialNLoop =
    ftKb_MF_0_4_18_20_21 | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNKpLoop =
    ftKb_MF_SpecialNKp | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNGkLoop =
    ftKb_MF_SpecialNGk | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNFxLoop =
    ftKb_MF_SpecialNFx | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNLkCharged =
    ftKb_MF_SpecialNLk | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNSkLoop =
    ftKb_MF_SpecialNSk | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNMtLoop =
    ftKb_MF_SpecialNMt | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNClCharged =
    ftKb_MF_SpecialNCl | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNFcLoop =
    ftKb_MF_SpecialNFc | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialNPrLoop =
    ftKb_MF_SpecialNPr | Ft_MF_Unk19;
static MotionFlags const ftKb_MF_SpecialAirNLoop =
    ftKb_MF_SpecialNLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNKpLoop =
    ftKb_MF_SpecialNKpLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNGkLoop =
    ftKb_MF_SpecialNGkLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNFxLoop =
    ftKb_MF_SpecialNFxLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNLkCharged =
    ftKb_MF_SpecialNLkCharged | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNSkLoop =
    ftKb_MF_SpecialNSkLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNMtLoop =
    ftKb_MF_SpecialNMtLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNClCharged =
    ftKb_MF_SpecialNClCharged | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNFcLoop =
    ftKb_MF_SpecialNFcLoop | Ft_MF_SkipParasol;
static MotionFlags const ftKb_MF_SpecialAirNPrLoop =
    ftKb_MF_SpecialNPrLoop | Ft_MF_SkipParasol;
typedef enum ftKirby_MotionState {
    ftKb_MS_JumpAerialF1 = ftCo_MS_Count,
    ftKb_MS_JumpAerialF2,
    ftKb_MS_JumpAerialF3,
    ftKb_MS_JumpAerialF4,
    ftKb_MS_JumpAerialF5,
    ftKb_MS_JumpAerialF1Met,
    ftKb_MS_JumpAerialF2Met,
    ftKb_MS_JumpAerialF3Met,
    ftKb_MS_JumpAerialF4Met,
    ftKb_MS_JumpAerialF5Met,
    ftKb_MS_AttackDash,
    ftKb_MS_AttackDashAir,
    ftKb_MS_SpecialN,
    ftKb_MS_SpecialNLoop,
    ftKb_MS_SpecialNEnd,
    ftKb_MS_SpecialNCapture0,
    ftKb_MS_SpecialNCapture1,
    ftKb_MS_Eat,
    ftKb_MS_EatWait,
    ftKb_MS_EatWalkSlow,
    ftKb_MS_EatWalkMiddle,
    ftKb_MS_EatWalkFast,
    ftKb_MS_EatTurn,
    ftKb_MS_EatJump1,
    ftKb_MS_EatJump2,
    ftKb_MS_EatLanding,
    ftKb_MS_SpecialNDrink0,
    ftKb_MS_SpecialNDrink1,
    ftKb_MS_SpecialNSpit0,
    ftKb_MS_SpecialNSpit1,
    ftKb_MS_SpecialAirN,
    ftKb_MS_SpecialAirNLoop,
    ftKb_MS_SpecialAirNEnd,
    ftKb_MS_SpecialAirNCapture0,
    ftKb_MS_SpecialAirNCapture1,
    ftKb_MS_EatAir,
    ftKb_MS_EatFall,
    ftKb_MS_SpecialAirNDrink0,
    ftKb_MS_SpecialAirNDrink1,
    ftKb_MS_SpecialAirNSpit0,
    ftKb_MS_SpecialAirNSpit1,
    ftKb_MS_EatTurnAir,
    ftKb_MS_SpecialS,
    ftKb_MS_SpecialAirS,
    ftKb_MS_SpecialHi1,
    ftKb_MS_SpecialHi2,
    ftKb_MS_SpecialHi3,
    ftKb_MS_SpecialHi4,
    ftKb_MS_SpecialAirHi1,
    ftKb_MS_SpecialAirHi2,
    ftKb_MS_SpecialAirHi3,
    ftKb_MS_SpecialAirHi4,
    ftKb_MS_SpecialLw1,
    ftKb_MS_SpecialLw,
    ftKb_MS_SpecialLwEnd,
    ftKb_MS_SpecialAirLwStart,
    ftKb_MS_SpecialAirLw,
    ftKb_MS_SpecialAirLwEnd,
    ftKb_MS_MrSpecialN,
    ftKb_MS_MrSpecialAirN,
    ftKb_MS_LkSpecialNStart,
    ftKb_MS_LkSpecialNLoop,
    ftKb_MS_LkSpecialNEnd,
    ftKb_MS_LkSpecialAirNStart,
    ftKb_MS_LkSpecialAirNLoop,
    ftKb_MS_LkSpecialAirNEnd,
    ftKb_MS_SsSpecialNStart,
    ftKb_MS_SsSpecialNHold,
    ftKb_MS_SsSpecialNCancel,
    ftKb_MS_SsSpecialN,
    ftKb_MS_SsSpecialAirNStart,
    ftKb_MS_SsSpecialAirN,
    ftKb_MS_YsSpecialN1,
    ftKb_MS_YsSpecialNCapture1_0,
    ftKb_MS_YsSpecialNCapture1_1,
    ftKb_MS_YsSpecialNCapture2_0,
    ftKb_MS_YsSpecialNCapture2_1,
    ftKb_MS_YsSpecialAirNCapture2,
    ftKb_MS_YsSpecialAirNCapture1_0,
    ftKb_MS_YsSpecialAirNCapture1_1,
    ftKb_MS_YsSpecialAirN2_0,
    ftKb_MS_YsSpecialAirN2_1,
    ftKb_MS_FxSpecialNStart,
    ftKb_MS_FxSpecialNLoop,
    ftKb_MS_FxSpecialNEnd,
    ftKb_MS_FxSpecialAirNStart,
    ftKb_MS_FxSpecialAirNLoop,
    ftKb_MS_FxSpecialAirNEnd,
    ftKb_MS_PkSpecialN,
    ftKb_MS_PkSpecialAirN,
    ftKb_MS_LgSpecialN,
    ftKb_MS_LgSpecialAirN,
    ftKb_MS_CaSpecialN,
    ftKb_MS_CaSpecialAirN,
    ftKb_MS_NsSpecialNStart,
    ftKb_MS_NsSpecialNHold0,
    ftKb_MS_NsSpecialNHold1,
    ftKb_MS_NsSpecialNEnd,
    ftKb_MS_NsSpecialAirNStart,
    ftKb_MS_NsSpecialAirNHold0,
    ftKb_MS_NsSpecialAirNHold1,
    ftKb_MS_NsSpecialAirNEnd,
    ftKb_MS_KpSpecialNStart,
    ftKb_MS_KpSpecialN,
    ftKb_MS_KpSpecialNEnd,
    ftKb_MS_KpSpecialAirNStart,
    ftKb_MS_KpSpecialAirN,
    ftKb_MS_KpSpecialAirNEnd,
    ftKb_MS_PeSpecialLw,
    ftKb_MS_PeSpecialLwHit,
    ftKb_MS_PeSpecialAirLw,
    ftKb_MS_PeSpecialAirLwHit,
    ftKb_MS_PpSpecialN,
    ftKb_MS_PpSpecialAirN,
    ftKb_MS_DkSpecialNStart,
    ftKb_MS_DkSpecialNLoop,
    ftKb_MS_DkSpecialNCancel,
    ftKb_MS_DkSpecialN,
    ftKb_MS_DkSpecialNFull,
    ftKb_MS_DkSpecialAirNStart,
    ftKb_MS_DkSpecialAirNLoop,
    ftKb_MS_DkSpecialAirNCancel,
    ftKb_MS_DkSpecialAirN,
    ftKb_MS_DkSpecialAirNFull,
    ftKb_MS_ZdSpecialN,
    ftKb_MS_ZdSpecialAirN,
    ftKb_MS_SkSpecialNStart,
    ftKb_MS_SkSpecialNLoop,
    ftKb_MS_SkSpecialNCancel,
    ftKb_MS_SkSpecialNEnd,
    ftKb_MS_SkSpecialAirNStart,
    ftKb_MS_SkSpecialAirNLoop,
    ftKb_MS_SkSpecialAirNCancel,
    ftKb_MS_SkSpecialAirNEnd,
    ftKb_MS_PrSpecialNStartR,
    ftKb_MS_PrSpecialNStartL,
    ftKb_MS_PrSpecialNLoop,
    ftKb_MS_PrSpecialNFull,
    ftKb_MS_PrSpecialN1,
    ftKb_MS_PrSpecialNTurn,
    ftKb_MS_PrSpecialNEndR,
    ftKb_MS_PrSpecialNEndL,
    ftKb_MS_PrSpecialAirNStartR,
    ftKb_MS_PrSpecialAirNStartL,
    ftKb_MS_PrSpecialAirNLoop,
    ftKb_MS_PrSpecialAirNFull,
    ftKb_MS_PrSpecialAirN,
    ftKb_MS_PrSpecialN0,
    ftKb_MS_PrSpecialAirNEndR0,
    ftKb_MS_PrSpecialAirNEndR1,
    ftKb_MS_PrSpecialNHit,
    ftKb_MS_MsSpecialNStart,
    ftKb_MS_MsSpecialNLoop,
    ftKb_MS_MsSpecialNEnd0,
    ftKb_MS_MsSpecialNEnd1,
    ftKb_MS_MsSpecialAirNStart,
    ftKb_MS_MsSpecialAirNLoop,
    ftKb_MS_MsSpecialAirNEnd0,
    ftKb_MS_MsSpecialAirNEnd1,
    ftKb_MS_MtSpecialNStart,
    ftKb_MS_MtSpecialNLoop,
    ftKb_MS_MtSpecialNLoopFull,
    ftKb_MS_MtSpecialNCancel,
    ftKb_MS_MtSpecialNEnd,
    ftKb_MS_MtSpecialAirNStart,
    ftKb_MS_MtSpecialAirNLoop,
    ftKb_MS_MtSpecialAirNLoopFull,
    ftKb_MS_MtSpecialAirNCancel,
    ftKb_MS_MtSpecialAirNEnd,
    ftKb_MS_GwSpecialN,
    ftKb_MS_GwSpecialAirN,
    ftKb_MS_DrSpecialN,
    ftKb_MS_DrSpecialAirN,
    ftKb_MS_ClSpecialNStart,
    ftKb_MS_ClSpecialNLoop,
    ftKb_MS_ClSpecialNEnd,
    ftKb_MS_ClSpecialAirNStart,
    ftKb_MS_ClSpecialAirNLoop,
    ftKb_MS_ClSpecialAirNEnd,
    ftKb_MS_FcSpecialNStart,
    ftKb_MS_FcSpecialNLoop,
    ftKb_MS_FcSpecialNEnd,
    ftKb_MS_FcSpecialAirNStart,
    ftKb_MS_FcSpecialAirNLoop,
    ftKb_MS_FcSpecialAirNEnd,
    ftKb_MS_PcSpecialN,
    ftKb_MS_PcSpecialAirN,
    ftKb_MS_GnSpecialN,
    ftKb_MS_GnSpecialAirN,
    ftKb_MS_FeSpecialNStart,
    ftKb_MS_FeSpecialNLoop,
    ftKb_MS_FeSpecialNEnd0,
    ftKb_MS_FeSpecialNEnd1,
    ftKb_MS_FeSpecialAirNStart,
    ftKb_MS_FeSpecialAirNLoop,
    ftKb_MS_FeSpecialAirNEnd0,
    ftKb_MS_FeSpecialAirNEnd1,
    ftKb_MS_GkSpecialNStart,
    ftKb_MS_GkSpecialN,
    ftKb_MS_GkSpecialNEnd,
    ftKb_MS_GkSpecialAirNStart,
    ftKb_MS_GkSpecialAirN,
    ftKb_MS_GkSpecialAirNEnd,
    ftKb_MS_Count,
    ftKb_MS_SelfCount = ftKb_MS_Count - ftCo_MS_Count,
} ftKirby_MotionState;
typedef enum ftKb_Submotion {
    ftKb_SM_JumpAerialF1 = ftCo_SM_Count,
    ftKb_SM_JumpAerialF2,
    ftKb_SM_JumpAerialF3,
    ftKb_SM_JumpAerialF4,
    ftKb_SM_JumpAerialF5,
    ftKb_SM_JumpAerialF1Met,
    ftKb_SM_JumpAerialF2Met,
    ftKb_SM_JumpAerialF3Met,
    ftKb_SM_JumpAerialF4Met,
    ftKb_SM_JumpAerialF5Met,
    ftKb_SM_SpecialN,
    ftKb_SM_SpecialNLoop,
    ftKb_SM_SpecialNEnd,
    ftKb_SM_SpecialNCapture,
    ftKb_SM_Eat,
    ftKb_SM_EatWait,
    ftKb_SM_EatWalkSlow,
    ftKb_SM_EatWalkMiddle,
    ftKb_SM_EatWalkFast,
    ftKb_SM_EatJump1,
    ftKb_SM_EatJump2,
    ftKb_SM_EatLanding,
    ftKb_SM_EatTurn,
    ftKb_SM_SpecialNDrink,
    ftKb_SM_SpecialNSpit,
    ftKb_SM_SpecialAirN,
    ftKb_SM_SpecialAirNLoop,
    ftKb_SM_SpecialS,
    ftKb_SM_SpecialAirS,
    ftKb_SM_SpecialHi1,
    ftKb_SM_SpecialHi2,
    ftKb_SM_SpecialHi3,
    ftKb_SM_SpecialHi4,
    ftKb_SM_SpecialAirHi1,
    ftKb_SM_SpecialAirHi2,
    ftKb_SM_SpecialAirHi3,
    ftKb_SM_SpecialAirHiEnd,
    ftKb_SM_SpecialLw1,
    ftKb_SM_SpecialLw,
    ftKb_SM_SpecialLwEnd,
    ftKb_SM_SpecialAirLwStart,
    ftKb_SM_SpecialAirLw,
    ftKb_SM_SpecialAirLwEnd,
    ftKb_SM_MrSpecialN,
    ftKb_SM_MrSpecialAirN,
    ftKb_SM_LkSpecialNStart,
    ftKb_SM_LkSpecialNLoop,
    ftKb_SM_LkSpecialNEnd,
    ftKb_SM_LkSpecialAirNStart,
    ftKb_SM_LkSpecialAirNLoop,
    ftKb_SM_LkSpecialAirNEnd,
    ftKb_SM_SsSpecialNStart,
    ftKb_SM_SsSpecialNHold,
    ftKb_SM_SsSpecialNCancel,
    ftKb_SM_SsSpecialN,
    ftKb_SM_SsSpecialAirNStart,
    ftKb_SM_SsSpecialAirN,
    ftKb_SM_YsSpecialN1,
    ftKb_SM_YsSpecialNCapture1,
    ftKb_SM_YsSpecialNCapture2,
    ftKb_SM_YsSpecialAirNCapture2,
    ftKb_SM_YsSpecialAirCapture1,
    ftKb_SM_YsSpecialAirN2,
    ftKb_SM_FxSpecialNStart,
    ftKb_SM_FxSpecialNLoop,
    ftKb_SM_FxSpecialNEnd,
    ftKb_SM_FxSpecialAirNStart,
    ftKb_SM_FxSpecialAirNLoop,
    ftKb_SM_FxSpecialAirNEnd,
    ftKb_SM_PkSpecialN,
    ftKb_SM_PkSpecialAirN,
    ftKb_SM_LgSpecialN,
    ftKb_SM_LgSpecialAirN,
    ftKb_SM_CaSpecialN,
    ftKb_SM_CaSpecialAirN,
    ftKb_SM_NsSpecialNStart,
    ftKb_SM_NsSpecialNHold0,
    ftKb_SM_NsSpecialNHold1,
    ftKb_SM_NsSpecialNEnd,
    ftKb_SM_NsSpecialAirNStart,
    ftKb_SM_NsSpecialAirNHold0,
    ftKb_SM_NsSpecialAirNHold1,
    ftKb_SM_NsSpecialAirNEnd,
    ftKb_SM_KpSpecialNStart,
    ftKb_SM_KpSpecialN,
    ftKb_SM_KpSpecialNEnd,
    ftKb_SM_KpSpecialAirNStart,
    ftKb_SM_KpSpecialAirN,
    ftKb_SM_KpSpecialAirNEnd,
    ftKb_SM_PeSpecialLw,
    ftKb_SM_PeSpecialLwHit,
    ftKb_SM_PeSpecialAirLw,
    ftKb_SM_PeSpecialAirLwHit,
    ftKb_SM_PpSpecialN,
    ftKb_SM_PpSpecialAirN,
    ftKb_SM_DkSpecialNStart,
    ftKb_SM_DkSpecialNLoop,
    ftKb_SM_DkSpecialNCancel,
    ftKb_SM_DkSpecialN,
    ftKb_SM_DkSpecialNFull,
    ftKb_SM_DkSpecialAirNStart,
    ftKb_SM_DkSpecialAirNLoop,
    ftKb_SM_DkSpecialAirNCancel,
    ftKb_SM_DkSpecialAirN,
    ftKb_SM_DkSpecialAirNFull,
    ftKb_SM_ZdSpecialN,
    ftKb_SM_ZdSpecialAirN,
    ftKb_SM_SkSpecialNStart,
    ftKb_SM_SkSpecialNLoop,
    ftKb_SM_SkSpecialNCancel,
    ftKb_SM_SkSpecialNEnd,
    ftKb_SM_SkSpecialAirNStart,
    ftKb_SM_SkSpecialAirNLoop,
    ftKb_SM_SkSpecialAirNCancel,
    ftKb_SM_SkSpecialAirNEnd,
    ftKb_SM_PrSpecialNStartR,
    ftKb_SM_PrSpecialNStartL,
    ftKb_SM_PrSpecialNLoop,
    ftKb_SM_PrSpecialNFull,
    ftKb_SM_PrSpecialN1,
    ftKb_SM_PrSpecialNTurn,
    ftKb_SM_PrSpecialNEndR,
    ftKb_SM_PrSpecialNEndL,
    ftKb_SM_PrSpecialAirNStartR,
    ftKb_SM_PrSpecialAirNStartL,
    ftKb_SM_PrSpecialAirNLoop,
    ftKb_SM_PrSpecialAirNFull,
    ftKb_SM_PrSpecialAirN,
    ftKb_SM_PrSpecialN0,
    ftKb_SM_PrSpecialAirNEndR0,
    ftKb_SM_PrSpecialAirNEndR1,
    ftKb_SM_PrSpecialNHit,
    ftKb_SM_MsSpecialNStart,
    ftKb_SM_MsSpecialNLoop,
    ftKb_SM_MsSpecialNEnd0,
    ftKb_SM_MsSpecialNEnd1,
    ftKb_SM_MsSpecialAirNStart,
    ftKb_SM_MsSpecialAirNLoop,
    ftKb_SM_MsSpecialAirNEnd0,
    ftKb_SM_MsSpecialAirNEnd1,
    ftKb_SM_MtSpecialNStart,
    ftKb_SM_MtSpecialNLoop,
    ftKb_SM_MtSpecialNLoopFull,
    ftKb_SM_MtSpecialNCancel,
    ftKb_SM_MtSpecialNEnd,
    ftKb_SM_MtSpecialAirNStart,
    ftKb_SM_MtSpecialAirNLoop,
    ftKb_SM_MtSpecialAirNLoopFull,
    ftKb_SM_MtSpecialAirNCancel,
    ftKb_SM_MtSpecialAirNEnd,
    ftKb_SM_GwSpecialN,
    ftKb_SM_GwSpecialAirN,
    ftKb_SM_DrSpecialN,
    ftKb_SM_DrSpecialAirN,
    ftKb_SM_ClSpecialNStart,
    ftKb_SM_ClSpecialNLoop,
    ftKb_SM_ClSpecialNEnd,
    ftKb_SM_ClSpecialAirNStart,
    ftKb_SM_ClSpecialAirNLoop,
    ftKb_SM_ClSpecialAirNEnd,
    ftKb_SM_FcSpecialNStart,
    ftKb_SM_FcSpecialNLoop,
    ftKb_SM_FcSpecialNEnd,
    ftKb_SM_FcSpecialAirNStart,
    ftKb_SM_FcSpecialAirNLoop,
    ftKb_SM_FcSpecialAirNEnd,
    ftKb_SM_PcSpecialN,
    ftKb_SM_PcSpecialAirN,
    ftKb_SM_GnSpecialN,
    ftKb_SM_GnSpecialAirN,
    ftKb_SM_FeSpecialNStart,
    ftKb_SM_FeSpecialNLoop,
    ftKb_SM_FeSpecialNEnd0,
    ftKb_SM_FeSpecialNEnd1,
    ftKb_SM_FeSpecialAirNStart,
    ftKb_SM_FeSpecialAirNLoop,
    ftKb_SM_FeSpecialAirNEnd0,
    ftKb_SM_FeSpecialAirNEnd1,
    ftKb_SM_GkSpecialNStart,
    ftKb_SM_GkSpecialN,
    ftKb_SM_GkSpecialNEnd,
    ftKb_SM_GkSpecialAirNStart,
    ftKb_SM_GkSpecialAirN,
    ftKb_SM_GkSpecialAirNEnd,
    ftKb_SM_Count,
    ftKb_SM_SelfCount = ftKb_SM_Count - ftCo_SM_Count,
} ftKb_Submotion;
/* 09CF84 */ void ftCo_8009CF84(Fighter* fp);
/* 09D074 */ void ftCo_8009D074(Fighter* fp);
/* 09D704 */ void ftCo_8009D704(Fighter* fp);
/* 09DC54 */ void ftCo_8009DC54(Fighter* fp);
/* 09E0A8 */ void ftCo_8009E0A8(HSD_GObj* gobj);
/* 09E0D4 */ void ftCo_UnloadDynamicBones(Fighter* fp);
/* 09E140 */ void ftCo_8009E140(Fighter* fp, bool);
/* 09E318 */ enum_t ftCo_8009E318(Fighter_GObj*, Fighter_Part, float);
/* 09E714 */ bool ftCo_8009E714(Fighter_GObj* gobj, Fighter_Part part,
                                int arg2, float x, float y, float arg5,
                                float arg6, float arg7);
/* 09E7B4 */ void ftCo_8009E7B4(Fighter* fp, u8 (*)[2]);
/* 09EAF8 */ void ftCo_8009EAF8(HSD_GObj* gobj);
/// @todo
/* 09D18C */ void ftCo_8009D18C(Fighter* fp);
/* 09D2A4 */ void ftCo_8009D2A4(Fighter* fp);
/* 09D3BC */ void ftCo_8009D3BC(Fighter* fp);
/* 09D4D4 */ void ftCo_8009D4D4(Fighter* fp);
/* 09D5EC */ void ftCo_8009D5EC(Fighter* fp);
/* 09D81C */ void ftCo_8009D81C(Fighter* fp);
/* 09D920 */ void ftCo_8009D920(Fighter* fp);
/* 09DA38 */ void ftCo_8009DA38(ftKb_Fighter* fp);
/* 09DB50 */ void ftCo_8009DB50(Fighter* fp);
#define GALE01_0860C4
/* 0860C4 */ s32 ftLib_800860C4(void);
/* 0860E8 */ bool ftLib_IsMasterHandPresent(void);
/* 086140 */ bool ftLib_IsCrazyHandPresent(void);
/* 086198 */ HSD_GObj* ftLib_80086198(HSD_GObj*);
/* 08627C */ HSD_GObj* ftLib_8008627C(Vec3* pos, HSD_GObj*);
/* 086368 */ Fighter_GObj* ftLib_80086368(Vec3*, Fighter_GObj*, float);
/* 0864A8 */ float ftLib_800864A8(Vec3*, HSD_GObj*);
/* 0865C0 */ float ftLib_800865C0(HSD_GObj*);
/* 0865CC */ s32 ftLib_800865CC(HSD_GObj*);
/* 0865D8 */ void ftLib_800865D8(HSD_GObj*, float*, float*);
/* 0865F0 */ HSD_JObj* ftLib_800865F0(HSD_GObj*);
/* 086630 */ HSD_JObj* ftLib_80086630(Fighter_GObj*, Fighter_Part part);
/* 086644 */ void ftLib_80086644(Fighter_GObj*, Vec3*);
/* 086664 */ void ftLib_80086664(HSD_GObj*, Vec3*);
/* 086684 */ void ftLib_80086684(HSD_GObj*, Vec3*);
/* 0866A4 */ void ftLib_SetScale(HSD_GObj*, float);
/* 0866DC */ void ftLib_800866DC(HSD_GObj*, Vec3*);
/* 086724 */ void ftLib_80086724(HSD_GObj*, HSD_GObj*);
/* 086764 */ void ftLib_80086764(HSD_GObj*);
/* 086794 */ HSD_GObj* ftLib_GetItem(HSD_GObj*);
/* 0867A0 */ bool ftLib_800867A0(HSD_GObj*, HSD_GObj*);
/* 0867CC */ HSD_GObj* ftLib_800867CC(HSD_GObj*);
/* 0867D8 */ bool ftLib_IsInputDisabled(HSD_GObj*);
/* 0867E8 */ void ftLib_DisableInput(HSD_GObj*);
/* 086824 */ void ftLib_DisableAllInput(void);
/* 08688C */ void ftLib_EnableInput(HSD_GObj*);
/* 0868A4 */ void ftLib_EnableAllInput(void);
/* 0868D4 */ bool ftLib_800868D4(HSD_GObj*, HSD_GObj*);
/// @returns @c true if @p gobj is a #Fighter, otherwise @c false.
/* 086960 */ bool ftLib_80086960(HSD_GObj* gobj);
/* 086984 */ CollData* ftLib_80086984(HSD_GObj*);
/* 086990 */ void ftLib_80086990(HSD_GObj*, Vec3*);
/* 0869D4 */ float ftLib_800869D4(HSD_GObj*);
/* 0869F8 */ float ftLib_800869F8(HSD_GObj*);
/* 086A0C */ float ftLib_80086A0C(HSD_GObj*);
/* 086A18 */ bool ftLib_80086A18(HSD_GObj*);
/* 086A4C */ void ftLib_80086A4C(HSD_GObj*, float);
/* 086A58 */ bool ftLib_80086A58(HSD_GObj*, S32Vec2*);
/* 086A8C */ bool ftLib_80086A8C(HSD_GObj*);
/* 086B64 */ bool ftLib_80086B64(HSD_GObj*);
/* 086B74 */ CmSubject* ftLib_80086B74(HSD_GObj*);
/* 086B80 */ float ftLib_80086B80(HSD_GObj*);
/* 086B90 */ void ftLib_80086B90(HSD_GObj*, Vec3* v);
/* 086BB4 */ bool ftLib_80086BB4(HSD_GObj*);
/* 086BE0 */ u8 ftLib_80086BE0(HSD_GObj*);
/* 086BEC */ void ftLib_80086BEC(HSD_GObj*, Vec3*);
/// @returns A fighter action state ID.
/* 086C0C */ enum_t ftLib_GetMotionId(HSD_GObj*);
/* 086C18 */ void ftLib_80086C18(HSD_GObj*, s32, s32);
/* 086C9C */ void ftLib_80086C9C(s32, s32);
/* 086D40 */ void ftLib_80086D40(HSD_GObj*, s32, s32);
/* 086DC4 */ void ftLib_80086DC4(s32, s32);
/* 086E68 */ void ftLib_80086E68(HSD_GObj*);
/* 086EB4 */ s32 ftLib_80086EB4(HSD_GObj*);
/* 086EC0 */ bool ftLib_80086EC0(HSD_GObj*);
/* 086ED0 */ bool ftLib_80086ED0(HSD_GObj*);
/* 086F4C */ bool ftLib_80086F4C(HSD_GObj*);
/* 086F80 */ float ftLib_80086F80(HSD_GObj*);
/* 086FA8 */ bool ftLib_80086FA8(HSD_GObj*);
/* 086FD4 */ bool ftLib_80086FD4(HSD_GObj*, HSD_GObj*);
/* 08701C */ bool ftLib_8008701C(HSD_GObj*);
/* 08702C */ void ftLib_8008702C(s32);
/* 087050 */ void ftLib_80087050(s32);
/* 087074 */ bool ftLib_80087074(HSD_GObj*, Vec3*);
/* 0870BC */ bool ftLib_800870BC(HSD_GObj*, GXColor*);
/* 0870F0 */ void ftLib_800870F0(HSD_GObj*, s32);
/* 087120 */ s32 ftLib_80087120(HSD_GObj*);
/* 087140 */ void ftLib_80087140(HSD_GObj*);
/* 0871A8 */ void ftLib_800871A8(Fighter_GObj*, Item_GObj*);
/* 087284 */ bool ftLib_80087284(HSD_GObj*);
/* 0872A4 */ FighterKind ftLib_GetKind(HSD_GObj*);
/* 0872B0 */ LbShadow* ftLib_800872B0(HSD_GObj*);
/* 0872BC */ bool ftLib_800872BC(HSD_GObj*);
/* 087300 */ s32 ftLib_80087300(HSD_GObj*);
/* 08730C */ s32 ftLib_8008730C(HSD_GObj*);
/* 08731C */ s32 ftLib_8008731C(HSD_GObj*);
/* 08732C */ bool ftLib_8008732C(HSD_GObj*);
/* 087354 */ bool ftLib_80087354(HSD_GObj*);
/* 08737C */ bool ftLib_8008737C(HSD_GObj*);
/* 0873A4 */ bool ftLib_800873A4(HSD_GObj*);
/* 0873CC */ bool ftLib_800873CC(HSD_GObj*);
/* 0873F4 */ bool ftLib_800873F4(HSD_GObj*);
/* 08741C */ HSD_GObj* ftLib_8008741C(u32);
/* 087454 */ float ftLib_80087454(HSD_GObj*);
/* 087460 */ u32 ftLib_80087460(HSD_GObj*);
/* 08746C */ s32 ftLib_8008746C(HSD_GObj*);
/* 0874BC */ s32 ftLib_800874BC(HSD_GObj*);
/* 0874CC */ void ftLib_800874CC(HSD_GObj*, void*, s32);
/* 087508 */ void ftLib_80087508(s8, u8);
/// /* 087508 */ void ftLib_80087508(FighterKind, u8);
/* 087574 */ void ftLib_80087574(s8);
/// /* 087574 */ void ftLib_80087574(FighterKind);
/* 087610 */ void ftLib_80087610(u8);
/* 0876B4 */ void ftLib_800876B4(HSD_GObj*);
/* 0876D4 */ bool ftLib_800876D4(HSD_GObj*);
/* 0876F4 */ s32 ftLib_800876F4(HSD_GObj*);
/* 087700 */ s32 ftLib_80087700(HSD_GObj*);
/* 08770C */ void ftLib_8008770C(HSD_GObj*, void* dst);
/* 087744 */ void ftLib_80087744(HSD_GObj*, void* dst);
/* 08777C */ float ftLib_8008777C(HSD_GObj*);
/* 0877D4 */ bool ftLib_800877D4(HSD_GObj*);
#define GALE01_0CDAB4
/* 0CDAB4 */ void ftCo_800CDAB4(Fighter_GObj*, int, int, float);
/* 0CDB14 */ void ftCo_LipstickSwing_Anim(Fighter_GObj* gobj);
/* 0CDB34 */ void ftCo_LipstickSwing_IASA(Fighter_GObj* gobj);
/* 0CDB54 */ void ftCo_LipstickSwing_Phys(Fighter_GObj* gobj);
/* 0CDB74 */ void ftCo_LipstickSwing_Coll(Fighter_GObj* gobj);
/* 0CDB9C */ void ft_800CDB9C(Fighter_GObj*);
#define GALE01_0BF260
/* 0BF260 */ void ftMaterial_800BF260(void);
/* 0BF2B8 */ void ftMaterial_800BF2B8(HSD_MObj* mobj, u32 rendermode,
                                      u32 unused);
/* 0BF534 */ HSD_TExp* ftMaterial_800BF534(Fighter* fp, HSD_MObj* mobj,
                                           HSD_TExp* texp, u32 rendermode);
/* 0BF6BC */ void ftMaterial_800BF6BC(Fighter* fp, HSD_MObj* mobj,
                                      HSD_TExp* texp);
/* 0BFB4C */ void ftMaterial_800BFB4C(Fighter_GObj* gobj, GXColor* diffuse);
/* 3C6980 */ extern HSD_MObjInfo ftMObj;
#define MELEE_FT_METAL_H
/* 0C8170 */ void ft_800C8170(Fighter* fp);
/* 0C8348 */ void ftCo_800C8348(Fighter_GObj*, int timer, int health);
/* 0C8438 */ void ftCo_800C8438(Fighter_GObj* gobj);
/* 0C8540 */ void ftCo_800C8540(Fighter_GObj* gobj);
/* 0C85B8 */ void ft_800C85B8(Fighter_GObj* gobj);
#define GALE01_0735BC
struct Fighter_804D6540_x0_t;
/* 0735BC */ void ftParts_JObjMakePositionMtx(HSD_JObj*, Mtx mtx, Mtx rmtx);
/* 073700 */ void ftParts_JObjInfoInit(void);
/* 073758 */ void ftParts_80073758(HSD_JObj*);
/* 073780 */ s32 ftParts_IntpJObjLoad(HSD_JObj*, HSD_Joint*, HSD_JObj* parent);
/* 0737D8 */ void ftParts_IntpJObjInfoInit(void);
/* 073830 */ void ftPartsSetupRigidMtx(HSD_PObj*, Mtx vmtx, Mtx pmtx,
                                       u32 rendermode);
/* 0739B8 */ void ftPartsSetupSharedVtxMtx(HSD_PObj*, Mtx vmtx, Mtx pmtx,
                                           u32 rendermode);
/* 073CA8 */ void ftPartsSetupEnvelopeMtx(HSD_PObj*, Mtx vmtx, Mtx pmtx,
                                          u32 rendermode);
/* 074048 */ void ftParts_PObjSetupMtx(HSD_PObj*, Mtx vmtx, Mtx pmtx,
                                       u32 rendermode);
/* 0740E4 */ void ftParts_PObjInfoInit(void);
/* 074148 */ void ftPartsPObjSetDefaultClass(void);
/* 074170 */ void ftPartsPObjClearDefaultClass(void);
/* 074194 */ void ftParts_80074194(Fighter*, FighterBone* bone, HSD_JObj*,
                                   int* dobj_index, u32 tree_depth);
/* 0743E0 */ void ftParts_SetupParts(Fighter_GObj* fighter_obj);
/* 0743E0 */ void func_800743E0(void);
/* 07462C */ void ftParts_8007462C(Fighter_GObj*);
/* 07482C */ HSD_JObj* ftParts_8007482C(HSD_Joint*);
/* 07487C */ void ftParts_8007487C(FtPartsDesc*, FtPartsVis*, u32 costume_id,
                                   DObjList*, DObjList*);
/* 0749CC */ void ftParts_800749CC(Fighter_GObj*);
/* 074A4C */ void ftParts_80074A4C(Fighter_GObj*, int model_idx, int val);
/* 074A74 */ int ftParts_80074A74(Fighter_GObj*, int model_idx);
/* 074A8C */ void ftParts_80074A8C(Fighter_GObj*);
/* 074ACC */ void ftParts_80074ACC(Fighter_GObj*);
/* 074B0C */ void ftParts_80074B0C(Fighter_GObj*, int model_idx, int val);
/* 074B6C */ void ftParts_80074B6C(Fighter*, FtPartsVis*, int, DObjList*);
/* 074CA0 */ void ftParts_80074CA0(FtPartsVis*, int, DObjList*);
/* 074D7C */ void ftParts_80074D7C(FtPartsVis*, int, DObjList*);
/* 074E58 */ void ftParts_80074E58(Fighter*);
/// Fighter_BonePersonalToCommon
/* 07500C */ Fighter_Part ftParts_GetBoneIndex(Fighter*, Fighter_Part);
/* 075028 */ int ftPartsRemap(size_t to_table_idx, size_t from_table_idx,
                              size_t joint_idx);
/// Upper bound on FighterPartsTable::parts_num; sizes fp->parts.
#define MAX_FT_PARTS 140
/* 07506C */ u32 ftParts_8007506C(FighterKind ftkind, int part);
/* 0750C8 */ void ftParts_800750C8(Fighter*, enum_t, bool);
/* 075240 */ HSD_TObj*
ftParts_80075240(DObjList*, int n); ///< finds the n-th TObj in a DObjList
/* 075304 */ void ftParts_80075304(u8, HSD_JObj*, HSD_JObj*);
/* 0753D4 */ void ftParts_800753D4(Fighter*, struct Fighter_804D6540_x0_t*,
                                   HSD_Joint*);
/* 0755E8 */ void ftParts_800755E8(Fighter*, struct Fighter_804D6540_x0_t*);
/* 075650 */ void ftParts_80075650(Fighter_GObj*, HSD_JObj*, struct DObjList*);
/* 07584C */ void ftParts_JObjSetRotation(HSD_JObj*, Quaternion*);
/* 07592C */ void ftPartSetRotX(Fighter*, int part_idx, f32 rotate_x);
/* 075AF0 */ void ftPartSetRotY(Fighter*, int part_idx, f32 rotate_y);
/* 075CB4 */ void ftPartSetRotZ(Fighter*, int part_idx, f32 rotate_z);
/// @returns Blend frames.
/* 075E78 */ float ftPartGetRotX(Fighter*, int part_idx);
/* 075F48 */ float ftPartGetRotZ(Fighter*, int part_idx);
#define GALE01_0CD82C
/* 0CD82C */ void ftCo_800CD82C(Fighter_GObj*, int, int, float);
/* 0CD88C */ void ftCo_StarRodSwing_Anim(Fighter_GObj* gobj);
/* 0CD8AC */ void ftCo_StarRodSwing_IASA(Fighter_GObj* gobj);
/* 0CD8CC */ void ftCo_StarRodSwing_Phys(Fighter_GObj* gobj);
/* 0CD8EC */ void ftCo_StarRodSwing_Coll(Fighter_GObj* gobj);
/* 0CD914 */ void ft_800CD914(Fighter_GObj*);
#define GALE01_0CCE94
/* 0CCE94 */ void ftCo_FallAerial_Coll(Fighter_GObj* gobj);
/* 0CCF58 */ void ftCo_Attack_800CCF58(Fighter_GObj* gobj, enum_t);
#define GALE01_0DFBF8
/* 0DFBF8 */ FtWalkType ftWalkCommon_GetWalkType(Fighter_GObj* gobj);
/* 0DFC70 */ bool ftWalkCommon_800DFC70(Fighter_GObj* gobj);
/* 0DFCA4 */ void ftWalkCommon_800DFCA4(
    Fighter_GObj* gobj, FtMotionId msid, MotionFlags ms_flags,
    float anim_start, float slow_anim_frame, float middle_anim_frame,
    float fast_anim_frame, float slow_anim_rate, float middle_anim_rate,
    float fast_anim_rate, float accel_mul);
/* 0DFDDC */ void ftWalkCommon_800DFDDC(Fighter_GObj* gobj);
/* 0DFEC8 */ void ftWalkCommon_800DFEC8(Fighter_GObj* gobj,
                                        void (*arg_cb)(Fighter_GObj*, float));
/* 0E0060 */ void ftWalkCommon_800E0060(Fighter_GObj* gobj);
#define GALE01_08169C
/* 08169C */ bool ftWallJump_8008169C(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FORWARD_H
#define MELEE_FT_CHARA_FTCLINK_FORWARD_H
static MotionFlags const ftCl_MF_Zair =
    Ft_MF_KeepFastFall | Ft_MF_SkipModel | Ft_MF_SkipAnimVel | Ft_MF_Unk06;
#define GALE01_148C64
/* 148C64 */ void ftCl_Init_OnDeath(Fighter_GObj* gobj);
/* 148CE4 */ void ftCl_Init_OnLoad(Fighter_GObj* gobj);
/* 148DC0 */ void ftCl_Init_OnItemPickup(Fighter_GObj* gobj, bool flag);
/* 148E34 */ void ftCl_Init_OnItemInvisible(Fighter_GObj* gobj);
/* 148E7C */ void ftCl_Init_OnItemVisible(Fighter_GObj* gobj);
/* 148EC4 */ void ftCl_Init_OnItemDrop(Fighter_GObj* gobj, bool flag);
/* 148F38 */ void ftCl_Init_OnItemPickupExt(Fighter_GObj* gobj, bool flag);
/* 149018 */ void ftCl_Init_OnItemDropExt(Fighter_GObj* gobj, bool flag);
/* 14906C */ void ftCl_Init_LoadSpecialAttrs(Fighter_GObj* gobj);
/* 14908C */ void ftCl_Init_OnKnockbackEnter(Fighter_GObj* gobj);
/* 1490D0 */ void ftCl_Init_OnKnockbackExit(Fighter_GObj* gobj);
/* 149114 */ void ftCl_Init_80149114(Fighter_GObj* gobj);
/* 14919C */ void ftCl_Init_8014919C(Fighter_GObj* gobj);
/* 14920C */ bool ftCl_Init_8014920C(Fighter_GObj* gobj);
/* 149268 */ void ftCl_Init_80149268(Fighter_GObj* gobj);
/* 1492C4 */ void ftCl_Init_801492C4(Fighter_GObj* gobj);
/* 1492F4 */ bool ftCl_Init_801492F4(Fighter_GObj* gobj);
/* 149318 */ void ftCl_Init_80149318(Fighter_GObj* gobj);
/* 3D0FA0 */ extern MotionState ftCl_Init_MotionStateTable[ftLk_MS_SelfCount];
/* 3D1240 */ extern char ftCl_Init_DatFilename[];
/* 3D124C */ extern char ftCl_Init_DataName[];
/* 3D13CC */ extern char ftCl_Init_AnimDatFilename[];
/* 3D1448 */ extern Fighter_DemoStrings ftCl_Init_DemoMotionFilenames;
/* 3D1458 */ extern Fighter_CostumeStrings ftCl_Init_CostumeStrings[];
/* 45A330 */ extern UnkCostumeStruct ftCl_CostumeList[5];
#define GALE01_149354
/* 149354 */ void ftCl_AppealS_Anim(HSD_GObj* gobj);
/* 14943C */ void ftCl_AppealS_IASA(HSD_GObj* gobj);
/* 14945C */ void ftCl_AppealS_Phys(HSD_GObj* gobj);
/* 14947C */ void ftCl_AppealS_Coll(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTCLINK_INLINES_H
#define GALE01_2C8B28
#define MELEE_IT_ITEMS_TYPES_H
#define MELEE_IT_ITEMS_FORWARD_H
typedef struct ItemLogicTable ItemLogicTable;
typedef struct ItemStateTable ItemStateTable;
typedef struct itSword_UnkArticle1 itSword_UnkArticle1;
typedef struct itSword_UnkBytes itSword_UnkBytes;
/// @todo Size unknown.
struct ItemStateTable {
    enum_t anim_id;
    HSD_GObjPredicate animated;
    HSD_GObjEvent physics_updated;
    HSD_GObjPredicate collided;
};
struct ItemLogicTable {
    ItemStateTable* states;
    HSD_GObjEvent spawned;
    HSD_GObjEvent destroyed;
    HSD_GObjEvent picked_up;
    HSD_GObjEvent dropped;
    HSD_GObjEvent thrown;
    HSD_GObjPredicate dmg_dealt;
    HSD_GObjPredicate dmg_received;
    HSD_GObjEvent entered_air;
    HSD_GObjPredicate reflected;
    HSD_GObjPredicate clanked;
    HSD_GObjPredicate absorbed;
    HSD_GObjPredicate shield_bounced;
    HSD_GObjPredicate hit_shield;
    HSD_GObjInteraction evt_unk;
};
struct itSword_UnkBytes {
    /*   +0 */ f32 x0;
    /*   +4 */ f32 x4;
    /*   +8 */ u8 x8;
    /*   +9 */ u8 x9;
    /*   +A */ u8 xA;
    /*   +B */ u8 xB;
    /*   +C */ u8 xC;
    /*   +D */ u8 xD;
    /*   +E */ u8 xE;
    /*   +F */ u8 xF;
    /*  +10 */ u8 x10;
};
struct itSword_UnkArticle1 {
    /*  +0 */ M2C_UNK x0;
    /*  +4 */ M2C_UNK x4;
    /*  +8 */ M2C_UNK x8;
    /*  +C */ float xC;
    /* +10 */ float x10;
    /* +14 */ float x14;
    /* +18 */ int x18;
    /* +1C */ itSword_UnkBytes x1C;
};
/* 2C8B28 */ HSD_GObj* it_802C8B28(Item_GObj*, Vec3*, u32, float);
/* 2C8C34 */ void it_802C8C34(Item_GObj*);
/* 2C8C74 */ void it_2725_Logic80_PickedUp(Item_GObj*);
/* 2C8CDC */ bool itClinkmilk_UnkMotion1_Anim(Item_GObj* gobj);
/* 2C8F20 */ void itClinkmilk_UnkMotion1_Phys(Item_GObj* gobj);
/* 2C8F24 */ bool itClinkmilk_UnkMotion1_Coll(Item_GObj* gobj);
/* 2C8F2C */ void itCLinkMilk_Logic80_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7A28 */ extern ItemStateTable it_803F7A28[];
static inline void checkFighter2244(HSD_GObj* gobj)
{
    Fighter* fp;
    if (gobj == 0L) {
        return;
    }
    fp = gobj->user_data;
    if (fp != 0L && fp->u.lk.x18 != 0L) {
        it_802C8C34(fp->u.lk.x18);
        fp->u.lk.x18 = 0L;
    }
    if (gobj == 0L) {
        gobj == 0L;
    }
}
#define GALE01_0E2888
/* 0E2888 */ void ftCa_Init_OnDeath(HSD_GObj* gobj);
/* 0E28C8 */ void ftCa_Init_800E28C8(HSD_GObj* gobj);
/* 0E28E8 */ void ftCa_Init_OnItemPickup(HSD_GObj* gobj, bool);
/* 0E29C8 */ void ftCa_Init_OnItemInvisible(HSD_GObj* gobj);
/* 0E2A10 */ void ftCa_Init_OnItemVisible(HSD_GObj* gobj);
/* 0E2A58 */ void ftCa_Init_OnItemDrop(HSD_GObj* gobj, bool);
/* 0E2AAC */ void ftCa_Init_OnLoadForGanon(Fighter*);
/* 0E2AEC */ void ftCa_Init_OnLoad(HSD_GObj* gobj);
/* 0E2B40 */ void ftCa_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 3C72B8 */ extern MotionState ftCa_Init_MotionStateTable[ftCa_MS_SelfCount];
/* 3C7598 */ extern char ftCa_Init_DatFilename[];
/* 3C75A4 */ extern char ftCa_Init_DataName[];
/* 3C76A0 */ extern char ftCa_Init_AnimDatFilename[];
/* 3C772C */ extern Fighter_DemoStrings ftCa_Init_DemoMotionFilenames;
/* 3C773C */ extern Fighter_CostumeStrings ftCa_Init_CostumeStrings[];
/* 459A98 */ extern UnkCostumeStruct ftCa_CostumeList[6];
#define GALE01_0E4040
/* 0E4354 */ void ftCa_SpecialHi_Anim(HSD_GObj* gobj);
/* 0E49DC */ void ftCa_SpecialHiThrow1_Coll(HSD_GObj* gobj);
/* 0E4A78 */ void ftCa_SpecialHi_Enter(HSD_GObj* gobj);
/* 0E4B60 */ void ftCa_SpecialHi_IASA(HSD_GObj* gobj);
/* 0E4BF8 */ void ftCa_SpecialHi_Phys(HSD_GObj* gobj);
/* 0E4CF4 */ void ftCa_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 0E4E1C */ void ftCa_SpecialHi_Coll(HSD_GObj* gobj);
/* 0E4EE8 */ void ftCa_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 0E4F48 */ void ftCa_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 0E4FDC */ void ftCa_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 0E50D8 */ void ftCa_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 0E51F8 */ void ftCa_SpecialHiCatch_Anim(HSD_GObj* gobj);
/* 0E5234 */ void ftCa_SpecialHiCatch_IASA(HSD_GObj* gobj);
/* 0E5238 */ void ftCa_SpecialHiCatch_Phys(HSD_GObj* gobj);
/* 0E523C */ void ftCa_SpecialHiCatch_Coll(HSD_GObj* gobj);
/* 0E5310 */ void ftCa_SpecialHiThrow0_Anim(HSD_GObj* gobj);
/* 0E5384 */ void ftCa_SpecialHiThrow0_IASA(HSD_GObj* gobj);
/* 0E5388 */ void ftCa_SpecialHiThrow0_Phys(HSD_GObj* gobj);
/* 0E54B8 */ void ftCa_SpecialHiThrow0_Coll(HSD_GObj* gobj);
#define GALE01_0E415C
/* 0E3EAC */ void ftCa_SpecialHi_800E3EAC(HSD_GObj* gobj);
/* 0E4040 */ void ftCa_SpecialLw_Enter(HSD_GObj* gobj);
/* 0E40D8 */ void ftCa_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 0E415C */ void ftCa_SpecialLw_Anim(HSD_GObj* gobj);
/* 0E4268 */ void ftCa_SpecialLwEnd_Anim(HSD_GObj* gobj);
/* 0E42A4 */ void ftCa_SpecialLwEndAir_Anim(HSD_GObj* gobj);
/* 0E42E0 */ void ftCa_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 0E4354 */ void ftCa_SpecialAirLwEnd_Anim(HSD_GObj* gobj);
/* 0E4390 */ void ftCa_SpecialAirLwEndAir_Anim(HSD_GObj* gobj);
/* 0E43CC */ void ftCa_SpecialHiThrow1_Anim(HSD_GObj* gobj);
/* 0E4408 */ void ftCa_SpecialLw_Phys(HSD_GObj* gobj);
/* 0E449C */ void ftCa_SpecialLwEnd_Phys(HSD_GObj* gobj);
/* 0E455C */ void ftCa_SpecialLwEndAir_Phys(HSD_GObj* gobj);
/* 0E45E4 */ void ftCa_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 0E4618 */ void ftCa_SpecialAirLwEnd_Phys(HSD_GObj* gobj);
/* 0E4678 */ void ftCa_SpecialAirLwEndAir_Phys(HSD_GObj* gobj);
/* 0E4698 */ void ftCa_SpecialHiThrow1_Phys(HSD_GObj* gobj);
/* 0E46B8 */ void ftCa_SpecialLw_Coll(HSD_GObj* gobj);
/* 0E47B0 */ void ftCa_SpecialLwEnd_Coll(HSD_GObj* gobj);
/* 0E4838 */ void ftCa_SpecialLwEndAir_Coll(HSD_GObj* gobj);
/* 0E48BC */ void ftCa_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 0E493C */ void ftCa_SpecialAirLwEnd_Coll(HSD_GObj* gobj);
/* 0E495C */ void ftCa_SpecialAirLwEndAir_Coll(HSD_GObj* gobj);
/// @file
/// Neutral Special - Falcon/Warlock Punch (SpecialN)
#define GALE01_0E2B80
/* 0E2B80 */ void ftCa_SpecialN_Enter(HSD_GObj* gobj);
/* 0E2C00 */ void ftCa_SpecialAirN_Enter(HSD_GObj* gobj);
/* 0E2C80 */ void ftCa_SpecialN_Anim(HSD_GObj* gobj);
/* 0E2D5C */ void ftCa_SpecialAirN_Anim(HSD_GObj* gobj);
/* 0E2E38 */ void ftCa_SpecialN_IASA(HSD_GObj* gobj);
/* 0E2E3C */ void ftCa_SpecialAirN_IASA(HSD_GObj* gobj);
/* 0E2F2C */ void ftCa_SpecialN_Phys(HSD_GObj* gobj);
/* 0E3018 */ void ftCa_SpecialAirN_Phys(HSD_GObj* gobj);
/* 0E3168 */ void ftCa_SpecialN_Coll(HSD_GObj* gobj);
/* 0E31F4 */ void ftCa_SpecialAirN_Coll(HSD_GObj* gobj);
/**
 * @file
 * @brief Captain Falcon & Ganondorf's Side Special - Raptor Boost / Gerudo
 * Dragon (SpecialS)
 */
#define GALE01_0E3278
/// Remove all GFX and set GFX flags to @c false.
/* 0E3278 */ void ftCa_SpecialS_RemoveGFX(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost/Gerudo Dragon Start Action
 * State handler.
 */
/* 0E32B0 */ void ftCa_SpecialS_Enter(HSD_GObj* gobj);
/* 0E33E0 */ void ftCa_SpecialAirS_Enter(HSD_GObj* gobj);
/// Captain Falcon & Ganondorf's Raptor Boost / Gerudo Dragon Detect function.
/* 0E350C */ void ftCa_SpecialS_OnDetect(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Start
 * Animation callback.
 */
/* 0E384C */ void ftCa_SpecialSStart_Anim(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Hit
 * Animation callback.
 */
/* 0E3888 */ void ftCa_SpecialS_Anim(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Start
 * Animation callback.
 */
/* 0E3964 */ void ftCa_SpecialAirSStart_Anim(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Hit
 * Animation callback.
 */
/* 0E39F0 */ void ftCa_SpecialAirS_Anim(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Start
 * IASA callback.
 */
/* 0E3B0C */ void ftCa_SpecialSStart_IASA(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Hit IASA
 * callback.
 */
/* 0E3B10 */ void ftCa_SpecialS_IASA(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Start IASA
 * callback.
 */
/* 0E3B14 */ void ftCa_SpecialAirSStart_IASA(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Hit IASA
 * callback.
 */
/* 0E3B18 */ void ftCa_SpecialAirS_IASA(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Start
 * Physics callback.
 */
/* 0E3B1C */ void ftCa_SpecialSStart_Phys(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Hit
 * Physics callback.
 */
/* 0E3B3C */ void ftCa_SpecialS_Phys(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost/Gerudo Dragon Start
 * Motion State handler.
 */
/* 0E3B5C */ void ftCa_SpecialAirSStart_Phys(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Hit Physics
 * callback
 */
/* 0E3BD0 */ void ftCa_SpecialAirS_Phys(HSD_GObj* gobj);
/* 0E3C38 */ void ftCa_SpecialSStart_Coll(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's grounded Raptor Boost / Gerudo Dragon Hit
 * Collision callback
 */
/* 0E3D44 */ void ftCa_SpecialS_Coll(HSD_GObj* gobj);
/**
 * Captain Falcon & Ganondorf's aerial Raptor Boost / Gerudo Dragon Start
 * Collision callback
 */
/* 0E3DE4 */ void ftCa_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 0E3E40 */ void ftCa_SpecialAirS_Coll(HSD_GObj* gobj);
#define GALE01_09C4F8
/* 09C4F8 */ bool ftCo_8009C4F8(Fighter_GObj* gobj);
#define GALE01_09F480
/* 09F4A4 */ void ftCo_8009F4A4(void);
/* 09F578 */ void ftCo_8009F578(Fighter* fp);
/* 09F5AC */ void ftCo_8009F5AC(Fighter*);
/* 09F75C */ void ftCo_8009F75C(Fighter* fp, bool set_alpha);
/* 09F7F8 */ void ftCo_8009F7F8(Fighter*);
#define GALE01_09F7F8
/* 09F834 */ void ftCo_8009F834(Fighter_GObj*, int, Fighter_Part, int, int,
                                Vec3*, Vec3*, float);
/* 0A0098 */ void ftCo_800A0098(Fighter* fp);
#define GALE01_0A0148
struct _m2c_stack_ftCo_800A3554 {
    /* 0x00 */ char pad_0[0x10];
    /* 0x10 */ f32 f;
    /* 0x14 */ Vec3 vec;
    /* 0x20 */ char pad_20[0x18];
}; /* size = 0x38 */
/* 09D4F0 */ void ftCo_800A05F4(Fighter* fp);
/* 09D694 */ void ftCo_800A0798(Fighter* fp);
/* 09DB88 */ void ftCo_800A0C8C(Fighter* fp);
/* 09DCA0 */ void ftCo_800A0DA4(Fighter* fp);
/* 09DEAC */ bool ftCo_800A0FB0(Vec3* vec_out, int* line_id_out,
                                u32* flags_out, Vec3* normal_out, int arg4,
                                int arg5, int arg6, float arg7, float arg8,
                                float arg9, float arg10, float arg11);
/* 09DF18 */ void ftCo_800A101C(Fighter*, int, int, int);
/* 09E6E0 */ float ftCo_GetCpuLStickX(Fighter* fp);
/* 09E770 */ float ftCo_GetCpuLStickY(Fighter* fp);
/* 09E800 */ float ftCo_GetCpuLTrigger(Fighter* fp);
/* 09E844 */ float ftCo_GetCpuRTrigger(Fighter* fp);
/* 09E888 */ HSD_Pad ftCo_GetCpuButtons(Fighter* fp);
/* 09E890 */ float ftCo_GetCpuCStickX(Fighter* fp);
/* 09E920 */ float ftCo_GetCpuCStickY(Fighter* fp);
/* 09F06C */ bool ftCo_800A2170(Fighter* fp0, Fighter* fp1);
/* 09F7CC */ bool ftCo_800A28D0(Fighter* fp, float arg1);
/* 09F894 */ bool ftCo_800A2998(Fighter* fp, float arg1);
/* 09F96C */ float ftCo_800A2A70(Fighter* fp, bool);
/* 09FAD0 */ bool ftCo_800A2BD4(Fighter* fp);
/* 09FB04 */ bool ftCo_800A2C08(Fighter* fp);
/* 0A0030 */ enum_t ftCo_800A3134(Fighter* fp);
/* 0A007C */ bool ftCo_IsGrabbing(Fighter* fp);
/* 0A00FC */ bool ftCo_800A3200(Fighter* fp);
/* 0A0740 */ bool ftCo_IsAlly(Fighter* fp0, Fighter* fp1);
/* 0A193C */ Fighter* ftCo_800A4A40(Fighter* fp);
/* 0A1AB4 */ float ftCo_800A1AB4(Fighter* fp0, Fighter* fp1);
/* 0A1BA8 */ bool ftCo_800A1BA8(Fighter* fp);
/* 0A1C44 */ bool ftCo_800A1C44(Fighter* fp);
/* 0A1CA8 */ bool ftCo_800A1CA8(Fighter* fp);
/* 0A1D88 */ Fighter* ftCo_800A4E8C(Fighter*, Vec3*);
/* 0A2040 */ bool ftCo_IsCpuControlled(Fighter* fp);
/* 0A2804 */ bool ftCo_800A5908(Item* ip);
/* 0A287C */ bool ftCo_800A5980(Fighter* fp);
/* 0A28BC */ bool ftCo_800A59C0(Item* ip);
/* 0A28E0 */ bool ftCo_800A59E4(Item* ip);
/* 0A2924 */ bool ftCo_800A5A28(Item* ip);
/* 0A41F4 */ bool ftCo_800B395C(Fighter_GObj* gobj, int);
/* 0A5A5C */ bool ftCo_800A5A5C(Item* ip);
/* 0A5A90 */ bool ftCo_800A5A90(Fighter* fp);
/* 0B07FC */ void ftCo_800B3900(Fighter_GObj* gobj);
/* 0B0858 */ void ftCo_800B3958(void);
#define GALE01_0C3598
/* 0C3598 */ void ftCo_800C3598(Fighter_GObj* gobj);
/* 0C36DC */ void ftCo_800C36DC(Fighter_GObj* gobj);
/* 0C37A0 */ void ftCo_800C37A0(Fighter_GObj* gobj);
#define GALE01_0C60C8
/* 0C60C8 */ bool ftCo_800C60C8(Fighter_GObj* gobj);
/* 0C6110 */ void ftCo_800C6110(Fighter_GObj* gobj);
#define GALE01_0C3A14
/* 0C3A14 */ bool ftCo_800C3A14(Fighter_GObj* gobj);
/* 0C3B10 */ bool ftCo_800C3B10(Fighter_GObj* gobj);
/* 0C3BE8 */ void ftCo_800C3BE8(Fighter_GObj* gobj);
/* 0C3CC0 */ void ftCo_800C3CC0(Fighter_GObj* gobj);
/* 0C3D6C */ void ftCo_AirCatch_Anim(Fighter_GObj* gobj);
/* 0C4380 */ void ftCo_AirCatchHit_Anim(Fighter_GObj* gobj);
/* 0C4384 */ void ftCo_AirCatch_IASA(Fighter_GObj* gobj);
/* 0C4388 */ void ftCo_AirCatchHit_IASA(Fighter_GObj* gobj);
/* 0C438C */ void ftCo_AirCatch_Phys(Fighter_GObj* gobj);
/* 0C4438 */ void ftCo_AirCatchHit_Phys(Fighter_GObj* gobj);
/* 0C447C */ void ftCo_AirCatch_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_APPEALS_H
/* 0DE9B8 */ bool ftCo_800DE9B8(Fighter_GObj* gobj);
/* 0DE9D8 */ bool ftCo_800DE9D8(Fighter_GObj* gobj);
/* 0DEA28 */ void ftCo_800DEA28(Fighter_GObj* gobj);
/// @todo enum params
/* 0DEAE8 */ void ftCo_800DEAE8(Fighter_GObj* gobj, FtMotionId msid0,
                                FtMotionId msid1);
/* 0DEBD0 */ void ftCo_800DEBD0(Fighter_GObj* gobj);
/* 0DECF4 */ void ftCo_AppealS_Anim(Fighter_GObj* gobj);
/* 0DED30 */ void ftCo_AppealS_IASA(Fighter_GObj* gobj);
/* 0DEE44 */ void ftCo_AppealS_Phys(Fighter_GObj* gobj);
/* 0DEE64 */ void ftCo_AppealS_Coll(Fighter_GObj* gobj);
#define GALE01_08A9F8
/* 08A9F8 */ bool ftCo_Attack1_CheckInput(Fighter_GObj* gobj);
/* 08AC9C */ void ftCo_Attack11_Anim(Fighter_GObj* gobj);
/* 08ACD8 */ void ftCo_Attack11_IASA(Fighter_GObj* gobj);
/* 08ADF0 */ void ftCo_Attack11_Phys(Fighter_GObj* gobj);
/* 08AE10 */ void ftCo_Attack11_Coll(Fighter_GObj* gobj);
/* 08B040 */ void ftCo_Attack12_Anim(Fighter_GObj* gobj);
/* 08B07C */ void ftCo_Attack12_IASA(Fighter_GObj* gobj);
/* 08B354 */ void ftCo_Attack13_Anim(Fighter_GObj* gobj);
/* 08B390 */ void ftCo_Attack13_IASA(Fighter_GObj* gobj);
#define GALE01_0D67C4
/* 0D67C4 */ bool ftCo_800D67C4(Fighter*);
/* 0D6824 */ bool ftCo_800D6824(Fighter_GObj*);
/* 0D688C */ bool ftCo_800D688C(Fighter*);
/* 0D68C0 */ bool ftCo_800D68C0(Fighter_GObj* gobj);
/* 0D6928 */ bool ftCo_800D6928(Fighter*);
/* 0D695C */ bool ftCo_Attack100_CheckInput(Fighter_GObj* gobj);
/* 0D69C4 */ bool ftCo_800D69C4(Fighter_GObj* gobj);
/* 0D6A50 */ bool ftCo_Attack_800D6A50(Fighter_GObj* gobj);
/* 0D6AC4 */ void fn_800D6AC4(Fighter_GObj*);
/* 0D6B00 */ void ftCo_800D6B00(Fighter_GObj*, enum_t msid);
/* 0D6B8C */ void fn_800D6B8C(Fighter_GObj*);
/* 0D6C0C */ void ftCo_Attack100Start_Anim(Fighter_GObj* gobj);
/* 0D6C60 */ void ftCo_800D6C60(Fighter_GObj*, HSD_GObjEvent callback);
/* 0D6D48 */ void ftCo_Attack100Loop_Anim(Fighter_GObj* gobj);
/* 0D6E34 */ void ftCo_Attack100End_Anim(Fighter_GObj* gobj);
/* 0D6E70 */ void ftCo_Attack100Loop_IASA(Fighter_GObj* gobj);
/* 0D6E98 */ void ftCo_Attack100Start_Phys(Fighter_GObj* gobj);
/* 0D6EB8 */ void ftCo_Attack100Loop_Phys(Fighter_GObj* gobj);
/* 0D6ED8 */ void ftCo_Attack100End_Phys(Fighter_GObj* gobj);
/* 0D6EF8 */ void ftCo_Attack100Start_Coll(Fighter_GObj* gobj);
/* 0D6F18 */ void ftCo_Attack100Loop_Coll(Fighter_GObj* gobj);
/* 0D6F38 */ void ftCo_Attack100End_Coll(Fighter_GObj* gobj);
/* 0D6F58 */ void fn_800D6F58(Fighter_GObj* gobj, Item_GObj* item_gobj);
/* 0D705C */ bool ftCo_800D705C(Fighter_GObj* gobj);
/* 0D7100 */ bool ftCo_800D7100(Fighter_GObj* gobj);
/* 0D71D8 */ void ftCo_800D71D8(Fighter_GObj* gobj);
/* 0D7268 */ s32 ftCo_800D7268(Fighter* fp);
/* 0D72A0 */ bool ftCo_800D72A0(Fighter* fp);
/* 0D730C */ bool ftCo_800D730C(Fighter_GObj* gobj, bool);
/* 0D74A4 */ void ftCo_800D74A4(Fighter_GObj* gobj);
/* 0D7590 */ void ftCo_JumpAerialF1_Anim(Fighter_GObj* gobj);
/* 0D7614 */ void ftCo_JumpAerialF1_IASA(Fighter_GObj* gobj);
/* 0D7634 */ void ftCo_JumpAerialF1_Phys(Fighter_GObj* gobj);
/* 0D767C */ void ftCo_JumpAerialF1_Coll(Fighter_GObj* gobj);
/* 0D76B8 */ void ft_800D76B8(Fighter_GObj*);
/* 0D7770 */ void ft_800D7770(Fighter_GObj*);
/* 0D7830 */ void fn_800D7830(Fighter_GObj* gobj);
/* 0D78B0 */ void fn_800D78B0(Fighter_GObj* gobj);
/* 0D7938 */ void fn_800D7938(Fighter_GObj* gobj);
/* 0D79AC */ void ftCo_ItemScopeStart_Anim(Fighter_GObj* gobj);
/* 0D79B0 */ void ftCo_ItemScopeAirStart_Anim(Fighter_GObj* gobj);
/* 0D79B4 */ void fn_800D79B4(Fighter_GObj*, void (*)(Fighter_GObj*),
                              void (*)(Fighter_GObj*, int));
/* 0D7AEC */ void ftCo_ItemScopeStart_IASA(Fighter_GObj* gobj);
/* 0D7B1C */ void ftCo_ItemScopeAirStart_IASA(Fighter_GObj* gobj);
/* 0D7B4C */ void ftCo_ItemScopeStart_Phys(Fighter_GObj* gobj);
/* 0D7B6C */ void ftCo_ItemScopeAirStart_Phys(Fighter_GObj* gobj);
/* 0D7B8C */ void ftCo_ItemScopeStart_Coll(Fighter_GObj* gobj);
/* 0D7BB4 */ void ftCo_ItemScopeAirStart_Coll(Fighter_GObj* gobj);
/* 0D7BDC */ void fn_800D7BDC(Fighter_GObj*);
/* 0D7C60 */ void fn_800D7C60(Fighter_GObj*);
/* 0D7CEC */ void fn_800D7CEC(Fighter_GObj* gobj);
/* 0D7D70 */ void fn_800D7D70(Fighter_GObj* gobj);
/* 0D7DFC */ void ftCo_ItemScopeRapid_Anim(Fighter_GObj* gobj);
/* 0D7F10 */ void ftCo_ItemScopeAirRapid_Anim(Fighter_GObj* gobj);
/* 0D8024 */ void ftCo_ItemScopeRapid_IASA(Fighter_GObj* gobj);
/* 0D8044 */ void ftCo_ItemScopeAirRapid_IASA(Fighter_GObj* gobj);
/* 0D8064 */ void ftCo_ItemScopeRapid_Phys(Fighter_GObj* gobj);
/* 0D8084 */ void ftCo_ItemScopeAirRapid_Phys(Fighter_GObj* gobj);
/* 0D80A4 */ void ftCo_ItemScopeRapid_Coll(Fighter_GObj* gobj);
/* 0D80CC */ void ftCo_ItemScopeAirRapid_Coll(Fighter_GObj* gobj);
/* 0D80F4 */ void fn_800D80F4(Fighter_GObj* gobj);
/* 0D8140 */ void fn_800D8140(Fighter_GObj*, int);
/* 0D81D0 */ void fn_800D81D0(Fighter_GObj*, int);
/* 0D8268 */ void fn_800D8268(Fighter_GObj* gobj);
/* 0D82EC */ void fn_800D82EC(Fighter_GObj* gobj);
/* 0D8378 */ void fn_800D8378(Fighter_GObj* gobj);
/* 0D83AC */ void ftCo_ItemScopeFire_Anim(Fighter_GObj* gobj);
/* 0D83F4 */ void ftCo_ItemScopeAirFire_Anim(Fighter_GObj* gobj);
/* 0D843C */ void ftCo_ItemScopeFire_IASA(Fighter_GObj* gobj);
/* 0D8440 */ void ftCo_ItemScopeAirFire_IASA(Fighter_GObj* gobj);
/* 0D8444 */ void ftCo_ItemScopeFire_Phys(Fighter_GObj* gobj);
/* 0D8464 */ void ftCo_ItemScopeAirFire_Phys(Fighter_GObj* gobj);
/* 0D8484 */ void ftCo_ItemScopeFire_Coll(Fighter_GObj* gobj);
/* 0D84AC */ void ftCo_ItemScopeAirFire_Coll(Fighter_GObj* gobj);
/* 0D86B8 */ void fn_800D86B8(Fighter_GObj* gobj);
/* 0D86E0 */ void fn_800D86E0(Fighter_GObj* gobj);
/* 0D874C */ void fn_800D874C(Fighter_GObj* gobj);
/* 0D87C0 */ void fn_800D87C0(Fighter_GObj* gobj);
/* 0D8838 */ void fn_800D8838(Fighter_GObj* gobj);
/* 0D88B8 */ void ftCo_ItemScopeEnd_Anim(Fighter_GObj* gobj);
/* 0D88D8 */ void ftCo_ItemScopeAirEnd_Anim(Fighter_GObj* gobj);
/* 0D88F8 */ void ftCo_ItemScopeEnd_IASA(Fighter_GObj* gobj);
/* 0D88FC */ void ftCo_ItemScopeAirEnd_IASA(Fighter_GObj* gobj);
/* 0D8900 */ void ftCo_ItemScopeEnd_Phys(Fighter_GObj* gobj);
/* 0D8920 */ void ftCo_ItemScopeAirEnd_Phys(Fighter_GObj* gobj);
/* 0D8940 */ void ftCo_ItemScopeEnd_Coll(Fighter_GObj* gobj);
/* 0D8968 */ void ftCo_ItemScopeAirEnd_Coll(Fighter_GObj* gobj);
/* 0D8990 */ bool ftCo_Catch_CheckInput(Fighter_GObj* gobj);
/* 0D8A38 */ bool ftCo_800D8A38(Fighter_GObj* gobj);
/* 0D8AE0 */ bool ftCo_800D8AE0(Fighter_GObj* gobj);
/* 0D8B9C */ bool ftCo_800D8B9C(Fighter_GObj* gobj);
/* 0D8C54 */ void ftCo_800D8C54(Fighter_GObj* gobj, FtMotionId);
/* 0D8CC8 */ void ftCo_Catch_Anim(Fighter_GObj* gobj);
/* 0D8D24 */ void ftCo_CatchDash_Anim(Fighter_GObj* gobj);
/* 0D8D80 */ void ftCo_Catch_IASA(Fighter_GObj* gobj);
/* 0D8D84 */ void ftCo_CatchDash_IASA(Fighter_GObj* gobj);
/* 0D8D88 */ void ftCo_Catch_Phys(Fighter_GObj* gobj);
/* 0D8DD0 */ void ftCo_CatchDash_Phys(Fighter_GObj* gobj);
/* 0D8E08 */ void ftCo_Catch_Coll(Fighter_GObj* gobj);
/* 0D8E30 */ void fn_800D8E30(Fighter_GObj* gobj);
/* 0D8E6C */ void ftCo_CatchDash_Coll(Fighter_GObj* gobj);
/* 0D8E94 */ bool fn_800D8E94(Fighter_GObj* gobj);
/* 0D8EC8 */ bool fn_800D8EC8(Fighter_GObj*);
/* 0D9228 */ bool fn_800D9228(Fighter_GObj*);
void fn_800D949C(Fighter_GObj* gobj);
/* 0D94D8 */ void ftCo_800D94D8(Fighter_GObj* gobj);
/* 0D952C */ bool fn_800D952C(Fighter_GObj* gobj);
/* 0D9558 */ bool fn_800D9558(Fighter_GObj*);
/* 0D9930 */ bool fn_800D9930(Fighter_GObj*);
void fn_800D9C64(Fighter_GObj* gobj);
/* 0D9C98 */ void ftCo_800D9C98(Fighter_GObj* gobj);
/* 0D9E80 */ void ftCo_CatchPull_Anim(Fighter_GObj* gobj);
/* 0D9F90 */ void ftCo_CatchPull_IASA(Fighter_GObj* gobj);
/* 0D9F94 */ void ftCo_CatchPull_Phys(Fighter_GObj* gobj);
/* 0D9FDC */ void ftCo_CatchPull_Coll(Fighter_GObj* gobj);
/* 0DA004 */ void fn_800DA004(Fighter_GObj* gobj);
/* 0DA190 */ void fn_800DA190(Fighter_GObj* gobj);
/* 0DA1D8 */ void fn_800DA1D8(Fighter_GObj* gobj);
/* 0DA2B0 */ void fn_800DA2B0(Fighter_GObj*);
/* 0DA318 */ void ftCo_CatchWait_Anim(Fighter_GObj* gobj);
/* 0DA31C */ void ftCo_CatchWait_IASA(Fighter_GObj* gobj);
/* 0DA3D0 */ void ftCo_CatchWait_Phys(Fighter_GObj* gobj);
/* 0DA418 */ void ftCo_CatchWait_Coll(Fighter_GObj* gobj);
/* 0DA440 */ void fn_800DA440(Fighter_GObj* gobj);
/* 0DA490 */ void fn_800DA490(Fighter_GObj* gobj);
/* 0DA4A0*/ void fn_800DA4A0(Fighter_GObj* gobj);
/* 0DA4C0 */ bool fn_800DA4C0(Fighter_GObj*);
/* 0DA4FC */ void fn_800DA4FC(Fighter_GObj*);
/* 0DA568 */ void ftCo_CatchAttack_Anim(Fighter_GObj* gobj);
/* 0DA5A4 */ void ftCo_CatchAttack_IASA(Fighter_GObj* gobj);
/* 0DA5A8 */ void ftCo_CatchAttack_Phys(Fighter_GObj* gobj);
/* 0DA5F0 */ void ftCo_CatchAttack_Coll(Fighter_GObj* gobj);
/* 0DA618 */ void fn_800DA618(Fighter_GObj* gobj);
/* 0DA668 */ void fn_800DA668(Fighter_GObj* gobj);
/* 0DA678 */ void fn_800DA678(Fighter_GObj*);
/* 0DA698 */ void ftCo_800DA698(Fighter_GObj* gobj, bool);
/* 0DA744 */ void ftCo_CatchCut_Anim(Fighter_GObj* gobj);
/* 0DA780 */ void ftCo_CatchCut_IASA(Fighter_GObj* gobj);
/* 0DA784 */ void ftCo_CatchCut_Phys(Fighter_GObj* gobj);
/* 0DA7E4 */ void ftCo_CatchCut_Coll(Fighter_GObj* gobj);
/* 0DA824 */ float ftCo_800DA824(Fighter*);
/* 0DA8E4 */ void fn_800DA8E4(Fighter_GObj* arg0, Fighter_GObj* arg1,
                              s32 arg2);
/* 0DAA40 */ void fn_800DAA40(Fighter_GObj*, Fighter_GObj*);
/* 0DAC70 */ void ftCo_CapturePulledHi_Anim(Fighter_GObj* gobj);
/* 0DAC74 */ void ftCo_CapturePulledHi_IASA(Fighter_GObj* gobj);
/* 0DAC78 */ void fn_800DAC78(Fighter_GObj*, Vec3*);
/* 0DADE8 */ void ftCo_CapturePulledHi_Phys(Fighter_GObj* gobj);
/* 0DAE94 */ void ftCo_CapturePulledHi_Coll(Fighter_GObj* gobj);
/* 0DB004 */ void ftCo_CapturePulledLw_Anim(Fighter_GObj* gobj);
/* 0DB008 */ void ftCo_CapturePulledLw_IASA(Fighter_GObj* gobj);
/* 0DB00C */ void ftCo_CapturePulledLw_Phys(Fighter_GObj* gobj);
/* 0DB1F8 */ void ftCo_CapturePulledLw_Coll(Fighter_GObj* gobj);
/* 0DB368 */ void ftCo_800DB368(Fighter*, Fighter*);
/* 0DB464 */ void ftCo_800DB464(Fighter_GObj* gobj);
/* 0DB500 */ void ftCo_800DB500(Fighter_GObj*);
/* 0DB6C8 */ void fn_800DB6C8(Fighter_GObj* gobj);
/* 0DB790 */ void fn_800DB790(Fighter_GObj*);
/* 0DB8A4 */ void fn_800DB8A4(Fighter_GObj*);
/* 0DB908 */ void ftCo_CaptureWaitHi_Anim(Fighter_GObj* gobj);
/* 0DBA4C */ void ftCo_CaptureWaitHi_IASA(Fighter_GObj* gobj);
/* 0DBA6C */ void ftCo_CaptureWaitHi_Phys(Fighter_GObj* gobj);
/* 0DBA8C */ void ftCo_CaptureWaitHi_Coll(Fighter_GObj* gobj);
/* 0DBAC4 */ void fn_800DBAC4(Fighter_GObj* gobj);
/* 0DBAE4 */ void fn_800DBAE4(Fighter_GObj*);
/* 0DBD10 */ void ftCo_CaptureWaitLw_Anim(Fighter_GObj* gobj);
/* 0DBD30 */ void ftCo_CaptureWaitLw_IASA(Fighter_GObj* gobj);
/* 0DBD50 */ void ftCo_CaptureWaitLw_Phys(Fighter_GObj* gobj);
/* 0DBE9C */ void ftCo_CaptureWaitLw_Coll(Fighter_GObj* gobj);
/* 0DBED4 */ void fn_800DBED4(Fighter_GObj* gobj);
/* 0DC014 */ void fn_800DC014(Fighter_GObj* gobj);
/* 0DC044 */ bool fn_800DC044(Fighter_GObj* gobj);
/* 0DC070 */ void fn_800DC070(Fighter_GObj* gobj);
/* 0DC110 */ void ftCo_CaptureJump_Anim(Fighter_GObj* gobj);
/* 0DC160 */ void ftCo_CaptureJump_IASA(Fighter_GObj* gobj);
/* 0DC224 */ void ftCo_CaptureJump_Phys(Fighter_GObj* gobj);
/* 0DC264 */ void ftCo_CaptureJump_Coll(Fighter_GObj* gobj);
/* 0DC284 */ void ftCo_800DC284(Fighter_GObj* gobj);
/* 0DC2E4 */ void ftCo_CaptureDamageHi_Anim(Fighter_GObj* gobj);
/* 0DC328 */ void ftCo_CaptureDamageHi_IASA(Fighter_GObj* gobj);
/* 0DC32C */ void ftCo_CaptureDamageHi_Phys(Fighter_GObj* gobj);
/* 0DC34C */ void ftCo_CaptureDamageHi_Coll(Fighter_GObj* gobj);
/* 0DC384 */ void fn_800DC384(Fighter_GObj* gobj);
/* 0DC3A4 */ void ftCo_800DC3A4(Fighter_GObj* gobj);
/* 0DC404 */ void fn_800DC404(Fighter_GObj*);
/* 0DC468 */ void ftCo_CaptureDamageLw_Anim(Fighter_GObj* gobj);
/* 0DC4AC */ void ftCo_CaptureDamageLw_IASA(Fighter_GObj* gobj);
/* 0DC4B0 */ void ftCo_CaptureDamageLw_Phys(Fighter_GObj* gobj);
/* 0DC5EC */ void ftCo_CaptureDamageLw_Coll(Fighter_GObj* gobj);
/* 0DC624 */ void fn_800DC624(HSD_GObj* gobj);
#define GALE01_08CD68
/* 08CD68 */ bool ftCo_AttackAir_CheckItemThrowInput(Fighter_GObj* gobj);
/* 08CE68 */ FtMotionId ftCo_AttackAir_GetMsidFromCStick(Fighter* fp);
/* 08CF70 */ void ftCo_AttackAir_EnterFromCStick(Fighter_GObj* gobj);
/* 08CFAC */ void ftCo_AttackAir_EnterFromMsid(Fighter_GObj* gobj, FtMotionId);
/* 08D010 */ void ftCo_AttackAir_Anim(Fighter_GObj* gobj);
/* 08D08C */ void ftCo_AttackAirN_IASA(Fighter_GObj* gobj);
/* 08D194 */ void ftCo_AttackAirF_IASA(Fighter_GObj* gobj);
/* 08D29C */ void ftCo_AttackAirB_IASA(Fighter_GObj* gobj);
/* 08D3A4 */ void ftCo_AttackAirHi_IASA(Fighter_GObj* gobj);
/* 08D4AC */ void ftCo_AttackAirLw_IASA(Fighter_GObj* gobj);
/* 08D5B4 */ void ftCo_AttackAir_Phys(Fighter_GObj* gobj);
/* 08D5D4 */ void ftCo_AttackAir_Coll(Fighter_GObj* gobj);
#define GALE01_08B3E4
/* 08B3E4 */ bool ftCo_AttackDash_CheckInput(Fighter_GObj* gobj);
/* 08B548 */ void ftCo_AttackDash_Anim(Fighter_GObj* gobj);
/* 08B584 */ void ftCo_AttackDash_SetMv0(Fighter_GObj* gobj);
/* 08B5AC */ void ftCo_AttackDash_IASA(Fighter_GObj* gobj);
/* 08B600 */ void ftCo_AttackDash_Phys(Fighter_GObj* gobj);
/* 08B638 */ void ftCo_AttackDash_Coll(Fighter_GObj* gobj);
#define GALE01_08B980
/* 08B980 */ bool ftCo_AttackHi3_CheckInput(Fighter_GObj* gobj);
/* 08BA98 */ void ftCo_AttackHi3_Anim(Fighter_GObj* gobj);
/* 08BAD4 */ void ftCo_AttackHi3_IASA(Fighter_GObj* gobj);
/* 08BB04 */ void ftCo_AttackHi3_Phys(Fighter_GObj* gobj);
/* 08BB24 */ void ftCo_AttackHi3_Coll(Fighter_GObj* gobj);
#define GALE01_08C830
/* 08C830 */ bool ftCo_AttackHi4_CheckInput(Fighter_GObj* gobj);
/* 08C948 */ bool ftCo_AttackHi4_CheckInputNoD0(Fighter_GObj* gobj);
/* 08CA98 */ void ftCo_AttackHi4_Anim(Fighter_GObj* gobj);
/* 08CAD4 */ void ftCo_AttackHi4_IASA(Fighter_GObj* gobj);
/* 08CB04 */ void ftCo_AttackHi4_Phys(Fighter_GObj* gobj);
/* 08CB24 */ void ftCo_AttackHi4_Coll(Fighter_GObj* gobj);
#define GALE01_08BB44
/* 08BB44 */ bool ftCo_AttackLw3_CheckInput(Fighter_GObj* gobj);
/* 08BCFC */ void ftCo_AttackLw3_Anim(Fighter_GObj* gobj);
/* 08BD80 */ void ftCo_AttackLw3_IASA(Fighter_GObj* gobj);
/* 08BF84 */ void ftCo_AttackLw3_Phys(Fighter_GObj* gobj);
/* 08BFA4 */ void ftCo_AttackLw3_Coll(Fighter_GObj* gobj);
#define GALE01_08CB44
/* 08CB44 */ bool ftCo_AttackLw4_CheckInput(Fighter_GObj* gobj);
/* 08CCBC */ void ftCo_AttackLw4_Anim(Fighter_GObj* gobj);
/* 08CCF8 */ void ftCo_AttackLw4_IASA(Fighter_GObj* gobj);
/* 08CD28 */ void ftCo_AttackLw4_Phys(Fighter_GObj* gobj);
/* 08CD48 */ void ftCo_AttackLw4_Coll(Fighter_GObj* gobj);
#define GALE01_08B8D4
/* 08B658 */ bool ftCo_AttackS3_CheckInput(Fighter_GObj* gobj);
/* 08B8D4 */ void ftCo_AttackS3_Anim(Fighter_GObj* gobj);
/* 08B910 */ void ftCo_AttackS3_IASA(Fighter_GObj* gobj);
/* 08B940 */ void ftCo_AttackS3_Phys(Fighter_GObj* gobj);
/* 08B960 */ void ftCo_AttackS3_Coll(Fighter_GObj* gobj);
#define GALE01_08BFC4
/* 08BFC4 */ bool ftCo_AttackS4_CheckInput(Fighter_GObj* gobj);
/* 08C114 */ bool ftCo_AttackS4_8008C114(Fighter_GObj* gobj);
/* 08C520 */ void ftCo_AttackS4_Anim(Fighter_GObj* gobj);
/* 08C55C */ void ftCo_AttackS4_IASA(Fighter_GObj* gobj);
/* 08C7F0 */ void ftCo_AttackS4_Phys(Fighter_GObj* gobj);
/* 08C810 */ void ftCo_AttackS4_Coll(Fighter_GObj* gobj);
#define GALE01_0C9058
/* 0C9058 */ void ftCo_Barrel_Death2_Cb(Fighter_GObj* gobj);
/* 0C9078 */ void ftCo_Barrel_Enter(Fighter_GObj* gobj, Item_GObj*);
/* 0C9198 */ void ftCo_Barrel_Take_Dmg_Cb(Fighter_GObj* gobj);
/* 0C91C0 */ void ftCo_Barrel_Anim(Fighter_GObj* gobj);
/* 0C9208 */ void ftCo_Barrel_IASA(Fighter_GObj* gobj);
/* 0C925C */ void ftCo_Barrel_Phys(Fighter_GObj* gobj);
/* 0C9260 */ void ftCo_Barrel_Coll(Fighter_GObj* gobj);
/* 0C9264 */ void ftCo_Barrel_Accessory1_Cb(Fighter_GObj* gobj);
/* 0C92E4 */ void ftCo_800C92E4(Fighter_GObj* gobj, Vec3*, Vec3*,
                                lbColl_80008D30_arg1*, float);
#define GALE01_09EB18
/* 09EB18 */ void ftCo_8009EB18(Fighter_GObj* gobj);
/* 09EC08 */ void ftCo_BarrelWait_Anim(Fighter_GObj* gobj);
/* 09EC0C */ void ftCo_BarrelWait_IASA(Fighter_GObj* gobj);
/* 09EC3C */ void ftCo_BarrelWait_Phys(Fighter_GObj* gobj);
/* 09EC40 */ void ftCo_BarrelWait_Coll(Fighter_GObj* gobj);
/* 09EC70 */ void ftCo_8009EC70(Fighter_GObj* gobj, Vec3* pos, M2C_UNK arg2,
                                float kb_angle);
#define GALE01_0C0874
/* 0C0874 */ void ftCo_800C0874(Fighter_GObj* gobj, M2C_UNK arg1,
                                ftCommon_BuryType arg2);
/* 0C08A0 */ void ftCo_800C08A0(Fighter_GObj* gobj, Fighter_GObj* arg1,
                                DynamicsDesc* arg2, ftCommon_BuryType arg3);
/* 0C09B4 */ void ftCo_800C09B4(Fighter_GObj* gobj);
/* 0C0A28 */ bool ftCo_800C0A28(Fighter_GObj* gobj, M2C_UNK arg1,
                                ftCommon_BuryType arg2);
/* 0C0A98 */ void ftCo_800C0A98(Fighter_GObj* gobj);
/* 0C0B20 */ void ftCo_800C0B20(Fighter_GObj* gobj);
/* 0C0C88 */ bool ftCo_800C0C88(ftCommon_BuryType);
/* 0C0CB8 */ bool ftCo_800C0CB8(Fighter_GObj* gobj);
/* 0C0D0C */ void ftCo_800C0D0C(Fighter_GObj* gobj);
/* 0C0F34 */ void ftCo_Bury_Anim(Fighter_GObj* gobj);
/* 0C0FC8 */ void ftCo_Bury_IASA(Fighter_GObj* gobj);
/* 0C0FCC */ void ftCo_800C0FCC(HSD_GObj* arg0, Fighter_GObj* arg1);
/* 0C1194 */ void ftCo_Bury_Phys(Fighter_GObj* gobj);
/* 0C11E4 */ void ftCo_Bury_Coll(Fighter_GObj* gobj);
/* 0C124C */ void ftCo_800C124C(Fighter_GObj* gobj);
/* 0C12D8 */ void ftCo_BuryWait_Anim(Fighter_GObj* gobj);
/* 0C134C */ void ftCo_BuryWait_IASA(Fighter_GObj* gobj);
/* 0C1350 */ void ftCo_BuryWait_Phys(Fighter_GObj* gobj);
/* 0C1354 */ void ftCo_BuryWait_Coll(Fighter_GObj* gobj);
/* 0C13BC */ void ftCo_800C13BC(Fighter_GObj* gobj);
/* 0C1460 */ void ftCo_BuryJump_Anim(Fighter_GObj* gobj);
/* 0C14B0 */ void ftCo_BuryJump_IASA(Fighter_GObj* gobj);
/* 0C1574 */ void ftCo_BuryJump_Phys(Fighter_GObj* gobj);
/* 0C15B4 */ void ftCo_BuryJump_Coll(Fighter_GObj* gobj);
#define GALE01_0C12D8
#define GALE01_09CA0C
/* 09CA0C */ void ftCo_8009CA0C(Fighter_GObj* gobj, Fighter_GObj* vic_gobj);
/* 09CB04 */ void ftCo_CaptureCaptain_Anim(Fighter_GObj* gobj);
/* 09CB08 */ void ftCo_CaptureCaptain_IASA(Fighter_GObj* gobj);
/* 09CB0C */ void ftCo_CaptureCaptain_Phys(Fighter_GObj* gobj);
/* 09CB10 */ void ftCo_CaptureCaptain_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_CAPTURECUT_H
/* 0DC750 */ void ftCo_CaptureCut_Enter(Fighter_GObj* gobj);
/* 0DC7F0 */ void ftCo_CaptureCut_Anim(Fighter_GObj* gobj);
/* 0DC82C */ void ftCo_CaptureCut_IASA(Fighter_GObj* gobj);
/* 0DC830 */ void ftCo_CaptureCut_Phys(Fighter_GObj* gobj);
/* 0DC890 */ void ftCo_CaptureCut_Coll(Fighter_GObj* gobj);
#define GALE01_0BC9C8
/* 0BC9C8 */ void ftCo_800BC9C8(Fighter_GObj* gobj);
/* 0BCA54 */ void ftCo_CaptureDamageKoopa_Anim(Fighter_GObj* gobj);
/* 0BCAE8 */ void ftCo_CaptureDamageKoopa_IASA(Fighter_GObj* gobj);
/* 0BCAEC */ void ftCo_CaptureDamageKoopa_Phys(Fighter_GObj* gobj);
/* 0BCAF0 */ void ftCo_CaptureDamageKoopa_Coll(Fighter_GObj* gobj);
/* 0BCAF4 */ void ftCo_800BCAF4(Fighter_GObj* gobj);
/* 0BCB80 */ void ftCo_CaptureDamageKoopaAir_Anim(Fighter_GObj* gobj);
/* 0BCC14 */ void ftCo_CaptureDamageKoopaAir_IASA(Fighter_GObj* gobj);
/* 0BCC18 */ void ftCo_CaptureDamageKoopaAir_Phys(Fighter_GObj* gobj);
/* 0BCC1C */ void ftCo_CaptureDamageKoopaAir_Coll(Fighter_GObj* gobj);
#define GALE01_0BD19C
/* 0BD19C */ float ftCo_800BD19C(Fighter_GObj* gobj, Vec3* pos);
/* 0BD1DC */ void ftCo_800BD1DC(Fighter_GObj* gobj, Fighter_GObj* victim_gobj);
/* 0BD38C */ void ftCo_CaptureKirby_Anim(Fighter_GObj*);
/* 0BD390 */ void ftCo_CaptureKirby_IASA(Fighter_GObj*);
/* 0BD394 */ void ftCo_CaptureKirby_Phys(Fighter_GObj*);
/* 0BD398 */ void ftCo_CaptureKirby_Coll(Fighter_GObj*);
/* 0BD39C */ void ftCo_800BD39C(Fighter_GObj* gobj);
#define GALE01_098660
/* 098680 */ void ftCo_800BC458(Fighter_GObj* gobj);
/* 0986D0 */ void ftCo_800BC4A8(Fighter_GObj* gobj);
/* 098A08 */ void ftCo_800BC7E0(Fighter_GObj* gobj, Fighter_GObj* arg1);
/* 098AEC */ void ftCo_CaptureKoopa_Anim(Fighter_GObj* gobj);
/* 098AF0 */ void ftCo_CaptureKoopa_IASA(Fighter_GObj* gobj);
/* 098AF4 */ void ftCo_CaptureKoopa_Phys(Fighter_GObj* gobj);
/* 098AF8 */ void ftCo_CaptureKoopa_Coll(Fighter_GObj* gobj);
/* 098AFC */ void ftCo_800BC8D4(Fighter_GObj* gobj, Fighter_GObj* arg1);
/* 098BE0 */ void ftCo_CaptureKoopaAir_Anim(Fighter_GObj* gobj);
/* 098BE4 */ void ftCo_CaptureKoopaAir_IASA(Fighter_GObj* gobj);
/* 098BE8 */ void ftCo_CaptureKoopaAir_Phys(Fighter_GObj* gobj);
/* 098BEC */ void ftCo_CaptureKoopaAir_Coll(Fighter_GObj* gobj);
/* 0BC438 */ void ftCo_800BC438(Fighter_GObj* gobj);
#define GALE01_0BCF18
/* 0BCF18 */ void ftCo_800BCF18(Fighter_GObj*, Fighter_GObj* gobj);
/* 0BD000 */ void ftCo_800BD000(Fighter_GObj* gobj, Fighter_GObj* victim_gobj);
#define MELEE_FT_CHARA_FTCOMMON_FTCO_CAPTUREPULLED_H
/* 0DAADC */ void fn_800DAADC(Fighter_GObj* arg0, Fighter_GObj* arg1);
/* 0DAD18 */ bool fn_800DAD18(Fighter_GObj* gobj);
#define GALE01_0BD620
/* 0BD620 */ void ftCo_800BD620(Fighter_GObj* gobj);
/* 0BD6E8 */ void ftCo_CaptureWaitKirby_Anim(Fighter_GObj* gobj);
/* 0BD6EC */ void ftCo_800BD6EC(Fighter_GObj* gobj);
/* 0BD7BC */ void ftCo_CaptureWaitKirby_IASA(Fighter_GObj* gobj);
/* 0BD9D8 */ void ftCo_CaptureWaitKirby_Phys(Fighter_GObj* gobj);
/* 0BD9DC */ void ftCo_CaptureWaitKirby_Coll(Fighter_GObj* gobj);
#define GALE01_0BCC20
/* 099150 */ void ftCo_CaptureWaitKoopa_Anim(Fighter_GObj* gobj);
/* 0991C8 */ void ftCo_CaptureWaitKoopa_IASA(Fighter_GObj* gobj);
/* 0991CC */ void ftCo_CaptureWaitKoopa_Phys(Fighter_GObj* gobj);
/* 0991D0 */ void ftCo_CaptureWaitKoopa_Coll(Fighter_GObj* gobj);
/* 099230 */ void ftCo_CaptureWaitKoopaAir_Anim(Fighter_GObj* gobj);
/* 0992A8 */ void ftCo_CaptureWaitKoopaAir_IASA(Fighter_GObj* gobj);
/* 0992AC */ void ftCo_CaptureWaitKoopaAir_Phys(Fighter_GObj* gobj);
/* 0992B0 */ void ftCo_CaptureWaitKoopaAir_Coll(Fighter_GObj* gobj);
/* 0BCC20 */ void ftCo_800BCC20(Fighter_GObj* gobj);
/* 0BCD00 */ void ftCo_800BCD00(Fighter_GObj* gobj);
#define GALE01_09D6E8
/* 09D6E8 */ void ftCo_800BBB8C(Fighter_GObj* gobj,
                                Fighter_GObj* attacker_gobj);
/* 09D7D4 */ void ftCo_CaptureYoshi_Anim(Fighter_GObj* gobj);
/* 09D7D8 */ void ftCo_CaptureYoshi_IASA(Fighter_GObj* gobj);
/* 09D7DC */ void ftCo_CaptureYoshi_Phys(Fighter_GObj* gobj);
/* 09D7E0 */ void ftCo_CaptureYoshi_Coll(Fighter_GObj* gobj);
#define GALE01_09BC58
/* 09BC58 */ void ftCo_8009BC58(Fighter_GObj* gobj);
/* 09BCDC */ void ftCo_CargoFall_Anim(Fighter_GObj* gobj);
/* 09BCE0 */ void ftCo_CargoFall_IASA(Fighter_GObj* gobj);
/* 09BD04 */ void ftCo_CargoFall_Phys(Fighter_GObj* gobj);
/* 09BD24 */ void ftCo_CargoFall_Coll(Fighter_GObj* gobj);
#define GALE01_09BB1C
/* 09BB1C */ bool ftCo_8009BB1C(Fighter_GObj* gobj);
/* 09BB64 */ void ftCo_8009BB64(Fighter_GObj* gobj);
/* 09BBF0 */ void ftCo_CargoJump_Anim(Fighter_GObj* gobj);
/* 09BBF4 */ void ftCo_CargoJump_IASA(Fighter_GObj* gobj);
/* 09BC18 */ void ftCo_CargoJump_Phys(Fighter_GObj* gobj);
/* 09BC38 */ void ftCo_CargoJump_Coll(Fighter_GObj* gobj);
#define GALE01_09B9C8
/* 09B9C8 */ void ftCo_8009B9C8(Fighter_GObj* gobj, int arg1);
/* 09BA50 */ void ftCo_CargoKneebend_Anim(Fighter_GObj* gobj);
/* 09BAA0 */ void ftCo_CargoKneebend_IASA(Fighter_GObj* gobj);
/* 09BADC */ void ftCo_CargoKneebend_Phys(Fighter_GObj* gobj);
/* 09BAFC */ void ftCo_CargoKneebend_Coll(Fighter_GObj* gobj);
#define GALE01_09BD4C
/* 09BD4C */ void ftCo_8009BD4C(Fighter_GObj* gobj);
/* 09BDC4 */ void ftCo_CargoLanding_Anim(Fighter_GObj* gobj);
/* 09BE14 */ void ftCo_CargoLanding_Phys(Fighter_GObj* gobj);
/* 09BE34 */ void ftCo_CargoLanding_Coll(Fighter_GObj* gobj);
#define GALE01_09BE54
/* 09BE54 */ void ftCo_CargoWait2_Anim(Fighter_GObj* gobj);
/* 09BEB8 */ void ftCo_CargoWait2_Phys(Fighter_GObj* gobj);
/* 09BED8 */ void ftCo_CargoWait2_Coll(Fighter_GObj* gobj);
/* 09BF3C */ bool ftCo_8009BF3C(Fighter_GObj* gobj);
/* 09C0EC */ void ftCo_CargoThrowF_Anim(Fighter_GObj* gobj);
/* 09C130 */ void ftCo_CargoThrowF_IASA(Fighter_GObj* gobj);
/* 09C150 */ void ftCo_CargoThrowF_Phys(Fighter_GObj* gobj);
/* 09C20C */ void ftCo_CargoThrowF_Coll(Fighter_GObj* gobj);
/* 09C234 */ void ftCo_CargoThrowB_Anim(Fighter_GObj* gobj);
/* 09C254 */ void ftCo_CargoThrowB_IASA(Fighter_GObj* gobj);
/* 09C274 */ void ftCo_CargoThrowB_Phys(Fighter_GObj* gobj);
/* 09C294 */ void ftCo_CargoThrowB_Coll(Fighter_GObj* gobj);
/* 09C2BC */ void ftCo_CargoThrowHi_Anim(Fighter_GObj* gobj);
/* 09C2DC */ void ftCo_CargoThrowHi_IASA(Fighter_GObj* gobj);
/* 09C2FC */ void ftCo_CargoThrowHi_Phys(Fighter_GObj* gobj);
/* 09C31C */ void ftCo_CargoThrowHi_Coll(Fighter_GObj* gobj);
/* 09C344 */ void ftCo_CargoThrowLw_Anim(Fighter_GObj* gobj);
/* 09C364 */ void ftCo_CargoThrowLw_IASA(Fighter_GObj* gobj);
/* 09C384 */ void ftCo_CargoThrowLw_Phys(Fighter_GObj* gobj);
/* 09C3A4 */ void ftCo_CargoThrowLw_Coll(Fighter_GObj* gobj);
/* 09C3CC */ void ftCo_CargoThrowAir_Anim(Fighter_GObj* gobj);
/* 09C410 */ void ftCo_CargoThrowAir_IASA(Fighter_GObj* gobj);
/* 09C414 */ void ftCo_CargoThrowAir_Phys(Fighter_GObj* gobj);
/* 09C434 */ void ftCo_CargoThrowAir_Coll(Fighter_GObj* gobj);
#define GALE01_09B818
/* 09B818 */ bool ftCo_8009B818(Fighter_GObj* gobj);
/* 09B8B4 */ void ftCo_CargoTurn_Anim(Fighter_GObj* gobj);
/* 09B948 */ void ftCo_CargoTurn_IASA(Fighter_GObj* gobj);
/* 09B988 */ void ftCo_CargoTurn_Phys(Fighter_GObj* gobj);
/* 09B9A8 */ void ftCo_CargoTurn_Coll(Fighter_GObj* gobj);
#define GALE01_09B4D0
/* 09B4D0 */ bool ftCo_8009B4D0(Fighter_GObj* gobj);
/* 09B518 */ void ftCo_8009B518(Fighter_GObj* gobj);
/* 09B56C */ void ftCo_8009B56C(Fighter_GObj* gobj);
/* 09B5C0 */ void ftCo_CargoWait_Anim(Fighter_GObj* gobj);
/* 09B5C4 */ void ftCo_CargoWait_IASA(Fighter_GObj* gobj);
/* 09B634 */ void ftCo_CargoWait_Phys(Fighter_GObj* gobj);
/* 09B654 */ void ftCo_CargoWait_Coll(Fighter_GObj* gobj);
/* 09B860 */ void ftCo_8009B860(Fighter_GObj* gobj);
#define GALE01_09B67C
/* 09B67C */ bool ftCo_8009B67C(Fighter_GObj* gobj);
/* 09B744 */ void ftCo_CargoWalk_Anim(Fighter_GObj* gobj);
/* 09B764 */ void ftCo_CargoWalk_IASA(Fighter_GObj* gobj);
/* 09B7D8 */ void ftCo_CargoWalk_Phys(Fighter_GObj* gobj);
/* 09B7F8 */ void ftCo_CargoWalk_Coll(Fighter_GObj* gobj);
#define MELEE_FT_CHARA_FTCOMMON_FTCO_CATCHPULL_H
/* 0D9CE8 */ void fn_800D9CE8(Fighter_GObj* arg0);
#define GALE01_09AE14
/* 09AE14 */ void ftCo_8009AE14(Fighter_GObj* gobj);
/* 09AE38 */ bool ftCo_8009AE38(Fighter_GObj* gobj);
/* 09AF70 */ void ftCo_CliffAttack_Anim(Fighter_GObj* gobj);
/* 09AF90 */ void ftCo_CliffAttack_IASA(Fighter_GObj* gobj);
/* 09AF94 */ void ftCo_CliffAttack_Phys(Fighter_GObj* gobj);
/* 09AFB4 */ void ftCo_CliffAttack_Coll(Fighter_GObj* gobj);
/* 09AFD4 */ bool ftCo_8009AFD4(Fighter_GObj* gobj);
#define GALE01_09AA0C
/* 09AA0C */ bool ftCo_8009AA0C(Fighter_GObj* gobj);
/* 09AC68 */ void ftCo_CliffClimb_Anim(Fighter_GObj* gobj);
/* 09ACA4 */ void ftCo_CliffClimb_IASA(Fighter_GObj* gobj);
/* 09ACA8 */ void ftCo_CliffClimb_Phys(Fighter_GObj* gobj);
/* 09ADA4 */ void ftCo_CliffClimb_Coll(Fighter_GObj* gobj);
#define GALE01_09B040
/* 09B040 */ void ftCo_8009B040(Fighter_GObj* gobj);
/* 09B10C */ void ftCo_CliffEscape_Anim(Fighter_GObj* gobj);
/* 09B12C */ void ftCo_CliffEscape_IASA(Fighter_GObj* gobj);
/* 09B130 */ void ftCo_CliffEscape_Phys(Fighter_GObj* gobj);
/* 09B150 */ void ftCo_CliffEscape_Coll(Fighter_GObj* gobj);
#define GALE01_09B170
/* 09B170 */ bool ftCo_8009B170(Fighter_GObj* gobj);
/* 09B278 */ void ftCo_CliffJump1_Anim(Fighter_GObj* gobj);
/* 09B2B4 */ void ftCo_CliffJump1_IASA(Fighter_GObj* gobj);
/* 09B2B8 */ void ftCo_CliffJump1_Phys(Fighter_GObj* gobj);
/* 09B2D8 */ void ftCo_CliffJump1_Coll(Fighter_GObj* gobj);
/* 09B390 */ void ftCo_8009B390(Fighter_GObj* gobj, float force_mul);
/* 09B424 */ void ftCo_CliffJump2_Anim(Fighter_GObj* gobj);
/* 09B460 */ void ftCo_CliffJump2_IASA(Fighter_GObj* gobj);
/* 09B464 */ void ftCo_CliffJump2_Phys(Fighter_GObj* gobj);
/* 09B4A0 */ void ftCo_CliffJump2_Coll(Fighter_GObj* gobj);
#define GALE01_09A804
/* 09A804 */ void ftCo_8009A804(Fighter_GObj* gobj);
/* 09A8D8 */ void ftCo_CliffWait_Anim(Fighter_GObj* gobj);
/* 09A8FC */ void ftCo_CliffWait_IASA(Fighter_GObj* gobj);
/* 09A96C */ void ftCo_CliffWait_Phys(Fighter_GObj* gobj);
/* 09A98C */ void ftCo_CliffWait_Coll(Fighter_GObj* gobj);
#define GALE01_08D7F0
/* 08D7F0 */ float ftCo_Damage_CalcAngle(Fighter* fp, float kb_applied);
/* 08D8D8 */ float ftCo_ScaleBy154(float);
/* 08D8E8 */ bool ftCo_8008D8E8(float);
/* 08D930 */ void ftCo_Damage_CalcKnockback(Fighter* fp);
/* 08DB10 */ void ftCo_8008DB10(Fighter_GObj* gobj, HitElement, float);
/* 08DC0C */ void ftCo_Damage_CalcVel(Fighter* fp, float x, float y);
/* 08DCE0 */ void ftCo_8008DCE0(Fighter_GObj* gobj, int, float facing_dir);
/* 08E498 */ bool ftCo_Damage_CheckAirMotion(Fighter* fp);
/* 08E5A4 */ void ftCo_8008E5A4(Fighter*);
/* 08E4F0 */ void ftCo_Damage_OnEveryHitlag(Fighter_GObj* gobj);
/* 08E714 */ void ftCo_Damage_OnExitHitlag(Fighter_GObj* gobj);
/* 08E908 */ void ftCo_8008E908(Fighter_GObj* gobj, float);
/* 08E984 */ bool ftCo_8008E984(Fighter* fp);
/* 08E9D0 */ void ftCo_8008E9D0(Fighter_GObj* gobj);
/* 08EB58 */ void ftCo_8008EB58(Fighter_GObj* gobj);
/* 08EC90 */ void ftCo_8008EC90(Fighter_GObj* gobj);
/* 08F744 */ void ftCo_8008F744(Fighter_GObj* gobj);
/* 08F7F0 */ void ftCo_Damage_Anim(Fighter_GObj* gobj);
/* 08FA44 */ void ftCo_Damage_IASA(Fighter_GObj* gobj);
/* 08FB18 */ void ftCo_Damage_Phys(Fighter_GObj* gobj);
/* 08FB64 */ void ftCo_Damage_Coll(Fighter_GObj* gobj);
/* 08FC94 */ void ftCo_8008FC94(Fighter_GObj* gobj);
/* 08FCB8 */ void ftCo_Damage_SetMv8FromKbThreshold(Fighter* fp);
/* 08FD98 */ void ftCo_DamageFly_Anim(Fighter_GObj* gobj);
/* 08FF48 */ void ftCo_DamageFly_IASA(Fighter_GObj* gobj);
/* 08FF84 */ void ftCo_DamageFly_Phys(Fighter_GObj* gobj);
/* 0900EC */ void ftCo_DamageFly_Coll(Fighter_GObj* gobj);
/* 090184 */ void ftCo_80090184(Fighter_GObj* gobj);
/* 0901D0 */ void ftCo_DamageFlyRoll_Anim(Fighter_GObj* gobj);
/* 090324 */ void ftCo_DamageFlyRoll_IASA(Fighter_GObj* gobj);
/* 09035C */ void ftCo_DamageFlyRoll_Phys(Fighter_GObj* gobj);
/* 0904C0 */ void ftCo_DamageFlyRoll_Coll(Fighter_GObj* gobj);
/* 3C5520 */ extern int ftCo_803C5520[2][4][3];
#define GALE01_0C44CC
/* 0C44CC */ bool ftCo_800C44CC(Fighter_GObj* gobj);
/* 0C4550 */ void ftCo_800C4550(Fighter_GObj* gobj);
/* 0C466C */ void ftCo_DamageBind_Anim(Fighter_GObj* gobj);
/* 0C46E0 */ void ftCo_DamageBind_IASA(Fighter_GObj* gobj);
/* 0C46E4 */ void ftCo_DamageBind_Phys(Fighter_GObj* gobj);
/* 0C4704 */ void ftCo_DamageBind_Coll(Fighter_GObj* gobj);
#define GALE01_090824
/* 090574 */ void ftCo_80090574(Fighter_GObj* gobj);
/* 090594 */ void ftCo_80090594(Fighter* fp, HitElement element, int dmg,
                                FtMotionId msid, GroundOrAir ground_or_air,
                                float hitlag_mul);
/* 090690 */ Vec2* ftCo_80090690(Fighter* fp, Vec2* shift);
/* 090718 */ void ftCo_80090718(Fighter* fp);
/* 090780 */ void ftCo_80090780(Fighter_GObj* gobj);
/* 090824 */ void ftCo_DamageFall_Anim(Fighter_GObj* gobj);
/* 090828 */ void ftCo_DamageFall_IASA(Fighter_GObj* gobj);
/* 09093C */ void ftCo_DamageFall_Phys(Fighter_GObj* gobj);
/* 09095C */ void ftCo_DamageFall_Coll(Fighter_GObj* gobj);
#define GALE01_0912A8
/* 090984 */ void ftCo_80090984(Fighter_GObj* gobj);
/* 090B60 */ void ftCo_DamageIce_Init(Fighter_GObj* gobj);
/* 090AC0 */ void ftCo_80090AC0(Fighter*);
/* 091030 */ void ftCo_DamageIce_HitWhileFrozen(Fighter_GObj* gobj);
/* 0912A8 */ void ftCo_DamageIce_Anim(Fighter_GObj* gobj);
/* 0913DC */ void ftCo_DamageIce_IASA(Fighter_GObj* gobj);
/* 0913E0 */ void ftCo_DamageIce_Phys(Fighter_GObj* gobj);
/* 09144C */ void ftCo_DamageIce_Coll(Fighter_GObj* gobj);
/* 0914A4 */ void ftCo_DamageIce_InAirUpdate(Fighter_GObj* gobj);
/* 091854 */ void ftCo_80091854(Fighter_GObj* gobj);
/* 091988 */ void ftCo_DamageIceJump_Anim(Fighter_GObj* gobj);
/* 0919D8 */ void ftCo_DamageIceJump_IASA(Fighter_GObj* gobj);
/* 0919DC */ void ftCo_DamageIceJump_Phys(Fighter_GObj* gobj);
/* 0919FC */ void ftCo_DamageIceJump_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_DAMAGESCREW_H
/* 0D2FA4 */ bool ftCo_800D2FA4(Fighter_GObj* gobj);
/* 0D3004 */ void ftCo_800D3004(Fighter_GObj*);
/* 0D30C0 */ void ftCo_DamageScrew_Anim(Fighter_GObj* gobj);
/* 0D30FC */ void ftCo_DamageScrew_IASA(Fighter_GObj* gobj);
/* 0D3100 */ void ftCo_DamageScrew_Phys(Fighter_GObj* gobj);
/* 0D3120 */ void ftCo_DamageScrew_Coll(Fighter_GObj* gobj);
#define GALE01_0C318C
/* 0C318C */ void ftCo_800C318C(Fighter_GObj* gobj, bool);
/* 0C32AC */ void ftCo_DamageSong_Anim(Fighter_GObj* gobj);
/* 0C334C */ void ftCo_DamageSong_IASA(Fighter_GObj* gobj);
/* 0C3350 */ void ftCo_DamageSong_Phys(Fighter_GObj* gobj);
/* 0C3370 */ void ftCo_DamageSong_Coll(Fighter_GObj* gobj);
/* 0C33C8 */ void ftCo_DamageSongWait_Anim(Fighter_GObj* gobj);
/* 0C343C */ void ftCo_DamageSongWait_IASA(Fighter_GObj* gobj);
/* 0C3440 */ void ftCo_DamageSongWait_Phys(Fighter_GObj* gobj);
/* 0C3460 */ void ftCo_DamageSongWait_Coll(Fighter_GObj* gobj);
/* 0C34B8 */ void ftCo_DamageSongRv_Anim(Fighter_GObj* gobj);
/* 0C34F4 */ void ftCo_DamageSongRv_IASA(Fighter_GObj* gobj);
/* 0C34F8 */ void ftCo_DamageSongRv_Phys(Fighter_GObj* gobj);
/* 0C3518 */ void ftCo_DamageSongRv_Coll(Fighter_GObj* gobj);
/* 0C3538 */ bool ftCo_800C3538(Fighter_GObj* gobj);
#define GALE01_0CA094
/* 0CA094 */ bool ftCo_Dash_CheckInput(Fighter_GObj* gobj);
/* 0CA120 */ void ftCo_Dash_Enter(Fighter_GObj* gobj, int arg1);
/* 0CA1F4 */ void ftCo_Dash_Anim(Fighter_GObj* gobj);
/* 0CA230 */ void ftCo_Dash_IASA(Fighter_GObj* gobj);
/* 0CA53C */ void ftCo_Dash_Phys(Fighter_GObj* gobj);
/* 0CA5D0 */ void ftCo_Dash_Coll(Fighter_GObj* gobj);
#define GALE01_0C6150
/* 0C6150 */ void ftCo_800C6150(Fighter_GObj* gobj);
#define GALE01_097D9C
/* 097D9C */ bool ftCo_Down_CheckInput(Fighter_GObj* gobj);
/* 097F08 */ void ftCo_Down_Anim(Fighter_GObj* gobj);
/* 097F44 */ void ftCo_Down_IASA(Fighter_GObj* gobj);
/* 097F48 */ void ftCo_Down_Phys(Fighter_GObj* gobj);
/* 097F68 */ void ftCo_Down_Coll(Fighter_GObj* gobj);
/* 098400 */ bool ftCo_80098400(Fighter_GObj* gobj);
#define GALE01_09805C
/* 097270 */ void ftCo_800978D4(Fighter_GObj* gobj);
/* 09813C */ void ftCo_DownAttack_Anim(Fighter_GObj* gobj);
/* 098178 */ void ftCo_DownAttack_IASA(Fighter_GObj* gobj);
/* 09817C */ void ftCo_DownAttack_Phys(Fighter_GObj* gobj);
/* 09819C */ void ftCo_DownAttack_Coll(Fighter_GObj* gobj);
/* 0981BC */ void ftCo_80098634(Item_FtTrack*);
/* 098238 */ bool ftCo_800986B0(Fighter_GObj* gobj);
/* 0984D4 */ bool ftCo_800984D4(Fighter_GObj* gobj);
/* 09856C */ void ftCo_8009856C(Fighter_GObj*, FtMotionId msid);
/* 09856C */ void ftCo_8009857C(Fighter_GObj*, FtMotionId msid);
/* 09872C */ bool ftCo_8009872C(Fighter_GObj* gobj);
#define GALE01_096F0C
/* 096FCC */ void ftCo_80097630(Fighter* fp, enum_t* sfx_ids, float threshold);
/* 097570 */ bool ftCo_80097570(Fighter_GObj* gobj);
/* 0976DC */ void ftCo_80097D40(Fighter_GObj* gobj);
/* 097724 */ void ftCo_80097D88(Fighter_GObj* gobj);
/* 09775C */ void ftCo_DownBound_Anim(Fighter_GObj* gobj);
/* 0977B8 */ void ftCo_DownBound_IASA(Fighter_GObj* gobj);
/* 0977BC */ void ftCo_DownBound_Phys(Fighter_GObj* gobj);
/* 0977DC */ void ftCo_DownBound_Coll(Fighter_GObj* gobj);
/* 097A18 */ void ftCo_80097E8C(Fighter_GObj* gobj);
/* 097B4C */ void ftCo_DownWait_Anim(Fighter_GObj* gobj);
/* 097BB8 */ void ftCo_DownWait_IASA(Fighter_GObj* gobj);
/* 097C08 */ void ftCo_DownWait_Phys(Fighter_GObj* gobj);
/* 097C28 */ void ftCo_DownWait_Coll(Fighter_GObj* gobj);
/* 097F38 */ void ftCo_80097F38(Fighter_GObj* gobj);
/* 3C5700 */ extern enum_t ftCo_DownBound_SfxIds[4];
#define GALE01_09F0F0
/* 09F0F0 */ bool ftCo_8009F0F0(Fighter_GObj* gobj);
/* 09CDB0 */ void ftCo_DownDamage_Anim(Fighter_GObj* gobj);
/* 09CE80 */ void ftCo_DownDamage_IASA(Fighter_GObj* gobj);
/* 09CE84 */ void ftCo_DownDamage_Phys(Fighter_GObj* gobj);
/* 09CEA4 */ void ftCo_DownDamage_Coll(Fighter_GObj* gobj);
#define GALE01_0C8B74
/* 0C8B74 */ void ftCo_DownSpot_Enter(Fighter_GObj* gobj);
/* 0C8C04 */ void ftCo_DownSpot_Anim(Fighter_GObj* gobj);
/* 0C8C40 */ void ftCo_DownSpot_IASA(Fighter_GObj* gobj);
/* 0C8C44 */ void ftCo_DownSpot_Phys(Fighter_GObj* gobj);
/* 0C8C64 */ void ftCo_DownSpot_Coll(Fighter_GObj* gobj);
#define GALE01_0980BC
/* 0980BC */ bool ftCo_800980BC(Fighter_GObj* gobj);
/* 098160 */ void ftCo_80098160(Fighter_GObj* gobj, FtMotionId msid);
/* 098194 */ void ftCo_DownStand_Anim(Fighter_GObj* gobj);
/* 0981D0 */ void ftCo_DownStand_IASA(Fighter_GObj* gobj);
/* 0981D4 */ void ftCo_DownStand_Phys(Fighter_GObj* gobj);
/* 0981F4 */ void ftCo_DownStand_Coll(Fighter_GObj* gobj);
#define GALE01_09917C
/* 09917C */ bool ftCo_8009917C(Fighter_GObj* gobj);
/* 099264 */ bool ftCo_80099264(Fighter_GObj* gobj);
/* 0994D8 */ void ftCo_Escape_Anim(Fighter_GObj* gobj);
/* 0996F0 */ void ftCo_Escape_IASA(Fighter_GObj* gobj);
/* 099714 */ void ftCo_Escape_Phys(Fighter_GObj* gobj);
/* 099734 */ void ftCo_Escape_Coll(Fighter_GObj* gobj);
/* 099794 */ bool ftCo_80099794(Fighter_GObj* gobj);
/* 09980C */ bool ftCo_8009980C(Fighter_GObj* gobj);
/* 0999D8 */ void ftCo_EscapeN_Anim(Fighter_GObj* gobj);
/* 099A14 */ void ftCo_EscapeN_IASA(Fighter_GObj* gobj);
/* 099A18 */ void ftCo_EscapeN_Phys(Fighter_GObj* gobj);
/* 099A38 */ void ftCo_EscapeN_Coll(Fighter_GObj* gobj);
#define GALE01_099A58
/* 099A58 */ bool ftCo_80099A58(Fighter_GObj* gobj);
/* 099A9C */ void ftCo_80099A9C(Fighter_GObj* gobj, int);
/* 099BD0 */ void ftCo_EscapeAir_Anim(Fighter_GObj* gobj);
/* 099C24 */ void ftCo_EscapeAir_IASA(Fighter_GObj* gobj);
/* 099CEC */ void ftCo_EscapeAir_Phys(Fighter_GObj* gobj);
/* 099D48 */ void ftCo_EscapeAir_Coll(Fighter_GObj* gobj);
#define GALE01_0CC730
/* 0CC730 */ void ftCo_Fall_Enter(Fighter_GObj* gobj);
/* 0CC830 */ void ftCo_Fall_Enter_YoshiEgg(Fighter_GObj* gobj);
/* 0CC8DC */ void ftCo_Fall_Enter_YoshiEgg_Kirby(Fighter_GObj* gobj);
/* 0CC988 */ void ftCo_800CC988(Fighter_GObj* gobj, float);
/* 0CCA00 */ void ftCo_Fall_Anim(Fighter_GObj* gobj);
/* 0CCAAC */ bool ftCo_Fall_IASA_Inner(Fighter_GObj* gobj);
/* 0CCBE0 */ void ftCo_Fall_Anim_Inner(Fighter_GObj* gobj, float*, FtMotionId,
                                       FtMotionId, FtMotionId);
/* 0CCD34 */ void ftCo_Fall_IASA(Fighter_GObj* gobj);
/* 0CCD58 */ void ftCo_Fall_Phys(Fighter_GObj* gobj);
/* 0CCD78 */ void ftCo_Fall_Coll(Fighter_GObj* gobj);
#define GALE01_0CCDA8
/* 0CCDA8 */ void ftCo_FallAerial_Enter(Fighter_GObj* gobj);
/* 0CCDFC */ void ftCo_FallAerial_Anim(Fighter_GObj* gobj);
/* 0CCE50 */ void ftCo_FallAerial_IASA(Fighter_GObj* gobj);
/* 0CCE74 */ void ftCo_FallAerial_Phys(Fighter_GObj* gobj);
#define GALE01_0968C8
/* 0968C8 */ void ftCo_800968C8(Fighter_GObj* gobj);
/* 096900 */ void ftCo_80096900(Fighter_GObj* gobj, int, int,
                                bool allow_interrupt, float mobility,
                                float landing_lag);
/* 0969D8 */ void ftCo_800969D8(Fighter_GObj* gobj, int, int, int, float,
                                float, float);
/* 096AA0 */ void ftCo_FallSpecial_Anim(Fighter_GObj* gobj);
/* 096AF4 */ void ftCo_FallSpecial_IASA(Fighter_GObj* gobj);
/* 096B44 */ void ftCo_FallSpecial_Phys(Fighter_GObj* gobj);
/* 096C98 */ void ftCo_FallSpecial_Coll(Fighter_GObj* gobj);
/* 096CC8 */ bool ftCo_80096CC8(Fighter_GObj* gobj, int line_id);
/* 096D28 */ void ftCo_80096D28(Fighter_GObj* gobj);
#define GALE01_0C15F4
/* 0C15F4 */ bool ftCo_800C15F4(Fighter_GObj* gobj);
/* 0C1718 */ bool ftCo_800C1718(Fighter_GObj* gobj);
/* 0C17CC */ bool ftCo_800C17CC(Fighter_GObj* gobj);
/* 0C18A8 */ void ftCo_800C18A8(Fighter_GObj* gobj, ftCommon_MotionState msid,
                                Vec3* normal, Vec3*);
/* 0C1B2C */ void ftCo_FlyReflect_Anim(Fighter_GObj* gobj);
/* 0C1B64 */ void ftCo_FlyReflect_IASA(Fighter_GObj* gobj);
/* 0C1B84 */ void ftCo_FlyReflect_Phys(Fighter_GObj* gobj);
/* 0C1BA4 */ void ftCo_FlyReflect_Coll(Fighter_GObj* gobj);
#define GALE01_099010
/* 099010 */ void ftCo_80099010(Fighter_GObj* gobj);
/* 0990B8 */ void ftCo_Furafura_Anim(Fighter_GObj* gobj);
/* 099138 */ void ftCo_Furafura_IASA(Fighter_GObj* gobj);
/* 09913C */ void ftCo_Furafura_Phys(Fighter_GObj* gobj);
/* 09915C */ void ftCo_Furafura_Coll(Fighter_GObj* gobj);
#define GALE01_091A2C
/* 091A2C */ bool ftCo_80091A2C(Fighter_GObj* gobj);
/* 091A4C */ bool ftCo_80091A4C(Fighter_GObj* gobj);
/* 091AD8 */ bool ftCo_80091AD8(Fighter_GObj* gobj, int mv_x20);
/* 091B90 */ void ftCo_80091B90(Fighter_GObj* gobj, int);
/* 091B9C */ void ftCo_80091B9C(Fighter_GObj* gobj);
/* 091D58 */ void ftCo_80091D58(Fighter* fp);
/* 092450 */ void ftCo_80092450(Fighter_GObj* gobj);
/* 0925A4 */ bool ftCo_800925A4(Fighter_GObj* gobj);
/* 0926DC */ void ftCo_GuardOn_Anim(Fighter_GObj* gobj);
/* 092758 */ void ftCo_GuardOn_IASA(Fighter_GObj* gobj);
/* 092870 */ void ftCo_GuardOn_Phys(Fighter_GObj* gobj);
/* 0928AC */ void ftCo_GuardOn_Coll(Fighter_GObj* gobj);
/* 0928CC */ void ftCo_800928CC(Fighter_GObj* gobj);
/* 092A24 */ void ftCo_Guard_Anim(Fighter_GObj* gobj);
/* 092A78 */ void ftCo_Guard_IASA(Fighter_GObj* gobj);
/* 092B70 */ void ftCo_Guard_Phys(Fighter_GObj* gobj);
/* 092BAC */ void ftCo_Guard_Coll(Fighter_GObj* gobj);
/* 092BCC */ void ftCo_80092BCC(Fighter_GObj* gobj);
/* 092BE8 */ void ftCo_80092BE8(Fighter_GObj* gobj);
/* 092CAC */ void ftCo_GuardOff_Anim(Fighter_GObj* gobj);
/* 092CFC */ void ftCo_GuardOff_IASA(Fighter_GObj* gobj);
/* 092E10 */ void ftCo_GuardOff_Phys(Fighter_GObj* gobj);
/* 092E30 */ void ftCo_GuardOff_Coll(Fighter_GObj* gobj);
/* 092ED8 */ float ftCo_80092ED8(int, float);
/* 093240 */ void ftCo_80093240(Fighter_GObj* gobj);
/* 0932DC */ void ftCo_800932DC(Fighter_GObj* gobj);
/* 093354 */ void ftCo_GuardSetOff_Anim(Fighter_GObj* gobj);
/* 093624 */ void ftCo_GuardSetOff_IASA(Fighter_GObj* gobj);
/* 093628 */ void ftCo_GuardSetOff_Phys(Fighter_GObj* gobj);
/* 09365C */ void ftCo_GuardSetOff_Coll(Fighter_GObj* gobj);
/* 093694 */ bool ftCo_80093694(Fighter_GObj* gobj);
/* 09370C */ void ftCo_8009370C(HSD_GObj*, HSD_GObjEvent);
/* 093BC0 */ void ftCo_80093BC0(Fighter_GObj* gobj);
/* 093C3C */ float ftCo_80094098(HSD_GObj*, float*);
/* 093CD0 */ void ftCo_GuardReflect_Anim(Fighter_GObj* gobj);
/* 093CDC */ void ftCo_80094138(Fighter* fp);
/* 093EC0 */ void ftCo_GuardReflect_IASA(Fighter_GObj* gobj);
/* 09403C */ void ftCo_GuardReflect_Phys(Fighter_GObj* gobj);
/* 094078 */ void ftCo_GuardReflect_Coll(Fighter_GObj* gobj);
#define GALE01_0C5CD4
/* 0C5CD4 */ bool ftCo_800C5CD4(Fighter_GObj* gobj);
/* 0C5D34 */ void ftCo_800C5D34(Fighter_GObj* gobj);
/* 0C5DBC */ void ftCo_HammerFall_Anim(Fighter_GObj* gobj);
/* 0C5DDC */ bool ftCo_800C5DDC(Fighter_GObj* gobj);
/* 0C5E94 */ void ftCo_HammerFall_IASA(Fighter_GObj* gobj);
/* 0C5F40 */ void ftCo_HammerFall_Phys(Fighter_GObj* gobj);
/* 0C5F60 */ void ftCo_HammerFall_Coll(Fighter_GObj* gobj);
#define GALE01_0C5A50
/* 0C5A50 */ bool ftCo_800C5A50(Fighter_GObj* gobj);
/* 0C5A98 */ void ftCo_800C5A98(Fighter_GObj* gobj);
/* 0C5B24 */ void ftCo_HammerJump_Anim(Fighter_GObj* gobj);
/* 0C5B44 */ void ftCo_HammerJump_IASA(Fighter_GObj* gobj);
/* 0C5B48 */ void ftCo_HammerJump_Phys(Fighter_GObj* gobj);
/* 0C5B68 */ void ftCo_HammerJump_Coll(Fighter_GObj* gobj);
#define GALE01_0C5B88
/* 0C5B88 */ void ftCo_800C5B88(Fighter_GObj* gobj, enum_t);
/* 0C5C10 */ void ftCo_HammerKneeBend_Anim(Fighter_GObj* gobj);
/* 0C5C74 */ void ftCo_HammerKneeBend_IASA(Fighter_GObj* gobj);
/* 0C5C94 */ void ftCo_HammerKneeBend_Phys(Fighter_GObj* gobj);
/* 0C5CB4 */ void ftCo_HammerKneeBend_Coll(Fighter_GObj* gobj);
#define GALE01_0C5F88
/* 0C5F88 */ void ftCo_HammerLanding_Enter(Fighter_GObj* gobj);
/* 0C6020 */ void ftCo_HammerLanding_Anim(Fighter_GObj* gobj);
/* 0C6084 */ void ftCo_HammerLanding_IASA(Fighter_GObj* gobj);
/* 0C6088 */ void ftCo_HammerLanding_Phys(Fighter_GObj* gobj);
/* 0C60A8 */ void ftCo_HammerLanding_Coll(Fighter_GObj* gobj);
#define GALE01_0C576C
/* 0C576C */ bool ftCo_800C576C(Fighter_GObj* gobj);
/* 0C5848 */ void ftCo_HammerTurn_Anim(Fighter_GObj* gobj);
/* 0C59EC */ void ftCo_HammerTurn_IASA(Fighter_GObj* gobj);
/* 0C5A10 */ void ftCo_HammerTurn_Phys(Fighter_GObj* gobj);
/* 0C5A30 */ void ftCo_HammerTurn_Coll(Fighter_GObj* gobj);
#define GALE01_0C4E4C
/* 0C4E4C */ bool ftCo_800C4E4C(Fighter_GObj* gobj);
/* 0C4E94 */ void ftCo_800C4E94(Fighter* fp);
/* 0C4ED8 */ void ftCo_800C4ED8(Fighter_GObj* gobj);
/* 0C4F64 */ void ftCo_800C4F64(Fighter_GObj* gobj);
/* 0C4FEC */ void ftCo_HammerWait_Anim(Fighter_GObj* gobj);
/* 0C5074 */ void ftCo_HammerWait_IASA(Fighter_GObj* gobj);
/* 0C50D4 */ void ftCo_HammerWait_Phys(Fighter_GObj* gobj);
/* 0C50F4 */ void ftCo_HammerWait_Coll(Fighter_GObj* gobj);
/* 0C511C */ void ftCo_800C511C(Fighter_GObj* gobj);
/* 0C5240 */ bool ftCo_800C5240(Fighter_GObj* gobj);
/* 0C5284 */ void ftCo_800C5284(Fighter_GObj* gobj);
/* 0C52F4 */ void ftCo_800C52F4(Fighter_GObj* gobj);
/* 0C53E4 */ bool ftCo_800C53E4(Fighter* fp);
/* 0C544C */ void ftCo_800C544C(Fighter* fp);
/* 0C548C */ float ftCo_800C548C(Fighter* fp);
/* 0C54C4 */ u32 ftCo_800C54C4(Fighter* fp);
/* 0C5500 */ void ftCo_800C5500(Fighter_GObj* gobj);
/* 0C554C */ void ftCo_800C554C(Fighter* fp);
/* 0C555C */ void ftCo_800C555C(Fighter_GObj* gobj);
#define GALE01_0C55CC
/* 0C55CC */ bool ftCo_800C55CC(Fighter_GObj* gobj);
/* 0C56BC */ void ftCo_HammerWalk_Anim(Fighter_GObj* gobj);
/* 0C56DC */ void ftCo_HammerWalk_IASA(Fighter_GObj* gobj);
/* 0C572C */ void ftCo_HammerWalk_Phys(Fighter_GObj* gobj);
/* 0C574C */ void ftCo_HammerWalk_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_ITEMPARASOLDAMAGEFALL_H
/* 0CF4DC */ void ftCo_800CF4DC(Fighter_GObj* gobj);
/* 0CF528 */ void ftCo_ItemParasolDamageFall_Anim(Fighter_GObj* gobj);
/* 0CF52C */ void ftCo_ItemParasolDamageFall_IASA(Fighter_GObj* gobj);
/* 0CF54C */ void ftCo_ItemParasolDamageFall_Phys(Fighter_GObj* gobj);
/* 0CF56C */ void ftCo_ItemParasolDamageFall_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_ITEMPARASOLFALL_H
/* 0CF280 */ void ftCo_800CF280(Fighter_GObj* gobj);
/* 0CF2B8 */ void ftCo_ItemParasolFall_Anim(Fighter_GObj* gobj);
/* 0CF2BC */ void ftCo_ItemParasolFall_IASA(Fighter_GObj* gobj);
/* 0CF380 */ void ftCo_ItemParasolFall_Phys(Fighter_GObj* gobj);
/* 0CF3A0 */ void ftCo_ItemParasolFall_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_ITEMPARASOLFALLSPECIAL_H
/* 0CF3C8 */ void ftCo_800CF3C8(Fighter_GObj* gobj);
/* 0CF424 */ void ftCo_ItemParasolFallSpecial_Anim(Fighter_GObj* gobj);
/* 0CF428 */ void ftCo_ItemParasolFallSpecial_IASA(Fighter_GObj* gobj);
/* 0CF494 */ void ftCo_ItemParasolFallSpecial_Phys(Fighter_GObj* gobj);
/* 0CF4B4 */ void ftCo_ItemParasolFallSpecial_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_ITEMPARASOLOPEN_H
/* 0CEE70 */ bool ftCo_800CEE70(Fighter_GObj* gobj);
/* 0CEF08 */ void ft_800CEF08(Fighter_GObj* gobj);
/* 0CEFE0 */ void ftCo_800CEFE0(Fighter_GObj* gobj, int);
/* 0CF0B8 */ void ftCo_ItemParasolOpen_Anim(Fighter_GObj* gobj);
/* 0CF118 */ void ftCo_ItemParasolOpen_IASA(Fighter_GObj* gobj);
/* 0CF1A0 */ void ftCo_ItemParasolOpen_Phys(Fighter_GObj* gobj);
/* 0CF258 */ void ftCo_ItemParasolOpen_Coll(Fighter_GObj* gobj);
#define MELEE_FT_CHARA_FTCOMMON_FTCO_ITEMSCOPEFIRE_H
/* 0D84D4 */ void fn_800D84D4(Fighter_GObj*, int);
#define MELEE_FT_CHARA_FTCOMMON_FTCO_ITEMSCOPERAPID_H
#define MELEE_FT_CHARA_FTCOMMON_FTCO_ITEMSCOPESTART_H
/* 0D769C */ FtMotionId fn_800D769C(Fighter* ft, FtMotionId msid);
#define MELEE_FTCO_ITEMSCREW_H
/* 0D2D50 */ void ftCo_ItemScrew_Enter(Fighter_GObj*);
/* 0D2DD0 */ void ftCo_ItemScrew_Anim(Fighter_GObj* gobj);
/* 0D2E0C */ void ftCo_ItemScrew_IASA(Fighter_GObj* gobj);
/* 0D2E2C */ void ftCo_ItemScrew_Phys(Fighter_GObj* gobj);
/* 0D2E4C */ void ftCo_ItemScrew_Coll(Fighter_GObj* gobj);
/* 0D2E7C */ void ft_800D2E7C(Fighter_GObj*, Vec3*);
/* 0D2EF8 */ void ftCo_ItemScrewAir_Anim(Fighter_GObj* gobj);
/* 0D2F34 */ void ftCo_ItemScrewAir_IASA(Fighter_GObj* gobj);
/* 0D2F54 */ void ftCo_ItemScrewAir_Phys(Fighter_GObj* gobj);
/* 0D2F74 */ void ftCo_ItemScrewAir_Coll(Fighter_GObj* gobj);
#define GALE01_0949F4
/* 0949F4 */ bool ftCo_80094E54(Fighter* fp);
/* 094CFC */ bool ftCo_8009515C(Fighter_GObj* gobj);
/* 094D70 */ bool ftCo_800951D0(Fighter_GObj* gobj);
/* 094DF4 */ bool ftCo_80095254(Fighter_GObj* gobj);
/* 094EA4 */ bool ftCo_80094EA4(Fighter_GObj* gobj);
/* 094E7C */ bool ftCo_800952DC(Fighter_GObj* gobj);
/* 0951DC */ bool ftCo_8009563C(Fighter_GObj* gobj);
/* 0952E4 */ void ftCo_80095744(Fighter_GObj* gobj, bool*);
/* 095328 */ bool ftCo_80095328(Fighter_GObj*, bool*);
/* 095394 */ void ftCo_800957F4(Fighter_GObj* gobj, FtMotionId msid);
/* 095A20 */ void ftCo_ItemThrow_Anim(Fighter_GObj* gobj);
/* 095CC0 */ void ftCo_ItemThrow_IASA(Fighter_GObj* gobj);
/* 095CC4 */ void ftCo_ItemThrow_Phys(Fighter_GObj* gobj);
/* 095CE4 */ void ftCo_LightThrowDash_Phys(Fighter_GObj* gobj);
/* 095D50 */ void ftCo_LightThrowAir_Phys(Fighter_GObj* gobj);
/* 095DA8 */ void ftCo_LightThrowDashDrop_Coll(Fighter_GObj* gobj);
/* 095DC8 */ void ftCo_LightThrow_Coll(Fighter_GObj* gobj);
/* 095EEC */ void ftCo_LightThrowAir_Coll(Fighter_GObj* gobj);
/* 096010 */ void ftCo_HeavyThrow_Coll(Fighter_GObj* gobj);
/* 0961D0 */ void ftCo_800961D0(Fighter_GObj* gobj);
/* 096250 */ void ftCo_80096250(Fighter_GObj* gobj);
/* 096374 */ void ftCo_80096374(Fighter_GObj* gobj);
/* 096498 */ void ftCo_80096498(Fighter_GObj* gobj);
#define GALE01_0CAE80
/* 0CAE80 */ ftCo_JumpInput ftCo_Jump_GetInput(Fighter_GObj* gobj);
/* 0CAED0 */ bool ftCo_Jump_CheckInput(Fighter_GObj* gobj);
/* 0CAF78 */ bool fn_800CAF78(Fighter_GObj* gobj);
/* 0CB024 */ bool ftCo_800CB024(Fighter_GObj* gobj);
/* 0CB110 */ void ftCo_800CB110(Fighter_GObj*, bool, float);
/* 0CB250 */ void ftCo_Jump_Enter(Fighter_GObj* gobj);
/* 0CB2F8 */ void ftCo_Jump_Anim(Fighter_GObj* gobj);
/* 0CB334 */ void ftCo_Jump_IASA(Fighter_GObj* gobj);
/* 0CB438 */ void ftCo_Jump_Phys_Inner(Fighter_GObj* gobj);
/* 0CB474 */ void ftCo_Jump_Phys(Fighter_GObj* gobj);
/* 0CB4B0 */ void ftCo_Jump_Coll(Fighter_GObj* gobj);
#define GALE01_0CB6EC
/* 0CB6EC */ void ft_800CB6EC(Fighter* fp, s32 arg1);
/* 0CB804 */ bool ft_did_jump(Fighter* fp, bool);
/* 0CB870 */ bool ftCo_800CB870(Fighter_GObj* gobj);
/* 0CB8E0 */ bool ftCo_800CB8E0(Fighter_GObj* gobj);
/* 0CB950 */ bool ftCo_JumpAerial_CheckInput(Fighter_GObj* gobj, bool);
/* 0CBAC4 */ void ftCo_800CBAC4(Fighter_GObj*, FtMotionId, Vec3*, bool);
/* 0CBBC0 */ void ftCo_JumpAerial_Enter_Basic(Fighter_GObj* gobj);
/* 0CBD18 */ void ftNs_JumpAerial_Enter(Fighter_GObj* gobj);
/* 0CBE98 */ void ftYs_JumpAerial_Enter(Fighter_GObj* gobj);
/* 0CC0E8 */ void ftPe_JumpAerial_Enter(Fighter_GObj* gobj);
/* 0CC238 */ void ftMt_JumpAerial_Enter(Fighter_GObj* gobj);
/* 0CC388 */ void ftCo_JumpAerial_Anim(Fighter_GObj* gobj);
/* 0CC4F8 */ void ftCo_JumpAerial_IASA(Fighter_GObj* gobj);
/* 0CC634 */ void ftCo_JumpAerial_Phys(Fighter_GObj* gobj);
/* 0CC6C8 */ void ftCo_JumpAerial_Phys_Cb(Fighter_GObj* gobj);
/* 0CC700 */ void ftCo_JumpAerial_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_KINOKOGIANTEND_H
/* 0D1A8C */ int Fighter_SuperMushroomEnd(Fighter_GObj* gobj);
/* 0D1B04 */ void ftCo_800D1B04(Fighter_GObj*);
/* 0D1BA0 */ void ftCo_800D1BA0(Fighter_GObj*, int);
/* 0D1CAC */ void ftCo_KinokoGiantEnd_Anim(Fighter_GObj* gobj);
/* 0D1CE8 */ void ftCo_KinokoGiantEnd_Coll(Fighter_GObj* gobj);
/* 0D1D10 */ void ftCo_800D1D10(Fighter_GObj*, int);
/* 0D1DB0 */ void fn_800D1DB0(Fighter_GObj*);
/* 0D1E1C */ void ftCo_KinokoGiantEndAir_Anim(Fighter_GObj* gobj);
/* 0D1E58 */ void ftCo_KinokoGiantEndAir_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_KINOKOGIANTSTART_H
/* 0D14E4 */ bool Fighter_SuperMushroomApply(Fighter_GObj* gobj);
/* 0D15D0 */ void ftCo_800D15D0(Fighter_GObj*);
/* 0D170C */ void ftCo_800D170C(Fighter_GObj* gobj);
/* 0D1868 */ void ftCo_KinokoGiantStart_Anim(Fighter_GObj* gobj);
/* 0D18A4 */ void ftCo_KinokoGiantStart_Coll(Fighter_GObj* gobj);
/* 0D18CC */ void ftCo_800D18CC(Fighter_GObj*);
/* 0D19BC */ void fn_800D19BC(Fighter_GObj*);
/* 0D1A28 */ void ftCo_KinokoGiantStartAir_Anim(Fighter_GObj* gobj);
/* 0D1A64 */ void ftCo_KinokoGiantStartAir_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_KINOKOSMALLEND_H
/* 0D237C */ bool Fighter_PoisonMushroomEnd(Fighter_GObj* gobj);
/* 0D23F4 */ void ftCo_800D23F4(Fighter_GObj*);
/* 0D2490 */ void ftCo_800D2490(Fighter_GObj*, int);
/* 0D259C */ void ftCo_KinokoSmallEnd_Anim(Fighter_GObj* gobj);
/* 0D25D8 */ void ftCo_KinokoSmallEnd_Coll(Fighter_GObj* gobj);
/* 0D2600 */ void ftCo_800D2600(Fighter_GObj*, int);
/* 0D26A0 */ void fn_800D26A0(Fighter_GObj* gobj);
/* 0D270C */ void ftCo_KinokoSmallEndAir_Anim(Fighter_GObj* gobj);
/* 0D2748 */ void ftCo_KinokoSmallEndAir_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_KINOKOSMALLSTART_H
/* 0D1E80 */ bool Fighter_PoisonMushroomApply(Fighter_GObj* gobj);
/* 0D1F6C */ void ftCo_800D1F6C(Fighter_GObj*);
/* 0D1FFC */ void ftCo_800D1FFC(Fighter_GObj*);
/* 0D2158 */ void ftCo_KinokoSmallStart_Anim(Fighter_GObj* gobj);
/* 0D2194 */ void ftCo_KinokoSmallStart_Coll(Fighter_GObj* gobj);
/* 0D21BC */ void ftCo_800D21BC(Fighter_GObj*);
/* 0D22AC */ void fn_800D22AC(Fighter_GObj* gobj);
/* 0D2318 */ void ftCo_KinokoSmallStartAir_Anim(Fighter_GObj* gobj);
/* 0D2354 */ void ftCo_KinokoSmallStartAir_Coll(Fighter_GObj* gobj);
#define GALE01_0CB4E0
/* 0CB4E0 */ void ftCo_KneeBend_Enter(Fighter_GObj* gobj,
                                      ftCo_JumpInput jump_input);
/* 0CB528 */ void ftCo_KneeBend_Anim(Fighter_GObj* gobj);
/* 0CB59C */ void ftCo_KneeBend_Check_ShortHop(Fighter_GObj* gobj);
/* 0CB5FC */ void ftCo_KneeBend_IASA(Fighter_GObj* gobj);
/* 0CB6AC */ void ftCo_KneeBend_Phys(Fighter_GObj* gobj);
/* 0CB6CC */ void ftCo_KneeBend_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_LANDING_H
/* 0D5AEC */ void ftCo_Landing_Enter(Fighter_GObj* gobj, FtMotionId msid,
                                     bool allow_interrupt, MotionFlags flags,
                                     float anim_start, float anim_speed);
/* 0D5BF8 */ void ftCo_Landing_Enter_Basic(Fighter_GObj* gobj);
/* 0D5C54 */ void ftCo_LandingFallSpecial_Enter_Basic(Fighter_GObj* gobj);
/* 0D5CB0 */ void ftCo_LandingFallSpecial_Enter(Fighter_GObj*,
                                                bool allow_interrupt,
                                                float landing_lag);
/* 0D5D3C */ void ftCo_Landing_Anim(Fighter_GObj* gobj);
/* 0D5D78 */ void ftCo_Landing_IASA(Fighter_GObj* gobj);
/* 0D5F18 */ void ftCo_Landing_Phys(Fighter_GObj* gobj);
/* 0D5F38 */ void ftCo_Landing_Coll(Fighter_GObj* gobj);
#define GALE01_08D5FC
/* 08D5FC */ void ftCo_LandingAir_EnterWithLag(Fighter_GObj* gobj);
/* 08D708 */ void ftCo_LandingAir_EnterWithMsidLag(Fighter_GObj* gobj,
                                                   FtMotionId msid, float lag);
/* 08D78C */ void ftCo_LandingAir_Anim(Fighter_GObj* gobj);
/* 08D7AC */ void ftCo_LandingAir_IASA(Fighter_GObj* gobj);
/* 08D7B0 */ void ftCo_LandingAir_Phys(Fighter_GObj* gobj);
/* 08D7D0 */ void ftCo_LandingAir_Coll(Fighter_GObj* gobj);
#define GALE01_0968E0
/* 0968E0 */ void ftCo_LiftWait_Anim(Fighter_GObj* gobj);
/* 0968E4 */ void ftCo_LiftWait_IASA(Fighter_GObj* gobj);
/* 096934 */ void ftCo_LiftWait_Phys(Fighter_GObj* gobj);
/* 0969BC */ void ftCo_LiftWait_Coll(Fighter_GObj* gobj);
/* 096D9C */ void ftCo_80096D9C(Fighter_GObj* gobj);
/* 096E68 */ void ftCo_80096E68(Fighter_GObj* gobj);
/* 096EF8 */ bool ftCo_80096EF8(Fighter_GObj* gobj);
/* 096F48 */ void ftCo_80096F48(Fighter_GObj* gobj);
/* 096FD0 */ void ftCo_LiftWalk_Anim(Fighter_GObj* gobj);
/* 097074 */ void ftCo_LiftWalk_IASA(Fighter_GObj* gobj);
/* 097098 */ void ftCo_LiftWalk_Phys(Fighter_GObj* gobj);
/* 0970B8 */ void ftCo_LiftWalk_Coll(Fighter_GObj* gobj);
/* 0970E0 */ bool ftCo_800970E0(Fighter_GObj* gobj);
/* 097130 */ void ftCo_80097130(Fighter_GObj* gobj);
/* 0971B0 */ void ftCo_LiftTurn_Anim(Fighter_GObj* gobj);
/* 097458 */ void ftCo_LiftTurn_IASA(Fighter_GObj* gobj);
/* 09747C */ void ftCo_LiftTurn_Phys(Fighter_GObj* gobj);
/* 09749C */ void ftCo_LiftTurn_Coll(Fighter_GObj* gobj);
/* 0974C4 */ void ftCo_800974C4(Fighter_GObj* gobj);
/* 09750C */ void ftCo_8009750C(Fighter_GObj* gobj);
#define GALE01_09CD5C
/* 09CD5C */ void ftCo_8009F39C(Fighter_GObj* gobj);
/* 09CDC0 */ void ftCo_MissFoot_Anim(Fighter_GObj* gobj);
/* 09CDFC */ void ftCo_MissFoot_IASA(Fighter_GObj* gobj);
/* 09CE00 */ void ftCo_MissFoot_Phys(Fighter_GObj* gobj);
/* 09CE20 */ void ftCo_MissFoot_Coll(Fighter_GObj* gobj);
#define GALE01_09A3C8
/* 09A3C8 */ bool ftCo_8009A3C8(Fighter_GObj* gobj);
/* 09A468 */ void ftCo_Ottotto_Anim(Fighter_GObj* gobj);
/* 09A4A4 */ void ftCo_Ottotto_IASA(Fighter_GObj* gobj);
/* 09A5F4 */ void ftCo_Ottotto_Phys(Fighter_GObj* gobj);
/* 09A5F8 */ void ftCo_Ottotto_Coll(Fighter_GObj* gobj);
/* 09A728 */ void ftCo_OttottoWait_Anim(Fighter_GObj* gobj);
/* 09A72C */ void ftCo_OttottoWait_IASA(Fighter_GObj* gobj);
/* 09A74C */ void ftCo_OttottoWait_Phys(Fighter_GObj* gobj);
/* 09A750 */ void ftCo_OttottoWait_Coll(Fighter_GObj* gobj);
#define GALE01_099F1C
/* 099F1C */ bool ftCo_80099F1C(Fighter_GObj* gobj);
/* 099F9C */ bool ftCo_80099F9C(Fighter_GObj* gobj);
/* 09A080 */ bool ftCo_8009A080(Fighter_GObj* gobj);
/* 09A134 */ bool ftCo_8009A134(Fighter_GObj* gobj);
/* 09A184 */ void ftCo_8009A184(Fighter_GObj* gobj, FtMotionId msid,
                                MotionFlags mf, float anim_start);
/* 09A228 */ void ftCo_8009A228(Fighter_GObj* gobj);
/* 09A2A8 */ void ftCo_Pass_Anim(Fighter_GObj* gobj);
/* 09A2E4 */ void ftCo_Pass_IASA(Fighter_GObj* gobj);
/* 09A388 */ void ftCo_Pass_Phys(Fighter_GObj* gobj);
/* 09A3A8 */ void ftCo_Pass_Coll(Fighter_GObj* gobj);
#define GALE01_098430
/* 098358 */ void ftCo_800987D0(Fighter_GObj* gobj);
/* 098430 */ void ftCo_Passive_Anim(Fighter_GObj* gobj);
/* 09846C */ void ftCo_Passive_IASA(Fighter_GObj* gobj);
/* 098470 */ void ftCo_Passive_Phys(Fighter_GObj* gobj);
/* 098490 */ void ftCo_Passive_Coll(Fighter_GObj* gobj);
#define GALE01_0C23A0
/* 0C23A0 */ bool ftCo_800C23A0(Fighter_GObj* gobj);
/* 0C23FC */ void ftCo_800C23FC(Fighter_GObj* gobj);
/* 0C252C */ void ftCo_PassiveCeil_Anim(Fighter_GObj* gobj);
/* 0C25AC */ void ftCo_PassiveCeil_IASA(Fighter_GObj* gobj);
/* 0C25B0 */ void ftCo_PassiveCeil_Phys(Fighter_GObj* gobj);
/* 0C25D0 */ void ftCo_PassiveCeil_Coll(Fighter_GObj* gobj);
#define GALE01_0984B0
/* 0984B0 */ bool ftCo_80098928(Fighter_GObj* gobj);
/* 098628 */ void ftCo_PassiveStand_Anim(Fighter_GObj* gobj);
/* 098664 */ void ftCo_PassiveStand_IASA(Fighter_GObj* gobj);
/* 098668 */ void ftCo_PassiveStand_Phys(Fighter_GObj* gobj);
/* 098688 */ void ftCo_PassiveStand_Coll(Fighter_GObj* gobj);
#define GALE01_0C1D38
/* 0C1D38 */ bool ftCo_800C1D38(Fighter_GObj* gobj);
/* 0C1E0C */ bool ftCo_800C1E0C(Fighter* fp);
/// @todo UnclePunch Map file: AS_203_PassiveWalljump_Walljump
/* 0C1E64 */ void ftCo_800C1E64(Fighter_GObj* gobj, int msid, int timer,
                                int vel_y_exponent, float facing_dir);
/* 0C2028 */ void ftCo_PassiveWall_Anim(Fighter_GObj* gobj);
/* 0C2180 */ void ftCo_PassiveWall_IASA(Fighter_GObj* gobj);
/* 0C22C0 */ void ftCo_PassiveWall_Phys(Fighter_GObj* gobj);
/* 0C2348 */ void ftCo_PassiveWall_Coll(Fighter_GObj* gobj);
#define GALE01_099D9C
/* 099D9C */ void ftCo_80099D9C(Fighter_GObj* gobj);
/* 099E24 */ void ftCo_ReboundStop_Anim(Fighter_GObj* gobj);
/* 099E80 */ void ftCo_Rebound_Anim(Fighter_GObj* gobj);
/* 099EBC */ void ftCo_Rebound_IASA(Fighter_GObj* gobj);
/* 099EC0 */ void ftCo_Rebound_Phys(Fighter_GObj* gobj);
/* 099EFC */ void ftCo_Rebound_Coll(Fighter_GObj* gobj);
#define GALE01_0CA5F0
/* 0CA5F0 */ bool fn_800CA5F0(Fighter_GObj* gobj);
/* 0CA644 */ bool fn_800CA644(Fighter_GObj* gobj);
/* 0CA698 */ bool fn_800CA698(Fighter_GObj* gobj);
/* 0CA6F4 */ void ftCo_Run_Enter(Fighter_GObj* gobj, float);
/* 0CA71C */ void ftCo_Run_Enter_Full(Fighter_GObj* gobj, float, float, float);
/* 0CA77C */ void ftCo_Run_Anim(Fighter_GObj* gobj);
/* 0CA830 */ void ftCo_Run_IASA(Fighter_GObj* gobj);
/* 0CA95C */ void ftCo_Run_Phys(Fighter_GObj* gobj);
/* 0CAA2C */ void ftCo_Run_Coll(Fighter_GObj* gobj);
#define GALE01_0CABC4
/* 0CABC4 */ bool ftCo_RunBrake_CheckInput(Fighter_GObj* gobj);
/* 0CAC18 */ void ftCo_RunBrake_Enter(Fighter_GObj* gobj);
/* 0CAC9C */ void ftCo_RunBrake_Anim(Fighter_GObj* gobj);
/* 0CADB0 */ void ftCo_RunBrake_IASA(Fighter_GObj* gobj);
/* 0CAE18 */ void ftCo_RunBrake_Phys(Fighter_GObj* gobj);
/* 0CAE60 */ void ftCo_RunBrake_Coll(Fighter_GObj* gobj);
#define GALE01_0CAA4C
/* 0CAA4C */ void ftCo_RunDirect_Anim(Fighter_GObj* gobj);
/* 0CAA6C */ void ftCo_RunDirect_IASA(Fighter_GObj* gobj);
/* 0CAB84 */ void ftCo_RunDirect_Phys(Fighter_GObj* gobj);
/* 0CABA4 */ void ftCo_RunDirect_Coll(Fighter_GObj* gobj);
#define GALE01_098E3C
/* 098E3C */ void ftCo_80098E3C(Fighter_GObj* gobj);
/* 098A44 */ void ftCo_ShieldBreakDown_Anim(Fighter_GObj* gobj);
/* 098A80 */ void ftCo_ShieldBreakDown_IASA(Fighter_GObj* gobj);
/* 098A84 */ void ftCo_ShieldBreakDown_Phys(Fighter_GObj* gobj);
/* 098AA4 */ void ftCo_ShieldBreakDown_Coll(Fighter_GObj* gobj);
#define GALE01_0988E4
/* 0988E4 */ void ftCo_80098D90(Fighter_GObj* gobj);
/* 098940 */ void ftCo_ShieldBreakFall_Anim(Fighter_GObj* gobj);
/* 098944 */ void ftCo_ShieldBreakFall_IASA(Fighter_GObj* gobj);
/* 098948 */ void ftCo_ShieldBreakFall_Phys(Fighter_GObj* gobj);
/* 098968 */ void ftCo_ShieldBreakFall_Coll(Fighter_GObj* gobj);
#define GALE01_0986A0
/* 0986A0 */ void ftCo_80098B20(Fighter_GObj* gobj);
/* 098794 */ void ftCo_ShieldBreakFly_Anim(Fighter_GObj* gobj);
/* 0987D0 */ void ftCo_ShieldBreakFly_IASA(Fighter_GObj* gobj);
/* 0987D4 */ void ftCo_ShieldBreakFly_Phys(Fighter_GObj* gobj);
/* 0987F4 */ void ftCo_ShieldBreakFly_Coll(Fighter_GObj* gobj);
/* 098820 */ void ftCo_80098C9C(Fighter_GObj* gobj);
#define GALE01_098F3C
/* 098F3C */ void ftCo_80098F3C(Fighter_GObj* gobj);
/* 098F90 */ void ftCo_ShieldBreakStand_Anim(Fighter_GObj* gobj);
/* 098FCC */ void ftCo_ShieldBreakStand_IASA(Fighter_GObj* gobj);
/* 098FD0 */ void ftCo_ShieldBreakStand_Phys(Fighter_GObj* gobj);
/* 098FF0 */ void ftCo_ShieldBreakStand_Coll(Fighter_GObj* gobj);
#define GALE01_08A7A8
/* 09C5A4 */ void ftCo_8009C5A4(Fighter_GObj* gobj, int);
/* 09C640 */ void ftCo_8009C640(Fighter_GObj* gobj, int);
/* 09C830 */ void ftCo_Shouldered_Anim(Fighter_GObj* gobj);
/* 09CA00 */ void ftCo_Shouldered_IASA(Fighter_GObj* gobj);
/* 09CA04 */ void ftCo_Shouldered_Phys(Fighter_GObj* gobj);
/* 09CA08 */ void ftCo_Shouldered_Coll(Fighter_GObj* gobj);
#define GALE01_09614C
/* 09614C */ bool ftCo_SpecialAir_CheckInput(Fighter_GObj* gobj);
#define GALE01_095FEC
/* 0964FC */ bool ftCo_SpecialS_HasInput(Fighter* fp);
/* 096030 */ bool ftCo_SpecialS_CheckInput(Fighter_GObj* gobj);
#define MELEE_FTCO_SQUAT_H
/* 0D5F58 */ bool ftCo_Squat_CheckInput(Fighter_GObj* gobj);
/* 0D5F84 */ bool fn_800D5F84(Fighter_GObj* gobj);
/* 0D5FB0 */ bool ftCo_800D5FB0(Fighter_GObj* gobj);
/* 0D607C */ void ftCo_Squat_Anim(Fighter_GObj* gobj);
/* 0D60B8 */ void ftCo_Squat_IASA(Fighter_GObj* gobj);
/* 0D623C */ void ftCo_Squat_Phys(Fighter_GObj* gobj);
/* 0D625C */ void ftCo_Squat_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_SQUATRV_H
/* 0D65D8 */ bool ftCo_SquatRv_CheckInput(Fighter_GObj* gobj);
/* 0D6658 */ void ftCo_SquatRv_Anim(Fighter_GObj* gobj);
/* 0D6694 */ void ftCo_SquatRv_IASA(Fighter_GObj* gobj);
/* 0D6784 */ void ftCo_SquatRv_Phys(Fighter_GObj* gobj);
/* 0D67A4 */ void ftCo_SquatRv_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_SQUATWAIT_H
/* 0D627C */ bool ftCo_SquatWait_CheckInput(Fighter_GObj* gobj);
/* 0D638C */ void ftCo_800D638C(Fighter_GObj* gobj);
/* 0D6448 */ void ftCo_SquatWait_Anim(Fighter_GObj* gobj);
/* 0D6474 */ void ftCo_SquatWait_IASA(Fighter_GObj* gobj);
/* 0D6584 */ void ftCo_SquatWait_Phys(Fighter_GObj* gobj);
/* 0D65B8 */ void ftCo_SquatWait_Coll(Fighter_GObj* gobj);
#define GALE01_09CA98
/* 09CA98 */ bool ftCo_8009EF68(Fighter_GObj* gobj);
/* 09CB78 */ void ftCo_StopCeil_Anim(Fighter_GObj* gobj);
/* 09CBE8 */ void ftCo_StopCeil_IASA(Fighter_GObj* gobj);
/* 09CBEC */ void ftCo_StopCeil_Phys(Fighter_GObj* gobj);
/* 09CBF0 */ void ftCo_StopCeil_Coll(Fighter_GObj* gobj);
#define GALE01_09EDA4
/* 09EDA4 */ bool ftCo_8009EDA4(Fighter_GObj* gobj);
/* 09EF04 */ void ftCo_StopWall_Anim(Fighter_GObj* gobj);
/* 09EF40 */ void ftCo_StopWall_IASA(Fighter_GObj* gobj);
/* 09EF44 */ void ftCo_StopWall_Phys(Fighter_GObj* gobj);
/* 09EF48 */ void ftCo_StopWall_Coll(Fighter_GObj* gobj);
#define MELEE_FTCO_THROW_H
/* 0DC8D8 */ void fn_800DC8D8(Fighter_GObj* gobj);
/* 0DC8FC */ void fn_800DC8FC(Fighter_GObj* gobj);
/* 0DC920 */ void ftCo_800DC920(Fighter_GObj*, Fighter_GObj* gobj);
/* 0DCE34 */ void ftCo_800DCE34(Fighter_GObj* gobj0, Fighter_GObj* gobj1);
/* 0DCFD4 */ void ftCo_800DCFD4(Fighter_GObj* gobj);
/* 0DD100 */ void ftCo_800DD100(Fighter_GObj*);
/* 0DD168 */ void ftCo_800DD168(Fighter_GObj* gobj);
/* 0DD1E4 */ bool ftCo_800DD1E4(Fighter_GObj* gobj);
/* 0DD398 */ void ftCo_800DD398(Fighter_GObj* gobj, FtMotionId msid,
                                FtMotionId victim_msid, float anim_speed);
/* 0DD4B0 */ void ftCo_800DD4B0(Fighter_GObj* gobj, FtMotionId msid);
/* 0DD724 */ void ftCo_800DD724(Fighter_GObj* gobj);
/* 0DD8C4 */ void ftCo_ThrowF_Anim(Fighter_GObj* gobj);
/* 0DD92C */ void ftCo_ThrowF_IASA(Fighter_GObj* gobj);
/* 0DD930 */ void ftCo_ThrowF_Phys(Fighter_GObj* gobj);
/* 0DD990 */ void ftCo_ThrowF_Coll(Fighter_GObj* gobj);
/* 0DDA10 */ void ftCo_ThrowB_Anim(Fighter_GObj* gobj);
/* 0DDA5C */ void ftCo_ThrowB_IASA(Fighter_GObj* gobj);
/* 0DDA60 */ void ftCo_ThrowB_Phys(Fighter_GObj* gobj);
/* 0DDAC0 */ void ftCo_ThrowB_Coll(Fighter_GObj* gobj);
/* 0DDB40 */ void ftCo_ThrowHi_Anim(Fighter_GObj* gobj);
/* 0DDB8C */ void ftCo_ThrowHi_IASA(Fighter_GObj* gobj);
/* 0DDB90 */ void ftCo_ThrowHi_Phys(Fighter_GObj* gobj);
/* 0DDBF0 */ void ftCo_ThrowHi_Coll(Fighter_GObj* gobj);
/* 0DDC70 */ void ftCo_ThrowHi_Cam(Fighter_GObj* gobj);
/* 0DDCB4 */ void ftCo_ThrowLw_Anim(Fighter_GObj* gobj);
/* 0DDD00 */ void ftCo_ThrowLw_IASA(Fighter_GObj* gobj);
/* 0DDD04 */ void ftCo_ThrowLw_Phys(Fighter_GObj* gobj);
/* 0DDD64 */ void ftCo_ThrowLw_Coll(Fighter_GObj* gobj);
/* 0DDDE4 */ void ftCo_800DDDE4(Fighter_GObj* gobj, Fighter_GObj* gobj2,
                                bool arg);
/* 0DE2A8 */ void ftCo_800DE2A8(Fighter_GObj*, Fighter_GObj* gobj);
/* 0DE2CC */ void ftCo_800DE2CC(Fighter_GObj*, Fighter_GObj*);
/* 0DE2F0 */ void ftCo_800DE2F0(Fighter_GObj* gobj);
/* 105FEC */ void fn_80105FEC(HSD_GObj* gobj);
#define MELEE_FTCO_THROWN_H
/* 0DE3FC */ void ftCo_800DE3FC(Fighter_GObj* gobj, FtMotionId msid,
                                float anim_speed);
/* 0DE508 */ void ftCo_800DE508(Fighter_GObj* gobj);
/* 0DE69C */ void ftCo_ThrownF_Anim(Fighter_GObj* gobj);
/* 0DE6BC */ void ftCo_ThrownF_IASA(Fighter_GObj* gobj);
/* 0DE6C0 */ void ftCo_ThrownF_Phys(Fighter_GObj* gobj);
/* 0DE6C4 */ void ftCo_ThrownF_Coll(Fighter_GObj* gobj);
/* 0DE6C8 */ void ftCo_ThrownB_Anim(Fighter_GObj* gobj);
/* 0DE6E8 */ void ftCo_ThrownB_IASA(Fighter_GObj* gobj);
/* 0DE6EC */ void ftCo_ThrownB_Phys(Fighter_GObj* gobj);
/* 0DE6F0 */ void ftCo_ThrownB_Coll(Fighter_GObj* gobj);
/* 0DE6F4 */ void ftCo_ThrownHi_Anim(Fighter_GObj* gobj);
/* 0DE714 */ void ftCo_ThrownHi_IASA(Fighter_GObj* gobj);
/* 0DE718 */ void ftCo_ThrownHi_Phys(Fighter_GObj* gobj);
/* 0DE71C */ void ftCo_ThrownHi_Coll(Fighter_GObj* gobj);
/* 0DE720 */ void ftCo_ThrownHi_Cam(Fighter_GObj* gobj);
/* 0DE76C */ void ftCo_ThrownLw_Anim(Fighter_GObj* gobj);
/* 0DE78C */ void ftCo_ThrownLw_IASA(Fighter_GObj* gobj);
/* 0DE790 */ void ftCo_ThrownLw_Phys(Fighter_GObj* gobj);
/* 0DE794 */ void ftCo_ThrownLw_Coll(Fighter_GObj* gobj);
/* 0DE798 */ void fn_800DE798(Fighter_GObj* gobj);
/* 0DE7C0 */ void ftCo_800DE7C0(Fighter_GObj* gobj, Fighter_GObj* victim,
                                bool is_upward);
/* 0DE854 */ void ftCo_800DE854(Fighter_GObj* gobj);
/* 0DE920 */ void ftCo_800DE920(Fighter_GObj* gobj, float anim_timer);
/* 0DE974 */ void ftCo_800DE974(Fighter_GObj* gobj);
#define GALE01_0BD9E0
/* 0BD9E0 */ FighterKind ftCo_800BD9E0(Fighter_GObj* gobj,
                                       Fighter_GObj* victim_gobj);
/* 0BDA50 */ void ftCo_800BDA50(Fighter_GObj* gobj);
/* 0BDA74 */ void ftCo_800BDA74(Fighter_GObj* gobj, Vec3* normal);
/* 0BDB58 */ void ftCo_800BDB58(Fighter_GObj* gobj,
                                Fighter_GObj* thrower_gobj);
/* 0BDDC4 */ void ftCo_ThrownKirbyStar_Anim(Fighter_GObj* gobj);
/* 0BDDC8 */ void ftCo_ThrownKirbyStar_IASA(Fighter_GObj* gobj);
/* 0BDDCC */ void ftCo_ThrownKirbyStar_Phys(Fighter_GObj* gobj);
/* 0BDF10 */ void ftCo_ThrownKirbyStar_Coll(Fighter_GObj* gobj);
/* 0BE000 */ void ftCo_800BE000(Fighter_GObj* gobj,
                                Fighter_GObj* thrower_gobj);
/* 0BE258 */ void ftCo_ThrownCopyStar_Anim(Fighter_GObj* gobj);
/* 0BE25C */ void ftCo_ThrownCopyStar_IASA(Fighter_GObj* gobj);
/* 0BE260 */ void ftCo_ThrownCopyStar_Phys(Fighter_GObj* gobj);
/* 0BE3A4 */ void ftCo_ThrownCopyStar_Coll(Fighter_GObj* gobj);
/* 0BE494 */ void ftCo_800BE494(Fighter_GObj* gobj);
/* 0BE618 */ void ftCo_ThrownKirby_Anim(Fighter_GObj* gobj);
/* 0BE61C */ void ftCo_ThrownKirby_IASA(Fighter_GObj* gobj);
/* 0BE620 */ void ftCo_ThrownKirby_Phys(Fighter_GObj* gobj);
/* 0BE6A8 */ void ftCo_ThrownKirby_Coll(Fighter_GObj* gobj);
/* 0BE6AC */ void ftCo_800BE6AC(Fighter_GObj* gobj);
/* 0BE7C0 */ void ftCo_800BE7C0(Fighter_GObj* gobj);
#define GALE01_0BCDE0
/* 0BCDE0 */ void ftCo_800BCDE0(Fighter_GObj* gobj, FtMotionId msid);
/* 0BCE64 */ void ftCo_800BCE64(Fighter_GObj* gobj, FtMotionId msid);
/* 0BCED8 */ void ftCo_ThrownKoopaF_Anim(Fighter_GObj* gobj);
/* 0BCEDC */ void ftCo_ThrownKoopaF_IASA(Fighter_GObj* gobj);
/* 0BCEE0 */ void ftCo_ThrownKoopaF_Phys(Fighter_GObj* gobj);
/* 0BCEE4 */ void ftCo_ThrownKoopaF_Coll(Fighter_GObj* gobj);
/* 0BCEE8 */ void ftCo_ThrownKoopaB_Anim(Fighter_GObj* gobj);
/* 0BCEEC */ void ftCo_ThrownKoopaB_IASA(Fighter_GObj* gobj);
/* 0BCEF0 */ void ftCo_ThrownKoopaB_Phys(Fighter_GObj* gobj);
/* 0BCEF4 */ void ftCo_ThrownKoopaB_Coll(Fighter_GObj* gobj);
/* 0BCEF8 */ void ftCo_ThrownKoopaAirF_Anim(Fighter_GObj* gobj);
/* 0BCEFC */ void ftCo_ThrownKoopaAirF_IASA(Fighter_GObj* gobj);
/* 0BCF00 */ void ftCo_ThrownKoopaAirF_Phys(Fighter_GObj* gobj);
/* 0BCF04 */ void ftCo_ThrownKoopaAirF_Coll(Fighter_GObj* gobj);
/* 0BCF08 */ void ftCo_ThrownKoopaAirB_Anim(Fighter_GObj* gobj);
/* 0BCF0C */ void ftCo_ThrownKoopaAirB_IASA(Fighter_GObj* gobj);
/* 0BCF10 */ void ftCo_ThrownKoopaAirB_Phys(Fighter_GObj* gobj);
/* 0BCF14 */ void ftCo_ThrownKoopaAirB_Coll(Fighter_GObj* gobj);
#define GALE01_0BD17C
/* 0BD0E8 */ void ftCo_800BD0E8(Fighter_GObj* gobj, FtMotionId msid);
/* 0BD17C */ void ftCo_ThrownMewtwo_Anim(Fighter_GObj* gobj);
/* 0BD180 */ void ftCo_ThrownMewtwo_IASA(Fighter_GObj* gobj);
/* 0BD184 */ void ftCo_ThrownMewtwo_Phys(Fighter_GObj* gobj);
/* 0BD188 */ void ftCo_ThrownMewtwo_Coll(Fighter_GObj* gobj);
/* 0BD18C */ void ftCo_ThrownMewtwoAir_Anim(Fighter_GObj* gobj);
/* 0BD190 */ void ftCo_ThrownMewtwoAir_IASA(Fighter_GObj* gobj);
/* 0BD194 */ void ftCo_ThrownMewtwoAir_Phys(Fighter_GObj* gobj);
/* 0BD198 */ void ftCo_ThrownMewtwoAir_Coll(Fighter_GObj* gobj);
#define GALE01_0C97A8
/* 0C97A8 */ bool ftCo_800C97A8(Fighter_GObj* gobj);
/* 0C97DC */ bool ftCo_Turn_CheckInput(Fighter_GObj* gobj);
/* 0C9840 */ void ftCo_Turn_Enter(Fighter_GObj*, FtMotionId, MotionFlags,
                                  float, float, float);
/* 0C98AC */ void ftCo_Turn_Enter_Basic(Fighter_GObj* gobj);
/* 0C9924 */ void ftCo_Turn_Anim_Inner(Fighter_GObj* gobj);
/* 0C9970 */ void ftCo_Turn_Anim(Fighter_GObj* gobj);
/* 0C99F8 */ void ftCo_Turn_IASA(Fighter_GObj* gobj);
/* 0C9BEC */ void ftCo_Turn_Phys(Fighter_GObj* gobj);
/* 0C9C0C */ void ftCo_Turn_Coll(Fighter_GObj* gobj);
/* 0C9C2C */ bool fn_800C9C2C(Fighter_GObj* gobj);
/* 0C9C74 */ void ftCo_Turn_Enter_Smash(Fighter_GObj* gobj);
#define GALE01_0C9CEC
/* 0C9CEC */ bool fn_800C9CEC(Fighter_GObj* gobj);
/* 0C9D40 */ bool fn_800C9D40(Fighter_GObj* gobj);
/* 0C9D94 */ void ftCo_TurnRun_Enter(Fighter_GObj* gobj, float anim_start);
/* 0C9E10 */ void ftCo_TurnRun_Anim(Fighter_GObj* gobj);
/* 0C9ED8 */ void ftCo_TurnRun_IASA(Fighter_GObj* gobj);
/* 0C9EFC */ void ftCo_TurnRun_Phys(Fighter_GObj* gobj);
/* 0CA024 */ void ftCo_TurnRun_Coll(Fighter_GObj* gobj);
#define GALE01_08A494
/* 08A494 */ void ftCo_Wait_Anim(Fighter_GObj* gobj);
/// Interrupt_Wait
/* 08A4D4 */ void ftCo_Wait_IASA(Fighter_GObj* gobj);
/* 08A644 */ void ftCo_Wait_Phys(Fighter_GObj* gobj);
/* 08A678 */ void ftCo_Wait_Coll(Fighter_GObj* gobj);
#define GALE01_0C9468
/* 0C9468 */ bool ftCo_Walk_CheckInput(Fighter_GObj* gobj);
/* 0C94B4 */ bool ftCo_Walk_CheckInput_Ottotto(Fighter_GObj* gobj);
/* 0C9528 */ void ftCo_Walk_Enter(Fighter_GObj* gobj, f32 arg8);
/* 0C95F4 */ void ftCo_Walk_Anim(Fighter_GObj* gobj);
/* 0C9614 */ void ftCo_Walk_IASA(Fighter_GObj* gobj);
/* 0C9768 */ void ftCo_Walk_Phys(Fighter_GObj* gobj);
/* 0C9788 */ void ftCo_Walk_Coll(Fighter_GObj* gobj);
#define GALE01_0C4724
/* 0C4724 */ void ftCo_800C4724(Fighter_GObj* gobj);
/* 0C4900 */ void ftCo_WarpStarJump_Anim(Fighter_GObj* gobj);
/* 0C4964 */ void ftCo_WarpStarJump_IASA(Fighter_GObj* gobj);
/* 0C4968 */ void ftCo_WarpStarJump_Phys(Fighter_GObj* gobj);
/* 0C4A14 */ void ftCo_WarpStarJump_Coll(Fighter_GObj* gobj);
/* 0C4A18 */ void ftCo_WarpStarJump_Cam(Fighter_GObj* gobj);
/* 0C4BA4 */ void ftCo_WarpStarFall_Anim(Fighter_GObj* gobj);
/* 0C4BA8 */ void ftCo_WarpStarFall_IASA(Fighter_GObj* gobj);
/* 0C4BAC */ void ftCo_WarpStarFall_Phys(Fighter_GObj* gobj);
/* 0C4C30 */ void ftCo_WarpStarFall_Coll(Fighter_GObj* gobj);
/* 0C4E2C */ void ftCo_WarpStarFall_Cam(Fighter_GObj* gobj);
#define GALE01_09D7E4
/* 09D7E4 */ void ftCo_800BBC88(Fighter_GObj* gobj);
/* 09DA30 */ void ftCo_800BBED4(Fighter_GObj* arg0, Fighter_GObj* arg1);
/* 09DD0C */ void ftCo_YoshiEgg_Anim(Fighter_GObj* gobj);
/* 09DE60 */ void ftCo_YoshiEgg_IASA(Fighter_GObj* gobj);
/* 09DE64 */ void ftCo_YoshiEgg_Phys(Fighter_GObj* gobj);
/* 09DE9C */ void ftCo_YoshiEgg_Coll(Fighter_GObj* gobj);
/* 0BC388 */ void ftCo_800BC388(Fighter_GObj* gobj);
/* 0BC3AC */ void ftCo_800BC3AC(Fighter_GObj* gobj);
/* 0BC3D0 */ void ftCo_800BC3D0(Fighter_GObj* gobj);
#define GALE01_093C3C
/* 093CF4 */ bool ftpickupitem_80094150(Fighter_GObj* arg0, Item_GObj* arg1);
/* 0942A0 */ Item_GObj* ftpickupitem_800942A0(Fighter_GObj*, u32 flags);
/* 094334 */ bool ftpickupitem_80094790(HSD_GObj* gobj);
/* 0943BC */ void ftpickupitem_80094818(HSD_GObj* gobj, bool);
/* 09447C */ bool ftpickupitem_8009447C(HSD_GObj*, Item_GObj*);
/* 0945B8 */ void ftpickupitem_Anim(Fighter_GObj* gobj);
/* 094694 */ void ftpickupitem_80094694(Fighter_GObj*, FtMotionId, bool);
/* 0946C4 */ void ftpickupitem_IASA(Fighter_GObj* gobj);
/* 0946C8 */ void ftpickupitem_Phys(Fighter_GObj* gobj);
/* 0946E8 */ void ftpickupitem_Coll(Fighter_GObj* gobj);
/* 0948A8 */ void ftpickupitem_800948A8(Fighter_GObj*, Item_GObj*);
/* 094D90 */ void ftpickupitem_80094D90(Fighter_GObj* gobj);
/* 094DF8 */ void ftpickupitem_80094DF8(Fighter_GObj* gobj);
#define MELEE_FT_CHARA_FTCOMMON_INLINES_H
static inline void ftCo_SpawnEf(Fighter_GObj* gobj, HSD_JObj* joint, u32 arg2,
                                enum_t arg3)
{
    Fighter* fp = gobj->user_data;
    do { u64 _0 = 0; } while (0);
    efAsync_Spawn((HSD_GObj*) gobj, &fp->x60C, arg2, arg3, joint);
}
static inline void ftCo_ReleaseItemAndVictim(Fighter_GObj* gobj)
{
    ftCommon_8007DB58(gobj);
    ftCo_8009750C(gobj);
    ftCo_800DD168(gobj);
}
static inline void ftCo_Thrown_Enter(Fighter_GObj* gobj, FtMotionId msid,
                                     MotionFlags mf, float anim_start)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->facing_dir = GET_FIGHTER(fp->victim_gobj)->facing_dir;
    fp->mv.co.capturekoopa.x0 = 0;
    Fighter_ChangeMotionState(gobj, msid, mf, anim_start, 1, 0,
                              fp->victim_gobj);
    fp->accessory1_cb = (HSD_GObjEvent) ftCo_800DE508;
    ftCommon_8007E2F4(fp, 0x1FF);
}
static inline void ftCo_Barrel_ApplyKnockback(Fighter* fp, float kb_angle,
                                              HitCapsule* hit)
{
    if (kb_angle < 0) {
        kb_angle += 360;
    }
    kb_angle = fp->facing_dir < 0.0f ? kb_angle : 180.0f - kb_angle;
    fp->dmg.kb_applied = ftColl_80079EA8(fp, hit, hit->unk_count);
    fp->dmg.x1848_kb_angle = kb_angle;
    fp->dmg.facing_dir_1 = fp->facing_dir;
    fp->dmg.x184c_damaged_hurtbox = 0;
    fp->dmg.x1854_collpos = fp->cur_pos;
    fp->dmg.x1860_element = hit->element;
}
static inline FtMotionId ftCo_ItemParasolGetFallMotionId(
    Fighter_GObj* gobj, ftPeach_MotionState pe_msid, FtMotionId co_msid)
{
    Fighter* fp = GET_FIGHTER(gobj);
    if (fp->kind == Ft_Kind_Peach && fp->u.pe.parasol_gobj_0 != 0L) {
        return pe_msid;
    } else {
        return co_msid;
    }
}
static inline void ftCo_ItemParasol_Phys(Fighter_GObj* gobj)
{
    ftCo_ItemParasolOpen_Phys(gobj);
}
static inline void ftCommon_GroundToAirStateChange(Fighter_GObj* gobj,
                                                   Fighter* fp,
                                                   FtMotionId msid,
                                                   MotionFlags flags)
{
    ftCommon_8007D5D4(fp);
    Fighter_ChangeMotionState(gobj, msid, flags, fp->cur_anim_frame, 1.0f,
                              0.0f, 0L);
}
static inline void ftCommon_AirToGroundStateChange(Fighter_GObj* gobj,
                                                   Fighter* fp,
                                                   FtMotionId msid,
                                                   MotionFlags flags)
{
    ftCommon_8007D7FC(fp);
    Fighter_ChangeMotionState(gobj, msid, flags, fp->cur_anim_frame, 1.0f,
                              0.0f, 0L);
}
static inline void ftCo_CpuSetNeutralStick(Fighter* fp)
{
    ftCo_800B46B8(fp, CpuCmd_SetLstickX, 0);
    ftCo_800B46B8(fp, CpuCmd_SetLstickY, 0);
}
static inline void ftCo_Cliff_EnterState(Fighter_GObj* gobj, Fighter* fp,
                                         FtMotionId msid)
{
    Fighter_ChangeMotionState(gobj, msid, Ft_MF_None, 0, 1, 0, 0L);
    ftAnim_8006EBA4(gobj);
    ftCommon_8007E2F4(fp, 32);
    fp->x221D_b7 = 1;
}
static inline void ftCo_Kinoko_Anim(Fighter_GObj* gobj, HSD_GObjEvent cb)
{
    if (!fn_800D2A3C(gobj)) {
        cb(gobj);
    }
}
#define MELEE_FT_CHARA_FTCRAZYHAND_FORWARD_H
typedef enum ftCrazyhand_MotionState {
    ftCh_MS_Count = ftMh_MS_Count - 1,
    ftCh_MS_SelfCount = ftMh_MS_SelfCount - 1,
} ftCrazyhand_MotionState;
typedef enum ftCh_Submotion {
    ftCh_SM_Wait1_0 = ftCo_SM_Count,
    ftCh_SM_Wait2_0,
    ftCh_SM_Slap,
    ftCh_SM_WaitSweep,
    ftCh_SM_SweepLoop,
    ftCh_SM_SweepWait,
    ftCh_SM_Writhe,
    ftCh_SM_SpiderWalkStart,
    ftCh_SM_SpiderWalkLoop,
    ftCh_SM_SpiderWalkEnd,
    ftCh_SM_RockCrushUp,
    ftCh_SM_RockCrushWait,
    ftCh_SM_RockCrushDown,
    ftCh_SM_PaperCrush,
    ftCh_SM_Poke1,
    ftCh_SM_Poke2,
    ftCh_SM_Drill,
    ftCh_SM_FingerBeamStart,
    ftCh_SM_FingerBeamLoop,
    ftCh_SM_FingerBeamEnd,
    ftCh_SM_FingerBomb,
    ftCh_SM_Wait1_1,
    ftCh_SM_Grab,
    ftCh_SM_Cancel,
    ftCh_SM_Squeezing0,
    ftCh_SM_Squeezing1,
    ftCh_SM_Squeeze,
    ftCh_SM_Throw,
    ftCh_SM_Slam,
    ftCh_SM_Fail,
    ftCh_SM_BackDisappear,
    ftCh_SM_BackPunch,
    ftCh_SM_BackCrush,
    ftCh_SM_BackAirplane1,
    ftCh_SM_BackAirplane2,
    ftCh_SM_BackAirplane3,
    ftCh_SM_TagCrush,
    ftCh_SM_TagApplaud,
    ftCh_SM_TagRockPaper,
    ftCh_SM_TagGrab,
    ftCh_SM_TagSqueeze,
    ftCh_SM_TagFail,
    ftCh_SM_TagCancel,
    ftCh_SM_Wait1_2,
    ftCh_SM_Damage,
    ftCh_SM_Damage2,
    ftCh_SM_Entry,
    ftCh_SM_Wait1_3,
    ftCh_SM_Wait2_1,
    ftCh_SM_Count,
    ftCh_SM_SelfCount = ftCh_SM_Count - ftCo_SM_Count,
} ftCh_Submotion;
#define GALE01_155E18
/* 155E18 */ void ftCh_Init_OnDeath(HSD_GObj* gobj);
/* 155E1C */ void ftCh_Init_OnLoad(HSD_GObj* gobj);
/* 155F8C */ void ftCh_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 3D41F8 */ extern MotionState ftCh_Init_MotionStateTable[ftCh_MS_SelfCount];
/* 3D4818 */ extern char ftCh_Init_DatFilename[];
/* 3D4824 */ extern char ftCh_Init_DataName[];
/* 3D485C */ extern char ftCh_Init_AnimDatFilename[];
/* 3D4868 */ extern Fighter_CostumeStrings ftCh_Init_CostumeStrings[];
/* 45A6A8 */ extern UnkCostumeStruct ftCh_CostumeList[1];
#define GALE01_1592D4
/* 1592D4 */ void ftCh_Init_801592D4(HSD_GObj* gobj);
/* 159388 */ void ftCh_BackAirplane1_Anim(HSD_GObj* gobj);
/* 15940C */ void ftCh_BackAirplane1_IASA(HSD_GObj* gobj);
/* 159450 */ void ftCh_BackAirplane1_Phys(HSD_GObj* gobj);
/* 1594B0 */ void ftCh_BackAirplane1_Coll(HSD_GObj* gobj);
#define GALE01_1594D4
/* 1594D4 */ void ftCh_Init_801594D4(HSD_GObj* gobj);
/* 159534 */ void ftCh_BackAirplane2_Anim(HSD_GObj* gobj);
/* 159608 */ void ftCh_BackAirplane2_IASA(HSD_GObj* gobj);
/* 15964C */ void ftCh_BackAirplane2_Phys(HSD_GObj* gobj);
/* 15966C */ void ftCh_BackAirplane2_Coll(HSD_GObj* gobj);
#define GALE01_159670
/* 159670 */ void ftCh_Init_80159670(HSD_GObj* gobj);
/* 1596D0 */ void ftCh_BackAirplane3_Anim(HSD_GObj* gobj);
/* 159788 */ void ftCh_BackAirplane3_IASA(HSD_GObj* gobj);
/* 1597CC */ void ftCh_BackAirplane3_Phys(HSD_GObj* gobj);
/* 1597EC */ void ftCh_BackAirplane3_Coll(HSD_GObj* gobj);
#define GALE01_1597F0
/* 1597F0 */ void ftCh_Init_801597F0(HSD_GObj* gobj, HSD_GObjEvent cb);
/* 159858 */ void ftCh_BackCrush_Anim(HSD_GObj* gobj);
/* 1598A0 */ void ftCh_BackCrush_IASA(HSD_GObj* gobj);
/* 1598E4 */ void ftCh_BackCrush_Phys(HSD_GObj* gobj);
/* 159904 */ void ftCh_BackCrush_Coll(HSD_GObj* gobj);
#define GALE01_159908
/* 156F6C */ void fn_80159908(HSD_GObj* gobj);
/* 1599C0 */ void ftCh_BackDisappear_Anim(HSD_GObj* gobj);
/* 159A08 */ void ftCh_BackDisappear_IASA(HSD_GObj* gobj);
/* 159A4C */ void ftCh_BackDisappear_Phys(HSD_GObj* gobj);
/* 159AA0 */ void ftCh_BackDisappear_Coll(HSD_GObj* gobj);
#define GALE01_15A030
/* 15A030 */ void ftCh_Init_8015A030(HSD_GObj* gobj);
/* 15A0C4 */ void ftCh_Cancel_Anim(HSD_GObj* gobj);
/* 15A10C */ void ftCh_Cancel_IASA(HSD_GObj* gobj);
/* 15A150 */ void ftCh_Cancel_Phys(HSD_GObj* gobj);
/* 15A180 */ void ftCh_Cancel_Coll(HSD_GObj* gobj);
#define GALE01_15B548
/* 15B548 */ void fn_8015B548(HSD_GObj* gobj, HSD_GObj* gobj2);
/* 15B660 */ void ftCo_CaptureCrazyHand_Anim(HSD_GObj* gobj);
/* 15B664 */ void ftCo_CaptureCrazyHand_IASA(HSD_GObj* gobj);
/* 15B668 */ void ftCo_CaptureCrazyHand_Phys(HSD_GObj* gobj);
/* 15B66C */ void ftCo_CaptureCrazyHand_Coll(HSD_GObj* gobj);
#define GALE01_15B670
/* 15B670 */ void ftCh_GrabUnk1_8015B670(HSD_GObj* gobj);
/* 15B704 */ void ftCo_CaptureDamageCrazyHand_Anim(HSD_GObj* gobj);
/* 15B76C */ void ftCo_CaptureDamageCrazyHand_IASA(HSD_GObj* gobj);
/* 15B770 */ void ftCo_CaptureDamageCrazyHand_Phys(HSD_GObj* gobj);
/* 15B774 */ void ftCo_CaptureDamageCrazyHand_Coll(HSD_GObj* gobj);
#define GALE01_15B778
/* 15B778 */ void ftCh_GrabUnk1_8015B778(HSD_GObj* gobj);
/* 15B800 */ void ftCh_GrabUnk1_8015B800(HSD_GObj* gobj);
/* 15B840 */ void ftCo_CaptureWaitCrazyHand_Anim(HSD_GObj* gobj);
/* 15B844 */ void ftCo_CaptureWaitCrazyHand_IASA(HSD_GObj* gobj);
/* 15B848 */ void ftCo_CaptureWaitCrazyHand_Phys(HSD_GObj* gobj);
/* 15B84C */ void ftCo_CaptureWaitCrazyHand_Coll(HSD_GObj* gobj);
#define GALE01_157080
/* 157080 */ void fn_80157080(Fighter_GObj* gobj);
/* 1570CC */ void ftCh_Damage_Anim(HSD_GObj* gobj);
/* 157108 */ void ftCh_Damage_IASA(HSD_GObj* gobj);
/* 15714C */ void ftCh_Damage_Phys(HSD_GObj* gobj);
/* 15716C */ void ftCh_Damage_Coll(HSD_GObj* gobj);
/* 157170 */ void ftCh_Init_80157170(HSD_GObj* gobj);
/* 157204 */ void ftCh_Damage2_Anim(HSD_GObj* gobj);
/* 1572D4 */ void ftCh_Damage2_IASA(HSD_GObj* gobj);
/* 157318 */ void ftCh_Damage2_Phys(HSD_GObj* gobj);
/* 157378 */ void ftCh_Damage2_Coll(HSD_GObj* gobj);
/* 15737C */ void ftCh_Init_8015737C(HSD_GObj* gobj);
/* 1573C8 */ void ftCh_WaitSweep_Anim(HSD_GObj* gobj);
/* 157404 */ void ftCh_WaitSweep_Phys(HSD_GObj* gobj);
/* 157424 */ void ftCh_WaitSweep_IASA(HSD_GObj* gobj);
/* 157468 */ void ftCh_WaitSweep_Coll(HSD_GObj* gobj);
#define GALE01_157C50
/* 157C50 */ void fn_80157C50(HSD_GObj* gobj);
/* 157CB0 */ void ftCh_Drill_Anim(HSD_GObj* gobj);
/* 157CEC */ void ftCh_Drill_IASA(HSD_GObj* gobj);
/* 157D30 */ void ftCh_Drill_Phys(HSD_GObj* gobj);
/* 157DF4 */ void ftCh_Drill_Coll(HSD_GObj* gobj);
#define GALE01_156F6C
/* 156F6C */ void fn_80156F6C(HSD_GObj* gobj);
/* 156FDC */ void ftCh_Entry_Anim(HSD_GObj* gobj);
/* 157018 */ void ftCh_Entry_IASA(HSD_GObj* gobj);
/* 15705C */ void ftCh_Entry_Phys(HSD_GObj* gobj);
/* 15707C */ void ftCh_Entry_Coll(HSD_GObj* gobj);
#define GALE01_158B3C
/* 158B3C */ void ftCh_Init_80158B3C(HSD_GObj* gobj);
/* 158BBC */ void ftCh_FingerBeamLoop_Anim(HSD_GObj* gobj);
/* 158C44 */ void ftCh_FingerBeamLoop_IASA(HSD_GObj* gobj);
/* 158C88 */ void ftCh_FingerBeamLoop_Phys(HSD_GObj* gobj);
/* 158DF8 */ void ftCh_FingerBeamLoop_Coll(HSD_GObj* gobj);
/* 158DFC */ void ftCh_Init_80158DFC(HSD_GObj* gobj);
/* 158E7C */ void ftCh_FingerBeamEnd_Anim(HSD_GObj* gobj);
/* 158ECC */ void ftCh_FingerBeamEnd_IASA(HSD_GObj* gobj);
/* 158F10 */ void ftCh_FingerBeamEnd_Phys(HSD_GObj* gobj);
/* 158F30 */ void ftCh_FingerBeamEnd_Coll(HSD_GObj* gobj);
/* 158F34 */ void ftCh_Init_80158F34(HSD_GObj* gobj);
/* 158FB4 */ void ftCh_BackPunch_Anim(HSD_GObj* gobj);
/* 158FF0 */ void ftCh_BackPunch_IASA(HSD_GObj* gobj);
/* 159034 */ void ftCh_BackPunch_Phys(HSD_GObj* gobj);
/* 159094 */ void ftCh_BackPunch_Coll(HSD_GObj* gobj);
/* 159098 */ void ftCh_Init_80159098(HSD_GObj* gobj);
/* 159134 */ void ftCh_FingerGun1_Anim(HSD_GObj* gobj);
/* 1591C0 */ void ftCh_FingerGun1_IASA(HSD_GObj* gobj);
/* 159204 */ void ftCh_FingerGun1_Phys(HSD_GObj* gobj);
/* 159264 */ void ftCh_FingerGun1_Coll(HSD_GObj* gobj);
#define GALE01_1587B0
/* 1587B0 */ void fn_801587B0(HSD_GObj* gobj);
/* 158814 */ void ftCh_FingerBeamStart_Anim(HSD_GObj* gobj);
/* 158850 */ void ftCh_FingerBeamStart_IASA(HSD_GObj* gobj);
/* 158894 */ void ftCh_FingerBeamStart_Phys(HSD_GObj* gobj);
/* 1588B4 */ void ftCh_FingerBeamStart_Coll(HSD_GObj* gobj);
#define GALE01_15ABD0
/* 15ABD0 */ void ftCh_GrabUnk1_8015ABD0(HSD_GObj* gobj);
/* 15AC50 */ void ftCh_GrabUnk1_8015AC50(HSD_GObj* gobj);
/* 15ACD0 */ void ftCh_FingerGun2_Anim(HSD_GObj* gobj);
/* 15AD28 */ void ftCh_FingerGun2_IASA(HSD_GObj* gobj);
/* 15AD6C */ void ftCh_FingerGun2_Phys(HSD_GObj* gobj);
/* 15ADCC */ void ftCh_FingerGun2_Coll(HSD_GObj* gobj);
#define GALE01_159F40
/* 159F40 */ void ftCh_Init_80159F40(HSD_GObj* gobj);
/* 159F8C */ void ftCh_Grab_Anim(HSD_GObj* gobj);
/* 159FC8 */ void ftCh_Grab_IASA(HSD_GObj* gobj);
/* 15A00C */ void ftCh_Grab_Phys(HSD_GObj* gobj);
/* 15A02C */ void ftCh_Grab_Coll(HSD_GObj* gobj);
#define GALE01_15B174
/* 15B174 */ void ftCh_GrabUnk1_8015B174(HSD_GObj* gobj);
/* 15B22C */ void ftCh_TagFail_Anim(HSD_GObj* gobj);
/* 15B274 */ void ftCh_TagFail_IASA(HSD_GObj* gobj);
/* 15B2B8 */ void ftCh_TagFail_Phys(HSD_GObj* gobj);
/* 15B2BC */ void ftCh_TagFail_Coll(HSD_GObj* gobj);
/* 15B2C0 */ void fn_8015B2C0(HSD_GObj* gobj);
#define GALE01_1582D8
/* 1582D8 */ void fn_801582D8(HSD_GObj* gobj);
/* 158340 */ void ftCh_PaperCrush_Anim(HSD_GObj* gobj);
/* 15837C */ void ftCh_PaperCrush_IASA(HSD_GObj* gobj);
/* 1583C0 */ void ftCh_PaperCrush_Phys(HSD_GObj* gobj);
/* 1583E0 */ void ftCh_PaperCrush_Coll(HSD_GObj* gobj);
/* 1583E4 */ void ftCh_Init_801583E4(HSD_GObj* gobj);
/* 158450 */ void ftCh_Poke1_Anim(HSD_GObj* gobj);
/* 1584CC */ void ftCh_Poke1_IASA(HSD_GObj* gobj);
/* 158510 */ void ftCh_Poke1_Phys(HSD_GObj* gobj);
/* 158530 */ void ftCh_Poke1_Coll(HSD_GObj* gobj);
/* 15870C */ void ftCh_Poke2_Anim(HSD_GObj* gobj);
/* 158748 */ void ftCh_Poke2_IASA(HSD_GObj* gobj);
/* 15878C */ void ftCh_Poke2_Phys(HSD_GObj* gobj);
/* 1587AC */ void ftCh_Poke2_Coll(HSD_GObj* gobj);
#define GALE01_157DF8
/* 157DF8 */ void ftCh_Init_80157DF8(HSD_GObj* gobj);
/* 157EA0 */ void ftCh_RockCrushUp_Anim(HSD_GObj* gobj);
/* 157F48 */ void ftCh_RockCrushWait_Anim(HSD_GObj* gobj);
/* 157F84 */ void ftCh_RockCrushUp_IASA(HSD_GObj* gobj);
/* 157FC8 */ void ftCh_RockCrushUp_Phys(HSD_GObj* gobj);
/* 158140 */ void ftCh_RockCrushUp_Coll(HSD_GObj* gobj);
#define GALE01_158144
/* 158144 */ void fn_80158144(HSD_GObj* gobj);
/* 1581A4 */ void ftCh_RockCrushDown_Anim(HSD_GObj* gobj);
/* 1581E0 */ void ftCh_RockCrushDown_IASA(HSD_GObj* gobj);
/* 158224 */ void ftCh_RockCrushDown_Phys(HSD_GObj* gobj);
/* 1582D4 */ void ftCh_RockCrushDown_Coll(HSD_GObj* gobj);
#define GALE01_15A6CC
/* 15A6CC */ void ftCh_Slam_Anim(HSD_GObj* gobj);
/* 15A750 */ void ftCh_Slam_IASA(HSD_GObj* gobj);
/* 15A794 */ void ftCh_Slam_Phys(HSD_GObj* gobj);
/* 15A7B4 */ void ftCh_Slam_Coll(HSD_GObj* gobj);
/* 15A7B8 */ void ftCh_Fail_Anim(HSD_GObj* gobj);
/* 15A820 */ void ftCh_Fail_IASA(HSD_GObj* gobj);
/* 15A864 */ void ftCh_Fail_Phys(HSD_GObj* gobj);
/* 15A884 */ void ftCh_Fail_Coll(HSD_GObj* gobj);
/* 15A888 */ void ftCh_GrabUnk1_8015A888(HSD_GObj* gobj);
/* 15A8D4 */ void ftCh_TagCrush_Anim(HSD_GObj* gobj);
/* 15A910 */ void ftCh_TagCrush_IASA(HSD_GObj* gobj);
/* 15A954 */ void ftCh_TagCrush_Phys(HSD_GObj* gobj);
/* 15A974 */ void ftCh_TagCrush_Coll(HSD_GObj* gobj);
/* 15A978 */ void ftCh_TagApplaud_Anim(HSD_GObj* gobj);
/* 15AA00 */ void ftCh_TagApplaud_IASA(HSD_GObj* gobj);
/* 15AA44 */ void ftCh_TagApplaud_Phys(HSD_GObj* gobj);
/* 15AAA4 */ void ftCh_TagApplaud_Coll(HSD_GObj* gobj);
#define GALE01_15A3F4
/* 15A3F4 */ void ftCh_Init_8015A3F4(HSD_GObj* gobj);
/* 15A464 */ void ftCh_Squeeze_Anim(HSD_GObj* gobj);
/* 15A4F8 */ void ftCh_Squeeze_IASA(HSD_GObj* gobj);
/* 15A53C */ void ftCh_Squeeze_Phys(HSD_GObj* gobj);
/* 15A55C */ void ftCh_Squeeze_Coll(HSD_GObj* gobj);
#define GALE01_15A184
/* 15A184 */ void ftCh_Init_8015A184(HSD_GObj* gobj);
/* 15A20C */ void ftCh_Squeezing0_Anim(HSD_GObj* gobj);
/* 15A248 */ void ftCh_Squeezing0_IASA(HSD_GObj* gobj);
/* 15A28C */ void ftCh_Squeezing0_Phys(HSD_GObj* gobj);
/* 15A2AC */ void ftCh_Squeezing0_Coll(HSD_GObj* gobj);
#define GALE01_15A2B0
/* 15A2B0 */ void ftCh_Init_8015A2B0(HSD_GObj* gobj);
/* 15A318 */ void ftCh_Squeezing1_Anim(HSD_GObj* gobj);
/* 15A38C */ void ftCh_Squeezing1_IASA(HSD_GObj* gobj);
/* 15A3D0 */ void ftCh_Squeezing1_Phys(HSD_GObj* gobj);
/* 15A3F0 */ void ftCh_Squeezing1_Coll(HSD_GObj* gobj);
#define GALE01_15746C
/* 15746C */ void fn_8015746C(HSD_GObj* gobj);
/* 1574B8 */ void ftCh_SweepLoop_Anim(HSD_GObj* gobj);
/* 1574F4 */ void ftCh_SweepLoop_IASA(HSD_GObj* gobj);
/* 157538 */ void ftCh_SweepLoop_Phys(HSD_GObj* gobj);
/* 157558 */ void ftCh_SweepLoop_Coll(HSD_GObj* gobj);
#define GALE01_15755C
/* 15755C */ void fn_8015755C(HSD_GObj* gobj);
/* 1575A8 */ void ftCh_SweepWait_Anim(HSD_GObj* gobj);
/* 1575E4 */ void ftCh_SweepWait_IASA(HSD_GObj* gobj);
/* 157628 */ void ftCh_SweepWait_Phys(HSD_GObj* gobj);
/* 157648 */ void ftCh_SweepWait_Coll(HSD_GObj* gobj);
/* 15764C */ void ftCh_Init_8015764C(HSD_GObj* gobj);
/* 1576B0 */ void ftCh_Slap_Anim(HSD_GObj* gobj);
/* 157724 */ void ftCh_Slap_IASA(HSD_GObj* gobj);
/* 157768 */ void ftCh_Slap_Phys(HSD_GObj* gobj);
/* 1578E4 */ void ftCh_Slap_Coll(HSD_GObj* gobj);
/* 1577F8 */ void ftCh_Init_801577F8(HSD_GObj* gobj);
/* 157844 */ void ftCh_Walk2_Anim(HSD_GObj* gobj);
/* 157880 */ void ftCh_Walk2_IASA(HSD_GObj* gobj);
/* 1578C4 */ void ftCh_Walk2_Phys(HSD_GObj* gobj);
#define GALE01_15B8FC
/* 15B998 */ void ftCh_GrabUnk1_8015B998(HSD_GObj* gobj);
/* 15BA34 */ void ftCh_GrabUnk1_8015BA34(HSD_GObj*, HSD_GObjEvent, Vec3*);
/* 15BB70 */ void ftCh_TagCancel_Anim(HSD_GObj* gobj);
/* 15BBD8 */ void ftCh_TagCancel_Phys(HSD_GObj* gobj);
/* 15BC38 */ void ftCh_TagCancel_Coll(HSD_GObj* gobj);
/* 15BC88 */ void ftCh_GrabUnk1_8015BC88(HSD_GObj* gobj);
#define GALE01_15ADD0
/* 15ADD0 */ void ftCh_GrabUnk1_8015ADD0(HSD_GObj* gobj);
/* 15AF04 */ void ftCh_TagGrab_Anim(HSD_GObj* gobj);
/* 15B000 */ void ftCh_TagSqueeze_Anim(HSD_GObj* gobj);
/* 15B0FC */ void ftCh_TagGrab_IASA(HSD_GObj* gobj);
/* 15B140 */ void ftCh_TagGrab_Phys(HSD_GObj* gobj);
/* 15B170 */ void ftCh_TagGrab_Coll(HSD_GObj* gobj);
#define GALE01_15AAC8
/* 15AAC8 */ void fn_8015AAC8(HSD_GObj* gobj);
/* 15AB04 */ void ftCh_TagRockPaper_Anim(HSD_GObj* gobj);
/* 15AB84 */ void ftCh_TagRockPaper_IASA(HSD_GObj* gobj);
/* 15ABC8 */ void ftCh_TagRockPaper_Phys(HSD_GObj* gobj);
/* 15ABCC */ void ftCh_TagRockPaper_Coll(HSD_GObj* gobj);
#define GALE01_15A560
/* 15A560 */ void ftCh_Init_8015A560(HSD_GObj* gobj);
/* 15A5D0 */ void ftCh_Throw_Anim(HSD_GObj* gobj);
/* 15A664 */ void ftCh_Throw_IASA(HSD_GObj* gobj);
/* 15A6A8 */ void ftCh_Throw_Phys(HSD_GObj* gobj);
/* 15A6C8 */ void ftCh_Throw_Coll(HSD_GObj* gobj);
#define GALE01_15B850
/* 15B850 */ void ftCh_GrabUnk1_8015B850(HSD_GObj* gobj, FtMotionId msid);
/* 15B8EC */ void ftCo_ThrownCrazyHand_Anim(HSD_GObj* gobj);
/* 15B8F0 */ void ftCo_ThrownCrazyHand_IASA(HSD_GObj* gobj);
/* 15B8F4 */ void ftCo_ThrownCrazyHand_Phys(HSD_GObj* gobj);
/* 15B8F8 */ void ftCo_ThrownCrazyHand_Coll(HSD_GObj* gobj);
#define GALE01_155FCC
/* 155FCC */ void ftCh_Init_80155FCC(HSD_GObj* gobj);
/* 156014 */ void ftCh_Init_80156014(HSD_GObj* gobj);
/* 156198 */ void ftCh_Init_80156198(HSD_GObj* gobj);
/* 156404 */ void ftCh_Wait1_0_Anim(HSD_GObj* gobj);
/* 156A70 */ void ftCh_Wait1_0_IASA(HSD_GObj* gobj);
/* 156AB4 */ void ftCh_Wait1_0_Phys(HSD_GObj* gobj);
/* 156AD4 */ void ftCh_Wait1_0_Coll(HSD_GObj* gobj);
#define GALE01_159AA4
/* 159AA4 */ void fn_80159AA4(HSD_GObj* gobj);
/* 159D04 */ void ftCh_Wait1_1_Anim(HSD_GObj* gobj);
/* 159E8C */ void ftCh_Wait1_1_IASA(HSD_GObj* gobj);
/* 159ED0 */ void ftCh_Wait1_1_Phys(HSD_GObj* gobj);
/* 159F3C */ void ftCh_Wait1_1_Coll(HSD_GObj* gobj);
#define GALE01_1578E8
/* 1578E8 */ void fn_801578E8(HSD_GObj* gobj);
/* 157934 */ void ftCh_WalkLoop_Anim(HSD_GObj* gobj);
/* 15798C */ void ftCh_WalkLoop_IASA(HSD_GObj* gobj);
/* 1579D0 */ void ftCh_WalkLoop_Phys(HSD_GObj* gobj);
/* 1579F0 */ void ftCh_WalkLoop_Coll(HSD_GObj* gobj);
/* 1579F4 */ void ftCh_Init_801579F4(HSD_GObj* gobj);
/* 157A40 */ void ftCh_WalkWait_Anim(HSD_GObj* gobj);
/* 157ABC */ void ftCh_WalkWait_IASA(HSD_GObj* gobj);
/* 157B00 */ void ftCh_WalkWait_Phys(HSD_GObj* gobj);
/* 157B54 */ void ftCh_WalkWait_Coll(HSD_GObj* gobj);
/* 157B58 */ void ftCh_Init_80157B58(HSD_GObj* gobj);
/* 157BAC */ void ftCh_WalkShoot_Anim(HSD_GObj* gobj);
/* 157BE8 */ void ftCh_WalkShoot_IASA(HSD_GObj* gobj);
/* 157C2C */ void ftCh_WalkShoot_Phys(HSD_GObj* gobj);
/* 157C4C */ void ftCh_WalkShoot_Coll(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTCRAZYHAND_INLINES_H
#define MELEE_FT_CHARA_FTCRAZYHAND_TYPES_H
typedef struct _ftCrazyHandAttributes {
    s32 x0;
    s32 x4;
    s32 x8;
    s32 xC;
    float x10;
    float x14;
    float x18;
    float x1C;
    float x20;
    float x24;
    float x28;
    float x2C;
    Vec2 x30_pos2;
    float x38;
    float x3C;
    float x40;
    float x44;
    s32 x48;
    float x4C;
    float x50;
    s32 x54;
    s32 x58;
    float x5C;
    float x60;
    s32 x64;
    float x68;
    float x6C;
    float x70;
    s32 x74;
    s32 x78;
    float x7C;
    float x80;
    float x84;
    Vec2 x88_pos;
    float x90;
    float x94;
    float x98;
    float x9C;
    float xA0;
    float xA4;
    Vec2 xA8_pos;
    float xB0;
    float xB4;
    float xB8;
    Vec2 xBC_pos;
    Vec2 xC4_pos;
    Vec2 xCC_pos;
    float xD4;
    float xD8;
    float xDC;
    float xE0;
    float xE4;
    float xE8;
    float xEC;
    s32 xF0;
    s32 xF4;
    s32 xF8;
    float xFC;
    s32 x100;
    float x104;
    float x108;
    float x10C;
    Vec2 x110_pos;
    Vec2 x118_pos;
    float x120;
    s32 x124;
    s32 x128;
    Vec2 x12C_pos;
    Vec2 x134_pos;
    Vec2 x13C_pos;
} ftCrazyHand_DatAttrs;
static inline void ftCh_UpdateBossMotion(HSD_GObj* gobj, Fighter* fp,
                                         ftCrazyHand_DatAttrs* da)
{
    ft_80085134(gobj);
    ftBossLib_8015BE40(gobj, &fp->mv.ch.unk0.xC, &fp->mv.ch.unk0.x18, da->x14,
                       da->x10);
}
#define MELEE_FT_CHARA_FTDONKEY_FORWARD_H
static MotionFlags const ftDk_MF_Special =
    ftCo_MF_Special | Ft_MF_SkipModel | Ft_MF_KeepSfx | Ft_MF_SkipItemVis |
    Ft_MF_UnkUpdatePhys | Ft_MF_FreezeState;
static MotionFlags const ftDk_MF_SpecialN =
    ftDk_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftDk_MF_SpecialS = ftDk_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftDk_MF_SpecialHi =
    ftDk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftDk_MF_SpecialLwStart =
    ftDk_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftDk_MF_SpecialAirN =
    ftDk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipParasol;
static MotionFlags const ftDk_MF_SpecialAirS =
    ftDk_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipParasol;
static MotionFlags const ftDk_MF_SpecialAirHi =
    ftDk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_SkipParasol;
static MotionFlags const ftDk_MF_SpecialN_CollCancel =
    ftCommon_GroundAirColl_MF;
static MotionFlags const ftDk_MF_SpecialN_Coll =
    ftDk_MF_SpecialN_CollCancel | Ft_MF_KeepGfx | Ft_MF_KeepColAnimHitStatus |
    Ft_MF_KeepColAnimPartHitStatus | Ft_MF_SkipHit;
static MotionFlags const ftDk_MF_MS_386 =
    ftDk_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipParasol;
static MotionFlags const ftDk_MF_SpecialLw =
    ftDk_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_Unk19;
static MotionFlags const ftDk_MF_MS_350 =
    Ft_MF_KeepSwordTrail | Ft_MF_Unk19 | Ft_MF_SkipModelPartVis;
static MotionFlags const ftDk_MF_Cargo =
    Ft_MF_SkipModel | Ft_MF_SkipAnimVel | Ft_MF_FreezeState | Ft_MF_SkipMetalB;
static MotionFlags const ftDk_MF_CargoThrow =
    ftDk_MF_Cargo | Ft_MF_SkipHit | Ft_MF_SkipItemVis;
static MotionFlags const ftDk_MF_CargoThrowF =
    ftDk_MF_CargoThrow | Ft_MF_KeepFastFall;
static MotionFlags const ftDk_MF_CargoThrowB =
    ftDk_MF_CargoThrow | Ft_MF_KeepGfx;
static MotionFlags const ftDk_MF_CargoThrowHi =
    ftDk_MF_CargoThrow | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftDk_MF_CargoThrowLw =
    ftDk_MF_CargoThrow | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftDk_MF_CargoWait =
    ftDk_MF_Cargo | Ft_MF_KeepFastFall | Ft_MF_KeepColAnimHitStatus |
    Ft_MF_Unk19;
static MotionFlags const ftDk_MF_CargoTurn =
    ftDk_MF_CargoWait | Ft_MF_KeepAccessory;
static MotionFlags const ftDk_MF_CargoWalk =
    ftDk_MF_CargoWait | Ft_MF_UpdateCmd;
static MotionFlags const ftDk_MF_CargoJump =
    ftDk_MF_CargoWait | Ft_MF_SkipNametagVis;
static MotionFlags const ftDk_MF_MS_360 =
    ftDk_MF_CargoWait | Ft_MF_KeepSwordTrail;
static MotionFlags const ftDk_MF_MS_341 = Ft_MF_Unk19 | Ft_MF_SkipModelPartVis;
static MotionFlags const ftDk_MF_Move_53 =
    ftDk_MF_MS_341 | Ft_MF_SkipAnimVel | Ft_MF_Unk06;
static MotionFlags const ftDk_MF_MS_342_Base =
    ftDk_MF_Move_53 | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftDk_MF_MS_342 =
    ftDk_MF_MS_342_Base | Ft_MF_KeepGfx | Ft_MF_UpdateCmd;
static MotionFlags const ftDk_MF_MS_345 =
    ftDk_MF_MS_342_Base | Ft_MF_KeepAccessory;
static MotionFlags const ftDk_MF_MS_348 = ftDk_MF_Move_53 |
                                          Ft_MF_KeepFastFall | Ft_MF_SkipHit |
                                          Ft_MF_SkipNametagVis;
typedef enum ftDk_MotionState {
    ftDk_MS_HeavyWait = ftCo_MS_Count,
    ftDk_MS_HeavyWalkSlow,
    ftDk_MS_HeavyWalkMiddle,
    ftDk_MS_HeavyWalkFast,
    ftDk_MS_HeavyTurn,
    ftDk_MS_HeavyKneebend,
    ftDk_MS_HeavyFall,
    ftDk_MS_HeavyJump,
    ftDk_MS_HeavyLanding,
    ftDk_MS_HeavyWait2,
    ftDk_MS_ThrowFWait0,
    ftDk_MS_ThrowFWalkSlow,
    ftDk_MS_ThrowFWalkMiddle,
    ftDk_MS_ThrowFWalkFast,
    ftDk_MS_ThrowFTurn,
    ftDk_MS_ThrowFKneebend,
    ftDk_MS_ThrowFFall,
    ftDk_MS_ThrowFJump,
    ftDk_MS_ThrowFLanding,
    ftDk_MS_ThrowFWait2,
    ftDk_MS_ThrowFF,
    ftDk_MS_ThrowFB,
    ftDk_MS_ThrowFHi,
    ftDk_MS_ThrowFLw,
    ftDk_MS_ThrowAirFF,
    ftDk_MS_ThrowAirFB,
    ftDk_MS_ThrowAirFHi,
    ftDk_MS_ThrowAirFLw,
    ftDk_MS_SpecialNStart,
    /* 172 */ ftDk_MS_SpecialNLoop,
    ftDk_MS_SpecialNCancel,
    ftDk_MS_SpecialN,
    ftDk_MS_SpecialNFull,
    ftDk_MS_SpecialAirNStart,
    ftDk_MS_SpecialAirNLoop,
    ftDk_MS_SpecialAirNCancel,
    ftDk_MS_SpecialAirN,
    ftDk_MS_SpecialAirNFull,
    ftDk_MS_SpecialS,
    ftDk_MS_SpecialAirS,
    ftDk_MS_SpecialHi,
    ftDk_MS_SpecialAirHi,
    ftDk_MS_SpecialLwStart,
    ftDk_MS_SpecialLwLoop,
    ftDk_MS_SpecialLwEnd0,
    ftDk_MS_SpecialLwEnd1,
    ftDk_MS_Count,
    ftDk_MS_SelfCount = ftDk_MS_Count - ftCo_MS_Count,
} ftDk_MotionState;
typedef enum ftDk_Submotion {
    ftDk_SM_HeavyWait = ftCo_SM_Count,
    ftDk_SM_HeavyWalkSlow,
    ftDk_SM_HeavyWalkMiddle,
    ftDk_SM_HeavyWalkFast,
    ftDk_SM_HeavyTurn,
    ftDk_SM_HeavyKneebend,
    ftDk_SM_HeavyFall,
    ftDk_SM_HeavyJump,
    ftDk_SM_HeavyLanding,
    ftDk_SM_HeavyWait2,
    ftDk_SM_ThrowFWait0,
    ftDk_SM_ThrowFWalkSlow,
    ftDk_SM_ThrowFWalkMiddle,
    ftDk_SM_ThrowFWalkFast,
    ftDk_SM_ThrowFTurn,
    ftDk_SM_ThrowFKneebend,
    ftDk_SM_ThrowFFall,
    ftDk_SM_ThrowFJump,
    ftDk_SM_ThrowFLanding,
    ftDk_SM_ThrowFWait2,
    ftDk_SM_ThrowFF,
    ftDk_SM_ThrowFB,
    ftDk_SM_ThrowFHi,
    ftDk_SM_ThrowFLw,
    ftDk_SM_SpecialNStart,
    ftDk_SM_SpecialNLoop,
    ftDk_SM_SpecialNCancel,
    ftDk_SM_SpecialN,
    ftDk_SM_SpecialNFull,
    ftDk_SM_SpecialAirNStart,
    ftDk_SM_SpecialAirNLoop,
    ftDk_SM_SpecialAirNCancel,
    ftDk_SM_SpecialAirN,
    ftDk_SM_SpecialAirNFull,
    ftDk_SM_SpecialS,
    ftDk_SM_SpecialAirS,
    ftDk_SM_SpecialHi,
    ftDk_SM_SpecialAirHi,
    ftDk_SM_SpecialLwStart,
    ftDk_SM_SpecialLwLoop,
    ftDk_SM_SpecialLwEnd0,
    ftDk_SM_SpecialLwEnd1,
    ftDk_SM_Count,
    ftDk_SM_SelfCount = ftDk_SM_Count - ftCo_SM_Count,
} ftDk_Submotion;
#define GALE01_10D740
/* 10D740 */ void ftDk_Init_OnDeath(HSD_GObj* gobj);
/* 10D774 */ void ftDk_Init_8010D774(HSD_GObj* gobj);
/* 10D7A8 */ void ftDk_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 10D888 */ void ftDk_Init_OnItemInvisible(HSD_GObj* gobj);
/* 10D8D0 */ void ftDk_Init_OnItemVisible(HSD_GObj* gobj);
/* 10D918 */ void ftDk_Init_OnItemDrop(HSD_GObj* gobj, bool bool1);
/* 10D96C */ void ftDk_Init_UnkMotionStates4(HSD_GObj* gobj);
/* 10D9AC */ void ftDk_Init_OnLoad(HSD_GObj* gobj);
/* 10DA74 */ void ftDk_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 10DAB4 */ void ftDk_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 10DAF8 */ void ftDk_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 10DB3C */ void ftDk_Init_8010DB3C(HSD_GObj* gobj);
/* 3CB838 */ extern MotionState ftDk_Init_MotionStateTable[ftDk_MS_SelfCount];
/* 3CBDF8 */ extern Fighter_CostumeStrings ftDk_Init_CostumeStrings[];
/* 3CBE04 */ extern char ftDk_Init_DatFilename[];
/* 3CBF88 */ extern char ftDk_Init_AnimDatFilename[];
/* 3CC010 */ extern Fighter_DemoStrings ftDk_Init_DemoMotionFilenames;
/* 3CC020 */ extern char ftDk_Init_DataName[];
/* 459CA0 */ extern UnkCostumeStruct ftDk_CostumeList[5];
#define GALE01_0E030C
/* 0E030C */ void ftDk_HeavyFall_IASA(HSD_GObj* gobj);
/* 0E0330 */ void ftDk_HeavyFall_Phys(HSD_GObj* gobj);
/* 0E0350 */ void ftDk_HeavyFall_Coll(HSD_GObj* gobj);
/* 0E0378 */ bool ftDk_MS_347_800E0378(HSD_GObj* gobj);
/* 0E03C0 */ void ftDk_MS_347_800E03C0(HSD_GObj* gobj);
#define GALE01_0E0440
/* 0E0440 */ void ftDk_HeavyJump_IASA(HSD_GObj* gobj);
/* 0E0464 */ void ftDk_HeavyJump_Phys(HSD_GObj* gobj);
/* 0E0484 */ void ftDk_HeavyJump_Coll(HSD_GObj* gobj);
/* 0E04A4 */ void ftDk_MS_348_800E04A4(HSD_GObj* gobj, s32 arg1);
/* 0E0518 */ void ftDk_HeavyWait1_Anim(HSD_GObj* gobj);
#define GALE01_0E0698
/* 0E0698 */ void ftDk_HeavyLanding_Phys(HSD_GObj* gobj);
/* 0E06B8 */ void ftDk_HeavyLanding_Coll(HSD_GObj* gobj);
/* 0E06D8 */ void ftDk_MS_349_800E06D8(HSD_GObj* gobj);
/* 0E07E4 */ void ftDk_HeavyWait2_Anim(HSD_GObj* gobj);
/* 0E0848 */ void ftDk_HeavyWait2_Phys(HSD_GObj* gobj);
/* 0E0868 */ void ftDk_HeavyWait2_Coll(HSD_GObj* gobj);
#define GALE01_0E01BC
/* 0E01BC */ void ftDk_HeavyTurn_Anim(HSD_GObj* gobj);
/* 0E0200 */ void ftDk_HeavyTurn_IASA(HSD_GObj* gobj);
/* 0E0254 */ void ftDk_HeavyTurn_Phys(HSD_GObj* gobj);
/* 0E0274 */ void ftDk_HeavyTurn_Coll(HSD_GObj* gobj);
/* 0E0294 */ void ftDk_MS_345_800E0294(HSD_GObj* gobj);
#define GALE01_0DF938
/* 0DF938 */ bool ftDk_MS_341_800DF938(HSD_GObj* gobj);
/* 0DF980 */ void ftDk_MS_341_800DF980(HSD_GObj* gobj);
/* 0DF9F0 */ void ftDk_HeavyWait0_IASA(HSD_GObj* gobj);
/* 0DFA50 */ void ftDk_HeavyWait0_Phys(HSD_GObj* gobj);
/* 0DFA70 */ void ftDk_HeavyWait0_Coll(HSD_GObj* gobj);
/* 0DFA98 */ bool ftDk_MS_341_800DFA98(HSD_GObj* gobj);
/* 0DFAE4 */ void ftDk_MS_341_800DFAE4(HSD_GObj* gobj, float);
#define GALE01_0E0568
/* 0E0568 */ void ftDk_HeavyWait1_IASA(HSD_GObj* gobj);
/* 0E05A4 */ void ftDk_HeavyWait1_Phys(HSD_GObj* gobj);
/* 0E05C4 */ void ftDk_HeavyWait1_Coll(HSD_GObj* gobj);
/* 0E05E4 */ void ftDk_MS_346_800E05E4(HSD_GObj* gobj);
/* 0E0648 */ void ftDk_HeavyLanding_Anim(HSD_GObj* gobj);
#define GALE01_0DFB34
/* 0DFB34 */ void ftDk_HeavyWalk_Anim(HSD_GObj* gobj);
/* 0DFB54 */ void ftDk_HeavyWalk_IASA(HSD_GObj* gobj);
/* 0DFBB8 */ void ftDk_HeavyWalk_Phys(HSD_GObj* gobj);
/* 0DFBD8 */ void ftDk_HeavyWalk_Coll(HSD_GObj* gobj);
#define GALE01_0E0134
/* 0E0134 */ bool ftDk_MS_345_800E0134(HSD_GObj* gobj);
#define GALE01_10FB1C
/* 10FB1C */ void ftDk_SpecialHi_Enter(HSD_GObj* gobj);
/* 10FBFC */ void ftDk_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 10FCD4 */ void ftDk_SpecialHi_Anim(HSD_GObj* gobj);
/* 10FD10 */ void ftDk_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 10FD9C */ void ftDk_SpecialHi_IASA(HSD_GObj* gobj);
/* 10FDA0 */ void ftDk_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 10FDA4 */ void ftDk_SpecialHi_Phys(HSD_GObj* gobj);
/* 10FDEC */ void ftDk_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 10FE60 */ void ftDk_SpecialHi_Coll(HSD_GObj* gobj);
/* 10FF14 */ void ftDk_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 110074 */ void ftDk_SpecialHi_DestroyAllEffects(HSD_GObj* gobj);
#define GALE01_10DC80
/* 10DC80 */ void ftDk_SpecialLw_Enter(HSD_GObj* gobj);
/* 10DCD8 */ void ftDk_SpecialLwStart_Anim(HSD_GObj* gobj);
/* 10DD14 */ void ftDk_SpecialLwStart_IASA(HSD_GObj* gobj);
/* 10DD18 */ void ftDk_SpecialLwStart_Phys(HSD_GObj* gobj);
/* 10DD38 */ void ftDk_SpecialLwStart_Coll(HSD_GObj* gobj);
/* 10DD74 */ void ftDk_SpecialLwLoop_Anim(HSD_GObj* gobj);
/* 10DDDC */ void ftDk_SpecialLwLoop_IASA(HSD_GObj* gobj);
/* 10DDF8 */ void ftDk_SpecialLwLoop_Phys(HSD_GObj* gobj);
/* 10DE18 */ void ftDk_SpecialLwLoop_Coll(HSD_GObj* gobj);
/* 10DF5C */ void ftDk_SpecialLwEnd0_Anim(HSD_GObj* gobj);
/* 10DF98 */ void ftDk_SpecialLwEnd0_IASA(HSD_GObj* gobj);
/* 10DF9C */ void ftDk_SpecialLwEnd0_Phys(HSD_GObj* gobj);
/* 10DFBC */ void ftDk_SpecialLwEnd0_Coll(HSD_GObj* gobj);
/* 10E030 */ void ftDk_SpecialLwEnd1_Anim(HSD_GObj* gobj);
/* 10E06C */ void ftDk_SpecialLwEnd1_IASA(HSD_GObj* gobj);
/* 10E070 */ void ftDk_SpecialLwEnd1_Phys(HSD_GObj* gobj);
/* 10E090 */ void ftDk_SpecialLwEnd1_Coll(HSD_GObj* gobj);
/* 10E0CC */ void ftDk_SpecialLw_8010E0CC(HSD_GObj* gobj);
/* 10E148 */ void ftDk_SpecialLw_8010E148(HSD_GObj* gobj);
#define GALE01_10E574
/* 10E574 */ void ftDk_SpecialN_Enter(HSD_GObj* gobj);
/* 10E69C */ void ftDk_SpecialAirN_Enter(HSD_GObj* gobj);
/* 10E7B4 */ void ftDk_SpecialNStart_Anim(HSD_GObj* gobj);
/* 10E840 */ void ftDk_SpecialNLoop_Anim(HSD_GObj* gobj);
/* 10E8E0 */ void ftDk_SpecialNCancel_Anim(HSD_GObj* gobj);
/* 10E930 */ void ftDk_SpecialN_Anim(HSD_GObj* gobj);
/* 10EB0C */ void ftDk_SpecialNFull_Anim(HSD_GObj* gobj);
/* 10EC5C */ void ftDk_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 10ECE8 */ void ftDk_SpecialAirNLoop_Anim(HSD_GObj* gobj);
/* 10ED88 */ void ftDk_SpecialAirNCancel_Anim(HSD_GObj* gobj);
/* 10EDD8 */ void ftDk_SpecialAirN_Anim(HSD_GObj* gobj);
/* 10EF7C */ void ftDk_SpecialAirNFull_Anim(HSD_GObj* gobj);
/* 10F094 */ void ftDk_SpecialNStart_IASA(HSD_GObj* gobj);
/* 10F098 */ void ftDk_SpecialNLoop_IASA(HSD_GObj* gobj);
/* 10F1D8 */ void ftDk_SpecialNCancel_IASA(HSD_GObj* gobj);
/* 10F1DC */ void ftDk_SpecialN_IASA(HSD_GObj* gobj);
/* 10F1E0 */ void ftDk_SpecialNFull_IASA(HSD_GObj* gobj);
/* 10F1E4 */ void ftDk_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 10F1E8 */ void ftDk_SpecialAirNLoop_IASA(HSD_GObj* gobj);
/* 10F31C */ void ftDk_SpecialAirNCancel_IASA(HSD_GObj* gobj);
/* 10F320 */ void ftDk_SpecialAirN_IASA(HSD_GObj* gobj);
/* 10F324 */ void ftDk_SpecialAirNFull_IASA(HSD_GObj* gobj);
/* 10F328 */ void ftDk_SpecialNStart_Phys(HSD_GObj* gobj);
/* 10F348 */ void ftDk_SpecialNLoop_Phys(HSD_GObj* gobj);
/* 10F368 */ void ftDk_SpecialNCancel_Phys(HSD_GObj* gobj);
/* 10F388 */ void ftDk_SpecialN_Phys(HSD_GObj* gobj);
/* 10F3A8 */ void ftDk_SpecialNFull_Phys(HSD_GObj* gobj);
/* 10F3C8 */ void ftDk_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 10F3E8 */ void ftDk_SpecialAirNLoop_Phys(HSD_GObj* gobj);
/* 10F408 */ void ftDk_SpecialAirNCancel_Phys(HSD_GObj* gobj);
/* 10F428 */ void ftDk_SpecialAirN_Phys(HSD_GObj* gobj);
/* 10F448 */ void ftDk_SpecialAirNFull_Phys(HSD_GObj* gobj);
/* 10F468 */ void ftDk_SpecialNStart_Coll(HSD_GObj* gobj);
/* 10F50C */ void ftDk_SpecialNLoop_Coll(HSD_GObj* gobj);
/* 10F5B0 */ void ftDk_SpecialNCancel_Coll(HSD_GObj* gobj);
/* 10F654 */ void ftDk_SpecialN_Coll(HSD_GObj* gobj);
/* 10F6F8 */ void ftDk_SpecialNFull_Coll(HSD_GObj* gobj);
/* 10F79C */ void ftDk_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 10F840 */ void ftDk_SpecialAirNLoop_Coll(HSD_GObj* gobj);
/* 10F8E4 */ void ftDk_SpecialAirNCancel_Coll(HSD_GObj* gobj);
/* 10F988 */ void ftDk_SpecialAirN_Coll(HSD_GObj* gobj);
/* 10FA2C */ void ftDk_SpecialAirNFull_Coll(HSD_GObj* gobj);
/* 10FAD0 */ void ftDk_SpecialN_DestroyAllEffects(HSD_GObj* gobj);
/* 10FAF0 */ void ftDk_SpecialN_DestroyAllEffectsPlus(HSD_GObj* gobj);
#define GALE01_10E1C4
/* 10E1C4 */ void ftDk_SpecialS_Enter(HSD_GObj* gobj);
/* 10E234 */ void ftDk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 10E2BC */ void ftDk_SpecialS_Anim(HSD_GObj* gobj);
/* 10E2F8 */ void ftDk_SpecialAirS_Anim(HSD_GObj* gobj);
/* 10E334 */ void ftDk_SpecialS_IASA(HSD_GObj* gobj);
/* 10E338 */ void ftDk_SpecialAirS_IASA(HSD_GObj* gobj);
/* 10E33C */ void ftDk_SpecialS_Phys(HSD_GObj* gobj);
/* 10E35C */ void ftDk_SpecialAirS_Phys(HSD_GObj* gobj);
/* 10E3BC */ void ftDk_SpecialS_Coll(HSD_GObj* gobj);
/* 10E428 */ void ftDk_SpecialAirS_Coll(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTDRMARIO_FORWARD_H
static MotionFlags const ftDr_MF_Appeal =
    Ft_MF_KeepFastFall | Ft_MF_SkipModel | Ft_MF_SkipAnimVel | Ft_MF_Unk06;
#define GALE01_14949C
/* 14949C */ void ftDr_Init_OnDeath(HSD_GObj* gobj);
/* 1494E4 */ void ftDr_Init_OnLoad(HSD_GObj* gobj);
/* 149540 */ void ftDr_Init_80149540(HSD_GObj* gobj);
/* 149560 */ void ftDr_Init_OnItemPickup(HSD_GObj* gobj, bool);
/* 149640 */ void ftDr_Init_OnItemInvisible(HSD_GObj* gobj);
/* 149688 */ void ftDr_Init_OnItemVisible(HSD_GObj* gobj);
/* 1496D0 */ void ftDr_Init_OnItemDrop(HSD_GObj* gobj, bool);
/* 149724 */ void ftDr_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 149744 */ void ftDr_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 149788 */ void ftDr_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 1497CC */ void ftDr_Init_801497CC(HSD_GObj* gobj);
/* 149844 */ bool ftDr_Init_80149844(HSD_GObj* gobj);
/* 1498A0 */ void ftDr_Init_801498A0(HSD_GObj* gobj);
/* 1498EC */ u32 ftDr_Init_801498EC(HSD_GObj* gobj);
/* 149910 */ void ftDr_Init_80149910(HSD_GObj* gobj);
/* 3D1498 */ extern MotionState ftDr_Init_MotionStateTable[ftMr_MS_SelfCount];
/* 3D15D8 */ extern Fighter_CostumeStrings ftDr_Init_CostumeStrings[];
/* 3D15E4 */ extern char ftDr_Init_DatFilename[];
/* 3D1770 */ extern char ftDr_Init_AnimDatFilename[];
/* 3D17FC */ extern Fighter_DemoStrings ftDr_Init_DemoMotionFilenames;
/* 3D180C */ extern char ftDr_Init_DataName[];
/* 45A3A8 */ extern UnkCostumeStruct ftDr_CostumeList[5];
#define GALE01_149954
/* 149954 */ void ftDr_AppealS_Anim(HSD_GObj* gobj);
/* 149A6C */ void ftDr_AppealS_IASA(HSD_GObj* gobj);
/* 149A8C */ void ftDr_AppealS_Phys(HSD_GObj* gobj);
/* 149AAC */ void ftDr_AppealS_Coll(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTDRMARIO_TYPES_H
typedef struct _ftDrMarioAttributes {
    u8 pad_x0[4];
    u32 x4;
    u8 pad_x8[4];
    u32 xC;
    u8 pad_x10[4];
    u32 x14;
} ftDrMarioAttributes;
#define GALE01_14EEF8
#define MELEE_FT_CHARA_FTMARS_FORWARD_H
static MotionFlags const ftMs_MF_Special =
    Ft_MF_SkipModel | Ft_MF_KeepSfx | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftMs_MF_SpecialN =
    ftMs_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftMs_MF_SpecialS = ftMs_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftMs_MF_SpecialHi =
    ftMs_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftMs_MF_SpecialLw =
    ftMs_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftMs_MF_SpecialAirN =
    ftMs_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipParasol;
static MotionFlags const ftMs_MF_SpecialS1 =
    ftMs_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipParasol;
static MotionFlags const ftMs_MF_SpecialAirHi =
    ftMs_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftMs_MF_SpecialAirLw =
    ftMs_MF_SpecialLw | Ft_MF_SkipParasol;
typedef enum ftMars_MotionState {
    ftMs_MS_SpecialNStart = ftCo_MS_Count,
    ftMs_MS_SpecialNLoop,
    ftMs_MS_SpecialNEnd0,
    ftMs_MS_SpecialNEnd1,
    ftMs_MS_SpecialAirNStart,
    ftMs_MS_SpecialAirNLoop,
    ftMs_MS_SpecialAirNEnd0,
    ftMs_MS_SpecialAirNEnd1,
    ftMs_MS_SpecialS1,
    ftMs_MS_SpecialS2Hi,
    ftMs_MS_SpecialS2Lw,
    ftMs_MS_SpecialS3Hi,
    ftMs_MS_SpecialS3S,
    ftMs_MS_SpecialS3Lw,
    ftMs_MS_SpecialS4Hi,
    ftMs_MS_SpecialS4S,
    ftMs_MS_SpecialS4Lw,
    ftMs_MS_SpecialAirS1,
    ftMs_MS_SpecialAirS2Hi,
    ftMs_MS_SpecialAirS2Lw,
    ftMs_MS_SpecialAirS3Hi,
    ftMs_MS_SpecialAirS3S,
    ftMs_MS_SpecialAirS3Lw,
    ftMs_MS_SpecialAirS4Hi,
    ftMs_MS_SpecialAirS4S,
    ftMs_MS_SpecialAirS4Lw,
    ftMs_MS_SpecialHi,
    ftMs_MS_SpecialAirHi,
    ftMs_MS_SpecialLw,
    ftMs_MS_SpecialLwHit,
    ftMs_MS_SpecialAirLw,
    ftMs_MS_SpecialAirLwHit,
    ftMs_MS_Count,
    ftMs_MS_SelfCount = ftMs_MS_Count - ftCo_MS_Count,
} ftMars_MotionState;
typedef enum ftMs_Submotion {
    ftMs_SM_SpecialNStart = ftCo_SM_Count,
    ftMs_SM_SpecialNLoop,
    ftMs_SM_SpecialNEnd0,
    ftMs_SM_SpecialNEnd1,
    ftMs_SM_SpecialAirNStart,
    ftMs_SM_SpecialAirNLoop,
    ftMs_SM_SpecialAirNEnd0,
    ftMs_SM_SpecialAirNEnd1,
    ftMs_SM_SpecialS1,
    ftMs_SM_SpecialS2Hi,
    ftMs_SM_SpecialS2Lw,
    ftMs_SM_SpecialS3Hi,
    ftMs_SM_SpecialS3S,
    ftMs_SM_SpecialS3Lw,
    ftMs_SM_SpecialS4Hi,
    ftMs_SM_SpecialS4S,
    ftMs_SM_SpecialS4Lw,
    ftMs_SM_SpecialAirS1,
    ftMs_SM_SpecialAirS2Hi,
    ftMs_SM_SpecialAirS2Lw,
    ftMs_SM_SpecialAirS3Hi,
    ftMs_SM_SpecialAirS3S,
    ftMs_SM_SpecialAirS3Lw,
    ftMs_SM_SpecialAirS4Hi,
    ftMs_SM_SpecialAirS4S,
    ftMs_SM_SpecialAirS4Lw,
    ftMs_SM_SpecialHi,
    ftMs_SM_SpecialAirHi,
    ftMs_SM_SpecialLw,
    ftMs_SM_SpecialLwHit,
    ftMs_SM_SpecialAirLw,
    ftMs_SM_SpecialAirLwHit,
    ftMs_SM_Count,
    ftMs_SM_SelfCount = ftMs_SM_Count - ftCo_SM_Count,
} ftMs_Submotion;
/* 14EEF8 */ void ftFe_Init_OnDeath(HSD_GObj*);
/* 14EF60 */ void ftFe_Init_OnItemPickup(HSD_GObj*, bool);
/* 14F040 */ void ftFe_Init_OnItemInvisible(HSD_GObj*);
/* 14F088 */ void ftFe_Init_OnItemVisible(HSD_GObj*);
/* 14F0D0 */ void ftFe_Init_OnItemDrop(HSD_GObj*, bool);
/* 14F124 */ void ftFe_Init_OnLoad(HSD_GObj*);
/* 14F148 */ void ftFe_Init_LoadSpecialAttrs(HSD_GObj*);
/* 14F168 */ void ftFe_Init_OnKnockbackEnter(HSD_GObj*);
/* 14F1AC */ void ftFe_Init_OnKnockbackExit(HSD_GObj*);
/* 3D2E80 */ extern MotionState ftFe_Init_MotionStateTable[ftMs_MS_SelfCount];
/* 3D3280 */ extern Fighter_CostumeStrings ftFe_Init_CostumeStrings[];
/* 3D328C */ extern char ftFe_Init_DatFilename[];
/* 3D3410 */ extern char ftFe_Init_AnimDatFilename[];
/* 3D3498 */ extern Fighter_DemoStrings ftFe_Init_DemoMotionFilenames;
/* 3D34A8 */ extern char ftFe_Init_DataName[];
/* 45A5B8 */ extern UnkCostumeStruct ftFe_CostumeList[5];
#define GALE01_149ACC
/* 149ACC */ void ftFc_Init_OnDeath(HSD_GObj*);
/* 149B00 */ void ftFc_Init_OnItemPickup(HSD_GObj*, bool flag);
/* 149BE0 */ void ftFc_Init_OnItemInvisible(HSD_GObj*);
/* 149C28 */ void ftFc_Init_OnItemVisible(HSD_GObj*);
/* 149C70 */ void ftFc_Init_OnItemDrop(HSD_GObj*, bool flag);
/* 149CC4 */ void ftFc_Init_OnLoad(HSD_GObj*);
/* 149D3C */ void ftFc_Init_LoadSpecialAttrs(HSD_GObj*);
/* 149D5C */ void ftFc_Init_OnKnockbackEnter(HSD_GObj*);
/* 149DC8 */ void ftFc_Init_OnKnockbackExit(HSD_GObj*);
/* 3D1848 */ extern MotionState ftFc_Init_MotionStateTable[ftFx_MS_SelfCount];
/* 3D1CA8 */ extern Fighter_CostumeStrings ftFc_Init_CostumeStrings[];
/* 3D1CB4 */ extern char ftFc_Init_DatFilename[];
/* 3D1DE8 */ extern char ftFc_Init_AnimDatFilename[];
/* 3D1E64 */ extern Fighter_DemoStrings ftFc_Init_DemoMotionFilenames;
/* 3D1E74 */ extern char ftFc_Init_DataName[];
/* 45A420 */ extern UnkCostumeStruct ftFc_CostumeList[4];
#define GALE01_0E5534
/* 0E5534 */ bool ftFx_Init_800E5534(HSD_GObj* gobj);
/* 0E5554 */ void ftFx_Init_OnDeath(HSD_GObj* gobj);
/* 0E5588 */ void ftFx_Init_800E5588(HSD_GObj* gobj);
/* 0E55A8 */ void ftFx_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 0E5688 */ void ftFx_Init_OnItemInvisible(HSD_GObj* gobj);
/* 0E56D0 */ void ftFx_Init_OnItemVisible(HSD_GObj* gobj);
/* 0E5718 */ void ftFx_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 0E576C */ void ftFx_Init_OnLoadForFalco(Fighter* fp);
/* 0E57AC */ void ftFx_Init_OnLoad(HSD_GObj* gobj);
/* 0E5858 */ void ftFx_Init_LoadSpecialAttrs(HSD_GObj*);
/* 0E5898 */ void ftFx_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 0E5904 */ void ftFx_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3C7788 */ extern MotionState ftFx_Init_MotionStateTable[ftFx_MS_SelfCount];
/* 3C7BE8 */ extern char ftFx_Init_DatFilename[];
/* 3C7BF4 */ extern char ftFx_Init_DataName[];
/* 3C7D10 */ extern char ftFx_Init_AnimDatFilename[];
/* 3C7D8C */ extern Fighter_DemoStrings ftFx_Init_DemoMotionFilenames;
/* 3C7D9C */ extern Fighter_CostumeStrings ftFx_Init_CostumeStrings[];
/* 459B28 */ extern UnkCostumeStruct ftFx_CostumeList[4];
#define GALE01_0E5970
/// Check if Special Taunt has already been performed
/* 0E5970 */ bool ftFx_AppealS_CheckIfUsed(Fighter* fp);
/// Check if Fox/Falco has pressed D-Pad Down
/* 0E59BC */ bool ftFx_AppealS_CheckInput(HSD_GObj* gobj);
/// Fox & Falco's Special Taunt Motion State handler
/* 0E5A90 */ void ftFx_AppealS_Enter(HSD_GObj* gobj);
/// Fox & Falco's Special Taunt Start Animation callback
/* 0E5B18 */ void ftFx_AppealS_Anim(HSD_GObj* gobj);
/// Fox & Falco's Special Taunt Start IASA callback
/* 0E5C38 */ void ftFx_AppealS_IASA(HSD_GObj* gobj);
/// Fox & Falco's Special Taunt Physics callback
/* 0E5C3C */ void ftFx_AppealS_Phys(HSD_GObj* gobj);
/// Fox & Falco's Special Taunt Collision callback
/* 0E5C5C */ void ftFx_AppealS_Coll(HSD_GObj* gobj);
#define GALE01_0E7100
/// Create Firefox/Firebird Launch GFX
/* 0E7100 */ void ftFx_SpecialHi_CreateLaunchGFX(HSD_GObj* gobj);
/// Create Firefox/Firebird Charge GFX
/* 0E719C */ void ftFx_SpecialHi_CreateChargeGFX(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Start Motion State handler
/* 0E7238 */ void ftFx_SpecialHi_Enter(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Start Motion State handler
/* 0E72C4 */ void ftFx_SpecialAirHiStart_Enter(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Start Animation callback
/* 0E7354 */ void ftFx_SpecialHiHold_Anim(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Start Animation callback
/* 0E73B4 */ void ftFx_SpecialHiHoldAir_Anim(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Start IASA callback
/* 0E7414 */ void ftFx_SpecialHiHold_IASA(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Start IASA callback
/* 0E7418 */ void ftFx_SpecialHiHoldAir_IASA(HSD_GObj* gobj);
/// Fox & Falco's grorunded Firefox/Firebird Start Physics callback
/* 0E741C */ void ftFx_SpecialHiHold_Phys(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Start Physics callback
/* 0E743C */ void ftFx_SpecialHiHoldAir_Phys(HSD_GObj* gobj);
/// Fox & Falco's grounded Firerfox/Firebird Start Collision callback
/* 0E74A8 */ void ftFx_SpecialHiHold_Coll(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Start Collision callback
/* 0E74E4 */ void ftFx_SpecialHiHoldAir_Coll(HSD_GObj* gobj);
/// Fox & Falco's ground -> air Firefox/Firebird Start Motion State handler
/* 0E7554 */ void ftFx_SpecialHiHold_GroundToAir(HSD_GObj* gobj);
/// Fox & Falco's air -> ground Firefox/Firebird Start Motion State handler
/* 0E75C0 */ void ftFx_SpecialHiHoldAir_AirToGround(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Launch Animation callback
/* 0E7634 */ void ftFx_SpecialHi_Anim(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Launch Animation callback
/* 0E7684 */ void ftFx_SpecialAirHi_Anim(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Launch IASA callback
/* 0E76D4 */ void ftFx_SpecialHi_IASA(HSD_GObj* gobj);
/// Fox & Falco's aerial Firerfox/Firebird Launch IASA callback
/* 0E76D8 */ void ftFx_SpecialAirHi_IASA(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Launch Physics callback
/* 0E76DC */ void ftFx_SpecialHi_Phys(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Launch Physics callback
/* 0E7758 */ void ftFx_SpecialAirHi_Phys(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Launch Collision callback
/* 0E7800 */ void ftFx_SpecialHi_Coll(HSD_GObj* gobj);
/// Fox & Falco's aerial Firefox/Firebird Launch Collision callback
/* 0E78B4 */ void ftFx_SpecialAirHi_Coll(HSD_GObj* gobj);
/// Fox & Falco's Firefox/Firebird Launch ground -> air Motion State handler
/* 0E7A78 */ void ftFx_SpecialHi_GroundToAir(HSD_GObj* gobj);
/// Fox & Falco's grounded Firefox/Firebird Launch Motion State handler
/* 0E7AF4 */ void ftFx_SpecialAirHi_AirToGround(HSD_GObj* gobj);
/* 0E7C98 */ void ftFx_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 0E7E3C */ void ftFx_SpecialHiLanding_Anim(HSD_GObj* gobj);
/* 0E7E78 */ void ftFx_SpecialHiFall_Anim(HSD_GObj* gobj);
/* 0E7ED8 */ void ftFx_SpecialHiLanding_IASA(HSD_GObj* gobj);
/* 0E7EDC */ void ftFx_SpecialHiFall_IASA(HSD_GObj* gobj);
/* 0E7EE0 */ void ftFx_SpecialHiLanding_Phys(HSD_GObj* gobj);
/* 0E7F20 */ void ftFx_SpecialHiFall_Phys(HSD_GObj* gobj);
/* 0E7F40 */ void ftFx_SpecialHiLanding_Coll(HSD_GObj* gobj);
/* 0E7FA0 */ void ftFx_SpecialHiFall_Coll(HSD_GObj* gobj);
/* 0E7FF0 */ void ftFx_SpecialHiFall_Enter(HSD_GObj* gobj);
/* 0E8048 */ void ftFx_SpecialHiFall_AirToGround(HSD_GObj* gobj);
/* 0E80C0 */ void ftFx_SpecialHiLanding_GroundToAir(HSD_GObj* gobj);
/* 0E8124 */ void ftFx_SpecialHiBound_Anim(HSD_GObj* gobj);
/* 0E81FC */ void ftFx_SpecialHiBound_IASA(HSD_GObj* gobj);
/* 0E8200 */ void ftFx_SpecialHiBound_Phys(HSD_GObj* gobj);
/* 0E824C */ void ftFx_SpecialHiBound_Coll(HSD_GObj* gobj);
/* 0E82E4 */ void ftFx_SpecialHiBound_Enter(HSD_GObj* gobj);
#define GALE01_0E83E0
/// Create Reflector Loop GFX
/* 0E83E0 */ void ftFx_SpecialLw_CreateLoopGFX(HSD_GObj* gobj);
/* 0E845C */ void ftFx_SpecialLw_CreateStartGFX(HSD_GObj* gobj);
/// Create Reflector Deflect GFX
/* 0E84D8 */ void ftFx_SpecialLw_CreateReflectGFX(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Start Motion State handler
/* 0E8560 */ void ftFx_SpecialLw_Enter(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Start Motion State handler
/* 0E85EC */ void ftFx_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 0E8694 */ void ftFx_SpecialLwStart_Anim(HSD_GObj* gobj);
/* 0E8720 */ void ftFx_SpecialAirLwStart_Anim(HSD_GObj* gobj);
/* 0E87AC */ void ftFx_SpecialLwStart_IASA(HSD_GObj* gobj);
/* 0E87D0 */ void ftFx_SpecialAirLwStart_IASA(HSD_GObj* gobj);
/// Check for drop-through platform while in @c SpecialLwStart
/* 0E87D4 */ bool ftFx_SpecialLwStart_CheckPass(HSD_GObj* gobj);
/// Fox & Falco's Reflector Start Platform Drop Motion State handler
/* 0E881C */ void ftFx_SpecialLwStart_Pass(HSD_GObj* gobj);
/// Fox & Falco's Reflector Start Physics callback
/* 0E8864 */ void ftFx_SpecialLwStart_Phys(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Start Physics callback
/* 0E8884 */ void ftFx_SpecialAirLwStart_Phys(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Start Collision callback
/* 0E88E4 */ void ftFx_SpecialLwStart_Coll(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Start Collision callback
/* 0E8920 */ void ftFx_SpecialAirLwStart_Coll(HSD_GObj* gobj);
/// Fox & Falco's ground -> air Reflector Start Motion State handler
/* 0E895C */ void ftFx_SpecialLwStart_GroundToAir(HSD_GObj* gobj);
/// Fox & Falco's air -> ground Reflector Start Motion State handler
/* 0E89BC */ void ftFx_SpecialAirLwStart_AirToGround(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Loop Animation callback
/* 0E8A24 */ void ftFx_SpecialLwLoop_Anim(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Loop Animation callback
/* 0E8A9C */ void ftFx_SpecialAirLwLoop_Anim(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Loop IASA callback
/* 0E8B14 */ void ftFx_SpecialLwLoop_IASA(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Loop IASA callback
/* 0E8B64 */ void ftFx_SpecialAirLwLoop_IASA(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Loop Physics callback
/* 0E8C34 */ void ftFx_SpecialLwLoop_Phys(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Loop Physics callback
/* 0E8C68 */ void ftFx_SpecialAirLwLoop_Phys(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Loop Collision callback
/* 0E8CDC */ void ftFx_SpecialLwLoop_Coll(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Loop Collision callback
/* 0E8D18 */ void ftFx_SpecialAirLwLoop_Coll(HSD_GObj* gobj);
/// Fox & Falco's grounded Reflector Turn Animation callback
/* 0E8FDC */ void ftFx_SpecialLwTurn_Anim(HSD_GObj* gobj);
/// Fox & Falco's aerial Reflector Turn Animation callback
/* 0E90EC */ void ftFx_SpecialAirLwTurn_Anim(HSD_GObj* gobj);
/* 0E91FC */ void ftFx_SpecialLwTurn_IASA(HSD_GObj* gobj);
/* 0E9200 */ void ftFx_SpecialAirLwTurn_IASA(HSD_GObj* gobj);
/* 0E9204 */ void ftFx_SpecialLwTurn_Phys(HSD_GObj* gobj);
/* 0E9238 */ void ftFx_SpecialAirLwTurn_Phys(HSD_GObj* gobj);
/* 0E92AC */ void ftFx_SpecialLwTurn_Coll(HSD_GObj* gobj);
/* 0E92E8 */ void ftFx_SpecialAirLwTurn_Coll(HSD_GObj* gobj);
/* 0E9324 */ void ftFx_SpecialLwTurn_GroundToAir(HSD_GObj* gobj);
/* 0E93A4 */ void ftFx_SpecialAirLwTurn_GroundToAir(HSD_GObj* gobj);
/* 0E942C */ bool ftFx_SpecialLwTurn_Check(HSD_GObj* gobj);
/* 0E9564 */ bool ftFx_SpecialLwHit_Check(HSD_GObj* gobj);
/* 0E965C */ void ftFx_SpecialLwHit_Anim(HSD_GObj* gobj);
/* 0E97B4 */ void ftFx_SpecialAirLwHit_Anim(HSD_GObj* gobj);
/* 0E9844 */ void ftFx_SpecialLwHit_IASA(HSD_GObj* gobj);
/* 0E9848 */ void ftFx_SpecialAirLwHit_IASA(HSD_GObj* gobj);
/* 0E984C */ void ftFx_SpecialLwHit_Phys(HSD_GObj* gobj);
/* 0E9880 */ void ftFx_SpecialAirLwHit_Phys(HSD_GObj* gobj);
/* 0E98F4 */ void ftFx_SpecialLwHit_Coll(HSD_GObj* gobj);
/* 0E9930 */ void ftFx_SpecialAirLwHit_Coll(HSD_GObj* gobj);
/* 0E996C */ void ftFx_SpecialLwHit_GroundToAir(HSD_GObj* gobj);
/* 0E99D4 */ void ftFx_SpecialAirLwHit_AirToGround(HSD_GObj* gobj);
/* 0E9A44 */ void ftFx_SpecialLwHit_SetCall(HSD_GObj* gobj);
/* 0E9A68 */ void ftFx_SpecialLwHit_Enter(HSD_GObj* gobj);
/* 0E9B40 */ void ftFx_SpecialLwEnd_Anim(HSD_GObj* gobj);
/* 0E9B84 */ void ftFx_SpecialAirLwEnd_Anim(HSD_GObj* gobj);
/* 0E9BC8 */ void ftFx_SpecialLwEnd_IASA(HSD_GObj* gobj);
/* 0E9BCC */ void ftFx_SpecialAirLwEnd_IASA(HSD_GObj* gobj);
/* 0E9BD0 */ void ftFx_SpecialLwEnd_Phys(HSD_GObj* gobj);
/* 0E9BF0 */ void ftFx_SpecialAirLwEnd_Phys(HSD_GObj* gobj);
/* 0E9C50 */ void ftFx_SpecialLwEnd_Coll(HSD_GObj* gobj);
/* 0E9C8C */ void ftFx_SpecialAirLwEnd_Coll(HSD_GObj* gobj);
/* 0E9CC8 */ void ftFx_SpecialLwEnd_GroundToAir(HSD_GObj* gobj);
/* 0E9D24 */ void ftFx_SpecialAirLwEnd_AirToGround(HSD_GObj* gobj);
/* 0E9D88 */ void ftFx_SpecialLwEnd_Enter(HSD_GObj* gobj);
/* 0E9DC0 */ void ftFx_SpecialAirLwEnd_Enter(HSD_GObj* gobj);
#define GALE01_0E5CB0
/// Get Fox/Falco's Item Hold Bone Position for Blaster GFX
/* 0E5CB0 */ void ftFx_SpecialN_FtGetHoldJoint(HSD_GObj* gobj, Vec3* pos);
/**
 * Get Fox/Falco's Item Hold Bone Position for Blaster GFX again?
 * @remarks Used in Blaster's item code.
 */
/* 0E5D20 */ void ftFx_SpecialN_ItGetHoldJoint(HSD_GObj* gobj, Vec3* pos);
/* 0E5D90 */ void ftFx_SpecialN_OnChangeAction(HSD_GObj* gobj);
/* 0E5DC4 */ bool ftFx_SpecialN_CheckRemoveBlaster(HSD_GObj* gobj);
/* 0E5DE4 */ s32 ftFx_SpecialN_GetBlasterAction(HSD_GObj* gobj);
/* 0E5E38 */ bool ftFx_SpecialN_CheckBlasterAction(HSD_GObj* gobj);
/* 0E5E90 */ void ftFx_SpecialN_ClearBlaster(HSD_GObj* gobj);
/* 0E5EBC */ void ftFx_SpecialN_RemoveBlaster(HSD_GObj* gobj);
/* 0E5F28 */ void ftFx_SpecialN_CreateBlasterShot(HSD_GObj* gobj);
/* 0E608C */ void ftFx_SpecialN_Enter(HSD_GObj* gobj);
/* 0E61A8 */ void ftFx_SpecialAirN_Enter(HSD_GObj* gobj);
/* 0E62A4 */ void ftFx_SpecialNStart_Anim(HSD_GObj* gobj);
/* 0E6368 */ void ftFx_SpecialNLoop_Anim(HSD_GObj* gobj);
/* 0E65BC */ void ftFx_SpecialNEnd_Anim(HSD_GObj* gobj);
/* 0E667C */ void ftFx_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 0E6740 */ void ftFx_SpecialAirNLoop_Anim(HSD_GObj* gobj);
/* 0E69BC */ void ftFx_SpecialAirNEnd_Anim(HSD_GObj* gobj);
/* 0E6AB4 */ void ftFx_SpecialNStart_IASA(HSD_GObj* gobj);
/* 0E6ADC */ void ftFx_SpecialNLoop_IASA(HSD_GObj* gobj);
/* 0E6B04 */ void ftFx_SpecialNEnd_IASA(HSD_GObj* gobj);
/* 0E6B08 */ void ftFx_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 0E6B30 */ void ftFx_SpecialAirNLoop_IASA(HSD_GObj* gobj);
/* 0E6B58 */ void ftFx_SpecialAirNEnd_IASA(HSD_GObj* gobj);
/* 0E6B5C */ void ftFx_SpecialNStart_Phys(HSD_GObj* gobj);
/* 0E6B7C */ void ftFx_SpecialNLoop_Phys(HSD_GObj* gobj);
/* 0E6B9C */ void ftFx_SpecialNEnd_Phys(HSD_GObj* gobj);
/* 0E6BBC */ void ftFx_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 0E6BDC */ void ftFx_SpecialAirNLoop_Phys(HSD_GObj* gobj);
/* 0E6BFC */ void ftFx_SpecialAirNEnd_Phys(HSD_GObj* gobj);
/* 0E6C1C */ void ftFx_SpecialNStart_Coll(HSD_GObj* gobj);
/* 0E6C3C */ void ftFx_SpecialNLoop_Coll(HSD_GObj* gobj);
/* 0E6C5C */ void ftFx_SpecialNEnd_Coll(HSD_GObj* gobj);
/* 0E6C7C */ void ftFx_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 0E6C9C */ void ftFx_SpecialAirNLoop_Coll(HSD_GObj* gobj);
/* 0E6CBC */ void ftFx_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/* 0E6CDC */ void ftFx_Throw_Anim(HSD_GObj* gobj);
#define GALE01_0E9DF8
/* 0E9DF8 */ void ftFx_SpecialS_CreateGFX(HSD_GObj* gobj);
/* 0E9E78 */ bool ftFx_SpecialS_CheckGhostRemove(HSD_GObj* gobj);
/* 0E9EA0 */ s32 ftFx_SpecialS_GetCmdVar2(HSD_GObj* gobj);
/* 0E9EAC */ void ftFx_SpecialS_CopyGhostPosIndexed(HSD_GObj* gobj, s32 index,
                                                    Vec3* ghostPos);
/* 0E9ED4 */ float ftFx_SpecialS_ReturnFloatVarIndexed(HSD_GObj* gobj,
                                                       s32 index);
/* 0E9EE8 */ void ftFx_SpecialSStart_Enter(HSD_GObj* gobj);
/* 0E9F6C */ void ftFx_SpecialAirSStart_Enter(HSD_GObj* gobj);
/* 0EA004 */ void ftFx_SpecialSStart_Anim(HSD_GObj* gobj);
/* 0EA040 */ void ftFx_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 0EA07C */ void ftFx_SpecialSStart_IASA(HSD_GObj* gobj);
/* 0EA080 */ void ftFx_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 0EA084 */ void ftFx_SpecialSStart_Phys(HSD_GObj* gobj);
/* 0EA0BC */ void ftFx_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 0EA128 */ void ftFx_SpecialSStart_Coll(HSD_GObj* gobj);
/* 0EA164 */ void ftFx_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 0EA1D4 */ void ftFx_SpecialSStart_GroundToAir(HSD_GObj* gobj);
/* 0EA234 */ void ftFx_SpecialAirSStart_AirToGround(HSD_GObj* gobj);
/* 0EA294 */ void ftFx_SpecialS_Anim(HSD_GObj* gobj);
/* 0EA344 */ void ftFx_SpecialAirS_Anim(HSD_GObj* gobj);
/* 0EA3F4 */ void ftFx_SpecialS_IASA(HSD_GObj* gobj);
/* 0EA438 */ void ftFx_SpecialAirS_IASA(HSD_GObj* gobj);
/* 0EA47C */ void ftFx_SpecialS_Phys(HSD_GObj* gobj);
/* 0EA534 */ void ftFx_SpecialAirS_Phys(HSD_GObj* gobj);
/* 0EA5EC */ void ftFx_SpecialS_Coll(HSD_GObj* gobj);
/* 0EA628 */ void ftFx_SpecialAirS_Coll(HSD_GObj* gobj);
/* 0EA698 */ void ftFx_SpecialS_GroundToAir(HSD_GObj* gobj);
/* 0EA700 */ void ftFx_SpecialAirS_AirToGround(HSD_GObj* gobj);
/* 0EA768 */ void ftFx_SpecialS_Enter(HSD_GObj* gobj);
/* 0EA838 */ void ftFx_SpecialAirS_Enter(HSD_GObj* gobj);
/* 0EA908 */ void ftFx_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 0EA944 */ void ftFx_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 0EA9A4 */ void ftFx_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 0EA9A8 */ void ftFx_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 0EA9AC */ void ftFx_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 0EAA8C */ void ftFx_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 0EAB90 */ void ftFx_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 0EABCC */ void ftFx_SpecialAirSEnd_Coll(HSD_GObj* gobj);
/* 0EAC50 */ void ftFx_SpecialSEnd_Enter(HSD_GObj* gobj);
/* 0EACD8 */ void ftFx_SpecialAirSEnd_Enter(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTFOX_INLINES_H
static inline void ftFox_SpecialN_CheckLoopInput(HSD_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    if (fp->cmd_vars[0] != 0 && (fp->input.pressed_buttons & (1 << 9))) {
        fp->mv.fx.SpecialN.isBlasterLoop = 1;
    }
}
#define GALE01_14A250
/* 14A250 */ void ftGw_Init_OnDeath(HSD_GObj* gobj);
/* 14A37C */ void ftGw_Init_OnLoad(HSD_GObj* gobj);
/* 14A4CC */ void ftGw_Init_OnDamage(HSD_GObj* gobj);
/* 14A538 */ void ftGw_Init_8014A538(HSD_GObj* gobj);
/* 14A5B8 */ void ftGw_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 14A698 */ void ftGw_Init_OnItemInvisible(HSD_GObj* gobj);
/* 14A6E0 */ void ftGw_Init_OnItemVisible(HSD_GObj* gobj);
/* 14A728 */ void ftGw_Init_OnItemDrop(HSD_GObj* gobj, bool dropItemFlag);
/* 14A77C */ void ftGw_Init_UnkMotionStates4(HSD_GObj* gobj);
/* 14A7B4 */ void ftGameWatch_CopySpecialAttrs(HSD_GObj* gobj);
/* 14A7F4 */ void ftGw_Init_8014A7F4(HSD_GObj* gobj, ItemModStruct* item_mod);
/* 14A814 */ void ftGw_Init_8014A814(HSD_GObj* gobj, ItemModStruct* item_mod);
/* 14A828 */ void ftGw_Init_OnAbsorb(HSD_GObj* gobj);
/* 3D23E8 */ extern MotionState ftGw_Init_MotionStateTable[ftGw_MS_SelfCount];
/* 3D28E8 */ extern char ftGw_Init_DatFilename[];
/* 3D28F4 */ extern char ftGw_Init_DataName[];
/* 3D292C */ extern char ftGw_Init_AnimDatFilename[];
/* 3D29B8 */ extern Fighter_DemoStrings ftGw_Init_DemoMotionFilenames;
/* 3D29C8 */ extern Fighter_CostumeStrings ftGw_Init_CostumeStrings[];
/* 45A4E0 */ extern UnkCostumeStruct ftGw_CostumeList[4];
/// @file
/// Neutral Attack - Greenhouse (Attack100Start/Loop/End)
#define GALE01_14C1E8
/* 14C1E8 */ void ftGw_Attack100Start_Enter(HSD_GObj* gobj);
/* 14C224 */ void ftGw_Attack100Start_Anim(HSD_GObj* gobj);
/* 14C260 */ void ftGw_Attack100Start_IASA(HSD_GObj* gobj);
/* 14C264 */ void ftGw_Attack100Start_Phys(HSD_GObj* gobj);
/* 14C284 */ void ftGw_Attack100Start_Coll(HSD_GObj* gobj);
/* 14C2B8 */ void ftGw_Attack100Loop_Enter(HSD_GObj* gobj);
/* 14C308 */ void ftGw_Attack100Loop_Anim(HSD_GObj* gobj);
/* 14C330 */ void ftGw_Attack100Loop_IASA(HSD_GObj* gobj);
/* 14C350 */ void ftGw_Attack100Loop_Phys(HSD_GObj* gobj);
/* 14C370 */ void ftGw_Attack100Loop_Coll(HSD_GObj* gobj);
/* 14C3A4 */ void ftGw_Attack100End_Enter(HSD_GObj* gobj);
/* 14C3F4 */ void ftGw_Attack100End_Anim(HSD_GObj* gobj);
/* 14C414 */ void ftGw_Attack100End_IASA(HSD_GObj* gobj);
/* 14C418 */ void ftGw_Attack100End_Phys(HSD_GObj* gobj);
/* 14C438 */ void ftGw_Attack100End_Coll(HSD_GObj* gobj);
/// @file
/// Neutral Attack - Greenhouse (Attack11)
#define GALE01_14BDB0
/* 14BDB0 */ void ftGw_Attack11_ItemGreenhouseSetup(HSD_GObj* gobj);
/* 14BE84 */ void ftGw_Attack11_DecideAction(HSD_GObj* gobj);
/* 14BF48 */ void ftGw_Attack11_ItemGreenhouseSetFlag(HSD_GObj* gobj);
/* 14BF7C */ void ftGw_Attack11_ItemGreenhouseRemove(HSD_GObj* gobj);
/* 14BFD4 */ void ftGw_Attack11_ItemGreenhouseEnterHitlag(HSD_GObj* gobj);
/* 14C004 */ void ftGw_Attack11_ItemGreenhouseExitHitlag(HSD_GObj* gobj);
/* 14C034 */ bool ftGw_Attack11_ItemGreenhouse_CheckAll(HSD_GObj* gobj);
/* 14C05C */ bool ftGw_Attack11_ItemGreenhouse_CheckAttack11(HSD_GObj* gobj);
/* 14C07C */ void ftGw_Attack11_Enter(HSD_GObj* gobj);
/* 14C138 */ void ftGw_Attack11_Anim(HSD_GObj* gobj);
/* 14C174 */ void ftGw_Attack11_IASA(HSD_GObj* gobj);
/* 14C194 */ void ftGw_Attack11_Phys(HSD_GObj* gobj);
/* 14C1B4 */ void ftGw_Attack11_Coll(HSD_GObj* gobj);
/// @file
/// Aerial Attacks (AttackAir)
#define GALE01_14AFC0
/* 14AFC0 */ void ftGw_AttackAirN_ItemParachuteSetup(HSD_GObj* gobj);
/* 14B074 */ void ftGw_AttackAirN_ItemParachuteOnLand(HSD_GObj* gobj);
/* 14B0F0 */ void ftGw_AttackAirN_ItemParachuteSetFlag(HSD_GObj* gobj);
/* 14B12C */ void ftGw_AttackAirN_ItemParachuteRemove(HSD_GObj* gobj);
/* 14B18C */ bool ftGw_AttackAirN_ItemCheckParachuteRemove(HSD_GObj* gobj);
/* 14B1B4 */ void ftGw_AttackAirN_ItemTurtleSetup(HSD_GObj* gobj);
/* 14B2E4 */ void ftGw_AttackAirN_ItemTurtleSetFlag(HSD_GObj* gobj);
/* 14B320 */ void ftGw_AttackAirN_ItemTurtleRemove(HSD_GObj* gobj);
/* 14B380 */ bool ftGw_AttackAirN_ItemCheckTurtleRemove(HSD_GObj* gobj);
/* 14B3A8 */ void ftGw_AttackAirN_ItemSparkySetup(HSD_GObj* gobj);
/* 14B45C */ void ftGw_AttackAirN_ItemSparkyOnLand(HSD_GObj* gobj);
/* 14B4D8 */ void ftGw_AttackAirN_ItemSparkySetFlag(HSD_GObj* gobj);
/* 14B514 */ void ftGw_AttackAirN_ItemSparkyRemove(HSD_GObj* gobj);
/* 14B574 */ void ftGw_AttackAirN_EnterItemHitlag(HSD_GObj* gobj);
/* 14B624 */ bool ftGw_AttackAirN_ItemCheckSparkyRemove(HSD_GObj* gobj);
/* 14B64C */ void ftGw_AttackAirN_DecideAction(HSD_GObj* gobj);
/* 14B6E4 */ void ftGw_AttackAirN_Enter(HSD_GObj* gobj);
/* 14B720 */ void ftGw_AttackAirN_Anim(HSD_GObj* gobj);
/* 14B740 */ void ftGw_AttackAirN_IASA(HSD_GObj* gobj);
/* 14B760 */ void ftGw_AttackAirN_Phys(HSD_GObj* gobj);
/* 14B780 */ void ftGw_AttackAirN_Coll(HSD_GObj* gobj);
/* 14B7A8 */ void ftGw_LandingAirN_Enter(HSD_GObj* gobj);
/* 14B87C */ void ftGw_AttackAirB_Anim(HSD_GObj* gobj);
/* 14B89C */ void ftGw_AttackAirB_IASA(HSD_GObj* gobj);
/* 14B8BC */ void ftGw_AttackAirB_Phys(HSD_GObj* gobj);
/* 14B8DC */ void ftGw_AttackAirB_Coll(HSD_GObj* gobj);
/* 14B904 */ void ftGw_LandingAirB_Enter(HSD_GObj* gobj);
/* 14B9D8 */ void ftGw_AttackAirHi_Anim(HSD_GObj* gobj);
/* 14B9F8 */ void ftGw_AttackAirHi_IASA(HSD_GObj* gobj);
/* 14BA18 */ void ftGw_AttackAirHi_Phys(HSD_GObj* gobj);
/* 14BA38 */ void ftGw_AttackAirHi_Coll(HSD_GObj* gobj);
/* 14BA60 */ void ftGw_LandingAirHi_Enter(HSD_GObj* gobj);
/* 14BB24 */ void ftGw_LandingAirN_Anim(HSD_GObj* gobj);
/* 14BB70 */ void ftGw_LandingAirN_IASA(HSD_GObj* gobj);
/* 14BB74 */ void ftGw_LandingAirN_Phys(HSD_GObj* gobj);
/* 14BB94 */ void ftGw_LandingAirN_Coll(HSD_GObj* gobj);
/* 14BBE0 */ void ftGw_LandingAirB_Init(HSD_GObj* gobj);
/* 14BC0C */ void ftGw_LandingAirB_Anim(HSD_GObj* gobj);
/* 14BC58 */ void ftGw_LandingAirB_IASA(HSD_GObj* gobj);
/* 14BC5C */ void ftGw_LandingAirB_Phys(HSD_GObj* gobj);
/* 14BC7C */ void ftGw_LandingAirB_Coll(HSD_GObj* gobj);
/* 14BCC8 */ void ftGw_LandingAirHi_Init(HSD_GObj* gobj);
/* 14BCF4 */ void ftGw_LandingAirHi_Anim(HSD_GObj* gobj);
/* 14BD40 */ void ftGw_LandingAirHi_IASA(HSD_GObj* gobj);
/* 14BD44 */ void ftGw_LandingAirHi_Phys(HSD_GObj* gobj);
/* 14BD64 */ void ftGw_LandingAirHi_Coll(HSD_GObj* gobj);
/// @file
/// Down Tilt (AttackLw3)
#define GALE01_14AB48
/* 14AB48 */ void ftGw_AttackLw3_ItemManholeSetup(HSD_GObj* gobj);
/* 14AC40 */ void ftGw_AttackLw3_ItemManholeRemove(HSD_GObj* gobj);
/* 14ACB0 */ void ftGw_AttackLw3_ItemManholeOnDamage(HSD_GObj* gobj);
/* 14AD98 */ bool ftGw_AttackLw3_ItemCheckManholeRemove(HSD_GObj* gobj);
/* 14ADB8 */ void ftGw_AttackLw3_Enter(HSD_GObj* gobj);
/* 14AE3C */ void ftGw_AttackLw3_Anim(HSD_GObj* gobj);
/* 14AE78 */ void ftGw_AttackLw3_IASA(HSD_GObj* gobj);
/* 14AF6C */ void ftGw_AttackLw3_Phys(HSD_GObj* gobj);
/* 14AF8C */ void ftGw_AttackLw3_Coll(HSD_GObj* gobj);
/// @file
/// Forward Smash (AttackS4)
#define GALE01_14A848
/* 14A848 */ void ftGw_ItemTorchSetup(HSD_GObj* gobj);
/* 14A904 */ void ftGw_AttackS4_ItemTorchSetFlag(HSD_GObj* gobj);
/* 14A938 */ void ftGw_AttackS4_ItemTorchOnDamage(HSD_GObj* gobj);
/* 14A990 */ void ftGw_AttackS4_ItemTorchEnterHitlag(HSD_GObj* gobj);
/* 14A9C0 */ void ftGw_AttackS4_ItemTorchExitHitlag(HSD_GObj* gobj);
/* 14A9F0 */ bool ftGw_AttackS4_ItemCheckTorchRemove(HSD_GObj* gobj);
/* 14AA10 */ void ftGw_AttackS4_Enter(HSD_GObj* gobj);
/* 14AA88 */ void ftGw_AttackS4_Anim(HSD_GObj* gobj);
/* 14AAC4 */ void ftGw_AttackS4_IASA(HSD_GObj* gobj);
/* 14AAF4 */ void ftGw_AttackS4_Phys(HSD_GObj* gobj);
/* 14AB14 */ void ftGw_AttackS4_Coll(HSD_GObj* gobj);
/// @file
/// Up Special - Fire Rescue (SpeciialHi)
#define GALE01_14DEF0
/* 14DEF0 */ void ftGw_SpecialHi_ItemRescueSetup(HSD_GObj* gobj);
/* 14DFB8 */ bool ftGw_SpecialHi_ItemCheckRescueRemove(HSD_GObj* gobj);
/* 14DFE4 */ void ftGw_SpecialHi_ItemRescueSetNULL(HSD_GObj* gobj);
/* 14DFFC */ void ftGw_SpecialHi_ItemRescueRemove(HSD_GObj* gobj);
/* 14E0AC */ void ftGw_SpecialHi_Enter(HSD_GObj* gobj);
/* 14E158 */ void ftGw_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 14E1F8 */ void ftGw_SpecialHi_Anim(HSD_GObj* gobj);
/* 14E218 */ void ftGw_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 14E290 */ void ftGw_SpecialHi_IASA(HSD_GObj* gobj);
/* 14E2B0 */ void ftGw_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 14E374 */ void ftGw_SpecialHi_Phys(HSD_GObj* gobj);
/* 14E394 */ void ftGw_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 14E3B4 */ void ftGw_SpecialHi_Coll(HSD_GObj* gobj);
/* 14E3D4 */ void ftGw_SpecialAirHi_Coll(HSD_GObj* gobj);
/// @file
/// @brief Game & Watch's Down Special - Oil Panic (SpecialLw)
#define GALE01_14CBF4
/* 14CBF4 */ void ftGw_SpecialLw_ItemPanicSetup(HSD_GObj* gobj);
/* 14CC9C */ void ftGw_SpecialLw_ItemPanicSetFlag(HSD_GObj* gobj);
/* 14CCD8 */ void ftGw_SpecialLw_ItemPanicRemove(HSD_GObj* gobj);
/* 14CD38 */ void ftGw_SpecialLw_ItemPanicEnterHitlag(HSD_GObj* gobj);
/* 14CD68 */ void ftGw_SpecialLw_ItemPanicExitHitlag(HSD_GObj* gobj);
/* 14CD98 */ bool ftGw_SpecialLw_ItemCheckPanicRemove(HSD_GObj* gobj);
/* 14CDC0 */ void ftGw_SpecialLw_UpdateBucketModel(HSD_GObj* gobj);
/* 14CEF0 */ void ftGw_SpecialLw_Enter(HSD_GObj* gobj);
/* 14CF78 */ void ftGw_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 14D014 */ void ftGw_SpecialLw_Anim(HSD_GObj* gobj);
/* 14D0E0 */ void ftGw_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 14D1AC */ void ftGw_SpecialLw_IASA(HSD_GObj* gobj);
/* 14D264 */ void ftGw_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 14D31C */ void ftGw_SpecialLw_Phys(HSD_GObj* gobj);
/* 14D350 */ void ftGw_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 14D3B4 */ void ftGw_SpecialLw_Coll(HSD_GObj* gobj);
/* 14D3F0 */ void ftGw_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 14D42C */ void ftGw_SpecialLw_GroundToAir(HSD_GObj* gobj);
/* 14D4DC */ void ftGw_SpecialAirLw_AirToGround(HSD_GObj* gobj);
/* 14D58C */ void ftGw_SpecialLw_UpdateAction(HSD_GObj* gobj, float animFrame);
/* 14D620 */ void ftGw_SpecialAirLw_UpdateAction(HSD_GObj* gobj,
                                                 float animFrame);
/* 14D6B4 */ void ftGw_SpecialLwCatch_Anim(HSD_GObj* gobj);
/* 14D774 */ void ftGw_SpecialAirLwCatch_Anim(HSD_GObj* gobj);
/* 14D834 */ void ftGw_SpecialLwCatch_IASA(HSD_GObj* gobj);
/* 14D838 */ void ftGw_SpecialAirLwCatch_IASA(HSD_GObj* gobj);
/* 14D83C */ void ftGw_SpecialLwCatch_Phys(HSD_GObj* gobj);
/* 14D85C */ void ftGw_SpecialAirLwCatch_Phys(HSD_GObj* gobj);
/* 14D87C */ void ftGw_SpecialLwCatch_Coll(HSD_GObj* gobj);
/* 14D8B8 */ void ftGw_SpecialAirLwCatch_Coll(HSD_GObj* gobj);
/* 14D8F4 */ void ftGw_SpecialLwCatch_GroundToAir(HSD_GObj* gobj);
/* 14D954 */ void ftGw_SpecialAirLwCatch_AirToGround(HSD_GObj* gobj);
/* 14D9B4 */ void ftGw_SpecialLw_AbsorbThink_DecideAction(HSD_GObj* gobj);
/* 14DA60 */ void ftGw_SpecialLwShoot_Anim(HSD_GObj* gobj);
/* 14DAF0 */ void ftGw_SpecialAirLwShoot_Anim(HSD_GObj* gobj);
/* 14DB80 */ void ftGw_SpecialLwShoot_IASA(HSD_GObj* gobj);
/* 14DB84 */ void ftGw_SpecialAirLwShoot_IASA(HSD_GObj* gobj);
/* 14DB88 */ void ftGw_SpecialLwShoot_Phys(HSD_GObj* gobj);
/* 14DBA8 */ void ftGw_SpecialAirLwShoot_Phys(HSD_GObj* gobj);
/* 14DBC8 */ void ftGw_SpecialLwShoot_Coll(HSD_GObj* gobj);
/* 14DC04 */ void ftGw_SpecialAirLwShoot_Coll(HSD_GObj* gobj);
/* 14DC40 */ void ftGw_SpecialLwShoot_GroundToAir(HSD_GObj* gobj);
/* 14DCB4 */ void ftGw_SpecialAirLwShoot_AirToGround(HSD_GObj* gobj);
/* 14DD28 */ void ftGw_SpecialLwShoot_ReleaseOil(HSD_GObj* gobj);
/* 14DE0C */ void ftGw_SpecialAirLwShoot_ReleaseOil(HSD_GObj* gobj);
/// @file
/// Neutral Special - Chef (SpecialN/)
#define GALE01_14E4F0
/* 14E4F0 */ void ftGw_SpecialN_Coll(HSD_GObj* gobj);
/* 14E644 */ void ftGw_SpecialN_Enter(HSD_GObj* gobj);
/* 14E6C0 */ void ftGw_SpecialAirN_Coll(HSD_GObj* gobj);
/* 14E73C */ void ftGw_SpecialAirN_Phys(HSD_GObj* gobj);
/* 14E7DC */ void ftGw_SpecialAirN_AirToGround(HSD_GObj* gobj);
/* 14E87C */ void ftGw_SpecialN_IASA(HSD_GObj* gobj);
/* 14E900 */ void ftGw_SpecialAirN_Enter(HSD_GObj* gobj);
/* 14E984 */ void ftGw_SpecialN_Phys(HSD_GObj* gobj);
/* 14E9A4 */ void ftGw_SpecialAirN_Loop(HSD_GObj* gobj, float anim_frame);
/* 14E9C4 */ void ftGw_SpecialN_Anim(HSD_GObj* gobj);
/* 14EA00 */ void ftGw_SpecialAirN_Anim(HSD_GObj* gobj);
/* 14EA3C */ void ftGw_SpecialN_GroundToAir(HSD_GObj* gobj);
/* 14EAAC */ void ftGw_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 14EB1C */ void ftGw_SpecialN_Loop(HSD_GObj* gobj, float anim_frame);
/* 14EB8C */ void ftGw_SpecialAirN_IASA(HSD_GObj* gobj);
/// @file
/// Side Special - Judgement (SpecialS)
#define GALE01_14C46C
/* 14C46C */ void ftGw_SpecialS_ItemJudgementSetup(HSD_GObj* gobj);
/* 14C590 */ void ftGw_SpecialS_ItemJudgementSetFlag(HSD_GObj* gobj);
/* 14C5CC */ void ftGw_SpecialS_ItemJudgementRemove(HSD_GObj* gobj);
/* 14C68C */ bool ftGw_SpecialS_ItemCheckJudgementRemove(HSD_GObj* gobj);
/* 14C6B4 */ int ftGw_SpecialS_GetRandomInt(HSD_GObj* gobj);
/* 14C7A0 */ void ftGw_SpecialS_Enter(HSD_GObj* gobj);
/* 14C828 */ void ftGw_SpecialAirS_Enter(HSD_GObj* gobj);
/* 14C8BC */ void ftGw_SpecialS_Anim(HSD_GObj* gobj);
/* 14C8F8 */ void ftGw_SpecialAirS_Anim(HSD_GObj* gobj);
/* 14C934 */ void ftGw_SpecialS_IASA(HSD_GObj* gobj);
/* 14C938 */ void ftGw_SpecialAirS_IASA(HSD_GObj* gobj);
/* 14C93C */ void ftGw_SpecialS_Phys(HSD_GObj* gobj);
/* 14C974 */ void ftGw_SpecialAirS_Phys(HSD_GObj* gobj);
/* 14CA10 */ void ftGw_SpecialS_Coll(HSD_GObj* gobj);
/* 14CA4C */ void ftGw_SpecialAirS_Coll(HSD_GObj* gobj);
#define GALE01_14EE40
/* 14EBFC */ void ftGn_Init_OnDeath(HSD_GObj* gobj);
/* 14EC58 */ void ftGn_Init_OnItemPickup(HSD_GObj* gobj, bool);
/* 14ED38 */ void ftGn_Init_OnItemInvisible(HSD_GObj* gobj);
/* 14ED80 */ void ftGn_Init_OnItemVisible(HSD_GObj* gobj);
/* 14EDC8 */ void ftGn_Init_OnItemDrop(HSD_GObj* gobj, bool);
/* 14EE1C */ void ftGn_Init_OnLoad(HSD_GObj* gobj);
/* 14EE40 */ void ftGn_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 14EE60 */ void ftGn_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 14EEAC */ void ftGn_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3D29F8 */ extern MotionState ftGn_Init_MotionStateTable[ftCa_MS_SelfCount];
/* 3D2CD8 */ extern char ftGn_Init_DatFilename[];
/* 3D2CE4 */ extern char ftGn_Init_DataName[];
/* 3D2DB4 */ extern char ftGn_Init_AnimDatFilename[];
/* 3D2E30 */ extern Fighter_DemoStrings ftGn_Init_DemoMotionFilenames;
/* 3D2E40 */ extern Fighter_CostumeStrings ftGn_Init_CostumeStrings[];
/* 45A540 */ extern UnkCostumeStruct ftGn_CostumeList[5];
#define GALE01_14F640
#define MELEE_FT_CHARA_FTKOOPA_FORWARD_H
static MotionFlags const ftKp_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftKp_MF_SpecialN =
    ftKp_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftKp_MF_SpecialS = ftKp_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftKp_MF_SpecialHi =
    ftKp_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftKp_MF_SpecialLwStart =
    ftKp_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_KeepSfx;
static MotionFlags const ftKp_MF_SpecialNStart =
    ftKp_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftKp_MF_SpecialAirS =
    ftKp_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftKp_MF_SpecialAirHi =
    ftKp_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftKp_MF_SpecialAirLw =
    ftKp_MF_SpecialLwStart | Ft_MF_SkipParasol;
static MotionFlags const ftKp_MF_SpecialNLoop = ftKp_MF_SpecialN | Ft_MF_Unk19;
static MotionFlags const ftKp_MF_SpecialAirNLoop =
    ftKp_MF_SpecialNLoop | Ft_MF_SkipParasol;
typedef enum ftKoopa_MotionState {
    ftKp_MS_SpecialNStart = ftCo_MS_Count,
    ftKp_MS_SpecialN,
    ftKp_MS_SpecialNEnd,
    ftKp_MS_SpecialAirNStart,
    ftKp_MS_SpecialAirN,
    ftKp_MS_SpecialAirNEnd,
    ftKp_MS_SpecialSStart,
    ftKp_MS_SpecialSHit0_0,
    ftKp_MS_SpecialSHit1,
    ftKp_MS_SpecialSHit0_1,
    ftKp_MS_SpecialSEndF,
    ftKp_MS_SpecialSEndB,
    ftKp_MS_SpecialAirSStart,
    ftKp_MS_SpecialAirSHit0_0,
    ftKp_MS_SpecialAirSHit1,
    ftKp_MS_SpecialAirSHit0_1,
    ftKp_MS_SpecialAirSEndF,
    ftKp_MS_SpecialAirSEndB,
    ftKp_MS_SpecialHi,
    ftKp_MS_SpecialAirHi,
    ftKp_MS_SpecialLw,
    ftKp_MS_SpecialAirLw,
    ftKp_MS_SpecialLwLanding,
    ftKp_MS_Count,
    ftKp_MS_SelfCount = ftKp_MS_Count - ftCo_MS_Count,
} ftKoopa_MotionState;
typedef enum ftKp_Submotion {
    ftKp_SM_SpecialNStart = ftCo_SM_Count,
    ftKp_SM_SpecialN,
    ftKp_SM_SpecialNEnd,
    ftKp_SM_SpecialAirNStart,
    ftKp_SM_SpecialAirN,
    ftKp_SM_SpecialAirNEnd,
    ftKp_SM_SpecialSStart,
    ftKp_SM_SpecialSHit0,
    ftKp_SM_SpecialSHit1,
    ftKp_SM_SpecialSEndF,
    ftKp_SM_SpecialSEndB,
    ftKp_SM_SpecialAirSStart,
    ftKp_SM_SpecialAirSHit0,
    ftKp_SM_SpecialAirSHit1,
    ftKp_SM_SpecialAirSEndF,
    ftKp_SM_SpecialAirSEndB,
    ftKp_SM_SpecialHi,
    ftKp_SM_SpecialAirHi,
    ftKp_SM_SpecialLw,
    ftKp_SM_SpecialAirLw,
    ftKp_SM_SpecialLwLanding,
    ftKp_SM_Count,
    ftKp_SM_SelfCount = ftKp_SM_Count - ftCo_SM_Count,
} ftKp_Submotion;
/* 14F640 */ void ftGk_Init_OnDeath(HSD_GObj*);
/* 14F698 */ void ftGk_Init_UnkMotionStates3(HSD_GObj*);
/* 14F6B8 */ void ftGk_Init_OnLoad(HSD_GObj*);
/* 14F720 */ void ftGk_Init_OnItemPickup(HSD_GObj*, bool);
/* 14F800 */ void ftGk_Init_OnItemInvisible(HSD_GObj*);
/* 14F848 */ void ftGk_Init_OnItemVisible(HSD_GObj*);
/* 14F890 */ void ftGk_Init_OnItemDrop(HSD_GObj*, bool);
/* 14F8E4 */ void ftGk_Init_LoadSpecialAttrs(HSD_GObj*);
/* 14F904 */ void ftGk_Init_OnKnockbackEnter(HSD_GObj*);
/* 14F948 */ void ftGk_Init_OnKnockbackExit(HSD_GObj*);
/* 14F98C */ void ftGk_Init_UnkDemoCallbacks0(int, int*, int*);
/* 14F9A4 */ char* ftGk_Init_GetMotionFileString(enum_t);
/* 3D35E8 */ extern MotionState ftGk_Init_MotionStateTable[ftKp_MS_SelfCount];
/* 3D38C8 */ extern MotionState ftGk_Init_UnkMotionStates0[];
/* 3D38E8 */ extern char ftGk_Init_DatFilename[];
/* 3D38F4 */ extern char ftGk_Init_DataName[];
/* 3D3948 */ extern char ftGk_Init_AnimDatFilename[];
/* 3D3954 */ extern Fighter_DemoStrings ftGk_Init_DemoMotionFilenames;
/* 3D3988 */ extern Fighter_CostumeStrings ftGk_Init_CostumeStrings[];
/* 45A660 */ extern UnkCostumeStruct ftGk_CostumeList[1];
#define GALE01_0EE528
typedef struct ftKirby_CopyName {
    char* filename;
    char* name;
} ftKirby_CopyName;
/* 0EE528 */ void ftKb_Init_800EE528(void);
/* 0EE5C0 */ void ftKb_Init_OnDeath(Fighter_GObj* gobj);
/* 0EE680 */ void ftKb_Init_OnLoad(Fighter_GObj* gobj);
/* 0EE74C */ void ftKb_Init_800EE74C(Fighter_GObj* gobj);
/* 0EE7B8 */ void ftKb_Init_800EE7B8(Fighter_GObj* gobj);
/* 0EE818 */ void ftKb_Init_UnkMotionStates4(Fighter_GObj* gobj);
/* 0EE914 */ void ftKb_Init_OnItemPickup(Fighter_GObj* gobj, bool flag);
/* 0EE9DC */ void ftKb_Init_OnItemInvisible(Fighter_GObj* gobj);
/* 0EEA24 */ void ftKb_Init_OnItemVisible(Fighter_GObj* gobj);
/* 0EEA6C */ void ftKb_Init_OnItemDrop(Fighter_GObj* gobj, bool);
/* 0EEAC0 */ void ftKb_Init_LoadSpecialAttrs(Fighter_GObj* gobj);
/* 0EEB00 */ void ftKb_Init_800EEB00(Fighter_GObj* gobj,
                                     ArticleDynamicBones**);
/* 0EEB1C */ void ftKb_Init_800EEB1C(Fighter_GObj* gobj, s32* arg1);
/* 0EEB38 */ void ftKb_Init_OnKnockbackEnter(Fighter_GObj* gobj);
/* 0EEB7C */ void ftKb_Init_OnKnockbackExit(Fighter_GObj* gobj);
/* 0EEBC0 */ void ftKb_Init_UnkDemoCallbacks0(int kind, int* out1, int* out2);
/* 0EEBF8 */ char* ftKb_Init_GetMotionFileString(enum_t);
/* 0EEC34 */ void ftKb_SpecialN_800EEC34(int, int, int);
/* 0EED50 */ void ftKb_SpecialN_800EED50(s32, s32);
/* 0EEE9C */ void ftKb_Init_UnkMotionStates5(void);
/* 0EEEC4 */ void ftKb_SpecialN_800EEEC4(Fighter_GObj* gobj,
                                         FighterKind victim_kind);
/* 0EEF04 */ void ftKb_UnkMtxFunc0(Fighter_GObj* gobj, int, Mtx);
/* 0EF028 */ HSD_JObj* ftKb_Init_UnkMotionStates6(Fighter_GObj* gobj);
/* 0EF040 */ void ftKb_SpecialN_800EF040(Fighter_GObj*, int, KirbyHatStruct*);
/* 0EF0E4 */ void ftKb_SpecialN_800EF0E4(Fighter_GObj*, int, u8*);
/* 0EF35C */ void ftKb_SpecialN_800EF35C(Fighter_GObj*, int, u8*);
/* 0EF438 */ void ftKb_SpecialN_800EF438(Fighter_GObj*, KirbyHatStruct*);
/* 0EF69C */ void ftKb_SpecialN_800EF69C(Fighter_GObj*, int, KirbyHatStruct*);
/* 0EF87C */ void ftKb_UnkIntBoolFunc0(Fighter*, int, bool);
/* 0EF9BC */ void ftKb_Init_UnkCallbackPairs0_0(Fighter_GObj* gobj);
/* 0EF9FC */ void ftKb_Init_UnkCallbackPairs0_1(Fighter_GObj* gobj, int,
                                                float);
/* 0EFA40 */ void ftKb_SpecialN_800EFA40(Fighter_GObj* gobj);
/* 0EFAF0 */ void ftKb_SpecialN_800EFAF0(Fighter_GObj* gobj);
/* 0EFB4C */ void ftKb_SpecialN_800EFB4C(Fighter_GObj* gobj);
/* 0EFBFC */ void ftKb_SpecialN_800EFBFC(Fighter_GObj* gobj);
/* 0EFC58 */ void ftKb_SpecialN_800EFC58(Fighter_GObj* gobj);
/* 0EFD08 */ void ftKb_SpecialN_800EFD08(Fighter_GObj* gobj);
/* 0EFD64 */ void ftKb_SpecialN_800EFD64(Fighter_GObj* gobj);
/* 0EFE1C */ void ftKb_SpecialN_800EFE1C(Fighter_GObj* gobj);
/* 0EFE80 */ void ftKb_SpecialN_800EFE80(Fighter_GObj* gobj);
/* 0EFF38 */ void ftKb_SpecialN_800EFF38(Fighter_GObj* gobj);
/* 0EFF9C */ void ftKb_SpecialN_800EFF9C(Fighter_GObj* gobj);
/* 0F0054 */ void ftKb_SpecialN_800F0054(Fighter_GObj* gobj);
/* 0F00B8 */ void ftKb_SpecialN_800F00B8(Fighter_GObj* gobj);
/* 0F0168 */ void ftKb_SpecialN_800F0168(Fighter_GObj* gobj);
/* 0F01C4 */ void ftKb_SpecialN_800F01C4(Fighter_GObj* gobj);
/* 0F0274 */ void ftKb_SpecialN_800F0274(Fighter_GObj* gobj);
/* 0F02D0 */ void ftKb_SpecialN_800F02D0(Fighter_GObj* gobj);
/* 0F0380 */ void ftKb_SpecialN_800F0380(Fighter_GObj* gobj);
/* 0F03DC */ void ftKb_SpecialN_800F03DC(Fighter_GObj* gobj);
/* 0F0494 */ void ftKb_SpecialN_800F0494(Fighter_GObj* gobj);
/* 0F04F8 */ void ftKb_SpecialN_800F04F8(Fighter_GObj* gobj);
/* 0F05A8 */ void ftKb_SpecialN_800F05A8(Fighter_GObj* gobj);
/* 0F0604 */ void ftKb_SpecialN_800F0604(Fighter_GObj* gobj);
/* 0F06B4 */ void ftKb_SpecialN_800F06B4(Fighter_GObj* gobj);
/* 0F0710 */ void ftKb_SpecialN_800F0710(Fighter_GObj* gobj);
/* 0F07C0 */ void ftKb_SpecialN_800F07C0(Fighter_GObj* gobj);
/* 0F081C */ void ftKb_SpecialN_800F081C(Fighter_GObj* gobj);
/* 0F08D4 */ void ftKb_SpecialN_800F08D4(Fighter_GObj* gobj);
/* 0F0938 */ void ftKb_SpecialN_800F0938(Fighter_GObj* gobj);
/* 0F09F0 */ void ftKb_SpecialN_800F09F0(Fighter_GObj* gobj);
/* 0F0A54 */ void ftKb_SpecialN_800F0A54(Fighter_GObj* gobj);
/* 0F0B0C */ void ftKb_SpecialN_800F0B0C(Fighter_GObj* gobj);
/* 0F0B70 */ void ftKb_SpecialN_800F0B70(Fighter_GObj* gobj);
/* 0F0C20 */ void ftKb_SpecialN_800F0C20(Fighter_GObj* gobj);
/* 0F0C7C */ void ftKb_SpecialN_800F0C7C(Fighter_GObj* gobj);
/* 0F0D34 */ void ftKb_SpecialN_800F0D34(Fighter_GObj* gobj);
/* 0F0D98 */ void ftKb_SpecialN_800F0D98(Fighter_GObj* gobj);
/* 0F0E48 */ void ftKb_SpecialN_800F0E48(Fighter_GObj* gobj);
/* 0F0EA4 */ void ftKb_SpecialN_800F0EA4(Fighter_GObj* gobj);
/* 0F0F5C */ void ftKb_SpecialN_800F0F5C(Fighter_GObj* gobj);
/* 0F0FC0 */ void ftKb_SpecialN_800F0FC0(Fighter_GObj* gobj);
/* 0F10A4 */ void ftKb_SpecialN_800F10A4(Fighter_GObj* gobj);
/* 0F10D4 */ void ftKb_SpecialN_800F10D4(Fighter_GObj* gobj);
/* 0F11AC */ void ftKb_SpecialN_800F11AC(Fighter_GObj* gobj);
/* 0F11F0 */ void ftKb_SpecialN_800F11F0(Fighter_GObj* gobj);
/* 0F12C8 */ void ftKb_SpecialN_800F12C8(Fighter_GObj* gobj);
/* 0F130C */ void ftKb_SpecialN_800F130C(Fighter_GObj* gobj);
/* 0F13F0 */ void ftKb_SpecialN_800F13F0(Fighter_GObj* gobj);
/* 0F1420 */ u8* ftKb_SpecialN_800F1420(Fighter_GObj* gobj, const u32* arg1);
/* 0F14B4 */ void ftKb_SpecialN_800F14B4(Fighter_GObj* gobj);
/* 0F15D8 */ void ftKb_SpecialN_800F15D8(Fighter_GObj* gobj);
/* 0F1630 */ void ftKb_SpecialN_Enter(Fighter_GObj* gobj);
/* 0F1680 */ void ftKb_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 0F16D0 */ void ftKb_SpecialN_800F16D0(Fighter_GObj* gobj,
                                         FighterKind victim_kind);
/* 0F190C */ void ftKb_SpecialN_800F190C(Fighter_GObj* gobj,
                                         FighterKind victim_kind);
/* 0F19AC */ void ftKb_SpecialN_800F19AC(Fighter_GObj* gobj);
/* 0F1A8C */ void ftKb_SpecialN_800F1A8C(Fighter_GObj* gobj);
/* 0F1B6C */ void ftKb_Init_UnkMotionStates3(Fighter_GObj* gobj);
/* 0F1BAC */ void ftKb_SpecialN_800F1BAC(Fighter_GObj* gobj, s32, bool);
/* 0F1CD8 */ s32 ftKb_SpecialN_800F1CD8(HSD_GObj* gobj);
/* 0F1D24 */ void ftKb_SpecialN_800F1D24(Fighter_GObj* gobj);
/* 0F1DAC */ void ftKb_SpecialN_800F1DAC(HSD_GObj* gobj);
/* 0F1F1C */ void ftKb_SpecialN_800F1F1C(Fighter_GObj* gobj, Vec3*);
/* 0F331C */ void ftKb_SpecialHi_800F331C(Fighter_GObj* gobj);
/* 0F346C */ void ftKb_SpecialHi_800F346C(Fighter_GObj* gobj);
/* 0F3570 */ void ftKb_SpecialHi_800F3570(Fighter_GObj* gobj);
/* 0F36DC */ void ftKb_SpecialHi_800F36DC(Fighter_GObj* gobj);
/* 0F37EC */ void ftKb_SpecialHi_800F37EC(Fighter_GObj* gobj);
/* 0F3B28 */ void ftKb_SpecialHi_800F3B28(Fighter_GObj* gobj);
/* 0F3D50 */ void ftKb_SpecialLw_Enter(Fighter_GObj* gobj);
/* 0F3E68 */ void ftKb_SpecialAirLw_Enter(Fighter_GObj* gobj);
/* 0F3F80 */ void ftKb_SpecialLw1_Anim(Fighter_GObj* gobj);
/* 0F402C */ void ftKb_SpecialLw_Anim(Fighter_GObj* gobj);
/* 0F4074 */ void ftKb_SpecialLwEnd_Anim(Fighter_GObj* gobj);
/* 0F412C */ void ftKb_SpecialAirLwStart_Anim(Fighter_GObj* gobj);
/* 0F41D8 */ void ftKb_SpecialAirLw_Anim(Fighter_GObj* gobj);
/* 0F4220 */ void ftKb_SpecialAirLwEnd_Anim(Fighter_GObj* gobj);
/* 0F42D8 */ void ftKb_SpecialLw1_IASA(Fighter_GObj* gobj);
/* 0F42DC */ void ftKb_SpecialLw_IASA(Fighter_GObj* gobj);
/* 0F43FC */ void ftKb_SpecialLwEnd_IASA(Fighter_GObj* gobj);
/* 0F4400 */ void ftKb_SpecialAirLwStart_IASA(Fighter_GObj* gobj);
/* 0F4404 */ void ftKb_SpecialAirLw_IASA(Fighter_GObj* gobj);
/* 0F4518 */ void ftKb_SpecialAirLwEnd_IASA(Fighter_GObj* gobj);
/* 0F451C */ void ftKb_SpecialLw1_Phys(Fighter_GObj* gobj);
/* 0F453C */ void ftKb_SpecialLw_Phys(Fighter_GObj* gobj);
/* 0F4584 */ void ftKb_SpecialLwEnd_Phys(Fighter_GObj* gobj);
/* 0F45A4 */ void ftKb_SpecialAirLwStart_Phys(Fighter_GObj* gobj);
/* 0F45C4 */ void ftKb_SpecialAirLw_Phys(Fighter_GObj* gobj);
/* 0F4608 */ void ftKb_SpecialAirLwEnd_Phys(Fighter_GObj* gobj);
/* 0F4628 */ void ftKb_SpecialLw1_Coll(Fighter_GObj* gobj);
/* 0F4800 */ void ftKb_SpecialLw_Coll(Fighter_GObj* gobj);
/* 0F49E4 */ void ftKb_SpecialLwEnd_Coll(Fighter_GObj* gobj);
/* 0F4B3C */ void ftKb_SpecialAirLwStart_Coll(Fighter_GObj* gobj);
/* 0F4E78 */ void ftKb_SpecialAirLw_Coll(Fighter_GObj* gobj);
/* 0F51C0 */ void ftKb_SpecialAirLwEnd_Coll(Fighter_GObj* gobj);
/* 0F5318 */ void ftKb_SpecialAirLw_800F5318(Fighter_GObj* gobj);
/* 0F539C */ void ftKb_SpecialAirLw_800F539C(Fighter_GObj* gobj);
/* 0F53AC */ void fn_800F53AC(HSD_GObj*);
/* 0F5524 */ void ftKb_SpecialAirLw_800F5524(Fighter_GObj* gobj);
/* 0F5564 */ void ftKb_SpecialS_Enter(Fighter_GObj* gobj);
/* 0F55D0 */ void ftKb_SpecialAirS_Enter(Fighter_GObj* gobj);
/* 0F5660 */ void ftKb_SpecialS_Anim(Fighter_GObj* gobj);
/* 0F569C */ void ftKb_SpecialAirS_Anim(Fighter_GObj* gobj);
/* 0F56D8 */ void ftKb_SpecialS_Phys(Fighter_GObj* gobj);
/* 0F56F8 */ void ftKb_SpecialAirS_Phys(Fighter_GObj* gobj);
/* 0F5718 */ void ftKb_SpecialS_Coll(Fighter_GObj* gobj);
/* 0F5778 */ void ftKb_SpecialAirS_Coll(Fighter_GObj* gobj);
/* 0F5800 */ void ftKb_SpecialN_800F5800(HSD_GObj*, Vec3*);
/* 0F5820 */ void ftKb_SpecialN_800F5820(Fighter_GObj* gobj,
                                         ftCollisionBox* victim_coll_box,
                                         float victim_scale_x);
/* 0F5874 */ void ftKb_SpecialN_800F5874(Vec2* arg0);
/* 0F5898 */ HSD_Joint* ftKb_SpecialN_800F5898(Fighter_GObj* gobj);
/* 0F58AC */ float ftKb_SpecialN_800F58AC(Fighter_GObj* gobj,
                                          Vec3* victim_self_vel,
                                          float victim_facing_dir);
/* 0F58D8 */ float ftKb_SpecialN_800F58D8(Fighter_GObj* gobj,
                                          Vec3* victim_self_vel,
                                          float victim_facing_dir);
/* 0F5954 */ void ftKb_SpecialN_800F5954(Fighter_GObj* gobj);
/* 0F597C */ bool ftKb_SpecialN_800F597C(Fighter_GObj* gobj);
/* 0F598C */ void ftKb_SpecialN_800F598C(Fighter_GObj* gobj, int arg1);
/* 0F5A04 */ void ftKb_SpecialN_800F5A04(Fighter_GObj* gobj, f32 arg1);
/* 0F5A38 */ bool ftKb_SpecialN_800F5A38(Fighter_GObj* gobj,
                                         Fighter* victim_fp);
/* 0F5A60 */ float ftKb_SpecialN_800F5A60(Fighter_GObj* gobj);
/* 0F5A70 */ float ftKb_SpecialN_800F5A70(void);
/* 0F5A88 */ float ftKb_SpecialN_800F5A88(Fighter_GObj* gobj);
/* 0F5A98 */ float ftKb_SpecialN_800F5A98(void);
/* 0F5AB0 */ float ftKb_SpecialN_800F5AB0(Fighter_GObj* gobj);
/* 0F5AC0 */ float ftKb_SpecialN_800F5AC0(void);
/* 0F5AD8 */ float ftKb_SpecialN_800F5AD8(void);
/* 0F5AF0 */ float ftKb_SpecialN_800F5AF0(Fighter_GObj* gobj);
/* 0F5B00 */ float ftKb_SpecialN_800F5B00(Fighter_GObj* gobj);
/* 0F5B10 */ float ftKb_SpecialN_800F5B10(Fighter_GObj* gobj);
/* 0F5B20 */ void ftKb_SpecialN_800F5B20(Fighter_GObj* gobj, Vec2* out);
/* 0F5B3C */ float ftKb_SpecialN_800F5B3C(Fighter_GObj* gobj);
/* 0F5B4C */ float ftKb_SpecialN_800F5B4C(Fighter_GObj* gobj);
/* 0F5B5C */ void ftKb_SpecialN_800F5B5C(Fighter_GObj* gobj, Vec3* output);
/* 0F5BA4 */ void ftKb_SpecialN_800F5BA4(Fighter* fp);
/* 0F5C34 */ void ftKb_SpecialN_800F5C34(Fighter* fp);
/* 0F5D04 */ void ftKb_SpecialN_800F5D04(Fighter_GObj* gobj, bool);
/* 0F5DE8 */ void ftKb_SpecialN_800F5DE8(Fighter_GObj* gobj);
/* 0F5EA8 */ void ftKb_SpecialN_800F5EA8(Fighter_GObj* gobj);
/* 0F5F68 */ void ftKb_SpecialN_800F5F68(Fighter_GObj* gobj);
/* 0F6070 */ void ftKb_SpecialN_800F6070(Fighter_GObj* gobj);
/* 0F6388 */ void ftKb_SpecialN_800F6388(Fighter_GObj* gobj);
/* 0F63EC */ void ftKb_SpecialN_800F63EC(Fighter_GObj* gobj);
/* 0F6450 */ void fn_800F6450(Fighter_GObj* gobj);
/* 0F6528 */ void fn_800F6528(Fighter_GObj* gobj);
/* 0F6588 */ void fn_800F6588(Fighter_GObj* gobj);
/* 0F6638 */ void fn_800F6638(Fighter_GObj* gobj);
/* 0F66E8 */ void fn_800F66E8(Fighter_GObj* gobj);
/* 0F6798 */ void fn_800F6798(Fighter_GObj* gobj);
/* 0F6848 */ void fn_800F6848(Fighter_GObj* gobj);
/* 0F68A8 */ void fn_800F68A8(Fighter_GObj* gobj);
/* 0F6908 */ void fn_800F6908(Fighter_GObj* gobj);
/* 0F697C */ void fn_800F697C(Fighter_GObj* gobj);
/* 0F69E8 */ void fn_800F69E8(Fighter_GObj* gobj);
/* 0F6A5C */ void fn_800F6A5C(Fighter_GObj* gobj);
/* 0F6B3C */ void fn_800F6B3C(Fighter_GObj* gobj);
/* 0F6BB0 */ void ftKb_SpecialS_800F6BB0(Fighter_GObj* gobj);
/* 0F6C24 */ void fn_800F6C24(Fighter_GObj* gobj);
/* 0F6C98 */ void fn_800F6C98(Fighter_GObj* gobj);
/* 0F6D0C */ void fn_800F6D0C(Fighter_GObj* gobj);
/* 0F6D80 */ void fn_800F6D80(Fighter_GObj* gobj);
/* 0F6DF4 */ void fn_800F6DF4(Fighter_GObj* gobj);
/* 0F6E68 */ void fn_800F6E68(Fighter_GObj* gobj);
/* 0F6EDC */ void fn_800F6EDC(Fighter_GObj* gobj);
/* 0F6F50 */ void fn_800F6F50(Fighter_GObj* gobj);
/* 0F6FC4 */ void fn_800F6FC4(Fighter_GObj* gobj);
/* 0F702C */ void fn_800F702C(Fighter_GObj* gobj);
/* 0F70A0 */ void ftKb_SpecialN_Anim(Fighter_GObj* gobj);
/* 0F71CC */ void ftKb_SpecialAirN_Anim(Fighter_GObj* gobj);
/* 0F72F8 */ void ftKb_SpecialNLoop_Anim(Fighter_GObj* gobj);
/* 0F72FC */ void ftKb_SpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 0F7300 */ void ftKb_SpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0F733C */ void ftKb_SpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0F7378 */ void ftKb_SpecialNCapture0_Anim(Fighter_GObj* gobj);
/* 0F7498 */ void ftKb_SpecialNCapture_Anim(Fighter_GObj* gobj);
/* 0F75B8 */ void ftKb_SpecialNCapture1_Anim(Fighter_GObj* gobj);
/* 0F75D8 */ void ftKb_SpecialAirNCapture_Anim(Fighter_GObj* gobj);
/* 0F75F8 */ void ftKb_Eat_Anim(Fighter_GObj* gobj);
/* 0F7674 */ void ftKb_SpecialAirNCaptured_Anim(Fighter_GObj* gobj);
/* 0F76F8 */ void ftKb_EatWait_Anim(Fighter_GObj* gobj);
/* 0F76FC */ void ftKb_SpecialAirNCaptureWait_Anim(Fighter_GObj* gobj);
/* 0F7700 */ void ftKb_SpecialNSpit0_Anim(Fighter_GObj* gobj);
/* 0F7808 */ void ftKb_SpecialNSpit_Anim(Fighter_GObj* gobj);
/* 0F78B8 */ void ftKb_SpecialNSpit1_Anim(Fighter_GObj* gobj);
/* 0F79C0 */ void ftKb_SpecialAirNSpit_Anim(Fighter_GObj* gobj);
/* 0F7A70 */ void ftKb_SpecialNDrink0_Anim(Fighter_GObj* gobj);
/* 0F7B20 */ void ftKb_SpecialNDrink_Anim(Fighter_GObj* gobj);
/* 0F7BE4 */ void ftKb_SpecialNDrink1_Anim(Fighter_GObj* gobj);
/* 0F7C94 */ void ftKb_SpecialAirNDrink_Anim(Fighter_GObj* gobj);
/* 0F7D58 */ void ftKb_EatTurn_Anim(Fighter_GObj* gobj);
/* 0F7DE4 */ void ftKb_SpecialAirNCaptureTurn_Anim(Fighter_GObj* gobj);
/* 0F7E78 */ void ftKb_EatWalk_Anim(Fighter_GObj* gobj);
/* 0F7E98 */ void ftKb_EatJump1_Anim(Fighter_GObj* gobj);
/* 0F7F20 */ void ftKb_EatJump2_Anim(Fighter_GObj* gobj);
/* 0F7F24 */ void ftKb_EatLanding_Anim(Fighter_GObj* gobj);
/* 0F7FA0 */ void ftKb_SpecialNLoop_IASA(Fighter_GObj* gobj);
/* 0F8000 */ void ftKb_SpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 0F8060 */ void ftKb_EatWait_IASA(Fighter_GObj* gobj);
/* 0F844C */ void ftKb_SpecialAirNCaptureWait_IASA(Fighter_GObj* gobj);
/* 0F8770 */ void ftKb_EatWalk_IASA(Fighter_GObj* gobj);
/* 0F8870 */ void ftKb_EatJump1_IASA(Fighter_GObj* gobj);
/* 0F8890 */ void ftKb_SpecialN_Phys(Fighter_GObj* gobj);
/* 0F88B0 */ void ftKb_SpecialAirN_Phys(Fighter_GObj* gobj);
/* 0F88D0 */ void ftKb_SpecialNLoop_Phys(Fighter_GObj* gobj);
/* 0F88F0 */ void ftKb_SpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 0F8910 */ void ftKb_SpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0F8930 */ void ftKb_SpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0F8950 */ void ftKb_SpecialNCapture0_Phys(Fighter_GObj* gobj);
/* 0F8970 */ void ftKb_SpecialNCapture_Phys(Fighter_GObj* gobj);
/* 0F8990 */ void ftKb_SpecialNCapture1_Phys(Fighter_GObj* gobj);
/* 0F89B0 */ void ftKb_SpecialAirNCapture_Phys(Fighter_GObj* gobj);
/* 0F89D0 */ void ftKb_Eat_Phys(Fighter_GObj* gobj);
/* 0F89F0 */ void ftKb_SpecialAirNCaptured_Phys(Fighter_GObj* gobj);
/* 0F8A10 */ void ftKb_EatWait_Phys(Fighter_GObj* gobj);
/* 0F8A30 */ void ftKb_SpecialAirNCaptureWait_Phys(Fighter_GObj* gobj);
/* 0F8A50 */ void ftKb_SpecialNSpit0_Phys(Fighter_GObj* gobj);
/* 0F8A70 */ void ftKb_SpecialNSpit_Phys(Fighter_GObj* gobj);
/* 0F8A90 */ void ftKb_SpecialNSpit1_Phys(Fighter_GObj* gobj);
/* 0F8AB0 */ void ftKb_SpecialAirNSpit_Phys(Fighter_GObj* gobj);
/* 0F8AD0 */ void ftKb_SpecialNDrink0_Phys(Fighter_GObj* gobj);
/* 0F8AF0 */ void ftKb_SpecialNDrink_Phys(Fighter_GObj* gobj);
/* 0F8B10 */ void ftKb_SpecialNDrink1_Phys(Fighter_GObj* gobj);
/* 0F8B30 */ void ftKb_SpecialAirNDrink_Phys(Fighter_GObj* gobj);
/* 0F8B50 */ void ftKb_EatTurn_Phys(Fighter_GObj* gobj);
/* 0F8B70 */ void ftKb_SpecialAirNCaptureTurn_Phys(Fighter_GObj* gobj);
/* 0F8B90 */ void ftKb_EatWalk_Phys(Fighter_GObj* gobj);
/* 0F8BB0 */ void ftKb_EatJump1_Phys(Fighter_GObj* gobj);
/* 0F8BD0 */ void ftKb_EatJump2_Phys(Fighter_GObj* gobj);
/* 0F8BF0 */ void ftKb_EatLanding_Phys(Fighter_GObj* gobj);
/* 0F8C10 */ void ftKb_SpecialN_Coll(Fighter_GObj* gobj);
/* 0F8C38 */ void ftKb_SpecialAirN_Coll(Fighter_GObj* gobj);
/* 0F8C60 */ void ftKb_SpecialNLoop_Coll(Fighter_GObj* gobj);
/* 0F8C88 */ void ftKb_SpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 0F8CB0 */ void ftKb_SpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0F8CD8 */ void ftKb_SpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 0F8D00 */ void ftKb_SpecialNCapture0_Coll(Fighter_GObj* gobj);
/* 0F8D28 */ void ftKb_SpecialNCapture_Coll(Fighter_GObj* gobj);
/* 0F8D50 */ void ftKb_SpecialNCapture1_Coll(Fighter_GObj* gobj);
/* 0F8D78 */ void ftKb_SpecialAirNCapture_Coll(Fighter_GObj* gobj);
/* 0F8DA0 */ void ftKb_Eat_Coll(Fighter_GObj* gobj);
/* 0F8DC8 */ void ftKb_SpecialAirNCaptured_Coll(Fighter_GObj* gobj);
/* 0F8DF0 */ void ftKb_EatWait_Coll(Fighter_GObj* gobj);
/* 0F8E18 */ void ftKb_SpecialAirNCaptureWait_Coll(Fighter_GObj* gobj);
/* 0F8E40 */ void ftKb_SpecialNSpit0_Coll(Fighter_GObj* gobj);
/* 0F8E68 */ void ftKb_SpecialNSpit_Coll(Fighter_GObj* gobj);
/* 0F8E90 */ void ftKb_SpecialNSpit1_Coll(Fighter_GObj* gobj);
/* 0F8EB8 */ void ftKb_SpecialAirNSpit_Coll(Fighter_GObj* gobj);
/* 0F8EE0 */ void ftKb_SpecialNDrink0_Coll(Fighter_GObj* gobj);
/* 0F8F08 */ void ftKb_SpecialNDrink_Coll(Fighter_GObj* gobj);
/* 0F8F30 */ void ftKb_SpecialNDrink1_Coll(Fighter_GObj* gobj);
/* 0F8F58 */ void ftKb_SpecialAirNDrink_Coll(Fighter_GObj* gobj);
/* 0F8F80 */ void ftKb_EatTurn_Coll(Fighter_GObj* gobj);
/* 0F8FA8 */ void ftKb_SpecialAirNCaptureTurn_Coll(Fighter_GObj* gobj);
/* 0F8FD0 */ void ftKb_EatWalk_Coll(Fighter_GObj* gobj);
/* 0F8FF8 */ void ftKb_EatJump1_Coll(Fighter_GObj* gobj);
/* 0F9020 */ void ftKb_EatJump2_Coll(Fighter_GObj* gobj);
/* 0F9048 */ void ftKb_EatLanding_Coll(Fighter_GObj* gobj);
/* 0F9070 */ void ftKb_SpecialN_800F9070(Fighter_GObj* gobj);
/* 0F9090 */ void ftKb_SpecialN_800F9090(Fighter_GObj* gobj);
/* 0F9110 */ void ftKb_SpecialN_800F9110(Fighter_GObj* gobj);
/* 0F9198 */ void ftKb_MrSpecialN_Anim(Fighter_GObj* gobj);
/* 0F91D4 */ void ftKb_MrSpecialN_IASA(Fighter_GObj* gobj);
/* 0F9204 */ void ftKb_MrSpecialN_Phys(Fighter_GObj* gobj);
/* 0F9224 */ void ftKb_MrSpecialN_Coll(Fighter_GObj* gobj);
/* 0F93CC */ void ftKb_SpecialNMr_800F93CC(Fighter_GObj* gobj);
/* 0F9454 */ void ftKb_MrSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0F9490 */ void ftKb_MrSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0F94C0 */ void ftKb_MrSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0F94E0 */ void ftKb_MrSpecialAirN_Coll(Fighter_GObj* gobj);
/* 0F951C */ void ftKb_SpecialNLg_800F951C(Fighter_GObj* gobj);
/* 0F9598 */ void ftKb_SpecialNLg_800F9598(Fighter_GObj* gobj);
/* 0F9614 */ void ftKb_SpecialNLg_800F9614(Fighter_GObj* gobj);
/* 0F9684 */ void ftKb_SpecialNLg_800F9684(Fighter_GObj* gobj);
/* 0F96F4 */ void ftKb_LgSpecialN_Anim(Fighter_GObj* gobj);
/* 0F9730 */ void ftKb_LgSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0F976C */ void ftKb_LgSpecialN_IASA(Fighter_GObj* gobj);
/* 0F979C */ void ftKb_LgSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0F97CC */ void ftKb_LgSpecialN_Phys(Fighter_GObj* gobj);
/* 0F97EC */ void ftKb_LgSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0F980C */ void ftKb_LgSpecialN_Coll(Fighter_GObj* gobj);
/* 0F9880 */ void ftKb_LgSpecialAirN_Coll(Fighter_GObj* gobj);
/* 0F99BC */ void ftKb_SpecialNCa_800F99BC(Fighter_GObj* gobj);
/* 0F9A54 */ void ftKb_SpecialNCa_800F9A54(Fighter_GObj* gobj);
/* 0F9AEC */ void ftKb_CaSpecialN_Anim(Fighter_GObj* gobj);
/* 0F9B28 */ void ftKb_CaSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0F9B64 */ void ftKb_CaSpecialN_IASA(Fighter_GObj* gobj);
/* 0F9B68 */ void ftKb_CaSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0F9C58 */ void ftKb_CaSpecialN_Phys(Fighter_GObj* gobj);
/* 0F9D40 */ void ftKb_CaSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0F9E8C */ void ftKb_CaSpecialN_Coll(Fighter_GObj* gobj);
/* 0F9F34 */ void ftKb_CaSpecialAirN_Coll(Fighter_GObj* gobj);
/* 0FA588 */ void ftKb_SpecialNKp_800FA588(Fighter_GObj* gobj);
/* 0FA7D4 */ void ftKb_SpecialNKp_800FA7D4(Fighter_GObj* gobj);
/* 0FA83C */ int ftKb_SpecialNKp_800FA83C(Fighter_GObj* gobj);
/* 0FA878 */ int ftKb_SpecialNKp_800FA878(Fighter_GObj* gobj);
/* 0FA8B4 */ void ftKb_SpecialNKp_800FA8B4(Fighter_GObj* gobj);
/* 0FA958 */ void ftKb_SpecialNKp_800FA958(Fighter_GObj* gobj);
/* 0FA9FC */ void ftKb_KpSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FAA74 */ void ftKb_KpSpecialN_Anim(Fighter_GObj* gobj);
/* 0FAB18 */ void ftKb_KpSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0FAB54 */ void ftKb_KpSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0FABCC */ void ftKb_KpSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0FAC70 */ void ftKb_KpSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0FACAC */ void ftKb_KpSpecialNStart_IASA(Fighter_GObj* gobj);
/* 0FACB0 */ void ftKb_KpSpecialN_IASA(Fighter_GObj* gobj);
/* 0FAE0C */ void ftKb_KpSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 0FAE10 */ void ftKb_KpSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0FAE14 */ void ftKb_KpSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0FAF70 */ void ftKb_KpSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 0FAF74 */ void ftKb_KpSpecialNStart_Phys(Fighter_GObj* gobj);
/* 0FAF94 */ void ftKb_KpSpecialN_Phys(Fighter_GObj* gobj);
/* 0FAFB4 */ void ftKb_KpSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0FAFD4 */ void ftKb_KpSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0FAFF4 */ void ftKb_KpSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0FB014 */ void ftKb_KpSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0FB034 */ void ftKb_KpSpecialNStart_Coll(Fighter_GObj* gobj);
/* 0FB0C4 */ void ftKb_KpSpecialN_Coll(Fighter_GObj* gobj);
/* 0FB154 */ void ftKb_KpSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0FB1E4 */ void ftKb_KpSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0FB274 */ void ftKb_KpSpecialAirN_Coll(Fighter_GObj* gobj);
/* 0FB304 */ void ftKb_KpSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 0FB394 */ ftLk_SpecialNIndex ftKb_SpecialNLk800FB394(Fighter_GObj* gobj);
/* 0FB418 */ void ftKb_SpecialNLk800FB418(Fighter_GObj* gobj);
/* 0FB444 */ void ftKb_SpecialNLk800FB444(Fighter_GObj* gobj);
/* 0FB470 */ bool ftKb_SpecialNLk800FB470(Fighter_GObj* gobj);
/* 0FB500 */ bool ftKb_SpecialNLk800FB500(Fighter_GObj* gobj);
/* 0FB5F4 */ bool ftKb_SpecialNLk800FB5F4(Fighter_GObj* gobj);
/* 0FB6DC */ void ftKb_SpecialNLk800FB6DC(Fighter_GObj* gobj);
/* 0FB800 */ void ftKb_SpecialNLk800FB800(Fighter_GObj* gobj);
/* 0FB840 */ void ftKb_SpecialNLk800FB840(Fighter_GObj* gobj);
/* 0FB880 */ void ftKb_SpecialNLk800FB880(Fighter_GObj* gobj);
/* 0FBA00 */ void ftKb_SpecialNLk800FBA00(Fighter_GObj* gobj);
/* 0FBBC4 */ void ftKb_LkSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FBDFC */ void ftKb_LkSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 0FBED0 */ void ftKb_LkSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0FBF34 */ void ftKb_LkSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0FC1A0 */ void ftKb_LkSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 0FC274 */ void ftKb_LkSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0FC374 */ void ftKb_LkSpecialNStart_IASA(Fighter_GObj* gobj);
/* 0FC46C */ void ftKb_LkSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 0FC53C */ void ftKb_LkSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 0FC540 */ void ftKb_LkSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0FC638 */ void ftKb_LkSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 0FC708 */ void ftKb_LkSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 0FC70C */ void ftKb_LkSpecialNStart_Phys(Fighter_GObj* gobj);
/* 0FC72C */ void ftKb_LkSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 0FC74C */ void ftKb_LkSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0FC76C */ void ftKb_LkSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0FC78C */ void ftKb_LkSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 0FC7AC */ void ftKb_LkSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0FC7CC */ void ftKb_LkSpecialNStart_Coll(Fighter_GObj* gobj);
/* 0FC880 */ void ftKb_LkSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 0FC934 */ void ftKb_LkSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0FC9F0 */ void ftKb_LkSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0FCAA4 */ void ftKb_LkSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 0FCB58 */ void ftKb_LkSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 0FCC14 */ int ftKb_SpecialNSs_800FCC14(Fighter_GObj* gobj, int* out_charge,
                                          int* out_time);
/* 0FCC6C */ bool ftKb_SpecialNSs_800FCC6C(Fighter_GObj* gobj);
/* 0FCCBC */ bool ftKb_SpecialNSs_800FCCBC(Fighter_GObj* gobj);
/* 0FCD04 */ void ftKb_SpecialNSs_800FCD04(Fighter_GObj* gobj);
/* 0FCD60 */ void ftKb_SpecialNSs_800FCD60(Fighter_GObj* gobj);
/* 0FCDE0 */ void ftKb_SpecialNSs_800FCDE0(Fighter_GObj* gobj);
/* 0FCF74 */ void ftKb_SpecialNSs_800FCF74(Fighter_GObj* gobj);
/* 0FD020 */ void ftKb_SpecialNSs_800FD020(Fighter_GObj* gobj);
/* 0FD0BC */ void ftKb_SsSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FD250 */ void ftKb_SsSpecialNHold_Anim(Fighter_GObj* gobj);
/* 0FD418 */ void ftKb_SsSpecialNCancel_Anim(Fighter_GObj* gobj);
/* 0FD49C */ void ftKb_SsSpecialN_Anim(Fighter_GObj* gobj);
/* 0FD4E0 */ void ftKb_SsSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0FD608 */ void ftKb_SsSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0FD688 */ void ftKb_SsSpecialNStart_IASA(Fighter_GObj* gobj);
/* 0FD68C */ void ftKb_SsSpecialNHold_IASA(Fighter_GObj* gobj);
/* 0FD7E0 */ void ftKb_SsSpecialNCancel_IASA(Fighter_GObj* gobj);
/* 0FD7E4 */ void ftKb_SsSpecialN_IASA(Fighter_GObj* gobj);
/* 0FD7E8 */ void ftKb_SsSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0FD7EC */ void ftKb_SsSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0FD7F0 */ void ftKb_SsSpecialNStart_Phys(Fighter_GObj* gobj);
/* 0FD810 */ void ftKb_SsSpecialNHold_Phys(Fighter_GObj* gobj);
/* 0FD830 */ void ftKb_SsSpecialNCancel_Phys(Fighter_GObj* gobj);
/* 0FD850 */ void ftKb_SsSpecialN_Phys(Fighter_GObj* gobj);
/* 0FD870 */ void ftKb_SsSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0FD890 */ void ftKb_SsSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0FD8B0 */ void ftKb_SsSpecialNStart_Coll(Fighter_GObj* gobj);
/* 0FD938 */ void ftKb_SsSpecialNHold_Coll(Fighter_GObj* gobj);
/* 0FD9E0 */ void ftKb_SsSpecialNCancel_Coll(Fighter_GObj* gobj);
/* 0FDA68 */ void ftKb_SsSpecialN_Coll(Fighter_GObj* gobj);
/* 0FDAF0 */ void ftKb_SsSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0FDB78 */ void ftKb_SsSpecialAirN_Coll(Fighter_GObj* gobj);
/* 0FDC00 */ void ftKb_SpecialNFx_800FDC00(Fighter_GObj* gobj, Vec3* vec);
/* 0FDC70 */ void ftKb_SpecialNFx_800FDC70(Fighter_GObj* gobj, Vec3* vec);
/* 0FDCE0 */ void ftKb_SpecialNFx_OnChangeAction(Fighter_GObj* gobj);
/* 0FDD14 */ bool ftKb_SpecialNFx_800FDD14(Fighter_GObj* gobj);
/* 0FDD4C */ ftFx_SpecialNIndex ftKb_SpecialNFx_800FDD4C(Fighter_GObj* gobj);
/* 0FDDF4 */ bool ftKb_SpecialNFx_800FDDF4(Fighter_GObj* gobj);
/* 0FDEB4 */ void ftKb_SpecialNFx_800FDEB4(Fighter_GObj* gobj);
/* 0FDEE0 */ void ftKb_SpecialNFx_800FDEE0(Fighter_GObj* gobj);
/* 0FDF30 */ void ftKb_SpecialNFx_800FDF30(Fighter_GObj* gobj);
/* 0FE0E0 */ void ftKb_SpecialNFx_CreateBlasterShot(Fighter_GObj* gobj);
/* 0FE100 */ void ftKb_SpecialNFx_800FE100(Fighter_GObj* gobj);
/* 0FE240 */ void ftKb_SpecialNFx_800FE240(Fighter_GObj* gobj);
/* 0FE360 */ void ftKb_FxSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FE450 */ void ftKb_FxSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 0FE5C8 */ void ftKb_FxSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0FE688 */ void ftKb_FxSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0FE778 */ void ftKb_FxSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 0FE928 */ void ftKb_FxSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0FEA50 */ void ftKb_FxSpecialNStart_IASA(Fighter_GObj* gobj);
/* 0FEA78 */ void ftKb_FxSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 0FEAA0 */ void ftKb_FxSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 0FEAA4 */ void ftKb_FxSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0FEACC */ void ftKb_FxSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 0FEAF4 */ void ftKb_FxSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 0FEAF8 */ void ftKb_FxSpecialNStart_Phys(Fighter_GObj* gobj);
/* 0FEB18 */ void ftKb_FxSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 0FEB38 */ void ftKb_FxSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0FEB58 */ void ftKb_FxSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0FEB78 */ void ftKb_FxSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 0FEB98 */ void ftKb_FxSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0FEBB8 */ void ftKb_FxSpecialNStart_Coll(Fighter_GObj* gobj);
/* 0FEBD8 */ void ftKb_FxSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 0FEBF8 */ void ftKb_FxSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0FEC18 */ void ftKb_FxSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0FEC38 */ void ftKb_FxSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 0FEC58 */ void ftKb_FxSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 0FEC78 */ bool ftKb_SpecialNNs_800FEC78(Fighter_GObj* gobj);
/* 0FECBC */ void ftKb_SpecialNNs_800FECBC(Fighter_GObj* gobj);
/* 0FECE8 */ void ftKb_SpecialNNs_800FECE8(Fighter_GObj* gobj);
/* 0FED38 */ void ftKb_SpecialNNs_800FED38(Fighter_GObj* gobj);
/* 0FEDD0 */ void ftKb_SpecialNNs_800FEDD0(Fighter_GObj* gobj);
/* 0FEE70 */ void ftKb_NsSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FEF58 */ void ftKb_NsSpecialNHold_Anim(Fighter_GObj* gobj);
/* 0FF08C */ void ftKb_NsSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0FF10C */ void ftKb_NsSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0FF1F4 */ void ftKb_NsSpecialAirNHold_Anim(Fighter_GObj* gobj);
/* 0FF328 */ void ftKb_NsSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0FF3DC */ void ftKb_NsSpecialNStart_IASA(Fighter_GObj* gobj);
/* 0FF3E0 */ void ftKb_NsSpecialNHold_IASA(Fighter_GObj* gobj);
/* 0FF450 */ void ftKb_NsSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 0FF454 */ void ftKb_NsSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0FF458 */ void ftKb_NsSpecialAirNHold_IASA(Fighter_GObj* gobj);
/* 0FF4C8 */ void ftKb_NsSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 0FF4CC */ void ftKb_NsSpecialNStart_Phys(Fighter_GObj* gobj);
/* 0FF504 */ void ftKb_NsSpecialNHold_Phys(Fighter_GObj* gobj);
/* 0FF524 */ void ftKb_NsSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0FF544 */ void ftKb_NsSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0FF5A4 */ void ftKb_NsSpecialAirNHold_Phys(Fighter_GObj* gobj);
/* 0FF604 */ void ftKb_NsSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0FF664 */ void ftKb_NsSpecialNStart_Coll(Fighter_GObj* gobj);
/* 0FF6D0 */ void ftKb_NsSpecialNHold_Coll(Fighter_GObj* gobj);
/* 0FF73C */ void ftKb_NsSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0FF7A8 */ void ftKb_NsSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0FF814 */ void ftKb_NsSpecialAirNHold_Coll(Fighter_GObj* gobj);
/* 0FF880 */ void ftKb_NsSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 3C8368 */ extern MotionState ftKb_Init_MotionStateTable[ftKb_MS_SelfCount];
/* 3CA04C */ extern MotionState ftKb_Init_UnkMotionStates0[];
/* 3CA308 */ extern char ftKb_Init_DatFilename[];
/* 3CA314 */ extern char ftKb_Init_DataName[];
/* 3CA4E0 */ extern char ftKb_Init_AnimDatFilename[];
/* 3CA55C */ extern Fighter_DemoStrings ftKb_Init_DemoMotionFilenames;
/* 3CA5A4 */ extern char* ftKb_Init_803CA5A4[];
/* 3CA5B4 */ extern Fighter_CostumeStrings ftKb_Init_CostumeStrings[];
/* 3CA9D0 */ extern ftKirby_CopyName ftKb_Init_803CA9D0[];
/* 3CB3E8 */ extern Fighter_CostumeStrings* ftKb_Init_803CB3E8[];
/* 3CB46C */ extern u8 ftKb_Init_803CB46C[];
/* 3CB510 */ extern char ftKb_Init_803CB510[];
/* 3CB52C */ extern char ftKb_Init_803CB52C[];
/* 3CB540 */ extern enum_t ftKb_Init_803CB540[];
/* 4D3DB0 */ extern char ftKb_Init_804D3DB0[2];
/* 459B88 */ extern struct ft_80459B88_t ft_80459B88;
/* 459C10 */ extern UnkCostumeStruct ftKb_CostumeList[6];
#define GALE01_0F1FDC
/* 0F1F68 */ void ftKb_SpecialN_800F1F68(Fighter_GObj* gobj);
/* 0F203C */ void ftKb_AttackDash_Anim(Fighter_GObj* gobj);
/* 0F205C */ void ftKb_AttackDash_IASA(Fighter_GObj* gobj);
/* 0F207C */ void ftKb_AttackDash_Phys(Fighter_GObj* gobj);
/* 0F209C */ void ftKb_AttackDash_Coll(Fighter_GObj* gobj);
/* 0F2124 */ void ftKb_AttackDashAir_Anim(Fighter_GObj* gobj);
/* 0F2160 */ void ftKb_AttackDashAir_IASA(Fighter_GObj* gobj);
/* 0F2164 */ void ftKb_AttackDashAir_Phys(Fighter_GObj* gobj);
/* 0F2198 */ void ftKb_AttackDashAir_Coll(Fighter_GObj* gobj);
/* 0F21C0 */ float ftKb_AttackDashAir_800F21C0(Fighter_GObj* gobj);
#define GALE01_10A930
/* 10A930 */ void fn_8010A930(Fighter_GObj*, Fighter_GObj*);
/* 10AA1C */ void ftCo_CaptureKirbyYoshi_Anim(Fighter_GObj* gobj);
/* 10AA20 */ void ftCo_CaptureKirbyYoshi_IASA(Fighter_GObj* gobj);
/* 10AA24 */ void ftCo_CaptureKirbyYoshi_Phys(Fighter_GObj* gobj);
/* 10AA28 */ void ftCo_CaptureKirbyYoshi_Coll(Fighter_GObj* gobj);
/* 10AA2C */ void ftKb_SpecialNYs_8010AA2C(Fighter_GObj* gobj);
#define GALE01_0FF8EC
/* 0FF8EC */ void ftKb_SpecialNDk_800FF8EC(Fighter_GObj* gobj);
/* 0FFA10 */ void ftKb_SpecialNDk_800FFA10(Fighter_GObj* gobj);
/* 0FFB24 */ void ftKb_DkSpecialNStart_Anim(Fighter_GObj* gobj);
/* 0FFBAC */ void ftKb_DkSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 0FFC48 */ void ftKb_DkSpecialNCancel_Anim(HSD_GObj* gobj);
/* 0FFC94 */ void ftKb_DkSpecialN_Anim(Fighter_GObj* gobj);
/* 0FFE6C */ void ftKb_DkSpecialNFull_Anim(Fighter_GObj* gobj);
/* 0FFFB8 */ void ftKb_DkSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 100040 */ void ftKb_DkSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 1000DC */ void ftKb_DkSpecialAirNCancel_Anim(HSD_GObj* gobj);
/* 100128 */ void ftKb_DkSpecialAirN_Anim(Fighter_GObj* gobj);
/* 1002C8 */ void ftKb_DkSpecialAirNFull_Anim(Fighter_GObj* gobj);
/* 1003DC */ void ftKb_DkSpecialNStart_IASA(Fighter_GObj* gobj);
/* 1003E0 */ void ftKb_DkSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 100518 */ void ftKb_DkSpecialNCancel_IASA(Fighter_GObj* gobj);
/* 10051C */ void ftKb_DkSpecialN_IASA(Fighter_GObj* gobj);
/* 100520 */ void ftKb_DkSpecialNFull_IASA(Fighter_GObj* gobj);
/* 100524 */ void ftKb_DkSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 100528 */ void ftKb_DkSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 100654 */ void ftKb_DkSpecialAirNCancel_IASA(Fighter_GObj* gobj);
/* 100658 */ void ftKb_DkSpecialAirN_IASA(Fighter_GObj* gobj);
/* 10065C */ void ftKb_DkSpecialAirNFull_IASA(Fighter_GObj* gobj);
/* 100660 */ void ftKb_DkSpecialNStart_Phys(Fighter_GObj* gobj);
/* 100680 */ void ftKb_DkSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 1006A0 */ void ftKb_DkSpecialNCancel_Phys(Fighter_GObj* gobj);
/* 1006C0 */ void ftKb_DkSpecialN_Phys(Fighter_GObj* gobj);
/* 1006E0 */ void ftKb_DkSpecialNFull_Phys(Fighter_GObj* gobj);
/* 100700 */ void ftKb_DkSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 100720 */ void ftKb_DkSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 100740 */ void ftKb_DkSpecialAirNCancel_Phys(Fighter_GObj* gobj);
/* 100760 */ void ftKb_DkSpecialAirN_Phys(Fighter_GObj* gobj);
/* 100780 */ void ftKb_DkSpecialAirNFull_Phys(Fighter_GObj* gobj);
/* 1007A0 */ void ftKb_DkSpecialNStart_Coll(Fighter_GObj* gobj);
/* 100840 */ void ftKb_DkSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 1008E0 */ void ftKb_DkSpecialNCancel_Coll(Fighter_GObj* gobj);
/* 100980 */ void ftKb_DkSpecialN_Coll(Fighter_GObj* gobj);
/* 100A20 */ void ftKb_DkSpecialNFull_Coll(Fighter_GObj* gobj);
/* 100AC0 */ void ftKb_DkSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 100B60 */ void ftKb_DkSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 100C00 */ void ftKb_DkSpecialAirNCancel_Coll(Fighter_GObj* gobj);
/* 100CA0 */ void ftKb_DkSpecialAirN_Coll(Fighter_GObj* gobj);
/* 100D40 */ void ftKb_DkSpecialAirNFull_Coll(Fighter_GObj* gobj);
/* 100DE0 */ void ftKb_SpecialNPr_80100DE0(Fighter_GObj* gobj);
/* 105E8C */ void ftKb_SpecialNSk_80105E8C(Fighter_GObj* gobj);
/* 105F3C */ void ftKb_SpecialNSk_80105F3C(Fighter_GObj* gobj);
/* 105FF0 */ bool ftKb_SpecialNSk_80105FF0(Fighter_GObj* gobj);
/* 106020 */ s32 ftKb_SpecialNSk_80106020(Fighter_GObj* gobj);
/* 10603C */ void ftKb_SpecialNSk_8010603C(Fighter_GObj* gobj);
/* 10612C */ void ftKb_SpecialNSk_8010612C(Fighter_GObj* gobj);
/* 1061E4 */ void ftKb_SpecialNSk_801061E4(Fighter_GObj* gobj);
/* 10629C */ void ftKb_SkSpecialNStart_Anim(Fighter_GObj* gobj);
/* 106334 */ void ftKb_SkSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 1063E0 */ void ftKb_SkSpecialNCancel_Anim(Fighter_GObj* gobj);
/* 106428 */ void ftKb_SkSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 1064AC */ void ftKb_SkSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 106544 */ void ftKb_SkSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 1065F0 */ void ftKb_SkSpecialAirNCancel_Anim(Fighter_GObj* gobj);
/* 106670 */ void ftKb_SkSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 10672C */ void ftKb_SkSpecialNStart_IASA(Fighter_GObj* gobj);
/* 106730 */ void ftKb_SkSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 10680C */ void ftKb_SkSpecialNCancel_IASA(Fighter_GObj* gobj);
/* 106810 */ void ftKb_SkSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 106814 */ void ftKb_SkSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 106818 */ void ftKb_SkSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 1068F4 */ void ftKb_SkSpecialAirNCancel_IASA(Fighter_GObj* gobj);
/* 1068F8 */ void ftKb_SkSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 1068FC */ void ftKb_SkSpecialNStart_Phys(Fighter_GObj* gobj);
/* 10691C */ void ftKb_SkSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 10693C */ void ftKb_SkSpecialNCancel_Phys(Fighter_GObj* gobj);
/* 10695C */ void ftKb_SkSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 10697C */ void ftKb_SkSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 10699C */ void ftKb_SkSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 1069BC */ void ftKb_SkSpecialAirNCancel_Phys(Fighter_GObj* gobj);
/* 1069DC */ void ftKb_SkSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 1069FC */ void ftKb_SkSpecialNStart_Coll(Fighter_GObj* gobj);
/* 106A84 */ void ftKb_SkSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 106B0C */ void ftKb_SkSpecialNCancel_Coll(Fighter_GObj* gobj);
/* 106B84 */ void ftKb_SkSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 106C10 */ void ftKb_SkSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 106C98 */ void ftKb_SkSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 106D20 */ void ftKb_SkSpecialAirNCancel_Coll(Fighter_GObj* gobj);
/* 106D5C */ void ftKb_SkSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 109238 */ Fighter_Part ftKb_SpecialNYs_80109238(Fighter_GObj* gobj);
/* 109260 */ void ftKb_SpecialNYs_80109260(Fighter_GObj* gobj, Vec3* vec);
/* 109290 */ float ftKb_SpecialNYs_80109290(Fighter_GObj* gobj);
/* 10929C */ float ftKb_SpecialNYs_8010929C(Fighter_GObj* gobj);
/* 1092AC */ float ftKb_SpecialNYs_801092AC(Fighter_GObj* gobj);
/* 1092BC */ float ftKb_SpecialNYs_801092BC(Fighter_GObj* gobj);
/* 1092CC */ float ftKb_SpecialNYs_801092CC(Fighter_GObj* gobj);
/* 1092DC */ f32 ftKb_SpecialNYs_801092DC(void);
/* 1092F4 */ float ftKb_SpecialNYs_801092F4(void);
/* 10930C */ float ftKb_SpecialNYs_8010930C(void);
/* 109324 */ float ftKb_SpecialNYs_80109324(void);
/* 10933C */ int ftKb_SpecialNYs_8010933C(void);
/* 109354 */ void ftKb_SpecialNYs_80109354(Vec3*);
/* 109380 */ float ftKb_SpecialNYs_80109380(void);
/* 1093A0 */ ftDynamics* ftKb_SpecialNYs_801093A0(Fighter_GObj* gobj);
/* 1093B4 */ void ftKb_SpecialNYs_801093B4(Fighter_GObj* gobj);
/* 10941C */ void ftKb_SpecialNYs_8010941C(Fighter_GObj* gobj);
/* 1094FC */ void ftKb_SpecialNYs_801094FC(Fighter_GObj* gobj);
/* 10984C */ void fn_8010984C(Fighter_GObj* gobj);
/* 1098EC */ void fn_801098EC(Fighter_GObj* gobj);
/* 10998C */ void fn_8010998C(Fighter_GObj* gobj);
/* 109A08 */ void fn_80109A08(Fighter_GObj* gobj);
/* 109A84 */ void fn_80109A84(Fighter_GObj* gobj);
/* 109B00 */ void fn_80109B00(Fighter_GObj* gobj);
/* 109B7C */ void fn_80109B7C(Fighter_GObj* gobj);
/* 109BF8 */ void fn_80109BF8(Fighter_GObj* gobj);
/* 109C74 */ void fn_80109C74(Fighter_GObj* gobj);
/* 109CF0 */ void fn_80109CF0(Fighter_GObj* gobj);
/* 109D6C */ void ftKb_YsSpecialN1_Anim(Fighter_GObj* gobj);
/* 109DB8 */ void ftKb_YsSpecialAirNCapture2_Anim(Fighter_GObj* gobj);
/* 109E04 */ void ftKb_YsSpecialAirNCapture1_Anim(Fighter_GObj* gobj);
/* 109EE8 */ void ftKb_YsSpecialNCapture1_Anim(Fighter_GObj* gobj);
/* 109FD4 */ void ftKb_YsSpecialAirCapture2_Anim(Fighter_GObj* gobj);
/* 10A0B8 */ void ftKb_YsSpecialAirCapture1_Anim(Fighter_GObj* gobj);
/* 10A1A4 */ void ftKb_YsSpecialNCapture2_0_Anim(Fighter_GObj* gobj);
/* 10A304 */ void ftKb_YsSpecialNCapture2_1_Anim(Fighter_GObj* gobj);
/* 10A3C8 */ void ftKb_YsSpecialAirN2_1_Anim(Fighter_GObj* gobj);
/* 10A528 */ void ftKb_YsSpecialAirN2_0_Anim(Fighter_GObj* gobj);
/* 10A5EC */ void ftKb_YsSpecialN1_Phys(Fighter_GObj* gobj);
/* 10A60C */ void ftKb_YsSpecialAirNCapture2_Phys(Fighter_GObj* gobj);
/* 10A62C */ void ftKb_YsSpecialAirNCapture1_Phys(Fighter_GObj* gobj);
/* 10A64C */ void ftKb_YsSpecialNCapture1_Phys(Fighter_GObj* gobj);
/* 10A66C */ void ftKb_YsSpecialAirCapture1_Phys(Fighter_GObj* gobj);
/* 10A68C */ void ftKb_YsSpecialAirCapture2_Phys(Fighter_GObj* gobj);
/* 10A6AC */ void ftKb_YsSpecialNCapture2_0_Phys(Fighter_GObj* gobj);
/* 10A6CC */ void ftKb_YsSpecialNCapture2_1_Phys(Fighter_GObj* gobj);
/* 10A6EC */ void ftKb_YsSpecialAirN2_1_Phys(Fighter_GObj* gobj);
/* 10A70C */ void ftKb_YsSpecialAirN2_0_Phys(Fighter_GObj* gobj);
/* 10A72C */ void ftKb_YsSpecialN1_Coll(Fighter_GObj* gobj);
/* 10A754 */ void ftKb_YsSpecialAirNCapture2_Coll(Fighter_GObj* gobj);
/* 10A77C */ void ftKb_YsSpecialAirNCapture1_Coll(Fighter_GObj* gobj);
/* 10A7A4 */ void ftKb_YsSpecialNCapture1_Coll(Fighter_GObj* gobj);
/* 10A7CC */ void ftKb_YsSpecialAirCapture2_Coll(Fighter_GObj* gobj);
/* 10A7F4 */ void ftKb_YsSpecialAirCapture1_Coll(Fighter_GObj* gobj);
/* 10A81C */ void ftKb_YsSpecialNCapture2_0_Coll(Fighter_GObj* gobj);
/* 10A844 */ void ftKb_YsSpecialNCapture2_1_Coll(Fighter_GObj* gobj);
/* 10A86C */ void ftKb_YsSpecialAirN2_1_Coll(Fighter_GObj* gobj);
/* 10A894 */ void ftKb_YsSpecialAirN2_0_Coll(Fighter_GObj* gobj);
/* 10A8BC */ void ftKb_SpecialNYs_8010A8BC(Fighter_GObj* gobj);
#define GALE01_10D074
/* 10D074 */ void ftKb_SpecialNGw_8010D074(Fighter_GObj* gobj);
/* 10D0A8 */ void ftKb_SpecialNGw_8010D0A8(Fighter_GObj* gobj);
/* 10D100 */ void fn_8010D100(Fighter_GObj* gobj);
/* 10D130 */ void ftKb_SpecialNGw_8010D130(Fighter_GObj* gobj);
/* 10D160 */ bool ftKb_SpecialNGw_8010D160(Fighter_GObj* gobj);
/* 10D188 */ void ftKb_SpecialNGw_8010D188(Fighter_GObj* gobj);
/* 10D204 */ void ftKb_SpecialNGw_8010D204(Fighter_GObj* gobj);
/* 10D280 */ void ftKb_GwSpecialN_Anim(Fighter_GObj* gobj);
/* 10D320 */ void ftKb_GwSpecialAirN_Anim(Fighter_GObj* gobj);
/* 10D3C0 */ void ftKb_GwSpecialN_IASA(Fighter_GObj* gobj);
/* 10D444 */ void ftKb_GwSpecialAirN_IASA(Fighter_GObj* gobj);
/* 10D4C8 */ void ftKb_GwSpecialN_Phys(Fighter_GObj* gobj);
/* 10D4E8 */ void ftKb_GwSpecialAirN_Phys(Fighter_GObj* gobj);
/* 10D508 */ void ftKb_GwSpecialN_Coll(Fighter_GObj* gobj);
/* 10D544 */ void ftKb_GwSpecialAirN_Coll(Fighter_GObj* gobj);
/* 10D580 */ void ftKb_SpecialNGw_8010D580(Fighter_GObj* gobj);
/* 10D5F0 */ void ftKb_SpecialNGw_8010D5F0(Fighter_GObj* gobj);
/* 10D660 */ void ftKb_SpecialNGw_8010D660(Fighter_GObj* gobj, float);
/* 10D6D0 */ void ftKb_SpecialNGw_8010D6D0(Fighter_GObj* gobj, float);
#define GALE01_0F21E8
/* 0F22D4 */ void ftKb_AttackDashAir_800F22D4(Fighter_GObj* gobj);
/* 0F2300 */ void ftKb_SpecialHi_Enter(Fighter_GObj* gobj);
/* 0F23B8 */ void ftKb_SpecialAirHi_Enter(Fighter_GObj* gobj);
/* 0F2470 */ void ftKb_SpecialHi1_Anim(Fighter_GObj* gobj);
/* 0F24F8 */ void ftKb_SpecialHi2_Anim(Fighter_GObj* gobj);
/* 0F2578 */ void ftKb_SpecialHi3_Anim(Fighter_GObj* gobj);
/* 0F257C */ void ftKb_SpecialHi4_Anim(Fighter_GObj* gobj);
/* 0F25EC */ void ftKb_SpecialAirHi1_Anim(Fighter_GObj* gobj);
/* 0F266C */ void ftKb_SpecialAirHi2_Anim(Fighter_GObj* gobj);
/* 0F26E4 */ void ftKb_SpecialAirHi3_Anim(Fighter_GObj* gobj);
/* 0F26E8 */ void ftKb_SpecialAirHiEnd_Anim(Fighter_GObj* gobj);
/* 0F2758 */ void ftKb_SpecialHi1_IASA(Fighter_GObj* gobj);
/* 0F2828 */ void ftKb_SpecialHi2_IASA(Fighter_GObj* gobj);
/* 0F282C */ void ftKb_SpecialHi3_IASA(Fighter_GObj* gobj);
/* 0F2830 */ void ftKb_SpecialHi4_IASA(Fighter_GObj* gobj);
/* 0F2834 */ void ftKb_SpecialAirHi1_IASA(Fighter_GObj* gobj);
/* 0F2904 */ void ftKb_SpecialAirHi2_IASA(Fighter_GObj* gobj);
/* 0F2908 */ void ftKb_SpecialAirHi3_IASA(Fighter_GObj* gobj);
/* 0F290C */ void ftKb_SpecialAirHiEnd_IASA(Fighter_GObj* gobj);
/* 0F2910 */ void ftKb_SpecialHi1_Phys(Fighter_GObj* gobj);
/* 0F2984 */ void ftKb_SpecialHi2_Phys(Fighter_GObj* gobj);
/* 0F29F8 */ void ftKb_SpecialHi3_Phys(Fighter_GObj* gobj);
/* 0F2A48 */ void ftKb_SpecialHi4_Phys(Fighter_GObj* gobj);
/* 0F2A68 */ void ftKb_SpecialAirHi1_Phys(Fighter_GObj* gobj);
/* 0F2AE4 */ void ftKb_SpecialAirHi2_Phys(Fighter_GObj* gobj);
/* 0F2B60 */ void ftKb_SpecialAirHi3_Phys(Fighter_GObj* gobj);
/* 0F2B9C */ void ftKb_SpecialAirHiEnd_Phys(Fighter_GObj* gobj);
/* 0F2BBC */ void ftKb_SpecialHi1_Coll(Fighter_GObj* gobj);
/* 0F2C5C */ void ftKb_SpecialHi2_Coll(Fighter_GObj* gobj);
/* 0F2D98 */ void ftKb_SpecialHi3_Coll(Fighter_GObj* gobj);
/* 0F2EA0 */ void ftKb_SpecialHi4_Coll(Fighter_GObj* gobj);
/* 0F2F70 */ void ftKb_SpecialAirHi1_Coll(Fighter_GObj* gobj);
/* 0F3004 */ void ftKb_SpecialAirHi2_Coll(Fighter_GObj* gobj);
/* 0F3140 */ void ftKb_SpecialAirHi3_Coll(Fighter_GObj* gobj);
/* 0F3248 */ void ftKb_SpecialAirHiEnd_Coll(Fighter_GObj* gobj);
#define GALE01_108CE8
/* 108CE8 */ void ftKb_SpecialNIc_80108CE8(Fighter_GObj* gobj,
                                           Item_GObj* it_gobj);
/* 108D04 */ void ftKb_SpecialNIc_80108D04(Fighter_GObj* gobj);
/* 108D64 */ void ftKb_SpecialNIc_80108D64(Fighter_GObj* gobj);
/* 108E14 */ void ftKb_SpecialNIc_80108E14(Fighter_GObj* gobj);
/* 108EFC */ void ftKb_PpSpecialN_Anim(Fighter_GObj* gobj);
/* 108F38 */ void ftKb_PpSpecialAirN_Anim(Fighter_GObj* gobj);
/* 108F74 */ void ftKb_PpSpecialN_IASA(Fighter_GObj* gobj);
/* 108F78 */ void ftKb_PpSpecialAirN_IASA(Fighter_GObj* gobj);
/* 108F7C */ void ftKb_PpSpecialN_Phys(Fighter_GObj* gobj);
/* 108F9C */ void ftKb_PpSpecialAirN_Phys(Fighter_GObj* gobj);
/* 108FBC */ void ftKb_PpSpecialN_Coll(Fighter_GObj* gobj);
/* 109030 */ void ftKb_PpSpecialAirN_Coll(Fighter_GObj* gobj);
#define GALE01_10B1F4
/* 10B1F4 */ void fn_8010B1F4(Fighter_GObj* gobj);
/* 10B2FC */ void ftKb_SpecialNMs_8010B2FC(Fighter_GObj* gobj);
/* 10B4A0 */ void ftKb_SpecialNMs_8010B4A0(Fighter_GObj* gobj);
/* 10B65C */ void ftKb_MsSpecialNStart_Anim(Fighter_GObj* gobj);
/* 10B6C4 */ void ftKb_MsSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 10B72C */ void ftKb_MsSpecialNStart_IASA(Fighter_GObj* gobj);
/* 10B730 */ void ftKb_MsSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 10B734 */ void ftKb_MsSpecialNStart_Phys(Fighter_GObj* gobj);
/* 10B78C */ void ftKb_MsSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 10B7F0 */ void ftKb_MsSpecialNStart_Coll(Fighter_GObj* gobj);
/* 10B82C */ void ftKb_MsSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 10B868 */ void ftKb_SpecialNMs_8010B868(Fighter_GObj* gobj);
/* 10B8E0 */ void ftKb_SpecialNMs_8010B8E0(Fighter_GObj* gobj);
/* 10B958 */ void ftKb_MsSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 10B9C0 */ void ftKb_MsSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 10BA28 */ void ftKb_MsSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 10BA60 */ void ftKb_MsSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 10BA98 */ void ftKb_MsSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 10BAB8 */ void ftKb_MsSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 10BAD8 */ void ftKb_MsSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 10BB14 */ void ftKb_MsSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 10BB50 */ void ftKb_SpecialNMs_8010BB50(Fighter_GObj* gobj);
/* 10BBC8 */ void ftKb_SpecialNMs_8010BBC8(Fighter_GObj* gobj);
/* 10BC40 */ void ftKb_SpecialNMs_8010BC40(Fighter_GObj* gobj);
/// Unknown, assumed Enter Hold of some kind
/* 10BC90 */ void ftKb_SpecialNMs_8010BC90(Fighter_GObj* gobj);
/* 10BCE0 */ void ftKb_MsSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 10BDD8 */ void ftKb_MsSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 10BED0 */ void ftKb_MsSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 10BED4 */ void ftKb_MsSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 10BED8 */ void ftKb_MsSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 10BEF8 */ void ftKb_MsSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 10BF18 */ void ftKb_MsSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 10BF54 */ void ftKb_MsSpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 10BF90 */ void ftKb_SpecialNPe_8010BF90(Fighter_GObj* gobj);
/* 10C06C */ void ftKb_SpecialNPe_8010C06C(Fighter_GObj* gobj);
/* 10C148 */ void ftKb_SpecialNPe_8010C148(Fighter_GObj* gobj);
/* 10C1E8 */ void ftKb_SpecialNPe_8010C1E8(Fighter_GObj* gobj);
#define GALE01_106F44
/* 106F44 */ s32 ftKb_SpecialNMt_80106F44(Fighter_GObj* gobj, s32* chargeLevel,
                                          s32* chargeCycles);
/* 106F9C */ bool ftKb_SpecialNMt_80106F9C(Fighter_GObj* gobj);
/* 106FEC */ bool ftKb_SpecialNMt_80106FEC(Fighter_GObj* gobj);
/* 107040 */ void ftKb_SpecialNMt_80107040(Fighter_GObj* gobj);
/* 10709C */ void ftKb_SpecialNMt_8010709C(Fighter_GObj* gobj);
/* 107130 */ void ftKb_SpecialNMt_80107130(Fighter_GObj* gobj);
/* 1071FC */ void ftKb_SpecialNMt_801071FC(Fighter_GObj* gobj);
/* 107410 */ void ftKb_SpecialNMt_80107410(Fighter_GObj* gobj);
/* 107568 */ void ftKb_SpecialNMt_80107568(Fighter_GObj* gobj);
/* 107638 */ void ftKb_SpecialNMt_80107638(Fighter_GObj* gobj);
/* 107700 */ void ftKb_MtSpecialNStart_Anim(Fighter_GObj* gobj);
/* 107884 */ void ftKb_MtSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 107A84 */ void ftKb_MtSpecialNLoopFull_Anim(Fighter_GObj* gobj);
/* 107AB4 */ void ftKb_MtSpecialNCancel_Anim(Fighter_GObj* gobj);
/* 107B38 */ void ftKb_MtSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 107B7C */ void ftKb_MtSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 107D0C */ void ftKb_MtSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 107F0C */ void ftKb_MtSpecialAirNLoopFull_Anim(Fighter_GObj* gobj);
/* 107F3C */ void ftKb_MtSpecialAirNCancel_Anim(Fighter_GObj* gobj);
/* 107FC0 */ void ftKb_MtSpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 108040 */ void ftKb_MtSpecialNStart_IASA(Fighter_GObj* gobj);
/* 108044 */ void ftKb_MtSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 1081F8 */ void ftKb_MtSpecialNLoopFull_IASA(Fighter_GObj* gobj);
/* 108394 */ void ftKb_MtSpecialNCancel_IASA(Fighter_GObj* gobj);
/* 108398 */ void ftKb_MtSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 10839C */ void ftKb_MtSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 1083A0 */ void ftKb_MtSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 108504 */ void ftKb_MtSpecialAirNLoopFull_IASA(Fighter_GObj* gobj);
/* 108650 */ void ftKb_MtSpecialAirNCancel_IASA(Fighter_GObj* gobj);
/* 108654 */ void ftKb_MtSpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 108658 */ void ftKb_MtSpecialNStart_Phys(Fighter_GObj* gobj);
/* 108678 */ void ftKb_MtSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 108698 */ void ftKb_MtSpecialNLoopFull_Phys(Fighter_GObj* gobj);
/* 1086B8 */ void ftKb_MtSpecialNCancel_Phys(Fighter_GObj* gobj);
/* 1086D8 */ void ftKb_MtSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 1086F8 */ void ftKb_MtSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 108718 */ void ftKb_MtSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 108738 */ void ftKb_MtSpecialAirNLoopFull_Phys(Fighter_GObj* gobj);
/* 108758 */ void ftKb_MtSpecialAirNCancel_Phys(Fighter_GObj* gobj);
/* 108778 */ void ftKb_MtSpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 108798 */ void ftKb_MtSpecialNStart_Coll(Fighter_GObj* gobj);
/* 108820 */ void ftKb_MtSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 1088A8 */ void ftKb_MtSpecialNLoopFull_Coll(Fighter_GObj* gobj);
/* 108930 */ void ftKb_MtSpecialNCancel_Coll(Fighter_GObj* gobj);
/* 1089B8 */ void ftKb_MtSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 108A40 */ void ftKb_MtSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 108AC8 */ void ftKb_MtSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 108B50 */ void ftKb_MtSpecialAirNLoopFull_Coll(Fighter_GObj* gobj);
/* 108BD8 */ void ftKb_MtSpecialAirNCancel_Coll(Fighter_GObj* gobj);
/* 108C60 */ void ftKb_MtSpecialAirNEnd_Coll(Fighter_GObj* gobj);
#define GALE01_10C288
/* 10C3C0 */ void ftKb_SpecialNPe_8010C3C0(Fighter_GObj* gobj);
/* 10C3F4 */ void ftKb_SpecialNPe_8010C3F4(Fighter_GObj* gobj);
/* 10C47C */ void ftKb_SpecialNPe_8010C47C(Fighter_GObj* gobj);
/* 10C4AC */ bool ftKb_SpecialNPe_8010C4AC(Fighter_GObj* gobj);
/* 10C4D4 */ void ftKb_SpecialNPe_8010C4D4(Fighter_GObj* gobj);
/* 10C560 */ void ftKb_SpecialNPe_8010C560(Fighter_GObj* gobj);
/* 10C5FC */ void ftKb_PeSpecialLw_Anim(Fighter_GObj* gobj);
/* 10C6B8 */ void ftKb_PeSpecialAirLw_Anim(Fighter_GObj* gobj);
/* 10C774 */ void ftKb_PeSpecialLw_IASA(Fighter_GObj* gobj);
/* 10C778 */ void ftKb_PeSpecialAirLw_IASA(Fighter_GObj* gobj);
/* 10C77C */ void ftKb_PeSpecialLw_Phys(Fighter_GObj* gobj);
/* 10C7B0 */ void ftKb_PeSpecialAirLw_Phys(Fighter_GObj* gobj);
/* 10C860 */ void ftKb_PeSpecialLw_Coll(Fighter_GObj* gobj);
/* 10C89C */ void ftKb_PeSpecialAirLw_Coll(Fighter_GObj* gobj);
/* 10C8D8 */ void ftKb_SpecialNPe_8010C8D8(Fighter_GObj* gobj);
/* 10C9CC */ void ftKb_SpecialNPe_8010C9CC(Fighter_GObj* gobj);
/* 10CAB4 */ void ftKb_PeSpecialLwHit_Anim(Fighter_GObj* gobj);
/* 10CB18 */ void ftKb_PeSpecialAirLwHit_Anim(Fighter_GObj* gobj);
/* 10CB7C */ void ftKb_PeSpecialLwHit_IASA(Fighter_GObj* gobj);
/* 10CB80 */ void ftKb_PeSpecialAirLwHit_IASA(Fighter_GObj* gobj);
/* 10CB84 */ void ftKb_PeSpecialLwHit_Phys(Fighter_GObj* gobj);
/* 10CBA4 */ void ftKb_PeSpecialAirLwHit_Phys(Fighter_GObj* gobj);
/* 10CBF4 */ void ftKb_PeSpecialLwHit_Coll(Fighter_GObj* gobj);
/* 10CC30 */ void ftKb_PeSpecialAirLwHit_Coll(Fighter_GObj* gobj);
/* 10CC6C */ void ftKb_SpecialNGw_8010CC6C(Fighter_GObj* gobj);
/* 10CCD4 */ void ftKb_SpecialNGw_8010CCD4(Fighter_GObj* gobj);
/* 10CD44 */ void ftKb_SpecialNGw_8010CD44(Fighter_GObj* gobj);
#define GALE01_0F9FD4
/* 0F9FD4 */ void ftKb_SpecialNPk_800F9FD4(Fighter_GObj* gobj);
/* 0FA064 */ void ftKb_SpecialNPk_800FA064(Fighter_GObj* gobj);
/* 0FA0F4 */ void ftKb_PkSpecialN_Anim(Fighter_GObj* gobj);
/* 0FA254 */ void ftKb_PkSpecialAirN_Anim(Fighter_GObj* gobj);
/* 0FA418 */ void ftKb_PkSpecialN_IASA(Fighter_GObj* gobj);
/* 0FA41C */ void ftKb_PkSpecialAirN_IASA(Fighter_GObj* gobj);
/* 0FA420 */ void ftKb_PkSpecialN_Phys(Fighter_GObj* gobj);
/* 0FA440 */ void ftKb_PkSpecialAirN_Phys(Fighter_GObj* gobj);
/* 0FA460 */ void ftKb_PkSpecialN_Coll(Fighter_GObj* gobj);
/* 0FA4F0 */ void ftKb_PkSpecialAirN_Coll(Fighter_GObj* gobj);
#define GALE01_100DE0
/* 100F94 */ void ftKb_SpecialNPr_80100F94(Fighter_GObj* gobj);
/* 1010D4 */ void ftKb_SpecialNPr_801010D4(Fighter_GObj* gobj, bool unk,
                                           MotionFlags flags,
                                           float anim_start);
/* 10131C */ void ftKb_SpecialNPr_8010131C(Fighter_GObj* gobj);
/* 10140C */ void ftKb_SpecialNPr_8010140C(Fighter_GObj* gobj, bool arg1);
/* 101560 */ void ftKb_SpecialNPr_80101560(Fighter_GObj* gobj);
/* 101618 */ void ftKb_SpecialNPr_80101618(Fighter_GObj* gobj);
/* 1016CC */ void ftKb_PrSpecialNStart_Anim(Fighter_GObj* gobj);
/* 1017B0 */ void ftKb_PrSpecialNLoop_Anim(Fighter_GObj* gobj);
/* 101960 */ void ftKb_PrSpecialNFull_Anim(Fighter_GObj* gobj);
/* 101AD0 */ void ftKb_PrSpecialN1_Anim(Fighter_GObj* gobj);
/* 101EA0 */ void ftKb_PrSpecialNTurn_Anim(Fighter_GObj* gobj);
/* 102198 */ void ftKb_PrSpecialNEnd_Anim(Fighter_GObj* gobj);
/* 102470 */ void ftKb_PrSpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 10254C */ void ftKb_PrSpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 1026FC */ void ftKb_PrSpecialAirNFull_Anim(Fighter_GObj* gobj);
/* 10286C */ void ftKb_PrSpecialAirN_Anim(Fighter_GObj* gobj);
/* 102DD0 */ void ftKb_PrSpecialN_Anim(Fighter_GObj* gobj);
/* 103088 */ void ftKb_PrSpecialAirNEndR_Anim(Fighter_GObj* gobj);
/* 103374 */ void ftKb_PrSpecialNHit_Anim(Fighter_GObj* gobj);
/* 1035C8 */ void ftKb_PrSpecialNStart_IASA(Fighter_GObj* gobj);
/* 1035CC */ void ftKb_PrSpecialNLoop_IASA(Fighter_GObj* gobj);
/* 103734 */ void ftKb_PrSpecialNFull_IASA(Fighter_GObj* gobj);
/* 10389C */ void ftKb_PrSpecialN1_IASA(Fighter_GObj* gobj);
/* 103A24 */ void ftKb_PrSpecialNTurn_IASA(Fighter_GObj* gobj);
/* 103A28 */ void ftKb_PrSpecialNEnd_IASA(Fighter_GObj* gobj);
/* 103A2C */ void ftKb_PrSpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 103A30 */ void ftKb_PrSpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 103B98 */ void ftKb_PrSpecialAirNFull_IASA(Fighter_GObj* gobj);
/* 103D00 */ void ftKb_PrSpecialAirN_IASA(Fighter_GObj* gobj);
/* 103D04 */ void ftKb_PrSpecialN_IASA(Fighter_GObj* gobj);
/* 103D08 */ void ftKb_PrSpecialAirNEndR_IASA(Fighter_GObj* gobj);
/* 103D0C */ void ftKb_PrSpecialNHit_IASA(Fighter_GObj* gobj);
/* 103D10 */ void ftKb_PrSpecialNStart_Phys(Fighter_GObj* gobj);
/* 103D40 */ void ftKb_PrSpecialNLoop_Phys(Fighter_GObj* gobj);
/* 103D70 */ void ftKb_PrSpecialNFull_Phys(Fighter_GObj* gobj);
/* 103DA0 */ void ftKb_PrSpecialN1_Phys(Fighter_GObj* gobj);
/* 103FA8 */ void ftKb_PrSpecialNTurn_Phys(Fighter_GObj* gobj);
/* 1042AC */ void ftKb_PrSpecialNEnd_Phys(Fighter_GObj* gobj);
/* 1042E8 */ void ftKb_PrSpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 104318 */ void ftKb_PrSpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 104348 */ void ftKb_PrSpecialAirNFull_Phys(Fighter_GObj* gobj);
/* 104378 */ void ftKb_PrSpecialAirN_Phys(Fighter_GObj* gobj);
/* 1044F8 */ void ftKb_PrSpecialN_Phys(Fighter_GObj* gobj);
/* 104610 */ void ftKb_PrSpecialAirNEndR_Phys(Fighter_GObj* gobj);
/* 104640 */ void ftKb_PrSpecialNHit_Phys(Fighter_GObj* gobj);
/* 1046A4 */ void ftKb_PrSpecialNStart_Coll(Fighter_GObj* gobj);
/* 10475C */ void ftKb_PrSpecialNLoop_Coll(Fighter_GObj* gobj);
/* 104864 */ void ftKb_PrSpecialNFull_Coll(Fighter_GObj* gobj);
/* 10496C */ void ftKb_PrSpecialN1_Coll(Fighter_GObj* gobj);
/* 104D14 */ void ftKb_PrSpecialNTurn_Coll(Fighter_GObj* gobj);
/* 104DF8 */ void ftKb_PrSpecialNEnd_Coll(Fighter_GObj* gobj);
/* 104E58 */ void ftKb_PrSpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 104F10 */ void ftKb_PrSpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 105018 */ void ftKb_PrSpecialAirNFull_Coll(Fighter_GObj* gobj);
/* 105120 */ void ftKb_PrSpecialAirN_Coll(Fighter_GObj* gobj);
/* 1056FC */ void ftKb_PrSpecialN_Coll(Fighter_GObj* gobj);
/* 1057BC */ void ftKb_PrSpecialAirNEndR_Coll(Fighter_GObj* gobj);
/* 10581C */ void ftKb_PrSpecialNHit_Coll(Fighter_GObj* gobj);
#define GALE01_105B2C
/* 105B2C */ void ftKb_SpecialNZd_80105B2C(Fighter_GObj* gobj);
/* 105BA8 */ void ftKb_SpecialNZd_80105BA8(Fighter_GObj* gobj);
/* 105C3C */ void ftKb_ZdSpecialN_Anim(Fighter_GObj* gobj);
/* 105CD0 */ void ftKb_ZdSpecialAirN_Anim(Fighter_GObj* gobj);
/* 105D64 */ void ftKb_ZdSpecialN_IASA(Fighter_GObj* gobj);
/* 105D68 */ void ftKb_ZdSpecialAirN_IASA(Fighter_GObj* gobj);
/* 105D6C */ void ftKb_ZdSpecialN_Phys(Fighter_GObj* gobj);
/* 105DA0 */ void ftKb_ZdSpecialAirN_Phys(Fighter_GObj* gobj);
/* 105E14 */ void ftKb_ZdSpecialN_Coll(Fighter_GObj* gobj);
/* 105E50 */ void ftKb_ZdSpecialAirN_Coll(Fighter_GObj* gobj);
#define GALE01_10AA2C
/* 10AC78 */ void ftKb_SpecialNYs_8010AC78(Fighter_GObj* victim,
                                           Fighter_GObj* gobj);
/* 10AF54 */ void ftCo_KirbyYoshiEgg_Anim(Fighter_GObj* gobj);
/* 10B0A0 */ void ftCo_KirbyYoshiEgg_IASA(Fighter_GObj* gobj);
/* 10B0A4 */ void ftCo_KirbyYoshiEgg_Phys(Fighter_GObj* gobj);
/* 10B0DC */ void ftCo_KirbyYoshiEgg_Coll(Fighter_GObj* gobj);
/* 10B124 */ void fn_8010B124(Fighter_GObj* gobj);
/* 10B148 */ void fn_8010B148(Fighter_GObj* gobj);
/* 10B16C */ void fn_8010B16C(Fighter_GObj* gobj);
/* 10B1D4 */ void fn_8010B1D4(Fighter_GObj* gobj);
#define MELEE_FT_CHARA_FTKIRBY_INLINES_H
static inline void ftKb_SpecialN_set_cbs(Fighter_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->death2_cb = ftKb_Init_800EE74C;
    fp->take_dmg_cb = ftKb_Init_800EE7B8;
}
static inline void ftKb_SpecialN_set_cbs2(Fighter_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->take_dmg_cb = ftKb_Init_800EE7B8;
    fp->death2_cb = ftKb_Init_800EE74C;
}
#define GALE01_132A0C
/* 132A0C */ void ftKp_Init_OnDeath(Fighter_GObj* gobj);
/* 132A64 */ void ftKp_Init_UnkMotionStates3(Fighter_GObj* gobj);
/* 132A84 */ void ftKp_Init_OnLoadForGKoopa(Fighter* fp);
/* 132ABC */ void ftKp_Init_OnLoad(Fighter_GObj* gobj);
/* 132B38 */ void ftKp_Init_80132B38(HSD_GObj* gobj);
/* 132B3C */ void ftKp_Init_OnItemPickup(Fighter_GObj* gobj, bool flag);
/* 132C1C */ void ftKp_Init_OnItemInvisible(Fighter_GObj* gobj);
/* 132C64 */ void ftKp_Init_OnItemVisible(Fighter_GObj* gobj);
/* 132CAC */ void ftKp_Init_OnItemDrop(Fighter_GObj* gobj, bool bool1);
/* 132D00 */ void ftKp_Init_LoadSpecialAttrs(Fighter_GObj* gobj);
/* 132D38 */ void ftKp_Init_OnKnockbackEnter(Fighter_GObj* gobj);
/* 132D7C */ void ftKp_Init_OnKnockbackExit(Fighter_GObj* gobj);
/* 3CEDC0 */ extern MotionState ftKp_Init_MotionStateTable[ftKp_MS_SelfCount];
/* 3CF0A0 */ extern char ftKp_Init_DatFilename[];
/* 3CF0AC */ extern char ftKp_Init_DataName[];
/* 3CF1E0 */ extern char ftKp_Init_AnimDatFilename[];
/* 3CF25C */ extern Fighter_DemoStrings ftKp_Init_DemoMotionFilenames;
/* 3CF26C */ extern Fighter_CostumeStrings ftKp_Init_CostumeStrings[];
/* 45A090 */ extern UnkCostumeStruct ftKp_CostumeList[4];
#define MELEE_FT_KP_SPECIAL_HI_H
/* 135A2C */ void ftKp_SpecialHi_Enter(Fighter_GObj* gobj);
/* 135B04 */ void ftKp_SpecialAirHi_Enter(Fighter_GObj* gobj);
/* 135C08 */ void ftKp_SpecialHi_Anim(Fighter_GObj* gobj);
/* 135C60 */ void ftKp_SpecialAirHi_Anim(Fighter_GObj* gobj);
/* 135D78 */ void ftKp_SpecialHi_IASA(Fighter_GObj* gobj);
/* 135D7C */ void ftKp_SpecialAirHi_IASA(Fighter_GObj* gobj);
/* 135D80 */ void ftKp_SpecialHi_Phys(Fighter_GObj* gobj);
/* 135DE0 */ void ftKp_SpecialAirHi_Phys(Fighter_GObj* gobj);
/* 135E4C */ void ftKp_SpecialHi_Coll(Fighter_GObj* gobj);
/* 135F6C */ void ftKp_SpecialAirHi_Coll(Fighter_GObj* gobj);
#define MELEE_FT_KP_SPECIAL_LW_H
/* 13460C */ void ftKp_SpecialLw_Enter(Fighter_GObj* gobj);
/* 1346A4 */ void ftKp_SpecialAirLw_Enter(Fighter_GObj* gobj);
/* 13474C */ void ftKp_SpecialLw_Anim(Fighter_GObj* gobj);
/* 134788 */ void ftKp_SpecialAirLw_Anim(Fighter_GObj* gobj);
/* 1347C4 */ void ftKp_SpecialLw_Phys(Fighter_GObj* gobj);
/* 134804 */ void ftKp_SpecialAirLw_Phys(Fighter_GObj* gobj);
/* 1348A0 */ void ftKp_SpecialLw_Coll(Fighter_GObj* gobj);
/* 1348C0 */ void ftKp_SpecialAirLw_Coll(Fighter_GObj* gobj);
/* 134988 */ void ftKp_SpecialLw_80134988(Fighter_GObj* gobj);
/* 1349C4 */ void ftKp_SpecialLwLanding_Anim(Fighter_GObj* gobj);
/* 134A00 */ void ftKp_SpecialLwLanding_Phys(Fighter_GObj* gobj);
/* 134A20 */ void ftKp_SpecialLwLanding_Coll(Fighter_GObj* gobj);
/* 134A5C */ void ftKp_SpecialLw_80134A5C(Fighter_GObj* gobj);
#define MELEE_FT_KP_SPECIAL_N_H
/* 134ACC */ void ftKp_SpecialLw_80134ACC(Fighter_GObj* gobj);
/* 134D78 */ void ftKp_SpecialLw_80134D78(Fighter_GObj* gobj);
/* 134DE0 */ s32 ftKp_SpecialLw_80134DE0(Fighter_GObj* gobj);
/* 134E1C */ s32 ftKp_SpecialLw_80134E1C(Fighter_GObj* gobj);
/* 134E58 */ void ftKp_SpecialN_Enter(Fighter_GObj* gobj);
/* 134ED0 */ void ftKp_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 134F48 */ void ftKp_SpecialNStart_Anim(Fighter_GObj* gobj);
/* 134F9C */ void ftKp_SpecialN_Anim(Fighter_GObj* gobj);
/* 135040 */ void ftKp_SpecialNEnd_Anim(Fighter_GObj* gobj);
/* 13507C */ void ftKp_SpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 1350D0 */ void ftKp_SpecialAirN_Anim(Fighter_GObj* gobj);
/* 135174 */ void ftKp_SpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 1351B0 */ void ftKp_SpecialNStart_IASA(Fighter_GObj* gobj);
/* 1351B4 */ void ftKp_SpecialN_IASA(Fighter_GObj* gobj);
/* 1352F0 */ void ftKp_SpecialNEnd_IASA(Fighter_GObj* gobj);
/* 1352F4 */ void ftKp_SpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 1352F8 */ void ftKp_SpecialAirN_IASA(Fighter_GObj* gobj);
/* 135434 */ void ftKp_SpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 135438 */ void ftKp_SpecialNStart_Phys(Fighter_GObj* gobj);
/* 135458 */ void ftKp_SpecialN_Phys(Fighter_GObj* gobj);
/* 135478 */ void ftKp_SpecialNEnd_Phys(Fighter_GObj* gobj);
/* 135498 */ void ftKp_SpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 1354B8 */ void ftKp_SpecialAirN_Phys(Fighter_GObj* gobj);
/* 1354D8 */ void ftKp_SpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 1354F8 */ void ftKp_SpecialNStart_Coll(Fighter_GObj* gobj);
/* 135564 */ void ftKp_SpecialN_Coll(Fighter_GObj* gobj);
/* 1355D0 */ void ftKp_SpecialNEnd_Coll(Fighter_GObj* gobj);
/* 13563C */ void ftKp_SpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 1356A8 */ void ftKp_SpecialAirN_Coll(Fighter_GObj* gobj);
/* 135714 */ void ftKp_SpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 135780 */ void ftKp_SpecialN_80135780(Fighter_GObj* gobj);
#define GALE01_80134288
/* 132DC0 */ float ftKp_SpecialS_80132DC0(Fighter_GObj* gobj);
/* 132DD0 */ float ftKp_SpecialS_80132DD0(Fighter_GObj* gobj);
/* 132DE0 */ float ftKp_SpecialS_80132DE0(Fighter_GObj* gobj);
/* 132DF0 */ float ftKp_SpecialS_80132DF0(Fighter_GObj* gobj);
/* 132E00 */ float ftKp_SpecialS_80132E00(Fighter_GObj* gobj);
/* 132E10 */ float ftKp_SpecialS_80132E10(Fighter_GObj* gobj);
/* 132E20 */ float ftKp_SpecialS_80132E20(Fighter_GObj* gobj);
/* 132E30 */ void ftKp_SpecialS_80132E30(Fighter_GObj* gobj);
/* 132EFC */ void ftKp_SpecialS_Enter(Fighter_GObj* gobj);
/* 132F94 */ void ftKp_SpecialAirS_Enter(Fighter_GObj* gobj);
/* 13302C */ void ftKp_SpecialS_8013302C(Fighter_GObj* gobj);
/* 1330E4 */ void ftKp_SpecialS_801330E4(Fighter_GObj* gobj);
/* 13319C */ void ftKp_SpecialS_8013319C(Fighter_GObj* gobj);
/* 13322C */ void ftKp_SpecialS_8013322C(Fighter_GObj* gobj);
/* 1332C4 */ void ftKp_SpecialS_801332C4(Fighter_GObj* gobj);
/* 133324 */ void ftKp_SpecialS_80133324(Fighter_GObj* gobj);
/* 133398 */ void ftKp_SpecialS_80133398(Fighter_GObj* gobj);
/* 1333F8 */ void ftKp_SpecialS_801333F8(Fighter_GObj* gobj);
/* 133484 */ void ftKp_SpecialS_80133484(Fighter_GObj* gobj);
/* 1334E4 */ void ftKp_SpecialS_801334E4(Fighter_GObj* gobj);
/* 13359C */ void ftKp_SpecialS_8013359C(Fighter_GObj* gobj);
/* 133654 */ void ftKp_SpecialSStart_Anim(Fighter_GObj* gobj);
/* 133690 */ void ftKp_SpecialAirSStart_Anim(Fighter_GObj* gobj);
/* 1336CC */ void ftKp_SpecialSHit_Anim(Fighter_GObj* gobj);
/* 13383C */ void ftKp_SpecialAirSHit_Anim(Fighter_GObj* gobj);
/* 1339AC */ void ftKp_SpecialSWait_Anim(Fighter_GObj* gobj);
/* 1339B0 */ void ftKp_SpecialAirSWait_Anim(Fighter_GObj* gobj);
/* 1339B4 */ void ftKp_SpecialSEndF_Anim(Fighter_GObj* gobj);
/* 133A90 */ void ftKp_SpecialSEndB_Anim(Fighter_GObj* gobj);
/* 133AD4 */ void ftKp_SpecialAirSEndF_Anim(Fighter_GObj* gobj);
/* 133BB0 */ void ftKp_SpecialAirSEndB_Anim(Fighter_GObj* gobj);
/* 133BF4 */ void ftKp_SpecialSHit_IASA(Fighter_GObj* gobj);
/* 133D20 */ void ftKp_SpecialAirSHit_IASA(Fighter_GObj* gobj);
/* 133E4C */ void ftKp_SpecialSWait_IASA(Fighter_GObj* gobj);
/* 134038 */ void ftKp_SpecialAirSWait_IASA(Fighter_GObj* gobj);
/* 134224 */ void ftKp_SpecialSStart_Phys(Fighter_GObj* gobj);
/* 134244 */ void ftKp_SpecialAirSStart_Phys(Fighter_GObj* gobj);
/* 134288 */ void ftKp_SpecialSHit_Phys(Fighter_GObj* gobj);
/* 1342A8 */ void ftKp_SpecialAirSHit_Phys(Fighter_GObj* gobj);
/* 1342C8 */ void ftKp_SpecialSWait_Phys(Fighter_GObj* gobj);
/* 1342E8 */ void ftKp_SpecialAirSWait_Phys(Fighter_GObj* gobj);
/* 134308 */ void ftKp_SpecialSEndF_Phys(Fighter_GObj* gobj);
/* 134328 */ void ftKp_SpecialSEndB_Phys(Fighter_GObj* gobj);
/* 134348 */ void ftKp_SpecialAirSEndF_Phys(Fighter_GObj* gobj);
/* 134368 */ void ftKp_SpecialAirSEndB_Phys(Fighter_GObj* gobj);
/* 134388 */ void ftKp_SpecialSStart_Coll(Fighter_GObj* gobj);
/* 1343B0 */ void ftKp_SpecialAirSStart_Coll(Fighter_GObj* gobj);
/* 1343D8 */ void ftKp_SpecialSHit_Coll(Fighter_GObj* gobj);
/* 134400 */ void ftKp_SpecialAirSHit_Coll(Fighter_GObj* gobj);
/* 134428 */ void ftKp_SpecialSWait_Coll(Fighter_GObj* gobj);
/* 134450 */ void ftKp_SpecialAirSWait_Coll(Fighter_GObj* gobj);
/* 134478 */ void ftKp_SpecialSEndF_Coll(Fighter_GObj* gobj);
/* 1344A0 */ void ftKp_SpecialSEndB_Coll(Fighter_GObj* gobj);
/* 1344C8 */ void ftKp_SpecialAirSEndF_Coll(Fighter_GObj* gobj);
/* 1344F0 */ void ftKp_SpecialAirSEndB_Coll(Fighter_GObj* gobj);
#define GALE01_0EAD64
/* 0EAD64 */ bool ftLk_Init_BoomerangExists(HSD_GObj* gobj);
/* 0EAD84 */ void ftLk_Init_OnDeath(HSD_GObj* gobj);
/* 0EAE04 */ void ftLk_Init_OnLoadForCLink(Fighter* fp);
/* 0EAE44 */ void ftLk_Init_OnLoad(HSD_GObj* gobj);
/* 0EAF38 */ void ftLk_800EAF38(HSD_GObj* gobj);
/* 0EAF58 */ void ftLk_800EAF58(HSD_GObj* gobj);
/* 0EAFA4 */ void ftLk_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 0EB018 */ void ftLk_Init_OnItemInvisible(HSD_GObj* gobj);
/* 0EB060 */ void ftLk_Init_OnItemVisible(HSD_GObj* gobj);
/* 0EB0A8 */ void ftLk_Init_OnItemDrop(HSD_GObj* gobj, bool arg1);
/* 0EB11C */ void ftLk_Init_OnItemPickupExt(HSD_GObj* gobj, bool arg1);
/* 0EB1FC */ void ftLk_Init_OnItemDropExt(HSD_GObj* gobj, bool arg1);
/* 0EB250 */ void ftLk_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 0EB2AC */ void ftLk_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 0EB2F0 */ void ftLk_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 0EB334 */ void ftLk_800EB334(HSD_GObj* gobj);
/* 3C7E18 */ extern MotionState ftLk_Init_MotionStateTable[ftLk_MS_SelfCount];
/* 3C80B8 */ extern char ftLk_Init_DatFilename[];
/* 3C80C4 */ extern char ftLk_Init_DataName[];
/* 3C8224 */ extern char ftLk_Init_AnimDatFilename[];
/* 3C82A0 */ extern Fighter_DemoStrings ftLk_Init_DemoMotionFilenames;
/* 3C82B0 */ extern Fighter_CostumeStrings ftLk_Init_CostumeStrings[];
/* 3C82EC */ extern UnkCostumeStruct ftLk_CostumeList[5];
#define GALE01_0EB3BC
/* 0EB3BC */ void ftLk_AttackAir_800EB3BC(HSD_GObj* gobj);
/* 0EB42C */ void ftLk_AttackAir_Enter(HSD_GObj* gobj);
/* 0EB618 */ void ftLk_AttackAir_SetupParts(HSD_GObj* gobj);
#define GALE01_0EBB1C
/* 0EBB1C */ void ftLk_SpecialHi_Enter(HSD_GObj* gobj);
/* 0EBB80 */ void ftLk_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 0EBC10 */ void ftLk_SpecialHi_Anim(HSD_GObj* gobj);
/* 0EBC4C */ void ftLk_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 0EBCAC */ void ftLk_SpecialHi_IASA(HSD_GObj* gobj);
/* 0EBCB0 */ void ftLk_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 0EBCB4 */ void ftLk_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 0EBD30 */ void ftLk_SpecialHi_Phys(HSD_GObj* gobj);
/* 0EBDC0 */ void ftLk_SpecialHi_Coll(HSD_GObj* gobj);
/* 0EBDFC */ void ftLk_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 0EBEC4 */ Fighter_Part ftLk_SpecialHi_ProcessPartLThumbNb(HSD_GObj* gobj);
/**
 * @param[out] pos #Fighter::cur_pos with its #Vec3::y component adjusted by
 *                 #ftLk_DatAttrs::specialhi_pos_y_offset.
 */
/* 0EBEEC */ void ftLk_SpecialHi_GetPosWithAdjustedY(HSD_GObj* gobj,
                                                     Vec3* pos);
/* 0EBF20 */ int ftLk_SpecialHi_GetFv4(HSD_GObj* gobj);
#define GALE01_0EB65C
/* 0EB65C */ void ftLk_SpecialLw_Enter(HSD_GObj* gobj);
/* 0EB6DC */ void ftLk_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 0EB8A4 */ void ftLk_SpecialLw_Anim(HSD_GObj* gobj);
/* 0EB8E0 */ void ftLk_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 0EB91C */ void ftLk_SpecialLw_Phys(HSD_GObj* gobj);
/* 0EB93C */ void ftLk_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 0EB95C */ void ftLk_SpecialLw_Coll(HSD_GObj* gobj);
/* 0EB9D4 */ void ftLk_SpecialAirLw_Coll(HSD_GObj* gobj);
#define GALE01_0ECBC4
/* 0ECBC4 */ ftLk_SpecialNIndex ftLk_SpecialN_GetIndex(Fighter_GObj* gobj);
/* 0ECC0C */ void ftLk_SpecialN_UnsetArrow(Fighter_GObj* gobj);
/* 0ECC6C */ void ftLk_SpecialN_UnsetFv14(Fighter_GObj* gobj);
/* 0ECCCC */ bool ftLk_SpecialN_IsActiveAnd2071b6(Fighter_GObj* gobj);
/* 0ECD04 */ void ftLk_SpecialN_ProcessFv10(Fighter_GObj* gobj);
/* 0ECD58 */ void ftLk_SpecialN_ProcessFv14(Fighter_GObj* gobj);
/* 0ECDAC */ void ftLk_SpecialN_Enter(Fighter_GObj* gobj);
/* 0ECF78 */ void ftLk_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 0ED15C */ void ftLk_SpecialNStart_Anim(Fighter_GObj* gobj);
/* 0ED480 */ void ftLk_SpecialNLoop_Anim(Fighter_GObj* gobj);
/* 0ED5B4 */ void ftLk_SpecialNEnd_Anim(Fighter_GObj* gobj);
/* 0ED72C */ void ftLk_SpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 0EDA58 */ void ftLk_SpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 0EDB8C */ void ftLk_SpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 0EDD88 */ void ftLk_SpecialNStart_IASA(Fighter_GObj* gobj);
/* 0EDE30 */ void ftLk_SpecialNLoop_IASA(Fighter_GObj* gobj);
/* 0EDEAC */ void ftLk_SpecialNEnd_IASA(Fighter_GObj* gobj);
/* 0EDEB0 */ void ftLk_SpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 0EDF58 */ void ftLk_SpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 0EDFD4 */ void ftLk_SpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 0EDFD8 */ void ftLk_SpecialNStart_Phys(Fighter_GObj* gobj);
/* 0EDFF8 */ void ftLk_SpecialNLoop_Phys(Fighter_GObj* gobj);
/* 0EE018 */ void ftLk_SpecialNEnd_Phys(Fighter_GObj* gobj);
/* 0EE038 */ void ftLk_SpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 0EE058 */ void ftLk_SpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 0EE078 */ void ftLk_SpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 0EE098 */ void ftLk_SpecialNStart_Coll(Fighter_GObj* gobj);
/* 0EE120 */ void ftLk_SpecialNLoop_Coll(Fighter_GObj* gobj);
/* 0EE1A8 */ void ftLk_SpecialNEnd_Coll(Fighter_GObj* gobj);
/* 0EE2E0 */ void ftLk_SpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 0EE368 */ void ftLk_SpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 0EE3F0 */ void ftLk_SpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 3B7520 */ extern ftLk_SpecialN_Vec3Group const ftLk_Init_Vec3Group;
#define GALE01_0EC354
/* 0EBFCC */ bool ftLk_SepcialS_Get2219b5(HSD_GObj* gobj);
/* 0EBFDC */ bool ftLk_SpecialS_Is2071b0_5to13(HSD_GObj* gobj);
/* 0EC00C */ bool ftLk_SpecialS_Is2071b0_1to13(HSD_GObj* gobj);
/* 0EC03C */ bool ftLk_SpecialS_RemoveBoomerang0(HSD_GObj* gobj);
/* 0EC06C */ void ftLk_SpecialS_RemoveBoomerang1(HSD_GObj* gobj);
/* 0EC354 */ void ftLk_SpecialS_Enter(HSD_GObj* gobj);
/* 0EC404 */ void ftLk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 0EC4B4 */ void ftLk_SpecialS2_Enter(HSD_GObj* gobj);
/* 0EC54C */ void ftLk_SpecialS1_Anim(HSD_GObj* gobj);
/* 0EC588 */ void ftLk_SpecialS2_Anim(HSD_GObj* gobj);
/* 0EC5F8 */ void ftLk_SpecialS1Empty_Anim(HSD_GObj* gobj);
/* 0EC634 */ void ftLk_SpecialAirS1_Anim(HSD_GObj* gobj);
/* 0EC670 */ void ftLk_SpecialAirS2_Anim(HSD_GObj* gobj);
/* 0EC6E0 */ void ftLk_SpecialAirS1Empty_Anim(HSD_GObj* gobj);
/* 0EC71C */ void ftLk_SpecialS2_IASA(HSD_GObj* gobj);
/* 0EC810 */ void ftLk_SpecialAirS2_IASA(HSD_GObj* gobj);
/* 0EC88C */ void ftLk_SpecialS1_Phys(HSD_GObj* gobj);
/* 0EC8AC */ void ftLk_SpecialS2_Phys(HSD_GObj* gobj);
/* 0EC8CC */ void ftLk_SpecialS1Empty_Phys(HSD_GObj* gobj);
/* 0EC8EC */ void ftLk_SpecialAirS1_Phys(HSD_GObj* gobj);
/* 0EC90C */ void ftLk_SpecialAirS2_Phys(HSD_GObj* gobj);
/* 0EC92C */ void ftLk_SpecialAirS1Empty_Phys(HSD_GObj* gobj);
/* 0EC94C */ void ftLk_SpecialS1_Coll(HSD_GObj* gobj);
/* 0EC9C4 */ void ftLk_SpecialS2_Coll(HSD_GObj* gobj);
/* 0ECA1C */ void ftLk_SpecialS1Empty_Coll(HSD_GObj* gobj);
/* 0ECA88 */ void ftLk_SpecialAirS1_Coll(HSD_GObj* gobj);
/* 0ECB00 */ void ftLk_SpecialAirS2_Coll(HSD_GObj* gobj);
/* 0ECB58 */ void ftLk_SpecialAirS1Empty_Coll(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTLUIGI_FORWARD_H
static MotionFlags const ftLg_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftLg_MF_SpecialN =
    ftLg_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftLg_MF_SpecialS =
    ftLg_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftLg_MF_SpecialHi =
    ftLg_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftLg_MF_SpecialLw =
    ftLg_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_KeepSfx;
static MotionFlags const ftLg_MF_SpecialAirN =
    ftLg_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftLg_MF_SpecialAirS =
    ftLg_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftLg_MF_SpecialAirHi =
    ftLg_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftLg_MF_SpecialAirLw =
    ftLg_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftLg_MF_SpecialN_Coll =
    Ft_MF_SkipColAnim | Ft_MF_UpdateCmd;
typedef enum ftLuigi_MotionState {
    ftLg_MS_SpecialN = ftCo_MS_Count,
    ftLg_MS_SpecialAirN,
    ftLg_MS_SpecialSStart,
    ftLg_MS_SpecialSHold,
    ftLg_MS_SpecialS2,
    ftLg_MS_SpecialSEnd,
    ftLg_MS_SpecialS,
    ftLg_MS_SpecialSMisfire,
    ftLg_MS_SpecialAirSStart,
    ftLg_MS_SpecialAirSHold,
    ftLg_MS_SpecialAirS2,
    ftLg_MS_SpecialAirSEnd,
    ftLg_MS_SpecialAirS,
    ftLg_MS_SpecialAirSMisfire,
    ftLg_MS_SpecialHi,
    ftLg_MS_SpecialAirHi,
    ftLg_MS_SpecialLw,
    ftLg_MS_SpecialAirLw,
    ftLg_MS_Count,
    ftLg_MS_SelfCount = ftLg_MS_Count - ftCo_MS_Count,
} ftLuigi_MotionState;
typedef enum ftLg_Submotion {
    ftLg_SM_SpecialN = ftCo_SM_Count,
    ftLg_SM_SpecialAirN,
    ftLg_SM_SpecialSStart,
    ftLg_SM_SpecialSHold,
    ftLg_SM_SpecialS,
    ftLg_SM_SpecialSMisfire,
    ftLg_SM_SpecialS2,
    ftLg_SM_SpecialSEnd,
    ftLg_SM_SpecialAirSStart,
    ftLg_SM_SpecialAirSHold,
    ftLg_SM_SpecialAirS,
    ftLg_SM_SpecialAirSMisfire,
    ftLg_SM_SpecialAirSEnd,
    ftLg_SM_SpecialHi,
    ftLg_SM_SpecialAirHi,
    ftLg_SM_SpecialLw,
    ftLg_SM_SpecialAirLw,
    ftLg_SM_Count,
    ftLg_SM_SelfCount = ftLg_SM_Count - ftCo_SM_Count,
} ftLg_Submotion;
#define GALE01_1422E8
/* 1422E8 */ void ftLg_Init_OnDeath(HSD_GObj* gobj);
/* 142324 */ void ftLg_Init_OnLoad(HSD_GObj* gobj);
/* 142388 */ void ftLg_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 142468 */ void ftLg_Init_OnItemInvisible(HSD_GObj* gobj);
/* 1424B0 */ void ftLg_Init_OnItemVisible(HSD_GObj* gobj);
/* 1424F8 */ void ftLg_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 14254C */ void ftLg_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 142584 */ void ftLg_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 1425C8 */ void ftLg_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 14260C */ void ftLg_Init_UnkDemoCallbacks0(int arg0, int* arg1, int* arg2);
/* 142640 */ char* ftLg_Init_GetMotionFileString(enum_t demoMotionArg);
/* 3D0628 */ extern MotionState ftLg_Init_MotionStateTable[ftLg_MS_SelfCount];
/* 3D0868 */ extern MotionState ftLg_Init_UnkMotionStates0[];
/* 3D08A8 */ extern char ftLg_Init_DatFilename[];
/* 3D08B4 */ extern char ftLg_Init_DataName[];
/* 3D09E8 */ extern char ftLg_Init_AnimDatFilename[];
/* 3D0A64 */ extern Fighter_DemoStrings ftLg_Init_DemoMotionFilenames;
/* 3D0AB4 */ extern Fighter_CostumeStrings ftLg_Init_CostumeStrings[];
/* 45A270 */ extern UnkCostumeStruct ftLg_CostumeList[4];
/// @file
/// Up Special - Super Jump Punch (SpecialHi)
#define GALE01_143FC8
/* 143FC8 */ void ftLg_SpecialHi_Enter(HSD_GObj* gobj);
/* 144024 */ void ftLg_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 144098 */ void ftLg_SpecialHi_Anim(HSD_GObj* gobj);
/* 1440F8 */ void ftLg_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 144158 */ void ftLg_SpecialHi_IASA(HSD_GObj* gobj);
/* 1442A0 */ void ftLg_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 1443E8 */ void ftLg_SpecialHi_Phys(HSD_GObj* gobj);
/* 144420 */ void ftLg_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 1444B4 */ void ftLg_SpecialHi_CheckLanding(HSD_GObj* gobj);
/* 1444E4 */ void ftLg_SpecialHi_Coll(HSD_GObj* gobj);
/* 144554 */ void ftLg_SpecialAirHi_Coll(HSD_GObj* gobj);
/// @file
/// Down Special - Luigi Cyclone (SpecialLw)
#define GALE01_1445C4
/* 1445C4 */ void ftLg_SpecialLw_UpdateRot(HSD_GObj* gobj);
/* 1445F0 */ void ftLg_SpecialLw_Enter(HSD_GObj* gobj);
/* 144708 */ void ftLg_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 144830 */ void ftLg_SpecialLw_Anim(HSD_GObj* gobj);
/* 14487C */ void ftLg_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 144950 */ void ftLg_SpecialLw_IASA(HSD_GObj* gobj);
/* 144954 */ void ftLg_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 144958 */ void ftLg_SpecialLw_Phys(HSD_GObj* gobj);
/* 144A7C */ void ftLg_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 144B38 */ void ftLg_SpecialLw_Coll(HSD_GObj* gobj);
/* 144CEC */ void ftLg_SpecialAirLw_Coll(HSD_GObj* gobj);
/// @file
/// Netural Special - Fireball (SpecialN)
#define GALE01_14267C
/* 14267C */ void ftLg_SpecialN_Enter(HSD_GObj* gobj);
/* 1426EC */ void ftLg_SpecialAirN_Enter(HSD_GObj* gobj);
/* 14275C */ void ftLg_SpecialN_Anim(HSD_GObj* gobj);
/* 142798 */ void ftLg_SpecialAirN_Anim(HSD_GObj* gobj);
/* 1427D4 */ void ftLg_SpecialN_IASA(HSD_GObj* gobj);
/* 142804 */ void ftLg_SpecialAirN_IASA(HSD_GObj* gobj);
/* 142834 */ void ftLg_SpecialN_Phys(HSD_GObj* gobj);
/* 142854 */ void ftLg_SpecialAirN_Phys(HSD_GObj* gobj);
/* 142874 */ void ftLg_SpecialN_Coll(HSD_GObj* gobj);
/* 1428E8 */ void ftLg_SpecialAirN_Coll(HSD_GObj* gobj);
/* 14295C */ void ftLg_SpecialN_FireSpawn(HSD_GObj* gobj);
/// @file
/// Side Special - Green Missile (SpecialS)
#define GALE01_142A24
/* 142A24 */ void ftLg_SpecialS_SetGFX(HSD_GObj* gobj);
/* 142A5C */ void ftLg_SpecialS_SetVars(HSD_GObj* gobj);
/* 142B14 */ void ftLg_SpecialS_Enter(HSD_GObj* gobj);
/* 142B88 */ void ftLg_SpecialAirS_Enter(HSD_GObj* gobj);
/* 142C00 */ void ftLg_SpecialS_OnGiveDamage(HSD_GObj* gobj);
/* 142C40 */ void ftLg_SpecialSStart_Anim(HSD_GObj* gobj);
/* 142C7C */ void ftLg_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 142CB8 */ void ftLg_SpecialSStart_IASA(HSD_GObj* gobj);
/* 142CBC */ void ftLg_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 142CC0 */ void ftLg_SpecialSStart_Phys(HSD_GObj* gobj);
/* 142D00 */ void ftLg_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 142D60 */ void ftLg_SpecialSStart_Coll(HSD_GObj* gobj);
/* 142D9C */ void ftLg_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 142DD8 */ void ftLg_SpecialSStart_GroundToAir(HSD_GObj* gobj);
/* 142E38 */ void ftLg_SpecialAirSStart_AirToGround(HSD_GObj* gobj);
/* 142E98 */ void ftLg_SpecialSHold_Anim(HSD_GObj* gobj);
/* 142F38 */ void ftLg_SpecialAirSHold_Anim(HSD_GObj* gobj);
/* 142FD8 */ void ftLg_SpecialSHold_IASA(HSD_GObj* gobj);
/* 143008 */ void ftLg_SpecialAirSHold_IASA(HSD_GObj* gobj);
/* 143038 */ void ftLg_SpecialSHold_Phys(HSD_GObj* gobj);
/* 143058 */ void ftLg_SpecialAirSHold_Phys(HSD_GObj* gobj);
/* 143078 */ void ftLg_SpecialSHold_Coll(HSD_GObj* gobj);
/* 1430B4 */ void ftLg_SpecialAirSHold_Coll(HSD_GObj* gobj);
/* 1430F0 */ void ftLg_SpecialSHold_GroundToAir(HSD_GObj* gobj);
/* 143150 */ void ftLg_SpecialAirSHold_AirToGround(HSD_GObj* gobj);
/* 1431B0 */ void ftLg_SpecialSHold_Enter(HSD_GObj* gobj);
/* 143204 */ void ftLg_SpecialAirSHold_Enter(HSD_GObj* gobj);
/* 143258 */ void ftLg_SpecialS_Anim(HSD_GObj* gobj);
/* 143304 */ void ftLg_SpecialAirS_Anim(HSD_GObj* gobj);
/* 1433A8 */ void ftLg_SpecialS_IASA(HSD_GObj* gobj);
/* 1433AC */ void ftLg_SpecialAirS_IASA(HSD_GObj* gobj);
/* 1433B0 */ void ftLg_SpecialS_Phys(HSD_GObj* gobj);
/* 1433D0 */ void ftLg_SpecialAirS_Phys(HSD_GObj* gobj);
/* 1433F0 */ void ftLg_SpecialS_Coll(HSD_GObj* gobj);
/* 14342C */ void ftLg_SpecialAirS_Coll(HSD_GObj* gobj);
/* 143468 */ void ftLg_SpecialSLaunch_GroundToAir(HSD_GObj* gobj);
/* 1434C8 */ void ftLg_SpecialAirSLaunch_AirToGround(HSD_GObj* gobj);
/* 143528 */ void ftLg_SpecialSLaunch_Enter(HSD_GObj* gobj);
/* 143600 */ void ftLg_SpecialAirSLaunch_Enter(HSD_GObj* gobj);
/* 1436D8 */ void ftLg_SpecialSMisfire_Anim(HSD_GObj* gobj);
/* 143784 */ void ftLg_SpecialAirSMisfire_Anim(HSD_GObj* gobj);
/* 143828 */ void ftLg_SpecialSMisfire_IASA(HSD_GObj* gobj);
/* 14382C */ void ftLg_SpecialAirSMisfire_IASA(HSD_GObj* gobj);
/* 143830 */ void ftLg_SpecialSMisfire_Phys(HSD_GObj* gobj);
/* 143850 */ void ftLg_SpecialAirSMisfire_Phys(HSD_GObj* gobj);
/* 143870 */ void ftLg_SpecialSMisfire_Coll(HSD_GObj* gobj);
/* 1438AC */ void ftLg_SpecialAirSMisfire_Coll(HSD_GObj* gobj);
/* 1438E8 */ void ftLg_SpecialSMisfire_GroundToAir(HSD_GObj* gobj);
/* 143948 */ void ftLg_SpecialAirSMisfire_AirToGround(HSD_GObj* gobj);
/* 1439A8 */ void ftLg_SpecialSMisfire_Enter(HSD_GObj* gobj);
/* 143A60 */ void ftLg_SpecialAirSMisfire_Enter(HSD_GObj* gobj);
/* 143B18 */ void ftLg_SpecialS2_Anim(HSD_GObj* gobj);
/* 143B1C */ void ftLg_SpecialAirS2_Anim(HSD_GObj* gobj);
/* 143B58 */ void ftLg_SpecialS2_IASA(HSD_GObj* gobj);
/* 143B5C */ void ftLg_SpecialAirS2_IASA(HSD_GObj* gobj);
/* 143B60 */ void ftLg_SpecialS2_Phys(HSD_GObj* gobj);
/* 143B64 */ void ftLg_SpecialAirS2_Phys(HSD_GObj* gobj);
/* 143BE0 */ void ftLg_SpecialS2_Coll(HSD_GObj* gobj);
/* 143BE4 */ void ftLg_SpecialAirS2_Coll(HSD_GObj* gobj);
/* 143C60 */ void ftLg_SpecialSFly_Enter(HSD_GObj* gobj);
/* 143D7C */ void ftLg_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 143DB8 */ void ftLg_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 143DF4 */ void ftLg_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 143DF8 */ void ftLg_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 143DFC */ void ftLg_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 143E3C */ void ftLg_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 143E8C */ void ftLg_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 143EC8 */ void ftLg_SpecialAirSEnd_Coll(HSD_GObj* gobj);
/* 143F18 */ void ftLg_SpecialSEnd_Enter(HSD_GObj* gobj);
/* 143F70 */ void ftLg_SpecialAirSEnd_Enter(HSD_GObj* gobj);
#define GALE01_0E08CC
/* 0E08CC */ void ftMr_Init_OnDeath(HSD_GObj* gobj);
/* 0E0920 */ void ftMr_Init_OnLoadForDrMario(Fighter*);
/* 0E0960 */ void ftMr_Init_OnLoad(HSD_GObj* gobj);
/* 0E0A00 */ void ftMr_Init_OnTakeDamage(HSD_GObj* gobj);
/* 0E0A20 */ void ftMr_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 0E0B00 */ void ftMr_Init_OnItemInvisible(HSD_GObj* gobj);
/* 0E0B48 */ void ftMr_Init_OnItemVisible(HSD_GObj* gobj);
/* 0E0B90 */ void ftMr_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 0E0BE4 */ void ftMr_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 0E0C24 */ void ftMr_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 0E0C68 */ void ftMr_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 0E0CAC */ void ftMr_Init_UnkDemoCallbacks0(int, int*, int*);
/* 0E0CE0 */ char* ftMr_Init_GetMotionFileString(enum_t);
/* 3C7120 */ extern MotionState ftMr_Init_MotionStateTable[ftMr_MS_SelfCount];
/* 3C7260 */ extern MotionState ftMr_Init_UnkMotionStates0[2];
/* 4599F0 */ extern UnkCostumeStruct ftMr_CostumeList[5];
#define GALE01_0E1A54
/* 0E1A54 */ void ftMr_SpecialHi_Enter(HSD_GObj* gobj);
/* 0E1AB0 */ void ftMr_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 0E1B24 */ void ftMr_SpecialHi_Anim(HSD_GObj* gobj);
/* 0E1B84 */ void ftMr_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 0E1BE4 */ void ftMr_SpecialHi_IASA(HSD_GObj* gobj);
/* 0E1D2C */ void ftMr_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 0E1E74 */ void ftMr_SpecialHi_Phys(HSD_GObj* gobj);
/* 0E1EAC */ void ftMr_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 0E1F40 */ void ftMr_SpecialHi_CheckLanding(HSD_GObj* gobj);
/* 0E1F70 */ void ftMr_SpecialHi_Coll(HSD_GObj* gobj);
/* 0E1FE0 */ void ftMr_SpecialAirHi_Coll(HSD_GObj* gobj);
#define GALE01_0E207C
/* 0E207C */ void ftMr_SpecialLw_Enter(HSD_GObj* gobj);
/* 0E2194 */ void ftMr_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 0E22BC */ void ftMr_SpecialLw_Anim(HSD_GObj* gobj);
/* 0E2308 */ void ftMr_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 0E23DC */ void ftMr_SpecialLw_IASA(HSD_GObj* gobj);
/* 0E23E0 */ void ftMr_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 0E23E4 */ void ftMr_SpecialLw_Phys(HSD_GObj* gobj);
/* 0E2508 */ void ftMr_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 0E25C4 */ void ftMr_SpecialLw_Coll(HSD_GObj* gobj);
/* 0E2778 */ void ftMr_SpecialAirLw_Coll(HSD_GObj* gobj);
#define GALE01_0E0D1C
/* 0E0D1C */ int ftMr_SpecialN_VitaminRandom(HSD_GObj* gobj);
/* 0E0DA8 */ void ftMr_SpecialN_Enter(HSD_GObj* gobj);
/* 0E0E18 */ void ftMr_SpecialN_Anim(HSD_GObj* gobj);
/* 0E0E54 */ void ftMr_SpecialN_IASA(HSD_GObj* gobj);
/* 0E0E84 */ void ftMr_SpecialN_Phys(HSD_GObj* gobj);
/* 0E0EA4 */ void ftMr_SpecialN_Coll(HSD_GObj* gobj);
/* 0E0EE0 */ void ftMr_SpecialN_ItemFireSpawn(HSD_GObj* gobj);
/* 0E1040 */ void ftMr_SpecialAirN_Enter(HSD_GObj* gobj);
/* 0E10B0 */ void ftMr_SpecialAirN_Anim(HSD_GObj* gobj);
/* 0E10EC */ void ftMr_SpecialAirN_IASA(HSD_GObj* gobj);
/* 0E111C */ void ftMr_SpecialAirN_Phys(HSD_GObj* gobj);
/* 0E113C */ void ftMr_SpecialAirN_Coll(HSD_GObj* gobj);
/* 0E1178 */ void ftMr_SpecialN_GroundToAir(HSD_GObj* gobj);
/* 0E11E0 */ void ftMr_SpecialAirN_AirToGround(HSD_GObj* gobj);
#define GALE01_0E1248
/* 0E1248 */ void ftMr_SpecialS_CreateCape(HSD_GObj* gobj);
/* 0E132C */ void ftMr_SpecialS_Reset(HSD_GObj* gobj);
/* 0E1368 */ void ftMr_SpecialS_RemoveCape(HSD_GObj* gobj);
/* 0E13C8 */ void ftMr_SpecialS_EnterHitlag(HSD_GObj* gobj);
/* 0E13F8 */ void ftMr_SpecialS_ExitHitlag(HSD_GObj* gobj);
/* 0E1428 */ bool ftMr_SpecialS_CheckItemCapeRemove(HSD_GObj* gobj);
/* 0E1450 */ void ftMr_SpecialS_Enter(HSD_GObj* gobj);
/* 0E14C8 */ void ftMr_SpecialAirS_Enter(HSD_GObj* gobj);
/* 0E1550 */ void ftMr_SpecialS_Anim(HSD_GObj* gobj);
/* 0E158C */ void ftMr_SpecialAirS_Anim(HSD_GObj* gobj);
/* 0E15C8 */ void ftMr_SpecialS_IASA(HSD_GObj* gobj);
/* 0E15CC */ void ftMr_SpecialAirS_IASA(HSD_GObj* gobj);
/* 0E15D0 */ void ftMr_SpecialS_Phys(HSD_GObj* gobj);
/* 0E16E0 */ void ftMr_SpecialAirS_Phys(HSD_GObj* gobj);
/* 0E1840 */ void ftMr_SpecialS_Coll(HSD_GObj* gobj);
/* 0E187C */ void ftMr_SpecialAirS_Coll(HSD_GObj* gobj);
/* 0E18B8 */ void ftMr_SpecialS_GroundToAir(HSD_GObj* gobj);
/* 0E198C */ void ftMr_SpecialAirS_AirToGround(HSD_GObj* gobj);
#define GALE01_3C59D8
/* 3C59D8 */ extern Fighter_DemoStrings ftMr_Init_DemoMotionFilenames;
/* 3C5A20 */ extern char* ftMr_Init_DemoViMotionFilenames[];
#define MELEE_FT_CHARA_FTMARIO_INLINES_H
static inline ftMario_DatAttrs* GetMarioAttr(Fighter* fp)
{
    ftMario_DatAttrs* mario_attr = fp->dat_attrs;
    return mario_attr;
}
#define GALE01_136258
/* 136258 */ void ftMs_Init_OnDeath(HSD_GObj* gobj);
/* 1362B0 */ void ftMs_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 136390 */ void ftMs_Init_OnItemInvisible(HSD_GObj* gobj);
/* 1363D8 */ void ftMs_Init_OnItemVisible(HSD_GObj* gobj);
/* 136420 */ void ftMs_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 136474 */ void ftMs_Init_OnLoadForRoy(Fighter* fp);
/* 1364AC */ void ftMs_Init_OnLoad(HSD_GObj* gobj);
/* 1364E8 */ void ftMs_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 136520 */ void ftMs_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 136564 */ void ftMs_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 1365A8 */ void ftMs_SpecialN_801365A8(HSD_GObj* gobj);
/* 13666C */ void ftMs_SpecialN_8013666C(HSD_GObj* gobj);
/* 136730 */ void ftMs_SpecialN_80136730(HSD_GObj* gobj);
/* 3CF420 */ extern MotionState ftMs_Init_MotionStateTable[ftMs_MS_SelfCount];
/* 3CF820 */ extern char ftMs_Init_DatFilename[];
/* 3CF82C */ extern char ftMs_Init_DataName[];
/* 3CF98C */ extern char ftMs_Init_AnimDatFilename[];
/* 3CFA08 */ extern Fighter_DemoStrings ftMs_Init_DemoMotionFilenames;
/* 3CFA18 */ extern Fighter_CostumeStrings ftMs_Init_CostumeStrings[];
/* 45A0F0 */ extern UnkCostumeStruct ftMs_CostumeList[5];
#define GALE01_138348
/* 138348 */ void ftMs_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 138940 */ void ftMs_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 13826C */ void ftMs_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 1384F0 */ void ftMs_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 13873C */ void ftMs_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 138884 */ void ftMs_SpecialHi_80138884(HSD_GObj* gobj);
/* 1382E8 */ void ftMs_SpecialHi_Anim(HSD_GObj* gobj);
/* 1388B4 */ void ftMs_SpecialHi_Coll(HSD_GObj* gobj);
/* 138208 */ void ftMs_SpecialHi_Enter(HSD_GObj* gobj);
/* 1383A8 */ void ftMs_SpecialHi_IASA(HSD_GObj* gobj);
/* 138638 */ void ftMs_SpecialHi_Phys(HSD_GObj* gobj);
#define GALE01_138B64
/* 138B64 */ void ftMs_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 138CFC */ void ftMs_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 138A30 */ void ftMs_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 138F14 */ void ftMs_SpecialAirLwHit_Anim(HSD_GObj* gobj);
/* 139044 */ void ftMs_SpecialAirLwHit_Coll(HSD_GObj* gobj);
/* 138FC4 */ void ftMs_SpecialAirLwHit_IASA(HSD_GObj* gobj);
/* 138FE8 */ void ftMs_SpecialAirLwHit_Phys(HSD_GObj* gobj);
/* 138C24 */ void ftMs_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 138C5C */ void ftMs_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 138D38 */ void ftMs_SpecialLw_80138D38(HSD_GObj* gobj);
/* 138DD0 */ void ftMs_SpecialLw_80138DD0(HSD_GObj* gobj);
/* 139080 */ void ftMs_SpecialLw_80139080(HSD_GObj* gobj);
/* 1390E0 */ void ftMs_SpecialLw_801390E0(HSD_GObj* gobj);
/* 139140 */ void ftMs_SpecialLw_80139140(HSD_GObj* gobj);
/* 138AA8 */ void ftMs_SpecialLw_Anim(HSD_GObj* gobj);
/* 138CC0 */ void ftMs_SpecialLw_Coll(HSD_GObj* gobj);
/* 1389CC */ void ftMs_SpecialLw_Enter(HSD_GObj* gobj);
/* 138E68 */ void ftMs_SpecialLwHit_Anim(HSD_GObj* gobj);
/* 139008 */ void ftMs_SpecialLwHit_Coll(HSD_GObj* gobj);
/* 138FC0 */ void ftMs_SpecialLwHit_IASA(HSD_GObj* gobj);
/* 138FC8 */ void ftMs_SpecialLwHit_Phys(HSD_GObj* gobj);
/* 138C20 */ void ftMs_SpecialLw_IASA(HSD_GObj* gobj);
/* 138C28 */ void ftMs_SpecialLw_Phys(HSD_GObj* gobj);
#define GALE01_137010
/* 136744 */ void ftMs_SpecialN_Enter(Fighter_GObj* gobj);
/* 1367B8 */ void ftMs_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 136844 */ void ftMs_SpecialNStart_Anim(Fighter_GObj* gobj);
/* 1368AC */ void ftMs_SpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 136914 */ void ftMs_SpecialNStart_IASA(Fighter_GObj* gobj);
/* 136918 */ void ftMs_SpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 13691C */ void ftMs_SpecialNStart_Phys(Fighter_GObj* gobj);
/* 13695C */ void ftMs_SpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 1369A4 */ void ftMs_SpecialNStart_Coll(Fighter_GObj* gobj);
/* 1369E0 */ void ftMs_SpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 136A1C */ void ftMs_SpecialN_80136A1C(Fighter_GObj* gobj);
/* 136A7C */ void ftMs_SpecialN_80136A7C(Fighter_GObj* gobj);
/* 136ADC */ void ftMs_SpecialNLoop_Anim(Fighter_GObj* gobj);
/* 136BB4 */ void ftMs_SpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 136C8C */ void ftMs_SpecialNLoop_IASA(Fighter_GObj* gobj);
/* 136CC4 */ void ftMs_SpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 136CFC */ void ftMs_SpecialNLoop_Phys(Fighter_GObj* gobj);
/* 136D1C */ void ftMs_SpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 136D3C */ void ftMs_SpecialNLoop_Coll(Fighter_GObj* gobj);
/* 136D78 */ void ftMs_SpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 136DB4 */ void ftMs_SpecialN_80136DB4(Fighter_GObj* gobj);
/* 136E14 */ void ftMs_SpecialN_80136E14(Fighter_GObj* gobj);
/* 136E74 */ void ftMs_SpecialN_80136E74(Fighter_GObj* gobj);
/* 136EAC */ void ftMs_SpecialN_80136EAC(Fighter_GObj* gobj);
/* 136EE4 */ void ftMs_SpecialNEnd_Anim(Fighter_GObj* gobj);
/* 137010 */ void ftMs_SpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 13713C */ void ftMs_SpecialNEnd_IASA(Fighter_GObj* gobj);
/* 137140 */ void ftMs_SpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 137144 */ void ftMs_SpecialNEnd_Phys(Fighter_GObj* gobj);
/* 137164 */ void ftMs_SpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 137184 */ void ftMs_SpecialNEnd_Coll(Fighter_GObj* gobj);
/* 1371C0 */ void ftMs_SpecialAirNEnd_Coll(Fighter_GObj* gobj);
/* 1371FC */ void ftMs_SpecialN_801371FC(Fighter_GObj* gobj);
/* 1372A8 */ void ftMs_SpecialN_801372A8(Fighter_GObj* gobj);
/* 137354 */ void ftMs_SpecialN_80137354(Fighter_GObj* gobj);
/* 1373B8 */ void ftMs_SpecialN_801373B8(Fighter_GObj* gobj);
#define GALE01_1374A0
/* 1374A0 */ void ftMs_SpecialAirS_Enter(HSD_GObj* gobj);
/* 137558 */ void ftMs_SpecialAirS1_Anim(HSD_GObj* gobj);
/* 13767C */ void ftMs_SpecialAirS1_Coll(HSD_GObj* gobj);
/* 1375B8 */ void ftMs_SpecialAirS1_IASA(HSD_GObj* gobj);
/* 137618 */ void ftMs_SpecialAirS1_Phys(HSD_GObj* gobj);
/* 1377B0 */ void ftMs_SpecialS2_Anim(HSD_GObj* gobj);
/* 1378D4 */ void ftMs_SpecialS2_Coll(HSD_GObj* gobj);
/* 137810 */ void ftMs_SpecialS2_IASA(HSD_GObj* gobj);
/* 137870 */ void ftMs_SpecialS2_Phys(HSD_GObj* gobj);
/* 137B34 */ void ftMs_SpecialS3_Anim(HSD_GObj* gobj);
/* 137C50 */ void ftMs_SpecialS3_Coll(HSD_GObj* gobj);
/* 137B94 */ void ftMs_SpecialS3_IASA(HSD_GObj* gobj);
/* 137BF4 */ void ftMs_SpecialS3_Phys(HSD_GObj* gobj);
/* 137ECC */ void ftMs_SpecialS4_Anim(HSD_GObj* gobj);
/* 137F8C */ void ftMs_SpecialS4_Coll(HSD_GObj* gobj);
/* 137F2C */ void ftMs_SpecialS4_IASA(HSD_GObj* gobj);
/* 137F30 */ void ftMs_SpecialS4_Phys(HSD_GObj* gobj);
/* 1376E8 */ void ftMs_SpecialS_801376E8(HSD_GObj* gobj);
/* 137748 */ void ftMs_SpecialS_80137748(HSD_GObj* gobj);
/* 137940 */ void ftMs_SpecialS_80137940(HSD_GObj* gobj);
/* 1379D0 */ void ftMs_SpecialS_801379D0(HSD_GObj* gobj);
/* 137A68 */ void ftMs_SpecialS_80137A68(HSD_GObj* gobj);
/* 137A9C */ void ftMs_SpecialS_80137A9C(HSD_GObj* gobj);
/* 137CBC */ void ftMs_SpecialS_80137CBC(HSD_GObj* gobj);
/* 137D60 */ void ftMs_SpecialS_80137D60(HSD_GObj* gobj);
/* 137E0C */ void ftMs_SpecialS_80137E0C(HSD_GObj* gobj);
/* 137FF8 */ void ftMs_SpecialS_80137FF8(HSD_GObj* gobj);
/* 13809C */ void ftMs_SpecialS_8013809C(HSD_GObj* gobj);
/* 138148 */ void ftMs_SpecialS_80138148(HSD_GObj* gobj);
/* 13741C */ void ftMs_SpecialS_Enter(HSD_GObj* gobj);
#define GALE01_14FC68
/* 14FC68 */ void ftMh_Init_OnDeath(HSD_GObj* gobj);
/* 14FC6C */ void ftMh_Init_OnLoad(HSD_GObj* gobj);
/* 14FDD0 */ void ftMh_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 3D3A30 */ extern MotionState ftMh_Init_MotionStateTable[ftMh_MS_SelfCount];
/* 3D4070 */ extern char ftMh_Init_DatFilename[];
/* 3D407C */ extern char ftMh_Init_DataName[];
/* 3D40B8 */ extern char ftMh_Init_AnimDatFilename[];
/* 3D40C4 */ extern Fighter_CostumeStrings ftMh_Init_CostumeStrings[];
/* 45A690 */ extern UnkCostumeStruct ftMh_CostumeList[1];
#define GALE01_15386C
/* 15386C */ void ftMh_BackAirplane1_Anim(HSD_GObj* gobj);
/* 1538A8 */ void ftMh_BackAirplane1_IASA(HSD_GObj* gobj);
/* 1538EC */ void ftMh_BackAirplane1_Phys(HSD_GObj* gobj);
/* 15390C */ void ftMh_BackAirplane1_Coll(HSD_GObj* gobj);
/* 1539A4 */ void ftMh_BackAirplane2_Anim(HSD_GObj* gobj);
#define GALE01_1539EC
/* 1539EC */ void ftMh_BackAirplane2_IASA(HSD_GObj* gobj);
/* 153A30 */ void ftMh_BackAirplane2_Phys(HSD_GObj* gobj);
/* 153A60 */ void ftMh_BackAirplane2_Coll(HSD_GObj* gobj);
/* 153A64 */ void ftMh_MS_368_80153A64(HSD_GObj* gobj);
/// @file
/// 19 Ram
#define GALE01_153AEC
/* 153AEC */ void ftMh_BackAirplane3_Anim(HSD_GObj* gobj);
/* 153B28 */ void ftMh_BackAirplane3_IASA(HSD_GObj* gobj);
/* 153B6C */ void ftMh_BackAirplane3_Phys(HSD_GObj* gobj);
/* 153B8C */ void ftMh_BackAirplane3_Coll(HSD_GObj* gobj);
/* 153B90 */ void ftMh_MS_369_80153B90(HSD_GObj* gobj);
/* 153C48 */ void ftMh_BackPunch_Anim(HSD_GObj* gobj);
/* 153C90 */ void ftMh_BackPunch_IASA(HSD_GObj* gobj);
/* 153CD4 */ void ftMh_BackPunch_Phys(HSD_GObj* gobj);
/// @file
/// 20 Crush
#define GALE01_153D28
/* 153D28 */ void ftMh_BackPunch_Coll(HSD_GObj* gobj);
/* 153D2C */ void ftMh_MS_370_80153D2C(HSD_GObj* gobj);
/* 153F8C */ void ftMh_BackCrush_Anim(HSD_GObj* gobj);
/* 154114 */ void ftMh_BackCrush_IASA(HSD_GObj* gobj);
/* 154158 */ void ftMh_BackCrush_Phys(HSD_GObj* gobj);
#define GALE01_1541C4
/* 1541C4 */ void ftMh_BackCrush_Coll(HSD_GObj* gobj);
/* 1541C8 */ void ftMh_MS_371_801541C8(HSD_GObj* gobj, HSD_GObjEvent);
#define GALE01_154230
/* 154230 */ void ftMh_BackDisappear_Anim(HSD_GObj* gobj);
/* 154278 */ void ftMh_BackDisappear_IASA(HSD_GObj* gobj);
/* 1542BC */ void ftMh_BackDisappear_Phys(HSD_GObj* gobj);
/* 1542DC */ void ftMh_BackDisappear_Coll(HSD_GObj* gobj);
/* 1542E0 */ void ftMh_MS_372_801542E0(HSD_GObj* gobj);
/* 154360 */ void ftMh_Wait1_1_Anim(HSD_GObj* gobj);
/* 1543E8 */ void ftMh_Wait1_1_IASA(HSD_GObj* gobj);
/* 15442C */ void ftMh_Wait1_1_Phys(HSD_GObj* gobj);
/* 15459C */ void ftMh_Wait1_1_Coll(HSD_GObj* gobj);
/* 1545A0 */ void ftMh_MS_373_801545A0(HSD_GObj* gobj);
/* 154620 */ void ftMh_Grab_Anim(HSD_GObj* gobj);
/* 154670 */ void ftMh_Grab_IASA(HSD_GObj* gobj);
/* 1546B4 */ void ftMh_Grab_Phys(HSD_GObj* gobj);
/* 1546D4 */ void ftMh_Grab_Coll(HSD_GObj* gobj);
/* 1546D8 */ void ftMh_MS_374_801546D8(HSD_GObj* gobj);
/* 154758 */ void ftMh_Fail_Anim(HSD_GObj* gobj);
/* 154794 */ void ftMh_Fail_IASA(HSD_GObj* gobj);
/* 1547D8 */ void ftMh_Fail_Phys(HSD_GObj* gobj);
/* 154838 */ void ftMh_Fail_Coll(HSD_GObj* gobj);
/* 15483C */ void ftMh_MS_381_8015483C(HSD_GObj* gobj);
/* 1548D8 */ void ftMh_Cancel_Anim(HSD_GObj* gobj);
/* 154964 */ void ftMh_Cancel_IASA(HSD_GObj* gobj);
/* 1549A8 */ void ftMh_Cancel_Phys(HSD_GObj* gobj);
/* 154A08 */ void ftMh_Cancel_Coll(HSD_GObj* gobj);
/* 154A2C */ void ftMh_MS_375_80154A2C(HSD_GObj* gobj);
#define GALE01_155C94
/* 155C94 */ void ftMh_CaptureDamageMasterHand_80155C94(HSD_GObj* gobj);
/* 155C20 */ void ftMh_CaptureDamageMasterHand_Anim(HSD_GObj* gobj);
/* 155C90 */ void ftMh_CaptureDamageMasterHand_Coll(HSD_GObj* gobj);
/* 155C88 */ void ftMh_CaptureDamageMasterHand_IASA(HSD_GObj* gobj);
/* 155C8C */ void ftMh_CaptureDamageMasterHand_Phys(HSD_GObj* gobj);
#define GALE01_155C20
/* 155B70 */ void ftMh_CaptureMasterHand_Anim(HSD_GObj* gobj);
/* 155B74 */ void ftMh_CaptureMasterHand_IASA(HSD_GObj* gobj);
/* 155B78 */ void ftMh_CaptureMasterHand_Phys(HSD_GObj* gobj);
/* 155B7C */ void ftMh_CaptureMasterHand_Coll(HSD_GObj* gobj);
/* 155B80 */ void ftMh_CaptureMasterHand_80155B80(HSD_GObj* gobj);
#define GALE01_151428
/* 151428 */ bool ftMh_MS_343_80151428(Vec3* vec);
/* 151484 */ void ftMh_MS_343_80151484(HSD_GObj* gobj);
/* 1515B8 */ void ftMh_Damage_Anim(HSD_GObj* gobj);
/* 1516B4 */ void ftMh_MS_345_Anim(HSD_GObj* gobj);
/// @file
/// 10 Drill
#define GALE01_152138
/* 152138 */ void ftMh_WalkWait_Anim(HSD_GObj* gobj);
/* 152174 */ void ftMh_WalkWait_IASA(HSD_GObj* gobj);
/* 1521B8 */ void ftMh_WalkWait_Phys(HSD_GObj* gobj);
/* 1521D8 */ void ftMh_WalkWait_Coll(HSD_GObj* gobj);
/* 1521DC */ void ftMh_MS_352_801521DC(HSD_GObj* gobj);
/* 15223C */ void ftMh_Drill_Anim(HSD_GObj* gobj);
/* 152278 */ void ftMh_Drill_IASA(HSD_GObj* gobj);
/* 1522BC */ void ftMh_Drill_Phys(HSD_GObj* gobj);
#define GALE01_1510B0
/* 1510B0 */ void ftMh_MS_343_801510B0(HSD_GObj* gobj);
/* 151168 */ void ftMh_Entry_Anim(HSD_GObj* gobj);
/* 1511B0 */ void ftMh_Entry_IASA(HSD_GObj* gobj);
/* 1511F4 */ void ftMh_Entry_Phys(HSD_GObj* gobj);
/* 1511F8 */ void ftMh_Entry_Coll(HSD_GObj* gobj);
/// @file
/// 14 Lasers
#define GALE01_152BC8
/* 152BC8 */ void ftMh_Poke1_Coll(HSD_GObj* gobj);
/* 152BCC */ void ftMh_MS_359_80152BCC(HSD_GObj* gobj);
/* 152C34 */ void ftMh_FingerBeamStart_Anim(HSD_GObj* gobj);
/* 152C70 */ void ftMh_FingerBeamStart_IASA(HSD_GObj* gobj);
/* 152CB4 */ void ftMh_FingerBeamStart_Phys(HSD_GObj* gobj);
/* 152CD4 */ void ftMh_FingerBeamStart_Coll(HSD_GObj* gobj);
/* 152CD8 */ void ftMh_MS_361_80152CD8(HSD_GObj* gobj);
/* 152D44 */ void ftMh_FingerBeamLoop_Anim(HSD_GObj* gobj);
/* 152DC0 */ void ftMh_FingerBeamLoop_IASA(HSD_GObj* gobj);
/* 152E04 */ void ftMh_FingerBeamLoop_Phys(HSD_GObj* gobj);
/* 152E24 */ void ftMh_FingerBeamLoop_Coll(HSD_GObj* gobj);
/* 152E28 */ void ftMh_MS_362_80152E28(HSD_GObj* gobj);
#define GALE01_153000
/* 153000 */ void ftMh_FingerBeamEnd_Anim(HSD_GObj* gobj);
/* 15303C */ void ftMh_FingerBeamEnd_IASA(HSD_GObj* gobj);
/* 153080 */ void ftMh_FingerBeamEnd_Phys(HSD_GObj* gobj);
/* 1530A0 */ void ftMh_FingerBeamEnd_Coll(HSD_GObj* gobj);
/* 1530A4 */ void ftMh_MS_363_801530A4(HSD_GObj* gobj);
/* 153160 */ void ftMh_FingerGun1_Anim(HSD_GObj* gobj);
/* 153210 */ void ftMh_FingerGun1_IASA(HSD_GObj* gobj);
/* 153254 */ void ftMh_FingerGun1_Phys(HSD_GObj* gobj);
/* 1533C8 */ void ftMh_FingerGun1_Coll(HSD_GObj* gobj);
/* 1533CC */ void ftMh_MS_364_801533CC(HSD_GObj* gobj);
/* 15346C */ void ftMh_FingerGun2_Anim(HSD_GObj* gobj);
/* 153548 */ void ftMh_FingerGun2_IASA(HSD_GObj* gobj);
/* 15358C */ void ftMh_FingerGun2_Phys(HSD_GObj* gobj);
/* 1535AC */ void ftMh_FingerGun2_Coll(HSD_GObj* gobj);
/* 1535B0 */ void ftMh_MS_365_801535B0(HSD_GObj* gobj);
/* 153730 */ void ftMh_MS_365_80153730(HSD_GObj* gobj);
#define GALE01_15377C
/* 15377C */ void ftMh_FingerGun3_Anim(HSD_GObj* gobj);
/* 1537B8 */ void ftMh_FingerGun3_IASA(HSD_GObj* gobj);
/* 1537FC */ void ftMh_FingerGun3_Phys(HSD_GObj* gobj);
/* 15381C */ void ftMh_FingerGun3_Coll(HSD_GObj* gobj);
/* 153820 */ void ftMh_MS_366_80153820(HSD_GObj* gobj);
/// @file
/// 12 Ground Slap
#define GALE01_152634
/* 152634 */ void ftMh_RockCrushDown_Anim(HSD_GObj* gobj);
/* 152670 */ void ftMh_RockCrushDown_IASA(HSD_GObj* gobj);
/* 1526B4 */ void ftMh_RockCrushDown_Phys(HSD_GObj* gobj);
/* 1526D4 */ void ftMh_RockCrushDown_Coll(HSD_GObj* gobj);
/* 1526D8 */ void ftMh_MS_357_801526D8(HSD_GObj* gobj);
/* 152738 */ void ftMh_PaperCrush_Anim(HSD_GObj* gobj);
/* 152774 */ void ftMh_PaperCrush_IASA(HSD_GObj* gobj);
/* 1527B8 */ void ftMh_PaperCrush_Phys(HSD_GObj* gobj);
#define GALE01_15287C
/* 15287C */ void ftMh_PaperCrush_Coll(HSD_GObj* gobj);
/* 152880 */ void ftMh_MS_358_80152880(HSD_GObj* gobj);
/* 152928 */ void ftMh_Poke1_Anim(HSD_GObj* gobj);
/* 1529D0 */ void ftMh_Poke2_Anim(HSD_GObj* gobj);
/* 152A0C */ void ftMh_Poke1_IASA(HSD_GObj* gobj);
/* 152A50 */ void ftMh_Poke1_Phys(HSD_GObj* gobj);
/// @file
/// 11 Punch
#define GALE01_15236C
/* 15236C */ void ftMh_Drill_Coll(HSD_GObj* gobj);
/* 152370 */ void ftMh_MS_354_80152370(HSD_GObj* gobj);
/* 1523BC */ void ftMh_RockCrushUp_Anim(HSD_GObj* gobj);
/* 152414 */ void ftMh_RockCrushUp_IASA(HSD_GObj* gobj);
/* 152458 */ void ftMh_RockCrushUp_Phys(HSD_GObj* gobj);
/* 152478 */ void ftMh_RockCrushUp_Coll(HSD_GObj* gobj);
/* 15247C */ void ftMh_MS_355_8015247C(HSD_GObj* gobj);
/* 1524C8 */ void ftMh_RockCrushWait_Anim(HSD_GObj* gobj);
/* 152544 */ void ftMh_RockCrushWait_IASA(HSD_GObj* gobj);
/* 152588 */ void ftMh_RockCrushWait_Phys(HSD_GObj* gobj);
/* 1525DC */ void ftMh_RockCrushWait_Coll(HSD_GObj* gobj);
/* 1525E0 */ void ftMh_MS_356_801525E0(HSD_GObj* gobj);
/// @file
/// 27 Crazy Hand Combo Attack 1
#define GALE01_155074
/* 155074 */ void ftMh_Slam_Anim(HSD_GObj* gobj);
/* 15512C */ void ftMh_Slam_IASA(HSD_GObj* gobj);
/* 155170 */ void ftMh_Slam_Phys(HSD_GObj* gobj);
/* 155190 */ void ftMh_Slam_Coll(HSD_GObj* gobj);
/* 155194 */ void ftMh_MS_380_80155194(HSD_GObj* gobj);
#define GALE01_151C04
/* 151C04 */ void ftMh_Slap_Anim(HSD_GObj* gobj);
/* 151C40 */ void ftMh_Slap_IASA(HSD_GObj* gobj);
/* 151C84 */ void ftMh_Slap_Phys(HSD_GObj* gobj);
/* 151CA4 */ void ftMh_Slap_Coll(HSD_GObj* gobj);
/* 151CA8 */ void ftMh_MS_349_80151CA8(HSD_GObj* gobj);
#define GALE01_154A78
/* 154A78 */ void ftMh_MS_378_80154A78(HSD_GObj* gobj);
/* 154B2C */ void ftMh_Squeeze_Anim(HSD_GObj* gobj);
/* 154BB0 */ void ftMh_Squeeze_IASA(HSD_GObj* gobj);
/* 154BF4 */ void ftMh_Squeeze_Phys(HSD_GObj* gobj);
/* 154C54 */ void ftMh_Squeeze_Coll(HSD_GObj* gobj);
#define GALE01_154D78
/* 154D78 */ void ftMh_Squeezing_Anim(HSD_GObj* gobj);
/* 154DD0 */ void ftMh_Squeezing_IASA(HSD_GObj* gobj);
/* 154E14 */ void ftMh_Squeezing_Phys(HSD_GObj* gobj);
/* 154E74 */ void ftMh_Squeezing_Coll(HSD_GObj* gobj);
/* 154E78 */ void ftMh_MS_376_80154E78(HSD_GObj* gobj);
/* 154ED8 */ void ftMh_Throw_Anim(HSD_GObj* gobj);
#define GALE01_151828
/* 1517B0 */ void ftMh_Damage_IASA(HSD_GObj* gobj);
/* 1517F4 */ void ftMh_Damage_Phys(HSD_GObj* gobj);
/* 151824 */ void ftMh_Damage_Coll(HSD_GObj* gobj);
/* 151828 */ void ftMh_MS_344_80151828(HSD_GObj* gobj);
/* 151874 */ void ftMh_WaitSweep_Anim(HSD_GObj* gobj);
/* 1518B0 */ void ftMh_WaitSweep_IASA(HSD_GObj* gobj);
/* 1518F4 */ void ftMh_WaitSweep_Phys(HSD_GObj* gobj);
/* 151914 */ void ftMh_WaitSweep_Coll(HSD_GObj* gobj);
/* 151918 */ void ftMh_MS_346_80151918(HSD_GObj* gobj);
/* 15198C */ void ftMh_SweepLoop_Anim(HSD_GObj* gobj);
/* 151A44 */ void ftMh_SweepLoop_IASA(HSD_GObj* gobj);
/* 151A88 */ void ftMh_SweepLoop_Phys(HSD_GObj* gobj);
/* 151AC4 */ void ftMh_SweepLoop_Coll(HSD_GObj* gobj);
#define GALE01_151B14
/* 151B14 */ void ftMh_SweepWait_Anim(HSD_GObj* gobj);
/* 151B50 */ void ftMh_SweepWait_Phys(HSD_GObj* gobj);
/* 151B70 */ void ftMh_SweepWait_IASA(HSD_GObj* gobj);
/* 151BB4 */ void ftMh_SweepWait_Coll(HSD_GObj* gobj);
/* 151BB8 */ void ftMh_MS_348_80151BB8(HSD_GObj* gobj);
/// @file
/// 29 Crazy Hand Combo Attack 3
#define GALE01_155388
/* 155388 */ void ftMh_TagApplaud_Anim(HSD_GObj* gobj);
/* 15541C */ void ftMh_TagApplaud_IASA(HSD_GObj* gobj);
/* 155460 */ void ftMh_TagApplaud_Phys(HSD_GObj* gobj);
/* 155480 */ void ftMh_TagApplaud_Coll(HSD_GObj* gobj);
/* 155484 */ void ftMh_MS_383_80155484(HSD_GObj* gobj);
#define GALE01_155A58
/* 155A58 */ void ftMh_MS_388_80155A58(HSD_GObj* gobj, HSD_GObj* gobj2);
/// @file
/// 28 Crazy Hand Combo Attack 2
#define GALE01_15521C
/* 15521C */ void ftMh_TagCrush_Anim(HSD_GObj* gobj);
/* 155290 */ void ftMh_TagCrush_IASA(HSD_GObj* gobj);
/* 1552D4 */ void ftMh_TagCrush_Phys(HSD_GObj* gobj);
/* 1552F4 */ void ftMh_TagCrush_Coll(HSD_GObj* gobj);
/* 1552F8 */ void ftMh_MS_382_801552F8(HSD_GObj* gobj);
#define GALE01_15550C
/* 15550C */ void ftMh_TagRockPaper_Anim(HSD_GObj* gobj);
/* 155580 */ void ftMh_TagRockPaper_IASA(HSD_GObj* gobj);
/* 1555C4 */ void ftMh_TagRockPaper_Phys(HSD_GObj* gobj);
/* 1555E4 */ void ftMh_TagRockPaper_Coll(HSD_GObj* gobj);
/* 1555E8 */ void ftMh_TagGrab_Anim(HSD_GObj* gobj);
/* 15565C */ void ftMh_TagGrab_IASA(HSD_GObj* gobj);
/* 1556A0 */ void ftMh_TagGrab_Phys(HSD_GObj* gobj);
/* 1556C0 */ void ftMh_TagGrab_Coll(HSD_GObj* gobj);
/* 1556C4 */ void ftMh_TagSqueeze_Anim(HSD_GObj* gobj);
/* 1557B0 */ void ftMh_TagSqueeze_IASA(HSD_GObj* gobj);
/* 1557F4 */ void ftMh_TagSqueeze_Phys(HSD_GObj* gobj);
/* 155814 */ void ftMh_TagSqueeze_Coll(HSD_GObj* gobj);
/* 155864 */ void ftMh_TagFail_Anim(HSD_GObj* gobj);
/* 1558A0 */ void ftMh_TagFail_IASA(HSD_GObj* gobj);
/* 1558E4 */ void ftMh_TagFail_Phys(HSD_GObj* gobj);
/* 155904 */ void ftMh_TagFail_Coll(HSD_GObj* gobj);
/* 155908 */ void ftMh_TagCancel_Anim(HSD_GObj* gobj);
/* 155990 */ void ftMh_TagCancel_IASA(HSD_GObj* gobj);
/* 1559D4 */ void ftMh_TagCancel_Phys(HSD_GObj* gobj);
/* 155A34 */ void ftMh_TagCancel_Coll(HSD_GObj* gobj);
#define GALE01_154FAC
/* 154FAC */ void ftMh_Throw_IASA(HSD_GObj* gobj);
/* 154FF0 */ void ftMh_Throw_Phys(HSD_GObj* gobj);
/* 155010 */ void ftMh_Throw_Coll(HSD_GObj* gobj);
/* 155014 */ void ftMh_MS_379_80155014(HSD_GObj* gobj);
#define GALE01_155D1C
/* 155D1C */ void ftMh_CaptureWaitMasterHand_80155D1C(HSD_GObj* gobj);
/* 155D5C */ void ftMh_CaptureWaitMasterHand_Anim(HSD_GObj* gobj);
/* 155D60 */ void ftMh_CaptureWaitMasterHand_IASA(HSD_GObj* gobj);
/* 155D64 */ void ftMh_CaptureWaitMasterHand_Phys(HSD_GObj* gobj);
/* 155D68 */ void ftMh_CaptureWaitMasterHand_Coll(HSD_GObj* gobj);
/* 155D6C */ void ftMh_CaptureWaitMasterHand_80155D6C(HSD_GObj* gobj,
                                                      s32 arg1);
/* 155E08 */ void ftMh_ThrownMasterHand_Anim(HSD_GObj* gobj);
/* 155E0C */ void ftMh_ThrownMasterHand_IASA(HSD_GObj* gobj);
/* 155E10 */ void ftMh_ThrownMasterHand_Phys(HSD_GObj* gobj);
/* 155E14 */ void ftMh_ThrownMasterHand_Coll(HSD_GObj* gobj);
#define GALE01_14FE10
/* 14FE10 */ void ftMh_MS_341_8014FE10(HSD_GObj* gobj);
/* 14FE58 */ void ftMh_MS_341_8014FE58(HSD_GObj* gobj);
/* 14FF1C */ void ftMh_MS_341_8014FF1C(HSD_GObj* gobj);
/* 14FFDC */ void ftMh_MS_341_8014FFDC(HSD_GObj* gobj);
/* 150230 */ void ftMh_Wait1_0_Anim(HSD_GObj* gobj);
/* 15082C */ void ftMh_Wait1_0_IASA(HSD_GObj* gobj);
/* 150870 */ void ftMh_Wait1_0_Phys(HSD_GObj* gobj);
/* 150890 */ void ftMh_Wait1_0_Coll(HSD_GObj* gobj);
/* 150894 */ void ftMh_MS_341_80150894(HSD_GObj* gobj);
#define GALE01_154C78
/* 154C78 */ void ftMh_MS_375_80154C78(HSD_GObj* gobj);
/* 154CF8 */ void ftMh_MS_378_80154CF8(HSD_GObj* gobj);
#define GALE01_150C8C
/* 150C8C */ void ftMh_MS_389_80150C8C(HSD_GObj* gobj);
/* 150D28 */ void ftMh_MS_389_80150D28(HSD_GObj* gobj);
/* 150DC4 */ void ftMh_MS_389_80150DC4(HSD_GObj* gobj, HSD_GObjEvent, Vec3*);
/* 150F00 */ void ftMh_Wait1_2_Anim(HSD_GObj* gobj);
/* 150F68 */ void ftMh_Wait1_2_Phys(HSD_GObj* gobj);
/* 150FC8 */ void ftMh_Wait1_2_Coll(HSD_GObj* gobj);
/* 151018 */ void ftMh_MS_389_80151018(HSD_GObj* gobj);
/// @file
/// 9 Walk
#define GALE01_151D20
/* 151D20 */ void ftMh_WalkShoot_Anim(HSD_GObj* gobj);
/* 151D5C */ void ftMh_WalkShoot_IASA(HSD_GObj* gobj);
/* 151DA0 */ void ftMh_WalkShoot_Phys(HSD_GObj* gobj);
/* 151DC0 */ void ftMh_WalkShoot_Coll(HSD_GObj* gobj);
/* 151DC4 */ void ftMh_MS_353_80151DC4(HSD_GObj* gobj);
/* 151E10 */ void ftMh_Walk2_Anim(HSD_GObj* gobj);
/* 151E4C */ void ftMh_Walk2_IASA(HSD_GObj* gobj);
/* 151E90 */ void ftMh_Walk2_Phys(HSD_GObj* gobj);
/* 151EB0 */ void ftMh_Walk2_Coll(HSD_GObj* gobj);
/* 151EB4 */ void ftMh_MS_350_80151EB4(HSD_GObj* gobj);
/* 151F00 */ void ftMh_WalkLoop_Anim(HSD_GObj* gobj);
/* 15204C */ void ftMh_WalkLoop_IASA(HSD_GObj* gobj);
/* 152090 */ void ftMh_WalkLoop_Phys(HSD_GObj* gobj);
/* 1520D4 */ void ftMh_WalkLoop_Coll(HSD_GObj* gobj);
/* 1520D8 */ void ftMh_MS_351_801520D8(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTMASTERHAND_INLINES_H
static inline void ftMh_UpdateBossMotion(HSD_GObj* gobj, Fighter* fp,
                                         ftMasterHand_SpecialAttrs* da)
{
    ft_80085134(gobj);
    ftBossLib_8015BE40(gobj, &fp->mv.mh.unk0.xC, &fp->mv.mh.unk0.x18, da->x2C,
                       da->x28);
}
#define MELEE_FT_CHARA_FTMEWTWO_FORWARD_H
static MotionFlags const ftMt_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftMt_MF_SpecialHiStart =
    ftMt_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftMt_MF_SpecialNStart =
    ftMt_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftMt_MF_SpecialLw =
    ftMt_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipThrowException;
static MotionFlags const ftMt_MF_SpecialAirHiStart =
    ftMt_MF_SpecialHiStart | Ft_MF_SkipParasol;
static MotionFlags const ftMt_MF_SpecialAirNStart =
    ftMt_MF_SpecialNStart | Ft_MF_SkipParasol;
static MotionFlags const ftMt_MF_SpecialAirLw =
    ftMt_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftMt_MF_SpecialS =
    ftMt_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipColAnim;
static MotionFlags const ftMt_MF_SpecialAirS =
    ftMt_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftMt_MF_SpecialN =
    ftMt_MF_SpecialNStart | Ft_MF_Unk19;
static MotionFlags const ftMt_MF_SpecialAirN =
    ftMt_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftMt_MF_SpecialN_Coll = ftCommon_GroundAirColl_MF;
static MotionFlags const ftMt_MF_SpecialNLoop_Coll =
    ftMt_MF_SpecialN_Coll | Ft_MF_KeepSfx;
typedef enum ftMewtwo_MotionState {
    ftMt_MS_SpecialNStart = ftCo_MS_Count,
    ftMt_MS_SpecialNLoop,
    ftMt_MS_SpecialNLoopFull,
    ftMt_MS_SpecialNCancel,
    ftMt_MS_SpecialNEnd,
    ftMt_MS_SpecialAirNStart,
    ftMt_MS_SpecialAirNLoop,
    ftMt_MS_SpecialAirNLoopFull,
    ftMt_MS_SpecialAirNCancel,
    ftMt_MS_SpecialAirNEnd,
    ftMt_MS_SpecialS,
    ftMt_MS_SpecialAirS,
    ftMt_MS_SpecialHiStart,
    ftMt_MS_SpecialHiLost,
    ftMt_MS_SpecialHi,
    ftMt_MS_SpecialAirHiStart,
    ftMt_MS_SpecialAirHiLost,
    ftMt_MS_SpecialAirHi,
    ftMt_MS_SpecialLw,
    ftMt_MS_SpecialAirLw,
    ftMt_MS_Count,
    ftMt_MS_SelfCount = ftMt_MS_Count - ftCo_MS_Count,
} ftMewtwo_MotionState;
typedef enum ftMt_Submotion {
    ftMt_SM_SpecialNStart = ftCo_SM_Count,
    ftMt_SM_SpecialNLoop,
    ftMt_SM_SpecialNLoopFull,
    ftMt_SM_SpecialNCancel,
    ftMt_SM_SpecialNEnd,
    ftMt_SM_SpecialAirNStart,
    ftMt_SM_SpecialAirNLoop,
    ftMt_SM_SpecialAirNLoopFull,
    ftMt_SM_SpecialAirNCancel,
    ftMt_SM_SpecialAirNEnd,
    ftMt_SM_SpecialS,
    ftMt_SM_SpecialAirS,
    ftMt_SM_SpecialHiStart,
    ftMt_SM_SpecialHi,
    ftMt_SM_SpecialHiLost,
    ftMt_SM_SpecialAirHiStart,
    ftMt_SM_SpecialAirHi,
    ftMt_SM_SpecialLw,
    ftMt_SM_SpecialAirLw,
    ftMt_SM_Count,
    ftMt_SM_SelfCount = ftMt_SM_Count - ftCo_SM_Count,
} ftMt_Submotion;
#define GALE01_144DFC
/* 144DFC */ void ftMt_Init_OnDeath2(HSD_GObj* gobj);
/* 144E48 */ void ftMt_Init_OnLoad(HSD_GObj* gobj);
/* 144EE0 */ void ftMt_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 144EE4 */ void ftMt_Init_OnDeath(HSD_GObj* gobj);
/* 144F18 */ void ftMt_Init_OnTakeDamage(HSD_GObj* gobj);
/* 144F4C */ void ftMt_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 144F50 */ void ftMt_Init_OnItemInvisible(HSD_GObj* gobj);
/* 144F54 */ void ftMt_Init_OnItemVisible(HSD_GObj* gobj);
/* 144F58 */ void ftMt_Init_UnkMotionStates4(HSD_GObj* gobj);
/* 144FB4 */ void ftMt_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 145018 */ void ftMt_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 14505C */ void ftMt_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3D0B00 */ extern MotionState ftMt_Init_MotionStateTable[ftMt_MS_SelfCount];
/* 3D0D80 */ extern char ftMt_Init_DatFilename[];
/* 3D0D8C */ extern char ftMt_Init_DataName[];
/* 3D0EC4 */ extern char ftMt_Init_AnimDatFilename[];
/* 3D0F4C */ extern Fighter_DemoStrings ftMt_Init_DemoMotionFilenames;
/* 3D0F5C */ extern Fighter_CostumeStrings ftMt_Init_CostumeStrings[];
/* 45A2D0 */ extern UnkCostumeStruct ftMt_CostumeList[4];
/// @file
/// Up Special - Teleport (SpecialHi/SpecialAirHi)
#define GALE01_1450A0
/* 1450A0 */ void ftMt_SpecialHi_CreateGFX(HSD_GObj* gobj);
/* 1450D4 */ void ftMt_SpecialHi_SetStartGFX(HSD_GObj* gobj);
/* 145164 */ void ftMt_SpecialHi_SetEndGFX(HSD_GObj* gobj);
/* 1451DC */ void ftMt_SpecialHiStart_Enter(HSD_GObj* gobj);
/* 145258 */ void ftMt_SpecialAirHiStart_Enter(HSD_GObj* gobj);
/* 1452EC */ void ftMt_SpecialHiStart_Anim(HSD_GObj* gobj);
/* 145328 */ void ftMt_SpecialAirHiStart_Anim(HSD_GObj* gobj);
/* 145364 */ void ftMt_SpecialHiStart_IASA(HSD_GObj* gobj);
/* 145368 */ void ftMt_SpecialAirHiStart_IASA(HSD_GObj* gobj);
/* 14536C */ void ftMt_SpecialHiStart_Phys(HSD_GObj* gobj);
/* 14538C */ void ftMt_SpecialAirHiStart_Phys(HSD_GObj* gobj);
/* 1453D0 */ void ftMt_SpecialHiStart_Coll(HSD_GObj* gobj);
/* 14540C */ void ftMt_SpecialAirHiStart_Coll(HSD_GObj* gobj);
/* 14547C */ void ftMt_SpecialHiStart_GroundToAir(HSD_GObj* gobj);
/* 1454E8 */ void ftMt_SpecialAirHiStart_AirToGround(HSD_GObj* gobj);
/* 145554 */ void ftMt_SpecialHiLost_Anim(HSD_GObj* gobj);
/* 145590 */ void ftMt_SpecialAirHiLost_Anim(HSD_GObj* gobj);
/* 1455CC */ void ftMt_SpecialHiLost_IASA(HSD_GObj* gobj);
/* 1455D0 */ void ftMt_SpecialAirHiLost_IASA(HSD_GObj* gobj);
/* 1455D4 */ void ftMt_SpecialHiLost_Phys(HSD_GObj* gobj);
/* 1455F4 */ void ftMt_SpecialAirHiLost_Phys(HSD_GObj* gobj);
/* 1455F8 */ void ftMt_SpecialHiLost_Coll(HSD_GObj* gobj);
/* 145698 */ void ftMt_SpecialAirHiLost_Coll(HSD_GObj* gobj);
/* 1458A4 */ void ftMt_SpecialHi_GroundToAir(HSD_GObj* gobj);
/* 145920 */ void ftMt_SpecialAirHi_AirToGround(HSD_GObj* gobj);
/* 145990 */ void ftMt_SpecialHi_Enter(HSD_GObj* gobj);
/* 145B94 */ void ftMt_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 145DB0 */ void ftMt_SpecialHi_Anim(HSD_GObj* gobj);
/* 145DEC */ void ftMt_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 145E4C */ void ftMt_SpecialHi_IASA(HSD_GObj* gobj);
/* 145E50 */ void ftMt_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 145E54 */ void ftMt_SpecialHi_Phys(HSD_GObj* gobj);
/* 145E74 */ void ftMt_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 145EF0 */ void ftMt_SpecialHi_Coll(HSD_GObj* gobj);
/* 145F2C */ void ftMt_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 145FB0 */ void ftMt_SpecialHiLost_GroundToAir(HSD_GObj* gobj);
/* 146010 */ void ftMt_SpecialHiLost_Enter(HSD_GObj* gobj);
/* 1460CC */ void ftMt_SpecialAirHiLost_Enter(HSD_GObj* gobj);
/// @file
/// Down Special - Disable (SpecialLw/SpecialAirLw)
#define GALE01_146198
/* 146198 */ void ftMt_SpecialLw_ClearDisableGObj(HSD_GObj* gobj);
/* 1461A8 */ void ftMt_SpecialLw_RemoveDisable(HSD_GObj* gobj);
/* 1461F0 */ void ftMt_SpecialLw_Enter(HSD_GObj* gobj);
/* 146264 */ void ftMt_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 1462DC */ void ftMt_SpecialLw_Anim(HSD_GObj* gobj);
/* 146338 */ void ftMt_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 146394 */ void ftMt_SpecialLw_IASA(HSD_GObj* gobj);
/* 146398 */ void ftMt_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 14639C */ void ftMt_SpecialLw_Phys(HSD_GObj* gobj);
/* 1463BC */ void ftMt_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 146410 */ void ftMt_SpecialLw_GroundToAir(HSD_GObj* gobj);
/* 1464B0 */ void ftMt_SpecialAirLw_AirToGround(HSD_GObj* gobj);
/* 146544 */ void ftMt_SpecialLw_Coll(HSD_GObj* gobj);
/* 14656C */ void ftMt_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 146594 */ void ftMt_SpecialLw_CreateDisable(HSD_GObj* gobj);
/// @file
/// Neutral Special - Shadow Ball (SpecialN/SpecialAirN)
#define GALE01_146CCC
/* 146CCC */ s32 ftMt_SpecialN_GetChargeLevel(HSD_GObj* gobj, s32* chargeLevel,
                                              s32* chargeCycles);
/* 146D24 */ bool ftMt_SpecialN_CheckShadowBallRemove(HSD_GObj* gobj);
/* 146D74 */ bool ftMt_SpecialN_CheckShadowBallCancel(HSD_GObj* gobj);
/* 146DC8 */ void ftMt_SpecialN_SetNULL(HSD_GObj* gobj);
/* 146E30 */ void ftMt_SpecialN_OnTakeDamage(HSD_GObj* gobj);
/* 146ED0 */ void ftMt_SpecialN_OnDeath(HSD_GObj* gobj);
/* 146FA8 */ void ftMt_SpecialN_ReleaseShadowBall(HSD_GObj* gobj);
/* 1471C8 */ void ftMt_SpecialN_PlayChargeSFX(HSD_GObj* gobj);
/* 147320 */ void ftMt_SpecialN_Enter(HSD_GObj* gobj);
/* 1473F4 */ void ftMt_SpecialAirN_Enter(HSD_GObj* gobj);
/* 1474C0 */ void ftMt_SpecialNStart_Anim(HSD_GObj* gobj);
/* 14764C */ void ftMt_SpecialNLoop_Anim(HSD_GObj* gobj);
/* 147850 */ void ftMt_SpecialNLoopFull_Anim(HSD_GObj* gobj);
/* 147880 */ void ftMt_SpecialNCancel_Anim(HSD_GObj* gobj);
/* 147910 */ void ftMt_SpecialNEnd_Anim(HSD_GObj* gobj);
/* 147954 */ void ftMt_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 147AEC */ void ftMt_SpecialAirNLoop_Anim(HSD_GObj* gobj);
/* 147CF0 */ void ftMt_SpecialAirNLoopFull_Anim(HSD_GObj* gobj);
/* 147D20 */ void ftMt_SpecialAirNCancel_Anim(HSD_GObj* gobj);
/* 147DB0 */ void ftMt_SpecialAirNEnd_Anim(HSD_GObj* gobj);
/* 147E30 */ void ftMt_SpecialNStart_IASA(HSD_GObj* gobj);
/* 147E34 */ void ftMt_SpecialNLoop_IASA(HSD_GObj* gobj);
/* 14800C */ void ftMt_SpecialNLoopFull_IASA(HSD_GObj* gobj);
/* 1481CC */ void ftMt_SpecialNCancel_IASA(HSD_GObj* gobj);
/* 1481D0 */ void ftMt_SpecialNEnd_IASA(HSD_GObj* gobj);
/* 1481D4 */ void ftMt_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 1481D8 */ void ftMt_SpecialAirNLoop_IASA(HSD_GObj* gobj);
/* 148354 */ void ftMt_SpecialAirNLoopFull_IASA(HSD_GObj* gobj);
/* 1484B8 */ void ftMt_SpecialAirNCancel_IASA(HSD_GObj* gobj);
/* 1484BC */ void ftMt_SpecialAirNEnd_IASA(HSD_GObj* gobj);
/* 1484C0 */ void ftMt_SpecialNStart_Phys(HSD_GObj* gobj);
/* 1484E0 */ void ftMt_SpecialNLoop_Phys(HSD_GObj* gobj);
/* 148500 */ void ftMt_SpecialNLoopFull_Phys(HSD_GObj* gobj);
/* 148520 */ void ftMt_SpecialNCancel_Phys(HSD_GObj* gobj);
/* 148540 */ void ftMt_SpecialNEnd_Phys(HSD_GObj* gobj);
/* 148560 */ void ftMt_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 148580 */ void ftMt_SpecialAirNLoop_Phys(HSD_GObj* gobj);
/* 1485A0 */ void ftMt_SpecialAirNLoopFull_Phys(HSD_GObj* gobj);
/* 1485C0 */ void ftMt_SpecialAirNCancel_Phys(HSD_GObj* gobj);
/* 1485E0 */ void ftMt_SpecialAirNEnd_Phys(HSD_GObj* gobj);
/* 148600 */ void ftMt_SpecialNStart_Coll(HSD_GObj* gobj);
/* 14868C */ void ftMt_SpecialNLoop_Coll(HSD_GObj* gobj);
/* 148718 */ void ftMt_SpecialNLoopFull_Coll(HSD_GObj* gobj);
/* 1487A4 */ void ftMt_SpecialNCancel_Coll(HSD_GObj* gobj);
/* 148830 */ void ftMt_SpecialNEnd_Coll(HSD_GObj* gobj);
/* 1488BC */ void ftMt_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 148948 */ void ftMt_SpecialAirNLoop_Coll(HSD_GObj* gobj);
/* 1489D4 */ void ftMt_SpecialAirNLoopFull_Coll(HSD_GObj* gobj);
/* 148A60 */ void ftMt_SpecialAirNCancel_Coll(HSD_GObj* gobj);
/* 148AEC */ void ftMt_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/* 148B78 */ void ftMt_SpecialN_Shoot(HSD_GObj* gobj);
/// @file
/// Side Special - Confusion (SpecialS/SpecialAirS)
#define GALE01_1466C4
/* 1466C4 */ void ftMt_SpecialS_Enter(HSD_GObj* gobj);
/* 14677C */ void ftMt_SpecialAirS_Enter(HSD_GObj* gobj);
/* 146858 */ void ftMt_SpecialS_Anim(HSD_GObj* gobj);
/* 1468EC */ void ftMt_SpecialAirS_Anim(HSD_GObj* gobj);
/* 146980 */ void ftMt_SpecialS_IASA(HSD_GObj* gobj);
/* 146984 */ void ftMt_SpecialAirS_IASA(HSD_GObj* gobj);
/* 146988 */ void ftMt_SpecialS_Phys(HSD_GObj* gobj);
/* 1469BC */ void ftMt_SpecialAirS_Phys(HSD_GObj* gobj);
/* 1469F0 */ void ftMt_SpecialS_GroundToAir(HSD_GObj* gobj);
/* 146AD4 */ void ftMt_SpecialAirS_AirToGround(HSD_GObj* gobj);
/* 146BB8 */ void ftMt_SpecialS_Coll(HSD_GObj* gobj);
/* 146BE0 */ void ftMt_SpecialAirS_Coll(HSD_GObj* gobj);
/* 146C08 */ void ftMt_SpecialS_ReflectThink(HSD_GObj* gobj);
/* 146CC8 */ void ftMt_SpecialS_OnReflect(HSD_GObj* gobj);
#define GALE01_122EDC
#define MELEE_FT_CHARA_FTPOPO_FORWARD_H
static MotionFlags const ftPp_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftPp_MF_SpecialLw =
    ftPp_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPp_MF_SpecialN =
    ftPp_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftPp_MF_SpecialS =
    ftPp_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftPp_MF_SpecialHi =
    ftPp_MF_SpecialS | Ft_MF_KeepFastFall;
static MotionFlags const ftPp_MF_MS_358 =
    ftPp_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftPp_MF_SpecialAirN =
    ftPp_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftPp_MF_SpecialAirS =
    ftPp_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftPp_MF_SpecialAirHi =
    ftPp_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftPp_MF_SpecialHi_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_SkipHit;
static MotionFlags const ftPp_MF_SpecialLw_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftPp_MF_SpecialS_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_SkipHit | Ft_MF_KeepSfx;
typedef enum ftPopo_MotionState {
    ftPp_MS_SpecialN = ftCo_MS_Count,
    ftPp_MS_SpecialAirN,
    ftPp_MS_SpecialS1,
    ftPp_MS_SpecialS2,
    ftPp_MS_SpecialAirS1,
    ftPp_MS_SpecialAirS2,
    ftPp_MS_SpecialHiStart_0,
    ftPp_MS_SpecialHiThrow_0,
    ftPp_MS_SpecialHiThrow2,
    ftPp_MS_SpecialHiStart_1,
    ftPp_MS_SpecialHiThrow_1,
    ftPp_MS_SpecialAirHiStart_0,
    ftPp_MS_SpecialAirHiThrow_0,
    ftPp_MS_SpecialAirHiThrow2,
    ftPp_MS_SpecialAirHiStart_1,
    ftPp_MS_SpecialAirHiThrow_1,
    ftPp_MS_SpecialLw,
    ftPp_MS_SpecialAirLw,
    ftPp_MS_SpecialS_0,
    ftPp_MS_SpecialS_1,
    ftPp_MS_SpecialHi_0,
    ftPp_MS_SpecialHi_1,
    ftPp_MS_SpecialHi_2,
    ftPp_MS_SpecialHi_3,
    ftPp_MS_SpecialHi_4,
    ftPp_MS_SpecialHi_5,
    ftPp_MS_Count,
    ftPp_MS_SelfCount = ftPp_MS_Count - ftCo_MS_Count,
} ftPopo_MotionState;
typedef enum ftPp_Submotion {
    ftPp_SM_SpecialN = ftCo_SM_Count,
    ftPp_SM_SpecialAirN,
    ftPp_SM_SpecialS1,
    ftPp_SM_SpecialS2,
    ftPp_SM_SpecialAirS1,
    ftPp_SM_SpecialAirS2,
    ftPp_SM_SpecialHiStart_0,
    ftPp_SM_SpecialHiThrow_0,
    ftPp_SM_SpecialHiThrow2,
    ftPp_SM_SpecialHiStart_1,
    ftPp_SM_SpecialHiThrow_1,
    ftPp_SM_SpecialAirHiStart_0,
    ftPp_SM_SpecialAirHiThrow_0,
    ftPp_SM_SpecialAirHiThrow2,
    ftPp_SM_SpecialAirHiStart_1,
    ftPp_SM_SpecialAirHiThrow_1,
    ftPp_SM_SpecialLw,
    ftPp_SM_SpecialAirLw,
    ftPp_SM_SpecialS_0,
    ftPp_SM_SpecialS_1,
    ftPp_SM_SpecialHi_0,
    ftPp_SM_SpecialHi_1,
    ftPp_SM_SpecialHi_2,
    ftPp_SM_SpecialHi_3,
    ftPp_SM_SpecialHi_4,
    ftPp_SM_SpecialHi_5,
    ftPp_SM_Count,
    ftPp_SM_SelfCount = ftPp_SM_Count - ftCo_SM_Count,
} ftPp_Submotion;
/// @todo Repeat for other fighters and in ftdata
#define FTNANA_COSTUME_COUNT 4
/* 122EDC */ void ftNn_Init_OnLoad(Fighter_GObj* gobj);
/* 122F28 */ void ftNn_Init_OnDeath(Fighter_GObj* gobj);
/* 122FAC */ void ftNn_Init_80122FAC(Fighter_GObj* gobj);
/* 122FCC */ void ftNn_Init_LoadSpecialAttrs(Fighter_GObj* gobj);
/* 12300C */ bool ftNn_Init_8012300C(Fighter_GObj* gobj);
/* 12309C */ bool ftNn_Init_8012309C(Fighter_GObj* gobj);
/* 123348 */ void ftPp_SpecialHi_0_Anim(Fighter_GObj* gobj);
/* 123384 */ void ftPp_SpecialHi_3_Anim(Fighter_GObj* gobj);
/* 123388 */ void ftPp_SpecialHi_0_IASA(Fighter_GObj* gobj);
/* 12338C */ void ftPp_SpecialHi_3_IASA(Fighter_GObj* gobj);
/* 123390 */ void ftPp_SpecialHi_0_Phys(Fighter_GObj* gobj);
/* 1233EC */ void ftPp_SpecialHi_3_Phys(Fighter_GObj* gobj);
/* 1233F0 */ void ftPp_SpecialHi_0_Coll(Fighter_GObj* gobj);
/* 1233F4 */ void ftPp_SpecialHi_3_Coll(Fighter_GObj* gobj);
/* 123448 */ void ftPp_SpecialHi_1_Anim(Fighter_GObj* gobj);
/* 123484 */ void ftPp_SpecialHi_4_Anim(Fighter_GObj* gobj);
/* 1234E4 */ void ftPp_SpecialHi_1_IASA(Fighter_GObj* gobj);
/* 1234E8 */ void ftPp_SpecialHi_4_IASA(Fighter_GObj* gobj);
/* 1234EC */ void ftPp_SpecialHi_1_Phys(Fighter_GObj* gobj);
/* 12350C */ void ftPp_SpecialHi_4_Phys(Fighter_GObj* gobj);
/* 1235BC */ void ftPp_SpecialHi_1_Coll(Fighter_GObj* gobj);
/* 1235F8 */ void ftPp_SpecialHi_4_Coll(Fighter_GObj* gobj);
/* 123954 */ bool ftNn_Init_80123954(Fighter_GObj* gobj, GroundOrAir pp_ga);
/* 123B10 */ bool ftNn_Init_80123B10(Fighter_GObj*);
/* 123CA4 */ void ftPp_SpecialS_0_Anim(Fighter_GObj* gobj);
/* 123D68 */ void ftPp_SpecialS_1_Anim(Fighter_GObj* gobj);
/* 123E58 */ void ftPp_SpecialS_0_IASA(Fighter_GObj* gobj);
/* 123E5C */ void ftPp_SpecialS_1_IASA(Fighter_GObj* gobj);
/* 123E60 */ void ftPp_SpecialS_0_Phys(Fighter_GObj* gobj);
/* 123EFC */ void ftPp_SpecialS_1_Phys(Fighter_GObj* gobj);
/* 123F98 */ void ftPp_SpecialS_0_Coll(Fighter_GObj* gobj);
/* 1241A0 */ void ftPp_SpecialS_1_Coll(Fighter_GObj* gobj);
/* 3CD838 */ extern MotionState ftNn_Init_MotionStateTable[ftPp_MS_SelfCount];
/* 3CDB78 */ extern char ftNn_Init_DatFilename[];
/* 3CDB84 */ extern char ftNn_Init_DataName[];
/* 3CDCA0 */ extern char ftNn_Init_AnimDatFilename[];
/* 3CDD1C */ extern Fighter_DemoStrings ftNn_Init_DemoMotionFilenames;
/* 3CDD2C */ extern Fighter_CostumeStrings
    ftNn_Init_CostumeStrings[4];
/* 459EC8 */ extern UnkCostumeStruct ftNn_CostumeList[4];
#define GALE01_1230D0
/* 12300C */ bool ftNn_Init_8012300C(Fighter_GObj* gobj);
/* 12309C */ bool ftNn_Init_8012309C(Fighter_GObj* gobj);
/**
 * @file
 * @todo Fix formatting
 */
#define GALE01_1147C0
/* 1147C0 */ void ftNs_Init_OnDeath(HSD_GObj* gobj);
/* 11480C */ void ftNs_Init_OnLoad(HSD_GObj* gobj);
/* 1148F8 */ void ftNs_Init_OnDamage(HSD_GObj* gobj);
/* 11493C */ void ftNs_Init_OnAbsorb(HSD_GObj* gobj);
/* 11495C */ float ftNs_Init_GetAbsorbHeal(Fighter* fp);
/* 114968 */ void ftNs_Init_OnItemPickup(HSD_GObj* gobj, bool catchItemFlag);
/* 114A48 */ void ftNs_Init_OnItemInvisible(HSD_GObj* gobj);
/* 114A90 */ void ftNs_Init_OnItemVisible(HSD_GObj* gobj);
/* 114AD8 */ void ftNs_Init_OnItemDrop(HSD_GObj* gobj, bool dropItemFlag);
/* 114B2C */ void ftNs_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/// Change model's MatAnim frames to hurt textures
/* 114B6C */ void ftNs_Init_OnKnockbackEnter(HSD_GObj* gobj);
/// Change model's MatAnim frames to normal textures
/* 114BB0 */ void ftNs_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3CC650 */ extern MotionState ftNs_Init_MotionStateTable[ftNs_MS_SelfCount];
/* 3CCAD0 */ extern char ftNs_Init_DatFilename[];
/* 3CCADC */ extern char ftNs_Init_DataName[];
/* 3CCBF8 */ extern char ftNs_Init_AnimDatFilename[];
/* 3CCC74 */ extern Fighter_DemoStrings ftNs_Init_DemoMotionFilenames;
/* 3CCC84 */ extern Fighter_CostumeStrings ftNs_Init_CostumeStrings[];
/* 459D90 */ extern UnkCostumeStruct ftNs_CostumeList[4];
/**
 * @file
 * @todo Fix formatting
 */
#define GALE01_114EB8
/// Ness Yo-Yo HitCapsule Position Update
/* 114EB8 */ void ftNs_AttackHi4_YoyoUpdateHitPos(HSD_GObj* gobj);
/// Ness D-Smash HitCapsule Refresh Timer
/* 114F0C */ void ftNs_AttackHi4_YoyoCheckTimedRehit(HSD_GObj* gobj);
/**
 * Check collision of Bone (Yo-Yo attach bone)
 * @remarks Also used by Sheik???
 */
/* 114FF8 */ s32 ftNs_AttackHi4_YoyoCheckEnvColl(HSD_GObj* gobj, Vec3* ECBUnk,
                                                 Vec3* ECBUnk2,
                                                 float float_unk);
/* 115114 */ void ftNs_AttackHi4_YoyoSetUnkPos(HSD_GObj* gobj, Vec3* arg1);
/// Set Yo-Yo hitbox position?
/* 1151EC */ void ftNs_AttackHi4_YoyoSetHitPos(HSD_GObj* gobj);
/* 1152D0 */ void ftNs_AttackHi4_YoyoSetHitPosUnk(HSD_GObj* gobj, float arg8);
/// Check if Yo-Yo is colliding with an obstacle (wall / air)
/* 115404 */ bool ftNs_AttackHi4_YoyoCheckNoObstruct(HSD_GObj* gobj);
/// Set ftcmd-, fp- and stateVars
/* 115534 */ void ftNs_AttackHi4_YoyoSetVarAll(HSD_GObj* gobj);
/// Applies Smash Charge attributes to Ness's Up/Down Smash
/* 11556C */ void ftNs_AttackHi4_YoyoApplySmash(HSD_GObj* gobj);
/* 115680 */ void ftNs_AttackHi4_YoyoSetChargeDamage(HSD_GObj* gobj);
/// Ness Yo-Yo Think
/* 115784 */ bool ftNs_AttackHi4_YoyoThink_IsRemove(HSD_GObj* gobj);
/// Calculates Yo-Yo texture rotation speed?
/* 11599C */ void ftNs_AttackHi4_YoyoSetUnkRate(HSD_GObj* gobj);
/// Creates Yo-Yo item and sets up callbacks
/* 115A08 */ void ftNs_AttackHi4_YoyoCreateItem(HSD_GObj* gobj);
/// Something to do with Yo-Yo flags
/* 115AC4 */ void ftNs_AttackHi4_YoyoItemSetFlag(HSD_GObj* gobj);
/// Despawn Yo-Yo item
/* 115AF8 */ void ftNs_AttackHi4_YoyoItemDespawn(HSD_GObj* gobj);
/* 115B50 */ void ftNs_AttackHi4_YoyoItemSetUnk2(HSD_GObj* gobj);
/* 115B80 */ void ftNs_AttackHi4_YoyoItemSetUnk(HSD_GObj* gobj);
/// Ness's Up Smash Motion State handler
/* 115BB0 */ void ftNs_AttackHi4_Enter(HSD_GObj* gobj);
/// Initiates rehit timer for Yo-Yo hitbox
/* 115C74 */ void ftNs_AttackHi4_YoyoStartTimedRehit(HSD_GObj* gobj);
/// Ness's Up Smash Animation Callback
/* 115C9C */ void ftNs_AttackHi4_Anim(HSD_GObj* gobj);
/* 115E74 */ void ftNs_AttackHi4_IASA(HSD_GObj* gobj);
/* 115EB8 */ void ftNs_AttackHi4_Phys(HSD_GObj* gobj);
/* 115F14 */ void ftNs_AttackHi4_Coll(HSD_GObj* gobj);
/* 115F88 */ void ftNs_AttackHi4Charge_Anim(HSD_GObj* gobj);
/* 1160B4 */ void ftNs_AttackHi4Charge_IASA(HSD_GObj* gobj);
/* 1160E4 */ void ftNs_AttackHi4Charge_Phys(HSD_GObj* gobj);
/* 116104 */ void ftNs_AttackHi4Charge_Coll(HSD_GObj* gobj);
/* 116178 */ void ftNs_AttackHi4Charge_Enter(HSD_GObj* gobj);
/* 11620C */ void ftNs_AttackHi4Release_Anim(HSD_GObj* gobj);
/* 1162B0 */ void ftNs_AttackHi4Release_IASA(HSD_GObj* gobj);
/* 1162E0 */ void ftNs_AttackHi4Release_Phys(HSD_GObj* gobj);
/* 116420 */ void ftNs_AttackHi4Release_Coll(HSD_GObj* gobj);
/// Ness's Up Smash Post-Charge Motion State handler
/* 116494 */ void ftNs_AttackHi4Release_Enter(HSD_GObj* gobj);
/// @file
/// Down Smash callbacks (AttackLw4)
#define GALE01_11659C
/* 11659C */ void ftNs_AttackLw4_Enter(HSD_GObj* gobj);
/* 116638 */ void ftNs_AttackLw4_Anim(HSD_GObj* gobj);
/* 1166D4 */ void ftNs_AttackLw4_IASA(HSD_GObj* gobj);
/* 116718 */ void ftNs_AttackLw4_Phys(HSD_GObj* gobj);
/* 11674C */ void ftNs_AttackLw4_Coll(HSD_GObj* gobj);
/* 116798 */ void ftNs_AttackLw4Charge_Anim(HSD_GObj* gobj);
/* 116828 */ void ftNs_AttackLw4Charge_IASA(HSD_GObj* gobj);
/* 116858 */ void ftNs_AttackLw4Charge_Phys(HSD_GObj* gobj);
/* 116878 */ void ftNs_AttackLw4Charge_Coll(HSD_GObj* gobj);
/* 1168C4 */ void ftNs_AttackLw4Charge_Enter(HSD_GObj* gobj);
/* 116958 */ void ftNs_AttackLw4Release_Anim(HSD_GObj* gobj);
/* 1169BC */ void ftNs_AttackLw4Release_IASA(HSD_GObj* gobj);
/* 1169EC */ void ftNs_AttackLw4Release_Phys(HSD_GObj* gobj);
/* 116A9C */ void ftNs_AttackLw4Release_Coll(HSD_GObj* gobj);
/* 116AE8 */ void ftNs_AttackLw4Release_Enter(HSD_GObj* gobj);
/// @file
/// Forward Smash (AttackS4)
#define GALE01_114BF4
/* 114BF4 */ void ftNs_AttackS4_OnReflect(HSD_GObj* gobj);
/* 114C24 */ void ftNs_AttackS4_Enter(HSD_GObj* gobj);
/* 114CC0 */ bool ftNs_AttackS4_CheckNessBatRemove(HSD_GObj* gobj);
/* 114CF4 */ void ftNs_AttackS4_ItemNessBatRemove(HSD_GObj* gobj);
/* 114D34 */ void ftNs_AttackS4_ItemNessBatSetNULL(HSD_GObj* gobj);
/* 114D50 */ void ftNs_AttackS4_Anim(HSD_GObj* gobj);
/* 114E04 */ void ftNs_AttackS4_IASA(HSD_GObj* gobj);
/* 114E64 */ void ftNs_AttackS4_Phys(HSD_GObj* gobj);
/* 114E98 */ void ftNs_AttackS4_Coll(HSD_GObj* gobj);
/// @file
/// PK Thunder callbacks (SpecialHi)
#define GALE01_116D04
/* 117B70 */ void ftNs_SpecialHiStopGFX(HSD_GObj* gobj);
/* 117BBC */ bool
ftNs_SpecialHi_ItemPKThunder_CheckNessCollide(HSD_GObj* gobj);
/* 117D9C */ bool ftNs_SpecialHi_CheckSpecialHiHold(HSD_GObj* gobj);
/* 117DD4 */ void ftNs_SpecialHi_ItemPKThunderRemove(HSD_GObj* gobj);
/* 117E60 */ void ftNs_SpecialHi_TakeDamage(HSD_GObj* gobj);
/* 117F00 */ void ftNs_SpecialHi_ItemPKThunderCheckOwn(HSD_GObj* gobj,
                                                       HSD_GObj* thunder_gobj);
/* 118120 */ void ftNs_SpecialHiStart_Enter(HSD_GObj* gobj);
/* 118250 */ void ftNs_SpecialAirHiStart_Enter(HSD_GObj* gobj);
/* 118384 */ void ftNs_SpecialHi_Enter(HSD_GObj* gobj);
/* 118570 */ void ftNs_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 1186B0 */ void ftNs_SpecialHiStart_Anim(HSD_GObj* gobj);
/* 1187A4 */ void ftNs_SpecialHiHold_Anim(HSD_GObj* gobj);
/* 118900 */ void ftNs_SpecialHiEnd_Anim(HSD_GObj* gobj);
/* 11893C */ void ftNs_SpecialHi_Anim(HSD_GObj* gobj);
/* 118A10 */ void ftNs_SpecialAirHiStart_Anim(HSD_GObj* gobj);
/* 118B04 */ void ftNs_SpecialAirHiHold_Anim(HSD_GObj* gobj);
/* 118D60 */ void ftNs_SpecialAirHiEnd_Anim(HSD_GObj* gobj);
/* 118DF8 */ void ftNs_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 118EF0 */ void ftNs_SpecialAirHiRebound_Anim(HSD_GObj* gobj);
/* 118F80 */ void ftNs_SpecialHiStart_IASA(HSD_GObj* gobj);
/* 118F84 */ void ftNs_SpecialHiHold_IASA(HSD_GObj* gobj);
/* 118F88 */ void ftNs_SpecialHiEnd_IASA(HSD_GObj* gobj);
/* 118F8C */ void ftNs_SpecialHi_IASA(HSD_GObj* gobj);
/* 118F90 */ void ftNs_SpecialAirHiStart_IASA(HSD_GObj* gobj);
/* 118F94 */ void ftNs_SpecialAirHiHold_IASA(HSD_GObj* gobj);
/* 118F98 */ void ftNs_SpecialAirHiEnd_IASA(HSD_GObj* gobj);
/* 118F9C */ void ftNs_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 118FA0 */ void ftNs_SpecialAirHiRebound_IASA(HSD_GObj* gobj);
/* 118FA4 */ void ftNs_SpecialHiStart_Phys(HSD_GObj* gobj);
/* 118FDC */ void ftNs_SpecialHiHold_Phys(HSD_GObj* gobj);
/* 118FFC */ void ftNs_SpecialHiEnd_Phys(HSD_GObj* gobj);
/* 11901C */ void ftNs_SpecialHi_Phys(HSD_GObj* gobj);
/* 119134 */ void ftNs_SpecialAirHiStart_Phys(HSD_GObj* gobj);
/* 119194 */ void ftNs_SpecialAirHiHold_Phys(HSD_GObj* gobj);
/* 1191F4 */ void ftNs_SpecialAirHiEnd_Phys(HSD_GObj* gobj);
/* 119254 */ void ftNs_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 119410 */ void ftNs_SpecialAirHiRebound_Phys(HSD_GObj* gobj);
/* 119460 */ void ftNs_SpecialHiStart_Coll(HSD_GObj* gobj);
/* 1194CC */ void ftNs_SpecialHiHold_Coll(HSD_GObj* gobj);
/* 119538 */ void ftNs_SpecialHiEnd_Coll(HSD_GObj* gobj);
/* 1195A4 */ void ftNs_SpecialHi_Coll(HSD_GObj* gobj);
/* 119798 */ void ftNs_SpecialAirHiStart_Coll(HSD_GObj* gobj);
/* 119804 */ void ftNs_SpecialAirHiHold_Coll(HSD_GObj* gobj);
/* 119870 */ void ftNs_SpecialAirHiEnd_Coll(HSD_GObj* gobj);
/* 1198DC */ void ftNs_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 119D58 */ void ftNs_SpecialAirHiRebound_Coll(HSD_GObj* gobj);
/// @file
/// PSI Magnet callbacks (SpecialLw)
#define GALE01_119E14
/* 119E14 */ void ftNs_SpecialLwStart_Enter(HSD_GObj* gobj);
/* 119E90 */ void ftNs_SpecialAirLwStart_Enter(HSD_GObj* gobj);
/* 119F20 */ void ftNs_SpecialLwStart_Anim(HSD_GObj* gobj);
/* 11A000 */ void ftNs_SpecialAirLwStart_Anim(HSD_GObj* gobj);
/* 11A0E0 */ void ftNs_SpecialLwStart_IASA(HSD_GObj* gobj);
/* 11A0E4 */ void ftNs_SpecialAirLwStart_IASA(HSD_GObj* gobj);
/* 11A0E8 */ void ftNs_SpecialLwStart_Phys(HSD_GObj* gobj);
/* 11A108 */ void ftNs_SpecialAirLwStart_Phys(HSD_GObj* gobj);
/* 11A168 */ void ftNs_SpecialLwStart_Coll(HSD_GObj* gobj);
/* 11A1A4 */ void ftNs_SpecialAirLwStart_Coll(HSD_GObj* gobj);
/* 11A1E0 */ void ftNs_SpecialLwStart_GroundToAir(HSD_GObj* gobj);
/* 11A240 */ void ftNs_SpecialAirLwStart_AirToGround(HSD_GObj* gobj);
/* 11A2A8 */ void ftNs_SpecialLwHold_Anim(HSD_GObj* gobj);
/* 11A370 */ void ftNs_SpecialAirLwHold_Anim(HSD_GObj* gobj);
/* 11A438 */ void ftNs_SpecialLwHold_IASA(HSD_GObj* gobj);
/* 11A43C */ void ftNs_SpecialAirLwHold_IASA(HSD_GObj* gobj);
/* 11A440 */ void ftNs_SpecialLwHold_Phys(HSD_GObj* gobj);
/* 11A474 */ void ftNs_SpecialAirLwHold_Phys(HSD_GObj* gobj);
/* 11A4E8 */ void ftNs_SpecialLwHold_Coll(HSD_GObj* gobj);
/* 11A524 */ void ftNs_SpecialAirLwHold_Coll(HSD_GObj* gobj);
/* 11A560 */ void ftNs_SpecialLwHold_GroundToAir(HSD_GObj* gobj);
/* 11A5D4 */ void ftNs_SpecialAirLwHold_AirToGround(HSD_GObj* gobj);
/* 11A650 */ void ftNs_SpecialLwHold_Enter(HSD_GObj* gobj);
/* 11A6A8 */ void ftNs_SpecialAirLwHold_Enter(HSD_GObj* gobj);
/* 11A700 */ void ftNs_SpecialLwTurn_Anim(HSD_GObj* gobj);
/* 11A810 */ void ftNs_SpecialAirLwTurn_Anim(HSD_GObj* gobj);
/* 11A920 */ void ftNs_SpecialLwTurn_IASA(HSD_GObj* gobj);
/* 11A924 */ void ftNs_SpecialAirLwTurn_IASA(HSD_GObj* gobj);
/* 11A928 */ void ftNs_SpecialLwTurn_Phys(HSD_GObj* gobj);
/* 11A95C */ void ftNs_SpecialAirLwTurn_Phys(HSD_GObj* gobj);
/* 11A9D0 */ void ftNs_SpecialLwTurn_Coll(HSD_GObj* gobj);
/* 11AA0C */ void ftNs_SpecialAirLwTurn_Coll(HSD_GObj* gobj);
/* 11AA48 */ void ftNs_SpecialLwTurn_GroundToAir(HSD_GObj* gobj);
/* 11AAA8 */ void ftNs_SpecialAirLwTurn_AirToGround(HSD_GObj* gobj);
/* 11AB10 */ bool ftNs_SpecialLwHold_GroundOrAir(HSD_GObj* gobj);
/* 11ABF8 */ void ftNs_SpecialLwHit_Anim(HSD_GObj* gobj);
/* 11ADC8 */ void ftNs_SpecialAirLwHit_Anim(HSD_GObj* gobj);
/* 11AEE0 */ void ftNs_SpecialLwHit_IASA(HSD_GObj* gobj);
/* 11AEE4 */ void ftNs_SpecialAirLwHit_IASA(HSD_GObj* gobj);
/* 11AEE8 */ void ftNs_SpecialLwHit_Phys(HSD_GObj* gobj);
/* 11AF1C */ void ftNs_SpecialAirLwHit_Phys(HSD_GObj* gobj);
/* 11AF90 */ void ftNs_SpecialLwHit_Coll(HSD_GObj* gobj);
/* 11AFCC */ void ftNs_SpecialAirLwHit_Coll(HSD_GObj* gobj);
/* 11B008 */ void ftNs_SpecialLwHit_GroundToAir(HSD_GObj* gobj);
/* 11B07C */ void ftNs_SpecialAirLwHit_AirToGround(HSD_GObj* gobj);
/* 11B0F8 */ void ftNs_AbsorbThink_DecideAction(HSD_GObj* gobj);
/* 11B25C */ void ftNs_SpecialLwEnd_Anim(HSD_GObj* gobj);
/* 11B2A0 */ void ftNs_SpecialAirLwEnd_Anim(HSD_GObj* gobj);
/* 11B2E4 */ void ftNs_SpecialLwEnd_IASA(HSD_GObj* gobj);
/* 11B2E8 */ void ftNs_SpecialAirLwEnd_IASA(HSD_GObj* gobj);
/* 11B2EC */ void ftNs_SpecialLwEnd_Phys(HSD_GObj* gobj);
/* 11B30C */ void ftNs_SpecialAirLwEnd_Phys(HSD_GObj* gobj);
/* 11B36C */ void ftNs_SpecialLwEnd_Coll(HSD_GObj* gobj);
/* 11B3A8 */ void ftNs_SpecialAirLwEnd_Coll(HSD_GObj* gobj);
/* 11B3E4 */ void ftNs_SpecialLwEnd_GroundToAir(HSD_GObj* gobj);
/* 11B444 */ void ftNs_SpecialAirLwEnd_AirToGround(HSD_GObj* gobj);
/* 11B4AC */ void ftNs_SpecialLwEnd_Enter(HSD_GObj* gobj);
/* 11B4E4 */ void ftNs_SpecialAirLwEnd_Enter(HSD_GObj* gobj);
/// @file
/// PK Flash callbacks (SpecialN)
#define GALE01_116EBC
/* 116EBC */ bool ftNs_SpecialN_CheckSpecialNHold(HSD_GObj* gobj);
/* 116F00 */ void ftNs_SpecialN_SetNULL(HSD_GObj* gobj);
/* 116F38 */ void ftNs_SpecialN_ItemPKFlushSetNULL(HSD_GObj* gobj);
/* 116F94 */ void ftNs_SpecialNStart_Enter(HSD_GObj* gobj);
/* 117034 */ void ftNs_SpecialAirNStart_Enter(HSD_GObj* gobj);
/* 1170DC */ void ftNs_SpecialNStart_Anim(HSD_GObj* gobj);
/* 1171BC */ void ftNs_SpecialNRelease_Anim(HSD_GObj* gobj);
/* 1172F0 */ void ftNs_SpecialNEnd_Anim(HSD_GObj* gobj);
/* 117378 */ void ftNs_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 117458 */ void ftNs_SpecialAirNRelease_Anim(HSD_GObj* gobj);
/* 11758C */ void ftNs_SpecialAirNEnd_Anim(HSD_GObj* gobj);
/* 117648 */ void ftNs_SpecialNStart_IASA(HSD_GObj* gobj);
/* 11764C */ void ftNs_SpecialNRelease_IASA(HSD_GObj* gobj);
/* 1176C8 */ void ftNs_SpecialNEnd_IASA(HSD_GObj* gobj);
/* 1176CC */ void ftNs_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 1176D0 */ void ftNs_SpecialAirNRelease_IASA(HSD_GObj* gobj);
/* 11774C */ void ftNs_SpecialAirNEnd_IASA(HSD_GObj* gobj);
/* 117750 */ void ftNs_SpecialNStart_Phys(HSD_GObj* gobj);
/* 117788 */ void ftNs_SpecialNRelease_Phys(HSD_GObj* gobj);
/* 1177A8 */ void ftNs_SpecialNEnd_Phys(HSD_GObj* gobj);
/* 1177C8 */ void ftNs_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 117828 */ void ftNs_SpecialAirNRelease_Phys(HSD_GObj* gobj);
/* 117888 */ void ftNs_SpecialAirNEnd_Phys(HSD_GObj* gobj);
/* 1178E8 */ void ftNs_SpecialNStart_Coll(HSD_GObj* gobj);
/* 117954 */ void ftNs_SpecialNRelease_Coll(HSD_GObj* gobj);
/* 1179C0 */ void ftNs_SpecialNEnd_Coll(HSD_GObj* gobj);
/* 117A2C */ void ftNs_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 117A98 */ void ftNs_SpecialAirNRelease_Coll(HSD_GObj* gobj);
/* 117B04 */ void ftNs_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/// @file
/// PK Fire callbacks (SpecialS)
#define GALE01_116B70
/* 116B70 */ void ftNs_SpecialS_ItemPKFireSpawn(HSD_GObj* gobj);
/* 116C94 */ void ftNs_SpecialS_Enter(HSD_GObj* gobj);
/* 116D04 */ void ftNs_SpecialAirS_Enter(HSD_GObj* gobj);
/* 116D74 */ void ftNs_SpecialS_Anim(HSD_GObj* gobj);
/* 116DB0 */ void ftNs_SpecialAirS_Anim(HSD_GObj* gobj);
/* 116DEC */ void ftNs_SpecialS_Phys(HSD_GObj* gobj);
/* 116E0C */ void ftNs_SpecialAirS_Phys(HSD_GObj* gobj);
/* 116E2C */ void ftNs_SpecialS_Coll(HSD_GObj* gobj);
/* 116E68 */ void ftNs_SpecialAirS_Coll(HSD_GObj* gobj);
#define GALE01_11B51C
/* 11B51C */ void ftPe_Init_OnDeath(HSD_GObj* gobj);
/* 11B628 */ void ftPe_Init_OnLoad(HSD_GObj* gobj);
/* 11B704 */ void ftPe_Init_OnDeath2(HSD_GObj* gobj);
/* 11B740 */ void ftPe_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 11B820 */ void ftPe_Init_OnItemInvisible(HSD_GObj* gobj);
/* 11B868 */ void ftPe_Init_OnItemVisible(HSD_GObj* gobj);
/* 11B8B0 */ void ftPe_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 11B904 */ void ftPe_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 11B93C */ void ftPe_Init_8011B93C(HSD_GObj* gobj);
/* 11B998 */ void ftPe_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 11B9DC */ void ftPe_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3CCCB8 */ extern MotionState ftPe_Init_MotionStateTable[ftPe_MS_SelfCount];
/* 3CD078 */ extern char ftPe_Init_DatFilename[];
/* 3CD084 */ extern char ftPe_Init_DataName[];
/* 3CD204 */ extern char ftPe_Init_AnimDatFilename[];
/* 3CD280 */ extern Fighter_DemoStrings ftPe_Init_DemoMotionFilenames;
/* 3CD290 */ extern Fighter_CostumeStrings ftPe_Init_CostumeStrings[];
/* 459DF0 */ extern UnkCostumeStruct ftPe_CostumeList[5];
#define GALE01_11C1C0
/* 11C1C0 */ void ftPe_AttackS4_Enter(HSD_GObj* gobj);
/* 11C248 */ void ftPe_AttackS4_Anim(HSD_GObj* gobj);
/* 11C284 */ void ftPe_AttackS4_IASA(HSD_GObj* gobj);
/* 11C2B4 */ void ftPe_AttackS4_Phys(HSD_GObj* gobj);
/* 11C2D4 */ void ftPe_AttackS4_Coll(HSD_GObj* gobj);
#define GALE01_11BAD8
/* 11BA20 */ bool ftPe_Float_CheckContinueInput(Fighter* fp);
/* 11BA54 */ bool ftPe_8011BA54(HSD_GObj* gobj);
/* 11BAD8 */ bool ftPe_8011BAD8(HSD_GObj* gobj);
/* 11BB6C */ void ftPe_8011BB6C(HSD_GObj* gobj, bool arg1);
/* 11BC38 */ void ftPe_Float_Anim(HSD_GObj* gobj);
/* 11BC8C */ void ftPe_Float_IASA(HSD_GObj* gobj);
/* 11BD18 */ void ftPe_Float_Phys(HSD_GObj* gobj);
/* 11BD3C */ void ftPe_Float_Coll(HSD_GObj* gobj);
#define GALE01_11BF88
/* 11BE80 */ bool ftPe_8011BE80(HSD_GObj* gobj);
/* 11BF88 */ void ftPe_FloatAttackAir_Anim(HSD_GObj* gobj);
/* 11C044 */ void ftPe_FloatAttackAir_IASA(HSD_GObj* gobj);
/* 11C160 */ void ftPe_FloatAttackAir_Phys(HSD_GObj* gobj);
/* 11C198 */ void ftPe_FloatAttackAir_Coll(HSD_GObj* gobj);
#define GALE01_11BDF0
/* 11BD6C */ void ftPe_UpdateFloatDir(HSD_GObj* gobj);
/* 11BDF0 */ void ftPe_FloatFall_Anim(HSD_GObj* gobj);
/* 11BE2C */ void ftPe_FloatFall_IASA(HSD_GObj* gobj);
/* 11BE30 */ void ftPe_FloatFall_Phys(HSD_GObj* gobj);
/* 11BE50 */ void ftPe_FloatFall_Coll(HSD_GObj* gobj);
#define GALE01_11D72C
/* 11D518 */ bool ftPe_8011D518(HSD_GObj* gobj);
/* 11D598 */ void ftPe_8011D598(HSD_GObj* gobj);
/* 11D680 */ bool ftPe_SpecialHi_NotActive(HSD_GObj* gobj);
/* 11D72C */ void ftPe_SpecialHi_Enter(HSD_GObj* gobj);
/* 11D7F0 */ void ftPe_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 11D8D0 */ void ftPe_SpecialHiStart_Anim(HSD_GObj* gobj);
/* 11D980 */ void ftPe_SpecialAirHiStart_Anim(HSD_GObj* gobj);
/* 11DA30 */ void ftPe_SpecialHiStart_IASA(HSD_GObj* gobj);
/* 11DB78 */ void ftPe_SpecialAirHiStart_IASA(HSD_GObj* gobj);
/* 11DCC0 */ void ftPe_SpecialHiStart_Phys(HSD_GObj* gobj);
/* 11DCF8 */ void ftPe_SpecialAirHiStart_Phys(HSD_GObj* gobj);
/* 11DDBC */ void ftPe_SpecialHiStart_Coll(HSD_GObj* gobj);
/* 11DE2C */ void ftPe_SpecialAirHiStart_Coll(HSD_GObj* gobj);
/* 11DE9C */ void ftPe_SpecialHiEnd_Anim(HSD_GObj* gobj);
/* 11DEFC */ void ftPe_SpecialAirHiEnd_Anim(HSD_GObj* gobj);
/* 11DF5C */ void ftPe_SpecialHiEnd_IASA(HSD_GObj* gobj);
/* 11DF60 */ void ftPe_SpecialAirHiEnd_IASA(HSD_GObj* gobj);
/* 11DF64 */ void ftPe_SpecialHiEnd_Phys(HSD_GObj* gobj);
/* 11DFD0 */ void ftPe_SpecialAirHiEnd_Phys(HSD_GObj* gobj);
/* 11E094 */ void ftPe_SpecialHiEnd_Coll(HSD_GObj* gobj);
/* 11E104 */ void ftPe_SpecialAirHiEnd_Coll(HSD_GObj* gobj);
#define GALE01_11D11C
/* 11CF84 */ void ftPe_SpecialLw_UnsetVeg(HSD_GObj* gobj);
/* 11CFA0 */ void ftPe_SpecialLw_8011CFA0(HSD_GObj* gobj);
/* 11D11C */ void ftPe_SpecialLw_Enter(HSD_GObj* gobj);
/* 11D1C4 */ void ftPe_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 11D2EC */ void ftPe_SpecialLw_Anim(HSD_GObj* gobj);
/* 11D340 */ void ftPe_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 11D394 */ void ftPe_SpecialLw_Phys(HSD_GObj* gobj);
/* 11D3B4 */ void ftPe_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 11D3D4 */ void ftPe_SpecialLw_Coll(HSD_GObj* gobj);
/* 11D3FC */ void ftPe_SpecialAirLw_Coll(HSD_GObj* gobj);
#define GALE01_11E3D0
/* 11E2AC */ void ftPe_SpecialN_DoDeath2(HSD_GObj* gobj);
/* 11E2E8 */ void ftPe_SpecialN_OnDeath2(HSD_GObj* gobj);
/* 11E3A8 */ bool ftPe_SpecialN_IsActive(HSD_GObj* gobj);
/* 11E3D0 */ void ftPe_SpecialN_Enter(HSD_GObj* gobj);
/* 11E45C */ void ftPe_SpecialAirN_Enter(HSD_GObj* gobj);
/* 11E4F8 */ void ftPe_SpecialN_Anim(HSD_GObj* gobj);
/* 11E5B4 */ void ftPe_SpecialAirN_Anim(HSD_GObj* gobj);
/* 11E670 */ void ftPe_SpecialN_IASA(HSD_GObj* gobj);
/* 11E674 */ void ftPe_SpecialAirN_IASA(HSD_GObj* gobj);
/* 11E678 */ void ftPe_SpecialN_Phys(HSD_GObj* gobj);
/* 11E6AC */ void ftPe_SpecialAirN_Phys(HSD_GObj* gobj);
/* 11E75C */ void ftPe_SpecialN_Coll(HSD_GObj* gobj);
/* 11E798 */ void ftPe_SpecialAirN_Coll(HSD_GObj* gobj);
/* 11E9A0 */ void ftPe_SpecialNHit_Anim(HSD_GObj* gobj);
/* 11EA04 */ void ftPe_SpecialAirNHit_Anim(HSD_GObj* gobj);
/* 11EA68 */ void ftPe_SpecialNHit_IASA(HSD_GObj* gobj);
/* 11EA6C */ void ftPe_SpecialAirNHit_IASA(HSD_GObj* gobj);
/* 11EA70 */ void ftPe_SpecialNHit_Phys(HSD_GObj* gobj);
/* 11EA90 */ void ftPe_SpecialAirNHit_Phys(HSD_GObj* gobj);
/* 11EAE0 */ void ftPe_SpecialNHit_Coll(HSD_GObj* gobj);
/* 11EB1C */ void ftPe_SpecialAirNHit_Coll(HSD_GObj* gobj);
#define GALE01_11C2F4
/* 11C34C */ void ftPe_SpecialS_Enter(HSD_GObj* gobj);
/* 11C3C4 */ void ftPe_SpecialAirS_Enter(HSD_GObj* gobj);
/* 11C4F0 */ void ftPe_SpecialSStart_Anim(HSD_GObj* gobj);
/* 11C588 */ void ftPe_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 11C5E8 */ void ftPe_SpecialSStart_IASA(HSD_GObj* gobj);
/* 11C5EC */ void ftPe_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 11C5F0 */ void ftPe_SpecialSStart_Phys(HSD_GObj* gobj);
/* 11C644 */ void ftPe_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 11C664 */ void ftPe_SpecialSStart_Coll(HSD_GObj* gobj);
/* 11C6FC */ void ftPe_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 11C878 */ void ftPe_SpecialAirSJump_Anim(HSD_GObj* gobj);
/* 11C8C8 */ void ftPe_SpecialAirSJump_IASA(HSD_GObj* gobj);
/* 11C8CC */ void ftPe_SpecialAirSJump_Phys(HSD_GObj* gobj);
/* 11C93C */ void ftPe_SpecialAirSJump_Coll(HSD_GObj* gobj);
/* 11CA84 */ void ftPe_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 11CAC0 */ void ftPe_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 11CAFC */ void ftPe_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 11CB00 */ void ftPe_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 11CB04 */ void ftPe_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 11CB24 */ void ftPe_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 11CB44 */ void ftPe_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 11CB80 */ void ftPe_SpecialAirSEnd_Coll(HSD_GObj* gobj);
#define GALE01_149E34
#define MELEE_FT_CHARA_FTPIKACHU_FORWARD_H
static MotionFlags const ftPk_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftPk_MF_SpecialLw =
    ftPk_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPk_MF_SpecialN =
    ftPk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftPk_MF_SpecialHi =
    ftPk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx |
    Ft_MF_SkipThrowException;
static MotionFlags const ftPk_MF_SpecialS =
    ftPk_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftPk_MF_SpecialAirLw =
    ftPk_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftPk_MF_SpecialAirN =
    ftPk_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftPk_MF_SpecialAirHi =
    ftPk_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftPk_MF_SpecialAirS =
    ftPk_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftPk_MF_SpecialN_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx;
static MotionFlags const ftPk_MF_SpecialHiStart_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPk_MF_SpecialHiMove_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_SkipHit;
static MotionFlags const ftPk_MF_SpecialLw_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPk_MF_SpecialLwHit_Coll =
    ftPk_MF_SpecialLw_Coll | Ft_MF_SkipHit;
static MotionFlags const ftPk_MF_SpecialLwHitRumble_Coll =
    ftPk_MF_SpecialLwHit_Coll | Ft_MF_SkipRumble;
typedef enum ftPikachu_MotionState {
    ftPk_MS_SpecialN = ftCo_MS_Count,
    ftPk_MS_SpecialAirN,
    ftPk_MS_SpecialSStart,
    ftPk_MS_SpecialSHold,
    ftPk_MS_SpecialS1,
    ftPk_MS_SpecialSEnd,
    ftPk_MS_SpecialS0,
    ftPk_MS_SpecialAirSStart,
    ftPk_MS_SpecialAirSHold,
    ftPk_MS_SpecialAirS1,
    ftPk_MS_SpecialAirSEnd,
    ftPk_MS_SpecialAirS0,
    ftPk_MS_SpecialHiStart0,
    ftPk_MS_SpecialHiStart1,
    ftPk_MS_SpecialHiEnd,
    ftPk_MS_SpecialAirHiStart0,
    ftPk_MS_SpecialAirHiStart1,
    ftPk_MS_SpecialAirHiEnd,
    ftPk_MS_SpecialLwStart,
    ftPk_MS_SpecialLwLoop0,
    ftPk_MS_SpecialLwLoop1,
    ftPk_MS_SpecialLwEnd,
    ftPk_MS_SpecialAirLwStart,
    ftPk_MS_SpecialAirLwLoop0,
    ftPk_MS_SpecialAirLwLoop1,
    ftPk_MS_SpecialAirLwEnd,
    ftPk_MS_Count,
    ftPk_MS_SelfCount = ftPk_MS_Count - ftCo_MS_Count,
} ftPikachu_MotionState;
typedef enum ftPk_Submotion {
    ftPk_SM_SpecialN = ftCo_SM_Count,
    ftPk_SM_SpecialAirN,
    ftPk_SM_SpecialSStart,
    ftPk_SM_SpecialSHold,
    ftPk_SM_SpecialS0,
    ftPk_SM_SpecialS1,
    ftPk_SM_SpecialSEnd,
    ftPk_SM_SpecialAirSStart,
    ftPk_SM_SpecialAirSHold,
    ftPk_SM_SpecialS,
    ftPk_SM_SpecialAirSEnd,
    ftPk_SM_SpecialHiStart0,
    ftPk_SM_SpecialHiStart1,
    ftPk_SM_SpecialHiEnd,
    ftPk_SM_SpecialAirHiStart0,
    ftPk_SM_SpecialAirHiStart1,
    ftPk_SM_SpecialAirHiEnd,
    ftPk_SM_SpecialLwStart,
    ftPk_SM_SpecialLwLoop0,
    ftPk_SM_SpecialLwLoop1,
    ftPk_SM_SpecialLwEnd,
    ftPk_SM_SpecialAirLwStart,
    ftPk_SM_SpecialAirLwLoop0,
    ftPk_SM_SpecialAirLwLoop1,
    ftPk_SM_SpecialAirLwEnd,
    ftPk_SM_Count,
    ftPk_SM_SelfCount = ftPk_SM_Count - ftCo_SM_Count,
} ftPk_Submotion;
enum ftPk_SpecialN_CmdVars {
    ftPk_SpecialN_Cmd0,
    ftPk_SpecialN_Cmd1,
    ftPk_SpecialN_Cmd2,
    ftPk_SpecialN_Cmd3,
};
/* 149E34 */ void ftPc_Init_OnLoad(HSD_GObj* gobj);
/* 149EAC */ void ftPc_Init_OnDeath(HSD_GObj* gobj);
/* 149FE4 */ void ftPc_Init_OnItemPickup(HSD_GObj* gobj, bool);
/* 14A0C4 */ void ftPc_Init_OnItemInvisible(HSD_GObj* gobj);
/* 14A10C */ void ftPc_Init_OnItemVisible(HSD_GObj* gobj);
/* 14A154 */ void ftPc_Init_OnItemDrop(HSD_GObj* gobj, bool);
/* 14A1A8 */ void ftPc_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 14A1C8 */ void ftPc_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 14A20C */ void ftPc_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3D1EA8 */ extern MotionState ftPc_Init_MotionStateTable[ftPk_MS_SelfCount];
/* 3D21E8 */ extern char ftPc_Init_DatFilename[];
/* 3D21F4 */ extern char ftPc_Init_DataName[];
/* 3D2328 */ extern char ftPc_Init_AnimDatFilename[];
/* 3D23A4 */ extern Fighter_DemoStrings ftPc_Init_DemoMotionFilenames;
/* 3D23B4 */ extern Fighter_CostumeStrings ftPc_Init_CostumeStrings[];
/* 45A480 */ extern UnkCostumeStruct ftPc_CostumeList[4];
#define MELEE_FT_CHARA_FTPICHU_TYPES_H
struct ftPichu_FighterVars {
    char filler0[0x100];
};
typedef struct _ftPichuAttributes {
    /* 0x00 */ u32 x0_padding[(0x14 - 0x0) / 4];
    /* 0x14 */ u32 x14;
    /* 0x14 */ u32 x18;
    /* 0x18 */ u32 x18_padding[(0xDC - 0x1C) / 4];
    /* 0xDC */ u32 xDC;
} ftPichuAttributes;
#define GALE01_1243AC
/* 1243AC */ void ftPk_Init_OnLoad(HSD_GObj* gobj);
/* 1243E4 */ void ftPk_Init_OnLoadForPichu(Fighter* fp);
/* 124474 */ void ftPk_Init_OnDeath(HSD_GObj* gobj);
/* 1244B8 */ void ftPk_Init_OnItemPickup(HSD_GObj* gobj, bool arg1);
/* 124598 */ void ftPk_Init_OnItemInvisible(HSD_GObj* gobj);
/* 1245E0 */ void ftPk_Init_OnItemVisible(HSD_GObj* gobj);
/* 124628 */ void ftPk_Init_OnItemDrop(HSD_GObj* gobj, bool arg1);
/* 12467C */ void ftPk_Init_UnkMotionStates1(HSD_GObj* gobj);
/* 1246C0 */ void ftPk_Init_UnkMotionStates2(HSD_GObj* gobj);
/* 124704 */ void ftPk_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 1247A8 */ void ftPk_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 1247EC */ void ftPk_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3CDD78 */ extern MotionState ftPk_Init_MotionStateTable[ftPk_MS_SelfCount];
/* 3CE0B8 */ extern char ftPk_Init_DatFilename[];
/* 3CE0C4 */ extern char ftPk_Init_DataName[];
/* 3CE204 */ extern char ftPk_Init_AnimDatFilename[];
/* 3CE290 */ extern Fighter_DemoStrings ftPk_Init_DemoMotionFilenames;
/* 3CE2A0 */ extern Fighter_CostumeStrings ftPk_Init_CostumeStrings[];
/* 459F28 */ extern UnkCostumeStruct ftPk_CostumeList[4];
#define GALE01_125D80
/* 125D80 */ void ftPk_SpecialHi_UpdateVel(HSD_GObj* gobj);
/* 125DE8 */ void ftPk_SpecialHi_Enter(HSD_GObj* gobj);
/* 125E60 */ void ftPk_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 125ED8 */ void ftPk_SpecialHiStart0_Anim(HSD_GObj* gobj);
/* 125F14 */ void ftPk_SpecialAirHiStart0_Anim(HSD_GObj* gobj);
/* 125F50 */ void ftPk_SpecialHiStart0_IASA(HSD_GObj* gobj);
/* 125F54 */ void ftPk_SpecialAirHiStart0_IASA(HSD_GObj* gobj);
/* 125F58 */ void ftPk_SpecialHiStart0_Phys(HSD_GObj* gobj);
/* 125F78 */ void ftPk_SpecialAirHiStart0_Phys(HSD_GObj* gobj);
/* 125FD8 */ void ftPk_SpecialHiStart0_Coll(HSD_GObj* gobj);
/* 126014 */ void ftPk_SpecialAirHiStart0_Coll(HSD_GObj* gobj);
/* 126084 */ void ftPk_SpecialHi_ChangeMotion_Unk00(HSD_GObj* gobj);
/* 1260E4 */ void ftPk_SpecialHi_ChangeMotion_Unk01(HSD_GObj* gobj);
/* 126144 */ void ftPk_SpecialHiStart1_Anim(HSD_GObj* gobj);
/* 1262B4 */ void ftPk_SpecialAir_Anim(HSD_GObj* gobj);
/* 1262B4 */ void ftPk_SpecialAirHiStart1_Anim(HSD_GObj* gobj);
/* 126424 */ void ftPk_SpecialHiStart1_IASA(HSD_GObj* gobj);
/* 126428 */ void ftPk_SpecialAirHiStart1_IASA(HSD_GObj* gobj);
/* 126428 */ void ftPk_SpecialAir_IASA(HSD_GObj* gobj);
/* 12642C */ void ftPk_SpecialHi_8012642C(HSD_GObj* gobj);
/* 1265D4 */ void ftPk_SpecialHiStart1_Phys(HSD_GObj* gobj);
/* 1265F4 */ void ftPk_SpecialAirHiStart1_Phys(HSD_GObj* gobj);
/* 1265F4 */ void ftPk_SpecialAir_Phys(HSD_GObj* gobj);
/* 126614 */ void ftPk_SpecialHiStart1_Coll(HSD_GObj* gobj);
/* 1267C8 */ void ftPk_SpecialAir_Coll(HSD_GObj* gobj);
/* 1267C8 */ void ftPk_SpecialAirHiStart1_Coll(HSD_GObj* gobj);
/* 126A2C */ void ftPk_SpecialHi_ChangeMotion_Unk02(HSD_GObj* gobj);
/* 126AA4 */ void ftPk_SpecialHi_ChangeMotion_Unk03(HSD_GObj* gobj);
/* 126C0C */ void ftPk_SpecialHi_80126C0C(HSD_GObj* gobj);
/* 126E1C */ void ftPk_SpecialHi_80126E1C(HSD_GObj* gobj);
/* 127064 */ bool ftPk_SpecialHi_80127064(HSD_GObj* gobj);
/* 127198 */ void ftPk_SpecialHiEnd_Anim(HSD_GObj* gobj);
/* 127228 */ void ftPk_SpecialAirEnd_Anim(HSD_GObj* gobj);
/* 127228 */ void ftPk_SpecialAirHiEnd_Anim(HSD_GObj* gobj);
/* 1272D8 */ void ftPk_SpecialHiEnd_IASA(HSD_GObj* gobj);
/* 1272DC */ void ftPk_SpecialAirEnd_IASA(HSD_GObj* gobj);
/* 1272DC */ void ftPk_SpecialAirHiEnd_IASA(HSD_GObj* gobj);
/* 1272E0 */ void ftPk_SpecialHiEnd_Phys(HSD_GObj* gobj);
/* 127310 */ void ftPk_SpecialAirEnd_Phys(HSD_GObj* gobj);
/* 127310 */ void ftPk_SpecialAirHiEnd_Phys(HSD_GObj* gobj);
/* 12738C */ void ftPk_SpecialHiEnd_Coll(HSD_GObj* gobj);
/* 1273D4 */ void ftPk_SpecialAirEnd_Coll(HSD_GObj* gobj);
/* 1273D4 */ void ftPk_SpecialAirHiEnd_Coll(HSD_GObj* gobj);
/* 12744C */ void ftPk_SpecialHi_ChangeMotion_Unk04(HSD_GObj* gobj);
/* 1274AC */ void ftPk_SpecialHi_MotionChangeUpdateVel_Unk0(HSD_GObj* gobj);
/* 127534 */ void ftPk_SpecialHi_MotionChangeUpdateVel_Unk1(HSD_GObj* gobj);
#define GALE01_1275CC
/* 1275CC */ bool ftPk_SpecialLw_CheckProperty(HSD_GObj* gobj);
/* 127608 */ void ftPk_SpecialLw_80127608(HSD_GObj* gobj);
/* 12764C */ void ftPk_SpecialLw_SetState_Unk0(HSD_GObj* gobj);
/* 12765C */ bool ftPk_SpecialLw_8012765C(HSD_GObj* gobj);
/* 12779C */ void ftPk_SpecialLw_SetState_Unk1(HSD_GObj* gobj);
/* 1277AC */ void ftPk_SpecialLw_SpawnEffect(HSD_GObj* gobj);
/* 1278BC */ void ftPk_SpecialLw_Enter(HSD_GObj* gobj);
/* 127924 */ void ftPk_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 12798C */ void ftPk_SpecialLw_ChangeMotion_Unk00(HSD_GObj* gobj);
/* 1279EC */ void ftPk_SpecialLw_ChangeMotion_Unk01(HSD_GObj* gobj);
/* 127A54 */ void ftPk_SpecialLw_ChangeMotion_Unk02(HSD_GObj* gobj);
/* 127ACC */ void ftPk_SpecialLw_ChangeMotion_Unk03(HSD_GObj* gobj);
/* 127B4C */ void ftPk_SpecialLw_ChangeMotion_Unk04(HSD_GObj* gobj);
/* 127BAC */ void ftPk_SpecialLw_ChangeMotion_Unk05(HSD_GObj* gobj);
/* 127C14 */ void ftPk_SpecialLw_ChangeMotion_Unk06(HSD_GObj* gobj);
/* 127C74 */ void ftPk_SpecialLw_ChangeMotion_Unk07(HSD_GObj* gobj);
/* 127CDC */ void ftPk_SpecialLwStart_Anim(HSD_GObj* gobj);
/* 127D60 */ void ftPk_SpecialAirLwStart_Anim(HSD_GObj* gobj);
/* 127DE4 */ void ftPk_SpecialLwLoop0_Anim(HSD_GObj* gobj);
/* 127EC0 */ void ftPk_SpecialAirLwLoop0_Anim(HSD_GObj* gobj);
/* 127FB0 */ void ftPk_SpecialLwLoop1_Anim(HSD_GObj* gobj);
/* 128000 */ void ftPk_SpecialAirLwLoop1_Anim(HSD_GObj* gobj);
/* 128050 */ void ftPk_SpecialLwEnd_Anim(HSD_GObj* gobj);
/* 12808C */ void ftPk_SpecialAirLwEnd_Anim(HSD_GObj* gobj);
/* 1280C8 */ void ftPk_SpecialLwStart_Phys(HSD_GObj* gobj);
/* 1280E8 */ void ftPk_SpecialAirLwStart_Phys(HSD_GObj* gobj);
/* 128108 */ void ftPk_SpecialLwLoop0_Phys(HSD_GObj* gobj);
/* 128128 */ void ftPk_SpecialAirLwLoop0_Phys(HSD_GObj* gobj);
/* 128148 */ void ftPk_SpecialLwLoop1_Phys(HSD_GObj* gobj);
/* 128168 */ void ftPk_SpecialAirLwLoop1_Phys(HSD_GObj* gobj);
/* 1281AC */ void ftPk_SpecialLwEnd_Phys(HSD_GObj* gobj);
/* 1281CC */ void ftPk_SpecialAirLwEnd_Phys(HSD_GObj* gobj);
/* 1281EC */ void ftPk_SpecialLwStart_Coll(HSD_GObj* gobj);
/* 128214 */ void ftPk_SpecialAirLwStart_Coll(HSD_GObj* gobj);
/* 12823C */ void ftPk_SpecialLwLoop0_Coll(HSD_GObj* gobj);
/* 128264 */ void ftPk_SpecialAirLwLoop0_Coll(HSD_GObj* gobj);
/* 12828C */ void ftPk_SpecialLwLoop1_Coll(HSD_GObj* gobj);
/* 1282B4 */ void ftPk_SpecialAirLwLoop1_Coll(HSD_GObj* gobj);
/* 1282DC */ void ftPk_SpecialLwEnd_Coll(HSD_GObj* gobj);
/* 128304 */ void ftPk_SpecialAirLwEnd_Coll(HSD_GObj* gobj);
#define GALE01_124830
/* 124830 */ void ftPk_SpecialN_Enter(HSD_GObj* gobj);
/* 12489C */ void ftPk_SpecialAirN_Enter(HSD_GObj* gobj);
/* 124908 */ void ftPk_SpecialN_Anim(HSD_GObj* gobj);
/* 124A20 */ void ftPk_SpecialAirN_Anim(HSD_GObj* gobj);
/* 124B6C */ void ftPk_SpecialN_IASA(HSD_GObj* gobj);
/* 124B70 */ void ftPk_SpecialAirN_IASA(HSD_GObj* gobj);
/* 124B74 */ void ftPk_SpecialN_Phys(HSD_GObj* gobj);
/* 124B94 */ void ftPk_SpecialAirN_Phys(HSD_GObj* gobj);
/* 124BB4 */ void ftPk_SpecialN_Coll(HSD_GObj* gobj);
/* 124C20 */ void ftPk_SpecialAirN_Coll(HSD_GObj* gobj);
/* 124C90 */ void ftPk_SpecialN_SpawnEffect0(HSD_GObj* gobj);
/* 124D2C */ void ftPk_SpecialN_SpawnEffect1(HSD_GObj* gobj);
/* 124DC8 */ void ftPk_SpecialN_80124DC8(HSD_GObj* gobj);
#define GALE01_124EAC
/* 124EAC */ void ftPk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 124FA0 */ void ftPk_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 124FE0 */ void ftPk_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 125024 */ void ftPk_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 1250C0 */ void ftPk_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 12525C */ void ftPk_SpecialAirSHold_Anim(HSD_GObj* gobj);
/* 12532C */ void ftPk_SpecialAirSHold_IASA(HSD_GObj* gobj);
/* 12537C */ void ftPk_SpecialAirSHold_Phys(HSD_GObj* gobj);
/* 1253D8 */ void ftPk_SpecialAirSHold_Coll(HSD_GObj* gobj);
/* 12561C */ void ftPk_SpecialAirS0_Anim(HSD_GObj* gobj);
/* 1256B8 */ void ftPk_SpecialAirS0_IASA(HSD_GObj* gobj);
/* 1256DC */ void ftPk_SpecialAirS0_Phys(HSD_GObj* gobj);
/* 125738 */ void ftPk_SpecialAirS0_Coll(HSD_GObj* gobj);
/* 125910 */ void ftPk_SpecialAirS1_Anim(HSD_GObj* gobj);
/* 125950 */ void ftPk_SpecialAirS1_IASA(HSD_GObj* gobj);
/* 125958 */ void ftPk_SpecialAirS1_Phys(HSD_GObj* gobj);
/* 1259D8 */ void ftPk_SpecialAirS1_Coll(HSD_GObj* gobj);
/* 125B70 */ void ftPk_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 125BB0 */ void ftPk_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 125BF4 */ void ftPk_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 125C80 */ void ftPk_SpecialAirSEnd_Coll(HSD_GObj* gobj);
/* 124E38 */ void ftPk_SpecialS_Enter(HSD_GObj* gobj);
/* 124F24 */ void ftPk_SpecialS_ZeroVelocity(HSD_GObj* gobj);
/* 124F64 */ void ftPk_SpecialSStart_Anim(HSD_GObj* gobj);
/* 124FDC */ void ftPk_SpecialSStart_IASA(HSD_GObj* gobj);
/* 124FE4 */ void ftPk_SpecialSStart_Phys(HSD_GObj* gobj);
/* 125084 */ void ftPk_SpecialSStart_Coll(HSD_GObj* gobj);
/* 1250FC */ void ftPk_SpecialS_ChangeMotion_Unk00(HSD_GObj* gobj);
/* 12515C */ void ftPk_SpecialS_ChangeMotion_Unk01(HSD_GObj* gobj);
/* 1251BC */ void ftPk_SpecialSHold_Anim(HSD_GObj* gobj);
/* 1252FC */ void ftPk_SpecialSHold_IASA(HSD_GObj* gobj);
/* 12535C */ void ftPk_SpecialSHold_Phys(HSD_GObj* gobj);
/* 12539C */ void ftPk_SpecialSHold_Coll(HSD_GObj* gobj);
/* 125414 */ void ftPk_SpecialS_ChangeMotion_Unk02(HSD_GObj* gobj);
/* 125474 */ void ftPk_SpecialS_ChangeMotion_Unk03(HSD_GObj* gobj);
/* 1254D4 */ void ftPk_SpecialS_ChangeMotion_Unk04(HSD_GObj* gobj);
/* 125528 */ void ftPk_SpecialS_ChangeMotion_Unk05(HSD_GObj* gobj);
/* 12557C */ void ftPk_SpecialS0_Anim(HSD_GObj* gobj);
/* 1256B4 */ void ftPk_SpecialS0_IASA(HSD_GObj* gobj);
/* 1256BC */ void ftPk_SpecialS0_Phys(HSD_GObj* gobj);
/* 1256FC */ void ftPk_SpecialS0_Coll(HSD_GObj* gobj);
/* 125774 */ void ftPk_SpecialS_ChangeMotion_Unk06(HSD_GObj* gobj);
/* 1257D4 */ void ftPk_SpecialS_ChangeMotion_Unk07(HSD_GObj* gobj);
/* 125834 */ void ftPk_SpecialS_ChangeMotion_Unk08(HSD_GObj* gobj);
/* 1258A0 */ void ftPk_SpecialS_ChangeMotion_Unk09(HSD_GObj* gobj);
/* 12590C */ void ftPk_SpecialS1_Anim(HSD_GObj* gobj);
/* 12594C */ void ftPk_SpecialS1_IASA(HSD_GObj* gobj);
/* 125954 */ void ftPk_SpecialS1_Phys(HSD_GObj* gobj);
/* 1259D4 */ void ftPk_SpecialS1_Coll(HSD_GObj* gobj);
/* 125A54 */ void ftPk_SpecialS_ChangeMotion_Unk10(HSD_GObj* gobj);
/* 125B34 */ void ftPk_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 125BAC */ void ftPk_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 125BB4 */ void ftPk_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 125C44 */ void ftPk_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 125CD0 */ void ftPk_SpecialS_ChangeMotion_Unk11(HSD_GObj* gobj);
/* 125D28 */ void ftPk_SpecialS_ChangeMotion_Unk12(HSD_GObj* gobj);
#define GALE01_11ED38
/* 11ED38 */ void ftPp_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 11EE18 */ void ftPp_Init_OnItemInvisible(HSD_GObj* gobj);
/* 11EE60 */ void ftPp_Init_OnItemVisible(HSD_GObj* gobj);
/* 11EEA8 */ void ftPp_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 11EEFC */ void ftPp_Init_OnLoad(HSD_GObj* gobj);
/* 11EF3C */ void ftPp_Init_OnLoadForNana(Fighter* fp);
/* 11EFE8 */ void ftPp_Init_OnDeath(HSD_GObj* gobj);
/* 11F060 */ void ftPp_Init_8011F060(HSD_GObj* gobj);
/* 11F0A4 */ void ftPp_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 11F0E4 */ void ftPp_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 11F128 */ void ftPp_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 11F16C */ void ftPp_Init_8011F16C(HSD_GObj* gobj, Item_GObj* item_gobj);
/* 3CD2D0 */ extern MotionState ftPp_Init_MotionStateTable[ftPp_MS_SelfCount];
/* 3CD610 */ extern char ftPp_Init_DatFilename[];
/* 3CD61C */ extern char ftPp_Init_DataName[];
/* 3CD738 */ extern char ftPp_Init_AnimDatFilename[];
/* 3CD7B4 */ extern Fighter_DemoStrings ftPp_Init_DemoMotionFilenames;
/* 3CD7C4 */ extern Fighter_CostumeStrings ftPp_Init_CostumeStrings[];
/* 459E68 */ extern UnkCostumeStruct ftPp_CostumeList[4];
#define GALE01_1211B4
/* 1211B4 */ void ftPp_SpecialHi_Enter(Fighter_GObj* gobj);
/* 12122C */ void ftPp_SpecialAirHi_Enter(Fighter_GObj* gobj);
/* 1212C4 */ void ftPp_SpecialHiStart_0_Anim(Fighter_GObj* gobj);
/* 1213CC */ void ftPp_SpecialAirHiStart_0_Anim(Fighter_GObj* gobj);
/* 1214D4 */ void ftPp_SpecialHiStart_0_IASA(Fighter_GObj* gobj);
/* 121558 */ void ftPp_SpecialAirHiStart_0_IASA(Fighter_GObj* gobj);
/* 1215DC */ void ftPp_SpecialHiStart_0_Phys(Fighter_GObj* gobj);
/* 121680 */ void ftPp_SpecialAirHiStart_0_Phys(Fighter_GObj* gobj);
/* 121740 */ void ftPp_SpecialHiStart_0_Coll(Fighter_GObj* gobj);
/* 12177C */ void ftPp_SpecialAirHiStart_0_Coll(Fighter_GObj* gobj);
/* 1217EC */ void ftPp_SpecialHi_801217EC(Fighter_GObj* gobj);
/* 12184C */ void ftPp_SpecialHi_8012184C(Fighter_GObj* gobj);
/* 1218AC */ void ftPp_SpecialHi_801218AC(Fighter_GObj* gobj);
/* 1218F8 */ void ftPp_SpecialHi_801218F8(Fighter_GObj* gobj);
/* 121944 */ void ftPp_SpecialHiThrow_0_Anim(Fighter_GObj* gobj);
/* 1219F4 */ void ftPp_SpecialAirHiThrow_0_Anim(Fighter_GObj* gobj);
/* 121AC8 */ void ftPp_SpecialHiThrow_0_IASA(Fighter_GObj* gobj);
/* 121ACC */ void ftPp_SpecialAirHiThrow_0_IASA(Fighter_GObj* gobj);
/* 121AD0 */ void ftPp_SpecialHiThrow_0_Phys(Fighter_GObj* gobj);
/* 121B74 */ void ftPp_SpecialAirHiThrow_0_Phys(Fighter_GObj* gobj);
/* 121C34 */ void ftPp_SpecialHiThrow_0_Coll(Fighter_GObj* gobj);
/* 121C70 */ void ftPp_SpecialAirHiThrow_0_Coll(Fighter_GObj* gobj);
/* 121CE0 */ void ftPp_SpecialHi_80121CE0(Fighter_GObj* gobj);
/* 121D40 */ void ftPp_SpecialHi_80121D40(Fighter_GObj* gobj);
/* 121DA0 */ void ftPp_SpecialHi_80121DA0(Fighter_GObj* gobj);
/* 121DD8 */ void ftPp_SpecialHi_80121DD8(Fighter_GObj* gobj);
/* 121E10 */ void ftPp_SpecialHiStart_1_Anim(Fighter_GObj* gobj);
/* 121E4C */ void ftPp_SpecialAirHiStart_1_Anim(Fighter_GObj* gobj);
/* 121EB0 */ void ftPp_SpecialHiStart_1_IASA(Fighter_GObj* gobj);
/* 121EB4 */ void ftPp_SpecialAirHiStart_1_IASA(Fighter_GObj* gobj);
/* 121EB8 */ void ftPp_SpecialHiStart_1_Phys(Fighter_GObj* gobj);
/* 121ED8 */ void ftPp_SpecialAirHiStart_1_Phys(Fighter_GObj* gobj);
/* 121F2C */ void ftPp_SpecialHiStart_1_Coll(Fighter_GObj* gobj);
/* 121F68 */ void ftPp_SpecialAirHiStart_1_Coll(Fighter_GObj* gobj);
/* 121FD8 */ void ftPp_SpecialHi_80121FD8(Fighter_GObj* gobj);
/* 122038 */ void ftPp_SpecialHi_80122038(Fighter_GObj* gobj);
/* 122098 */ void ftPp_SpecialHi_80122098(Fighter_GObj* gobj);
/* 1220D4 */ void ftPp_SpecialHi_801220D4(Fighter_GObj* gobj);
/* 122110 */ void ftPp_SpecialHiThrow_1_Anim(Fighter_GObj* gobj);
/* 12214C */ void ftPp_SpecialAirHiThrow_1_Anim(Fighter_GObj* gobj);
/* 1221AC */ void ftPp_SpecialHiThrow_1_IASA(Fighter_GObj* gobj);
/* 1221B0 */ void ftPp_SpecialAirHiThrow_1_IASA(Fighter_GObj* gobj);
/* 1221B4 */ void ftPp_SpecialHiThrow_1_Phys(Fighter_GObj* gobj);
/* 1221D4 */ void ftPp_SpecialAirHiThrow_1_Phys(Fighter_GObj* gobj);
/* 122228 */ void ftPp_SpecialHiThrow_1_Coll(Fighter_GObj* gobj);
/* 122264 */ void ftPp_SpecialAirHiThrow_1_Coll(Fighter_GObj* gobj);
/* 1222E8 */ void ftPp_SpecialHi_801222E8(Fighter_GObj* gobj);
/* 122348 */ void ftPp_SpecialHi_80122348(Fighter_GObj* gobj);
/* 122380 */ void ftPp_SpecialHi_80122380(Fighter_GObj* gobj);
/* 1223B8 */ void ftPp_SpecialHiThrow2_Anim(Fighter_GObj* gobj);
/* 122410 */ void ftPp_SpecialAirHiThrow2_Anim(Fighter_GObj* gobj);
/* 12248C */ void ftPp_SpecialHiThrow2_IASA(Fighter_GObj* gobj);
/* 122490 */ void ftPp_SpecialAirHiThrow2_IASA(Fighter_GObj* gobj);
/* 122494 */ void ftPp_SpecialHiThrow2_Phys(Fighter_GObj* gobj);
/* 122538 */ void ftPp_SpecialAirHiThrow2_Phys(Fighter_GObj* gobj);
/* 122664 */ void ftPp_SpecialHiThrow2_Coll(Fighter_GObj* gobj);
/* 1226A0 */ void ftPp_SpecialAirHiThrow2_Coll(Fighter_GObj* gobj);
/* 1227AC */ void ftPp_SpecialHi_801227AC(Fighter_GObj* gobj);
/* 12280C */ void ftPp_SpecialHi_8012280C(Fighter_GObj* gobj);
/* 122898 */ void ftPp_SpecialHi_80122898(Fighter_GObj* gobj);
#define GALE01_122904
/* 122904 */ void ftPp_SpecialLw_Enter(Fighter_GObj* gobj);
/* 122988 */ void ftPp_SpecialAirLw_Enter(Fighter_GObj* gobj);
/* 122A0C */ void ftPp_SpecialLw_Anim(Fighter_GObj* gobj);
/* 122A8C */ void ftPp_SpecialAirLw_Anim(Fighter_GObj* gobj);
/* 122B0C */ void ftPp_SpecialLw_IASA(Fighter_GObj* gobj);
/* 122B10 */ void ftPp_SpecialAirLw_IASA(Fighter_GObj* gobj);
/* 122B14 */ void ftPp_SpecialLw_Phys(Fighter_GObj* gobj);
/* 122B34 */ void ftPp_SpecialAirLw_Phys(Fighter_GObj* gobj);
/* 122B54 */ void fn_80122B54(Fighter_GObj* gobj);
/* 122C18 */ void ftPp_SpecialLw_Coll(Fighter_GObj* gobj);
/* 122D04 */ void ftPp_SpecialAirLw_Coll(Fighter_GObj* gobj);
/* 122D2C */ void fn_80122D2C(Fighter_GObj* gobj);
#define GALE01_11F1F8
/* 11F1F8 */ void ftPp_SpecialN_Enter(HSD_GObj* gobj);
/* 11F26C */ void ftPp_SpecialAirN_Enter(HSD_GObj* gobj);
/* 11F318 */ void ftPp_SpecialN_Anim(HSD_GObj* gobj);
/* 11F354 */ void ftPp_SpecialAirN_Anim(HSD_GObj* gobj);
/* 11F390 */ void ftPp_SpecialN_IASA(HSD_GObj* gobj);
/* 11F394 */ void ftPp_SpecialAirN_IASA(HSD_GObj* gobj);
/* 11F398 */ void ftPp_SpecialN_Phys(HSD_GObj* gobj);
/* 11F3B8 */ void ftPp_SpecialAirN_Phys(HSD_GObj* gobj);
/* 11F3D8 */ void ftPp_SpecialN_Coll(HSD_GObj* gobj);
/* 11F454 */ void ftPp_SpecialAirN_Coll(HSD_GObj* gobj);
#define GALE01_11F99C
/* 11F68C */ void ftPp_SpecialS_8011F68C(Fighter_GObj* gobj);
/* 11F6FC */ bool ftPp_SpecialS_8011F6FC(Fighter_GObj* gobj);
/* 11F720 */ void ftPp_SpecialS_8011F720(Fighter_GObj* gobj);
/* 11F964 */ bool ftPp_SpecialS_8011F964(Fighter_GObj*);
/* 11F99C */ void ftPp_SpecialS_Enter(Fighter_GObj* gobj);
/* 11FB08 */ void ftPp_SpecialAirS_Enter(Fighter_GObj* gobj);
/* 11FC78 */ void ftPp_SpecialS1_Anim(Fighter_GObj* gobj);
/* 11FCD0 */ void ftPp_SpecialS2_Anim(Fighter_GObj* gobj);
/* 11FD9C */ void ftPp_SpecialAirS1_Anim(Fighter_GObj* gobj);
/* 11FE48 */ void ftPp_SpecialAirS2_Anim(Fighter_GObj* gobj);
/* 11FF40 */ void ftPp_SpecialS1_IASA(Fighter_GObj* gobj);
/* 11FF90 */ void ftPp_SpecialS2_IASA(Fighter_GObj* gobj);
/* 11FFE0 */ void ftPp_SpecialAirS1_IASA(Fighter_GObj* gobj);
/* 120030 */ void ftPp_SpecialAirS2_IASA(Fighter_GObj* gobj);
/* 120080 */ void ftPp_SpecialS1_Phys(Fighter_GObj* gobj);
/* 120230 */ void ftPp_SpecialS2_Phys(Fighter_GObj* gobj);
/* 1203E0 */ void ftPp_SpecialAirS1_Phys(Fighter_GObj* gobj);
/* 120520 */ void ftPp_SpecialAirS2_Phys(Fighter_GObj* gobj);
/* 120660 */ void ftPp_SpecialS1_Coll(Fighter_GObj* gobj);
/* 120854 */ void ftPp_SpecialS2_Coll(Fighter_GObj* gobj);
/* 120A48 */ void ftPp_SpecialAirS1_Coll(Fighter_GObj* gobj);
/* 120C58 */ void ftPp_SpecialAirS2_Coll(Fighter_GObj* gobj);
/* 120E68 */ void ftPp_SpecialS_80120E68(Fighter_GObj* gobj);
/* 120FE0 */ bool ftPp_SpecialS_80120FE0(Fighter_GObj* gobj);
/* 1210C8 */ void ftPp_SpecialS_801210C8(Fighter_GObj* gobj);
/* 12114C */ void ftPp_SpecialS_8012114C(Fighter_GObj* gobj);
/* 121164 */ void ftPp_SpecialS_80121164(Fighter_GObj* gobj);
#define MELEE_FT_CHARA_FTPURIN_FORWARD_H
static MotionFlags const ftPr_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftPr_MF_SpecialHi =
    ftPr_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftPr_MF_SpecialLw =
    ftPr_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftPr_MF_SpecialN =
    ftPr_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepSfx;
static MotionFlags const ftPr_MF_SpecialS =
    ftPr_MF_Special | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftPr_MF_SpecialAirHi =
    ftPr_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftPr_MF_SpecialAirLw =
    ftPr_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftPr_MF_SpecialAirN =
    ftPr_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftPr_MF_SpecialAirS =
    ftPr_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftPr_MF_SpecialNCharged =
    ftPr_MF_SpecialN | Ft_MF_Unk19;
static MotionFlags const ftPr_SpecialAirNCharged =
    ftPr_MF_SpecialNCharged | Ft_MF_SkipParasol;
typedef enum ftPurin_MotionState {
    ftPr_MS_JumpAerialF1 = ftCo_MS_Count,
    ftPr_MS_JumpAerialF2,
    ftPr_MS_JumpAerialF3,
    ftPr_MS_JumpAerialF4,
    ftPr_MS_JumpAerialF5,
    ftPr_MS_SpecialNStartR,
    ftPr_MS_SpecialNStartL,
    ftPr_MS_SpecialNLoop,
    ftPr_MS_SpecialNFull,
    ftPr_MS_SpecialNRelease,
    ftPr_MS_SpecialNTurn,
    ftPr_MS_SpecialNEndR,
    ftPr_MS_SpecialNEndL,
    ftPr_MS_SpecialAirNStartR,
    ftPr_MS_SpecialAirNStartL,
    ftPr_MS_SpecialAirNChargeLoop,
    ftPr_MS_SpecialAirNChargeFull,
    ftPr_MS_SpecialAirNChargeRelease,
    ftPr_MS_SpecialAirNStartTurn,
    ftPr_MS_SpecialAirNEndR,
    ftPr_MS_SpecialAirNEndL,
    ftPr_MS_SpecialNHit,
    ftPr_MS_SpecialS,
    ftPr_MS_SpecialAirS,
    ftPr_MS_SpecialHiL,
    ftPr_MS_SpecialAirHiL,
    ftPr_MS_SpecialHiR,
    ftPr_MS_SpecialAirHiR,
    ftPr_MS_SpecialLwL,
    ftPr_MS_SpecialAirLwL,
    ftPr_MS_SpecialLwR,
    ftPr_MS_SpecialAirLwR,
    ftPr_MS_Count,
    ftPr_MS_SelfCount = ftPr_MS_Count - ftCo_MS_Count,
} ftPurin_MotionState;
typedef enum ftPr_Submotion {
    ftPr_SM_JumpAerialF1 = ftCo_SM_Count,
    ftPr_SM_JumpAerialF2,
    ftPr_SM_JumpAerialF3,
    ftPr_SM_JumpAerialF4,
    ftPr_SM_JumpAerialF5,
    ftPr_SM_SpecialNStartR,
    ftPr_SM_SpecialNStartL,
    ftPr_SM_SpecialNChargeLoop,
    ftPr_SM_SpecialNChargeFull,
    ftPr_SM_SpecialNChargeRelease,
    ftPr_SM_SpecialNStartTurn,
    ftPr_SM_SpecialNEndR,
    ftPr_SM_SpecialNEndL,
    ftPr_SM_SpecialAirNStartR,
    ftPr_SM_SpecialAirNStartL,
    ftPr_SM_SpecialAirNChargeLoop,
    ftPr_SM_SpecialAirNChargeFull,
    ftPr_SM_SpecialAirNChargeRelease,
    ftPr_SM_SpecialAirNStartTurn,
    ftPr_SM_SpecialAirNEndR,
    ftPr_SM_SpecialAirNEndL,
    ftPr_SM_SpecialNHit,
    ftPr_SM_SpecialS,
    ftPr_SM_SpecialAirS,
    ftPr_SM_SpecialHiL,
    ftPr_SM_SpecialAirHiL,
    ftPr_SM_SpecialHiR,
    ftPr_SM_SpecialAirHiR,
    ftPr_SM_SpecialLwL,
    ftPr_SM_SpecialAirLwL,
    ftPr_SM_SpecialLwR,
    ftPr_SM_SpecialAirLwR,
    ftPr_SM_Count,
    ftPr_SM_SelfCount = ftPr_SM_Count - ftCo_SM_Count,
} ftPr_Submotion;
#define GALE01_13C2F8
/* 13C2F8 */ void ftPr_Init_8013C2F8(void);
/* 13C318 */ void ftPr_Init_OnDeath(HSD_GObj* gobj);
/* 13C340 */ void ftPr_Init_OnUserDataRemove(HSD_GObj* gobj);
/* 13C360 */ void ftPr_Init_8013C360(HSD_GObj* gobj);
/* 13C494 */ void ftPr_Init_8013C494(HSD_GObj* gobj);
/* 13C4F0 */ void ftPr_Init_UnkMtxFunc0(HSD_GObj* gobj, int arg1, Mtx vmtx);
/* 13C614 */ void ftPr_Init_UnkIntBoolFunc0(Fighter* fp, int arg1, bool arg2);
/* 13C664 */ HSD_JObj* ftPr_Init_UnkMotionStates6(HSD_GObj* gobj);
/* 13C67C */ void ftPr_Init_OnLoad(HSD_GObj* gobj);
/* 13C6EC */ void ftPr_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 13C798 */ void ftPr_Init_OnItemInvisible(HSD_GObj* gobj);
/* 13C7E8 */ void ftPr_Init_OnItemVisible(HSD_GObj* gobj);
/* 13C838 */ void ftPr_Init_OnItemDrop(HSD_GObj* gobj, bool bool1);
/* 13C88C */ void ftPr_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 13C8C4 */ void ftPr_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 13C908 */ void ftPr_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 13C94C */ void ftPr_Init_8013C94C(HSD_GObj* gobj);
/* 3CFEF0 */ extern MotionState ftPr_Init_MotionStateTable[ftPr_MS_SelfCount];
/* 3D02F0 */ extern char ftPr_Init_DatFilename[];
/* 3D02FC */ extern char ftPr_Init_DataName[];
/* 3D047C */ extern char ftPr_Init_AnimDatFilename[];
/* 3D04F8 */ extern Fighter_DemoStrings ftPr_Init_DemoMotionFilenames;
/* 3D0508 */ extern Fighter_CostumeStrings ftPr_Init_CostumeStrings[];
/* 3D05C8 */ extern f32 ftPr_Init_803D05C8[4];
/* 3D05D8 */ extern f32 ftPr_Init_803D05D8[4];
/* 3D0610 */ extern ftCollisionBox ftPr_Init_803D0610;
/* 45A1F8 */ extern UnkCostumeStruct ftPr_CostumeList[5];
#define GALE01_13C9C8
/* 13C9C8 */ void ftPr_SpecialHi_Enter(HSD_GObj* gobj);
/* 13CA98 */ void ftPr_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 13CB68 */ void ftPr_SpecialHi_Anim(HSD_GObj* gobj);
/* 13CBE4 */ void ftPr_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 13CC60 */ void ftPr_SpecialHi_IASA(HSD_GObj* gobj);
/* 13CC64 */ void ftPr_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 13CC68 */ void ftPr_SpecialHi_Phys(HSD_GObj* gobj);
/* 13CC88 */ void ftPr_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 13CCA8 */ void ftPr_SpecialHi_Coll(HSD_GObj* gobj);
/* 13CCE4 */ void ftPr_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 13CD34 */ void ftPr_SpecialHi_8013CD34(HSD_GObj* gobj);
/* 13CDD8 */ void ftPr_SpecialHi_8013CDD8(HSD_GObj* gobj);
/* 13CE7C */ void ftPr_SpecialHi_8013CE7C(HSD_GObj* gobj);
#define GALE01_13CE8C
/* 13CE8C */ void ftPr_SpecialLw_Enter(HSD_GObj* gobj);
/* 13CF2C */ void ftPr_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 13CFCC */ void ftPr_SpecialLw_Anim(HSD_GObj* gobj);
/* 13D008 */ void ftPr_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 13D044 */ void ftPr_SpecialLw_IASA(HSD_GObj* gobj);
/* 13D048 */ void ftPr_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 13D04C */ void ftPr_SpecialLw_Phys(HSD_GObj* gobj);
/* 13D06C */ void ftPr_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 13D08C */ void ftPr_SpecialLw_Coll(HSD_GObj* gobj);
/* 13D0C8 */ void ftPr_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 13D104 */ void ftPr_SpecialLw_8013D104(HSD_GObj* gobj);
/* 13D19C */ void ftPr_SpecialLw_8013D19C(HSD_GObj* gobj);
#define GALE01_13D658
/* 13D658 */ void ftPr_SpecialS_8013D658(HSD_GObj* gobj);
/* 13D764 */ void ftPr_SpecialS_8013D764(HSD_GObj* gobj);
/* 13D8B0 */ void ftPr_SpecialS_8013D8B0(HSD_GObj* gobj);
/* 13D8E4 */ void ftPr_SpecialS_8013D8E4(HSD_GObj* gobj);
/* 13DA24 */ void ftPr_SpecialS_8013DA24(HSD_GObj* gobj, bool unk,
                                         MotionFlags flags, float anim_start);
/* 13DC64 */ void ftPr_SpecialS_8013DC64(HSD_GObj* gobj);
/* 13DD54 */ void ftPr_SpecialS_8013DD54(HSD_GObj* gobj, bool arg1);
/* 13DEA8 */ void ftPr_SpecialN_Enter(HSD_GObj* gobj);
/* 13DF60 */ void ftPr_SpecialAirN_Enter(HSD_GObj* gobj);
/* 13E014 */ void ftPr_SpecialNStart_Anim(HSD_GObj* gobj);
/* 13E0F0 */ void ftPr_SpecialNLoop_Anim(HSD_GObj* gobj);
/* 13E2A0 */ void ftPr_SpecialNFull_Anim(HSD_GObj* gobj);
/* 13E410 */ void ftPr_SpecialNRelease_Anim(HSD_GObj* gobj);
/* 13E7E0 */ void ftPr_SpecialNTurn_Anim(HSD_GObj* gobj);
/* 13EAD8 */ void ftPr_SpecialNEnd_Anim(HSD_GObj* gobj);
/* 13EDB0 */ void ftPr_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 13EE84 */ void ftPr_SpecialAirNChargeLoop_Anim(HSD_GObj* gobj);
/* 13F034 */ void ftPr_SpecialAirNChargeFull_Anim(HSD_GObj* gobj);
/* 13F1A4 */ void ftPr_SpecialAirNChargeRelease_Anim(HSD_GObj* gobj);
/* 13F708 */ void ftPr_SpecialAirNStartTurn_Anim(HSD_GObj* gobj);
/* 13F9C0 */ void ftPr_SpecialAirNEnd_Anim(HSD_GObj* gobj);
/* 13FCAC */ void ftPr_SpecialNHit_Anim(HSD_GObj* gobj);
/* 13FF00 */ void ftPr_SpecialNStart_IASA(HSD_GObj* gobj);
/* 13FF04 */ void ftPr_SpecialNLoop_IASA(HSD_GObj* gobj);
/* 140064 */ void ftPr_SpecialNFull_IASA(HSD_GObj* gobj);
/* 1401C4 */ void ftPr_SpecialNRelease_IASA(HSD_GObj* gobj);
/* 140344 */ void ftPr_SpecialNTurn_IASA(HSD_GObj* gobj);
/* 140348 */ void ftPr_SpecialNEnd_IASA(HSD_GObj* gobj);
/* 14034C */ void ftPr_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 140350 */ void ftPr_SpecialAirNChargeLoop_IASA(HSD_GObj* gobj);
/* 1404B0 */ void ftPr_SpecialAirNChargeFull_IASA(HSD_GObj* gobj);
/* 140610 */ void ftPr_SpecialAirNChargeRelease_IASA(HSD_GObj* gobj);
/* 140614 */ void ftPr_SpecialAirNStartTurn_IASA(HSD_GObj* gobj);
/* 140618 */ void ftPr_SpecialAirNEnd_IASA(HSD_GObj* gobj);
/* 14061C */ void ftPr_SpecialNHit_IASA(HSD_GObj* gobj);
/* 140620 */ void ftPr_SpecialNStart_Phys(HSD_GObj* gobj);
/* 140650 */ void ftPr_SpecialNLoop_Phys(HSD_GObj* gobj);
/* 140680 */ void ftPr_SpecialNFull_Phys(HSD_GObj* gobj);
/* 1406B0 */ void ftPr_SpecialNRelease_Phys(HSD_GObj* gobj);
/* 1408B8 */ void ftPr_SpecialNTurn_Phys(HSD_GObj* gobj);
/* 140BAC */ void ftPr_SpecialNEnd_Phys(HSD_GObj* gobj);
/* 140BE8 */ void ftPr_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 140C18 */ void ftPr_SpecialAirNChargeLoop_Phys(HSD_GObj* gobj);
/* 140C48 */ void ftPr_SpecialAirNChargeFull_Phys(HSD_GObj* gobj);
/* 140C78 */ void ftPr_SpecialAirNChargeRelease_Phys(HSD_GObj* gobj);
/* 140DF8 */ void ftPr_SpecialAirNStartTurn_Phys(HSD_GObj* gobj);
/* 140F10 */ void ftPr_SpecialAirNEnd_Phys(HSD_GObj* gobj);
/* 140F40 */ void ftPr_SpecialNHit_Phys(HSD_GObj* gobj);
/* 140FA4 */ void ftPr_SpecialNStart_Coll(HSD_GObj* gobj);
/* 141054 */ void ftPr_SpecialNLoop_Coll(HSD_GObj* gobj);
/* 141154 */ void ftPr_SpecialNFull_Coll(HSD_GObj* gobj);
/* 141254 */ void ftPr_SpecialNRelease_Coll(HSD_GObj* gobj);
/* 1415F4 */ void ftPr_SpecialNTurn_Coll(HSD_GObj* gobj);
/* 1416D0 */ void ftPr_SpecialNEnd_Coll(HSD_GObj* gobj);
/* 141730 */ void ftPr_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 1417E0 */ void ftPr_SpecialAirNChargeLoop_Coll(HSD_GObj* gobj);
/* 1418E0 */ void ftPr_SpecialAirNChargeFull_Coll(HSD_GObj* gobj);
/* 1419E0 */ void ftPr_SpecialAirNChargeRelease_Coll(HSD_GObj* gobj);
/* 141FB8 */ void ftPr_SpecialAirNStartTurn_Coll(HSD_GObj* gobj);
/* 142070 */ void ftPr_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/* 1420D0 */ void ftPr_SpecialNHit_Coll(HSD_GObj* gobj);
/* 14222C */ void ftPr_SpecialN_8014222C(HSD_GObj* gobj);
#define GALE01_13D234
/* 13D234 */ void ftPr_SpecialS_Enter(HSD_GObj* gobj);
/* 13D2A0 */ void ftPr_SpecialAirS_Enter(HSD_GObj* gobj);
/* 13D30C */ void ftPr_SpecialS_Anim(HSD_GObj* gobj);
/* 13D348 */ void ftPr_SpecialAirS_Anim(HSD_GObj* gobj);
/* 13D384 */ void ftPr_SpecialS_IASA(HSD_GObj* gobj);
/* 13D388 */ void ftPr_SpecialAirS_IASA(HSD_GObj* gobj);
/* 13D38C */ void ftPr_SpecialS_Phys(HSD_GObj* gobj);
/* 13D3AC */ void ftPr_SpecialAirS_Phys(HSD_GObj* gobj);
/* 13D518 */ void ftPr_SpecialS_Coll(HSD_GObj* gobj);
/* 13D554 */ void ftPr_SpecialAirS_Coll(HSD_GObj* gobj);
/* 13D590 */ void ftPr_SpecialS_8013D590(HSD_GObj* gobj);
/* 13D5F0 */ void ftPr_SpecialS_8013D5F0(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTPURIN_INLINES_H
static inline void ftPr_NormalizeAndSetRollAngle(HSD_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    while (fp->mv.pr.specialn.x14 < 0.0f) {
        fp->mv.pr.specialn.x14 += 3.14159265358979323846 * 2;
    }
    while (fp->mv.pr.specialn.x14 > 3.14159265358979323846 * 2) {
        fp->mv.pr.specialn.x14 -= 3.14159265358979323846 * 2;
    }
    ftPartSetRotX(fp, FtPart_YRotN, fp->mv.pr.specialn.x14);
}
static inline void ftPr_SetFacingDir(Fighter* fp)
{
    if (fp->mv.pr.specialn.facing_dir != 0.0f) {
        fp->mv.pr.specialn.x34.x = fp->facing_dir =
            fp->mv.pr.specialn.facing_dir;
    }
    fp->mv.pr.specialn.facing_dir = 0.0f;
    fp->mv.pr.specialn.xC = 0;
}
static inline void ftPr_MirrorSpecialN(Fighter* fp)
{
    fp->self_vel.x = -fp->self_vel.x;
    fp->gr_vel = -fp->gr_vel;
    fp->xE4_ground_accel_1 = -fp->xE4_ground_accel_1;
    fp->mv.pr.specialn.x10 = -fp->mv.pr.specialn.x10;
    fp->mv.pr.specialn.x14 = -fp->mv.pr.specialn.x14;
    fp->mv.pr.specialn.x18 = -fp->mv.pr.specialn.x18;
    fp->mv.pr.specialn.x1C = -fp->mv.pr.specialn.x1C;
    fp->mv.pr.specialn.facing_dir = -fp->mv.pr.specialn.facing_dir;
    fp->mv.pr.specialn.x34.x = -fp->mv.pr.specialn.x34.x;
    fp->mv.pr.specialn.x34.y = -fp->mv.pr.specialn.x34.y;
}
#define MELEE_FT_CHARA_FTSAMUS_FORWARD_H
typedef struct Fighter ftSs_Fighter;
static MotionFlags const ftSs_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftSs_MF_SpecialN =
    ftSs_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftSs_MF_SpecialS =
    ftSs_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipThrowException;
static MotionFlags const ftSs_MF_SpecialLw =
    ftSs_MF_Special | Ft_MF_KeepColAnimHitStatus | Ft_MF_SkipThrowException;
static MotionFlags const ftSs_MF_SpecialHi =
    ftSs_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_KeepSfx;
static MotionFlags const ftSs_MF_SpecialAirN =
    ftSs_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftSs_MF_SpecialAirS =
    ftSs_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftSs_MF_SpecialAirLw =
    ftSs_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftSs_MF_SpecialAirHi =
    ftSs_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftSs_MF_SpecialSSmash =
    ftSs_MF_SpecialS | Ft_MF_SkipRumble;
static MotionFlags const ftSs_MF_SpecialAirSSmash =
    ftSs_MF_SpecialSSmash | Ft_MF_SkipParasol;
static MotionFlags const ftSs_MF_ZairCatch =
    Ft_MF_SkipModelPartVis | Ft_MF_SkipMetalB;
typedef enum ftSamus_MotionState {
    ftSs_MS_SpecialLw = ftCo_MS_Count,
    ftSs_MS_SpecialAirLw,
    ftSs_MS_SpecialNStart,
    ftSs_MS_SpecialNHold,
    ftSs_MS_SpecialNCancel,
    ftSs_MS_SpecialN,
    ftSs_MS_SpecialAirNStart,
    ftSs_MS_SpecialAirN,
    ftSs_MS_SpecialS,
    ftSs_MS_SpecialSSmash,
    ftSs_MS_SpecialAirS,
    ftSs_MS_SpecialAirSSmash,
    ftSs_MS_SpecialHi,
    ftSs_MS_SpecialAirHi,
    ftSs_MS_SpecialLwBomb,
    ftSs_MS_SpecialAirLwBomb,
    ftSs_MS_AirCatch,
    ftSs_MS_AirCatchHit,
    ftSs_MS_Count,
    ftSs_MS_SelfCount = ftSs_MS_Count - ftCo_MS_Count,
} ftSamus_MotionState;
typedef enum ftSs_Submotion {
    ftSs_SM_SpecialLw = ftCo_SM_Count,
    ftSs_SM_SpecialAirLw,
    ftSs_SM_SpecialNStart,
    ftSs_SM_SpecialNHold,
    ftSs_SM_SpecialNCancel,
    ftSs_SM_SpecialN,
    ftSs_SM_SpecialAirNStart,
    ftSs_SM_SpecialAirN,
    ftSs_SM_SpecialS,
    ftSs_SM_SpecialSSmash,
    ftSs_SM_SpecialAirS,
    ftSs_SM_SpecialAirSSmash,
    ftSs_SM_SpecialHi,
    ftSs_SM_SpecialAirHi,
    ftSs_SM_SpecialLwBomb,
    ftSs_SM_SpecialAirLwBomb,
    ftSs_SM_AirCatch,
    ftSs_SM_AirCatchHit,
    ftSs_SM_Count,
    ftSs_SM_SelfCount = ftSs_SM_Count - ftCo_SM_Count,
} ftSs_Submotion;
#define GALE01_12832C
/* 12832C */ void ftSs_Init_OnDeath(HSD_GObj* gobj);
/* 12837C */ void ftSs_Init_OnLoad(HSD_GObj* gobj);
/* 128428 */ void ftSs_Init_80128428(HSD_GObj* gobj);
/* 128464 */ void ftSs_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 128544 */ void ftSs_Init_OnItemInvisible(HSD_GObj* gobj);
/* 12858C */ void ftSs_Init_OnItemVisible(HSD_GObj* gobj);
/* 1285D4 */ void ftSs_Init_OnItemDrop(HSD_GObj* gobj, bool bool1);
/* 128628 */ void ftSs_Init_UnkMotionStates4(HSD_GObj* gobj);
/* 128684 */ void ftSs_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 128770 */ void ftSs_Init_80128770(HSD_AObj* gobj, float rate);
/* 1287C4 */ void ftSs_Init_CreateThrowGrappleBeam(HSD_GObj* gobj,
                                                   s32 motion_state,
                                                   float anim_speed);
/* 128944 */ void ftSs_Init_80128944(HSD_GObj* gobj, float farg1, float farg2);
/* 128A1C */ bool ftSs_Init_80128A1C(HSD_GObj* gobj, M2C_UNK arg1, float farg1);
/* 128AC8 */ float ftSs_Init_80128AC8(HSD_GObj* gobj, float farg1,
                                      float farg2);
/* 128B1C */ void ftSs_Init_80128B1C(HSD_GObj* gobj, float, float, float);
/* 3CE2D0 */ extern MotionState ftSs_Init_MotionStateTable[ftSs_MS_SelfCount];
/* 3CE510 */ extern char ftSs_Init_DatFilename[];
/* 3CE51C */ extern char ftSs_Init_DataName[];
/* 3CE5EC */ extern char ftSs_Init_AnimDatFilename[];
/* 3CE668 */ extern Fighter_DemoStrings ftSs_Init_DemoMotionFilenames;
/* 3CE678 */ extern Fighter_CostumeStrings ftSs_Init_CostumeStrings[];
/* 459F88 */ extern UnkCostumeStruct ftSs_CostumeList[5];
#define GALE01_12A674
/* 12A674 */ void ftSs_SpecialHi_Enter(HSD_GObj* gobj);
/* 12A738 */ void ftSs_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 12A81C */ void ftSs_SpecialHi_Anim(HSD_GObj* gobj);
/* 12A8C4 */ void ftSs_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 12A96C */ void ftSs_SpecialHi_IASA(HSD_GObj* gobj);
/* 12AA3C */ void ftSs_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 12AB0C */ void ftSs_SpecialHi_Phys(HSD_GObj* gobj);
/* 12ABB4 */ void ftSs_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 12AC00 */ void ftSs_SpecialHi_Coll(HSD_GObj* gobj);
/* 12ACF8 */ void ftSs_SpecialAirHi_Coll(HSD_GObj* gobj);
#define GALE01_128944
/* 128C04 */ void ftSs_SpecialLw_Anim(HSD_GObj* gobj);
/* 128CA0 */ void ftSs_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 128D3C */ void ftSs_SpecialLw_IASA(HSD_GObj* gobj);
/* 128E68 */ void ftSs_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 128E88 */ void ftSs_SpecialLw_Phys(HSD_GObj* gobj);
/* 128EF8 */ void ftSs_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 128F60 */ void ftSs_SpecialLw_Coll(HSD_GObj* gobj);
/* 128FD4 */ void ftSs_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 129048 */ void ftSs_SpecialLw_80129048(HSD_GObj* gobj);
/* 1290A4 */ void ftSs_SpecialLw_801290A4(HSD_GObj* gobj);
/* 129100 */ int ftSs_SpecialLw_80129100(HSD_GObj* gobj, int* arg1, int* arg2);
/* 129158 */ s32 ftSs_SpecialLw_80129158(HSD_GObj* gobj);
/* 1291A8 */ s32 ftSs_SpecialN_801291A8(HSD_GObj* gobj);
#define GALE01_11444C
/* 12ADF0 */ void ftSs_SpecialLw_8012ADF0(HSD_GObj* gobj);
/* 12AEBC */ void ftSs_SpecialLw_8012AEBC(HSD_GObj* gobj);
/* 12AF38 */ void ftSs_SpecialLw_8012AF38(HSD_GObj* gobj);
/* 12AF5C */ void ftSs_SpecialLw_Enter(HSD_GObj* gobj);
/* 12B09C */ void ftSs_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 12B150 */ void ftSs_SpecialLwBomb_Anim(HSD_GObj* gobj);
/* 12B264 */ void ftSs_SpecialAirLwBomb_Anim(HSD_GObj* gobj);
/* 12B358 */ void ftSs_SpecialLwBomb_IASA(HSD_GObj* gobj);
/* 12B3A4 */ void ftSs_SpecialAirLwBomb_IASA(HSD_GObj* gobj);
/* 12B3A8 */ void ftSs_SpecialLwBomb_Phys(HSD_GObj* gobj);
/* 12B41C */ void ftSs_SpecialAirLwBomb_Phys(HSD_GObj* gobj);
/* 12B488 */ void ftSs_SpecialLwBomb_Coll(HSD_GObj* gobj);
/* 12B4FC */ void ftSs_SpecialAirLwBomb_Coll(HSD_GObj* gobj);
/* 12B570 */ void ftSs_SpecialLw_8012B570(HSD_GObj* gobj);
/* 12B5F0 */ void ftSs_SpecialLw_8012B5F0(HSD_GObj* gobj);
/* 12B668 */ void ftSs_SpecialLw_8012B668(HSD_GObj* gobj);
#define GALE01_1122D8
/* 1291F0 */ void ftSs_SpecialN_801291F0(Fighter_GObj* gobj);
/* 129258 */ void ftSs_SpecialN_80129258(Fighter_GObj* gobj);
/* 12954C */ void ftSs_SpecialN_Enter(Fighter_GObj* gobj);
/* 1295F0 */ void ftSs_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 129684 */ void ftSs_SpecialNStart_Anim(Fighter_GObj* gobj);
/* 129774 */ void ftSs_SpecialNHold_Anim(Fighter_GObj* gobj);
/* 129940 */ void ftSs_SpecialNCancel_Anim(Fighter_GObj* gobj);
/* 1299D0 */ void ftSs_SpecialN_Anim(Fighter_GObj* gobj);
/* 129A14 */ void ftSs_SpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 129A98 */ void ftSs_SpecialAirN_Anim(Fighter_GObj* gobj);
/* 129B18 */ void ftSs_SpecialNStart_IASA(Fighter_GObj* gobj);
/* 129B1C */ void ftSs_SpecialNHold_IASA(Fighter_GObj* gobj);
/* 129C78 */ void ftSs_SpecialNCancel_IASA(Fighter_GObj* gobj);
/* 129C7C */ void ftSs_SpecialN_IASA(Fighter_GObj* gobj);
/* 129C80 */ void ftSs_SpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 129C84 */ void ftSs_SpecialAirN_IASA(Fighter_GObj* gobj);
/* 129C88 */ void ftSs_SpecialNStart_Phys(Fighter_GObj* gobj);
/* 129CA8 */ void ftSs_SpecialNHold_Phys(Fighter_GObj* gobj);
/* 129CC8 */ void ftSs_SpecialNCancel_Phys(Fighter_GObj* gobj);
/* 129CE8 */ void ftSs_SpecialN_Phys(Fighter_GObj* gobj);
/* 129D08 */ void ftSs_SpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 129D28 */ void ftSs_SpecialAirN_Phys(Fighter_GObj* gobj);
/* 129D48 */ void ftSs_SpecialNStart_Coll(Fighter_GObj* gobj);
/* 129DC8 */ void ftSs_SpecialNHold_Coll(Fighter_GObj* gobj);
/* 129E68 */ void ftSs_SpecialNCancel_Coll(Fighter_GObj* gobj);
/* 129EE8 */ void ftSs_SpecialN_Coll(Fighter_GObj* gobj);
/* 129F68 */ void ftSs_SpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 129FE8 */ void ftSs_SpecialAirN_Coll(Fighter_GObj* gobj);
/* 12A068 */ int ftSs_SpecialS_8012A068(Fighter_GObj* gobj);
/* 12A074 */ void ftSs_SpecialS_8012A074(Fighter_GObj* gobj);
#define GALE01_12A1D8
/* 12A1D8 */ void ftSs_SpecialS_Enter(HSD_GObj* gobj);
/* 12A2AC */ void ftSs_SpecialAirS_Enter(HSD_GObj* gobj);
/* 12A380 */ void ftSs_SpecialS_Anim(HSD_GObj* gobj);
/* 12A3BC */ void ftSs_SpecialAirS_Anim(HSD_GObj* gobj);
/* 12A3F8 */ void ftSs_SpecialS_IASA(HSD_GObj* gobj);
/* 12A3FC */ void ftSs_SpecialAirS_IASA(HSD_GObj* gobj);
/* 12A400 */ void ftSs_SpecialS_Phys(HSD_GObj* gobj);
/* 12A420 */ void ftSs_SpecialAirS_Phys(HSD_GObj* gobj);
/* 12A468 */ void ftSs_SpecialS_Coll(HSD_GObj* gobj);
/* 12A4A4 */ void ftSs_SpecialAirS_Coll(HSD_GObj* gobj);
/* 12A4E0 */ void ftSs_SpecialSSmash_Anim(HSD_GObj* gobj);
/* 12A51C */ void ftSs_SpecialAirSSmash_Anim(HSD_GObj* gobj);
/* 12A558 */ void ftSs_SpecialSSmash_IASA(HSD_GObj* gobj);
/* 12A55C */ void ftSs_SpecialAirSSmash_IASA(HSD_GObj* gobj);
/* 12A560 */ void ftSs_SpecialSSmash_Phys(HSD_GObj* gobj);
/* 12A580 */ void ftSs_SpecialAirSSmash_Phys(HSD_GObj* gobj);
/* 12A5C8 */ void ftSs_SpecialSSmash_Coll(HSD_GObj* gobj);
/* 12A604 */ void ftSs_SpecialAirSSmash_Coll(HSD_GObj* gobj);
/* 12A640 */ void ftSs_SpecialS_8012A640(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTSAMUS_INLINES_H
#define GALE01_2B5518
/* 2B5518 */ bool it_802B5518(Item_GObj*, CollData*);
/* 2B55C8 */ HSD_GObj* it_802B55C8(Item_GObj* owner, Vec3*, Fighter_Part, s32,
                                   float facing_dir);
/* 2B56E4 */ void it_802B56E4(Item_GObj*, Vec3*, float, float, float);
/* 2B58D8 */ void it_2725_Logic108_Destroyed(Item_GObj*);
/* 2B5974 */ void it_802B5974(Item_GObj*);
/* 2B59C4 */ void it_2725_Logic108_PickedUp(Item_GObj*);
/* 2B5A98 */ bool itSamuschargeshot_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B5CB0 */ void itSamuschargeshot_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B5CB4 */ bool itSamuschargeshot_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B5CBC */ void it_802B5CBC(Item_GObj* gobj, Fighter_GObj*);
/* 2B5D54 */ bool itSamuschargeshot_UnkMotion8_Anim(Item_GObj* gobj);
/* 2B5E50 */ void itSamuschargeshot_UnkMotion8_Phys(Item_GObj* gobj);
/* 2B5EA0 */ bool itSamuschargeshot_UnkMotion8_Coll(Item_GObj* gobj);
/* 2B5EDC */ void it_802B5EDC(Item_GObj* gobj);
/* 2B5FD8 */ bool itSamusChargeshot_Logic108_DmgDealt(Item_GObj*);
/* 2B5FE0 */ bool itSamusChargeshot_Logic108_Clanked(Item_GObj*);
/* 2B5FE8 */ bool itSamusChargeshot_Logic108_Absorbed(Item_GObj*);
/* 2B5FF0 */ bool it_2725_Logic108_Reflected(Item_GObj*);
/* 2B613C */ bool itSamusChargeshot_Logic108_HitShield(Item_GObj*);
/* 2B6144 */ bool it_2725_Logic108_ShieldBounced(Item_GObj*);
/* 2B62B0 */ void itSamusChargeshot_Logic108_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7288 */ extern ItemStateTable it_803F7288[];
static inline void ftSamus_updateDamageDeathCBs(HSD_GObj* gobj)
{
    Fighter* fp = GET_FIGHTER(gobj);
    fp->take_dmg_cb = ftSs_Init_80128428;
    fp->death2_cb = ftSs_Init_80128428;
}
//// only used in ftsamus3 so far (maybe move to there)
static inline void ftSamus_SetAttrx2334(HSD_GObj* gobj)
{
    Fighter* fp = gobj->user_data;
    fp->u.ss.x2234 = 0;
}
static inline void ftSamus_destroyAllEF(HSD_GObj* gobj)
{
    if (gobj) {
        Fighter* fp = GET_FIGHTER(gobj);
        if (fp->u.ss.x2234) {
            efLib_DestroyAll(gobj);
            fp->u.ss.x2234 = 0;
        }
    }
}
static inline void ftSamus_UnkAndDestroyAllEF(HSD_GObj* gobj)
{
    if (gobj != 0L) {
        Fighter* fp = gobj->user_data;
        Item_GObj* x222C = fp->u.ss.x222C;
        if (x222C != 0L) {
            it_802B5974(x222C);
            fp->u.ss.x222C = 0L;
        }
        ftSamus_destroyAllEF(gobj);
    }
}
#define MELEE_FT_CHARA_FTSANDBAG_FORWARD_H
typedef enum ftSb_MotionState {
    ftSb_MS_WaitReverse = ftCo_MS_Count,
    ftSb_MS_Count,
    ftSb_MS_SelfCount = ftSb_MS_Count - ftCo_MS_Count,
} ftSb_MotionState;
typedef enum ftSb_Submotion {
    ftSb_SM_WaitReverse = ftCo_SM_Count,
    ftSb_SM_Count,
    ftSb_SM_SelfCount = ftSb_SM_Count - ftCo_SM_Count,
} ftSb_Submotion;
#define GALE01_14F9CC
/* 14F9CC */ void ftSb_Init_OnDeath(HSD_GObj* gobj);
/* 14F9D0 */ void ftSb_Init_OnLoad(HSD_GObj* gobj);
/* 14FA30 */ void ftSb_Init_8014FA30(Fighter* fp);
/* 14FB78 */ void ftSb_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 14FB9C */ void ftSb_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 14FBA0 */ void ftSb_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 14FBA4 */ void ftSb_Init_8014FBA4(HSD_GObj* gobj);
/* 14FC20 */ void ftSb_WaitReverse_Anim(HSD_GObj* gobj);
/* 14FC24 */ void ftSb_WaitReverse_IASA(HSD_GObj* gobj);
/* 14FC28 */ void ftSb_WaitReverse_Phys(HSD_GObj* gobj);
/* 14FC48 */ void ftSb_WaitReverse_Coll(HSD_GObj* gobj);
/* 3D3998 */ extern MotionState ftSb_Init_MotionStateTable[ftSb_MS_SelfCount];
/* 3D39B8 */ extern char ftSb_Init_DatFilename[];
/* 3D39C4 */ extern char ftSb_Init_DataName[];
/* 3D3A18 */ extern char ftSb_Init_AnimDatFilename[];
/* 3D3A24 */ extern Fighter_CostumeStrings ftSb_Init_CostumeStrings[];
/* 45A678 */ extern UnkCostumeStruct ftSb_CostumeList[1];
#define MELEE_FT_CHARA_FTSEAK_FORWARD_H
static MotionFlags const ftSk_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftSk_MF_SpecialS = ftSk_MF_Special | Ft_MF_KeepGfx;
static MotionFlags const ftSk_MF_SpecialLw =
    ftSk_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftSk_MF_SpecialN =
    ftSk_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipThrowException;
static MotionFlags const ftSk_MF_SpecialHi =
    ftSk_MF_SpecialS | Ft_MF_KeepFastFall | Ft_MF_KeepSfx;
static MotionFlags const ftSk_MF_SpecialAirS =
    ftSk_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftSk_MF_SpecialAirLw =
    ftSk_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftSk_MF_SpecialAirN =
    ftSk_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftSk_MF_SpecialAirHi =
    ftSk_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftSk_MF_SpecialSLoop = ftSk_MF_SpecialS | Ft_MF_Unk19;
static MotionFlags const ftSk_MF_SpecialNLoop = ftSk_MF_SpecialN | Ft_MF_Unk19;
static MotionFlags const ftSk_MF_SpecialAirSLoop =
    ftSk_MF_SpecialSLoop | Ft_MF_SkipParasol;
static MotionFlags const ftSk_MF_SpecialAirNLoop =
    ftSk_MF_SpecialNLoop | Ft_MF_SkipParasol;
typedef enum ftSeak_MotionState {
    ftSk_MS_SpecialNStart = ftCo_MS_Count,
    ftSk_MS_SpecialNLoop,
    ftSk_MS_SpecialNCancel,
    ftSk_MS_SpecialNEnd,
    ftSk_MS_SpecialAirNStart,
    ftSk_MS_SpecialAirNLoop,
    ftSk_MS_SpecialAirNCancel,
    ftSk_MS_SpecialAirNEnd,
    ftSk_MS_SpecialSStart,
    ftSk_MS_SpecialS,
    ftSk_MS_SpecialSEnd,
    ftSk_MS_SpecialAirSStart,
    ftSk_MS_SpecialAirS,
    ftSk_MS_SpecialAirSEnd,
    ftSk_MS_SpecialHiStart_0,
    ftSk_MS_SpecialHiStart_1,
    ftSk_MS_SpecialHi,
    ftSk_MS_SpecialAirHiStart_0,
    ftSk_MS_SpecialAirHiStart_1,
    ftSk_MS_SpecialAirHi,
    ftSk_MS_SpecialLw,
    ftSk_MS_SpecialLw2,
    ftSk_MS_SpecialAirLw,
    ftSk_MS_SpecialAirLw2,
    ftSk_MS_Count,
    ftSk_MS_SelfCount = ftSk_MS_Count - ftCo_MS_Count,
} ftSeak_MotionState;
typedef enum ftSk_Submotion {
    ftSk_SM_SpecialNStart = ftCo_SM_Count,
    ftSk_SM_SpecialNLoop,
    ftSk_SM_SpecialNCancel,
    ftSk_SM_SpecialNEnd,
    ftSk_SM_SpecialAirNStart,
    ftSk_SM_SpecialAirNLoop,
    ftSk_SM_SpecialAirNCancel,
    ftSk_SM_SpecialAirNEnd,
    ftSk_SM_SpecialSStart,
    ftSk_SM_SpecialSEnd,
    ftSk_SM_SpecialS,
    ftSk_SM_SpecialAirSStart,
    ftSk_SM_SpecialAirSEnd,
    ftSk_SM_SpecialAirS,
    ftSk_SM_SpecialHiStart,
    ftSk_SM_SpecialHi,
    ftSk_SM_SpecialAirHiStart,
    ftSk_SM_SpecialAirHi,
    ftSk_SM_SpecialLw,
    ftSk_SM_SpecialLw2,
    ftSk_SM_SpecialAirLw,
    ftSk_SM_SpecialAirLw2,
    ftSk_SM_Count,
    ftSk_SM_SelfCount = ftSk_SM_Count - ftCo_SM_Count,
} ftSk_Submotion;
typedef struct itChainSegment itChainSegment;
#define GALE01_110094
/* 110094 */ void ftSk_Init_OnDeath(HSD_GObj* gobj);
/* 1100EC */ void ftSk_Init_OnLoad(HSD_GObj* gobj);
/* 110198 */ void ftSk_Init_80110198(HSD_GObj* gobj);
/* 1101CC */ void ftSk_Init_UnkMotionStates4(HSD_GObj* gobj);
/* 110204 */ void ftSk_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 1102E4 */ void ftSk_Init_OnItemInvisible(HSD_GObj* gobj);
/* 11032C */ void ftSk_Init_OnItemVisible(HSD_GObj* gobj);
/* 110374 */ void ftSk_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 1103C8 */ void ftSk_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 110408 */ void ftSk_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 11044C */ void ftSk_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3CC060 */ extern MotionState ftSk_Init_MotionStateTable[ftSk_MS_SelfCount];
/* 3CC360 */ extern char ftSk_Init_DatFilename[];
/* 3CC36C */ extern char ftSk_Init_DataName[];
/* 3CC4CC */ extern char ftSk_Init_AnimDatFilename[];
/* 3CC548 */ extern Fighter_DemoStrings ftSk_Init_DemoMotionFilenames;
/* 3CC558 */ extern Fighter_CostumeStrings ftSk_Init_CostumeStrings[];
/* 459D18 */ extern UnkCostumeStruct ftSk_CostumeList[5];
#define GALE01_1130D0
/* 1130D0 */ void ftSk_SpecialHi_Enter(HSD_GObj* gobj);
/* 11312C */ void ftSk_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 113194 */ void ftSk_SpecialHiStart_0_Anim(HSD_GObj* gobj);
/* 1131D0 */ void ftSk_SpecialAirHiStart_0_Anim(HSD_GObj* gobj);
/* 11320C */ void ftSk_SpecialHiStart_0_IASA(HSD_GObj* gobj);
/* 113210 */ void ftSk_SpecialAirHiStart_0_IASA(HSD_GObj* gobj);
/* 113214 */ void ftSk_SpecialHiStart_0_Phys(HSD_GObj* gobj);
/* 113234 */ void ftSk_SpecialAirHiStart_0_Phys(HSD_GObj* gobj);
/* 113278 */ void ftSk_SpecialHiStart_0_Coll(HSD_GObj* gobj);
/* 1132B4 */ void ftSk_SpecialAirHiStart_0_Coll(HSD_GObj* gobj);
/* 1133FC */ void ftSk_SpecialHiStart_1_Anim(HSD_GObj* gobj);
/* 113438 */ void ftSk_SpecialAirHiStart_1_Anim(HSD_GObj* gobj);
/* 113474 */ void ftSk_SpecialHiStart_1_IASA(HSD_GObj* gobj);
/* 113478 */ void ftSk_SpecialAirHiStart_1_IASA(HSD_GObj* gobj);
/* 11347C */ void ftSk_SpecialHiStart_1_Phys(HSD_GObj* gobj);
/* 11349C */ void ftSk_SpecialAirHiStart_1_Phys(HSD_GObj* gobj);
/* 1134A0 */ void ftSk_SpecialHiStart_1_Coll(HSD_GObj* gobj);
/* 113540 */ void ftSk_SpecialAirHiStart_1_Coll(HSD_GObj* gobj);
/* 113C40 */ void ftSk_SpecialHi_Anim(HSD_GObj* gobj);
/* 113C7C */ void ftSk_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 113CDC */ void ftSk_SpecialHi_IASA(HSD_GObj* gobj);
/* 113CE0 */ void ftSk_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 113CE4 */ void ftSk_SpecialHi_Phys(HSD_GObj* gobj);
/* 113D04 */ void ftSk_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 113D80 */ void ftSk_SpecialHi_Coll(HSD_GObj* gobj);
/* 113DBC */ void ftSk_SpecialAirHi_Coll(HSD_GObj* gobj);
#define GALE01_11108C
/* 114160 */ void ftSk_SpecialLw_Enter(Fighter_GObj*);
/* 114224 */ void ftSk_SpecialAirLw_Enter(Fighter_GObj*);
/* 1142E8 */ void ftSk_SpecialLw_Anim(Fighter_GObj*);
/* 114328 */ void ftSk_SpecialAirLw_Anim(Fighter_GObj*);
/* 114368 */ void ftSk_SpecialLw_IASA(Fighter_GObj*);
/* 11436C */ void ftSk_SpecialAirLw_IASA(Fighter_GObj*);
/* 114370 */ void ftSk_SpecialLw_Phys(Fighter_GObj*);
/* 114390 */ void ftSk_SpecialAirLw_Phys(Fighter_GObj*);
/* 1143D4 */ void ftSk_SpecialLw_Coll(Fighter_GObj*);
/* 114410 */ void ftSk_SpecialAirLw_Coll(Fighter_GObj*);
/* 11444C */ void ftSk_SpecialLw_8011444C(Fighter_GObj*);
/* 11444C */ void ftSk_SpecialLw_80114758(Fighter_GObj*);
/* 1144B8 */ void ftSk_SpecialLw_801144B8(Fighter_GObj*);
/* 114524 */ void ftSk_SpecialLw2_Anim(Fighter_GObj*);
/* 114560 */ void ftSk_SpecialAirLw2_Anim(Fighter_GObj*);
/* 11459C */ void ftSk_SpecialLw2_IASA(Fighter_GObj*);
/* 1145A0 */ void ftSk_SpecialAirLw2_IASA(Fighter_GObj*);
/* 1145A4 */ void ftSk_SpecialLw2_Phys(Fighter_GObj*);
/* 1145C4 */ void ftSk_SpecialAirLw2_Phys(Fighter_GObj*);
/* 114608 */ void ftSk_SpecialLw2_Coll(Fighter_GObj*);
/* 114644 */ void ftSk_SpecialAirLw2_Coll(Fighter_GObj*);
/* 114680 */ void ftSk_SpecialLw_80114680(Fighter_GObj*);
/* 1146EC */ void ftSk_SpecialLw_801146EC(Fighter_GObj*);
#define GALE01_111FBC
/* 111FBC */ void ftSk_SpecialN_80111FBC(Fighter_GObj* gobj);
/* 1120E8 */ void ftSk_SpecialN_Enter(Fighter_GObj* gobj);
/* 112198 */ void ftSk_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 112248 */ void ftSk_SpecialNStart_Anim(Fighter_GObj* gobj);
/* 1122D8 */ void ftSk_SpecialNLoop_Anim(Fighter_GObj* gobj);
/* 112384 */ void ftSk_SpecialNCancel_Anim(Fighter_GObj* gobj);
/* 1123CC */ void ftSk_SpecialNEnd_Anim(Fighter_GObj* gobj);
/* 112450 */ void ftSk_SpecialAirNStart_Anim(Fighter_GObj* gobj);
/* 1124E0 */ void ftSk_SpecialAirNLoop_Anim(Fighter_GObj* gobj);
/* 11258C */ void ftSk_SpecialAirNCancel_Anim(Fighter_GObj* gobj);
/* 11260C */ void ftSk_SpecialAirNEnd_Anim(Fighter_GObj* gobj);
/* 1126C8 */ void ftSk_SpecialNStart_IASA(Fighter_GObj* gobj);
/* 1126CC */ void ftSk_SpecialNLoop_IASA(Fighter_GObj* gobj);
/* 112798 */ void ftSk_SpecialNCancel_IASA(Fighter_GObj* gobj);
/* 11279C */ void ftSk_SpecialNEnd_IASA(Fighter_GObj* gobj);
/* 1127A0 */ void ftSk_SpecialAirNStart_IASA(Fighter_GObj* gobj);
/* 1127A4 */ void ftSk_SpecialAirNLoop_IASA(Fighter_GObj* gobj);
/* 112870 */ void ftSk_SpecialAirNCancel_IASA(Fighter_GObj* gobj);
/* 112874 */ void ftSk_SpecialAirNEnd_IASA(Fighter_GObj* gobj);
/* 112878 */ void ftSk_SpecialNStart_Phys(Fighter_GObj* gobj);
/* 112898 */ void ftSk_SpecialNLoop_Phys(Fighter_GObj* gobj);
/* 1128B8 */ void ftSk_SpecialNCancel_Phys(Fighter_GObj* gobj);
/* 1128D8 */ void ftSk_SpecialNEnd_Phys(Fighter_GObj* gobj);
/* 1128F8 */ void ftSk_SpecialAirNStart_Phys(Fighter_GObj* gobj);
/* 112918 */ void ftSk_SpecialAirNLoop_Phys(Fighter_GObj* gobj);
/* 112938 */ void ftSk_SpecialAirNCancel_Phys(Fighter_GObj* gobj);
/* 112958 */ void ftSk_SpecialAirNEnd_Phys(Fighter_GObj* gobj);
/* 112978 */ void ftSk_SpecialNStart_Coll(Fighter_GObj* gobj);
/* 1129F8 */ void ftSk_SpecialNLoop_Coll(Fighter_GObj* gobj);
/* 112A78 */ void ftSk_SpecialNCancel_Coll(Fighter_GObj* gobj);
/* 112B00 */ void ftSk_SpecialNEnd_Coll(Fighter_GObj* gobj);
/* 112B98 */ void ftSk_SpecialAirNStart_Coll(Fighter_GObj* gobj);
/* 112C18 */ void ftSk_SpecialAirNLoop_Coll(Fighter_GObj* gobj);
/* 112C98 */ void ftSk_SpecialAirNCancel_Coll(Fighter_GObj* gobj);
/* 112CE4 */ void ftSk_SpecialAirNEnd_Coll(Fighter_GObj* gobj);
#define GALE01_110490
/* 110490 */ void ftSk_SpecialS_80110490(Fighter* fp);
/* 110610 */ void ftSk_SpecialS_80110610(HSD_GObj* gobj, s32 arg1, float arg8);
/* 110788 */ void ftSk_SpecialS_80110788(HSD_GObj* gobj);
/* 11097C */ void ftSk_SpecialS_8011097C(HSD_GObj* gobj);
/* 110980 */ void ftSk_SpecialS_UpdateHitboxes(HSD_GObj* gobj,
                                               Vec3* new_position,
                                               s32 hitbox_id);
/* 110A80 */ void ftSk_SpecialS_ZeroHitboxPositions(HSD_GObj* gobj);
/* 110AEC */ void ftSk_SpecialS_80110AEC(HSD_GObj* gobj);
/* 110BCC */ void ftSk_SpecialS_80110BCC(HSD_GObj* gobj);
/* 110E4C */ void ftSk_SpecialS_80110E4C(HSD_GObj* gobj);
/* 110E88 */ void ftSk_SpecialS_CheckAndDestroyChain(HSD_GObj* gobj);
/* 110EE8 */ void ftSk_SpecialS_80110EE8(HSD_GObj* gobj);
/* 110F18 */ void ftSk_SpecialS_ChainSomething(HSD_GObj* gobj);
/* 110F58 */ float ftSk_SpecialS_80110F58(HSD_GObj* gobj);
/* 110F64 */ float ftSk_SpecialS_80110F64(HSD_GObj* gobj);
/* 110F70 */ void ftSk_SpecialS_80110F70(HSD_GObj* gobj);
/* 111038 */ void ftSk_SpecialS_Enter(HSD_GObj* gobj);
/* 11108C */ void ftSk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 1110E8 */ bool ftSk_SpecialS_CheckInitChain(HSD_GObj* gobj);
/* 1112CC */ void ftSk_SpecialSStart_Anim(HSD_GObj* gobj);
/* 111308 */ void ftSk_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 111344 */ void ftSk_SpecialSStart_IASA(HSD_GObj* gobj);
/* 111348 */ void ftSk_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 11134C */ void ftSk_SpecialSStart_Phys(HSD_GObj* gobj);
/* 11136C */ void ftSk_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 1113C8 */ void ftSk_SpecialSStart_Coll(HSD_GObj* gobj);
/* 111404 */ void ftSk_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 111440 */ void ftSk_SpecialS_80111440(HSD_GObj* gobj);
/* 1114E4 */ void ftSk_SpecialS_801114E4(HSD_GObj* gobj);
/* 111588 */ void ftSk_SpecialS_Anim(HSD_GObj* gobj);
/* 111648 */ void ftSk_SpecialAirS_Anim(HSD_GObj* gobj);
/* 111708 */ void ftSk_SpecialS_IASA(HSD_GObj* gobj);
/* 111740 */ void ftSk_SpecialAirS_IASA(HSD_GObj* gobj);
/* 111778 */ void ftSk_SpecialS_Phys(HSD_GObj* gobj);
/* 111798 */ void ftSk_SpecialAirS_Phys(HSD_GObj* gobj);
/* 1117B8 */ void ftSk_SpecialS_Coll(HSD_GObj* gobj);
/* 1117F4 */ void ftSk_SpecialAirS_Coll(HSD_GObj* gobj);
/* 111830 */ void ftSk_SpecialS_80111830(HSD_GObj* gobj);
/* 111988 */ void ftSk_SpecialS_80111988(HSD_GObj* gobj);
/* 111A48 */ void ftSk_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 111B1C */ void ftSk_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 111BF0 */ void ftSk_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 111BF4 */ void ftSk_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 111BF8 */ void ftSk_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 111C18 */ void ftSk_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 111C38 */ void ftSk_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 111C74 */ void ftSk_SpecialAirSEnd_Coll(HSD_GObj* gobj);
/* 111CB0 */ void ftSk_SpecialS_80111CB0(HSD_GObj* gobj);
/* 111D54 */ void ftSk_SpecialS_80111D54(HSD_GObj* gobj);
/* 111DF8 */ void ftSk_SpecialS_80111DF8(HSD_GObj* gobj);
/* 111EB4 */ void ftSk_SpecialS_80111EB4(HSD_GObj* gobj);
/* 111F70 */ bool ftSk_SpecialS_80111F70(HSD_GObj* gobj);
/* 111FA0 */ int ftSk_SpecialS_80111FA0(HSD_GObj* gobj);
#define MELEE_FT_CHARA_FTYOSHI_FORWARD_H
struct S_UNK_YOSHI1;
typedef struct ftYs_DatAttrs ftYs_DatAttrs;
/// @todo Fix names
static MotionFlags const ftYs_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftYs_MF_MS_341 = Ft_MF_UnkUpdatePhys;
static MotionFlags const ftYs_MF_ShieldStart =
    Ft_MF_KeepFastFall | Ft_MF_KeepGfx | Ft_MF_SkipModel | Ft_MF_SkipAnimVel |
    Ft_MF_Unk06 | Ft_MF_SkipColAnim | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftYs_MF_ShieldHold =
    Ft_MF_Unk19 | Ft_MF_UnkUpdatePhys;
static MotionFlags const ftYs_MF_SpecialN =
    ftYs_MF_Special | Ft_MF_KeepFastFall;
static MotionFlags const ftYs_MF_SpecialAirHi =
    ftYs_MF_SpecialN | Ft_MF_KeepGfx | Ft_MF_SkipThrowException;
static MotionFlags const ftYs_MF_UnkBase = ftYs_MF_Special | Ft_MF_KeepSfx;
static MotionFlags const ftYs_MF_SpecialAirS = ftYs_MF_UnkBase | Ft_MF_KeepGfx;
static MotionFlags const ftYs_MF_MS_366 =
    ftYs_MF_UnkBase | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftYs_MF_SpecialS =
    ftYs_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftYs_MF_MS_365 =
    ftYs_MF_SpecialAirHi | Ft_MF_SkipParasol;
static MotionFlags const ftYs_MF_SpecialHi =
    ftYs_MF_SpecialAirS | Ft_MF_SkipParasol;
static MotionFlags const ftYs_MF_MS_368 = ftYs_MF_MS_366 | Ft_MF_SkipParasol;
static MotionFlags const ftYs_MF_SpecialN_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_SkipModel;
static MotionFlags const ftYs_MF_SpecialN_CollHit =
    ftYs_MF_SpecialN_Coll | Ft_MF_SkipHit;
typedef enum ftYoshi_MotionState {
    ftYs_MS_GuardOn_0 = ftCo_MS_Count,
    ftYs_MS_GuardHold,
    ftYs_MS_GuardOff,
    ftYs_MS_GuardDamage,
    ftYs_MS_GuardOn_1,
    ftYs_MS_SpecialN1,
    ftYs_MS_SpecialN1_0,
    ftYs_MS_SpecialN1_1,
    ftYs_MS_SpecialN2_0,
    ftYs_MS_SpecialN2_1,
    ftYs_MS_SpecialAirN1_0,
    ftYs_MS_SpecialAirN1_1,
    ftYs_MS_SpecialAirN1_2,
    ftYs_MS_SpecialAirN2_0,
    ftYs_MS_SpecialAirN2_1,
    /* 164 */ ftYs_MS_SpecialAirSStart_0,
    /* 165 */ ftYs_MS_SpecialAirSLoop_0,
    /* 166 */ ftYs_MS_SpecialAirSLoop_1,
    /* 167 */ ftYs_MS_SpecialAirSEnd,
    ftYs_MS_SpecialAirSStart_1,
    ftYs_MS_SpecialAirSLoop_2,
    ftYs_MS_SpecialAirSLoop_3,
    ftYs_MS_SpecialAirSLanding,
    ftYs_MS_SpecialHi,
    ftYs_MS_SpecialAirHi,
    ftYs_MS_SpecialLw,
    ftYs_MS_SpecialLwLanding,
    ftYs_MS_SpecialAirLw,
    ftYs_MS_Count,
    ftYs_MS_SelfCount = ftYs_MS_Count - ftCo_MS_Count,
} ftYoshi_MotionState;
typedef enum ftYs_Submotion {
    ftYs_SM_SpecialN1 = ftCo_SM_Count,
    ftYs_SM_SpecialN1_0,
    ftYs_SM_SpecialN2_1,
    ftYs_SM_SpecialAirN1_0,
    ftYs_SM_SpecialAirN1_1,
    ftYs_SM_SpecialAirN2,
    ftYs_SM_SpecialSStart,
    ftYs_SM_SpecialSLoop_0,
    ftYs_SM_SpecialSLoop_1,
    ftYs_SM_SpecialSEnd,
    ftYs_SM_SpecialAirSStart,
    ftYs_SM_SpecialAirSLoop_0,
    ftYs_SM_SpecialAirSLoop_1,
    ftYs_SM_SpecialAirSEnd,
    ftYs_SM_SpecialHi,
    ftYs_SM_SpecialAirHi,
    ftYs_SM_SpecialLw,
    ftYs_SM_SpecialLwLanding,
    ftYs_SM_SpecialAirLw,
    ftYs_SM_Count,
    ftYs_SM_SelfCount = ftYs_SM_Count - ftCo_SM_Count,
} ftYs_Submotion;
#define MELEE_FT_CHARA_FTYOSHI_FTYOSHI1_H
/* 12B6E8 */ void ftYs_Init_8012B6E8(Fighter* fp,
                                     struct S_UNK_YOSHI1* unk_struct_arg);
/* 12B804 */ void ftYs_Init_8012B804(Fighter* fp,
                                     struct S_UNK_YOSHI1* unk_struct_arg,
                                     float start_frame);
/* 12B8A4 */ void ftYs_Init_8012B8A4(HSD_GObj* gobj);
/* 12B918 */ void ftYs_Init_8012B918(HSD_GObj* gobj);
/* 12B960 */ void ftYs_Init_OnDeath(HSD_GObj* gobj);
/* 12B99C */ void ftYs_Init_OnLoad(HSD_GObj* gobj);
/* 12BA8C */ void ftYs_Init_8012BA8C(HSD_GObj* gobj);
/* 12BAC0 */ float ftYs_Init_8012BAC0(Fighter* fp);
/* 12BACC */ void ftYs_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 12BBAC */ void ftYs_Init_OnItemInvisible(HSD_GObj* gobj);
/* 12BBF4 */ void ftYs_Init_OnItemVisible(HSD_GObj* gobj);
/* 12BC3C */ void ftYs_Init_OnItemDrop(HSD_GObj* gobj, bool bool1);
/* 12BC90 */ void ftYs_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 12BCC8 */ void ftYs_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 12BD34 */ void ftYs_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3B75C0 */ extern Vec3 const ftYs_Unk1_803B75C0;
/* 3CE6D0 */ extern MotionState ftYs_Init_MotionStateTable[ftYs_MS_SelfCount];
/* 45A000 */ extern UnkCostumeStruct ftYs_CostumeList[6];
#define GALE01_12C030
/* 12BDA0 */ void ftYs_Init_8012BDA0(Fighter_GObj* gobj);
/* 12BE3C */ void ftYs_Init_8012BE3C(HSD_GObj* gobj);
/* 12BECC */ void ftYs_Init_8012BECC(Fighter_GObj* gobj);
/* 12C030 */ void ftYs_GuardOn_0_Anim(Fighter_GObj* gobj);
/* 12C114 */ void ftYs_GuardOn_0_IASA(Fighter_GObj* gobj);
/* 12C194 */ void ftYs_GuardOn_0_Phys(Fighter_GObj* gobj);
/* 12C1B4 */ void ftYs_GuardOn_0_Coll(Fighter_GObj* gobj);
/* 12C1D4 */ void ftYs_Shield_8012C1D4(Fighter_GObj* gobj);
/* 12C2F4 */ void ftYs_GuardHold_Anim(Fighter_GObj* gobj);
/* 12C3EC */ void ftYs_GuardHold_IASA(Fighter_GObj* gobj);
/* 12C45C */ void ftYs_GuardHold_Phys(Fighter_GObj* gobj);
/* 12C47C */ void ftYs_GuardHold_Coll(Fighter_GObj* gobj);
/* 12C49C */ void ftYs_Shield_8012C49C(Fighter_GObj* gobj);
/* 12C54C */ void ftYs_GuardOff_Anim(Fighter_GObj* gobj);
/* 12C59C */ void ftYs_GuardOff_IASA(Fighter_GObj* gobj);
/* 12C5C0 */ void ftYs_GuardOff_Phys(Fighter_GObj* gobj);
/* 12C5E0 */ void ftYs_GuardOff_Coll(Fighter_GObj* gobj);
/* 12C600 */ void ftYs_Shield_8012C600(Fighter_GObj* gobj, bool);
/* 12C7A4 */ void ftYs_GuardDamage_Anim(Fighter_GObj* gobj);
/* 12C80C */ void ftYs_GuardDamage_IASA(Fighter_GObj* gobj);
/* 12C810 */ void ftYs_GuardDamage_Phys(Fighter_GObj* gobj);
/* 12C830 */ void ftYs_GuardDamage_Coll(Fighter_GObj* gobj);
/* 12C850 */ void ftYs_Shield_8012C850(Fighter_GObj* gobj);
/* 12C914 */ void ftYs_Shield_8012C914(Fighter_GObj* gobj);
/* 12CACC */ void ftYs_Shield_8012CACC(Fighter_GObj* gobj);
/* 12CAD0 */ void ftYs_GuardOn_1_Anim(Fighter_GObj* gobj);
/* 12CBBC */ void ftYs_GuardOn_1_IASA(Fighter_GObj* gobj);
/* 12CBDC */ void ftYs_GuardOn_1_Phys(Fighter_GObj* gobj);
/* 12CBFC */ void ftYs_GuardOn_1_Coll(Fighter_GObj* gobj);
/* 12CC1C */ bool ftYs_Shield_8012CC1C(Fighter_GObj* gobj);
/* 3CEA98 */ extern char ftYs_Init_DatFilename[];
/* 3CEAA4 */ extern char ftYs_Init_DataName[];
/* 3CEC70 */ extern char ftYs_Init_AnimDatFilename[];
/* 3CECEC */ extern Fighter_DemoStrings ftYs_Init_DemoMotionFilenames;
/* 3CECFC */ extern Fighter_CostumeStrings ftYs_Init_CostumeStrings[];
#define GALE01_12DF00
/* 12DF18 */ void ftYs_SpecialS_8012DF18(Fighter_GObj* gobj);
/* 12DF8C */ void ftYs_SpecialS_8012DF8C(Fighter_GObj* gobj, Vec3*);
/* 12E110 */ void fn_8012E110(Fighter_GObj* gobj);
/* 12E270 */ void ftYs_SpecialS_8012E270(Fighter_GObj* gobj);
/* 12E2C4 */ void ftYs_SpecialHi_Enter(Fighter_GObj* gobj);
/* 12E33C */ void ftYs_SpecialAirHi_Enter(Fighter_GObj* gobj);
/* 12E3B4 */ void fn_8012E3B4(Fighter_GObj* gobj);
/* 12E44C */ void fn_8012E44C(Fighter_GObj* gobj);
/* 12E4DC */ void ftYs_SpecialHi_Anim(Fighter_GObj* gobj);
/* 12E538 */ void ftYs_SpecialAirHi_Anim(Fighter_GObj* gobj);
/* 12E594 */ void ftYs_SpecialHi_Phys(Fighter_GObj* gobj);
/* 12E5B4 */ void ftYs_SpecialAirHi_Phys(Fighter_GObj* gobj);
/* 12E5D4 */ void ftYs_SpecialHi_Coll(Fighter_GObj* gobj);
/* 12E5FC */ void ftYs_SpecialAirHi_Coll(Fighter_GObj* gobj);
/* 12E6F8 */ void ftYs_SpecialLw_Enter(Fighter_GObj* gobj);
/* 12E78C */ void ftYs_SpecialAirLw_Enter(Fighter_GObj* gobj);
/* 12E814 */ void ftYs_SpecialLw_Anim(Fighter_GObj* gobj);
/* 12E850 */ void ftYs_SpecialAirLw_Anim(Fighter_GObj* gobj);
/* 12E88C */ void ftYs_SpecialLw_Phys(Fighter_GObj* gobj);
/* 12E8CC */ void ftYs_SpecialAirLw_Phys(Fighter_GObj* gobj);
/* 12E924 */ void ftYs_SpecialLw_Coll(Fighter_GObj* gobj);
/* 12E944 */ void ftYs_SpecialAirLw_Coll(Fighter_GObj* gobj);
/* 12EA04 */ void ftYs_SpecialS_8012EA04(Fighter_GObj* gobj);
/* 12EA40 */ void ftYs_SpecialLwLanding_Anim(Fighter_GObj* gobj);
/* 12EA7C */ void ftYs_SpecialLwLanding_Phys(Fighter_GObj* gobj);
/* 12EA9C */ void ftYs_SpecialLwLanding_Coll(Fighter_GObj* gobj);
#define GALE01_12E6F8
/* 12E6F8 */ void ftYs_SpecialLw_Enter(Fighter_GObj* gobj);
/* 12E78C */ void ftYs_SpecialAirLw_Enter(Fighter_GObj* gobj);
/* 12E814 */ void ftYs_SpecialLw_Anim(Fighter_GObj* gobj);
/* 12E850 */ void ftYs_SpecialAirLw_Anim(Fighter_GObj* gobj);
/* 12E88C */ void ftYs_SpecialLw_Phys(Fighter_GObj* gobj);
/* 12E8CC */ void ftYs_SpecialAirLw_Phys(Fighter_GObj* gobj);
/* 12E924 */ void ftYs_SpecialLw_Coll(Fighter_GObj* gobj);
/* 12E944 */ void ftYs_SpecialAirLw_Coll(Fighter_GObj* gobj);
/* 12EA04 */ void ftYs_SpecialS_8012EA04(Fighter_GObj* gobj);
/* 12EA40 */ void ftYs_SpecialLwLanding_Anim(Fighter_GObj* gobj);
/* 12EA7C */ void ftYs_SpecialLwLanding_Phys(Fighter_GObj* gobj);
/* 12EA9C */ void ftYs_SpecialLwLanding_Coll(Fighter_GObj* gobj);
#define GALE01_12CDE8
/* 12CC6C */ Fighter_Part ftYs_SpecialN_GetBoneIndex(Fighter_GObj* gobj);
/* 12CC94 */ void ftYs_SpecialN_SetupItemVel(Fighter_GObj* gobj, Vec3* out);
/// @returns #Fighter::facing_dir
/* 12CCC4 */ float ftYs_SpecialN_GetFacingDir(Fighter_GObj* gobj);
/// @returns #Fighter::dmg.x182c_behavior
/* 12CCD0 */ float ftYs_SpecialN_GetDatAttr18(Fighter_GObj* gobj);
/* 12CCE0 */ float ftYs_SpecialN_GetDatAttr1C(Fighter_GObj* gobj);
/* 12CCF0 */ float ftYs_SpecialN_GetDatAttr20(Fighter_GObj* gobj);
/* 12CD00 */ float ftYs_SpecialN_GetDatAttr24(Fighter_GObj* gobj);
/* 12CD10 */ float ftYs_SpecialN_GetExtAttr28(void);
/* 12CD28 */ float ftYs_SpecialN_GetExtAttr2C(void);
/* 12CD40 */ float ftYs_SpecialN_8012CD40(void);
/* 12CD58 */ float ftYs_SpecialN_GetExtAttr34(void);
/* 12CD70 */ bool ftYs_SpecialN_GetExtAttr38(void);
/* 12CD88 */ void ftYs_SpecialN_8012CD88(Vec3*);
/* 12CDB4 */ float ftYs_SpecialN_8012CDB4(void);
/* 12CDD4 */ HSD_Joint* ftYs_SpecialN_8012CDD4(Fighter_GObj* gobj);
/* 12CDE8 */ void ftYs_SpecialN_Enter(Fighter_GObj* gobj);
/* 12CE64 */ void ftYs_SpecialAirN_Enter(Fighter_GObj* gobj);
/* 12D004 */ void fn_8012D004(HSD_GObj* gobj);
/* 12D0A0 */ void fn_8012D0A0(Fighter_GObj* gobj);
/* 12D128 */ void fn_8012D128(Fighter_GObj* gobj);
/* 12D1AC */ void fn_8012D1AC(Fighter_GObj* gobj);
/* 12D230 */ void fn_8012D230(Fighter_GObj* gobj);
/* 12D298 */ void fn_8012D298(Fighter_GObj* gobj);
/* 12D2F8 */ void fn_8012D2F8(Fighter_GObj* gobj);
/* 12D360 */ void fn_8012D360(Fighter_GObj* gobj);
/* 12D3C0 */ void fn_8012D3C0(Fighter_GObj* gobj);
/* 12D428 */ void fn_8012D428(Fighter_GObj* gobj);
/* 12D488 */ void fn_8012D488(Fighter_GObj* gobj);
/* 12D4F0 */ void fn_8012D4F0(Fighter_GObj* gobj);
/* 12D550 */ void ftYs_SpecialN1_Anim(Fighter_GObj* gobj);
/* 12D58C */ void ftYs_SpecialAirN1_0_Anim(Fighter_GObj* gobj);
/* 12D5C8 */ void ftYs_SpecialN1_1_Anim(Fighter_GObj* gobj);
/* 12D658 */ void ftYs_SpecialN1_0_Anim(Fighter_GObj* gobj);
/* 12D6D0 */ void ftYs_SpecialAirN1_2_Anim(Fighter_GObj* gobj);
/* 12D760 */ void ftYs_SpecialAirN1_1_Anim(Fighter_GObj* gobj);
/* 12D7D8 */ void ftYs_SpecialN2_1_Anim(Fighter_GObj* gobj);
/* 12D948 */ void ftYs_SpecialN2_0_Anim(Fighter_GObj* gobj);
/* 12DA04 */ void ftYs_SpecialAirN2_1_Anim(Fighter_GObj* gobj);
/* 12DB74 */ void ftYs_SpecialAirN2_0_Anim(Fighter_GObj* gobj);
/* 12DC30 */ void ftYs_SpecialN1_Phys(Fighter_GObj* gobj);
/* 12DC50 */ void ftYs_SpecialAirN1_0_Phys(Fighter_GObj* gobj);
/* 12DC70 */ void ftYs_SpecialN1_1_Phys(Fighter_GObj* gobj);
/* 12DC90 */ void ftYs_SpecialN1_0_Phys(Fighter_GObj* gobj);
/* 12DCB0 */ void ftYs_SpecialAirN1_2_Phys(Fighter_GObj* gobj);
/* 12DCD0 */ void ftYs_SpecialAirN1_1_Phys(Fighter_GObj* gobj);
/* 12DCF0 */ void ftYs_SpecialN2_1_Phys(Fighter_GObj* gobj);
/* 12DD10 */ void ftYs_SpecialN2_0_Phys(Fighter_GObj* gobj);
/* 12DD30 */ void ftYs_SpecialAirN2_1_Phys(Fighter_GObj* gobj);
/* 12DD50 */ void ftYs_SpecialAirN2_0_Phys(Fighter_GObj* gobj);
/* 12DD70 */ void ftYs_SpecialN1_Coll(Fighter_GObj* gobj);
/* 12DD98 */ void ftYs_SpecialAirN1_0_Coll(Fighter_GObj* gobj);
/* 12DDC0 */ void ftYs_SpecialN1_1_Coll(Fighter_GObj* gobj);
/* 12DDE8 */ void ftYs_SpecialN1_0_Coll(Fighter_GObj* gobj);
/* 12DE10 */ void ftYs_SpecialAirN1_2_Coll(Fighter_GObj* gobj);
/* 12DE38 */ void ftYs_SpecialAirN1_1_Coll(Fighter_GObj* gobj);
/* 12DE60 */ void ftYs_SpecialN2_1_Coll(Fighter_GObj* gobj);
/* 12DE88 */ void ftYs_SpecialN2_0_Coll(Fighter_GObj* gobj);
/* 12DEB0 */ void ftYs_SpecialAirN2_1_Coll(Fighter_GObj* gobj);
/* 12DED8 */ void ftYs_SpecialAirN2_0_Coll(Fighter_GObj* gobj);
#define GALE01_12EB48
/* 12EB48 */ void ftYs_SpecialS_8012EB48(Fighter_GObj* gobj);
/* 12EC7C */ void fn_8012EC7C(Fighter_GObj* gobj);
/* 12EDE8 */ void fn_8012EDE8(Fighter_GObj* gobj);
/* 12EFC0 */ void fn_8012EFC0(Fighter_GObj* gobj);
/* 12EFF4 */ void fn_8012EFF4(Fighter_GObj* gobj);
/* 12F0DC */ void ftYs_SpecialS_8012F0DC(Fighter_GObj* gobj, s32, s32, f32);
/* 12F35C */ void ftYs_SpecialS_8012F35C(Fighter_GObj* gobj);
/* 12F4B4 */ void ftYs_SpecialS_Enter(Fighter_GObj* gobj);
/* 12F588 */ void ftYs_SpecialAirS_Enter(Fighter_GObj* gobj);
/* 12F654 */ void ftYs_SpecialAirSStart_0_Anim(Fighter_GObj* gobj);
/* 12F750 */ void ftYs_SpecialAirSLoop_0_Anim(Fighter_GObj* gobj);
/* 12FAC4 */ void ftYs_SpecialAirSLoop_1_Anim(Fighter_GObj* gobj);
/* 12FFF4 */ void ftYs_SpecialAirSEnd_Anim(Fighter_GObj* gobj);
/* 130368 */ void ftYs_SpecialAirSStart_1_Anim(Fighter_GObj* gobj);
/* 130428 */ void ftYs_SpecialAirSLoop_2_Anim(Fighter_GObj* gobj);
/* 1306A8 */ void ftYs_SpecialAirSLoop_3_Anim(Fighter_GObj* gobj);
/* 130A24 */ void ftYs_SpecialAirSLanding_Anim(Fighter_GObj* gobj);
/* 130DB8 */ void ftYs_SpecialAirSStart_0_IASA(Fighter_GObj* gobj);
/* 130DBC */ void ftYs_SpecialAirSLoop_0_IASA(Fighter_GObj* gobj);
/* 130F7C */ void ftYs_SpecialAirSLoop_1_IASA(Fighter_GObj* gobj);
/* 130FD8 */ void ftYs_SpecialAirSEnd_IASA(Fighter_GObj* gobj);
/* 130FDC */ void ftYs_SpecialAirSStart_1_IASA(Fighter_GObj* gobj);
/* 130FEC */ void ftYs_SpecialAirSLoop_2_IASA(Fighter_GObj* gobj);
/* 131050 */ void ftYs_SpecialAirSLoop_3_IASA(Fighter_GObj* gobj);
/* 1310B4 */ void ftYs_SpecialAirSLanding_IASA(Fighter_GObj* gobj);
/* 1310C4 */ void ftYs_SpecialAirSStart_0_Phys(Fighter_GObj* gobj);
/* 1310E8 */ void ftYs_SpecialAirSLoop_0_Phys(Fighter_GObj* gobj);
/* 1312EC */ void ftYs_SpecialAirSLoop_1_Phys(Fighter_GObj* gobj);
/* 131618 */ void ftYs_SpecialAirSEnd_Phys(Fighter_GObj* gobj);
/* 131654 */ void ftYs_SpecialAirSStart_1_Phys(Fighter_GObj* gobj);
/* 13168C */ void ftYs_SpecialAirSLoop_2_Phys(Fighter_GObj* gobj);
/* 131718 */ void ftYs_SpecialAirSLoop_3_Phys(Fighter_GObj* gobj);
/* 1317A4 */ void ftYs_SpecialAirSLanding_Phys(Fighter_GObj* gobj);
/* 1317DC */ void ftYs_SpecialAirSStart_0_Coll(Fighter_GObj* gobj);
/* 13187C */ void ftYs_SpecialAirSLoop_0_Coll(Fighter_GObj* gobj);
/* 131B60 */ void ftYs_SpecialAirSLoop_1_Coll(Fighter_GObj* gobj);
/* 131E74 */ void ftYs_SpecialAirSEnd_Coll(Fighter_GObj* gobj);
/* 131ED4 */ void ftYs_SpecialAirSStart_1_Coll(Fighter_GObj* gobj);
/* 131F80 */ void ftYs_SpecialAirSLoop_2_Coll(Fighter_GObj* gobj);
/* 13245C */ void ftYs_SpecialAirSLoop_3_Coll(Fighter_GObj* gobj);
/* 1328F0 */ void ftYs_SpecialAirSLanding_Coll(Fighter_GObj* gobj);
/* 13295C */ void fn_8013295C(Fighter_GObj* gobj);
#define GALE01_14F1F0
/* 14F1F0 */ void ftBo_Init_OnDeath(HSD_GObj* gobj);
/* 14F218 */ void ftBo_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 14F2F8 */ void ftBo_Init_OnItemInvisible(HSD_GObj* gobj);
/* 14F340 */ void ftBo_Init_OnItemVisible(HSD_GObj* gobj);
/* 14F388 */ void ftBo_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 14F3DC */ void ftBo_Init_OnLoad(HSD_GObj* gobj);
/* 14F3FC */ void ftBo_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 3D34E8 */ extern char ftBo_Init_DatFilename[];
/* 3D34F4 */ extern char ftBo_Init_DataName[];
/* 3D3520 */ extern char ftBo_Init_AnimDatFilename[];
/* 3D3558 */ extern Fighter_CostumeStrings ftBo_Init_CostumeStrings[];
/* 45A630 */ extern UnkCostumeStruct ftBo_CostumeList[1];
#define GALE01_14F418
/* 14F418 */ void ftGl_Init_OnDeath(HSD_GObj* gobj);
/* 14F440 */ void ftGl_Init_OnLoad(HSD_GObj* gobj);
/* 14F460 */ void ftGl_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 14F540 */ void ftGl_Init_OnItemInvisible(HSD_GObj* gobj);
/* 14F588 */ void ftGl_Init_OnItemVisible(HSD_GObj* gobj);
/* 14F5D0 */ void ftGl_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 14F624 */ void ftGl_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 3D3568 */ extern char ftGl_Init_DatFilename[];
/* 3D3574 */ extern char ftGl_Init_DataName[];
/* 3D35A0 */ extern char ftGl_Init_AnimDatFilename[];
/* 3D35D8 */ extern Fighter_CostumeStrings ftGl_Init_CostumeStrings[];
/* 45A648 */ extern UnkCostumeStruct ftGl_CostumeList[1];
#define MELEE_FT_CHARA_FTZELDA_FORWARD_H
static MotionFlags const ftZd_MF_Special =
    Ft_MF_SkipModel | Ft_MF_SkipItemVis | Ft_MF_UnkUpdatePhys |
    Ft_MF_FreezeState;
static MotionFlags const ftZd_MF_SpecialN =
    ftZd_MF_Special | Ft_MF_KeepFastFall | Ft_MF_SkipColAnim;
static MotionFlags const ftZd_MF_SpecialHi =
    ftZd_MF_Special | Ft_MF_KeepFastFall | Ft_MF_KeepGfx;
static MotionFlags const ftZd_MF_SpecialLw =
    ftZd_MF_Special | Ft_MF_KeepColAnimHitStatus;
static MotionFlags const ftZd_MF_SpecialS =
    ftZd_MF_Special | Ft_MF_KeepGfx | Ft_MF_SkipThrowException;
static MotionFlags const ftZd_MF_SpecialAirN =
    ftZd_MF_SpecialN | Ft_MF_SkipParasol;
static MotionFlags const ftZd_MF_SpecialAirHi =
    ftZd_MF_SpecialHi | Ft_MF_SkipParasol;
static MotionFlags const ftZd_MF_SpecialAirLw =
    ftZd_MF_SpecialLw | Ft_MF_SkipParasol;
static MotionFlags const ftZd_MF_SpecialAirS =
    ftZd_MF_SpecialS | Ft_MF_SkipParasol;
static MotionFlags const ftZd_MF_SpecialN_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_KeepColAnimHitStatus |
    Ft_MF_SkipHit;
static MotionFlags const ftZd_MF_SpecialLw_Coll =
    ftCommon_GroundAirColl_MF | Ft_MF_KeepGfx | Ft_MF_KeepColAnimHitStatus |
    Ft_MF_SkipHit;
typedef enum ftZd_MotionState {
    ftZd_MS_SpecialN = ftCo_MS_Count,
    ftZd_MS_SpecialAirN,
    ftZd_MS_SpecialSStart,
    /* 158 */ ftZd_MS_SpecialSLoop,
    /* 159 */ ftZd_MS_SpecialSEnd,
    /* 15A */ ftZd_MS_SpecialAirSStart,
    /* 15B */ ftZd_MS_SpecialAirSLoop,
    /* 15C */ ftZd_MS_SpecialAirSEnd,
    ftZd_MS_SpecialHiStart_0,
    ftZd_MS_SpecialHiStart_1,
    ftZd_MS_SpecialHi,
    ftZd_MS_SpecialAirHiStart_0,
    ftZd_MS_SpecialAirHiStart_1,
    ftZd_MS_SpecialAirHi,
    ftZd_MS_SpecialLw,
    ftZd_MS_SpecialLw2,
    ftZd_MS_SpecialAirLw,
    ftZd_MS_SpecialAirLw2,
    ftZd_MS_Count,
    ftZd_MS_SelfCount = ftZd_MS_Count - ftCo_MS_Count,
} ftZd_MotionState;
typedef enum ftZd_Submotion {
    ftZd_SM_SpecialN = ftCo_SM_Count,
    ftZd_SM_SpecialAirN,
    ftZd_SM_SpecialSStart,
    ftZd_SM_SpecialSLoop,
    ftZd_SM_SpecialSEnd,
    ftZd_SM_SpecialAirSStart,
    ftZd_SM_SpecialAirSLoop,
    ftZd_SM_SpecialAirSEnd,
    ftZd_SM_SpecialHiStart,
    ftZd_SM_SpecialHi,
    ftZd_SM_SpecialAirHiStart,
    ftZd_SM_SpecialAirHi,
    ftZd_SM_SpecialLw,
    ftZd_SM_SpecialLw2,
    ftZd_SM_SpecialAirLw,
    ftZd_SM_SpecialAirLw2,
    ftZd_SM_Count,
    ftZd_SM_SelfCount = ftZd_SM_Count - ftCo_SM_Count,
} ftZd_Submotion;
#define GALE01_1393AC
/* 1392DC */ void ftZd_Init_OnDeath(HSD_GObj* gobj);
/* 139334 */ void ftZd_Init_OnLoad(HSD_GObj* gobj);
/* 1393AC */ void ftZd_Init_801393AC(HSD_GObj* gobj);
/* 1393CC */ void ftZd_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 1394AC */ void ftZd_Init_OnItemInvisible(HSD_GObj* gobj);
/* 1394F4 */ void ftZd_Init_OnItemVisible(HSD_GObj* gobj);
/* 13953C */ void ftZd_Init_OnItemDrop(HSD_GObj* gobj, bool flag);
/* 139590 */ void ftZd_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 1395C8 */ void ftZd_Init_801395C8(HSD_GObj* gobj);
/* 139624 */ void ftZd_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 139668 */ void ftZd_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 3CFA58 */ extern MotionState ftZd_Init_MotionStateTable[ftZd_MS_SelfCount];
/* 3CFC98 */ extern char ftZd_Init_DatFilename[];
/* 3CFCA4 */ extern char ftZd_Init_DataName[];
/* 3CFE24 */ extern char ftZd_Init_AnimDatFilename[];
/* 3CFEA0 */ extern Fighter_DemoStrings ftZd_Init_DemoMotionFilenames;
/* 3CFEB0 */ extern Fighter_CostumeStrings ftZd_Init_CostumeStrings[];
/* 45A168 */ extern UnkCostumeStruct ftZd_CostumeList[5];
#define GALE01_1396AC
/* 1396AC */ void ftZd_SpecialHi_801396AC(HSD_GObj* gobj);
/* 1396E0 */ void ftZd_SpecialHi_801396E0(HSD_GObj* gobj);
/* 13979C */ void ftZd_SpecialHi_8013979C(HSD_GObj* gobj);
/* 139834 */ void ftZd_SpecialHi_Enter(HSD_GObj* gobj);
/* 1398E8 */ void ftZd_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 1399B4 */ void ftZd_SpecialHiStart_0_Anim(HSD_GObj* gobj);
/* 1399F0 */ void ftZd_SpecialAirHiStart_0_Anim(HSD_GObj* gobj);
/* 139A2C */ void ftZd_SpecialHiStart_0_IASA(HSD_GObj* gobj);
/* 139A30 */ void ftZd_SpecialAirHiStart_0_IASA(HSD_GObj* gobj);
/* 139A34 */ void ftZd_SpecialHiStart_0_Phys(HSD_GObj* gobj);
/* 139A54 */ void ftZd_SpecialAirHiStart_0_Phys(HSD_GObj* gobj);
/* 139A98 */ void ftZd_SpecialHiStart_0_Coll(HSD_GObj* gobj);
/* 139AD4 */ void ftZd_SpecialAirHiStart_0_Coll(HSD_GObj* gobj);
/* 139B44 */ void ftZd_SpecialHi_80139B44(HSD_GObj* gobj);
/* 139BB0 */ void ftZd_SpecialHi_80139BB0(HSD_GObj* gobj);
/* 139C1C */ void ftZd_SpecialHiStart_1_Anim(HSD_GObj* gobj);
/* 139C58 */ void ftZd_SpecialAirHiStart_1_Anim(HSD_GObj* gobj);
/* 139C94 */ void ftZd_SpecialHiStart_1_IASA(HSD_GObj* gobj);
/* 139C98 */ void ftZd_SpecialAirHiStart_1_IASA(HSD_GObj* gobj);
/* 139C9C */ void ftZd_SpecialHiStart_1_Phys(HSD_GObj* gobj);
/* 139CBC */ void ftZd_SpecialAirHiStart_1_Phys(HSD_GObj* gobj);
/* 139CC0 */ void ftZd_SpecialHiStart_1_Coll(HSD_GObj* gobj);
/* 139D60 */ void ftZd_SpecialAirHiStart_1_Coll(HSD_GObj* gobj);
/* 139F6C */ void ftZd_SpecialHi_80139F6C(HSD_GObj* gobj);
/* 139FE8 */ void ftZd_SpecialHi_80139FE8(HSD_GObj* gobj);
/* 13A058 */ void ftZd_SpecialHi_8013A058(HSD_GObj* gobj);
/* 13A244 */ void ftZd_SpecialHi_8013A244(HSD_GObj* gobj);
/* 13A448 */ void ftZd_SpecialHi_Anim(HSD_GObj* gobj);
/* 13A484 */ void ftZd_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 13A4E4 */ void ftZd_SpecialHi_IASA(HSD_GObj* gobj);
/* 13A4E8 */ void ftZd_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 13A4EC */ void ftZd_SpecialHi_Phys(HSD_GObj* gobj);
/* 13A50C */ void ftZd_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 13A588 */ void ftZd_SpecialHi_Coll(HSD_GObj* gobj);
/* 13A5C4 */ void ftZd_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 13A648 */ void ftZd_SpecialHi_8013A648(HSD_GObj* gobj);
/* 13A6A8 */ void ftZd_SpecialHi_8013A6A8(HSD_GObj* gobj);
/* 13A764 */ void ftZd_SpecialHi_8013A764(HSD_GObj* gobj);
#define GALE01_13ADB4
/* 13ADB4 */ void ftZd_SpecialLw_8013ADB4(HSD_GObj* gobj);
/* 13AE30 */ void ftZd_SpecialLw_8013AE30(HSD_GObj* gobj);
/* 13AEAC */ void ftZd_SpecialLw_8013AEAC(HSD_GObj* gobj);
/* 13AEE0 */ void ftZd_SpecialLw_Enter(HSD_GObj* gobj);
/* 13AFA4 */ void ftZd_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 13B068 */ void ftZd_SpecialLw_Anim(HSD_GObj* gobj);
/* 13B0A8 */ void ftZd_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 13B0E8 */ void ftZd_SpecialLw_IASA(HSD_GObj* gobj);
/* 13B0EC */ void ftZd_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 13B0F0 */ void ftZd_SpecialLw_Phys(HSD_GObj* gobj);
/* 13B110 */ void ftZd_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 13B154 */ void ftZd_SpecialLw_Coll(HSD_GObj* gobj);
/* 13B190 */ void ftZd_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 13B1CC */ void ftZd_SpecialLw_8013B1CC(HSD_GObj* gobj);
/* 13B238 */ void ftZd_SpecialLw_8013B238(HSD_GObj* gobj);
/* 13B2A4 */ void ftZd_SpecialLw2_Anim(HSD_GObj* gobj);
/* 13B2E0 */ void ftZd_SpecialAirLw2_Anim(HSD_GObj* gobj);
/* 13B31C */ void ftZd_SpecialLw2_IASA(HSD_GObj* gobj);
/* 13B320 */ void ftZd_SpecialAirLw2_IASA(HSD_GObj* gobj);
/* 13B324 */ void ftZd_SpecialLw2_Phys(HSD_GObj* gobj);
/* 13B344 */ void ftZd_SpecialAirLw2_Phys(HSD_GObj* gobj);
/* 13B388 */ void ftZd_SpecialLw2_Coll(HSD_GObj* gobj);
/* 13B3C4 */ void ftZd_SpecialAirLw2_Coll(HSD_GObj* gobj);
/* 13B400 */ void ftZd_SpecialLw_8013B400(HSD_GObj* gobj);
/* 13B46C */ void ftZd_SpecialLw_8013B46C(HSD_GObj* gobj);
/* 13B4D8 */ void ftZd_SpecialLw_8013B4D8(HSD_GObj* gobj);
/* 13B540 */ s32 ftZd_SpecialLw_8013B540(HSD_GObj* gobj);
/* 13B574 */ bool ftZd_SpecialLw_8013B574(HSD_GObj* gobj);
/* 13B5C4 */ void ftZd_SpecialLw_8013B5C4(HSD_GObj* gobj);
/* 13B5EC */ void ftZd_SpecialLw_8013B5EC(HSD_GObj* gobj);
#define GALE01_13A830
/* 13A830 */ void ftZd_SpecialN_8013A830(HSD_GObj* gobj);
/* 13A8AC */ void ftZd_SpecialN_8013A8AC(HSD_GObj* gobj);
/* 13A928 */ void ftZd_SpecialN_Enter(HSD_GObj* gobj);
/* 13A9A4 */ void ftZd_SpecialAirN_Enter(HSD_GObj* gobj);
/* 13AA38 */ void ftZd_SpecialN_Anim(HSD_GObj* gobj);
/* 13AACC */ void ftZd_SpecialAirN_Anim(HSD_GObj* gobj);
/* 13AB60 */ void ftZd_SpecialN_IASA(HSD_GObj* gobj);
/* 13AB64 */ void ftZd_SpecialAirN_IASA(HSD_GObj* gobj);
/* 13AB68 */ void ftZd_SpecialN_Phys(HSD_GObj* gobj);
/* 13AB9C */ void ftZd_SpecialAirN_Phys(HSD_GObj* gobj);
/* 13AC10 */ void ftZd_SpecialN_Coll(HSD_GObj* gobj);
/* 13AC4C */ void ftZd_SpecialAirN_Coll(HSD_GObj* gobj);
/* 13AC88 */ void ftZd_SpecialN_8013AC88(HSD_GObj* gobj);
/* 13AD1C */ void ftZd_SpecialN_8013AD1C(HSD_GObj* gobj);
/* 13ADB0 */ void ftZd_SpecialN_8013ADB0(HSD_GObj* gobj);
#define GALE01_13B638
/* 13B638 */ void ftZd_SpecialS_Enter(HSD_GObj* gobj);
/* 13B6D8 */ void ftZd_SpecialAirS_Enter(HSD_GObj* gobj);
/* 13B780 */ void ftZd_SpecialSStart_Anim(HSD_GObj* gobj);
/* 13B89C */ void ftZd_SpecialSLoop_Anim(HSD_GObj* gobj);
/* 13BA04 */ void ftZd_SpecialSEnd_Anim(HSD_GObj* gobj);
/* 13BA8C */ void ftZd_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 13BBA8 */ void ftZd_SpecialAirSLoop_Anim(HSD_GObj* gobj);
/* 13BD10 */ void ftZd_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 13BDD0 */ void ftZd_SpecialSStart_IASA(HSD_GObj* gobj);
/* 13BDD4 */ void ftZd_SpecialSLoop_IASA(HSD_GObj* gobj);
/* 13BE50 */ void ftZd_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 13BE54 */ void ftZd_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 13BE58 */ void ftZd_SpecialAirSLoop_IASA(HSD_GObj* gobj);
/* 13BED4 */ void ftZd_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 13BED8 */ void ftZd_SpecialSStart_Phys(HSD_GObj* gobj);
/* 13BF10 */ void ftZd_SpecialSLoop_Phys(HSD_GObj* gobj);
/* 13BF30 */ void ftZd_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 13BF50 */ void ftZd_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 13BFB0 */ void ftZd_SpecialAirSLoop_Phys(HSD_GObj* gobj);
/* 13C010 */ void ftZd_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 13C070 */ void ftZd_SpecialSStart_Coll(HSD_GObj* gobj);
/* 13C0DC */ void ftZd_SpecialSLoop_Coll(HSD_GObj* gobj);
/* 13C148 */ void ftZd_SpecialSEnd_Coll(HSD_GObj* gobj);
/* 13C1B4 */ void ftZd_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 13C220 */ void ftZd_SpecialAirSLoop_Coll(HSD_GObj* gobj);
/* 13C28C */ void ftZd_SpecialAirSEnd_Coll(HSD_GObj* gobj);
#define GALE01_1601C4
#define NUM_UNLOCKABLE_CHARACTERS 11
#define NUM_UNLOCKABLE_STAGES 11
/* 1601C4 */ int gm_801601C4(s8);
/* 160244 */ int gm_80160244(s8);
/* 1602C0 */ void gm_801602C0(s8);
/* 1603B0 */ void gm_801603B0(void);
/// gets character victory theme id
/* 160400 */ u32 fn_80160400(CharacterKind);
/// gets character result anim path
/* 160438 */ char* gm_80160438(s32);
/* 160474 */ bool gm_80160474(CharacterKind, GameModeKind);
/// gets characters trophy model
/* 1604DC */ char* gm_801604DC(CharacterKind, GameModeKind);
/* 160564 */ char* gm_80160564(CharacterKind, GameModeKind);
/**
 * @brief Returns the index used in the bitmask to represent whether or not the
 * provided character is unlocked.
 */
/* 1605EC */ u8 gm_SelKindToUnlockIndex(SelectableCharacterKind);
/**
 * @brief Returns the index used in the bitmask to represent whether or not the
 * provided character is unlocked.
 */
/* 160638 */ s8 gm_CKindToUnlockIndex(CharacterKind);
/* 1606A8 */ u8 gm_GetCKindByUnlockIndex(int);
/* 160710 */ u8 fn_80160710(int);
/* 16075C */ StKind gm_GetChallengerStKind(SelectableCharacterKind);
/* 1607A8 */ u8 fn_801607A8(int);
/* 1607F4 */ u8 fn_801607F4(int);
/* 160840 */ u8 fn_80160840(u8);
/// gets the player hud color index
/* 160854 */ u32 gm_80160854(u8, u8, u8, u8);
/// gets the player hud color
/* 160968 */ GXColor gm_80160968(u32);
/* 160980 */ const char* gm_80160980(u8 ckind);
/* 1609E0 */ const char* fn_801609E0(u8 ckind);
/* 160A60 */ const char* gm_80160A60(int);
/* 160B40 */ void gm_80160B40(HSD_Text*, u8, u8);
/* 160C90 */ void gm_80160C90(HSD_Text* text, u8 fighter_id, u8 arg2);
/* 160DE8 */ void fn_80160DE8(HSD_JObj*, u8, s32, u8, f32, f32);
/* 160F58 */ float fn_80160F58(u8 ckind);
/* 161004 */ s32 fn_80161004(MatchEnd*);
/* 161154 */ s32 fn_80161154(MatchEnd*);
/* 161C90 */ void fn_80161C90(MatchEnd*, int, struct GmStats*);
/* 162068 */ void fn_80162068(MatchEnd*);
/* 162170 */ void fn_80162170(MatchEnd*);
/* 1623A4 */ s32 gm_801623A4(MatchEnd*);
/* 1623D8 */ int gm_801623D8(void);
/* 1623FC */ void gm_801623FC(int);
/* 16247C */ s32 gm_8016247C(s32);
/* 162574 */ void gm_80162574(u8, u8);
/* 16260C */ void gm_SetupHumanResultsScreen(u8, u8);
/* 16279C */ u32 gm_GetVsPlayMatchTotal(void);
/* 162800 */ u32 gm_80162800(struct MatchEnd*);
/* 1628C4 */ void gm_SetupResultsScreenPlayTime(u32, u32);
/* 162968 */ s32 gm_80162968(u32 seconds);
/* 1629B4 */ s32 gm_801629B4(s32 amount);
/* 162A00 */ s32 gm_GetPlayTime(void);
/* 162A4C */ s32 gm_80162A4C(s32 amount);
/* 162A98 */ struct gmm_x1868_1A8_t* gm_80162A98(s32);
/* 162B4C */ void gm_RecordSelfDestructs(s32 amount);
/* 162B98 */ void gm_IncrementPowerCount(void);
/* 162BD8 */ int gm_80162BD8(u8);
/* 162BFC */ bool fn_80162BFC(s8 ckind, int);
/* 162C48 */ s32 gm_80162C48(void);
/* 162CCC */ bool fn_80162CCC(void);
/* 162D1C */ bool gm_80162D1C(void);
/* 162D6C */ u8 gm_80162D6C(void);
/* 162DD4 */ int gm_80162DD4(u8);
/* 162DF8 */ s32 fn_80162DF8(u8 ckind, u32);
/* 162E44 */ s32 gm_80162E44(void);
/* 162EC8 */ bool gm_80162EC8(void);
/* 162F18 */ bool gm_80162F18(void);
/* 162F68 */ u8 gm_80162F68(void);
/* 162FD0 */ int gm_80162FD0(u8);
/* 162FF4 */ bool fn_80162FF4(u8 ckind, u32);
/* 163040 */ s32 gm_80163040(void);
/* 1630C4 */ bool fn_801630C4(void);
/* 163114 */ bool gm_80163114(void);
/* 163164 */ u8 gm_80163164(void);
/* 1631CC */ u32 gm_801631CC(u8);
/* 1631F0 */ u32 gm_801631F0(void);
/* 163274 */ u16 gm_80163274(u8);
/* 163298 */ bool gm_80163298(s8 c_kind, u16);
/* 16332C */ s32 gm_8016332C(u8);
/* 163374 */ void gm_80163374(u8, u8*, u8*, u8*, u8*);
/* 1634D4 */ bool gm_801634D4(u8*, u8*, u8*, u8*);
/* 16365C */ bool gm_8016365C(u8);
/* 163690 */ s32 gm_80163690(u8);
/* 1636D8 */ void gm_801636D8(u8, u8*, u8*, u8*, u8*);
/* 163838 */ bool gm_80163838(u8*, u8*, u8*, u8*);
/* 1639C0 */ bool gm_801639C0(u8);
/* 1639F4 */ int gm_801639F4(u8);
/* 163A3C */ void gm_80163A3C(u8, u8*, u8*, u8*, u8*);
/* 163B9C */ bool gm_80163B9C(u8*, u8*, u8*, u8*);
/* 163D24 */ bool fn_80163D24(void);
/* 163D74 */ bool fn_80163D74(void);
/* 163DC4 */ u16 gm_Get3MinMultimanHighscore(u8);
/* 163DE8 */ int gm_Get3MinMultimanTotalHighscore(void);
/* 163E3C */ u16 gm_Get15MinMultimanHighscore(u8);
/* 163E60 */ int gm_Get15MinMultimanTotalHighscore(void);
/* 163EB4 */ int gm_GetEndlessHighscore(u8);
/* 163ED8 */ int gm_GetEndlessTotalHighscore(void);
/* 163F2C */ int gm_GetCruelHighscore(u8);
/* 163F50 */ int gm_GetCruelTotalHighscore(void);
/* 163FA4 */ int fn_80163FA4(u8);
/**
 * @brief Convert a #SelectableCharacterKind into its #CharacterKind.
 *
 * Indexes #selkind_to_ckind_map with @p selkind. #SELKIND_ZELDA_SEAK resolves
 * to #CharacterKind::CKind_Zelda; the Sheik half is dropped because
 * #SelectableCharacterKind collapses Zelda/Sheik into a single slot.
 *
 * @param[in] selkind A #SelectableCharacterKind (e.g. the CSS slot index).
 * @return The #CharacterKind backing the requested selectable character.
 * @see #gm_CKindToSelKind for the inverse (lossy) mapping.
 * @see #selkind_to_ckind_map
 */
/* 16400C */ u8 gm_SelKindToCKind(u8 selkind);
/**
 * @brief Convert a #CharacterKind into its #SelectableCharacterKind.
 *
 * Indexes #ckind_to_selkind_map with @p ckind. Both
 * #CharacterKind::CKind_Zelda and #CharacterKind::CKind_Seak collapse onto
 * #SELKIND_ZELDA_SEAK, so this direction is lossy with respect to the
 * Zelda/Sheik split, not to mention all the non-playable characters.
 *
 * @param[in] ckind A #CharacterKind.
 * @return The #SelectableCharacterKind representing the CSS slot for @p ckind.
 * @see #gm_SelKindToCKind for the inverse mapping.
 * @see #ckind_to_selkind_map
 */
/* 164024 */ u8 gm_CKindToSelKind(u8 ckind);
/* 16403C */ bool gm_8016403C(u8 item);
/* 1640B0 */ void fn_801640B0(u64* item_mask);
/* 16419C */ float fn_8016419C(u8);
/* 1641B4 */ float fn_801641B4(u8);
/* 1641CC */ u16 gm_801641CC(u8);
/* 1641E4 */ void gm_801641E4(u8 stage, u8 enable);
/* 164250 */ bool gm_IsStageUnlocked(u16 stkind);
/* 1642A0 */ bool fn_801642A0(void);
/* 164330 */ bool gm_80164330(s32);
/* 164430 */ bool gm_80164430(u16);
/* 164504 */ void gm_80164504(u16);
/* 164600 */ bool gm_80164600(void);
/* 16468C */ void gm_8016468C(void);
/* 1647D0 */ void gm_801647D0(void);
/* 1647F8 */ int gm_801647F8(u8);
/// character unlocked check
/* 164840 */ bool gm_IsCKindUnlocked(u8 ckind);
/* 164910 */ void gm_UnlockCKind(CharacterKind);
/* 164A0C */ void gm_80164A0C(u8);
/* 164ABC */ bool gm_80164ABC(void);
/* 164B48 */ bool fn_80164B48(void);
/* 164F18 */ void gm_80164F18(void);
/* 16505C */ void gm_8016505C(void);
/* 165084 */ bool gm_80165084(void);
/* 1650E8 */ void fn_801650E8(void);
/**
 * @brief Enables the pause camera for the given player.
 *
 * If @p playerSlot is @c -1, switches to the pause camera with slot @c 0xB and
 * id @c 5 (see #Camera_SetUpPauseCamera). Otherwise, switches only when the
 * slot is a human or CPU with an active entity.
 *
 * @param[in] playerSlot Player slot to center the pause camera on.
 * @param[in] playerId   Controller port / player id of the pauser.
 */
/* 165108 */ void gm_EnablePlayerPauseCamera(int, int);
/* 165190 */ void fn_80165190(s32, s32);
/* 1651FC */ void fn_801651FC(s32, s32);
/* 165268 */ void gm_80165268(int);
/* 165290 */ void gm_80165290(int);
/* 1652B0 */ void fn_801652B0(s32, s32);
/* 1652D8 */ void* fn_801652D8(void);
/* 165388 */ HSD_GObj* gm_80165388(u16, u8, u8, s32);
/* 1653C8 */ void gm_801653C8(HSD_GObj*);
/* 1653E8 */ float fn_801653E8(u8);
/* 165418 */ s32 fn_80165418(MatchEnd*);
/* 1654A0 */ s32 fn_801654A0(MatchEnd*);
/* 165548 */ s32 fn_80165548(MatchEnd*, s32, s32);
/* 1656A8 */ u32 fn_801656A8(MatchEnd*, u32);
/* 16588C */ s32 fn_8016588C(MatchEnd*, s32);
/* 165AC0 */ s32 fn_80165AC0(MatchEnd*);
/* 165D60 */ MatchEnd* fn_80165D60(MatchEnd*);
/* 165E7C */ void fn_80165E7C(MatchEnd*);
/* 165FA4 */ s32 fn_80165FA4(MatchEnd*);
/* 1661E0 */ s32 fn_801661E0(MatchEnd*);
/* 166378 */ void gm_80166378(MatchEnd*);
/* 166A98 */ s32 gm_80166A98(MatchEnd*, u8, s8, u8, s8, u8, s8, u8, u8, u8);
/* 166CBC */ u32 fn_80166CBC(MatchEnd*, ssize_t index);
/* 166CCC */ void gm_80166CCC(MatchEnd*, MatchEnd*);
/* 167140 */ bool gm_MatchHasMultipleWinners(MatchEnd*);
/* 167194 */ int fn_80167194(MatchEnd*);
/* 16719C */ void fn_8016719C(s32, s32);
/* 167320 */ void gm_80167320(int slot, bool);
/* 167470 */ void gm_80167470(s32, s32);
/* 1674C4 */ void gm_801674C4(s8, u8, s8, s8, GmRouteCallback);
/* 16758C */ void fn_8016758C(void);
/* 167638 */ s32 fn_80167638(s32, Vec3*, Vec3*);
/* 1677C0 */ void gm_801677C0(struct gm_801677C0_s* arg0);
/* 1677E8 */ void gm_801677E8(s8 arg0);
/* 1677F0 */ u8 gm_801677F0(void);
/* 1677F8 */ bool gm_RumbleEnabledForPlayer(int port, int nametag);
/* 167858 */ void gm_80167858(int port, int, int, int);
/* 1678F8 */ void gm_801678F8(int port, int, int);
/* 16795C */ void gm_SetupPlayerDefaults(struct PlayerInitData*);
/* 167A14 */ void gm_SetupAllPlayerDefaults(struct PlayerInitData*);
/* 167A64 */ void gm_SetupRulesDefaults(struct StartMeleeRules*);
/* 167B50 */ void gm_InitVsMode(struct VsModeData*);
/* 167BC8 */ void gm_80167BC8(struct VsModeData*);
/* 167FC4 */ void gm_80167FC4(struct SSSData*);
/* 1685D4 */ s8 gm_801685D4(u8, u8);
/* 168638 */ void gm_80168638(MatchEnd*);
/* 168710 */ void gm_80168710(MatchEnd*, VsModeData*);
/* 1688AC */ s32 gm_801688AC(MatchEnd*);
/* 168940 */ int gm_80168940(MatchEnd*);
/* 16895C */ void gm_8016895C(HSD_JObj*, DynamicModelDesc*, int idx);
/* 1689E4 */ void fn_801689E4(HSD_JObj*, DynamicModelDesc*, int);
/* 168A6C */ void fn_80168A6C(void*, void*, s32);
/* 168B34 */ float gm_80168B34(CharacterKind, int, int);
/* 168BF8 */ float gm_80168BF8(int);
/* 168C5C */ void gm_80168C5C(u32);
/* 168E54 */ void fn_80168E54(s8, s8, u8, u8);
/* 168F2C */ void fn_80168F2C(s8);
/* 168F7C */ void fn_80168F7C(void);
/* 168F88 */ void gm_80168F88(void);
/* 168FC4 */ void gm_LoadAnnouncer(void);
/* 169000 */ void fn_80169000(MatchEnd* arg0, u8* arg1);
/* 169238 */ u8 gm_GetNumCostumesForCKind(u8);
/* 169264 */ u8 gm_80169264(u8);
/* 169290 */ u8 gm_80169290(u8);
/* 1692BC */ u8 gm_801692BC(u8);
/* 1692E8 */ void gm_801692E8(u32 secs, datetime* datetime);
#define MELEE_GM_16A2_H
struct lbl_8046B488_t* gm_1601_GetUnkData(void);
s8 gm_80169370(s32);
int gm_80169384(void);
s32 gm_80169394(void);
s32 fn_801693A8(void);
bool gm_801693BC(int);
void fn_80169434(GmRouteCallback fn);
bool fn_80169444(bool);
int gm_801694A0(HSD_GObj*);
void* gm_80169520(void);
void* gm_80169530(void);
void* gm_80169540(void);
void fn_80169550(int slot);
void fn_80169574(ssize_t size, s8* buf);
void fn_801697FC(s8, s8, s8, s8, s8*);
void fn_8016989C(u8*, u8, u8, u8*, s8*);
void fn_80169900(u8, struct lbl_8046B488_t*, s8*, s8*);
void fn_80169A84(u8, s8*, s8*);
void fn_80169C54(s8, s8);
void fn_80169F50(s8, s8);
void fn_8016A09C(void);
void gm_8016A164(void);
s32 fn_8016A1E4(void);
bool gm_8016A1F8(void);
void gm_8016A21C(StartMeleeRules*);
void gm_8016A22C(s8 ckind0, s8 ckind1, s8 ckind2, u8, u8, u8, int, int,
                 u8 color, u8, u8, int opp_count, int, int, int, int, int, f32,
                 f32);
void gm_8016A404(s32 arg0);
void gm_8016A414(f32 arg8);
void gm_8016A424(s8 arg0);
void gm_8016A434(void);
void fn_8016A450(void);
void fn_8016A46C(void);
void fn_8016A488(int);
void fn_8016A4C8(void);
void gm_8016A92C(StartMeleeRules*);
bool gm_8016A944(void);
void* gm_8016A97C(void);
struct lbl_8046B668_t* gm_8016A98C(void);
int gm_8016A998(s8, s8);
int gm_8016A9E8(u8 arg0, s8 arg1);
bool gm_8016AC44(s8 ckind, s8 costume_id);
#define MELEE_GM_16F1_H
typedef enum Gm_DecType {
    Gm_DecType_Flag, ///< true/false boolean player bonus
    Gm_DecType_Point, ///< integer-valued player bonus
} Gm_DecType;
struct lbl_804D65A8_t;
/* 16F180 */ int fn_8016F180(int);
/* 16F1B8 */ Gm_DecType gmDecisionGetType(int kind);
/* 16F1F0 */ s32 fn_8016F1F0(int idx);
/* 16F208 */ int gm_8016F208(int);
/* 16F280 */ int fn_8016F280(int);
/* 16F2F8 */ int gm_8016F2F8(int, unsigned char);
/* 16F344 */ void fn_8016F344(MatchEnd*);
/* 16F39C */ int fn_8016F39C(HSD_Text**, void*, u8, u16, u8, u8);
/* 16F548 */ int fn_8016F548(void*, u16, u8, u8);
/* 16F740 */ int fn_8016F740(void*, u16, u8, u8);
/* 16F870 */ int fn_8016F870(void*, u16, u8, u8);
/* 16F9A8 */ int fn_8016F9A8(void*, u16, u8, u8);
/* 16FAD4 */ int fn_8016FAD4(MatchEnd*, int, int, u8);
/* 16FFD4 */ int fn_8016FFD4(MatchEnd*, int, u8);
/* 170110 */ int fn_80170110(void*, int, int, u8);
/* 1701A0 */ void gm_801701A0(void);
/* 1701AC */ void fn_801701AC(void);
/* 1701B8 */ int fn_801701B8(void);
/* 1701C0 */ int fn_801701C0(MatchEnd*, int, int);
/* 171A88 */ int fn_80171A88(void);
/* 171AD4 */ void fn_80171AD4(void);
/* 171B00 */ bool fn_80171B00(int);
/* 171B2C */ bool fn_80171B2C(int);
/* 171B64 */ void fn_80171B64(struct lbl_804D65A8_t*);
/* 171BA4 */ int fn_80171BA4(void*);
/* 171DC4 */ void fn_80171DC4(void);
/* 1720B4 */ bool gm_801720B4(void);
/* 1720F8 */ bool gm_801720F8(void);
/* 172140 */ int gm_80172140(void);
/* 172174 */ void gm_80172174(void);
/* 17219C */ bool gm_8017219C(u32);
/* 1721EC */ bool gm_801721EC(void);
/* 1722BC */ bool fn_801722BC(void);
/* 1722F4 */ bool fn_801722F4(void);
/* 17232C */ bool fn_8017232C(void);
/* 172380 */ bool fn_80172380(void);
/* 1723D4 */ bool fn_801723D4(void);
/* 172428 */ bool fn_80172428(void);
/* 172478 */ bool fn_80172478(void);
/* 1724C8 */ bool fn_801724C8(void);
/* 1724D0 */ bool fn_801724D0(void);
/* 172504 */ bool fn_80172504(void);
/* 172538 */ bool fn_80172538(void);
/* 17256C */ bool fn_8017256C(void);
/* 1725A8 */ bool fn_801725A8(void);
/* 1725E4 */ bool fn_801725E4(void);
/* 172624 */ bool fn_80172624(void);
/* 172664 */ bool fn_80172664(void);
/* 172698 */ bool fn_80172698(void);
/* 1726CC */ bool fn_801726CC(void);
/* 172700 */ bool fn_80172700(void);
/* 172734 */ bool fn_80172734(void);
/* 172768 */ bool fn_80172768(void);
/* 17279C */ bool fn_8017279C(int, u16);
/* 17280C */ void fn_8017280C(void);
/* 172898 */ int gm_80172898(u16);
/* 17297C */ void gm_8017297C(void);
/* 1729EC */ void gm_801729EC(void);
/* 172BC4 */ bool gm_80172BC4(void);
/* 172C04 */ bool gm_80172C04(void);
/* 172C44 */ void gm_80172C44(u32);
/* 172C78 */ bool fn_80172C78(int);
/* 172CC0 */ u8 gm_DecideChallengerCpuLevel(u8 cpu_ckind, u8 human_nametag);
/* 172D78 */ u8 gm_80172D78(void);
/* 172DD4 */ u8 gm_80172DD4(u32);
/* 172E74 */ u8 gm_80172E74(void);
/* 172F00 */ u16 gm_80172F00(u32);
/* 172FAC */ bool fn_80172FAC(void);
/* 173098 */ u8 fn_80173098(int);
/* 173224 */ u8 gm_80173224(int, int);
/* 1732D8 */ u8 gm_801732D8(u8);
/* 17335C */ u16 gm_8017335C(void);
/* 1733D8 */ u8 gm_801733D8(void);
/* 17341C */ u16 gm_8017341C(void);
/* 173460 */ u8 gm_80173460(s8);
/* 173498 */ u16 gm_80173498(void);
/* 1734D0 */ u16 gm_801734D0(u32);
/* 173510 */ bool fn_80173510(void);
/* 1735F0 */ bool fn_801735F0(void);
/* 173644 */ bool fn_80173644(void);
/* 17367C */ bool fn_8017367C(void);
/* 1736DC */ ChallengerData* gm_GetChallengerData(void);
/* 1736E8 */ void gm_InitChallengerData(u8 human_ckind, u8 human_color,
                                        u8 human_slot, u8 human_nametag,
                                        u8 cpu_ckind, u8 curr_mode);
/* 173754 */ bool gm_80173754(u8, u8);
/* 1737D8 */ u8 gm_801737D8(void);
/* 1737E8 */ void gm_Mode_ChallengerApproach_OnLoad(void);
/* 173834 */ void fn_80173834(u8 ckind, u8 major, bool);
/* 17390C */ void gm_8017390C(int, int);
/* 173AA4 */ void gm_80173AA4(void);
/* 173B30 */ void gm_80173B30(u32);
/* 173BC4 */ void gm_80173BC4(s8);
/* 173C70 */ void gm_80173C70(s8 c_kind, u32, u32, int);
/* 173D3C */ void gm_80173D3C(int);
/* 173DE4 */ void gm_80173DE4(MatchEnd*);
/* 173EEC */ void gm_80173EEC(void);
/* 174180 */ void gm_80174180(void);
/* 1741FC */ void gm_801741FC(void);
/* 174238 */ void gm_80174238(void);
#define MELEE_GM_GM_1798_H
#define MELEE_GM_RESULTPLAYER_H
#define _jobj_h_
#define _list_h_
typedef struct _HSD_SList {
    struct _HSD_SList* next;
    void* data;
} HSD_SList;
typedef struct _HSD_DList {
    struct _HSD_DList* next;
    struct _HSD_DList* prev;
    void* data;
} HSD_DList;
void HSD_ListInitAllocData(void);
HSD_ObjAllocData* HSD_SListGetAllocData(void);
HSD_ObjAllocData* HSD_DListGetAllocData(void);
HSD_SList* HSD_SListAlloc(void);
HSD_SList* HSD_SListAllocAndAppend(HSD_SList* next, void* data);
HSD_SList* HSD_SListAllocAndPrepend(HSD_SList* prev, void* data);
HSD_SList* HSD_SListAppendList(HSD_SList* list, HSD_SList* next);
HSD_SList* HSD_SListPrependList(HSD_SList* list, HSD_SList* prev);
HSD_SList* HSD_SListRemove(HSD_SList* list);
#define _pobj_h_
#define _aobj_h_
#define _fobj_h_
#define HSD_A_OP_NONE 0
#define HSD_A_OP_CON 1
#define HSD_A_OP_LIN 2
#define HSD_A_OP_SPL0 3
#define HSD_A_OP_SPL 4
#define HSD_A_OP_SLP 5
#define HSD_A_OP_KEY 6
#define HSD_A_FRAC_FLOAT (0 << 5)
#define HSD_A_FRAC_S16 (1 << 5)
#define HSD_A_FRAC_U16 (2 << 5)
#define HSD_A_FRAC_S8 (3 << 5)
#define HSD_A_FRAC_U8 (4 << 5)
#define FOBJ_LOAD_DATA0 1
#define FOBJ_LOAD_DATA 2
#define FOBJ_LOAD_WAIT 3
#define TYPE_ROBJ 1
#define TYPE_JOBJ 12
struct HSD_FObj {
    struct HSD_FObj* next;
    u8* ad;
    u8* ad_head;
    u32 length;
    u8 flags;
    u8 op;
    u8 op_intrp;
    u8 obj_type;
    u8 frac_value;
    u8 frac_slope;
    u16 nb_pack;
    s16 startframe;
    u16 fterm;
    f32 time;
    f32 p0;
    f32 p1;
    f32 d0;
    f32 d1;
};
typedef struct _HSD_FObjDesc {
    struct _HSD_FObjDesc* next;
    u32 length;
    f32 startframe;
    u8 type;
    u8 frac_value;
    u8 frac_slope;
    u8 dummy0;
    u8* ad;
} HSD_FObjDesc;
union HSD_ObjData {
    f32 fv;
    s32 iv;
    Vec3 p;
};
HSD_ObjAllocData* HSD_FObjGetAllocData(void);
void HSD_FObjInitAllocData(void);
void HSD_FObjRemove(HSD_FObj* fobj);
void HSD_FObjRemoveAll(HSD_FObj* fobj);
u32 HSD_FObjSetState(HSD_FObj* fobj, u32 state);
u32 HSD_FObjGetState(HSD_FObj* fobj);
void HSD_FObjReqAnimAll(HSD_FObj* fobj, f32 startframe);
void HSD_FObjStopAnim(HSD_FObj* fobj, void* obj, HSD_ObjUpdateFunc obj_update,
                      f32 rate);
void HSD_FObjStopAnimAll(HSD_FObj* fobj, void* obj,
                         HSD_ObjUpdateFunc obj_update, f32 rate);
void FObjUpdateAnim(HSD_FObj* fobj, void* obj, HSD_ObjUpdateFunc update_func);
void HSD_FObjInterpretAnim(HSD_FObj* fobj, void* obj,
                           HSD_ObjUpdateFunc obj_update, f32 rate);
void HSD_FObjInterpretAnimAll(void* fobj, void* obj,
                              HSD_ObjUpdateFunc obj_update, f32 rate);
HSD_FObj* HSD_FObjLoadDesc(HSD_FObjDesc* desc);
HSD_FObj* HSD_FObjAlloc(void);
void HSD_FObjFree(HSD_FObj* fobj);
#define AOBJ_REWINDED (1 << 26)
#define AOBJ_FIRST_PLAY (1 << 27)
#define AOBJ_NO_UPDATE (1 << 28)
#define AOBJ_LOOP (1 << 29)
#define AOBJ_NO_ANIM (1 << 30)
typedef enum _AObj_Arg_Type {
    AOBJ_ARG_A,
    AOBJ_ARG_AF,
    AOBJ_ARG_AV,
    AOBJ_ARG_AU,
    AOBJ_ARG_AO,
    AOBJ_ARG_AOF,
    AOBJ_ARG_AOV,
    AOBJ_ARG_AOU,
    AOBJ_ARG_AOT,
    AOBJ_ARG_AOTF,
    AOBJ_ARG_AOTV,
    AOBJ_ARG_AOTU,
} AObj_Arg_Type;
typedef union _callbackArg {
    f32 f;
    u32 d;
    void* v;
} callbackArg;
struct HSD_AObj {
    u32 flags;
    f32 curr_frame;
    f32 rewind_frame;
    f32 end_frame;
    f32 framerate;
    HSD_FObj* fobj;
    struct HSD_Obj* hsd_obj;
};
struct HSD_AObjDesc {
    u32 flags;
    f32 end_frame;
    HSD_FObjDesc* fobjdesc;
    HSD_IDKey obj_id;
};
struct HSD_AnimJoint {
    HSD_AnimJoint* child;
    HSD_AnimJoint* next;
    HSD_AObjDesc* aobjdesc;
    HSD_RObjAnimJoint* robj_anim;
    u32 flags;
};
void HSD_AObjInitAllocData(void);
HSD_ObjAllocData* HSD_AObjGetAllocData(void);
u32 HSD_AObjGetFlags(HSD_AObj* aobj);
void HSD_AObjSetFlags(HSD_AObj* aobj, u32 flags);
void HSD_AObjClearFlags(HSD_AObj* aobj, u32 flags);
void HSD_AObjSetFObj(HSD_AObj* aobj, HSD_FObj* fobj);
void HSD_AObjInitEndCallBack(void);
void HSD_AObjInvokeCallBacks(void);
void HSD_AObjReqAnim(HSD_AObj* aobj, f32 frame);
void HSD_AObjStopAnim(HSD_AObj* aobj, void* obj, HSD_ObjUpdateFunc func);
void HSD_AObjInterpretAnim(HSD_AObj* aobj, void* obj,
                           HSD_ObjUpdateFunc update_func);
HSD_AObj* HSD_AObjLoadDesc(HSD_AObjDesc* aobjdesc);
void HSD_AObjRemove(HSD_AObj* aobj);
HSD_AObj* HSD_AObjAlloc(void);
void HSD_AObjFree(HSD_AObj* aobj);
void HSD_ForeachAnim(void* obj, HSD_Type type, HSD_TypeMask mask, void* func,
                     AObj_Arg_Type arg_type, ...);
void HSD_AObjSetRate(HSD_AObj* aobj, f32 rate);
void HSD_AObjSetRewindFrame(HSD_AObj* aobj, f32 frame);
void HSD_AObjSetEndFrame(HSD_AObj* aobj, f32 frame);
void HSD_AObjSetCurrentFrame(HSD_AObj* aobj, f32 frame);
void _HSD_AObjForgetMemory(void* low, void* high);
static inline f32 HSD_AObjGetCurrFrame(HSD_AObj* aobj)
{
    ((aobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/aobj.h", 93, "aobj"));
    return aobj->curr_frame;
}
static inline f32 HSD_AObjGetEndFrame(HSD_AObj* aobj)
{
    ((aobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/aobj.h", 99, "aobj"));
    return aobj->end_frame;
}
#define HSD_MTX_RIGID 1
#define HSD_MTX_ENVELOPE 2
struct HSD_PObj {
    HSD_Class parent;
    HSD_PObj* next;
    HSD_VtxDescList* verts;
    u16 flags;
    u16 n_display;
    /// #u8 primitive, #u16 vtxcnt, #u16* indices
    u8* display;
    union HSD_PObjUnion {
        HSD_JObj* jobj;
        HSD_ShapeSet* shape_set;
        HSD_SList* envelope_list;
    } u;
};
struct HSD_PObjDesc {
    char* class_name;
    HSD_PObjDesc* next;
    HSD_VtxDescList* verts;
    u16 flags;
    u16 n_display;
    u8* display;
    union {
        HSD_Joint* joint;
        HSD_ShapeSetDesc* shape_set;
        HSD_EnvelopeDesc** envelope_p;
    } u;
};
struct HSD_VtxDescList {
    GXAttr attr;
    GXAttrType attr_type;
    GXCompCnt comp_cnt;
    GXCompType comp_type;
    u8 frac;
    u16 stride;
    void* vertex;
};
struct HSD_Envelope {
    HSD_Envelope* next;
    HSD_JObj* jobj;
    f32 weight;
};
struct HSD_EnvelopeDesc {
    HSD_Joint* joint;
    f32 weight;
};
struct HSD_ShapeSet {
    u16 flags;
    u16 nb_shape;
    int nb_vertex_index;
    HSD_VtxDescList* vertex_desc;
    u8** vertex_idx_list;
    s32 nb_normal_index;
    HSD_VtxDescList* normal_desc;
    u8** normal_idx_list;
    union {
        f32* bp;
        f32 bl;
    } blend;
    HSD_AObj* aobj;
};
struct HSD_ShapeSetDesc {
    u16 flags;
    u16 nb_shape;
    s32 nb_vertex_index;
    HSD_VtxDescList* vertex_desc;
    u8** vertex_idx_list;
    s32 nb_normal_index;
    HSD_VtxDescList* normal_desc;
    u8** normal_idx_list;
};
struct HSD_ShapeAnim {
    HSD_ShapeAnim* next;
    HSD_AObjDesc* aobjdesc;
};
struct HSD_ShapeAnimJoint {
    HSD_ShapeAnimJoint* child;
    HSD_ShapeAnimJoint* next;
    HSD_ShapeAnimDObj* shapeanimdobj;
};
struct HSD_PObjInfo {
    HSD_ClassInfo parent;
    void (*disp)(HSD_PObj* pobj, Mtx vmtx, Mtx pmtx, u32 rendermode);
    void (*setup_mtx)(HSD_PObj* pobj, Mtx vmtx, Mtx pmtx, u32 rendermode);
    s32 (*load)(HSD_PObj* pobj, HSD_PObjDesc* desc);
};
extern HSD_PObjInfo hsdPObj;
#define HSD_POBJ(o) ((HSD_PObj*) (o))
#define HSD_POBJ_INFO(i) ((HSD_PObjInfo*) (i))
#define HSD_POBJ_METHOD(o) HSD_POBJ_INFO(HSD_CLASS_METHOD(o))
HSD_PObjInfo* HSD_PObjGetDefaultClass(void);
void HSD_PObjSetDefaultClass(HSD_PObjInfo* info);
HSD_PObj* HSD_PObjAlloc(void);
void HSD_PObjFree(HSD_PObj*);
u32 HSD_PObjGetFlags(HSD_PObj* pobj);
void HSD_PObjRemoveAnimAllByFlags(HSD_PObj* pobj, u32 flags);
void HSD_PObjReqAnimByFlags(HSD_PObj* pobj, f32 startframe, u32 flags);
void HSD_PObjReqAnimAllByFlags(HSD_PObj* pobj, f32 startframe, u32 flags);
void HSD_ClearVtxDesc(void);
HSD_PObj* HSD_PObjLoadDesc(HSD_PObjDesc*);
void HSD_PObjClearMtxMark(void* obj, u32 mark);
void HSD_PObjSetMtxMark(int idx, void* obj, u32 mark);
void HSD_PObjGetMtxMark(int idx, void** obj, u32* mark);
void HSD_PObjAddAnim(HSD_PObj*, HSD_ShapeAnim*);
void HSD_PObjAddAnimAll(HSD_PObj*, HSD_ShapeAnim*);
void HSD_PObjAnim(HSD_PObj* pobj);
void HSD_PObjAnimAll(HSD_PObj*);
void HSD_PObjResolveRefs(HSD_PObj*, HSD_PObjDesc*);
void HSD_PObjResolveRefsAll(HSD_PObj*, HSD_PObjDesc*);
void HSD_PObjRemove(HSD_PObj*);
void HSD_PObjRemoveAll(HSD_PObj*);
void HSD_PObjRemoveAnimByFlags(HSD_PObj* pobj, u32 flags);
void HSD_PObjDisp(HSD_PObj* pobj, Mtx vmtx, Mtx pmtx, u32 rendermode);
#define SYSDOLPHIN_BASELIB_SPLINE_H
typedef struct HSD_Spline {
    /*  +0 */ u8 type;
    /*  +2 */ s16 numcv;
    /*  +4 */ f32 tension;
    /*  +8 */ Vec3* cv;
    /*  +C */ f32 totalLength;
    /* +10 */ f32* segLength;
    /* +14 */ f32 (*segPoly)[5];
} HSD_Spline;
f32 splGetHelmite(f32, f32, f32, f32, f32, f32);
void splGetSplinePoint(Vec3*, HSD_Spline*, f32);
f32 splArcLengthGetParameter(HSD_Spline*, f32);
void splArcLengthPoint(Vec3*, HSD_Spline*, f32);
#define JOBJ_PTCL_ACTIVE 0x7FFFFFFF
#define JOBJ_PTCL_OFFSET_MASK 0xFFFFFF
#define JOBJ_PTCL_OFFSET_SHIFT 6
#define JOBJ_PTCL_BANK_MASK 0x3F
#define HSD_A_J_ROTX 1
#define HSD_A_J_ROTY 2
#define HSD_A_J_ROTZ 3
#define HSD_A_J_PATH 4
#define HSD_A_J_TRAX 5
#define HSD_A_J_TRAY 6
#define HSD_A_J_TRAZ 7
#define HSD_A_J_SCAX 8
#define HSD_A_J_SCAY 9
#define HSD_A_J_SCAZ 10
#define HSD_A_J_NODE 11
#define HSD_A_J_BRANCH 12
#define HSD_A_J_SETBYTE0 20
#define HSD_A_J_SETBYTE1 21
#define HSD_A_J_SETBYTE2 22
#define HSD_A_J_SETBYTE3 23
#define HSD_A_J_SETBYTE4 24
#define HSD_A_J_SETBYTE5 25
#define HSD_A_J_SETBYTE6 26
#define HSD_A_J_SETBYTE7 27
#define HSD_A_J_SETBYTE8 28
#define HSD_A_J_SETBYTE9 29
#define HSD_A_J_SETFLOAT0 30
#define HSD_A_J_SETFLOAT1 31
#define HSD_A_J_SETFLOAT2 32
#define HSD_A_J_SETFLOAT3 33
#define HSD_A_J_SETFLOAT4 34
#define HSD_A_J_SETFLOAT5 35
#define HSD_A_J_SETFLOAT6 36
#define HSD_A_J_SETFLOAT7 37
#define HSD_A_J_SETFLOAT8 38
#define HSD_A_J_SETFLOAT9 39
#define JOBJ_BILLBOARD_FIELD 0xE00
#define JOBJ_BILLBOARD 0x200
#define JOBJ_VBILLBOARD 0x400
#define JOBJ_HBILLBOARD 0x600
#define JOBJ_RBILLBOARD 0x800
#define JOBJ_PBILLBOARD 0x2000
#define JOBJ_SKELETON (1 << 0)
#define JOBJ_SKELETON_ROOT (1 << 1)
#define JOBJ_ENVELOPE_MODEL (1 << 2)
#define JOBJ_CLASSICAL_SCALE (1 << 3)
#define JOBJ_HIDDEN (1 << 4)
#define JOBJ_PTCL (1 << 5)
#define JOBJ_MTX_DIRTY (1 << 6)
#define JOBJ_LIGHTING (1 << 7)
#define JOBJ_TEXGEN (1 << 8)
#define JOBJ_INSTANCE (1 << 12)
#define JOBJ_SPLINE (1 << 14)
#define JOBJ_FLIP_IK (1 << 15)
#define JOBJ_SPECULAR (1 << 16)
#define JOBJ_USE_QUATERNION (1 << 17)
#define JOBJ_UNK_B18 (1 << 18)
#define JOBJ_UNK_B19 (1 << 19)
#define JOBJ_UNK_B20 (1 << 20)
#define JOBJ_NULL_OBJ (0 << 21)
#define JOBJ_JOINT1 (1 << 21)
#define JOBJ_JOINT2 (2 << 21)
#define JOBJ_JOINT (3 << 21)
#define JOBJ_EFFECTOR (3 << 21)
#define JOBJ_USER_DEF_MTX (1 << 23)
#define JOBJ_MTX_INDEP_PARENT (1 << 24)
#define JOBJ_MTX_INDEP_SRT (1 << 25)
#define JOBJ_UNK_B26 (1 << 26)
#define JOBJ_UNK_B27 (1 << 27)
#define JOBJ_ROOT_OPA (1 << 28)
#define JOBJ_ROOT_XLU (1 << 29)
#define JOBJ_ROOT_TEXEDGE (1 << 30)
#define JOBJ_ROOT_MASK (JOBJ_ROOT_OPA | JOBJ_ROOT_TEXEDGE | JOBJ_ROOT_XLU)
#define union_type_ptcl(o) ((o)->flags & JOBJ_PTCL ? true : false)
#define union_type_spline(o) ((o)->flags & JOBJ_SPLINE ? true : false)
#define union_type_dobj(o) ((o)->flags & (JOBJ_PTCL | JOBJ_SPLINE) ? false : true)
#define HSD_JOBJ_INFO(i) ((HSD_JObjInfo*) (i))
#define HSD_JOBJ_METHOD(o) HSD_JOBJ_INFO((o)->object.parent.class_info)
typedef struct HSD_JObj {
    /*  +0 */ HSD_Obj object;
    /*  +8 */ HSD_JObj* next;
    /*  +C */ HSD_JObj* parent;
    /* +10 */ HSD_JObj* child;
    /* +14 */ u32 flags;
    /* +18 */ union {
        HSD_SList* ptcl;
        struct HSD_DObj* dobj;
        HSD_Spline* spline;
    } u;
    /* +1C */ Quaternion rotate;
    /* +2C */ Vec3 scale;
    /* +38 */ Vec3 translate;
    /* +44 */ Mtx mtx;
    /* +74 */ Vec3* scl;
    /* +78 */ MtxPtr envelopemtx;
    /* +7C */ HSD_AObj* aobj;
    /* +80 */ HSD_RObj* robj;
    /* +84 */ HSD_IDKey id;
} HSD_JObj;
;
typedef struct HSD_Joint {
    /* +0 */ char* class_name;
    /* +4 */ u32 flags;
    /* +8 */ HSD_Joint* child;
    /* +C */ HSD_Joint* next;
    /* +10 */ union {
        HSD_DObjDesc* dobjdesc;
        HSD_Spline* spline;
        HSD_SList* ptcl;
    } u;
    /* +14 */ Vec3 rotation;
    /* +20 */ Vec3 scale;
    /* +2C */ Vec3 position;
    /* +38 */ MtxPtr mtx;
    /* +3C */ HSD_RObjDesc* robjdesc;
} HSD_Joint;
typedef struct HSD_JObjInfo {
    HSD_ObjInfo parent;
    s32 (*load)(HSD_JObj* jobj, HSD_Joint* joint, HSD_JObj* jobj_2);
    void (*make_mtx)(HSD_JObj* jobj);
    void (*make_pmtx)(HSD_JObj* jobj, Mtx mtx, Mtx rmtx);
    void (*disp)(HSD_JObj* jobj, Mtx vmtx, Mtx pmtx, HSD_TrspMask trsp_mask,
                 u32 rendermode);
    void (*release_child)(HSD_JObj* jobj);
} HSD_JObjInfo;
extern HSD_JObjInfo hsdJObj;
typedef void (*HSD_JObjWalkTreeCallback)(HSD_JObj*, f32**, s32);
typedef void (*DPCtlCallback)(int, int lo, int hi, HSD_JObj* jobj);
void HSD_JObjSetDefaultClass(HSD_ClassInfo* info);
void HSD_JObjCheckDepend(HSD_JObj* jobj);
u32 HSD_JObjGetFlags(HSD_JObj* jobj);
void HSD_JObjReqAnimAll(HSD_JObj*, f32);
void HSD_JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
void HSD_JObjSetupMatrixSub(HSD_JObj*);
void HSD_JObjSetMtxDirtySub(HSD_JObj*);
void(HSD_JObjSetMtxDirty)(HSD_JObj* jobj);
void HSD_JObjUnref(HSD_JObj* jobj);
HSD_JObj* HSD_JObjRemove(HSD_JObj* jobj);
void HSD_JObjRemoveAll(HSD_JObj*);
struct HSD_DObj* HSD_JObjGetDObj(HSD_JObj* jobj);
HSD_JObj* HSD_JObjLoadJoint(HSD_Joint*);
void HSD_JObjAddAnimAll(HSD_JObj*, HSD_AnimJoint*, HSD_MatAnimJoint*,
                        HSD_ShapeAnimJoint*);
void HSD_JObjAnimAll(HSD_JObj*);
void HSD_JObjSetFlags(HSD_JObj*, u32 flags);
void HSD_JObjSetFlagsAll(HSD_JObj*, u32 flags);
void HSD_JObjClearFlags(HSD_JObj*, u32 flags);
void HSD_JObjClearFlagsAll(HSD_JObj*, u32 flags);
HSD_JObj* HSD_JObjAlloc(void);
void HSD_JObjSetCurrent(HSD_JObj* jobj);
HSD_JObj* HSD_JObjGetCurrent(void);
void HSD_JObjResolveRefsAll(HSD_JObj*, HSD_Joint*);
void HSD_JObjDispAll(HSD_JObj* jobj, Mtx vmtx, u32 flags, u32 rendermode);
void HSD_JObjRemoveAnim(HSD_JObj* jobj);
void HSD_JObjAddNext(HSD_JObj* jobj, HSD_JObj* next);
void HSD_JObjRemoveAnimAll(HSD_JObj* jobj);
void HSD_JObjWalkTree(HSD_JObj* jobj, HSD_JObjWalkTreeCallback cb,
                      f32** cb_args);
void HSD_JObjPrependRObj(HSD_JObj* jobj, HSD_RObj* robj);
void HSD_JObjDeleteRObj(HSD_JObj* jobj, HSD_RObj* robj);
static inline HSD_JObj* HSD_JObjGetChild(HSD_JObj* jobj)
{
    if (jobj == 0L) {
        return 0L;
    } else {
        return jobj->child;
    }
}
static inline HSD_JObj* HSD_JObjGetNext(HSD_JObj* jobj)
{
    if (jobj == 0L) {
        return 0L;
    } else {
        return jobj->next;
    }
}
static inline HSD_JObj* HSD_JObjGetParent(HSD_JObj* jobj)
{
    if (jobj == 0L) {
        return 0L;
    } else {
        return jobj->parent;
    }
}
static inline HSD_RObj* HSD_JObjGetRObj(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 221, "jobj"));
    return jobj->robj;
}
static inline bool HSD_JObjMtxIsDirty(HSD_JObj* jobj)
{
    bool result;
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 228, "jobj"));
    result = 0;
    if (!(jobj->flags & (1 << 23)) && (jobj->flags & (1 << 6))) {
        result = 1;
    }
    return result;
}
static inline void HSD_JObjSetMtxDirtyOutOfLineLeaf(HSD_JObj* jobj)
{
    (HSD_JObjSetMtxDirty)(jobj);
}
static inline void HSD_JObjSetMtxDirtyOutOfLine(HSD_JObj* jobj)
{
    HSD_JObjSetMtxDirtyOutOfLineLeaf(jobj);
}
/// @todo Non-static inline
    inline void HSD_JObjSetupMatrix(HSD_JObj* jobj)
{
    if (!jobj || !HSD_JObjMtxIsDirty(jobj)) {
        return;
    }
    HSD_JObjSetupMatrixSub(jobj);
}
/// Why does this seem to be a define while the others are inline functions?
#define HSD_JObjSetMtxDirty(jobj) { if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } }
/// @todo See #lb_800117F4
static inline void HSD_JObjSetMtxDirtyInline(HSD_JObj* jobj)
{
    if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) {
        HSD_JObjSetMtxDirtySub(jobj);
    }
}
static inline void HSD_JObjSetRotation(HSD_JObj* jobj, Quaternion* rotate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 276, "jobj"));
    ((rotate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 277, "rotate"));
    jobj->rotate = *rotate;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetRotationWithMtxDirty(HSD_JObj* jobj,
                                                   Quaternion* rotate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 287, "jobj"));
    ((rotate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 288, "rotate"));
    jobj->rotate = *rotate;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetRotationX(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 297, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 298, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.x = x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetRotationXWithMtxDirty(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 307, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 308, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.x = x;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetRotationY(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 317, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 318, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.y = y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetRotationYWithMtxDirty(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 327, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 328, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.y = y;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetRotationZ(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 337, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 338, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.z = z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetRotationZWithMtxDirty(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 347, "jobj"));
    ((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 348, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
    jobj->rotate.z = z;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjGetRotation(HSD_JObj* jobj, Quaternion* rotate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 357, "jobj"));
    ((rotate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 358, "rotate"));
    *rotate = jobj->rotate;
}
static inline f32 HSD_JObjGetRotationX(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 364, "jobj"));
    return jobj->rotate.x;
}
static inline f32 HSD_JObjGetRotationY(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 370, "jobj"));
    return jobj->rotate.y;
}
static inline f32 HSD_JObjGetRotationZ(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 376, "jobj"));
    return jobj->rotate.z;
}
static inline void HSD_JObjSetScale(HSD_JObj* jobj, Vec3* scale)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 382, "jobj"));
    ((scale) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 383, "scale"));
    jobj->scale = *scale;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetScaleWithMtxDirty(HSD_JObj* jobj, Vec3* scale)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 392, "jobj"));
    ((scale) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 393, "scale"));
    jobj->scale = *scale;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetScaleX(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 402, "jobj"));
    jobj->scale.x = x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetScaleXWithMtxDirty(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 411, "jobj"));
    jobj->scale.x = x;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetScaleY(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 420, "jobj"));
    jobj->scale.y = y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetScaleYWithMtxDirty(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 429, "jobj"));
    jobj->scale.y = y;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetScaleZ(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 438, "jobj"));
    jobj->scale.z = z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetScaleZWithMtxDirty(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 447, "jobj"));
    jobj->scale.z = z;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjGetScale(HSD_JObj* jobj, Vec3* scale)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 456, "jobj"));
    ((scale) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 457, "scale"));
    *scale = jobj->scale;
}
static inline f32 HSD_JObjGetScaleX(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 463, "jobj"));
    return jobj->scale.x;
}
static inline f32 HSD_JObjGetScaleY(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 469, "jobj"));
    return jobj->scale.y;
}
static inline f32 HSD_JObjGetScaleZ(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 475, "jobj"));
    return jobj->scale.z;
}
static inline void HSD_JObjSetTranslate(HSD_JObj* jobj, Vec3* translate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 481, "jobj"));
    ((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 482, "translate"));
    jobj->translate = *translate;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetTranslateWithMtxDirty(HSD_JObj* jobj,
                                                    Vec3* translate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 492, "jobj"));
    ((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 493, "translate"));
    jobj->translate = *translate;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetTranslateWithMtxDirtyOutOfLine(HSD_JObj* jobj,
                                                             Vec3* translate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 503, "jobj"));
    ((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 504, "translate"));
    jobj->translate = *translate;
    if (!(jobj->flags & (1 << 25))) {
        HSD_JObjSetMtxDirtyOutOfLine(jobj);
    }
}
static inline void HSD_JObjSetTranslateX(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 513, "jobj"));
    jobj->translate.x = x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetTranslateXWithMtxDirty(HSD_JObj* jobj, f32 x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 522, "jobj"));
    jobj->translate.x = x;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetTranslateY(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 531, "jobj"));
    jobj->translate.y = y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetTranslateYWithMtxDirty(HSD_JObj* jobj, f32 y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 540, "jobj"));
    jobj->translate.y = y;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjSetTranslateZ(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 549, "jobj"));
    jobj->translate.z = z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjSetTranslateZWithMtxDirty(HSD_JObj* jobj, f32 z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 558, "jobj"));
    jobj->translate.z = z;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjGetTranslation(HSD_JObj* jobj, Vec3* translate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 567, "jobj"));
    ((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 568, "translate"));
    *translate = jobj->translate;
}
///@todo Likely fake but needed by vi0502 as there is a usage of
/// HSD_JObjGetTranslation that lacks the 2nd assert
static inline void HSD_JObjGetTranslation2(HSD_JObj* jobj, Vec3* translate)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 576, "jobj"));
    *translate = jobj->translate;
}
static inline f32 HSD_JObjGetTranslationX(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 582, "jobj"));
    return jobj->translate.x;
}
static inline f32 HSD_JObjGetTranslationY(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 588, "jobj"));
    return jobj->translate.y;
}
static inline float HSD_JObjGetTranslationZ(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 594, "jobj"));
    return jobj->translate.z;
}
static inline void HSD_JObjAddRotationX(HSD_JObj* jobj, float x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 600, "jobj"));
    jobj->rotate.x += x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddRotationXWithMtxDirty(HSD_JObj* jobj, float x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 609, "jobj"));
    jobj->rotate.x += x;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjAddRotationY(HSD_JObj* jobj, float y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 618, "jobj"));
    jobj->rotate.y += y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddRotationZ(HSD_JObj* jobj, float z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 627, "jobj"));
    jobj->rotate.z += z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddScaleX(HSD_JObj* jobj, float x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 636, "jobj"));
    jobj->scale.x += x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddScaleY(HSD_JObj* jobj, float y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 645, "jobj"));
    jobj->scale.y += y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddScaleZ(HSD_JObj* jobj, float z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 654, "jobj"));
    jobj->scale.z += z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddTranslationX(HSD_JObj* jobj, float x)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 663, "jobj"));
    jobj->translate.x += x;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddTranslationY(HSD_JObj* jobj, float y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 672, "jobj"));
    jobj->translate.y += y;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline void HSD_JObjAddTranslationYWithMtxDirty(HSD_JObj* jobj, float y)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 681, "jobj"));
    jobj->translate.y += y;
    if (!(jobj->flags & (1 << 25))) {
        (HSD_JObjSetMtxDirty)(jobj);
    }
}
static inline void HSD_JObjAddTranslationZ(HSD_JObj* jobj, float z)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 690, "jobj"));
    jobj->translate.z += z;
    if (!(jobj->flags & (1 << 25))) {
        { if (jobj != 0L && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
    }
}
static inline MtxPtr HSD_JObjGetMtxPtr(HSD_JObj* jobj)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 699, "jobj"));
    HSD_JObjSetupMatrix(jobj);
    return jobj->mtx;
}
static inline void HSD_JObjCopyMtx(HSD_JObj* jobj, Mtx mtx)
{
    ((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 706, "jobj"));
    ((mtx) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 707, "mtx"));
    PSMTXCopy(mtx, jobj->mtx);
}
static inline void HSD_JObjRef(HSD_JObj* jobj)
{
    ref_INC(jobj);
}
static inline void HSD_JObjRefThis(HSD_JObj* jobj)
{
    if (jobj != 0L) {
        iref_INC(jobj);
    }
}
void HSD_JObjResolveRefs(HSD_JObj* jobj, HSD_Joint* joint);
void HSD_JObjUnrefThis(HSD_JObj* jobj);
void HSD_JObjRefThis(HSD_JObj* jobj);
void HSD_JObjMakeMatrix(HSD_JObj* jobj);
void RecalcParentTrspBits(HSD_JObj* jobj);
void HSD_JObjAddChild(HSD_JObj* jobj, HSD_JObj* child);
HSD_JObj* HSD_JObjReparent(HSD_JObj* jobj, HSD_JObj* parent);
void HSD_JObjAddDObj(HSD_JObj* jobj, HSD_DObj* dobj);
HSD_JObj* jobj_get_effector_checked(HSD_JObj* eff);
void resolveIKJoint1(HSD_JObj* jobj);
void resolveIKJoint2(HSD_JObj* jobj);
void HSD_JObjRemoveAnimByFlags(HSD_JObj* jobj, u32 flags);
void HSD_JObjSetDPtclCallback(DPCtlCallback cb);
int JObjInit(HSD_Class* o);
void JObjReleaseChild(HSD_JObj* jobj);
void JObjRelease(HSD_Class* o);
void HSD_JObjRemoveAnimAllByFlags(HSD_JObj* jobj, u32 flags);
void JObjAmnesia(HSD_ClassInfo* info);
void HSD_JObjReqAnimByFlags(HSD_JObj* jobj, u32 flags, f32 frame);
void HSD_JObjReqAnimAllByFlags(HSD_JObj* jobj, u32 flags, f32 frame);
void HSD_JObjReqAnim(HSD_JObj* jobj, f32 frame);
void JObjSortAnim(HSD_AObj* aobj);
void JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
void JObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
void HSD_JObjAnim(HSD_JObj* jobj);
void JObjAnimAll(HSD_JObj* jobj);
s32 JObjLoad(HSD_JObj* jobj, HSD_Joint* joint, HSD_JObj* parent);
void HSD_JObjAddAnim(HSD_JObj*, HSD_AnimJoint* an_joint,
                     HSD_MatAnimJoint* mat_joint,
                     HSD_ShapeAnimJoint* sh_joint);
void HSD_JObjWalkTree0(HSD_JObj* jobj, HSD_JObjWalkTreeCallback cb,
                       f32** cb_args);
struct ResultsMatchInfo;
typedef struct {
    /* 0x00 */ f32 x0[8];
    /* 0x20 */ f32 x20[4];
} CharScaleEntry;
typedef struct {
    GObj_RenderFunc funcs[4];
} ResultsRenderFuncs;
typedef struct {
    /* 0x00 */ f32 x00[9];
    /* 0x24 */ Vec3 x24;
    /* 0x30 */ Vec3 x30;
    /* 0x3C */ ResultsRenderFuncs x3C;
    /* 0x4C */ Vec3 x4C;
    /* 0x58 */ Vec3 x58;
    /* 0x64 */ ResultsRenderFuncs x64;
    /* 0x74 */ f32 x74;
    /* 0x78 */ f32 x78;
    /* 0x7C */ f32 x7C;
    /* 0x80 */ f32 x80;
    /* 0x84 */ f32 x84;
    /* 0x88 */ f32 x88;
    /* 0x8C */ f32 x8C;
    /* 0x90 */ f32 x90;
    /* 0x94 */ f32 x94;
    /* 0x98 */ f32 x98;
    /* 0x9C */ f32 x9C;
} ResultsPlayerConfig;
typedef struct {
    /* 0x00 */ f32 x_off[4]; // indexed by variant (clamped to 3)
    /* 0x10 */ f32 y_off[4]; // indexed by variant (clamped to 3)
    /* 0x20 */ f32 z_scale[4]; // indexed by variant (clamped to 3)
} CameraKindParams; // size = 0x30
typedef struct {
    /* 0x000 */ u8 pad[0x10];
    /* 0x010 */ CameraKindParams kind[(0x6D0 - 0x10) / 0x30];
    /* 0x6D0 */ f32 slot_off[(0xF00 - 0x6D0) / 0x30][3][4];
    /* 0xEE0 */ u8 pad_EE0[0xF08 - 0xEE0];
    /* 0xF08 */ HSD_CObjDesc cobj_desc;
} CameraKindData;
typedef union {
    s16 h[4];
    u32 w[2];
} PackedS16x4;
typedef struct {
    u32 lo;
    u32 hi;
} U32Pair;
typedef struct {
    /* 0x00:0 */ u8 x0_0 : 4;
    /* 0x00:4 */ u8 x0_4 : 2;
    /* 0x00:6 */ u8 x0_6 : 2;
    /* 0x01 */ u8 player_flags[4];
    /* 0x05 */ u8 pad_x5;
    /* 0x06 */ u16 x6[4];
    /* 0x0E */ u8 variant[4];
    /* 0x12 */ u8 pad_12[0x02];
    /* 0x14 */ s32 char_kind[4];
    /* 0x24 */ u8 costume_override[4];
    /* 0x28 */ MatchEnd match_end;
    /* 0x22A4 */ u16 scissor_x[4];
    /* 0x22AC */ u16 scissor_y[4];
    /* 0x22B4 */ u16 dim_w1[4];
    /* 0x22BC */ u16 dim_w2[4];
    /* 0x22C4 */ u16 dim_h1[4];
    /* 0x22CC */ u16 dim_h2[4];
    /* 0x22D4 */ PackedS16x4 score_tbl[4];
    /* 0x22F4 */ PackedS16x4 x22F4[4];
} lbl_8046E3AC_t;
typedef struct ResultsDisplayData {
    /* 0x000 */ u8 pad_000[0x104];
    /* 0x104 */ HSD_ImageDesc player_img1[4];
    /* 0x164 */ HSD_ImageDesc player_img2[4];
    /* 0x1C4 */ HSD_ImageDesc shared_img;
} ResultsDisplayData;
typedef struct ResultsDisplayLayout {
    /* 0x000 */ u8 pad_000[0x104];
    /* 0x104 */ HSD_ImageDesc player_img1[4];
    /* 0x164 */ HSD_ImageDesc player_img2[4];
    /* 0x1C4 */ HSD_ImageDesc shared_img;
    /* 0x1DC */ HSD_GObj* gobjs[4];
    /* 0x1EC */ HSD_JObj* jobjs[4];
    /* 0x1FC */ lbl_8046E3AC_t state;
} ResultsDisplayLayout;
typedef struct {
    /* 0x000 */ f32 scale[32];
    /* 0x080 */ f32 slot_off[32][3][4];
    /* 0x680 */ u8 x680[27][0x10];
    /* 0x830 */ u8 pad_830[0x60];
} ResultsCharacterData;
extern ResultsPlayerConfig const lbl_803B7B68;
extern u32 gmResultPlayerColors[4];
extern CharScaleEntry gmResultCharacterScaleData[];
extern u32 gmResultX22F4Init[0x20 / sizeof(u32)];
extern u32 gmResultScoreTableInit[0x20 / sizeof(u32)];
extern ResultsCharacterData gmResultCharacterData;
extern HSD_CameraDescPerspective gmResultCameraDesc;
/* 177724 */ void gm_80177724(struct ResultsMatchInfo*);
/* 177748 */ void fn_80177748(void);
/* 177920 */ void fn_80177920(HSD_GObj*);
/* 177B7C */ bool fn_80177B7C(int slot);
/* 177DD0 */ bool fn_80177DD0(int slot);
/* 178050 */ void fn_80178050(HSD_GObj*);
/* 1785B0 */ void fn_801785B0(HSD_GObj*);
/* 178BB4 */ void fn_80178BB4(HSD_GObj*);
/* 1791E4 */ bool fn_801791E4(void);
/* 179350 */ void fn_80179350(HSD_GObj*);
/* 1795D4 */ int fn_801795D4(void);
/* 1796F0 */ int fn_801796F0(int);
/* 179854 */ void fn_80179854(void);
/* 179990 */ void fn_80179990(HSD_GObj*, int, int);
/* 179D3C */ void fn_80179D3C(HSD_GObj*, intptr_t);
/* 179D60 */ void fn_80179D60(HSD_GObj*, intptr_t);
/* 179D84 */ void fn_80179D84(HSD_GObj*, intptr_t);
/* 179DA8 */ void fn_80179DA8(HSD_GObj*, intptr_t);
/* 179DCC */ void fn_80179DCC(HSD_GObj*, intptr_t);
/* 179E34 */ void fn_80179E34(HSD_GObj*, intptr_t);
/* 179E9C */ void fn_80179E9C(HSD_GObj*, intptr_t);
/* 179F04 */ void fn_80179F04(HSD_GObj*, intptr_t);
/* 179F6C */ void fn_80179F6C(int idx, HSD_GObj* value);
/* 179F84 */ void fn_80179F84(HSD_JObj*);
/* 17A004 */ void fn_8017A004(void);
/* 17A078 */ void fn_8017A078(s32);
/* 17A318 */ HSD_GObj* fn_8017A318(s32);
/* 17A67C */ Fighter_GObj* fn_8017A67C(CharacterKind c_kind, int, int);
/* 17A9B4 */ void fn_8017A9B4(int);
/* 17AA78 */ void fn_8017AA78(const u8*);
extern lbl_8046E3AC_t lbl_8046E3AC;
#define MELEE_GM_17AD_H
/* 17AD04 */ s32 fn_8017AD04(s32, s32);
/* 17AD28 */ s32 fn_8017AD28(s32);
/* 17AD48 */ s32 fn_8017AD48(s32);
/* 17AD78 */ s32 fn_8017AD78(s32);
/* 17ADA8 */ s32 fn_8017ADA8(s32);
/* 17AE0C */ s32 fn_8017AE0C(s32);
/* 17AE70 */ s32 fn_8017AE70(s32);
/* 17AED8 */ s32 fn_8017AED8(s32);
/* 17AF40 */ s32 fn_8017AF40(s32);
/* 17AFA8 */ s32 fn_8017AFA8(s32);
/* 17B010 */ s32 fn_8017B010(s32);
/* 17B07C */ s32 fn_8017B07C(s32);
/* 17B0E4 */ s32 fn_8017B0E4(s32);
/* 17B14C */ s32 fn_8017B14C(s32);
/* 17B1B4 */ s32 fn_8017B1B4(s32);
/* 17B21C */ s32 fn_8017B21C(s32);
/* 17B280 */ s32 fn_8017B280(s32);
/* 17B2E4 */ s32 fn_8017B2E4(s32);
/* 17B348 */ s32 fn_8017B348(s32);
/* 17B3AC */ s32 fn_8017B3AC(s32);
/* 17B410 */ s32 fn_8017B410(s32);
/* 17B4D0 */ s32 fn_8017B4D0(s32);
/* 17B534 */ s32 fn_8017B534(s32);
/* 17B598 */ s32 fn_8017B598(s32);
/* 17B5FC */ s32 fn_8017B5FC(s32);
/* 17B660 */ s32 fn_8017B660(s32);
/* 17B6C4 */ s32 fn_8017B6C4(s32);
/* 17B728 */ s32 fn_8017B728(s32);
/* 17B78C */ s32 fn_8017B78C(s32);
/* 17B7F0 */ s32 fn_8017B7F0(s32);
/* 17B854 */ s32 fn_8017B854(s32);
/* 17B8B8 */ s32 fn_8017B8B8(s32);
/* 17B91C */ s32 fn_8017B91C(s32);
/* 17B9F4 */ s32 fn_8017B9F4(s32);
#define MELEE_GM_17BA_H
/* 17BACC */ int fn_8017BACC(int);
/* 17BB30 */ int fn_8017BB30(int);
/* 17BB94 */ const char* fn_8017BB94(int);
/* 17BC50 */ const char* fn_8017BC50(int);
/* 17BD0C */ const char* fn_8017BD0C(int);
/* 17BDC8 */ const char* fn_8017BDC8(int);
#define MELEE_GM_1832_H
/* 1849E0 */ void fn_801849E0(HSD_GObj*);
/* 184A04 */ void fn_80184A04(HSD_GObj*);
/* 184A28 */ void fn_80184A28(HSD_GObj*);
/* 184A4C */ void fn_80184A4C(HSD_GObj*);
/* 184A70 */ void fn_80184A70(HSD_GObj*);
/* 184A94 */ void fn_80184A94(HSD_GObj*);
/* 184AB8 */ void fn_80184AB8(HSD_GObj*);
/* 18504C */ void fn_8018504C(void);
/* 1851C0 */ s32 fn_801851C0(void);
/* 1852FC */ void fn_801852FC(HSD_GObj*);
/* 185408 */ void fn_80185408(int, float, float, float, float);
/* 1855BC */ double fn_801855BC(double);
/* 18564C */ void fn_8018564C(HSD_GObj*);
/* 18569C */ void fn_8018569C(HSD_GObj*);
/* 18575C */ void fn_8018575C(HSD_GObj*);
/* 1857C4 */ void fn_801857C4(HSD_GObj*);
/* 1859C8 */ void fn_801859C8(HSD_GObj*);
/* 185A0C */ s32 fn_80185A0C(void);
/* 185D64 */ void fn_80185D64(void);
/* 185E34 */ s32 fn_80185E34(void);
/* 185F5C */ void fn_80185F5C(s32);
/* 186080 */ void fn_80186080(void);
/* 1861B8 */ void fn_801861B8(void);
/* 186400 */ void fn_80186400(void);
/* 186634 */ void fn_80186634(void*);
/* 186DFC */ void gm_Scene_IntroEasy_OnFrame(void);
/* 186E30 */ void gm_Scene_IntroEasy_OnEnter(void*);
#define MELEE_GM_186E_H
/* 186EFC */ void fn_80186EFC(HSD_GObj*);
/* 186F6C */ void fn_80186F6C(HSD_GObj*);
/* 1873F0 */ HSD_GObjProc* fn_801873F0(void);
/* 187494 */ void fn_80187494(HSD_GObj*, intptr_t);
/* 1874FC */ void fn_801874FC(void);
/* 187714 */ void fn_80187714(void);
/* 18776C */ void gm_Scene_IntroAllstar_OnFrame(void);
/* 1877A8 */ void gm_Scene_IntroAllstar_OnEnter(M2C_UNK);
#define MELEE_GM_1879_H
/* 187910 */ void fn_80187910(HSD_GObj*);
/* 187AB4 */ void fn_80187AB4(HSD_GObj*);
/* 187C9C */ void fn_80187C9C(HSD_GObj*, intptr_t);
/* 187CF4 */ void fn_80187CF4(HSD_GObj*);
/* 187F48 */ void gm_Scene_IntroNormal_OnEnter(M2C_UNK);
/* 188364 */ void gm_Scene_IntroNormal_OnLeave(M2C_UNK);
/* 18838C */ void gm_Scene_IntroNormal_OnFrame(void);
/* 1883C0 */ f32 gm_801883C0(void);
/* 18841C */ bool gm_8018841C(void);
#define MELEE_GM_1884_H
/* 188454 */ int gm_80188454(int idx);
/* 18846C */ int fn_8018846C(void);
/* 1884F8 */ int fn_801884F8(void);
/* 188550 */ void fn_80188550(int);
/* 188644 */ void fn_80188644(void);
/* 188738 */ void fn_80188738(HSD_JObj*);
/* 188910 */ void fn_80188910(HSD_JObj*);
/* 188B3C */ void fn_80188B3C(HSD_JObj*);
/* 188D3C */ void fn_80188D3C(HSD_JObj*);
/* 188EE8 */ void fn_80188EE8(HSD_GObj*);
/* 1891F4 */ void fn_801891F4(void);
/* 189B88 */ void fn_80189B88(void);
/* 189CDC */ void gm_80189CDC(StartMeleeData*);
/* 18A000 */ HSD_Text* fn_8018A000(void);
/* 473814 */ extern CssSubStruct gm_80473814;
#define MELEE_GM_18A1_H
/* 18A160 */ u8 gm_8018A160(u8, u8);
/* 18A188 */ f32 gm_8018A188(u8, u8);
/* 18A1D8 */ f32 gm_8018A1D8(u8, u8);
/* 18A228 */ u8 gm_8018A228(u8 difficulty, u8 stage_slot, u8 idx);
/* 18A25C */ u8 gm_8018A25C(u8 difficulty, u8 stage_slot, u8 arg2);
/* 18A290 */ u8 gm_8018A290(u8 difficulty, u8 stage_slot, u8 idx);
/* 18A2C4 */ f32 gm_8018A2C4(u8, u8);
/* 18A314 */ f32 gm_8018A314(u8, u8);
/* 18A364 */ void fn_8018A364(int);
/* 473A18 */ extern UnkAllstarData gm_80473A18;
#define MELEE_GM_GM_19EF_H
/* 19F9C4 */ void fn_8019F9C4(u32);
/* 1A0A10 */ void gm_Scene_GOver_OnEnter(void*);
/* 1A0B18 */ void gm_Scene_GOver_OnExit(void*);
/* 1A0C6C */ void gm_Scene_ComingSoon_OnEnter(void*);
/* 1A0E0C */ void gm_Scene_ComingSoon_OnExit(void*);
#define MELEE_GM_1A33_H
/* 1A33BC */ void gmCamera_801A33BC(void);
/* 1A34FC */ void gm_Scene_CameraVs_OnFrame(void);
/* 1A3634 */ void gm_Scene_CameraVs_OnEnter(M2C_UNK);
/* 1A367C */ void gm_Scene_CameraVs_OnExit(M2C_UNK);
#define MELEE_GM_1A36_H
/* 1A3680 */ u64 gm_GetButtonsPressed(u8);
/* 1A36A0 */ u64 gm_GetButtonsTriggered(u8);
/* 1A36C0 */ u64 gm_801A36C0(u8);
/* 1A36E0 */ void gm_801A36E0(s32, s32);
/* 1A3714 */ void gm_801A3714(s32, u64, u64);
/**
 * @brief Evaluates all controller inputs, updating #controller_map for each
 * controller.
 *
 * Reads button, trigger, repeat, and release state from
 * #HSD_PadCopyStatus into #controller_map. Index 4 (#PAD_MAX_CONTROLLERS)
 * is set to contain a union of all inputs from all controllers.
 */
/* 1A3A74 */ void gm_EvaluateAllControllerInputs(void);
/* 1A3E88 */ void gm_801A3E88(void);
/* 1A3EF4 */ void gm_801A3EF4(void);
#define MELEE_GM_1A3F_H
/* 1A427C */ void* gm_GetGameModeStateEnterData(GameModeState*);
/* 1A4284 */ void* gm_GetGameModeStateExitData(GameModeState*);
/**
 * @brief Sets the scene index for both the current and previous scene.
 *
 * Sets #GameRouting::curr_scene_idx and #GameRouting::prev_scene_idx on
 * #state_machine.
 *
 * See docs related to #GameModeState.
 *
 * @param arg0 The index of the scene to use. Not to be confused with the scene
 * class_id, which is defined as a GameSceneKind.
 */
/* 1A428C */ void gm_SetGameModeStateId(u8 idx);
/**
 * @brief Sets the scene index for the pending scene
 *
 * Sets #GameRouting::pending_scene_idx on #state_machine to @c arg0 + 1
 *
 * See docs related to #GameModeState.
 *
 * @param arg0 The scene index of the scene preceding the desired pending
 * scene. The method adds +1 to the input. Not to be confused with the scene
 * class_id, which is defined as a #GameSceneKind.
 */
/* 1A42A0 */ void gm_SetNextGameModeStateId(u8 pending_scene);
/* 1A42B4 */ u8 gm_GetPreviousSceneIndex(void);
/* 1A42C4 */ u8 gm_GetCurrentSceneIndex(void);
/**
 * @brief Sets #state_machine's #GameState::pending value to @c true (1).
 * Signaling that the game mode should change after the current scene exits.
 *
 * See also: ::gm_ChangeGameModeAfterCurrentScene, ::gm_SetPendingGameMode,
 * ::runGameMode
 */
/* 1A42D4 */ void gm_SetNewGameModePending(void);
/**
 * @brief Sets #GameRouting::pending_mode on #state_machine to @c pending_mode
 * for use after the current mode exits.
 *
 * Sets the #state_machine #GameRouting::pending_mode to the provided value.
 * The @c pending_mode is read when ::runGameMode exits, ultimately passing
 * the
 * @c pending_mode on to the next invocation of ::runGameMode.
 *
 * Note that subsequent calls to ::gm_SetPendingGameMode or
 * ::gm_ChangeGameModeAfterCurrentScene will override the last one. When a game
 * mode exits, the last call to ::gm_SetPendingGameMode or
 * ::gm_ChangeGameModeAfterCurrentScene wins.
 *
 * See also: ::gm_ChangeGameModeAfterCurrentScene, ::gm_SetNewGameModePending,
 * ::runGameMode
 *
 * @param pending_mode The next game mode to use
 */
/* 1A42E8 */ void gm_SetPendingGameMode(u8 pending_mode);
/**
 * @brief Sets #GameRouting::pending_mode and #GameState::pending on
 * #state_machine to @c pending_mode and @c true (1) for use after the current
 * scene exits,
 *
 * Sets the #state_machine #GameRouting::pending_mode to the provided
 * value, setting #GameState::pending to true (1) in the process.
 * The @c pending_mode is read when ::runGameMode exits, ultimately passing
 * the
 * @c pending_mode on to the next invocation of ::runGameMode.
 *
 * Effectively equivelant to running ::gm_SetPendingGameMode and
 * ::gm_SetNewGameModePending
 *
 * Note that subsequent calls to ::gm_SetPendingGameMode or
 * ::gm_ChangeGameModeAfterCurrentScene will override the last one. When a game
 * mode exits, the last call to ::gm_SetPendingGameMode or
 * ::gm_ChangeGameModeAfterCurrentScene wins.
 *
 * See also: ::gm_SetPendingGameMode, ::gm_SetNewGameModePending,
 * ::runGameMode
 *
 * @param pending_mode The next game mode to use
 */
/* 1A42F8 */ void gm_ChangeGameModeAfterCurrentScene(int pending_mode);
/* 1A4310 */ u8 gm_GetCurrentGameMode(void);
/* 1A4320 */ u8 gm_GetPreviousGameMode(void);
/* 1A4330 */ void gm_SetGameModeOverride(u8 (*)(void));
/* 1A4340 */ bool gm_Is1PMode(u8 mode);
/* 1A4510 */ void gm_801A4510(void);
#define MELEE_GM_1A50_H
/* 1A7A44 */ void fn_801A7A44(HSD_GObj*);
/* 1A7A68 */ void fn_801A7A68(HSD_GObj*);
/* 1A7A8C */ void fn_801A7A8C(HSD_GObj*);
/* 1A7B00 */ void gm_801A7B00(void);
/* 1A7FB4 */ void fn_801A7FB4(HSD_GObj*);
/* 1A80CC */ void fn_801A80CC(HSD_GObj*);
/* 1A80F0 */ void fn_801A80F0(HSD_GObj*);
/* 1A8114 */ void gm_801A8114(HSD_JObj*, int);
/* 1A851C */ void fn_801A851C(HSD_GObj*);
/* 1A85E4 */ void gm_801A85E4(HSD_JObj*, s32, s32);
/* 1A8D54 */ void gm_801A8D54(s32*);
/* 1A9094 */ void gm_801A9094(void);
/* 1A9498 */ void fn_801A9498(HSD_GObj*);
/* 1A94BC */ void fn_801A94BC(HSD_GObj*);
/* 1A9630 */ void gm_801A9630(void);
/* 1A9B30 */ void gm_Scene_Congrats_OnEnter(M2C_UNK);
/* 1A9D0C */ void gm_Scene_Congrats_OnFrame(void);
#define MELEE_GM_1ADD_H
void gm_801ADDD8(void);
bool gm_801ADE1C(int, int, float, float);
bool gm_801AE050(int, int, int, float, float);
void gm_801AE44C(int, float);
void gm_801AE544(int, float);
void gm_801AE640(int, bool);
void gm_801AE74C(int, bool);
void gm_801AE848(int);
void fn_801AE948(HSD_GObj*);
void gm_801AEBB0(void);
HSD_GObj* gm_801AECC4(int);
u32 gm_801AEDC8(void);
#define GALE01_1B0348
/* 1B0348 */ void gm_SetupSubColors(StartMeleeData*); ///< Character tints?
/* 1B0474 */ void gm_SetupSuddenDeath(StartMeleeData*, MatchEnd*);
/* 1B05F4 */ void gm_801B05F4(PlayerInitData*, int);
/* 1B0620 */ void gm_SetupHumanPlayer(PlayerInitData*, u8 ckind, u8 color,
                                      u8 stocks, u8 slot);
/* 1B0664 */ void gm_SetupCpuPlayer(PlayerInitData*, u8 ckind, u8 color,
                                    u8 stocks, u8 slot);
/* 1B06B0 */ void gm_801B06B0(CSSData*, u8 match_type, s8 ckind, s8 stocks,
                              s8 color, u8, u8 cpu_level, u8 slot);
/* 1B0730 */ void gm_801B0730(CSSData*, s8* ckind, u8* stocks, u8* color,
                              u8* nametag, u8* cpu_level);
/* 1B07B4 */ void gm_801B07B4(CSSData*, s8, s8, s8, u8, u8, u8);
/* 1B07E8 */ void gm_801B07E8(CSSData*, s8*, s8*, s8*, s8*, u8*);
#define MELEE_GM_1BFA_H
/* 1BFA6C */ void gm_ModeState_Approach_OnEnter(GameModeState*);
/* 1BFABC */ void gm_ModeState_ApproachVs_OnEnter(GameModeState*);
/* 1BFCFC */ void gm_ModeState_Prize_OnEnter(GameModeState*);
/**
 * This is a helper file to reduce #include churn.
 *
 * If you need to include a function from an unsplit gm/ file,
 * include this instead, since the unsplit file names are in flux.
 *
 * Once the function is moved to a properly split and named file,
 * it won't be available via this header and you can use its proper include.
 */
#define MELEE_GM_UNSPLIT_H
#define GALE01_1BA8FC
/* 1BA8FC */ void gm_801BA8FC(void);
/* 1BBA60 */ void gm_Mode_Event_OnInit(void);
/* 1BBEA8 */ void gm_Mode_Event_OnLoad(void);
/* 1BBFE4 */ void gm_Mode_Event_OnUnload(void);
/* 1BEB68 */ void gm_801BEB68(int);
/* 1BEB74 */ void gm_801BEB74(u8);
/* 1BEB80 */ u8 gm_801BEB80(void);
/* 1BEB8C */ bool gm_801BEB8C(u8);
/* 1BEBA8 */ u8 gm_801BEBA8(u8);
/* 1BEBC0 */ u8 gm_801BEBC0(u8);
/* 1BEBF8 */ u8 gm_801BEBF8(u8 arg0);
/* 1BEC54 */ void* gm_801BEC54(void);
/* 1BEFA4 */ void gm_801BEFA4(int ckind);
/* 1BEFB0 */ CharacterKind gm_801BEFB0(void);
/* 1BEFC0 */ void gm_801BEFC0(int);
/* 1BEFD0 */ int gm_801BEFD0(void);
/* 1BEFE0 */ void gm_801BEFE0(s8);
/* 1BF000 */ void gm_801BF000(s8);
/* 1BF010 */ int gm_801BF010(void);
/* 1BF020 */ void gm_801BF020(s8);
/* 1BF040 */ void gm_801BF040(s8);
/* 1BF050 */ int gm_801BF050(void);
/* 1BF128 */ void gm_SetupTitleDemo(void);
/* 1BF3F8 */ void gm_PreloadTitleDemo(void);
/* 1BF6D8 */ int gm_801BF6D8(void);
/* 1BF6F8 */ int gm_801BF6F8(void);
/* 1BF708 */ void gm_801BF708(s8);
/* 1BF718 */ u8 gm_801BF718(void);
/* 3DF94C */ extern gm_803DF94C_t* gm_803DF94C[];
#define MELEE_gmregclear_H
/* 17C0C8 */ void fn_8017C0C8(void);
/* 17C1A4 */ void fn_8017C1A4(HSD_GObj*);
/* 17C71C */ void fn_8017C71C(void);
/* 17C7A0 */ void fn_8017C7A0(void);
/* 17C7EC */ void fn_8017C7EC(void);
/* 17C838 */ void gm_8017C838(void);
/* 17C984 */ void gm_8017C984(M2C_UNK);
/* 17C9A8 */ void gm_8017C9A8(DebugGameOverData*, Unk1PData*, u8);
/* 17CA38 */ void gm_8017CA38(DebugGameOverData*, Unk1PData*,
                              struct gmm_x0_528_t*, u8);
/* 17CBAC */ void gm_8017CBAC(UnkAdventureData*, struct gmm_x0_528_t*, u8);
/* 17CD94 */ u8 gm_8017CD94(UnkAdventureData*, int, int, int);
/* 17CE34 */ void gm_8017CE34(StartMeleeData*, Unk1PData*, s8*, u8, u8, u8,
                              s32, StKind, s32 count, s32);
/* 17D7AC */ bool gm_8017D7AC(MatchExitInfo*, Unk1PData*, u8);
/* 17D9C0 */ s32 fn_8017D9C0(const u8* used_ckinds, const u8* preset_ckinds);
/* 17DB58 */ void gm_8017DB58(struct Unk1PData_x24* arg0);
/* 17DB6C */ u8 gm_8017DB6C(gm_8017DB6C_arg0_t* arg0, int index);
/* 17DB78 */ u8 gm_8017DB78(gm_8017DB6C_arg0_t* arg0, int index);
/* 17DB88 */ s32 gm_8017DB88(void* arg0, u8 arg1, s32 arg2, s32 arg3, u8* arg4,
                             u8 arg5, u8 (*arg6)(s32, s32, u8),
                             u8 (*arg7)(s32, s32, u8),
                             u8 (*arg8)(s32, s32, u8), f32 (*arg9)(s32, s32),
                             f32 (*arg10)(s32, s32));
/* 17DD7C */ s32 fn_8017DD7C(PlayerInitData* arg0, Unk1PData_x24* arg1,
                             u8 arg2);
/* 17DE54 */ s32 fn_8017DE54(u8, u8*);
/* 17DEC8 */ Unk1PData* fn_8017DEC8(int);
/* 17DF28 */ Unk1PData* fn_8017DF28(void);
/* 17DF90 */ u8 fn_8017DF90(void);
/* 17DFF4 */ int gm_8017DFF4(int);
/* 17E068 */ int gm_8017E068(void);
/* 17E0E4 */ int fn_8017E0E4(void);
/* 17E160 */ bool fn_8017E160(void);
/* 17E21C */ void fn_8017E21C(void);
/* 17E280 */ s8 gm_8017E280(u16, u32);
/* 17E318 */ int fn_8017E318(void);
/* 17E3C8 */ void fn_8017E3C8(void);
/* 17E424 */ UnkAdventureData* gm_GetAdventureData(void);
/* 17E430 */ u8 gm_8017E430(void); ///< returns a player slot
/* 17E440 */ u8 gm_8017E440(void);
/* 17E48C */ u8 gm_8017E48C(GameModeState*);
/* 17E4C4 */ struct gm_803DE650_t* gm_8017E4C4(u8);
/* 17E500 */ u8 gm_8017E500(u8, u8);
/* 17E528 */ f32 gm_8017E528(u8, u8);
/* 17E578 */ f32 gm_8017E578(u8, u8);
/* 17E5C8 */ u8 gm_8017E5C8(u8, u8, u8);
/* 17E5FC */ u8 gm_8017E5FC(u8, u8, u8);
/* 17E630 */ u8 gm_8017E630(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17E664 */ f32 gm_8017E664(u8, u8);
/* 17E6B4 */ f32 gm_8017E6B4(u8, u8);
/* 17E704 */ u8 gm_8017E704(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17E738 */ u8 gm_8017E738(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17E76C */ u8 gm_8017E76C(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17E7A0 */ void gm_8017E7A0(u8);
/* 17E7E0 */ bool gm_8017E7E0(void);
/* 17F294 */ int fn_8017F294(void);
/* 17E7FC */ void gm_8017E7FC(u8);
/* 17E8A4 */ void fn_8017E8A4(int);
/* 17EB30 */ UnkAllstarData* gm_GetAllStarData(void);
/* 17EB3C */ u8 gm_8017EB3C(u8, u8);
/* 17EB64 */ u8 gm_8017EB64(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17EB98 */ u8 gm_8017EB98(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17EBCC */ u8 gm_8017EBCC(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17EC00 */ f32 gm_8017EC00(u8, u8);
/* 17EC50 */ f32 gm_8017EC50(u8, u8);
/* 17ECA0 */ u8 gm_8017ECA0(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17ECD4 */ u8 gm_8017ECD4(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17ED08 */ u8 gm_8017ED08(u8 difficulty, u8 stage_slot, u8 arg2);
/* 17ED3C */ f32 gm_8017ED3C(u8, u8);
/* 17ED8C */ f32 gm_8017ED8C(u8, u8);
/* 17EDDC */ bool fn_8017EDDC(void);
/* 17EE40 */ void fn_8017EE40(int);
/* 17F008 */ int fn_8017F008(void);
/* 17F09C */ s32 fn_8017F09C(void);
/* 17F14C */ s32 fn_8017F14C(void* arg0);
/* 17F1B8 */ s32 fn_8017F1B8(void);
/* 17F2A4 */ s32 fn_8017F2A4(HSD_Text** arg0, f32 farg0, f32 farg1);
/* 17F47C */ s32 fn_8017F47C(HSD_Text** arg0, int arg1);
/* 17F608 */ void fn_8017F608(void* arg0);
/* 17FA1C */ s32 fn_8017FA1C(void* arg0);
/* 17FBA4 */ void fn_8017FBA4(void* arg0);
/* 17FE54 */ void fn_8017FE54(HSD_GObj* gobj);
/* 17FF1C */ void fn_8017FF1C(HSD_GObj* gobj);
/* 1803FC */ s32 fn_801803FC(void* arg0);
/* 180630 */ void fn_80180630(int, int, int, bool, MatchEnd*);
/* 180AC0 */ int fn_80180AC0(void);
/* 180AE4 */ s32 gm_80180AE4(void);
/* 180AF4 */ Fighter_GObj* gm_80180AF4(void);
/* 180B18 */ void gm_80180B18(void);
/* 180BA0 */ void gm_80180BA0(void);
/* 180C14 */ void fn_80180C14(HSD_GObj* gobj);
/* 180C60 */ void fn_80180C60(HSD_GObj* gobj);
/* 181598 */ void fn_80181598(void);
/* 181708 */ void fn_80181708(void);
/* 181998 */ void gm_80181998(void);
/* 181A00 */ void gm_80181A00(s32 arg0, s32 arg1);
/* 181A14 */ int gm_80181A14(void);
/* 181A24 */ u32 gm_80181A24(void);
/* 181A34 */ s32 gm_80181A34(void);
/* 181A44 */ void gm_80181A44(int c_kind, int, bool);
/* 181AC8 */ void gm_80181AC8(int, int, u16);
/* 181B64 */ void gm_80181B64(int c_kind, int, s32);
/* 181BFC */ int fn_80181BFC(int*);
/* 181C80 */ void fn_80181C80(s32 arg0);
/* 181E18 */ void fn_80181E18(void);
/* 182174 */ void gm_80182174(void);
/* 182510 */ bool gm_IsMultimanSmashMode(void);
/* 182554 */ void gm_80182554(int, int);
/* 182578 */ void gm_80182578(void);
/* 182B5C */ void fn_80182B5C(void);
/* 182DF0 */ UnkMultimanData* gm_80182DF0(int c_kind, int);
/* 182F40 */ void fn_80182F40(HSD_GObj*);
/* 183218 */ void gm_80183218(void);
/* 18325C */ void fn_8018325C(HSD_GObj*, int);
/* 184138 */ void fn_80184138(HSD_GObj*, int);
#define MELEE_GM_1A45_H
/* 1A45E8 */ bool gm_GetDbPauseFlag(int bit);
/* 1A4624 */ int gm_801A4624(void);
/* 1A4634 */ void gm_SetDbPauseFlag(int bit);
/* 1A4674 */ void gm_ClearDbPauseFlag(int bit);
/* 1A46B8 */ bool gm_801A46B8(int bit);
/* 1A46F4 */ bool fn_801A46F4(void);
/* 1A47E4 */ bool fn_801A47E4(void);
/* 1A48A4 */ u64 gm_801A48A4(u8);
/* 1A4970 */ void gm_801A4970(struct gm_DbPauseInputHandlers* db_input);
/* 1A4B08 */ void gm_SetDbPauseInputHandlers(bool (*arg0)(void),
                                             bool (*arg1)(void));
/* 1A4B1C */ void gm_801A4B1C(void);
/* 1A4B40 */ void gm_SetPreGObjProcCallback(Event cb);
/* 1A4B50 */ void gm_801A4B50(int);
/* 1A4B60 */ void gm_801A4B60(void);
/* 1A4B74 */ void gm_801A4B74(void);
/* 1A4B88 */ void gm_801A4B88(struct GameSceneInfo*);
/* 1A4B90 */ void* gm_GetCurrentSceneEnterData(void);
/* 1A4B9C */ void* gm_GetCurrentSceneExitData(void);
/* 1A4BA8 */ u32 gm_801A4BA8(void);
/* 1A4BB8 */ u32 gm_801A4BB8(void);
/* 1A4BC8 */ HSD_GObj* gm_801A4BC8(void);
/* 1A4BD0 */ void fn_801A4BD0(HSD_GObj*);
/* 1A4BD4 */ void gm_801A4BD4(void);
/**
 * @brief Finds the #GameScene for a given scene kind.
 *
 * Walks the global #GameScene table (from #gm_GetAllGameScenes)
 * comparing each entry's #GameScene::class_id against @p kind until a
 * match is found or the @c GS_COUNT value is reached.
 *
 * @param kind The #GameSceneKind (passed as a @c u8) to look up.
 * @returns The #GameScene whose #GameScene::class_id equals
 */
/* 1A4CE0 */ GameScene* gm_FindGameSceneHandler(u8 kind);
/**
 * @brief Main per-scene loop invoked from @c gm_801A4014.
 *
 * Runs until #gm_80479D58_t::unk_C becomes non-zero, calling @p on_frame each
 * frame after pad/input processing.
 */
/* 1A4D34 */ void gm_801A4D34(void (*on_frame)(void), GameSceneInfo*);
/* 4D6724 */ extern void (*gm_804D6724)(void);
#define MELEE_GM_1AED_H
/* 1AF568 */ void gm_Scene_MemCard_OnFrame(void);
/* 1B0264 */ void gm_Scene_MemCard_OnEnter(void*);
/* 1B0304 */ void gm_Scene_MemCard_OnExit(void*);
#define GALE01_18A514
/* 18A514 */ void fn_8018A514(int, float);
/* 18A970 */ void fn_8018A970(int);
/* 18AA74 */ void fn_8018AA74(HSD_JObj*, s32, s32);
/* 18B090 */ void fn_8018B090(HSD_GObj*);
/* 18C8D4 */ void fn_8018C8D4(BracketEntry*, s32, s32, s32, s32, s32);
/* 18D50C */ void fn_8018D50C(BracketEntry*, s32, s32, s32, s32, s32);
/* 18DC18 */ void fn_8018DC18(BracketEntry*, s32, s32, s32, s32, s32);
/* 18DF68 */ void fn_8018DF68(BracketEntry*, s32, s32, s32, s32, s32);
/* 18E46C */ void fn_8018E46C(HSD_GObj*, intptr_t);
/* 18E618 */ void fn_8018E618(int, float, int);
/* 18E85C */ void fn_8018E85C(DynamicModelDesc*, s32);
/* 18EC48 */ void fn_8018EC48(void);
/* 18EC7C */ void fn_8018EC7C(void);
/* 18ECA8 */ void fn_8018ECA8(s32, s32, s32, f32, f32, s32);
/* 18F00C */ void fn_8018F00C(char*, s32);
/* 18F1B0 */ s32 gm_8018F1B0(MatchEnd* me);
/* 18F310 */ int fn_8018F310(int);
/* 18F3BC */ int fn_8018F3BC(s32 arg0);
/* 18F3D0 */ int fn_8018F3D0(int);
/* 18F410 */ int fn_8018F410(void);
/* 18F4A0 */ int fn_8018F4A0(void);
/* 18F508 */ s32 fn_8018F508(s32* arg0);
/* 18F5F0 */ char* fn_8018F5F0(void);
/* 18F62C */ u32 fn_8018F62C(HSD_GObj*);
/* 18F634 */ TmData* gm_GetTournamentData(void);
/* 18F640 */ u32 fn_8018F640(int);
/* 18F674 */ u32 fn_8018F674(int);
/* 18F6A8 */ u32 fn_8018F6A8(int);
/* 18F6DC */ int fn_8018F6DC(int);
/* 18F6FC */ CharacterKind fn_8018F6FC(CSSIconHud);
/// @returns the frame for the tou css icon?
/* 18F71C */ float fn_8018F71C(int, int);
/* 18F74C */ int fn_8018F74C(void);
/* 18F808 */ int fn_8018F808(void);
/* 18F888 */ void fn_8018F888(void);
/* 18FA24 */ void fn_8018FA24(void);
/* 18FBD8 */ void fn_8018FBD8(M2C_UNK arg0, s32 arg1);
/* 18FBE0 */ void fn_8018FBE0(s32, s32, s32, s32, s32, s32, s32);
/* 18FDC4 */ void fn_8018FDC4(HSD_JObj*, float x, float y, float z);
/* 18FF9C */ void fn_8018FF9C(HSD_JObj*, float x, float y, float z);
/* 190174 */ HSD_GObj* fn_80190174(HSD_CObjDesc*);
/* 1901F8 */ HSD_GObj* fn_801901F8(HSD_CObjDesc*);
/* 19027C */ void fn_8019027C(M2C_UNK lights);
/* 1902F0 */ void fn_801902F0(int arg0);
/* 19035C */ HSD_GObj* fn_8019035C(bool, DynamicModelDesc*, int, int, int,
                                   bool, void (*)(HSD_GObj*), float);
/* 19044C */ void fn_8019044C(HSD_JObj*, float);
/* 190480 */ void fn_80190480(float);
/* 1904D0 */ void fn_801904D0(void);
/* 190520 */ void fn_80190520(float x, float y, float z);
/* 1905F0 */ void gm_801905F0(StartMeleeData*);
/* 190ABC */ void fn_80190ABC(int);
/* 190EA4 */ void gm_80190EA4(void);
/* 190FE4 */ void gm_80190FE4(int);
/* 1910E0 */ void fn_801910E0(HSD_GObj*);
/* 191154 */ void fn_80191154(HSD_GObj*);
/* 191240 */ void fn_80191240(HSD_GObj*);
/* 1913BC */ void fn_801913BC(HSD_GObj*);
/* 191678 */ void fn_80191678(HSD_GObj*);
/* 19175C */ void fn_8019175C(HSD_GObj*);
/* 1918F0 */ void fn_801918F0(HSD_GObj*);
/* 191A54 */ void fn_80191A54(HSD_GObj*);
/* 191B5C */ void fn_80191B5C(void* arg0);
/* 191CA4 */ void fn_80191CA4(HSD_GObj*);
/* 191D38 */ void fn_80191D38(HSD_GObj*);
/* 191E9C */ void fn_80191E9C(HSD_GObj*);
/* 191FD4 */ void fn_80191FD4(HSD_GObj*);
/* 19237C */ void fn_8019237C(HSD_GObj*);
/* 19249C */ void fn_8019249C(HSD_GObj*);
/* 192690 */ void fn_80192690(HSD_GObj*);
/* 192758 */ void fn_80192758(HSD_GObj*);
/* 192938 */ void fn_80192938(void);
/* 192BB0 */ void fn_80192BB0(void);
/* 192E6C */ void fn_80192E6C(void);
/* 193230 */ void fn_80193230(void);
/* 193308 */ void fn_80193308(void);
/* 1935B8 */ void fn_801935B8(void);
/* 1937C4 */ void fn_801937C4(s32* arg, u32 arg0, u32 arg01);
/* 193B58 */ void fn_80193B58(s32* arg, u32 arg0, u32 arg01);
/* 193FCC */ void fn_80193FCC(s32* arg, u32 arg0, u32 arg01);
/* 194658 */ void fn_80194658(s32* arg, u32 arg0, u32 arg01);
/* 1949B4 */ void fn_801949B4(s32* arg, u32 arg0, u32 arg01);
/* 194BC4 */ void fn_80194BC4(s32* arg, u32 arg0, u32 arg01);
/* 194D84 */ void fn_80194D84(s32* arg, u32 arg0, u32 arg01);
/* 194F30 */ void fn_80194F30(s32* arg, u32 arg0, u32 arg01);
/* 1953C8 */ void fn_801953C8(s32* arg, u32 arg0, u32 arg01);
/* 195AF0 */ void fn_80195AF0(s32* arg, u32 arg0, u32 arg01);
/* 195CCC */ void fn_80195CCC(s32* arg, u32 arg0, u32 arg01);
/* 19610C */ void fn_8019610C(s32* arg, u32 arg0, u32 arg01);
/* 19628C */ void gm_Scene_TouSetup_OnFrame(void);
/* 1963B4 */ void gm_Scene_TouSetup_OnEnter(M2C_UNK);
/* 1964A4 */ void gm_Scene_TouSetup_OnExit(M2C_UNK);
/* 196510 */ void fn_80196510(void);
/* 19655C */ s32 fn_8019655C(void);
/* 196564 */ bool fn_80196564(TmData*);
/* 196594 */ bool fn_80196594(TmData*);
/* 1965C4 */ void fn_801965C4(void);
/* 196684 */ void fn_80196684(s32 arg0);
/* 1967E0 */ void fn_801967E0(s32);
/* 196CF8 */ s32 fn_80196CF8(void);
/* 196DBC */ void fn_80196DBC(HSD_GObj*);
/* 196E30 */ void fn_80196E30(HSD_GObj*);
/* 196EEC */ void fn_80196EEC(HSD_GObj*);
/* 196FFC */ void fn_80196FFC(HSD_GObj* gobj);
/* 1973F8 */ void fn_801973F8(HSD_GObj*);
/* 1975C8 */ void fn_801975C8(HSD_GObj*);
/* 1976D4 */ void fn_801976D4(HSD_GObj*);
/* 1977AC */ void fn_801977AC(HSD_GObj*);
/* 197AF0 */ void fn_80197AF0(HSD_GObj* gobj);
/* 197D4C */ void fn_80197D4C(HSD_GObj*);
/* 197E18 */ void fn_80197E18(HSD_GObj*);
/* 197FD8 */ void fn_80197FD8(HSD_GObj*);
/* 1981A0 */ void fn_801981A0(HSD_GObj*);
/* 1983E4 */ void fn_801983E4(HSD_GObj*);
/* 198584 */ void fn_80198584(ResultsData*);
/* 1985D4 */ void fn_801985D4(HSD_GObj* gobj);
/* 198824 */ void fn_80198824(HSD_GObj*);
/* 198BA0 */ void fn_80198BA0(void);
/* 198C60 */ void fn_80198C60(void);
/* 198D18 */ void fn_80198D18(void);
/* 198EBC */ void fn_80198EBC(void);
/* 199AF0 */ void fn_80199AF0(void);
/* 19A158 */ void fn_8019A158(void);
/* 19A71C */ void fn_8019A71C(s32* arg0, u32 arg1, u32 arg2);
/* 19A828 */ void gm_8019A828(void);
/* 19A86C */ void fn_8019A86C(TmData*, u32, u32);
/* 19AF50 */ void fn_8019AF50(s32*, u32, u32);
/* 19B2DC */ void gm_Scene_TouBracket_OnFrame(void);
/* 19B458 */ void fn_8019B458(s32* arg0);
/* 19B81C */ void fn_8019B81C(s32* arg0);
/* 19B860 */ void fn_8019B860(TmData*);
/* 19B8C4 */ void gm_Scene_TouBracket_OnEnter(void*);
/* 19B9C8 */ void gm_Scene_TouBracket_OnExit(void*);
/* 19BA04 */ void fn_8019BA04(s32* arg0);
/* 19BA08 */ void fn_8019BA08(u8, HSD_JObj*);
/* 19BF18 */ void fn_8019BF18(HSD_GObj*);
/* 19BF8C */ void fn_8019BF8C(HSD_GObj*);
/* 19C048 */ void fn_8019C048(HSD_GObj*);
/* 19C3EC */ void fn_8019C3EC(HSD_GObj*);
/// updates visibility of char icons on the "press start" screen
/* 19C570 */ void fn_8019C570(HSD_GObj*);
/* 19C6AC */ void fn_8019C6AC(HSD_GObj*);
/* 19C744 */ void fn_8019C744(HSD_GObj*);
/* 19CA38 */ void fn_8019CA38(HSD_GObj*);
/* 19CBFC */ void fn_8019CBFC(HSD_GObj*);
/* 19CC74 */ void fn_8019CC74(HSD_GObj*);
/* 19CDBC */ void fn_8019CDBC(HSD_GObj*);
/* 19CFA4 */ void fn_8019CFA4(HSD_GObj*);
/* 19D074 */ void fn_8019D074(HSD_GObj*);
/* 19D1BC */ void fn_8019D1BC(void);
/* 19DD60 */ void fn_8019DD60(void);
/* 19DF8C */ void gm_Scene_TouAlt_OnFrame(void);
/* 19E634 */ void gm_8019E634(void);
/* 19ECAC */ void gm_Scene_TouAlt_OnEnter(void*);
/* 19EE54 */ void gm_Scene_TouAlt_OnExit(void*);
/* 19EE80 */ void fn_8019EE80(TmVsData*);
/* 19EF08 */ void fn_8019EF08(TmVsData*);
/* 4771C4 */ extern TmData gm_804771C4;
/* 477738 */ extern MatchEnd gm_80477738;
/* 473AB8 */ extern BracketEntry lbl_80473AB8[64];
/* 4D663C */ extern int lbl_804D663C;
/* 4771B8 */ extern struct TmBoxArrays lbl_804771B8;
/* 3D9D20 */ extern struct lbl_803D9D20_t lbl_803D9D20;
#define MELEE_GM_16AE_H
/* 16AE38 */ VsSceneController* gmVs_GetSceneController(void);
/* 16AE44 */ VsSceneState* gmVs_GetSceneState(void);
/* 16AE50 */ struct StartMeleeRules* gm_GetStartMeleeRules(void);
/* 16AE60 */ struct lbl_8046B488_t* fn_8016AE60(void);
/* 16AE80 */ bool gm_8016AE80(void);
/* 16AE94 */ f32 gm_8016AE94(void);
/* 16AEA4 */ u64 gm_8016AEA4(void);
/* 16AEB8 */ s32 gm_8016AEB8(void);
/* 16AEC8 */ bool gm_8016AEC8(void);
/* 16AEDC */ u32 gm_GetFrameCount(void);
/* 16AEEC */ u32 gm_8016AEEC(void);
/* 16AEFC */ u16 gm_8016AEFC(void);
/* 16AF0C */ u16 gm_8016AF0C(void);
/* 16AF88 */ bool GetMatchTimer(int*);
/* 16B004 */ u16 gm_GetStKind(void);
/* 16B014 */ bool gm_8016B014(void);
/* 16B094 */ bool gm_8016B094(void);
/* 16B0B4 */ bool gm_8016B0B4(void);
/* 16B0D4 */ bool gm_8016B0D4(void); ///< friendly fire enabled
/* 16B0E8 */ bool gm_8016B0E8(void);
/* 16B0FC */ bool gm_8016B0FC(void); ///< single-button mode enabled
/* 16B110 */ bool gm_8016B110(void);
/* 16B124 */ bool gm_8016B124(void);
/* 16B138 */ void fn_8016B138(void);
/* 16B14C */ bool gm_8016B14C(void);
/* 16B168 */ bool gm_8016B168(void);
/* 16B184 */ bool gm_8016B184(void);
/* 16B1A8 */ bool gm_8016B1A8(void);
/* 16B1C4 */ bool gm_8016B1C4(void);
/* 16B1D8 */ bool gm_8016B1D8(void);
/* 16B1EC */ bool gm_8016B1EC(void);
/* 16B204 */ bool gm_8016B204(void);
/* 16B238 */ bool gm_8016B238(void);
/* 16B248 */ float gm_8016B248(void);
/* 16B258 */ bool gm_8016B258(int);
/* 16B274 */ void gm_SetGameSpeed(float speed);
/* 16B2C8 */ void gm_ResetGameSpeed(void);
/* 16B328 */ void gm_8016B328(void);
/* 16B33C */ void gm_8016B33C(int arg0);
/* 16B350 */ void gm_8016B350(int arg0);
/* 16B364 */ void gm_8016B364(int arg0);
/* 16B378 */ void gm_8016B378(s8 arg0);
/* 16B388 */ void fn_8016B388(int arg0, int arg1);
/* 16B3A0 */ bool gm_8016B3A0(void);
/* 16B3D8 */ bool gm_8016B3D8(void);
/* 16B41C */ bool gm_IsCurrently1PMode_inline(void);
/* 16B498 */ bool gm_IsCurrently1PMode(void);
/* 16B4BC */ bool fn_8016B4BC(void);
/* 16B510 */ bool fn_8016B510(void);
/* 16B558 */ int gm_8016B558(void);
/* 16B5B0 */ float fn_8016B5B0(void);
/* 16B6E8 */ void gm_8016B6E8(int, int);
/* 16B728 */ u8 fn_8016B728(void);
/* 16B738 */ void fn_8016B738(int);
/* 16B774 */ MatchEnd* gm_8016B774(void);
/* 16B784 */ void fn_8016B784(int);
/* 16B7B4 */ void fn_8016B7B4(int);
/* 16B7F8 */ void fn_8016B7F8(int);
/* 16B88C */ void fn_8016B88C(int);
/* 16B8D4 */ void gm_8016B8D4(s32, u8 slot_type);
/* 16B918 */ void fn_8016B918(void);
/* 16BAF4 */ bool gm_AnyControllerPressedStart(void);
/* 16BBB4 */ bool gm_AnyControllerPressedZ(void);
/* 16BC74 */ int gm_DefaultVSGetPauser(void);
/* 16BE80 */ int gm_CameraModeVSGetPauser(void);
/* 16BF74 */ MatchOutcome gm_GetFFAOutcome(void);
/* 16C0C8 */ MatchOutcome gm_GetTeamBattleOutcome(void);
/* 16C35C */ MatchOutcome gm_GetMatchOutcome(void);
/* 16C46C */ void fn_8016C46C(int);
/* 16C4F4 */ void fn_8016C4F4(MatchEnd*);
/* 16C5C0 */ int gm_8016C5C0(int pl_slot);
/* 16C658 */ int gm_GetMatchEndPlayerScore(int);
/// @todo should take Fighter_GObj*? See ftCo_800A53DC
/* 16C6C0 */ /* static */ s32 gm_8016C6C0(Item_GObj*);
/* 16C75C */ /* static */ int gm_8016C75C(HSD_GObj*);
/* 16C7D0 */ void fn_8016C7D0(HSD_GObj*);
/* 16C7F0 */ void fn_8016C7F0(void);
/**
 * @brief Checks for pause input and runs the pause routine when unpaused.
 *
 * Runs when the match is not paused. Skipped while
 * #VsSceneController::unpause_timer is non-zero, the HUD is disabled, or
 * #StartMeleeRules::disable_pausing is set. On a successful pause, sets
 * #VsSceneController::pause_timer to @c 0xA and optionally invokes
 * #StartMeleeRules::on_pause_override or #gm_EnablePlayerPauseCamera.
 *
 * @param[in] arg0 Match state (#VsSceneController).
 * @param[in] arg1 Pause context id passed to #gm_SetDbPauseFlag.
 */
/* 16CA68 */ void gm_DoPauseChecksAndRoutine(VsSceneController*, int);
/**
 * @brief Checks for unpause input and runs the unpause routine when paused.
 *
 * Runs when the match is paused. Skipped while #VsSceneController::pause_timer
 * is non-zero, the HUD is disabled, or #StartMeleeRules::disable_pausing is
 * set. Only the original pauser may unpause. On success, sets
 * #VsSceneController::unpause_timer to @c 0xA and optionally invokes
 * #StartMeleeRules::on_unpause_override or #Ground_EnableMatchCamera.
 *
 * @param[in] arg0 Match state (#VsSceneController).
 * @param[in] arg1 Unpause context id passed to #gm_ClearDbPauseFlag.
 */
/* 16CBE8 */ void gm_DoUnpauseChecksAndRoutine(VsSceneController*, int);
/* 16CD98 */ void fn_8016CD98(VsSceneController*);
/* 16CF4C */ void fn_8016CF4C(int, MatchOutcome);
/* 16CFE0 */ void fn_8016CFE0(void);
/* 16D32C */ void gm_Scene_Training_OnFrame(void);
/* 16D538 */ bool fn_8016D538(void);
/* 16D634 */ void fn_8016D634(void);
/* 16D800 */ void gm_Scene_Vs_OnFrame(void);
/* 16D8AC */ void fn_8016D8AC(int, struct PlayerInitData*);
/* 16DCC0 */ void fn_8016DCC0(struct StartMeleeData*);
/* 16DEEC */ void fn_8016DEEC(void);
/* 16E124 */ void fn_8016E124(void);
/* 16E2BC */ void fn_8016E2BC(void);
/* 16E5C0 */ bool fn_8016E5C0(struct StartMeleeData*);
/* 16E730 */ void fn_8016E730(struct StartMeleeData*);
/* 16E934 */ void gm_Scene_Vs_OnEnter(void*);
/* 16E9C8 */ void gm_Scene_Vs_OnExit(void*);
/* 16EBC0 */ void gm_Scene_SuddenDeath_OnEnter(void*);
/* 16EC28 */ void gm_Scene_Training_OnEnter(void*);
/* 16ECE8 */ float gm_8016ECE8(void);
/* 16EDDC */ bool gm_8016EDDC(int, struct PlayerInitData*);
/* 16EF98 */ bool fn_8016EF98(int);
/* 16F00C */ void gm_8016F00C(int);
/* 16F030 */ void fn_8016F030(struct StartMeleeData*);
/* 16F088 */ void
gm_LoadRumbleEnabled(struct StartMeleeData*); /// Checks rumble?
/* 16F120 */ int gm_8016F120(int);
/* 16F140 */ void fn_8016F140(int);
/* 16F160 */ int fn_8016F160(int, int);
#define MELEE_GM_ADVENTURE_H
/* 1B3F40 */ void gm_801B3F40(GameModeState*);
/* 1B4064 */ void gm_801B4064(GameModeState*);
/* 1B4170 */ void gm_801B4170(GameModeState*);
/* 1B4254 */ void gm_801B4254(GameModeState*);
/* 1B4294 */ void gm_801B4294(GameModeState*);
/* 1B42E8 */ void gm_801B42E8(GameModeState*);
/* 1B4350 */ void gm_801B4350(GameModeState*);
/* 1B4408 */ void gm_801B4408(GameModeState*);
/* 1B4430 */ void gm_801B4430(GameModeState*);
/* 1B44A0 */ void gm_801B44A0(GameModeState*);
/* 1B45A4 */ void gm_801B45A4(GameModeState*);
/* 1B461C */ void gm_801B461C(GameModeState*);
/* 1B4684 */ void gm_801B4684(GameModeState*);
/* 1B4768 */ void gm_801B4768(GameModeState*);
/* 1B47FC */ void gm_801B47FC(GameModeState*);
/* 1B4860 */ void gm_801B4860(GameModeState*);
/* 1B4974 */ void gm_801B4974(GameModeState*);
/* 1B4B28 */ void gm_801B4B28(GameModeState*);
/* 1B4C5C */ void gm_801B4C5C(GameModeState*);
/* 1B4D34 */ void gm_801B4D34(GameModeState*);
/* 1B4DAC */ void gm_801B4DAC(GameModeState*);
/* 1B4E58 */ void gm_801B4E58(GameModeState*);
/* 1B4EB8 */ void gm_801B4EB8(GameModeState*);
/* 1B4F44 */ void gm_801B4F44(GameModeState*);
/* 1B4FCC */ void gm_801B4FCC(GameModeState*);
/* 1B5078 */ void gm_801B5078(GameModeState*);
/* 1B50C4 */ void gm_801B50C4(GameModeState*);
/* 1B518C */ void gm_801B518C(GameModeState*);
/* 1B51CC */ void gm_Mode_Adventure_OnInit(void);
/* 1B5214 */ void gm_Mode_Adventure_OnLoad(void);
/* 3DE1B8 */ extern GameModeState gm_Mode_Adventure_States[49];
/* 3DE650 */ extern struct gm_803DE650_t gm_803DE650[46];
#define MELEE_GM_ALLSTAR_H
/* 1B5324 */ void gm_801B5324(UnkAllstarData*, s32);
/* 1B5624 */ void gm_801B5624(GameModeState*);
/* 1B59AC */ void gm_801B59AC(GameModeState*);
/* 1B5AA8 */ void fn_801B5AA8(int);
/* 1B5ACC */ void gm_801B5ACC(GameModeState*);
/* 1B5E7C */ void gm_801B5E7C(GameModeState*);
/* 1B5EB4 */ void gm_801B5EB4(GameModeState*);
/* 1B5EE4 */ void gm_801B5EE4(GameModeState*);
/* 1B5F50 */ void gm_801B5F50(GameModeState*);
/* 1B5FB4 */ void gm_801B5FB4(GameModeState*);
/* 1B607C */ void gm_801B607C(GameModeState*);
/* 1B60A4 */ void gm_Mode_AllStar_OnLoad(void);
/* 1B62D8 */ void gm_Mode_AllStar_OnInit(void);
/* 3DE930 */ extern GameModeState gm_Mode_AllStar_States[];
#define MELEE_GMAPPROACH_H
void gm_Scene_Approach_OnFrame(void);
void gm_Scene_Approach_OnEnter(void*);
void gm_Scene_Approach_OnExit(void*);
#define MELEE_GM_1BF9_H
#define GALE01_1A2224
typedef struct _gmCameraUnkStruct4 {
    /*0x00*/ bool x0;
    /*0x04*/ int x4;
    /*0x08*/ int x8;
    /*0x0C*/ int xC;
} gmCameraUnkStruct4;
typedef struct _gmCameraUnkStruct {
    /*0x00*/ void* ifvscam; ///< interface dat file loaded from 801a3254
    /*0x04*/ HSD_JObj* x4;
    /*0x08*/ HSD_JObj* x8;
    /*0x0C*/ s32 xC;
    /*0x10*/ s32 x10;
    /*0x14*/ s32 x14;
    /*0x18*/ s32 x18;
    /*0x1C*/ void* snap_image;
    /*0x20*/ int x20;
    /*0x24*/ gmCameraUnkStruct4 x24[2];
    /*0x44*/ s32 x44;
    /*0x48*/ HSD_Text* x48[3];
    /*0x54*/ int x54;
} gmCameraUnkStruct;
typedef struct _gmCameraUnkFuncTable {
    /*0x00*/ struct {
        u8 x0;
        u16 x2;
    } flags;
    /*0x04*/ void (*x4)(void);
    /*0x08*/ void (*x8)(void);
} gmCameraUnkFuncTable;
/* 1A2224 */ u8* gmCamera_801A2224(u8* dst, u32 value);
/* 1A2334 */ HSD_Text* gmCamera_801A2334(s32, f32, f32, f32, f32);
/* 1A253C */ void gmCamera_801A253C(s32*, s32*);
/* 1A25C8 */ void gmCamera_801A25C8(void);
/* 1A2640 */ s32 gmCamera_801A2640(void);
/* 1A2650 */ void gmCamera_801A2650(void);
/* 1A26C0 */ void gmCamera_801A26C0(void);
/* 1A2798 */ void gmCamera_801A2798(void);
/* 1A2800 */ void gmCamera_801A2800(void);
/* 1A28AC */ void gmCamera_801A28AC(void);
/* 1A292C */ void gmCamera_801A292C(void);
/* 1A2AAC */ void gmCamera_801A2AAC(void);
/* 1A2BB0 */ void gmCamera_801A2BB0(void);
/* 1A2BF0 */ void gmCamera_801A2BF0(void);
/* 1A2D44 */ void gmCamera_801A2D44(void);
/* 1A2FBC */ void gmCamera_801A2FBC(void);
/* 1A2FFC */ void gmCamera_801A2FFC(void);
/* 1A3048 */ void gmCamera_801A3048(s32);
/* 1A3098 */ void gmCamera_801A3098(void);
/* 1A30E4 */ void gmCamera_801A30E4(void);
/* 1A31D8 */ void fn_801A31D8(HSD_GObj*);
/* 1A31FC */ void gmCamera_801A31FC(void);
#define MELEE_GM_GM_1B14_1_H
/* 1B23F0 */ void gm_801B23F0(void);
/* 1B2B7C */ void gm_Mode_Camera_OnInit(void);
/**
 * Scene table for #GM_CAMERA_MODE.
 *
 * The only game-mode scenes that install a
 * #StartMeleeRules::check_for_pauser_override callback
 * (#gm_CameraModeVSGetPauser).
 */
/* 3DDBE0 */ extern GameModeState gm_Mode_Camera_States[];
#define MELEE_GM_CLASSIC_H
/* 1B2F78 */ void gm_Mode_Classic_OnLoad(void);
/* 1B34B8 */ void gm_Mode_Classic_OnInit(void);
/* 1B3500 */ void gmClassic_801B3500(GameModeState*);
/* 1B3A34 */ void gmClassic_801B3A34(GameModeState*);
/* 1B3B40 */ void gmClassic_801B3B40(GameModeState*);
/* 1B3D44 */ void gmClassic_801B3D44(GameModeState*);
/* 1B3D84 */ void gmClassic_801B3D84(GameModeState*);
/* 1B3DD8 */ void gmClassic_801B3DD8(GameModeState*);
/* 1B3E44 */ void gmClassic_801B3E44(GameModeState*);
/* 1B3F18 */ void gmClassic_801B3F18(GameModeState*);
#define MELEE_GM_GMDEBUGMODE_H
/* 3DD6D0 */ extern GameModeState gm_Mode_Debug_States[];
#define MELEE_GM_FIXEDCAMERA_H
/* 1B9F10 */ void gm_801B9F10(GameModeState*);
/* 1B9F3C */ void gm_801B9F3C(GameModeState*);
/* 1B9F64 */ void gm_801B9F64(GameModeState*);
/* 1B9F8C */ void gm_801B9F8C(GameModeState*);
/* 1B9FB8 */ void fn_801B9FB8(StartMeleeData*, StartMeleeData*);
/* 1B9FC8 */ void gm_801B9FC8(GameModeState*);
/* 1B9FFC */ void gm_801B9FFC(GameModeState*);
/* 1BA024 */ void gm_801BA024(GameModeState*);
/* 1BA058 */ void gm_801BA058(GameModeState*);
/* 1BA078 */ void gm_801BA078(GameModeState*);
/* 1BA098 */ void gm_801BA098(GameModeState*);
/* 1BA0C4 */ void gm_Mode_CameraVs_OnInit(void);
/* 1BA0EC */ void gm_Mode_CameraVs_OnLoad(void);
#define MELEE_GM_GIANT_H
/* 1B8FB8 */ void gm_801B8FB8(GameModeState*);
/* 1B8FE4 */ void gm_801B8FE4(GameModeState*);
/* 1B900C */ void gm_801B900C(GameModeState*);
/* 1B9034 */ void gm_801B9034(GameModeState*);
/* 1B9060 */ void fn_801B9060(PlayerInitData*, PlayerInitData*);
/* 1B9084 */ void gm_801B9084(GameModeState*);
/* 1B90B8 */ void gm_801B90B8(GameModeState*);
/* 1B90E0 */ void gm_801B90E0(GameModeState*);
/* 1B9114 */ void gm_801B9114(GameModeState*);
/* 1B9134 */ void gm_801B9134(GameModeState*);
/* 1B9154 */ void gm_801B9154(GameModeState*);
/* 1B9180 */ void gm_Mode_GiantVs_OnInit(void);
/* 1B91A8 */ void gm_Mode_GiantVs_OnLoad(void);
#define MELEE_GM_GMGOVER_H
#define MELEE_GM_GMHANYUCSS_H
/* 3DFB08 */ extern GameModeState gm_Mode_GOver_States[];
#define MELEE_GM_GMTESTHANYU_H
/* 3DFAD8 */ extern GameModeState gm_Mode_HanyuSss_States[];
#define MELEE_GM_HOMERUN_H
/* 1B98E8 */ void gm_801B98E8(GameModeState*);
/* 1B999C */ void gm_801B999C(GameModeState*);
/* 1B9A3C */ void gm_801B9A3C(GameModeState*);
/* 1B9DD8 */ void gm_801B9DD8(GameModeState*);
/* 1B9EB8 */ void gm_Mode_Homerun_OnInit(void);
/* 1B9EE4 */ void gm_Mode_Homerun_OnLoad(void);
/* 497618 */ extern VsModeData gmHomeRun_VsModeData;
#define MELEE_GM_HOWTO_H
/* 1ACC94 */ M2C_UNK gm_801ACC94(void);
/* 1ACCA0 */ void gm_Scene_HowTo_OnEnter(void*);
/* 1ACD8C */ void gm_Scene_HowTo_OnFrame(void);
#define MELEE_GM_INVISIBLE_H
/* 1BA4C4 */ void gm_Mode_InvisibleVs_OnInit(void);
/* 1BA4EC */ void gm_Mode_InvisibleVs_OnLoad(void);
#define MELEE_GM_LIGHTNING_H
/* 1BA704 */ void gm_801BA704(GameModeState*);
/* 1BA730 */ void gm_801BA730(GameModeState*);
/* 1BA758 */ void gm_801BA758(GameModeState*);
/* 1BA780 */ void gm_801BA780(GameModeState*);
/* 1BA7B8 */ void gm_801BA7B8(GameModeState*);
/* 1BA7EC */ void gm_801BA7EC(GameModeState*);
/* 1BA814 */ void gm_801BA814(GameModeState*);
/* 1BA848 */ void gm_801BA848(GameModeState*);
/* 1BA868 */ void gm_801BA868(GameModeState*);
/* 1BA888 */ void gm_801BA888(GameModeState*);
/* 1BA8B4 */ void gm_Mode_LightningVs_OnInit(void);
/* 1BA8DC */ void gm_Mode_LightningVs_OnLoad(void);
#define MELEE_GM_GMMAIN_H
#define GALE01_15CC34
/* 15CC34 */ GameRules* gmMainLib_GetGameRules(void);
/* 15CC40 */ struct GmCardData* gmMainLib_GetCardData(void);
/* 15CC4C */ struct NameTagDataBank* gmMainLib_GetNameTagDataBanks(void);
/* 15CC58 */ struct GamePrefs* gmMainLib_GetGamePrefs(void);
/* 15CC64 */ struct FighterData*
    GetPersistentFighterData(SelectableCharacterKind);
/* 15CC78 */ void* gmMainLib_GetTrophyFlags(void);
/* 15CC84 */ void* gmMainLib_GetTrophyCategoryFlags(void);
/* 15CC90 */ s16* gmMainLib_GetTrophyCount(void);
/* 15CC9C */ struct NameTagData* GetPersistentNameData(s32);
/* 15CCE4 */ struct gmm_x0_44_t* gmMainLib_8015CCE4(void);
/* 15CCF0 */ u32* gmMainLib_8015CCF0(void);
/* 15CCFC */ void* gmMainLib_8015CCFC(void);
/* 15CD08 */ void* gmMainLib_GetVsPlayContestants(void);
/* 15CD14 */ void* gmMainLib_GetVsPlayTime(void);
/* 15CD20 */ void* gmMainLib_GetCombinedVSPlayTime(void);
/* 15CD2C */ u32* gmMainLib_GetTimeMatchTotal(void);
/* 15CD38 */ u32* gmMainLib_GetStockMatchTotal(void);
/* 15CD44 */ u32* gmMainLib_GetCoinMatchTotal(void);
/* 15CD50 */ u32* gmMainLib_GetBonusMatchTotal(void);
/* 15CD5C */ u32* gmMainLib_GetStaminaMatchTotal(void);
/* 15CD68 */ u32* gmMainLib_GetMatchResetCounter(void);
/* 15CD74 */ void* gmMainLib_GetSingleplayerTime(void);
/* 15CD80 */ void* gmMainLib_8015CD80(void);
/* 15CD8C */ void* gmMainLib_GetPowerCount(void);
/* 15CD98 */ int* gm_GetPowerTime(void);
/* 15CDA4 */ void* gmMainLib_GetTotalDamage(void);
/* 15CDB0 */ s32* gmMainLib_GetKOTotal(void);
/* 15CDBC */ void* gmMainLib_GetSelfDestructTotal(void);
/* 15CDC8 */ struct gmm_x0_528_t* gmMainLib_8015CDC8(void);
/* 15CDD4 */ struct gmm_x0_528_t* gmMainLib_8015CDD4(void);
/* 15CDE0 */ struct gmm_x0_528_t* gmMainLib_8015CDE0(void);
/* 15CDEC */ void gmMainLib_8015CDEC(void);
/* 15CE44 */ s8* gmMainLib_8015CE44(s32, s32);
/* 15CEB4 */ void gmMainLib_8015CEB4(s32);
/* 15CEFC */ bool gmMainLib_8015CEFC(int);
/* 15CF5C */ s32 gmMainLib_8015CF5C(s32);
/* 15CF70 */ void gmMainLib_8015CF70(s32, s32);
/* 15CF84 */ void gmMainLib_8015CF84(void);
/* 15CF94 */ bool gmMainLib_8015CF94(void);
/* 15CFB4 */ s8* gmMainLib_8015CFB4(u8);
/* 15CFCC */ s32 gmMainLib_8015CFCC(u8);
/* 15D00C */ void gmMainLib_8015D00C(u8);
/* 15D06C */ s32* gmMainLib_8015D06C(u8);
/* 15D084 */ s32* gmMainLib_8015D084(u8);
/* 15D0C0 */ s32* gmMainLib_8015D0C0(u8);
/* 15D0D8 */ bool gmMainLib_8015D0D8(u8);
/* 15D0F4 */ s32 gmMainLib_8015D0F4(u8);
/* 15D134 */ void gmMainLib_8015D134(u8);
/* 15D194 */ u8* gmMainLib_8015D194(u8); ///< returns a CPU level pointer
/* 15D1AC */ s32 gmMainLib_8015D1AC(u8);
/* 15D1C8 */ void gmMainLib_8015D1C8(u8, int stocks);
/* 15D1E8 */ s32* gmMainLib_8015D1E8(u8);
/* 15D200 */ bool gmMainLib_8015D200(u8);
/* 15D21C */ s32 gmMainLib_8015D21C(u8);
/* 15D25C */ void gmMainLib_8015D25C(u8);
/* 15D2BC */ u8* gmMainLib_8015D2BC(u8);
/* 15D2D4 */ s32 gmMainLib_8015D2D4(u8);
/* 15D2F0 */ void gmMainLib_8015D2F0(u8, int stocks);
/* 15D310 */ s32* gmMainLib_8015D310(u8);
/* 15D328 */ bool gmMainLib_8015D328(u8);
/* 15D344 */ s32 gmMainLib_8015D344(u8);
/* 15D384 */ void gmMainLib_8015D384(u8);
/* 15D3E4 */ u8* gmMainLib_8015D3E4(u8);
/* 15D3FC */ s32 gmMainLib_8015D3FC(u8);
/* 15D418 */ void gmMainLib_8015D418(u8, int stocks);
/* 15D438 */ u32* gmMainLib_8015D438(u8);
/* 15D450 */ s32* gmMainLib_8015D450(u8);
/* 15D48C */ bool gmMainLib_8015D48C(u8);
/* 15D4A8 */ s32 gmMainLib_8015D4A8(u8);
/* 15D4E8 */ void gmMainLib_8015D4E8(u8, s32);
/* 15D508 */ bool gmMainLib_8015D508(void);
/* 15D5DC */ bool gmMainLib_8015D5DC(void);
/* 15D640 */ bool gmMainLib_8015D640(void);
/* 15D6A4 */ s32* gmMainLib_8015D6A4(u8);
/* 15D6BC */ bool gmMainLib_8015D6BC(u8);
/* 15D6D8 */ void gmMainLib_8015D6D8(u8, s32);
/* 15D6F8 */ s32* gmMainLib_8015D6F8(u8);
/* 15D710 */ bool gmMainLib_8015D710(u8);
/* 15D72C */ void gmMainLib_8015D72C(u8, s32);
/* 15D74C */ u16* gmMainLib_8015D74C(u8);
/* 15D764 */ bool gmMainLib_8015D764(u8);
/* 15D780 */ void gmMainLib_8015D780(u8);
/* 15D7A4 */ u16* gmMainLib_8015D7A4(u8);
/* 15D7BC */ s32* gmMainLib_8015D7BC(u8);
/* 15D7D4 */ s32* gmMainLib_8015D7D4(u8);
/* 15D7EC */ u16* gmMainLib_8015D7EC(u8);
/* 15D804 */ u32* gmMainLib_8015D804(s32);
/* 15D818 */ s32 gmMainLib_8015D818(u32);
/* 15D8B0 */ void gmMainLib_8015D8B0(u32);
/* 15D8D8 */ s32 gmMainLib_8015D8D8(u32);
/* 15D8FC */ void gmMainLib_8015D8FC(u32);
/* 15D924 */ void gmMainLib_8015D924(u32);
/* 15D94C */ int gmMainLib_8015D94C(u32);
/* 15D970 */ u32* gmMainLib_8015D970(ssize_t idx);
/* 15D984 */ bool gmMainLib_8015D984(u32);
/* 15D9F4 */ void gmMainLib_8015D9F4(u32);
/* 15DA1C */ s32 gmMainLib_8015DA1C(u32);
/* 15DA40 */ void gmMainLib_8015DA40(u32);
/* 15DA68 */ void gmMainLib_8015DA68(u32);
/* 15DA90 */ int gmMainLib_8015DA90(u32);
/* 15DAB4 */ void gmMainLib_8015DAB4(u32);
/* 15DADC */ bool gmMainLib_8015DADC(u32);
/* 15DB00 */ u8 gmMainLib_8015DB00(void);
/* 15DB0C */ void gmMainLib_8015DB0C(u8);
/* 15DB18 */ void gmMainLib_8015DB18(void);
/* 15DB2C */ void gmMainLib_8015DB2C(u8);
/* 15DB6C */ u8 gmMainLib_8015DB6C(u8);
/* 15DB80 */ void gmMainLib_8015DB80(void);
/* 15DBF4 */ void gmMainLib_8015DBF4(s32);
/* 15EA80 */ void gmMainLib_8015EA80(void);
/* 15ECB0 */ int gmMainLib_8015ECB0(void);
/* 15ECBC */ void gmMainLib_8015ECBC(void);
/* 15ED30 */ int gmMainLib_8015ED30(void);
/* 15ED3C */ int GetRumbleSettingOfPort(ssize_t port);
/* 15ED4C */ void gmMainLib_SetRumbleEnabled(ssize_t port, bool enabled);
/* 15ED5C */ s32 gmMainLib_8015ED5C(void);
/* 15ED68 */ void gmMainLib_8015ED68(ssize_t port);
/* 15ED74 */ u8 gmMainLib_8015ED74(void);
/* 15ED80 */ void gmMainLib_8015ED80(s8);
/* 15ED8C */ u16* gmMainLib_GetUnlockedCharactersBitmaskPtr(void);
/* 15ED98 */ struct gmm_retval_ED98* gmMainLib_8015ED98(void);
/* 15EDA4 */ u16* gmMainLib_8015EDA4(void);
/* 15EDB0 */ struct gmm_retval_EDB0* gmMainLib_8015EDB0(void);
/* 15EDBC */ struct gmm_retval_EDBC* gmMainLib_8015EDBC(void);
/* 15EDC8 */ struct gmm_x1868_1A8_t* gmMainLib_8015EDC8(void);
/* 15EDD4 */ s32 gmMainLib_8015EDD4(void);
/* 15EDE4 */ void gmMainLib_8015EDE4(void);
/* 15EDF8 */ void gmMainLib_8015EDF8(void);
/* 15EE0C */ s32 gmMainLib_8015EE0C(void);
/* 15EE1C */ void gmMainLib_8015EE1C(void);
/* 15EE30 */ void gmMainLib_8015EE30(void);
/* 15EE44 */ s32 gmMainLib_8015EE44(void);
/* 15EE54 */ void gmMainLib_8015EE54(void);
/* 15EE68 */ void gmMainLib_8015EE68(void);
/* 15EE90 */ s32 gmMainLib_8015EE90(void);
/* 15EEA0 */ void gmMainLib_8015EEA0(void);
/* 15EEB4 */ void gmMainLib_8015EEB4(void);
/* 15EEC8 */ void gmMainLib_8015EEC8(void);
/* 15EF30 */ void gmMainLib_8015EF30(struct GmStats*);
/* 15EF84 */ void InitializePersistentNameData(s32);
/* 15F150 */ void gmMainLib_8015F150(void);
/* 15F260 */ void gmMainLib_8015F260(void);
/* 15F464 */ void gmMainLib_8015F464(void);
/* 15F490 */ void gmMainLib_8015F490(void);
/* 15F4BC */ void gmMainLib_8015F4BC(void);
/* 15F4E8 */ u32 gmMainLib_8015F4E8(void);
/* 15F4F4 */ void gmMainLib_8015F4F4(u8 arg0);
/* 15F500 */ void gmMainLib_8015F500(void);
/* 15F588 */ void gmMainLib_8015F588(bool);
/* 15F600 */ void gmMainLib_8015F600(int, int);
/* 15FA34 */ void gmMainLib_8015FA34(s32);
/* 15FB68 */ void gmMainLib_8015FB68(void);
/* 15FBA4 */ void gmMainLib_8015FBA4(void);
/* 15FC74 */ int gmMainLib_8015FC74(void);
/* 15FCC0 */ void gmMainLib_8015FCC0(void);
/* 46B0F0 */ extern struct gmMainLib_8046B0F0_t gmMainLib_8046B0F0;
/* 4D3EE0 */ extern struct gmm_x0* gmMainLib_804D3EE0;
#define MELEE_GM_MENU_H
/* 1A50B8 */ void gm_Mode_ClassicGOver_OnLoad(void);
/* 1A5130 */ void gm_Mode_AdventureGOver_OnLoad(void);
/* 1A51A8 */ void gm_Mode_AllstarGOver_OnLoad(void);
/* 1A5220 */ void gm_Mode_Opening_OnLoad(void);
#define GALE01_1B0FF8
/* 3DD888 */ extern GameModeState gm_Mode_DebugMenu_States[];
/* 3DD8B8 */ extern GameModeState gm_Mode_Menu_States[];
#define MELEE_GM_MOVIE_END_H
/* 1A6254 */ void gm_ModeState_ApproachVs_OnExit(GameModeState*);
/* 1A6308 */ void gm_ModeState_Prize_OnExit(GameModeState*);
/* 1A632C */ void gm_Scene_DebugMenu_OnEnter(void*);
/* 1A637C */ void gm_Scene_MovieEnd_OnEnter(void*);
/* 1A64A8 */ void gm_Scene_MovieEnd_OnFrame(void);
#define MELEE_GM_MULTIMAN_H
/* 1B6320 */ M2C_UNK gm_801B6320(void);
/* 1B632C */ void gm_801B632C(GameModeState*);
/* 1B63C4 */ void gm_801B63C4(GameModeState*);
/* 1B6428 */ void gm_801B6428(GameModeState*);
/* 1B65D4 */ void gm_801B65D4(GameModeState*);
/* 1B67E8 */ void gm_Mode_TargetTest_OnInit(void);
/* 1B6808 */ void gm_Mode_TargetTest_OnLoad(void);
/* 1B6834 */ void gm_Mode_10ManVs_OnInit(void);
/* 1B685C */ void gm_Mode_10ManVs_OnLoad(void);
/* 1B688C */ bool gm_801B688C(bool);
/* 1B69C0 */ void gm_801B69C0(StartMeleeData*);
/* 1B6AD8 */ void gm_801B6AD8(GameModeState*);
/* 1B6B70 */ void gm_801B6B70(GameModeState*);
/* 1B6BE8 */ void gm_801B6BE8(GameModeState*);
/* 1B6F44 */ void gm_801B6F44(GameModeState*);
/* 1B7044 */ void gm_801B7044(GameModeState*);
/* 1B70DC */ void gm_801B70DC(GameModeState*);
/* 1B7154 */ void gm_801B7154(GameModeState*);
/* 1B74F0 */ void gm_801B74F0(GameModeState*);
/* 1B75F0 */ void gm_801B75F0(GameModeState*);
/* 1B7688 */ void gm_801B7688(GameModeState*);
/* 1B7700 */ void gm_801B7700(GameModeState*);
/* 1B7AA0 */ void gm_801B7AA0(GameModeState*);
/* 1B7B74 */ void gm_801B7B74(GameModeState*);
/* 1B7C0C */ void gm_801B7C0C(GameModeState*);
/* 1B7C84 */ void gm_801B7C84(GameModeState*);
/* 1B8024 */ void gm_801B8024(GameModeState*);
/* 1B8110 */ void gm_801B8110(GameModeState*);
/* 1B81A8 */ void gm_801B81A8(GameModeState*);
/* 1B8220 */ void gm_801B8220(GameModeState*);
/* 1B8580 */ void gm_801B8580(GameModeState*);
/* 1B863C */ void gm_801B863C(GameModeState*);
/* 1B86D4 */ void gm_801B86D4(GameModeState*);
/* 1B874C */ void gm_801B874C(GameModeState*);
/* 1B8AF8 */ void gm_801B8AF8(GameModeState*);
#define MELEE_GM_OMAKE15_H
/* 1ACE94 */ void gm_Scene_Omake15_OnEnter(void*);
/* 1ACF8C */ void gm_Scene_Omake15_OnFrame(void);
#define MELEE_GM_OPENING_H
#define SYSDOLPHIN_BASELIB_SOBJLIB_H
extern GObjFuncs HSD_SObjLib_8040C3A4;
extern u8 HSD_SObjLib_804D7960;
typedef struct HSD_SObjDesc {
    /* 0x00 */ HSD_ImageDesc* image;
    /* 0x04 */ struct _HSD_Tlut* tlut;
} HSD_SObjDesc;
;
/// @note #HSD_SObjDesc fits in .sdata
typedef struct HSD_SObjDesc2 {
    /* 0x00 */ struct HSD_SObjDesc desc;
    /* 0x08 */ HSD_ImageDesc* image2;
} HSD_SObjDesc2;
;
struct HSD_SObj {
    /* 0x00 */ void* x0;
    /* 0x04 */ HSD_SObj* next;
    /* 0x08 */ HSD_SObj* prev;
    /* 0x0C */ HSD_GObj* gobj;
    /* 0x10 */ f32 x10;
    /* 0x14 */ f32 x14;
    /* 0x18 */ f32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ f32 x28;
    /* 0x2C */ f32 x2C;
    /* 0x30 */ f32 x30;
    /* 0x34 */ u16 x34;
    /* 0x36 */ u16 x36;
    /* 0x38 */ union {
        GXColor x38_color;
        struct {
            u8 x38;
            u8 x39;
            u8 x3A;
            u8 x3B;
        };
    };
    /* 0x3C */ union {
        GXColor x3C_color;
        struct {
            u8 x3C;
            u8 x3D;
            u8 x3E;
            u8 x3F;
        };
    };
    /* 0x40 */ u32 x40;
    /* 0x44 */ u8 x44;
    /* 0x48 */ u32 x48;
    /* 0x4C */ void (*x4C_callback)(HSD_SObj*);
    /* 0x50 */ GXTexObj x50_texobj;
    /* 0x70 */ GXTlutObj x70_tlutobj;
    /* 0x7C */ GXTexObj x7C_texobj;
};
typedef HSD_SObj HSD_SObj_803A477C_t;
/* 3A44A4 */ void HSD_SObjLib_803A44A4(void);
/* 3A44D4 */ void HSD_SObjLib_803A44D4(HSD_GObj*, HSD_SObj*, u8);
/* 3A466C */ void HSD_SObjLib_803A466C(HSD_SObj*);
/* 3A4740 */ void HSD_SObjLib_803A4740(HSD_SObj*);
/* 3A477C */ HSD_SObj* HSD_SObjLib_803A477C(HSD_GObj*, HSD_SObjDesc*,
                                            GXTexWrapMode, GXTexWrapMode, u8,
                                            u8);
/* 3A49E0 */ void HSD_SObjLib_803A49E0(HSD_GObj*, intptr_t);
/* 3A4A68 */ void HSD_SObjLib_803A4A68(HSD_SObj*);
/* 3A54EC */ void HSD_SObjLib_803A54EC(HSD_GObj*, intptr_t);
/* 3A55DC */ void HSD_SObjLib_803A55DC(HSD_GObj*, u16, u16, int);
/* 1A9DD0 */ void gm_801A9DD0(HSD_GObj*, u16, u16, int, int);
/* 1A9FCC */ void* fn_801A9FCC(void);
/* 1AA0E8 */ void fn_801AA0E8(void);
/* 1AA110 */ void gm_Scene_Opening_OnEnter(void*);
/* 1AA28C */ void gm_Scene_Opening_OnFrame(void);
/* 4D67F0 */ extern HSD_SObjDesc* gm_804D67F0;
/* 4D67EC */ extern u32 gm_804D67EC;
#define MELEE_GM_GMPAUSE_H
/* 1A0E34 */ void fn_801A0E34(HSD_GObj*);
/* 1A0FEC */ void gm_801A0FEC(s32, u8);
/* 1A10FC */ void gm_801A10FC(int);
/* 1A1134 */ void fn_801A1134(void);
#define MELEE_GMPROGRESSIVE_H
void gm_Scene_ProgScan_OnFrame(void);
void gm_Scene_ProgScan_OnEnter(void*);
void gm_Scene_ProgScan_OnExit(void*);
#define MELEE_GM_GMPROGSCAN_H
/* 3DFDA8 */ extern GameModeState gm_Mode_ProgScan_States[];
#define MELEE_GM_REGCOMMON_H
int gm_8017BE84(u32 arg0);
int gm_8017BE8C(const s8*);
void gmRegSetupEnemyColorTable(s8 ckind, u8 color, const s8* ckinds,
                               u8* colors);
extern u8 lbl_803D79F0[];
#define MELEE_GM_REG_TY_FALL_H
/* 1A659C */ bool gm_801A659C(int);
/* 1A6630 */ void gm_801A6630(int);
/* 1A6664 */ void fn_801A6664(HSD_GObj*);
/* 1A6844 */ void fn_801A6844(HSD_GObj*);
/* 1A6868 */ void fn_801A6868(HSD_GObj*);
/* 1A68D8 */ void gm_801A68D8(void);
/* 1A6A48 */ void fn_801A6A48(HSD_GObj*, intptr_t);
/* 1A6ACC */ void fn_801A6ACC(HSD_GObj*, intptr_t);
/* 1A6B6C */ void fn_801A6B6C(HSD_GObj*);
/* 1A6C30 */ void fn_801A6C30(HSD_GObj*);
/* 1A6C54 */ void gm_801A6C54(void);
/* 1A6D78 */ void fn_801A6D78(HSD_GObj*, intptr_t);
/* 1A6DC0 */ void gm_801A6DC0(void);
/* 1A6EE4 */ void gm_801A6EE4(void);
/* 1A7070 */ void gm_Scene_ToyFall_OnEnter(void* unused);
/* 1A79D4 */ void gm_Scene_ToyFall_OnFrame(void);
/* 4D6798 */ extern HSD_Joint* gm_804D6798;
/* 4D679C */ extern HSD_Archive* gm_804D679C;
/* 4D67A0 */ extern SceneDesc* gm_804D67A0;
/* 4D67A4 */ extern SceneDesc* gm_804D67A4;
/* 4D67A8 */ extern SceneDesc* gm_804D67A8;
/* 4D67AC */ extern SceneDesc* gm_804D67AC;
#define MELEE_GM_RESULT_H
struct ResultsPlayerData;
struct StatsEntry;
struct StatsList;
/* 174274 */ MatchEnd* fn_80174274(void);
/* 174284 */ s32 fn_80174284(u8);
/* 174338 */ void fn_80174338(void);
/* 17435C */ void fn_8017435C(void);
/* 174380 */ void fn_80174380(void);
/* 1743A4 */ bool gm_WasMatchCanceled(u8);
/* 1743C4 */ bool fn_801743C4(s32, struct StatsEntry*);
/* 174468 */ void fn_80174468(s32 slot, HSD_Text* text1, HSD_Text* text2,
                              HSD_Text* text3, struct StatsList* list,
                              s32 entry_idx);
/* 1748EC */ void* fn_801748EC(void*, s32, s32);
/* 174920 */ u8 fn_80174920(struct ResultsPlayerData* data);
/* 1749B8 */ void fn_801749B8(HSD_GObj*);
/* 174A60 */ s32 fn_80174A60(struct StatsList*, s32);
/* 174B4C */ void fn_80174B4C(struct ResultsData*, s32);
/* 174FD0 */ void fn_80174FD0(HSD_JObj*, s32);
/* 175038 */ void fn_80175038(HSD_GObj*, intptr_t);
/* 17507C */ GXColor fn_8017507C(s32);
/* 175240 */ void fn_80175240(s32);
/* 17556C */ void fn_8017556C(s32);
/* 1756E0 */ void fn_801756E0(s32);
/* 175880 */ void fn_80175880(s32);
/* 175A94 */ void fn_80175A94(s32, Vec3*);
/* 175C5C */ void fn_80175C5C(void);
/* 175D34 */ void fn_80175D34(void);
/* 175DC8 */ void fn_80175DC8(HSD_GObj*);
/* 176A6C */ void fn_80176A6C(void);
/* 176BCC */ void fn_80176BCC(HSD_GObj*);
/* 176BF0 */ HSD_JObj* fn_80176BF0(HSD_JObj*, u8, int);
/* 176D18 */ void fn_80176D18(HSD_GObj*);
/* 176D3C */ void fn_80176D3C(Vec3*);
/* 176F60 */ void fn_80176F60(void);
/* 1771C0 */ void fn_801771C0(ResultsData*);
/* 177368 */ void gm_Scene_Results_OnEnter(void*);
/* 177704 */ void gm_Scene_Results_OnExit(void*);
#define MELEE_GM_SCDATA_H
/* 1A50A0 */ GameScene* gm_GetAllGameScenes(void);
/* 1A50AC */ GameMode* gm_GetAllGameModes(void);
/* 3DDC58 */ extern GameModeState gm_Mode_Classic_States[];
/* 3DECB8 */ extern GameModeState gm_Mode_TargetTest_States[];
/* 3DED00 */ extern GameModeState gm_Mode_10ManVs_States[];
/* 3DED48 */ extern GameModeState gm_Mode_100ManVs_States[];
/* 3DED90 */ extern GameModeState gm_Mode_3Min_States[];
/* 3DEDD8 */ extern GameModeState gm_Mode_15Min_States[];
/* 3DEE20 */ extern GameModeState gm_Mode_EndlessVs_States[];
/* 3DEE68 */ extern GameModeState gm_Mode_CruelVs_States[];
/* 3DEEB0 */ extern GameModeState gm_Mode_SuperSuddenDeath_States[];
/* 3DEF88 */ extern GameModeState gm_Mode_TinyVs_States[];
/* 3DF060 */ extern GameModeState gm_Mode_GiantVs_States[];
/* 3DF138 */ extern GameModeState gm_Mode_StaminaVs_States[];
/* 3DF198 */ extern GameModeState gm_Mode_Homerun_States[];
/* 3DF1E0 */ extern GameModeState gm_Mode_CameraVs_States[];
/* 3DF2B8 */ extern GameModeState gm_Mode_SingleButtonVs_States[];
/* 3DF390 */ extern GameModeState gm_Mode_InvisibleVs_States[];
/* 3DF468 */ extern GameModeState gm_Mode_SlowMo_States[];
/* 3DF540 */ extern GameModeState gm_Mode_LightningVs_States[];
/* 3DF618 */ extern GameModeState gm_Mode_Event_States[];
/* 3DFAA8 */ extern GameModeState gm_Mode_HanyuCss_States[];
/* 3DFB80 */ extern GameModeState gm_Mode_DebugGOver_States[];
/* 3DFBC8 */ extern GameModeState gm_Mode_Opening_States[];
/* 3DFC70 */ extern GameModeState gm_Mode_DebugCutscene_States[];
/* 3DFDD8 */ extern GameModeState gm_Mode_Boot_States[];
/* 3DFE18 */ extern GameModeState gm_Mode_MemCard_States[];
/* 3DFE48 */ extern GameModeState gm_Mode_ChallengerApproach_States[];
#define MELEE_GM_SINGLEBUTTON_H
/* 1BA10C */ void gm_801BA10C(GameModeState*);
/* 1BA138 */ void gm_801BA138(GameModeState*);
/* 1BA160 */ void gm_801BA160(GameModeState*);
/* 1BA188 */ void gm_801BA188(GameModeState*);
/* 1BA1B8 */ void fn_801BA1B4(StartMeleeData*, StartMeleeData*);
/* 1BA1C8 */ void gm_801BA1C8(GameModeState*);
/* 1BA1FC */ void gm_801BA1FC(GameModeState*);
/* 1BA224 */ void gm_801BA224(GameModeState*);
/* 1BA258 */ void gm_801BA258(GameModeState*);
/* 1BA278 */ void gm_801BA278(GameModeState*);
/* 1BA298 */ void gm_801BA298(GameModeState*);
/* 1BA2C4 */ void gm_Mode_SingleButtonVs_OnInit(void);
/* 1BA2EC */ void gm_Mode_SingleButtonVs_OnLoad(void);
#define MELEE_GM_SLOMO_H
void gm_801BA50C(GameModeState* scene);
void gm_801BA538(GameModeState* scene);
void gm_801BA560(GameModeState* scene);
void gm_801BA588(GameModeState* scene);
void fn_801BA5B4(StartMeleeData* data, StartMeleeData* unused);
void gm_801BA5C0(GameModeState* scene);
void gm_801BA5F4(GameModeState* scene);
void gm_801BA61C(GameModeState* scene);
void gm_801BA650(GameModeState* scene);
void gm_801BA670(GameModeState* scene);
void gm_801BA690(GameModeState* scene);
void gm_Mode_SlowMo_OnInit(void);
void gm_Mode_SlowMo_OnLoad(void);
#define MELEE_GM_STAFFROLL_H
/* 1AA644 */ bool gm_801AA644(s16);
/* 1AA664 */ bool gm_801AA664(s16 ckind); ///< ckind is a CharacterKind
/* 1AA688 */ bool gm_801AA688(s16);
/* 1AA6D8 */ bool gm_801AA6D8(s16);
/* 1AA6FC */ bool gm_801AA6FC(s16);
/* 1AA774 */ bool gm_801AA774(s16);
/* 1AA7C4 */ void gm_Scene_StaffRoll_OnFrame(void);
/* 1AA7F8 */ void fn_801AA7F8(HSD_GObj*);
/* 1AA854 */ void fn_801AA854(HSD_GObj*, intptr_t code);
/* 1AAA28 */ void fn_801AAA28(HSD_GObj*, intptr_t code);
/* 1AAABC */ void fn_801AAABC(HSD_GObj*);
/* 1AAB18 */ void fn_801AAB18(HSD_GObj*);
/* 1AAB74 */ void fn_801AAB74(HSD_GObj*);
/* 1AB200 */ void fn_801AB200(HSD_GObj*);
/* 1AC67C */ void fn_801AC67C(HSD_GObj*);
/* 1AC6D8 */ void gm_Scene_StaffRoll_OnEnter(void*);
/* 1ACC90 */ void gm_Scene_StaffRoll_OnExit(void*);
#define MELEE_GM_STAMINA_H
/* 1B91C8 */ void gm_801B91C8(GameModeState*);
/* 1B922C */ void gm_801B922C(GameModeState*);
/* 1B9254 */ void gm_801B9254(GameModeState*);
/* 1B927C */ void gm_801B927C(GameModeState*);
/* 1B931C */ void gm_801B931C(GameModeState*);
/* 1B9560 */ void gm_801B9560(GameModeState*);
/* 1B95B0 */ void gm_Mode_StaminaVs_OnInit(void);
/* 1B95D8 */ void gm_Mode_StaminaVs_OnLoad(void);
/* 1B9600 */ int gm_801B9600(void);
/* 1B97C4 */ void gm_801B97C4(int slot, bool);
/* 1B9850 */ void fn_801B9850(void);
#define MELEE_GM_SUPERSUDDEN_H
/* 1B8BB4 */ void gm_801B8BB4(GameModeState*);
/* 1B8BE0 */ void gm_801B8BE0(GameModeState*);
/* 1B8C08 */ void gm_801B8C08(GameModeState*);
/* 1B8C30 */ void gm_801B8C30(GameModeState*);
/* 1B8C5C */ void fn_801B8C5C(PlayerInitData*, PlayerInitData*);
/* 1B8C68 */ void gm_801B8C68(GameModeState*);
/* 1B8C9C */ void gm_801B8C9C(GameModeState*);
/* 1B8CC4 */ void gm_801B8CC4(GameModeState*);
/* 1B8CF4 */ void gm_801B8CF4(GameModeState*);
/* 1B8D14 */ void gm_801B8D14(GameModeState*);
/* 1B8D34 */ void gm_801B8D34(GameModeState*);
/* 1B8D60 */ void gm_Mode_SuperSuddenDeath_OnInit(void);
/* 1B8D88 */ void gm_Mode_SuperSuddenDeath_OnLoad(void);
#define MELEE_GM_TINY_H
/* 1B8DA8 */ void gm_801B8DA8(GameModeState*);
/* 1B8DD4 */ void gm_801B8DD4(GameModeState*);
/* 1B8DFC */ void gm_801B8DFC(GameModeState*);
/* 1B8E24 */ void gm_801B8E24(GameModeState*);
/* 1B8E50 */ void fn_801B8E50(PlayerInitData*, PlayerInitData*);
/* 1B8E74 */ void gm_801B8E74(GameModeState*);
/* 1B8EA8 */ void gm_801B8EA8(GameModeState*);
/* 1B8ED0 */ void gm_801B8ED0(GameModeState*);
/* 1B8F04 */ void gm_801B8F04(GameModeState*);
/* 1B8F24 */ void gm_801B8F24(GameModeState*);
/* 1B8F44 */ void gm_801B8F44(GameModeState*);
/* 1B8F70 */ void gm_Mode_TinyVs_OnInit(void);
/* 1B8F98 */ void gm_Mode_TinyVs_OnLoad(void);
#define MELEE_GM_TITLE_H
/* 1A12C4 */ HSD_GObj* gmTitle_801A12C4(void);
/* 1A165C */ HSD_GObj* gmTitle_801A165C(void);
/* 1A185C */ void gmTitle_801A185C(void);
/* 1A1944 */ void gmTitle_801A1944(void);
/* 1A19AC */ void gmTitle_801A19AC(void);
/* 1A1A3C */ HSD_GObj* gmTitle_801A1A3C(void);
/* 1A1AC0 */ HSD_Archive* gmTitle_801A1AC0(void);
/* 1A1C18 */ void gm_Scene_Title_OnFrame(void);
/* 1A1E20 */ void gm_Scene_Title_OnEnter(void*);
#define MELEE_GM_GMTITLEMODE_H
/* 1B087C */ void gmTitleMode_OnEnter(GameModeState*);
/* 3DD6A0 */ extern GameModeState gm_Mode_Title_States[];
#define MELEE_GM_GMTOU_0_H
/* 4D6638 */ extern HSD_Archive* lbl_804D6638;
#define MELEE_GM_GMTOU_1_H
#define MELEE_GM_GMTOU_2_H
#define MELEE_GM_GMTOUMODE_H
/* 3DDAC0 */ extern GameModeState gm_Mode_Tournament_States[];
#define MELEE_GM_GMTOYCOLLECTION_H
/* 3DFA78 */ extern GameModeState gm_Mode_ToyCollection_States[];
#define MELEE_GM_GMTOYGALLERY_H
/* 3DFA18 */ extern GameModeState gm_Mode_ToyGallery_States[];
#define MELEE_GM_GMTOYLOTTERY_H
/* 3DFA48 */ extern GameModeState gm_Mode_ToyLottery_States[];
#define MELEE_GM_GMTRAININGMODE_H
/* 1B2298 */ void gm_Mode_Training_OnInit(void);
/* 1B23C4 */ void gm_Mode_Training_OnLoad(void);
/* 3DDB80 */ extern GameModeState gm_Mode_Training_States[];
#define MELEE_GM_VSMELEE_H
typedef void (*gm_StartMeleeCallback)(StartMeleeData* start,
                                      StartMeleeData* vs);
typedef void (*gm_PlayerInitCallback)(PlayerInitData* start,
                                      PlayerInitData* vs);
/* 1A5680 */ void gmVsMelee_ExitCss(GameModeState*,
                                    struct VsModeData*); /// CSS_Exit
/* 1A5EC8 */ void gmVsMelee_ExitSuddenDeath(GameModeState*);
/* 1A5C3C */ void
gmVsMelee_EnterSuddenDeath(GameModeState* state, struct VsModeData* vs_data,
                           gm_StartMeleeCallback match_data_cb,
                           gm_PlayerInitCallback player_data_cb);
/* 1A5F00 */ void gmVsMelee_EnterResults(GameModeState*);
/* 1A5F64 */ void gmVsMelee_ExitResults(GameModeState*, struct VsModeData*,
                                        u8);
/* 1A583C */ void
gmVsMelee_EnterVs(GameModeState*, struct VsModeData*,
                  void (*callback)(StartMeleeData*, StartMeleeData*),
                  void (*callback2)(PlayerInitData*, PlayerInitData*));
/* 1A5598 */ void gmVsMelee_Mode_OnInit(void);
/* 1A57A8 */ void gmVsMelee_ExitSss(GameModeState* state, VsModeData* vs,
                                    u8 cancel_state_id);
/* 1A5618 */ void gmVsMelee_EnterCss(GameModeState*, struct VsModeData*,
                                     CSSMatchType);
/* 1A52D0 */ bool gmVsMelee_WasAnyPlayerHuman(MatchEnd*);
/* 1A5244 */ struct VsModeData* gmVsMelee_GetVsData(void);
/* 4D6860 */ extern struct VsApproachData gmVsMelee_ApproachData;
/* 47C020 */ extern ResultsMatchInfo gmVsMelee_ResultsEnterData;
/* 47E2A4 */ extern MatchExitInfo gmVsMelee_SuddenDeathExitInfo;
/* 1A5258 */ void gmVsMelee_UpdateKOCounts(u8*, MatchEnd*);
/* 1A5250 */ u8* gmVsMelee_GetKOCounts(void);
/* 1A55EC */ void gmVsMelee_Mode_OnLoad(void);
/* 1A5614 */ void gm_Mode_Vs_OnUnload(void);
/* 1A55C4 */ void gmVsMelee_ResetKOCounts(void);
/* 1A5AF0 */ void gmVsMelee_ExitVs(GameModeState*, u8, u8);
/* 1A5754 */ void gmVsMelee_EnterSss(GameModeState*, struct VsModeData*);
/* 4807B0 */ extern CSSData gmVsMelee_CssData;
/* 480530 */ extern StartMeleeData gmVsMelee_StartData;
/* 479D98 */ extern MatchExitInfo gmVsMelee_VsExitInfo;
/* 480668 */ extern SSSData gmVsMelee_SssData;
#define GALE01_1B14A0
typedef enum {
    gmVsMode_State_Css,
    gmVsMode_State_Sss,
    gmVsMode_State_Vs,
    gmVsMode_State_SuddenDeath,
    gmVsMode_State_Results,
    gmVsMode_State_Approach = (2 << 6),
    gmVsMode_State_ApproachVs,
    gmVsMode_State_Prize = (3 << 6),
} gmVsMode_StateId;
/* 3DD9A0 */ extern GameModeState gm_Mode_Vs_States[];
/* 3DDA78 */ extern GameModeState gm_Mode_DebugVs_States[];
#define MELEE_GM_INLINES_H
#define GALE01_305058
#define MELEE_TY_TYPES_H
struct TySortElem {
    s32 key;
    f32 val;
};
struct TyModeState {
    s8 x0;
    u8 x1;
    u8 x2;
    u8 x3;
    s8 x4;
    u8 x5;
    u16 x6;
    u16 x8;
    u16 xA;
};
struct ToyAnimState {
    /* 0x00 */ struct HSD_GObj* gobj;
    /* 0x04 */ struct HSD_JObj* jobj[2];
    /* 0x0C */ s16 xC;
    /* 0x0E */ s8 x0E;
    /* 0x0F */ s8 x0F;
    /* 0x10 */ s8 x10;
    /* 0x11 */ s8 x11;
    /* 0x12 */ u8 pad_12[2];
};
;
/* Used by _Toy_803109A0 for table lookup */
struct ToyEntry {
    s32 id;
    union {
        s8 value_byte;
        s32 value;
    };
};
/* Trophy metadata entry. Size: 0x24 bytes. */
struct TrophyData {
    s32 id;
    s32 x04;
    f32 x08;
    f32 x0C;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    s8 x20;
    s8 x21;
    s8 x22;
    s8 x23;
};
/* Trophy list entry. Size: 0x34 bytes. */
struct TyListArg {
    /* 0x00 */ struct TyListArg* links[3];
    /* 0x0C */ struct HSD_JObj* jobjs[3];
    /* 0x18 */ struct HSD_Text* texts[3];
    /* 0x24 */ s8 x24;
    /* 0x25 */ u8 x25;
    /* 0x26 */ s16 idx;
    /* 0x28 */ int x28;
    /* 0x2C */ float x2C;
    /* 0x30 */ float x30;
};
struct Toy {
    /*   +0 */ char pad_0[0x4];
    /*   +4 */ int x4;
    /*   +8 */ int x8;
    /*   +C */ char pad_C[0x40 - 0xC];
    /*  +40 */ Vec3 translate;
    /*  +4C */ Vec3 offset;
    /*  +58 */ char pad_58[0x194 - 0x58];
    /* +194 */ s32 x194;
    /* +198 */ char pad_198[0x19A - 0x198];
    /* +19A */ u16 x19A;
    /* +19C */ u16 x19C;
    /* +19E */ u16 trophyTable[293];
    /* +3E8 */ char pad_3E8[0x3EC - 0x3E8];
    /* +3EC */ s16 trophyCount;
};
// TODO: This struct should only be 0x58
// STATIC_ASSERT(sizeof(struct Toy) == 0x58);
struct TyDspEntry {
    /* 0x00 */ s32 x00;
    /* 0x04 */ u8 x04;
    /* 0x05 */ u8 x05;
    /* 0x06 */ u8 pad_06[2];
    /* 0x08 */ f32 x08;
    /* 0x0C */ f32 x0C;
};
;
struct ToySubStructS_ {
    u8 pad0[0x10];
    s16 x10;
};
struct ToyGlobalsS_ {
    HSD_GObj* x0;
    u8 x4;
    HSD_GObj* x8;
    HSD_GObj* xC;
    s32 x10;
    u8 pad14[0x1C];
    void* x30;
    u8 pad34[0x1C];
    void* x50;
    HSD_Archive* x54;
    s32 x58;
    u8 pad0[0x140 - 0x5C];
    ToySubStructS_* x140;
    void* x144;
    void* x148;
    void* x14C;
    void* x150;
    s16 x154;
};
struct TyFiguponED4 {
    /* 0x00 */ u32 x0;
    /* 0x04 */ u32 x4;
    /* 0x08 */ u8 pad_08[0x4];
    /* 0x0C */ u32 xC;
};
struct ToyModelFile {
    /* 0x00 */ s32 trophy_id;
    /* 0x04 */ char archive_name[0x20];
    /* 0x24 */ char symbol_name[0x30];
};
struct ToyListEntry {
    /* 0x00 */ struct ToyListEntry* prev;
    /* 0x04 */ struct ToyListEntry* next;
    /* 0x08 */ char* archive_name;
    /* 0x0C */ char* symbol_name;
    /* 0x10 */ s16 trophy_id;
    /* 0x12 */ u8 pad_12[2];
    /* 0x14 */ HSD_Archive* archive;
};
struct TyDisplayData {
    /* 0x000 */ ToyListEntry entries[13];
    /* 0x138 */ ToyListEntry* first_entry;
    /* 0x13C */ ToyListEntry* last_entry;
    /* 0x140 */ ToyListEntry* selected_entry;
    /* 0x144 */ u8 pad_144[0x154 - 0x144];
    /* 0x154 */ s16 selectedIdx;
    /* 0x156 */ u8 pad_156;
    /* 0x157 */ s8 visible_count;
};
struct Toy26B8 {
    /* 0x000 */ Vec3 x0;
    /* 0x00C */ u8 pad_00C[0x195 - 0x00C];
    /* 0x195 */ s8 x195;
    /* 0x196 */ s8 x196;
    /* 0x197 */ u8 x197;
    /* 0x198 */ u8 x198;
    /* 0x199 */ u8 pad_199;
    /* 0x19A */ u16 x19A;
    /* 0x19C */ u16 x19C;
    /* 0x19E */ u16 trophy_flags[293];
    /* 0x3E8 */ s16 selectedIdx;
    /* 0x3EA */ s16 selectedTrophyId;
    /* 0x3EC */ s16 trophy_count;
    /* 0x3EE */ u8 pad_3EE[0x3F0 - 0x3EE];
    /* 0x3F0 */ union {
        ToyAnimState anim;
        HSD_GObj* x3F0;
    };
};
struct _Toy_804A26B8_t {
    struct Toy26B8* x0;
    M2C_UNK x4;
    M2C_UNK x8;
};
;
struct TyViewData {
    HSD_GObj* gobj;
    s8 x4;
    char pad_5[0x3];
};
;
struct TyFiguponData {
    /* 0x00 */ HSD_GObj* x0;
    /* 0x04 */ HSD_GObj* x4;
    /* 0x08 */ HSD_GObj* x8;
    /* 0x0C */ u8 pad_0C[0x4];
    /* 0x10 */ s32 x10;
    /* 0x14 */ HSD_Text* x14;
    /* 0x18 */ HSD_Text* x18;
    /* 0x1C */ u8 pad_1C[0x4];
    /* 0x20 */ s32 x20;
    /* 0x24 */ s32 x24;
    /* 0x28 */ u8 x28;
    /* 0x29 */ u8 x29;
};
struct TyDspPos {
    /* 0x00 */ f32 x;
    /* 0x04 */ f32 z;
};
struct TyDspGrid {
    /* 0x000 */ s32 x00;
    /* 0x004 */ f32 x04_min_x;
    /* 0x008 */ f32 x08_min_z;
    /* 0x00C */ f32 x0C_max_x;
    /* 0x010 */ f32 x10_max_z;
    /* 0x014 */ TySortElem sort[301];
    /* 0x97C */ TyDspPos pos[301];
};
struct TyDspConfig {
    /* 0x00 */ HSD_GObj* x00;
    /* 0x04 */ u8 pad_04[4];
    /* 0x08 */ s32 x08;
    /* 0x0C */ f32 x0C;
    /* 0x10 */ f32 x10;
    /* 0x14 */ u8 pad_14[4];
    /* 0x18 */ f32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ u8 pad_28[8];
    /* 0x30 */ f32 x30;
    /* 0x34 */ f32 x34;
    /* 0x38 */ u8 pad_38[8];
    /* 0x40 */ f32 x40;
    /* 0x44 */ f32 x44;
    /* 0x48 */ f32 x48;
    /* 0x4C */ f32 x4C;
    /* 0x50 */ f32 x50;
    /* 0x54 */ f32 x54;
    /* 0x58 */ f32 x58;
    /* 0x5C */ Vec3 x5C;
    /* 0x68 */ Vec3 x68;
    /* 0x74 */ s8 x74;
    /* 0x75 */ u8 x75;
    /* 0x76 */ u8 x76;
    /* 0x77 */ u8 pad_77[1];
    /* 0x78 */ HSD_GObj* x78;
    /* 0x7C */ s32 x7C;
};
struct TyDspArchNames {
    const char* entries[43];
};
struct TyDspNameTables {
    const char* jobj_names[43];
    const char* matanim_names[43];
    TyDspArchNames arch_names;
    s32 terminator;
};
struct TyDspBgData {
    /* 0x00 */ HSD_GObj* gobj0;
    /* 0x04 */ HSD_GObj* gobj4;
    /* 0x08 */ u8 pad_08[4];
    /* 0x0C */ HSD_JObj* jobj;
    /* 0x10 */ u8 pad_10[0x3C];
    /* 0x4C */ HSD_Archive* archive;
    /* 0x50 */ HSD_Archive* archives[43];
    /* 0xFC */ u8 pad_FC[8];
    /* 0x104 */ s16 x104;
    /* 0x106 */ u8 pad_106[2];
};
struct TyDspArchiveHolder {
    /*  +0 */ M2C_UNK x0;
    /*  +4 */ u8 pad_4[0x10];
    /* +14 */ HSD_Archive* archive;
};
struct TyDspBaseData {
    /* 0x00 */ char x00[0x38];
};
struct TyListGobjEntry {
    /*  +0 */ HSD_GObj* x0;
    /*  +4 */ HSD_GObj* x4;
    /*  +8 */ u8 pad_8[0x0C - 0x08];
    /*  +C */ s8 x0C;
    /*  +D */ s8 x0D;
    /*  +E */ u8 pad_0E;
    /*  +F */ s8 x0F;
    /* +10 */ s8 x10;
    /* +11 */ s8 x11;
    /* +12 */ s8 x12;
    /* +13 */ s8 x13;
    /* +14 */ s8 x14;
    /* +15 */ u8 pad_15;
    /* +16 */ s8 x16;
};
struct TyListRow {
    /* 0x00 */ u8 pad_0[0xC];
    /* 0x0C */ HSD_JObj* jobj;
    /* 0x10 */ u8 pad_10[0x18 - 0x10];
    /* 0x18 */ HSD_Text* text0;
    /* 0x1C */ HSD_Text* text1;
    /* 0x20 */ HSD_Text* text2;
    /* 0x24 */ s8 x24;
    /* 0x25 */ u8 pad_25;
    /* 0x26 */ s16 idx;
    /* 0x28 */ s32 x28;
    /* 0x2C */ u8 pad_2C[0x30 - 0x2C];
    /* 0x30 */ f32 x30;
};
struct DigitInit {
    s32 x0, x4, x8, xC;
};
struct ToyNameData {
    s16 x0;
    s16 x2;
    s16 x4;
    s16 x6;
    s16 x8;
    s16 xA;
};
struct TyLightSymbolEntry {
    char* name;
    void* unk;
};
struct TyLightIndexEntry {
    s32 idx;
    u8 pad[8];
};
struct TyLightFile {
    u8 pad0[0xCC];
    TyLightSymbolEntry symbols[6];
    TyLightIndexEntry entries[1];
};
struct tyUnkStruct {
    /* 0x00 */ HSD_GObj* x0;
    /* 0x04 */ void* x4;
    /* 0x08 */ HSD_GObj* x8;
};
struct TyCleanupObj {
    /* 0x00 */ void* x0;
    /* 0x04 */ void* x4;
    /* 0x08 */ void* x8;
    /* 0x0C */ void* xC;
    /* 0x10 */ void* x10;
};
struct TyGObjX8_ {
    u8 pad[0x28];
    HSD_CObj* x28;
};
struct TyCameraData_ {
    void* x0;
    void* x4;
    TyGObjX8_* x8;
    u8 padC[0x18 - 0x0C];
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    u8 pad30[0x58 - 0x30];
    s32 x58;
};
struct ToyDataJObj {
    /* 0x00 */ void* x0;
    /* 0x04 */ struct ToyDataJObj* x4;
    /* 0x08 */ u8 pad08[0x40 - 0x08];
    /* 0x40 */ s32 x40;
};
struct ToyDataX8 {
    /* 0x00 */ u8 pad0[0x28];
    /* 0x28 */ ToyDataJObj* x28;
};
struct tyLightData {
    /* 0x00 */ char _pad0[0x0C];
    /* 0x0C */ HSD_GObj* x0C;
    /* 0x10 */ char _pad1[0x48];
    /* 0x58 */ void* x58;
};
struct tyDispData {
    u8 pad[0x144];
    HSD_Text* x144;
    HSD_Text* x148;
    HSD_Text* x14C;
    HSD_Text* x150;
};
struct un_804D6E68_t {
    /* 0x00 */ u8 pad[0x18];
    /* 0x18 */ f32 x18;
};
struct ToyJObjNode {
    u8 x0[0x4];
    void* x4;
    u8 x8[0x40 - 0x8];
    s32 x40;
};
struct ToyCameraControl {
    /*  +0 */ HSD_GObj* x00;
    /*  +4 */ HSD_GObj* x04;
    /*  +8 */ HSD_GObj* x08;
    /*  +C */ HSD_Archive* archive;
    /* +10 */ s32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ Vec3 positions[8];
    /* +7C */ Vec3 interests[8];
    /* +DC */ s8 has_position_anim[8];
};
;
struct ToyTransitionObj {
    u8 pad[0x20];
    s32 x20;
    s32 x24;
};
struct Toy6E68 {
    ToyTransitionObj* x0;
    ToyTransitionObj* x4;
    void* x8;
    ToyTransitionObj* xC;
    u8 pad10[0x18 - 0x10];
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    f32 x3C;
    f32 x40;
    f32 x44;
    f32 x48;
    f32 x4C;
    f32 x50;
    f32 x54;
    s32 x58;
    s32 x5C;
    s8 x60;
    s8 x61;
};
struct Ty25Entry {
    u8 pad[0x14];
    void* x14;
};
/* Trophy list UI state. Size: 0x2D8 bytes. */
struct TyListState {
    /* 0x000 */ TyListArg entries[12]; /* 12 * 0x34 = 0x270 */
    /* 0x270 */ struct TyListArg* x270;
    /* 0x274 */ struct TyListArg* x274;
    /* 0x278 */ struct TyListArg* x278;
    /* 0x27C */ struct HSD_GObj* gobj;
    /* 0x280 */ u8 pad_280[0x8];
    /* 0x288 */ struct HSD_JObj* x288;
    /* 0x28C */ struct HSD_JObj* jobj;
    /* 0x290 */ struct HSD_Text* x290;
    /* 0x294 */ u8 pad_294[4];
    /* 0x298 */ s16 selectedIdx;
    /* 0x29A */ s8 entryCount;
    /* 0x29B */ s8 x29B;
    /* 0x29C */ s8 x29C;
    /* 0x29D */ s8 x29D;
    /* 0x29E */ s8 x29E;
    /* 0x29F */ s8 x29F;
    /* 0x2A0 */ s8 x2A0;
    /* 0x2A1 */ s8 x2A1;
    /* 0x2A4 */ float x2A4;
    /* 0x2A8 */ float x2A8;
};
;
struct TyListData {
    u8 pad[0x28];
    HSD_CObj* cobj;
};
struct TyListWaitData {
    u8 pad[0x20];
    u32 x20;
    s32 x24;
};
/// @todo = ToyGlobalsS_
/// @todo = TyArchiveData
/// @todo = tyLightData
struct ToyED8Data {
    /*  +0 */ HSD_JObj** x0;
    /*  +4 */ HSD_GObj* gobj;
    /*  +8 */ ToyDataX8* x8;
    /*  +C */ HSD_GObj* gobj2;
    /* +10 */ u8 pad_10[0x18 - 0x10];
    /* +18 */ HSD_JObj* jobjs[3];
    /* +24 */ u8 pad_24[0x30 - 0x24];
    /* +30 */ HSD_JObj* x30;
    u8 pad_34[0x50 - 0x34];
    /* 0x50 */ HSD_Archive* archive;
    /* 0x54 */ u32 x54;
    M2C_UNK x58;
};
;
;
;
;
;
;
;
;
struct TyArchiveData {
    HSD_GObj* gobj;
    u8 pad[0x4C];
    void* data;
};
struct TyFiguponInner {
    u8 pad[0x4D];
    u8 x4D;
};
struct TyFiguponUD {
    /* 0x00 */ u32 x0;
    /* 0x04 */ u32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ u8 pad_0C[0x4];
    /* 0x10 */ s32 x10;
    /* 0x14 */ s32 x14;
    /* 0x18 */ s32 x18;
    /* 0x1C */ u8 pad_1C[0xC];
    /* 0x28 */ s32 x28;
    /* 0x2C */ s32 x2C;
    /* 0x30 */ s32 x30;
    /* 0x34 */ u8 pad_34[0x10];
    /* 0x44 */ f32 x44;
    /* 0x48 */ u8 pad_48[0x10];
};
struct ToyParamEditor {
    /* 0x00 */ HSD_GObj* gobj;
    /* 0x04 */ u8 selected_slot;
    /* 0x05 */ u8 repeat_delay;
    /* 0x06 */ s16 values[9];
};
struct ToyTable {
    ToyEntry entries[9];
};
typedef struct ToyEntryData {
    u8 x0[0x8];
    char* x8;
    char* xC;
    s16 x10;
    u8 x12[2];
    HSD_Archive* x14;
} ToyEntryData;
struct PosArray {
    s32 xy[2];
};
struct PosArrayFull {
    PosArray a[7];
};
struct lbl_803FDDE4_t {
    struct {
        char* name;
        M2C_UNK empty;
    } symbols[6];
    struct {
        int index;
        GXColor color;
        bool flag;
    } values[6];
};
;
/* 304870 */ int Toy_GetTrophyTotal(void);
/* 3048C0 */ s32 Toy_803048C0(int);
/* 304924 */ bool Toy_80304924(int);
/* 304988 */ void Toy_80304988(int);
/* 3049F4 */ bool Toy_803049F4(int);
/* 304A58 */ void Toy_80304A58(int);
/* 304B0C */ bool Toy_80304B0C(int);
/* 304B94 */ int Toy_80304B94(int);
/* 304CC8 */ bool Toy_80304CC8(int);
/* 304D30 */ int _Toy_80304D30(void);
/* 305058 */ s32 Toy_80305058(s32, s32, s32, f32);
/* 30562C */ void Toy_SetUnlockState(enum_t, bool);
/* 305918 */ void Toy_80305918(s8, s32, s32);
/* 305B88 */ s32 Toy_80305B88(void);
/* 305C44 */ s32 Toy_80305C44(void);
/* 305D00 */ float Toy_80305D00(void);
/* 305DB0 */ float Toy_80305DB0(void);
/* 305EB4 */ float Toy_80305EB4(void);
/* 305FB8 */ float Toy_80305FB8(void);
/* 3060BC */ float Toy_803060BC(int, int);
/* 3062BC */ s16 Toy_803062BC(s32 trophyId);
/* 3063D4 */ s32 Toy_803063D4(s32, s32, s32);
/* 3067BC */ void Toy_803067BC(s32, s32);
/* 3068E0 */ void Toy_803068E0(HSD_GObj* gobj, intptr_t);
/* 306930 */ void Toy_80306930(HSD_GObj*, intptr_t);
/* 306954 */ void Toy_80306954(HSD_GObj* gobj, intptr_t);
/* 306A48 */ void Toy_80306A48(HSD_JObj*, char*, char*, char*, HSD_Archive*,
                               s32);
/* 306B18 */ HSD_GObjProc* Toy_80306B18(HSD_GObj* gobj, s32 anim_frame,
                                        s32 val1, s32 val2);
/* 306BB8 */ void Toy_80306BB8(HSD_GObj* gobj);
/* 306CF4 */ void Toy_RemoveUserData(void* ptr);
/* 306D14 */ void Toy_80306D14(void);
/* 306D70 */ void Toy_80306D70(s32 arg0);
/* 306EEC */ HSD_LObj* Toy_LoadLObjList(LightList**, s32*);
/* 307470 */ void Toy_80307470(s32);
/* 307E84 */ void Toy_80307E84(HSD_GObj* gobj);
/// @todo :: fill out the struct that this uses/returns
/* 30813C */ ToyModelFile* Toy_8030813C(int trophy_id);
/* 308250 */ void Toy_80308250(ToyListEntry* arg0, s16 arg1, s32 arg2);
/* 3082F8 */ s32 Toy_803082F8(s16 idx);
/* 308328 */ s32 Toy_80308328(s32 idx);
/* 308354 */ s32 Toy_80308354(s16 idx);
/* 3083D8 */ void Toy_803083D8(HSD_JObj* jobj, s32 arg1);
/* 3087F4 */ HSD_GObj* Toy_803087F4(void*);
/* 3102D0 */ void Toy_803102D0(void);
/* 310324 */ void Toy_80310324(void);
/* 310660 */ void Toy_80310660(s32 arg0);
/* 311680 */ void Toy_80311680(void);
/* 311960 */ void Toy_80311960(void);
/* 311AB0 */ void Toy_Scene_OnEnter(void*);
/* 312018 */ void Toy_Scene_OnFrame(void);
/* 3122D0 */ void Toy_Mode_OnInit(void);
/* 31234C */ void Toy_8031234C(s32);
/* 3124BC */ void Toy_803124BC(void);
/* 31263C */ void Toy_8031263C(void);
/* 3127D4 */ void Toy_803127D4(void);
/* 3FE5E8 */ extern char Toy_str_ScMenFigure_cam_int1_camera[];
/* 4A284C */ extern u16 Toy_804A284C[302];
/* 4A2AA8 */ extern ToyAnimState Toy_804A2AA8;
/* 4D6EAC */ extern TyDspEntry* Toy_sbss_804D6EAC;
/* 4D6EB0 */ extern TyDspEntry* Toy_sbss_804D6EB0;
/* 4D6EC8 */ extern HSD_Archive* Toy_sbss_804D6EC8;
/* 4D6ED4 */ extern ToyCameraControl* Toy_sbss_804D6ED4;
/* 4D6ED8 */ extern ToyED8Data* Toy_sbss_804D6ED8;
/* 4D6EDC */ extern s16* Toy_sbss_804D6EDC;
/* 4D6EE0 */ extern TyDisplayData* Toy_sbss_804D6EE0;
static inline s32 gmClampResultStat(s32 value)
{
    if (value > 999999) {
        value = 999999;
    } else if (value < -999999) {
        value = -999999;
    }
    return value;
}
/// @todo Figure out where this goes
static inline s32 fn_801A7FB4_inline(void)
{
    s32 i;
    s32 count;
    count = 0;
    for (i = count; i < 0x1A; i++) {
        if (Toy_803048C0(gm_801A659C(i)) ? 1 : 0) {
            count++;
        }
    }
    return count;
}
static inline s32 fn_801A7FB4_inline2(void)
{
    s32 count;
    s32 i;
    count = 0;
    for (i = count; i < 0x1A; i++) {
        if (Toy_803048C0(gm_801A659C(i)) ? 1 : 0) {
            count++;
        }
    }
    return count;
}
static inline f32 gmTournament_GetPlayerX(u8 player_count, s32 player)
{
    if ((s32) player_count == 4) {
        return (13.0f * (f32) player) + -19.5f;
    }
    if ((s32) player_count == 3) {
        return 6.5f + ((13.0f * (f32) player) - 19.5f);
    }
    return 6.5f + ((13.0f * (2.0f * (f32) player)) - 19.5f);
}
static inline void gmTournament_SetPlayerX(f32* x, u8 player_count, s32 player)
{
    if ((s32) player_count == 4) {
        *x = (13.0f * (f32) player) + -19.5f;
    } else if ((s32) player_count == 3) {
        *x = 6.5f + ((13.0f * (f32) player) - 19.5f);
    } else {
        *x = 6.5f + ((13.0f * (2.0f * (f32) player)) - 19.5f);
    }
}
#define GALE01_1C65B0
/* 1C65B0 */ void grAnime_801C65B0(UnkArchiveStruct*);
/* 1C6C0C */ void grAnime_801C6C0C(HSD_JObj*, HSD_AnimJoint*,
                                   HSD_MatAnimJoint*, HSD_ShapeAnimJoint*);
/* 1C752C */ void grAnime_801C752C(HSD_JObj*, s32, s32, void*, u32, ...);
/* 1C775C */ void grAnime_801C775C(HSD_GObj*, int, u32, f32, f32);
/* 1C77FC */ void grAnime_801C77FC(HSD_GObj*, int, u32);
/* 1C787C */ void grAnime_801C787C(HSD_GObj*, int, u32);
/* 1C78FC */ void grAnime_801C78FC(HSD_GObj*, int, u32);
/* 1C7980 */ void grAnime_801C7980(HSD_GObj*, int, u32);
/* 1C7A04 */ void grAnime_801C7A04(HSD_GObj*, int, u32, f32);
/* 1C7A94 */ void grAnime_801C7A94(HSD_GObj*, int, u32, float);
/* 1C7B24 */ void grAnime_801C7B24(HSD_GObj*, int, u32, float);
/* 1C7BA0 */ void grAnime_801C7BA0(HSD_GObj*, int, u32, float);
/* 1C7C1C */ void grAnime_801C7C1C(HSD_JObj*, s32, s32, s32, s32, int, f32,
                                   f32);
/* 1C7FF8 */ void grAnime_801C7FF8(HSD_GObj*, int, int, int, float, float);
/* 1C8098 */ void grAnime_801C8098(HSD_GObj*, int, int, int, float, float);
/* 1C8138 */ void grAnime_801C8138(HSD_GObj*, enum_t, bool);
/* 1C8578 */ HSD_Joint* grAnime_801C8578(HSD_Joint*, s32*);
/* 1C8318 */ HSD_AObj* grAnime_801C8318(HSD_GObj*, int, u32);
/* 1C83D0 */ bool grAnime_801C83D0(HSD_GObj*, bool, enum_t);
/* 1C84A4 */ bool grAnime_801C84A4(HSD_GObj*, s32, s32);
/* 1C86D4 */ void grAnime_801C86D4(s32, HSD_GObj*, s32);
/* 1C8780 */ void grAnime_801C8780(HSD_GObj*, u32, u32, f32, f32);
#define GALE01_219C98
/* 3E7E38 */ extern StageData grNBa_StageData;
#define GALE01_1E57BC
/* 1E57BC */ void grBigBlue_801E57BC(bool);
/* 1E57C0 */ void grBigBlue_801E57C0(void);
/* 1E59C8 */ void grBigBlue_801E59C8(void);
/* 1E59CC */ void grBigBlue_801E59CC(void);
/* 1E59F0 */ bool grBigBlue_801E59F0(void);
/* 1E59F8 */ HSD_GObj* grBigBlue_801E59F8(s32);
/* 1E5AE4 */ void grBigBlue_801E5AE4(Ground_GObj*);
/* 1E5B10 */ bool grBigBlue_801E5B10(Ground_GObj*);
/* 1E5B18 */ void grBigBlue_801E5B18(Ground_GObj*);
/* 1E5B1C */ void grBigBlue_801E5B1C(Ground_GObj*);
/* 1E5B20 */ void grBigBlue_801E5B20(Ground_GObj*);
/* 1E6114 */ bool grBigBlue_801E6114(Ground_GObj*);
/* 1E611C */ void grBigBlue_801E611C(Ground_GObj*);
/* 1E6120 */ void grBigBlue_801E6120(Ground_GObj*);
/* 1E6124 */ void fn_801E6124(Ground_GObj* gobj);
/* 1E613C */ void grBigBlue_801E613C(Ground_GObj*);
/* 1E61BC */ bool grBigBlue_801E61BC(Ground_GObj*);
/* 1E61C4 */ void grBigBlue_801E61C4(Ground_GObj*);
/* 1E61FC */ void grBigBlue_801E61FC(Ground_GObj*);
/* 1E6200 */ void grBigBlue_801E6200(Ground_GObj*);
/* 1E6288 */ bool grBigBlue_801E6288(Ground_GObj*);
/* 1E6290 */ void grBigBlue_801E6290(Ground_GObj*);
/* 1E6294 */ void grBigBlue_801E6294(Ground_GObj*);
/* 1E6298 */ void grBigBlue_801E6298(Ground_GObj*);
/* 1E6354 */ bool grBigBlue_801E6354(Ground_GObj*);
/* 1E635C */ void grBigBlue_801E635C(Ground_GObj*);
/* 1E6360 */ void grBigBlue_801E6360(Ground_GObj*);
/* 1E6364 */ void grBigBlue_801E6364(Ground_GObj*);
/* 1E687C */ bool grBigBlue_801E687C(Ground_GObj*);
/* 1E6884 */ void grBigBlue_801E6884(Ground_GObj*);
/* 1E68B8 */ void grBigBlue_801E68B8(Ground_GObj* gobj);
/* 1E6904 */ void grBigBlue_801E6904(Ground_GObj*);
/* 1E6C58 */ bool grBigBlue_801E6C58(Ground_GObj*);
/* 1E6C60 */ void grBigBlue_801E6C60(Ground_GObj*);
/* 1E855C */ void grBigBlue_801E855C(Ground_GObj*);
/* 1E8794 */ bool grBigBlue_801E8794(void*, Vec3*, bool, f32, f32);
/* 1E8978 */ void grBigBlue_801E8978(int, void*, void*);
/* 1E89DC */ void* grBigBlue_801E89DC(int);
/* 1E8A1C */ void grBigBlue_801E8A1C(int);
/* 1E8B84 */ f32 grBigBlue_801E8B84(f32, f32, f32, f32);
/* 1E8D04 */ f32 grBigBlue_801E8D04(void);
/* 1E8D64 */ void grBigBlue_801E8D64(Ground_GObj*);
/* 1E93D0 */ bool grBigBlue_801E93D0(Ground_GObj*);
/* 1E93D8 */ void grBigBlue_801E93D8(Ground_GObj*);
/* 1E9F38 */ void grBigBlue_801E9F38(Ground_GObj*);
/* 1E9F3C */ void grBigBlue_801E9F3C(Ground_GObj*);
/* 1EA054 */ bool grBigBlue_801EA054(Ground_GObj*);
/* 1EA05C */ void grBigBlue_801EA05C(Ground_GObj*);
/* 1EAB4C */ void grBigBlue_801EAB4C(Ground_GObj*);
/* 1EAB50 */ bool grBigBlue_801EAB50(Vec3*, s32, f32, f32);
/* 1EACE8 */ s32 grBigBlue_801EACE8(HSD_JObj*, Vec3*, f32*, f32, f32);
/* 1EB004 */ void grBigBlue_801EB004(Ground_GObj*);
/* 1EB4AC */ void grBigBlue_801EB4AC(Ground_GObj*);
/* 1EBAF8 */ void grBigBlue_801EBAF8(Ground_GObj*);
/* 1EC58C */ f32 grBigBlue_801EC58C(Vec3*, Vec3*, f32);
/* 1EC6C0 */ void grBigBlue_801EC6C0(Ground_GObj*);
/* 1ECB50 */ void grBigBlue_801ECB50(Ground_GObj*);
/* 1ED694 */ void grBigBlue_801ED694(Ground_GObj*, s32);
/* 1EDF44 */ s32 grBigBlue_801EDF44(Ground_GObj*, s32);
/* 1EE398 */ s32 grBigBlue_801EE398(Ground_GObj*, s32, s32);
/* 1EEF00 */ bool grBigBlue_801EEF00(Ground_GObj*, s32);
/* 1EF424 */ void grBigBlue_801EF424(Ground_GObj*);
/* 1EF7D8 */ void grBigBlue_801EF7D8(Vec3*);
/* 1EF844 */ bool grBigBlue_801EF844(enum_t);
/* 1EFB9C */ void fn_801EFB9C(HSD_GObj*, intptr_t);
/* 1EFC0C */ DynamicsDesc* grBigBlue_801EFC0C(enum_t);
/* 1EFC14 */ bool grBigBlue_801EFC14(Vec3*, int arg, HSD_JObj* jobj);
/* 3E2D20 */ extern StageData grBb_StageData;
#define GALE01_20B864
/* 20B864 */ void grBigBlueRoute_8020B864(bool);
/* 20B89C */ void grBigBlueRoute_8020B89C(void);
/* 20B920 */ void grBigBlueRoute_8020B920(void);
/* 20B95C */ void grBigBlueRoute_8020B95C(void);
/* 20B9CC */ bool grBigBlueRoute_8020B9CC(void);
/* 20B9D4 */ HSD_GObj* grBigBlueRoute_8020B9D4(int);
/* 20BABC */ void grBigBlueRoute_8020BABC(Ground_GObj*);
/* 20BB00 */ bool grBigBlueRoute_8020BB00(Ground_GObj*);
/* 20BB08 */ void grBigBlueRoute_8020BB08(Ground_GObj*);
/* 20BB0C */ void grBigBlueRoute_8020BB0C(Ground_GObj*);
/* 20BB10 */ void grBigBlueRoute_8020BB10(Ground_GObj*);
/* 20BB58 */ bool grBigBlueRoute_8020BB58(Ground_GObj*);
/* 20BB60 */ void grBigBlueRoute_8020BB60(Ground_GObj*);
/* 20BB64 */ void grBigBlueRoute_8020BB64(Ground_GObj*);
/* 20BB68 */ void grBigBlueRoute_8020BB68(Ground_GObj*);
/* 20BC24 */ bool grBigBlueRoute_8020BC24(Ground_GObj*);
/* 20BC2C */ void grBigBlueRoute_8020BC2C(Ground_GObj*);
/* 20BC30 */ void grBigBlueRoute_8020BC30(Ground_GObj*);
/* 20BC34 */ void grBigBlueRoute_8020BC34(Ground_GObj*);
/* 20BC68 */ void grBigBlueRoute_8020BC68(Ground_GObj*);
/* 20BF30 */ bool grBigBlueRoute_8020BF30(Ground_GObj*);
/* 20BF38 */ void grBigBlueRoute_8020BF38(Ground_GObj*);
/* 20C13C */ void grBigBlueRoute_8020C13C(Ground_GObj*);
/* 20C140 */ void grBigBlueRoute_8020C140(Ground_GObj*);
/* 20C1D4 */ bool grBigBlueRoute_8020C1D4(Ground_GObj*);
/* 20C1DC */ void grBigBlueRoute_8020C1DC(Ground_GObj*);
/* 20C210 */ void grBigBlueRoute_8020C210(Ground_GObj*);
/* 20C238 */ void grBigBlueRoute_8020C238(Ground_GObj*);
/* 20C530 */ s32 grBigBlueRoute_8020C530(Ground_GObj*);
/* 20C85C */ void grBigBlueRoute_8020C85C(Ground_GObj*);
/* 20CD20 */ void grBigBlueRoute_8020CD20(Ground_GObj*);
/* 20DAB4 */ void grBigBlueRoute_8020DAB4(HSD_JObj**, float, int);
/* 20DD64 */ f32 grBigBlueRoute_8020DD64(Vec3*);
/* 20DE48 */ DynamicModelDesc* grBigBlueRoute_8020DE48(void);
/* 20DEAC */ void fn_8020DEAC(void);
/* 20DED4 */ void grBigBlueRoute_8020DED4(Vec3*);
/* 20DF78 */ DynamicsDesc* grBigBlueRoute_8020DF78(enum_t);
/* 20DF80 */ bool grBigBlueRoute_8020DF80(Vec3*, int arg, HSD_JObj* jobj);
/* 3E617C */ extern StageData grBb_Route_StageData;
#define GALE01_1CD338
/* 1CD338 */ void grCastle_801CD338(bool);
/* 1CD37C */ void grCastle_801CD37C(void);
/* 1CD4A0 */ void grCastle_801CD4A0(void);
/* 1CD4A4 */ void grCastle_801CD4A4(void);
/* 1CD4C8 */ bool grCastle_801CD4C8(void);
/* 1CD4D0 */ HSD_GObj* grCastle_801CD4D0(int);
/* 1CD5BC */ void grCastle_801CD5BC(Ground_GObj*);
/* 1CD600 */ bool grCastle_801CD600(Ground_GObj*);
/* 1CD608 */ void grCastle_801CD608(Ground_GObj*);
/* 1CD60C */ void grCastle_801CD60C(Ground_GObj*);
/* 1CD610 */ void grCastle_801CD610(Ground_GObj*);
/* 1CD658 */ void grCastle_801CD658(Ground_GObj*);
/* 1CD8A0 */ bool grCastle_801CD8A0(Ground_GObj*);
/* 1CD8A8 */ void grCastle_801CD8A8(Ground_GObj*);
/* 1CD960 */ void grCastle_801CD960(Ground_GObj*);
/* 1CD9B4 */ void grCastle_801CD9B4(Ground_GObj*);
/* 1CDA0C */ void grCastle_801CDA0C(Ground_GObj*);
/* 1CDC3C */ bool grCastle_801CDC3C(Ground_GObj*);
/* 1CDC44 */ void grCastle_801CDC44(Ground_GObj*);
/* 1CDF50 */ void grCastle_801CDF50(Ground_GObj*);
/* 1CDF54 */ bool grCastle_801CDF54(Vec3*);
/* 1CDFD8 */ void grCastle_801CDFD8(Ground_GObj*);
/* 1CE054 */ s32 grCastle_801CE054(Ground_GObj*);
/* 1CE19C */ void grCastle_801CE19C(Ground_GObj*);
/* 1CE260 */ void grCastle_801CE260(Ground_GObj*);
/* 1CE3A0 */ void fn_801CE3A0(void);
/* 1CE3A4 */ bool grCastle_801CE3A4(Ground_GObj*);
/* 1CE3AC */ void grCastle_801CE3AC(Ground_GObj* gobj);
/* 1CE578 */ void grCastle_801CE578(Ground_GObj*);
/* 1CE7E4 */ void grCastle_801CE7E4(Ground_GObj*);
/* 1CE7E8 */ void grCastle_801CE7E8(Ground_GObj*);
/* 1CE858 */ bool grCastle_801CE858(Ground_GObj*);
/* 1CE860 */ void grCastle_801CE860(Ground_GObj*);
/* 1CE8E4 */ void grCastle_801CE8E4(Ground_GObj*);
/* 1CE8E8 */ void grCastle_801CE8E8(Ground_GObj*);
/* 1CE9DC */ void fn_801CE9DC(void);
/* 1CE9E0 */ bool grCastle_801CE9E0(Ground_GObj*);
/* 1CE9E8 */ void grCastle_801CE9E8(Ground_GObj*);
/* 1CEAC8 */ void grCastle_801CEAC8(Ground_GObj*);
/* 1CEACC */ void grCastle_801CEACC(Ground_GObj*);
/* 1CEEFC */ bool grCastle_801CEEFC(Ground_GObj*);
/* 1CEF04 */ void grCastle_801CEF04(Ground_GObj*);
/* 1CF0F0 */ void grCastle_801CF0F0(Ground_GObj*);
/* 1CF0F4 */ void grCastle_801CF0F4(Ground_GObj*);
/* 1CF300 */ bool grCastle_801CF300(Ground_GObj*);
/* 1CF308 */ void grCastle_801CF308(Ground_GObj*);
/* 1CF74C */ void grCastle_801CF74C(Ground_GObj*);
/* 1CF7B0 */ void grCastle_801CF7B0(Ground_GObj*);
/* 1CF868 */ void grCastle_801CF868(Ground_GObj*);
/* 1CFAFC */ void fn_801CFAFC(Item_GObj*, Ground*, Vec3*, HSD_GObj*);
/* 1CFB68 */ void fn_801CFB68(Item_GObj*, Ground*, HSD_GObj*);
/* 1CFBD4 */ s32 grCastle_801CFBD4(Ground_GObj* gobj, s32 arg1);
/* 1D0298 */ bool grCastle_801D0298(Ground_GObj* gobj, s32 arg1);
/* 1D02B8 */ void grCastle_801D02B8(Ground_GObj* gobj);
/* 1D0520 */ void grCastle_801D0520(Ground_GObj*, intptr_t);
/* 1D0550 */ void grCastle_801D0550(M2C_UNK, unkCastle*);
/* 1D059C */ void grCastle_801D059C(M2C_UNK, unkCastle*);
/* 1D05E8 */ void grCastle_801D05E8(M2C_UNK, unkCastle*);
/* 1D0634 */ void grCastle_801D0634(M2C_UNK, unkCastle*);
/* 1D0680 */ void grCastle_801D0680(M2C_UNK, unkCastle*);
/* 1D06CC */ void grCastle_801D06CC(M2C_UNK, unkCastle*, Ground_GObj*);
/* 1D0744 */ void grCastle_801D0744(M2C_UNK, unkCastle*, Ground_GObj*);
/* 1D07BC */ void grCastle_801D07BC(M2C_UNK, unkCastle*, Ground_GObj*);
/* 1D0834 */ void grCastle_801D0834(M2C_UNK, unkCastle*, Ground_GObj*);
/* 1D08AC */ void grCastle_801D08AC(M2C_UNK, unkCastle*, Ground_GObj*);
/* 1D0924 */ void fn_801D0924(HSD_GObj*, intptr_t);
/* 1D09B8 */ bool grCastle_801D09B8(void*, HSD_GObj*, Vec3*);
/* 1D0A9C */ void grCastle_801D0A9C(Vec3* arg0, f32 arg8);
/* 1D0B04 */ DynamicsDesc* grCastle_801D0B04(enum_t);
/* 1D0B0C */ bool grCastle_801D0B0C(Vec3* v, int arg1, HSD_JObj* jobj);
/* 1D0BBC */ void grCastle_801D0BBC(void);
/* 1D0D24 */ void grCastle_801D0D24(void);
/* 1D0D84 */ void grCastle_801D0D84(HSD_JObj*);
/* 1D0FF0 */ float grCastle_801D0FF0(void);
/* 3E11A4 */ extern StageData grCs_StageData;
#define GALE01_1DCCFC
#define MELEE_GR_TYPES_H
typedef struct StageBlastZone {
    f32 left; // 0x74
    f32 right; // 0x78
    f32 top; // 0x7C
    f32 bottom; // 0x80
} StageBlastZone;
/// @remarks This struct is based in part on the datasheet however the info
///          there is likely incorrect as this doesn't quite match @c
///          grGroundParam.
typedef struct StageCameraInfo {
    StageBlastZone cam_bounds; // 0x00
    f32 cam_x_offset; // 0x10
    f32 cam_y_offset; // 0x14
    f32 cam_vertical_tilt; // 0x18
    f32 cam_pan_degrees; // 0x1C
    f32 x20; // 0x20
    f32 x24; // 0x24
    f32 cam_track_ratio; // 0x28
    f32 cam_fixed_zoom; // 0x2C
    f32 cam_track_smooth; // 0x30
    f32 cam_zoom_rate; // 0x34
    f32 cam_max_depth; // 0x38
    f32 x3C; // 0x3C
    f32 pausecam_zpos_min; // 0x40
    f32 pausecam_zpos_init; // 0x44
    f32 pausecam_zpos_max; // 0x48
    f32 cam_angle_up; // 0x4C
    f32 cam_angle_down; // 0x50
    f32 cam_angle_left; // 0x54
    f32 cam_angle_right; // 0x58
    Vec3 fixed_cam_pos; // 0x5C - 0x64
    f32 fixed_cam_fov; // 0x68
    f32 fixed_cam_vert_angle; // 0x6C
    f32 fixed_cam_horz_angle; // 0x70
} StageCameraInfo;
struct StageInfo {
    StageCameraInfo cam_info; // 0x00 - 0x70
    StageBlastZone blast_zone; // 0x74 - 0x80
    u32 flags; // 0x84
    GrKind grkind; // 0x88
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } unk8C;
    bool (*x90)(Vec3*, int);
    bool (*x94)(Vec3*, int);
    s32 x98;
    u32 x9C;
    s32 xA0;
    u8 xA4_pad[0x12C - 0xA4];
    HSD_GObj* x12C;
    Vec3 x130, x13C, x148, x154, x160, x16C;
    DynamicsDesc* (*on_touch_line)(int);
    bool (*on_check_shadow_render)(Vec3* fighter_pos, int, HSD_JObj*);
    Ground_GObj* map_gobjs[64];
    HSD_JObj* x280[261];
    void* x694[4];
    void* x6A4;
    /* +6A8 */ struct GroundItemData {
        s32 unk0;
        Article* unk4;
    }** itemdata;
    /* +6AC */ MapCollData* coll_data;
    /* +6B0 */ GroundParam* param;
    /* +6B4 */ M2C_UNK** ald_yaku_all;
    /* +6B8 */ void* map_ptcl;
    /* +6BC */ void* map_texg;
    /* +6C0 */ void* yakumono_param;
    /* +6C4 */ LightList** map_plit;
    /* +6C8 */ void* x6C8;
    /* +6CC */ DynamicModelDesc* quake_model_set;
    s16 x6D0;
    s16 x6D2;
    s16 x6D4;
    s16 x6D6;
    s32 x6D8;
    s16 x6DC;
    s16 x6DE;
    f32 x6E0;
    int x6E4[2];
    u8 x6EC_pad[0x708 - 0x6EC];
    s16 x708;
    f32 x70C;
    f32 x710;
    s32 x714;
    f32 x718;
    f32 x71C;
    s32 x720;
    f32 x724;
    f32 x728;
    HSD_GObj* x72C;
    Vec3 x730;
    f32 x73C;
    s32 x740;
    u8 x744_pad[0x748 - 0x744];
};
;
typedef struct StageCallbacks {
    /*  +0 */ HSD_GObjEvent on_init;
    /*  +4 */ HSD_GObjPredicate callback1;
    /*  +8 */ HSD_GObjEvent gobj_proc;
    /*  +C */ void (*callback3)(Ground_GObj*);
    /* +10 */ union {
        /* +10 */ u32 flags;
        struct {
            /* +10:0 */ u8 flags_b0 : 1;
            /* +10:1 */ u8 flags_b1 : 1;
            /* +10:2 */ u8 flags_b2 : 1;
            /* +10:3 */ u8 flags_b3 : 1;
            /* +10:4 */ u8 flags_b4 : 1;
            /* +10:5 */ u8 flags_b5 : 1;
            /* +10:6 */ u8 flags_b6 : 1;
            /* +10:7 */ u8 flags_b7 : 1;
        };
    };
} StageCallbacks;
struct GrJoint { ///< @todo rename fields
    s16 x;
    s16 y;
    s16 z;
};
struct StageData {
    GrKind grkind;
    StageCallbacks* callbacks;
    char* data1;
    Event on_init;
    void (*on_demo_init)(int);
    Event on_load;
    Event on_start;
    Predicate callback4;
    GrTouchLineCallback on_touch_line;
    GrCheckShadowRenderCallback on_check_shadow_render;
    u32 flags2;
    GrJoint* joints;
    size_t joint_count;
};
typedef struct StageIdPair {
    GrKind grkind;
    StKind stkind;
} StageIdPair;
struct GroundVars_unk {
    int xC4;
    int xC8;
    int xCC;
    int xD0;
    HSD_GObj* text_gobj;
    int xD8;
    int xDC;
    int xE0;
};
struct GroundVars_izumi {
    HSD_TObj* xC4;
    HSD_GObj* xC8;
    HSD_GObj* xCC;
    HSD_JObj* xD0;
    HSD_JObj* xD4;
    int xD8;
    float xDC;
};
struct GroundVars_izumi2 {
    HSD_JObj* xC4;
    HSD_JObj* xC8;
    int xCC;
    int xD0;
    int xD4;
    int xD8;
    float xDC;
};
struct GroundVars_izumi3 {
    s16 xC4;
    s16 xC6;
    s16 xC8;
    s16 xCA;
    HSD_JObj* xCC;
    float xD0;
    float xD4;
    float xD8;
    float xDC;
};
struct GroundVars_flatzone {
    u8 xC4;
    u8 xC5;
    u8 xC6;
    u8 xC7;
    s16 xC8;
    s16 xCA;
    s16 xCC;
    s16 xCE;
    s32 xD0;
    s32 xD4;
};
struct GroundVars_flatzone3 {
    u8 xC4;
    u8 xC5;
    u8 xC6;
    u8 xC7;
    u8 xC8;
    u8 xC9;
    u8 xCA;
};
struct grDynamicAttr_UnkStruct {
    grDynamicAttr_UnkStruct* next;
    s32 unk4;
    Vec3 unk8;
    s32 unk14;
    f32 unk18;
    s32 unk1C;
    u8 x0_fill[0x24 - 0x20];
};
struct GroundVars_flatzone2 {
    s32 xC4;
    f32 xC8;
    grDynamicAttr_UnkStruct* xCC;
    int xD0;
    int timer;
};
/// @todo Should be merged with #grOldKongo_GroundVars
struct grKongo_GroundVars {
    /* gp+C4 */ f32 xC4;
    /* gp+C8 */ f32 xC8;
    /* gp+CC */ f32 xCC;
    /* gp+D0 */ union {
        struct {
            void* keep;
        } taru;
    } u;
    /* gp+D4 */ f32 xD4;
    /* gp+D8 */ f32 xD8;
    /* gp+DC */ HSD_JObj* xDC;
    /* gp+E0 */ HSD_JObj* xE0;
    /* gp+E4 */ s16 xE4;
    /* gp+E6 */ s16 xE6;
    /* gp+E8 */ f32 xE8;
};
struct grKongo_GroundVars2 {
    HSD_Spline* xC4;
    f32 xC8;
    s16 xCC;
    s16 xCE;
    f32 xD0;
    f32 xD4;
    f32 xD8;
    f32 xDC;
    f32 xE0;
    f32 xE4;
    f32 xE8;
};
/// @todo Investigate if these extra structs could be
/// shared among stages/other things as more are decompiled.
struct grKongo_GroundVars3 {
    /* gp+C4 */ s16 xC4;
    /* gp+C6 */ s16 xC6;
    /* gp+C8 */ s16 xC8;
    /* gp+CA */ s16 xCA;
    HSD_JObj* xCC;
    HSD_JObj* xD0;
    f32 xD4;
    f32 xD8;
    f32 xDC;
    f32 xE0;
    f32 xE4;
    f32 xE8;
};
struct grKraid_GroundVars {
    /*  + gp+C4 */ s8 x0;
    /*  + gp+C5 */ s8 x1;
    /*  + gp+C8 */ f32 x4;
    /*  + gp+CC */ f32 x8;
    /*  + gp+D0 */ f32 xC;
    /*  + gp+D4 */ s32 x10;
};
struct grKraid_GroundVars2 {
    /*  + gp+C4 */ s8 x0;
    /*  + gp+C5 */ s8 x1;
    /*  + gp+C6 */ s8 x2;
    /*  + gp+C7 */ s8 x3;
    /*  + gp+C8 */ s8 x4;
    /*  + gp+C9 */ s8 x5;
    /*  + gp+CC */ f32 x8;
    /*  + gp+D0 */ s32 xC;
    /*  + gp+D4 */ HSD_JObj* x10;
    /*  + gp+D8 */ HSD_JObj* x14;
};
typedef struct grZakoGenerator_SpawnDesc {
    /* +0 */ u16 kind;
    /* +2 */ u8 x2;
    /* +3 */ u8 respawn;
} grZakoGenerator_SpawnDesc;
typedef struct grZakoGenerator_Spawn {
    /* +0 */ Vec3 pos0;
    /* +C */ Vec3 pos1;
} grZakoGenerator_Spawn;
typedef HSD_Generator* (*grZakoGenerator_SpawnFunc)(Vec3*, s32);
typedef struct grZakoGenerator_Config {
    /* +0 */ grZakoGenerator_Spawn* spawn_descs;
    /* +4 */ grZakoGenerator_Spawn* spawns;
    /* +8 */ int count;
    /* +C */ grZakoGenerator_SpawnFunc callback;
    /* +10 */ f32 x10;
    /* +14 */ HSD_Generator* gen;
    /* +18 */ int x18;
} grZakoGenerator_Config;
typedef struct grZakoGenerator_Entry {
    /* +0 */ s16 x0;
    /* +2 */ s16 x2;
    /* +4 */ Item_GObj* x4;
    /* +8 */ s32 x8;
} grZakoGenerator_Entry;
typedef struct grZakoGenerator_Data {
    /* +0 */ grZakoGenerator_Entry entries[81];
} grZakoGenerator_Data;
struct grCorneria_GroundVars {
    union {
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
        } flags;
        u8 value;
    } xC4;
    u8 xC5;
    union {
        struct {
            u8 b0 : 1;
        } flags;
        u8 value;
    } xC6;
    u8 xC7;
    grZakoGenerator_Config* xC8;
    grZakoGenerator_Config* xCC;
    f32 xD0;
    f32 base_x;
    f32 base_y;
    f32 offset_x;
    union {
        f32 val;
        struct {
            u8 b0 : 1;
        } flags;
    } offset_y;
    Vec3 xE4;
    f32 xF0;
    f32 xF4;
    f32 xF8;
    f32 xFC;
    s32 x100;
    s32 x104;
    u32 x108;
    s32 x10C;
    s32 x110;
    f32 x114;
    s8 x118;
    u8 x119;
    u8 x11A;
    u8 x11B;
    u32 x11C;
    Item_GObj* left_cannon;
    Item_GObj* right_cannon;
    HSD_GObj* x128;
    HSD_JObj* x12C;
};
/// Ground vars shared by Corneria and Venom's Arwing stage articles.
struct grStarFox_GroundVars {
    /* +0 gp+C4 */ union {
        struct {
            u8 b0 : 1;
        } flags;
        u8 value;
        u32 word;
    } xC4;
    /* +4 gp+C8 */ s32 arwing_slot;
    /* +8 gp+CC */ s32 xCC;
    /* +C gp+D0 */ s32 xD0;
    /* +10 gp+D4 */ s32 xD4;
    /* +14 gp+D8 */ s32 xD8;
    /* +18 gp+DC */ HSD_GObj* linked_gobj;
    /* +1C gp+E0 */ HSD_GObj* article_gobjs[4];
    /* +2C gp+F0 */ s32 xF0;
    /* +30 gp+F4 */ s32 xF4;
    /* +34 gp+F8 */ s32 xF8;
    /* +38 gp+FC */ s32 xFC;
    /* +3C gp+100 */ s32 x100;
};
/// Arwing slot ground vars (callbacks 2 and 10).
/// Overlaps grCorneria_GroundVars in the u union but interprets
/// fields differently: pointers/integers instead of floats.
struct grCorneria_GroundVars2 {
    /* 0x00 gp+C4 */ union {
        struct {
            u8 b0 : 1;
        } flags;
        u8 value;
    } xC4;
    /* 0x01 gp+C5 */ u8 xC5;
    /* 0x02 gp+C6 */ u8 xC6;
    /* 0x03 gp+C7 */ u8 xC7;
    /* 0x04 gp+C8 */ s32 xC8;
    /* 0x08 gp+CC */ s32 xCC;
    /* 0x0C gp+D0 */ s32 xD0;
    /* 0x10 gp+D4 */ s32 xD4;
    /* 0x14 gp+D8 */ s32 xD8;
    /* 0x18 gp+DC */ HSD_GObj* xDC;
    /* 0x1C gp+E0 */ HSD_GObj* xE0;
    /* 0x20 gp+E4 */ HSD_GObj* xE4;
    /* 0x24 gp+E8 */ HSD_GObj* xE8;
    /* 0x28 gp+EC */ HSD_GObj* xEC;
    /* 0x2C gp+F0 */ s32 xF0;
    /* 0x30 gp+F4 */ s32 xF4;
    /* 0x34 gp+F8 */ s32 xF8;
    /* 0x38 gp+FC */ s32 xFC;
    /* 0x3C gp+100 */ s32 x100;
};
struct grKinokoRoute_GroundVars_Entry {
    /* +0 */ Vec3 pos;
    /* +C */ HSD_JObj* jobj;
};
struct grKinokoRoute_GroundVars {
    /* +0 */ struct grKinokoRoute_GroundVars_Entry entries[4];
};
struct grKinokoRoute_GroundVars2 {
    /* +00 gp+C4 */ u8 flags_0 : 1;
    /* +01 */ u8 pad_01[1];
    /* +02 gp+C6 */ s16 phase;
    /* +04 gp+C8 */ s16 spawn_idx;
    /* +06 gp+CA */ s16 zone_idx;
    /* +08 gp+CC */ s16 cam_timer;
    /* +0A */ u8 pad_0A[2];
    /* +0C gp+D0 */ Vec3 reb0_pos;
};
struct grSmashTaunt_GroundVars {
    /* +0 */ s16 state;
    /* +2 */ s16 timer;
    /* +4 */ s16 line;
    /* +6 */ s16 sis_data_idx;
    /* +8 */ s32 sound_id;
    /* +C */ HSD_JObj* jobj0;
    /* +10 */ HSD_JObj* jobj1;
    /* +14 */ HSD_JObj* jobj2;
    /* +18 */ s16 joint_idx0;
    /* +1A */ s16 joint_idx1;
    /* +1C */ s16 joint_idx2;
    /* +20 */ HSD_Text* text;
    /* +24 */ f32 xE8;
    /* +28 */ f32 xEC;
};
struct grVenom_Platform_GroundVars {
    /* +00 gp+C4 */ Ground_GObj* target_gobj;
    /* +04 gp+C8 */ s32 smash_taunt_timer;
    /* +08 gp+CC */ HSD_JObj* upper_jobj;
    /* +0C gp+D0 */ HSD_JObj* lower_jobj;
};
struct grVenom_GroundVars {
    /* +00 gp+C4 */ union {
        u32 xC4; ///< @todo Not a #u32, either
        /// #grSmashTaunt_GroundVars or #HSD_GObj
        struct {
            u8 b0 : 1;
        } xC4_flags;
    };
    /* +04 gp+C8 */ u32 xC8;
    /* +08 gp+CC */ u32 xCC;
    /* +0C gp+D0 */ u32 xD0;
    /* +10 gp+D4 */ s32 xD4;
    /* +14 gp+D8 */ s32 xD8;
    /* +18 gp+DC */ union {
        f32 xDC;
        Ground_GObj* linked_gobj;
    };
    /* +1C gp+E0 */ union {
        f32 xE0;
        s32 xE0_int;
    };
    /* +20 gp+E4 */ union {
        f32 xE4;
        s32 xE4_int;
    };
    /* +24 gp+E8 */ union {
        f32 xE8;
        s32 xE8_int;
    };
    /* +28 gp+EC */ union {
        f32 xEC;
        s32 xEC_int;
    };
    /* +2C gp+F0 */ s32 xF0;
    /* +30 gp+F4 */ s32 xF4;
    /* +34 gp+F8 */ s32 xF8;
    /* +38 gp+FC */ s32 xFC;
    /* +3C gp+100 */ s32 x100;
};
struct grVenom_GroundVars2 {
    /* +00 gp+C4 */ HSD_JObj* xC4;
    /* +04 gp+C8 */ HSD_JObj* xC8;
    /* +08 gp+CC */ HSD_JObj* xCC;
    /* +0C gp+D0 */ HSD_JObj* xD0;
    /* +10 gp+D4 */ HSD_JObj* xD4;
    /* +14 gp+D8 */ HSD_JObj* xD8;
    /* +18 gp+DC */ HSD_JObj* xDC;
    /* +1C gp+E0 */ union {
        struct {
            u16 padding : 7;
            u16 state : 2;
            u16 padding2 : 7;
        } xE0_state_pad;
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 b3 : 1;
            u8 b4 : 1;
            u8 b5 : 1;
            u8 b6 : 1;
            u8 b7 : 1;
        };
    } xE0_state;
};
struct grArwing_GroundVars {
    u32 xC4;
    u32 xC8;
    u32 xCC;
    u32 xD0;
    s32 xD4;
    s32 xD8;
    f32 xDC;
    Vec3 xE0;
    f32 xEC;
};
struct grGreatBay_GroundVars {
    u8 xC4;
    struct {
        u8 b0123456 : 7;
        u8 b7 : 1;
    } xC5;
    s16 xC6;
    HSD_Generator* xC8;
    f32 xCC;
    s32 xD0;
    s32 xD4;
    u32 xD8;
    f32 xDC;
    f32 xE0;
};
struct grGreatBay_GroundVars2 {
    HSD_GObj* gobjs[4];
    s16 x10;
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4567 : 4;
    } x12;
    s32 x14;
    u32 x18;
    f32 x1C;
    HSD_JObj* jobj;
};
struct grGreatBay_GroundVars3 {
    Vec3 translation;
    f32 xD0;
    f32 xD4;
    f32 xD8;
    f32 xDC;
    f32 xE0;
    HSD_JObj* jobj;
    f32 xE8;
    f32 xEC;
    s32 xF0;
};
struct grGreatBay_GroundVars4 {
    s32 xC4;
    s32 xC8;
    s32 xCC;
    s32 xD0;
    s32 xD4;
    s32 xD8;
    s32 xDC;
    f32 xE0;
    Vec3 xE4;
    Item_GObj* xF0;
};
struct grGarden_GroundVars { // Cranky Kong
    s32 xc4;
    s32 xc8;
};
struct grGarden_GroundVars2 { // Klaptrap
    // HSD_GObj* xc4;
    Item_GObj* xc4;
    s8 xc8;
    s32 xcc;
};
struct grIceMt_GroundVars {
    /*  +0 gp+C4 */ s16 x0;
    /*  +2 gp+C6 */ s16 x2;
    /*  +4 gp+C8 */ s16 x4;
    /*  +6 gp+CA */ s16 x6;
    /*  +8 gp+CC */ s16 x8;
    /*  +A gp+CE */ s16 xA;
    /*  +C gp+D0 */ s16 xC;
    /*  +E gp+D2 */ s16 xE;
    /* +10 gp+D4 */ f32 x10;
    /* +14 gp+D8 */ s16 x14;
    /* +16 gp+DA */ s16 x16;
    /* +18 gp+DC */ s16 x18;
    /* +1A gp+DE */ s16 x1A;
    /* +1C gp+E0 */ s16 x1C;
    /* +1E gp+E2 */ s16 x1E;
    /* +20 gp+E4 */ f32 x20;
    /* +24 gp+E8 */ u32 x24;
    /* +28 gp+EC */ u32 x28;
    /* +2C gp+F0 */ u32 x2C;
    /* +30 gp+F4 */ s16 x30[2];
    /* +34 gp+F8 */ u32 x34[2];
    /* +44 gp+10E */ s16 x100[4];
    /* +44 gp+108 */ s16 x108[8];
};
/// @todo ::Map_GroundVars?
struct grIceMt_GObj1_GroundVars {
    /*  +0:0 gp+C4:0 */ u8 x0_b0 : 1;
    /*  +0:1 gp+C4:1 */ u8 x0_b1 : 1;
    /*  +4   gp+C8   */ HSD_JObj* x4;
    /*  +8   gp+CC   */ HSD_JObj* x8;
    /*  +C   gp+D0   */ HSD_JObj* xC;
    /* +10   gp+D4   */ HSD_JObj* x10;
    /* +14   gp+D8   */ HSD_JObj* x14;
    /* +18   gp+DC   */ HSD_JObj* x18;
    /* +1C   gp+E0   */ HSD_JObj* x1C;
    /* +20   gp+E4   */ HSD_JObj* x20;
    /* +24   gp+E8   */ HSD_JObj* x24;
    /* +28   gp+EC   */ HSD_JObj* x28;
    /* +2C   gp+F0   */ HSD_JObj* x2C;
    /* +30   gp+F4   */ HSD_JObj* x30;
    /* +34   gp+F8   */ HSD_GObj* x34[20];
};
struct grIceMt_BG_GroundVars {
    /*  +0 gp+C4 */ float x0;
};
struct grIceMt_FA364_State {
    /*  +0 */ s16 phase;
    /*  +2 */ s16 delay;
    /*  +4 */ s16 lerp_count;
    /*  +6 */ s16 burst_count;
    /*  +8 */ s16 idx;
    /*  +A */ s16 pad;
    /*  +C */ f32 cur;
};
struct grIceMt_GObj9_GObj10_UnderUpperIdPair {
    /* +0 */ s16 under;
    /* +2 */ s16 upper;
};
struct grIceMt_GObj9_GObj10_x0 {
    /*  +0 gp+C4 */ struct grIceMt_GObj9_GObj10_UnderUpperIdPair ids;
    /*  +4 gp+C8 */ struct grIceMt_FA364_State state;
};
struct grIceMt_GObj9_GroundVars {
    /*  +0 gp+C4 */ struct grIceMt_GObj9_GObj10_x0 x0;
    /* +14 gp+D8 */ s16 x14;
    /* +16 gp+DA */ s16 x16;
    /* +18 gp+DC */ s16 x18[12];
    /* +30 gp+F4 */ s16 x30[10];
    /* 0x01C */ char pad_1C[0xFC];
};
struct grIceMt_GObj10_GroundVars {
    /*  +0   gp+C4 */ struct grIceMt_GObj9_GObj10_x0 x0;
    /* +14:0 gp+D8:0 */ u8 x14_b0 : 1;
    /* +14:1 gp+D8:1 */ u8 x14_b1 : 1;
    /* +14:2 gp+D8:2 */ u8 x14_b2 : 1;
    /* +14:3 gp+D8:3 */ u8 x14_b3 : 1;
    /* +14:4 gp+D8:4 */ u8 x14_b4 : 1;
    /* +16 gp+DA */ s16 x16;
    /* +18 gp+DC */ s16 x18;
    /* +1A gp+DE */ s16 x1A;
    /* +1C gp+E0 */ s16 x1C;
    /* +20 gp+E4 */ float x20;
};
typedef struct grInishie1_Block {
    s16 status;
    s16 x2;
    s16 x4;
    s16 x6;
    f32 x8; ///< probably a y transform
    f32 xC; ///< probably a delta for x8
    f32 x10;
    HSD_JObj* jobj2;
    HSD_GObj* hatena_gobj; ///< named in an assert
    Item_GObj* item_gobj;
    s16 x20;
    s16 x22; ///< probably a timer for when a block first appears and flickers
} grInishie1_Block;
/// @todo probably mistakes in this and Vars2
/// @todo this is #Map_GroundVars
typedef struct grInishie1_GroundVars {
    u16 xC4;
    s16 xC6;
    s16 xC8;
    s16 xCA;
    s16 xCC;
    s32 xD0;
    s32 xD4;
    s32 xD8;
    grInishie1_Block*
        block; ///< @todo Occupies same offset as ::Map_GroundVars::lv_gobj
               ///< but both appear in asserts under `u.map`
    f32 xE0;
    f32 xE4;
    s16 xE8;
    s16 xEA;
    s16 xEC;
    s16 xEE;
    f32 xF0;
    f32 xF4;
    f32 xF8;
    f32 xFC;
    HSD_JObj* x100;
    HSD_JObj* x104;
    HSD_JObj* x108;
    HSD_JObj* x10C;
} grInishie1_GroundVars;
struct grInishie1_GroundVars2 {
    /*  +0 gp+C4 */ HSD_JObj* xC4;
    /*  +4 gp+C8 */ s32 xC8;
    /*  +8 gp+CC */ s32 xCC;
    /*  +C gp+D0 */ grInishie1_Block* blocks;
    /* +10 gp+D4 */ s16 xD4;
    /* +12 gp+D6 */ s16 xD6;
    /* +14 gp+D8 */ s16 xD8;
    /* +16 gp+DA */ s16 xDA;
};
/// likely for question mark blocks
struct grInishie1_GroundVars3 {
    HSD_JObj* xC4;
    s32 xC8;
    s32 xCC;
};
struct grInishie2_GroundVars {
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xC4_flags;
    s16 xC6;
    s16 xC8;
    s16 xCA;
    s16 xCC;
    u32 xD0;
    u32 xD4;
    Vec3 xD8;
};
struct grOldKongo_GroundVars {
    s16 xC4;
    s16 xC6;
    s16 xC8;
    s16 xCA;
    s16 xCC;
    s16 xCE;
    s16 hit_timer;
    Fighter_GObj* keep;
    f32 xD8;
    f32 xDC;
    f32 xE0;
    f32 xE4;
    f32 xE8;
    f32 xEC;
};
struct grOldPupupu_GroundVars {
    s32 xC4;
    s32 xC8;
    s32 xCC;
    s32 xD0;
    s32 xD4;
    s32 xD8;
    s32 xDC;
    s32 xE0;
};
struct grOldPupupu_GroundVars2 {
    s16 xC4;
    s16 xC6;
};
/// likely for Cathrine (Birdo)
struct grInishie2_GroundVars2 {
    Item_GObj* xC4;
    HSD_GObj* xC8;
    HSD_GObj* xCC;
};
struct grInishie2_GroundVars3 {
    s16 xC4;
    s16 xC6;
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xC8_flags;
    s16 xCA;
    Vec3 xCC;
    Vec3 xD8;
};
struct grStadium_GroundVars {
    /* +0 gp+C4:0 */ u8 xC4_b0 : 1;
    /* +0 gp+C4:1 */ u8 xC4_b1 : 1;
    /* +0 gp+C8:0 */ size_t xC8; ///< file size
    /* +4 gp+CC   */ HSD_MObj* xCC;
    /* +4 gp+D0   */ UnkArchiveStruct* xD0;
    /* +4 gp+D4   */ float xD4;
    /* +4 gp+D8   */ int xD8;
    /* +4 gp+DC   */ s16 xDC;
    /* +4 gp+DE   */ s16 xDE;
    /* +4 gp+E0   */ s16 xE0;
    /* +4 gp+E2   */ s16 xE2;
    /* +4 gp+E4   */ HSD_GObj* xE4;
    /* +4 gp+E8   */ HSD_GObj* xE8;
};
/// Specific to the Pokemon Stadium jumbotron
struct grStadium_Display {
    /* C4:0 */ u8 xC4_b0 : 1;
    /* C4:1 */ u8 xC4_b1 : 1;
    /* C8   */ HSD_TObj* xC8;
    /* CC   */ HSD_MObj* xCC;
    /* D0   */ HSD_ImageDesc* xD0;
    /* D4   */ HSD_GObj* xD4; ///< Text display
    /* D8   */ HSD_GObj* xD8; ///< Stage camera feed
    /* DC   */ HSD_GObj* xDC; ///< Zoomed camera feed
    /* E0   */ int xE0;
    /* E4   */ s16 xE4;
    /* E6   */ s16 xE6;
    /* E8   */ s16 xE8;
    /* EA   */ s16 xEA;
    /* EC   */ s16 xEC;
    /* EE   */ s16 xEE; ///< The focused player, or 99 if none
    /* F0   */ s16 xF0; ///< Slot type of the focused player
    /* F2   */ s16 xF2;
    /* F4   */ CmSubject* xF4;
    /* F8:0 */ u8 xF8_0 : 1;
    /* F8:1 */ u8 xF8_1 : 1;
    /* F8:2 */ u8 xF8_2 : 1;
};
/// Unknown, but used for IDS:
/// 6
/// 9
/// and possibly more
struct grStadium_type9_GroundVars {
    /* C4:0 */ u8 xC4_b0 : 1;
    /* C4:1 */ u8 xC4_b1 : 1;
    /* C8   */ HSD_Generator* xC8;
    /* CC   */ HSD_GObj* xCC_gobj;
    /* D0   */ HSD_GObj* xD0_gobj;
    /* D4   */ HSD_JObj* xD4_jobj;
};
struct grYorster_TrackElement {
    /* 0x00 */ s8 x00;
    /* 0x01 */ u8 x01;
    /* 0x02 */ u8 pad_02[2];
    /* 0x04 */ f32 x04;
    /* 0x08 */ f32 x08;
    /* 0x0C */ s32 x0C;
    /* 0x10 */ s32 x10;
    /* 0x14 */ s32 x14;
    /* 0x18 */ HSD_JObj* x18;
    /* 0x1C */ HSD_GObj* x1C;
};
struct grYorster_GroundVars {
    int xC4;
    struct grYorster_TrackElement elements[9];
};
struct grZebes_GroundVars {
    /*  +0 gp+C4:0 */ u8 x0_b0 : 1;
    /*  +4 gp+C8 */ HSD_JObj* stored_jobj;
    /*  +8 gp+CC */ s16 x8;
    /*  +A gp+CE */ s16 xA;
};
struct grZebes_GroundVars2 {
    /*  +0 gp+C4 */ s16 xC4;
};
struct grZebes_GroundVars3 {
    /*  +0 gp+C4 */ Item_GObj* xC4;
    /*  +4 gp+C8 */ s32 xC8;
};
struct grZebes_GroundVars4 {
    /* +00 gp+C4 */ u8 xC4;
    /* +01 gp+C5 */ u8 xC5;
    /* +02 gp+C6 */ u16 xC6;
    /* +04 gp+C8 */ f32 xC8;
    /* +08 gp+CC */ f32 xCC;
    /* +0C gp+D0 */ f32 xD0;
    /* +10 gp+D4 */ f32 xD4;
    /* +14 gp+D8 */ u32 xD8;
    /* +18 gp+DC */ u32 xDC;
    /* +1C gp+E0 */ u32 xE0;
    /* +20 gp+E4 */ s16 xE4;
    /* +22 gp+E6 */ s16 xE6;
    /* +24 gp+E8 */ s32 xE8;
    /* +28 gp+EC */ u32 xEC;
};
struct grZebes_GroundVars5 {
    /* +00 gp+C4 */ s16 xC4;
    /* +02 gp+C6 */ s16 xC6;
    /* +04 gp+C8 */ u32 xC8;
    /* +08 gp+CC */ f32 xCC;
    /* +0C gp+D0 */ f32 xD0;
    /* +10 gp+D4 */ f32 xD4;
    /* +14 gp+D8 */ f32 xD8;
    /* +18 gp+DC */ u32 xDC;
    /* +1C gp+E0 */ u32 xE0;
    /* +20 gp+E4 */ u32 xE4;
    /* +24 gp+E8 */ s16 xE8;
    /* +26 gp+EA */ s16 xEA;
    /* +28 gp+EC */ u32 xEC;
    /* +2C gp+F0 */ u32 xF0;
    /* +30 gp+F4 */ s16 xF4;
    /* +32 gp+F6 */ s16 xF6;
    /* +34 gp+F8 */ u32 xF8;
    /* +38 gp+FC */ u32 xFC;
    /* +3C gp+100 */ u32 x100;
};
struct grRCruise_Entry {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 pad_01;
    /* 0x02 */ s16 x2;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ f32 x10;
    /* 0x14 */ HSD_JObj* x14;
};
struct grRCruise_SubEntry {
    /* 0x00 */ u8 x0;
    /* 0x01 */ u8 x1_b0 : 1;
    /* 0x02 */ s16 x2;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ HSD_JObj* xC;
};
struct Map_VanishDesc {
    /* +0 */ s16 x0;
    /* +2 */ s16 x2;
    /* +4 */ bool x4;
};
struct Map_VanishEntry {
    /* +0 */ s16 x0;
    /* +2 */ s16 x2;
    /* +4 */ HSD_JObj* jobj;
};
struct grRCruise_GroundVars {
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xC4;
    /* +04 gp+C8 */ struct lb_80011A50_t* x4;
    /* +08 gp+CC */ f32 x8;
    /* +0C gp+D0 */ s32 xC;
    /* +10 gp+D4 */ int x10;
    /* +14 gp+D8 */ f32 x14;
    /* +18 gp+DC */ f32 x18;
    /* +1C gp+E0 */ f32 x1C;
    /* +20 gp+E4 */ f32 x20;
    /* +24 gp+E8 */ f32 x24;
    /* +28 gp+EC */ f32 x28;
    /* +2C gp+F0 */ s32 x2C;
    /* +30 gp+F4 */ s32 x30;
    /* +34 gp+F8 */ s32 x34;
    /* +38 gp+FC */ s32 x38;
    /* +3C gp+100 */ struct grRCruise_SubEntry x3C[3];
    /* +6C gp+130 */ struct grRCruise_Entry* entries;
    /* +70 gp+134 */ struct Map_VanishDesc* vanish;
    /* +74 gp+138 */ u8 pad_74[0xC];
};
struct grRCruise_GroundVars2 {
    /* +00 gp+C4 */ DynamicsDesc xC4;
    /* +00 gp+D0 */ DynamicsDesc xD0;
    /* +28 gp+EC */ HSD_GObj* xEC;
};
struct grFigureGet_GroundVars {
    /*  +0 gp+C4 */ s32 x0;
    /*  +4 gp+C8 */ s32 x4;
    /*  +8 gp+CC */ int x8;
    /*  +C gp+D0 */ int xC;
    /* +10 gp+D4 */ int x10[3];
    /* +1C gp+E0 */ int x1C[3];
    /* +28 gp+EC */ HSD_GObj* x28[3];
    /* +34 gp+F8 */ Item_GObj* x34[3];
};
struct grFourside_GroundVars {
    /*  +0 gp+C4 */ HSD_JObj* x0;
    /*  +4 gp+C8 */ HSD_JObj* x4;
    /*  +4 gp+C8 */ HSD_JObj* x8;
};
struct grFourside_CraneVars {
    /*  +0 gp+C4 */ u8 x0;
    /*  +0 gp+C5 */ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } x1;
    /*  +4 gp+C8 */ int x4;
    /*  +4 gp+CC */ float x8;
    /*  +4 gp+D0 */ float xC;
    /*  +4 gp+D4 */ float x10;
    /*  +4 gp+D8 */ float x14;
    /*  +4 gp+DC */ float x18;
    /*  +4 gp+E0 */ float x1C;
};
struct grFourside_UfoVars {
    /*  +0 gp+C4 */ u8 x0;
    /*  +0 gp+C5 */ u8 x1;
    /*  +4 gp+C6 */ u8 x2;
    /*  +4 gp+C6 */ u8 x3;
    /*  +4 gp+C8 */ int x4;
    /*  +4 gp+CC */ int x8;
    /*  +4 gp+D0 */ CmSubject* xC;
};
struct grFourside_GroundVars2 {
    /*  +0 gp+C4 */ u8 x0;
    /*  +1 gp+C5 */ u8 x1;
    /*  +4 gp+C8 */ s32 x4;
    /*  +4 gp+CC */ s32 x8;
};
struct grGreens_BlockVars {
    unsigned int status : 4;
    unsigned int index : 5;
    unsigned int x1_1 : 1;
    unsigned int x1_2 : 1;
    unsigned int x1_3 : 1;
    unsigned int x1_4 : 1;
    unsigned int x1_5 : 1;
    unsigned int x1_6 : 1;
    unsigned int x1_7 : 1;
    float x4;
    float x8;
    Ground_GObj* xC;
    Item_GObj* x10;
    HSD_JObj* x14;
    int x18;
    HSD_GObj* x1C;
};
;
struct grGreens_GroundVars {
    /*  +0 gp+C4 */ union {
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 b3 : 1;
            u8 b4 : 1;
            u8 b5 : 1;
            u8 b6 : 1;
            u8 b7 : 1;
        };
        int whole_thing;
    } x0_flags;
    /*  +4 gp+C8 */ Vec* x4;
    /*  +8 gp+CC */ struct grGreens_BlockVars (*x8_blocks)[6];
    /*  +C gp+D0 */ int xC;
    /* +10 gp+D4 */ int x10;
    /* +14 gp+D8 */ int x14;
    /* +18 gp+DC */ int x18;
    /* +1C gp+E0 */ int x1C;
};
struct grGreens_GroundVars2 {
    /*  +0 gp+C4 */ int x0;
    /*  +4 gp+C8 */ int x4;
    /*  +8 gp+CC */ int x8;
    /*  +C gp+D0 */ int xC;
    /* +10 gp+D4 */ int x10;
    /* +14 gp+D8 */ int x14;
    /* +18 gp+DC */ int x18;
    /* +1C gp+E0 */ int x1C;
    /* +20 gp+E4 */ int x20;
    /* +24 gp+E8 */ int x24;
};
struct grMuteCity_GroundVars {
    /* +0 gp+C4) */ s16 xC4;
    /* +2 gp+C6) */ s16 xC6;
    /* +4 gp+C8) */ HSD_GObj* xC8;
    /* +8 gp+CC) */ HSD_GObj* xCC;
    /* +C gp+D0) */ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b23 : 2;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xD0_flags;
    /* +D gp+D1) */ u8 xD1;
    /* +E gp+D2) */ s16 xD2;
    /* +10 gp+D4) */ f32 xD4;
    /* +14 gp+D8) */ f32 xD8;
    /* +18 gp+DC) */ HSD_JObj* xDC;
    /* +1C gp+E0) */ HSD_JObj* xE0;
    /* +20 gp+E4) */ Vec3 xE4;
    /* +2C gp+F0) */ Vec3 xF0;
    /* +38 gp+FC) */ HSD_JObj* xFC;
    /* +3C gp+100) */ HSD_JObj* x100;
    /* +40 gp+104) */ HSD_JObj* x104;
    /* +44 gp+108) */ HSD_JObj* x108;
    /* +48 gp+10C) */ HSD_JObj* x10C;
    /* +4C gp+110) */ HSD_LObj* x110;
    /* +50 gp+114) */ f32 x114;
    /* +54 gp+118) */ f32 x118;
    /* +58 gp+11C) */ f32 x11C;
    /* +5C gp+120) */ f32 x120;
    /* +60 gp+124) */ f32 x124;
    /* +64 gp+128) */ f32 x128;
    /* +68 gp+12C) */ f32 x12C;
    /* +6C gp+130) */ f32 x130;
};
struct grMuteCity_GroundVars2 {
    /* +0 gp+C4) */ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xC4_flags;
    /* +4 gp+C8) */ HSD_JObj* xC8;
    /* +8 gp+CC) */ f32 xCC;
    /* +C gp+D0) */ f32 xD0;
    /* +10 gp+D4) */ GXColor saved_colors[4];
};
/// Onett awning physics element (0x1C bytes)
struct grOnett_AwningData {
    /* +0 */ HSD_JObj* jobj;
    /* +4 */ f32 initial_y;
    /* +8 */ f32 accumulator;
    /* +C */ f32 velocity;
    /* +10 */ f32 initial;
    /* +14 */ s16 counter;
    /* +16 */ s16 counter_prev;
    /* +18 */ s16 cooldown;
    /* +1A */ s16 flag;
};
/// Traffic/awning GroundVars (gobj ID 5)
struct grOnett_GroundVars {
    /*  +0 gp+C4 */ struct grOnett_AwningData awnings[2];
    /* +38 gp+FC */ s32 timer;
    /* +3C gp+100 */ HSD_Generator* gen;
    /* +40 gp+104 */ CmSubject* subject;
};
/// Building GroundVars (gobj ID 4)
struct grOnett_Building_GroundVars {
    /* +0 gp+C4 */ s16 state;
    /* +2 gp+C6 */ s16 next_state;
    /* +4 gp+C8 */ s32 hit_count;
    /* +8 gp+CC */ s32 frame;
    /* +C gp+D0 */ u32 timer;
};
/// Car GroundVars (gobj ID 3)
struct grOnett_Car_GroundVars {
    /*  +0 gp+C4:0 */ u8 x0_b0 : 1;
    u8 pad0[3];
    /* +04 gp+C8 */ HSD_JObj* car_jobjs[4];
    /* +14 gp+D8 */ HSD_JObj* unk_jobj;
    /* +18 gp+DC */ Item_GObj* car_items[4];
    /* +28 gp+EC */ u8 pad28[4];
    /* +2C gp+F0 */ HSD_JObj* car_jobjs2[4];
    /* +3C gp+100 */ HSD_JObj* unk_jobj2;
    /* +40 gp+104 */ s8 curr_car;
    /* +41 gp+105 */ u8 state_a;
    u8 pad42[2];
    /* +44 gp+108 */ s32 x108;
    u8 pad48[4];
    /* +4C gp+110 */ s32 x110;
    /* +50 gp+114 */ f32 car_speed;
    /* +54 gp+118 */ s8 next_car;
    /* +55 gp+119 */ u8 state_b;
    u8 pad56[2];
    /* +58 gp+11C */ s32 timer_b;
    u8 pad5C[4];
    /* +60 gp+124 */ s32 sub_state_b;
    /* +64 gp+128 */ f32 speed_b;
};
struct grBigBlue_GroundData {
    /* gp+E4 gp+138 gp+18C */ u8 index;
    /* gp+E5 gp+139 gp+18D */ u8 x1;
    /* gp+E6 gp+13A gp+18E */ s8 x2;
    /* gp+E7 gp+13B gp+18F */ u8 x3;
    /* gp+E8 gp+13C gp+190 */ s32 x4;
    /* gp+EC gp+140 gp+194 */ f32 x8;
    /* gp+F0 gp+144 gp+198 */ Vec3 xC;
    /* gp+FC gp+150 gp+1A4 */ Vec3 x18;
    /* gp+108 gp+15C gp+1B0 */ f32 x24;
    /* gp+10C gp+160 gp+1B4 */ f32 x28;
    /* gp+110 gp+164 gp+1B8 */ s32 x2C;
    /* gp+114 gp+168 gp+1BC */ s32 x30;
    /* gp+118 gp+16C gp+1C0 */ s32 x34;
    /* gp+11C gp+170 gp+1C4 */ Vec3 x38;
    /* gp+128 gp+17C gp+1D0 */ Vec3 x44;
    /* gp+134 gp+188 gp+1DC */ s32 x50;
};
;
/// Platform manager state (gobj ID 32).
struct grBigBlue_ManagerVars {
    /* gp+C4 */ u32 flags;
    /* gp+C8 */ void* event_data[3];
    /* gp+D4 */ HSD_JObj* platform_jobjs[3];
    /* gp+E0 */ void* event_extra;
    /* gp+E4 */ struct grBigBlue_GroundData data[3];
};
;
struct grBigBlue_PlatformVars {
    /* gp+C4 */ u32 xC4;
    /* gp+C8 */ s32 xC8_timer;
    /* gp+CC */ s32 xCC_timer;
    /* gp+D0 */ s32 xD0_timer;
    /* gp+D4 */ f32 height_offset;
    /* gp+D8 */ f32 xD8;
    /* gp+DC */ f32 target_y;
    /* gp+E0 */ Vec3 velocity;
    /* gp+EC */ f32 xEC;
};
/// Moving road gobj state (gobj ID 34).
struct grBigBlue_RoadVars {
    /* gp+C4 */ u32 flags;
    /* gp+C8 */ Vec3 position;
    /* gp+D4 */ Vec3 previous_position;
    /* gp+E0 */ Vec3 drift;
    /* gp+EC */ f32 lateral_drift;
    /* gp+F0 */ s16 direction;
    /* gp+F2 */ u8 pad_F2[6];
    /* gp+F8 */ f32 rotation;
};
;
/// Used by multiple Big Blue Ground subtypes (track, road, car gobjs).
/// Different gobjs interpret the same offsets differently.
///
/// Track gobj (ID 32): uses xC8 as HSD_JObj*[30], xCC as u8[30] flags.
/// Road gobj (ID 34): see #grBigBlue_RoadVars.
/// Car gobj (ID 33): per-lane data at 0x40-byte stride from gp+D4,
///   with fields: state(+0), target(+4), delta(+8), pos Vec3(+C),
///   lateral(+20), direction(+2C), gravity(+30), height(+34),
///   velocity(+38), accel(+3C), rotation(+40), amplitude(+44),
///   angular_vel(+48).
/// Per-lane data for the Big Blue car gobj (ID 33), 0x40-byte stride from
/// gp+D4.
struct grBigBlue_CarLane {
    union {
        /* +00 gp+D4 */ u16 status;
        struct {
            /* +00 gp+D4 */ u8 state : 6;
            /* +00 gp+D4 */ u8 direction : 1;
            /* +00 gp+D4 */ u8 state_hi : 1;
            /* +01 gp+D5 */ u8 x1;
        };
        struct {
            /* +00 gp+D4 */ u16 pad_slot_0 : 7;
            /* +00 gp+D4 */ u16 collision_slot : 5;
            /* +00 gp+D4 */ u16 pad_slot_1 : 4;
        };
    };
    /* +02 gp+D6 */ s8 x2;
    /* +03 gp+D7 */ u8 x3;
    /* +04 gp+D8 */ f32 target;
    /* +08 gp+DC */ f32 delta;
    /* +0C gp+E0 */ Vec3 pos;
    /* +18 gp+EC */ f32 alpha;
    /* +1C gp+F0 */ s32 threshold;
    /* +20 gp+F4 */ f32 gravity;
    /* +24 gp+F8 */ f32 height;
    /* +28 gp+FC */ f32 velocity;
    /* +2C gp+100 */ f32 accel;
    /* +30 gp+104 */ f32 rotation;
    /* +34 gp+108 */ f32 amplitude;
    /* +38 gp+10C */ f32 angular_velocity;
    /* +3C gp+110 */ f32 x110;
};
;
/// Car manager state (gobj ID 33).
struct grBigBlue_CarVars {
    /* gp+C4 */ u32 flags;
    /* gp+C8 */ HSD_JObj** collision_jobjs;
    /* gp+CC */ u8* ranks;
    /* gp+D0 */ s16 spawn_timer;
    /* gp+D2 */ u8 pad_D2[2];
    /* gp+D4 */ struct grBigBlue_CarLane lanes[4];
};
;
struct grBigBlue_GroundVars {
    union {
        struct {
            union {
                /*  +0 gp+C4 */ u32 x0_w;
                struct {
                    /*  +0 gp+C5 */ u8 x0;
                    /*  +0 gp+C6 */ u8 x1;
                    /*  +0 gp+C7 */ u8 x2;
                    /*  +0 gp+C8 */ u8 x3;
                };
                struct {
                    u8 x0_b1 : 1;
                    u8 pad[3];
                };
                struct {
                    /* +0 gp+C4:0 */ u32 b0 : 1;
                    /* +0 gp+C4:1 */ u32 b1 : 1;
                    /* +0 gp+C4:2 */ u32 b2 : 1;
                    /* +0 gp+C4:3 */ u32 prev_lane : 7;
                    /* +1 gp+C5:2 */ u32 cur_lane : 7;
                    /* +2 gp+C6:1 */ u32 next_lane : 7;
                    /* +3 gp+C7:0 */ u32 nibble_hi : 4;
                    /* +3 gp+C7:4 */ u32 nibble_lo : 4;
                };
            };
            /*  +4 gp+C8 */ void* xC8;
            /*  +8 gp+CC */ void* xCC;
            /*  +C gp+D0 */ f32 xD0;
            /* +10 gp+D4 */ HSD_JObj* xD4[3];
            /* pad */ char pad_3[4];
            /* +20 gp+E4 */ struct grBigBlue_GroundData data[3];
        };
        struct grBigBlue_ManagerVars manager;
        struct grBigBlue_PlatformVars platform;
        struct grBigBlue_RoadVars road;
        struct grBigBlue_CarVars car;
    };
};
struct grBigBlueRoute_GroundVars {
    /* +0 gp+C4 */ HSD_GObj* xC4;
    /* +4 gp+C8 */ void* car_info;
    /* +8 gp+CC */ HSD_Spline* xCC;
    /* +C gp+D0 */ HSD_Spline* xD0;
    /* +10 gp+D4 */ HSD_Spline* xD4;
    /* +14 gp+D8 */ Vec3 xD8;
    /* +20 gp+E4 */ Vec3 xE4;
    /* +2C gp+F0 */ Vec3 xF0;
    /* +38 gp+FC */ Vec3 xFC;
    /* +44 gp+108 */ s16 x108;
    /* +46 gp+10A */ s16 x10A;
};
struct grBigBlueRoute_Track {
    Vec3 offset;
    HSD_JObj* jobj;
};
struct grBigBlueRoute_GroundVars2 {
    /* +00 gp+C4 */ HSD_GObj* xC4;
    /* +04 gp+C8 */ s16 xC8;
    /* +06 gp+CA */ u8 pad_CA[0xCC - 0xCA];
    /* +08 gp+CC */ Vec3 xCC;
    /* +14 gp+D8 */ struct grBigBlueRoute_Track tracks[4];
};
struct grCastle_GroundVars {
    /*  +0 gp+C4 */ u32 xC4;
    /*  +0 gp+C8 */ s16 xC8;
    u8 pad[0xE0 - 0xCC];
    /*  +0 gp+E0 */ HSD_Spline** xE0;
};
struct grCastle_GroundVars3 {
    /* +00 gp+C4 */ HSD_GObj* xC4[3];
    /* +0C gp+D0 */ s16 xD0;
    /* +0E gp+D2 */ s16 xD2;
    /* +10 gp+D4 */ s16 xD4;
    /* +12 gp+D6 */ s16 xD6;
    /* +14 gp+D8 */ s16 xD8;
    /* +16 gp+DA */ s16 xDA;
    /* +18 gp+DC */ s16 xDC;
    /* +1A:0 gp+DE:0 */ u8 xDE_b0 : 1;
    /* +1B gp+DF */ u8 pad_xDF[1];
    /* +1C gp+E0 */ DynamicsDesc dynamics[12];
};
struct grCastle_GroundVars5 {
    /* +00 gp+C4 */ s16 xC4;
    /* +02 gp+C6 */ s16 xC6;
    /* +04 gp+C8 */ u8 pad_C8[4];
    /* +08 gp+CC */ HSD_GObj* xCC;
};
struct grCastle_GroundVars6 {
    /* +00 gp+C4 */ s16 xC4;
    /* +02 gp+C6 */ s16 xC6;
    /* +04 gp+C8 */ s16 xC8;
    /* +06 gp+CA */ u8 pad_CA[2];
    /* +08 gp+CC */ s32 xCC;
};
struct grCastle_GroundVars7 {
    /* +00 gp+C4 */ s16 xC4;
    /* +02 gp+C6 */ u8 pad_xC6[0xA];
    /* +0C gp+D0 */ HSD_GObj* xD0;
    /* +10 gp+D4 */ u32 xD4;
    /* +14 gp+D8 */ s32 xD8;
};
struct grCastle_Platform {
    /* +00 */ HSD_JObj* jobj;
    /* +04 */ f32 pos;
    /* +08 */ s16 state;
    /* +0A */ s16 timer;
    /* +0C */ f32 wind;
};
struct grCastle_GroundVars8 {
    /* +00 gp+C4 */ struct grCastle_Platform plat[2];
};
struct grCastle_GroundVars10 {
    /* +00 gp+C4 */ s16 xC4;
    /* +02 gp+C6 */ u8 pad_C6[2];
    /* +04 gp+C8 */ s16 xC8;
    /* +06 gp+CA */ u8 pad_CA[6];
    /* +0C gp+D0 */ HSD_JObj* jobjs[5];
    /* +20 gp+E4 */ HSD_JObj* effect_a[5];
    /* +34 gp+F8 */ HSD_JObj* effect_b[5];
    /* +48 gp+10C */ u32 x10C[5];
    /* +5C gp+120 */ s32 x120[5];
    /* +70 gp+134 */ u8 state[5];
    /* +75 gp+139 */ u8 idx[5];
    /* +7A gp+13E */ u8 pad_7A[2];
    /* +7C gp+140 */ f32 baseY[5];
};
struct grCastle_GroundVars11 {
    /* +00 gp+C4 */ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xC4;
    /* +01 gp+C5 */ u8 pad_01[3];
    /* +04 gp+C8 */ s16 xC8;
    /* +06 gp+CA */ s16 xCA;
    /* +08 gp+CC */ u32 xCC;
    /* +0C gp+D0 */ u32 xD0;
    /* +10 gp+D4 */ u32 xD4;
    /* +14 gp+D8 */ u32 xD8;
};
struct grPura_GroundVars {
    /*  +0 gp+C4:0 */ s16 xC4;
    /*  +0 gp+C6:0 */ s16 xC6;
    /*  +0 gp+C8:0 */ s16 xC8;
};
struct grPura_GroundVars2 {
    /*  +0 gp+C4 */ u32 xC4;
    /*  +0 gp+C8 */ HSD_JObj* xC8;
};
struct grPura_GroundVars3 {
    /* +0 gp+C4 */ HSD_JObj* xC4[25];
    /* +64 gp+128 */ CmSubject* x128[25];
};
struct Randall {
    /* +0 gp+C4 */ s16 timer;
    /* +4 gp+C8 */ HSD_JObj* jobj;
};
struct ShyGuys {
    /* +0 gp+C4 */ s8 count;
    /* +1 gp+C5 */ s8 pattern;
    /* +4 gp+C8 */ int timer;
};
struct grShrineroute_GroundVars {
    /*  +0 gp+C4 */ u16 xC4;
    /*  +2 gp+C6 */ u16 xC6;
    /*  +4 gp+C8 */ u16 xC8;
    /*  +6 gp+CA */ u16 xCA;
    /*  +8 gp+CC */ u16 xCC;
    /*  +A gp+CE */ u16 xCE;
    /*  +C gp+D0 */ u16 xD0;
    u8 _pad[0xD4 - 0xD2];
    /* +10 gp+D4 */ u32 xD4;
    /* +14 gp+D8 */ struct {
        /* +0 */ Vec3 offset;
        /* +C */ HSD_JObj* jobj;
    } platforms[3];
};
struct grShrineroute_GroundVars2 {
    /*  +0 gp+C4 */ HSD_GObj* xC4;
    /*  +4 gp+C8 */ HSD_LObj* xC8[20];
    /* +54 gp+118 */ u32 x118[20];
    /* +A4 gp+168 */ u32 x168;
    /* +A8 gp+16C */ HSD_LObj* x16C;
    /* +AC gp+170 */ HSD_LObj* x170;
};
struct grShrineroute_GroundVars3 {
    /*  +0 gp+C4 */ HSD_JObj* xC4;
    /*  +4 gp+C8 */ f32 xC8;
    /*  +8 gp+CC */ f32 xCC;
    /*  +C gp+D0 */ f32 xD0;
    /* +10 gp+D4 */ f32 xD4;
    /* +14 gp+D8 */ f32 xD8;
    /* +18 gp+DC */ f32 xDC;
    /* +1C gp+E0 */ f32 xE0;
    /* +20 gp+E4 */ HSD_JObj* xE4;
};
struct grNBa_BG_Vars {
    /* +0 gp+C4 */ int state;
    /* +4 gp+C8 */ int curr;
    /* +8 gp+CC */ int prev;
    /* +C gp+D0 */ int timer;
};
struct Last_GroundVars {
    /* +00 gp+C4    */ float xC4;
    /* +04 gp+C8    */ float xC8;
    /* +08 gp+CC    */ float xCC;
    /* +0C gp+D0    */ float xD0;
    /* +10 gp+D4    */ float xD4;
    /* +14 gp+D8    */ float xD8;
    /* +18 gp+DC    */ float xDC;
    /* +1C gp+E0    */ HSD_Generator* xE0;
};
struct grPushOn_GroundVars {
    /* +00 gp+C4 */ void* gobj;
    /* +04 gp+C8 */ HSD_LObj* lobjs[20];
    /* +54 gp+118 */ u32 lobj_flags[20];
    /* +A4 gp+168 */ s32 count;
    /* +A8 gp+16C */ HSD_LObj* point_light;
    /* +AC gp+170 */ HSD_LObj* spot_light;
};
struct ScrollVars {
    /* +00 gp+C4 */ u8 x0 : 1;
    /* +04 gp+C8 */ Vec3 x4;
    /* +10 gp+D4 */ Vec3 x10;
    /* +1C gp+E0 */ Vec3 x1C;
    /* +28 gp+EC */ HSD_GObj* anim_gobj;
    /* +2C gp+F0 */ HSD_JObj* int_jobj;
    /* +30 gp+F4 */ HSD_JObj* cam_jobj;
    /* +34 gp+F8 */ HSD_JObj* ctr_jobj;
    /* +38 gp+FC */ HSD_JObj* x38[3];
    /* +44 gp+108 */ HSD_JObj* x44;
};
struct grHomeRun_GroundVars {
    /* +00 gp+C4 */ HSD_GObj** parts;
    /* +04 gp+C8 */ HSD_GObj** back;
    /* +08 gp+CC */ HSD_Text* xCC;
    /* +0C gp+D0 */ HSD_JObj* xD0;
    /* +10 gp+D4 */ HSD_GObj* xD4;
    /* +14 gp+D8 */ HSD_GObj* bg_gobj[4];
    /* +24 gp+E8 */ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } xE8_flags;
};
/// View used by the per-target Ground gobjs created by #grHomeRun_8021E500.
struct grHomeRun_GroundVars2 {
    /* +00 gp+C4 */ u16 xC4;
    /* +02 gp+C6 */ u16 xC6;
    /* +04 gp+C8 */ int xC8;
    /* +08 gp+CC */ int xCC;
    /* +0C gp+D0 */ float xD0;
};
struct Map_Chikuwa {
    char pad_0[0x198];
};
struct Map_GroundVars {
    /*  +0 gp+C4:0  */ u32 xC4_b0 : 1;
    /*  +0 gp+C4:1  */ u32 xC4_b1 : 1;
    /*  +0 gp+C4:2  */ u32 xC4_b2_25 : 16;
    /*  +0 gp+C4:26 */ u32 xC4_b26 : 1;
    /*  +0 gp+C4:27 */ u32 xC4_b27 : 1;
    /*  +0 gp+C4:28 */ u32 xC4_b28 : 1;
    /*  +0 gp+C4:29 */ u32 xC4_b29 : 1;
    /*  +0 gp+C4:30 */ u32 xC4_b30 : 1;
    /*  +0 gp+C4:31 */ u32 xC4_b31 : 1;
    /*  +4 gp+C8    */ float xC8;
    /*  +8 gp+CC    */ Ground_GObj* lv_gobj[6];
    /* +20 gp+E4    */ float xE4;
    /* +24 gp+E8    */ float xE8;
    /* +28 gp+EC    */ float xEC;
    /* +2C gp+F0    */ float xF0;
    /* +30 gp+F4    */ float xF4;
    /* +34 gp+F8    */ float xF8;
    /* +38 gp+FC    */ float xFC;
    /* +3C gp+100   */ float x100;
    /* +40 gp+104   */ float x104;
    /* +44 gp+108   */ HSD_GObj* symbol[6];
    /* +5C gp+120   */ char pad_5C[0x10];
    /* +6C gp+130   */ struct Map_Chikuwa* chikuwa;
    /* +70 gp+134   */ struct Map_VanishEntry* vanish;
    /* +74 gp+138   */ char pad_64[0x140 - 0x74];
};
struct grOldYoshi_Cloud {
    u32 xC4_0123 : 4;
    u32 xC4_4 : 1;
    u32 xC4_567 : 8;
    HSD_JObj* xC8;
    float xCC;
    float xD0;
    float xD4;
};
struct grOldYoshi_Cloud_GroundVars {
    struct grOldYoshi_Cloud cloud[3];
};
struct grOldYoshi_Guest_GroundVars {
    s16 xC4;
    s16 xC6;
};
struct Ground {
    int x0; // 0x0
    HSD_GObj* gobj; // 0x4
    HSD_GObjEvent x8_callback;
    HSD_GObjEvent xC_callback;
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } x10_flags;
    struct {
        u8 b012 : 3;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } x11_flags;
    GrKind map_id; // 0x14
    HSD_GObj* x18; // 0x18
    HSD_GObjEvent x1C_callback;
    int x20[8];
    ColorOverlay color_overlay; // 0x40
    f32 xC0;
    /**
     * Union of Ground object subtypes
     *
     * A Ground object can be one of multiple subtypes. The toplevel Ground
     * object for the stage itself is a generic type, but uses different
     * subtypes for various stage hazards, graphics effects, backgrounds,
     * etc. used by the stage.
     *
     * Each index in a stage's StageCallbacks array may use a different
     * subtype of Ground object - but each callback in a single
     * StageCallbacks struct should operate on the same subtype.
     *
     * This is known from assert statements to contain at least the
     * following members:
     * - map
     *   - A generic member used for multiple stages - used in in Onett,
     *     RCruise, Home Run Contest, and more. Grep for `gp->u.map`
     *     to see lots of assert statements using it.
     * - scroll
     *   - Used for Rainbow Cruise
     * - car, carnull
     *   - Used in Big Blue
     */
    union GroundVars {
        struct grArwing_GroundVars arwing;
        struct grBigBlue_GroundVars bigblue;
        struct grBigBlueRoute_GroundVars2 bigblueroute2;
        struct grCastle_GroundVars castle;
        struct grCastle_GroundVars3 castle3;
        struct grCastle_GroundVars5 castle5;
        struct grCastle_GroundVars6 castle6;
        struct grCastle_GroundVars7 castle7;
        struct grCastle_GroundVars8 castle8;
        struct grCastle_GroundVars10 castle10;
        struct grCastle_GroundVars11 castle11;
        struct grCorneria_GroundVars corneria;
        struct grCorneria_GroundVars2 corneria2;
        struct grGreatBay_GroundVars greatbay;
        struct grGreatBay_GroundVars2 greatbay2;
        struct grGreatBay_GroundVars3 greatbay3;
        struct grGreatBay_GroundVars4 greatbay4;
        struct grFigureGet_GroundVars figureget;
        struct GroundVars_flatzone flatzone;
        struct GroundVars_flatzone2 flatzone2;
        struct GroundVars_flatzone3 flatzone3;
        struct grFourside_GroundVars fourside;
        struct grFourside_CraneVars foursideCrane;
        struct grFourside_UfoVars foursideUfo;
        struct grFourside_GroundVars2 fourside2;
        struct grGreens_GroundVars greens;
        struct grGreens_GroundVars2 greens2;
        struct grGarden_GroundVars garden;
        struct grGarden_GroundVars2 garden2;
        struct grIceMt_GroundVars icemt;
        struct grIceMt_GObj1_GroundVars icemt1;
        struct grIceMt_BG_GroundVars icemt_bg;
        struct grIceMt_GObj9_GroundVars icemt9;
        struct grIceMt_GObj10_GroundVars icemt10;
        struct grInishie1_GroundVars inishie1;
        struct grInishie1_GroundVars2 inishie12;
        struct grInishie1_GroundVars3 inishie13;
        struct grInishie2_GroundVars inishie2;
        struct grInishie2_GroundVars2 inishie22;
        struct grInishie2_GroundVars3 inishie23;
        /**
         * Japanese for "barrel," from #grKongo_801D828C and
         * #grOldKongo_802105C8 asserts.
         * @alias{oldkongo}
         */
        struct grOldKongo_GroundVars taru;
        struct grOldPupupu_GroundVars oldpupupu;
        struct grOldPupupu_GroundVars2 oldpupupu2;
        struct grOldYoshi_Cloud_GroundVars oldyoshicloud;
        struct grOldYoshi_Guest_GroundVars oldyoshiguest;
        struct GroundVars_izumi izumi;
        struct GroundVars_izumi2 izumi2;
        struct GroundVars_izumi3 izumi3;
        struct grKinokoRoute_GroundVars kinokoroute;
        struct grKinokoRoute_GroundVars2 kinokoroute2;
        struct grKongo_GroundVars kongo;
        struct grKongo_GroundVars2 kongo2;
        struct grKongo_GroundVars3 kongo3;
        struct grKraid_GroundVars kraid;
        struct grKraid_GroundVars2 kraid2;
        struct grMuteCity_GroundVars mutecity;
        struct grMuteCity_GroundVars2 mutecity2;
        struct grOnett_GroundVars onett;
        struct grOnett_Building_GroundVars onett_building;
        struct grOnett_Car_GroundVars onettcar;
        struct grPura_GroundVars pura;
        struct grPura_GroundVars2 pura2;
        struct grPura_GroundVars3 pura3;
        struct grRCruise_GroundVars rcruise;
        struct grRCruise_GroundVars2 rcruise2;
        struct grShrineroute_GroundVars shrineroute;
        struct grShrineroute_GroundVars2 shrineroute2;
        struct grShrineroute_GroundVars3 shrineroute3;
        struct grSmashTaunt_GroundVars smashtaunt;
        struct grStarFox_GroundVars starfox;
        struct GroundVars_unk unk;
        struct grHomeRun_GroundVars homerun;
        struct grHomeRun_GroundVars2 homerun2;
        struct grVenom_Platform_GroundVars venom_platform;
        struct grVenom_GroundVars venom;
        struct grVenom_GroundVars2 venom2;
        struct grYorster_GroundVars yorster;
        struct grZebes_GroundVars zebes;
        struct grZebes_GroundVars2 zebes2;
        struct grZebes_GroundVars3 zebes3;
        struct grZebes_GroundVars4 zebes4;
        struct grZebes_GroundVars5 zebes5;
        struct grStadium_GroundVars stadium;
        struct grStadium_type9_GroundVars stadium9;
        struct grStadium_Display display; ///< Pokemon Stadium jumbotron
        struct Randall randall;
        struct ShyGuys shyguys;
        struct grNBa_BG_Vars battle_bg;
        struct Last_GroundVars last;
        struct Map_GroundVars map;
        struct grPushOn_GroundVars pushon;
        struct ScrollVars scroll;
        struct grBigBlueRoute_GroundVars car;
        /// Legacy spellings retained for stringified assertion text.
        struct {
            /*  +0 gp+C4 */ u32 xC4;
            /*  +4 gp+C8 */ HSD_JObj** coll_jobj;
            /*  +8 gp+CC */ u8* rank;
        } carnull;
    } u;
};
;
;
/**
 * One row of #GroundParam::stage_params, describing a single #StKind. An
 * archive carries one row per #StKind built on its ground; ground.c calls
 * these rows stage params and sources them from @c StageParam.csv /
 * @c StageItem.csv (@c stdata.c).
 */
struct StageParam {
    /// The #StKind this row describes; ground.c lists it as @c stageid.
    StKind stkind;
    s32 x4;
    s32 x8;
    u32 xC;
    u32 x10;
    s16 x14;
    s16 x16;
    s16 x18;
    /// Read as `((s16*) param)[0xD + j]` by Ground_801C28CC; an s16 array
    /// rather than padding. Same 74 bytes either way.
    s16 x1A[(0x64 - 0x1A) / 2];
};
/**
 * The stage archive's @c grGroundParam public symbol, reached through
 * #StageInfo::param; see #grDatFiles_801C6038.
 *
 * @todo Most fields are still unidentified.
 */
struct GroundParam {
    float y;
    s16 x4;
    u8 x6_pad[2];
    s16 x8;
    s16 xA;
    s32 xC;
    s32 x10;
    s32 x14;
    f32 x18;
    f32 x1C, x20, x24, x28;
    u8 x2C_pad[0x2E - 0x2C];
    s16 x2E;
    s32 x30;
    s32 x34;
    s32 x38;
    f32 x3C, x40, x44, x48;
    bool x4C_fixed_cam;
    f32 x50, x54, x58, x5C, x60, x64;
    s16 x68;
    /// Read as `((s16*) param)[0x35 + j]` by Ground_801C28CC, i.e. this is an
    /// array of s16, not padding. Same 70 bytes either way.
    s16 x6A[(0xB0 - 0x6A) / 2];
    /**
     * One row per #StKind this ground serves, looked up by
     * #StageParam::stkind.
     */
    StageParam* stage_params;
    s32 stage_param_count;
    GXColor xB8;
    GXColor xBC;
    GXColor xC0;
    GXColor xC4;
    GXColor xC8;
    GXColor xCC;
    GXColor xD0;
    GXColor xD4;
    GXColor xD8;
};
struct UnkStageDatInternal {
    u8 x0_fill[0x4];
    u32 unk4; // flags
};
struct UnkStageDat_x8_t {
    /*  +0 */ struct HSD_Joint* unk0;
    /*  +4 */ HSD_AnimJoint** unk4;
    /*  +8 */ HSD_MatAnimJoint** unk8;
    /*  +C */ HSD_ShapeAnimJoint** unkC;
    /* +10 */ HSD_CameraDescPerspective* x10;
    /* +14 */ M2C_UNK x14;
    /* +18 */ LightList** x18;
    /* +1C */ HSD_FogDesc* x1C;
    /* +20 */ GrJoint* unk20;
    /* +24 */ s32 unk24; // size of unk20 array
    /* +28 */ M2C_UNK x28;
    /* +2C */ s16* x2C;
    /* +30 */ int x30;
};
struct GroundShadowEntry {
    HSD_LightAnim* unk0;
    u8 flag : 1;
};
struct UnkStageDat {
    void* unk0;
    s32 unk4;
    struct UnkStageDat_x8_t* unk8; // Suspect this may not be a consistent type
                                   // based on un_802FD708 callers
    s32 unkC;
    HSD_Spline** unk10;
    s32 unk14;
    void* unk18;
    s32 unk1C;
    struct GroundShadowEntry* unk20;
    s32 unk24;
    UnkStageDatInternal** unk28;
    s32 unk2C; // size
};
;
struct UnkArchiveStruct {
    HSD_Archive* unk0;
    UnkStageDat* unk4;
    u32 unk8;
};
struct grZebesRoute_LightData {
    Vec3 player_pos;
    Vec3 spot_pos;
    Vec3 spot_interest;
    Vec3 upper_point_pos;
    Vec3 lower_point_pos;
};
typedef struct {
    u8 b0 : 1;
    u8 b1 : 1;
    u8 b2_5 : 4;
    u8 b6 : 1;
    u8 b7 : 1;
} RouteEntryFlags;
typedef struct {
    RouteEntryFlags flags;
    u8 pad_1[3];
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    void* x28;
} RouteEntry;
/* 1DCCFC */ void grCorneria_801DCCFC(void);
/* 1DCE1C */ void grCorneria_801DCE1C(void);
/* 1DD2C0 */ void grCorneria_801DD2C0(int);
/* 1DD350 */ void grCorneria_801DD350(void);
/* 1DD478 */ void grCorneria_801DD478(void);
/* 1DD508 */ void grCorneria_801DD508(void);
/* 1DD52C */ bool grCorneria_801DD52C(void);
/* 1DD534 */ HSD_GObj* grCorneria_801DD534(int);
/* 1DD620 */ void grCorneria_801DD620(Ground_GObj*);
/* 1DD64C */ bool grCorneria_801DD64C(Ground_GObj*);
/* 1DD65C */ void grCorneria_801DD65C(Ground_GObj*);
/* 1DD674 */ void grCorneria_801DD674(Ground_GObj*);
/* 1DD9A0 */ bool grCorneria_801DD9A0(Ground_GObj*);
/* 1DD9A8 */ void grCorneria_801DD9A8(Ground_GObj*);
/* 1DDAC4 */ void grCorneria_801DDAC4(Ground_GObj*);
/* 1DDCE8 */ bool grCorneria_801DDCE8(Ground_GObj*);
/* 1DDCF0 */ void grCorneria_801DDCF0(Vec3*);
/* 1DDD4C */ void grCorneria_801DDD4C(Vec3*);
/* 1DDDA8 */ void grCorneria_801DDDA8(HSD_GObj*, Vec3*);
/* 1DDE88 */ void grCorneria_801DDE88(HSD_GObj*);
/* 1DE024 */ void grCorneria_801DE024(Ground_GObj*);
/* 1DE4C0 */ void grCorneria_Arwing_801DE4C0(Ground_GObj*);
/* 1DE560 */ bool grCorneria_801DE560(Ground_GObj*);
/* 1DE568 */ void grCorneria_801DE568(Ground_GObj*);
/* 1DE8E4 */ void grCorneria_801DE8E4(Ground_GObj*);
/* 1DEC00 */ bool grCorneria_801DEC00(Ground_GObj*);
/* 1DEC08 */ bool grCorneria_801DEC08(Vec3*);
/* 1DEC94 */ s32 grCorneria_801DEC94(Vec3*);
/* 1DED50 */ void grCorneria_801DED50(Ground_GObj*);
/* 1DF8D0 */ void grCorneria_801DF8D0(Ground_GObj*);
/* 1DFBC4 */ bool grCorneria_801DFBC4(Ground_GObj*);
/* 1DFBCC */ void grCorneria_801DFBCC(Ground_GObj*);
/* 1DFC1C */ bool grCorneria_801DFC1C(Ground_GObj*);
/* 1DFC2C */ void grCorneria_801DFC2C(Ground_GObj*);
/* 1DFC90 */ bool grCorneria_801DFC90(Ground_GObj*);
/* 1DFC98 */ void grCorneria_801DFC98(Ground_GObj*);
/* 1DFEB8 */ void grCorneria_801DFEB8(Ground_GObj*);
/* 1DFF18 */ bool grCorneria_801DFF18(Ground_GObj*);
/* 1DFF20 */ void grCorneria_801DFF20(Ground_GObj*);
/* 1E0140 */ void grCorneria_801E0140(Ground_GObj*);
/* 1E01A0 */ bool grCorneria_801E01A0(Ground_GObj*);
/* 1E01A8 */ void grCorneria_801E01A8(Ground_GObj*);
/* 1E03C8 */ M2C_UNK grCorneria_801E03C8(Ground_GObj*, int);
/* 1E0678 */ void grCorneria_801E0678(void);
/* 1E08CC */ int grCorneria_801E08CC(void);
/* 1E0A74 */ int grCorneria_801E0A74(const f32*);
/* 1E0C3C */ void grCorneria_801E0C3C(Ground_GObj*);
/* 1E0D28 */ bool grCorneria_801E0D28(Ground_GObj*);
/* 1E0D30 */ void grCorneria_801E0D30(Ground_GObj*);
/* 1E0DE4 */ void grCorneria_801E0DE4(Ground_GObj*);
/* 1E0E0C */ bool grCorneria_801E0E0C(Ground_GObj*);
/* 1E0E14 */ void grCorneria_801E0E14(Ground_GObj*);
/* 1E0E40 */ void grCorneria_801E0E40(void);
/* 1E0F34 */ void grCorneria_801E0F34(Ground_GObj*, int);
/* 1E0F64 */ bool grCorneria_801E0F64(Ground_GObj*);
/* 1E0F6C */ void grCorneria_801E0F6C(Ground_GObj*);
/* 1E1030 */ void grCorneria_801E1030(Ground_GObj*);
/* 1E1058 */ bool grCorneria_801E1058(Ground_GObj*);
/* 1E1060 */ void grCorneria_801E1060(Ground_GObj*);
/* 1E12D0 */ void fn_801E12D0(Item_GObj*, Ground*);
/* 1E12D4 */ void fn_801E12D4(Item_GObj*, Ground*, Vec3*, HSD_GObj*, f32);
/* 1E1348 */ void grCorneria_801E1348(Ground_GObj*);
/* 1E1878 */ void grCorneria_801E1878(Ground_GObj*);
/* 1E1970 */ void grCorneria_801E1970(Ground_GObj*);
/* 1E1BF0 */ HSD_GObj* grCorneria_801E1BF0(void);
/* 1E2110 */ void grCorneria_801E2110(void);
/* 1E2228 */ void grCorneria_801E2228(Ground_GObj*);
/* 1E2454 */ HSD_Generator* grCorneria_801E2454(Vec3*, s32);
/* 1E2480 */ HSD_Generator* grCorneria_801E2480(Vec3*, s32);
/* 1E24AC */ void smashTaunt_801E24AC(Ground_GObj*, intptr_t);
/* 1E2550 */ void smashTaunt_801E2550(Ground_GObj*,
                                      struct grSmashTaunt_GroundVars*);
/* 1E2598 */ s32 grCorneria_801E2598(u32, u32);
/* 1E25C4 */ void
grCorneria_801E25C4(HSD_GObj*, struct grSmashTaunt_GroundVars*, int, int, int);
/* 1E2738 */ void grCorneria_801E2738(HSD_GObj*, void*, u32, u32);
/* 1E277C */ void grCorneria_801E277C(Ground_GObj*,
                                      struct grSmashTaunt_GroundVars*);
/* 1E2A6C */ void grCorneria_801E2A6C(void);
/* 1E2AF4 */ void grCorneria_801E2AF4(void);
/* 1E2B80 */ bool grCorneria_801E2B80(void);
/* 1E2C34 */ bool grCorneria_801E2C34(void);
/* 1E2CE8 */ bool grCorneria_801E2CE8(void);
/* 1E2D14 */ bool grCorneria_801E2D14(void);
/* 1E2D90 */ bool grCorneria_801E2D90(enum_t);
/* 1E2E50 */ bool grCorneria_801E2E50(int);
/* 1E2EA0 */ f32 grCorneria_801E2EA0(void);
/* 1E2EE4 */ DynamicsDesc* grCorneria_801E2EE4(enum_t);
/* 1E2EEC */ bool grCorneria_801E2EEC(Vec3*, int, HSD_JObj*);
/* 1E2FCC */ f32 grCorneria_801E2FCC(void);
/* 3E1F08 */ extern StageData grCn_StageData;
#define GALE01_1C5FC0
/* 1C5FC0 */ void grDatFiles_801C5FC0(HSD_Archive*, void* data, size_t length);
/* 1C6038 */ void grDatFiles_801C6038(void*, s32, s32);
/* 1C6288 */ void grDatFiles_801C6288(void);
/* 1C6324 */ UnkArchiveStruct* grDatFiles_GetArchive(void);
/* 1C6330 */ UnkArchiveStruct* grDatFiles_801C6330(s32);
/* 1C6478 */ UnkArchiveStruct* grDatFiles_801C6478(void* data, s32 length);
#define GALE01_1C5B90
/* 1C5DB0 */ void grDisplay_801C5DB0(HSD_GObj*, intptr_t);
/* 1C5F60 */ void grDisplay_801C5F60(HSD_GObj* gobj, intptr_t code);
#define GALE01_1CA0B4
/* 1CA0B4 */ void grDynamicAttr_801CA0B4(void);
/* 1CA0F8 */ grDynamicAttr_UnkStruct*
grDynamicAttr_801CA0F8(s32 arg0, Vec3* v, enum_t floor_id, f32 f, s32 arg3);
/* 1CA1C0 */ void grDynamicAttr_801CA1C0(grDynamicAttr_UnkStruct* arg);
/* 1CA224 */ void grDynamicAttr_801CA224(void);
/* 1CA284 */ int grDynamicAttr_801CA284(Vec3* v, int arg1);
#define GALE01_20DFDC
/* 20E270 */ void grFigure1_8020E270(bool);
/* 3E62C0 */ extern StageData grEF1_StageData;
#define GALE01_20E274
/* 3E6370 */ extern StageData grEF2_StageData;
#define GALE01_20E504
/* 3E6420 */ extern StageData grEF3_StageData;
#define GALE01_219530
/* 219C34 */ void grFigureGet_80219C34(HSD_GObj*);
/* 219C50 */ bool grFigureGet_80219C50(HSD_GObj*);
/* 3E7D34 */ extern StageData grFigureGet_StageData;
#define GALE01_216E74
/* 216E74 */ void grFlatzone_80216E74(bool);
/* 216E78 */ void grFlatzone_80216E78(void);
/* 216F38 */ void grFlatzone_UnkStage0_OnLoad(void);
/* 216F3C */ void grFlatzone_UnkStage0_OnStart(void);
/* 216F40 */ bool grFlatzone_80216F40(void);
/* 216F48 */ HSD_GObj* grFlatzone_80216F48(s32);
/* 21705C */ bool grFlatzone_8021705C(Ground_GObj*);
/* 217064 */ void grFlatzone_80217064(Ground_GObj*);
/* 217068 */ void grFlatzone_80217068(Ground_GObj*);
/* 21707C */ void grFlatzone_8021707C(Ground_GObj*);
/* 2171CC */ bool grFlatzone_802171CC(Ground_GObj*);
/* 2171D4 */ void grFlatzone_802171D4(Ground_GObj*);
/* 2173D0 */ void grFlatzone_802173D0(Ground_GObj*);
/* 2173D4 */ void grFlatzone_802173D4(Ground_GObj*);
/* 217430 */ bool grFlatzone_80217430(Ground_GObj*);
/* 217438 */ void grFlatzone_80217438(Ground_GObj*);
/* 21743C */ void grFlatzone_8021743C(Ground_GObj*);
/* 217450 */ void grFlatzone_80217450(Ground_GObj*);
/* 2174E4 */ bool grFlatzone_802174E4(Ground_GObj*);
/* 2174EC */ void grFlatzone_802174EC(Ground_GObj*);
/* 217644 */ void grFlatzone_80217644(Ground_GObj*);
/* 217648 */ void grFlatzone_80217648(Ground_GObj*);
/* 2176B4 */ bool grFlatzone_802176B4(Ground_GObj*);
/* 2176BC */ void grFlatzone_802176BC(Ground_GObj*);
/* 217CD0 */ void grFlatzone_80217CD0(Ground_GObj*);
/* 217CD4 */ void grFlatzone_80217CD4(Ground_GObj*);
/* 217D28 */ bool grFlatzone_80217D28(Ground_GObj*);
/* 217D30 */ void grFlatzone_80217D30(Ground_GObj*);
/* 217DA4 */ void grFlatzone_80217DA4(Ground_GObj*);
/* 217DA8 */ void grFlatzone_80217DA8(Ground_GObj*);
/* 217DFC */ bool grFlatzone_80217DFC(Ground_GObj*);
/* 217E04 */ void grFlatzone_80217E04(Ground_GObj*);
/* 217E78 */ void grFlatzone_80217E78(Ground_GObj*);
/* 217E7C */ void grFlatzone_80217E7C(Ground_GObj*);
/* 217E80 */ bool grFlatzone_80217E80(Ground_GObj*);
/* 217E88 */ void grFlatzone_80217E88(Ground_GObj*);
/* 217E8C */ void grFlatzone_80217E8C(Ground_GObj*);
/* 217E90 */ void grFlatzone_80217E90(Ground_GObj*);
/* 217EE8 */ bool grFlatzone_80217EE8(Ground_GObj*);
/* 217EF0 */ void grFlatzone_80217EF0(Ground_GObj*);
/* 21805C */ void grFlatzone_8021805C(Ground_GObj*);
/* 218060 */ void grFlatzone_80218060(s32);
/* 2181B4 */ void grFlatzone_802181B4(void);
/* 218260 */ void grFlatzone_80218260(void);
/* 2182B4 */ DynamicsDesc* grFlatzone_802182B4(enum_t);
/* 2182BC */ bool grFlatzone_802182BC(Vec3*, int, HSD_JObj*);
/* 3E7A00 */ extern StageData grFz_StageData;
#define GALE01_1F2D0C
/* 1F2D0C */ void grFourside_801F2D0C(bool);
/* 1F2D10 */ void grFourside_801F2D10(void);
/* 1F2DA0 */ void grFourside_801F2DA0(void);
/* 1F2DA4 */ void grFourside_801F2DA4(void);
/* 1F2DC8 */ bool grFourside_801F2DC8(void);
/* 1F2DD0 */ HSD_GObj* grFourside_801F2DD0(int);
/* 1F2EE8 */ bool grFourside_801F2EE8(Ground_GObj*);
/* 1F2EF0 */ void grFourside_801F2EF0(Ground_GObj*);
/* 1F2EF4 */ void grFourside_801F2EF4(Ground_GObj*);
/* 1F2F24 */ bool grFourside_801F2F24(Ground_GObj*);
/* 1F2F2C */ void grFourside_801F2F2C(Ground_GObj*);
/* 1F2F30 */ void grFourside_801F2F30(Ground_GObj*);
/* 1F2F34 */ void grFourside_801F2F34(Ground_GObj*);
/* 1F3070 */ bool grFourside_801F3070(Ground_GObj*);
/* 1F3078 */ void grFourside_801F3078(Ground_GObj*);
/* 1F309C */ void grFourside_801F309C(Ground_GObj*);
/* 1F30F0 */ void grFourside_801F30F0(Ground_GObj*);
/* 1F3144 */ bool grFourside_801F3144(Ground_GObj*);
/* 1F314C */ void grFourside_801F314C(Ground_GObj*);
/* 1F3150 */ void grFourside_801F3150(Ground_GObj*);
/* 1F3154 */ void grFourside_801F3154(Ground_GObj*);
/* 1F326C */ bool grFourside_801F326C(Ground_GObj*);
/* 1F3274 */ void grFourside_801F3274(Ground_GObj*);
/* 1F37F8 */ void grFourside_801F37F8(Ground_GObj*);
/* 1F37FC */ void grFourside_801F37FC(Ground_GObj*);
/* 1F388C */ bool grFourside_801F388C(Ground_GObj*);
/* 1F3894 */ void grFourside_801F3894(Ground_GObj*);
/* 1F3B6C */ void grFourside_801F3B6C(Ground_GObj*);
/* 1F3B70 */ void grFourside_801F3B70(Ground_GObj*);
/* 1F3C40 */ void grFourside_801F3C40(Ground_GObj*);
/* 1F3CC0 */ bool grFourside_801F3CC0(Ground_GObj*);
/* 1F3CC8 */ void grFourside_801F3CC8(Ground_GObj*);
/* 1F3F0C */ void grFourside_801F3F0C(Ground_GObj*);
/* 1F3F10 */ int grFourside_801F3F10(void);
/* 1F3F74 */ void fn_801F3F74(HSD_GObj*, intptr_t);
/* 1F41E0 */ DynamicsDesc* grFourside_801F41E0(enum_t);
/* 1F41E8 */ bool grFourside_801F41E8(Vec3* a, int arg, HSD_JObj* joint);
/* 3E3D94 */ extern StageData grFs_StageData;
#define MELEE_GR_GRFZEROCAR_H
/* 1CAFBC */ void grFZeroCar_801CAFBC(HSD_GObj*, void*, s32, s32);
#define GALE01_202B6C
/* 202B6C */ void grGarden_80202B6C(bool);
/* 202B70 */ void grGarden_80202B70(void);
/* 202C24 */ void grGarden_80202C24(void);
/* 202C4C */ void grGarden_80202C4C(void);
/* 202C70 */ bool grGarden_80202C70(void);
/* 202C78 */ Ground_GObj* grGarden_80202C78(int gobj_id);
/* 202D8C */ bool grGarden_80202D8C(Ground_GObj*);
/* 202D94 */ void grGarden_80202D94(Ground_GObj*);
/* 202D98 */ void grGarden_80202D98(Ground_GObj*);
/* 202D9C */ void grGarden_80202D9C(Ground_GObj*);
/* 202DC8 */ void grGarden_80202DC8(Ground_GObj*);
/* 202E40 */ bool grGarden_80202E40(Ground_GObj*);
/* 202E48 */ void grGarden_80202E48(Ground_GObj*);
/* 202E68 */ void grGarden_80202E68(Ground_GObj*);
/* 202E6C */ void grGarden_80202E6C(Ground_GObj*);
/* 202F34 */ bool grGarden_80202F34(Ground_GObj*);
/* 202F3C */ void grGarden_80202F3C(Ground_GObj*);
/* 202F40 */ void grGarden_80202F40(Ground_GObj*);
/* 202F44 */ void grGarden_80202F44(Ground_GObj*);
/* 202F94 */ bool grGarden_80202F94(Ground_GObj*);
/* 202F9C */ void grGarden_80202F9C(Ground_GObj*);
/* 202FA0 */ void grGarden_80202FA0(Ground_GObj*);
/* 202FA4 */ void grGarden_80202FA4(Ground_GObj*);
/* 202FF4 */ bool grGarden_80202FF4(Ground_GObj*);
/* 202FFC */ void grGarden_80202FFC(Ground_GObj*);
/* 203000 */ void grGarden_80203000(Ground_GObj*);
/* 203004 */ void grGarden_80203004(Ground_GObj*);
/* 203090 */ bool grGarden_80203090(Ground_GObj*);
/* 203098 */ void grGarden_80203098(Ground_GObj*);
/* 2031A0 */ void grGarden_802031A0(Ground_GObj*);
/* 2031A4 */ void grGarden_802031A4(Ground_GObj*);
/* 203248 */ bool grGarden_80203248(Ground_GObj*);
/* 203250 */ void grGarden_80203250(Ground_GObj*);
/* 203494 */ void grGarden_80203494(Ground_GObj*);
/* 203498 */ void grGarden_80203498(Item_GObj* item_gobj, Ground* gp);
/* 20349C */ bool grGarden_8020349C(u32 unk, HSD_GObj* player, Vec3* water);
/* 203560 */ void grGarden_80203560(float param1, Vec3* vec);
/* 2035C8 */ DynamicsDesc* grGarden_802035C8(enum_t);
/* 2035D0 */ bool grGarden_802035D0(Vec3*, int arg, HSD_JObj* jobj);
/* 203624 */ float grGarden_80203624(void);
/* 3E52E0 */ extern StageData grGd_StageData;
#define GALE01_1F423C
/* 1F423C */ void grGreatBay_801F423C(bool);
/* 1F4240 */ void grGreatBay_801F4240(void);
/* 1F42D0 */ void grGreatBay_801F42D0(void);
/* 1F42D4 */ void grGreatBay_801F42D4(void);
/* 1F42F8 */ bool grGreatBay_801F42F8(void);
/* 1F4300 */ HSD_GObj* grGreatBay_801F4300(int);
/* 1F4430 */ bool grGreatBay_801F4430(Ground_GObj*);
/* 1F4438 */ void grGreatBay_801F4438(Ground_GObj*);
/* 1F443C */ void grGreatBay_801F443C(Ground_GObj*);
/* 1F4440 */ void grGreatBay_801F4440(Ground_GObj*);
/* 1F44A0 */ bool grGreatBay_801F44A0(Ground_GObj*);
/* 1F44A8 */ void grGreatBay_801F44A8(Ground_GObj*);
/* 1F44AC */ void grGreatBay_801F44AC(Ground_GObj*);
/* 1F44B0 */ void grGreatBay_801F44B0(Ground_GObj*);
/* 1F4510 */ bool grGreatBay_801F4510(Ground_GObj*);
/* 1F4518 */ void grGreatBay_801F4518(Ground_GObj*);
/* 1F451C */ void grGreatBay_801F451C(Ground_GObj*);
/* 1F4520 */ void fn_801F4520(HSD_GObj*);
/* 1F454C */ void grGreatBay_801F454C(Ground_GObj*);
/* 1F4650 */ bool grGreatBay_801F4650(Ground_GObj*);
/* 1F4658 */ void grGreatBay_801F4658(Ground_GObj*);
/* 1F4690 */ void grGreatBay_801F4690(Ground_GObj*);
/* 1F4694 */ void grGreatBay_801F4694(Ground_GObj*);
/* 1F4994 */ bool grGreatBay_801F4994(Ground_GObj*);
/* 1F499C */ void grGreatBay_801F499C(Ground_GObj*);
/* 1F545C */ void grGreatBay_801F545C(Ground_GObj*);
/* 1F5460 */ void grGreatBay_801F5460(Ground_GObj*);
/* 1F55F8 */ bool grGreatBay_801F55F8(Ground_GObj*);
/* 1F5600 */ void grGreatBay_801F5600(Ground_GObj*);
/* 1F5988 */ void grGreatBay_801F5988(Ground_GObj*);
/* 1F598C */ void grGreatBay_801F598C(Ground_GObj*);
/* 1F59F0 */ bool grGreatBay_801F59F0(Ground_GObj*);
/* 1F59F8 */ void grGreatBay_801F59F8(Ground_GObj*);
/* 1F59FC */ void grGreatBay_801F59FC(Ground_GObj*);
/* 1F5A00 */ void grGreatBay_801F5A00(Ground_GObj*);
/* 1F5AF0 */ bool grGreatBay_801F5AF0(Ground_GObj*);
/* 1F5AF8 */ void grGreatBay_801F5AF8(Ground_GObj*);
/* 1F5D48 */ void grGreatBay_801F5D48(Ground_GObj*);
/* 1F5D4C */ void grGreatBay_801F5D4C(HSD_GObj*);
/* 1F5E28 */ void grGreatBay_801F5E28(HSD_GObj*);
/* 1F62F8 */ s32 grGreatBay_801F62F8(s32);
/* 1F63F4 */ bool grGreatBay_801F63F4(Ground_GObj*);
/* 1F660C */ void grGreatBay_801F660C(Ground_GObj*);
/* 1F66A4 */ bool grGreatBay_801F66A4(void);
/* 1F6708 */ bool grGreatBay_801F6708(u32, HSD_GObj*);
/* 1F67A4 */ void grGreatBay_801F67A4(Vec3*, f32);
/* 1F680C */ DynamicsDesc* grGreatBay_801F680C(enum_t);
/* 1F6814 */ bool grGreatBay_801F6814(Vec3*, int _, HSD_JObj*);
/* 3E3F6C */ extern StageData grGb_StageData;
#define GALE01_213458
/* 213458 */ void grGreens_80213458(bool);
/* 213464 */ void grGreens_Init(void);
/* 2134F4 */ void grGreens_802134F4(void);
/* 2134F8 */ void grGreens_802134F8(void);
/* 21351C */ bool grGreens_8021351C(void);
/* 213524 */ Ground_GObj* grGreens_80213524(int);
/* 21360C */ void grGreens_8021360C(Ground_GObj*);
/* 2138AC */ bool grGreens_802138AC(Ground_GObj*);
/* 2138B4 */ void grGreens_802138B4(Ground_GObj*);
/* 2138B8 */ void grGreens_802138B8(Ground_GObj*);
/* 2138BC */ void grGreens_802138BC(Ground_GObj*);
/* 213900 */ bool grGreens_80213900(Ground_GObj*);
/* 213908 */ void grGreens_80213908(Ground_GObj*);
/* 21390C */ void grGreens_8021390C(Ground_GObj*);
/* 21393C */ bool grGreens_8021393C(Ground_GObj*);
/* 213944 */ void grGreens_80213944(Ground_GObj*);
/* 213948 */ void grGreens_80213948(Ground_GObj*);
/* 213978 */ bool grGreens_80213978(Ground_GObj*);
/* 213980 */ void grGreens_80213980(Ground_GObj*);
/* 213984 */ void grGreens_80213984(Ground_GObj*);
/* 213988 */ void grGreens_80213988(Ground_GObj*);
/* 2139B4 */ bool grGreens_802139B4(Ground_GObj*);
/* 2139BC */ void grGreens_802139BC(Ground_GObj*);
/* 2139C0 */ void grGreens_802139C0(Ground_GObj*);
/* 2139C4 */ void grGreens_802139C4(Ground_GObj*);
/* 213AAC */ bool grGreens_80213AAC(Ground_GObj*);
/* 213AB4 */ bool grGreens_80213AB4(Vec* vec, f32 maxX, f32 minX, f32 maxY,
                                    f32 minY);
/* 213B1C */ bool fn_80213B1C(Ground_GObj* ground_gobj,
                              Fighter_GObj* fighter_gobj, Vec* vec);
/* 213C10 */ void grGreens_80213C10(Ground_GObj*);
/* 214654 */ void grGreens_80214654(Ground_GObj*);
/* 214658 */ void fn_80214658(Ground_GObj*);
/* 214674 */ void grGreens_80214674(Ground_GObj*);
/* 214794 */ bool grGreens_80214794(Ground_GObj*);
/* 21479C */ void grGreens_8021479C(Ground_GObj*);
/* 214804 */ void grGreens_80214804(Ground_GObj*);
/* 21483C */ void grGreens_8021483C(Ground_GObj*);
/* 214B58 */ void grGreens_80214B58(Ground_GObj*);
/* 214FA8 */ void grGreens_80214FA8(Ground_GObj*);
/* 2150C4 */ void grGreens_802150C4(Ground_GObj*, int, int);
/* 215358 */ void grGreens_80215358(Ground_GObj*, int, int, int, int);
/* 2159B4 */ void fn_802159B4(Item_GObj*, Ground*);
/* 2159B8 */ void grGreens_802159B8(Ground*, int, int, HSD_GObj*);
/* 215B84 */ void fn_80215B84(Item_GObj*, Ground*, Vec*, HSD_GObj*, float);
/* 215D50 */ void fn_80215D50(Item_GObj*, Ground*, HSD_GObj*);
/* 215D54 */ s32 grGreens_80215D54(Ground_GObj*, int, int);
/* 215ED8 */ void grGreens_80215ED8(Ground_GObj*, int, int);
/* 2166C4 */ void grGreens_802166C4(Ground_GObj*);
/* 216C20 */ void grGreens_80216C20(Ground_GObj*);
/* 216E64 */ DynamicsDesc* grGreens_80216E64(enum_t);
/* 216E6C */ bool grGreens_80216E6C(Vec3*, int arg, HSD_JObj* jobj);
/* 3E76D0 */ extern StageData grGr_StageData;
#define GALE01_21EF38
/* 3E84C4 */ extern StageData grHeal_StageData;
#define GALE01_21C750
/* 21C750 */ void grHomeRun_8021C750(bool);
/* 21C754 */ void grHomeRun_8021C754(void);
/* 21C7FC */ void grHomeRun_8021C7FC(void);
/* 21C800 */ void grHomeRun_8021C800(void);
/* 21C824 */ bool grHomeRun_8021C824(void);
/* 21C82C */ HSD_GObj* grHomeRun_8021C82C(int);
/* 21C914 */ void grHomeRun_8021C914(Ground_GObj*);
/* 21CB10 */ bool grHomeRun_8021CB10(Ground_GObj*);
/* 21CB18 */ void grHomeRun_8021CB18(Ground_GObj*);
/* 21CB1C */ void grHomeRun_8021CB1C(Ground_GObj*);
/* 21CB20 */ void grHomeRun_8021CB20(Ground_GObj*);
/* 21D678 */ bool grHomeRun_8021D678(Ground_GObj*);
/* 21D680 */ void grHomeRun_8021D680(Ground_GObj*);
/* 21DEB0 */ void grHomeRun_8021DEB0(Ground_GObj*);
/* 21DEB4 */ void grHomeRun_8021DEB4(Ground_GObj*);
/* 21DEE0 */ bool grHomeRun_8021DEE0(Ground_GObj*);
/* 21DEE8 */ void grHomeRun_8021DEE8(Ground_GObj*);
/* 21DEEC */ void grHomeRun_8021DEEC(Ground_GObj*);
/* 21DEF0 */ void grHomeRun_8021DEF0(Ground_GObj*);
/* 21DF48 */ bool grHomeRun_8021DF48(Ground_GObj*);
/* 21DF50 */ void grHomeRun_8021DF50(Ground_GObj*);
/* 21E008 */ void grHomeRun_8021E008(Ground_GObj*);
/* 21E038 */ void grHomeRun_8021E038(Ground_GObj*);
/* 21E064 */ bool grHomeRun_8021E064(Ground_GObj*);
/* 21E06C */ void grHomeRun_8021E06C(Ground_GObj*);
/* 21E070 */ void grHomeRun_8021E070(Ground_GObj*);
/* 21E074 */ void grHomeRun_8021E074(Ground_GObj*);
/* 21E0CC */ bool grHomeRun_8021E0CC(Ground_GObj*);
/* 21E0D4 */ void grHomeRun_8021E0D4(Ground_GObj*);
/* 21E18C */ void grHomeRun_8021E18C(Ground_GObj*);
/* 21E1BC */ void grHomeRun_8021E1BC(Ground_GObj*);
/* 21E1E8 */ bool grHomeRun_8021E1E8(Ground_GObj*);
/* 21E1F0 */ void grHomeRun_8021E1F0(Ground_GObj*);
/* 21E1F4 */ void grHomeRun_8021E1F4(Ground_GObj*);
/* 21E1F8 */ void grHomeRun_8021E1F8(Ground_GObj*);
/* 21E250 */ bool grHomeRun_8021E250(Ground_GObj*);
/* 21E258 */ void grHomeRun_8021E258(Ground_GObj*);
/* 21E310 */ void grHomeRun_8021E310(Ground_GObj*);
/* 21E340 */ void grHomeRun_8021E340(Ground_GObj*);
/* 21E36C */ bool grHomeRun_8021E36C(Ground_GObj*);
/* 21E374 */ void grHomeRun_8021E374(Ground_GObj*);
/* 21E378 */ void grHomeRun_8021E378(Ground_GObj*);
/* 21E37C */ void grHomeRun_8021E37C(Ground_GObj*);
/* 21E3D4 */ bool grHomeRun_8021E3D4(Ground_GObj*);
/* 21E3DC */ void grHomeRun_8021E3DC(Ground_GObj*);
/* 21E494 */ void grHomeRun_8021E494(Ground_GObj*);
/* 21E4C4 */ void grHomeRun_8021E4C4(Ground_GObj*);
/* 21E4F0 */ bool grHomeRun_8021E4F0(Ground_GObj*);
/* 21E4F8 */ void grHomeRun_8021E4F8(Ground_GObj*);
/* 21E4FC */ void grHomeRun_8021E4FC(Ground_GObj*);
/* 21E500 */ HSD_GObj* grHomeRun_8021E500(int);
/* 21EA30 */ void grHomeRun_8021EA30(const f32*);
/* 21EAF8 */ void grHomeRun_8021EAF8(void);
/* 21EB10 */ void fn_8021EB10(HSD_GObj* gobj, intptr_t code);
/* 21EC58 */ HSD_Text* grHomeRun_8021EC58(int);
/* 21ED74 */ void grHomeRun_8021ED74(void);
/* 21EDD4 */ void grHomeRun_8021EDD4(void);
/* 21EEB4 */ DynamicsDesc* grHomeRun_8021EEB4(enum_t);
/* 21EEBC */ bool grHomeRun_8021EEBC(Vec3*, int arg, HSD_JObj* jobj);
/* 21EF10 */ float grHomeRun_8021EF10(void);
/* 3E821C */ extern StageData grHr_StageData;
#define GALE01_1F6868
/* 1FA6D8 */ void grIceMt_801FA6D8(void);
/* 1FA728 */ void grIceMt_801FA728(Vec3*);
/* 3E4800 */ extern StageData grIm_StageData;
#define GALE01_1FA908
/* 1FCAAC */ bool grInishie1_801FCAAC(int);
/* 3E4950 */ extern StageData grI1_StageData;
#define GALE01_1FCBC0
/* 1FCBC0 */ void grInishie2_801FCBC0(bool);
/* 1FCBC4 */ void grInishie2_801FCBC4(void);
/* 1FCCAC */ void grInishie2_801FCCAC(void);
/* 1FCCB0 */ void grInishie2_801FCCB0(void);
/* 1FCCD4 */ bool grInishie2_801FCCD4(void);
/* 1FCCDC */ HSD_GObj* grInishie2_801FCCDC(int);
/* 1FCDF4 */ bool grInishie2_801FCDF4(Ground_GObj*);
/* 1FCDFC */ void grInishie2_801FCDFC(Ground_GObj*);
/* 1FCE00 */ void grInishie2_801FCE00(Ground_GObj*);
/* 1FCE04 */ void grInishie2_801FCE04(Ground_GObj*);
/* 1FCF24 */ bool grInishie2_801FCF24(Ground_GObj*);
/* 1FCF2C */ void grInishie2_801FCF2C(HSD_GObj*);
/* 1FCFCC */ void grInishie2_801FCFCC(Ground_GObj*);
/* 1FD014 */ void grInishie2_801FD014(Ground_GObj*);
/* 1FD018 */ void grInishie2_801FD018(HSD_GObj*);
/* 1FD0B4 */ void grInishie2_801FD0B4(HSD_GObj*);
/* 1FD198 */ void grInishie2_801FD198(Ground_GObj*);
/* 1FD21C */ bool grInishie2_801FD21C(Ground_GObj*);
/* 1FD224 */ void grInishie2_801FD224(Ground_GObj*);
/* 1FD364 */ void grInishie2_801FD364(Ground_GObj*);
/* 1FD368 */ void grInishie2_801FD368(HSD_GObj*);
/* 1FD3CC */ void grInishie2_801FD3CC(HSD_GObj*);
/* 1FD448 */ void grInishie2_801FD448(HSD_GObj*);
/* 1FD4CC */ void grInishie2_801FD4CC(HSD_GObj*);
/* 1FD4F0 */ void grInishie2_801FD4F0(Ground_GObj*);
/* 1FD64C */ bool grInishie2_801FD64C(Ground_GObj*);
/* 1FD654 */ void grInishie2_801FD654(Ground_GObj*);
/* 1FD740 */ void grInishie2_801FD740(Ground_GObj*);
/* 1FD744 */ void grInishie2_801FD744(HSD_GObj*);
/* 1FD7A8 */ void grInishie2_801FD7A8(HSD_GObj*);
/* 1FD824 */ void grInishie2_801FD824(HSD_GObj*);
/* 1FD9EC */ void grInishie2_801FD9EC(HSD_GObj*);
/* 1FDE8C */ void grInishie2_801FDE8C(Ground_GObj*);
/* 1FDED0 */ bool grInishie2_801FDED0(Ground_GObj*);
/* 1FDED8 */ void grInishie2_801FDED8(Ground_GObj*);
/* 1FDFB4 */ s32 grInishie2_801FDFB4(s32);
/* 1FDFE4 */ void grInishie2_801FDFE4(Ground_GObj*);
/* 1FDFE8 */ DynamicsDesc* grInishie2_801FDFE8(enum_t);
/* 1FDFF0 */ bool grInishie2_801FDFF0(Vec3*, int arg, HSD_JObj* jobj);
/* 3E4C00 */ extern StageData grI2_StageData;
#define GALE01_1CBB84
/* 1CBB84 */ void grIzumi_801CBB84(bool);
/* 1CBB88 */ void grIzumi_801CBB88(void);
/* 1CBC0C */ void grIzumi_OnLoad(void);
/* 1CBCBC */ void grIzumi_OnStart(void);
/* 1CBCE0 */ bool grIzumi_801CBCE0(void);
/* 1CBCE8 */ HSD_GObj* grIzumi_801CBCE8(int gobj_id);
/* 1CBDD4 */ void grIzumi_801CBDD4(Ground_GObj* gobj);
/* 1CBE00 */ bool grIzumi_801CBE00(Ground_GObj* gobj);
/* 1CBE08 */ void grIzumi_801CBE08(Ground_GObj* gobj);
/* 1CBE0C */ void grIzumi_801CBE0C(Ground_GObj* gobj);
/* 1CBE10 */ void grIzumi_801CBE10(Ground_GObj* gobj);
/* 1CBE54 */ bool grIzumi_801CBE54(Ground_GObj* gobj);
/* 1CBE5C */ void grIzumi_801CBE5C(Ground_GObj* gobj);
/* 1CBE60 */ void grIzumi_801CBE60(Ground_GObj* gobj);
/* 1CBE64 */ void grIzumi_801CBE64(Ground_GObj* gobj);
/* 1CC0CC */ bool grIzumi_801CC0CC(Ground_GObj* gobj);
/* 1CC0D4 */ void grIzumi_801CC0D4(Ground_GObj* gobj);
/* 1CC338 */ void grIzumi_801CC338(Ground_GObj* gobj);
/* 1CC33C */ void grIzumi_801CC33C(Ground_GObj* gobj);
/* 1CC350 */ bool grIzumi_801CC350(Ground_GObj* gobj);
/* 1CC358 */ void grIzumi_801CC358(Ground_GObj* gobj);
/* 1CCA10 */ void grIzumi_801CCA10(Ground_GObj* gobj);
/* 1CCA14 */ void grIzumi_801CCA14(Ground_GObj* gobj);
/* 1CCA54 */ bool grIzumi_801CCA54(Ground_GObj* gobj);
/* 1CCA5C */ void grIzumi_801CCA5C(Ground_GObj* gobj);
/* 1CCA60 */ void grIzumi_801CCA60(Ground_GObj* gobj);
/* 1CCA64 */ void grIzumi_801CCA64(Ground_GObj* gobj);
/* 1CCB08 */ bool grIzumi_801CCB08(Ground_GObj* gobj);
/* 1CCB10 */ void grIzumi_801CCB10(Ground_GObj* gobj);
/* 1CCB14 */ void grIzumi_801CCB14(Ground_GObj* gobj);
/* 1CCB18 */ void grIzumi_801CCB18(HSD_GObj* gobj);
/* 1CCB90 */ void grIzumi_801CCB90(HSD_GObj* gobj, intptr_t renderpass);
/* 1CCBDC */ HSD_GObj* grIzumi_801CCBDC(float height, Vec3* a, int b,
                                        HSD_JObj* jobj);
/* 1CCD98 */ HSD_GObj* grIzumi_801CCD98(void);
/* 1CCEA0 */ void grIzumi_801CCEA0(HSD_GObj* gobj, intptr_t renderpass);
/* 1CD090 */ HSD_TObj* grIzumi_801CD090(HSD_GObj* gobj, HSD_ImageDesc* image);
/* 1CD220 */ void grIzumi_801CD220(HSD_GObj* gobj, intptr_t);
/* 1CD278 */ DynamicsDesc* grIzumi_801CD278(enum_t);
/* 1CD280 */ bool grIzumi_801CD280(Vec3*, int, HSD_JObj*);
/* 1CD2D4 */ void grIzumi_801CD2D4(void);
/* 3E0E5C */ extern StageData grIz_StageData;
#define GALE01_20741C
/* 20741C */ void grKinokoRoute_8020741C(bool);
/* 207420 */ void grKinokoRoute_80207420(void);
/* 207490 */ void grKinokoRoute_80207490(void);
/* 2074D8 */ void grKinokoRoute_802074D8(void);
/* 207544 */ bool grKinokoRoute_80207544(void);
/* 20754C */ Ground_GObj* grKinokoRoute_8020754C(int);
/* 207634 */ void grKinokoRoute_80207634(Ground_GObj*);
/* 2078E8 */ bool grKinokoRoute_802078E8(Ground_GObj*);
/* 2078F0 */ void grKinokoRoute_802078F0(Ground_GObj*);
/* 207A94 */ void grKinokoRoute_80207A94(Ground_GObj*);
/* 207A98 */ void grKinokoRoute_80207A98(Ground_GObj*);
/* 207ACC */ bool grKinokoRoute_80207ACC(Ground_GObj*);
/* 207AD4 */ void grKinokoRoute_80207AD4(Ground_GObj*);
/* 207AD8 */ void grKinokoRoute_80207AD8(Ground_GObj*);
/* 207ADC */ void grKinokoRoute_80207ADC(Ground_GObj*);
/* 207B20 */ bool grKinokoRoute_80207B20(Ground_GObj*);
/* 207B28 */ void grKinokoRoute_80207B28(Ground_GObj*);
/* 207B2C */ void grKinokoRoute_80207B2C(Ground_GObj*);
/* 207B30 */ void grKinokoRoute_80207B30(Ground_GObj*);
/* 207B5C */ void grKinokoRoute_80207B5C(Ground_GObj*);
/* 207C80 */ bool grKinokoRoute_80207C80(Ground_GObj*);
/* 207C88 */ void grKinokoRoute_80207C88(Ground_GObj*);
/* 208368 */ void grKinokoRoute_80208368(Ground_GObj*);
/* 20836C */ void grKinokoRoute_8020836C(Ground_GObj*, int);
/* 208480 */ bool grKinokoRoute_80208480(bool);
/* 2084B4 */ void grKinokoRoute_802084B4(Ground_GObj*);
/* 208564 */ void grKinokoRoute_80208564(Ground_GObj*);
/* 208660 */ bool grKinokoRoute_80208660(int unused, Fighter_GObj*);
/* 2086EC */ void grKinokoRoute_802086EC(Vec3*, f32);
/* 208754 */ DynamicsDesc* grKinokoRoute_80208754(enum_t);
/* 20875C */ bool grKinokoRoute_8020875C(Vec3*, int arg, HSD_JObj* jobj);
/* 2087B0 */ float grKinokoRoute_802087B0(void);
/* 3E584C */ extern StageData grNKr_StageData;
#define GALE01_1D5238
extern GrJoint grKg_803E16E0[6];
extern StageCallbacks grKg_StageCallbacks[12];
/// A dat file index and the index of a spline within that file's
/// spline table, as taken by #Ground_801C247C.
typedef struct grKg_SplineChoice {
    s32 file;
    s32 spline;
} grKg_SplineChoice;
typedef struct grKg_SplineChoiceList {
    grKg_SplineChoice pairs[3];
    s32 terminator;
} grKg_SplineChoiceList;
struct grKongo_YakumonoParam {
    f32 unk0;
    f32 unk4;
    f32 unk8;
    f32 unkC;
    f32 unk10;
    f32 unk14;
    f32 unk18;
    f32 unk1C;
    f32 unk20;
    f32 unk24;
    f32 unk28;
    f32 unk2C;
    f32 unk30;
    f32 unk34;
    f32 unk38;
    f32 unk3C;
    f32 unk40;
    s16 unk44;
    s16 unk46;
    s16 unk48;
    s16 unk4A;
    s16 unk4C;
    s16 unk4E;
    s16 unk50;
    s16 unk52;
    f32 unk54;
    f32 unk58;
    f32 unk5C;
    f32 unk60;
    s32 unk64;
    s32 unk68;
    f32 unk6C;
    f32 unk70;
    f32 unk74;
    f32 unk78;
    f32 unk7C;
    f32 unk80;
    void* unk84;
    f32 unk88;
    f32 unk8C;
    f32 unk90;
    f32 unk94;
    f32 unk98;
    f32 unk9C;
    f32 unkA0;
    f32 unkA4;
    f32 unkA8;
    f32 unkAC;
    f32 unkB0;
    f32 unkB4;
    f32 unkB8;
};
extern const grKg_SplineChoiceList grKg_803B7FD4;
static struct grKongo_YakumonoParam* yakumono_param;
/* 1D5238 */ void grKongo_801D5238(bool);
/* 1D523C */ void grKongo_801D523C(void);
/* 1D52F8 */ void grKongo_801D52F8(void);
/* 1D52FC */ void grKongo_801D52FC(void);
/* 1D5338 */ bool grKongo_801D5338(void);
/* 1D5340 */ Ground_GObj* grKongo_801D5340(int gobj_id);
/* 1D542C */ void fn_801D542C(HSD_GObj*);
/* 1D5490 */ void grKongo_801D5490(Ground_GObj*);
/* 1D5574 */ bool grKongo_801D5574(Ground_GObj*);
/* 1D557C */ void grKongo_801D557C(Ground_GObj*);
/* 1D55D4 */ void grKongo_801D55D4(Ground_GObj*);
/* 1D55D8 */ void grKongo_801D55D8(Ground_GObj*);
/* 1D5774 */ bool grKongo_801D5774(Ground_GObj*);
/* 1D577C */ void grKongo_801D577C(Ground_GObj*);
/* 1D5FA4 */ void grKongo_801D5FA4(Ground_GObj*);
/* 1D5FA8 */ void grKongo_801D5FA8(Ground_GObj*);
/* 1D5FD4 */ bool grKongo_801D5FD4(Ground_GObj*);
/* 1D5FDC */ void grKongo_801D5FDC(Ground_GObj*);
/* 1D5FE0 */ void grKongo_801D5FE0(Ground_GObj*);
/* 1D5FE4 */ void grKongo_801D5FE4(Ground_GObj*);
/* 1D6028 */ bool grKongo_801D6028(Ground_GObj*);
/* 1D6030 */ void grKongo_801D6030(Ground_GObj*);
/* 1D6034 */ void grKongo_801D6034(Ground_GObj*);
/* 1D6038 */ void grKongo_801D6038(Ground_GObj*);
/* 1D6064 */ bool grKongo_801D6064(Ground_GObj*);
/* 1D606C */ void grKongo_801D606C(Ground_GObj*);
/* 1D6070 */ void grKongo_801D6070(Ground_GObj*);
/* 1D6074 */ void grKongo_801D6074(Ground_GObj*);
/* 1D6190 */ bool grKongo_801D6190(Ground_GObj*);
/* 1D6198 */ void grKongo_801D6198(Ground_GObj*);
/* 1D6378 */ void grKongo_801D6378(Ground_GObj*);
/* 1D637C */ void grKongo_801D637C(Ground_GObj*);
/* 1D64B4 */ bool grKongo_801D64B4(Ground_GObj*);
/* 1D64BC */ void grKongo_801D64BC(Ground_GObj*);
/* 1D6518 */ void grKongo_801D6518(Ground_GObj*);
/* 1D651C */ void grKongo_801D651C(Ground_GObj*);
/* 1D6660 */ bool grKongo_801D6660(Ground_GObj*);
/* 1D6668 */ void grKongo_801D6668(Ground_GObj*);
/* 1D69AC */ void grKongo_801D69AC(Ground_GObj*);
/* 1D69B0 */ void grKongo_801D69B0(HSD_GObj*);
/* 1D6AFC */ void grKongo_801D6AFC(void);
/* 1D7134 */ void grKongo_801D7134(HSD_GObj*, s32);
/* 1D77E0 */ void grKongo_801D77E0(HSD_GObj*, s32);
/* 1D7BBC */ void grKongo_801D7BBC(HSD_GObj*);
/* 1D7E78 */ Vec3* grKongo_801D7E78(HSD_GObj*, Vec3*);
/* 1D7F78 */ bool grKongo_801D7F78(HSD_GObj*);
/* 1D8058 */ void grKongo_801D8058(Ground_GObj*);
/* 1D8078 */ HSD_GObj* grKongo_801D8078(HSD_GObj*);
/* 1D8270 */ void grKongo_801D8270(Ground_GObj*);
/* 1D828C */ void grKongo_801D828C(HSD_GObj*);
/* 1D8314 */ f32 grKongo_801D8314(void);
/* 1D844C */ bool grKongo_801D844C(Vec3*, int arg, HSD_JObj* jobj);
/* 3E1800 */ extern StageData grKg_StageData;
#define GALE01_1FDFF8
/* 1FDFF8 */ void grKraid_OnDemoInit(bool);
/* 1FDFFC */ void grKraid_OnInit(void);
/* 1FE094 */ void grKraid_OnLoad(void);
/* 1FE098 */ void grKraid_OnStart(void);
/* 1FE0BC */ bool grKraid_801FE0BC(void);
/* 1FE0C4 */ HSD_GObj* grKraid_801FE0C4(int);
/* 1FE1DC */ bool grKraid_801FE1DC(Ground_GObj*);
/* 1FE1E4 */ void grKraid_801FE1E4(Ground_GObj*);
/* 1FE1E8 */ void grKraid_801FE1E8(Ground_GObj*);
/* 1FE1EC */ void grKraid_801FE1EC(Ground_GObj*);
/* 1FE2C8 */ bool grKraid_801FE2C8(Ground_GObj*);
/* 1FE2D0 */ void grKraid_801FE2D0(Ground_GObj*);
/* 1FE35C */ void grKraid_801FE35C(Ground_GObj*);
/* 1FE360 */ void grKraid_801FE360(Ground_GObj*);
/* 1FE3A4 */ bool grKraid_801FE3A4(Ground_GObj*);
/* 1FE3AC */ void grKraid_801FE3AC(Ground_GObj*);
/* 1FE3B0 */ void grKraid_801FE3B0(Ground_GObj*);
/* 1FE3B4 */ void grKraid_801FE3B4(Ground_GObj*);
/* 1FE438 */ bool grKraid_801FE438(Ground_GObj*);
/* 1FE440 */ void grKraid_801FE440(Ground_GObj*);
/* 1FE6D4 */ void grKraid_801FE6D4(Ground_GObj*);
/* 1FE6D8 */ void grKraid_801FE6D8(HSD_JObj*, float);
/* 1FE818 */ void grKraid_801FE818(Ground_GObj*);
/* 1FE9F8 */ bool grKraid_801FE9F8(Ground_GObj*);
/* 1FEA00 */ void grKraid_801FEA00(Ground_GObj*);
/* 1FEE54 */ void grKraid_801FEE54(Ground_GObj*);
/* 1FF068 */ void grKraid_801FF068(HSD_GObj*, int);
/* 1FF0E0 */ bool grKraid_801FF0E0(Ground_GObj*, int flag);
/* 1FF14C */ void grKraid_801FF14C(Ground_GObj*);
/* 1FF150 */ void grKraid_801FF150(Ground_GObj*);
/* 1FF154 */ DynamicsDesc* grKraid_OnTouchLine(enum_t);
/* 1FF15C */ bool grKraid_OnCheckShadowRender(Vec3*, int, HSD_JObj*);
/* 3E4D0C */ extern StageData grKr_StageData;
#define GALE01_21A620
/* 3E7F90 */ extern StageData grNLa_StageData;
#define GALE01_1C96E8
#define _mtx_h_
#define VEC2_SQ_LEN(v) ((SQ((v).x) + SQ((v).y)))
#define VEC3_SQ_LEN(v) ((SQ((v).x) + SQ((v).y) + SQ((v).z)))
typedef Vec3 VecMtx[4];
typedef Vec3* VecMtxPtr;
void HSD_MtxInverse(Mtx src, Mtx dest);
void HSD_MtxInverseConcat(Mtx inv, Mtx src, Mtx dest);
void HSD_MtxInverseTranspose(Mtx src, Mtx dest);
void HSD_MtxGetRotation(Mtx m, Vec3* vec);
void HSD_MtxGetTranslate(Mtx mat, Vec3* vec);
void HSD_MtxGetScale(Mtx arg0, Vec3* arg1);
void HSD_MkRotationMtx(Mtx arg0, Vec3* arg1);
void HSD_MtxQuat(Mtx arg0, Quaternion* arg1);
void HSD_MtxSRT(Mtx m, Vec3* vec1, Vec3* vec2, Vec3* vec3, Vec3* vec4);
void HSD_MtxSRTQuat(Mtx arg0, Vec3* arg1, Quaternion* arg2, Vec3* arg3,
                    Vec3* arg4);
void HSD_MtxScaledAdd(Mtx arg0, Mtx arg1, Mtx arg2, f32 arg3);
void* HSD_VecAlloc(void);
void HSD_VecFree(void* arg0);
void* HSD_MtxAlloc(void);
void HSD_MtxFree(void* arg0);
HSD_ObjAllocData* HSD_VecGetAllocData(void);
void HSD_VecInitAllocData(void);
HSD_ObjAllocData* HSD_MtxGetAllocData(void);
void HSD_MtxInitAllocData(void);
static inline f32 fabsf_bitwise(f32 v)
{
    *(u32*) &v &= ~0x80000000;
    return v;
}
static inline void HSD_MtxColVec(MtxPtr mtx, int col, Vec3* vec)
{
    vec->x = mtx[0][col];
    vec->y = mtx[1][col];
    vec->z = mtx[2][col];
}
static inline void HSD_MtxSetColVec(MtxPtr mtx, int col, Vec3* vec)
{
    mtx[0][col] = vec->x;
    mtx[1][col] = vec->y;
    mtx[2][col] = vec->z;
}
static inline f32 HSD_MtxColMag(MtxPtr mtx, int col)
{
    return sqrtf((mtx[0][col] * mtx[0][col]) + (mtx[1][col] * mtx[1][col]) +
                 (mtx[2][col] * mtx[2][col]));
}
/* 1C96E8 */ bool grLib_801C96E8(HSD_GObj*);
/* 1C96F8 */ HSD_Generator* grLib_801C96F8(s32, s32, Vec3*);
/* 1C97DC */ void grLib_801C97DC(s32, s32, HSD_JObj*);
/* 1C9808 */ HSD_Generator* grLib_801C9808(s32, s32, HSD_JObj*);
/* 1C9834 */ void grLib_801C9834(HSD_Generator*);
/* 1C9854 */ void grLib_801C9854(HSD_JObj*);
/* 1C9874 */ void grLib_801C9874(HSD_Generator*);
/* 1C98A0 */ void grLib_801C98A0(HSD_JObj*);
/* 1C9908 */ void grLib_801C9908(HSD_JObj*);
/* 1C99C0 */ void grLib_801C99C0(s32, s32, HSD_JObj*, s32);
/* 1C9A10 */ VecMtxPtr grLib_801C9A10(void);
/* 1C9A70 */ void grLib_801C9A70(enum_t, Vec3*);
/* 1C9B20 */ void grLib_801C9B20(HSD_JObj*, DynamicsDesc*, DynamicsDesc*);
/* 1C9B6C */ void grLib_801C9B6C(void*);
/* 1C9B8C */ void grLib_801C9B8C(void*);
/* 1C9CEC */ HSD_GObj* grLib_801C9CEC(CmQuakeKind);
/* 1C9E40 */ int grLib_801C9E40(void);
/* 1C9E50 */ void grLib_801C9E50(s16);
/* 1C9E60 */ bool grLib_801C9E60(Vec3*);
/* 1C9EE8 */ bool grLib_801C9EE8(Vec3*, float);
#define GALE01_1C87D0
/* 1C8D44 */ Item_GObj*
grMaterial_801C8D44(int arg0, int arg1, Ground* arg2, Vec3* arg3, int arg4,
                    void (*arg5)(Item_GObj*, Ground*),
                    void (*arg6)(Item_GObj*, Ground*, Vec3*, HSD_GObj*, f32),
                    void (*arg7)(Item_GObj*, Ground*, HSD_GObj*));
/* 1C8E48 */ bool grMaterial_801C8E48(HSD_GObj* gobj);
/* 1C87D0 */ void grMaterial_801C87D0(HSD_JObj*, u32 flags);
/* 1C8858 */ void grMaterial_801C8858(HSD_JObj*, u32 flags);
/* 1C8A04 */ void grMaterial_801C8A04(HSD_JObj*, u32 flags);
/* 1C8B28 */ HSD_JObj* grMaterial_801C8B28(HSD_JObj*);
/* 1C8B68 */ void grMaterial_801C8B68(HSD_JObj*, int);
/* 1C8CDC */ void grMaterial_801C8CDC(HSD_GObj*);
/* 1C8CFC */ Item_GObj*
grMaterial_801C8CFC(int, int, Ground*, HSD_JObj*,
                    void (*arg4)(Item_GObj*, Ground*),
                    void (*arg5)(Item_GObj*, Ground*, Vec3*, HSD_GObj*, f32),
                    void (*arg6)(Item_GObj*, Ground*, HSD_GObj*));
/* 1C8D98 */ void grMaterial_801C8D98(HSD_GObj* gobj, int id);
/* 1C8DE0 */ void grMaterial_801C8DE0(Item_GObj* gobj, float arg8, float arg9,
                                      float argA, float argB, float argC,
                                      float argD, float argE);
/* 1C8E08 */ void grMaterial_801C8E08(Item_GObj*);
/* 1C8E28 */ void grMaterial_801C8E28(HSD_GObj*);
/* 1C8E68 */ void grMaterial_801C8E68(HSD_GObj*, GroundOrAir);
/* 1C92C0 */ void grMaterial_801C92C0(HSD_JObj*);
/* 1C9470 */ void grMaterial_801C9470(Item_GObj*, CommandInfo*);
/* 1C9490 */ void grMaterial_801C9490(Item_GObj* gobj, CommandInfo* cmd);
/* 1C94D8 */ void grMaterial_801C94D8(void*);
/* 1C95C4 */ void grMaterial_801C95C4(HSD_GObj*);
/* 1C9604 */ void grMaterial_801C9604(HSD_GObj* bg, void*, bool);
/* 1C9664 */ void fn_801C9664(Item_GObj* gobj, CommandInfo* cmd, int arg2);
/* 1C9698 */ void grMaterial_801C9698(HSD_GObj*);
#define GALE01_1EFC68
/* 1EFC68 */ void grMuteCity_801EFC68(bool);
/* 1EFC6C */ void grMuteCity_801EFC6C(void);
/* 1EFCDC */ void grMuteCity_801EFCDC(void);
/* 1EFCE0 */ void grMuteCity_801EFCE0(void);
/* 1EFD04 */ bool grMuteCity_801EFD04(void);
/* 1EFD0C */ HSD_GObj* grMuteCity_801EFD0C(int);
/* 1EFDF8 */ void grMuteCity_801EFDF8(Ground_GObj*);
/* 1F0118 */ bool grMuteCity_801F0118(Ground_GObj*);
/* 1F0120 */ void grMuteCity_801F0120(Ground_GObj*);
/* 1F01B0 */ void grMuteCity_801F01B0(Ground_GObj*);
/* 1F01B4 */ void grMuteCity_801F01B4(Ground_GObj*);
/* 1F0288 */ bool grMuteCity_801F0288(Ground_GObj*);
/* 1F0290 */ void grMuteCity_801F0290(Ground_GObj*);
/* 1F040C */ void grMuteCity_801F040C(Ground_GObj*);
/* 1F043C */ bool grMuteCity_801F043C(Ground_GObj*);
/* 1F0444 */ void grMuteCity_801F0444(Ground_GObj*);
/* 1F0448 */ void grMuteCity_801F0448(Ground_GObj*);
/* 1F044C */ void grMuteCity_801F044C(Ground_GObj*);
/* 1F04A8 */ bool grMuteCity_801F04A8(Ground_GObj*);
/* 1F04B0 */ void grMuteCity_801F04B0(Ground_GObj*);
/* 1F04B4 */ void grMuteCity_801F04B4(Ground_GObj*);
/* 1F04B8 */ void grMuteCity_801F04B8(Ground_GObj*);
/* 1F0948 */ void grMuteCity_801F0948(Ground_GObj*);
/* 1F094C */ f32 grMuteCity_801F094C(HSD_JObj*, HSD_Spline*, Vec3*, f32);
/* 1F0D20 */ void grMuteCity_801F0D20(Ground_GObj*);
/* 1F0F4C */ void grMuteCity_801F0F4C(Ground_GObj*);
/* 1F106C */ void grMuteCity_801F106C(s32);
/* 1F1328 */ void grMuteCity_801F1328(void);
/* 1F173C */ void grMuteCity_801F173C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1754 */ void grMuteCity_801F1754(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F176C */ void grMuteCity_801F176C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1784 */ void grMuteCity_801F1784(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F179C */ void grMuteCity_801F179C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F17B4 */ void grMuteCity_801F17B4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F17CC */ void grMuteCity_801F17CC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F17E4 */ void grMuteCity_801F17E4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F17FC */ void grMuteCity_801F17FC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1814 */ void grMuteCity_801F1814(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F182C */ void grMuteCity_801F182C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1844 */ void grMuteCity_801F1844(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F185C */ void grMuteCity_801F185C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1874 */ void grMuteCity_801F1874(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F188C */ void grMuteCity_801F188C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F18A4 */ void grMuteCity_801F18A4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F18BC */ void grMuteCity_801F18BC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F18D4 */ void grMuteCity_801F18D4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F18EC */ void grMuteCity_801F18EC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1904 */ void grMuteCity_801F1904(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F191C */ void grMuteCity_801F191C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1934 */ void grMuteCity_801F1934(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F194C */ void grMuteCity_801F194C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1964 */ void grMuteCity_801F1964(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F197C */ void grMuteCity_801F197C(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1994 */ void grMuteCity_801F1994(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F19AC */ void grMuteCity_801F19AC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F19C4 */ void grMuteCity_801F19C4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F19DC */ void grMuteCity_801F19DC(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F19F4 */ void grMuteCity_801F19F4(Item_GObj*, Ground*, Vec3*, HSD_GObj*,
                                      f32);
/* 1F1A0C */ void grMuteCity_801F1A0C(HSD_GObj*, Ground*);
/* 1F1A34 */ void grMuteCity_801F1A34(HSD_GObj*, Ground_GObj*);
/* 1F28A8 */ DynamicModelDesc* grMuteCity_801F28A8(void);
/* 1F290C */ void grMuteCity_801F290C(Ground_GObj*);
/* 1F2AB0 */ HSD_Generator* grMuteCity_801F2AB0(s32, HSD_JObj*);
/* 1F2BBC */ DynamicsDesc* grMuteCity_801F2BBC(enum_t);
/* 1F2C10 */ bool grMuteCity_801F2C10(Vec3*, int arg, HSD_JObj* jobj);
/* 3E33DC */ extern StageData grMc_StageData;
#define GALE01_20F468
/* 2105AC */ void grOldKongo_802105AC(Ground_GObj*);
/* 2105C8 */ void grOldKongo_802105C8(HSD_GObj*);
/* 3E65E8 */ extern StageData grOk_StageData;
#define GALE01_2107DC
/* 2107DC */ void grOldPupupu_802107DC(bool);
/* 2107E0 */ void grOldPupupu_802107E0(void);
/* 210884 */ void grOldPupupu_80210884(void);
/* 210888 */ void grOldPupupu_80210888(void);
/* 2108AC */ bool grOldPupupu_802108AC(void);
/* 2108B4 */ HSD_GObj* grOldPupupu_802108B4(int);
/* 2109C8 */ bool grOldPupupu_802109C8(Ground_GObj*);
/* 2109D0 */ void grOldPupupu_802109D0(Ground_GObj*);
/* 2109D4 */ void grOldPupupu_802109D4(Ground_GObj*);
/* 2109D8 */ void grOldPupupu_802109D8(Ground_GObj*);
/* 210A1C */ bool grOldPupupu_80210A1C(Ground_GObj*);
/* 210A24 */ void grOldPupupu_80210A24(Ground_GObj*);
/* 210B00 */ void grOldPupupu_80210B00(Ground_GObj*);
/* 210B04 */ void grOldPupupu_80210B04(Ground_GObj*);
/* 210B48 */ bool grOldPupupu_80210B48(Ground_GObj*);
/* 210B50 */ void grOldPupupu_80210B50(Ground_GObj*);
/* 210B54 */ void grOldPupupu_80210B54(Ground_GObj*);
/* 210B58 */ void grOldPupupu_80210B58(Ground_GObj*);
/* 210BB8 */ bool grOldPupupu_80210BB8(Ground_GObj*);
/* 210BC0 */ void grOldPupupu_80210BC0(Ground_GObj*);
/* 210BE0 */ void grOldPupupu_80210BE0(Ground_GObj*);
/* 210BE4 */ void grOldPupupu_80210BE4(Ground_GObj*);
/* 210C2C */ bool grOldPupupu_80210C2C(Ground_GObj*);
/* 210C34 */ void grOldPupupu_80210C34(Ground_GObj*);
/* 210C78 */ void grOldPupupu_80210C78(Ground_GObj*);
/* 210C7C */ void grOldPupupu_80210C7C(Ground_GObj*);
/* 210D08 */ bool grOldPupupu_80210D08(Ground_GObj*);
/* 210D10 */ void grOldPupupu_80210D10(Ground_GObj*);
/* 21110C */ void grOldPupupu_8021110C(Ground_GObj*);
/* 211110 */ void grOldPupupu_80211110(Ground_GObj*);
/* 21118C */ bool grOldPupupu_8021118C(Ground_GObj*);
/* 211194 */ void grOldPupupu_80211194(Ground_GObj*);
/* 211198 */ void grOldPupupu_80211198(Ground_GObj*);
/* 21119C */ void grOldPupupu_8021119C(Ground_GObj*);
/* 211284 */ bool grOldPupupu_80211284(Ground_GObj*);
/* 21128C */ bool grOldPupupu_8021128C(Vec*, f32, f32, f32, f32);
/* 2112F4 */ bool fn_802112F4(Ground_GObj*, HSD_GObj*, Vec3*);
/* 2113E0 */ void grOldPupupu_802113E0(Ground_GObj*);
/* 211C0C */ void grOldPupupu_80211C0C(Ground_GObj*);
/* 211C10 */ void grOldPupupu_80211C10(Ground_GObj*);
/* 211C14 */ bool grOldPupupu_80211C14(Ground_GObj*);
/* 211C1C */ void grOldPupupu_80211C1C(Ground_GObj*);
/* 211C9C */ void grOldPupupu_80211C9C(Ground_GObj*);
/* 211CA0 */ DynamicsDesc* grOldPupupu_80211CA0(enum_t);
/* 211CA8 */ bool grOldPupupu_80211CA8(Vec3*, int, HSD_JObj*);
/* 3E6748 */ extern StageData grOp_StageData;
#define GALE01_20E798
/* 20E798 */ void grOldYoshi_8020E798(bool);
/* 20E79C */ void grOldYoshi_8020E79C(void);
/* 20E824 */ void grOldYoshi_8020E824(void);
/* 20E828 */ void grOldYoshi_8020E828(void);
/* 20E84C */ bool grOldYoshi_8020E84C(void);
/* 20E854 */ Ground_GObj* grOldYoshi_8020E854(int);
/* 20E968 */ bool grOldYoshi_8020E968(Ground_GObj*);
/* 20E970 */ void grOldYoshi_8020E970(Ground_GObj*);
/* 20E974 */ void grOldYoshi_8020E974(Ground_GObj*);
/* 20E978 */ void grOldYoshi_8020E978(Ground_GObj*);
/* 20E9E0 */ bool grOldYoshi_8020E9E0(Ground_GObj*);
/* 20E9E8 */ void grOldYoshi_8020E9E8(Ground_GObj*);
/* 20E9EC */ void grOldYoshi_8020E9EC(Ground_GObj*);
/* 20E9F0 */ void grOldYoshi_8020E9F0(Ground_GObj*);
/* 20EA5C */ bool grOldYoshi_8020EA5C(Ground_GObj*);
/* 20EA64 */ void grOldYoshi_8020EA64(Ground_GObj*);
/* 20EA88 */ void grOldYoshi_8020EA88(Ground_GObj*);
/* 20EA8C */ void grOldYoshi_8020EA8C(Ground_GObj*);
/* 20EAEC */ bool grOldYoshi_8020EAEC(Ground_GObj*);
/* 20EAF4 */ void grOldYoshi_8020EAF4(Ground_GObj*);
/* 20EAF8 */ void grOldYoshi_8020EAF8(Ground_GObj*);
/* 20EAFC */ void grOldYoshi_8020EAFC(Ground_GObj*);
/* 20EC08 */ bool grOldYoshi_8020EC08(Ground_GObj*);
/* 20EC10 */ void grOldYoshi_8020EC10(Ground_GObj*);
/* 20EFC8 */ void grOldYoshi_8020EFC8(Ground_GObj*);
/* 20EFCC */ void grOldYoshi_8020EFCC(Ground_GObj*);
/* 20F080 */ bool grOldYoshi_8020F080(Ground_GObj*);
/* 20F088 */ void grOldYoshi_8020F088(Ground_GObj*);
/* 20F2A4 */ void grOldYoshi_8020F2A4(Ground_GObj*);
/* 20F31C */ float grOldYoshi_8020F31C(float, float, float, float, float,
                                       float);
/* 20F404 */ DynamicsDesc* grOldYoshi_8020F404(enum_t);
/* 20F40C */ bool grOldYoshi_8020F40C(Vec3*, int arg, HSD_JObj* jobj);
/* 3E650C */ extern StageData grOy_StageData;
#define GALE01_1E3734
/* 1E3734 */ void grOnett_801E3734(bool);
/* 1E3738 */ void grOnett_801E3738(void);
/* 1E37C4 */ void grOnett_801E37C4(void);
/* 1E37C8 */ void grOnett_801E37C8(void);
/* 1E37EC */ bool grOnett_801E37EC(void);
/* 1E37F4 */ HSD_GObj* grOnett_801E37F4(int);
/* 1E38DC */ void grOnett_801E38DC(Ground_GObj*);
/* 1E3920 */ bool grOnett_801E3920(Ground_GObj*);
/* 1E3928 */ void grOnett_801E3928(Ground_GObj*);
/* 1E392C */ void grOnett_801E392C(Ground_GObj*);
/* 1E3930 */ void grOnett_801E3930(Ground_GObj*);
/* 1E3A34 */ void grOnett_801E3A34(Ground_GObj*);
/* 1E3C58 */ bool grOnett_801E3C58(Ground_GObj*);
/* 1E3C60 */ void grOnett_801E3C60(Ground_GObj*);
/* 1E3CE0 */ void grOnett_801E3CE0(Ground_GObj*);
/* 1E3CE4 */ void grOnett_801E3CE4(Ground_GObj*);
/* 1E3D98 */ bool grOnett_801E3D98(Ground_GObj*);
/* 1E3DA0 */ void grOnett_801E3DA0(Ground_GObj*);
/* 1E40E0 */ void grOnett_801E40E0(Ground_GObj*);
/* 1E41B0 */ void grOnett_801E41B0(Ground_GObj*);
/* 1E41C8 */ void grOnett_801E41C8(Ground_GObj*);
/* 1E43D8 */ bool grOnett_801E43D8(Ground_GObj*);
/* 1E43E0 */ void grOnett_801E43E0(Ground_GObj*);
/* 1E502C */ void grOnett_801E502C(Ground_GObj*);
/* 1E5030 */ void grOnett_801E5030(Item_GObj*, Ground*);
/* 1E5140 */ void grOnett_801E5140(s32 idx);
/* 1E5194 */ void grOnett_801E5194(Ground*, s32, s32);
/* 1E5214 */ void grOnett_801E5214(Ground_GObj*);
/* 1E5538 */ void grOnett_801E5538(Ground_GObj*);
/* 1E56FC */ DynamicModelDesc* grOnett_801E56FC(void);
/* 1E5760 */ DynamicsDesc* grOnett_801E5760(enum_t);
/* 1E5768 */ bool grOnett_801E5768(Vec3*, int, HSD_JObj*);
/* 3E2858 */ extern StageData grOt_StageData;
/**
 * @file
 * @todo
 * Get stage's "yakumono" ("about"?) param
 */
#define GALE01_1BFFA8
/* 1BFFB0 */ void Ground_801BFFB0(void);
/* 1C0378 */ void Ground_801C0378(int);
/* 1C0498 */ float Ground_801C0498(void);
/* 1C04BC */ void Ground_SetParamY(float y);
/* 1C0508 */ s32 Ground_801C0508(void);
/* 1C052C */ void Ground_801C052C(GXColor*);
/* 1C0544 */ void Ground_801C0544(GXColor*);
/* 1C055C */ void Ground_801C055C(GXColor*);
/* 1C0574 */ void Ground_801C0574(GXColor*);
/* 1C058C */ void Ground_801C058C(GXColor*);
/* 1C05A4 */ void Ground_801C05A4(GXColor*);
/* 1C05BC */ void Ground_801C05BC(GXColor*);
/* 1C05D4 */ void Ground_801C05D4(GXColor*);
/* 1C05EC */ void Ground_801C05EC(GXColor*);
/* 1C0604 */ GXColor* Ground_801C0604(void);
/* 1C0618 */ GXColor* Ground_801C0618(void);
/* 1C062C */ GXColor* Ground_801C062C(void);
/* 1C0640 */ GXColor* Ground_801C0640(void);
/* 1C0654 */ GXColor* Ground_801C0654(void);
/* 1C0668 */ GXColor* Ground_801C0668(void);
/* 1C067C */ GXColor* Ground_801C067C(void);
/* 1C0690 */ GXColor* Ground_801C0690(void);
/* 1C06A4 */ GXColor* Ground_801C06A4(void);
/* 1C06B8 */ void Ground_801C06B8(GrKind);
/* 1C0754 */ void Ground_801C0754(StageIdPair* pair);
/* 1C0800 */ void Ground_801C0800(StageIdPair* pair);
/* 1C0F78 */ void Ground_OnLoad(StageIdPair* pair);
/* 1C0FB8 */ void Ground_801C0FB8(StageIdPair* pair);
/* 1C1074 */ void Ground_DemoInit(StageIdPair* pair, s32);
/* 1C10B8 */ void Ground_801C10B8(HSD_GObj*, HSD_GObjEvent);
/* 1C1154 */ void Ground_801C1154(void);
/* 1C1158 */ void Ground_801C1158(void);
/* 1C11AC */ void Ground_801C11AC(HSD_GObj* gobj);
/* 1C13D0 */ HSD_JObj* Ground_801C13D0(s32, s32 depth);
/* 1C14D0 */ Ground_GObj* Ground_GetStageGObj(int);
/* 1C1A20 */ HSD_GObj* Ground_801C1A20(HSD_Joint*, s32);
/* 1C1D6C */ void Ground_801C1D6C(u32);
/* 1C1D84 */ u32 Ground_801C1D84(void);
/* 1C1D98 */ u32 Ground_801C1D98(void);
/* 1C1DAC */ u32 Ground_801C1DAC(void);
/* 1C1DC0 */ u32 Ground_801C1DC0(void);
/* 1C1DD4 */ int Ground_801C1DD4(void);
/* 1C1DE4 */ void Ground_801C1DE4(s32*, s32*);
/* 1C1E00 */ void Ground_801C1E00(s32);
/* 1C1E18 */ s32 Ground_801C1E18(void);
/* 1C1E84 */ HSD_GObj* Ground_801C1E84(void);
/* 1C1FFC */ void Ground_ApplyStageBackgroundColor(void);
/* 1C205C */ void Ground_801C205C(GXColor* color);
/* 1C2090 */ bool Ground_801C2090(GXColor* color);
/* 1C20D0 */ f32 Ground_801C20D0(void);
/* 1C2374 */ void Ground_801C2374(HSD_LObj* lobj);
/* 1C247C */ HSD_Spline* Ground_801C247C(s32, s32);
/* 1C28AC */ bool Ground_801C28AC(StKind, u32, s32*);
/* 1C2AD8 */ s32* Ground_801C2AD8(void);
/* 1C2AE8 */ float Ground_801C2AE8(StKind);
/* 1C2BA4 */ Ground_GObj* Ground_GetMapGObj(int map_id);
/* 1C2C8C */ bool Ground_801C2C8C(void*);
/* 1C2CF4 */ HSD_JObj* Ground_801C2CF4(s32);
/* 1C2D0C */ void Ground_801C2D0C(s32 i, HSD_JObj* jobj);
/* 1C2D24 */ bool Ground_801C2D24(enum_t, Vec3*);
/// Binds each collision joint of map @p map_id to a joint of @p jobj, syncs
/// it to the model, and re-enables the map's collision if it was removed.
/// @returns whether the map has any collision joints.
/* 1C2ED0 */ bool Ground_InitMapColl(HSD_JObj* jobj, s32 map_id);
/// Re-syncs the collision joints of the map to its animated model. Runs
/// at most once per frame per joint and only while the map's collision is
/// enabled.
/// @returns whether any joint was updated.
/* 1C2FE0 */ bool Ground_UpdateMapColl(Ground_GObj*);
/* 1C3128 */ bool Ground_801C3128(int gobj_id, void (*)(int));
/* 1C3214 */ bool Ground_801C3214(int gobj_id);
/* 1C3260 */ bool Ground_801C3260(s32);
/* 1C32AC */ void Ground_801C32AC(int gobj_id);
/* 1C32D4 */ s32 Ground_801C32D4(s32, s32);
/* 1C33C0 */ s32 Ground_801C33C0(s32, s32);
/* 1C36F4 */ void Ground_801C36F4(int map_id, HSD_JObj* jobj, M2C_UNK joint);
/* 1C3880 */ void Ground_801C3880(f32);
/* 1C3890 */ void Ground_801C3890(f32);
/* 1C38A0 */ void Ground_801C38A0(f32);
/* 1C38AC */ void Ground_801C38AC(f32);
/* 1C38BC */ void Ground_801C38BC(f32 x, f32 y);
/* 1C38D0 */ void Ground_801C38D0(f32 tilt, f32 pan, f32, f32);
/* 1C38EC */ void Ground_801C38EC(f32 depth, f32 zoom);
/* 1C3900 */ void Ground_801C3900(f32, f32, f32, f32, f32 up, f32 down,
                                  f32 left, f32 right);
/* 1C392C */ void Ground_801C392C(f32 x, f32 y, f32 z, f32 fov, f32 vert,
                                  f32 horz);
/* 1C3950 */ void Ground_801C3950(f32 zoom);
/* 1C3960 */ void Ground_801C3960(f32 ratio);
/* 1C3970 */ void Ground_801C3970(f32 smooth);
/* 1C3980 */ void Ground_801C3980(f32 top);
/* 1C3990 */ void Ground_801C3990(f32 bottom);
/* 1C39A0 */ void Ground_801C39A0(f32 left);
/* 1C39B0 */ void Ground_801C39B0(f32 right);
/* 1C39C0 */ void Ground_801C39C0(void);
/* 1C3BA8 */ void Ground_801C3BA8(HSD_GObj*, StageCallbacks*, int, int);
/* 1C3BB4 */ void Ground_801C3BB4(void);
/* 1C3D44 */ s32 Ground_801C3D44(void*, f32, f32);
/* 1C3DB4 */ s32 Ground_801C3DB4(void*, f32, f32);
/* 1C3F20 */ f32 Ground_801C3F20(HSD_JObj*);
/* 1C3FA4 */ HSD_JObj* Ground_801C3FA4(HSD_GObj* gobj, int depth);
/* 1C4100 */ HSD_JObj* Ground_801C4100(HSD_JObj* jobj);
/* 1C4210 */ s32 Ground_801C4210(void);
/* 1C42AC */ void Ground_801C42AC(void);
/* 1C4338 */ void Ground_801C4338(void);
/* 1C4368 */ void Ground_801C4368(float* slope, float* intercept);
/* 1C438C */ void Ground_801C438C(f32 val);
/* 1C43A4 */ void Ground_801C43A4(M2C_UNK);
/* 1C43C4 */ bool Ground_801C43C4(void*);
/* 1C445C */ void Ground_801C445C(HSD_LObj* lobj);
/* 1C498C */ HSD_GObj* Ground_801C498C(void);
/* 1C49B4 */ LightList** Ground_801C49B4(void);
/* 1C49F8 */ void* Ground_GetYakumonoParam(void);
/* 1C4A08 */ void Ground_801C4A08(HSD_GObj* gobj);
/**
 * @param[in] spline
 * @param[in] arg1
 * @param[out] result
 * @param[in] arg8
 */
/* 1C4B50 */ void Ground_801C4B50(HSD_Spline* spline, Vec3* arg1, Vec3* result,
                                  f32 arg8);
/* 1C4D70 */ bool Ground_801C4D70(HSD_GObj*, Vec3*, f32);
/* 1C4DA0 */ bool Ground_801C4DA0(Vec3*, f32*);
/* 1C4DD0 */ bool Ground_801C4DD0(void);
/* 1C4E20 */ bool Ground_801C4E20(void);
/* 1C4E70 */ void Ground_801C4E70(HSD_JObj*, HSD_JObj*, HSD_JObj*, HSD_JObj*,
                                  HSD_JObj*, HSD_JObj*);
/* 1C4FAC */ void Ground_801C4FAC(HSD_CObj* cobj);
/* 1C53EC */ void Ground_801C53EC(u32);
/* 1C5414 */ void Ground_801C5414(int, int);
/* 1C5440 */ void Ground_801C5440(Ground* gp, s32 i, u32);
/* 1C54DC */ bool Ground_801C54DC(Ground* gp, s32 i);
/* 1C5544 */ void Ground_801C5544(Ground*, s32);
/* 1C5630 */ void Ground_801C5630(Ground* gp, s32 i, f32 val);
/* 1C5694 */ void Ground_801C5694(Ground* gp, s32 i, f32 val);
/* 1C5700 */ DynamicsDesc* Ground_801C5700(int i);
/* 1C5740 */ void Ground_801C5740(s32);
/* 1C5750 */ void Ground_801C5750(void);
/* 1C5764 */ s32 Ground_801C5764(void);
/* 1C5774 */ s32 Ground_801C5774(void);
/* 1C5784 */ void Ground_801C5784(s32);
/* 1C5794 */ s32 Ground_801C5794(void);
/* 1C57A4 */ Fighter_GObj* Ground_GetP1Fighter(void);
/* 1C57C8 */ Fighter_GObj* Ground_GetP1Fighter2(void);
/* 1C57F0 */ f32 Ground_801C57F0(int);
/**
 * @brief Restores the in-match camera mode after unpause.
 *
 * Selects standard or fixed camera according to the stage's
 * #GroundParam::x4C_fixed_cam parameter. Both underlying calls only set the
 * camera mode, without additional setup. Used when a paused match resumes and
 * no #StartMeleeRules::on_unpause_override is installed.
 */
/* 1C5800 */ void Ground_EnableMatchCamera(void);
/* 1C5840 */ s32 Ground_801C5840(void);
/* 1C58E0 */ Item_GObj* Ground_801C58E0(s32, s32);
/* 1C5940 */ int Ground_801C5940(void);
/* 1C5A28 */ void Ground_801C5A28(void);
/* 1C5A60 */ void Ground_801C5A60(void);
/* 1C5A84 */ void Ground_801C5A84(s32);
/* 1C5A94 */ s32 Ground_801C5A94(void);
/* 1C5AA4 */ void Ground_801C5AA4(bool);
/* 1C5ABC */ bool Ground_801C5ABC(void);
/* 1C5AD0 */ u32 Ground_801C5AD0(s32 i);
/* 1C5AEC */ void Ground_801C5AEC(Vec3* v, Vec3*, Vec3*, Vec3*);
/* 49E6C8 */ extern StageInfo stage_info;
#define MELEE_GR_STADIUM_H
/* 1D1018 */ void grStadium_OnDemoInit(int);
/* 1D101C */ void grStadium_OnInit(void);
/* 1D10C8 */ void grStadium_OnLoad(void);
/* 1D10CC */ void grStadium_OnStart(void);
/* 1D10F0 */ bool grStadium_801D10F0(void);
/* 1D10F8 */ Ground_GObj* grStadium_801D10F8(StadiumGrType);
/* 1D11E4 */ void fn_801D11E4(Ground_GObj*);
/* 1D1290 */ void grStadium_801D1290(Ground_GObj*);
/* 1D1388 */ bool grStadium_801D1388(Ground_GObj* gobj);
/* 1D1390 */ void grStadium_801D1390(Ground_GObj*);
/* 1D13C4 */ void grStadium_801D13C4(Ground_GObj*);
/* 1D13C8 */ void fn_801D13C8(Ground_GObj*);
/* 1D13E0 */ void grStadium_801D13E0(Ground_GObj*);
/* 1D1518 */ bool grStadium_801D1518(Ground_GObj*);
/* 1D1520 */ void grStadium_801D1520(Ground_GObj*);
/* 1D156C */ void grStadium_801D156C(Ground_GObj*);
/* 1D1570 */ void grStadium_801D1570(Ground_GObj*);
/* 1D15FC */ bool grStadium_801D15FC(Ground_GObj*);
/* 1D1624 */ void grStadium_801D1624(Ground_GObj*);
/* 1D1648 */ void grStadium_801D1648(Ground_GObj*);
/* 1D16D4 */ bool grStadium_801D16D4(Ground_GObj*);
/* 1D16FC */ void grStadium_801D16FC(Ground_GObj*);
/* 1D1720 */ void grStadium_801D1720(Ground_GObj*);
/* 1D17E0 */ bool grStadium_801D17E0(Ground_GObj*);
/* 1D1808 */ void grStadium_801D1808(Ground_GObj*);
/* 1D1840 */ void grStadium_801D1840(Ground_GObj*);
/* 1D19D0 */ bool grStadium_801D19D0(Ground_GObj*);
/* 1D19F8 */ void grStadium_801D19F8(Ground_GObj*);
/* 1D1A38 */ void grStadium_801D1A38(Ground_GObj*);
/* 1D1B40 */ bool grStadium_801D1B40(Ground_GObj*);
/* 1D1B48 */ void grStadium_801D1B48(Ground_GObj*);
/* 1D1D84 */ void grStadium_801D1D84(Ground_GObj*);
/* 1D1E10 */ bool grStadium_801D1E10(Ground_GObj*);
/* 1D1E18 */ void grStadium_801D1E18(Ground_GObj*);
/* 1D1E1C */ void grStadium_801D1E1C(Ground_GObj*);
/* 1D1E20 */ void grStadium_801D1E20(void);
/* 1D1EF8 */ void grStadium_801D1EF8(Ground_GObj*);
/* 1D21E4 */ void grStadium_801D21E4(Ground_GObj*, bool);
/* 1D2278 */ void grStadium_801D2278(Ground_GObj*);
/* 1D2344 */ void grStadium_801D2344(Ground_GObj*);
/* 1D2528 */ void grStadium_801D2528(Ground_GObj*, int, int);
/* 1D2A60 */ void grStadium_801D2A60(Ground_GObj*);
/* 1D2BEC */ HSD_GObj* grStadium_801D2BEC(void);
/* 1D2D78 */ HSD_GObj* grStadium_801D2D78(void);
/* 1D2E24 */ HSD_GObj* grStadium_801D2E24(void);
/* 1D2ED0 */ void fn_801D2ED0(HSD_GObj*, intptr_t);
/* 1D2FD0 */ void grStadium_801D2FD0(HSD_GObj*, intptr_t);
/* 1D3084 */ void grStadium_801D3084(HSD_GObj*, intptr_t);
/* 1D3138 */ HSD_TObj* grStadium_801D3138(Ground_GObj*, HSD_ImageDesc*,
                                          HSD_MObj**);
/* 1D32D0 */ bool grStadium_801D32D0(Ground_GObj*);
/* 1D3460 */ void grStadium_801D3460(Ground_GObj*);
/* 1D384C */ void grStadium_801D384C(Ground_GObj*);
/* 1D39A0 */ void grStadium_801D39A0(Ground_GObj*);
/* 1D3A0C */ void grStadium_801D3A0C(Ground_GObj*);
/* 1D3B4C */ void grStadium_801D3B4C(int, int);
/* 1D3BBC */ void grStadium_801D3BBC(Ground_GObj*);
/* 1D3F40 */ void grStadium_801D3F40(Ground_GObj*, int);
/* 1D4040 */ void grStadium_801D4040(void);
/* 1D4084 */ void grStadium_801D4084(void);
/* 1D40C8 */ void grStadium_801D40C8(void);
/* 1D410C */ void grStadium_801D410C(void);
/* 1D4150 */ void grStadium_801D4150(void);
/* 1D4194 */ void grStadium_801D4194(Ground_GObj*);
/* 1D42B8 */ bool grStadium_801D42B8(void);
/* 1D4354 */ Ground* grStadium_801D4354(Ground_GObj*);
/* 1D435C */ void grStadium_801D435C(Ground_GObj*);
/* 1D4548 */ void grStadium_801D4548(Ground_GObj*);
/* 1D4FF8 */ bool grStadium_801D4FF8(int pl_slot);
/* 1D5074 */ void fn_801D5074(Ground_GObj*, intptr_t);
/* 1D50B8 */ DynamicsDesc* grStadium_OnTouchLine(enum_t);
/* 1D50C0 */ bool grStadium_OnCheckShadowRender(Vec3*, int, HSD_JObj*);
/* 1D511C */ void grStadium_801D511C(void);
/* 3E1334 */ extern StageData grPs_StageData;
#define GALE01_211CFC
/* 3E6A3C */ extern StageData grPu_StageData;
#define GALE01_2182C4
/* 2182C4 */ void grPushOn_802182C4(bool);
/* 2182C8 */ void grPushOn_802182C8(void);
/* 218330 */ void grPushOn_80218330(void);
/* 218378 */ void grPushOn_80218378(void);
/* 2183DC */ bool grPushOn_802183DC(void);
/* 2183E4 */ Ground_GObj* grPushOn_802183E4(int);
/* 2184CC */ void grPushOn_802184CC(Ground_GObj*);
/* 218590 */ bool grPushOn_80218590(Ground_GObj*);
/* 218598 */ void grPushOn_80218598(Ground_GObj*);
/* 21859C */ void grPushOn_8021859C(Ground_GObj*);
/* 2185A0 */ void grPushOn_802185A0(Ground_GObj*);
/* 218670 */ bool grPushOn_80218670(Ground_GObj*);
/* 218678 */ bool fn_80218678(void);
/* 2186C8 */ void grPushOn_802186C8(Ground_GObj*);
/* 2187A4 */ void grPushOn_802187A4(Ground_GObj*);
/* 2187A8 */ void grPushOn_802187A8(Ground_GObj*);
/* 218880 */ bool grPushOn_80218880(Ground_GObj*);
/* 218888 */ void grPushOn_80218888(Ground_GObj*);
/* 218ED0 */ void grPushOn_80218ED0(Ground_GObj*);
/* 218ED4 */ HSD_LObj* grPushOn_80218ED4(HSD_GObj*);
/* 218FC0 */ HSD_LObj* grPushOn_80218FC0(HSD_GObj*);
/* 2190D0 */ void grPushOn_802190D0(HSD_GObj*);
/* 219204 */ void grPushOn_80219204(int arg0, int* out1, int* out2);
/* 219230 */ int grPushOn_80219230(int);
/* 2192A4 */ s32 fn_802192A4(void*, HSD_GObj*, s32*);
/* 219458 */ DynamicsDesc* grPushOn_80219458(enum_t);
/* 219528 */ bool grPushOn_80219528(Vec3*, int arg, HSD_JObj* jobj);
/* 3E7B10 */ extern StageData grPushOn_StageData;
#define GALE01_1FF164
/* 1FF164 */ void grRCruise_801FF164(bool);
/* 1FF168 */ void grRCruise_801FF168(void);
/* 1FF298 */ void grRCruise_801FF298(void);
/* 1FF29C */ void grRCruise_801FF29C(void);
/* 1FF2C0 */ bool grRCruise_801FF2C0(void);
/* 1FF2C8 */ Ground_GObj* grRCruise_801FF2C8(int);
/* 1FF3B4 */ void grRCruise_801FF3B4(Ground_GObj*);
/* 1FF3E0 */ bool grRCruise_801FF3E0(Ground_GObj*);
/* 1FF3E8 */ void grRCruise_801FF3E8(Ground_GObj*);
/* 1FF3EC */ void grRCruise_801FF3EC(Ground_GObj*);
/* 1FF3F0 */ void grRCruise_801FF3F0(Ground_GObj*);
/* 1FF434 */ bool grRCruise_801FF434(Ground_GObj*);
/* 1FF43C */ void grRCruise_801FF43C(Ground_GObj*);
/* 1FF440 */ void grRCruise_801FF440(Ground_GObj*);
/* 1FF444 */ void grRCruise_801FF444(Ground_GObj*);
/* 1FF5B4 */ void grRCruise_801FF5B4(Ground_GObj*);
/* 1FF6CC */ bool grRCruise_801FF6CC(Ground_GObj*);
/* 1FF6D4 */ void grRCruise_801FF6D4(Ground_GObj*);
/* 1FF738 */ void grRCruise_801FF738(Ground_GObj*);
/* 1FF73C */ void grRCruise_801FF73C(Ground_GObj*);
/* 1FF794 */ bool grRCruise_801FF794(Ground_GObj*);
/* 1FF79C */ void grRCruise_801FF79C(Ground_GObj*);
/* 1FF7A0 */ void grRCruise_801FF7A0(Ground_GObj*);
/* 1FF7A4 */ void grRCruise_801FF7A4(Ground_GObj*);
/* 1FF8DC */ bool grRCruise_801FF8DC(Ground_GObj*);
/* 1FF8E4 */ void grRCruise_801FF8E4(Ground_GObj*);
/* 1FF920 */ void grRCruise_801FF920(Ground_GObj*);
/* 1FF924 */ void grRCruise_801FF924(Ground_GObj*);
/* 1FFAD4 */ bool grRCruise_801FFAD4(Ground_GObj*);
/* 1FFADC */ void grRCruise_801FFADC(Ground_GObj*);
/* 200070 */ void grRCruise_80200070(Ground_GObj*);
/* 200074 */ void grRCruise_80200074(Ground_GObj*);
/* 20014C */ bool grRCruise_8020014C(Ground_GObj*);
/* 200154 */ void grRCruise_80200154(Ground_GObj*);
/* 20045C */ void grRCruise_8020045C(Ground_GObj*);
/* 200540 */ void grRCruise_80200540(Ground_GObj*);
/* 20071C */ void grRCruise_8020071C(Ground_GObj*);
/* 200B48 */ void grRCruise_80200B48(Ground_GObj*);
/* 200C04 */ void grRCruise_80200C04(Ground_GObj*);
/* 201110 */ void grRCruise_80201110(Ground_GObj*);
/* 201288 */ void grRCruise_80201288(HSD_JObj*, void (*)(HSD_DObj*, u32), u32);
/* 201410 */ void grRCruise_80201410(Ground_GObj*);
/* 201588 */ void grRCruise_80201588(Ground_GObj*);
/* 201918 */ void grRCruise_80201918(Vec3*);
/* 201988 */ bool grRCruise_80201988(s32);
/* 201B60 */ void grRCruise_80201B60(HSD_JObj*, bool clear);
/* 201BE0 */ void fn_80201BE0(HSD_GObj*, intptr_t);
/* 201C50 */ DynamicsDesc* grRCruise_80201C50(enum_t);
/* 201C58 */ bool grRCruise_80201C58(Vec3*, int arg, HSD_JObj* jobj);
/* 3E4ECC */ extern StageData grRc_StageData;
#define GALE01_201C60
/* 3E5130 */ extern StageData grSh_StageData;
#define GALE01_2087B0
/* 3E5988 */ extern StageData grSh_Route_StageData;
#define MELEE_GR_STORY_H
/* 1E3030 */ void grStory_801E3030(void);
/* 1E30A8 */ void grStory_UnkStage0_OnLoad(void);
/* 1E30AC */ void grStory_UnkStage0_OnStart(void);
/* 1E30D0 */ bool grStory_801E30D0(void);
/* 1E30D8 */ Ground_GObj* grStory_801E30D8(int);
/* 1E31C0 */ void grStory_801E31C0(Ground_GObj*);
/* 1E3224 */ bool grStory_801E3224(Ground_GObj*);
/* 1E322C */ void grStory_801E322C(Ground_GObj*);
/* 1E3230 */ void grStory_801E3230(Ground_GObj*);
/* 1E3234 */ void grStory_801E3234(Ground_GObj*);
/* 1E332C */ bool grStory_801E332C(Ground_GObj*);
/* 1E3334 */ void grStory_801E3334(Ground_GObj*);
/* 1E336C */ void grStory_801E336C(Ground_GObj*);
/* 1E3370 */ void grStory_801E3370(Ground_GObj*);
/* 1E33D8 */ bool grStory_801E33D8(Ground_GObj*);
/* 1E33E0 */ void grStory_801E33E0(Ground_GObj*);
/* 1E3414 */ void grStory_801E3414(Ground_GObj*);
/* 1E3418 */ void grStory_801E3418(Ground_GObj*);
/* 1E366C */ void grStory_801E366C(Ground_GObj*);
/* 1E36D8 */ bool grStory_801E36D8(Vec3*, int, HSD_JObj*);
/* 3E274C */ extern StageData grSt_StageData;
#define GALE01_21FC60
/* 3E8664 */ extern StageData grTCa_StageData;
#define _grtclink_h_
/* 21FF44 */ void grTCLink_8021FF44(bool);
/* 21FFB8 */ void grTclink_UnkStage0_OnLoad(void);
/* 21FFBC */ void grTclink_UnkStage0_OnStart(void);
/* 21FFE0 */ bool grTCLink_8021FFE0(void);
/* 21FFE8 */ HSD_GObj* grTCLink_8021FFE8(int);
/* 2200D0 */ void grTCLink_802200D0(Ground_GObj*);
/* 2200FC */ bool grTCLink_802200FC(Ground_GObj*);
/* 220104 */ void grTCLink_80220104(Ground_GObj*);
/* 220108 */ void grTCLink_80220108(Ground_GObj*);
/* 22015C */ bool grTCLink_8022015C(Ground_GObj*);
/* 220198 */ void grTCLink_80220198(Ground_GObj*);
/* 2201EC */ bool grTCLink_802201EC(Ground_GObj*);
/* 220214 */ void grTCLink_80220214(Ground_GObj*);
/* 220218 */ DynamicsDesc* grTCLink_80220218(enum_t unused);
/* 220220 */ bool grTCLink_80220220(Vec3*, int, HSD_JObj*);
/* 3E872C */ extern StageData grTCLink_StageData;
#define GALE01_220228
/* 3E87EC */ extern StageData grTDk_StageData;
#define GALE01_22050C
/* 3E88AC */ extern StageData grTDr_StageData;
#define GALE01_2243F4
/* 3E981C */ extern StageData grTFe_StageData;
#define GALE01_206E2C
/* 206E2C */ void grTest_80206E2C(bool);
/* 206E30 */ void grTest_80206E30(void);
/* 207014 */ void grTest_UnkStage0_OnLoad(void);
/* 207018 */ void grTest_UnkStage0_OnStart(void);
/* 20703C */ bool grTest_8020703C(void);
/* 207044 */ HSD_GObj* grTest_80207044(int);
/* 20715C */ bool grTest_8020715C(Ground_GObj*);
/* 207164 */ void grTest_80207164(Ground_GObj*);
/* 207168 */ void grTest_80207168(Ground_GObj*);
/* 2071BC */ bool grTest_802071BC(Ground_GObj*);
/* 2071C4 */ void grTest_802071C4(Ground_GObj*);
/* 2073AC */ void grTest_802073AC(Ground_GObj*);
/* 2073FC */ bool grTest_802073FC(Ground_GObj*);
/* 207404 */ void grTest_80207404(Ground_GObj*);
/* 207408 */ void grTest_80207408(Ground_GObj*);
/* 20740C */ struct DynamicsDesc* grTest_8020740C(enum_t);
/* 207414 */ bool grTest_80207414(Vec3* a, int id, HSD_JObj* jobj);
/* 3E5764 */ extern StageData grTe_StageData;
#define GALE01_2207F0
/* 3E8974 */ extern StageData grTFc_StageData;
#define GALE01_220B80
/* 3E8A34 */ extern StageData grTFx_StageData;
#define GALE01_224110
/* 224110 */ void grTGameWatch_80224110(bool);
/* 224184 */ void grTgamewatch_UnkStage0_OnLoad(void);
/* 224188 */ void grTgamewatch_UnkStage0_OnStart(void);
/* 2241AC */ bool grTGameWatch_802241AC(void);
/* 2241B4 */ HSD_GObj* grTGameWatch_802241B4(int);
/* 22429C */ void grTGameWatch_8022429C(Ground_GObj*);
/* 2242C8 */ bool grTGameWatch_802242C8(Ground_GObj*);
/* 2242D0 */ void grTGameWatch_802242D0(Ground_GObj*);
/* 2242D4 */ void grTGameWatch_802242D4(Ground_GObj*);
/* 224328 */ bool grTGameWatch_80224328(Ground_GObj*);
/* 224364 */ void grTGameWatch_80224364(Ground_GObj*);
/* 2243B8 */ bool grTGameWatch_802243B8(Ground_GObj*);
/* 2243E0 */ void grTGameWatch_802243E0(Ground_GObj*);
/* 2243E4 */ DynamicsDesc* grTGameWatch_802243E4(enum_t);
/* 2243EC */ bool grTGameWatch_802243EC(Vec3*, int, HSD_JObj*);
/* 3E9754 */ extern StageData grTGw_StageData;
#define GALE01_2246D8
/* 2246D8 */ void grTGanon_802246D8(bool);
/* 2246DC */ void grTGanon_802246DC(void);
/* 224754 */ void grTganon_UnkStage0_OnLoad(void);
/* 224758 */ void grTganon_UnkStage0_OnStart(void);
/* 22477C */ bool grTGanon_8022477C(void);
/* 224784 */ Ground_GObj* grTGanon_80224784(int);
/* 22486C */ void grTGanon_8022486C(Ground_GObj*);
/* 224898 */ bool grTGanon_80224898(Ground_GObj*);
/* 2248A0 */ void grTGanon_802248A0(Ground_GObj*);
/* 2248A4 */ void grTGanon_802248A4(Ground_GObj*);
/* 2248F8 */ bool grTGanon_802248F8(Ground_GObj*);
/* 224934 */ void grTGanon_80224934(Ground_GObj*);
/* 224988 */ bool grTGanon_80224988(Ground_GObj*);
/* 2249B0 */ void grTGanon_802249B0(Ground_GObj*);
/* 2249B4 */ DynamicsDesc* grTGanon_802249B4(enum_t);
/* 224A4C */ bool grTGanon_80224A4C(Vec3*, int, HSD_JObj*);
/* 3E98DC */ extern StageData grTGn_StageData;
#define GALE01_220F10
/* 3E8AF4 */ extern StageData grTIc_StageData;
#define GALE01_221364
/* 3E8C0C */ extern StageData grTKb_StageData;
#define GALE01_221648
/* 3E8CCC */ extern StageData grTKp_StageData;
#define GALE01_22192C
/* 3E8D8C */ extern StageData grTLk_StageData;
#define GALE01_221C10
/* 221C10 */ void grTLuigi_80221C10(bool);
/* 221C84 */ void grTluigi_UnkStage0_OnLoad(void);
/* 221C88 */ void grTluigi_UnkStage0_OnStart(void);
/* 221CAC */ bool grTLuigi_80221CAC(void);
/* 221CB4 */ HSD_GObj* grTLuigi_80221CB4(int);
/* 221DC8 */ bool grTLuigi_80221DC8(Ground_GObj*);
/* 221DD0 */ void grTLuigi_80221DD0(Ground_GObj*);
/* 221DD4 */ void grTLuigi_80221DD4(Ground_GObj*);
/* 221E28 */ bool grTLuigi_80221E28(Ground_GObj*);
/* 221E64 */ void grTLuigi_80221E64(Ground_GObj*);
/* 221EB8 */ bool grTLuigi_80221EB8(Ground_GObj*);
/* 221EE0 */ void grTLuigi_80221EE0(Ground_GObj*);
/* 221EE4 */ DynamicsDesc* grTLuigi_80221EE4(enum_t);
/* 221EEC */ bool grTLuigi_80221EEC(Vec3*, int, HSD_JObj*);
/* 3E8E4C */ extern StageData grTLg_StageData;
#define GALE01_21F840
/* 3E85A4 */ extern StageData grTMr_StageData;
#define GALE01_221EF4
/* 3E8F0C */ extern StageData grTMs_StageData;
#define GALE01_2221D8
/* 3E8FCC */ extern StageData grTMewtwo_StageData;
#define GALE01_2225D0
/* 3E908C */ extern StageData grTNs_StageData;
#define GALE01_2228B4
/* 3E914C */ extern StageData grTPe_StageData;
#define GALE01_222B98
/* 3E920C */ extern StageData grTPc_StageData;
#define _grtpikachu_h_
/* 222E7C */ void grTPikachu_80222E7C(bool);
/* 222EF0 */ void grTpikachu_UnkStage0_OnLoad(void);
/* 222EF4 */ void grTpikachu_UnkStage0_OnStart(void);
/* 222F18 */ bool grTPikachu_80222F18(void);
/* 222F20 */ HSD_GObj* grTPikachu_80222F20(int);
/* 223008 */ void grTPikachu_80223008(Ground_GObj*);
/* 223034 */ bool grTPikachu_80223034(Ground_GObj*);
/* 22303C */ void grTPikachu_8022303C(Ground_GObj*);
/* 223040 */ void grTPikachu_80223040(Ground_GObj*);
/* 223094 */ bool grTPikachu_80223094(Ground_GObj*);
/* 2230D0 */ void grTPikachu_802230D0(Ground_GObj*);
/* 223124 */ bool grTPikachu_80223124(Ground_GObj*);
/* 22314C */ void grTPikachu_8022314C(Ground_GObj*);
/* 223150 */ DynamicsDesc* grTPikachu_80223150(enum_t);
/* 223158 */ bool grTPikachu_80223158(Vec3*, int, HSD_JObj*);
/* 3E92CC */ extern StageData grTPk_StageData;
#define _grtpurin_h_
/* 223160 */ void grTPurin_80223160(bool);
/* 223164 */ void grTPurin_80223164(void);
/* 2231DC */ void grTpurin_UnkStage0_OnLoad(void);
/* 2231E0 */ void grTpurin_UnkStage0_OnStart(void);
/* 223204 */ bool grTPurin_80223204(void);
/* 22320C */ HSD_GObj* grTPurin_8022320C(int);
/* 2232F4 */ void grTPurin_802232F4(Ground_GObj*);
/* 223320 */ bool grTPurin_80223320(Ground_GObj*);
/* 223328 */ void grTPurin_80223328(Ground_GObj*);
/* 22332C */ void grTPurin_8022332C(Ground_GObj*);
/* 223380 */ bool grTPurin_80223380(Ground_GObj*);
/* 223388 */ void grTPurin_80223388(Ground_GObj*);
/* 223478 */ void grTPurin_80223478(Ground_GObj*);
/* 2234CC */ bool grTPurin_802234CC(Ground_GObj*);
/* 2234F4 */ void grTPurin_802234F4(Ground_GObj*);
/* 2234F8 */ DynamicsDesc* grTPurin_802234F8(enum_t);
/* 223578 */ bool grTPurin_80223578(Vec3*, int, HSD_JObj*);
/* 3E9394 */ extern StageData grTPr_StageData;
#define GALE01_223580
/* 3E9454 */ extern StageData grTSs_StageData;
#define GALE01_223864
/* 3E9514 */ extern StageData grTSk_StageData;
#define GALE01_223B48
/* 3E95D4 */ extern StageData grTYs_StageData;
#define GALE01_223E2C
/* 3E9694 */ extern StageData grTZd_StageData;
#define GALE01_20362C
/* 20362C */ void grVenom_8020362C(void);
/* 203B14 */ void grVenom_80203B14(bool);
/* 203B18 */ void grVenom_80203B18(void);
/* 203DD0 */ void grVenom_80203DD0(void);
/* 203E80 */ void grVenom_80203E80(void);
/* 203EA4 */ bool grVenom_80203EA4(void);
/* 203EAC */ Ground_GObj* grVenom_80203EAC(int);
/* 203FC4 */ bool grVenom_80203FC4(Ground_GObj*);
/* 203FCC */ void grVenom_80203FCC(Ground_GObj*);
/* 203FD0 */ void grVenom_80203FD0(Ground_GObj*);
/* 203FD4 */ void grVenom_80203FD4(Ground_GObj*);
/* 2040A4 */ bool grVenom_802040A4(Ground_GObj*);
/* 2040AC */ void grVenom_802040AC(Ground_GObj*);
/* 2040B0 */ void grVenom_802040B0(Ground_GObj*);
/* 2040B4 */ void fn_802040B4(Ground_GObj*);
/* 2040F0 */ void grVenom_802040F0(Ground_GObj*);
/* 20427C */ bool grVenom_8020427C(Ground_GObj*);
/* 204284 */ void grVenom_80204284(Ground_GObj*);
/* 204424 */ void grVenom_80204424(Ground_GObj*);
/* 204428 */ void grVenom_80204428(Ground_GObj*);
/* 204544 */ bool grVenom_80204544(Ground_GObj*);
/* 20454C */ void grVenom_8020454C(Ground_GObj*);
/* 204B84 */ void grVenom_80204B84(Ground_GObj*);
/* 204B88 */ void grVenom_80204B88(Ground_GObj*);
/* 204CE0 */ void grVenom_80204CE0(Ground_GObj*);
/* 204CE4 */ bool grVenom_80204CE4(Ground_GObj*);
/* 204CEC */ void grVenom_80204CEC(Ground_GObj*);
/* 204DB0 */ void grVenom_80204DB0(Ground_GObj*);
/* 204DD4 */ void grVenom_80204DD4(Ground_GObj*);
/* 204EF4 */ bool grVenom_80204EF4(Ground_GObj*);
/* 204F1C */ void grVenom_80204F1C(Ground_GObj*);
/* 204F20 */ void grVenom_80204F20(Ground_GObj*);
/* 2052D8 */ bool grVenom_802052D8(Ground_GObj*);
/* 2052E0 */ void grVenom_802052E0(Ground_GObj*, Vec3*);
/* 2053B0 */ void grVenom_802053B0(Ground_GObj*);
/* 2056AC */ void grVenom_802056AC(Ground_GObj*);
/* 2056B0 */ void grVenom_802056B0(Ground_GObj*);
/* 205750 */ bool grVenom_80205750(Ground_GObj*);
/* 205758 */ void grVenom_80205758(Ground_GObj*);
/* 205AD0 */ void grVenom_80205AD0(Ground_GObj*);
/* 205AD4 */ void grVenom_80205AD4(Ground_GObj*);
/* 205DF0 */ bool grVenom_80205DF0(Ground_GObj*);
/* 205DF8 */ s32 grVenom_80205DF8(Vec3*);
/* 205E84 */ s32 grVenom_80205E84(Vec3*);
/* 205F30 */ void grVenom_80205F30(Ground_GObj*);
/* 206870 */ void grVenom_80206870(Ground_GObj*);
/* 206874 */ void grVenom_80206874(Ground_GObj*);
/* 206B68 */ bool grVenom_80206B68(Ground_GObj*);
/* 206B70 */ void grVenom_80206B70(Ground_GObj*);
/* 206B90 */ void grVenom_80206B90(Ground_GObj*);
/* 206B94 */ void grVenom_80206B94(Ground_GObj*);
/* 206BBC */ bool grVenom_80206BBC(Ground_GObj*);
/* 206BC4 */ void grVenom_80206BC4(Ground_GObj*);
/* 206BEC */ void grVenom_80206BEC(Ground_GObj*);
/* 206BF0 */ bool grVenom_80206BF0(int);
/* 206CB0 */ void grVenom_80206CB0(s32);
/* 206D10 */ s32 grVenom_80206D10(s32);
/* 206D74 */ DynamicsDesc* grVenom_80206D74(enum_t);
/* 206D7C */ bool grVenom_80206D7C(Vec3*, int, HSD_JObj*);
/* 3E54CC */ extern StageData grVe_StageData;
#define GALE01_201FA0
/* 201FA0 */ void grYorster_80201FA0(bool);
/* 201FA4 */ void grYorster_80201FA4(void);
/* 20200C */ void grYorster_8020200C(void);
/* 202010 */ void grYorster_80202010(void);
/* 202034 */ bool grYorster_80202034(void);
/* 20203C */ HSD_GObj* grYorster_8020203C(int);
/* 202150 */ bool grYorster_80202150(Ground_GObj*);
/* 202158 */ void grYorster_80202158(Ground_GObj*);
/* 20215C */ void grYorster_8020215C(Ground_GObj*);
/* 202160 */ void grYorster_80202160(HSD_GObj*);
/* 2021AC */ void grYorster_802021AC(Ground_GObj*);
/* 20224C */ bool grYorster_8020224C(Ground_GObj*);
/* 202254 */ void grYorster_80202254(Ground_GObj*);
/* 2022A0 */ void grYorster_802022A0(Ground_GObj*);
/* 2022A4 */ void grYorster_802022A4(Ground_GObj*);
/* 202428 */ void grYorster_80202428(HSD_GObj*, Ground*, Vec3*, HSD_GObj*,
                                     f32);
/* 20266C */ void grYorster_8020266C(HSD_GObj*);
/* 202B5C */ DynamicsDesc* grYorster_80202B5C(enum_t);
/* 202B64 */ bool grYorster_80202B64(Vec3*, int _, HSD_JObj*);
/* 3E51CC */ extern StageData grYt_StageData;
#define GALE01_1CA394
/* 1CA394 */ grZakoGenerator_Config*
grZakoGenerator_801CA394(grZakoGenerator_Spawn*, int,
                         grZakoGenerator_SpawnFunc, f32);
/* 1CA43C */ s32 grZakoGenerator_801CA43C(grZakoGenerator_Config*, HSD_JObj*,
                                          f32);
/* 1CA67C */ grZakoGenerator_Data* grZakoGenerator_801CA67C(void);
/* 1CA8B4 */ void grZakoGenerator_801CA8B4(int);
/* 1CAC14 */ void grZakoGenerator_801CAC14(HSD_GObj* gobj);
/* 1CACB8 */ void grZakoGenerator_801CACB8(Item_GObj* gobj);
/* 1CADBC */ void fn_801CADBC(HSD_GObj* gobj);
/* 1CADE0 */ void grZakoGenerator_801CADE0(void);
/* 1CAE04 */ HSD_GObj* grZakoGenerator_801CAE04(grZakoGenerator_SpawnDesc*);
/* 1CAEB0 */ void grZakoGenerator_801CAEB0(int, int);
/* 1CAEF0 */ void grZakoGenerator_801CAEF0(bool);
/* 1CAF08 */ void grZakoGenerator_801CAF08(void);
#define GALE01_1D84A0
/* 1D84A4 */ void grZebes_801D84A4(void);
/* 1D8644 */ void grZebes_801D8644(HSD_GObj*);
/* 1D881C */ void grZebes_801D881C(HSD_GObj*);
/* 1D9100 */ void grZebes_801D9100(HSD_GObj*);
/* 1D925C */ void grZebes_801D925C(HSD_GObj*);
/* 1D9508 */ void grZebes_801D9508(Ground_GObj*);
/* 1D9758 */ void grZebes_801D9758(Ground_GObj*);
/* 1D9798 */ void grZebes_801D9798(HSD_GObj*);
/* 1D99E0 */ void grZebes_801D99E0(HSD_GObj*);
/* 1D9F30 */ void grZebes_801D9F30(Ground_GObj*);
/* 1D9F84 */ void grZebes_801D9F84(Ground_GObj*);
/* 1DA3F4 */ void grZebes_801DA3F4(Vec3*);
/* 1DA4FC */ void grZebes_801DA4FC(Ground_GObj*);
/* 1DB088 */ s32 grZebes_801DB088(Ground*, s32);
/* 1DCB64 */ bool grZebes_801DCB64(Vec3*, int);
/* 1DCBB0 */ bool grZebes_801DCBB0(Vec3*, int);
/* 1DCBFC */ bool grZebes_801DCBFC(Ground_GObj*, HSD_GObj*, void*);
/* 1DCCC8 */ float grZebes_801DCCC8(void);
/*3E1B2C */ extern StageData grZe_StageData;
#define GALE01_20B160
/* 20B160 */ void grZebesRoute_8020B160(bool);
/* 20B164 */ void grZebesRoute_8020B164(void);
/* 20B1D4 */ void grZebesRoute_8020B1D4(void);
/* 20B1F4 */ void grZebesRoute_8020B1F4(void);
/* 20B258 */ bool grZebesRoute_8020B258(void);
/* 20B374 */ bool grZebesRoute_8020B374(Ground_GObj*);
/* 20B37C */ void grZebesRoute_8020B37C(Ground_GObj*);
/* 20B380 */ void grZebesRoute_8020B380(Ground_GObj*);
/* 20B3B0 */ bool grZebesRoute_8020B3B0(Ground_GObj*);
/* 20B3B8 */ void grZebesRoute_8020B3B8(Ground_GObj*);
/* 20B3BC */ void grZebesRoute_8020B3BC(Ground_GObj*);
/* 20B3C0 */ void grZebesRoute_8020B3C0(Ground_GObj*);
/* 20B424 */ bool grZebesRoute_8020B424(Ground_GObj*);
/* 20B42C */ void grZebesRoute_8020B42C(Ground_GObj*);
/* 20B4D4 */ void grZebesRoute_8020B4D4(Ground_GObj*);
/* 20B548 */ void grZebesRoute_8020B548(void);
/* 20B854 */ DynamicsDesc* grZebesRoute_8020B854(enum_t);
/* 20B85C */ bool grZebesRoute_8020B85C(Vec3*, int arg, HSD_JObj* jobj);
/* 3E5E0C */ extern StageData grZe_Route_StageData;
#define MELEE_GR_INLINES_H
#define GALE01_224A54
/* 224A54 */ float Stage_GetCamBoundsLeftOffset(void);
/* 224A68 */ float Stage_GetCamBoundsRightOffset(void);
/* 224A80 */ float Stage_GetCamBoundsTopOffset(void);
/* 224A98 */ float Stage_GetCamBoundsBottomOffset(void);
/* 224AB0 */ float Stage_GetCamPanAngleRadians(void);
/* 224AC8 */ float Stage_GetCamMaxDepth(void);
/* 224AD8 */ float Stage_GetCamZoomRate(void);
/* 224AE8 */ float Stage_GetCamInfoX20(void);
/* 224AF8 */ float Stage_GetCamInfoX24(void);
/* 224B08 */ float Stage_GetCamFixedZoom(void);
/* 224B18 */ float Stage_GetCamTrackRatio(void);
/* 224B28 */ float Stage_GetCamTrackSmooth(void);
/* 224B38 */ float Stage_GetBlastZoneRightOffset(void);
/* 224B50 */ float Stage_GetBlastZoneLeftOffset(void);
/* 224B68 */ float Stage_GetBlastZoneTopOffset(void);
/* 224B80 */ float Stage_GetBlastZoneBottomOffset(void);
static inline bool Stage_IsOutsideBlastZone(Vec3* pos)
{
    if (pos->x > Stage_GetBlastZoneRightOffset()) {
        return 1;
    }
    if (pos->x < Stage_GetBlastZoneLeftOffset()) {
        return 1;
    }
    if (pos->y > Stage_GetBlastZoneTopOffset()) {
        return 1;
    }
    if (pos->y < Stage_GetBlastZoneBottomOffset()) {
        return 1;
    }
    return 0;
}
static inline bool Stage_IsOutsideBlastZoneWithMargin(Vec3* pos, f32 margin)
{
    if (pos->x > Stage_GetBlastZoneRightOffset() - margin) {
        return 1;
    }
    if (pos->x < Stage_GetBlastZoneLeftOffset() + margin) {
        return 1;
    }
    if (pos->y > Stage_GetBlastZoneTopOffset() - margin) {
        return 1;
    }
    if (pos->y < Stage_GetBlastZoneBottomOffset() + margin) {
        return 1;
    }
    return 0;
}
/* 224B98 */ float Stage_CalcUnkCamY(void);
/* 224BC4 */ float Stage_CalcUnkCamYBounds(void);
/* 224BF8 */ void Stage_UnkSetVec3TCam_Offset(Vec3*);
/* 224C1C */ float Stage_GetPauseCamZPosMin(void);
/* 224C2C */ float Stage_GetPauseCamZPosInit(void);
/* 224C3C */ float Stage_GetPauseCamZPosMax(void);
/* 224C4C */ float Stage_GetCamAngleRadiansUp(void);
/* 224C64 */ float Stage_GetCamAngleRadiansDown(void);
/* 224C7C */ float Stage_GetCamAngleRadiansLeft(void);
/* 224C94 */ float Stage_GetCamAngleRadiansRight(void);
/* 224CAC */ void Stage_80224CAC(Vec3*);
/* 224D94 */ void Stage_SetVecToFixedCamPos(Vec3*);
/* 224DB8 */ float Stage_GetCamFixedFov(void);
/* 224DC8 */ bool Stage_80224DC8(s32);
/* 224E38 */ void Stage_80224E38(Vec3*, s32);
/* 224E64 */ void Stage_80224E64(enum_t, Vec3*);
/* 224FDC */ bool Stage_80224FDC(Vec3*);
/* 225074 */ s32 Stage_80225074(s32);
/* 225194 */ StKind Stage_80225194(void);
/* 22519C */ GrKind Stage_8022519C(StKind stkind);
/* 2251B4 */ void Stage_802251B4(StKind stkind);
/* 2251E8 */ void Stage_802251E8(StKind stkind, s32*);
/* 22524C */ void Stage_8022524C(void);
/* 225298 */ void Stage_80225298(void);
/* 2252E4 */ void Stage_802252E4(StKind stkind, HSD_GObj*);
/* 22532C */ void Stage_8022532C(StKind stkind, s32);
#define _IFCOGET_H_
/* 2FED14 */ void fn_802FED14(HSD_GObj* gobj);
/* 2FEFAC */ void un_802FEFAC(void);
/* 2FF128 */ void un_802FF128(int arg0, int arg1, int arg2, int arg3);
/* 2FF190 */ void un_802FF190(void);
/* 2FF1B4 */ void un_802FF1B4(void);
/* 2FF218 */ void fn_802FF218(HSD_GObj* arg0);
/* 2FF360 */ void fn_802FF360(void* arg0);
/* 2FF364 */ void un_802FF364(int slot);
/* 2FF498 */ void un_802FF498(void);
/* 2FF4FC */ void un_802FF4FC(void);
/* 2FF570 */ void un_802FF570(void);
/* 2FF620 */ void un_802FF620(void);
/* 2FF6A0 */ void un_802FF6A0(void);
/* 2FF710 */ void un_802FF710(void);
/* 2FF78C */ HSD_GObj* un_802FF78C(void);
#define MELEE_IF_STATUS_H
#define MELEE_IF_FORWARD_H
#define HSD_GOBJ_CLASS_UI 14
#define HSD_GOBJ_CLASS_TEXT 17
typedef struct DevText DevText;
typedef struct DevTextGlyph DevTextGlyph;
typedef struct Element_803F9628 Element_803F9628;
typedef struct Element_803F9628_Obj_14 Element_803F9628_Obj_14;
typedef struct IfDamageFlags IfDamageFlags;
typedef struct HudIndex HudIndex;
typedef struct IfDamageState IfDamageState;
typedef struct ifMagnify ifMagnify;
typedef struct Placeholder_8016AE50_flags Placeholder_8016AE50_flags;
typedef struct Thing_803F9628 Thing_803F9628;
typedef struct UnknownClassTypeE UnknownClassTypeE;
typedef struct un_80301C64_t un_80301C64_t;
typedef struct un_80302DF8_t un_80302DF8_t;
typedef struct un_80304138_objalloc_t_x8 un_80304138_objalloc_t_x8;
typedef struct un_80304138_objalloc_t un_80304138_objalloc_t;
typedef enum IfDamagePlace {
    Hundreds,
    Tens,
    Ones,
    Percent,
    HUD_PLACE_MAX
} IfDamagePlace;
/* 2F4910 */ HudIndex* ifStatus_GetHUDInfo(void);
/* 2F4B84 */ void ifStatus_802F4B84(IfDamageState* state, s32 is_stamina);
/* 2F4EDC */ void ifStatus_802F4EDC(HSD_GObj* gobj);
/* 2F5B48 */ void ifStatus_802F5B48(HSD_GObj* gobj);
/* 2F5DE0 */ void ifStatus_802F5DE0(HSD_GObj* player, intptr_t arg1);
/* 2F5E50 */ void ifStatus_802F5E50(HSD_GObj* gobj, intptr_t arg1);
/* 2F5EC0 */ HSD_GObj* ifStatus_802F5EC0(IfDamageState* state, s32 player_idx);
/* 2F6194 */ HSD_JObj* ifStatus_802F6194(HSD_JObj*, s32);
/* 2F61FC */ HSD_GObj* ifStatus_802F61FC(IfDamageState* state, s32 player_idx);
/* 2F6508 */ void ifStatus_802F6508(s32);
/* 2F665C */ void ifStatus_802F665C(int);
/* 2F66A4 */ void ifStatus_802F66A4(void);
/* 2F6788 */ void ifStatus_802F6788(u8);
/* 2F6804 */ void ifStatus_802F6804(void);
/* 2F6898 */ void ifStatus_802F6898(void);
/* 2F68F0 */ void ifStatus_802F68F0(void);
/* 2F6948 */ void ifStatus_802F6948(s32);
/* 2F69C0 */ void ifStatus_802F69C0(s32, s32);
/* 2F6AF8 */ void ifStatus_802F6AF8(s32);
/* 2F6C04 */ void ifStatus_802F6C04(s32);
/* 2F6D10 */ void ifStatus_802F6D10(s32);
/* 2F6E1C */ void ifStatus_802F6E1C(int slot);
/* 2F6E3C */ void ifStatus_802F6E3C(s32);
/* 4A10C8 */ extern HudIndex ifStatus_HudInfo;
#define GALE01_00B074
/* 00B074 */ bool lb_8000B074(HSD_JObj*);
/* 00B09C */ bool lb_8000B09C(HSD_JObj*);
/* 00B134 */ bool lb_8000B134(HSD_JObj*);
/// JObj_GetWorldPos(r3=JObj,r4=UnkPointer,r5=StoreResult)
/* 00B1CC */ void lb_8000B1CC(HSD_JObj* jobj, Vec3* pos0, Vec3* pos1);
/* 00B4FC */ void lb_8000B4FC(HSD_JObj*, HSD_Joint*);
/* 00B5DC */ void lb_8000B5DC(HSD_JObj*, HSD_Joint*);
/* 00B6A4 */ void lb_8000B6A4(HSD_JObj*, HSD_Joint*);
/* 00B760 */ void lb_8000B760(HSD_JObj*, HSD_Joint*);
/* 00B804 */ void lb_8000B804(HSD_JObj*, HSD_Joint*);
/* 00BA0C */ void lb_8000BA0C(HSD_JObj*, float);
/* 00BA44 */ void lbDObjSetRateAll(HSD_DObj*, float);
/* 00BB24 */ void lbDObjReqAnimAll(HSD_DObj*, float);
/* 00BD28 */ float lbGetJObjFramerate(HSD_JObj*);
/* 00BDB4 */ float lbGetJObjCurrFrame(HSD_JObj*);
/* 00BE40 */ float lbGetJObjEndFrame(HSD_JObj*);
/* 00BFF0 */ float lb_8000BFF0(HSD_AnimJoint* animjoint);
/* 00C07C */ void lb_8000C07C(HSD_JObj*, s32 i, HSD_AnimJoint**,
                              HSD_MatAnimJoint**, HSD_ShapeAnimJoint**);
/* 00C0E8 */ void lb_8000C0E8(HSD_JObj* jobj, s32 i, DynamicModelDesc*);
/* 00C160 */ void memzero(void* mem, ssize_t size);
/* 00C1C0 */ void lb_8000C1C0(HSD_JObj*, HSD_JObj* constraint);
/* 00C228 */ void lb_8000C228(HSD_JObj*, HSD_JObj* constraint);
/* 00C290 */ void lb_8000C290(HSD_JObj*, HSD_JObj* constraint);
/* 00C2F8 */ void lb_8000C2F8(HSD_JObj*, HSD_JObj* constraint);
/* 00C390 */ void lb_8000C390(HSD_JObj*);
/* 00C420 */ void lb_8000C420(HSD_JObj*, u32 flags, float limit);
/* 00C490 */ void lb_8000C490(HSD_JObj* jobj1, HSD_JObj* jobj2, HSD_JObj*,
                              float, float);
/* 00C7BC */ void lbCopyJObjSRT(HSD_JObj* src, HSD_JObj* dst);
/* 00C868 */ void lb_8000C868(HSD_Joint*, HSD_JObj*, HSD_JObj*, float, float);
/* 00CC5C */ s32 lbGetFreeColorRegister(s32 i0, HSD_MObj*, HSD_TExp*);
/* 00CC8C */ s32 lb_8000CC8C(s32 i); // return type GXTevColorArg?
/* 00CCA4 */ s32 lb_8000CCA4(s32 i);
/* 00CD60 */ s32 lbGetFreeAlphaRegister(s32 i0, HSD_MObj*, HSD_TExp*);
/* 00CD90 */ s32 lb_8000CD90(s32 i);
/* 00CDA8 */ s32 lb_8000CDA8(s32 i);
/* 00CDC0 */ HSD_LObj* lb_8000CDC0(HSD_LObj*);
/* 00CE30 */ void lb_8000CE30(HSD_DObj*, HSD_DObj*);
/* 00CE40 */ void lb_8000CE40(HSD_JObj*, HSD_DObj*);
#define LBSPDISPLAY_1_H
/* 00F9F8 */ void lb_8000F9F8(HSD_JObj* jobj);
/* 00FA94 */ void lb_8000FA94(void);
/* 00FCDC */ void lb_8000FCDC(void);
/* 00FD18 */ void lb_8000FD18(DynamicsDesc*);
/* 00FD48 */ void lb_8000FD48(HSD_JObj*, DynamicsDesc*, size_t);
/* 0100B0 */ struct lb_80011A50_t* lb_800100B0(struct lb_80011A50_t*, float);
/* 0101C8 */ float lb_800101C8(Vec3*, Vec3*);
/* 0103B8 */ float lb_800103B8(Vec3*, Vec3*);
/* 01044C */ void lb_8001044C(DynamicsDesc*, M2C_UNK, int, float pos_y, bool,
                              Fighter_Part part, int, bool);
/* 0115F4 */ void lb_800115F4(void);
/* 011710 */ void lb_80011710(DynamicsDesc*, DynamicsDesc*);
/* 0117F4 */ bool lb_800117F4(DynamicsDesc*, GXColor*, GXColor*, int, u32);
/// AestheticWindEffect(r3=sourcelocation,r4=duration,f1=radiusSize,f2=effectdegradation,f3=unk)
/* 0119DC */ void lb_800119DC(Vec3*, int, float, float, float);
/* 011A50 */ struct lb_80011A50_t* lb_80011A50(Vec3*, int, float, float, float,
                                               float, float, float, float);
/* 011ABC */ enum_t lb_80011ABC(void);
/* 013BB0 */ bool lb_80013BB0(ColorOverlay* arg);
#define GALE01_041C78
/* 041C78 */ void mpColl_80041C78(void);
/* 041C8C */ void mpCollPrev(CollData* cd);
/* 041DD0 */ void mpCollCheckBounding(CollData* cd, u32 flags);
/// "Coll_InitECB"
/* 041EE4 */ void mpColl_80041EE4(CollData*);
/* 042078 */ void mpColl_SetECBSource_JObj(CollData* cd, HSD_GObj* gobj,
                                           HSD_JObj*, HSD_JObj*, HSD_JObj*,
                                           HSD_JObj*, HSD_JObj*, HSD_JObj*,
                                           HSD_JObj*, float);
/* 04220C */ void mpColl_SetECBSource_Fixed(CollData* cd, HSD_GObj* gobj,
                                            float, float, float, float);
/* 042374 */ void mpColl_SetLedgeSnap(CollData*, float, float, float);
/* 042384 */ void mpColl_80042384(CollData* cd);
/* 0424DC */ void mpColl_LoadECB_JObj(CollData*, u32 flags);
/* 04293C */ void mpColl_LoadECB_Fixed(CollData*);
/* 042C58 */ void mpColl_80042C58(CollData*, ftCollisionBox*);
/* 042D24 */ void mpColl_LoadECB(CollData*);
/* 042DB0 */ void mpCollInterpolateECB(CollData*, float time);
/* 043268 */ void mpColl_80043268(CollData*, int line_id, bool, float);
/* 043324 */ void mpCollEnd(CollData*, bool, bool);
/* 043558 */ void mpColl_80043558(CollData*, int line_id);
/* 043670 */ void mpColl_80043670(CollData*);
/* 043680 */ void mpColl_80043680(CollData*, Vec3*);
/* 0436D8 */ void mpCollSetFacingDir(CollData*, int facing_dir);
/* 0436E4 */ void mpColl_800436E4(CollData*, float);
/* 043754 */ bool mpColl_80043754(mpColl_Callback, CollData*, u32);
/* 0439FC */ void mpColl_800439FC(CollData*);
/* 043ADC */ void mpColl_80043ADC(CollData*);
/* 043BBC */ bool mpColl_80043BBC(CollData*, int* line_id_out);
/* 043C6C */ void mpColl_80043C6C(CollData*, int, bool);
/* 043E90 */ bool mpColl_80043E90(CollData*, int* line_id_out);
/* 043F40 */ void mpColl_80043F40(CollData*, int, bool);
/* 044164 */ bool mpColl_80044164(CollData* cd, int* p_ledge_id);
/* 0443C4 */ bool mpColl_800443C4(CollData* cd, int* p_ledge_id);
/* 044628 */ bool mpColl_80044628_Floor(CollData*,
                                        bool (*)(Fighter_GObj*, int),
                                        Fighter_GObj*, int);
/* 044838 */ bool mpColl_80044838_Floor(CollData* coll, bool ignore_bottom);
/* 044948 */ bool mpColl_80044948_Floor(CollData* coll);
/* 044AD8 */ bool mpColl_80044AD8_Ceiling(CollData*, int);
/* 044C74 */ bool mpColl_80044C74_Ceiling(CollData*);
/* 044E10 */ bool mpColl_80044E10_RightWall(CollData*);
/* 0454A4 */ bool mpColl_800454A4_RightWall(CollData*);
/* 045B74 */ bool mpColl_80045B74_LeftWall(CollData*);
/* 046224 */ bool mpColl_80046224_LeftWall(CollData*);
/* 046904 */ bool mpColl_80046904(CollData*, u32 flags);
/* 046F78 */ bool mpColl_80046F78(CollData*, u32);
/* 0471F8 */ bool mpColl_800471F8(CollData*);
/* 04730C */ bool mpColl_8004730C(CollData*, ftCollisionBox*);
/* 0473CC */ bool mpColl_800473CC(CollData*);
/* 0474E0 */ bool mpColl_800474E0(CollData*);
/* 0475F4 */ bool mpColl_800475F4(CollData*, ftCollisionBox*);
/* 0476B4 */ bool mpColl_800476B4(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 0477E0 */ bool mpColl_800477E0(CollData*);
/* 0478F4 */ bool mpColl_800478F4(CollData*);
/* 047A08 */ bool mpColl_80047A08(CollData*, ftCollisionBox*);
/* 047AC8 */ bool mpColl_80047AC8(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 047BF4 */ bool mpColl_80047BF4(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 047D20 */ bool mpColl_80047D20(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 047E14 */ bool mpColl_80047E14(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 047F40 */ bool mpColl_80047F40(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 04806C */ bool mpColl_8004806C(CollData*, bool (*)(Fighter_GObj*, enum_t),
                                  Fighter_GObj*);
/* 048160 */ bool mpColl_80048160(CollData*);
/* 048274 */ bool mpColl_80048274(CollData*);
/* 048388 */ bool mpColl_80048388(CollData*);
/* 048464 */ bool mpColl_80048464(CollData*);
/* 048578 */ bool mpColl_80048578(CollData*);
/* 048654 */ bool mpColl_80048654(CollData*);
/* 048768 */ bool mpColl_80048768(CollData*);
/* 048844 */ bool mpColl_80048844(CollData*);
/* 0488F4 */ bool mpColl_800488F4(CollData*);
/* 048AB0 */ bool mpColl_80048AB0_RightWall(CollData*);
/* 0491C8 */ bool mpColl_800491C8_RightWall(CollData*);
/* 049778 */ bool mpColl_80049778_LeftWall(CollData*);
/* 049EAC */ bool mpColl_80049EAC_LeftWall(CollData*);
/* 04A45C */ bool mpColl_8004A45C_Floor(CollData*, int line_id);
/* 04A678 */ bool mpColl_8004A678_Floor(CollData*, int line_id);
/* 04A908 */ bool mpColl_8004A908_Floor(CollData*, int line_id);
/* 04AB80 */ bool mpColl_8004AB80(CollData*);
/* 04ACE4 */ bool mpColl_8004ACE4(CollData*, int);
/* 04B108 */ bool mpColl_8004B108(CollData*);
/* 04B21C */ bool mpColl_8004B21C(CollData*, ftCollisionBox*);
/* 04B2DC */ bool mpColl_8004B2DC(CollData*);
/* 04B3F0 */ bool mpColl_8004B3F0(CollData*, ftCollisionBox*);
/* 04B4B0 */ bool mpColl_8004B4B0(CollData*);
/* 04B5C4 */ bool mpColl_8004B5C4(CollData*);
/* 04B6D8 */ bool mpColl_8004B6D8(CollData*);
/* 04B894 */ bool mpColl_8004B894_RightWall(CollData*);
/* 04BDD4 */ bool mpColl_8004BDD4_LeftWall(CollData*);
/* 04C328 */ bool mpColl_8004C328_Ceiling(CollData*, int line_id);
/* 04C534 */ bool mpColl_8004C534(CollData*, u32);
/* 04C750 */ bool mpColl_8004C750(CollData*);
/* 04C864 */ void mpCollSqueezeHorizontal(CollData*, bool airborne, float left,
                                          float right);
/* 04C91C */ void mpCollSqueezeVertical(CollData*, bool airborne, float top,
                                        float bottom);
/* 04CA6C */ float mpColl_8004CA6C(CollData*);
/* 04CAA0 */ bool mpCollGetSpeedCeiling(CollData*, Vec3* speed);
/* 04CAE8 */ bool mpCollGetSpeedLeftWall(CollData*, Vec3* speed);
/* 04CB30 */ bool mpCollGetSpeedRightWall(CollData*, Vec3* speed);
/* 04CB78 */ bool mpCollGetSpeedFloor(CollData*, Vec3* speed);
/* 04CBC0 */ bool mpColl_IsOnPlatform(CollData*);
/* 04CBE8 */ void mpUpdateFloorSkip(CollData*);
/* 04CBF4 */ void mpClearFloorSkip(CollData*);
/* 04CC00 */ void mpCopyCollData(CollData* src, CollData* dst, int);
/* 04D024 */ bool mpColl_8004D024(Vec3*);
/* 04F42C */ s32 mpColl_8004F42C(int joint, int index);
/* 4D64AC */ extern int mpColl_804D64AC;
#define _gobjgxlink_h_
void GObj_GXReorder(HSD_GObj* gobj, HSD_GObj* hiprio_gobj);
void GObj_SetupGXLink(HSD_GObj* gobj, GObj_RenderFunc render_cb, u8 gx_link,
                      u32 priority);
void GObj_SetupGXLinkMax(HSD_GObj* gobj, GObj_RenderFunc render_cb,
                         u32 priority);
void GObj_SetupGXLinkMaxSorted(HSD_GObj* gobj, GObj_RenderFunc render_cb,
                               u32 priority);
void HSD_GObjGXLink_8039084C(HSD_GObj*);
void HSD_GObjGXLink_80390908(HSD_GObj*, u8 gx_link, u8 priority);
void HSD_GObjGXLink_803909D8(HSD_GObj*, HSD_GObj*);
#define SYSDOLPHIN_BASELIB_GOBJPROC_H
struct HSD_GObjProc {
    /* 0x00 */ HSD_GObjProc* child;
    /* 0x04 */ HSD_GObjProc* next;
    /* 0x08 */ HSD_GObjProc* prev;
    /* 0x0C */ u8 s_link;
    /* 0x0D */ u8 flags_1 : 1;
    /* 0x0D */ u8 flags_2 : 1;
    /* 0x0D */ u8 flags_3 : 2;
    /* 0x0D */ u8 flags_4 : 2;
    /* 0x10 */ HSD_GObj* gobj; // owner
    /* 0x14 */ HSD_GObjEvent on_invoke;
};
/* 38FAA8 */ void HSD_GObjProc_QueueProc(HSD_GObjProc* gproc);
/* 38FC18 */ void HSD_GObjProc_UnqueueProc(HSD_GObjProc* gproc);
/* 38FCE4 */ void HSD_GObjProc_UnlinkProcFromGObj(HSD_GObjProc* gproc);
/* 38FD54 */ HSD_GObjProc* HSD_GObj_SetupProc(HSD_GObj*, HSD_GObjEvent, u8);
/* 38FE24 */ void HSD_GObjProc_RemoveProc(HSD_GObjProc* gproc);
/* 38FED4 */ void HSD_GObjProc_RemoveAllProcs(HSD_GObj* gobj);
#define _random_h_
s32 HSD_Rand(void);
f32 HSD_Randf(void);
s32 HSD_Randi(s32 max_val);
void _HSD_RandForgetMemory(void* low, void* high);
extern u32* HSD_RandSeedPtr;
/// #HSD_Randi that accepts an empty range.
static inline int randi(int max_val)
{
    if (max_val != 0) {
        return HSD_Randi(max_val);
    }
    return 0;
}
#define GET_GROUND(gobj) ((Ground*) HSD_GObjGetUserData(gobj))
/// Resets the map's model to its base pose and starts its animation set 0
/// from frame 0.
static inline void Ground_StartMapAnim(Ground_GObj* gobj)
{
    Ground* gp = ((Ground*) HSD_GObjGetUserData(gobj));
    grAnime_801C8138(gobj, gp->map_id, 0);
}
/// Binds the map's collision joints to its model, then starts animation set
/// 0 from frame 0.
static inline void Ground_InitMapCollAndAnim(Ground_GObj* gobj)
{
    Ground* gp = ((Ground*) HSD_GObjGetUserData(gobj));
    HSD_JObj* jobj = ((HSD_JObj*) HSD_GObjGetHSDObj(gobj));
    Ground_InitMapColl(jobj, gp->map_id);
    grAnime_801C8138(gobj, gp->map_id, 0);
}
/// Advances the dynamics wind/force list, then re-syncs the map's collision
/// joints to its animated model.
static inline void Ground_UpdateWindAndMapColl(Ground_GObj* gobj)
{
    lb_800115F4();
    Ground_UpdateMapColl(gobj);
}
/// @todo Call sites have a lot of duplicate code
static inline void Ground_SetupStageCallbacks(Ground_GObj* gobj,
                                              StageCallbacks* callbacks)
{
    Ground* gp = ((Ground*) HSD_GObjGetUserData(gobj));
    gp->x8_callback = 0L;
    gp->xC_callback = 0L;
    GObj_SetupGXLink(gobj, grDisplay_801C5DB0, 3, 0);
    if (callbacks->callback3 != 0L) {
        gp->x1C_callback = callbacks->callback3;
    }
    if (callbacks->on_init != 0L) {
        callbacks->on_init(gobj);
    }
    if (callbacks->gobj_proc != 0L) {
        HSD_GObj_SetupProc(gobj, callbacks->gobj_proc, 4);
    }
}
static inline void Ground_InitScene(void)
{
    Camera_Init(6);
    lb_8000FCDC();
    mpColl_80041C78();
    Ground_801C0378(0x40);
}
static inline void Stage_InitScene(StKind stkind, s32* arg1)
{
    Ground_InitScene();
    Stage_802251E8(stkind, arg1);
}
static inline void Ground_InitTargetStage(HSD_GObj* (*create_gobj)(int) )
{
    stage_info.unk8C.b4 = 0;
    stage_info.unk8C.b5 = 1;
    create_gobj(0);
    create_gobj(1);
    create_gobj(2);
    Ground_801C39C0();
    Ground_801C3BB4();
    Ground_801C4210();
    Ground_801C42AC();
}
static inline void Ground_ClearStarFoxArwingGObjs(Ground* gp)
{
    gp->u.starfox.article_gobjs[3] = 0L;
    gp->u.starfox.article_gobjs[2] = 0L;
    gp->u.starfox.article_gobjs[1] = 0L;
    gp->u.starfox.article_gobjs[0] = 0L;
}
static inline void Ground_AnimateStarFoxArwing(Ground_GObj* gobj)
{
    grAnime_801C7FF8(gobj, 0, 7, 1, 0.0F, 1.0F);
    grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
}
static inline void Ground_AnimateStarFoxArwingWithBackground(Ground_GObj* gobj)
{
    grAnime_801C7FF8(gobj, 7, 7, 0, 0.0F, 1.0F);
    grAnime_801C7FF8(gobj, 8, 7, 0, 0.0F, 1.0F);
    grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
}
static inline void Ground_LinkStarFoxArwing(Ground* gp, HSD_GObj* linked_gobj)
{
    gp->u.starfox.linked_gobj = linked_gobj;
    if (linked_gobj != 0L) {
        Ground* linked_gp = ((Ground*) HSD_GObjGetUserData(gp->u.starfox.linked_gobj));
        if (linked_gp != 0L) {
            linked_gp->u.starfox.arwing_slot = gp->u.starfox.arwing_slot;
        }
    }
}
static inline void Ground_DisableStarFoxArwingGObjs(Ground* gp)
{
    gp->u.starfox.article_gobjs[0] = (HSD_GObj*) -1;
    gp->u.starfox.article_gobjs[1] = (HSD_GObj*) -1;
}
static inline void Ground_ResetStarFoxArwingState(Ground* gp)
{
    gp->u.starfox.xC4.flags.b0 = 0;
    gp->u.starfox.xD4 = 0;
    gp->u.starfox.xF0 = 0;
    gp->u.starfox.xF4 = 0;
}
static inline void Ground_AttachStarFoxArwingModel(Ground_GObj* gobj,
                                                   Ground* gp,
                                                   Ground_GObj* arwing_gobj,
                                                   int joint_id)
{
    lb_8000C2F8(Ground_801C3FA4(gobj, 0),
                Ground_801C3FA4(arwing_gobj, joint_id));
    gp->u.starfox.linked_gobj = 0L;
}
static inline void Ground_UpdateStarFoxArwingVisibility(Ground* gp,
                                                        HSD_JObj* jobj,
                                                        f32 depth_limit)
{
    f32 angle = ((gp->u.arwing.xE0.z) < 0 ? -(gp->u.arwing.xE0.z) : (gp->u.arwing.xE0.z));
    if (angle < depth_limit) {
        gp->u.arwing.xE0.z = 0.0F;
        while (gp->u.arwing.xDC < -3.14159265358979323846) {
            gp->u.arwing.xDC += 6.283185307179586;
        }
        while (gp->u.arwing.xDC > 3.14159265358979323846) {
            gp->u.arwing.xDC -= 6.283185307179586;
        }
        if (((gp->u.arwing.xDC) < 0 ? -(gp->u.arwing.xDC) : (gp->u.arwing.xDC)) < 1.0471976F) {
            HSD_JObjClearFlagsAll(jobj, (1 << 4));
        } else {
            HSD_JObjSetFlagsAll(jobj, (1 << 4));
        }
    } else {
        HSD_JObjSetFlagsAll(jobj, (1 << 4));
    }
    HSD_JObjSetTranslate(jobj, &gp->u.arwing.xE0);
}
static inline void
Ground_UpdateStarFoxSequence(Ground_GObj* gobj, Ground* gp,
                             int sequence_gobj_id,
                             Ground_GObj* (*create_gobj)(int) )
{
    ifStatus_802F6898();
    un_802FF570();
    if (Ground_GetMapGObj(sequence_gobj_id) == 0L) {
        if (grCorneria_801E2598(gp->u.starfox.xC4.word,
                                gp->u.starfox.arwing_slot))
        {
            if ((gp->u.starfox.xCC--) < 0) {
                Ground_GObj* sequence_gobj = create_gobj(sequence_gobj_id);
                grCorneria_801E2738(
                    sequence_gobj, &((Ground*) HSD_GObjGetUserData(sequence_gobj))->u,
                    gp->u.starfox.xC4.word, gp->u.starfox.arwing_slot);
                gp->u.starfox.arwing_slot++;
                gp->u.starfox.xCC = 0;
            }
        } else if ((gp->u.starfox.xCC--) < 0) {
            Ground_801C4A08(gobj);
        }
    }
}
static inline void Ground_ClampSymmetric(f32 value, f32 limit, f32* out)
{
    if (value > limit) {
        *out = limit;
    } else {
        limit = -limit;
        if (value < limit) {
            *out = limit;
        }
    }
}
static inline void Ground_WrapAngle(f32* angle)
{
    if (*angle > 6.283185307179586) {
        *angle -= 6.283185307179586;
    } else if (*angle < -6.283185307179586) {
        *angle += 6.283185307179586;
    }
}
#define ZRANDI(n) ((n) != 0 ? HSD_Randi(n) : 0)
static inline int rand_range(int a, int b)
{
    if (a > b) {
        return b + ((a - b) != 0 ? HSD_Randi(a - b) : 0);
    } else if (a < b) {
        return a + ((b - a) != 0 ? HSD_Randi(b - a) : 0);
    } else {
        return a;
    }
}
#define MELEE_IF_2F6E_H
#define MELEE_IF_TYPES_H
struct IfDamageFlags {
    u8 explode_animation : 1;
    u8 randomize_velocity : 1;
    u8 force_digit_shake : 1;
    u8 unk10 : 1;
    u8 hide_all_digits : 1;
    u8 animation_status_id : 2;
    u8 unk1 : 1;
};
struct UnknownClassTypeE {
    s32 padding[0x24];
    HSD_JObj* unk28;
};
struct IfDamageState {
    /* +00 */ HSD_GObj* HUD_parent_entity;
    /* +04 */ HSD_GObj* next;
    /* +08 */ u8 player_slot;
    /* +09 */ u8 unk9;
    /* +0A */ s16 damage_percent;
    /* +0C */ s16 old_damage;
    /* +0E */ u8 damage_from_last_attack;
    /* +0F */ u8 frames_of_shake_remaining;
    /* +10 */ IfDamageFlags flags;
    /* +14 */ float translation_x[HUD_PLACE_MAX];
    /* +24 */ float translation_y[HUD_PLACE_MAX];
    /* +34 */ float velocity_x[HUD_PLACE_MAX];
    /* +44 */ float velocity_y[HUD_PLACE_MAX];
    /* +54 */ HSD_JObj* jobjs[HUD_PLACE_MAX];
};
struct HudIndex {
    IfDamageState players[6];
    /* +258 */ HSD_Joint* damage_num_joint;
    /* +25C */ HSD_AnimJoint** damage_num_anims;
    /* +260 */ HSD_MatAnimJoint** damage_num_matanims;
    /* +264 */ HSD_ShapeAnimJoint** damage_num_shapeanims;
    /* +268 */ HSD_Joint* damage_mark_joint;
    /* +26C */ HSD_AnimJoint** damage_mark_anims;
    /* +270 */ HSD_MatAnimJoint** damage_mark_matanims;
    /* +274 */ HSD_ShapeAnimJoint** damage_mark_shapeanims;
};
struct Element_803F9628_Obj_14 {
    s32 padding[6];
    s32 unk1C;
};
struct Element_803F9628_x12 {
    u8 x0 : 1;
    u8 x1 : 1;
    u8 x2 : 1;
    u8 x3 : 1;
    u8 x4 : 1;
    u8 x5 : 1;
    u8 x6 : 1;
    u8 x7 : 1;
};
typedef void (*IfStatusCb)(int);
struct Element_803F9628 {
    /* +00 */ HSD_GObj* x0;
    /* +04 */ u32 x4;
    /* +08 */ void (*x8)(HSD_GObj*);
    /* +0C */ s32 xC;
    /* +10 */ u8 x10;
    /* +11 */ u8 x11;
    /* +12 */ struct Element_803F9628_x12 x12;
    /* +13 */ u8 x13;
    /* +14 */ DynamicModelDesc* x14;
    /* +18 */ IfStatusCb x18;
    /* +1C */ IfStatusCb x1C;
    /* +20 */ s32 x20;
    /* +24 */ s32 x24;
};
struct Placeholder_8016AE50_flags {
    u8 unk80 : 1;
    u8 unk40 : 1;
    u8 unk20 : 1;
    u8 unk10 : 1;
    u8 unk8 : 1;
    u8 unk4 : 1;
    u8 unk2 : 1;
    u8 unk1 : 1;
};
struct Placeholder_8016AE50_ret_val {
    u8 unk0;
    u8 unk1;
    Placeholder_8016AE50_flags flags;
};
typedef struct ifMagnifyPlayer {
    HSD_GObj* gobj; // ifMagnify_802fc750 accesses 0x804A1DF4 + slot * 0x10
                    // for a GObj
    HSD_JObj* jobj; // ifMagnify_802fc3c0 / ifMagnify_802fb8c0 access
                    // 0x804A1DF8 for a JObj
    HSD_ImageDesc*
        idesc; // ifMagnify_802FBBDC access 0x804A1DFC for an ImageDesc
    struct {
        u8 is_offscreen : 1;
        u8 ignore_offscreen : 1;
        u8 edge : 6;
    } state;
} ifMagnifyPlayer;
struct ifMagnify {
    DynamicModelDesc** model_desc;
    GXColor x4;
    GXColor x8;
    GXColor xC;
    GXColor x10;
    ifMagnifyPlayer player[6];
    HSD_ImageDesc image_descs[5];
    u8 pad[0xF0 - 0xEC];
};
#define DEVTEXT_FLAG_HIDETEXT (0x80)
#define DEVTEXT_FLAG_HIDEBACKGROUND (0x40)
#define DEVTEXT_FLAG_NOWRAP (0x20)
#define DEVTEXT_FLAG_SHOWCURSOR (0x10)
struct DevTextGlyph {
    u8 chr;
    u8 color : 2;
    u8 unk : 6;
};
struct DevText {
    /*  +0 */ s16 x;
    /*  +2 */ s16 y;
    /*  +4 */ u8 w;
    /*  +5 */ u8 h;
    /*  +6 */ u8 cursor_x;
    /*  +7 */ u8 cursor_y;
    /*  +8 */ f32 scale_x;
    /*  +C */ f32 scale_y;
    /* +10 */ GXColor bg_color;
    /* +14 */ GXColor text_colors[4];
    /* +24 */ s8 id;
    /* +25 */ u8 line_width;
    /* +26 */ u8 flags;
    /* +27 */ u8 unk : 6;
    /* +27 */ u8 current_color : 2;
    /* +28 */ DevTextGlyph* buf;
    /* +2C */ struct DevText* prev;
    /* +30 */ struct DevText* next;
};
;
struct un_804D6EF4_t {
    /* +0x00 */ u32 x00;
    /* +0x04 */ HSD_GObj* unk4;
    /* +0x08 */ u32 x08;
    /* +0x0C */ u32 x0C;
    /* +0x10 */ HSD_JObj* jobjs[16];
    /* +0x50 */ HSD_Archive* archive;
    /* +0x54 */ s16 x54;
    /* +0x56 */ s16 x56;
    /* +0x58 */ s16 x58;
    /* +0x5A */ char pad_5A[2];
    /* +0x5C */ s8 x5C;
    /* +0x5D */ s8 x5D;
    /* +0x5E */ s8 x5E;
};
struct un_80301C64_t {
    void* x0;
    s32 x4;
};
;
enum soundtest_callback_arg0 {
    soundtest_callback_0,
    soundtest_callback_1,
    soundtest_callback_6 = 6,
};
typedef bool (*soundtest_callback)(enum soundtest_callback_arg0 arg0);
struct un_80304138_objalloc_t_x8 {
    int x0;
    soundtest_callback x4;
    char* x8;
    char** xC;
    union {
        void* any;
        int* i;
        u8* b;
        u16* h;
        u32* w;
        f32* f;
    } x10;
    float x14;
    float x18;
    float x1C;
};
;
struct un_80304138_objalloc_t {
    unsigned char x0;
    unsigned char x1;
    DevText* x4;
    struct un_80304138_objalloc_t_x8* x8;
    soundtest_callback xC;
    HSD_GObj* x10;
    HSD_GObjProc* x14;
    struct un_80304138_objalloc_t* prev;
    struct un_80304138_objalloc_t* next;
};
;
struct ifStock_804A1378_per_player {
    HSD_GObj* x0;
    HSD_JObj* x4[8];
    HSD_JObj* x24;
    HSD_JObj* x28;
    HSD_JObj* x2C;
    HSD_JObj* x30;
    HSD_JObj* x34;
    HSD_JObj* x38;
    HSD_JObj* x3C;
    HSD_JObj* x40;
    HSD_JObj* x44;
    int coins;
    int stocks;
};
struct IfStockStealAnim {
    Vec3 start;
    Vec3 mid;
    Vec3 end;
};
struct IfStockUserData {
    u8 player;
    u8 mode;
    u8 flag;
    u8 x3[2];
    u8 anim[7];
    struct IfStockStealAnim steal[2];
};
struct ifStock_804A1378 {
    DynamicModelDesc** x0;
    DynamicModelDesc* x4;
    struct ifStock_804A1378_per_player player[6];
    HSD_GObj* gobj;
    HSD_JObj* jobj;
    char pad1F0[0x1F4 - 0x1F0];
    HSD_JObj* jobj_a;
    HSD_JObj* jobj_b;
    HSD_JObj* jobj_c;
    HSD_JObj* jobj_d;
};
struct ifStock_804A1774 {
    char x0;
    signed char x1[130];
    signed char x83[133];
    int x108;
    HSD_GObj* x10C[131];
};
struct ifStock_804A1ACC {
    char x0;
    signed char x1[130];
    signed char x83[133];
    HSD_GObj* x108;
    HSD_GObj* x10C[130];
};
/* 2F6EA4 */ void ifStatus_802F6EA4(int, int, int, int, IfStatusCb,
                                    IfStatusCb);
/* 2F7034 */ void ifStatus_802F7034(IfStatusCb);
/* 2F7134 */ void ifStatus_802F7134(void);
/* 2F7220 */ void ifStatus_802F7220(void);
/* 3F9628 */ extern Element_803F9628 ifStatus_803F9628[8];
#define GALE01_2F7288
/* 2F7288 */ s32 fn_802F7288(HSD_GObj*, Element_803F9628*);
/* 2F73C4 */ void if_802F73C4(HSD_GObj*);
/* 2F74D0 */ void if_802F74D0(HSD_GObj*);
/* 2F75D4 */ void fn_802F75D4(HSD_GObj*);
/* 2F7670 */ void fn_802F7670(HSD_GObj*);
/* 2F770C */ void fn_802F770C(HSD_GObj* gobj, intptr_t callback);
/* 2F77F8 */ HSD_GObj* fn_802F77F8(HSD_GObj*, u8, u16);
/* 2F7994 */ void fn_802F7994(HSD_GObj*);
/* 2F7AF8 */ void if_802F7AF8(s32);
/* 2F7BB4 */ void if_802F7BB4(s32);
/* 2F7C30 */ void if_802F7C30(s32);
/* 2F7D08 */ void if_802F7D08(s32);
/* 2F7E24 */ void if_802F7E24(void);
/* 2F7E7C */ void if_802F7E7C(void);
#define _IF_2FC93_H_
/* 2FD910 */ void un_802FD910(void);
/* 2FD91C */ void un_802FD91C(void);
/* 2FD928 */ void un_802FD928(unsigned char slot, u8 arg1, GXColor* arg2);
/* 2FD9D8 */ void un_802FD9D8(unsigned char slot);
/* 2FDA4C */ void fn_802FDA4C(HSD_GObj* gobj, intptr_t pass);
/* 2FDA78 */ void fn_802FDA78(HSD_GObj* gobj);
/* 2FE260 */ void un_802FE260(void);
/* 2FE390 */ void un_802FE390(void);
/* 4A1F48 */ extern struct un_804A1F48_t if_Scene_Prize_EnterData;
#define _IF_2FFC_H_
struct UnkSoundTestData0 {
    u16 x0;
    u16 x2;
    s32 x4;
    s32 x8;
};
;
struct un_803FA258_t {
    /* 0x000 */ int x0;
    /* 0x004 */ int x4;
    /* 0x008 */ int x8;
    /* 0x00C */ int xC;
    /* 0x010 */ int x10[5];
    /* 0x024 */ int x24[5];
    /* 0x038 */ int x38[4];
    /* 0x048 */ int x48[4];
    /* 0x058 */ int x58[4];
    /* 0x068 */ int x68[4];
    /* 0x078 */ f32 x78[4];
    /* 0x088 */ f32 x88[4];
    /* 0x098 */ f32 x98[4];
    /* 0x0A8 */ int xA8[4];
    /* 0x0B8 */ int xB8[4];
    /* 0x0C8 */ int xC8;
    /* 0x0CC */ int xCC[4];
    /* 0x0DC */ int xDC[4];
    /* 0x0EC */ f32 xEC;
    /* 0x0F0 */ u16 xF0;
    /* 0x0F2 */ u8 _padF2[2];
    /* 0x0F4 */ u8 xF4;
    /* 0x0F5 */ u8 xF5;
    /* 0x0F6 */ u8 xF6;
    /* 0x0F7 */ u8 xF7;
    /* 0x0F8 */ int xF8;
    /* 0x0FC */ int xFC;
    /* 0x100 */ int x100;
    /* 0x104 */ int x104;
    /* 0x108 */ int x108;
    /* 0x10C */ int x10C;
    /* 0x110 */ int x110;
    /* 0x114 */ int x114;
    /* 0x118 */ int x118;
    /* 0x11C */ int x11C;
    /* 0x120 */ int x120;
    /* 0x124 */ int x124;
    /* 0x128 */ int x128;
    /* 0x12C */ int x12C;
    /* 0x130 */ int x130;
    /* 0x134 */ int x134;
    /* 0x138 */ void* x138;
    /* 0x13C */ int x13C;
    /* 0x140 */ int x140;
    /* 0x144 */ int x144[17];
    /* 0x188 */ int x188;
    /* 0x18C */ int x18C;
};
/* 2FFCD0 */ void un_802FFCD0(int count, int* values);
/* 2FFD94 */ void un_802FFD94(int a, void* b, soundtest_callback c);
/* 2FFE0C */ bool fn_802FFE0C(enum soundtest_callback_arg0);
/* 2FFE6C */ bool fn_802FFE6C(enum soundtest_callback_arg0);
/* 2FFEA4 */ bool un_802FFEA4(enum soundtest_callback_arg0);
/* 2FFEE0 */ void un_802FFEE0(struct UnkSoundTestData0*);
/* 2FFF2C */ void un_802FFF2C(StartMeleeData*);
/* 3FA4E0 */ extern struct un_80304138_objalloc_t_x8 un_803FA4E0[11];
/* 4D5880 */ extern char* un_804D5880[2];
#define _IF_3004_H_
struct UnkSoundTestData1 {
    /* 0x00 */ s32 unk_0; /* inferred */
    /* 0x04 */ s32 unk_4; /* inferred */
    /* 0x08 */ u8 unk_8; /* inferred */
    /* 0x09 */ u8 unk_9; /* inferred */
    /* 0x0A */ u8 unk_A; /* inferred */
    /* 0x0B */ u8 unk_B; /* inferred */
    /* 0x0C */ u8 unk_C; /* inferred */
    /* 0x0D */ u8 unk_D; /* inferred */
    /* 0x0E */ u8 unk_E; /* inferred */
    /* 0x0F */ u8 unk_F; /* inferred */
    /* 0x10 */ u8 unk_10; /* inferred */
    /* 0x11 */ u8 unk_11; /* inferred */
    /* 0x12 */ u8 unk_12; /* inferred */
    /* 0x13 */ u8 unk_13; /* inferred */
    /* 0x14 */ u8 unk_14; /* inferred */
    /* 0x15 */ u8 unk_15; /* inferred */
    /* 0x16 */ u8 unk_16; /* inferred */
    /* 0x17 */ u8 unk_17; /* inferred */
    /* 0x18 */ u8 unk_18; /* inferred */
    /* 0x19 */ u8 unk_19; /* inferred */
    /* 0x1A */ u8 unk_1A; /* inferred */
    /* 0x1B */ u8 unk_1B; /* inferred */
    /* 0x1C */ u8 unk_1C; /* inferred */
    /* 0x1D */ u8 unk_1D; /* inferred */
    /* 0x1E */ u8 unk_1E; /* inferred */
}; /* size = 0x20 */
;
/* 301420 */ bool un_80301420(enum soundtest_callback_arg0);
/* 301BA8 */ void un_80301BA8(struct UnkSoundTestData1* out);
/* 301C64 */ void un_80301C64(un_80301C64_t*);
/* 3FA790 */ extern struct un_80304138_objalloc_t_x8 un_803FA790[4];
/* 3FC4CC */ extern struct un_80304138_objalloc_t_x8 un_803FC4CC[10];
#define MELEE_IF_IFALL_H
/* 2F3394 */ void ifAll_802F3394(void);
/* 2F33CC */ void ifAll_802F33CC(void);
/* 2F3404 */ HSD_GObj* ifAll_GetHUDGObj(void);
/* 2F3414 */ Vec3* ifAll_GetTimerPosition(void);
/* 2F3424 */ Vec3* ifAll_GetPlayerHUDPosition(int idx);
/* 2F343C */ void ifAll_802F343C(int);
/* 2F3690 */ HSD_Archive** ifAll_GetArchive(void);
/* 2F3698 */ void ifAll_HideHUD(void);
/* 2F36A4 */ void ifAll_ShowHUD(void);
/* 2F36B0 */ bool ifAll_IsHUDHidden(void);
/* 2F390C */ void ifAll_802F390C(void);
/* 2F3A64 */ void ifAll_802F3A64(void);
#define _IFHAZARD_H_
/* 2FD604 */ void un_802FD604(int);
/* 2FD65C */ void un_802FD65C(void);
/* 2FD668 */ void un_802FD668(void);
/* 2FD674 */ void un_802FD674(void);
/* 2FD680 */ void fn_802FD680(HSD_GObj* gobj);
/* 2FD6CC */ void fn_802FD6CC(HSD_GObj* gobj, intptr_t pass);
/* 2FD704 */ void un_802FD704(void);
/* 2FD708 */ void un_802FD708(DynamicModelDesc*, int);
/* 2FD8A0 */ void un_802FD8A0(DynamicModelDesc*);
/* 2FD8C4 */ void un_802FD8C4(DynamicModelDesc*);
/* 2FD8E8 */ void un_802FD8E8(DynamicModelDesc*);
/* 2FD90C */ void un_802FD90C(void);
#define GALE01_2FB6E8
/* 2FB6E8 */ s32 ifMagnify_802FB6E8(s32);
/* 2FB73C */ ifMagnifyPlayer* ifMagnify_802FB73C(ifMagnifyPlayer*, Vec2*,
                                                 Vec2*);
/* 2FB8C0 */ void ifMagnify_802FB8C0(HSD_GObj*, intptr_t);
/* 2FBBDC */ void ifMagnify_802FBBDC(HSD_GObj*, intptr_t);
/* 2FC3BC */ void ifMagnify_802FC3BC(void*);
/* 2FC3C0 */ void ifMagnify_802FC3C0(s32 slot);
/* 2FC618 */ void ifMagnify_802FC618(void);
/* 2FC750 */ void ifMagnify_802FC750(void);
/* 2FC7C0 */ void ifMagnify_802FC7C0(ifMagnify* magnify);
/* 2FC870 */ void ifMagnify_802FC870(void);
/* 2FC8E8 */ void ifMagnify_802FC8E8(void);
/* 2FC940 */ void ifMagnify_802FC940(void);
/* 2FC998 */ bool ifMagnify_802FC998(s32 ply_slot);
/* 4A1DE0 */ extern ifMagnify ifMagnify_804A1DE0;
#define _IFNAMETAG_H_
#define NAMETAG_DISABLED 120
/* 2FC9B4 */ float un_802FC9B4(unsigned char slot, unsigned char arg1,
                               unsigned char arg2, unsigned char arg3);
/* 2FCAC4 */ void fn_802FCAC4(HSD_GObj* gobj, intptr_t pass);
/* 2FCBA0 */ void un_802FCBA0(void);
/* 2FCC44 */ void fn_802FCC44(HSD_GObj* gobj);
/* 2FCF38 */ void NameTag_Create(int slot);
/* 2FD28C */ void un_802FD28C(int slot);
/* 2FD404 */ void un_802FD404(void);
/* 2FD428 */ void un_802FD428(void);
/* 2FD450 */ void un_802FD450(void);
/* 2FD45C */ void un_802FD45C(void);
/* 2FD468 */ void un_802FD468(void);
/* 2FD4C8 */ void un_802FD4C8(void);
#define _IFPRIZE_H_
/* 2FE3F8 */ void un_802FE3F8(int a, int b, u16* c, u16* d);
/* 2FE470 */ void fn_802FE470(HSD_GObj* gobj);
/* 2FE6A8 */ void un_802FE6A8(void);
/* 2FE8CC */ void un_802FE8CC(void);
/* 2FE918 */ void un_802FE918(int a, int b, int c);
/* 2FEBE0 */ void ifPrize_Scene_OnEnter(void* arg0);
/* 2FED10 */ void ifPrize_Scene_OnExit(void*);
#define GALE01_2F7EFC
/* 2F7EFC */ int ifStock_802F7EFC(int, int);
/* 2F8298 */ void ifStock_802F8298(HSD_GObj*);
/* 2F89F8 */ void ifStock_802F89F8(HSD_GObj*);
/* 2F8DB0 */ void fn_802F8DB0(HSD_GObj*);
/* 2F8E08 */ void fn_802F8E08(HSD_GObj*);
/* 2F916C */ void fn_802F916C(HSD_GObj*);
/* 2F9410 */ void fn_802F9410(HSD_GObj*);
/* 2F94E0 */ void fn_802F94E0(HSD_GObj*, intptr_t);
/* 2F9548 */ void fn_802F9548(HSD_GObj*, intptr_t);
/* 2F9598 */ void fn_802F9598(HSD_GObj*, intptr_t);
/* 2F95E8 */ void fn_802F95E8(HSD_GObj*, intptr_t);
/* 2F9680 */ void fn_802F9680(HSD_GObj*, intptr_t);
/* 2F96D0 */ HSD_GObj* ifStock_802F96D0(int, int, float, float);
/* 2F98E8 */ void ifStock_802F98E8(u8, u8);
/* 2F9F48 */ HSD_GObj* ifStock_802F9F48(int);
/* 2FA118 */ HSD_GObj* ifStock_802FA118(int);
/* 2FA2D0 */ void ifStock_802FA2D0(int);
/* 2FA5BC */ void ifStock_802FA5BC(int);
/* 2FA6C4 */ void fn_802FA6C4(HSD_GObj*);
/* 2FA8C0 */ void fn_802FA8C0(HSD_GObj*);
/* 2FAC34 */ void fn_802FAC34(HSD_GObj*);
/* 2FAEC4 */ void ifStock_802FAEC4(void);
/* 2FB390 */ void ifStock_802FB390(void);
/* 2FB41C */ void ifStock_802FB41C(void);
/* 2FB484 */ void ifStock_802FB484(void);
/* 2FB4EC */ void ifStock_802FB4EC(int, GXColor*);
/* 2FB650 */ void ifStock_802FB650(int);
/* 2FB6AC */ void ifStock_802FB6AC(int);
#define MELEE_IF_TIME_H
/* 2F3AE8 */ void ifTime_SetTime(HSD_JObj*, int, int);
/* 2F405C */ void ifTime_HideTimers(void);
/* 2F40B8 */ void ifTime_ShowTimers(void);
/* 2F4144 */ int ifTime_GetCountdownSeconds(void);
/* 2F4194 */ void ifTime_UpdateCountdown(HSD_GObj*);
/* 2F4248 */ void ifTime_FreeCountdown(void);
/* 2F428C */ void ifTime_UpdateTimers(HSD_GObj*);
/* 2F446C */ void ifTime_CreateTimers(void);
/* 2F480C */ void ifTime_Reset(void);
/* 2F483C */ void ifTime_FreeTimers(void);
/* 2F4898 */ bool ifTime_IsTimerHidden(void);
#define _SOUNDTEST_H_
struct SoundTestMenuData {
    /* 0x000 */ struct un_80304138_objalloc_t_x8 entries[11];
    /* 0x160 */ char x160[0xC];
    /* 0x16C */ char x16C[0x18];
};
/* 2FF7DC */ void un_802FF7DC(void);
/* 2FF884 */ bool un_802FF884(char*);
/* 3F9FA4 */ extern struct SoundTestMenuData un_803F9FA4;
#define _TEXTDRAW_H_
/* 301E44 */ int DevText_StrLen(char* str);
/* 301E78 */ void DevText_NumToStr(int, char*);
/* 301FB4 */ HSD_GObj* DevText_GetGObj(void);
/* 301FBC */ void DevText_InitPool(void);
/* 3020FC */ void DevText_Remove(DevText** ptext);
/* 302164 */ void DevText_SetupCObj(void);
/* 3022BC */ void DevText_Draw(DevText* text);
/* 302608 */ void DevText_DrawAll(HSD_GObj* gobj, intptr_t pass);
/* 30265C */ void DevText_CreateCObj(int classifier, int p_link,
                                     int gobj_priority, int gx_link,
                                     u8 gx_priority);
/* 302708 */ HSD_GObj* DevText_Setup(int classifier, int p_link, int priority,
                                     int gx_link, int render_priority,
                                     u8 camera_priority);
/* 3027A0 */ void DevText_AddToList(DevText** list, DevText* text);
/* 302810 */ void DevText_Show(HSD_GObj* gobj, DevText* text);
/* 4D6E18 */ extern DevText* devtext_drawlist;
/* 4D6E38 */ extern DevText* devtext_poolhead;
#define GALE01_302834
/* 302834 */ DevText* DevText_Create(char, int, int, int, int, void*);
/* 3029B4 */ void DevText_EraseFirstLine(DevText* text);
/* 302A3C */ void DevText_SetCursorXY(DevText* text, int x, int y);
/* 302A88 */ void DevText_SetCursorX(DevText* text, int x);
/* 302AB0 */ void DevText_HideCursor(DevText* text);
/* 302AC0 */ void DevText_80302AC0(DevText* text);
/* 302AD0 */ void DevText_ShowBackground(DevText* text);
/* 302AE0 */ void DevText_HideBackground(DevText* text);
/* 302AF0 */ void DevText_ShowText(DevText* text);
/* 302B00 */ void DevText_HideText(DevText* text);
/* 302B10 */ void DevText_SetScale(DevText* text, float x, float y);
/* 302B1C */ void DevText_SetXY(DevText* text, int x, int y);
/* 302B48 */ u8 DevText_StoreColorIndex(DevText* text, u8 index);
/* 302B64 */ GXColor DevText_SetTextColor(DevText* text, GXColor color);
/* 302B90 */ GXColor DevText_SetBGColor(DevText* text, GXColor color);
/* 302BB0 */ void DevText_Erase(DevText* text);
/* 302BE4 */ void DevText_Print(DevText* text, char* str);
/* 302D0C */ void DevText_PrintInt(DevText* text, int num);
/* 302D4C */ void DevText_Printf(DevText* text, char* format, ...);
/* 302DF0 */ struct un_80304138_objalloc_t* un_80302DF0(void);
/* 302DF8 */ void un_80302DF8(struct un_80304138_objalloc_t* arg0,
                              soundtest_callback arg1);
/* 302E00 */ int un_80302E00(struct un_80304138_objalloc_t_x8*, int);
/* 302EA4 */ int un_80302EA4(struct un_80304138_objalloc_t_x8*);
/* 302FFC */ void un_80302FFC(struct un_80304138_objalloc_t*);
/* 303444 */ bool un_80303444(struct un_80304138_objalloc_t*);
/* 303720 */ bool un_80303720(struct un_80304138_objalloc_t* arg0);
/* 3039A4 */ int un_803039A4(unsigned char);
/* 303AC4 */ void un_80303AC4(struct un_80304138_objalloc_t*);
/* 303EF4 */ void fn_80303EF4(HSD_GObj*);
/* 303FD4 */ void un_80303FD4(HSD_GObj*, struct un_80304138_objalloc_t*,
                              struct un_80304138_objalloc_t_x8*, int, int,
                              int);
/* 304138 */ void un_80304138(void);
/* 304168 */ HSD_GObj* un_80304168(void* arg0, int arg1, int arg2, int arg3);
/* 304210 */ struct un_80304138_objalloc_t*
un_80304210(struct un_80304138_objalloc_t* arg0, void* arg1, int arg2,
            int arg3, int arg4);
/* 304334 */ void un_80304334(struct un_80304138_objalloc_t* arg0);
/* 304344 */ void un_80304344(struct un_80304138_objalloc_t*);
/* 304470 */ bool un_80304470(void);
/* 304510 */ bool un_80304510(void);
/* 3045A0 */ bool un_803045A0(void);
/* 304690 */ bool un_80304690(void);
/* 304780 */ bool un_80304780(void);
/* 304138 */ extern struct un_80304138_objalloc_t* un_804D6E40;
/* 304138 */ extern struct un_80304138_objalloc_t* un_804D6E44;
#define MELEE_IT_INLINES_H
#define GALE01_IT_2725
/// @file
/// @todo Restructure this, possibly items/chara/types.h
#define MELEE_IT_ITCHARITEMS_H
typedef struct itCLinkMilk_ItemVars {
    /* +0 ip+DD4 */ Fighter_GObj* x0;
} itCLinkMilk_ItemVars;
typedef struct itClimbersBlizzard_ItemVars {
    /* +0 */ f32 x0;
    /* +4 */ u8 flag0 : 1;
} itClimbersBlizzard_ItemVars;
typedef struct itClimbersBlizzardAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
} itClimbersBlizzardAttributes;
typedef struct itClimbersIce_ItemVars {
    /* +0 */ Item_GObj* x0;
    /* +4 */ f32 x4;
    /* +8 */ u8 x8_b0 : 1;
} itClimbersIce_ItemVars;
typedef struct itClimbersStringAttributes {
    /* +00 */ s32 x0_count;
    /* +04 */ s32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ u8 pad_10[0x4];
    /* +14 */ f32 x14;
    /* +18 */ s32 x18;
    /* +1C */ s32 x1C;
    /* +20 */ s32 x20;
    /* +24 */ HSD_Joint* x24_joint;
    /* +28 */ HSD_Joint* x28_joint;
} itClimbersStringAttributes;
typedef struct itClimbersIceAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ u8 pad_20[0x4];
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ s32 x2C;
    /* +30 */ u32 x30;
} itClimbersIceAttributes;
typedef struct itNessbat_ItemVars {
    /* +0 ip+DD4 */ HSD_GObj* x0;
} itNessbat_ItemVars;
typedef struct itNesspkthundertrail_ItemVars {
    /* +0 ip+DD4 */ Item_GObj* x0;
    /* +4 ip+DD8 */ s32 x4;
    /* +8 ip+DDC */ s32 x8;
} itNesspkthundertrail_ItemVars;
typedef struct {
    /* x0 ip+DD4 */ f32 x0;
    /* x4 ip+DD8 */ HSD_GObj* x4;
    /* x8 ip+DDC */ f32 x8;
    /* xC ip+DE0 */ f32 xC;
} itDrMarioPill_ItemVars;
typedef struct {
    /* x0 */ f32 x0;
    /* x4 */ f32 x4;
    /* x8 */ f32 x8;
    /* xC */ f32 xC;
    /* x10 */ f32 x10;
} itDrMarioPillAttributes;
typedef struct {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    s32 x3C;
    s32 x40;
    s32 x44;
    f32 x48;
    f32 x4C;
    f32 x50;
    f32 x54;
    f32 x58;
} itHitodemanAttributes;
typedef struct {
    /* x0 */ f32 x0;
    /* x4 */ f32 x4;
    /* x8 */ f32 x8;
    /* xC */ f32 xC;
} itFireAttributes;
typedef struct {
    /* x0 */ f32 x0;
} itThunderAttributes;
typedef struct {
    /* x0 */ s32 xDD4; // gets iterated from 0 to 14 in function (it_802AE200)
                       // that transforms the item model (possibly frame number
                       // of animation?)
    /* x4 */ s32 xDD8; // {0-4} Used to index into array (it_803F6E28) that has
                       // floats to translate item model by
                       // 1->4 when blaster shooting starting (at cmd_var3 = 1)
                       // 3->0 when blaster getting put away (at cmd_var3 = 2)
    /* x8 */ s32 xDDC; // {-1, 0, 1} Value gets added to xDD8 to iterate it
                       // during blaster collision callback
                       // -1: when cmd_var3 = 2 (when gun is getting put away,
                       // ____but not yet invisible)
                       // 0: when xDD8 <= 0 or xDD8 >= 5
                       // 1: when cmd_var3 = 1 (when gun shooting sfx starts)
    /* xC */ bool xDE0; // false when not shot yet; true after shot (in this
                           // spawn instance of the blaster - not put away)
    /* x10 */ s32 xDE4[6]; // group 1; gets set to 0 in func (it_802ADF10)
                           // that sets item joint locations from
                           // corresponding fighter joint locations
    /* x28 */ s32 xDFC[6]; // group 2; gets set to 0 in func (it_802ADF10)
                           // that sets item joint locations from
                           // corresponding fighter joint locations
    /* x40 */ Vec3 xE14[6]; // group 3; gets set as the vector from fighter's
                            // current position to the joint holding the
                            // blaster on the frame blaster its shot
    /* x88 */ f32 angle[6]; // xE5C group 4; angle[0] gets set to an angle
                            // value in func (it_802ADF10) that sets item
                            // joint locations from corresponding fighter
                            // joint locations
    /* x100 */ bool gfx_spawn_var; // xE74 Signals to spawn shoot gfx from
                                   // blaster when set to true, which is done
                                   // from subaction funcs on frame of shot
    /* x104 */ s32 set_sfx_var2; // xE78 Sets blaster destroy sfx func when
                                   // Flag 1 = 2
                                   // ---------------
                                   // Blaster/Throw Subaction cmd Flags
                                   // .
                                   // Flag 0 is ??? (multipurpose?)
                                   // 0: ?
                                   // 1: ?
                                   // .
                                   // Flag 1 is for if blaster is present?
                                   // 0: Default (invisible)
                                   // ___Initial value for blaster actions and
                                   // ___set on 1st frame of throw actions
                                   // 1: Present (visible)
                                   // ___Set 1st frame of SpecialAirNStart
                                   // ___action and upon blaster spawn in
                                   // ___throw actions
                                   // 2: Put away (invisible again)
                                   // ___Set frame of putting away blaster in
                                   // ___all blaster and throw actions
                                   // .
                                   // Flag 2 is for spawning laser shots
                                   // 0: Default (don't spawn)
                                   // 1: Spawn
                                   // ___Set on shoot frame, then immediately
                                   // ___reset to 0 after triggering those
                                   // ___functions
                                   // .
                                   // Flag 3 is for blaster action
                                   // 0: Default
                                   // 1: Starting to shoot
                                   // 2: Being put away
    /* x108 */ HSD_GObj* owner; // xE7C
} itFoxBlaster_ItemVars;
typedef struct {
    /* 0x00 */ int xDD4;
    /* 0x00 */ Item_GObj* xDD8;
} itGamewatchrescue_ItemVars;
typedef struct itLeadead_ItemVars {
    /* 0x00 */ u8 pad[0x18];
    /* 0x18 */ s32 xDEC;
    /* 0x1C */ u8 pad1b[0x1C];
    /* 0x38 */ HSD_GObj* x38;
    /* 0x3C */ f32 x3C;
    /* 0x40 */ s32 xE14;
    /* 0x44 */ s32 x44;
    /* 0x48 */ s32 x48;
    /* 0x4C */ s32 x4C;
    /* 0x50 */ s32 x50;
    /* 0x54 */ u8 pad3[8];
    /* 0x5C */ s32 xE30_state;
    /* 0x60 */ Vec3 xE34_a_offset;
    /* 0x6C */ Vec3 xE40_b_offset;
    /* 0x78 */ f32 xE4C_scale;
    /* 0x7C */ itECB xE50;
} itLeadead_ItemVars;
typedef struct FoxBlasterAttr {
    /* +0 */ float x0;
    /* +4 */ float x4;
    /* +8 */ float x8;
    /* +C */ float xC;
    /* +10 */ float x10;
    /* +14 */ float x14;
    /* +18 */ float x18; // [1]
    /* +1C */ float x1C;
    /* +20 */ float x20; // [2]
    /* +24 */ float x24;
} FoxBlasterAttr;
typedef struct {
    /*  +0 ip+DD4 */ float scale;
    /*  +4 ip+DD8 */ float angle;
    /*  +8 ip+DDC */ float speed;
    /*  +C ip+DE0 */ Vec3 pos;
} itFoxLaser_ItemVars;
typedef struct {
    /* 0x00 ip+0xDD4 */ char _pad0[0xDF4 - 0xDD4];
    /* 0x20 ip+0xDF4 */ Item_GObj* xDF4;
    /* 0x24 ip+0xDF8 */ HSD_JObj* xDF8;
    /* 0x28 ip+0xDFC */ f32 xDFC;
    /* 0x2C ip+0xE00 */ f32 xE00;
    /* 0x30 ip+0xE04 */ f32 xE04;
    /* 0x34 ip+0xE08 */ f32 xE08;
    /* 0x38 ip+0xE0C */ Vec3 xE0C;
    /* 0x44 ip+0xE18 */ Vec3 xE18;
    /* 0x50 ip+0xE24 */ Vec3 xE24;
    /* 0x5C ip+0xE30 */ s16 xE30;
    /* 0x5E ip+0xE32 */ s16 xE32_pad;
    /* 0x60 ip+0xE34 */ f32 xE34;
    /* 0x64 ip+0xE38 */ s32 xE38;
    /* 0x68 ip+0xE3C */ s32 xE3C;
    /* 0x6C ip+0xE40 */ Item_GObj* xE40;
    /* 0x70 ip+0xE44 */ Item_GObj* xE44;
    /* 0x74 ip+0xE48 */ s32 xE48;
    /* 0x78 ip+0xE4C */ s32 xE4C;
} itArwingLaser_ItemVars;
typedef struct FoxLaserAttr {
    /* +0 */ float lifetime; // [35]
    /* +4 */ float scale; // [3]
    /* +8 */ float x8;
    /* +C */ float xC;
    /* +10 */ float x10;
    /* +14 */ float x14;
    /* +18 */ float x18;
    /* +1C */ float x1C;
    /* +20 */ float x20;
    /* +24 */ float x24; // [1]
} FoxLaserAttr;
typedef struct {
    /*  +0 ip+DD4 */ HSD_Joint* xDD4;
    /*  +4 ip+DD8 */ float xDD8;
    /*  +8 ip+DDC */ HSD_JObj* xDDC;
} itFoxIllusion_ItemVars;
typedef struct FoxIllusionAttr {
    float x0; // [5]
    float x4; // [2]
} FoxIllusionAttr;
typedef struct {
    u32 x0;
} itKirbyHammer_ItemVars;
typedef struct {
    /*  +0 ip+DD4 */ f32 angle;
    /*  +4 ip+DD8 */ f32 speed;
    /*  +8 ip+DDC */ Vec3 dir;
    /* +14 ip+DE8 */ Vec3 init_pos;
} itKirbyCutterBeam_ItemVars;
typedef struct {
    /* +000 ip+DD4 */ u8 _pad[0x1C8];
    /* +1C8 ip+F9C */ f32 x1C8;
    /* +1CC ip+FA0 */ f32 x1CC;
    /* +1D0 ip+FA4 */ f32 x1D0;
    /* +1D4 ip+FA8 */ f32 x1D4;
    /* +1D8 ip+FAC */ f32 x1D8;
    /* +1DC ip+FB0 */ f32 x1DC;
    /* +1E0 ip+FB4 */ u8 _pad2[0x8];
    /* +1E8 ip+FBC */ Vec3 x1E8;
    /* +1F4 ip+FC8 */ f32 x1F4;
} itKirby2F23_ItemVars;
/// user_data struct of GObj class 7
typedef struct ItemLink {
    /*   +0 */ struct ItemLink* prev;
    /*   +4 */ struct ItemLink* next;
    /*   +8 */ Vec3 vel;
    /*   +C */ Vec3 pos;
    /*  +20 */ Vec3 x20; ///< Previous position?
    /*  +2C:0 */ u8 x2C_b0 : 1;
    /*  +2C:1 */ u8 x2C_b1 : 1;
    /*  +2C:2 */ u8 x2C_b2 : 1;
    /*  +2C:3 */ u8 x2C_b3 : 1;
    /*  +2C:4 */ u8 x2C_b4 : 1;
    /*  +2C:5 */ u8 x2C_b5 : 1;
    /*  +2C:6 */ u8 x2C_b6 : 1;
    /*  +2C:7 */ u8 x2C_b7 : 1;
    /*  +30 */ CollData coll_data;
    /* +1CC */ s32 x1CC;
    /* +1D0 */ HSD_GObj* gobj;
    /* +1D4 */ HSD_JObj* jobj;
} ItemLink;
;
typedef struct {
    ItemLink* x0;
    ItemLink* x4;
    HSD_GObj* x8;
    HSD_JObj* xC;
    void (*x10)(Item_GObj*);
    u8 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    f32 x3C;
    f32 x40;
    f32 x44;
    f32 x48;
    f32 x4C;
    f32 x50;
    f32 x54;
    f32 x58;
    f32 x5C;
    f32 x60;
} itLinkHookshot_ItemVars;
typedef struct {
    f32 x0;
    f32 x4;
    f32 x8;
    s32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    s32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    f32 x3C;
    f32 x40;
    f32 x44;
    f32 x48;
    f32 x4C;
    f32 x50;
    HSD_Joint* x54;
    HSD_Joint* x58;
    HSD_Joint* x5C;
} itLinkHookshotAttributes;
typedef struct {
    UnkFlagStruct x0;
    u8 x1;
    u8 x2;
    u8 x3;
    f32 x4;
    f32 x8;
    f32 xC;
    Item_GObj* x10;
} itLinkBomb_ItemVars;
typedef struct itLinkBombAttributes {
    /* x0 */ u32 lifetime;
    /* x4 */ f32 x4;
    /* x8 */ f32 x8;
    /* xC */ u32 xC;
    /* x10 */ s32 x10;
    /* x14 */ f32 x14;
    /* x18 */ f32 x18;
    /* x1C */ f32 x1C;
    /* x20 */ f32 x20;
    /* x24 */ f32 x24;
    /* x28 */ f32 x28;
    /* x2C */ f32 x2C;
    /* x30 */ f32 x30;
    /* x28 */ f32 vel[3];
} itLinkBombAttributes;
typedef struct {
    /* ip+DD4 */ s32 xDD4;
    /* ip+DD8 */ s32 xDD8;
    /* ip+DDC */ s32 xDDC[2];
    /* ip+DE4 */ s32 xDE4;
    /* ip+DE8 */ s32 xDE8;
    /* ip+DEC */ s32 xDEC;
    /* ip+DF0 */ Vec3 xDF0[16];
    /* ip+EB0 */ Vec3 xEB0[16];
    /* ip+F70 */ f32 xF70;
    /* ip+F74 */ f32 xF74;
    /* ip+F78 */ f32 xF78;
    /* ip+F7C */ f32 xF7C;
    /* ip+F80 */ f32 xF80;
    /* ip+F84 */ f32 xF84;
    /* ip+F88 */ f32 xF88;
    /* ip+F8C */ f32 xF8C;
    /* ip+F90 */ HSD_JObj* xF90[2];
    /* ip+F98 */ Item_GObj* xF98;
} itLinkBoomerang_ItemVars;
typedef struct {
    HSD_AnimJoint* anim;
    HSD_MatAnimJoint* matanim;
    HSD_ShapeAnimJoint* shapeanim;
} AnimBundle;
typedef struct itLinkBoomerangAttributes {
    /* x0 */ u32 x0;
    /* x4 */ u32 x4;
    /* x8 */ u32 x8;
    /* xC */ f32 xC;
    /* x10 */ f32 x10;
    /* x14 */ f32 x14;
    /* x18 */ f32 x18;
    /* x1C */ f32 x1C;
    /* x20 */ f32 x20;
    /* x24 */ f32 x24;
    /* x28 */ f32 x28;
    /* x2C */ f32 x2C;
    /* x30 */ f32 x30;
    /* x34 */ f32 x34;
    /* x38 */ f32 x38;
    /* x3C */ f32 x3C;
    /* x40 */ f32 x40;
    /* x44 */ HSD_Joint* x44;
    /* x48 */ HSD_Joint* x48;
    /* x4C */ AnimBundle x4C_anim;
    /* x58 */ AnimBundle x58_anim;
} itLinkBoomerangAttributes;
typedef struct {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    Vec3 x18;
    Vec3 x24;
    Vec3 x30;
    Vec3 x3C;
    Vec3 x48;
    Quaternion x54;
    Quaternion x64;
    Quaternion x74;
    Quaternion x84;
    f32 x94;
    f32 x98;
    u32 x9C;
    s32 xA0;
    u32 xA4;
    f32 xA8;
    f32 xAC;
    s32 xB0;
    HSD_JObj* xB4[3];
    f32 xC0;
    HSD_GObj* xC4;
    f32 xC8;
    f32 xCC;
    void* xD0;
    f32 xD4;
    f32 xD8;
    f32 xDC;
    HSD_GObj* xE0;
    int xE4;
    f32 xE8;
    f32 xEC;
    s32 xF0;
} itLinkArrow_ItemVars;
typedef struct {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    HSD_Joint* x24;
    HSD_Joint* x28;
    f32 x2C;
} itLinkArrowAttributes;
typedef struct {
    f32 x0;
    HSD_GObj* x4;
} itLinkBow_ItemVars;
typedef struct itMasterHandBullet_ItemVars {
    /* ip+DD4 */ f32 x0;
} itMasterHandBullet_ItemVars;
typedef struct itMasterHandBulletAttributes {
    f32 x0;
} itMasterHandBulletAttributes;
typedef struct itMasterHandLaser_ItemVars {
    /* ip+DD4 */ bool x0;
    /* ip+DD8 */ s32 x4;
    /* ip+DDC */ s32 x8;
    /* ip+DE0 */ HSD_JObj* x10;
} itMasterHandLaser_ItemVars;
typedef struct itMasterHandLaserAttributes {
    f32 x0;
    f32 x4;
} itMasterHandLaserAttributes;
typedef struct itPeachToadSporeAttributes {
    f32 x0_min_speed;
    f32 x4_max_speed_offset;
    f32 x8_speed_decay_rate;
    f32 xc_angle;
} itPeachToadSporeAttributes;
typedef struct itPeachTurnipAttributes {
    f32 x0_lifetime;
    s32 x4_length; // length of x8, should be 8 for the number of turnip types
    struct {
        s32 x0_odds;
        s32 x4_damage;
    } x8[8];
} itPeachTurnipAttributes;
typedef struct itPeachTurnip_ItemVars {
    /*  +0 ip+DD4 */ UnkFlagStruct xDD4;
    /*  +4 ip+DD8 */ s32 xDD8; // turnip type index
    /*  +8 ip+DDC */ s32 xDDC_damage;
    /*  +C ip+DE0 */ f32 xDE0_scl; // Scale - Mr. Saturn, Turnip
    /*  +10 ip+DE4 */ HSD_GObj* xDE4_owner;
    /*  +14 ip+DE8 */ f32 xDE8_scl; // Scale - Bob-omb
} itPeachTurnip_ItemVars;
typedef struct itPikachutJoltGround_ItemVars {
    /* +0 +DD4 */ f32 xDD4;
    /* +4 +DD8 */ HSD_GObj* xDD8;
    /* +8 +DDC */ Item_GObj* xDDC;
    /* +C +DE0 */ s32 xDE0;
    /* +10 +DE4 */ s32 xDE4;
    /* +14 +DE8 */ Vec3 xDE8;
    /* +20 +DF4 */ Vec3 xDF4;
    /* +2C +E00 */ Vec3 xE00;
} itPikachutJoltGround_ItemVars;
typedef struct itPikachutJoltAir_ItemVars {
    /* +0  ip+DD4 */ HSD_GObj* xDD4;
    /* +4  ip+DD8 */ Item_GObj* xDD8;
    /* +8  ip+DDC */ u8 pad_8[0xC];
    /* +14 ip+DE8 */ Vec3 xDE8;
    /* +20 ip+DF4 */ s32 xDF4;
} itPikachutJoltAir_ItemVars;
typedef struct itPikachuthunder_ItemVars {
    /* +0 ip+DD4 */ s32 x0;
    /* +4 ip+DD8 */ s32 x4;
    /* +8 ip+DDC */ s32 x8;
    /* +C ip+DE0 */ f32 xC;
    /* +10 ip+DE4 */ f32 x10;
    /* +14 ip+DE8 */ f32 x14;
    /* +18 ip+DEC */ f32 x18;
    /* +1C ip+DF0 */ Vec3 x1C;
    /* +28 ip+DFC */ Vec3 x28;
    /* +34 ip+E08 */ Item_GObj* x34;
    /* +38 ip+E0C */ Item_GObj* x38;
} itPikachuthunder_ItemVars;
typedef struct itPikachutJoltGroundAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
} itPikachutJoltGroundAttributes;
typedef struct itPikachuthunderAttributes {
    /* +0 ip+DD4 */ f32 x0;
    /* +4 ip+DD8 */ f32 x4;
    /* +8 ip+DDC */ f32 x8;
} itPikachuthunderAttributes;
typedef struct itSamusBombAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
} itSamusBombAttributes;
typedef struct itSamusBomb_ItemVars {
    /* +0 +DD4 */ bool x0;
    /* +4 +DD8 */ Fighter_GObj* owner;
} itSamusBomb_ItemVars;
typedef struct itSamusChargeshot_ItemVars {
    /* +0  +DD4 */ u32 xDD4_pad;
    /* +4  +DD8 */ f32 xDD8;
    /* +8  +DDC */ f32 xDDC;
    /* +C  +DE0 */ f32 xDE0;
    /* +10 +DE4 */ f32 xDE4;
    /* +14 +DE8 */ s32 xDE8;
    /* +18 +DEC */ int xDEC;
    /* +1C +DF0 */ int xDF0;
    /* +20 +DF4 */ s32 xDF4;
    /* +24 +DF8 */ s32 xDF8;
    /* +28 +DFC */ s32 xDFC;
    /* +2C +E00 */ Fighter_GObj* xE00;
    /* +30 +E04 */ f32 xE04;
    /* +34 +E08 */ u32 pad1[9];
    /* +78 +E2C */ f32 xE2C;
    /* +7C +E30 */ f32 xE30;
    /* +80 +E34 */ f32 xE34;
    /* +84 +E38 */ u32 padding[15]; /* gap 0x84-0xC0 (0x3C bytes) */
} itSamusChargeshot_ItemVars;
typedef struct itSamusChargeShot_Attributes {
    /* +0 */ f32 lifetime;
    /* +4 */ u32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
} itSamusChargeShot_Attributes;
typedef struct itSamusGrapple_ItemVars {
    /*  +0 ip+DD4 */ ItemLink* x0;
    /*  +4 ip+DD8 */ ItemLink* x4;
    /*  +8 ip+DDC */ HSD_GObj* x8;
    /*  +C ip+DE0 */ HSD_JObj* xC;
    /* +10 ip+DE4 */ void (*unk_10)(Item_GObj*);
    /* +14 ip+DE8 */ u8 x14;
    /* +15 ip+DE9 */ u8 x15;
    /* +16 ip+DEA */ u8 x16;
} itSamusGrapple_ItemVars;
typedef struct itSamusGrappleAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ s32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ s32 x34;
    /* +38 */ f32 x38;
    /* +3C */ f32 x3C;
    /* +40 */ f32 x40;
    /* +44 */ f32 x44;
    /* +48 */ f32 x48;
    /* +4C */ f32 x4C;
    /* +50 */ f32 x50;
    /* +54 */ f32 x54;
    /* +58 */ f32 x58;
    /* +5C */ f32 x5C;
    /* +60 */ f32 x60;
    /* +64 */ HSD_Joint* x64;
    /* +68 */ HSD_Joint* x68;
    /* +6C */ HSD_Joint* x6C;
    /* +70 */ HSD_Joint* x70;
    /* +74 */ HSD_AnimJoint** x74;
    /* +78 */ HSD_MatAnimJoint** x78;
    /* +7C */ HSD_ShapeAnimJoint** x7C;
    /* +80 */ HSD_AnimJoint** x80;
    /* +84 */ HSD_MatAnimJoint** x84;
    /* +88 */ HSD_ShapeAnimJoint** x88;
    /* +8C */ HSD_AnimJoint** x8C;
    /* +90 */ HSD_MatAnimJoint** x90;
    /* +94 */ HSD_ShapeAnimJoint** x94;
    /* +98 */ HSD_AnimJoint** x98;
    /* +9C */ HSD_MatAnimJoint** x9C;
    /* +A0 */ HSD_ShapeAnimJoint** xA0;
    /* +A4 */ HSD_AnimJoint** xA4;
    /* +A8 */ HSD_MatAnimJoint** xA8;
    /* +AC */ HSD_ShapeAnimJoint** xAC;
} itSamusGrappleAttributes;
typedef struct itSamusMissileAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ f32 x34;
    /* +38 */ f32 x38;
    /* +3C */ f32 x3C;
} itSamusMissileAttributes;
typedef struct itSamusMissile_ItemVars {
    /* +0 +DD4 */ bool is_smash_missile;
    /* +4 +DD8 */ s32 x4;
    /* +8 +DDC */ f32 x8;
    /* +C +DE0 */ Fighter_GObj* owner;
    /* +10 +DE4 */ HSD_GObj* x10;
} itSamusMissile_ItemVars;
typedef struct itSeakNeedleHeld_ItemVars {
    /* +0 ip+DD4 */ Fighter_GObj* owner;
} itSeakNeedleHeld_ItemVars;
typedef struct itSeakNeedleThrown_ItemVars {
    /*  +0 ip+DD4 */ f32 xDD4;
    /*  +4 ip+DD8 */ f32 xDD8;
    /*  +8 ip+DDC */ f32 xDDC;
    /*  +C ip+DE0 */ f32 xDE0;
    /* +10 ip+DE4 */ Vec3 xDE4;
    /* +1C ip+DF0 */ f32 xDF0;
    /* +20 ip+DF4 */ int xDF4;
    /* +24 ip+DF8 */ f32 xDF8;
    /* +28 ip+DFC */ f32 xDFC;
} itSeakNeedleThrown_ItemVars;
typedef struct itSeakChain_ItemVars {
    /* +0  ip+DD4 */ ItemLink* x0;
    /* +4  ip+DD8 */ ItemLink* x4;
    /* +8  ip+DDC */ Fighter_GObj* parent_gobj;
    /* +C  ip+DE0 */ u8 pad_C[0x4];
    /* +10 ip+DE4 */ s32 x10;
    /* +14 ip+DE8 */ s32 x14;
    /* +18 ip+DEC */ s32 x18;
    /* +1C ip+DF0 */ Vec3 history[0xF];
} itSeakChain_ItemVars;
typedef struct itSeakChain_Attrs {
    /*  +0 */ s32 x0;
    /*  +4 */ f32 x4;
    /*  +8 */ u8 pad_8[0x8];
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ f32 x34;
    /* +38 */ f32 x38;
    /* +3C */ f32 x3C;
    /* +40 */ f32 x40;
    /* +44 */ f32 x44;
    /* +48 */ f32 x48;
    /* +4C */ u8 pad_4C[0x8];
    /* +54 */ f32 x54;
    /* +58 */ f32 x58;
    /* +5C */ f32 x5C;
    /* +60 */ f32 x60;
    /* +64 */ HSD_Joint* x64_joint;
    /* +68 */ HSD_Joint* x68_joint;
} itSeakChain_Attrs;
;
typedef struct itClimbersString_ItemVars {
    /* +0  ip+DD4 */ f32 x0;
    /* +4  ip+DD8 */ ItemLink* x4;
    /* +8  ip+DDC */ ItemLink* x8;
    /* +C  ip+DE0 */ HSD_GObj* xC;
    /* +10 ip+DE4 */ u8 pad_10[0x4];
    /* +14 ip+DE8 */ HSD_JObj* x14;
} itClimbersString_ItemVars;
typedef struct itZeldaDinFireExplode_ItemVars {
    /* +0 ip+DD4 */ f32 xDD4;
    /* +4 ip+DD8 */ f32 xDD8;
    /* +8 ip+DDC */ HSD_GObj* xDDC;
    /* +C ip+DE0 */ s32 xDE0;
} itZeldaDinFireExplode_ItemVars;
typedef struct itZeldaDinFireExplodeAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
} itZeldaDinFireExplodeAttributes;
typedef struct itUnk4_ItemVars {
    /*  +0 ip+DD4 */ u8 pad[0x18];
    /*  +18 ip+DEC */ u8 xDEC_b0 : 1;
    /*  +18 ip+DEC */ u8 xDEC_b1 : 1;
    /*  +1C ip+DF0 */ Fighter_x1614_t xDF0;
} itUnk4_ItemVars;
typedef struct itGamewatchchef_ItemVars {
    /* +0 ip+DD4 */ s32 x0;
    /* +4 ip+DD8 */ s32 x4;
} itGamewatchchef_ItemVars;
typedef struct itGamewatchchefAttrEntry {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
} itGamewatchchefAttrEntry;
typedef struct itGamewatchchefAttributes {
    /* +0 */ void* x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ itGamewatchchefAttrEntry entries[1];
} itGamewatchchefAttributes;
typedef struct itGamewatchparachuteAttributes {
    /* +0 */ void* x0;
} itGamewatchparachuteAttributes;
typedef struct itHinoarashi_ItemVars {
    /* xDD4 */ u8 _0[0x60 - 0x0];
    /* xE34 */ UnkFlagStruct x60;
    /* xE35 */ u8 x61[0x64 - 0x61];
    /* xE38 */ f32 x64;
    /* xE3C */ f32 x68;
    /* xE40 */ Vec3 x6C;
    /* xE4C */ f32 x78;
} itHinoarashi_ItemVars;
typedef struct itHinoarashiAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ u8 _pad[0x10 - 0xC];
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
} itHinoarashiAttributes;
typedef struct itTools_ItemVars {
    /* +0 ip+DD4 */ s32 x0;
} itTools_ItemVars;
typedef struct itToolsMotionAttrs {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
} itToolsMotionAttrs;
typedef struct itToolsAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ s32 xC;
    /* +10 */ itToolsMotionAttrs motions[1];
} itToolsAttributes;
typedef struct itNessYoyo_ItemVars {
    /* +0  ip+DD4 */ s32 x0;
    /* +4  ip+DD8 */ f32 x4;
    /* +8  ip+DDC */ ItemLink* x8;
    /* +C  ip+DE0 */ ItemLink* xC;
    /* +10 ip+DE4 */ HSD_GObj* x10;
    /* +14 ip+DE8 */ char pad_14[0x4];
    /* +18 ip+DEC */ HSD_JObj* x18;
} itNessYoyo_ItemVars;
#define MELEE_IT_TYPES_H
/// @file
/// @todo Restructure this, possibly items/common/types.h
#define MELEE_IT_ITCOMMONITEMS_H
typedef struct {
    bool x0;
    bool x4;
} itCapsule_ItemVars;
typedef struct {
    bool x0; // [true]
    s32 x4; // [8]
} ItCapsuleAttr;
typedef struct {
    /* ip+DD4 */ float dir;
    /* ip+DD8 */ float x4;
    /* ip+DDC */ float x8;
    /* ip+DE0 */ float xC;
    /* ip+DE4 */ float xvel;
    /* ip+DE8 */ float yvel;
} itStar_ItemVars;
struct itSword_ItemVars {
    /* ip+DD4 */ int x0;
    /* ip+DD8 */ int x4;
    /* ip+DDC */ int x8;
    /* ip+DE0 */ int xC;
    /* ip+DE4 */ float x10;
    /* ip+DE8 */ float x14;
    /* ip+DEC */ float x18;
    /* ip+DF0 */ int x1C;
    /* ip+DF4 */ int x20;
    /* ip+DF8 */ int x24;
    /* ip+DFC */ float x28;
    /* ip+E00 */ float x2C;
    /* ip+E04 */ float x30;
    /* ip+E08 */ int x34;
    /* ip+E0C */ int x38;
    /* ip+E10 */ int x3C;
    /* ip+E14 */ float x40;
    /* ip+E18 */ float x44;
    /* ip+E1C */ float x48;
    /* ip+E20 */ float x4C;
    /* ip+E24 */ float x50;
    /* ip+E28 */ int x54;
    /* ip+E2C */ float x58;
};
typedef struct itBatAttributes {
    int x0;
    int x4;
    int x8;
    f32 xC_vel;
} itBatAttributes;
typedef struct itBombHei_ItemVars {
    /*  +0 */ s32 xDD4;
    /*  +4 */ s32 xDD8;
    /*  +8 */ s32 xDDC;
    /*  +C */ s32 xDE0;
    /* +10 */ s32 xDE4;
    /* +14 */ float xDE8;
    /* +18 */ float xDEC;
    /* +1C */ float xDF0;
    /* +20 */ float xDF4;
    /* +24 */ float xDF8;
    /* +28 */ float xDFC;
    /* +2C */ s32 _E00;
    /* +30 */ f32 xE04;
    /* +34 */ s32 _E08;
    /* +38 */ Vec3 xE0C;
} itBombHei_ItemVars;
typedef struct itBombHeiAttributes {
    /*  +0  */ float x0;
    /*  +4  */ float x4;
    /*  +8  */ float x8;
    /*  +C  */ float xC;
    /* +10  */ float x10;
    /* +14  */ float x14;
    /* +18  */ float x18;
    /* +1C  */ float x1C;
    /* +20  */ Vec3 x20;
} itBombHeiAttributes;
typedef struct itBox_ItemVars {
    /* +0 */ s32 opened; ///< True if box has been opened/broken
    /* +4 */ s32
        despawn_timer; ///< Countdown timer after opening (starts at 40)
    /* +8 */ HSD_GObj*
        spawned_gobj; ///< Related GObj that needs cleanup on destroy
    /* +C */ f32 rot_vel_x; ///< Rotation velocity around X axis (wobble)
    /* +10 */ f32 rot_vel_y; ///< Rotation velocity around Y axis (wobble)
} itBox_ItemVars;
typedef struct itEvYoshiEgg_DatAttrs {
    s32 x0;
    u32* x4;
} itEvYoshiEgg_DatAttrs;
typedef struct itEvYoshiEgg_ItemVars {
    /* +0 */ s32 xDD4;
    /* +4 */ s32 xDD8;
} itEvYoshiEgg_ItemVars;
typedef struct itWstar_ItemVars {
    f32 xDD4;
    f32 xDD8;
    s32 xDDC;
} itWstar_ItemVars;
typedef struct itWstarAttrEntry {
    /* +0 */ HSD_AnimJoint* x0_anim_joint;
    /* +4 */ enum_t x4_sfx;
} itWstarAttrEntry;
typedef struct itWstarAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
    /* +8 */ f32 x8;
    /* +C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ s32 x24_count;
    /* +28 */ itWstarAttrEntry x28_entries[1];
} itWstarAttributes;
typedef struct itKyasarin_ItemVars {
    /* +0  ip+DD4 */ char pad_0[0x18];
    /* +18 ip+DEC */ s32 x18;
    /* +1C ip+DF0 */ char pad_1C[0x4];
    /* +20 ip+DF4 */ HSD_GObj* x20;
    /* +24 ip+DF8 */ f32 x24;
    /* +28 ip+DFC */ f32 x28;
    /* +2C ip+E00 */ f32 x2C;
    /* +30 ip+E04 */ f32 x30;
    /* +34 ip+E08 */ s32 x34;
    /* +38 ip+E0C */ s32 x38;
    /* +3C ip+E10 */ s32 x3C;
} itKyasarin_ItemVars;
typedef struct itKyasarinAttributes {
    /* +0  */ s32* x0;
    /* +4  */ f32 x4;
    /* +8  */ f32 x8;
    /* +C  */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ f32 x34;
    /* +38 */ f32 x38;
    /* +3C */ f32 x3C;
    /* +40 */ s32 x40;
    /* +44 */ s32 x44;
    /* +48 */ s32 x48;
} itKyasarinAttributes;
typedef struct itKyasarinEgg_ItemVars {
    /* +0  ip+DD4 */ char pad_0[0x20];
    /* +20 ip+DF4 */ s32 x20;
    /* +24 ip+DF8 */ f32 x24;
} itKyasarinEgg_ItemVars;
typedef struct itKyasarinEggAttributes {
    /* +0  */ s32* x0;
    /* +4  */ f32 x4;
    /* +8  */ f32 x8;
    /* +C  */ s32 xC;
    /* +10 */ s32 x10;
} itKyasarinEggAttributes;
typedef struct itHououAttr {
    /* +00 */ f32 timer;
    /* +04 */ u8 x4_pad[4];
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ s32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
} itHououAttr;
typedef struct itLugiaAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ s32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ f32 x34;
    /* +38 */ f32 x38;
    /* +3C */ f32 x3C;
    /* +40 */ f32 x40;
} itLugiaAttributes;
/// Box/Crate item attributes loaded from .dat file
typedef struct itBoxAttributes {
    /* +00 */ s32 spawn_weight_0; ///< Weight for item spawn outcome 1
    /* +04 */ s32 spawn_weight_1; ///< Weight for item spawn outcome 2
    /* +08 */ s32 spawn_weight_2; ///< Weight for item spawn outcome 3
    /* +0C */ s32 empty_weight; ///< Weight for empty box (no items)
    /* +10 */ s32 special_spawn_weight; ///< Weight for special item roll
    /* +14 */ f32 damage_threshold; ///< Damage needed to break the box
    /* +18 */ f32 bounce_angle_threshold; ///< Max angle from vertical to stop
    /* +1C */ f32
        break_vel_threshold; ///< Velocity needed to break box on landing
} itBoxAttributes;
typedef struct itDosei_ItemVars {
    s32 xDD4;
    s32 xDD8;
    f32 xDDC;
    f32 xDE0;
    Vec3 xDE4;
    s32 xDF0;
    f32 xDF4;
    Vec3 xDF8;
} itDosei_ItemVars;
typedef struct itHeart_ItemVars {
    s32 xDD4_heal;
    union {
        struct {
            s8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 b3 : 1;
            u8 b4 : 1;
            u8 b5 : 1;
            u8 b6 : 1;
            u8 b7 : 1;
        };
        u32 flags;
    } xDD8;
    s32 xDDC;
    u8 xDE0_filler[8];
    f32 xDE8_float;
    f32 xDEC;
} itHeart_ItemVars;
typedef struct HeartContainerAttr {
    s32 x0_heal; // [100]
    union {
        struct {
            u8 b0 : 1;
            u8 b1 : 1;
            u8 b2 : 1;
            u8 b3 : 1;
            u8 b4 : 1;
            u8 b5 : 1;
            u8 b6 : 1;
            u8 b7 : 1;
        } bits;
        u32 flags;
    } x4; // [999]
    s32 x8; // [1200]
    s32 xC; // [1140]
    s32 x10; // [120]
    f32 x14; // y velocity? [1.5]
    f32 x18; // y rotation? [0.0349066]
} HeartContainerAttr;
typedef struct itTomato_ItemVars {
    /* +0   ip+DD4   */ s32 heal_amount;
    /* +4:0 ip+DD8:0 */ bool x4_b0 : 1;
    /* +8   ip+DDC   */ u32 x8;
} itTomato_ItemVars;
typedef struct {
    int heal_amount_0;
    int heal_amount_1;
    int x8;
    int xC;
    int x10;
    f32 x14;
} MaximTomatoSpecialAttr;
typedef struct itLGun_ItemVars {
    /*  +0 ip+DD4 */ int timer;
} itLGun_ItemVars;
typedef struct ItLGunAttr {
    int max_ammo; // [16]
    Vec3 pos; // [0, 2.128, 6.668]
} ItLGunAttr;
/// State shared by Fox/Falco's laser and the Ray Gun projectile.
typedef struct itRay_ItemVars {
    /* +0 ip+DD4 */ float scale;
    /* +4 ip+DD8 */ float angle;
    /* +8 ip+DDC */ float speed;
    /* +C ip+DE0 */ Vec3 pos;
} itRay_ItemVars;
typedef itRay_ItemVars itLGunRay_ItemVars;
typedef struct ItLGunRayAttr {
    /* +0 */ float speed; // [5]
    /* +4 */ float lifetime; // [80]
    /* +8 */ float max_scale; // [3]
} ItLGunRayAttr;
typedef struct itLGunBeam_ItemVars {
    /*  +0 ip+DD4 */ Vec3 position0;
    /*  +C ip+DE0 */ Vec3 position1;
    /* +18 ip+DEC */ Vec3 velocity;
    /* +24 ip+DF8 */ f32 angle0;
    /* +28 ip+DFC */ f32 angle1;
    /* +2C ip+E00 */ f32 lifetime;
    /* +30 ip+E04 */ int xE04;
} itLGunBeam_ItemVars;
typedef struct ItLGunBeamAttr {
    float lifetime; // lifetime - [18]
    float x4; // related to position calcs for var angle1 - [1]
    float x8; // related to position calcs for var angle1 - [2]
    float xC; // related to position calcs for var angle0 - [1.22173]
    float x10; // related to position calcs for var angle0 - [2/3 * pi]
} ItLGunBeamAttr;
typedef struct itLipstickAttributes {
    /* +0 */ s32 x0;
    /* +4 */ Vec3 x4;
} itLipstickAttributes;
typedef struct itLipstickSpore_ItemVars {
    /* +0 */ s32 xDD4;
    /* +4 */ f32 xDD8;
} itLipstickSpore_ItemVars;
/// Eggs spawned on Yoshi stages / by Chansey
typedef struct itEgg_ItemVars {
    /* +0 */ bool x0;
    /* +4 */ int rand_max;
    /* +8 */ u8 _8[0x60 - 0x8];
    /* +60 */ int heal_amount;
} itEgg_ItemVars;
typedef struct itHeiho_ItemVars {
    f32 x0;
    f32 x4;
    UnkFlagStruct x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    s8 x20;
    s8 x21;
    s8 x22;
    s8 x23;
    s32 x24;
    f32 x28;
    s32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    Vec3 x3C;
    f32 x48;
    f32 x4C;
    f32 x50;
    HSD_GObj* x54;
    f32 x58;
    f32 x5C;
    f32 x6C;
    f32 x60;
    f32 x64;
    f32 x68;
    f32 x7C;
    f32 x70;
    f32 x74;
    f32 x78;
} itHeiho_ItemVars;
/**
 * @brief Per-instance runtime state of a flipper item (overlaid on
 * @c Item::xDD4_itemVar).
 * @note These field names were determined by Claude (an AI), not recovered
 * from an original author; treat them as tentative. Each @c \@alias records
 * the offset-only name it replaced, and the superscript markers are footnotes
 * into
 * @ref itflipper_naming.
 */
typedef struct itFlipper_ItemVars {
    /**
     * Frames a thrown flipper stays airborne before it settles; counts down
     * each in-flight frame.<sup>[\ref fp_e1 "E1"], [\ref fp_e2 "E2"]</sup>
     * @alias{xDD4}
     */
    s32 xDD4_flightTimer; // frames until settling (when thrown)
    /**
     * 0 while the flipper is an airborne projectile, 1 once it has settled
     * into a                       stationary hazard.<sup>[\ref fp_e1 "E1"],
     * [\ref fp_e2 "E2"]</sup>
     * @alias{xDD8}
     */
    bool xDD8_isSettled;
    /**
     * Countdown that refreshes the active flipper's hitboxes when it reaches
     * 0; set from @c x14_hitboxInterval on a hit.<sup>[\ref fp_e3 "E3"]</sup>
     * @alias{xDDC}
     */
    s32 xDDC_hitboxTimer;
    /**
     * Accumulated paddle rotation; each frame @c xDE4_spinVel is added in and
     * the result is passed to @c HSD_JObjSetRotationX.<sup>[\ref fp_e3
     * "E3"]</sup>
     * @alias{xDE0}
     */
    f32 xDE0_spinAngle;
    /**
     * Paddle angular velocity; kicked on contact, decays by @c x20_spinDecay,
     * and saturates at +/- @c x24_maxSpinVel.<sup>[\ref fp_e3 "E3"], [\ref
     * fp_e4 "E4"]</sup>
     * @alias{xDE4}
     */
    f32 xDE4_spinVel;
    /**
     * Set when the flipper is anchored to a stage joint (Break-the-Targets)
     * rather than free-spawned; only ever set by itFlipper_Spawn().<sup>[\ref
     * fp_e6 "E6"]</sup>
     * @alias{xDE8}
     */
    bool xDE8_isStageFixed;
    /**
     * The stage @c HSD_JObj a stage-fixed flipper is pinned to; the flipper's
     * @c pos tracks this joint each frame.<sup>[\ref fp_e6 "E6"]</sup>
     * @alias{xDEC}
     */
    HSD_JObj* xDEC_stageAnchor;
} itFlipper_ItemVars;
/**
 * @brief Flipper tuning constants, read from
 * @c Item::xC4_article_data->x4_specialAttributes.
 * @note These field names were determined by Claude (an AI), not recovered
 * from an original author; treat them as tentative. Each @c \@alias records
 * the offset-only name it replaced, and the superscript markers are footnotes
 * into
 * @ref itflipper_naming.
 */
typedef struct itFlipper_DatAttrs {
    /**
     * Frames airborne when thrown normally (18); loaded into @c
     * xDD4_flightTimer on a normal throw.<sup>[\ref fp_e0 "E0"], [\ref fp_e1
     * "E1"]</sup>
     * @alias{x0}
     */
    /* +0  */ s32 x0_throwDuration; // # airborne frames when thrown
    /**
     * Frames airborne when smash-thrown (25); loaded into @c xDD4_flightTimer
     * on                                 a strong throw.<sup>[\ref fp_e0
     * "E0"], [\ref fp_e2 "E2"]</sup>
     * @alias{x4}
     */
    /* +4  */ s32 x4_smashThrowDuration;
    /**
     * Lifetime (frames) granted once the flipper settles (500); written to
     * @c xD44_lifeTimer at the settle.<sup>[\ref fp_e0 "E0"], [\ref fp_e2
     * "E2"]</sup>
     * @alias{x8}
     */
    /* +8  */ s32 x8_lifetime;
    /**
     * Wall/ceiling restitution (0.8); flips and scales @c vel.x on a wall
     * hit.<sup>[\ref fp_e0 "E0"], [\ref fp_e5 "E5"]</sup>
     * @alias{xC}
     */
    /* +C  */ f32 xC_wallBounce;
    /**
     * Floor restitution (0.5); scales @c vel.x on a floor
     * hit.<sup>[\ref fp_e0 "E0"], [\ref fp_e5 "E5"]</sup>
     * @alias{x10}
     */
    /* +10 */ f32 x10_floorBounce;
    /**
     * Value the hitbox-refresh countdown @c xDDC_hitboxTimer is set to on a
     * hit (10).<sup>[\ref fp_e0 "E0"], [\ref fp_e3 "E3"]</sup>
     * @alias{x14}
     */
    /* +14 */ s32 x14_hitboxInterval;
    /**
     * Scales the striking fighter's speed into spin (11.5); its split from
     * @c x1C_baseSpinOnHit was not isolated, so this name is
     * tentative.<sup>[\ref fp_e0 "E0"], [\ref fp_e4 "E4"]</sup>
     * @alias{x18}
     */
    /* +18 */ f32 x18_spinMultiplier;
    /**
     * Base spin added on every hit before the fighter-speed term (0.131 rad);
     * its split from @c x18_spinMultiplier was not isolated, so this name is
     * tentative.<sup>[\ref fp_e0 "E0"], [\ref fp_e4 "E4"]</sup>
     * @alias{x1C}
     */
    /* +1C */ f32 x1C_baseSpinOnHit;
    /**
     * Per-frame decay subtracted from |@c xDE4_spinVel|
     * (0.000872).<sup>[\ref fp_e0 "E0"], [\ref fp_e3 "E3"]</sup>
     * @alias{x20}
     */
    /* +20 */ f32 x20_spinDecay;
    /**
     * Maximum |spin velocity|; @c xDE4_spinVel saturates here (0.873
     * rad).<sup>[\ref fp_e0 "E0"], [\ref fp_e4 "E4"]</sup>
     * @alias{x24}
     */
    /* +24 */ f32 x24_maxSpinVel;
} itFlipper_DatAttrs;
typedef struct itHarisen_DatAttrs {
    /* +0 */ f32 x0_scale;
} itHarisen_DatAttrs;
typedef struct itFoods_ItemVars {
    /* +0 ip+DD4 */ u32 x0;
    /* +4 ip+DD8 */ u32 heal_amount;
} itFoods_ItemVars;
typedef struct itFoodsAttributes {
    s32 x0;
    HSD_Joint* x4;
    s32 x8;
    s32 xC;
} itFoodsAttributes;
typedef struct itWhispyApple_ItemVars {
    s32 xDD4_heal;
    s32 xDD8;
} itWhispyApple_ItemVars;
typedef struct itWhispyAppleAttributes {
    u8 x0[0x4];
    s32 x4;
    s32 x8;
    u8 xC[0x8];
    f32 x14;
    f32 x18;
} itWhispyAppleAttributes;
typedef struct itFreeze_ItemVars {
    /*  +0 */ f32 x0;
    /*  +4 */ Vec3 x4;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ s32 x18;
    /* +1C */ Item_GObj* unk_1C;
    /* +20 */ M2C_UNK x20;
} itFreeze_ItemVars;
/// @remarks Might be shared?
typedef struct itUnkAttributes {
    float x0_float;
    float x4_float;
    float x8;
    float xC;
    float x10;
} itUnkAttributes;
typedef struct {
    HSD_JObj* x0;
    HSD_JObj* x4;
} itMato_ItemVars;
typedef struct {
    f32 x0;
    f32 x4;
} itMBallAttributes;
typedef struct {
    union {
        Vec3* x0_f32;
        S32Vec3* x0_s32;
    } x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ s32 xC;
    /* 0x10 */ u8 pad_10[0x18 - 0x10];
    /* 0x18 */ s32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ f32 x28;
    /* 0x2C */ f32 x2C;
    /* 0x30 */ f32 x30;
    /* 0x34 */ f32 x34;
    /* 0x38 */ f32 x38;
    /* 0x3C */ s8 x3C;
    /* 0x3D */ s8 x3D;
    /* 0x3E */ s8 x3E;
    /* 0x40 */ lbColl_80008D30_arg1 x40[2];
} itLikelikeAttributes;
typedef struct itLikelike_ItemVars {
    /*  +0 ip+DD4 */ char pad_0[0x18];
    /* +18 ip+DEC */ s32 x18;
    /* +1C ip+DF0 */ char pad_1C[0x4];
    /* +20 ip+DF4 */ Vec3 x20;
    /* +2C ip+E00 */ char pad_2C[0xC];
    /* +38 ip+E0C */ s32 x38;
    /* +3C ip+E10 */ s32 x3C;
    /* +40 ip+E14 */ s32 x40; // x40, x44, x48 are likely some form of S32Vec
    /* +44 ip+E18 */ s32 x44;
    /* +48 ip+E1C */ s32 x48;
    /* +4C ip+E20 */ s32 x4C;
    /* +50 ip+E24 */ HSD_GObj* x50;
    /* +54 ip+E28 */ HurtCapsule* x54;
} itLikelike_ItemVars;
typedef struct {
    f32 initial_velocity;
    f32 x4;
} itHammerheadAttributes;
typedef struct {
    u8 b0 : 1;
    u8 b1 : 1;
    u8 b2 : 1;
    u8 b3 : 1;
    u8 b4 : 1;
    u8 b5 : 1;
    u8 b6 : 1;
    u8 b7 : 1;
} itMBall_ItemVars;
typedef struct {
    int x0;
    int x4;
} itTomatoVars;
typedef struct itTincle_ItemVars {
    /*  +0 ip+DD4 */ u8 pad[0x20];
    /* +20 ip+DF4 */ s32 x20;
    /* +24 ip+DF8 */ s32 x24;
    /* +28 ip+DFC */ s32 x28;
    /* +2C ip+E00 */ s32 x2C;
    /* +30 ip+E04 */ f32 x30;
    /* +34 ip+E08 */ f32 x34;
    /* +38 ip+E0C */ f32 x38;
    /* +3C ip+E10 */ f32 x3C;
    /* +40 ip+E14 */ f32 x40;
    /* +44 ip+E18 */ f32 x44;
    /* +48 ip+E1C */ f32 x48;
    /* +4C ip+E20 */ f32 x4C;
    /* +50 ip+E24 */ f32 x50;
    /* +54 ip+E28 */ f32 x54;
    /* +58 ip+E2C */ f32 x58;
    /* +5C ip+E30 */ f32 x5C;
    /* +60 ip+E34 */ u8 pad3[0x4];
    /* +64 ip+E38 */ HSD_GObj* x64;
    /* +68 ip+E3C */ itECB x68;
} itTincle_ItemVars;
typedef struct itTincleAttributes {
    /* 0x00 */ f32 x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ f32 x10;
    /* 0x14 */ f32 x14;
    /* 0x18 */ f32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ s32 x28;
    /* 0x2C */ s32 x2C;
    /* 0x30 */ s32 x30;
    /* 0x34 */ f32 x34;
    /* 0x38 */ f32 x38;
    /* 0x3C */ s32 x3C;
    /* 0x40 */ s32 x40;
    /* 0x44 */ f32 x44;
    /* 0x48 */ f32 x48;
    /* 0x4C */ f32 x4C;
    /* 0x50 */ f32 x50;
    /* 0x54 */ s8 x54;
    /* 0x55 */ s8 x55;
} itTincleAttributes;
typedef struct itGShell_HurtInit {
    /* 0x00 */ s32 state;
    /* 0x04 */ Vec3 a_offset;
    /* 0x10 */ Vec3 b_offset;
    /* 0x1C */ f32 scale;
} itGShell_HurtInit;
typedef struct {
    /* ip+DD4 */ float xDD4;
    /* ip+DD8 */ float xDD8;
    /* ip+DDC */ float xDDC;
    /* ip+DE0 */ float xDE0;
    /* ip+DE4 */ float xDE4;
    /* ip+DE8 */ int xDE8;
    /* ip+DEC */ unsigned char xDEC_b0 : 1;
    /* ip+DEC */ unsigned char xDEC_b1 : 1;
    /* ip+DEC */ unsigned char xDEC_b2 : 1;
    /* ip+DEC */ unsigned char xDEC_b3 : 1;
    /* ip+DEC */ unsigned char xDEC_b4 : 1;
    /* ip+DEC */ unsigned char xDEC_b5 : 1;
    /* ip+DEC */ unsigned char xDEC_b6 : 1;
    /* ip+DEC */ unsigned char xDEC_b7 : 1;
    /* ip+DF0 */ s32 xDF0;
    /* ip+DF4 */ float xDF4;
    /* ip+DF8 */ float xDF8;
    /* ip+DFC */ float xDFC;
    /* ip+E00 */ f32 xE00;
    /* ip+E04 */ float xE04;
    /* ip+E08 */ unsigned char xE08_b0 : 1;
    /* ip+E08 */ unsigned char xE08_b1 : 1;
    /* ip+E08 */ unsigned char xE08_b2 : 1;
    /* ip+E08 */ unsigned char xE08_b3 : 1;
    /* ip+E08 */ unsigned char xE08_b4 : 1;
    /* ip+E08 */ unsigned char xE08_b5 : 1;
    /* ip+E08 */ unsigned char xE08_b6 : 1;
    /* ip+E08 */ unsigned char xE08_b7 : 1;
    /* ip+E09 */ char pad_E09[0xE0C - 0xE09];
    /* ip+E0C */ int xE0C;
    /* ip+E10 */ int xE10;
    /* ip+E14 */ int xE14;
    /* ip+E18 */ int xE18;
    /* ip+E1C */ unsigned char xE1C_b0 : 1;
    /* ip+E1C */ unsigned char xE1C_b1 : 1;
    /* ip+E1C */ unsigned char xE1C_b2 : 1;
    /* ip+E1C */ unsigned char xE1C_b3 : 1;
    /* ip+E1C */ unsigned char xE1C_b4 : 1;
    /* ip+E1C */ unsigned char xE1C_b5 : 1;
    /* ip+E1C */ unsigned char xE1C_b6 : 1;
    /* ip+E1C */ unsigned char xE1C_b7 : 1;
    /* ip+E1D */ char pad_E1D[0xE20 - 0xE1D];
    /* ip+E20 */ Vec3 vel;
    /* ip+E2C */ itGShell_HurtInit x58_hurtInit;
} itGShell_ItemVars;
;
typedef struct {
    /* ip+DD4 */ f32 xDD4;
    /* ip+DD8 */ f32 xDD8;
    /* ip+DDC */ f32 xDDC;
    /* ip+DE0 */ f32 xDE0;
    /* ip+DE4 */ f32 xDE4;
    /* ip+DE8 */ s32 xDE8;
    /* ip+DEC */ s32 xDEC;
    /* ip+DF0 */ s32 xDF0;
    /* ip+DF4 */ unsigned char xDF4_b0 : 1;
    /* ip+DF4 */ unsigned char xDF4_b1 : 1;
    /* ip+DF4 */ unsigned char xDF4_b2 : 1;
    /* ip+DF4 */ unsigned char xDF4_b3 : 1;
    /* ip+DF4 */ unsigned char xDF4_b4 : 1;
    /* ip+DF4 */ unsigned char xDF4_b5 : 1;
    /* ip+DF4 */ unsigned char xDF4_b6 : 1;
    /* ip+DF4 */ unsigned char xDF4_b7 : 1;
    /* ip+DF5 */ char pad_DF5[0xE20 - 0xDF5];
    /* ip+E20 */ Vec3 vel;
} itRShell_ItemVars;
;
typedef struct {
    u8 _pad[0x14];
    Vec3 x14;
} itRshellAttributes;
typedef struct {
    unsigned char xDD4_b0 : 1;
    unsigned char xDD4_b1 : 1;
    unsigned char xDD4_b2 : 1;
    unsigned char xDD4_b3 : 1;
    unsigned char xDD4_b4 : 1;
    unsigned char xDD4_b5 : 1;
    unsigned char xDD4_b6 : 1;
    unsigned char xDD4_b7 : 1;
} itMsBomb_ItemVars;
;
typedef struct {
    int padDD4;
    float xDD8;
    int xDDC;
    HSD_GObj* xDE0;
    int xDE4;
    float xDE8;
    float xDEC;
    float xDF0;
    unsigned int xDF4;
} itZeldaDinFire_ItemVars;
;
typedef struct itPokemonAttributes {
    f32 x0;
    s32 timer;
    s32 max;
    s32 xC;
    s32 x10;
    s32 x14;
    s32 x18;
} itPokemonAttributes;
typedef struct itKamexAttributes {
    /* +00 */ f32 x0;
    /* +04 */ s32 timer;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
} itKamexAttributes;
typedef struct {
    s16 x0;
    u8 padding[0xE34 - 0xDD8];
    s32 timer;
    int x64;
    f32 x68;
    f32 x6C;
    union {
        f32 xE44;
        s32 xE44_s32;
    };
} itPokemon_ItemVars;
typedef struct {
    /* +00 ip+DD4 */ s16 x0;
    /* +02 */ u8 padding[0xE34 - 0xDD8];
    /* +60 ip+E34 */ f32 timer;
    /* +64 ip+E38 */ f32 x64;
    /* +68 ip+E3C */ f32 x68;
    /* +6C ip+E40 */ s32 x6C;
    /* +70 ip+E44 */ s32 xE44;
    /* +74 ip+E48 */ s32 xE48;
} itKabigon_ItemVars;
typedef struct itHitodeman_ItemVars {
    /*  +0 ip+DD4 */ char pad_0[0x60];
    /* +60 ip+E34 */ float x60;
    /* +64 ip+E38 */ float x64;
    /* +68 ip+E3C */ s32 x68;
    /* +6C ip+E40 */ float x6C;
    /* +70 ip+E44 */ float x70;
    /* +74 ip+E48 */ float x74;
    /* +78 ip+E4C */ float x78;
    /* +7C ip+E50 */ float x7C;
    /* +80 ip+E54 */ float x80;
    /* +84 ip+E58 */ float x84;
    /* +88 ip+E5C */ s32 x88;
    /* +8C ip+E60 */ float x8C;
    /* +90 ip+E64 */ HSD_GObj* x90;
} itHitodeman_ItemVars;
typedef struct {
    int x0;
    HSD_JObj* jobj;
} itTargetVars;
typedef struct MewVars {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
} MewVars;
typedef struct itCoinAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    f32 x3C;
    f32 x40;
    f32 x44;
    f32 x48;
} itCoinAttributes;
typedef struct itCoin_ItemVars {
    int x0;
    int x4;
    f32 x8;
    f32 xC;
    int x10;
    HSD_GObj* x14;
} itCoin_ItemVars;
typedef struct itFFlower_ItemVars {
    int x0;
    u32 x4;
} itFFlower_ItemVars;
typedef struct FFlowerAttr {
    int x0; // [120]
    int x4; // [1200]
    int x8; // [1140]
    int xC; // [120]
    float x10; // [1.5]
    float x14;
} FFlowerAttr;
typedef struct itFFlowerFlame_ItemVars {
    /* +0 */ Vec3 pos;
    /* +C */ f32 unk;
} itFFlowerFlame_ItemVars;
typedef struct itHassam_ItemVars {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    s32 x18;
    s32 x1C;
    s32 x20;
    u8 padding[0x5C - 0x20];
    Vec3 x5C;
    f32 x68;
} itHassam_ItemVars;
typedef struct itKinoko_ItemVars {
    f32 x0;
    Vec3 x4;
    // f32 x8;
    // f32 xC;
} itKinoko_ItemVars;
typedef struct itNokoNoko_ItemVars {
    f32 x0;
    s32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    s32 x14;
    s32 x18;
    s32 x1C;
    s32 x20;
    s32 x24;
    s32 x28;
    s32 x2C;
    s32 x30;
    f32 x34;
    f32 x38;
    s32 x3C;
    s32 x40;
    s32 x44;
    f32 x48;
    f32 x4C;
    f32 x50;
    f32 x54;
    f32 x58;
    f32 x5C;
    f32 x60;
    f32 x64;
    f32 x68;
    f32 x6C;
    f32 x70;
    itECB x74;
    f32 x84;
    f32 x88;
    f32 x8C;
    f32 x90;
    f32 x94;
    f32 x98;
    f32 x9C;
} itNokoNoko_ItemVars;
typedef struct itNokoNoko_DatAttrs2 {
    s32 x0;
    f32 x4;
} itNokoNoko_DatAttrs2;
typedef struct itNokoNoko_DatAttrs {
    itNokoNoko_DatAttrs2* x0;
    f32 x4;
    f32 x8;
} itNokoNoko_DatAttrs;
typedef struct itTaruAttributes {
    /* +00 */ s32 x0;
    /* +04 */ s32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
    /* +30 */ f32 x30;
    /* +34 */ f32 x34;
} itTaruAttributes;
typedef struct itTaru_ItemVars {
    /* +0  ip+DD4 */ s32 xDD4;
    /* +4  ip+DD8 */ s32 xDD8;
    /* +8  ip+DDC */ f32 xDDC;
    /* +C  ip+DE0 */ f32 xDE0;
    /* +10 ip+DE4 */ f32 xDE4;
    /* +14 ip+DE8 */ Vec3 xDE8;
} itTaru_ItemVars;
typedef struct itTarucann_ItemVars {
    /*  +0 ip+DD4 */ s32 x0;
    /*  +4 ip+DD8 */ s32 x4;
    /*  +8 ip+DDC */ f32 x8;
    /*  +C ip+DE0 */ f32 xC;
    /* +10 ip+DE4 */ f32 x10;
    /* +14 ip+DE8 */ Vec3 x14;
    /* +20 ip+DF4 */ Fighter_GObj* x20;
    /* +24 ip+DF8 */ s32 x24;
    /* +28 ip+DFC */ f32 x28;
} itTarucann_ItemVars;
typedef struct itTaruCann_DatAttrs {
    /* +00 */ f32 x0;
    /* +04 */ char pad_4[0x4];
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ f32 x24;
    /* +28 */ int x28;
    /* +2C */ int x2C;
    /* +30 */ u32 x30;
    /* +34 */ int x34;
    /* +38 */ u32 x38;
    /* +3C */ u32 x3C;
    /* +40 */ u32 x40;
    /* +44 */ u32 x44;
    /* +48 */ f32 x48;
    /* +4C */ f32 x4C;
    /* +50 */ f32 x50;
} itTaruCann_DatAttrs;
typedef struct itKusudama_ItemVars {
    /* +0 ip+DD4 */ bool x0;
    /* +4 ip+DD8 */ s32 x4;
} itKusudama_ItemVars;
typedef struct itKusudamaAttributes {
    /* +00 */ s32 x0;
    /* +04 */ s32 x4;
    /* +08 */ s32 x8;
    /* +0C */ s32 xC;
    /* +10 */ ItemKind x10;
    /* +14 */ s32 x14;
    /* +18 */ f32 x18;
    /* +1C */ f32 x1C;
    /* +20 */ f32 x20;
    /* +24 */ u8 _24[0x4];
    /* +28 */ f32 x28;
    /* +2C */ f32 x2C;
} itKusudamaAttributes;
typedef struct itKlap_ItemVars {
    /*  +0 ip+DD4 */ f32 x0;
    /*  +4 ip+DD8 */ f32 x4;
    /*  +8 ip+DDC */ f32 x8;
    /*  +C ip+DE0 */ f32 xC;
    /* +10 ip+DE4 */ f32 x10;
    /* +14 ip+DE8 */ f32 x14;
    /* +18 ip+DEC */ f32 x18;
    /* +1C ip+DF0 */ f32 x1C;
    /* +20 ip+DF4 */ HSD_GObj* x20;
    /* +24 ip+DF8 */ f32 x24;
    /* +28 ip+DFC */ f32 x28;
} itKlap_ItemVars;
typedef struct itLeadeadAttr_x0 {
    /* 0x00 */ s32 x0;
    /* 0x04 */ f32 x4;
} itLeadeadAttr_x0;
typedef struct itLeadeadAttributes {
    /* 0x00 */ itLeadeadAttr_x0* x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ f32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ f32 x10;
    /* 0x14 */ f32 x14;
    /* 0x18 */ s16 x18;
    /* 0x1A */ s16 x1A;
    /* 0x1C */ s16 x1C;
    /* 0x1E */ s8 x1E;
} itLeadeadAttributes;
typedef struct itChicorita_ItemVars {
    /* ip+DD4 */ u8 _0[0x60 - 0x0];
    /* ip+E34 */ s32 x60; // timer?
    /* ip+E38 */ f32 x64; // y vel
} itChicorita_ItemVars;
typedef struct itHouou_ItemVars {
    /* ip+DD4 */ u8 _0[0x60 - 0x0];
    /* ip+E34 */ s32 timer;
    /* ip+E38 */ Vec3 start_pos;
    /* ip+E44 */ f32 vel_accum;
} itHouou_ItemVars;
typedef struct itChicoritaAttr {
    f32 scale;
    s32 x4; // x60 in item vars gets set to this if -1; max timer/lifetime?
} itChicoritaAttr;
typedef struct itMarilAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
} itMarilAttributes;
typedef struct itMaril_ItemVars {
    u8 pad[0x60];
    union {
        struct {
            u8 x0 : 1;
            u8 x1 : 1;
            u8 x2 : 1;
            u8 x3 : 1;
            u8 x4 : 1;
            u8 x5 : 1;
            u8 x6 : 1;
            u8 x7 : 1;
        };
        u32 flags;
    } x60;
    f32 x64;
    f32 x68;
    Vec3 x6C;
} itMaril_ItemVars;
typedef struct itLizardon_ItemVars {
    /* +00 ip+DD4 */ u8 pad[0x60];
    /* +60 ip+E34 */ s32 x60;
    /* +64 ip+E38 */ s32 x64;
    /* +68 ip+E3C */ f32 x68;
    /* +6C ip+E40 */ s32 x6C;
    /* +70 ip+E44 */ s32 x70;
    /* +74 ip+E48 */ s32 x74[4];
} itLizardon_ItemVars;
typedef struct itLizardonAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    s32 x14;
    s32 x18[4];
    s32 x28;
    s32 x2C;
} itLizardonAttributes;
typedef struct itLuckyAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    s32 x10;
    s32 x14;
    s32 x18;
} itLuckyAttributes;
typedef struct itLuckyEggAttributes {
    /* 0x0 */ f32 x0;
    /* 0x4 */ s32 x4;
} itLuckyEggAttributes;
typedef struct itLucky_ItemVars {
    /* ip+DD4 */ u8 _0[0x60 - 0x0];
    /* ip+E34 */ enum_t x60;
    /* ip+E38 */ s32 x64;
    /* ip+E3C */ s32 x68;
} itLucky_ItemVars;
typedef struct itChicoritaLeafAttr {
    f32 timer;
    f32 x4;
    f32 x8; // x pos
    f32 xC; // y pos
    f32 x10; // x vel
} itChicoritaLeafAttr;
typedef struct it_2728_DatAttrs {
    Fighter* fighter;
} it_2728_DatAttrs;
typedef struct itPokemonSpawn_ItemVars {
    /* ip+DD4 */ s32 x0;
    /* ip+DD8 */ Vec3 x4;
    /* ip+DE4 */ Vec3 x10;
    /* ip+DF0 */ f32 x1C;
    /* ip+DF4 */ f32 x20;
    /* ip+DF8 */ f32 x24;
    /* ip+DFC */ f32 x28;
    /* ip+E00 */ f32 x2C[6];
    // /* ip+E04 */ s32 x30; // scale?
    // /* ip+E08 */ s32 x34;
    // /* ip+E0C */ s32 x38;
    // /* ip+E10 */ s32 x3C;
    // /* ip+E14 */ s32 x40;
    /* ip+E18 */ f32 x44;
    /* ip+E1C */ f32 x48;
    /* ip+E20 */ f32 x4C; // scale
    /* ip+E24 */ f32 x50;
    /* ip+E28 */ s32 x54;
    /* ip+E2C */ s32 x58; // used as an index back into this struct?
    /* ip+E30 */ s32 x5C;
} itPokemonSpawn_ItemVars;
typedef struct itMewtwoShadowball_ItemVars {
    /* ip+DD4 */ f32 x0;
    /* ip+DD8 */ Vec3 x4;
    /* ip+DE4 */ f32 x10;
    /* ip+DE8 */ s32 x14;
    /* ip+DEC */ s32 x18;
    /* ip+DF0 */ s32 x1C;
    /* ip+DF4 */ s32 x20;
    /* ip+DF8 */ u32 x24;
    /* ip+DFC */ s32 x28;
    /* ip+E00 */ HSD_GObj* x2C;
    /* ip+E04 */ Vec3 x30;
    /* ip+E10 */ f32 x3C;
    /* ip+E14 */ f32 x40;
    /* ip+E18 */ f32 x44;
    /* ip+E1C */ s32 x48;
    /* ip+E20 */ s32 x4C;
    /* ip+E24 */ f32 x50;
    /* ip+E28 */ f32 x54;
    /* ip+E2C */ Vec3 x58;
    /* ip+E38 */ f32 x64;
} itMewtwoShadowball_ItemVars;
typedef struct itMewtwoShadowball_DatAttrs {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    s32 x20;
    f32 x24;
    f32 x28;
    f32 x2C;
    f32 x30;
    f32 x34;
    f32 x38;
    f32 x3C;
} itMewtwoShadowball_DatAttrs;
typedef struct itPokemonSpawn_DatAttrs {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C[6];
    f32 x34;
    s32 x38;
    s32 pokemon_spawn_weights[It_PKind_Terminate - It_PKind_Start];
    u8 _pad[520];
} itPokemonSpawn_DatAttrs;
;
typedef struct itZako_ItemVars {
    /* ip+DD4 */ HSD_JObj* jobj;
    /* ip+DD8 */ s32 idx;
    /* ip+DDC */ Vec3 x8;
    /* ip+DE8 */ S32Vec3 x14;
    /* ip+DF4 */ s32 x20;
    /* ip+DF8 */ s32 x24;
    /* ip+DFC */ s32 x28;
    /* ip+E00 */ f32 x2C;
    /* ip+E04 */ s32 x30; // scale?
    /* ip+E08 */ s32 x34;
    /* ip+E0C */ s32 x38;
    /* ip+E10 */ s32 x3C;
    /* ip+E14 */ s32 x40;
    /* ip+E18 */ f32 x44;
    /* ip+E1C */ s32 x48;
    /* ip+E20 */ f32 x4C; // scale
    /* ip+E24 */ f32 x50;
    /* ip+E28 */ s32 x54;
    /* ip+E2C */ s32 x58;
    /* ip+E30 */ s32 x5C;
} itZako_ItemVars;
typedef struct itZako_DatAttrs {
    f32 scale;
} itZako_DatAttrs;
typedef struct itGamewatch_ItemVars {
    /* ip+DD4 */ void* attr;
} itGamewatch_ItemVars;
typedef struct itYoshiEggLay_ItemVars {
    f32 x0;
} itYoshiEggLay_ItemVars;
typedef struct itYoshiEggLay_DatAttrs {
    Vec3 pos;
    Vec3 vel;
    float lifetime; // lifetime
    float float2;
    float float3; // item var x0
    float x24; // item->xC98
    ItemKind kind;
} itYoshiEggLay_DatAttrs;
typedef struct itUnk2_ItemVars {
    f32 x0;
} itUnk2_ItemVars;
struct itUnk2_DatAttrs {
    Vec3 pos;
    Vec3 vel;
    f32 float1; // lifetime
    f32 float2; // item var x0
};
/// Inline sub-struct at ItemVars offset 0x1C (byte offset 0xDF0 in Item).
/// Tracks a bone used for coin pickup collision.
typedef struct it_2E5A_SubVars {
    /* +0  */ f32 x0; // scale-dependent radius (copied to item->x3C)
    /* +4  */ HSD_JObj* x4; // bone
    /* +8  */ Vec3 x8; // current bone world position
    /* +14 */ Vec3 x14; // previous bone world position
} it_2E5A_SubVars;
typedef struct it_2E5A_ItemVars {
    /* ip+DD4 */ s32 x0;
    /* ip+DD8 */ s32 x4; // tier index (0..2)
    /* ip+DDC */ s32 x8;
    /* ip+DE0 */ s32 xC;
    /* ip+DE4 */ f32 x10;
    /* ip+DE8 */ f32 x14;
    /* ip+DEC */ UnkFlagStruct x18;
    /* ip+DF0 */ it_2E5A_SubVars sub;
} it_2E5A_ItemVars;
/// One tier's worth of spawn data (bronze/silver/gold).
/// The four fields from @c anim_joint through @c xD84_value form an inline
/// @ref ItemStateDesc; its address is passed to @c Item_80268D34. The fourth
/// slot (@c xC_script in @ref ItemStateDesc) doubles as @c xD84_value.
typedef struct it_2E5A_TierEntry {
    /* 0x00 */ HSD_Joint* joint;
    /* 0x04 */ HSD_AnimJoint* anim_joint;
    /* 0x08 */ HSD_MatAnimJoint* matanim_joint;
    /* 0x0C */ HSD_ShapeAnimJoint* shape_anim_joint;
    /* 0x10 */ s32 xD84_value;
    /* 0x14 */ s32 threshold;
    /* 0x18 */ f32 scale;
    /* 0x1C */ itECB ecb;
} it_2E5A_TierEntry;
/// Special attributes for it_2E5A items. Base physics parameters followed by
/// three tier entries.
typedef struct it_2E5A_Attrs {
    /* 0x00 */ f32 x0; // passed to it_80275158
    /* 0x04 */ f32 x4; // stored into item->xDD4_itemVar.it_2E5A.x10
    /* 0x08 */ f32 x8; // stored into item->xDD4_itemVar.it_2E5A.x14
    /* 0x0C */ f32 xC;
    /* 0x10 */ f32 x10;
    /* 0x14 */ f32 x14; // item->x40_vel.x multiplier on landing
    /* 0x18 */ f32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ f32 x28;
    /* 0x2C */ f32
        x2C[4]; // per-player spawn multiplier (indexed by gm_8016C6C0)
    /* 0x3C */ it_2E5A_TierEntry tiers[3];
} it_2E5A_Attrs;
typedef struct it_802E5FXX_struct { // used for it_802E5F00 and it_802E5F8C
    HSD_GObj* x0; // Item GObj assignment/passed to db_80225DD8
    f32 x4; // float assignment (angle?)
    f32 x8; // float assignment (used in x40_vel.y calc)
    s32 xC; // non-float assignment (arg3/arg2/while condition)
    s32 x10; // non-float assignment
    s32 x14; // non-float assignment
    s32 x18; // non-float assignment (gm_8016C6C0)
} it_802E5FXX_struct;
typedef struct itYaku_ItemVars {
    /*  +0 ip+DD4 */ s16 x0;
    /*  +2 ip+DD6 */ s16 x2; // type of union: 1=jobj, 2=vec
    union {
        /*  +4 ip+DD8 */ HSD_JObj* x4;
        /*  +4 ip+DD8 */ Vec3 x4_vec;
    };
    /* +10 ip+DE4 */ Ground* x10;
    /* +14 ip+DE8 */ void (*x14)(Item_GObj*, Ground*);
    /* +18 ip+DEC */ void (*x18)(Item_GObj*, Ground*, Vec3*, HSD_GObj*, f32);
    /* +1C ip+DF0 */ void (*x1C)(Item_GObj*, Ground*, HSD_GObj*);
} itYaku_ItemVars;
typedef struct itWhiteBea_ItemVars {
    /*  +0 ip+DD4 */ char pad_0[0x18];
    /* +18 ip+DEC */ s32 x18;
    /* +1C ip+DF0 */ char pad_1C[0x4];
    /* +20 ip+DF4 */ Item_GObj* x20;
    /* +24 ip+DF8 */ char pad_24[0x4];
    /* +28 ip+DFC */ s32 x28;
    /* +2C ip+E00 */ char pad_2C[0x10];
    /* +3C ip+E10 */ s32 x3C;
    /* +40 ip+E14 */ s32 x40;
    /* +44 ip+E18 */ s32 x44;
} itWhiteBea_ItemVars;
typedef struct itWhiteBeaAttributes {
    /* +0 */ struct {
        s32 x0;
        f32 x4;
    }* x0;
    /* +4 */ f32 x4;
    /* +8 */ s16 x8;
    /* +A */ s16 xA;
    /* +C */ s16 xC;
    /* +E */ s16 xE;
    /* +10 */ f32 x10;
    /* +14 */ s16 x14;
} itWhiteBeaAttributes;
typedef struct itOctarock_ItemVars {
    /*  +0 ip+DD4 */ char pad_0[0x18];
    /* +18 ip+DEC */ s32 x18;
    /* +1C ip+DF0 */ char pad_1C[0x4];
    /* +20 ip+DF4 */ Vec3 x20;
    /* +2C ip+E00 */ s32 x2C;
    /* +30 ip+E04 */ char pad_30[0x2];
    /* +32 ip+E06 */ s16 x32;
} itOctarock_ItemVars;
typedef struct itSScopeAttributes {
    /* +0 */ s32 x0;
    /* +4 */ s32 x4;
    /* +8 */ s32 x8;
    /* +C */ float xC[10];
    /* +34 */ Vec3 x34;
} itSScopeAttributes;
typedef struct itScopeBeam_ItemVars {
    int x0;
    float x4;
} itScopeBeam_ItemVars;
typedef struct itsonansAttributes {
    f32 x0;
    f32 x4;
    f32 x8; // hit sens
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    f32 x1C;
    f32 x20;
    s32 x24; // lifetimeset
} itsonansAttributes;
typedef struct itSonans_ItemVars {
    /* ip+DD4 */ u8 _0[0x60 - 0x0];
    /* ip+E34 */ f32 x60;
    /* ip+E38 */ f32 x64;
    /* ip+E3C */ f32 x68;
} itSonans_ItemVars;
typedef struct itStarRodStar_ItemVars {
    int x0;
    float x4;
} itStarRodStar_ItemVars;
typedef struct itTosakinto_ItemVars {
    /* ip+DD4 */ u8 x0_pad[0x60];
    /* ip+E34 */ enum_t x60_msid;
    /* ip+E38 */ float x64_vel_x;
    /* ip+E3C */ int x68_sfx_id;
} itTosakinto_ItemVars;
typedef struct itTosakinto_Attrs {
    float x0_scale;
    float x4_life_timer;
    float x8_vel_x;
} itTosakinto_Attrs;
typedef struct itMDisableAttributes {
    /* +0 */ f32 lifetime;
    /* +4 */ f32 x_vel;
} itMDisableAttributes;
typedef struct itMDisable_ItemVars {
    Fighter_GObj* owner;
} itMDisable_ItemVars;
typedef struct itNessPKFirepillarAttributes {
    /*  +0  */ float x0;
    /*  +4  */ float x4;
    /*  +8  */ float scale;
} itNessPKFirepillarAttributes;
typedef struct itKoopaFlame_ItemVars {
    Vec x0_pos;
    Vec xC_direction;
    Vec x18_vel;
    float x24_angle;
    float x28_speed;
    float x2C_lifetime;
    int x30;
    float x34_base_scale;
    float x38_base_speed;
    float x3C_scale;
    int x40_frame_counter;
    bool x44_spawned;
    int x48_gfx;
} itKoopaFlame_ItemVars;
typedef struct itOctarockAttributes {
    s32* x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    f32 x14;
    f32 x18;
    s16 x1C;
} itOctarockAttributes;
typedef struct itOldottosea_ItemVars {
    /* 0x00 */ u8 pad[0x20];
    /* 0x20 */ Item_GObj* x20;
    /* 0x24 */ s32 x24;
    /* 0x28 */ s32 x28;
    /* 0x2C */ s16 x2C;
} itOldottosea_ItemVars;
typedef struct itPatapata_ItemVars {
    /* 0x00 */ u8 pad0[0x4];
    /* 0x04 */ s32 x4;
    /* 0x08 */ u8 pad[0x20 - 0x08];
    /* 0x20 */ s32 x20;
    /* 0x24 */ s32 x24;
    /* 0x28 */ s32 x28;
    /* 0x2C */ f32 x2C;
    /* 0x30 */ f32 x30;
    /* 0x34 */ u8 pad1[0x40 - 0x34];
    /* 0x40 */ s32 x40;
    /* 0x44 */ s32 x44;
} itPatapata_ItemVars;
typedef struct itPatapataDatAttrs {
    /* 0x00 */ u8 pad[0x4];
    /* 0x04 */ f32 x4;
} itPatapataDatAttrs;
typedef struct itPatapataAttributes {
    /* 0x00 */ itPatapataDatAttrs* x0;
    /* 0x04 */ f32 x4;
    /* 0x08 */ f32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ s32 x10;
    /* 0x14 */ f32 x14;
    /* 0x18 */ f32 x18;
    /* 0x1C */ s32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ s32 x24;
    /* 0x28 */ f32 x28;
    /* 0x2C */ s32 x2C;
    /* 0x30 */ f32 x30;
    /* 0x34 */ f32 x34;
    /* 0x38 */ f32 x38;
    /* 0x3C */ f32 x3C;
} itPatapataAttributes;
typedef struct itOldottoseaAttributes {
    /* 0x00 */ struct {
        s32 x0;
        f32 x4;
    }* x0;
    /* 0x04 */ f32 x4;
    /* 0x08 */ f32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ s8 x10;
    /* 0x11 */ u8 pad0[0x3];
    /* 0x14 */ f32 x14;
    /* 0x18 */ f32 x18;
    /* 0x1C */ f32 x1C;
    /* 0x20 */ f32 x20;
    /* 0x24 */ f32 x24;
    /* 0x28 */ s8 x28;
} itOldottoseaAttributes;
typedef struct itFreezerAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    s32 xC;
} itFreezerAttributes;
typedef struct itFreezer_ItemVars {
    /* ip+DD4 */ u8 _0[0x60 - 0x0];
    /* ip+E34 */ s32 x60;
} itFreezer_ItemVars;
typedef struct itFushigibana_ItemVars {
    /* xDD4 */ u8 _0[0x60 - 0x0];
    /* xE34 */ UnkFlagStruct x60;
    /* xE35 */ u8 x61[0x64 - 0x61];
    /* xE38 */ f32 x64;
} itFushigibana_ItemVars;
typedef struct itFushigibanaAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
} itFushigibanaAttributes;
typedef struct itkireihana_ItemVars {
    /* xDD4 */ f32 x0;
    /* xDD8 */ u32 x4;
    /* xDDC */ f32 x8;
    /* xDD8 */ u8 pad[0x60 - 0xC];
    /* xE34 */ f32 fall_speed;
    /* xE38 */ int timer_unk0;
    /* xE3C */ int timer_unk1;
    /* xE40 */ int timer_unk2;
    /* xE44 */ f32 x70;
} itkireihana_ItemVars;
typedef struct itkireihanaAttributes {
    f32 x0;
    u32 x4;
    u32 x8;
    u32 xC;
} itkireihanaAttributes;
typedef struct itKabigonAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    s32 x10;
    s32 x14;
    f32 x18;
} itKabigonAttributes;
typedef struct itMatadogasAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
} itMatadogasAttributes;
typedef struct itThunder_ItemVars {
    /* xDD8 */ u8 pad[0x60 - 0x0];
    /* xE34 */ s32 x60;
    /* xE38 */ s32 x64;
    /* xE3C */ f32 x68;
} itThunder_ItemVars;
typedef struct itThunderPokemonAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    u32 xC;
} itThunderPokemonAttributes;
typedef struct itOldkuri_ItemVars {
    /* +00 */ char pad[0x18];
    /* +18 */ s32 xDEC;
    /* +1C */ char pad2[0x4];
    /* +20 */ f32 xDF4;
    /* +24 */ s32 xDF8;
    /* +28 */ s32 xDFC;
} itOldkuri_ItemVars;
typedef struct itUnknown_ItemVars {
    /* +00 ip+DD4 */ char pad_0[0x60];
    /* +60 ip+E34 */ f32 x60;
    /* +64 ip+E38 */ union {
        f32 f;
        s32 i;
    } x64;
    /* +68 ip+E3C */ union {
        f32 f;
        s32 i;
    } x68;
    /* +6C ip+E40 */ Vec3 x6C;
    /* +78 ip+E4C */ union {
        Vec3 vec;
        s32 dir;
    } x78;
    /* +84 ip+E58 */ s32 x84;
} itUnknown_ItemVars;
typedef struct itGreatFoxLaser_Attrs {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
} itGreatFoxLaser_Attrs;
typedef struct itUnknownAttributes {
    /* +00 */ union {
        f32 f;
        s32 i;
    } x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
    /* +0C */ f32 xC;
    /* +10 */ f32 x10;
    /* +14 */ f32 x14;
    /* +18 */ union {
        f32 f;
        s32 i;
    } x18;
    /* +1C */ union {
        f32 f;
        s32 i;
    } x1C;
    /* +20 */ union {
        f32 f;
        s32 i;
    } x20;
    /* +24 */ HSD_Joint* x24[26];
} itUnknownAttributes;
typedef struct itCrazyHandBombAttributes {
    /* +00 */ f32 x0;
    /* +04 */ f32 x4;
    /* +08 */ f32 x8;
} itCrazyHandBombAttributes;
typedef struct itLugia_ItemVars {
    /* +00 ip+DD4 */ u8 x0_pad[0x60];
    /* +60 ip+E34 */ s32 x60;
    /* +64 ip+E38 */ Vec3 x64;
    /* +70 ip+E44 */ Vec3 x70;
    /* +7C ip+E50 */ Vec3 xE50;
    /* +88 ip+E5C */ f32 x88;
    /* +8C ip+E60 */ Vec3 x8C;
    /* +98 ip+E6C */ u8 x98_pad[0xC];
    /* +A4 ip+E78 */ s32 xA4;
} itLugia_ItemVars;
typedef struct itGreatFoxLaser_ItemVars {
    /* +00 ip+DD4 */ u8 x0_pad[0x20];
    /* +20 ip+DF4 */ HSD_GObj* x20;
    /* +24 ip+DF8 */ u8 x24_pad[0x4];
    /* +28 ip+DFC */ Vec3 x28;
    /* +34 ip+E08 */ s16 x34;
    /* +36 ip+E0A */ s16 x36;
    /* +38 ip+E0C */ s16 x38;
    /* +3A ip+E0E */ s16 x3A;
} itGreatFoxLaser_ItemVars;
typedef struct itMatadogas_ItemVars {
    /* +00 ip+DD4 */ char pad_0[0x60];
    /* +60 ip+E34 */ s32 x60;
    /* +64 ip+E38 */ s32 x64;
    /* +68 ip+E3C */ s32 x68;
} itMatadogas_ItemVars;
typedef struct itYoshiEggThrowAttributes {
    /* +0 */ f32 x0;
    /* +4 */ f32 x4;
} itYoshiEggThrowAttributes;
typedef struct ScopeBeamFloats {
    float velocity;
    float scale;
    float lifetime;
} ScopeBeamFloats;
typedef struct ScopeBeamAttrs {
    ScopeBeamFloats floats[9];
    /* +6C */ u8 _pad[0x78 - 0x6C];
    /* +78 */ f32 x78;
    /* +7C */ f32 x7C;
} ScopeBeamAttrs;
#define MELEE_IT_ITPKFLASH_H
typedef struct itPKFlush_ItemVars {
    s32 xDD4_PKFlash;
    float xDD8_PKFlash;
    s32 xDDC_PKFlash;
    HSD_GObj* xDE0_PKFlash_Owner;
    s32 xDE4_PKFlash;
} itPKFlush_ItemVars;
typedef struct itPKFlushExplode_ItemVars {
    float xDD4;
    float xDD8;
    HSD_GObj* xDDC;
} itPKFlushExplode_ItemVars;
typedef struct itFlashAttributes {
    float x0_FLASH_LIFETIMER;
    float x4_FLASH_HITBOX_SIZE_MUL;
    float x8_FLASH_GRAPHIC_SIZE_INIT_MUL;
    float xC_FLASH_GRAPHIC_SIZE_GROWTH_MUL;
    float x10_FLASH_UNK1;
    float x14_FLASH_PEAK_RISE_HEIGHT;
    float x18_FLASH_CONTROL;
    float x1C_FLASH_GRAVITY;
    float x20_FLASH_UNK2;
    float x24_FLASH_UNK3;
    float x28_FLASH_EXPLOSION_DELAY;
} itFlashAttributes;
typedef struct itFlashExplAttributes {
    float x0_FLASH_EXPL_HITBOX_SIZE_MUL;
    float x4_FLASH_EXPL_GRAPHIC_SIZE_INIT;
    float x8_FLASH_EXPL_GRAPHIC_SIZE_GROWTH;
    float xC_FLASH_EXPL_BASE_DAMAGE;
    float x10_FLASH_EXPL_DAMAGE_MUL;
} itFlashExplAttributes;
#define MELEE_IT_ITPKTHUNDER_H
typedef struct itPKThunderAttributes {
    float x0_PKTHUNDER_LIFETIME;
    float x4_PKTHUNDER_SPEED;
    float x8_PKTHUNDER_SPAWN_ANGLE;
    float xC_PKTHUNDER_STICK_THRESHOLD;
    float x10_PKTHUNDER_TURN_RADIUS;
} itPKThunderAttributes;
typedef struct itPKThunder_ItemVars {
    HSD_GObj* xDD4[6];
    Vec3 positions[16];
    f32 angles[16];
    f32 xEEC;
    s32 xEF0;
    HSD_GObj* xEF4;
    s32 xEF8;
    s32 xEFC;
    s32 xF00;
    HSD_GObj* xF04;
    HSD_GObj* xF08;
} itPKThunder_ItemVars;
/// Recent Pokemon selections and the shared Mew/Celebi spawn limit.
struct PokemonSelectionState {
    /* 0x0 */ ItemKind last_kind;
    /* 0x4 */ ItemKind previous_kind;
    /* 0x8 */ bool rare_spawned;
};
struct CameraBoxFlags {
    struct {
        u8 b01 : 2;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    };
};
struct flag32 {
    struct {
        u32 x0 : 1;
        u32 x1 : 1;
        u32 x2 : 1;
        u32 x3 : 1;
        u32 x4 : 1;
        u32 x5 : 1;
        u32 x6 : 1;
        u32 x7 : 1;
        u32 x8 : 1;
        u32 x9 : 1;
        u32 xA : 1;
        u32 xB : 1;
        u32 xC : 1;
        u32 xD : 1;
        u32 xE : 1;
        u32 xF : 4;
        u32 x13 : 1;
        u32 x14 : 1;
        u32 x15 : 1;
        u32 x16 : 1;
        u32 x17 : 2;
        u32 x19 : 1;
        u32 x1A : 1;
        u32 x1B : 1;
        u32 x1C : 1;
        u32 x1D : 1;
        u32 x1E : 1;
        u32 x1F : 1;
    } flags;
};
struct DynamicBoneTable {
    HSD_JObj* bones[100];
};
;
struct Item_DynamicBones {
    int flags;
    HSD_JObj* skeleton;
    DynamicsDesc dyn_desc;
};
;
struct ItemAttr {
    u8 x0_is_heavy : 1; // 0x0, bit 0x80, is heavy item (crate)
    u8 x0_78 : 4; // Should be enum (Item_UnkKinds?) for type of action char
                  // takes when using - 0: throwable, 2: Swingable, 3:
                  // Shootable (Relation to Samus Missile lock-on behavior?)
    u8 x0_hold_kind : 3; // defines hand hold behavior (Item_HoldKinds?)
    u8 x1_1 : 2; // 0x1 0xB0
    u8 x1_3 : 1; // 0x1 0x20
    u8 x1_4 : 1; // 0x1 0x10
    u8 x1_5 : 1; // 0x1 0x08
    u8 x1_67_cam_kind : 2; // 0x1 0x06, is stored to 0xdcd
    u8 x1_8 : 1; // 0x1 0x01    char flags3; //0x2
    u8 x3; // 0x3
    f32 x4_throw_speed_mul; // 0x4, speed multiplier at which this item is
                            // thrown at
    s32 x8;
    f32 xC_spin_speed;
    f32 x10_fall_speed; // 0x10
    f32 x14_fall_speed_max; // 0x14
    f32 x18;
    f32 x1C_damage_mul; // collision related? referenced on taking damage @
                        // 80270f90
    itECB x20;
    Vec2 x30_unk; // 0x34
    Vec2 x38_grab_range; // 0x38
    itECB x40;
    f32 x50; // 0x50
    f32 x54; // 0x54
    f32 x58; // 0x58
    f32 x5c; // 0x5c
    f32 x60_scale; // 0x60, does not affect hitboxes
    /// @brief GFX to play on destroy.
    enum_t destroy_gfx;
    s32 x68; // 0x68
    s32 x6C; // 0x6c
    s32 x70; // 0x70
    s32 x74; // 0x74
    /// @brief SFX that plays when this item is destroyed
    enum_t destroy_sfx;
    s32 x7C; // 0x7c
    s32 x80; // 0x80
};
struct ItemDynamics {
    /// @todo Combine with ftDynamics? Can see in it_8027163C that this struct
    /// does not work perfectly
    int count;
    BoneDynamicsDesc* dyn_descs;
};
struct ItemStateDesc {
    HSD_AnimJoint* x0_anim_joint;
    HSD_MatAnimJoint* x4_matanim_joint;
    HSD_ShapeAnimJoint* x8_parameters;
    M2C_UNK xC_script;
};
struct ItemStateArray {
    struct ItemStateDesc x0_itemStateDesc[8];
};
struct ItemModelDesc {
    HSD_Joint* x0_joint;
    u32 x4_bone_count;
    s32 x8_bone_attach_id;
    u8 xC_bit_field;
};
// Mirrors HurtCapsule[a_offset..scale] but with a leading bone_id where
// HurtCapsule has its state field. Stored inline in Article::x8_hurtbones,
// then copied into Item::xACC_itemHurtbox by it_8027163C.
typedef struct {
    enum_t bone_id;
    Vec3 a_offset;
    Vec3 b_offset;
    f32 scale;
} ItHurtBoneDesc;
typedef struct {
    s32 count;
    ItHurtBoneDesc* descs;
} ItHurtBoneList;
struct Article {
    ItemAttr* x0_common_attr;
    void* x4_specialAttributes;
    ItHurtBoneList* x8_hurtbones;
    ItemStateArray* xC_itemStates;
    ItemModelDesc* x10_modelDesc;
    ItemDynamics* x14_dynamics;
};
typedef struct it_266F_ItemVars {
    u16 x0;
    u8* x4;
    u16 x8;
    u8* xC;
    s32 x10;
    s32 x14;
    UnkFlagStruct x18;
    struct lbColl_8000A10C_arg0_t x1C;
} it_266F_ItemVars;
struct ItemModStruct {
    GXColor x0_unk;
};
typedef struct ItemHitbox {
    HitCapsule hit; // x5D4, x710, x84C, x988
    u8 x138 : 1; // x70C, x848, x984, xAC0
    u8 x138_b1_7 : 7;
    u8 x139[3];
} ItemHitbox;
struct xB6C_t {
    Vec3 xB6C;
    // u32 xB6C; // struct DynamicsData* for DynamicsDesc->data?
    // u32 xB70; // int for DynamicsDesc->count?
    // u32 xB74; // pos.x?
    f32 xB78; // pos.y? scale?
    HSD_JObj* xB7C; // HSD_JObj* for bone?
    u32 xB80;
    Vec3 xB84;
    // u32 xB88;
    // u32 xB8C;
    u32 xB90; // enum_t for BoneDynamicsDesc->bone_id?
};
struct Item {
    void* x0;
    HSD_GObj* entity;
    s32 x8;
    enum_t spawn_kind;
    ItemKind kind;
    enum_t hold_kind;
    s32 x18;
    s32 x1C;
    u8 x20_team_id;
    u8 x21;
    u8 x22;
    u8 x23;
    enum_t msid;
    enum_t anim_id;
    f32 facing_dir;
    f32 init_facing_dir;
    f32 spin_spd;
    f32 scl;
    f32 x3C;
    Vec3 x40_vel;
    Vec3 pos;
    Vec3 x58_vec_unk;
    Vec3 x64_vec_unk2;
    Vec3 x70_nudge;
    Vec3 x7C;
    Vec3 x88; // From it_80277040
    Vec3 x94; // From it_80277040
    Vec3 xA0; // From it_802734B4
    Vec3 xAC_unk; // From it_80276CEC
    ItemLogicTable* xB8_itemLogicTable; // Global item callbacks
    ItemStateTable* xBC_itemStateContainer;
    GroundOrAir ground_or_air;
    Article* xC4_article_data;
    HSD_Joint* xC8_joint;
    ItemAttr* xCC_item_attr;
    ItemStateDesc* xD0_itemStateDesc;
    Item_DynamicBones xD4_dynamicBones[24];
    s32 x374_dynamicBonesNum;
    /*  ip+378 */ CollData x378_itemColl;
    s32 ecb_lock;
    /// @brief Item's current owner
    HSD_GObj* owner;
    HSD_GObj* x51C; // Related to the owner gobj
    CmSubject* x520_cameraBox; // CmSubject
    CommandInfo x524_cmd; // should this be CommandInfo* instead?
                               // f32 x528;
                               // void* x52C_item_script; // Script parse?
                               // u32 x530;
                               // u32 x534;
                               // u32 x538;
                               // u32 x53C;
                               // u32 x540;
                               // u32 x544;
    ColorOverlay x548_colorOverlay;
    u8 x5C8;
    u8 x5C9; // used heavily in it_80278108
    u8 x5CA;
    u8 x5CB;
    f32 x5CC_currentAnimFrame;
    f32 x5D0_animFrameSpeed;
    ItemHitbox x5D4_hitboxes[4];
    u32 xAC4_ignoreItemID; // Cannot hit items with this index?
    u8 xAC8_hurtboxNum; // Number of hurtboxes this item has
    HurtCapsule xACC_itemHurtbox[2]; // xACC, xB10
    struct lb_80014638_arg1_t xB54;
    u8 xB68; // int for ItemDynamics->count?
    u8 xB69;
    u8 xB6A;
    u8 xB6B;
    struct xB6C_t xB6C_vars[2];
    // u32 xB94;
    // u32 xB98;
    // u32 xB9C;
    // u32 xBA0;
    // u32 xBA4;
    // u32 xBA8;
    // u32 xBAC;
    // u32 xBB0;
    // u32 xBB4;
    // u32 xBB8;
    DynamicBoneTable* xBBC_dynamicBoneTable;
    EF_QueuedEffect* xBC0;
    GXColor xBC4;
    ItemModStruct xBC8;
    Vec2 xBCC_unk;
    Vec2 xBD4_grabRange;
    itECB xBDC;
    itECB xBEC;
    itECB xBFC;
    itECB xC0C;
    itECB xC1C;
    s32 xC2C;
    s32 xC30;
    s32 xC34_damageDealt; // Rounded down
    s32 xC38; // 0xc38 - ItemKind?
    f32 xC3C; // 0xc3c
    f32 xC40; // 0xc40
    f32 xC44; // 0xc44
    s32 xC48; // 0xc48
    s32 xC4C; // Something to do with damage. 0x80077464 checks this against
               // reflectors' maximum damage threshold
    s32 xC50; // 0xc50
    f32 xC54; // 0xc54
    Vec3 xC58; // 0xc58
    HSD_GObj* xC64_reflectGObj; // GObj that reflected this item?
    f32 xC68; // 0xc68
    f32 xC6C; // 0xc6c
    f32 xC70; // 0xc70
    s32 xC74;
    S32Vec2 xC78; // 0xc78
    struct Struct207C xC80; // 0xc80
    s32 xC88; // 0xc88
    u16 xC8C; // 0xc8c
    HSD_GObj* xC90_absorbGObj; // 0xc90
    s32 xC94; // 0xc94
    f32 xC98; // 0xc98
    s32 xC9C; // Total damage taken?
    s32 xCA0; // Last amount of damage taken?
    s32 xCA4; // 0xca4
    s32 xCA8; // 0xca8, hitlag related
    s32 xCAC_angle; // 0xcac
    s32 xCB0_source_ply; // 0xcb0, damage source ply number
    s32 xCB4; // 0xcb4
    f32 xCB8_outDamageDirection; // 0xcb8, updated @ 80078184
    f32 xCBC_hitlagFrames; // 0xcbc, hitlag frames remaining
    f32 xCC0; // 0xcc0
    s32 xCC4; // 0xcc4, switch statement for this in it_8027CBFC
    f32 xCC8_knockback; // 0xcc8
    f32 xCCC_incDamageDirection; // Direction from which damage was applied?
    f32 xCD0; // 0xcd0
    Vec3 xCD4; // 0xcd4
    Vec3 xCE0; // 0xce0
    HSD_GObj* xCEC_fighterGObj; // 0xcec
    HSD_GObj* xCF0_itemGObj; // 0xcf0, is a fp GObj, but is the owner of the
    HSD_GObj* xCF4_fighterGObjUnk;
    /// @brief The entity that was detected by this item's inert hitbox.
    HSD_GObj* toucher;
    HSD_GObj* xCFC;
    /// @brief The entity that got grabbed by this item.
    HSD_GObj* grab_victim;
    /// @brief The entity that collided with this item's hitbox?
    HSD_GObj* atk_victim;
    u8 xD08;
    u8 xD09;
    u8 xD0A;
    u8 xD0B;
    enum_t xD0C;
    f32 xD10;
    HSD_GObjPredicate animated;
    HSD_GObjEvent physics_updated;
    HSD_GObjPredicate collided;
    /// @todo What does this mean?
    HSD_GObjEvent on_accessory;
    /// @brief Runs when an entity is detected by this item's inert hibox.
    HSD_GObjPredicate touched;
    /// @brief Runs after applying hitlag in damage.
    /// @todo What function is @c 8026a62c?
    HSD_GObjEvent entered_hitlag;
    // 0xd2c, runs after exiting hitlag in hitlag, update proc 8026a200
    HSD_GObjEvent exited_hitlag;
    /// @brief Runs when the item is jumped on.
    /// @todo What function is @c 80269bac?
    HSD_GObjPredicate jumped_on;
    /// @brief When grabbing a fighter, run this function on self.
    HSD_GObjEvent grab_dealt;
    /**
     * @brief When grabbing a fighter, run this function on them.
     *
     * @p gobj0 - The victim of the grab. \n
     * @p gobj1 - This item's entity.
     */
    HSD_GObjInteraction grabbed_for_victim;
    f32 xD3C_spinSpeed;
    f32 xD40;
    f32 xD44_lifeTimer;
    f32 xD48_halfLifeTimer; // Not radioactive, just the item's original
                            // lifetime halved
    int xD4C; // Number of ammo remaining (Checked by shootable items in
              // it_8026B594)
    u32 xD50_landNum; // Number of times this item has landed
    u32 xD54_throwNum; // Number of times this item has been thrown
    u32 xD58;
    u32 xD5C;
    enum_t destroy_type;
    enum_t sfx_unk1;
    enum_t sfx_unk2;
    s32 xD6C;
    s32 xD70;
    s32 xD74;
    s32 xD78;
    /// @brief SFX that plays when this item is destroyed
    enum_t destroy_sfx;
    s32 xD80;
    s32 xD84;
    s32 xD88_attackID;
    u16 xD8C_attack_instance;
    s16 xD8E;
    union Struct2070 xD90; // some bit struct/union
    S32Vec2 xD94;
    struct Struct207C xD9C;
    u32 xDA4_word;
    u16 xDA8_short;
    union {
        UnkFlagStruct xDAA_flag; // Develop mode stuff?
        u8 xDAA_byte;
    };
    u32 xDAC_itcmd_var0;
    u32 xDB0_itcmd_var1;
    u32 xDB4_itcmd_var2;
    u32 xDB8_itcmd_var3;
    union {
        flag32 xDBC_itcmd_var4;
        u32 xDBC_itcmd_var4_word;
    };
    u32 xDC0;
    u32 xDC4;
    flag32 xDC8_word;
    struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4567 : 4;
    } xDCC_flag;
    CameraBoxFlags xDCD_flag;
    UnkFlagStruct xDCE_flag;
    UnkFlagStruct xDCF_flag;
    UnkFlagStruct xDD0_flag;
    UnkFlagStruct xDD1_flag;
    UnkFlagStruct xDD2_flag;
    UnkFlagStruct xDD3_flag;
    union Item_ItemVars {
        it_266F_ItemVars it_266F;
        it_2E5A_ItemVars it_2E5A;
        itArwingLaser_ItemVars arwinglaser;
        itBombHei_ItemVars bombhei;
        itBox_ItemVars box;
        itCapsule_ItemVars capsule;
        itChicorita_ItemVars chicorita;
        itClimbersBlizzard_ItemVars climbersblizzard;
        itClimbersIce_ItemVars climbersice;
        itClimbersString_ItemVars climbersstring;
        itCLinkMilk_ItemVars clinkmilk;
        itCoin_ItemVars coin;
        itDosei_ItemVars dosei;
        itDrMarioPill_ItemVars drmariopill;
        itEgg_ItemVars egg;
        itEvYoshiEgg_ItemVars evyoshiegg;
        itFFlower_ItemVars fflower;
        itFFlowerFlame_ItemVars fflowerflame;
        itFlipper_ItemVars flipper;
        itFoods_ItemVars foods;
        itFoxBlaster_ItemVars foxblaster;
        itFoxIllusion_ItemVars foxillusion;
        itFoxLaser_ItemVars foxlaser;
        itFreeze_ItemVars freeze;
        itFreezer_ItemVars freezer;
        itFushigibana_ItemVars fushigibana;
        itGamewatch_ItemVars gamewatch;
        itGamewatchchef_ItemVars gamewatchchef;
        itGamewatchrescue_ItemVars gamewatchrescue;
        itGreatFoxLaser_ItemVars greatfoxlaser;
        itGShell_ItemVars gshell, zgshell, zrshell;
        itHassam_ItemVars hassam;
        itHeart_ItemVars heart;
        itHeiho_ItemVars heiho;
        itHinoarashi_ItemVars hinoarashi;
        itHitodeman_ItemVars hitodeman;
        itHouou_ItemVars houou;
        itKabigon_ItemVars kabigon;
        itKinoko_ItemVars kinoko;
        itKirby2F23_ItemVars kirby2f23;
        itKirbyCutterBeam_ItemVars kirbycutterbeam;
        itKirbyHammer_ItemVars kirbyhammer;
        itkireihana_ItemVars kireihana;
        itKlap_ItemVars klap;
        itKoopaFlame_ItemVars koopaflame;
        itKusudama_ItemVars kusudama;
        itKyasarin_ItemVars kyasarin;
        itKyasarinEgg_ItemVars kyasarinEgg;
        itLeadead_ItemVars leadead;
        itLGun_ItemVars lgun;
        itLGunBeam_ItemVars lgunbeam;
        itLGunRay_ItemVars lgunray;
        itRay_ItemVars ray;
        itLikelike_ItemVars likelike;
        itLinkArrow_ItemVars linkarrow;
        itLinkBomb_ItemVars linkbomb;
        itLinkBoomerang_ItemVars linkboomerang;
        itLinkBow_ItemVars linkbow;
        itLinkHookshot_ItemVars linkhookshot;
        itLipstickSpore_ItemVars lipstickspore;
        itLizardon_ItemVars lizardon;
        itLucky_ItemVars lucky;
        itLugia_ItemVars lugia;
        itMaril_ItemVars maril;
        itMasterHandBullet_ItemVars masterhandbullet;
        itMasterHandLaser_ItemVars masterhandlaser;
        itMatadogas_ItemVars matadogas;
        itMato_ItemVars mato;
        itMBall_ItemVars mball;
        itMDisable_ItemVars mdisable;
        itMewtwoShadowball_ItemVars mewtwoshadowball;
        itMsBomb_ItemVars msbomb;
        itNessbat_ItemVars nessbat;
        itNesspkthundertrail_ItemVars nesspkthundertrail;
        itNessYoyo_ItemVars nessyoyo;
        itNokoNoko_ItemVars nokonoko;
        itOctarock_ItemVars octarock;
        itOldkuri_ItemVars oldkuri;
        itOldottosea_ItemVars oldottosea;
        itPatapata_ItemVars patapata;
        itPeachTurnip_ItemVars peachturnip;
        itPikachuthunder_ItemVars pikachuthunder;
        itPikachutJoltAir_ItemVars pikachujoltair;
        itPikachutJoltGround_ItemVars pikachujoltground;
        itPKFlush_ItemVars pkflush;
        itPKFlushExplode_ItemVars pkflushexplode;
        itPKThunder_ItemVars pkthunder;
        itPokemon_ItemVars pokemon;
        itPokemonSpawn_ItemVars pokemon_spawn;
        itRShell_ItemVars rshell;
        itSamusBomb_ItemVars samusbomb;
        itSamusChargeshot_ItemVars samuschargeshot;
        itSamusGrapple_ItemVars samusgrapple;
        itSamusMissile_ItemVars samusmissile;
        itScopeBeam_ItemVars scopebeam;
        itSeakChain_ItemVars seakchain;
        itSeakNeedleHeld_ItemVars seakneedleheld;
        itSeakNeedleThrown_ItemVars seakneedlethrown;
        itSonans_ItemVars sonans;
        itStar_ItemVars star;
        itStarRodStar_ItemVars starrodstar;
        itSword_ItemVars sword;
        itTaru_ItemVars taru;
        itTarucann_ItemVars tarucann;
        itThunder_ItemVars thunder;
        itTincle_ItemVars tincle;
        itTomato_ItemVars tomato;
        itTools_ItemVars tools;
        itTosakinto_ItemVars tosakinto;
        itUnk2_ItemVars unk2;
        itUnk4_ItemVars unk4;
        itUnknown_ItemVars unknown;
        itWhispyApple_ItemVars whispyapple;
        itWhiteBea_ItemVars whitebea;
        itWstar_ItemVars wstar;
        itYaku_ItemVars yaku;
        itYoshiEggLay_ItemVars yoshiegglay;
        itZako_ItemVars zako;
        itZeldaDinFire_ItemVars zeldadinfire;
        itZeldaDinFireExplode_ItemVars zeldadinfireexplode;
        u8 _[0xFCC - 0xDD4];
    } xDD4_itemVar;
};
;
struct sdata_ItemGXLink {
    GObj_RenderFunc x0_renderFunc;
};
struct r13_ItemTable {
    s32 filler;
    Article* x0_article[0x9F];
};
struct BobOmbRain {
    HSD_GObj* x0;
    HSD_JObj* x4;
    Vec3 x8_vec;
    enum_t x14;
    s32 x18;
    UnkFlagStruct x1C;
};
struct SpawnItem {
    /*  +0 */ HSD_GObj* x0_parent_gobj;
    /*  +4 */ HSD_GObj* x4_parent_gobj2;
    /*  +8 */ ItemKind kind;
    /// @brief Defines the behavior of the item, such as thrown and pickup.
    /// @todo 0 = capsule.
    /*  +C */ enum_t hold_kind;
    /* +10 */ s32 x10;
    /* +14 */ Vec3 pos;
    /* +20 */ Vec3 prev_pos;
    /* +2C */ Vec3 vel;
    /* +38 */ f32 facing_dir;
    /* +3C */ s16 x3C_damage;
    /* +3E */ s16 x3E;
    /* +40 */ s32 x40;
    /* +44 */ UnkFlagStruct x44_flag;
    /* +45 */ UnkFlagStruct x45_flag;
    /* +46 */ UnkFlagStruct x46_flag;
    /* +47 */ UnkFlagStruct x47_flag;
    /* +48 */ GroundOrAir x48_ground_or_air;
};
struct ItemCommonData {
    s32 x0;
    u32 x4;
    u32 x8;
    u32 xC;
    u32 x10;
    s32 x14;
    u32 x18;
    u32 x1C;
    u32 x20;
    u32 x24;
    u32 x28;
    u32 x2C;
    u32 x30_lifetime;
    u32 x34;
    u32 x38_float;
    s32 x3C_float;
    s32 x40_float;
    s32 x44_float;
    u8 x48_byte;
    f32 x4C_float;
    s32 x50_float;
    f32 x54_float;
    f32 x58_float;
    f32 x5C_float;
    f32 x60_float;
    s32 x64_float;
    f32 x68_float;
    f32 x6C_float;
    f32 x70_float;
    f32 x74_float;
    f32 x78_float;
    f32 x7C_float;
    f32 x80_float[13];
    s32 xB4;
    f32 xB8;
    f32 xBC;
    f32 xC0;
    f32 xC4;
    f32 xC8;
    f32 xCC;
    f32 xD0;
    f32 xD4;
    u32 xD8;
    s32 xDC;
    f32 unk_degrees;
    u8 filler_1a[0xE8 - 0xE4];
    f32 xE8;
    u8 filler_1a_2[0xF0 - 0xEC];
    f32 xF0;
    f32 xF4;
    f32 xF8;
    s32 xFC[(0x124 - 0xFC) / 4];
    s32 x124; // max value for a random integer generation in it_8026F6BC
    s32 x128[4]; // monster item counts for it_8026CF04
    // u8 filler_2[0x148 - 0x138]; - replaced with vars that are used for
    // calc's in it_8026F8B4
    s32 x138;
    s32 x13C;
    s32 x140;
    f32 x144;
    s32 x148;
    f32 x14C;
    f32 x150;
    f32 x154;
    f32 x158;
    f32 x15C;
};
struct Item_r13_Data {
    ItemCommonData* item_common;
    void** common_items;
    void** adventure_items;
    void** pokeball_items;
    s32 x10;
    s32 x14;
};
// Per-fighter ECB/position record. Populated by ftCo_80098634 (one entry per
// fighter); read by it_80271B60 to detect item/fighter ECB overlap.
struct Item_FtTrack {
    itECB ecb_offset_arr[11];
    s32 xB0;
    s32 xB4;
    s32 xB8;
    s32 xBC;
    Vec3 ft_pos_arr[11];
    u32 x144;
    u32 x148;
    u32 x14C;
    size_t count;
    UnkFlagStruct x154;
};
struct x1C_struct {
    s32 x1C;
};
struct HSD_ObjAllocUnk {
    s32 x0;
    s32 x4;
    s32 x8;
    s32 xC;
    s32 x10;
    s32 x14;
    u32 x18;
    s32 x1C;
    s32 x20;
    s32 x24;
    s32 x28;
    s32 x2C; // u32 or s32?
    s32 x30; // u32 or s32?
    s32 x34;
    s32 x38;
    s32 x3C;
    s32 x40;
    s32 x44;
    s32 x48;
    s32 x4C;
    s32 x50;
    s32 x54;
    s32 x58;
    s32 x5C;
    s32 x60; // u32 or s32?
    s32 x64; // u32 or s32?
};
// Weighted random pick table for item selection. Holds N parallel entries:
//
//   x4[i] is the ItemKind of entry i.
//   xC[i] is the cumulative weight threshold of entry i (sum of weights of
//         entries 0..i-1; xC[0] == 0).
//   x8    is the total weight (== xC[N], implicit; xC[N] is not stored).
//
// To pick an item, draw r in [0, x8) and binary-search xC for the largest i
// with xC[i] <= r; entry i is the chosen item.
//
// Allocated by HSD_MemAlloc with size N*4 (so xC has 2*N u16 slots, but only
// the first N are populated; the rest are unused over-allocation).
//
// Built by it_8026CA4C / it_8026CB9C / it_8026CD50 / it_8026CF04;
// queried by it_8026C75C
struct ItemPickTable {
    u8 size; // entry count N (incremented/decremented as items get
             // added/picked)
    u8* x4; // ItemKind values, length N
    u16 x8; // total weight, used as the upper bound of HSD_Randi
    u16* xC; // cumulative weight thresholds, length N
};
// State for the periodic ambient item-spawn system. fn_8026C88C runs each
// frame: decrements x0; when it reaches 0, picks an item from x4 and tries to
// spawn it, then resets x0 to a fresh random duration scaled by stage
// parameters. Initialized in it_8026D018; queried by it_8026D324 to gate
// individual kinds.
struct RandomItemSpawner {
    s32 x0; // spawn countdown (frames until next spawn attempt)
    ItemPickTable x4; // weighted pick table, built from x18 + stage weights
    s32 x14; // unused
    u64 x18; // stage's allowed-items bitmask, from gm_8016AEA4()
};
struct HSD_ObjAllocUnk5 {
    u8 x0;
    u32 x4;
    u16 x8;
    u16 xA;
    u16 xC;
};
// Each entry records a single damage hit; x0 selects which member of x4 is
// valid (1 = fighter, 2 = item).
typedef struct DamageLogEntry {
    s32 x0;
    void* x4;
    HitCapsule* x8;
    HurtCapsule* xC;
} DamageLogEntry;
struct it_8026C47C_arg0_t {
    s32 unk0;
    s32 unk4;
    s32 unk8;
    s32 unkC;
    s32 unk10;
    s32 unk14;
    s32 unk18;
    s32 unk1C;
};
struct it_8026F3D4_arg1_t {
    bool x0;
    ItemKind x4;
    Item_GObj* x8;
};
struct lb_80014638_arg1_t;
/* 272560 */ void it_80272560(Item_GObj*, s32);
/* 2725D4 */ void it_802725D4(Item_GObj*);
/* 272674 */ void it_80272674(Item_GObj*, s32);
/* 272784 */ void it_80272784(Item_GObj*);
/* 272818 */ Fighter* it_80272818(Item*);
/* 272828 */ Item_GObj* it_80272828(ItemKind);
/* 272860 */ void it_80272860(Item_GObj*, f32, f32);
/* 2728C8 */ void it_802728C8(Item_GObj*);
/* 272940 */ void it_80272940(Item_GObj*);
/* 272980 */ void it_80272980(Item_GObj*);
/* 272A18 */ void it_80272A18(HSD_JObj* item_jobj);
/* 272A3C */ void it_80272A3C(HSD_JObj* item_jobj);
/* 272A60 */ void it_80272A60(Item_GObj*);
/* 272AC4 */ void it_80272AC4(Item_GObj*, Vec3*);
/* 272B40 */ void it_80272B40(Item_GObj*);
/* 272BA4 */ void it_80272BA4(Item_GObj*);
/* 272C08 */ void it_80272C08(Item_GObj*);
/* 272C6C */ bool it_80272C6C(Item_GObj*);
/* 272C90 */ HSD_JObj* it_80272C90(Item_GObj*);
/* 272CC0 */ HSD_JObj* it_80272CC0(Item_GObj*, enum_t);
/// Check if GObj is Item class
/* 272D1C */ bool it_80272D1C(Item_GObj*);
/// Check GObj entity class
/* 272D40 */ s32 it_80272D40(Item_GObj*);
/* 272DB0 */ void itColl_BounceOffVictim(Item_GObj*);
/* 272DE4 */ void it_80272DE4(HSD_JObj*, f32);
/* 272F7C */ void it_80272F7C(HSD_JObj*, f32);
/* 273030 */ bool it_80273030(Item_GObj*);
/* 273078 */ bool itColl_BounceOffShield(Item_GObj*);
/* 273130 */ bool it_80273130(Item_GObj*);
/* 273168 */ void it_80273168(Item_GObj*);
/* 2731A4 */ void it_802731A4(Item_GObj*);
/* 2731E0 */ void it_802731E0(Item_GObj*);
/* 27321C */ void it_8027321C(Item_GObj*);
/* 27327C */ void it_8027327C(Item_GObj*, enum_t ID1, enum_t ID2);
/* 2732E4 */ void it_802732E4(Item*, s32);
/* 273318 */ void it_80273318(Item_GObj*, HSD_Joint*);
/* 273408 */ void it_80273408(Item_GObj*);
/* 273454 */ void it_80273454(Item_GObj*);
/* 27346C */ void it_8027346C(Item_GObj*);
/* 273484 */ void it_80273484(Item_GObj*);
/* 27349C */ void it_8027349C(Item_GObj*);
/* 2734B4 */ void it_802734B4(Item_GObj*);
/* 273500 */ void it_80273500(Item_GObj*, Vec3*);
/* 273598 */ void it_80273598(Item_GObj*, s32, s32);
/* 273600 */ void it_80273600(Item_GObj*);
/* 273648 */ void it_80273648(Item_GObj*, s32, s32);
/* 273670 */ void it_80273670(Item_GObj*, int, float);
/* 273748 */ void it_80273748(Item_GObj*, Vec3*, Vec3*);
/* 273B50 */ void it_80273B50(Item_GObj*, Vec3*);
/* 273F34 */ void it_80273F34(Item_GObj*, HSD_GObj*);
/* 274198 */ void it_80274198(Item_GObj*, bool);
/* 2741F4 */ void it_802741F4(Item_GObj*, bool);
/* 274250 */ void it_80274250(Item_GObj*, Vec3*);
/* 27429C */ void it_8027429C(Item_GObj*, Vec3*);
/* 2742F4 */ void it_802742F4(Item_GObj*, HSD_GObj*, Fighter_Part);
/* 274484 */ void it_80274484(Item_GObj*, HSD_JObj*, f32);
/* 274574 */ void it_80274574(Item_GObj*);
/* 274594 */ void it_80274594(Item_GObj*);
/* 274658 */ int it_80274658(Item_GObj*, f32);
/* 2746F8 */ HSD_JObj* it_802746F8(Item_GObj*);
/* 274740 */ void it_80274740(Item_GObj*);
/* 274990 */ f32 it_80274990(Item_GObj*);
/* 274A64 */ void it_80274A64(Item_GObj*);
/* 274C60 */ void it_80274C60(Item_GObj*);
/* 274C78 */ bool it_80274C78(Item_GObj*);
/* 274C88 */ void it_80274C88(Item_GObj*);
/* 274CAC */ void it_80274CAC(Item_GObj*);
/* 274D04 */ void it_80274D04(Item_GObj*, struct lb_80014638_arg1_t*);
/* 274D6C */ void it_80274D6C(Item_GObj*);
/* 274DAC */ void it_80274DAC(Item_GObj*);
/* 274DFC */ void it_80274DFC(Item_GObj*);
/* 274E44 */ void it_80274E44(Item_GObj*);
/* 274ECC */ void it_80274ECC(Item_GObj*, bool);
/* 274ED8 */ void it_80274ED8(void);
/* 274EE8 */ void it_80274EE8(void);
/// Toggle flag in 0xDC8 off
/* 274EF8 */ void it_80274EF8(Item_GObj*);
/* 274F10 */ void it_80274F10(Item_GObj*);
/* 274F28 */ void it_80274F28(Item*, s8, HSD_GObjEvent, HSD_GObjInteraction);
/* 274F48 */ void it_80274F48(Item_GObj*, s32, HSD_GObj*, Fighter_Part);
/* 274FDC */ void it_80274FDC(Item_GObj*, s32, Fighter_GObj*, Fighter_Part);
/* 275070 */ void it_80275070(Item_GObj*, s32);
/* 2750E8 */ bool it_802750E8(Item_GObj*, s32);
/* 2750F8 */ void it_802750F8(Item_GObj*);
/// Set item lifetime
/* 275158 */ void it_80275158(Item_GObj*, f32);
/* 275174 */ void it_80275174(Item_GObj*, f32);
/* 27518C */ void it_8027518C(Item_GObj*);
/* 2751D8 */ bool it_802751D8(Item_GObj*);
/* 275210 */ void it_80275210(Item_GObj*);
/* 275228 */ void it_80275228(Item_GObj*);
/* 275240 */ void it_80275240(Item_GObj*);
/* 275258 */ void it_80275258(Item_GObj*);
/* 275270 */ void it_80275270(Item_GObj*);
/* 275288 */ void it_80275288(Item_GObj*, s32, s32);
/* 2752D8 */ void it_802752D8(Item_GObj*, s32, s32);
/* 275328 */ void it_80275328(HSD_GObj*, ItemLink*);
/* 275390 */ void it_80275390(Item_GObj*);
/* 2753BC */ void it_802753BC(Item_GObj*, s16);
#define GALE01_IT_3F14
typedef struct it_804D6D40_t {
    /* 0x00 */ s32 x0;
    /* 0x04 */ f32 x4;
    /* 0x08 */ f32 x8;
    /* 0x0C */ f32 xC;
    /* 0x10 */ f32 x10;
    /* 0x14 */ f32 x14;
    /* 0x18 */ f32 x18;
} it_804D6D40_t;
typedef struct it_804D6D20_t {
    ItemCommonData* x0;
    Article** x4;
    Article** x8;
    Article** xC;
    it_804D6D40_t* x10;
    Fighter_804D653C_t* x14;
} it_804D6D20_t;
/* 3F1418 */ extern struct sdata_ItemGXLink it_803F1418[43];
/* 3F14C4 */ extern struct ItemLogicTable it_803F14C4[43];
/* 3F1ED8 */ extern char it_803F1ED8[];
/* 3F1EE4 */ extern char it_803F1EE4[];
/* 3F1EF0 */ extern char it_803F1EF0[];
/* 4A0E30 */ extern RandomItemSpawner it_804A0E30;
/* 4A0E50 */ extern ItemPickTable it_804A0E50;
/* 4A0E60 */ extern ItemPickTable it_804A0E60;
/* 4A0E70 */ extern DamageLogEntry it_804A0E70[15];
/* 4A0F60 */ extern Article* it_804A0F60[30];
/* 4D6D00 */ extern s8 it_804D6D00;
/* 4D6D04 */ extern Fighter_804D653C_t* it_804D6D04;
/* 4D6D08 */ extern s32 it_804D6D08;
/* 4D6D0C */ extern s32 it_804D6D0C;
/* 4D6D10 */ extern u32 it_804D6D10;
/**
 * @todo Probably #size_t but that needs to be changed to
 *       <tt>unsigned int</tt> first.
 */
/* 4D6D14 */ extern u32 it_804D6D14;
/* 4D6D18 */ extern u32 it_804D6D18;
/* 4D6D1C */ extern u8 it_804D6D1C[4];
/* 4D6D20 */ extern it_804D6D20_t* it_804D6D20;
/// Pointer to array of Article*
/* 4D6D24 */ extern Article** it_804D6D24;
/* 4D6D28 */ extern ItemCommonData* it_804D6D28;
/* 4D6D30 */ extern Article** it_804D6D30;
/* 4D6D38 */ extern Article** it_804D6D38;
/* 4D6D40 */ extern it_804D6D40_t* it_804D6D40;
#define GALE01_266F3C
struct ItemStateDesc;
/// Checks if items are enabled
/* 266F3C */ bool Item_80266F3C(void);
/// Check to load ItCo.dat/usd
/* 266F70 */ void Item_80266F70(void);
/// ItCo prefunction with 0
/* 266FA8 */ void Item_80266FA8(void);
/// Init item struct?
/* 266FCC */ void Item_80266FCC(void);
/// Remove Camera Box
/* 267454 */ void Item_80267454(HSD_GObj* gobj);
/// Store Item Pointers
/* 267978 */ void Item_80267978(HSD_GObj* gobj);
/// Setup Item JObj
/* 2680CC */ void Item_802680CC(HSD_GObj* gobj);
/// Set item model scale
/* 26849C */ void Item_8026849C(HSD_GObj* gobj);
/// Item spawn prefunction - spawn airborne
/* 268B18 */ Item_GObj* Item_80268B18(SpawnItem* spawnItem);
/// Item spawn prefunction - spawn grounded
/* 268B5C */ Item_GObj* Item_80268B5C(SpawnItem* spawnItem);
/// Item spawn prefunction - spawn grounded and toggle unknown true
/* 268B9C */ void Item_80268B9C(SpawnItem* spawnItem);
/// Unk Item AObj-related function
/* 268D34 */ void Item_80268D34(HSD_GObj* gobj,
                                struct ItemStateDesc* itemStateDesc);
/// Advance item animation?
/* 268DD4 */ void Item_80268DD4(HSD_GObj* gobj, float);
/// Copy item script
/* 268E40 */ void Item_80268E40(Item* item_data,
                                struct ItemStateDesc* itemStateDesc);
/// Item State Change
/* 268E5C */ void Item_80268E5C(HSD_GObj* gobj, enum_t msid,
                                Item_StateChangeFlags flags);
/* 2693E4 */ void Item_802693E4(HSD_GObj* gobj);
/// Advance item animation + script?
/* 2694CC */ void Item_802694CC(HSD_GObj* gobj);
/// Item Think - Physics
/* 2697D4 */ void Item_802697D4(HSD_GObj* gobj);
/// Item Think - Collision
/* 269978 */ void Item_80269978(HSD_GObj* gobj);
/// Set damage taken
/* 269CA0 */ void Item_80269CA0(Item* item_data, s32 damage);
/// Remove Item from Player
/* 26A848 */ void Item_8026A848(HSD_GObj* gobj, HSD_GObj* fgobj);
/// Destroy Item
/* 26A8EC */ void Item_8026A8EC(Item_GObj* gobj);
/// Make Item Held
/* 26AB54 */ void Item_8026AB54(HSD_GObj* gobj, HSD_GObj* owner_gobj,
                                Fighter_Part part);
/// Drop Item
/* 26ABD8 */ void Item_8026ABD8(Item_GObj* gobj, Vec3* pos, float);
/// This is actually another Item Drop function
/* 26AC74 */ void Item_8026AC74(HSD_GObj* gobj, Vec3*, Vec3*, float);
/// Throw Item
/* 26AD20 */ void Item_8026AD20(HSD_GObj* gobj, Vec3*, Vec3*, float, bool);
/// Make Item Airborne
/* 26ADC0 */ void Item_8026ADC0(HSD_GObj* gobj);
/* 26AE10 */ void Item_OnUserDataRemove(void* user_data);
/// Clear Item Struct ?
/* 26AE10 */ void lbl_8026AE10(void* user_data);
/* 26AE60 */ u32 Item_8026AE60(void);
/// Play Item SFX
/* 26AE84 */ void Item_8026AE84(Item* item_data, enum_t sfx, u8 pan,
                                u8 volume);
/// Play Item SFX 2
/* 26AF0C */ void Item_8026AF0C(Item* item_data, enum_t sfx, u8 pan,
                                u8 volume);
/// Play Item SFX 3
/* 26AFA0 */ void Item_8026AFA0(Item* item_data, enum_t sfx, u8 pan,
                                u8 volume);
/// Stop Item SFX
/* 26B034 */ void Item_8026B034(Item* item_data);
/// Stop Item SFX 2
/* 26B074 */ void Item_8026B074(Item* item_data);
/// Check if item is grabbable
/* 26B1A4 */ bool Item_IsGrabbable(Item_GObj* gobj);
/* 4A0C38 */ extern HSD_ObjAllocData item_link_alloc_data;
/* 4A0C64 */ extern HSD_ObjAllocUnk Item_804A0C64;
/* 4A0CCC */ extern Item_FtTrack Item_804A0CCC;
/* 4A0E24 */ extern PokemonSelectionState Item_804A0E24;
#define GALE01_ITMAPLIB
/* 2759DC */ void it_802759DC(Item_GObj*, Item_GObj*);
/* 275BC8 */ void it_80275BC8(Item_GObj*, HSD_GObj*);
/* 275D5C */ void it_80275D5C(Item_GObj*, itECB*);
/* 275DFC */ void it_80275DFC(Item_GObj*);
/* 275E98 */ void it_80275E98(Item_GObj*, SpawnItem*);
/* 276100 */ void it_80276100(Item_GObj*, Vec3*);
/* 276174 */ void it_80276174(Item_GObj*, Vec3*);
/* 276214 */ void it_80276214(Item_GObj*);
/* 276278 */ void it_80276278(Item_GObj*);
/* 2762B0 */ void it_802762B0(Item*);
/* 2762BC */ void it_802762BC(Item*);
/* 2762D8 */ bool it_802762D8(Item_GObj*);
/* 276308 */ s32 it_80276308(Item_GObj*);
/* 276348 */ s32 it_80276348(Item_GObj*, Vec3*);
/* 2763B8 */ bool it_802763B8(Item_GObj*);
/* 2763E0 */ s32 it_802763E0(Item_GObj*);
/* 276408 */ void it_80276408(Item_GObj*, CollData*, Vec3*);
/* 27649C */ f32 it_8027649C(Item_GObj*);
/* 2765BC */ void it_802765BC(Item_GObj*, enum_t);
/* 276934 */ void it_80276934(Item_GObj*, enum_t);
/* 276CB8 */ void it_80276CB8(Item_GObj*);
/* 276CEC */ void it_80276CEC(Item_GObj*);
/* 276D9C */ bool it_80276D9C(Item_GObj*, enum_t);
/* 276FC4 */ void it_80276FC4(Item_GObj*, s32);
/* 277040 */ bool it_80277040(Item_GObj*);
/* 27737C */ void it_8027737C(Item_GObj*, Vec3*);
/* 277544 */ bool it_80277544(Item_GObj*);
/* 2775F0 */ void it_802775F0(Item_GObj*, Vec3*);
/* 27770C */ bool it_8027770C(Item_GObj*);
/* 27781C */ bool it_8027781C(Item_GObj*);
/* 277C40 */ void it_80277C40(Item_GObj*, s32);
/**
 * @file
 * @brief Map library.
 */
#define GALE01_04D164
#define MELEE_MP_TYPES_H
struct mpIsland_80458E88_t {
    /*  +0 */ mp_UnkStruct0* next;
    /*  +4 */ mp_UnkStruct0* x4;
    /*  +8 */ mp_UnkStruct0* x8;
    /*  +C */ mp_UnkStruct0* xC;
    /* +10 */ mp_UnkStruct0* x10;
    /* +14 */ mp_UnkStruct0* x14;
    /* +18 */ mp_UnkStruct0* x18;
    /* +1C */ mp_UnkStruct0* x1C;
    /* +20 */ mp_UnkStruct0* x20;
};
struct mpIsland_PaletteEntry {
    mp_Terrain kind;
    GXColor color;
};
struct mpIsland_Palette {
    mpIsland_PaletteEntry x0[20];
};
struct mp_UnkStruct0 {
    /*  +0 */ mp_UnkStruct0* next;
    /*  +4 */ u16 x4;
    /*  +6 */ u16 x6;
    /*  +8 */ Vec3 x8;
    /* +14 */ Vec3 x14;
    /* +20 */ int x20;
    /* +24 */ s16 x24;
    /* +26 */ s16 x26;
    /* +28 */ s16 x28;
    /* +2A */ s16 x2A;
    /* +2C */ mp_UnkStruct3* ptr;
};
struct MapLine {
    /* +0 */ u16 v0_idx;
    /* +2 */ u16 v1_idx;
    /* +4 */ s16 prev_id0;
    /* +6 */ s16 next_id0;
    /* +8 */ s16 prev_id1;
    /* +A */ s16 next_id1;
    /* +C */ u16 hi_flags;
    /* +E */ u16 lo_flags;
};
struct CollLine {
    /* +0 */ MapLine* x0;
    /* +4 */ u32 flags;
};
struct mpisland {
    /*  +0 */ int x0[8];
    /* +20 */ int x20[8];
};
struct mp_UnkStruct3 {
    int x0;
    int x4;
    int xC;
};
struct CollVtx {
    /* 0x00 */ f32 x0;
    /* 0x04 */ f32 x4;
    /* 0x08 */ Vec2 pos;
    /* 0x10 */ float x10;
    /* 0x14 */ float x14;
}; /* size = 0x18 */
;
enum MapLineGroup {
    MapLineGroup_Floor,
    MapLineGroup_Ceiling,
    MapLineGroup_RightWall,
    MapLineGroup_LeftWall,
    MapLineGroup_Dynamic,
    MapLineGroup_Count,
};
struct MapLineRange {
    s16 start;
    s16 count;
};
struct MapJoint {
    /*  +0 */ struct MapLineRange ranges[MapLineGroup_Count];
    /* +14 */ float left_bound;
    /* +18 */ float bottom_bound;
    /* +1C */ float right_bound;
    /* +20 */ float top_bound;
    /* +24 */ s16 vtx_start;
    /* +26 */ s16 vtx_count;
};
struct CollJoint {
    /* 0x00 */ CollJoint* next;
    /* 0x04 */ MapJoint* inner;
    /* 0x08 */ u32 flags;
    /* 0x0C */ s16 xC;
    /* 0x0E */ u8 xE : 1;
    /* 0x10 */ Vec2 bounding_min;
    /* 0x18 */ Vec2 bounding_max;
    /* 0x20 */ HSD_JObj* x20;
    /* 0x24 */ mpLib_JointCollisionCallback
        cb_0; ///< @todo Possible array here
    /* 0x28 */ Ground* cb_data_0;
    /* 0x2C */ mpLib_JointCollisionCallback cb_1;
    /* 0x30 */ Ground* cb_data_1;
}; /* size = 0x34 */
;
struct MapCollData {
    /*  +0 */ Vec2* verts;
    /*  +4 */ int vert_count;
    /*  +8 */ MapLine* lines;
    /*  +C */ int line_count;
    /* +10 */ struct MapLineRange ranges[MapLineGroup_Count];
    /* +24 */ MapJoint* joints;
    /* +28 */ int joint_count;
    /* +2C */ int x2C; /* inferred */
};
struct mpCollisionBox {
    float top;
    float bottom;
    float left;
    float right;
};
/* 04D164 */ MapCollData* mpLib_8004D164(void);
/* 04D16C */ CollVtx* mpGetGroundCollVtx(void);
/* 04D174 */ CollLine* mpGetGroundCollLine(void);
/* 04D17C */ CollJoint* mpGetGroundCollJoint(void);
/* 04D184 */ void mpPruneEmptyLines(MapCollData* coll_data);
/* 04D288 */ void mpLibLoad(MapCollData* coll_data);
/// @returns A ground index.
/* 04DB78 */ int mpLineGetNext(int line_id);
/* 04DBB4 */ bool mpLib_8004DBB4(int index, Vec3* out);
/// @returns A ground index.
/* 04DC04 */ int mpLineGetPrev(int line_id);
/* 04DD90 */ int mpLib_8004DD90_Floor(int line_id, Vec3*, float* y_out,
                                      u32* flags_out, Vec3* normal_out);
/* 04E090 */ int mpLib_8004E090_Ceiling(int line_id, Vec3*, float* y_out,
                                        u32* flags_out, Vec3* normal_out);
/* 04E398 */ int mpLib_8004E398_LeftWall(int line_id, Vec3*, float* x_out,
                                         u32* flags_out, Vec3* normal_out);
/* 04E684 */ int mpLib_8004E684_RightWall(int line_id, Vec3*, float* x_out,
                                          u32* flags_out, Vec3* normal_out);
/* 04EBF8 */ bool mpLineIntersectionH(float* int_x, float* int_y, float a0x,
                                      float a0y, float a1x, float b0x,
                                      float b0y, float b1x, float b1y);
/* 04ED5C */ void mpLib_8004ED5C(int, float*, float*, float*, float*);
/* 04F008 */ bool mpCheckFloor(float ax, float ay, float bx, float by,
                               float y_offset, Vec3* vec_out, int* line_id_out,
                               u32* flags_out, Vec3* normal_out,
                               int line_id_skip, int joint_id_skip,
                               int joint_id_only, bool (*)(Fighter_GObj*, int),
                               Fighter_GObj*);
/* 04F400 */ bool mpCheckFloorRemap(float ax, float ay, float bx, float by,
                                    float y_offset, Vec3* vec_out,
                                    int* line_id_out, u32* flags_out,
                                    Vec3* normal_out, int line_id_skip,
                                    int joint_id_skip, int joint_id_only,
                                    bool (*)(Fighter_GObj*, int),
                                    Fighter_GObj*);
/* 04F8A4 */ bool mpCheckCeiling(float ax, float ay, float bx, float by,
                                 Vec3* vec_out, int* line_id_out,
                                 u32* flags_out, Vec3* normal_out,
                                 int joint_id_skip, int joint_id_only);
/* 04FC2C */ bool mpCheckCeilingRemap(float ax, float ay, float bx, float by,
                                      Vec3* vec_out, int* line_id_out,
                                      u32* flags_out, Vec3* normal_out,
                                      int joint_id_skip, int joint_id_only);
/* 050068 */ bool mpLineIntersectionV(float* int_x, float* int_y, float a0x,
                                      float a0y, float a1y, float b0x,
                                      float b0y, float b1x, float b1y);
/* 0501CC */ bool mpCheckLeftWall(float ax, float ay, float bx, float by,
                                  Vec3* vec_out, int* line_id_out,
                                  u32* flags_out, Vec3* normal_out,
                                  int joint_id_skip, int joint_id_only);
/* 05057C */ bool mpCheckLeftWallRemap(float ax, float ay, float bx, float by,
                                       Vec3* vec_out, int* line_id_out,
                                       u32* flags_out, Vec3* normal_out,
                                       int joint_id_skip, int joint_id_only);
/* 0509B8 */ bool mpCheckRightWall(float ax, float ay, float bx, float by,
                                   Vec3* vec_out, int* line_id_out,
                                   u32* flags_out, Vec3* normal_out,
                                   int joint_id_skip, int joint_id_only);
/* 050D68 */ bool mpCheckRightWallRemap(float ax, float ay, float bx, float by,
                                        Vec3* vec_out, int* line_id_out,
                                        u32* flags_out, Vec3* normal_out,
                                        int joint_id_skip, int joint_id_only);
/* 0511A4 */ bool mpLib_800511A4_RightWall(float ax, float ay, float bx,
                                           float by, float cx, float cy,
                                           float dx, float dy,
                                           int* line_id_out, int joint_id_skip,
                                           int joint_id_only);
/* 0515A0 */ bool mpLib_800515A0_LeftWall(float a0x, float a0y, float a1x,
                                          float a1y, float b0x, float b0y,
                                          float b1x, float b1y,
                                          int* line_id_out, int joint_id_skip,
                                          int joint_id_only);
/* 05199C */ int mpLib_8005199C_Floor(Vec3*, int joint_id_skip,
                                      int joint_id_only);
/* 051BA8 */ int mpLib_80051BA8_Floor(Vec3* out_vec, int line_id_skip,
                                      int joint_id_skip, int joint_id_only,
                                      int dir, float left, float bottom,
                                      float right, float top);
/* 051EC8 */ bool mpCheckMultiple(float x0, float y0, float x1, float y1,
                                  Vec3* pos_out, int* line_id_out,
                                  u32* flags_out, Vec3* normal_out, u32 checks,
                                  int joint_id_skip, int joint_id_only);
/* 0524DC */ bool mpCheckAllRemap(Vec3* pos_out, int* line_id_out,
                                  u32* flags_out, Vec3* normal_out,
                                  int joint_id_skip, int joint_id_only,
                                  float x0, float y0, float x1, float y1);
/* 052508 */ bool mpCheckAll(Vec3* pos_out, int* line_id_out, u32* flags_out,
                             Vec3* normal_out, int joint_id_skip,
                             int joint_id_only, float x0, float y0, float x1,
                             float y1);
/* 052534 */ int mpLineNextNonFloor(int line_id);
/* 052700 */ int mpLinePrevNonFloor(int line_id);
/* 0528CC */ int mpLinePrevNonCeiling(int line_id);
/* 052A98 */ int mpLineNextNonCeiling(int line_id);
/* 052C64 */ int mpLineNextNonLeftWall(int line_id);
/* 052E30 */ int mpLinePrevNonLeftWall(int line_id);
/* 052FFC */ int mpLinePrevNonRightWall(int line_id);
/* 0531C8 */ int mpLineNextNonRightWall(int line_id);
/* 053394 */ int mpLib_80053394_Floor(int line_id);
/* 053448 */ int mpLib_80053448_Floor(int line_id);
/* 0534FC */ int mpLib_800534FC_Floor(int line_id);
/* 0536CC */ int mpLib_800536CC_Floor(int line_id);
/* 05389C */ int mpLib_8005389C_Ceiling(int line_id);
/* 053950 */ int mpLib_80053950_Ceiling(int line_id);
/* 053A04 */ int mpLib_80053A04_Ceiling(int line_id);
/* 053BD4 */ int mpLib_80053BD4_Ceiling(int line_id);
/* 053DA4 */ void mpLib_80053DA4_Floor(int line_id, Vec3*);
/* 053ECC */ void mpLib_80053ECC_Floor(int line_id, Vec3*);
/* 053FF4 */ void mpFloorGetRight(int line_id, Vec3*);
/* 054158 */ void mpFloorGetLeft(int line_id, Vec3*);
/* 0542BC */ void mpCeilingGetRight(int line_id, Vec3*);
/* 054420 */ void mpCeilingGetLeft(int line_id, Vec3*);
/* 054584 */ void mpLeftWallGetTop(int line_id, Vec3*);
/* 0546E8 */ void mpLeftWallGetBottom(int line_id, Vec3*);
/* 05484C */ void mpRightWallGetTop(int line_id, Vec3*);
/* 0549B0 */ void mpRightWallGetBottom(int line_id, Vec3*);
/* 054B14 */ void mpLineGetV1Pos(int line_id, Vec3* pos_out);
/* 054BC0 */ void mpLineGetV0Pos(int line_id, Vec3* pos_out);
/* 054C6C */ enum_t mpLineGetKind(int line_id);
/* 054CEC */ u32 mpLineGetFlags(int line_id);
/* 054D68 */ void mpLib_80054D68(int line_id, u32 flags);
/* 054DFC */ Vec3* mpLineGetNormal(int line_id, Vec3* normal_out);
/* 054ED8 */ bool mpLib_80054ED8(int line_id);
/* 054F68 */ bool mpLinesConnected(int start_id, int target_id);
/* 0552B0 */ void mpLib_800552B0(int joint_id, HSD_JObj*, int z);
/* 05541C */ void mpJointHide(int joint_id);
/* 0557D0 */ void mpJointUnhide(int joint_id);
/* 055C5C */ void mpJointUpdateDynamics(int joint_id);
/* 055E24 */ void mpLib_80055E24(int joint_id);
/* 055E9C */ void mpLib_80055E9C(int joint_id);
/* 0565DC */ void mpJointUpdateBounding(int joint_id);
/* 05667C */ void mpLib_8005667C(int joint_id);
/* 0566D8 */ void mpVtxGetPos(int vtx_id, float* x_out, float* y_out);
/* 0566F8 */ void mpVtxSetPos(int vtx_id, float x, float y);
/* 056710 */ void mpLineSetPos(int line_id, float x0, float y0, float x1,
                               float y1);
/* 056758 */ void mpLib_80056758(int line_id, float x0, float y0, float x1,
                                 float y1);
/**
 * @param line_id
 * @param pos
 * @param[out] speed
 */
/* 0567C0 */ bool mpGetSpeed(int line_id, Vec3* pos, Vec3* speed);
/* 0569EC */ float mpLib_800569EC(u32);
/* 056A1C */ int* mpLib_80056A1C(int, int*);
/* 056A54 */ int mpLib_80056A54(int, int*);
/* 056A8C */ int* mpLib_80056A8C(int, int*);
/* 056AC4 */ int mpLib_80056AC4(int, int*);
/* 056AFC */ int* mpLib_80056AFC(int, int*);
/* 056B34 */ int mpLib_80056B34(int, int*);
/* 056B6C */ int mpJointFromLine(int line_id);
/* 056C54 */ bool mpLib_80056C54(int line_id, Vec3* pos, int* line_id_out,
                                 Vec3* vec_out, u32* flags_out,
                                 Vec3* normal_out, float, float);
/* 057424 */ void mpLib_80057424(int joint_id);
/* 057528 */ void mpLib_80057528(int line_id);
/* 0575B0 */ void mpLib_800575B0(int line_id);
/* 057638 */ void mpJointListAdd(int joint_id);
/* 057B4C */ void mpJointListUnlink(CollJoint*);
/* 057BC0 */ void mpLib_80057BC0(int joint_id);
/* 057FDC */ void mpLib_80057FDC(int joint_id);
/* 058044 */ void mpLib_80058044(int joint_id);
/* 0580AC */ void mpJointSetB10(int joint_id);
/* 0580C8 */ void mpJointSetCb1(int joint_id, void* user_data,
                                mpLib_JointCollisionCallback cb);
/* 0580E0 */ void mpJointClearCb1(int joint_id);
/* 0580FC */ void mpJointGetCb1(int joint_id, mpLib_JointCollisionCallback* cb,
                                void** user_data);
/* 05811C */ void mpLib_8005811C(CollData*, int ledge_id);
/* 0581A4 */ void mpJointSetCb2(int joint_id, void* user_data,
                                mpLib_JointCollisionCallback cb);
/* 0581BC */ void mpJointGetCb2(int joint_id, mpLib_JointCollisionCallback* cb,
                                void** user_data);
/* 0581DC */ void mpLib_800581DC(int joint_id0, int joint_id1);
/* 058560 */ void mpLib_80058560(void);
/* 058614 */ void mpLib_80058614_Floor(void);
/* 0587FC */ void mpLib_800587FC(HSD_GObj*);
/* 058820 */ void mpLib_80058820(void);
/* 0588C8 */ bool mpCheckedBounding(void);
/* 0588D0 */ void mpBoundingCheck(float left, float bottom, float right,
                                  float top);
/* 058970 */ void mpBoundingCheck2(float x1, float y1, float x2, float y2);
/* 0589D0 */ void mpBoundingCheck3(float x0, float y0, float x1, float y1,
                                   float x2, float y2, float x3, float y3);
/* 058AA0 */ void mpUncheckBounding(void);
/* 058ACC */ void mpLib_SetupDraw(GXColor);
/* 058B5C */ void mpLib_DrawEcbs(CollData*);
/* 0590F4 */ void mpLib_DrawSnapping(void);
/* 059554 */ void mpLib_80059554(void);
/* 059E60 */ void mpLib_80059E60(void);
/* 059FE0 */ void mpLib_DrawCrosses(s16* idx, int len, GXColor);
/* 05A220 */ void mpLib_DrawSpecialPoints(void);
/* 05A2DC */ void mpLib_8005A2DC(void);
/* 05A340 */ void mpLib_DrawZones(void);
/* 458868 */ extern mpCollisionBox mpLib_80458868[2];
#define GET_ITEM(gobj) ((Item*) HSD_GObjGetUserData(gobj))
/// @deprecated Use #GET_ITEM instead.
static inline Item* GetItemData(HSD_GObj* gobj)
{
    Item* item_data = gobj->user_data;
    return item_data;
}
static inline void itResetVelocity(Item* ip)
{
    ip->x40_vel.x = ip->x40_vel.y = ip->x40_vel.z = 0.0F;
}
static inline void Item_ClearCmdVars(Item* ip)
{
    ip->xDB8_itcmd_var3 = 0;
    ip->xDB4_itcmd_var2 = 0;
    ip->xDB0_itcmd_var1 = 0;
    ip->xDAC_itcmd_var0 = 0;
}
static inline void Item_SetEffectHitlagCallbacks(Item* ip)
{
    ip->entered_hitlag = efLib_PauseAll;
    ip->exited_hitlag = efLib_ResumeAll;
}
static inline void Item_EnterStateWithEffectHitlag(Item_GObj* gobj, s32 msid)
{
    Item* ip = ((Item*) HSD_GObjGetUserData(gobj));
    it_802762BC(ip);
    Item_80268E5C(gobj, msid, ITEM_ANIM_UPDATE);
    ip->entered_hitlag = efLib_PauseAll;
    ip->exited_hitlag = efLib_ResumeAll;
}
static inline void Item_ApplyFallingPhysics(Item_GObj* gobj)
{
    ItemAttr* attrs = ((Item*) HSD_GObjGetUserData(gobj))->xCC_item_attr;
    it_80272860(gobj, attrs->x10_fall_speed, attrs->x14_fall_speed_max);
    it_80274658(gobj, it_804D6D28->x68_float);
}
static inline bool Item_TickLifetime(Item* ip)
{
    if (ip->xD44_lifeTimer <= 0.0f) {
        return 1;
    }
    ip->xD44_lifeTimer -= 1.0f;
    return 0;
}
/// Check whether the grapple chain from @p head to the tip @p pos or to its
/// owner @p fp collides with terrain (shared by Link's hookshot and Samus's
/// grapple beam).
static inline bool itGrappleCheckCollision(ItemLink* head, Fighter* fp,
                                           Vec3* pos)
{
    Vec3* head_pos = &head->pos;
    if (mpCheckAllRemap(0L, 0L, 0L, 0L, -1, -1, pos->x, pos->y,
                        head->pos.x, head->pos.y))
    {
        return 1;
    } else if (mpCheckAllRemap(0L, 0L, 0L, 0L, -1, -1, fp->cur_pos.x,
                               fp->cur_pos.y, head_pos->x, head_pos->y))
    {
        return 1;
    } else {
        return 0;
    }
}
/// @todo Rename; probably gets a specific joint for items
static inline HSD_JObj* itGetJObjGrandchild(Item_GObj* gobj)
{
    HSD_JObj* jobj = ((HSD_JObj*) HSD_GObjGetHSDObj(gobj));
    HSD_JObj* child;
    if (!jobj) {
        child = 0L;
    } else {
        child = jobj->child;
    }
    if (!child) {
        child = 0L;
    } else {
        child = child->child;
    }
    return child;
}
#define MELEE_IT_ITYOYO_H
typedef struct itYoyoAttributes {
    s32 x0_CHARGE_SPAWN_POS;
    s32 x4_UPSMASH_CHARGE_STRING_LENGTH;
    s32 x8_DOWNSMASH_CHARGE_STRING_LENGTH;
    float xC_SIZE;
    float x10_UNK1;
    float x14_UNK2_RAD;
    float x18_SPIN_TEXANIM_SPEED;
    float x1C_UNK_TEXANIM_SPEED;
    float x20_UNK_TEXANIM_MOD;
    float x24_YOYO_RELEASE_VEL_X;
    float x28_YOYO_PULL_STRENGTH;
    float x2C_UNK3_MOD; // Resistance multiplier?
    float x30_YOYO_RELEASE_VEL_Y;
    float x34_GRAVITY;
    float x38_GRAVITY_MOD;
    float x3C_YOYO_PULL_STRENGTH_2;
    s32 x40_UPSMASH_YOYO_ROT_FRAME;
    s32 x44_UPSMASH_YOYO_NUDGE_FRAME;
    s32 x48_DOWNSMASH_YOYO_ROT_FRAME;
    s32 x4C_DOWNSMASH_YOYO_NUDGE_FRAME;
    HSD_Joint* x50_string_joint;
    HSD_Joint* x54_yoyo_joint;
    HSD_MatAnimJoint* x58_yoyo_matanim;
    s32 x5C_UNK7;
} itYoyoAttributes;
#define GALE01_26C47C
#define GALE01_IT_279C
/* 279C48 */ void it_80279C48(Item_GObj*);
/* 279CDC */ void it_80279CDC(Item_GObj*, f32);
/* 279D38 */ void it_80279D38(Item_GObj*);
/* 279D5C */ void it_80279D5C(Item_GObj*, f32);
/* 279E24 */ void it_80279E24(Item_GObj*);
/* 279FF8 */ void it_80279FF8(Item_GObj*);
/* 27A09C */ bool it_8027A09C(Item_GObj*);
/* 27A118 */ bool it_8027A118(Item_GObj*, HSD_GObjEvent);
/* 27A13C */ void it_8027A13C(Item_GObj*);
/* 27A160 */ void it_8027A160(HSD_JObj*, Item*);
/* 27A344 */ void it_8027A344(Item_GObj*);
/* 27A364 */ s32 it_8027A364(Item*);
/* 27A4D4 */ s32 it_8027A4D4(Item*);
/* 27A780 */ s32 it_8027A780(Item*, void*);
/* 27A9B8 */ s32 it_8027A9B8(Item*);
/* 27AAA0 */ void it_8027AAA0(Item_GObj*, Item*, s32);
/* 27AB64 */ bool it_8027AB64(Item_GObj*);
/* 27ADEC */ void it_8027ADEC(int, Item_GObj*, HSD_JObj*, f32);
/* 27AE34 */ bool it_8027AE34(Item_GObj*);
/* 27AF50 */ bool it_8027AF50(Item_GObj*);
/* 27B070 */ void it_8027B070(Item_GObj*, Fighter_GObj*);
/* 27B0C4 */ void it_8027B0C4(Item_GObj*, SpawnItem*);
/* 27B1F4 */ void it_8027B1F4(Item_GObj*);
/* 27B288 */ void it_8027B288(Item_GObj*, u32);
/* 27B330 */ void it_8027B330(Item_GObj*, u32);
/* 27B378 */ void it_8027B378(Fighter_GObj*, Item_GObj*, f32);
/* 27B408 */ void it_8027B408(Item_GObj*, Item_GObj*, f32);
/* 27B4A4 */ void it_8027B4A4(Fighter_GObj*, Item_GObj*);
/* 27B508 */ void it_8027B508(Item_GObj*, Item_GObj*);
/* 27B564 */ void it_8027B564(Item_GObj*);
/* 3F2310 */ extern struct sdata_ItemGXLink it_803F2310[47];
/* 3F23CC */ extern struct ItemLogicTable it_803F23CC[47];
#define GALE01_IT_3F2F
/* 3F2F28 */ extern struct sdata_ItemGXLink it_803F2F28[118];
/* 3F3100 */ extern struct ItemLogicTable it_803F3100[118];
/* 3F4CA8 */ extern struct sdata_ItemGXLink it_803F4CA8[30];
/* 3F4D20 */ extern struct ItemLogicTable it_803F4D20[30];
#define GALE01_ITANIMLIST
/* 278F2C */ void it_80278F2C(Item_GObj*, CommandInfo*);
/* 2790C0 */ void it_802790C0(Item_GObj*, CommandInfo*);
/* 279544 */ void it_80279544(Item_GObj*, CommandInfo*);
/* 2795EC */ void it_802795EC(Item_GObj*, CommandInfo*);
/* 279680 */ void it_80279680(Item_GObj*, CommandInfo*);
/* 2796C4 */ void it_802796C4(Item_GObj*, CommandInfo*);
/* 2796FC */ void it_802796FC(Item_GObj*, CommandInfo*);
/* 279720 */ void it_80279720(Item_GObj*, CommandInfo*);
/* 279744 */ void it_80279744(Item_GObj*, CommandInfo*);
/* 279768 */ void it_80279768(Item_GObj*, CommandInfo*);
/* 27978C */ void it_8027978C(Item_GObj*, CommandInfo*);
/* 279888 */ void it_80279888(Item_GObj*, CommandInfo*);
/* 2798D4 */ void it_802798D4(Item_GObj*, CommandInfo*);
/* 27990C */ void it_8027990C(Item_GObj*, CommandInfo*);
/* 279958 */ void it_80279958(Item_GObj*, CommandInfo*);
/* 2799A8 */ void it_802799A8(Item_GObj*, CommandInfo*);
/// Advance Item Script
/* 2799E4 */ void it_802799E4(Item_GObj*);
/* 279AF0 */ void it_80279AF0(Item_GObj*, CommandInfo*);
/* 279B10 */ void it_80279B10(Item_GObj*, CommandInfo*);
/* 279B30 */ void fn_80279B30(Item_GObj*, CommandInfo*, int arg2);
/* 279B64 */ void it_80279B64(Item*);
/* 279B88 */ void it_80279B88(Item*, s32, s32);
/* 279BBC */ void it_80279BBC(Item*);
/* 279BE0 */ void it_80279BE0(Item_GObj*);
/* 3F22A8 */ extern ItCmd it_803F22A8[16];
#define _itcoll_h_
/* 26F9A0 */ void it_8026F9A0(void);
/* 26F9AC */ void it_8026F9AC(s32, void*, HitCapsule*, Item*, HurtCapsule*);
/* 26FA2C */ void it_8026FA2C(Item*, HitCapsule*, s32, Item*, bool);
/* 26FAC4 */ void it_8026FAC4(Item*, HitCapsule*, s32, void*, bool);
/* 26FC00 */ void it_8026FC00(Item*, HitCapsule*, s32, Fighter*);
/* 26FCF8 */ void it_8026FCF8(Item*, HitCapsule*);
/* 26FE68 */ void it_8026FE68(Item*, HitCapsule*, Item*, HitCapsule*);
/* 2701BC */ void it_802701BC(Item_GObj*);
/* 2703E8 */ void it_802703E8(Item_GObj*);
/* 2706D0 */ void it_802706D0(Item_GObj*);
/* 270CD8 */ f32 it_80270CD8(Item*, HitCapsule*);
/* 270E30 */ void it_80270E30(Item_GObj*);
/* 27129C */ void it_8027129C(Item_GObj*, s32);
/* 27137C */ void it_8027137C(Item_GObj*);
/* 27146C */ void it_8027146C(Item_GObj*);
/* 2714C0 */ void it_802714C0(Item_GObj*);
/* 271508 */ void it_80271508(Item_GObj*, HurtCapsuleState);
/* 271534 */ void it_80271534(Item_GObj*, s32, HurtCapsule*);
/* 271590 */ void it_80271590(Item_GObj*, s32, HurtCapsule*);
/* 27163C */ void it_8027163C(Item_GObj*);
/* 271A58 */ void it_80271A58(Item_GObj*);
/* 2721B8 */ void it_802721B8(Item_GObj*);
/* 272280 */ void it_80272280(Item_GObj*);
/* 272298 */ void it_80272298(Item_GObj*);
/* 2722B0 */ void it_802722B0(Item_GObj*);
/* 272304 */ void it_80272304(Item_GObj*);
/* 27236C */ HSD_GObj* it_8027236C(Item_GObj*);
/* 2723FC */ HSD_GObj* it_802723FC(Item_GObj*);
/* 272460 */ void it_80272460(HitCapsule*, u32, Item_GObj*);
#define GALE01_ITDRAW_H
/* 26EB18 */ void it_8026EB18(HSD_GObj*, s32, Vec3*);
/* 26EBC8 */ void it_8026EBC8(HSD_GObj*, u16, u8*);
/* 26EC54 */ void it_8026EC54(HSD_GObj*, u16, u8*);
/* 26ECE0 */ u32 it_8026ECE0(Item_GObj*, u32);
/* 26EECC */ void it_8026EECC(HSD_GObj*, intptr_t);
#define GALE01_ITDROP_H
/* 26F3AC */ ItemKind it_8026F3AC(void);
/* 26F3D4 */ bool it_8026F3D4(Item_GObj*, struct it_8026F3D4_arg1_t*, s32,
                              s32);
/* 26F53C */ void it_8026F53C(Item_GObj*, Vec3*, bool);
/* 26F5C8 */ Item_GObj* it_8026F5C8(Item_GObj*, ItemKind, Vec3*);
/* 26F6BC */ Item_GObj* it_8026F6BC(Item_GObj*, Vec3*, Vec3*, bool);
/* 26F7C8 */ Item_GObj* it_8026F7C8(Vec3*, Vec3*, bool);
/* 26F8B4 */ bool it_8026F8B4(Item_GObj*, Vec3*, Vec3*, bool);
#define GALE01_IT_EFFECT
/// Load ItCo.dat/usd
/* 27870C */ void it_8027870C(s32);
/* 2787B4 */ void it_802787B4(Item_GObj*, s32);
/* 278800 */ void it_80278800(Item_GObj*, s32, s32, Vec3*, Vec3*, s32, f32);
#define GALE01_ITGROUNDCOLL_H
/* 26D564 */ bool it_8026D564(Item_GObj*);
/* 26D5CC */ bool it_8026D5CC(Item_GObj*);
/* 26D604 */ bool it_8026D604(Item_GObj*);
/* 26D62C */ void it_8026D62C(Item_GObj*, HSD_GObjEvent);
/* 26D6F4 */ void it_8026D6F4(Item_GObj*, HSD_GObjEvent);
/* 26D78C */ void it_8026D78C(Item_GObj*, HSD_GObjEvent);
/* 26D82C */ void it_8026D82C(Item_GObj*);
/* 26D8A4 */ bool it_8026D8A4(Item_GObj*, HSD_GObjEvent);
/* 26D938 */ void it_8026D938(Item_GObj*, HSD_GObjEvent);
/* 26D9A0 */ bool it_8026D9A0(Item_GObj*);
/* 26DA08 */ bool it_8026DA08(Item_GObj*);
/* 26DA70 */ bool it_8026DA70(Item_GObj*);
/* 26DAA8 */ s32 it_8026DAA8(Item_GObj*);
/* 26DB40 */ bool it_8026DB40(Item_GObj*);
/* 26DBC8 */ bool it_8026DBC8(Item_GObj*);
/* 26DC24 */ bool it_8026DC24(Item_GObj*);
/* 26DD5C */ bool it_8026DD5C(Item_GObj*);
/* 26DDFC */ bool it_8026DDFC(Item_GObj*);
/* 26DE98 */ bool it_8026DE98(Item_GObj*);
/* 26DF34 */ bool it_8026DF34(Item_GObj*);
/* 26DFB0 */ bool it_8026DFB0(Item_GObj*);
/* 26E058 */ bool it_8026E058(Item_GObj*);
/* 26E0F4 */ void it_8026E0F4(Item_GObj*);
/* 26E15C */ void it_8026E15C(Item_GObj*, HSD_GObjEvent);
/* 26E248 */ void it_8026E248(Item_GObj*, HSD_GObjEvent);
/* 26E32C */ s32 it_8026E32C(Item_GObj*, HSD_GObjEvent);
/* 26E414 */ void it_8026E414(Item_GObj*, HSD_GObjEvent);
/* 26E4D0 */ void it_8026E4D0(Item_GObj*, HSD_GObjEvent);
/* 26E5A0 */ void it_8026E5A0(Item_GObj*, HSD_GObjEvent);
/* 26E664 */ void it_8026E664(Item_GObj*, HSD_GObjEvent);
/* 26E71C */ void it_8026E71C(Item_GObj*, HSD_GObjEvent);
/* 26E7E0 */ void it_8026E7E0(Item_GObj*, HSD_GObjEvent);
/* 26E8C4 */ void it_8026E8C4(Item_GObj*, HSD_GObjEvent, HSD_GObjEvent);
/* 26E9A4 */ bool it_8026E9A4(HSD_GObj*, Vec3*, Vec3*, Vec3*);
/* 26EA20 */ bool it_8026EA20(HSD_GObj*, Vec3*, Vec3*, Vec3*, int*,
                              u32* flags_out);
/* 26EA9C */ bool it_8026EA9C(HSD_GObj*, Vec3*, Vec3*, Vec3*, int*,
                              u32* flags_out, s32);
#define GALE01_IT_HITBOX
/* 2753DC */ void it_802753DC(Item_GObj*);
/* 275414 */ void it_80275414(Item_GObj*);
/* 27542C */ void it_8027542C(Item_GObj*);
/* 275444 */ void it_80275444(Item_GObj*);
/// Toggle several flags in 0xDCD off
/* 275474 */ void it_80275474(Item_GObj*);
/* 2754A4 */ void it_802754A4(Item_GObj*);
/* 2754BC */ void it_802754BC(Item_GObj*);
/* 2754D4 */ void it_802754D4(Item_GObj*);
/// Toggle several flags in 0xDCE off
/* 275504 */ void it_80275504(Item_GObj*);
/* 275534 */ void it_80275534(Item_GObj*, f32);
/* 275594 */ void it_80275594(Item_GObj*, s32, f32);
/* 2755C0 */ void it_802755C0(Item_GObj*, f32);
/* 275640 */ void it_80275640(Item_GObj*, f32);
/* 2756D0 */ void it_802756D0(Item_GObj*);
/* 2756E0 */ void it_802756E0(Item_GObj*);
/* 27570C */ void it_8027570C(Item_GObj*, s32);
/* 27572C */ void it_8027572C(Item_GObj*, s32);
/* 27574C */ void it_8027574C(Item_GObj*);
/* 275788 */ void it_80275788(Item_GObj*);
/* 275820 */ void it_80275820(Item_GObj*, Vec3*, Vec3*, s32);
/* 275870 */ bool it_80275870(Item_GObj*);
/* 2758D4 */ float it_802758D4(Item_GObj*);
#define GALE01_ITMATERIAL
struct it_MObjInfo;
/* 277D08 */ void it_80277D08(void);
/* 277D8C */ void fn_80277D8C(HSD_MObj*, u32, u32);
/* 277F90 */ HSD_TExp* it_80277F90(Item*, HSD_MObj*, HSD_TExp*);
/* 278108 */ void it_80278108(Item*, HSD_MObj*, HSD_TExp*);
/* 278574 */ void it_80278574(HSD_GObj*, GXColor*);
/* 3F1F90 */ extern struct it_MObjInfo it_mobj;
typedef void (*it_MObjSetupFunc)(HSD_MObj* mobj, u32 rendermode, u32 unused);
#define GALE01_ITSPAWN_H
struct it_8026C47C_arg0_t;
/* 26C47C */ void it_8026C47C(struct it_8026C47C_arg0_t*);
/* 26C65C */ ItemKind it_8026C65C(ItemPickTable*);
/* 26C704 */ bool it_8026C704(void);
/* 26C75C */ ItemKind it_8026C75C(ItemPickTable*);
/* 26C88C */ void fn_8026C88C(HSD_GObj*);
/* 26CA4C */ void it_8026CA4C(ItemPickTable*, s32*, u64, s32, f32);
/* 26CB3C */ bool it_8026CB3C(Vec3*);
/* 26CB9C */ void it_8026CB9C(s32*, u64, f32);
/* 26CD50 */ void it_8026CD50(s32*, u64, f32);
/* 26CF04 */ void it_8026CF04(void);
/* 26D018 */ void it_8026D018(void);
/* 26D258 */ bool it_8026D258(Vec3*, ItemKind);
/* 26D324 */ bool it_8026D324(ItemKind);
/* 26D3CC */ bool it_8026D3CC(void);
#define GALE01_ITZAKO
/* 27B5B0 */ Item_GObj* it_8027B5B0(ItemKind, Vec3*, HSD_JObj*, Vec3*, bool);
/* 27B730 */ void it_8027B730(Item_GObj*);
/* 27B798 */ bool it_8027B798(Item_GObj*, Vec3*);
/* 27B964 */ void it_8027B964(Item_GObj*, bool);
/* 27BA54 */ int it_8027BA54(HSD_GObj*, Vec3*);
/* 27BB1C */ void it_8027BB1C(Vec3*, Vec3*);
/* 27BBF4 */ void it_8027BBF4(Item_GObj*, bool, f64, f32);
/* 27C0A8 */ void it_8027C0A8(Item_GObj*, f32, f32);
/* 27C0CC */ void it_8027C0CC(Item_GObj*, f32, f32);
/* 27C0F0 */ void it_8027C0F0(Item_GObj*, Vec3*, f64, f32);
/* 27C56C */ void it_8027C56C(Item_GObj*, f32);
/* 27C794 */ bool it_8027C794(Item_GObj*);
/* 27C79C */ bool it_8027C79C(Item_GObj*);
/* 27C824 */ bool it_8027C824(Item_GObj*, s32 (*arg1)(Item_GObj*));
/* 27C8B0 */ void it_2725_Logic9_Destroyed(Item_GObj*);
/* 27C8D0 */ void it_8027C8D0(Vec3*, Vec3*, f32);
/* 27C9D8 */ void it_8027C9D8(Item*);
/* 27CA7C */ bool it_8027CA7C(HSD_GObj*);
/* 27CAD8 */ void it_8027CAD8(Item_GObj*);
/* 27CB3C */ void it_8027CB3C(Item_GObj*);
/* 27CBA4 */ void it_8027CBA4(Item_GObj*);
/* 27CBFC */ f32 it_8027CBFC(Item_GObj*);
/* 27CC88 */ Item_GObj* it_8027CC88(Item_GObj*);
/* 27CE18 */ void it_8027CE18(Item_GObj*);
/* 27CE44 */ void it_8027CE44(Item_GObj*);
/* 27CE64 */ void it_8027CE64(Item_GObj*, HSD_GObj*, void*);
#define MELEE_IT_ITEMS_INLINES_H
#define GALE01_2A2418
/// /* 2A2418 */ void it_802A2418(Item_GObj*);
/// /* 2A2B10 */ void it_802A2B10(Item_GObj* gobj);
/// /* 2A2BA4 */ Item_GObj* it_802A2BA4(Fighter_GObj*, Vec3*, float, int);
/// /* 2A7688 */ void itLinkHookshot_Logic20_PickedUp(Item_GObj*);
/// /* 2A78B8 */ void it_802A78B8(HSD_GObj*, Vec3*, float);
/// /* 2A7AAC */ void it_802A7AAC(HSD_GObj*);
/// /* 2A7AF0 */ void it_802A7AF0(HSD_GObj*);
/// /* 2A7B34 */ void it_802A7B34(HSD_GObj*);
/// /* 2A7D40 */ void it_802A7D40(Item_GObj*, Item_GObj*);
/* 3F6998 */ extern ItemStateTable it_803F6998[];
/* 802A2418 */ void it_802A2418(Item_GObj* arg0);
/* 802A2428 */ void it_802A2428(Item_GObj* arg0);
/* 802A2474 */ void it_802A2474(void* arg0);
/* 802A24A0 */ void it_802A24A0(HSD_GObj* gobj, intptr_t arg1);
/* 802A24D0 */ void it_802A24D0(ItemLink* arg0, f32 arg8);
/* 802A2568 */ HSD_JObj* it_802A2568(Item* arg0, HSD_JObj* arg1, s32 arg2,
                                     f32 arg8);
/* 802A2B10 */ void it_802A2B10(Item_GObj* gobj);
/* 802A2BA4 */ Item_GObj* it_802A2BA4(Fighter_GObj* arg0, Vec3* arg1, f32 arg2,
                                      s32 arg3);
/* 802A2D88 */ bool itLinkhookshot_UnkMotion8_Anim(Item_GObj* arg0);
/* 802A2ED0 */ void itLinkhookshot_UnkMotion0_Phys(Item_GObj* arg0);
/* 802A2EE4 */ void it_802A2EE4(Item_GObj* arg0);
/* 802A30FC */ void itLinkhookshot_UnkMotion1_Phys(Item_GObj* arg0);
/* 802A3240 */ void itLinkhookshot_UnkMotion2_Phys(Item_GObj* arg0);
/* 802A3254 */ void it_802A3254(Item_GObj* arg0);
/* 802A338C */ void itLinkhookshot_UnkMotion3_Phys(Item_GObj* arg0);
/* 802A34EC */ void itLinkhookshot_UnkMotion4_Phys(Item_GObj* arg0);
/* 802A3500 */ void it_802A3500(Item_GObj* arg0);
/* 802A361C */ void itLinkhookshot_UnkMotion5_Phys(Item_GObj* arg0);
/* 802A3630 */ void it_802A3630(Item_GObj* arg0);
/* 802A3814 */ void itLinkhookshot_UnkMotion6_Phys(Item_GObj* arg0);
/* 802A3828 */ void it_802A3828(Item_GObj* arg0);
/* 802A39E8 */ void itLinkhookshot_UnkMotion7_Phys(Item_GObj* arg0);
/* 802A39FC */ void it_802A39FC(Item_GObj* arg0);
/* 802A3C84 */ void itLinkhookshot_UnkMotion8_Phys(Item_GObj* arg0);
/* 802A3C98 */ float it_802A3C98(Vec3* arg0, Vec3* arg1, Vec3* arg2);
/* 802A3D90 */ s32 it_802A3D90(ItemLink* arg0);
/* 802A3E50 */ s32 it_802A3E50(ItemLink* arg0, enum FighterKind arg1,
                               f32 arg8);
/* 802A40D0 */ s32 it_802A40D0(ItemLink* arg0, f32 arg8);
/* 802A42F4 */ s32 it_802A42F4(ItemLink* arg0, f32 arg8);
/* 802A43B8 */ void it_802A43B8(ItemLink* arg0);
/* 802A43EC */ void it_802A43EC(ItemLink* arg0);
/* 802A4420 */ void it_802A4420(ItemLink* arg0);
/* 802A4454 */ void it_802A4454(ItemLink* arg0);
/* 802A44CC */ void it_802A44CC(ItemLink* arg0, Vec3* arg1,
                                itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A4758 */ void it_802A4758(ItemLink* arg0, Vec3* arg1,
                                itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A49B0 */ void it_802A49B0(ItemLink* arg0, Vec3* arg1,
                                itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A4BFC */ s32 it_802A4BFC(ItemLink* arg0, Vec3* arg1,
                               itLinkHookshotAttributes* arg2, Fighter* arg3);
/* 802A5320 */ s32 it_802A5320(ItemLink* arg0, Vec3* arg1,
                               itLinkHookshotAttributes* arg2, Fighter* arg3);
/* 802A5770 */ void it_802A5770(ItemLink* arg0, Vec3* arg1,
                                itLinkHookshotAttributes* arg2, Fighter* arg3);
/* 802A5AE0 */ s32 it_802A5AE0(ItemLink* arg0, Vec3* arg1,
                               itLinkHookshotAttributes* arg2);
/* 802A5E28 */ s32 it_802A5E28(ItemLink* arg0, Vec3* arg1,
                               itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A5FE0 */ s32 it_802A5FE0(ItemLink* arg0, ItemLink* arg1, Vec3* arg2,
                               itLinkHookshotAttributes* arg3, f32 arg8);
/* 802A6474 */ void it_802A6474(ItemLink* arg0, ItemLink* arg1, Vec3* pos,
                                itLinkHookshotAttributes* attrs);
/* 802A678C */ s32 it_802A678C(ItemLink* arg0, Vec3* arg1,
                               itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A6944 */ void it_802A6944(Item*, f32);
/* 802A6A78 */ bool it_802A6A78(ItemLink* arg0, Vec3* arg1,
                                itLinkHookshotAttributes* arg2, Fighter* arg3);
/* 802A6DC8 */ void it_802A6DC8(HSD_JObj* arg0, Vec3* arg1, Vec3* arg2);
/* 802A6F80 */ void it_802A6F80(HSD_JObj* arg0, Vec3* arg1, Vec3* arg2,
                                f32 val);
/* 802A7168 */ void it_802A7168(Item* arg0, Vec3* arg1, f32 arg8);
/* 802A7384 */ void it_802A7384(Item* arg0, Vec3* arg1, f32 arg8);
/* 802A7688 */ void itLinkHookshot_Logic20_PickedUp(Item_GObj* arg0);
/* 802A76EC */ void it_802A76EC(HSD_GObj* arg0);
/* 802A7764 */ void it_802A7764(HSD_GObj* arg0);
/* 802A77DC */ void it_802A77DC(Item_GObj* gobj);
/* 802A7840 */ void it_802A7840(HSD_GObj* arg0);
/* 802A78B8 */ void it_802A78B8(HSD_GObj* arg0, Vec3* arg1);
/* 802A793C */ void it_802A793C(HSD_GObj* arg0);
/* 802A79A0 */ void it_802A79A0(HSD_GObj* arg0);
/* 802A7A04 */ void it_802A7A04(HSD_GObj* arg0);
/* 802A7AAC */ void it_802A7AAC(HSD_GObj* arg0);
/* 802A7AF0 */ void it_802A7AF0(HSD_GObj* arg0);
/* 802A7B34 */ void it_802A7B34(HSD_GObj* arg0);
/* 802A7D40 */ void it_802A7D40(Item_GObj* arg0, Item_GObj* arg1);
extern const Vec4 it_803B8650;
static inline void Item_RetractChain(ItemLink* link, Vec3* pos,
                                     f32 target_dist, const f32* max_dist,
                                     ItemLink** next_out, ItemLink** cur_out,
                                     f32* remaining_out)
{
    ItemLink* cur;
    ItemLink* next;
    f32 distance;
    f32 remaining;
    f32 limit;
    Vec3 dir;
    cur = link;
    next = link->prev;
    while (next != 0L && !cur->x2C_b0) {
        cur = next;
        next = next->prev;
    }
    distance = it_802A3C98(&cur->pos, pos, &dir);
    while (next != 0L && target_dist > distance) {
        cur->x2C_b0 = 0;
        distance = it_802A3C98(&next->pos, pos, &dir);
        cur = next;
        next = next->prev;
    }
    remaining = distance - target_dist;
    limit = *max_dist;
    if (remaining > limit) {
        remaining = limit;
    }
    *next_out = next;
    *cur_out = cur;
    *remaining_out = remaining;
}
static inline Item_GObj*
Item_AttachToParent(Item_GObj* item_gobj, HSD_GObj* parent, Fighter_Part part)
{
    Item_8026AB54(item_gobj, parent, part);
    db_80225DD8(item_gobj, parent);
    return item_gobj;
}
static inline void Item_AttachGameWatchArticle(HSD_GObj* parent,
                                               Fighter_Part part,
                                               Item_GObj* item_gobj,
                                               void** attributes)
{
    Item_AttachToParent(item_gobj, parent, part);
    it_8027CE64(item_gobj, parent, attributes[0]);
}
static inline void Item_StopAndEnterState(Item_GObj* gobj, Item* ip, s32 msid)
{
    itResetVelocity(ip);
    it_8026B390(gobj);
    Item_80268E5C(gobj, msid, ITEM_ANIM_UPDATE);
}
static inline void Item_EnterAirStateWithHitlag(Item_GObj* gobj, enum_t msid)
{
    Item* item = ((Item*) HSD_GObjGetUserData(gobj));
    it_802762BC(item);
    Item_80268E5C(gobj, msid, ITEM_ANIM_UPDATE);
    item->entered_hitlag = efLib_PauseAll;
    item->exited_hitlag = efLib_ResumeAll;
}
static inline void Item_EnterAirStateWithHitlagAndStateDesc(Item_GObj* gobj)
{
    Item* item = ((Item*) HSD_GObjGetUserData(gobj));
    it_802762BC(item);
    Item_80268E5C(gobj, 0, ITEM_ANIM_UPDATE);
    item->entered_hitlag = efLib_PauseAll;
    item->exited_hitlag = efLib_ResumeAll;
    it_80273670(gobj, 0, 0.0F);
}
static inline void Item_UpdateRollingShellRotation(Item_GObj* gobj, Item* ip,
                                                   HSD_JObj* jobj,
                                                   const f32* rotation_rate)
{
    it_80276CB8(gobj);
    jobj = HSD_JObjGetChild(jobj);
    HSD_JObjAddRotationY(jobj, *rotation_rate * ((ip->x40_vel.x) < 0 ? -(ip->x40_vel.x) : (ip->x40_vel.x)));
}
static inline void Item_ClampAngle(f32* angle)
{
    while (*angle < -3.14159265358979323846) {
        *angle += 6.283185307179586;
    }
    while (*angle > 3.14159265358979323846) {
        *angle -= 6.283185307179586;
    }
}
static inline void Item_ClampAngleReverse(f32* angle)
{
    while (*angle > 3.14159265358979323846) {
        *angle -= 6.283185307179586;
    }
    while (*angle < -3.14159265358979323846) {
        *angle += 6.283185307179586;
    }
}
static inline bool Item_UpdateRayAnimation(Item_GObj* gobj, Item* ip,
                                           HSD_JObj* jobj,
                                           const f32* max_scale,
                                           f32 scale_divisor)
{
    f32 dir;
    f32 vel_x;
    ip->x40_vel.x =
        ip->xDD4_itemVar.ray.speed * cosf(ip->xDD4_itemVar.ray.angle);
    ip->x40_vel.y =
        ip->xDD4_itemVar.ray.speed * sinf(ip->xDD4_itemVar.ray.angle);
    ip->x40_vel.z = 0.0F;
    if (ip->x40_vel.x > 0.0F) {
        dir = +1.0F;
    } else {
        dir = -1.0F;
    }
    ip->facing_dir = dir;
    HSD_JObjSetRotationY(jobj, (3.14159265358979323846 / 2) * ip->facing_dir);
    if (ip->facing_dir == 1.0F) {
        vel_x = -ip->x40_vel.x;
    } else {
        vel_x = +ip->x40_vel.x;
    }
    HSD_JObjSetRotationX(jobj, 3.14159265358979323846 + atan2f(ip->x40_vel.y, vel_x));
    ip->xDD4_itemVar.ray.scale +=
        ((ip->xDD4_itemVar.ray.speed) < 0 ? -(ip->xDD4_itemVar.ray.speed) : (ip->xDD4_itemVar.ray.speed)) / scale_divisor;
    if (ip->xDD4_itemVar.ray.scale > *max_scale) {
        ip->xDD4_itemVar.ray.scale = *max_scale;
    }
    if (ip->xDD4_itemVar.ray.scale < 1e-5F) {
        ip->xDD4_itemVar.ray.scale = 1e-3F;
    }
    HSD_JObjSetScaleZ(jobj, ip->xDD4_itemVar.ray.scale);
    return it_80273130(gobj);
}
static inline bool Item_BounceRayOffShield(Item_GObj* gobj)
{
    Item* ip = ((Item*) HSD_GObjGetUserData(gobj));
    lbVector_Mirror(&ip->x40_vel, &ip->xC58);
    ip->xDD4_itemVar.ray.scale = 1e-3F;
    ip->xDD4_itemVar.ray.angle = atan2f(ip->x40_vel.y, ip->x40_vel.x);
    while (ip->xDD4_itemVar.ray.angle < 0.0F) {
        ip->xDD4_itemVar.ray.angle += 6.283185307179586;
    }
    while (ip->xDD4_itemVar.ray.angle > 6.283185307179586) {
        ip->xDD4_itemVar.ray.angle -= 6.283185307179586;
    }
    return 0;
}
static inline void Item_ResetRayAfterReflection(Item* ip, HSD_JObj* jobj)
{
    HSD_JObjSetScaleZ(jobj, ip->xDD4_itemVar.ray.scale = 1e-3F);
    ip->xDD4_itemVar.ray.angle += 3.14159265358979323846;
    while (ip->xDD4_itemVar.ray.angle < 0.0F) {
        ip->xDD4_itemVar.ray.angle += 6.283185307179586;
    }
    while (ip->xDD4_itemVar.ray.angle > 6.283185307179586) {
        ip->xDD4_itemVar.ray.angle -= 6.283185307179586;
    }
}
static inline void Item_InitSpawnPosition(SpawnItem* spawn, Vec3* pos,
                                          bool on_plane)
{
    spawn->prev_pos = *pos;
    if (on_plane) {
        spawn->prev_pos.z = 0.0F;
    }
    spawn->pos = spawn->prev_pos;
}
static inline void Item_InitSpawnCommonFields(SpawnItem* spawn,
                                              HSD_GObj* parent, f32 facing_dir,
                                              bool initial_collision)
{
    spawn->facing_dir = facing_dir;
    spawn->x3C_damage = 0;
    spawn->vel.x = spawn->vel.y = spawn->vel.z = 0.0F;
    spawn->x0_parent_gobj = parent;
    spawn->x4_parent_gobj2 = spawn->x0_parent_gobj;
    spawn->x44_flag.b0 = initial_collision;
    spawn->x40 = 0;
}
static inline void
Item_InitSpawnPositionFromParent(SpawnItem* spawn, HSD_GObj* parent, Vec3* pos)
{
    spawn->prev_pos = *pos;
    spawn->prev_pos.z = 0.0F;
    it_8026BB68(parent, &spawn->pos);
}
static inline void itUpdateVelocityFromBone(HSD_JObj* jobj, Item* ip,
                                            Vec3* previous_pos)
{
    Vec3 pos;
    Vec3 zero;
    if (jobj != 0L) {
        zero.x = zero.y = zero.z = 0.0F;
        HSD_JObjGetTranslation(jobj, &pos);
        ip->x40_vel.x = ip->facing_dir * (pos.z - previous_pos->z);
        ip->x40_vel.y = pos.y - previous_pos->y;
        ip->x40_vel.z = pos.x - previous_pos->x;
        *previous_pos = pos;
        HSD_JObjSetTranslate(jobj, &zero);
    }
}
static inline bool itReflectItemAndUpdateRotation(Item_GObj* gobj)
{
    const f32 PI_2 = 3.14159265358979323846 / 2;
    Item* ip = (Item*) HSD_GObjGetUserData(gobj);
    HSD_JObj* jobj = ((HSD_JObj*) HSD_GObjGetHSDObj(gobj));
    it_80273030(gobj);
    HSD_JObjSetRotationY(jobj, PI_2 * ip->facing_dir);
    return 0;
}
static inline void Item_CopyJObjScale(HSD_JObj* dst, HSD_JObj* src,
                                      Vec3* scale)
{
    scale->x = scale->y = scale->z = HSD_JObjGetScaleY(src);
    HSD_JObjSetScale(dst, scale);
}
static inline void Item_NormalizeAngle(f32* angle)
{
    while (*angle < 0.0F) {
        *angle += 6.283185307179586;
    }
    while (*angle > 6.283185307179586) {
        *angle -= 6.283185307179586;
    }
}
static inline void Item_ClearFlagsAndEnterState(Item_GObj* gobj, Item* ip,
                                                s32 msid)
{
    it_8026B3A8(gobj);
    ip->xDC8_word.flags.x13 = 0;
    it_80272940(gobj);
    Item_80268E5C(gobj, msid, ITEM_ANIM_UPDATE);
}
static inline void Item_UpdateZakoVelocity(Item_GObj* gobj, Item* ip)
{
    it_802762BC(ip);
    it_8027BA54(gobj, &ip->x40_vel);
    it_802762BC(ip);
}
static inline void Item_ZakoDefeat(Item_GObj* gobj, Item* ip)
{
    it_8027C9D8(ip);
    it_802756D0(gobj);
    it_80275474(gobj);
    it_8027CE44(gobj);
    Camera_RequestQuake(QuakeKind_Small, &ip->pos);
}
static inline void Item_InitLinkMtx(Mtx m, f32 z)
{
    PSMTXIdentity(m);
    m[0][3] = 0.0f;
    m[1][3] = 0.0f;
    m[2][3] = z;
}
static inline void Item_InitZakoCollision(Item_GObj* gobj, Item* ip)
{
    ip->xD5C = 0;
    ip->xDC8_word.flags.x15 = 0;
    it_8027542C(gobj);
    it_80275270(gobj);
    ip->xDC8_word.flags.x19 = 1;
}
#define GALE01_2ADA1C
/* 2ADA1C */ void it_802ADA1C(Vec3* pos, Vec3* vel, float facing_dir);
/* 2ADBE4 */ void it_802ADBE4(Item_GObj*, Item_GObj*);
/* 3F6C88 */ extern ItemStateTable it_803F6C88[];
#define GALE01_2E5AC4
/* 2E5AC4 */ bool it_802E5AC4(Item_GObj*, bool);
/* 2E5EF4 */ s32 it_802E5EF4(Item_GObj*);
/* 2E5F00 */ void it_802E5F00(Item_GObj*, Vec3*, Vec3*, s32);
/* 2E5F8C */ s32 it_802E5F8C(Item_GObj*, Vec3*, s32, s32, f32, f32);
/* 2E609C */ s32 it_802E609C(it_802E5FXX_struct*, SpawnItem*);
/* 2E61C4 */ s32 it_802E61C4(Item_GObj*, s32, s32);
/* 2E628C */ void it_802E628C(Item_GObj*, f32, f32);
/* 2E6380 */ s32 it_802E6380(Item_GObj*, it_802E5FXX_struct*);
/* 2E657C */ bool it_802E657C(Item_GObj*);
/* 2E6658 */ void it_802E6658(void);
/* 2E66A0 */ void it_802E66A0(HSD_GObj*);
/* 2E67A8 */ bool it_2E5A_UnkMotion1_Anim(HSD_GObj*);
/* 2E67F4 */ void it_2E5A_UnkMotion1_Phys(HSD_GObj*);
/* 2E6824 */ bool it_2E5A_UnkMotion0_Coll(HSD_GObj*);
/* 2E6888 */ void it_802E6888(HSD_GObj*);
/* 2E68EC */ bool it_2E5A_UnkMotion2_Anim(HSD_GObj*);
/* 2E690C */ void it_2E5A_UnkMotion2_Phys(HSD_GObj*);
/* 2E6910 */ bool it_2E5A_UnkMotion2_Coll(HSD_GObj*);
/* 2E6A40 */ bool it_2E5A_Logic115_DmgDealt(Item_GObj*);
/* 2E6A74 */ void it_802E6A74(HSD_GObj*);
/* 2E6ACC */ void it_2E5A_Logic115_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F8BD8 */ extern ItemStateTable it_803F8BD8[];
#define GALE01_2F28C8
/* 2F28C8 */ void it_802F28C8(Item_GObj*, int, float);
/* 2F295C */ float it_802F295C(HSD_GObj* owner_gobj, itUnk2_DatAttrs* attr);
/* 2F2BDC */ void it_802F2BDC(Item_GObj*, HSD_GObj*);
/* 3F9470 */ extern ItemStateTable it_803F9470[];
#define MELEE_IT_KINDS_ITARWINGLASER_H
extern ItemStateTable it_803F8DE8[];
s32 it_802E70BC(Item_GObj*);
Item_GObj* it_802E72E0(Item_GObj*, HSD_JObj*, s32, f32, f32);
Item_GObj* it_802E7654(Item_GObj*, HSD_JObj*, Vec3*, s32, s32, f32);
void it_802E79C8(Item_GObj*);
void it_802E7A4C(Item_GObj*);
bool it_802E838C(Item_GObj*);
bool it_802E8418(Item_GObj*);
bool it_802E8420(Item_GObj*);
bool it_802E85F4(Item_GObj*);
bool it_802E8784(Item_GObj*);
#define GALE01_284854
Item_GObj* it_80284854(Vec3*);
void itBat_Logic11_Spawned(Item_GObj*);
void it_80284974(Item_GObj*);
bool itBat_UnkMotion0_Anim(Item_GObj*);
void itBat_UnkMotion0_Phys(Item_GObj*);
bool itBat_UnkMotion0_Coll(Item_GObj*);
void it_802849F0(Item_GObj*);
bool itBat_UnkMotion3_Anim(Item_GObj*);
void itBat_UnkMotion3_Phys(Item_GObj*);
bool itBat_UnkMotion3_Coll(Item_GObj*);
void itBat_Logic11_PickedUp(Item_GObj*);
bool itBat_UnkMotion2_Anim(Item_GObj*);
void itBat_UnkMotion2_Phys(Item_GObj*);
bool itBat_UnkMotion2_Coll(Item_GObj*);
void itBat_Logic11_Dropped(Item_GObj*);
void itBat_Logic11_Thrown(Item_GObj*);
void itBat_Logic11_EnteredAir(Item_GObj*);
bool itBat_UnkMotion4_Anim(Item_GObj*);
void itBat_UnkMotion4_Phys(Item_GObj*);
bool itBat_UnkMotion4_Coll(Item_GObj*);
bool itBat_Logic11_DmgDealt(Item_GObj*);
bool itBat_Logic11_Reflected(Item_GObj*);
bool itBat_Logic11_Clanked(Item_GObj*);
bool itBat_Logic11_HitShield(Item_GObj*);
bool itBat_Logic11_ShieldBounced(Item_GObj*);
void itBat_Logic11_EvtUnk(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F57B0[];
#define GALE01_27D670
/* 27D670 */ Item_GObj* it_8027D670(Vec3* const);
/* 27D730 */ void it_8027D730(Item_GObj* gobj);
/* 27D76C */ void itBombhei_Logic6_Spawned(Item_GObj* gobj);
/* 27D820 */ void it_8027D820(Item_GObj* gobj);
/* 27DAC8 */ void fn_8027DAC8(Item_GObj* gobj);
/* 27DC74 */ bool itBombhei_UnkMotion0_Anim(Item_GObj* gobj);
/* 27DDE8 */ void itBombhei_UnkMotion0_Phys(Item_GObj* gobj);
/* 27DDEC */ bool itBombhei_UnkMotion0_Coll(Item_GObj* gobj);
/* 27DE18 */ void it_8027DE18(Item_GObj*);
/* 27E018 */ bool itBombhei_UnkMotion1_Anim(Item_GObj* gobj);
/* 27E020 */ void itBombhei_UnkMotion1_Phys(Item_GObj* gobj);
/* 27E050 */ bool itBombhei_UnkMotion1_Coll(Item_GObj* gobj);
/* 27E0B4 */ void itBombhei_Logic6_PickedUp(Item_GObj*);
/* 27E3E4 */ bool itBombhei_UnkMotion8_Anim(Item_GObj* gobj);
/* 27E644 */ void itBombhei_UnkMotion8_Phys(Item_GObj* gobj);
/* 27E648 */ void it_3F14_Logic6_Dropped(Item_GObj*);
/* 27E978 */ void it_8027E978(Item_GObj*);
/* 27EB7C */ bool itBombhei_UnkMotion3_Anim(Item_GObj* gobj);
/* 27EDC0 */ void itBombhei_UnkMotion3_Phys(Item_GObj* gobj);
/* 27EDC4 */ bool itBombhei_UnkMotion3_Coll(Item_GObj* gobj);
/* 27EE04 */ void it_8027EE04(Item_GObj*);
/* 27EFD0 */ bool itBombhei_UnkMotion2_Anim(Item_GObj* gobj);
/* 27F26C */ void itBombhei_UnkMotion2_Phys(Item_GObj* gobj);
/* 27F270 */ bool itBombhei_UnkMotion2_Coll(Item_GObj* gobj);
/* 27F42C */ void it_8027F42C(Item_GObj*);
/* 27F5E8 */ bool itBombhei_UnkMotion4_Anim(Item_GObj* gobj);
/* 27F89C */ void itBombhei_UnkMotion4_Phys(Item_GObj* gobj);
/* 27F8A0 */ bool itBombhei_UnkMotion4_Coll(Item_GObj* gobj);
/* 27F8E0 */ void it_8027F8E0(Item_GObj*);
/* 27FC44 */ bool itBombhei_UnkMotion5_Anim(Item_GObj* gobj);
/* 27FC78 */ void itBombhei_UnkMotion5_Phys(Item_GObj* gobj);
/* 27FC7C */ bool itBombhei_UnkMotion5_Coll(Item_GObj* gobj);
/* 27FCA8 */ void fn_8027FCA8(Item_GObj*);
/* 28000C */ bool itBombhei_UnkMotion6_Anim(Item_GObj* gobj);
/* 280030 */ void itBombhei_UnkMotion6_Phys(Item_GObj* gobj);
/* 28007C */ void fn_8028007C(Item_GObj*);
/* 280338 */ bool itBombhei_UnkMotion6_Coll(Item_GObj* gobj);
/* 280380 */ void it_3F14_Logic6_Thrown(Item_GObj*);
/* 2806CC */ bool itBombhei_UnkMotion10_Anim(Item_GObj* gobj);
/* 280928 */ void itBombhei_UnkMotion10_Phys(Item_GObj* gobj);
/* 280974 */ void fn_80280974(Item_GObj*);
/* 280B18 */ bool itBombhei_UnkMotion10_Coll(Item_GObj* gobj);
/* 280B60 */ void it_80280B60(Item_GObj* gobj);
/* 280DC0 */ void it_80280DC0(Item_GObj* gobj);
/* 280DF0 */ bool it_3F14_Logic6_DmgDealt(Item_GObj* gobj);
/* 280E30 */ bool it_3F14_Logic6_DmgReceived(Item_GObj* gobj);
/* 280E70 */ bool itBombhei_UnkMotion11_Anim(Item_GObj* gobj);
/* 280E90 */ void itBombhei_UnkMotion11_Phys(Item_GObj* gobj);
/* 280E94 */ bool itBombhei_UnkMotion11_Coll(Item_GObj* gobj);
/* 280E9C */ void it_3F14_Logic6_EnteredAir(Item_GObj*);
/* 281030 */ bool itBombhei_UnkMotion12_Anim(Item_GObj* gobj);
/* 281038 */ void itBombhei_UnkMotion12_Phys(Item_GObj* gobj);
/* 28103C */ bool itBombhei_UnkMotion12_Coll(Item_GObj* gobj);
/* 281070 */ bool itBombhei_Logic6_Clanked(Item_GObj*);
/* 2810A4 */ bool itBombhei_Logic6_Reflected(Item_GObj*);
/* 2810C4 */ bool it_3F14_Logic6_HitShield(Item_GObj*);
/* 281104 */ bool it_3F14_Logic6_ShieldBounced(Item_GObj*);
/* 281144 */ void itBombhei_Logic6_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F54D8 */ extern ItemStateTable it_803F54D8[];
#define GALE01_286088
/* 286088 */ Item_GObj* it_80286088(Item_GObj*);
/* 2861CC */ void itBox_Logic1_Spawned(Item_GObj*);
/* 286208 */ void itBox_Logic1_Destroyed(Item_GObj*);
/* 286248 */ void it_80286248(Item_GObj*, s32, s32, s32, s32);
/* 286340 */ bool it_80286340(Item_GObj*, s32, s32, s32, s32);
/* 2863BC */ bool it_802863BC(Item_GObj*);
/* 286480 */ void fn_80286480(Item_GObj*);
/* 2864D8 */ bool itBox_UnkMotion0_Anim(Item_GObj* gobj);
/* 286518 */ void itBox_UnkMotion0_Phys(Item_GObj* gobj);
/* 28651C */ bool itBox_UnkMotion0_Coll(Item_GObj* gobj);
/* 28655C */ void it_8028655C(Item_GObj* gobj);
/* 286598 */ bool itBox_UnkMotion4_Anim(Item_GObj* gobj);
/* 2865A0 */ void itBox_UnkMotion1_Phys(Item_GObj* gobj);
/* 286754 */ bool itBox_UnkMotion1_Coll(Item_GObj* gobj);
/* 286780 */ void itBox_Logic1_PickedUp(Item_GObj*);
/* 2867A8 */ bool itBox_UnkMotion2_Anim(Item_GObj* gobj);
/* 2867B0 */ void itBox_UnkMotion2_Phys(Item_GObj* gobj);
/* 2867B4 */ void itBox_Logic1_Thrown(Item_GObj*);
/* 2867F0 */ void itBox_UnkMotion4_Phys(Item_GObj* gobj);
/* 28683C */ bool itBox_UnkMotion3_Coll(Item_GObj* gobj);
/* 286964 */ void itBox_Logic1_Dropped(Item_GObj*);
/* 2869A0 */ bool itBox_UnkMotion4_Coll(Item_GObj* gobj);
/* 286AA4 */ void it_80286AA4(Item_GObj*);
/* 286B74 */ bool itBox_UnkMotion6_Anim(Item_GObj* gobj);
/* 286B94 */ void itBox_UnkMotion6_Phys(Item_GObj* gobj);
/* 286B98 */ bool itBox_UnkMotion6_Coll(Item_GObj* gobj);
/* 286BA0 */ void it_80286BA0(Item_GObj*);
/* 286C7C */ bool itBox_UnkMotion7_Anim(Item_GObj* gobj);
/* 286CA8 */ void itBox_UnkMotion7_Phys(Item_GObj* gobj);
/* 286CAC */ bool itBox_UnkMotion7_Coll(Item_GObj* gobj);
/* 286CB4 */ bool itBox_Logic1_DmgDealt(Item_GObj*);
/* 286D48 */ bool itBox_Logic1_Clanked(Item_GObj*);
/* 286DDC */ bool itBox_Logic1_HitShield(Item_GObj*);
/* 286E70 */ bool itBox_Logic1_Reflected(Item_GObj*);
/* 286F04 */ bool itBox_Logic1_DmgReceived(Item_GObj*);
/* 286FC8 */ void itBox_Logic1_EnteredAir(Item_GObj*);
/* 287044 */ bool itBox_UnkMotion5_Anim(Item_GObj* gobj);
/* 28704C */ void itBox_UnkMotion5_Phys(Item_GObj* gobj);
/* 287050 */ bool itBox_UnkMotion5_Coll(Item_GObj* gobj);
/* 287084 */ void itBox_Logic1_EvtUnk(Item_GObj*, Item_GObj*);
/* 2870A4 */ void it_802870A4(Item_GObj*);
/* 287104 */ bool itBox_UnkMotion8_Anim(Item_GObj* gobj);
/* 28710C */ void itBox_UnkMotion8_Phys(Item_GObj* gobj);
/* 287334 */ bool itBox_UnkMotion8_Coll(Item_GObj* gobj);
/* 28733C */ void it_8028733C(Item_GObj*);
/* 3F5850 */ extern ItemStateTable it_803F5850[];
#define GALE01_27CF00
/* 27CF00 */ void itCapsule_Logic0_Spawned(Item_GObj*);
/* 27CF30 */ void it_8027CF30(Item_GObj*);
/* 27CFE8 */ void it_8027CFE8(Item_GObj*);
/* 27D0B8 */ void it_8027D0B8(Item_GObj*);
/* 27D110 */ bool itCapsule_UnkMotion0_Anim(Item_GObj*);
/* 27D118 */ void itCapsule_UnkMotion0_Phys(Item_GObj*);
/* 27D11C */ bool itCapsule_UnkMotion0_Coll(Item_GObj*);
/* 27D148 */ void it_8027D148(Item_GObj*);
/* 27D170 */ bool itCapsule_UnkMotion4_Anim(Item_GObj*);
/* 27D178 */ void itCapsule_UnkMotion4_Phys(Item_GObj*);
/* 27D1A8 */ bool itCapsule_UnkMotion4_Coll(Item_GObj*);
/* 27D1D4 */ void itCapsule_Logic0_PickedUp(Item_GObj*);
/* 27D1FC */ bool itCapsule_UnkMotion2_Anim(Item_GObj*);
/* 27D204 */ void itCapsule_UnkMotion2_Phys(Item_GObj*);
/* 27D208 */ void itCapsule_Logic0_Dropped(Item_GObj*);
/* 27D230 */ void itCapsule_Logic0_Thrown(Item_GObj*);
/* 27D258 */ void itCapsule_UnkMotion3_Phys(Item_GObj*);
/* 27D2A4 */ bool itCapsule_UnkMotion3_Coll(Item_GObj*);
/* 27D2DC */ void it_8027D2DC(Item_GObj*);
/* 27D30C */ bool itCapsule_UnkMotion5_Anim(Item_GObj*);
/* 27D32C */ void itCapsule_UnkMotion5_Phys(Item_GObj*);
/* 27D330 */ bool itCapsule_UnkMotion5_Coll(Item_GObj*);
/* 27D338 */ bool itCapsule_Logic0_DmgDealt(Item_GObj*);
/* 27D414 */ bool itCapsule_Logic0_DmgReceived(Item_GObj*);
/* 27D450 */ void itCapsule_Logic0_EnteredAir(Item_GObj*);
/* 27D478 */ bool itCapsule_UnkMotion6_Anim(Item_GObj*);
/* 27D480 */ void itCapsule_UnkMotion6_Phys(Item_GObj*);
/* 27D484 */ bool itCapsule_UnkMotion6_Coll(Item_GObj*);
/* 27D4B8 */ bool itCapsule_Logic0_Clanked(Item_GObj*);
/* 27D4F4 */ bool itCapsule_Logic0_Reflected(Item_GObj*);
/* 27D530 */ bool itCapsule_Logic0_HitShield(Item_GObj*);
/* 27D614 */ bool itCapsule_Logic0_ShieldBounced(Item_GObj*);
/* 27D650 */ void itCapsule_Logic0_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F5468 */ extern ItemStateTable it_803F5468[];
#define GALE01_2D3EF8
/* 2D3EF8 */ void itCerebi_Logic23_Spawned(Item_GObj*);
/* 2D3F4C */ void it_802D3F4C(Item_GObj*, Item_GObj*);
/* 3F80F8 */ extern ItemStateTable it_803F80F8[];
#define GALE01_2C9588
/* 2C9588 */ void it_802C9588(Item_GObj*);
/* 2C9618 */ void it_802C9618(HSD_GObj*);
/* 2C961C */ void itChicorita_Logic1_EvtUnk(Item_GObj*, HSD_GObj*);
/* 2C963C */ void it_802C963C(HSD_GObj*);
/* 2C9670 */ void it_802C9670(Item_GObj*);
/* 2C96CC */ bool itChicorita_UnkMotion0_Anim(HSD_GObj*);
/* 2C9798 */ void itChicorita_UnkMotion0_Phys(HSD_GObj*);
/* 2C9850 */ bool itChicorita_UnkMotion0_Coll(HSD_GObj*);
/* 2C989C */ void it_802C989C(HSD_GObj*);
/* 2C98E4 */ void it_802C98E4(Item_GObj*);
/* 2C990C */ bool itChicorita_UnkMotion1_Anim(HSD_GObj*);
/* 2C9970 */ void itChicorita_UnkMotion1_Phys(HSD_GObj*);
/* 2C9A28 */ bool itChicorita_UnkMotion1_Coll(HSD_GObj*);
/* 2C9A74 */ void it_802C9A74(Item_GObj*);
/* 2C9AB4 */ bool itChicorita_UnkMotion2_Anim(HSD_GObj*);
/* 2C9AD8 */ void itChicorita_UnkMotion2_Phys(HSD_GObj*);
/* 2C9AF8 */ bool itChicorita_UnkMotion2_Coll(HSD_GObj*);
/* 2C9B20 */ void it_802C9B20(Item_GObj*);
/* 2C9C20 */ void itChicoritaLeaf_Logic30_Spawned(Item_GObj*);
/* 2C9C78 */ bool itChicoritaLeaf_Logic30_HitShield(Item_GObj*);
/* 2C9C80 */ void itChicoritaLeaf_Logic30_EvtUnk(Item_GObj*, HSD_GObj*);
/* 2C9CA0 */ bool itChicoritaLeaf_Logic30_Reflected(Item_GObj*);
/* 2C9CC0 */ void it_802C9CC0(Item_GObj*);
/* 2C9CE8 */ bool itChicoritaleaf_UnkMotion0_Anim(HSD_GObj*);
/* 2C9D1C */ void itChicoritaleaf_UnkMotion0_Phys(HSD_GObj*);
/* 2C9D20 */ bool itChicoritaleaf_UnkMotion0_Coll(HSD_GObj*);
/* 3F7A98 */ extern ItemStateTable it_803F7A98[];
/* 3F7AC8 */ extern ItemStateTable it_803F7AC8[];
#define GALE01_2C2144
/* 2C2144 */ Item_GObj* itClimbersBlizzard_Spawn(Item_GObj*, Vec3*, f32);
/* 2C2248 */ void itClimbersBlizzard_802C2248(Item_GObj*);
/* 2C2358 */ void itClimbersBlizzard_802C2358(Item_GObj* gobj);
/* 2C2424 */ bool itClimbersBlizzard_DmgDealt(Item_GObj*);
/* 2C242C */ bool itClimbersBlizzard_Reflected(Item_GObj*);
/* 2C244C */ bool itClimbersBlizzard_Clanked(Item_GObj*);
/* 2C2454 */ bool itClimbersBlizzard_HitShield(Item_GObj*);
/* 2C245C */ bool itClimbersBlizzard_Absorbed(Item_GObj*);
/* 2C2464 */ bool itClimbersBlizzard_ShieldBounced(Item_GObj*);
/* 2C246C */ void itClimbersBlizzard_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F76A8 */ extern ItemStateTable it_803F76A8[];
#define GALE01_2C1590
/* 2C1590 */ Item_GObj* it_802C1590(Item_GObj*, Vec3*, enum_t,
                                    float facing_dir);
/* 2C16F8 */ void it_802C16F8(Item_GObj*);
/* 2C17DC */ void it_802C17DC(Item_GObj*);
/* 2C17FC */ void it_2725_Logic90_Destroyed(Item_GObj*);
/* 2C1854 */ bool it_802C1854(Item_GObj* gobj);
/* 2C1950 */ void it_802C1950(Item_GObj*);
/* 2C198C */ bool itClimbersice_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C1A14 */ void itClimbersice_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C1A18 */ bool itClimbersice_UnkMotion0_Coll(Item_GObj* gobj);
/* 2C1A58 */ void it_802C1A58(Item_GObj* gobj);
/* 2C1A80 */ bool itClimbersice_UnkMotion1_Anim(Item_GObj* gobj);
/* 2C1A88 */ void itClimbersice_UnkMotion1_Phys(Item_GObj* gobj);
/* 2C1AB8 */ bool itClimbersice_UnkMotion1_Coll(Item_GObj* gobj);
/* 2C1AE4 */ void it_802C1AE4(Item_GObj* gobj);
/* 2C1B80 */ bool itClimbersice_UnkMotion2_Anim(Item_GObj* gobj);
/* 2C1BB4 */ void itClimbersice_UnkMotion2_Phys(Item_GObj* gobj);
/* 2C1C7C */ bool itClimbersice_UnkMotion2_Coll(Item_GObj* gobj);
/* 2C1D44 */ void fn_802C1D44(Item_GObj*);
/* 2C1D80 */ bool itClimbersice_UnkMotion3_Anim(Item_GObj* gobj);
/* 2C1DB4 */ void itClimbersice_UnkMotion3_Phys(Item_GObj* gobj);
/* 2C1E94 */ bool itClimbersice_UnkMotion3_Coll(Item_GObj* gobj);
/* 2C1FC8 */ bool itClimbersIce_Logic90_DmgDealt(Item_GObj*);
/* 2C1FD0 */ bool itClimbersIce_Logic90_Reflected(Item_GObj*);
/* 2C1FF0 */ bool itClimbersIce_Logic90_Clanked(Item_GObj*);
/* 2C1FF8 */ bool it_2725_Logic90_HitShield(Item_GObj*);
/* 2C20E4 */ bool itClimbersIce_Logic90_Absorbed(Item_GObj*);
/* 2C20EC */ bool itClimbersIce_Logic90_ShieldBounced(Item_GObj*);
/* 2C210C */ void itClimbersIce_Logic90_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7668 */ extern ItemStateTable it_803F7668[];
#define GALE01_2C248C
/* 2C2DB0 */ void it_802C2DB0(ItemLink*, Vec3*, itClimbersStringAttributes*,
                              f32);
/* 2C2EC4 */ s32 it_802C2EC4(ItemLink*, Vec3*, itClimbersStringAttributes*,
                             Item*);
/* 2C30E8 */ s32 it_802C30E8(ItemLink*, Vec3*, itClimbersStringAttributes*,
                             Item*);
/* 2C32D4 */ bool it_802C32D4(ItemLink*, Vec3*, itClimbersStringAttributes*,
                              Item*, f32);
/* 2C3520 */ void it_802C3520(Item*, Vec3*);
/* 2C37BC */ void it_2725_Logic70_PickedUp(Item_GObj* gobj);
/* 2C2750 */ void it_802C2750(Item_GObj*);
/* 2C27D4 */ Item_GObj* it_802C27D4(Fighter_GObj*, Vec3*, int msid, float dir);
/* 2C28B8 */ void fn_802C28B8(Item_GObj* gobj);
/* 2C2BF0 */ bool itClimbersstring_UnkMotion3_Anim(Item_GObj* gobj);
/* 2C2CA8 */ void it_802C2CA8(ItemLink* link, Vec3* target,
                              itClimbersStringAttributes* attrs, f32 length);
/* 2C3810 */ void it_802C3810(Item_GObj* gobj);
/* 2C3864 */ void it_802C3864(Item_GObj* gobj);
/* 2C3950 */ void it_802C3950(Item_GObj* gobj);
/* 2C3AA4 */ void it_2725_Logic70_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F76B8 */ extern ItemStateTable it_803F76B8[];
#define GALE01_2F13B4
/* 2F13B4 */ void it_802F13B4(HSD_GObj*, intptr_t);
/* 2F14E4 */ void itCoin_Logic116_Spawned(Item_GObj*);
/* 2F1518 */ void itCoin_Logic116_Destroyed(Item_GObj*);
/* 2F1888 */ void itCoin_Logic116_PickedUp(Item_GObj*);
/* 2F18F0 */ void itCoin_Logic116_EvtUnk(Item_GObj*, Item_GObj*);
/* 2F1910 */ bool itCoin_Logic116_DmgReceived(Item_GObj*);
/* 2F1CE0 */ void itCoin_Logic116_Thrown(Item_GObj*);
/* 2F1F48 */ void itCoin_Logic116_EnteredAir(Item_GObj*);
/* 2F2014 */ void it_802F2014(Item_GObj*, int);
/* 2F2020 */ int it_802F2020(Item_GObj*);
/* 2F202C */ void it_802F202C(Item_GObj*);
/* 2F2094 */ Item_GObj* it_802F2094(HSD_GObj*, Vec3*, int, int);
/* 3F93C8 */ extern ItemStateTable it_803F93C8[];
#define GALE01_2F0F6C
/* 2F0F6C */ void it_802F0F6C(Fighter_GObj* owner, Vec3* prev_pos, Vec3* pos,
                              ItemKind kind, f32 facing_dir);
/* 2F1030 */ void it_802F1030(Item_GObj* gobj);
/* 2F1094 */ void itCrazyHandBomb_Logic86_EvtUnk(Item_GObj*, Item_GObj*);
/* 2F10B4 */ bool itCrazyHandBomb_Logic86_DmgDealt(Item_GObj* gobj);
/* 2F10D8 */ bool itCrazyHandBomb_Logic86_Reflected(Item_GObj*);
/* 2F10F8 */ void it_802F10F8(Item_GObj* gobj);
/* 2F1168 */ bool itCrazyhandbomb_UnkMotion0_Anim(Item_GObj* gobj);
/* 2F1170 */ void itCrazyhandbomb_UnkMotion0_Phys(Item_GObj* gobj);
/* 2F1304 */ bool itCrazyhandbomb_UnkMotion0_Coll(Item_GObj* gobj);
/* 2F1340 */ void it_802F1340(void);
/* 2F1344 */ void it_802F1344(Item_GObj* gobj);
/* 2F1384 */ bool itCrazyhandbomb_UnkMotion1_Anim(Item_GObj* gobj);
/* 2F13A4 */ void itCrazyhandbomb_UnkMotion1_Phys(Item_GObj* gobj);
/* 2F13A8 */ bool itCrazyhandbomb_UnkMotion1_Coll(Item_GObj* gobj);
/* 2F13B0 */ void it_802F13B0(HSD_GObj* gobj);
/* 3F93A8 */ extern ItemStateTable it_803F93A8[];
#define GALE01_293A08
void itDKinoko_Logic27_Spawned(Item_GObj*);
void it_80293A70(Item_GObj*);
bool itDkinoko_UnkMotion0_Anim(Item_GObj*);
void itDkinoko_UnkMotion0_Phys(Item_GObj*);
bool itDkinoko_UnkMotion0_Coll(Item_GObj*);
void it_80293BE8(Item_GObj*);
void it_80293C10(Item_GObj*);
bool itDkinoko_UnkMotion1_Anim(Item_GObj*);
void itDkinoko_UnkMotion1_Phys(Item_GObj*);
bool itDkinoko_UnkMotion1_Coll(Item_GObj*);
bool itDKinoko_Logic27_DmgDealt(Item_GObj*);
void itDKinoko_Logic27_EvtUnk(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F6130[];
#define GALE01_281164
/// Keep this if it is NOT defined in itCommonItems.h or similar.
/// If you get a redefinition error for this too, remove it.
typedef struct itDoseiAttributes {
    f32 unk0;
    s32 unk4;
    f32 unk8;
    s32 unkC;
    s32 unk10;
    s32 unk14;
} itDoseiAttributes;
/* 281164 */ void itDosei_Logic7_Spawned(Item_GObj*);
/* 281390 */ void itDosei_80281390(Item_GObj*);
/* 2813F8 */ bool itDosei_UnkMotion0_Anim(Item_GObj* gobj);
/* 2816F0 */ void itDosei_UnkMotion0_Phys(Item_GObj* gobj);
/* 2816F4 */ bool itDosei_UnkMotion0_Coll(Item_GObj* gobj);
/* 281734 */ void itDosei_80281734(Item_GObj* gobj);
/* 2817A0 */ void itDosei_802817A0(Item_GObj*);
/* 281AB4 */ bool itDosei_UnkMotion1_Anim(Item_GObj* gobj);
/* 281B44 */ void itDosei_UnkMotion1_Phys(Item_GObj* gobj);
/* 281B7C */ bool itDosei_UnkMotion1_Coll(Item_GObj* gobj);
/* 281C6C */ void itDosei_80281C6C(Item_GObj* gobj);
/* 281D00 */ bool itDosei_UnkMotion2_Anim(Item_GObj* gobj);
/* 281E30 */ void itDosei_UnkMotion2_Phys(Item_GObj* gobj);
/* 281E34 */ bool itDosei_UnkMotion2_Coll(Item_GObj* gobj);
/* 282074 */ void itDosei_80282074(Item_GObj* gobj);
/* 2820CC */ bool itDosei_UnkMotion3_Anim(Item_GObj* gobj);
/* 282130 */ void itDosei_UnkMotion3_Phys(Item_GObj* gobj);
/* 282160 */ bool itDosei_UnkMotion5_Coll(Item_GObj* gobj);
/* 28218C */ void itDosei_Logic7_PickedUp(Item_GObj*);
/* 2824B8 */ bool itDosei_UnkMotion4_Anim(Item_GObj* gobj);
/* 2826F4 */ void itDosei_UnkMotion4_Phys(Item_GObj* gobj);
/* 2826F8 */ void itDosei_Logic7_Dropped(Item_GObj*);
/* 2829FC */ void itDosei_Logic7_Thrown(Item_GObj*);
/* 282AC0 */ bool itDosei_UnkMotion5_Anim(Item_GObj* gobj);
/* 282AC8 */ void itDosei_UnkMotion5_Phys(Item_GObj* gobj);
/* 282B14 */ void itDosei_Logic7_EnteredAir(Item_GObj*);
/* 282B84 */ bool itDosei_UnkMotion6_Anim(Item_GObj* gobj);
/* 282BA8 */ void itDosei_UnkMotion6_Phys(Item_GObj* gobj);
/* 282BAC */ bool itDosei_UnkMotion6_Coll(Item_GObj* gobj);
/* 282BFC */ void itDosei_80282BFC(Item_GObj* gobj);
/* 282C54 */ bool itDosei_UnkMotion8_Anim(Item_GObj* gobj);
/* 282C78 */ void itDosei_UnkMotion8_Phys(Item_GObj* gobj);
/* 282CA8 */ bool itDosei_UnkMotion8_Coll(Item_GObj* gobj);
/* 282CD4 */ void itDosei_80282CD4(Item_GObj*);
/* 282D48 */ bool itDosei_UnkMotion7_Anim(Item_GObj* gobj);
/* 282DA0 */ void itDosei_UnkMotion7_Phys(Item_GObj* gobj);
/* 282DA4 */ bool itDosei_UnkMotion7_Coll(Item_GObj* gobj);
/* 2830F4 */ bool itDosei_UnkMotion9_Anim(Item_GObj* gobj);
/* 2832A8 */ void itDosei_UnkMotion9_Phys(Item_GObj* gobj);
/* 2832AC */ bool itDosei_UnkMotion9_Coll(Item_GObj* gobj);
/* 283504 */ bool itDosei_UnkMotion10_Anim(Item_GObj* gobj);
/* 283550 */ void itDosei_UnkMotion10_Phys(Item_GObj* gobj);
/* 283554 */ bool itDosei_UnkMotion10_Coll(Item_GObj* gobj);
/* 283588 */ bool itDosei_Logic7_DmgReceived(Item_GObj*);
/* 2838FC */ bool itDosei_UnkMotion11_Anim(Item_GObj* gobj);
/* 283960 */ void itDosei_UnkMotion11_Phys(Item_GObj* gobj);
/* 283990 */ bool itDosei_UnkMotion11_Coll(Item_GObj* gobj);
/* 2839BC */ bool itDosei_Logic7_DmgDealt(Item_GObj*);
/* 283A3C */ bool itDosei_Logic7_Reflected(Item_GObj*);
/* 283A5C */ bool itDosei_Logic7_Clanked(Item_GObj*);
/* 283A80 */ bool itDosei_Logic7_HitShield(Item_GObj*);
/* 283AA4 */ bool itDosei_Logic7_ShieldBounced(Item_GObj*);
/* 283AC4 */ void itDosei_Logic7_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F55D0 */ extern ItemStateTable it_803F55D0[];
#define GALE01_2C0510
/* 2C0510 */ void itDrMarioPill_Spawn(Item_GObj*, Vec3*, s32, ItemKind, f32);
/* 2C0850 */ Item_GObj* itDrMarioPill_Appeal_Spawn(Item_GObj*, Vec3*, s32,
                                                   ItemKind, f32);
/* 2C0B5C */ void itDrMarioPill_802C0B5C(Item_GObj*);
/* 2C09C4 */ Item_GObj* itDrMarioPill_802C09C4(Fighter_GObj*, Vec3*, s32,
                                               ItemKind, s32, Fighter_Part,
                                               f32);
/* 2C0DBC */ void itDrMarioPill_802C0DBC(Item_GObj*);
/* 2C0DF8 */ void itDrMarioPill_802C0DF8(Item_GObj*);
/* 2C1180 */ void itDrMarioPill_802C1180(Item_GObj*, enum_t);
/* 2C11E0 */ void itDrMarioPill_PickedUp(Item_GObj*);
/* 2C1384 */ bool itDrMarioPill_DmgDealt(Item_GObj*);
/* 2C13CC */ bool itDrMarioPill_Reflected(Item_GObj*);
/* 2C1400 */ bool itDrMarioPill_Clanked(Item_GObj*);
/* 2C145C */ bool itDrMarioPill_HitShield(Item_GObj*);
/* 2C14B8 */ bool itDrMarioPill_Absorbed(Item_GObj*);
/* 2C1514 */ bool itDrMarioPill_ShieldBounced(Item_GObj*);
/* 2C1570 */ void itDrMarioPill_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F75D0 */ extern ItemStateTable it_803F75D0[];
#define GALE01_288C88
/* 288C88 */ Item_GObj* it_80288C88(HSD_GObj* arg_gobj, Vec3* pos, Vec3* vel,
                                    float dir);
/* 288D98 */ void itEgg_Logic3_Spawned(Item_GObj*);
/* 288F88 */ void itEgg_Logic3_PickedUp(Item_GObj*);
/* 288FBC */ void itEgg_Logic3_Dropped(Item_GObj*);
/* 288FDC */ void itEgg_Logic3_Thrown(Item_GObj*);
/* 289218 */ bool itEgg_Logic3_DmgDealt(Item_GObj*);
/* 2893D4 */ bool itEgg_Logic3_Clanked(Item_GObj*);
/* 289470 */ bool itEgg_Logic3_HitShield(Item_GObj*);
/* 28950C */ bool itEgg_Logic3_Reflected(Item_GObj*);
/* 2895A8 */ bool itEgg_Logic3_DmgReceived(Item_GObj*);
/* 289644 */ void itEgg_Logic3_EnteredAir(Item_GObj*);
/* 2896AC */ void itEgg_Logic3_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5988 */ extern ItemStateTable it_803F5988[];
#define GALE01_2CF3E0
void it_802CF3E0(Item_GObj*);
void it_802CF44C(Item_GObj*);
void it_802CF450(Item_GObj*, Item_GObj*);
void it_802CF470(Item_GObj*);
void it_802CF4D4(Item_GObj*);
bool itEntei_UnkMotion0_Anim(Item_GObj*);
void itEntei_UnkMotion0_Phys(Item_GObj*);
bool itEntei_UnkMotion0_Coll(Item_GObj*);
void it_802CF6C8(Item_GObj*);
void it_802CF744(Item_GObj*);
bool itEntei_UnkMotion1_Anim(Item_GObj*);
void itEntei_UnkMotion1_Phys(Item_GObj*);
bool itEntei_UnkMotion1_Coll(Item_GObj*);
extern ItemStateTable it_803F7DC8[];
#define GALE01_29B0C8
/* 29B0C8 */ void itEvYoshiEgg_Spawn(Vec3*);
/* 29B188 */ void itEvYoshiEgg_Logic42_Destroyed(Item_GObj*);
/* 29B1AC */ void itEvYoshiEgg_Logic42_Spawned(Item_GObj* gobj);
/* 29B1D8 */ void it_8029B1D8(Item_GObj*);
/* 29B230 */ bool itEvyoshiegg_UnkMotion0_Anim(Item_GObj* gobj);
/* 29B238 */ void itEvyoshiegg_UnkMotion0_Phys(Item_GObj* gobj);
/* 29B23C */ bool itEvyoshiegg_UnkMotion0_Coll(Item_GObj* gobj);
/* 29B268 */ void it_8029B268(Item_GObj* gobj);
/* 29B290 */ bool itEvyoshiegg_UnkMotion3_Anim(Item_GObj* gobj);
/* 29B298 */ void itEvyoshiegg_UnkMotion1_Phys(Item_GObj* gobj);
/* 29B2C8 */ bool itEvyoshiegg_UnkMotion1_Coll(Item_GObj* gobj);
/* 29B2F4 */ void itEvYoshiEgg_Logic42_PickedUp(Item_GObj*);
/* 29B31C */ bool itEvyoshiegg_UnkMotion2_Anim(Item_GObj* gobj);
/* 29B324 */ void itEvyoshiegg_UnkMotion2_Phys(Item_GObj* gobj);
/* 29B328 */ void itEvYoshiEgg_Logic42_Dropped(Item_GObj*);
/* 29B348 */ void itEvYoshiEgg_Logic42_Thrown(Item_GObj*);
/* 29B370 */ void itEvyoshiegg_UnkMotion3_Phys(Item_GObj* gobj);
/* 29B3BC */ bool itEvyoshiegg_UnkMotion3_Coll(Item_GObj* gobj);
/* 29B400 */ bool itEvyoshiegg_UnkMotion5_Anim(Item_GObj* gobj);
/* 29B460 */ void itEvyoshiegg_UnkMotion5_Phys(Item_GObj* gobj);
/* 29B464 */ bool itEvyoshiegg_UnkMotion5_Coll(Item_GObj* gobj);
/* 29B46C */ bool it_3F14_Logic42_DmgDealt(Item_GObj*);
/* 29B4AC */ bool it_3F14_Logic42_Clanked(Item_GObj*);
/* 29B4EC */ bool it_3F14_Logic42_HitShield(Item_GObj*);
/* 29B52C */ bool it_3F14_Logic42_Reflected(Item_GObj*);
/* 29B56C */ bool itEvYoshiEgg_Logic42_DmgReceived(Item_GObj*);
/* 29B670 */ void itEvYoshiEgg_Logic42_EnteredAir(Item_GObj*);
/* 29B698 */ bool itEvyoshiegg_UnkMotion4_Anim(Item_GObj* gobj);
/* 29B6A0 */ void itEvyoshiegg_UnkMotion4_Phys(Item_GObj* gobj);
/* 29B6A4 */ bool itEvyoshiegg_UnkMotion4_Coll(Item_GObj* gobj);
/* 29B6D8 */ void itEvYoshiEgg_Logic42_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6728 */ extern ItemStateTable it_803F6728[];
#define GALE01_292D48
/* 292D48 */ Item_GObj* it_80292D48(Vec3*);
/* 292E04 */ void itFFlower_Logic25_Spawned(Item_GObj*);
/* 292E64 */ void it_80292E64(Item_GObj*);
/* 292EAC */ void it_80292EAC(Item_GObj*);
/* 292EF8 */ void it_80292EF8(Item_GObj*, Vec3*);
/* 292F14 */ void it_80292F14(Item_GObj*, Vec3*, f32);
/* 293284 */ void itFFlower_Logic25_PickedUp(Item_GObj*);
/* 2933C4 */ void itFFlower_Logic25_Dropped(Item_GObj*);
/* 2933EC */ void itFFlower_Logic25_Thrown(Item_GObj*);
/* 293488 */ bool itFFlower_Logic25_DmgDealt(Item_GObj*);
/* 2934AC */ bool itFFlower_Logic25_Clanked(Item_GObj*);
/* 2934D0 */ bool itFFlower_Logic25_HitShield(Item_GObj*);
/* 2934F4 */ bool itFFlower_Logic25_Reflected(Item_GObj*);
/* 293514 */ bool itFFlower_Logic25_ShieldBounced(Item_GObj*);
/* 293534 */ void itFFlower_Logic25_EnteredAir(Item_GObj*);
/* 293640 */ void itFFlower_Logic25_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6090 */ extern ItemStateTable it_803F6090[];
#define GALE01_29A748
/* 29A748 */ HSD_GObj* it_8029A748(Item_GObj*, Vec3*, Fighter_Part, f32);
/* 29A89C */ void it_8029A89C(Item_GObj*, f32);
/* 29A8F4 */ void it_8029A8F4(Item_GObj*, Vec3*);
/* 29A9FC */ void itFFlowerFlame_Logic41_Spawned(Item_GObj*);
/* 29AD1C */ void itFFlowerFlame_Logic41_PickedUp(Item_GObj*);
/* 29AD94 */ void itFFlowerFlame_Logic41_Dropped(Item_GObj*);
/* 29AF34 */ void itFFlowerFlame_Logic41_EnteredAir(Item_GObj*);
/* 29B0A8 */ void itFFlowerFlame_Logic41_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F66C8 */ extern ItemStateTable it_803F66C8[];
#define GALE01_2CC6E4
/* 2CC6E4 */ void itFire_Logic6_Spawned(Item_GObj*);
/* 2CC740 */ void it_802CC740(Item_GObj*);
/* 2CC744 */ void itFire_Logic6_EvtUnk(Item_GObj*, Item_GObj*);
/* 2CC764 */ bool itFire_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CC7A4 */ void itFire_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CC7A8 */ bool itFire_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CC7D4 */ void it_802CC7D4(Item_GObj*);
/* 2CC7D8 */ void it_802CC7D8(Item_GObj*);
/* 2CC860 */ bool itFire_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CC91C */ void itFire_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CC93C */ bool itFire_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CC944 */ void it_802CC944(Item_GObj* gobj);
/* 2CC9B8 */ bool itFire_UnkMotion0_Anim(Item_GObj* gobj);
/* 2CC9DC */ void itFire_UnkMotion0_Phys(Item_GObj* gobj);
/* 2CCA8C */ bool itFire_UnkMotion0_Coll(Item_GObj* gobj);
/* 3F7C10 */ extern ItemStateTable it_803F7C10[];
/**
 * @file
 * @brief Flipper item (@c It_Kind_Flipper) -- the pinball paddle.
 *
 * @note These names were determined by Claude (an AI), not recovered from an
 * original author; treat them as tentative until confirmed by a human. Each
 * symbol keeps an @c \@alias tag recording the machine-generated name it
 * replaced (revertible with @c melee-replace-symbols), and the superscript
 * markers in the briefs are footnotes into @ref itflipper_naming, where the
 * supporting debugger experiment for each name is recorded.
 */
#define GALE01_290938
/**

 * Motion-state ids written to the item's motion state through
 * @c Item_80268E5C; each value equals the @c UnkMotionN callback index it was
 * named from. The id-to-meaning map -- 0 resting, 1 falling, 2 held,
 * 3 in-flight, 4 airborne, 5 active, 6 spinning -- was recovered by
 * watch-pointing the motion state across a full lifecycle.<sup>[\ref fp_f1
 * "F1"]</sup>
 */
typedef enum itFlipper_MotionState {
    FLIPPER_MS_RESTING,
    FLIPPER_MS_FALLING,
    FLIPPER_MS_HELD,
    FLIPPER_MS_INFLIGHT,
    FLIPPER_MS_AIRBORNE,
    FLIPPER_MS_ACTIVE,
    FLIPPER_MS_SPINNING,
} itFlipper_MotionState;
/**
 * Spawns a flipper pinned to a stage joint @p jobj (Break-the-Targets
 * obstacles): stores it in @c xDEC_stageAnchor, sets @c xDE8_isStageFixed,
 * and settles it.<sup>[\ref fp_e6 "E6"]</sup>
 * @alias{it_80290938}
 */
/* 290938 */ HSD_GObj* itFlipper_Spawn(HSD_JObj*);
/**
 * Logic-20 spawn callback: zero-initializes the itemVars and enters the
 * falling state.
 * @alias{itFlipper_Logic20_Spawned}
 */
/* 290A20 */ void itFlipper_Spawned(Item_GObj*);
/**
 * Advances the paddle spin one frame: decays @c xDE4_spinVel toward 0, adds
 * it into @c xDE0_spinAngle, and applies that as an X rotation.<sup>[\ref
 * fp_e3 "E3"]</sup>
 * @alias{it_80290A7C}
 */
/* 290A7C */ void itFlipper_UpdateSpin(Item_GObj*);
/**
 * Adds a spin impulse directed by the contact point @p pos, clamped to
 * +/- @c x24_maxSpinVel.<sup>[\ref fp_e3 "E3"], [\ref fp_e4 "E4"]</sup>
 * @alias{it_80290C38}
 */
/* 290C38 */ void itFlipper_AddSpinImpulse(Item_GObj*, Vec3*, f32);
/**
 * Derives the spin impulse from the striking fighter's speed and applies it
 * via itFlipper_AddSpinImpulse(), reading the fighter from
 * @c xCF4_fighterGObjUnk (the dealt-damage side).<sup>[\ref fp_e4 "E4"]</sup>
 * @alias{it_80290CE8}
 */
/* 290CE8 */ void itFlipper_SpinFromFighter(Item_GObj*);
/**
 * Pushes the flipper away from @p pos with a fixed 0.2 impulse, only when
 * @p kind is @c It_Kind_Flipper (0x14).<sup>[\ref fp_f2 "F2"]</sup>
 * @alias{it_80290DD4}
 */
/* 290DD4 */ void itFlipper_Repel(Item_GObj* gobj, s32 kind, Vec3* pos);
/**
 * Resets the flipper's velocity and enters the resting state (motion state
 * 0).<sup>[\ref fp_f1 "F1"]</sup>
 * @alias{it_80290E78}
 */
/* 290E78 */ void itFlipper_EnterResting(Item_GObj*);
/**
 * Animate callback for the resting state (motion state 0).
 * @alias{itFlipper_UnkMotion0_Anim}
 */
/* 290EC8 */ bool itFlipper_Resting_Anim(Item_GObj* gobj);
/**
 * Physics callback for the resting state (motion state 0).
 * @alias{itFlipper_UnkMotion0_Phys}
 */
/* 290ED0 */ void itFlipper_Resting_Phys(Item_GObj* gobj);
/**
 * Collision callback for the resting state (motion state 0): falls again if
 * the ground vanishes.
 * @alias{itFlipper_UnkMotion0_Coll}
 */
/* 290ED4 */ bool itFlipper_Resting_Coll(Item_GObj* gobj);
/**
 * Enters the falling state (motion state 1).<sup>[\ref fp_f1 "F1"]</sup>
 * @alias{it_80290F00}
 */
/* 290F00 */ void itFlipper_EnterFalling(Item_GObj* gobj);
/**
 * Animate callback for the falling state (motion state 1).
 * @alias{itFlipper_UnkMotion1_Anim}
 */
/* 290F28 */ bool itFlipper_Falling_Anim(Item_GObj* gobj);
/**
 * Physics callback for the falling state (motion state 1): applies gravity
 * toward terminal speed.
 * @alias{itFlipper_UnkMotion1_Phys}
 */
/* 290F30 */ void itFlipper_Falling_Phys(Item_GObj* gobj);
/**
 * Collision callback for the falling state (motion state 1): rests on
 * landing.
 * @alias{itFlipper_UnkMotion1_Coll}
 */
/* 290F60 */ bool itFlipper_Falling_Coll(Item_GObj* gobj);
/**
 * Logic-20 pickup callback: enters the held state (motion state
 * 2).<sup>[\ref fp_f1 "F1"]</sup>
 * @alias{itFlipper_Logic20_PickedUp}
 */
/* 290F8C */ void itFlipper_PickedUp(Item_GObj*);
/**
 * Animate callback for the held state (motion state 2).
 * @alias{itFlipper_UnkMotion2_Anim}
 */
/* 290FB4 */ bool itFlipper_Held_Anim(Item_GObj* gobj);
/**
 * Physics callback for the held state (motion state 2).
 * @alias{itFlipper_UnkMotion2_Phys}
 */
/* 290FBC */ void itFlipper_Held_Phys(Item_GObj* gobj);
/**
 * Logic-20 drop callback: forwards to itFlipper_Thrown() -- a drop is handled
 * as a throw.
 * @alias{itFlipper_Logic20_Dropped}
 */
/* 290FC0 */ void itFlipper_Dropped(Item_GObj*);
/**
 * Logic-20 throw callback: loads @c xDD4_flightTimer from @c
 * x4_smashThrowDuration (smash) or @c x0_throwDuration (normal) and enters
 * the in-flight state.<sup>[\ref fp_e1 "E1"], [\ref fp_e2 "E2"]</sup>
 * @alias{itFlipper_Logic20_Thrown}
 */
/* 290FE0 */ void itFlipper_Thrown(Item_GObj*);
/**
 * Animate callback for the in-flight state (motion state 3): decrements
 * @c xDD4_flightTimer and settles the flipper at 0.<sup>[\ref fp_e2
 * "E2"]</sup>
 * @alias{itFlipper_UnkMotion3_Anim}
 */
/* 291068 */ bool itFlipper_Inflight_Anim(Item_GObj* gobj);
/**
 * Physics callback for the in-flight state (motion state 3): gravity plus
 * end-of-flight velocity damping.
 * @alias{itFlipper_UnkMotion3_Phys}
 */
/* 2910A8 */ void itFlipper_Inflight_Phys(Item_GObj* gobj);
/**
 * Collision callback for the in-flight state (motion state 3): bounces off
 * walls/ceiling by @c xC_wallBounce and the floor by
 * @c x10_floorBounce.<sup>[\ref fp_e5 "E5"]</sup>
 * @alias{itFlipper_UnkMotion3_Coll}
 */
/* 291188 */ bool itFlipper_Inflight_Coll(Item_GObj* gobj);
/**
 * Settles a thrown flipper into a stationary hazard: stops it, sets
 * @c xDD8_isSettled, loads @c xD44_lifeTimer from @c x8_lifetime, and enters
 * the active state.<sup>[\ref fp_e2 "E2"]</sup>
 * @alias{it_80291254}
 */
/* 291254 */ void itFlipper_Settle(Item_GObj*);
/**
 * Enters the active (settled, hitbox-armed) state (motion state
 * 5).<sup>[\ref fp_f1 "F1"]</sup>
 * @alias{it_8029131C}
 */
/* 29131C */ void itFlipper_EnterActive(Item_GObj* gobj);
/**
 * Per-frame update for the active flipper: advances the spin, damps leftover
 * velocity, ticks @c xDDC_hitboxTimer, and expires the item by lifetime
 * unless stage-fixed.<sup>[\ref fp_e3 "E3"], [\ref fp_e6 "E6"]</sup>
 * @alias{it_80291344}
 */
/* 291344 */ bool itFlipper_UpdateActive(Item_GObj* gobj);
/**
 * Animate callback for the active state (motion state 5): switches to
 * spinning while @c xDE4_spinVel is nonzero.
 * @alias{itFlipper_UnkMotion5_Anim}
 */
/* 2914C8 */ bool itFlipper_Active_Anim(Item_GObj* gobj);
/**
 * Animate callback for the spinning state (motion state 6): returns to active
 * once @c xDE4_spinVel reaches 0.
 * @alias{itFlipper_UnkMotion6_Anim}
 */
/* 29151C */ bool itFlipper_Spinning_Anim(Item_GObj* gobj);
/**
 * Physics callback for the spinning state (motion state 6): re-pins a
 * stage-fixed flipper to @c xDEC_stageAnchor each frame.<sup>[\ref fp_e6
 * "E6"]</sup>
 * @alias{itFlipper_UnkMotion6_Phys}
 */
/* 291570 */ void itFlipper_Spinning_Phys(Item_GObj* gobj);
/**
 * Collision callback for the spinning state (motion state 6).
 * @alias{itFlipper_UnkMotion6_Coll}
 */
/* 2915B4 */ bool itFlipper_Spinning_Coll(Item_GObj* gobj);
/**
 * Logic-20 "dealt damage" callback: bounces while airborne, or (once settled)
 * arms @c xDDC_hitboxTimer and kicks spin from the fighter via
 * @c xCF4_fighterGObjUnk.<sup>[\ref fp_e1 "E1"], [\ref fp_e3 "E3"], [\ref
 * fp_e4 "E4"]</sup>
 * @alias{it_3F14_Logic20_DmgDealt}
 */
/* 2915E8 */ bool itFlipper_DmgDealt(Item_GObj*);
/**
 * Logic-20 clank callback: same handling as itFlipper_DmgDealt().
 * @alias{it_3F14_Logic20_Clanked}
 */
/* 2917C8 */ bool itFlipper_Clanked(Item_GObj*);
/**
 * Logic-20 shield-hit callback: same handling as itFlipper_DmgDealt().
 * @alias{it_3F14_Logic20_HitShield}
 */
/* 2918A0 */ bool itFlipper_HitShield(Item_GObj*);
/**
 * Logic-20 reflected callback.
 * @alias{itFlipper_Logic20_Reflected}
 */
/* 291978 */ bool itFlipper_Reflected(Item_GObj*);
/**
 * Logic-20 shield-bounce callback.
 * @alias{itFlipper_Logic20_ShieldBounced}
 */
/* 291998 */ bool itFlipper_ShieldBounced(Item_GObj*);
/**
 * Logic-20 "received damage" callback: when settled, arms @c xDDC_hitboxTimer
 * and kicks spin from the attacking fighter via @c xCEC_fighterGObj (mirrors
 * itFlipper_DmgDealt()'s @c xCF4).<sup>[\ref fp_e1 "E1"]</sup>
 * @alias{it_3F14_Logic20_DmgReceived}
 */
/* 2919B8 */ bool itFlipper_DmgReceived(Item_GObj*);
/**
 * Logic-20 entered-air callback: enters the airborne state (motion state 4).
 * @alias{itFlipper_Logic20_EnteredAir}
 */
/* 291B58 */ void itFlipper_EnteredAir(Item_GObj*);
/**
 * Animate callback for the airborne state (motion state 4).
 * @alias{itFlipper_UnkMotion4_Anim}
 */
/* 291B80 */ bool itFlipper_Airborne_Anim(Item_GObj* gobj);
/**
 * Physics callback for the airborne state (motion state 4).
 * @alias{itFlipper_UnkMotion4_Phys}
 */
/* 291B88 */ void itFlipper_Airborne_Phys(Item_GObj* gobj);
/**
 * Collision callback for the airborne state (motion state 4): rests or falls
 * on contact.
 * @alias{itFlipper_UnkMotion4_Coll}
 */
/* 291B8C */ bool itFlipper_Airborne_Coll(Item_GObj* gobj);
/**
 * Logic-20 event callback (purpose not yet identified).
 * @alias{itFlipper_Logic20_EvtUnk}
 */
/* 291BC0 */ void itFlipper_EvtUnk(Item_GObj*, Item_GObj*);
/**
 * The flipper's motion-state table: the per-state {animate, physics,
 * collision} callbacks indexed by #itFlipper_MotionState.
 * @alias{it_803F5EA8}
 */
/* 3F5EA8 */ extern ItemStateTable ItemStateTable_Flipper[];
#define GALE01_28F9D8
/* 28F9D8 */ void it_8028F9D8(Item_GObj* arg0, Vec3* arg1, f32 arg8);
/* 28FAF4 */ HSD_GObj* it_8028FAF4(Item_GObj* arg0, Vec3* arg1);
/* 28FBE4 */ void itFoods_Logic18_Spawned(Item_GObj* arg0);
/* 28FC5C */ void it_8028FC5C(HSD_GObj* arg0);
/* 28FD7C */ void itFoods_Logic18_PickedUp(Item_GObj* arg0);
/* 28FDE4 */ void itFoods_Logic18_Dropped(Item_GObj* arg0);
/* 28FE70 */ void itFoods_Logic18_EvtUnk(Item_GObj* arg0, Item_GObj* arg1);
/* 3F5DB0 */ extern ItemStateTable it_803F5DB0[];
#define GALE01_2ADDD0
/* 2ADDD0 */ void it_802ADDD0(Item_GObj* item_gobj, s32 visibility);
/* 2ADEF0 */ void it_802ADEF0(HSD_GObj* item_gobj);
/* 2ADF10 */ void it_802ADF10(HSD_GObj* item_gobj);
/* 2AE1D0 */ void it_802AE1D0(Item_GObj* item_gobj);
/* 2AE538 */ void it_802AE538(Item_GObj* item_gobj);
/* 2AE608 */ void it_802AE608(Item_GObj* item_gobj);
/* 2AE8A8 */ Item_GObj* it_802AE8A8(f32 facing_dir, Fighter_GObj* fighter_gobj,
                                    Vec3* arg2, Fighter_Part ft_part,
                                    ItemKind it_kind);
/* 2AE994 */ Item_GObj* it_802AE994(Fighter_GObj*, Fighter_Part, ItemKind);
/* 2AEAB4 */ void it_802AEAB4(Item_GObj* item_gobj);
/* 2AEB00 */ void itFoxBlaster_Logic96_PickedUp(Item_GObj*);
/* 2AF184 */ void itFoxBlaster_Logic96_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F6CA8 */ extern ItemStateTable it_803F6CA8[];
#define GALE01_29CD18
/* 29CD18 */ void it_8029CD18(HSD_GObj*, intptr_t);
/* 29CD78 */ HSD_JObj* it_8029CD78(Item_GObj*);
/* 29CEB4 */ Item_GObj* it_8029CEB4(HSD_GObj*, Vec3*, ItemKind, f32);
/* 29CF8C */ bool itFoxIllusion_Logic14_DmgDealt(Item_GObj*);
/* 29CFA0 */ void itFoxIllusion_Logic14_Destroyed(Item_GObj*);
/* 29CFF0 */ void it_8029CFF0(Item_GObj*);
/* 29D094 */ bool itFoxillusion_UnkMotion0_Anim(Item_GObj*);
/* 29D24C */ void itFoxillusion_UnkMotion0_Phys(Item_GObj*);
/* 29D488 */ bool itFoxillusion_UnkMotion0_Coll(Item_GObj*);
/* 29D490 */ bool itFoxillusion_UnkMotion1_Anim(Item_GObj*);
/* 29D554 */ void itFoxillusion_UnkMotion1_Phys(Item_GObj*);
/* 29D790 */ bool itFoxillusion_UnkMotion1_Coll(Item_GObj*);
/* 29D798 */ void it_8029D798(Item_GObj*);
/* 29D7EC */ bool itFoxillusion_UnkMotion2_Anim(Item_GObj*);
/* 29D870 */ void itFoxillusion_UnkMotion2_Phys(Item_GObj*);
/* 29D940 */ bool itFoxillusion_UnkMotion2_Coll(Item_GObj*);
/* 29D948 */ void it_8029D948(Item_GObj*, HSD_GObj*);
/* 3F6818 */ extern ItemStateTable it_803F6818[];
#define GALE01_29C4D4
/* 29C4D4 */ bool it_8029C4D4(Item_GObj*, CollData*);
/* 29C504 */ void it_8029C504(HSD_GObj* parent, Vec3* pos, enum_t msid,
                              int kind, f32 angle, f32 speed);
/* 29C6A4 */ void it_8029C6A4(f32 angle, f32 vel, HSD_GObj* parent, Vec3* vec,
                              int kind);
/* 29C6CC */ void it_8029C6CC(f32 angle, f32 vel, HSD_GObj* parent, Vec3* vec,
                              int kind);
/* 29C6F4 */ bool itFoxlaser_UnkMotion1_Anim(Item_GObj*);
/* 29C9CC */ void itFoxlaser_UnkMotion1_Phys(Item_GObj*);
/* 29C9EC */ bool itFoxlaser_UnkMotion1_Coll(Item_GObj*);
/* 29CA78 */ bool itFoxLaser_Logic94_Clanked(Item_GObj*);
/* 29CA80 */ bool itFoxLaser_Logic94_Reflected(Item_GObj*);
/* 29CC4C */ bool itFoxLaser_Logic94_Absorbed(Item_GObj*);
/* 29CC54 */ bool itFoxLaser_Logic94_ShieldBounced(Item_GObj*);
/* 29CCF0 */ bool itFoxLaser_Logic94_HitShield(Item_GObj*);
/* 29CCF8 */ void itFoxLaser_Logic94_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F67D0 */ extern ItemStateTable it_803F67D0[];
#define GALE01_28EB88
/* 28EB88 */ Item_GObj* it_8028EB88(Item_GObj*, Vec3*, f32, f32);
/* 28EC98 */ void it_8028EC98(Item_GObj* gobj, f32 vel);
/* 28ECE0 */ void it_8028ECE0(Item_GObj* gobj);
/* 28ECF0 */ Item* it_8028ECF0(Item_GObj* gobj, Vec3* v);
/* 28ED10 */ void itFreeze_Logic17_Destroyed(Item_GObj*);
/* 28ED50 */ void it_3F14_Logic17_Spawned(Item_GObj*);
/* 28EDBC */ void it_8028EDBC(Item_GObj* gobj);
/* 28EF34 */ void it_8028EF34(Item_GObj* gobj);
/* 28EF88 */ bool itFreeze_UnkMotion0_Anim(Item_GObj* gobj);
/* 28EF90 */ void itFreeze_UnkMotion0_Phys(Item_GObj* gobj);
/* 28EFB0 */ bool itFreeze_UnkMotion0_Coll(Item_GObj* gobj);
/* 28F1D8 */ void it_8028F1D8(Item_GObj* gobj);
/* 28F200 */ bool itFreeze_UnkMotion3_Anim(Item_GObj* gobj);
/* 28F208 */ void itFreeze_UnkMotion1_Phys(Item_GObj* gobj);
/* 28F238 */ bool itFreeze_UnkMotion1_Coll(Item_GObj* gobj);
/* 28F2B4 */ void itFreeze_Logic17_PickedUp(Item_GObj*);
/* 28F310 */ bool itFreeze_UnkMotion2_Anim(Item_GObj* gobj);
/* 28F318 */ void itFreeze_Logic17_Dropped(Item_GObj*);
/* 28F340 */ void itFreeze_Logic17_Thrown(Item_GObj*);
/* 28F368 */ void itFreeze_UnkMotion3_Phys(Item_GObj* gobj);
/* 28F398 */ bool itFreeze_UnkMotion3_Coll(Item_GObj* gobj);
/* 28F3CC */ bool itFreeze_Logic17_DmgDealt(Item_GObj*);
/* 28F3D4 */ bool itFreeze_Logic17_Clanked(Item_GObj*);
/* 28F3DC */ bool itFreeze_Logic17_HitShield(Item_GObj*);
/* 28F3E4 */ bool itFreeze_Logic17_Absorbed(Item_GObj*);
/* 28F3EC */ bool itFreeze_Logic17_Reflected(Item_GObj*);
/* 28F40C */ bool itFreeze_Logic17_ShieldBounced(Item_GObj*);
/* 28F42C */ bool itFreeze_Logic17_DmgReceived(Item_GObj*);
/* 28F434 */ void it_8028F434(Item_GObj*, f32 vel, Item_GObj* ref_gobj);
/* 28F4AC */ bool itFreeze_UnkMotion4_Anim(Item_GObj* gobj);
/* 28F4B4 */ void itFreeze_UnkMotion4_Phys(Item_GObj* gobj);
/* 28F560 */ bool itFreeze_UnkMotion4_Coll(Item_GObj* gobj);
/* 28F7C8 */ void it_8028F7C8(Item_GObj* gobj);
/* 28F828 */ bool itFreeze_UnkMotion5_Anim(Item_GObj* gobj);
/* 28F830 */ void itFreeze_UnkMotion5_Phys(Item_GObj* gobj);
/* 28F834 */ bool itFreeze_UnkMotion5_Coll(Item_GObj* gobj);
/* 28F8C4 */ void itFreeze_Logic17_EvtUnk(Item_GObj*, Item_GObj*);
/* 28F8E4 */ void it_8028F8E4(Item_GObj*);
/* 28F968 */ void it_8028F968(Item_GObj*);
/* 28F9B8 */ void it_8028F9B8(Item_GObj*);
/* 3F5D28 */ extern ItemStateTable it_803F5D28[];
#define GALE01_2CCF9C
/* 2CCF9C */ void itFreezer_802CCF9C(Item_GObj*);
/* 2CCFFC */ void itFreezer_802CCFFC(Item_GObj*);
/* 2CD000 */ void itFreezer_802CD000(Item_GObj*, Item_GObj*);
/* 2CD020 */ bool itFreezer_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CD060 */ void itFreezer_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CD064 */ bool itFreezer_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CD090 */ void itFreezer_802CD090(Item_GObj* gobj);
/* 2CD12C */ void itFreezer_802CD12C(Item_GObj*);
/* 2CD18C */ bool itFreezer_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CD230 */ void itFreezer_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CD288 */ bool itFreezer_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CD290 */ void itFreezer_802CD290(Item_GObj* gobj);
/* 2CD2EC */ void itFreezer_802CD2EC(Item_GObj*);
/* 2CD360 */ bool itFreezer_UnkMotion0_Anim(Item_GObj* gobj);
/* 2CD384 */ void itFreezer_UnkMotion0_Phys(Item_GObj* gobj);
/* 2CD424 */ bool itFreezer_UnkMotion0_Coll(Item_GObj* gobj);
/* 3F7C70 */ extern ItemStateTable it_803F7C70[];
#define GALE01_2D6FD0
/* 2D6FD0 */ void itFushigibana_Logic29_Spawned(Item_GObj*);
/* 2D705C */ void it_802D705C(Item_GObj*);
/* 2D70A4 */ void it_802D70A4(Item_GObj*);
/* 2D7120 */ bool itFushigibana_UnkMotion0_Anim(Item_GObj* gobj);
/* 2D7144 */ void itFushigibana_UnkMotion0_Phys(Item_GObj* gobj);
/* 2D7164 */ bool itFushigibana_UnkMotion0_Coll(Item_GObj* gobj);
/* 2D718C */ void it_802D718C(Item_GObj*);
/* 2D71E8 */ bool itFushigibana_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D72E4 */ void itFushigibana_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D72E8 */ bool itFushigibana_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D7328 */ void it_802D7328(Item_GObj* gobj);
/* 2D736C */ bool itFushigibana_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D7374 */ void itFushigibana_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D73A4 */ bool itFushigibana_UnkMotion2_Coll(Item_GObj* gobj);
/* 3F82F0 */ extern ItemStateTable it_803F82F0[];
#define GALE01_2C720C
/* 2C720C */ HSD_GObj* it_802C720C(HSD_GObj*, Vec3*, Fighter_Part, float);
/* 2C7310 */ void itGameWatchBreath_Logic76_Destroyed(Item_GObj*);
/* 2C7340 */ void it_802C7340(Item_GObj*);
/* 2C738C */ void it_802C738C(Item_GObj*);
/* 2C73AC */ void it_802C73AC(Item_GObj*);
/* 2C73CC */ void itGameWatchBreath_Logic76_PickedUp(Item_GObj*);
/* 2C7424 */ void it_802C7424(Item_GObj*);
/* 2C744C */ bool itGamewatchbreath_UnkMotion1_Anim(Item_GObj*);
/* 2C74B8 */ void itGameWatchBreath_Logic76_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7938 */ extern ItemStateTable it_803F7938[];
#define GALE01_2C837C
/* 2C837C */ HSD_GObj* it_802C837C(Item_GObj*, Vec3*, enum_t, u32, float);
/* 2C847C */ bool itGameWatchChef_Logic112_DmgDealt(Item_GObj*);
/* 2C84A0 */ void it_802C84A0(Item_GObj* gobj, s32 index);
/* 2C8540 */ bool itGamewatchchef_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C8690 */ void itGamewatchchef_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C86D0 */ bool itGamewatchchef_UnkMotion0_Coll(Item_GObj* gobj);
/* 2C875C */ void it_802C875C(Item_GObj* gobj);
/* 2C87B4 */ bool itGamewatchchef_UnkMotion1_Anim(Item_GObj* gobj);
/* 2C8828 */ void itGamewatchchef_UnkMotion1_Phys(Item_GObj* gobj);
/* 2C882C */ bool itGamewatchchef_UnkMotion1_Coll(Item_GObj* gobj);
/* 2C88E4 */ bool it_2725_Logic112_Clanked(Item_GObj*);
/* 2C8940 */ bool it_2725_Logic112_HitShield(Item_GObj*);
/* 2C899C */ bool it_2725_Logic112_Absorbed(Item_GObj*);
/* 2C8A08 */ bool itGameWatchChef_Logic112_ShieldBounced(Item_GObj*);
/* 2C8A28 */ bool itGameWatchChef_Logic112_Reflected(Item_GObj*);
/* 2C8B08 */ void itGameWatchChef_Logic112_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F79E0 */ extern ItemStateTable it_803F79E0[];
#define GALE01_2C68F8
/* 2C68F8 */ HSD_GObj* itGamewatchFire_Spawn(HSD_GObj*, Vec3*, Fighter_Part,
                                             float);
/* 2C69FC */ void itGamewatchFire_Destroyed(Item_GObj*);
/* 2C6A2C */ void itGamewatchFire_802C6A2C(Item_GObj*);
/* 2C6A78 */ void itGamewatchFire_802C6A78(Item_GObj*);
/* 2C6A98 */ void itGamewatchFire_802C6A98(Item_GObj*);
/* 2C6AB8 */ void itGamewatchFire_PickedUp(Item_GObj*);
/* 2C6C18 */ void itGamewatchFire_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F78E8 */ extern ItemStateTable it_803F78E8[];
#define GALE01_2C61F4
/* 2C61F4 */ HSD_GObj* itGamewatchGreenhouse_Spawn(HSD_GObj*, Vec3*,
                                                   Fighter_Part, float);
/* 2C62F8 */ void itGamewatchGreenhouse_Destroyed(Item_GObj*);
/* 2C6328 */ void itGamewatchGreenhouse_802C6328(Item_GObj*);
/* 2C6374 */ void itGamewatchGreenhouse_802C6374(Item_GObj*);
/* 2C6394 */ void itGamewatchGreenhouse_802C6394(Item_GObj*);
/* 2C63B4 */ void itGamewatchGreenhouse_PickedUp(Item_GObj*);
/* 2C6430 */ void itGamewatchGreenhouse_802C6430(Item_GObj*);
/* 2C6458 */ void itGamewatchGreenhouse_802C6458(Item_GObj*);
/* 2C6480 */ void itGamewatchGreenhouse_802C6480(Item_GObj*);
/* 2C64A8 */ void itGamewatchGreenhouse_802C64A8(Item_GObj*);
/* 2C64D0 */ bool itGamewatchGreenhouse_Motion3_Anim(Item_GObj*);
/* 2C653C */ bool itGamewatchGreenhouse_Motion2_Anim(Item_GObj* item_gobj);
/* 2C65C4 */ void itGamewatchGreenhouse_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7898 */ extern ItemStateTable it_803F7898[];
#define GALE01_2C7774
/* 2C7A54 */ void itGameWatchJudge_Logic77_Destroyed(Item_GObj*);
/* 2C7774 */ HSD_GObj* it_802C7774(float facing_dir, HSD_GObj* owner_gobj,
                                   Vec3* pos, s32 bone_index, u32 judge_num);
/* 2C78B8 */ void it_802C78B8(Item_GObj*);
/* 2C7A84 */ void it_802C7A84(Item_GObj*);
/* 2C7AD0 */ void it_802C7AD0(Item_GObj*);
/* 2C7AF0 */ void it_802C7AF0(Item_GObj*);
/* 2C7B10 */ void it_2725_Logic77_PickedUp(Item_GObj*);
/* 2C7B54 */ bool itGamewatchjudge_UnkMotion0_Anim(Item_GObj*);
/* 2C7D40 */ void itGameWatchJudge_Logic77_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7968 */ extern ItemStateTable it_803F7968[];
#define GALE01_2C65E4
/* 2C65E4 */ HSD_GObj* it_802C65E4(Item_GObj* gobj, Vec* vec,
                                   enum Fighter_Part arg2, float arg3);
/* 2C66E8 */ void itGameWatchManhole_Logic72_Destroyed(Item_GObj*);
/* 2C6718 */ void it_802C6718(Item_GObj* gobj);
/* 2C6764 */ void it_802C6764(Item_GObj* gobj);
/* 2C6784 */ void it_802C6784(Item_GObj* gobj);
/* 2C67A4 */ void itGameWatchManhole_Logic72_PickedUp(Item_GObj*);
/* 2C68D8 */ void itGameWatchManhole_Logic72_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F78D8 */ extern ItemStateTable it_803F78D8[];
#define GALE01_2C7D60
/* 2C7D60 */ HSD_GObj* it_802C7D60(Item_GObj*, Vec3*, Fighter_Part, f32);
/* 2C7E64 */ void itGameWatchPanic_Logic78_Destroyed(Item_GObj*);
/* 2C7E94 */ void it_802C7E94(Item_GObj*);
/* 2C7EE0 */ void it_802C7EE0(Item_GObj*);
/* 2C7F00 */ void it_802C7F00(Item_GObj*);
/* 2C7F20 */ void itGameWatchPanic_Logic78_PickedUp(Item_GObj*);
/* 2C8018 */ void itGameWatchPanic_Logic78_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F79A0 */ extern ItemStateTable it_803F79A0[];
#define GALE01_2C6C38
/* 2C6C38 */ HSD_GObj* it_802C6C38(Item_GObj*, Vec3*, enum_t part, float);
/* 2C6D3C */ void itGameWatchParachute_Logic74_Destroyed(Item_GObj*);
/* 2C6D6C */ void it_802C6D6C(Item_GObj*);
/* 2C6DB8 */ void it_802C6DB8(Item_GObj*);
/* 2C6DD8 */ void it_802C6DD8(Item_GObj*);
/* 2C6DF8 */ void itGameWatchParachute_Logic74_PickedUp(Item_GObj*);
/* 2C6E50 */ void it_802C6E50(Item_GObj*);
/* 2C6E8C */ bool itGamewatchparachute_UnkMotion1_Anim(Item_GObj*);
/* 2C6F20 */ void itGameWatchParachute_Logic74_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F78F8 */ extern ItemStateTable it_803F78F8[];
#define GALE01_2C8038
/* 2C8038 */ Item_GObj* it_802C8038(Item_GObj*, Vec3*, s32, s32, float, float);
/* 2C8158 */ void it_802C8158(Item_GObj* item_gobj);
/* 2C81C8 */ void it_802C81C8(Item_GObj* item_gobj);
/* 2C81E8 */ void it_802C81E8(Item_GObj* item_gobj);
/* 2C8208 */ void it_802C8208(HSD_GObj* hsd_gobj, enum_t msid);
/* 2C8240 */ bool itGamewatchrescue_UnkMotion1_Anim(Item_GObj* gobj);
/* 2C8350 */ void itGamewatchrescue_UnkMotion1_Phys(Item_GObj* gobj);
/* 2C8354 */ bool itGamewatchrescue_UnkMotion1_Coll(Item_GObj* gobj);
/* 2C835C */ void itGameWatchRescue_Logic81_EvtUnk(Item_GObj* item_gobj1,
                                                   Item_GObj* item_gobj2);
/* 3F79C0 */ extern ItemStateTable it_803F79C0[];
#define GALE01_2C6F40
extern ItemStateTable it_803F7918[];
Item_GObj* it_802C6F40(HSD_GObj* parent, Vec3* pos, Fighter_Part arg2,
                       f32 dir);
void itGameWatchTurtle_Logic75_Destroyed(Item_GObj* item_gobj);
void it_802C7074(Item_GObj* item_gobj);
void it_802C70C0(Item_GObj*);
void it_802C70E0(Item_GObj*);
void itGameWatchTurtle_Logic75_PickedUp(Item_GObj* item_gobj);
void it_802C7158(HSD_GObj* arg0);
bool itGamewatchturtle_UnkMotion1_Anim(Item_GObj* item_gobj);
void itGameWatchTurtle_Logic75_EvtUnk(HSD_GObj*, HSD_GObj*);
#define GALE01_2EAF28
/* 2EAF28 */ s32 it_802EAF28(Item_GObj* gobj);
/* 2EAF34 */ Item_GObj* it_802EAF34(HSD_GObj*, Vec3*, int);
/* 2EB1EC */ void it_802EB1EC(Item_GObj*);
/* 2EB268 */ void it_802EB268(Item_GObj* gobj);
/* 2EB2C0 */ bool itGreatfoxlaser_UnkMotion1_Anim(Item_GObj* gobj);
/* 2EB3C0 */ void itGreatfoxlaser_UnkMotion1_Phys(Item_GObj* gobj);
/* 2EB444 */ bool itGreatFoxLaser_Logic27_DmgDealt(Item_GObj*);
/* 2EB44C */ bool itGreatFoxLaser_Logic27_Clanked(Item_GObj*);
/* 2EB454 */ bool itGreatFoxLaser_Logic27_Absorbed(Item_GObj*);
/* 2EB45C */ bool it_2725_Logic27_Reflected(Item_GObj*);
/* 2EB5A8 */ void it_802EB5A8(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F8FD0[];
#define GALE01_28B8D8
/* 28B8D8 */ void it_8028B8D8(Item_GObj* gobj);
/* 28B988 */ void it_8028B988(Item_GObj* gobj);
/* 28BA2C */ void it_8028BA2C(Item_GObj* gobj);
/* 28BAD8 */ void it_8028BAD8(Item_GObj* gobj);
/* 28BC2C */ void it_8028BC2C(Item_GObj* gobj);
/* 28BDAC */ void itGShell_Logic14_Spawned(Item_GObj* gobj);
/* 28BE54 */ void it_8028BE54(Item_GObj* gobj);
/* 28BEE8 */ bool itGshell_UnkMotion0_Anim(Item_GObj* gobj);
/* 28BEF0 */ void itGshell_UnkMotion0_Phys(Item_GObj* gobj);
/* 28BEF4 */ bool itGshell_UnkMotion0_Coll(Item_GObj* gobj);
/* 28C018 */ void it_8028C018(Item_GObj* gobj);
/* 28C054 */ bool itGshell_UnkMotion1_Anim(Item_GObj* gobj);
/* 28C0D0 */ void itGshell_UnkMotion1_Phys(Item_GObj* gobj);
/* 28C100 */ bool itGshell_UnkMotion1_Coll(Item_GObj* gobj);
/* 28C148 */ void itGShell_Logic14_PickedUp(Item_GObj* gobj);
/* 28C1A0 */ bool itGshell_UnkMotion2_Anim(Item_GObj* gobj);
/* 28C1A8 */ void itGshell_UnkMotion2_Phys(Item_GObj* gobj);
/* 28C1AC */ void itGShell_Logic14_Thrown(Item_GObj* gobj);
/* 28C1FC */ bool itGshell_UnkMotion3_Anim(Item_GObj* gobj);
/* 28C2A4 */ void itGshell_UnkMotion3_Phys(Item_GObj* gobj);
/* 28C2D4 */ bool itGshell_UnkMotion3_Coll(Item_GObj* gobj);
/* 28C300 */ void itGShell_Logic14_Dropped(Item_GObj* gobj);
/* 28C328 */ bool itGshell_UnkMotion4_Anim(Item_GObj* gobj);
/* 28C34C */ void itGshell_UnkMotion4_Phys(Item_GObj* gobj);
/* 28C37C */ bool itGshell_UnkMotion4_Coll(Item_GObj* gobj);
/* 28C3A8 */ void it_8028C3A8(Item_GObj* gobj);
/* 28C52C */ bool itGshell_UnkMotion6_Anim(Item_GObj* gobj);
/* 28C6E4 */ void itGshell_UnkMotion6_Phys(Item_GObj* gobj);
/* 28C75C */ bool itGshell_UnkMotion6_Coll(Item_GObj* gobj);
/* 28C898 */ void it_8028C898(Item_GObj* gobj);
/* 28CA14 */ bool itGshell_UnkMotion8_Anim(Item_GObj* gobj);
/* 28CAC8 */ void itGshell_UnkMotion8_Phys(Item_GObj* gobj);
/* 28CAF8 */ bool itGshell_UnkMotion8_Coll(Item_GObj* gobj);
/* 28CB24 */ void itGShell_Logic14_EnteredAir(Item_GObj* gobj);
/* 28CB70 */ bool itGshell_UnkMotion9_Anim(Item_GObj* gobj);
/* 28CB78 */ void itGshell_UnkMotion9_Phys(Item_GObj* gobj);
/* 28CB7C */ bool itGshell_UnkMotion9_Coll(Item_GObj* gobj);
/* 28CCA8 */ bool itGShell_Logic14_DmgDealt(Item_GObj* gobj);
/* 28CCCC */ bool itGShell_Logic14_DmgReceived(Item_GObj* gobj);
/* 28CD04 */ bool itGShell_Logic14_Reflected(Item_GObj* gobj);
/* 28CD3C */ bool itGShell_Logic14_Clanked(Item_GObj* gobj);
/* 28CE1C */ bool itGShell_Logic14_HitShield(Item_GObj* gobj);
/* 28CF2C */ bool itGShell_Logic14_ShieldBounced(Item_GObj* gobj);
/* 28CF68 */ bool it_8028CF68(Item_GObj* gobj);
/* 28CFC0 */ void itGShell_Logic14_EvtUnk(Item_GObj* gobj1, Item_GObj* gobj2);
/* 3F5BA8 */ extern ItemStateTable it_803F5BA8[];
#define GALE01_293D94
/* 293D94 */ void it_80293D94(Item_GObj* gobj);
/* 293DCC */ int it_80293DCC(Item_GObj* gobj);
/* 293E34 */ void it_80293E34(Item_GObj* gobj);
/* 293F58 */ void itHammer_Logic28_Spawned(HSD_GObj* gobj);
/* 293F84 */ void it_80293F84(Item_GObj* gobj);
/* 2940FC */ void itHammer_Logic28_PickedUp(HSD_GObj* gobj);
/* 2941F8 */ void itHammer_Logic28_Dropped(HSD_GObj* gobj);
/* 2942B0 */ void itHammer_Logic28_EnteredAir(HSD_GObj* gobj);
/* 294344 */ void itHammer_Logic28_EvtUnk(Item_GObj* gobj, HSD_GObj* gobj2);
/* 3F6150 */ extern ItemStateTable it_803F6150[];
#define GALE01_299C48
/* 299C48 */ void it_80299C48(HSD_GObj*, Vec3*, Vec3*, f32);
/* 299D4C */ void itHammerHead_Logic40_Spawned(Item_GObj*);
/* 299D7C */ void it_80299D7C(Item_GObj*);
/* 299DD0 */ void itHammerHead_Logic40_PickedUp(Item_GObj*);
/* 299E1C */ bool itHammerhead_UnkMotion1_Anim(Item_GObj* gobj);
/* 299E24 */ void itHammerhead_UnkMotion1_Phys(Item_GObj* gobj);
/* 299E28 */ void itHammerHead_Logic40_Dropped(Item_GObj* gobj);
/* 299E48 */ void itHammerHead_Logic40_Thrown(Item_GObj*);
/* 299E9C */ bool itHammerhead_UnkMotion2_Anim(Item_GObj* gobj);
/* 299F1C */ void itHammerhead_UnkMotion2_Phys(Item_GObj* gobj);
/* 299F68 */ bool itHammerhead_UnkMotion2_Coll(Item_GObj* gobj);
/* 299F94 */ void it_80299F94(Item_GObj* gobj);
/* 299FB4 */ void it_80299FB4(Item_GObj* gobj);
/* 29A000 */ bool itHammerhead_UnkMotion3_Anim(Item_GObj* gobj);
/* 29A080 */ void itHammerhead_UnkMotion3_Phys(Item_GObj* gobj);
/* 29A084 */ bool itHammerhead_UnkMotion3_Coll(Item_GObj* gobj);
/* 29A0B0 */ bool itHammerHead_Logic40_DmgDealt(Item_GObj*);
/* 29A0B8 */ bool itHammerHead_Logic40_Clanked(Item_GObj*);
/* 29A0C0 */ bool itHammerHead_Logic40_HitShield(Item_GObj*);
/* 29A0C8 */ bool itHammerHead_Logic40_Reflected(Item_GObj*);
/* 29A0EC */ bool itHammerHead_Logic40_DmgReceived(Item_GObj*);
/* 29A0F4 */ void itHammerHead_Logic40_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6640 */ extern ItemStateTable it_803F6640[];
#define GALE01_2927E8
/* 2927E8 */ void it_802927E8(Item_GObj*);
/* 29282C */ void it_8029282C(Item_GObj*);
/* 29285C */ void itHarisen_Logic24_Spawned(Item_GObj*);
/* 29287C */ void it_8029287C(Item_GObj*);
/* 2928D4 */ bool itHarisen_UnkMotion0_Anim(Item_GObj* gobj);
/* 2928DC */ void itHarisen_UnkMotion0_Phys(Item_GObj* gobj);
/* 2928E0 */ bool itHarisen_UnkMotion0_Coll(Item_GObj* gobj);
/* 29290C */ void it_8029290C(Item_GObj* gobj);
/* 292934 */ bool itHarisen_UnkMotion8_Anim(Item_GObj* gobj);
/* 29293C */ void itHarisen_UnkMotion1_Phys(Item_GObj* gobj);
/* 29296C */ bool itHarisen_UnkMotion1_Coll(Item_GObj* gobj);
/* 292998 */ void it_80292998(Item_GObj*, float);
/* 2929C8 */ void it_802929C8(Item_GObj*, float);
/* 2929F8 */ void it_802929F8(Item_GObj*, float);
/* 292A28 */ void it_80292A28(Item_GObj*);
/* 292A5C */ void itHarisen_Logic24_PickedUp(Item_GObj*);
/* 292A84 */ bool itHarisen_UnkMotion6_Anim(Item_GObj* gobj);
/* 292A8C */ void itHarisen_UnkMotion6_Phys(Item_GObj* gobj);
/* 292A90 */ void itHarisen_Logic24_Dropped(Item_GObj*);
/* 292AE8 */ bool itHarisen_UnkMotion8_Coll(Item_GObj* gobj);
/* 292B2C */ void itHarisen_Logic24_Thrown(Item_GObj*);
/* 292B54 */ void itHarisen_UnkMotion8_Phys(Item_GObj* gobj);
/* 292BA0 */ bool itHarisen_UnkMotion7_Coll(Item_GObj* gobj);
/* 292BCC */ bool itHarisen_Logic24_DmgDealt(Item_GObj*);
/* 292C08 */ void itHarisen_Logic24_EnteredAir(Item_GObj*);
/* 292C30 */ bool itHarisen_UnkMotion9_Anim(Item_GObj* gobj);
/* 292C38 */ void itHarisen_UnkMotion9_Phys(Item_GObj* gobj);
/* 292C3C */ bool itHarisen_UnkMotion9_Coll(Item_GObj* gobj);
/* 292C70 */ bool itHarisen_Logic24_Clanked(Item_GObj*);
/* 292CAC */ bool itHarisen_Logic24_Reflected(Item_GObj*);
/* 292CCC */ bool itHarisen_Logic24_HitShield(Item_GObj*);
/* 292D08 */ bool itHarisen_Logic24_ShieldBounced(Item_GObj*);
/* 292D28 */ void itHarisen_Logic24_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5FF0 */ extern ItemStateTable it_803F5FF0[];
#define GALE01_2CDBE0
/* 2CDBE0 */ void itHassam_802CDBE0(Item_GObj*);
/* 2CDC60 */ void itHassam_802CDC60(Item_GObj*, Item_GObj*);
/* 3F7CF8 */ extern ItemStateTable it_803F7CF8[];
#define GALE01_283AE4
/* 283AE4 */ Item_GObj* it_80283AE4(Item_GObj* gobj, Vec3* pos, s32 arg2);
/* 283BD4 */ void it_80283BD4(Item_GObj*);
/* 283BEC */ void itHeart_Logic8_Spawned(Item_GObj*);
/* 283C48 */ void itHeart_Logic8_Destroyed(Item_GObj*);
/* 283F28 */ void itHeart_Logic8_PickedUp(Item_GObj*);
/* 28402C */ void itHeart_Logic8_Dropped(Item_GObj*);
/* 28412C */ void itHeart_Logic8_EnteredAir(Item_GObj*);
/* 284194 */ void itHeart_Logic8_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F56C8 */ extern ItemStateTable it_803F56C8[];
#define MELEE_IT_KINDS_ITHEIHO_H
/* 2D8618 */ void it_802D8618(s32, Vec3*, s32, s32);
/* 2D8688 */ void it_802D8688(Item_GObj*);
/* 2D8EC8 */ bool it_802D8EC8(Item_GObj*);
/* 2D9A0C */ void it_802D9A0C(Item_GObj*, HSD_GObj*);
/* 3F83F0 */ extern ItemStateTable it_803F83F0[];
#define GALE01_2D5CF8
/* 2D5CF8 */ void it_802D5CF8(Item_GObj*);
/* 2D5D7C */ void it_802D5D7C(HSD_GObj*);
/* 2D5E4C */ void it_802D5E4C(Item_GObj*);
/* 2D5EC8 */ bool it_802D5EC8(Item_GObj*);
/* 2D5EEC */ void it_802D5EEC(Item_GObj*);
/* 2D5F0C */ bool it_802D5F0C(Item_GObj*);
/* 2D5F34 */ void it_802D5F34(HSD_GObj*);
/* 2D5FC8 */ bool itHinoarashi_UnkMotion1_Anim(Item_GObj*);
/* 2D6084 */ void itHinoarashi_UnkMotion1_Phys(Item_GObj*);
/* 2D60A4 */ bool itHinoarashi_UnkMotion1_Coll(Item_GObj*);
/* 2D60D0 */ void itHinoarashi_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D6100 */ bool it_2725_Logic27_DmgReceived(Item_GObj*);
/* 2D61A8 */ void it_802D61A8(Item_GObj*, Item_GObj*);
/* 2D61C8 */ void it_802D61C8(Item_GObj*, s32);
/* 2D6310 */ void it_802D6310(Item_GObj*, s32);
/* 2D64B8 */ void it_802D64B8(HSD_GObj*, Vec3*, u32, f32);
/* 2D6674 */ void it_802D6674(Item_GObj*, s32);
/* 3F8270 */ extern ItemStateTable it_803F8270[];
/* 3F82A0 */ extern ItemStateTable it_803F82A0[];
#define GALE01_2D42C4
/* 2D42C4 */ void it_2725_Logic24_Spawned(Item_GObj*);
/* 2D43AC */ void it_802D43AC(Item_GObj* gobj);
/* 2D43B0 */ void it_802D43B0(Item_GObj*, Item_GObj*);
/* 2D43EC */ void it_802D43EC(Item_GObj* gobj);
/* 2D4494 */ void it_802D4494(Item_GObj* gobj);
/* 2D4510 */ void it_802D4510(Item_GObj* gobj);
/* 2D4564 */ bool it_802D4564(Item_GObj* gobj);
/* 2D472C */ void it_802D472C(Item_GObj* gobj);
/* 2D48A8 */ bool it_802D48A8(Item_GObj* gobj);
/* 2D48B0 */ f32 it_802D48B0(f32* value, f32 target, f32 max_val, f32 accel,
                             f32 decel);
/* 2D4990 */ void it_802D4990(Item_GObj*);
/* 2D49E8 */ bool itHitodeman_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D4B14 */ void itHitodeman_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D4B48 */ bool itHitodeman_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D4B50 */ void it_802D4B50(Item_GObj*);
/* 2D4B54 */ void it_802D4B54(Item_GObj*);
/* 2D4BB8 */ bool itHitodeman_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D4BDC */ void itHitodeman_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D4C4C */ bool itHitodeman_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D4C74 */ void it_802D4C74(Item_GObj* gobj);
/* 2D4DE0 */ void it_2725_Logic43_Spawned(Item_GObj*);
/* 2D4EF4 */ bool it_802D4EF4(Item_GObj*);
/* 2D4F08 */ bool it_802D4F08(Item_GObj*);
/* 2D4F28 */ bool it_802D4F28(Item_GObj*);
/* 2D4F48 */ bool itHitodeman_Logic43_Absorbed(Item_GObj*);
/* 2D4F50 */ bool it_802D4F50(Item_GObj*);
/* 2D4F58 */ void it_802D4F58(Item_GObj*, Item_GObj*);
/* 2D4F78 */ void it_802D4F78(Item_GObj*);
/* 2D4FFC */ bool it_802D4FFC(Item_GObj* gobj);
/* 2D5044 */ void it_802D5044(Item_GObj* gobj);
/* 2D5048 */ bool it_802D5048(Item_GObj* gobj);
/* 3F8128 */ extern ItemStateTable it_803F8128[];
/* 3F8180 */ extern ItemStateTable it_803F8180[];
#define GALE01_2D251C
/* 2D251C */ void it_2725_Logic18_Spawned(Item_GObj*);
/* 2D25B8 */ void it_802D25B8(HSD_GObj* gobj);
/* 2D25BC */ void it_802D25BC(Item_GObj*, Item_GObj*);
/* 2D25DC */ bool itHouou_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D2640 */ void itHouou_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D2660 */ bool itHouou_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D2668 */ void it_802D2668(Item_GObj*);
/* 2D26BC */ bool itHouou_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D26FC */ void itHouou_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D27A8 */ bool itHouou_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D27B0 */ void it_802D27B0(Item_GObj* gobj);
/* 2D27FC */ bool itHouou_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D288C */ void itHouou_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D2904 */ bool itHouou_UnkMotion3_Coll(Item_GObj* gobj);
/* 2D290C */ void it_802D290C(Item_GObj* gobj);
/* 2D2970 */ bool itHouou_UnkMotion4_Anim(Item_GObj* gobj);
/* 2D29D4 */ void itHouou_UnkMotion4_Phys(Item_GObj* gobj);
/* 2D2A50 */ bool itHouou_UnkMotion4_Coll(Item_GObj* gobj);
/* 2D2A58 */ void it_802D2A58(Item_GObj*);
/* 2D2AC0 */ bool itHouou_UnkMotion5_Anim(Item_GObj* gobj);
/* 2D2B24 */ void itHouou_UnkMotion5_Phys(Item_GObj* gobj);
/* 2D2B44 */ bool itHouou_UnkMotion5_Coll(Item_GObj* gobj);
/* 2D2B4C */ void it_802D2B4C(Item_GObj*);
/* 2D2BE0 */ void it_802D2BE0(Item_GObj*);
/* 2D2C54 */ bool it_802D2C54(Item_GObj* gobj);
/* 2D2C78 */ void it_802D2C78(Item_GObj* gobj);
/* 2D2D04 */ bool it_802D2D04(Item_GObj* gobj);
/* 2D2D2C */ void it_802D2D2C(Item_GObj*);
/* 2D2E80 */ void it_2725_Logic42_Spawned(Item_GObj*);
/* 2D2ED0 */ void it_802D2ED0(Item_GObj*, Item_GObj*);
/* 2D2EF0 */ void it_802D2EF0(Item_GObj* gobj);
/* 2D2F3C */ bool it_802D2F3C(Item_GObj* gobj);
/* 2D2F70 */ void it_802D2F70(Item_GObj* gobj);
/* 2D2FE8 */ bool it_802D2FE8(Item_GObj* gobj);
/* 3F7F58 */ extern ItemStateTable it_803F7F58[];
/* 3F7FB8 */ extern ItemStateTable it_803F7FB8[];
#define GALE01_2C9D40
/* 2C9D40 */ void it_802C9D40(Item_GObj*);
/* 2C9DFC */ void it_802C9DFC(Item_GObj*);
/* 2C9E00 */ void itKabigon_Logic2_Destroyed(Item_GObj*);
/* 2C9E24 */ void it_802C9E24(Item_GObj*, Item_GObj*);
/* 2C9E44 */ void it_802C9E44(Item_GObj*);
/* 2C9E8C */ void it_802C9E8C(Item_GObj*);
/* 2C9EF0 */ bool itKabigon_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C9F74 */ void itKabigon_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C9FBC */ bool itKabigon_UnkMotion0_Coll(Item_GObj* gobj);
/* 2CA014 */ void it_802CA014(Item_GObj* gobj);
/* 2CA074 */ void it_802CA074(Item_GObj* gobj);
/* 2CA198 */ bool itKabigon_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CA318 */ void itKabigon_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CA31C */ bool itKabigon_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CA324 */ void it_802CA324(Item_GObj*);
/* 2CA388 */ bool itKabigon_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CA3AC */ void itKabigon_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CA3CC */ bool itKabigon_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CA3F4 */ void it_802CA3F4(Item_GObj*);
/* 3F7AD8 */ extern ItemStateTable it_803F7AD8[];
#define GALE01_2CA49C
/* 2CA49C */ void it_802CA49C(Item_GObj*);
/* 2CA534 */ void it_802CA534(Item_GObj*);
/* 2CA538 */ void it_802CA538(Item_GObj*, Item_GObj*);
/* 2CA558 */ void it_802CA558(Item_GObj* gobj);
/* 2CA58C */ void it_802CA58C(Item_GObj* gobj);
/* 2CA5D8 */ bool it_802CA5D8(Item_GObj* gobj);
/* 2CA618 */ void it_802CA618(Item_GObj* gobj);
/* 2CA654 */ bool it_802CA654(Item_GObj* gobj);
/* 2CA6A0 */ void it_802CA6A0(Item_GObj*);
/* 2CA724 */ bool itKamex_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CA7FC */ void itKamex_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CA890 */ bool itKamex_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CA8DC */ void it_802CA8DC(Item_GObj* gobj);
/* 2CA938 */ void it_802CA938(Item_GObj* gobj);
/* 2CA984 */ bool itKamex_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CA9B8 */ void itKamex_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CA9F4 */ bool itKamex_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CAA40 */ void it_802CAA40(Item_GObj*);
/* 2CAAA4 */ bool itKamex_UnkMotion3_Anim(Item_GObj* gobj);
/* 2CAAC8 */ void itKamex_UnkMotion3_Phys(Item_GObj* gobj);
/* 2CAAE8 */ bool itKamex_UnkMotion3_Coll(Item_GObj* gobj);
/* 2CAB10 */ void it_802CAB10(Item_GObj*);
/* 2CACD0 */ void it_2725_Logic31_Spawned(Item_GObj*);
/* 2CADC0 */ bool itKamex_Logic31_HitShield(Item_GObj*);
/* 2CADC8 */ bool itKamex_Logic31_DmgDealt(Item_GObj*);
/* 2CADD0 */ void itKamex_Logic31_EvtUnk(Item_GObj*, Item_GObj*);
/* 2CADF0 */ void it_802CADF0(Item_GObj*);
/* 2CAE60 */ bool it_802CAE60(Item_GObj* gobj);
/* 2CAE94 */ void it_802CAE94(Item_GObj* gobj);
/* 2CAFB4 */ bool it_802CAFB4(Item_GObj* gobj);
/* 3F7B08 */ extern ItemStateTable it_803F7B08[];
/* 3F7B48 */ extern ItemStateTable it_803F7B48[];
#define GALE01_293660
typedef struct KinokoAnim {
    HSD_AnimJoint* joint;
} KinokoAnim;
typedef struct KinokoAttrs {
    f32 x0;
    f32 x4;
    s32 x8;
} KinokoAttrs;
HSD_AnimJoint* it_80293660(int idx);
void itKinoko_Logic26_Spawned(Item_GObj*);
void it_802936E4(Item_GObj*);
bool itKinoko_UnkMotion0_Anim(Item_GObj*);
void itKinoko_UnkMotion0_Phys(Item_GObj*);
bool itKinoko_UnkMotion0_Coll(Item_GObj*);
void it_8029385C(Item_GObj*);
void it_80293884(Item_GObj*);
bool itKinoko_UnkMotion1_Anim(Item_GObj*);
void itKinoko_UnkMotion1_Phys(Item_GObj*);
bool itKinoko_UnkMotion1_Coll(Item_GObj*);
bool itKinoko_Logic26_DmgDealt(Item_GObj*);
void itKinoko_Logic26_EvtUnk(Item_GObj*, HSD_GObj*);
extern ItemStateTable it_803F6110[];
#define GALE01_2F23AC
/* 2F23AC */ f64 it_802F23AC(Item_GObj* obj, Vec3* pos);
/// grab.x1A60, this function is probably creating some kind of grab box
/* 2F23EC */ void it_802F23EC(Item_GObj* gobj, Fighter_GObj* owner_gobj,
                              float facing_dir);
/* 2F2578 */ bool itKirby_2F23_UnkMotion0_Anim(Item_GObj*);
/* 2F2580 */ void itKirby_2F23_UnkMotion0_Phys(Item_GObj*);
/* 2F2584 */ bool itKirby_2F23_UnkMotion0_Coll(Item_GObj*);
/* 2F258C */ void it_802F258C(Item_GObj*);
/* 2F2810 */ void it_802F2810(HSD_GObj*);
/* 2F2888 */ bool itKirby_2F23_UnkMotion1_Anim(Item_GObj*);
/* 2F2890 */ void itKirby_2F23_UnkMotion1_Phys(Item_GObj*);
/* 2F2894 */ bool itKirby_2F23_UnkMotion1_Coll(Item_GObj*);
/* 2F289C */ void it_802F289C(Item_GObj*);
/* 3F9450 */ extern ItemStateTable it_803F9450[];
#define GALE01_29BAB8
typedef struct itKirbyCutterBeamAttributes {
    f32 x0_speed;
    f32 x4_vel;
    f32 x8_lifetime;
    f32 xC_decel;
} itKirbyCutterBeamAttributes;
/* 29BAB8 */ void it_8029BAB8(HSD_GObj* gobj, Vec3* pos, float facing_dir);
/* 29BB90 */ void it_8029BB90(Item_GObj* gobj, HSD_GObj* owner);
/* 29BC88 */ bool itKirbycutterbeam_UnkMotion0_Anim(Item_GObj* gobj);
/* 29BCA8 */ void itKirbycutterbeam_UnkMotion0_Phys(Item_GObj* gobj);
/* 29BDD4 */ bool itKirbycutterbeam_UnkMotion0_Coll(Item_GObj* gobj);
/* 29BFB4 */ bool itKirbyCutterBeam_Logic7_DmgDealt(Item_GObj*);
/* 29BFBC */ bool itKirbyCutterBeam_Logic7_Clanked(Item_GObj*);
/* 29BFC4 */ bool itKirbyCutterBeam_Logic7_Absorbed(Item_GObj*);
/* 29BFCC */ bool it_2725_Logic7_Reflected(Item_GObj*);
/* 29C208 */ bool it_2725_Logic7_ShieldBounced(Item_GObj*);
/* 29C4AC */ bool itKirbyCutterBeam_Logic7_HitShield(Item_GObj*);
/* 29C4B4 */ void it_8029C4B4(Item_GObj*, Item_GObj*);
/* 3F6798 */ extern ItemStateTable it_803F6798[];
#define ITKIRBY_GAMEWATCH_CHEFPAN_H
/* 2C74D8 */ Item_GObj* it_802C74D8(HSD_GObj* parent, Vec3* pos, Fighter_Part,
                                    float dir);
/* 2C75DC */ void itKirbyGameWatchChefPan_Logic113_Destroyed(Item_GObj*);
/* 2C760C */ void it_802C760C(Item_GObj*);
/* 2C7658 */ void it_802C7658(Item_GObj*);
/* 2C7678 */ void it_802C7678(Item_GObj*);
/* 2C7698 */ void itKirbyGameWatchChefPan_Logic113_PickedUp(Item_GObj*);
/* 2C76E8 */ bool itKirbygamewatchchefpan_UnkMotion0_Anim(Item_GObj*);
/* 2C7754 */ void itKirbyGameWatchChefPan_Logic113_EvtUnk(Item_GObj*,
                                                          HSD_GObj* ref_gobj);
/* 3F7958 */ extern ItemStateTable it_803F7958[];
#define GALE01_2ADC04
/* 2ADC04 */ void itKirbyHammer_Logic8_Destroyed(Item_GObj* gobj);
/* 2ADC34 */ void it_802ADC34(Item_GObj* gobj);
/* 2ADC54 */ Item_GObj* it_802ADC54(HSD_GObj* parent, Vec3* pos,
                                    Fighter_Part sfx, u32 vars, float dir);
/* 2ADD88 */ void itKirbyHammer_Logic8_PickedUp(Item_GObj* gobj);
/* 2ADDB0 */ void it_802ADDB0(Item_GObj* gobj, HSD_GObj* ref_gobj);
/* 3F6C98 */ extern ItemStateTable it_803F6C98[];
#define GALE01_2F2D98
/* 2F2D98 */ void it_802F2D98(Item_GObj* gobj, Fighter_GObj* owner_gobj);
/* 2F2E7C */ void it_802F2E7C(Item_GObj* gobj, bool has_destroy_type);
/* 3F9490 */ extern ItemStateTable it_803F9490[];
#define GALE01_2D007C
/* 2D007C */ void itKireihana_Logic15_Spawned(Item_GObj*);
/* 2D0118 */ void itKireihana_Logic15_EvtUnk(Item_GObj*, Item_GObj*);
/* 2D0138 */ void it_802D0138(HSD_GObj* gobj);
/* 2D01A0 */ void it_802D01A0(Item_GObj*);
/* 2D0204 */ bool itKireihana_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D02BC */ void itKireihana_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D0390 */ bool itKireihana_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D03F8 */ void it_802D03F8(HSD_GObj* gobj);
/* 2D0454 */ bool itKireihana_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D04F8 */ void itKireihana_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D05AC */ bool itKireihana_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D05D8 */ void it_802D05D8(HSD_GObj* gobj);
/* 2D062C */ void it_802D062C(Item_GObj* gobj);
/* 2D0690 */ bool itKireihana_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D06EC */ void itKireihana_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D070C */ bool itKireihana_UnkMotion3_Coll(Item_GObj* gobj);
/* 2D0774 */ void it_802D0774(Item_GObj* gobj);
/* 2D07C0 */ void it_802D07C0(Item_GObj* gobj);
/* 2D080C */ bool itKireihana_UnkMotion4_Anim(Item_GObj* gobj);
/* 2D0860 */ void itKireihana_UnkMotion4_Phys(Item_GObj* gobj);
/* 2D08C4 */ bool itKireihana_UnkMotion4_Coll(Item_GObj* gobj);
/* 2D08F0 */ void it_802D08F0(Item_GObj* gobj);
/* 2D0964 */ bool itKireihana_UnkMotion0_Anim(Item_GObj* gobj);
/* 2D0988 */ void itKireihana_UnkMotion0_Phys(Item_GObj* gobj);
/* 2D09A8 */ bool itKireihana_UnkMotion0_Coll(Item_GObj* gobj);
/* 3F7E28 */ extern ItemStateTable it_803F7E28[];
#define GALE01_2E1820
/* 2E1820 */ void it_802E1820(Item_GObj*);
/* 2E1874 */ void itKlap_Logic10_Destroyed(Item_GObj*);
/* 2E18B4 */ Item_GObj* it_802E18B4(Item_GObj* gobj);
/* 2E1930 */ void it_802E1930(Item_GObj*);
/* 2E1968 */ bool itKlap_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E1970 */ void itKlap_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E19FC */ bool itKlap_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E1C4C */ void it_802E1C4C(Item_GObj* gobj);
/* 2E1C84 */ void it_802E1C84(Item_GObj* gobj);
/* 2E1D24 */ bool itKlap_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E1D2C */ void itKlap_UnkMotion2_Phys(Item_GObj* gobj);
/* 2E1E54 */ bool itKlap_UnkMotion2_Coll(Item_GObj* gobj);
/* 2E1E5C */ bool it_2725_Logic10_DmgReceived(Item_GObj*);
/* 2E1E94 */ void it_802E1E94(Item_GObj* gobj);
/* 2E1F2C */ bool itKlap_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E1F34 */ void itKlap_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E20D0 */ bool itKlap_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E20D8 */ void it_802E20D8(Item_GObj*);
/* 2E2148 */ bool itKlap_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E2150 */ void itKlap_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E2154 */ bool itKlap_UnkMotion3_Coll(Item_GObj* gobj);
/* 2E215C */ void it_802E215C(Item_GObj*);
/* 2E2330 */ void it_802E2330(Item_GObj*, Vec3*, lbColl_80008D30_arg1*, f32);
/* 2E2450 */ void it_802E2450(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F8940[];
#define GALE01_2AC8A8
/* 2AC8A8 */ void itKoopaFlame_Update_Direction(Item_GObj* gobj, int flags);
/* 2AC9F8 */ void itKoopaFlame_Update_Angle(Item_GObj* gobj, int flags);
/* 2ACBA0 */ Item_GObj* itKoopaFlame_Spawn(Fighter_GObj* parent, Vec3* pos,
                                           f32 facing_dir, u32 unk, s32 gfx,
                                           s32 base_speed, s32 scale,
                                           s32 kind);
/* 2ACEBC */ void itKoopaFlame_Setup(Item_GObj* gobj_i, Fighter_GObj* gobj_f,
                                     int unk);
/* 2ACF9C */ bool itKoopaFlame_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AD160 */ void itKoopaFlame_UnkMotion0_Phys(Item_GObj* gobj);
/* 2AD1E4 */ bool itKoopaFlame_UnkMotion0_Coll(Item_GObj* gobj);
/* 2AD2E8 */ bool itKoopaFlame_Logic111_DmgDealt(Item_GObj* gobj);
/* 2AD2F0 */ bool itKoopaFlame_Logic111_Reflected(Item_GObj* gobj);
/* 2AD384 */ bool itKoopaFlame_Logic111_Clanked(Item_GObj* gobj);
/* 2AD38C */ bool itKoopaFlame_Logic111_Absorbed(Item_GObj* gobj);
/* 2AD3B0 */ bool itKoopaFlame_Logic111_ShieldBounced(Item_GObj* gobj);
/* 2AD450 */ bool itKoopaFlame_Logic111_HitShield(Item_GObj* gobj);
/* 2AD458 */ void itKoopaFlame_Logic111_EvtUnk(Item_GObj* item_gobj,
                                               Item_GObj* ref_gobj);
/* 3F6C58 */ extern ItemStateTable ItemStateTable_KoopaFlame[];
#define GALE01_2896CC
/* 2896CC */ HSD_GObj* it_802896CC(Vec3*);
/* 289784 */ void itKusudama_Logic4_Spawned(Item_GObj*);
/* 2897C8 */ void it_802897C8(Item_GObj* gobj, float angle);
/* 289910 */ void it_80289910(Item_GObj* gobj, f32 angle);
/* 289A00 */ void it_80289A00(Item_GObj* gobj);
/* 289B50 */ void it_80289B50(Item_GObj* gobj, s32 arg1);
/* 289BE8 */ void it_80289BE8(Item_GObj* gobj, s32 arg1, s32 arg2, s32 arg3);
/* 28A114 */ bool it_8028A114(Item_GObj* gobj, s32 arg1, s32 arg2, s32 arg3,
                              s32 arg4);
/* 28A190 */ void it_8028A190(Item_GObj*);
/* 28A298 */ bool itKusudama_UnkMotion0_Anim(Item_GObj* gobj);
/* 28A2C0 */ void itKusudama_UnkMotion0_Phys(Item_GObj* gobj);
/* 28A2C4 */ bool itKusudama_UnkMotion0_Coll(Item_GObj* gobj);
/* 28A2F0 */ bool itKusudama_UnkMotion1_Anim(Item_GObj* gobj);
/* 28A3A4 */ void itKusudama_UnkMotion1_Phys(Item_GObj* gobj);
/* 28A3A8 */ bool itKusudama_UnkMotion1_Coll(Item_GObj* gobj);
/* 28A3CC */ void it_8028A3CC(Item_GObj*);
/* 28A4C0 */ bool itKusudama_UnkMotion2_Anim(Item_GObj* gobj);
/* 28A4E8 */ void itKusudama_UnkMotion2_Phys(Item_GObj* gobj);
/* 28A518 */ bool itKusudama_UnkMotion2_Coll(Item_GObj* gobj);
/* 28A544 */ void it_8028A544(Item_GObj* gobj);
/* 28A690 */ bool itKusudama_UnkMotion3_Anim(Item_GObj* gobj);
/* 28A7F0 */ void itKusudama_UnkMotion3_Phys(Item_GObj* gobj);
/* 28A7F4 */ bool itKusudama_UnkMotion3_Coll(Item_GObj* gobj);
/* 28A93C */ void itKusudama_Logic4_PickedUp(Item_GObj*);
/* 28A964 */ bool itKusudama_UnkMotion4_Anim(Item_GObj* gobj);
/* 28A96C */ void itKusudama_UnkMotion4_Phys(Item_GObj* gobj);
/* 28A970 */ void itKusudama_Logic4_Thrown(Item_GObj*);
/* 28A9AC */ bool itKusudama_UnkMotion6_Anim(Item_GObj* gobj);
/* 28A9B4 */ void itKusudama_UnkMotion6_Phys(Item_GObj* gobj);
/* 28AA00 */ bool itKusudama_UnkMotion5_Coll(Item_GObj* gobj);
/* 28AB28 */ void itKusudama_Logic4_Dropped(Item_GObj*);
/* 28AB64 */ bool itKusudama_UnkMotion6_Coll(Item_GObj* gobj);
/* 28AC74 */ void it_8028AC74(Item_GObj* gobj);
/* 28AD18 */ bool itKusudama_UnkMotion7_Anim(Item_GObj* gobj);
/* 28AD38 */ void itKusudama_UnkMotion7_Phys(Item_GObj* gobj);
/* 28AD3C */ bool itKusudama_UnkMotion7_Coll(Item_GObj* gobj);
/* 28AD44 */ void it_8028AD44(Item_GObj* gobj);
/* 28ADD4 */ bool itKusudama_UnkMotion8_Anim(Item_GObj* gobj);
/* 28AE98 */ void itKusudama_UnkMotion8_Phys(Item_GObj* gobj);
/* 28AE9C */ bool itKusudama_UnkMotion8_Coll(Item_GObj* gobj);
/* 28AEA4 */ bool itKusudama_Logic4_DmgDealt(Item_GObj*);
/* 28AF1C */ bool itKusudama_Logic4_Clanked(Item_GObj*);
/* 28AF54 */ bool itKusudama_Logic4_HitShield(Item_GObj*);
/* 28AF8C */ bool itKusudama_Logic4_Reflected(Item_GObj*);
/* 28AFC4 */ bool itKusudama_Logic4_DmgReceived(Item_GObj*);
/* 28B06C */ void itKusudama_Logic4_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F59F8 */ extern ItemStateTable it_803F59F8[];
#define GALE01_2ECCDC
/* 2ECCDC */ void itKyasarin_Logic25_Destroyed(Item_GObj*);
/* 2ECD1C */ void it_802ECD1C(Item_GObj*, Vec3*);
/* 2ECD3C */ HSD_GObj* it_802ECD3C(HSD_GObj*, Vec3*, f32);
/* 2ECE90 */ void it_802ECE90(Item_GObj*);
/* 2ECEB0 */ void it_802ECEB0(Item_GObj* gobj);
/* 2ECF00 */ bool itKyasarin_UnkMotion0_Anim(Item_GObj* gobj);
/* 2ECF70 */ bool itKyasarin_UnkMotion0_Coll(Item_GObj* gobj);
/* 2ECFE0 */ void it_802ECFE0(Item_GObj* gobj);
/* 2ED040 */ bool itKyasarin_UnkMotion1_Anim(Item_GObj* gobj);
/* 2ED088 */ bool itKyasarin_UnkMotion3_Anim(Item_GObj* gobj);
/* 2ED0D0 */ void it_802ED0D0(Item_GObj* gobj);
/* 2ED124 */ bool itKyasarin_UnkMotion2_Anim(Item_GObj* gobj);
/* 2ED198 */ bool itKyasarin_UnkMotion2_Coll(Item_GObj* gobj);
/* 2ED25C */ void it_802ED25C(Item_GObj* gobj);
/* 2ED2AC */ bool itKyasarin_UnkMotion4_Anim(Item_GObj* gobj);
/* 2ED31C */ bool itKyasarin_UnkMotion4_Coll(Item_GObj* gobj);
/* 2ED4F8 */ void it_802ED4F8(HSD_GObj* gobj);
/* 2ED520 */ bool itKyasarin_UnkMotion6_Anim(Item_GObj* gobj);
/* 2ED774 */ void it_802ED774(HSD_GObj* gobj);
/* 2ED79C */ bool itKyasarin_UnkMotion7_Anim(Item_GObj* gobj);
/* 2ED8BC */ void it_802ED8BC(HSD_GObj* gobj);
/* 2ED8E4 */ bool itKyasarin_UnkMotion5_Anim(Item_GObj* gobj);
/* 2ED92C */ bool itKyasarin_UnkMotion8_Anim(Item_GObj* gobj);
/* 2EDCD0 */ bool itKyasarin_UnkMotion9_Anim(Item_GObj* gobj);
/* 2EDD18 */ void itKyasarin_UnkMotion9_Phys(Item_GObj* gobj);
/* 2EDD34 */ bool itKyasarin_UnkMotion9_Coll(Item_GObj* gobj);
/* 2EDD54 */ bool itKyasarin_UnkMotion10_Anim(Item_GObj* gobj);
/* 2EDD9C */ void itKyasarin_UnkMotion10_Phys(Item_GObj* gobj);
/* 2EDDA0 */ bool itKyasarin_UnkMotion10_Coll(Item_GObj* gobj);
/* 2EDDC0 */ bool it_802EDDC0(Item_GObj*);
/* 2EE1E0 */ void it_802EE1E0(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F90D0[];
#define MELEE_IT_KINDS_ITKYASARINEGG_H
extern ItemStateTable it_803F9328[];
void it_802EFA44(Item_GObj*, Vec*, float);
void it_802EFB0C(Item_GObj*);
void itKyasarinEgg_Logic28_PickedUp(Item_GObj*);
void itKyasarinEgg_Logic28_Dropped(Item_GObj*);
void itKyasarinEgg_Logic28_Thrown(Item_GObj*);
bool it_2725_Logic28_DmgDealt(Item_GObj*);
bool it_802F022C(Item_GObj*);
bool it_2725_Logic28_Reflected(Item_GObj*);
bool it_2725_Logic28_Clanked(Item_GObj*);
bool itKyasarinEgg_Logic28_ShieldBounced(Item_GObj*);
bool it_2725_Logic28_HitShield(Item_GObj*);
void it_802F0320(Item_GObj*, Item_GObj*);
bool itKyasarinegg_UnkMotion1_Coll(Item_GObj* gobj);
void itKyasarinegg_UnkMotion1_Phys(Item_GObj* gobj);
bool itKyasarinegg_UnkMotion3_Coll(Item_GObj* gobj);
void itKyasarinegg_UnkMotion3_Phys(Item_GObj* gobj);
bool itKyasarinegg_UnkMotion4_Anim(Item_GObj* gobj);
bool itKyasarinegg_UnkMotion0_Coll(Item_GObj* gobj);
void it_802EFCC0(Item_GObj*);
void it_802EFD84(Item_GObj*);
#define GALE01_2E8BCC
/* 2E8BCC */ void it_802E8BCC(Item_GObj*);
/* 2E8CD8 */ bool it_802E8CD8(Item_GObj*);
/* 2E8F24 */ void it_802E8F24(Item_GObj* gobj);
/* 2E8F7C */ bool itLeadead_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E8F84 */ void itLeadead_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E8FFC */ bool itLeadead_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E9038 */ void it_802E9038(Item_GObj* gobj);
/* 2E90E8 */ bool itLeadead_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E91AC */ void itLeadead_UnkMotion2_Phys(Item_GObj* gobj);
/* 2E92A0 */ bool itLeadead_UnkMotion2_Coll(Item_GObj* gobj);
/* 2E9308 */ void it_802E9308(Item_GObj* gobj);
/* 2E9354 */ bool itLeadead_UnkMotion10_Anim(Item_GObj* gobj);
/* 2E935C */ void itLeadead_UnkMotion10_Phys(Item_GObj* gobj);
/* 2E938C */ bool itLeadead_UnkMotion10_Coll(Item_GObj* gobj);
/* 2E93C8 */ void it_802E93C8(Item_GObj* gobj);
/* 2E9494 */ void it_802E9494(Item_GObj* gobj);
/* 2E959C */ bool itLeadead_UnkMotion11_Anim(Item_GObj* gobj);
/* 2E9624 */ bool itLeadead_UnkMotion12_Anim(Item_GObj* gobj);
/* 2E9674 */ void itLeadead_UnkMotion12_Phys(Item_GObj* gobj);
/* 2E969C */ bool itLeadead_UnkMotion12_Coll(Item_GObj* gobj);
/* 2E9738 */ void it_802E9738(Item_GObj* gobj);
/* 2E9780 */ bool itLeadead_UnkMotion7_Anim(Item_GObj* gobj);
/* 2E9850 */ void itLeadead_UnkMotion7_Phys(Item_GObj* gobj);
/* 2E98A4 */ bool itLeadead_UnkMotion7_Coll(Item_GObj* gobj);
/* 2E98E0 */ void it_802E98E0(Item_GObj* gobj);
/* 2E9948 */ bool itLeadead_UnkMotion8_Anim(Item_GObj* gobj);
/* 2E9950 */ void itLeadead_UnkMotion8_Phys(Item_GObj* gobj);
/* 2E99C4 */ bool itLeadead_UnkMotion8_Coll(Item_GObj* gobj);
/* 2E9A00 */ void it_802E9A00(Item_GObj* gobj);
/* 2E9A38 */ bool itLeadead_UnkMotion9_Anim(Item_GObj* gobj);
/* 2E9B60 */ void itLeadead_UnkMotion9_Phys(Item_GObj* gobj);
/* 2E9B64 */ bool itLeadead_UnkMotion9_Coll(Item_GObj* gobj);
/* 2E9BA0 */ void it_802E9BA0(Item_GObj* gobj);
/* 2E9BE4 */ bool itLeadead_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E9D10 */ void itLeadead_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E9D14 */ bool itLeadead_UnkMotion3_Coll(Item_GObj* gobj);
/* 2E9D50 */ void it_802E9D50(Item_GObj* gobj);
/* 2E9D94 */ bool itLeadead_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E9D9C */ void itLeadead_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E9DE8 */ bool itLeadead_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E9F28 */ bool itLeadead_UnkMotion5_Anim(Item_GObj* gobj);
/* 2EA004 */ void itLeadead_UnkMotion5_Phys(Item_GObj* gobj);
/* 2EA008 */ bool itLeadead_UnkMotion5_Coll(Item_GObj* gobj);
/* 2EA010 */ bool itLeadead_UnkMotion6_Anim(Item_GObj* gobj);
/* 2EA0A0 */ void itLeadead_UnkMotion6_Phys(Item_GObj* gobj);
/* 2EA0A4 */ bool itLeadead_UnkMotion6_Coll(Item_GObj* gobj);
/* 2EA0E0 */ void itLeadead_Logic1_PickedUp(Item_GObj*);
/* 2EA108 */ bool itLeadead_UnkMotion13_Anim(Item_GObj* gobj);
/* 2EA150 */ void itLeadead_UnkMotion13_Phys(Item_GObj* gobj);
/* 2EA154 */ void itLeadead_Logic1_Dropped(Item_GObj*);
/* 2EA1B4 */ void itLeadead_Logic1_Thrown(Item_GObj*);
/* 2EA204 */ bool itLeadead_UnkMotion14_Anim(Item_GObj* gobj);
/* 2EA24C */ void itLeadead_UnkMotion14_Phys(Item_GObj* gobj);
/* 2EA27C */ bool itLeadead_UnkMotion14_Coll(Item_GObj* gobj);
/* 2EA2A0 */ void it_802EA2A0(Item_GObj* gobj);
/* 2EA308 */ bool itLeadead_UnkMotion15_Anim(Item_GObj* gobj);
/* 2EA310 */ void itLeadead_UnkMotion15_Phys(Item_GObj* gobj);
/* 2EA314 */ bool itLeadead_UnkMotion15_Coll(Item_GObj* gobj);
/* 2EA334 */ void it_802EA334(Item_GObj* gobj);
/* 2EA394 */ bool itLeadead_UnkMotion16_Anim(Item_GObj* gobj);
/* 2EA39C */ void itLeadead_UnkMotion16_Phys(Item_GObj* gobj);
/* 2EA3B8 */ bool itLeadead_UnkMotion16_Coll(Item_GObj* gobj);
/* 2EA3D8 */ bool itLeadead_UnkMotion17_Anim(Item_GObj* gobj);
/* 2EA3E0 */ void itLeadead_UnkMotion17_Phys(Item_GObj* gobj);
/* 2EA3FC */ bool itLeadead_UnkMotion17_Coll(Item_GObj* gobj);
/* 2EA41C */ void itLeadead_Logic1_Destroyed(Item_GObj*);
/* 2EA478 */ void it_802EA478(Item_GObj* gobj, s32 arg1, s32 arg2);
/* 2EA674 */ s32 it_802EA674(Item_GObj* gobj);
/* 2EA6F4 */ s32 it_802EA6F4(Item_GObj* gobj);
/* 2EA804 */ bool it_802EA804(Item_GObj* gobj, f32 range);
/* 2EA988 */ s32 it_802EA988(Item_GObj* gobj, f32 x_offset, f32 y_offset);
/* 2EA9FC */ Item_GObj* it_802EA9FC(Vec3* pos, s32 facing_dir);
/* 2EAAEC */ void it_802EAAEC(Item_GObj*, Fighter_GObj*, int, f32);
/* 2EAC8C */ void it_802EAC8C(Item_GObj* gobj);
/* 2EADD8 */ void it_802EADD8(Item_GObj* gobj);
/* 2EAE80 */ void it_802EAE80(Item_GObj* gobj);
/* 3F8EB0 */ extern ItemStateTable it_803F8EB0[];
#define GALE01_28E738
/* 28E738 */ void itLGun_Logic16_Spawned(Item_GObj*);
/* 28E904 */ void itLGun_Logic16_PickedUp(Item_GObj*);
/* 28E9B8 */ void itLGun_Logic16_Dropped(Item_GObj*);
/* 28E9E0 */ void itLGun_Logic16_Thrown(Item_GObj*);
/* 28EA54 */ bool itLGun_Logic16_DmgDealt(Item_GObj*);
/* 28EA78 */ bool itLGun_Logic16_Clanked(Item_GObj*);
/* 28EA9C */ bool itLGun_Logic16_HitShield(Item_GObj*);
/* 28EAC0 */ bool itLGun_Logic16_Reflected(Item_GObj*);
/* 28EAE0 */ bool itLGun_Logic16_ShieldBounced(Item_GObj*);
/* 28EB00 */ void itLGun_Logic16_EnteredAir(Item_GObj*);
/* 28EB68 */ void itLGun_Logic16_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5CC8 */ extern ItemStateTable it_803F5CC8[];
void it_8028E938(Item_GObj*);
void it_8028E774(Item_GObj*, Vec3*);
void it_8028E79C(Item_GObj* gobj, Vec3* pos, f32 facing_dir);
#define GALE01_2993E0
/* 2996D0 */ Item_GObj* it_802996D0(HSD_GObj*, Vec3*, u32, f32);
/* 299B6C */ bool itLGunBeam_Logic39_DmgDealt(Item_GObj*);
/* 299B74 */ bool itLGunBeam_Logic39_Reflected(Item_GObj*);
/* 299C08 */ bool itLGunBeam_Logic39_Clanked(Item_GObj*);
/* 299C10 */ bool itLGunBeam_Logic39_Absorbed(Item_GObj*);
/* 299C18 */ bool itLGunBeam_Logic39_ShieldBounced(Item_GObj*);
/* 299C20 */ bool itLGunBeam_Logic39_HitShield(Item_GObj*);
/* 299C28 */ void itLGunBeam_Logic39_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F6630 */ extern ItemStateTable it_803F6630[];
#define GALE01_298168
/* 298168 */ void it_80298168(HSD_GObj* owner_gobj, Vec3* pos, f32 facing_dir);
/* 298634 */ bool itLGunRay_Logic35_DmgDealt(Item_GObj*);
/* 29863C */ bool itLGunRay_Logic35_Clanked(Item_GObj*);
/* 298644 */ bool itLGunRay_Logic35_HitShield(Item_GObj*);
/* 29864C */ bool itLGunRay_Logic35_Absorbed(Item_GObj*);
/* 298654 */ bool itLGunRay_Logic35_Reflected(Item_GObj*);
/* 298828 */ bool itLGunRay_Logic35_ShieldBounced(Item_GObj*);
/* 2988C4 */ void itLGunRay_Logic35_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F64F8 */ extern ItemStateTable it_803F64F8[];
#define GALE01_2D9A2C
/* 2D9A2C */ bool it_802D9A2C(Item_GObj* gobj);
/* 2D9B78 */ void it_802D9B78(Item_GObj*);
/* 2D9BA8 */ void it_802D9BA8(Item_GObj*);
/* 2D9CC4 */ bool it_2725_Logic5_DmgReceived(Item_GObj*);
/* 2D9DDC */ void it_802D9DDC(Item_GObj*);
/* 2D9E38 */ bool itLikelike_UnkMotion0_Anim(Item_GObj* gobj);
/* 2D9E80 */ void itLikelike_UnkMotion0_Phys(Item_GObj* gobj);
/* 2D9EF4 */ bool itLikelike_UnkMotion0_Coll(Item_GObj* gobj);
/* 2D9F9C */ bool itLikelike_UnkMotion7_Anim(Item_GObj* gobj);
/* 2D9FDC */ void itLikelike_UnkMotion7_Phys(Item_GObj* gobj);
/* 2DA05C */ bool itLikelike_UnkMotion7_Coll(Item_GObj* gobj);
/* 2DA104 */ void it_802DA104(Item_GObj*);
/* 2DA194 */ bool itLikelike_UnkMotion1_Anim(Item_GObj* gobj);
/* 2DA1DC */ void itLikelike_UnkMotion1_Phys(Item_GObj* gobj);
/* 2DA348 */ bool itLikelike_UnkMotion1_Coll(Item_GObj* gobj);
/* 2DA4C0 */ void it_802DA4C0(Item_GObj* gobj);
/* 2DA550 */ bool itLikelike_UnkMotion2_Anim(Item_GObj* gobj);
/* 2DA598 */ void itLikelike_UnkMotion2_Phys(Item_GObj* gobj);
/* 2DA730 */ bool itLikelike_UnkMotion2_Coll(Item_GObj* gobj);
/* 2DA8D8 */ void it_802DA8D8(Item_GObj*);
/* 2DA960 */ void it_802DA960(Item_GObj*);
/* 2DAA10 */ void it_802DAA10(Item_GObj*);
/* 2DAAD0 */ bool itLikelike_UnkMotion5_Anim(Item_GObj* gobj);
/* 2DAAD8 */ void itLikelike_UnkMotion5_Phys(Item_GObj* gobj);
/* 2DAB48 */ bool itLikelike_UnkMotion4_Coll(Item_GObj* gobj);
/* 2DAB84 */ bool itLikelike_UnkMotion5_Coll(Item_GObj* gobj);
/* 2DABC0 */ void it_802DABC0(Item_GObj*);
/* 2DAC20 */ bool itLikelike_UnkMotion17_Anim(Item_GObj* gobj);
/* 2DAC98 */ void itLikelike_UnkMotion17_Phys(Item_GObj* gobj);
/* 2DACE4 */ bool itLikelike_UnkMotion17_Coll(Item_GObj* gobj);
/* 2DAD18 */ void it_802DAD18(HSD_GObj* gobj);
/* 2DAE0C */ bool itLikelike_UnkMotion3_Anim(Item_GObj* gobj);
/* 2DAE14 */ void itLikelike_UnkMotion3_Phys(Item_GObj* gobj);
/* 2DAE30 */ bool itLikelike_UnkMotion3_Coll(Item_GObj* gobj);
/* 2DAE6C */ void it_802DAE6C(Item_GObj* gobj);
/* 2DAEA8 */ bool itLikelike_UnkMotion16_Anim(Item_GObj* gobj);
/* 2DAFC8 */ void itLikelike_UnkMotion16_Phys(Item_GObj* gobj);
/* 2DAFCC */ bool itLikelike_UnkMotion16_Coll(Item_GObj* gobj);
/* 2DB074 */ void it_802DB074(Item_GObj* gobj);
/* 2DB0F0 */ bool itLikelike_UnkMotion8_Anim(Item_GObj* gobj);
/* 2DB138 */ void itLikelike_UnkMotion8_Phys(Item_GObj* gobj);
/* 2DB2B0 */ bool itLikelike_UnkMotion8_Coll(Item_GObj* gobj);
/* 2DB358 */ void it_802DB358(Item_GObj* gobj);
/* 2DB398 */ void it_802DB398(Item_GObj* gobj);
/* 2DB464 */ bool itLikelike_UnkMotion12_Anim(Item_GObj* gobj);
/* 2DB500 */ void itLikelike_UnkMotion12_Phys(Item_GObj* gobj);
/* 2DB570 */ bool itLikelike_UnkMotion12_Coll(Item_GObj* gobj);
/* 2DB5F0 */ void it_802DB5F0(Item_GObj* gobj);
/* 2DB670 */ bool itLikelike_UnkMotion9_Anim(Item_GObj* gobj);
/* 2DB70C */ void itLikelike_UnkMotion9_Phys(Item_GObj* gobj);
/* 2DB710 */ bool itLikelike_UnkMotion9_Coll(Item_GObj* gobj);
/* 2DB74C */ void it_802DB74C(Item_GObj* gobj);
/* 2DB7CC */ bool itLikelike_UnkMotion10_Anim(Item_GObj* gobj);
/* 2DB868 */ void itLikelike_UnkMotion10_Phys(Item_GObj* gobj);
/* 2DB86C */ bool itLikelike_UnkMotion10_Coll(Item_GObj* gobj);
/* 2DB8A8 */ void it_802DB8A8(Item_GObj* gobj);
/* 2DB914 */ bool itLikelike_UnkMotion13_Anim(Item_GObj* gobj);
/* 2DB95C */ void itLikelike_UnkMotion13_Phys(Item_GObj* gobj);
/* 2DB9B8 */ bool itLikelike_UnkMotion13_Coll(Item_GObj* gobj);
/* 2DB9F4 */ void it_802DB9F4(Item_GObj* arg0);
/* 2DBA68 */ void it_802DBA68(Item_GObj*);
/* 2DBAF0 */ void it_802DBAF0(Item_GObj*, s32, s32);
/* 2DBC68 */ bool itLikelike_UnkMotion14_Anim(Item_GObj* gobj);
/* 2DBD3C */ void itLikelike_UnkMotion14_Phys(Item_GObj* gobj);
/* 2DBD40 */ bool itLikelike_UnkMotion14_Coll(Item_GObj* gobj);
/* 2DBD7C */ bool itLikelike_UnkMotion15_Anim(Item_GObj* gobj);
/* 2DBE50 */ void itLikelike_UnkMotion15_Phys(Item_GObj* gobj);
/* 2DBE54 */ bool itLikelike_UnkMotion15_Coll(Item_GObj* gobj);
/* 2DBE90 */ void itLikeLike_Logic5_PickedUp(Item_GObj*);
/* 2DBED4 */ bool itLikelike_UnkMotion18_Anim(Item_GObj* gobj);
/* 2DBF2C */ void itLikelike_UnkMotion18_Phys(Item_GObj* gobj);
/* 2DBF30 */ void it_2725_Logic5_Dropped(Item_GObj*);
/* 2DC000 */ void itLikeLike_Logic5_Thrown(Item_GObj*);
/* 2DC050 */ bool itLikelike_UnkMotion19_Anim(Item_GObj* gobj);
/* 2DC058 */ void itLikelike_UnkMotion19_Phys(Item_GObj* gobj);
/* 2DC088 */ bool itLikelike_UnkMotion19_Coll(Item_GObj* gobj);
/* 2DC0AC */ void it_802DC0AC(Item_GObj*);
/* 2DC114 */ bool itLikelike_UnkMotion6_Anim(Item_GObj* gobj);
/* 2DC11C */ void itLikelike_UnkMotion6_Phys(Item_GObj* gobj);
/* 2DC268 */ bool itLikelike_UnkMotion6_Coll(Item_GObj* gobj);
/* 2DC310 */ void it_802DC310(Item_GObj*);
/* 2DC370 */ bool itLikelike_UnkMotion20_Anim(Item_GObj* gobj);
/* 2DC3B8 */ void itLikelike_UnkMotion20_Phys(Item_GObj* gobj);
/* 2DC3BC */ bool itLikelike_UnkMotion20_Coll(Item_GObj* gobj);
/* 2DC3DC */ void it_802DC3DC(Item_GObj*);
/* 2DC43C */ bool itLikelike_UnkMotion21_Anim(Item_GObj* gobj);
/* 2DC444 */ void itLikelike_UnkMotion21_Phys(Item_GObj* gobj);
/* 2DC460 */ bool itLikelike_UnkMotion21_Coll(Item_GObj* gobj);
/* 2DC480 */ void itLikeLike_Logic5_Destroyed(Item_GObj*);
/* 2DC4BC */ Item_GObj* it_802DC4BC(s32 arg0, Vec3* arg1, s32 arg2);
/* 3F8468 */ extern ItemStateTable it_803F8468[];
#define GALE01_2A7D8C
/* 2A7D8C */ void it_802A7D8C(HSD_GObj*, intptr_t);
/* 2A7E40 */ void it_802A7E40(Item_GObj*);
/* 2A81C4 */ s32 itLinkArrow_802A81C4(Item_GObj*);
/* 2A8330 */ void it_802A8330(HSD_GObj*);
/* 2A8398 */ void it_802A8398(Item_GObj*, Vec3*, Vec3*);
/* 2A83E0 */ HSD_GObj* it_802A83E0(f32, Fighter_GObj*, Vec3*, Fighter_Part,
                                   s32);
/* 2A850C */ bool itLinkArrow_802A850C(Item_GObj*, Vec3*, Vec3*, f32, f32,
                                       f32);
/* 2A8984 */ void itLinkArrow_Logic98_Destroyed(Item_GObj*);
/* 2A8A7C */ void it_802A8A7C(Item_GObj*);
/* 2A8AF8 */ void itLinkArrow_Logic98_PickedUp(Item_GObj*);
/* 2A8B20 */ bool itLinkarrow_UnkMotion0_Anim(HSD_GObj*);
/* 2A8C70 */ void itLinkarrow_UnkMotion0_Phys(HSD_GObj*);
/* 2A8C74 */ bool itLinkarrow_UnkMotion0_Coll(HSD_GObj*);
/* 2A8C7C */ void it_802A8C7C(HSD_GObj*);
/* 2A8CC8 */ bool itLinkarrow_UnkMotion1_Anim(HSD_GObj*);
/* 2A90F0 */ void itLinkarrow_UnkMotion1_Phys(Item_GObj*);
/* 2A9138 */ bool itLinkarrow_UnkMotion1_Coll(Item_GObj*);
/* 2A934C */ bool itLinkarrow_UnkMotion2_Anim(Item_GObj*);
/* 2A93B4 */ void itLinkarrow_UnkMotion2_Phys(HSD_GObj*);
/* 2A943C */ bool itLinkarrow_UnkMotion2_Coll(HSD_GObj*);
/* 2A9444 */ bool itLinkarrow_UnkMotion3_Anim(HSD_GObj*);
/* 2A944C */ void itLinkarrow_UnkMotion3_Phys(HSD_GObj*);
/* 2A9450 */ bool itLinkarrow_UnkMotion3_Coll(HSD_GObj*);
/* 2A9458 */ void it_802A9458(HSD_GObj*);
/* 2A96E4 */ bool itLinkarrow_UnkMotion4_Anim(Item_GObj*);
/* 2A98E4 */ void itLinkarrow_UnkMotion4_Phys(HSD_GObj*);
/* 2A98E8 */ bool itLinkarrow_UnkMotion4_Coll(HSD_GObj*);
/* 2A9A80 */ bool itLinkArrow_Logic98_DmgDealt(Item_GObj*);
/* 2A9B08 */ bool itLinkArrow_Logic98_HitShield(Item_GObj*);
/* 2A9CE0 */ bool itLinkArrow_Logic98_Clanked(Item_GObj*);
/* 2A9D4C */ bool itLinkArrow_Logic98_Reflected(Item_GObj*);
/* 2AA034 */ void itLinkArrow_Logic98_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6A28 */ extern ItemStateTable it_803F6A28[];
#define GALE01_29D968
/* 29D968 */ void it_8029D968(Item_GObj*);
/* 29D9A4 */ void it_8029D9A4(HSD_GObj*, enum_t, Item_StateChangeFlags);
/* 29DB5C */ void it_8029DB5C(HSD_GObj*);
/* 29DD58 */ HSD_GObj* it_8029DD58(Item_GObj* fighter_gobj, Vec3*, u32, int,
                                   f32);
/* 29DEB0 */ void it_8029DEB0(HSD_GObj*);
/* 29E074 */ bool itLinkbomb_UnkMotion0_Anim(HSD_GObj*);
/* 29E218 */ void itLinkbomb_UnkMotion0_Phys(HSD_GObj*);
/* 29E21C */ void fn_8029E21C(HSD_GObj*);
/* 29E3D8 */ bool itLinkbomb_UnkMotion1_Anim(HSD_GObj*);
/* 29E574 */ void itLinkbomb_UnkMotion1_Phys(HSD_GObj*);
/* 29E5A4 */ bool itLinkbomb_UnkMotion1_Coll(Item_GObj*);
/* 29E5D0 */ void it_8029E5D0(HSD_GObj*);
/* 29E920 */ bool itLinkbomb_UnkMotion2_Anim(HSD_GObj*);
/* 29EAF0 */ void itLinkbomb_UnkMotion2_Phys(Item_GObj*);
/* 29EB3C */ bool itLinkbomb_UnkMotion2_Coll(HSD_GObj*);
/* 29EC34 */ void it_8029EC34(HSD_GObj*);
/* 29EF84 */ bool itLinkbomb_UnkMotion3_Anim(HSD_GObj*);
/* 29F04C */ void itLinkbomb_UnkMotion3_Phys(Item_GObj*);
/* 29F098 */ bool itLinkbomb_UnkMotion3_Coll(HSD_GObj*);
/* 29F18C */ void it_8029F18C(HSD_GObj*);
/* 29F3DC */ bool itLinkbomb_UnkMotion4_Anim(HSD_GObj*);
/* 29F60C */ void itLinkbomb_UnkMotion4_Phys(HSD_GObj*);
/* 29F670 */ bool itLinkbomb_UnkMotion4_Coll(Item_GObj*);
/* 29F69C */ void it_8029F69C(HSD_GObj*);
/* 29F934 */ bool itLinkbomb_UnkMotion5_Anim(Item_GObj*);
/* 29F954 */ void itLinkbomb_UnkMotion5_Phys(HSD_GObj*);
/* 29F958 */ bool itLinkbomb_UnkMotion5_Coll(HSD_GObj*);
/* 29F960 */ bool it_8029F960(Item_GObj*);
/* 29FA30 */ bool itLinkBomb_Logic16_DmgReceived(Item_GObj*);
/* 29FB24 */ void itLinkBomb_Logic16_EnteredAir(Item_GObj*);
/* 29FB4C */ bool itLinkbomb_UnkMotion6_Anim(HSD_GObj*);
/* 29FCE8 */ void itLinkbomb_UnkMotion6_Phys(HSD_GObj*);
/* 29FCEC */ bool itLinkbomb_UnkMotion6_Coll(Item_GObj*);
/* 29FD20 */ bool itLinkBomb_Logic16_Reflected(Item_GObj*);
/* 29FD40 */ bool itLinkBomb_Logic16_HitShield(Item_GObj*);
/* 29FD64 */ bool itLinkBomb_Logic16_ShieldBounced(Item_GObj*);
/* 29FD84 */ void it_8029FD84(Item_GObj*, Item_GObj*);
/* 3F6888 */ extern ItemStateTable it_803F6888[];
#define GALE01_29FDBC
/* 29FDBC */ bool it_8029FDBC(Item_GObj* gobj);
/* 29FDDC */ void it_8029FDDC(Item_GObj*, intptr_t);
/* 29FE64 */ void it_8029FE64(Item_GObj* gobj, s32 i);
/* 2A013C */ HSD_GObj* it_802A013C(f32 facing_dir, Fighter_GObj* owner_gobj,
                                   Vec3* pos, Fighter_Part, s32);
/* 2A0534 */ void it_802A0534(Item_GObj* gobj, Vec3*, f32 angle);
/* 2A07B4 */ void it_802A07B4(Item_GObj* gobj);
/* 2A0810 */ void it_802A0810(Item_GObj* gobj);
/* 2A087C */ void itLinkBoomerang_Logic18_Destroyed(Item_GObj*);
/* 2A0930 */ void it_802A0930(Item_GObj*);
/* 2A0C34 */ bool it_802A0C34(Item_GObj*);
/* 2A0E70 */ void it_802A0E70(Item_GObj*);
/* 2A0F08 */ bool itLinkboomerang_UnkMotion0_Anim(Item_GObj*);
/* 2A0F84 */ void it_802A0F84(Item_GObj*);
/* 2A0F88 */ void it_802A0F88(Item_GObj*);
/* 2A0FB0 */ bool itLinkboomerang_UnkMotion1_Anim(Item_GObj*);
/* 2A0FD0 */ void itLinkboomerang_UnkMotion1_Phys(Item_GObj*);
/* 2A10C0 */ bool itLinkboomerang_UnkMotion1_Coll(Item_GObj*);
/* 2A10E4 */ void it_802A10E4(Item_GObj*);
/* 2A12DC */ bool itLinkboomerang_UnkMotion2_Anim(Item_GObj*);
/* 2A12FC */ void itLinkboomerang_UnkMotion2_Phys(Item_GObj*);
/* 2A13EC */ f32 it_802A13EC(Item_GObj*);
/* 2A15EC */ void it_802A15EC(Item_GObj*, Vec3*);
/* 2A16E4 */ bool itLinkboomerang_UnkMotion2_Coll(Item_GObj*);
/* 2A1948 */ void it_802A1948(Item_GObj*, s32);
/* 2A19E0 */ void it_802A19E0(Item_GObj*);
/* 2A1C30 */ bool itLinkboomerang_UnkMotion3_Anim(Item_GObj*);
/* 2A1D60 */ void itLinkboomerang_UnkMotion3_Phys(Item_GObj* gobj);
/* 2A1F08 */ bool it_802A1F08(Item_GObj*);
/* 2A1FA8 */ bool it_802A1FA8(Item_GObj*);
/* 2A2048 */ bool itLinkBoomerang_Logic18_Absorbed(Item_GObj*);
/* 2A20E8 */ bool it_802A20E8(Item_GObj*);
/* 2A2288 */ bool it_802A2288(Item_GObj*);
/* 2A2320 */ bool it_802A2320(Item_GObj*);
/* 2A23CC */ void it_802A23CC(Item_GObj*, Item_GObj*);
/* 3F6920 */ extern ItemStateTable it_803F6920[];
#define GALE01_2AF1A4
/* 2AF1A4 */ HSD_GObj* it_802AF1A4(f32, Fighter_GObj*, Vec3*, Fighter_Part,
                                   int);
/* 2AF298 */ void itLinkBow_Logic100_Destroyed(Item_GObj*);
/* 2AF304 */ void it_802AF304(Item_GObj*);
/* 2AF434 */ void itLinkBow_Logic100_PickedUp(Item_GObj*);
/* 2AF920 */ void itLinkBow_Logic100_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6E98 */ extern ItemStateTable it_803F6E98[];
#define GALE01_29570C
/* 29570C */ void itLipstick_Logic23_Spawned(Item_GObj*);
/* 295748 */ void it_80295748(Item_GObj* gobj, Vec* pos);
/* 295770 */ void it_80295770(Item_GObj*, Vec*, float, int);
/* 2957AC */ void it_802957AC(Item_GObj*);
/* 295804 */ bool itLipstick_UnkMotion0_Anim(Item_GObj* gobj);
/* 29580C */ void itLipstick_UnkMotion0_Phys(Item_GObj* gobj);
/* 295810 */ bool itLipstick_UnkMotion0_Coll(Item_GObj* gobj);
/* 29583C */ void it_8029583C(Item_GObj* gobj);
/* 295864 */ bool itLipstick_UnkMotion4_Anim(Item_GObj* gobj);
/* 29586C */ void itLipstick_UnkMotion1_Phys(Item_GObj* gobj);
/* 29589C */ bool itLipstick_UnkMotion1_Coll(Item_GObj* gobj);
/* 2958C8 */ void itLipstick_Logic23_PickedUp(Item_GObj*);
/* 2958F0 */ bool itLipstick_UnkMotion2_Anim(Item_GObj* gobj);
/* 295904 */ void itLipstick_UnkMotion2_Phys(Item_GObj* gobj);
/* 295908 */ void itLipstick_Logic23_Dropped(Item_GObj*);
/* 295930 */ bool itLipstick_UnkMotion4_Coll(Item_GObj* gobj);
/* 295974 */ void itLipstick_Logic23_Thrown(Item_GObj*);
/* 29599C */ void itLipstick_UnkMotion4_Phys(Item_GObj* gobj);
/* 2959E8 */ bool itLipstick_UnkMotion3_Coll(Item_GObj* gobj);
/* 295ACC */ bool itLipstick_Logic23_DmgDealt(Item_GObj*);
/* 295B08 */ void itLipstick_Logic23_EnteredAir(Item_GObj*);
/* 295B30 */ bool itLipstick_UnkMotion5_Anim(Item_GObj* gobj);
/* 295B38 */ void itLipstick_UnkMotion5_Phys(Item_GObj* gobj);
/* 295B3C */ bool itLipstick_UnkMotion5_Coll(Item_GObj* gobj);
/* 295B70 */ bool itLipstick_Logic23_Clanked(Item_GObj*);
/* 295BAC */ bool itLipstick_Logic23_Reflected(Item_GObj*);
/* 295BCC */ bool itLipstick_Logic23_HitShield(Item_GObj*);
/* 295C08 */ bool itLipstick_Logic23_ShieldBounced(Item_GObj*);
/* 295C28 */ void itLipstick_Logic23_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6310 */ extern ItemStateTable it_803F6310[];
#define GALE01_29A114
typedef struct itLipstickSporeAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
    f32 xC;
    f32 x10;
    s32 x14;
    s32 x18;
} itLipstickSporeAttributes;
/* 29A114 */ void it_8029A114(Fighter_GObj*, Vec*, f32 facing_dir, s32 arg4);
/* 29A218 */ void it_8029A218(HSD_GObj* owner, Vec3* pos, f32 facing_dir,
                              s32 arg4);
/* 29A31C */ void it_8029A31C(Item_GObj*, Fighter_GObj*, Item*);
/* 29A498 */ void it_8029A498(Item_GObj* gobj, Fighter_GObj* owner);
/* 29A504 */ bool itLipstickspore_UnkMotion0_Anim(Item_GObj* gobj);
/* 29A524 */ void itLipstickspore_UnkMotion0_Phys(Item_GObj* gobj);
/* 29A58C */ bool itLipstickspore_UnkMotion0_Coll(Item_GObj* gobj);
/* 29A5C0 */ bool itLipstickspore_UnkMotion1_Anim(Item_GObj* gobj);
/* 29A5E0 */ void itLipstickspore_UnkMotion1_Phys(Item_GObj*);
/* 29A600 */ bool itLipstickSpore_Logic37_DmgDealt(Item_GObj*);
/* 29A608 */ bool itLipstickSpore_Logic37_Clanked(Item_GObj*);
/* 29A610 */ bool itLipstickSpore_Logic37_HitShield(Item_GObj*);
/* 29A618 */ bool itLipstickSpore_Logic37_Absorbed(Item_GObj*);
/* 29A620 */ bool itLipstickSpore_Logic37_Reflected(Item_GObj*);
/* 29A704 */ bool itLipstickSpore_Logic37_ShieldBounced(Item_GObj*);
/* 29A728 */ void itLipstickSpore_Logic37_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6680 */ extern ItemStateTable it_803F6680[];
#define GALE01_2CB8AC
/* 2CB8AC */ void it_802CB8AC(Item_GObj*);
/* 2CB93C */ void it_802CB93C(Item_GObj*);
/* 2CB940 */ void it_802CB940(Item_GObj*, Item_GObj*);
/* 2CB960 */ void it_802CB960(Item_GObj* gobj);
/* 2CB994 */ void it_802CB994(Item_GObj* gobj);
/* 2CB9E0 */ bool itLizardon_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CBA20 */ void itLizardon_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CBA5C */ bool itLizardon_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CBAA8 */ void it_802CBAA8(Item_GObj* gobj);
/* 2CBB84 */ bool itLizardon_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CBC9C */ void itLizardon_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CBCD8 */ bool itLizardon_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CBD24 */ void it_802CBD24(Item_GObj* gobj);
/* 2CBFE4 */ void it_802CBFE4(Item_GObj* gobj);
/* 2CC030 */ bool itLizardon_UnkMotion3_Anim(Item_GObj* gobj);
/* 2CC064 */ void itLizardon_UnkMotion3_Phys(Item_GObj* gobj);
/* 2CC0A0 */ bool itLizardon_UnkMotion3_Coll(Item_GObj* gobj);
/* 2CC0EC */ void it_802CC0EC(Item_GObj* gobj);
/* 2CC160 */ bool it_802CC160(Item_GObj* gobj);
/* 2CC184 */ void it_802CC184(Item_GObj* gobj);
/* 2CC1A4 */ bool it_802CC1A4(Item_GObj* gobj);
/* 2CC1CC */ void it_802CC1CC(Item_GObj* gobj, ItemKind kind);
/* 2CC3D4 */ void itLizardon_Logic34_Spawned(Item_GObj*);
/* 2CC440 */ void itLizardon_Logic35_Spawned(Item_GObj*);
/* 2CC4AC */ void itLizardon_Logic36_Spawned(Item_GObj*);
/* 2CC518 */ void itLizardon_Logic37_Spawned(Item_GObj*);
/* 2CC584 */ void itLizardon_Logic37_EvtUnk(Item_GObj*, Item_GObj*);
/* 2CC5A4 */ bool itLizardon_Logic37_Reflected(Item_GObj*);
/* 2CC5C4 */ bool itLizardon_Logic37_HitShield(Item_GObj*);
/* 2CC5CC */ bool itLizardon_Logic37_Absorbed(Item_GObj*);
/* 2CC5D4 */ void it_802CC5D4(Item_GObj* gobj);
/* 2CC650 */ bool it_802CC650(Item_GObj* gobj);
/* 2CC684 */ void it_802CC684(Item_GObj* gobj);
/* 2CC6C4 */ bool it_802CC6C4(Item_GObj* gobj);
/* 3F7BC0 */ extern ItemStateTable it_803F7BC0[];
/* 3F7C00 */ extern ItemStateTable it_803F7C00[];
#define GALE01_2D5050
/* 2D5050 */ void it_802D5050(Item_GObj*);
/* 2D50F0 */ void it_802D50F0(Item_GObj*);
/* 2D5124 */ bool it_802D5124(Item_GObj* gobj);
/* 2D51C8 */ void it_802D51C8(HSD_GObj* gobj);
/* 2D52E4 */ void it_802D52E4(Item_GObj* gobj);
/* 2D533C */ void it_802D533C(Item_GObj* gobj);
/* 2D53AC */ bool it_802D53AC(Item_GObj* gobj);
/* 2D53F0 */ void it_802D53F0(Item_GObj* gobj);
/* 2D53F4 */ bool it_802D53F4(Item_GObj* gobj);
/* 2D5420 */ void it_802D5420(HSD_GObj* gobj);
/* 2D546C */ void it_802D546C(Item_GObj*);
/* 2D54C4 */ bool itLucky_UnkMotion5_Anim(Item_GObj* gobj);
/* 2D54CC */ void itLucky_UnkMotion5_Phys(Item_GObj* gobj);
/* 2D54FC */ bool itLucky_UnkMotion5_Coll(Item_GObj* gobj);
/* 2D5528 */ bool itLucky_UnkMotion6_Anim(Item_GObj* gobj);
/* 2D5530 */ void itLucky_UnkMotion6_Phys(Item_GObj* gobj);
/* 2D5560 */ void it_802D5560(HSD_GObj* gobj);
/* 2D55DC */ bool it_802D55DC(Item_GObj* gobj);
/* 2D5600 */ void it_802D5600(Item_GObj* gobj);
/* 2D5620 */ bool it_802D5620(Item_GObj* gobj);
/* 2D5648 */ bool it_802D5648(Item_GObj*);
/* 2D56F0 */ void it_802D56F0(Item_GObj*, Item_GObj*);
/* 2D5710 */ Item_GObj* it_802D5710(Item_GObj* gobj, Vec3* pos, Vec3* vel,
                                    f32 facing);
/* 2D57D0 */ void itLucky_Logic44_Spawned(Item_GObj*);
/* 2D582C */ void it_802D582C(Item_GObj*);
/* 2D5884 */ bool it_802D5884(Item_GObj* gobj);
/* 2D58BC */ void it_802D58BC(Item_GObj* gobj);
/* 2D58C0 */ bool it_802D58C0(Item_GObj* gobj);
/* 2D58EC */ void it_802D58EC(HSD_GObj* gobj);
/* 2D5914 */ bool itLucky_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D594C */ void itLucky_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D597C */ bool itLucky_UnkMotion3_Coll(Item_GObj* gobj);
/* 2D59A8 */ void itLucky_Logic44_PickedUp(Item_GObj*);
/* 2D59D0 */ bool itLucky_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D59D8 */ void itLucky_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D59DC */ void itLucky_Logic44_Dropped(Item_GObj*);
/* 2D5A04 */ void itLucky_Logic44_EnteredAir(Item_GObj*);
/* 2D5A2C */ bool it_802D5A2C(Item_GObj* gobj);
/* 2D5A64 */ void it_802D5A64(Item_GObj* gobj);
/* 2D5A68 */ bool it_802D5A68(Item_GObj* gobj);
/* 2D5A9C */ void itLucky_Logic44_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F8190 */ extern ItemStateTable it_803F8190[];
/* 3F8200 */ extern ItemStateTable it_803F8200[];
#define GALE01_2D1438
/* 2D1438 */ void it_2725_Logic17_Spawned(Item_GObj*);
/* 2D14D0 */ void it_802D14D0(void);
/* 2D14D4 */ void itLugia_Logic17_EvtUnk(Item_GObj*, Item_GObj*);
/* 2D14F4 */ bool itLugia_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D1558 */ void itLugia_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D1578 */ bool itLugia_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D1580 */ void it_802D1580(Item_GObj* gobj);
/* 2D15E0 */ bool itLugia_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D1620 */ void itLugia_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D16CC */ bool itLugia_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D16D4 */ void it_802D16D4(Item_GObj* gobj);
/* 2D1720 */ bool itLugia_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D17B0 */ void itLugia_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D1828 */ bool itLugia_UnkMotion3_Coll(Item_GObj* gobj);
/* 2D1830 */ void it_802D1830(Item_GObj* gobj);
/* 2D1930 */ bool itLugia_UnkMotion4_Anim(Item_GObj* gobj);
/* 2D19C0 */ void itLugia_UnkMotion4_Phys(Item_GObj* gobj);
/* 2D1A3C */ bool itLugia_UnkMotion4_Coll(Item_GObj* gobj);
/* 2D1A44 */ void it_802D1A44(Item_GObj* gobj);
/* 2D1B30 */ bool itLugia_UnkMotion5_Anim(Item_GObj* gobj);
/* 2D1B94 */ void itLugia_UnkMotion5_Phys(Item_GObj* gobj);
/* 2D1BB4 */ bool itLugia_UnkMotion5_Coll(Item_GObj* gobj);
/* 2D1BBC */ void it_802D1BBC(Item_GObj*);
/* 2D1D40 */ void it_802D1D40(Item_GObj*);
/* 2D1DB4 */ bool it_802D1DB4(Item_GObj* gobj);
/* 2D1DD8 */ void it_802D1DD8(Item_GObj* gobj);
/* 2D1E64 */ bool it_802D1E64(Item_GObj* gobj);
/* 2D1E8C */ Item_GObj* it_802D1E8C(Item_GObj*, ItemKind, f32);
/* 2D1F64 */ Vec3 it_802D1F64(Item_GObj*, f32);
/* 2D208C */ void it_802D208C(Item_GObj*);
/* 2D2308 */ void itLugia_Logic39_Spawned(Item_GObj*);
/* 2D234C */ void itLugia_Logic40_Spawned(Item_GObj*);
/* 2D2390 */ void itLugia_Logic41_Spawned(Item_GObj*);
/* 2D23D4 */ void it_802D23D4(Item_GObj*, Item_GObj*);
/* 2D23F4 */ void it_802D23F4(Item_GObj* gobj);
/* 2D246C */ bool it_802D246C(Item_GObj* gobj);
/* 2D24A0 */ void it_802D24A0(Item_GObj* gobj);
/* 2D24FC */ bool it_802D24FC(Item_GObj* gobj);
/* 3F7EE8 */ extern ItemStateTable it_803F7EE8[];
/* 3F7F48 */ extern ItemStateTable it_803F7F48[];
#define GALE01_2C01AC
/* 2C01AC */ void it_802C01AC(Item_GObj* gobj, Vec3* pos, ItemKind kind,
                              float facing_dir);
/* 2C0490 */ bool itLuigiFireball_Logic89_DmgDealt(Item_GObj*);
/* 2C0498 */ bool itLuigiFireball_Logic89_Reflected(Item_GObj*);
/* 2C04B8 */ bool itLuigiFireball_Logic89_Clanked(Item_GObj*);
/* 2C04C0 */ bool itLuigiFireball_Logic89_HitShield(Item_GObj*);
/* 2C04C8 */ bool itLuigiFireball_Logic89_Absorbed(Item_GObj*);
/* 2C04D0 */ bool itLuigiFireball_Logic89_ShieldBounced(Item_GObj*);
/* 2C04F0 */ void itLuigiFireball_Logic89_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F75C0 */ extern ItemStateTable it_803F75C0[];
#define GALE01_2D66F8
/* 2D66F8 */ bool it_802D66F8(Item_GObj* gobj);
/* 2D6740 */ void it_802D6740(Item_GObj* gobj);
/* 2D6798 */ bool it_802D6798(Item_GObj* gobj);
/* 2D6808 */ bool it_802D6808(Item_GObj*);
/* 2D6810 */ bool it_802D6810(Item_GObj*);
/* 2D6830 */ bool it_802D6830(Item_GObj*);
/* 2D6838 */ bool it_802D6838(Item_GObj*);
/* 2D6840 */ bool it_802D6840(Item_GObj*);
/* 2D6848 */ bool it_802D6848(Item_GObj*);
/* 2D6850 */ void it_802D6850(Item_GObj*, Item_GObj*);
/* 2D6870 */ void itMaril_Logic28_Spawned(Item_GObj*);
/* 2D68FC */ void it_802D68FC(Item_GObj* gobj);
/* 2D6978 */ bool itMaril_UnkMotion0_Anim(Item_GObj* gobj);
/* 2D699C */ void itMaril_UnkMotion0_Phys(Item_GObj* gobj);
/* 2D69BC */ bool itMaril_UnkMotion0_Coll(Item_GObj* gobj);
/* 2D69E4 */ void it_802D69E4(Item_GObj*);
/* 2D6A54 */ void it_802D6A54(Item_GObj* gobj);
/* 2D6AD4 */ bool itMaril_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D6C2C */ void itMaril_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D6C60 */ bool itMaril_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D6DDC */ void it_802D6DDC(HSD_GObj* gobj);
/* 2D6E04 */ bool itMaril_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D6E3C */ void itMaril_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D6E6C */ bool itMaril_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D6E98 */ bool itMaril_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D6ED0 */ void itMaril_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D6F00 */ bool it_802D6F00(Item_GObj*);
/* 2D6FB0 */ void it_802D6FB0(Item_GObj*, Item_GObj*);
/* 3F82B0 */ extern ItemStateTable it_803F82B0[];
#define GALE01_2B2560
/* 2B2560 */ Item_GObj* it_802B2560(Fighter_GObj* gobj, float facing_dir,
                                    Vec3* pos, Fighter_Part part,
                                    ItemKind kind);
/* 2B2644 */ void itMarioCape_Logic41_Destroyed(Item_GObj*);
/* 2B2674 */ void it_802B2674(Item_GObj*);
/* 2B26C0 */ void it_802B26C0(Item_GObj* gobj);
/* 2B26E0 */ void it_802B26E0(Item_GObj* gobj);
/* 2B2700 */ void it_2725_Logic41_PickedUp(Item_GObj*);
/* 2B2788 */ bool itMariocape_UnkMotion1_Anim(HSD_GObj* gobj);
/* 2B2870 */ void it_802B2870(Item_GObj*, Item_GObj*);
/* 3F70F8 */ extern ItemStateTable it_803F70F8[];
#define GALE01_29B6F8
void it_8029B6F8(Item_GObj*, Vec3*, ItemKind, f32);
void it_8029B7C0(Item_GObj*);
bool itMariofireball_UnkMotion0_Anim(Item_GObj*);
void itMariofireball_UnkMotion0_Phys(Item_GObj*);
bool itMariofireball_UnkMotion0_Coll(Item_GObj*);
bool itMarioFireball_Logic87_DmgDealt(Item_GObj*);
bool itMarioFireball_Logic87_Reflected(Item_GObj*);
bool itMarioFireball_Logic87_Clanked(Item_GObj*);
bool itMarioFireball_Logic87_HitShield(Item_GObj*);
bool itMarioFireball_Logic87_Absorbed(Item_GObj*);
bool itMarioFireball_Logic87_ShieldBounced(Item_GObj*);
void itMarioFireball_Logic87_EvtUnk(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F6788[];
#define GALE01_2D09D0
/* 2D09D0 */ void it_802D09D0(Item_GObj*);
/* 2D0A0C */ void itMarumine_Logic16_Spawned(Item_GObj*);
/* 2D0AB0 */ void it_802D0AB0(Item_GObj*, Item_GObj*);
/* 2D0AD0 */ bool it_802D0AD0(Item_GObj*);
/* 2D0D18 */ void it_802D0D18(Item_GObj*);
/* 2D0E30 */ void it_802D0E30(Item_GObj*);
/* 2D0E90 */ void it_802D0E90(Item_GObj*);
/* 3F7E78 */ extern ItemStateTable it_803F7E78[];
#define GALE01_2F0AE0
/* 2F0AE0 */ void it_802F0AE0(Item_GObj* gobj, Vec3* prev_pos, Vec3* pos,
                              ItemKind kind, s32 msid, f32 facing_dir,
                              f32 vel_x, f32 vel_y);
/* 2F0BC8 */ void itMasterHandBullet_Logic85_EvtUnk(Item_GObj*, Item_GObj*);
/* 2F0BE8 */ void it_802F0BE8(Item_GObj*);
/* 2F0E70 */ bool itMasterhandbullet_UnkMotion1_Anim(Item_GObj*);
/* 2F0ED4 */ void itMasterhandbullet_UnkMotion1_Phys(Item_GObj*);
/* 2F0ED8 */ bool itMasterhandbullet_UnkMotion1_Coll(Item_GObj*);
/* 2F0F08 */ void it_802F0F08(Item_GObj*);
/* 2F0F0C */ bool itMasterHandBullet_Logic83_DmgDealt(Item_GObj*);
/* 2F0F14 */ bool itMasterHandBullet_Logic83_Reflected(Item_GObj*);
/* 2F0F34 */ bool itMasterHandBullet_Logic83_Clanked(Item_GObj*);
/* 2F0F3C */ bool itMasterHandBullet_Logic83_Absorbed(Item_GObj*);
/* 2F0F44 */ bool itMasterHandBullet_Logic83_ShieldBounced(Item_GObj*);
/* 2F0F64 */ bool itMasterHandBullet_Logic83_HitShield(Item_GObj*);
/* 3F9388 */ extern ItemStateTable it_803F9388[];
#define GALE01_2F0340
/* 2F0340 */ Item_GObj* it_802F0340(Item_GObj* gobj, Vec3* prev_pos, Vec3* pos,
                                    Fighter_Part part, ItemKind kind,
                                    f32 facing_dir);
/* 2F044C */ void itMasterHandLaser_Logic84_EvtUnk(Item_GObj*, Item_GObj*);
/* 2F046C */ void it_802F046C(Item_GObj*);
/* 2F0484 */ void it_802F0484(Item_GObj*);
/* 2F04F0 */ bool itMasterhandlaser_UnkMotion0_Anim(Item_GObj*);
/* 2F059C */ void itMasterhandlaser_UnkMotion0_Phys(Item_GObj* gobj);
/* 2F05A0 */ bool itMasterhandlaser_UnkMotion0_Coll(Item_GObj* gobj);
/* 2F05A8 */ void it_802F05A8(Item_GObj*);
/* 2F063C */ void it_802F063C(Item_GObj*, Item_GObj*);
/* 3F9378 */ extern ItemStateTable it_803F9378[];
#define GALE01_2CAFD4
/* 2CAFD4 */ void it_802CAFD4(Item_GObj*);
/* 2CB0F4 */ void it_802CB0F4(Item_GObj*);
/* 2CB0F8 */ void it_802CB0F8(Item_GObj*, Item_GObj*);
/* 2CB118 */ bool it_802CB118(Item_GObj* gobj);
/* 2CB14C */ void it_802CB14C(Item_GObj* gobj);
/* 2CB150 */ bool it_802CB150(Item_GObj* gobj);
/* 2CB17C */ bool itMatadogas_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CB280 */ void itMatadogas_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CB284 */ bool itMatadogas_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CB2B0 */ void it_802CB2B0(Item_GObj* gobj);
/* 2CB350 */ void it_802CB350(Item_GObj*);
/* 2CB3B4 */ bool itMatadogas_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CB3D8 */ void itMatadogas_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CB4C8 */ bool itMatadogas_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CB4F0 */ void it_802CB4F0(Item_GObj*, s32, f32);
/* 2CB690 */ void it_2725_Logic32_Spawned(Item_GObj*);
/* 2CB704 */ void it_2725_Logic33_Spawned(Item_GObj*);
/* 2CB778 */ void itMatadogas_Logic33_EvtUnk(Item_GObj*, Item_GObj*);
/* 2CB798 */ void it_802CB798(Item_GObj*);
/* 2CB810 */ bool it_802CB810(Item_GObj* gobj);
/* 2CB844 */ void it_802CB844(Item_GObj* gobj);
/* 2CB8A4 */ bool it_802CB8A4(Item_GObj* gobj);
/* 3F7B58 */ extern ItemStateTable it_803F7B58[];
/* 3F7BB0 */ extern ItemStateTable it_803F7BB0[];
#define GALE01_2D84F8
/* 2D84F8 */ void it_802D84F8(Item_GObj*);
/* 2D8554 */ void it_802D8554(Item_GObj*);
/* 2D858C */ bool itMato_UnkMotion0_Anim(Item_GObj*);
/* 2D8594 */ void itMato_UnkMotion0_Phys(Item_GObj*);
/* 2D85EC */ bool itMato_UnkMotion0_Coll(Item_GObj*);
/* 2D85F4 */ bool it_802D85F4(Item_GObj*);
/* 3F83E0 */ extern ItemStateTable it_803F83E0[];
#define GALE01_2978DC
/* 2978DC */ void itMball_Destroyed(Item_GObj*);
/* 297904 */ void itMball_Spawned(Item_GObj*);
/* 297944 */ void itMball_80297944(Item_GObj* arg0);
/* 29799C */ bool itMball_Motion0_Anim(Item_GObj* gobj);
/* 2979A4 */ void itMball_Motion0_Phys(Item_GObj* gobj);
/* 2979A8 */ bool itMball_Motion0_Coll(Item_GObj* arg0);
/* 2979D4 */ void itMball_802979D4(Item_GObj* arg0);
/* 297A1C */ bool itMball_Motion3_Anim(Item_GObj* gobj);
/* 297A24 */ void itMball_Motion1_Phys(Item_GObj* arg0);
/* 297A54 */ bool itMball_Motion1_Coll(Item_GObj* arg0);
/* 297ABC */ void itMball_PickedUp(Item_GObj*);
/* 297AE4 */ bool itMball_Motion2_Anim(Item_GObj* gobj);
/* 297AEC */ void itMball_Motion2_Phys(Item_GObj* gobj);
/* 297AF0 */ void itMball_Dropped(Item_GObj*);
/* 297B18 */ void itMball_Thrown(Item_GObj*);
/* 297B40 */ void itMball_Motion3_Phys(Item_GObj* arg0);
/* 297B8C */ bool itMball_Motion3_Coll(Item_GObj* arg0);
/* 297BB8 */ bool itMball_DmgDealt(Item_GObj* arg0);
/* 297BF8 */ void itMball_EnteredAir(Item_GObj*);
/* 297C84 */ bool itMball_Motion4_Anim(Item_GObj* gobj);
/* 297C8C */ void itMball_Motion4_Phys(Item_GObj* gobj);
/* 297C90 */ bool itMball_Motion4_Coll(Item_GObj* gobj);
/* 297CC4 */ void itMball_80297CC4(Item_GObj* arg0);
/* 297DD8 */ void itMball_OnAccessory(Item_GObj* arg0);
/* 297E28 */ bool itMball_Motion5_Anim(Item_GObj* gobj);
/* 297E5C */ void itMball_Motion5_Phys(Item_GObj* gobj);
/* 297E60 */ bool itMball_Motion5_Coll(Item_GObj* arg0);
/* 297E8C */ void itMball_80297E8C(Item_GObj*);
/* 297F94 */ bool itMball_Motion6_Anim(Item_GObj* gobj);
/* 297FC8 */ void itMball_Motion6_Phys(Item_GObj* arg0);
/* 297FF8 */ bool itMball_Motion6_Coll(Item_GObj* arg0);
/* 298060 */ bool itMball_Clanked(Item_GObj*);
/* 2980A0 */ bool itMball_Reflected(Item_GObj*);
/* 2980D4 */ bool itMball_HitShield(Item_GObj* arg0);
/* 298114 */ bool itMball_ShieldBounced(Item_GObj* arg0);
/* 298148 */ void itMball_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6488 */ extern ItemStateTable it_803F6488[];
#define GALE01_2953C8
void itMetalB_Logic32_Spawned(Item_GObj*);
void it_802953FC(Item_GObj*);
bool itMetalb_UnkMotion0_Anim(Item_GObj*);
void itMetalb_UnkMotion0_Phys(Item_GObj*);
bool itMetalb_UnkMotion0_Coll(Item_GObj*);
void it_80295498(Item_GObj*);
bool itMetalb_UnkMotion3_Anim(Item_GObj*);
void itMetalb_UnkMotion1_Phys(Item_GObj*);
bool itMetalb_UnkMotion1_Coll(Item_GObj*);
void itMetalB_Logic32_PickedUp(Item_GObj*);
bool itMetalb_UnkMotion2_Anim(Item_GObj*);
void itMetalB_Logic32_Dropped(Item_GObj*);
void itMetalb_UnkMotion3_Phys(Item_GObj*);
bool itMetalb_UnkMotion3_Coll(Item_GObj*);
bool itMetalB_Logic32_DmgReceived(Item_GObj*);
void itMetalB_Logic32_EnteredAir(Item_GObj*);
bool itMetalb_UnkMotion4_Anim(Item_GObj*);
void itMetalb_UnkMotion4_Phys(Item_GObj*);
bool itMetalb_UnkMotion4_Coll(Item_GObj*);
void itMetalB_Logic32_EvtUnk(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F62C0[];
#define GALE01_2D3008
/* 2D3008 */ void it_802D3008(Item_GObj*);
/* 2D306C */ void it_802D306C(Item_GObj*);
/* 2D3070 */ void itMetamon_Logic19_EvtUnk(Item_GObj*, Item_GObj*);
/* 2D3090 */ void it_802D3090(Item_GObj*);
/* 2D30C4 */ void it_802D30C4(Item_GObj*);
/* 2D30EC */ bool itMetamon_UnkMotion0_Anim(Item_GObj*);
/* 2D3120 */ void itMetamon_UnkMotion0_Phys(Item_GObj*);
/* 2D3124 */ bool itMetamon_UnkMotion0_Coll(Item_GObj*);
/* 2D3150 */ bool itMetamon_UnkMotion1_Anim(Item_GObj*);
/* 2D3184 */ void itMetamon_UnkMotion1_Phys(Item_GObj*);
/* 2D3188 */ bool itMetamon_UnkMotion1_Coll(Item_GObj*);
/* 2D31B4 */ void it_802D31B4(Item_GObj*);
/* 2D31F4 */ bool itMetamon_UnkMotion2_Anim(Item_GObj*);
/* 2D3218 */ void itMetamon_UnkMotion2_Phys(Item_GObj*);
/* 2D3238 */ bool itMetamon_UnkMotion2_Coll(Item_GObj*);
/* 3F7FC8 */ extern ItemStateTable it_803F7FC8[];
#define GALE01_2D3B18
/* 2D3B18 */ void itMew_Logic22_Spawned(Item_GObj*);
/* 2D3B6C */ void it_802D3B6C(Item_GObj*, Item_GObj*);
/* 3F80C8 */ extern ItemStateTable it_803F80C8[];
#define GALE01_2C49E0
/* 2C49E0 */ void itMewtwoDisable_Logic67_Destroy(Item_GObj*);
/* 2C4A00 */ void itMewtwoDisable_Logic67_Destroyed(Item_GObj*);
/* 2C4A40 */ Item_GObj*
itMewtwoDisable_Logic67_SpawnMewtwoDisable(Fighter_GObj*, Vec3*, float);
/* 2C4B38 */ void it_802C4B38(Item_GObj* item_gobj);
/* 2C4BB8 */ void it_802C4BB8(Item_GObj* item_gobj);
/* 2C4C08 */ bool itMewtwodisable_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C4C3C */ void itMewtwodisable_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C4C40 */ int itMewtwodisable_UnkMotion0_Coll(Item_GObj* gobj);
/* 2C4C90 */ bool itMewtwoDisable_Logic67_DmgDealt(Item_GObj*);
/* 2C4C98 */ bool itMewtwoDisable_Logic67_Reflected(Item_GObj*);
/* 2C4CB8 */ bool itMewtwoDisable_Logic67_Clanked(Item_GObj*);
/* 2C4CC0 */ bool itMewtwoDisable_Logic67_HitShield(Item_GObj*);
/* 2C4CC8 */ bool itMewtwoDisable_Logic67_Absorbed(Item_GObj*);
/* 2C4CD0 */ bool itMewtwoDisable_Logic67_ShieldBounced(Item_GObj*);
/* 2C4CD8 */ void itMewtwoDisable_Logic67_EvtUnk(Item_GObj*, Fighter_GObj*);
/* 3F7750 */ extern ItemStateTable it_803F7750[];
#define GALE01_2C4D10
/* 2C4D10 */ u32 it_802C4D10(Item_GObj*);
/* 2C4F50 */ bool it_802C4F50(Item_GObj*, CollData*);
/* 2C5000 */ HSD_GObj* it_802C5000(Item_GObj*, Vec3*, s32, s32, float);
/* 2C519C */ Item_GObj* it_802C519C(Item_GObj*, Vec3*, s32, s32, float angle,
                                    float facing_dir);
/* 2C53F0 */ void it_802C53F0(Item_GObj*, Vec3*, float, float, float);
/* 2C56A0 */ void it_2725_Logic101_Destroyed(Item_GObj*);
/* 2C573C */ void it_802C573C(Item_GObj*);
/* 2C578C */ void it_2725_Logic101_PickedUp(Item_GObj* gobj);
/* 2C57C8 */ bool itMewtwoshadowball_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C5B0C */ void itMewtwoshadowball_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C5B10 */ bool itMewtwoshadowball_UnkMotion0_Coll(Item_GObj* gobj);
/* 2C5BF8 */ bool itMewtwoshadowball_UnkMotion8_Anim(Item_GObj* gobj);
/* 2C5CF4 */ void itMewtwoshadowball_UnkMotion8_Phys(Item_GObj* gobj);
/* 2C5D64 */ bool itMewtwoshadowball_UnkMotion8_Coll(Item_GObj* gobj);
/* 2C5DAC */ bool itMewtwoshadowball_UnkMotion9_Anim(Item_GObj* gobj);
/* 2C5DCC */ void itMewtwoshadowball_UnkMotion9_Phys(Item_GObj* gobj);
/* 2C5DD0 */ bool itMewtwoshadowball_UnkMotion9_Coll(Item_GObj* gobj);
/* 2C5E18 */ void fn_802C5E18(Item_GObj* gobj);
/* 2C5E5C */ void it_802C5E5C(Item_GObj* gobj);
/* 2C5F7C */ bool itMewtwoshadowball_UnkMotion17_Anim(Item_GObj* gobj);
/* 2C6094 */ void itMewtwoshadowball_UnkMotion17_Phys(Item_GObj*);
/* 2C60AC */ bool itMewtwoshadowball_UnkMotion17_Coll(Item_GObj* gobj);
/* 2C60B4 */ bool itMewtwoShadowball_Logic101_DmgDealt(Item_GObj*);
/* 2C60BC */ bool itMewtwoShadowball_Logic101_Clanked(Item_GObj*);
/* 2C60C4 */ bool itMewtwoShadowball_Logic101_Absorbed(Item_GObj*);
/* 2C60CC */ bool it_2725_Logic101_Reflected(Item_GObj*);
/* 2C6138 */ bool itMewtwoShadowball_Logic101_HitShield(Item_GObj*);
/* 2C6140 */ bool it_2725_Logic101_ShieldBounced(Item_GObj*);
/* 2C61D4 */ void itMewtwoShadowball_Logic101_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7760 */ extern ItemStateTable it_803F7760[];
#define GALE01_28FE90
/* 28FE90 */ void it_8028FE90(Item_GObj* gobj);
/* 28FED4 */ void itMSBomb_Logic19_Spawned(Item_GObj* gobj);
/* 28FF1C */ void it_8028FF1C(Item_GObj* gobj);
/* 28FF60 */ bool itMsbomb_UnkMotion0_Coll(Item_GObj* gobj);
/* 28FF8C */ void it_8028FF8C(Item_GObj* gobj);
/* 290070 */ void itMsbomb_UnkMotion1_Phys(Item_GObj* gobj);
/* 2900A0 */ bool itMsbomb_UnkMotion1_Coll(Item_GObj* gobj);
/* 2900CC */ void itMSBomb_Logic19_PickedUp(Item_GObj* gobj);
/* 2900F4 */ void itMSBomb_Logic19_Dropped(Item_GObj* gobj);
/* 290114 */ void itMSBomb_Logic19_Thrown(Item_GObj* gobj);
/* 2901C0 */ void itMsbomb_UnkMotion3_Phys(Item_GObj* gobj);
/* 29020C */ bool itMsbomb_UnkMotion3_Coll(Item_GObj* gobj);
/* 290238 */ void it_80290238(Item_GObj* gobj);
/* 290314 */ void it_80290314(Item_GObj* gobj);
/* 290404 */ bool itMsbomb_UnkMotion4_Coll(Item_GObj* gobj);
/* 29047C */ void it_8029047C(Item_GObj* gobj);
/* 290560 */ void itMsbomb_UnkMotion5_Phys(Item_GObj* gobj);
/* 2905AC */ bool itMsbomb_UnkMotion5_Coll(Item_GObj* gobj);
/* 2905D8 */ void it_802905D8(Item_GObj* gobj);
/* 290614 */ void it_80290614(Item_GObj* gobj);
/* 2906C4 */ bool itMsbomb_UnkMotion6_Anim(Item_GObj* gobj);
/* 2906E4 */ bool itMSBomb_Logic19_DmgDealt(Item_GObj* gobj);
/* 290738 */ bool itMSBomb_Logic19_DmgReceived(Item_GObj* gobj);
/* 290794 */ void itMSBomb_Logic19_EnteredAir(Item_GObj* gobj);
/* 2907BC */ bool itMsbomb_UnkMotion7_Coll(Item_GObj* gobj);
/* 2907F0 */ bool itMSBomb_Logic19_Clanked(Item_GObj* gobj);
/* 290830 */ bool itMSBomb_Logic19_Reflected(Item_GObj* gobj);
/* 290850 */ bool itMSBomb_Logic19_HitShield(Item_GObj* gobj);
/* 2908A4 */ bool itMSBomb_Logic19_ShieldBounced(Item_GObj* gobj);
/* 2908D8 */ bool it_802908D8(Item_GObj* gobj);
/* 290918 */ void itMSBomb_Logic19_EvtUnk(Item_GObj* gobj1, Item_GObj* gobj2);
/* 3F5E00 */ extern ItemStateTable ItemStateTable_MsBomb[];
#define GALE01_2AD478
/* 2AD478 */ HSD_GObj* it_802AD478(Item_GObj*, Vec3*, Fighter_Part, f32);
/* 2AD590 */ Item_GObj* it_802AD590(Fighter_GObj*, Fighter_Part);
/* 2AD6B8 */ void it_802AD6B8(Item_GObj*);
/* 2AD6F0 */ void it_2725_Logic58_PickedUp(Item_GObj*);
/* 2AD768 */ bool itNessbat_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AD8D0 */ void itNessbat_UnkMotion0_Phys(Item_GObj* gobj);
/* 2AD8D4 */ bool itNessbat_UnkMotion0_Coll(Item_GObj* gobj);
/* 2AD8DC */ bool itNessbat_UnkMotion1_Anim(Item_GObj* gobj);
/* 2AD9F0 */ void itNessbat_UnkMotion1_Phys(Item_GObj* gobj);
/* 2AD9F4 */ bool itNessbat_UnkMotion1_Coll(Item_GObj* gobj);
/* 2AD9FC */ void itNessBat_Logic58_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6C68 */ extern ItemStateTable it_803F6C68[];
#define GALE01_2AA054
/* 2AA054 */ void it_802AA054(Item_GObj*, Vec3*, Vec3*, float, float);
/* 2AA1D8 */ void it_802AA1D8(Item_GObj*);
/* 2AA22C */ bool itNesspkfire_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AA264 */ bool itNesspkfire_UnkMotion0_Coll(Item_GObj* gobj);
/* 2AA284 */ bool it_2725_Logic23_DmgDealt(Item_GObj*);
/* 2AA2E8 */ bool it_2725_Logic23_Clanked(Item_GObj*);
/* 2AA34C */ bool itNessPKFire_Logic23_Absorbed(Item_GObj*);
/* 2AA354 */ bool itNessPKFire_Logic23_HitShield(Item_GObj*);
/* 2AA35C */ bool itNessPKFire_Logic23_Reflected(Item_GObj* gobj);
/* 2AA37C */ bool it_2725_Logic23_ShieldBounced(Item_GObj*);
/* 2AA474 */ void it_802AA474(Item_GObj*, Item_GObj*);
/* 3F6B28 */ extern ItemStateTable it_803F6B28[];
#define _ITNESSPKFIREPILLAR_H_
void itNesspkfirepillar_802AA494(HSD_GObj* parent1_gobj,
                                 HSD_GObj* parent2_gobj, Vec3* offset,
                                 f32 facing_dir);
void itNesspkfirepillar_802AA55C(Item_GObj* item_gobj);
bool itNesspkfirepillar_UnkMotion0_Anim(Item_GObj* item_gobj);
void itNesspkfirepillar_UnkMotion0_Phys(Item_GObj* item_gobj);
bool itNesspkfirepillar_UnkMotion0_Coll(Item_GObj* item_gobj);
bool itNesspkfirepillar_Logic24_DmgReceived(Item_GObj* item_gobj);
void itNesspkfirepillar_Logic24_EvtUnk(Item_GObj* item_gobj,
                                       HSD_GObj* parent_gobj);
extern ItemStateTable it_803F6B60[1];
#define GALE01_2AA7E4
/* 2AA7E4 */ Fighter_GObj* it_802AA7E4(Item_GObj*);
/* 2AA7F0 */ bool it_802AA7F0(Item_GObj*);
/* 2AA810 */ bool it_802AA810(Item_GObj*, CollData*);
/* 2AA8C0 */ HSD_GObj* it_802AA8C0(Item_GObj*, Vec3*, ItemKind, f32);
/* 2AA9CC */ void it_2725_Logic102_Destroyed(Item_GObj*);
/* 2AAA50 */ void it_802AAA50(Item_GObj*);
/* 2AAA80 */ void it_802AAA80(Item_GObj*);
/* 2AAB70 */ bool itNesspkflash_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AAD48 */ bool itNesspkflash_UnkMotion1_Anim(Item_GObj* gobj);
/* 2AAEE4 */ bool itNesspkflash_UnkMotion2_Anim(Item_GObj* gobj);
/* 2AAFDC */ void itNesspkflash_UnkMotion0_Phys(Item_GObj* gobj);
/* 2AB128 */ void itNesspkflash_UnkMotion1_Phys(Item_GObj*);
/* 2AB140 */ void itNesspkflash_UnkMotion2_Phys(Item_GObj*);
/* 2AB158 */ bool itNesspkflash_UnkMotion0_Coll(Item_GObj* gobj);
/* 2AB2AC */ bool itNesspkflash_Logic102_Reflected(Item_GObj*);
/* 2AB3C0 */ bool itNesspkflash_Logic102_Clanked(Item_GObj*);
/* 2AB3C8 */ bool itNesspkflash_Logic102_Absorbed(Item_GObj*);
/* 2AB3D0 */ void itNesspkflash_Logic102_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6B70 */ extern ItemStateTable it_803F6B70[];
#define GALE01_2AF940
/* 2AF940 */ Item_GObj* it_802AF940(Item_GObj*, Item_GObj*, Vec3*, ItemKind,
                                    f32, f32);
/* 2AFA2C */ void it_2725_Logic103_Destroyed(Item_GObj*);
/* 2AFA70 */ void it_802AFA70(Item_GObj*);
/* 2AFBA4 */ bool itNessPKFlashExplode_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AFD2C */ void itNessPKFlashExplode_UnkMotion0_Phys(Item_GObj*);
/* 2AFD4C */ bool itNessPKFlashExplode_Logic103_Clanked(Item_GObj*);
/* 2AFD54 */ bool itNessPKFlashExplode_Logic103_Absorbed(Item_GObj*);
/* 2AFD5C */ bool itNessPKFlashExplode_Logic103_ShieldBounced(Item_GObj*);
/* 2AFD64 */ bool itNessPKFlashExplode_Logic103_HitShield(Item_GObj*);
/* 2AFD6C */ void itNessPKFlashExplode_Logic103_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6F40 */ extern ItemStateTable it_803F6F40[];
#define GALE01_2AB3F0
/* 2AB3F0 */ void it_802AB3F0(Item_GObj*, Vec3*, s32);
/* 2AB468 */ void it_802AB468(Item_GObj*, f32*, s32);
/* 2AB4B8 */ bool it_802AB4B8(Item_GObj*, CollData*);
/* 2AB568 */ HSD_GObj* it_802AB568(Item_GObj*);
/* 2AB58C */ HSD_GObj* it_802AB58C(Item_GObj* owner, Vec3* pos,
                                   float facing_dir);
/* 2AB90C */ void it_802AB90C(Item_GObj*);
/* 2AB9C0 */ void it_802AB9C0(Item_GObj*);
/* 2ABA4C */ void it_802ABA4C(Item_GObj*);
/* 2ABBB0 */ bool itNesspkthunderball_UnkMotion0_Anim(Item_GObj* gobj);
/* 2ABCDC */ void itNesspkthunderball_UnkMotion0_Phys(Item_GObj* gobj);
/* 2AC050 */ bool itNessPKThunderball_Logic26_DmgDealt(Item_GObj*);
/* 2AC074 */ bool it_802AC074(Item_GObj*);
/* 2AC098 */ bool it_802AC098(Item_GObj*);
/* 2AC338 */ bool it_802AC338(Item_GObj*);
/* 2AC35C */ bool it_802AC35C(Item_GObj*);
/* 2AC3F8 */ bool it_802AC3F8(Item_GObj*);
/* 2AC41C */ void it_802AC41C(Item_GObj*, Item_GObj*);
/* 3F6BC8 */ extern ItemStateTable it_803F6BC8[];
#define GALE01_2AC43C
/* 2AC43C */ Item_GObj* it_802AC43C(Fighter_GObj* gobj, Item_GObj* ball,
                                    Vec3* pos, s32 trail_idx, s32 arg4,
                                    f32 facing_dir);
/* 2AC58C */ void it_802AC58C(Item_GObj* gobj);
/* 2AC5D8 */ void it_802AC5D8(Item_GObj* gobj);
/* 2AC604 */ void it_802AC604(Item_GObj* gobj);
/* 2AC62C */ bool itNesspkthundertrail_UnkMotion0_Anim(Item_GObj* gobj);
/* 2AC6B0 */ void itNesspkthundertrail_UnkMotion0_Phys(Item_GObj* gobj);
/* 2AC8A0 */ bool itNesspkthundertrail_UnkMotion0_Coll(Item_GObj* gobj);
/* 3F6C08 */ extern ItemStateTable it_803F6C08[];
#define GALE01_2BE598
/* 2BE598 */ void it_802BE598(Item_GObj*);
/* 2BE5B8 */ void it_802BE5B8(Item_GObj*);
/* 2BE5D8 */ void it_802BE5D8(void*, float);
/* 2BE65C */ HSD_GObj* it_802BE65C(Item* ip, HSD_JObj* bone_jobj);
/* 2BE958 */ void it_802BE958(Item_GObj*);
/* 2BE9D8 */ HSD_GObj* it_802BE9D8(HSD_GObj*, f32, Vec3*, s32);
/* 2BEB38 */ void itNessyoyo_UnkMotion0_Phys(Item_GObj* gobj);
/* 2BEB5C */ void itNessyoyo_UnkMotion1_Phys(Item_GObj* gobj);
/* 2BEC58 */ void itNessyoyo_UnkMotion2_Phys(Item_GObj* gobj);
/* 2BED54 */ void itNessyoyo_UnkMotion3_Phys(Item_GObj* gobj);
/* 2BEE88 */ bool itNessyoyo_UnkMotion3_Anim(Item_GObj* gobj);
/* 2BF030 */ s32 it_802BF030(ItemLink*, s32, f32);
/* 2BF180 */ void it_802BF180(ItemLink*, Vec3*, itYoyoAttributes*, f32);
/* 2BF28C */ s32 it_802BF28C(ItemLink*, Vec3*, itYoyoAttributes*, Item*);
/* 2BF4A0 */ s32 it_802BF4A0(ItemLink*, Vec3*, itYoyoAttributes*, Item*);
/* 2BF800 */ bool it_802BF800(ItemLink*, Vec3*, itYoyoAttributes*, Item*, f32);
/* 2BF900 */ void it_802BF900(Item* item);
/* 2BFAFC */ void it_802BFAFC(Item*, Vec3*);
/* 2BFE34 */ void itNessYoyo_Logic59_PickedUp(Item_GObj*);
/* 2BFE5C */ void it_802BFE5C(Item_GObj*, Vec3*, float);
/* 2BFEC4 */ void it_802BFEC4(Item_GObj*);
/* 2C0010 */ void it_802C0010(Item_GObj*, Vec3*);
/* 2C016C */ void it_2725_Logic59_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7558 */ extern ItemStateTable it_803F7558[];
#define GALE01_2DC69C
/* 2DC69C */ void it_802DC69C(Item_GObj*);
/* 2DC774 */ bool itNokonoko_Logic3_DmgReceived(Item_GObj*);
/* 2DC83C */ bool it_802DC83C(Item_GObj*);
/* 2DC8B8 */ void fn_802DC8B8(Item_GObj*);
/* 2DC910 */ bool itNokonoko_UnkMotion1_Anim(Item_GObj*);
/* 2DC918 */ void itNokonoko_UnkMotion1_Phys(Item_GObj*);
/* 2DC954 */ bool itNokonoko_UnkMotion1_Coll(Item_GObj*);
/* 2DC990 */ void it_802DC990(Item_GObj*);
/* 2DCA5C */ bool itNokonoko_UnkMotion2_Anim(Item_GObj*);
/* 2DCAA4 */ void itNokonoko_UnkMotion2_Phys(Item_GObj*);
/* 2DCB34 */ bool itNokonoko_UnkMotion2_Coll(Item_GObj*);
/* 2DCB9C */ void it_802DCB9C(Item_GObj*);
/* 2DCC58 */ bool itNokonoko_UnkMotion4_Anim(Item_GObj*);
/* 2DCC60 */ void itNokonoko_UnkMotion4_Phys(Item_GObj*);
/* 2DCC90 */ bool itNokonoko_UnkMotion6_Coll(Item_GObj*);
/* 2DCCCC */ void it_802DCCCC(Item_GObj*);
/* 2DCD54 */ bool itNokonoko_UnkMotion8_Anim(Item_GObj*);
/* 2DCD9C */ void itNokonoko_UnkMotion7_Phys(Item_GObj*);
/* 2DCDC4 */ bool itNokonoko_UnkMotion8_Coll(Item_GObj*);
/* 2DCE00 */ void it_802DCE00(Item_GObj*);
/* 2DCE74 */ void itNokonoko_UnkMotion8_Phys(Item_GObj*);
/* 2DCEC4 */ void it_802DCEC4(Item_GObj*);
/* 2DCFBC */ void it_802DCFBC(Item_GObj*);
/* 2DD0A0 */ bool itNokonoko_UnkMotion5_Anim(Item_GObj*);
/* 2DD1B4 */ void itNokonoko_UnkMotion5_Phys(Item_GObj*);
/* 2DD1DC */ bool itNokonoko_UnkMotion5_Coll(Item_GObj*);
/* 2DD25C */ bool itNokonoko_UnkMotion6_Anim(Item_GObj*);
/* 2DD264 */ void itNokonoko_UnkMotion6_Phys(Item_GObj*);
/* 2DD290 */ void it_802DD290(Item_GObj*);
/* 2DD2DC */ void it_802DD2DC(Item_GObj*);
/* 2DD328 */ bool itNokonoko_UnkMotion3_Anim(Item_GObj*);
/* 2DD468 */ void itNokonoko_UnkMotion3_Phys(Item_GObj*);
/* 2DD46C */ bool itNokonoko_UnkMotion3_Coll(Item_GObj*);
/* 2DD4A8 */ void it_802DD4A8(Item_GObj*, s32, Item_StateChangeFlags);
/* 2DD4F4 */ void it_802DD4F4(Item_GObj*);
/* 2DD53C */ bool itNokonoko_UnkMotion9_Anim(Item_GObj*);
/* 2DD598 */ void itNokonoko_UnkMotion9_Phys(Item_GObj*);
/* 2DD59C */ void it_802DD59C(Item_GObj*);
/* 2DD67C */ void it_802DD67C(Item_GObj*);
/* 2DD6D4 */ bool itNokonoko_UnkMotion10_Anim(Item_GObj*);
/* 2DD71C */ void itNokonoko_UnkMotion10_Phys(Item_GObj*);
/* 2DD74C */ bool itNokonoko_UnkMotion10_Coll(Item_GObj*);
/* 2DD78C */ void it_802DD78C(Item_GObj*);
/* 2DD7D0 */ void it_802DD7D0(Item_GObj*, Item_GObj*);
/* 2DD7F0 */ Item_GObj* it_802DD7F0(s32, Vec3*, Vec3*, s32);
/* 2DDA84 */ bool it_802DDA84(Item_GObj*);
extern ItemStateTable it_803F85F0[];
#define GALE01_2E4A44
/* 2E4A44 */ void it_802E4A44(Item_GObj*);
/* 2E4B00 */ bool it_802E4B00(Item_GObj*);
/* 2E4C08 */ void it_802E4C08(Item_GObj*);
/* 2E4C68 */ bool itOctarock_UnkMotion0_Anim(Item_GObj* gobj);
/* 2E4CB0 */ void itOctarock_UnkMotion0_Phys(Item_GObj* gobj);
/* 2E4D78 */ bool itOctarock_UnkMotion0_Coll(Item_GObj* gobj);
/* 2E4DB4 */ void it_802E4DB4(Item_GObj*);
/* 2E4DF8 */ bool itOctarock_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E4E00 */ void itOctarock_UnkMotion2_Phys(Item_GObj* gobj);
/* 2E4E30 */ bool itOctarock_UnkMotion2_Coll(Item_GObj* gobj);
/* 2E4E6C */ void it_802E4E6C(Item_GObj*);
/* 2E4F18 */ bool itOctarock_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E4FB0 */ void itOctarock_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E4FD8 */ bool itOctarock_UnkMotion3_Coll(Item_GObj* gobj);
/* 2E503C */ void it_802E503C(Item_GObj*);
/* 2E50B0 */ bool itOctarock_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E51C4 */ void itOctarock_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E521C */ bool itOctarock_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E52E0 */ s32 it_802E52E0(Item_GObj*);
/* 2E53C8 */ void it_802E53C8(Item_GObj*);
/* 2E5428 */ bool itOctarock_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E5514 */ void itOctarock_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E5554 */ bool itOctarock_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E561C */ void itOctarock_Logic2_PickedUp(Item_GObj*);
/* 2E5644 */ bool itOctarock_UnkMotion5_Anim(Item_GObj* gobj);
/* 2E568C */ void itOctarock_UnkMotion5_Phys(Item_GObj* gobj);
/* 2E5690 */ void itOctarock_Logic2_Dropped(Item_GObj*);
/* 2E56E8 */ void itOctarock_Logic2_Thrown(Item_GObj*);
/* 2E5738 */ bool itOctarock_UnkMotion6_Anim(Item_GObj* gobj);
/* 2E5780 */ void itOctarock_UnkMotion6_Phys(Item_GObj* gobj);
/* 2E57B0 */ bool itOctarock_UnkMotion6_Coll(Item_GObj* gobj);
/* 2E57D4 */ void it_802E57D4(Item_GObj*);
/* 2E5834 */ bool itOctarock_UnkMotion7_Anim(Item_GObj* gobj);
/* 2E587C */ void itOctarock_UnkMotion7_Phys(Item_GObj* gobj);
/* 2E5880 */ bool itOctarock_UnkMotion7_Coll(Item_GObj* gobj);
/* 2E58A0 */ void it_802E58A0(Item_GObj*);
/* 2E5900 */ bool itOctarock_UnkMotion8_Anim(Item_GObj* gobj);
/* 2E5908 */ void itOctarock_UnkMotion8_Phys(Item_GObj* gobj);
/* 2E5924 */ bool itOctarock_UnkMotion8_Coll(Item_GObj* gobj);
/* 2E5944 */ void it_802E5944(Item_GObj*);
/* 2E595C */ void it_802E595C(HSD_JObj*, Item*);
/* 2E5AA4 */ void it_802E5AA4(Item_GObj*, Item_GObj*);
/* 3F8B48 */ extern ItemStateTable it_803F8B48[];
#define GALE01_2E878C
/* 2E878C */ void itOctarockstone_802E878C(Item_GObj*);
/* 2E87D8 */ bool itOctarockstone_Logic4_DmgDealt(Item_GObj*);
/* 2E87E0 */ bool itOctarockstone_Logic4_Clanked(Item_GObj*);
/* 2E87E8 */ bool itOctarockstone_Logic4_HitShield(Item_GObj*);
/* 2E87F0 */ bool itOctarockstone_Logic4_Absorbed(Item_GObj*);
/* 2E87F8 */ bool itOctarockstone_Logic4_Reflected(Item_GObj*);
/* 2E881C */ bool itOctarockstone_Logic4_ShieldBounced(Item_GObj*);
/* 2E883C */ void itOctarockstone_802E883C(HSD_GObj* gobj);
/* 2E8864 */ bool itOctarockstone_UnkMotion0_Anim(Item_GObj* gobj);
/* 2E8898 */ void itOctarockstone_UnkMotion0_Phys(Item_GObj* gobj);
/* 2E889C */ bool itOctarockstone_UnkMotion0_Coll(Item_GObj* gobj);
/* 2E890C */ void itOctarockstone_802E890C(Item_GObj*);
/* 2E896C */ bool itOctarockstone_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E8974 */ void itOctarockstone_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E8990 */ bool itOctarockstone_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E89B0 */ void itOctarockstone_802E89B0(Item_GObj*, Item_GObj*);
/* 2E89D0 */ void it_802E89D0(Item_GObj*, f32, f32, f32);
/* 2E8ADC */ void it_802E8ADC(Item_GObj*, Vec3*, s32, f32, f32, f32);
/* 3F8E90 */ extern ItemStateTable it_803F8E90[];
#define GALE01_2D73D0
/* 2D73D0 */ void itOldKuri_Logic29_EvtUnk(Item_GObj*, Item_GObj*);
/* 2D73F0 */ void it_802D73F0(Item_GObj*);
/* 2D747C */ void it_802D747C(Item_GObj*);
/* 2D74D0 */ bool itOldkuri_UnkMotion0_Anim(Item_GObj* gobj);
/* 2D74D8 */ void itOldkuri_UnkMotion0_Phys(Item_GObj* gobj);
/* 2D7550 */ bool itOldkuri_UnkMotion0_Coll(Item_GObj* gobj);
/* 2D758C */ void it_802D758C(Item_GObj* gobj);
/* 2D75F8 */ bool itOldkuri_UnkMotion1_Anim(Item_GObj* gobj);
/* 2D7670 */ void itOldkuri_UnkMotion1_Phys(Item_GObj* gobj);
/* 2D76EC */ bool itOldkuri_UnkMotion1_Coll(Item_GObj* gobj);
/* 2D775C */ void it_802D775C(Item_GObj* gobj);
/* 2D77C8 */ bool itOldkuri_UnkMotion2_Anim(Item_GObj* gobj);
/* 2D788C */ void itOldkuri_UnkMotion2_Phys(Item_GObj* gobj);
/* 2D795C */ bool itOldkuri_UnkMotion2_Coll(Item_GObj* gobj);
/* 2D7A18 */ bool itOldkuri_UnkMotion3_Anim(Item_GObj* gobj);
/* 2D7A60 */ void itOldkuri_UnkMotion3_Phys(Item_GObj* gobj);
/* 2D7A90 */ bool itOldkuri_UnkMotion3_Coll(Item_GObj* gobj);
/* 2D7AF0 */ void it_802D7AF0(Item_GObj*);
/* 2D7B3C */ bool itOldkuri_UnkMotion4_Anim(Item_GObj* gobj);
/* 2D7B84 */ void itOldkuri_UnkMotion4_Phys(Item_GObj* gobj);
/* 2D7BB4 */ bool itOldkuri_UnkMotion4_Coll(Item_GObj* gobj);
/* 2D7C14 */ void itOldKuri_Logic0_PickedUp(Item_GObj*);
/* 2D7C58 */ bool itOldkuri_UnkMotion5_Anim(Item_GObj* gobj);
/* 2D7CB0 */ void itOldkuri_UnkMotion5_Phys(Item_GObj* gobj);
/* 2D7CB4 */ void it_2725_Logic0_Dropped(Item_GObj*);
/* 2D7D18 */ void it_2725_Logic0_Thrown(Item_GObj*);
/* 2D7D7C */ bool itOldkuri_UnkMotion6_Anim(Item_GObj* gobj);
/* 2D7DC4 */ void itOldkuri_UnkMotion6_Phys(Item_GObj* gobj);
/* 2D7DF4 */ bool itOldkuri_UnkMotion6_Coll(Item_GObj* gobj);
/* 2D7E18 */ bool itOldkuri_UnkMotion9_Anim(Item_GObj* gobj);
/* 2D7EAC */ void itOldkuri_UnkMotion9_Phys(Item_GObj* gobj);
/* 2D7ED4 */ bool itOldkuri_UnkMotion9_Coll(Item_GObj* gobj);
/* 2D7F38 */ bool it_2725_Logic0_DmgReceived(Item_GObj*);
/* 2D8098 */ bool it_802D8098(Item_GObj*);
/* 2D813C */ void it_802D813C(Item_GObj* gobj);
/* 2D8190 */ bool itOldkuri_UnkMotion7_Anim(Item_GObj* gobj);
/* 2D81D8 */ void itOldkuri_UnkMotion7_Phys(Item_GObj* gobj);
/* 2D81DC */ bool itOldkuri_UnkMotion7_Coll(Item_GObj* gobj);
/* 2D81FC */ void it_802D81FC(Item_GObj*);
/* 2D8240 */ bool itOldkuri_UnkMotion8_Anim(Item_GObj* gobj);
/* 2D8274 */ void itOldkuri_UnkMotion8_Phys(Item_GObj* gobj);
/* 2D82A4 */ bool itOldkuri_UnkMotion8_Coll(Item_GObj* gobj);
/* 2D82C4 */ void it_802D82C4(Item_GObj* gobj);
/* 2D8330 */ bool itOldkuri_UnkMotion10_Anim(Item_GObj* gobj);
/* 2D8378 */ void itOldkuri_UnkMotion10_Phys(Item_GObj* gobj);
/* 2D837C */ bool itOldkuri_UnkMotion10_Coll(Item_GObj* gobj);
/* 2D839C */ void it_802D839C(Item_GObj* gobj);
/* 2D8408 */ bool itOldkuri_UnkMotion11_Anim(Item_GObj* gobj);
/* 2D8450 */ void itOldkuri_UnkMotion11_Phys(Item_GObj* gobj);
/* 2D846C */ bool itOldkuri_UnkMotion11_Coll(Item_GObj* gobj);
/* 2D848C */ void it_802D848C(Item_GObj*, s32, Item_StateChangeFlags);
/* 2D84D8 */ void it_802D84D8(Item_GObj*, Item_GObj*);
/* 3F8320 */ extern ItemStateTable it_803F8320[];
#define GALE01_2E2470
/* 2E2470 */ void it_802E2470(Item_GObj*);
/* 2E257C */ bool it_2725_Logic8_DmgReceived(Item_GObj*);
/* 2E269C */ void it_802E269C(Item_GObj*);
/* 2E26F4 */ bool itOldottosea_UnkMotion0_Anim(Item_GObj* gobj);
/* 2E273C */ void itOldottosea_UnkMotion0_Phys(Item_GObj* gobj);
/* 2E2778 */ bool itOldottosea_UnkMotion0_Coll(Item_GObj* gobj);
/* 2E27B4 */ void it_802E27B4(Item_GObj*);
/* 2E28E0 */ bool itOldottosea_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E2A58 */ void itOldottosea_UnkMotion2_Phys(Item_GObj* gobj);
/* 2E2B38 */ bool itOldottosea_UnkMotion2_Coll(Item_GObj* gobj);
/* 2E2BC0 */ void it_802E2BC0(Item_GObj*);
/* 2E2C0C */ bool itOldottosea_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E2C14 */ void itOldottosea_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E2C44 */ bool itOldottosea_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E2C80 */ void it_802E2C80(Item_GObj* gobj);
/* 2E2CFC */ bool itOldottosea_UnkMotion5_Anim(Item_GObj* gobj);
/* 2E2D68 */ void itOldottosea_UnkMotion5_Phys(Item_GObj* gobj);
/* 2E2D90 */ bool itOldottosea_UnkMotion5_Coll(Item_GObj* gobj);
/* 2E2DF4 */ void it_802E2DF4(Item_GObj*);
/* 2E2E30 */ void it_802E2E30(Item_GObj*);
/* 2E2E90 */ bool itOldottosea_UnkMotion7_Anim(Item_GObj* gobj);
/* 2E2F08 */ void itOldottosea_UnkMotion7_Phys(Item_GObj* gobj);
/* 2E3024 */ bool itOldottosea_UnkMotion7_Coll(Item_GObj* gobj);
/* 2E3098 */ void it_802E3098(Item_GObj* gobj);
/* 2E3110 */ bool itOldottosea_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E31B8 */ void itOldottosea_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E31BC */ bool itOldottosea_UnkMotion3_Coll(Item_GObj* gobj);
/* 3F89C8 */ extern ItemStateTable it_803F89C8[];
#define GALE01_28B08C
/* 28B08C */ int it_8028B08C(Item_GObj* item_gobj, int statenum);
/* 28B0B8 */ void itParasol_Logic13_Spawned(Item_GObj* item_gobj);
/* 28B0EC */ void it_8028B0EC(Item_GObj* item_gobj);
/* 28B144 */ bool itParasol_UnkMotion0_Anim(Item_GObj* item_gobj);
/* 28B14C */ void itParasol_UnkMotion0_Phys(Item_GObj* item_gobj);
/* 28B150 */ bool itParasol_UnkMotion0_Coll(Item_GObj* item_gobj);
/* 28B17C */ void it_8028B17C(Item_GObj* item_gobj);
/* 28B1A4 */ bool itParasol_UnkMotion2_Anim(Item_GObj* item_gobj);
/* 28B2EC */ void itParasol_UnkMotion1_Phys(Item_GObj* item_gobj);
/* 28B394 */ bool itParasol_UnkMotion2_Coll(Item_GObj* item_gobj);
/* 28B3C0 */ void itParasol_Logic13_Dropped(Item_GObj* item_gobj);
/* 28B3E0 */ void itParasol_Logic13_Thrown(Item_GObj* item_gobj);
/* 28B42C */ void itParasol_UnkMotion2_Phys(Item_GObj* item_gobj);
/* 28B4D4 */ bool itParasol_Logic13_DmgDealt(Item_GObj* item_gobj);
/* 28B4F8 */ bool itParasol_Logic13_Clanked(Item_GObj* item_gobj);
/* 28B51C */ bool itParasol_Logic13_HitShield(Item_GObj* item_gobj);
/* 28B540 */ bool itParasol_Logic13_Reflected(Item_GObj* item_gobj);
/* 28B560 */ bool itParasol_Logic13_ShieldBounced(Item_GObj* item_gobj);
/* 28B580 */ void itParasol_Logic13_EnteredAir(Item_GObj* item_gobj);
/* 28B5A8 */ bool itParasol_UnkMotion3_Anim(Item_GObj* item_gobj);
/* 28B5B0 */ void itParasol_UnkMotion3_Phys(Item_GObj* item_gobj);
/* 28B5B4 */ bool itParasol_UnkMotion3_Coll(Item_GObj* item_gobj);
/* 28B5E8 */ void itParasol_Logic13_PickedUp(Item_GObj* item_gobj);
/* 28B60C */ bool itParasol_UnkMotion10_Anim(Item_GObj* item_gobj);
/* 28B614 */ void itParasol_UnkMotion10_Phys(Item_GObj* item_gobj);
/* 28B618 */ void it_8028B618(Item_GObj* item_gobj, f32 speed);
/* 28B648 */ void it_8028B648(Item_GObj* item_gobj, f32 speed);
/* 28B6B0 */ void it_8028B6B0(Item_GObj* item_gobj, f32 speed);
/* 28B718 */ void it_8028B718(Item_GObj* item_gobj, f32 speed);
/* 28B780 */ void it_8028B780(Item_GObj* item_gobj, f32 speed);
/* 28B7E8 */ void it_8028B7E8(Item_GObj* item_gobj, f32 speed);
/* 28B850 */ void it_8028B850(Item_GObj* item_gobj, f32 speed);
/* 28B8B8 */ void itParasol_Logic13_EvtUnk(Item_GObj* item_gobj, HSD_GObj*);
/* 3F5AB0 */ extern ItemStateTable it_803F5AB0[];
#define GALE01_2E05A0
/* 2E05A0 */ void it_802E05A0(Item_GObj*);
/* 2E0678 */ void it_802E0678(Item_GObj* gobj);
/* 2E06B4 */ bool itPatapata_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E06BC */ void itPatapata_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E06F8 */ bool itPatapata_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E0734 */ void it_802E0734(Item_GObj*);
/* 2E0974 */ bool itPatapata_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E09BC */ void itPatapata_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E0B78 */ bool itPatapata_UnkMotion3_Coll(Item_GObj* gobj);
/* 2E0D9C */ void it_802E0D9C(Item_GObj* gobj);
/* 2E0E10 */ bool itPatapata_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E0EE0 */ bool it_2725_Logic4_DmgReceived(Item_GObj*);
/* 2E0F1C */ bool it_802E0F1C(Item_GObj*);
/* 2E0F70 */ void itPatapata_Logic4_PickedUp(Item_GObj*);
/* 2E0F98 */ bool itPatapata_UnkMotion5_Anim(Item_GObj* gobj);
/* 2E0FE0 */ void itPatapata_UnkMotion5_Phys(Item_GObj* gobj);
/* 2E0FE4 */ void it_2725_Logic4_Dropped(Item_GObj*);
/* 2E1040 */ bool itPatapata_UnkMotion7_Anim(Item_GObj* gobj);
/* 2E10A0 */ void itPatapata_UnkMotion7_Phys(Item_GObj* gobj);
/* 2E10A4 */ bool itPatapata_UnkMotion7_Coll(Item_GObj* gobj);
/* 2E10C8 */ void it_2725_Logic4_Thrown(Item_GObj*);
/* 2E1128 */ bool itPatapata_UnkMotion6_Anim(Item_GObj* gobj);
/* 2E1170 */ void itPatapata_UnkMotion6_Phys(Item_GObj* gobj);
/* 2E11A0 */ bool itPatapata_UnkMotion6_Coll(Item_GObj* gobj);
/* 2E11E0 */ void it_802E11E0(Item_GObj* gobj);
/* 2E13EC */ bool itPatapata_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E1498 */ void itPatapata_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E1578 */ bool itPatapata_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E15B0 */ void it_802E15B0(Item_GObj*);
/* 2E1648 */ void it_802E1648(Item_GObj*, int, int);
/* 2E1694 */ void it_802E1694(Item_GObj*);
/* 2E16D8 */ void it_802E16D8(Item_GObj*, Item_GObj*);
/* 2E16F8 */ Item_GObj* it_802E16F8(s32, Vec3*, s32);
extern ItemStateTable it_803F88C0[];
#define ITPEACHEXPLODE_H
extern struct ItemStateTable it_803F7488[];
/* 2BD158 */ Item_GObj* it_802BD158(Item_GObj*, Vec3* pos, bool, float dir);
/* 2BD240 */ bool itPeachExplode_Logic55_DmgDealt(Item_GObj*);
/* 2BD248 */ void it_802BD248(Item_GObj*, Item_GObj* owner, bool);
/* 2BD2EC */ bool itPeachexplode_UnkMotion1_Anim(Item_GObj*);
/* 2BD30C */ void itPeachExplode_Logic55_EvtUnk(Item_GObj*,
                                                Item_GObj* ref_gobj);
#define GALE01_2BDA40
/* 2BDA40 */ int it_802BDA40(Item_GObj*, int);
/* 2BDA64 */ Item_GObj* it_802BDA64(HSD_GObj* parent, Vec3* pos,
                                    Fighter_Part arg2, f32 dir);
/* 2BDB4C */ void itPeachParasol_Logic60_Destroyed(Item_GObj*);
/* 2BDB94 */ void it_802BDB94(Item_GObj*);
/* 2BDBF8 */ void it_802BDBF8(Item_GObj*);
/* 2BDC18 */ void it_802BDC18(Item_GObj*);
/* 2BDC38 */ bool it_802BDC38(Item_GObj*);
/* 2BDC74 */ void itPeachParasol_Logic60_PickedUp(Item_GObj*);
/* 2BDCC0 */ bool itPeachparasol_UnkMotion2_Anim(Item_GObj*);
/* 2BDD3C */ void it_802BDD3C(Item_GObj*);
/* 2BDD40 */ void it_802BDD40(Item_GObj*, f32 arg1);
/* 2BDDB4 */ void it_802BDDB4(Item_GObj*, f32 arg1);
/* 2BDDF8 */ void itPeachParasol_Logic60_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F74F8 */ extern ItemStateTable it_803F74F8[];
#define GALE01_2BDE18
/* 2BDE18 */ Item_GObj* it_802BDE18(Item_GObj*, Vec3*, Fighter_Part, ItemKind,
                                    f32);
/* 2BDEFC */ void itPeachToad_Logic91_Destroyed(Item_GObj*);
/* 2BDF40 */ void it_802BDF40(Item_GObj* gobj);
/* 2BDFA0 */ void it_802BDFA0(Item_GObj* gobj);
/* 2BDFC0 */ void it_802BDFC0(Item_GObj* gobj);
/* 2BDFE0 */ void itPeachToad_Logic91_PickedUp(Item_GObj*);
/* 2BE02C */ bool itPeachtoad_UnkMotion0_Anim(Item_GObj*);
/* 2BE100 */ void it_802BE100(Item_GObj* gobj);
/* 2BE168 */ bool itPeachtoad_UnkMotion1_Anim(Item_GObj*);
/* 2BE1F4 */ void itPeachToad_Logic91_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7528 */ extern ItemStateTable it_803F7528[];
#define GALE01_2BE214
/* 2BE214 */ Item_GObj* it_802BE214(Item_GObj* gobj, Vec3* pos, ItemKind kind,
                                    f32 facing_dir);
/* 2BE2E8 */ void it_802BE2E8(Item_GObj*, Item_GObj*);
/* 2BE408 */ bool itPeachtoadspore_UnkMotion0_Anim(Item_GObj*);
/* 2BE458 */ void itPeachtoadspore_UnkMotion0_Phys(Item_GObj*);
/* 2BE488 */ bool itPeachToadSpore_Logic92_DmgDealt(Item_GObj*);
/* 2BE4AC */ bool itPeachToadSpore_Logic68_Clanked(Item_GObj*);
/* 2BE4D0 */ bool itPeachToadSpore_Logic68_HitShield(Item_GObj*);
/* 2BE4F4 */ bool itPeachToadSpore_Logic68_Absorbed(Item_GObj*);
/* 2BE518 */ bool itPeachToadSpore_Logic68_ShieldBounced(Item_GObj*);
/* 2BE538 */ bool itPeachToadSpore_Logic68_Reflected(Item_GObj*);
/* 2BE578 */ void itPeachToadSpore_Logic92_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7548 */ extern ItemStateTable it_803F7548[];
#define GALE01_2BD32C
/* 2BD32C */ s32 it_802BD32C(Item_GObj*);
/* 2BD45C */ void it_802BD45C(Item_GObj* gobj);
/* 2BD47C */ void itPeachTurnip_Logic56_Destroyed(Item_GObj*);
/* 2BD4AC */ Item_GObj* it_802BD4AC(Item_GObj*, Vec3*, Fighter_Part, ItemKind,
                                    f32);
/* 2BD628 */ void itPeachTurnip_Logic56_PickedUp(Item_GObj*);
/* 2BD6D4 */ bool itPeachturnip_UnkMotion4_Anim(Item_GObj*);
/* 2BD6DC */ void itPeachturnip_UnkMotion4_Phys(Item_GObj*);
/* 2BD6E0 */ bool itPeachturnip_UnkMotion1_Anim(Item_GObj*);
/* 2BD718 */ void itPeachturnip_UnkMotion1_Phys(Item_GObj*);
/* 2BD748 */ void itPeachTurnip_Logic56_Thrown(Item_GObj*);
/* 2BD7E0 */ bool itPeachturnip_UnkMotion3_Anim(Item_GObj*);
/* 2BD818 */ void itPeachturnip_UnkMotion3_Phys(Item_GObj*);
/* 2BD864 */ bool itPeachturnip_UnkMotion3_Coll(Item_GObj*);
/* 2BD8CC */ void itPeachTurnip_Logic56_Dropped(Item_GObj*);
/* 2BD938 */ bool itPeachTurnip_Logic56_DmgDealt(Item_GObj*);
/* 2BD978 */ bool itPeachTurnip_Logic56_Clanked(Item_GObj*);
/* 2BD99C */ bool itPeachTurnip_Logic56_Reflected(Item_GObj*);
/* 2BD9C0 */ bool itPeachTurnip_Logic56_HitShield(Item_GObj*);
/* 2BD9E4 */ bool itPeachTurnip_Logic56_ShieldBounced(Item_GObj*);
/* 2BDA08 */ void itPeachTurnip_Logic56_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F74A8 */ extern ItemStateTable it_803F74A8[];
#define GALE01_2B1DEC
/* 2B1DEC */ s32 it_802B1DEC(Item_GObj*);
/* 2B1DF8 */ Item_GObj* it_802B1DF8(Item_GObj* owner, Vec3* pos, Vec3* vel,
                                    s32 count, s32 delay, s32 kind);
/* 2B1FC8 */ void it_802B1FC8(Item_GObj*);
/* 2B1FE8 */ void it_802B1FE8(Item_GObj*, Vec3*);
/* 2B202C */ void it_2725_Logic39_Destroyed(Item_GObj*);
/* 2B2080 */ void it_802B2080(Item_GObj*);
/* 2B20DC */ bool itPikachuthunder_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B211C */ void it_802B211C(Item_GObj*);
/* 2B21A8 */ bool itPikachuthunder_UnkMotion1_Anim(Item_GObj* gobj);
/* 2B21E0 */ bool itPikachuthunder_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B22B8 */ void it_802B22B8(Item_GObj* gobj);
/* 2B2340 */ bool itPikachuthunder_UnkMotion2_Anim(Item_GObj* gobj);
/* 2B2508 */ bool itPikachuThunder_Logic39_DmgDealt(Item_GObj*);
/* 2B2510 */ bool itPikachuThunder_Logic39_HitShield(Item_GObj*);
/* 2B2518 */ bool itPikachuThunder_Logic39_Clanked(Item_GObj*);
/* 2B2520 */ bool itPikachuThunder_Logic39_Absorbed(Item_GObj*);
/* 2B2528 */ void itPikachuThunder_Logic39_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F70C8 */ extern ItemStateTable it_803F70C8[];
#define GALE01_2B3EFC
/* 2B3EFC */ Item_GObj* it_802B3EFC(Item_GObj* gobj);
/* 2B3F20 */ void it_802B3F20(Item_GObj*, Vec3*);
/* 2B3F88 */ void it_802B3F88(Item_GObj* gobj, Vec3* pos, CollData* coll,
                              Vec3* vel);
/* 2B4224 */ Item_GObj* it_802B4224(HSD_GObj* owner, Item_GObj* gobj,
                                    Vec3* pos, s32 kind, f32 facing_dir);
/* 2B43B0 */ void it_802B43B0(Item_GObj* gobj);
/* 2B43D0 */ void it_802B43D0(Item_GObj* gobj, HSD_GObj* arg1);
/* 2B4450 */ bool itPikachutjoltair_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B45D0 */ void itPikachutjoltair_UnkMotion0_Phys(Item_GObj*);
/* 2B45F0 */ bool it_2725_Logic107_DmgDealt(Item_GObj*);
/* 2B4638 */ bool it_2725_Logic107_Clanked(Item_GObj*);
/* 2B4680 */ bool it_2725_Logic107_Absorbed(Item_GObj*);
/* 2B46C8 */ bool it_2725_Logic107_Reflected(Item_GObj*);
/* 2B4A18 */ bool it_2725_Logic107_HitShield(Item_GObj*);
/* 2B4A60 */ bool it_2725_Logic107_ShieldBounced(Item_GObj*);
/* 2B4AA8 */ void itPikachuTJoltAir_Logic107_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F71D8 */ extern ItemStateTable it_803F71D8[];
#define GALE01_2B3368
/* 2B3368 */ Item_GObj* it_802B3368(Item_GObj* gobj);
/* 2B338C */ Item_GObj* itPikachuThunderJolt_Spawn(Item_GObj* owner, Vec3* pos,
                                                   f32 facing_dir,
                                                   ItemKind kind);
/* 2B34E4 */ void it_2725_Logic106_Destroyed(Item_GObj*);
/* 2B3544 */ void it_802B3544(Item_GObj* gobj);
/* 2B3554 */ void it_802B3554(Item_GObj* gobj, HSD_GObj* owner);
/* 2B3680 */ bool itPikachutjoltground_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B36BC */ bool itPikachutjoltground_UnkMotion1_Anim(Item_GObj* gobj);
/* 2B3790 */ void itPikachutjoltground_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B3808 */ bool itPikachutjoltground_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B397C */ bool itPikachutjoltground_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B3A94 */ bool it_2725_Logic106_DmgDealt(Item_GObj*);
/* 2B3AF8 */ bool it_2725_Logic106_Reflected(Item_GObj*);
/* 2B3C44 */ bool it_2725_Logic106_Clanked(Item_GObj*);
/* 2B3CA8 */ bool it_2725_Logic106_Absorbed(Item_GObj*);
/* 2B3D0C */ bool it_2725_Logic106_HitShield(Item_GObj*);
/* 2B3D70 */ bool it_2725_Logic106_ShieldBounced(Item_GObj*);
/* 2B3EDC */ void itPikachuTJoltGround_Logic106_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7190 */ extern ItemStateTable it_803F7190[];
#define GALE01_2D3260
void itPippi_Logic20_Spawned(Item_GObj*);
void it_802D32D8(Item_GObj*);
void it_802D32DC(Item_GObj*, Item_GObj*);
bool itPippi_UnkMotion1_Anim(Item_GObj*);
void itPippi_UnkMotion1_Phys(Item_GObj*);
bool itPippi_UnkMotion1_Coll(Item_GObj*);
void it_802D33F8(Item_GObj*);
bool itPippi_UnkMotion5_Anim(Item_GObj*);
void itPippi_UnkMotion5_Phys(Item_GObj*);
bool itPippi_UnkMotion5_Coll(Item_GObj*);
void it_802D3590(Item_GObj*);
bool itPippi_UnkMotion0_Anim(Item_GObj*);
void itPippi_UnkMotion0_Phys(Item_GObj*);
bool itPippi_UnkMotion0_Coll(Item_GObj*);
extern ItemStateTable it_803F7FF8[];
#define GALE01_2D5ABC
/* 2D5ABC */ void itPorygon2_Logic26_Spawned(Item_GObj*);
/* 2D5B14 */ void it_802D5B14(Item_GObj*);
/* 2D5B60 */ bool itPorygon2_UnkMotion0_Anim(Item_GObj*);
/* 2D5BBC */ void itPorygon2_UnkMotion0_Phys(Item_GObj*);
/* 2D5BDC */ bool itPorygon2_UnkMotion0_Coll(Item_GObj*);
/* 2D5C00 */ void it_802D5C00(Item_GObj*);
/* 2D5C60 */ bool itPorygon2_UnkMotion1_Anim(Item_GObj*);
/* 2D5CB0 */ void itPorygon2_UnkMotion1_Phys(Item_GObj*);
/* 2D5CD0 */ bool itPorygon2_UnkMotion1_Coll(Item_GObj*);
/* 2D5CD8 */ void it_802D5CD8(Item_GObj*, HSD_GObj*);
/* 3F8250 */ extern ItemStateTable it_803F8250[];
#define GALE01_294DA0
/* 294DA0 */ bool itRabbitC_Logic30_ShieldBounced(Item_GObj*);
/* 294DC0 */ HSD_GObj* it_80294DC0(Vec3*);
/* 294E78 */ void it_80294E78(Item_GObj*, float);
/* 294EB0 */ void it_80294EB0(Item_GObj*, Vec3*, Vec3*);
/* 2950D4 */ void it_802950D4(Item_GObj*, bool);
/* 295118 */ void itRabbitC_Logic31_Spawned(Item_GObj*);
/* 29524C */ void itRabbitC_Logic31_PickedUp(Item_GObj*);
/* 295298 */ void itRabbitC_Logic31_Dropped(Item_GObj*);
/* 295340 */ void itRabbitC_Logic31_EnteredAir(Item_GObj*);
/* 2953A8 */ void itRabbitC_Logic31_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F6270 */ extern ItemStateTable it_803F6270[];
#define GALE01_2CF814
/* 2CF814 */ void it_802CF814(Item_GObj*);
/* 2CF880 */ void it_802CF880(Item_GObj*);
/* 2CF884 */ void it_802CF884(Item_GObj*, Item_GObj*);
/* 2CF8A4 */ void it_802CF8A4(Item_GObj*);
/* 2CF908 */ void it_802CF908(Item_GObj*);
/* 2CF978 */ bool itRaikou_UnkMotion0_Anim(Item_GObj*);
/* 2CFA74 */ void itRaikou_UnkMotion0_Phys(Item_GObj*);
/* 2CFAB0 */ bool itRaikou_UnkMotion0_Coll(Item_GObj*);
/* 2CFAFC */ void it_802CFAFC(Item_GObj*);
/* 2CFB78 */ void it_802CFB78(Item_GObj*);
/* 2CFBDC */ bool itRaikou_UnkMotion1_Anim(Item_GObj*);
/* 2CFC00 */ void itRaikou_UnkMotion1_Phys(Item_GObj*);
/* 2CFC20 */ bool itRaikou_UnkMotion1_Coll(Item_GObj*);
/* 3F7DE8 */ extern ItemStateTable it_803F7DE8[];
#define GALE01_28CFE0
/* 28CFE0 */ void it_8028CFE0(Item_GObj*);
/* 28D090 */ void it_8028D090(Item_GObj*);
/* 28D100 */ void it_8028D100(Item_GObj* gobj);
/* 28D26C */ void it_8028D26C(Item_GObj* gobj);
/* 28D390 */ void it_8028D390(Item_GObj* gobj);
/* 28D3B8 */ void it_8028D3B8(Item_GObj* gobj);
/* 28D4A8 */ void fn_8028D4A8(Item_GObj* gobj);
/* 28D4E4 */ void it_8028D4E4(Item_GObj* gobj);
/* 28D56C */ f32 it_8028D56C(Item_GObj*, f32, f32);
/* 28D59C */ void it_3F14_Logic15_Spawned(Item_GObj*);
/* 28D62C */ void it_8028D62C(Item_GObj* gobj);
/* 28D6C0 */ bool itRshell_UnkMotion0_Anim(Item_GObj* gobj);
/* 28D6C8 */ void itRshell_UnkMotion0_Phys(Item_GObj* gobj);
/* 28D6CC */ bool itRshell_UnkMotion0_Coll(Item_GObj* gobj);
/* 28D7F0 */ void it_8028D7F0(Item_GObj* gobj);
/* 28D818 */ bool itRshell_UnkMotion1_Anim(Item_GObj* gobj);
/* 28D820 */ void itRshell_UnkMotion1_Phys(Item_GObj* gobj);
/* 28D850 */ bool itRshell_UnkMotion1_Coll(Item_GObj* gobj);
/* 28D898 */ void itRShell_Logic15_PickedUp(Item_GObj*);
/* 28D8D4 */ bool itRshell_UnkMotion2_Anim(Item_GObj* gobj);
/* 28D8DC */ void itRshell_UnkMotion2_Phys(Item_GObj* gobj);
/* 28D8E0 */ void it_3F14_Logic15_Thrown(Item_GObj*);
/* 28D940 */ bool itRshell_UnkMotion3_Anim(Item_GObj* gobj);
/* 28D998 */ void itRshell_UnkMotion3_Phys(Item_GObj* gobj);
/* 28D9C8 */ bool itRshell_UnkMotion3_Coll(Item_GObj* gobj);
/* 28D9F4 */ void it_3F14_Logic15_Dropped(Item_GObj*);
/* 28DA30 */ bool itRshell_UnkMotion4_Anim(Item_GObj* gobj);
/* 28DA88 */ void itRshell_UnkMotion4_Phys(Item_GObj* gobj);
/* 28DAB8 */ bool itRshell_UnkMotion4_Coll(Item_GObj* gobj);
/* 28DAE4 */ void it_8028DAE4(Item_GObj* gobj);
/* 28DC5C */ bool itRshell_UnkMotion5_Anim(Item_GObj* gobj);
/* 28DD88 */ void itRshell_UnkMotion5_Phys(Item_GObj* gobj);
/* 28DFE8 */ bool itRshell_UnkMotion5_Coll(Item_GObj* gobj);
/* 28E170 */ void it_8028E170(Item_GObj* gobj);
/* 28E2D4 */ bool itRshell_UnkMotion6_Anim(Item_GObj* gobj);
/* 28E370 */ void itRshell_UnkMotion6_Phys(Item_GObj* gobj);
/* 28E3A0 */ bool itRshell_UnkMotion6_Coll(Item_GObj* gobj);
/* 28E3CC */ void it_3F14_Logic15_EnteredAir(Item_GObj*);
/* 28E408 */ bool itRshell_UnkMotion7_Anim(Item_GObj* gobj);
/* 28E410 */ void itRshell_UnkMotion7_Phys(Item_GObj* gobj);
/* 28E414 */ bool itRshell_UnkMotion7_Coll(Item_GObj* gobj);
/* 28E540 */ bool it_3F14_Logic15_DmgDealt(Item_GObj*);
/* 28E584 */ bool it_3F14_Logic15_DmgReceived(Item_GObj*);
/* 28E5C8 */ bool itRShell_Logic15_Reflected(Item_GObj*);
/* 28E600 */ bool itRShell_Logic15_Clanked(Item_GObj*);
/* 28E624 */ bool it_3F14_Logic15_HitShield(Item_GObj*);
/* 28E684 */ bool itRShell_Logic15_ShieldBounced(Item_GObj*);
/* 28E6C0 */ bool it_8028E6C0(Item_GObj* gobj);
/* 28E718 */ void itRShell_Logic15_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5C48 */ extern ItemStateTable it_803F5C48[];
#define GALE01_2B4AC8
/* 2B4AC8 */ Item_GObj* it_802B4AC8(Item_GObj* gobj, Vec3* pos,
                                    float facing_dir);
/* 2B4BA0 */ void it_802B4BA0(Item_GObj* arg0);
/* 2B4C10 */ void it_802B4C10(Item_GObj* gobj);
/* 2B4C38 */ bool itSamusbomb_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B4CC4 */ void itSamusbomb_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B4CC8 */ bool itSamusbomb_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B4CF4 */ void it_802B4CF4(Item_GObj* gobj);
/* 2B4D1C */ bool itSamusbomb_UnkMotion1_Anim(Item_GObj* gobj);
/* 2B4F1C */ void itSamusbomb_UnkMotion1_Phys(Item_GObj* gobj);
/* 2B4F4C */ bool itSamusbomb_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B4F78 */ void itSamusBomb_Logic50_EnteredAir(Item_GObj*);
/* 2B4FA0 */ bool itSamusbomb_UnkMotion2_Anim(Item_GObj* gobj);
/* 2B51A0 */ void itSamusbomb_UnkMotion2_Phys(Item_GObj* gobj);
/* 2B5284 */ bool itSamusbomb_UnkMotion2_Coll(Item_GObj* gobj);
/* 2B52B8 */ bool itSamusBomb_Logic50_DmgDealt(Item_GObj*);
/* 2B52EC */ bool itSamusBomb_Logic50_Clanked(Item_GObj*);
/* 2B5320 */ bool itSamusBomb_Logic50_HitShield(Item_GObj*);
/* 2B5354 */ bool itSamusBomb_Logic50_ShieldBounced(Item_GObj*);
/* 2B5374 */ bool it_2725_Logic50_Reflected(Item_GObj*);
/* 2B53CC */ void it_802B53CC(Item_GObj*);
/* 2B5458 */ bool itSamusbomb_UnkMotion3_Anim(Item_GObj* gobj);
/* 2B5478 */ void it_802B5478(Item_GObj* gobj);
/* 2B54E4 */ void itSamusBomb_Logic50_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7220 */ extern ItemStateTable it_803F7220[];
#define GALE01_2B7150
typedef struct itSamusGrapple_Hitbox {
    struct spawn_hitbox_0 create_hitbox_0;
    struct spawn_hitbox_1 create_hitbox_1;
    struct spawn_hitbox_2 create_hitbox_2;
    struct spawn_hitbox_3 create_hitbox_3;
    struct spawn_hitbox_4 create_hitbox_4;
} itSamusGrapple_Hitbox;
typedef struct itSamusGrapple_HitboxData {
    itSamusGrapple_Hitbox create_hitbox;
    u8 x133_0 : 1;
    u8 x133_1 : 1;
    u8 x133_2 : 1;
    u8 x133_3 : 1;
    u8 x133_4 : 1;
    u8 x133_5 : 1;
    u8 x133_6 : 1;
    u8 x133_7 : 1;
    u8 x134_0 : 1;
    u8 x134_1 : 1;
    u8 x134_2 : 1;
    u8 x134_3 : 1;
    u8 x134_4 : 1;
    u8 x134_5 : 1;
    u8 x134_6 : 1;
    u8 x134_7 : 1;
} itSamusGrapple_HitboxData;
/* 2B7150 */ void itSamusGrapple_Logic53_Spawned(Item_GObj*);
/* 2B7160 */ void it_802B7160(Fighter_GObj*, itSamusGrapple_HitboxData*);
/* 2B743C */ void it_802B743C(HSD_GObj*, Item*, s32);
/* 2B75FC */ HSD_JObj* it_802B75FC(Item*, HSD_JObj*, s32, f32);
/* 2B7B84 */ void it_802B7B84(Item_GObj* gobj);
/* 2B7C18 */ Item_GObj* it_802B7C18(Fighter_GObj*, Vec3*, float facing_dir);
/* 2B7E34 */ void fn_802B7E34(Item_GObj*);
/* 2B8048 */ void itSamusgrapple_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B805C */ void fn_802B805C(Item_GObj*);
/* 2B8370 */ void itSamusgrapple_UnkMotion1_Phys(Item_GObj* gobj);
/* 2B8384 */ void fn_802B8384(Item_GObj*);
/* 2B8510 */ void itSamusgrapple_UnkMotion2_Phys(Item_GObj* gobj);
/* 2B8524 */ void fn_802B8524(Item_GObj*);
/* 2B8670 */ void itSamusgrapple_UnkMotion3_Phys(Item_GObj* gobj);
/* 2B8684 */ void fn_802B8684(Item_GObj*);
/* 2B8800 */ void itSamusgrapple_UnkMotion4_Phys(Item_GObj* gobj);
/* 2B8814 */ void fn_802B8814(Item_GObj*);
/* 2B8948 */ void itSamusgrapple_UnkMotion5_Phys(Item_GObj* gobj);
/* 2B895C */ void fn_802B895C(Item_GObj*);
/* 2B8B40 */ void itSamusgrapple_UnkMotion6_Phys(Item_GObj* gobj);
/* 2B8B54 */ void fn_802B8B54(Item_GObj*);
/* 2B8D24 */ void itSamusgrapple_UnkMotion7_Phys(Item_GObj* gobj);
/* 2B8D38 */ void fn_802B8D38(Item_GObj*);
/* 2B8FF8 */ void itSamusgrapple_UnkMotion8_Phys(Item_GObj* gobj);
/* 2B900C */ void it_802B900C(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              f32);
/* 2B91C4 */ void it_802B91C4(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              f32);
/* 2B9328 */ s32 it_802B9328(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                             Fighter*);
/* 2B99A0 */ s32 it_802B99A0(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                             Fighter*);
/* 2B9CE8 */ void it_802B9CE8(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              Fighter*);
/* 2B9FD4 */ bool it_802B9FD4(ItemLink*, Vec3*, itSamusGrappleAttributes*);
/* 2BA194 */ bool it_802BA194(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              f32);
/* 2BA2D8 */ bool it_802BA2D8(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              f32);
/* 2BA3BC */ bool it_802BA3BC(ItemLink*, ItemLink*, Vec3*,
                              itSamusGrappleAttributes*, f32);
/* 2BA5DC */ void it_802BA5DC(ItemLink*, ItemLink*, Vec3*,
                              itSamusGrappleAttributes*);
/* 2BA760 */ bool it_802BA760(ItemLink*, Vec3*, itSamusGrappleAttributes*,
                              Fighter*);
/* 2BA97C */ void itSamusGrapple_Logic53_PickedUp(Item_GObj*);
/* 2BA9B8 */ void it_802BA9B8(Item_GObj* gobj);
/* 2BAA08 */ void it_802BAA08(Item_GObj* gobj);
/* 2BAA58 */ void it_802BAA58(Item_GObj* gobj);
/* 2BAA94 */ void it_802BAA94(Item_GObj* gobj);
/* 2BAAE4 */ void it_802BAAE4(Item_GObj* gobj, Vec3* vel);
/* 2BAB40 */ void it_802BAB40(Item_GObj*);
/* 2BAB7C */ void it_802BAB7C(Item_GObj*);
/* 2BABB8 */ void it_802BABB8(Item_GObj* gobj);
/* 2BAC3C */ void it_802BAC3C(Fighter_GObj* gobj);
/* 2BAC80 */ void it_802BAC80(Fighter_GObj* gobj);
/* 2BACC4 */ void it_802BACC4(Fighter_GObj* gobj);
/* 2BAEA0 */ void itSamusGrapple_Logic53_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F73A8 */ extern ItemStateTable it_803F73A8[];
#define GALE01_2B62D0
struct _m2c_stack_it_802B64FC {
    /* 0x00 */ char pad_0[0x10];
    /* 0x10 */ Vec3 vec0;
    /* 0x1C */ Vec3 vec1;
    /* 0x28 */ Vec3 vec2;
    /* 0x34 */ Vec3 vec3;
    /* 0x40 */ char pad_40[8];
}; /* size = 0x48 */
struct _m2c_stack_itSamusmissile_UnkMotion0_Phys {
    /* 0x00 */ char pad_0[0x40];
    /* 0x40 */ Vec3 vec;
    /* 0x4C */ char pad_4C[0x14];
}; /* size = 0x60 */
/* 2B6C28 */ bool it_2725_Logic52_DmgDealt(Item_GObj*);
/* 2B6C7C */ bool it_2725_Logic52_Clanked(Item_GObj*);
/* 2B6CD0 */ bool it_2725_Logic52_HitShield(Item_GObj*);
/* 2B62D0 */ Item_GObj* it_802B62D0(Item_GObj*, Vec3* pos, bool,
                                    float facing_dir);
/* 2B63F8 */ void it_802B63F8(Item_GObj* gobj);
/* 2B64FC */ void it_802B64FC(Item_GObj* gobj);
/* 2B66A8 */ void* it_802B66A8(Item_GObj* gobj);
/* 2B6774 */ bool itSamusmissile_UnkMotion0_Anim(Item_GObj*);
/* 2B67E4 */ void itSamusmissile_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B6A34 */ bool itSamusmissile_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B6A60 */ void it_802B6A60(Item_GObj* gobj);
/* 2B6B1C */ bool itSamusmissile_UnkMotion1_Anim(Item_GObj*);
/* 2B6B8C */ void itSamusmissile_UnkMotion1_Phys(Item_GObj* gobj);
/* 2B6BFC */ bool itSamusmissile_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B6D24 */ bool it_2725_Logic52_ShieldBounced(Item_GObj*);
/* 2B6E4C */ bool it_2725_Logic52_Reflected(Item_GObj*);
/* 2B701C */ void it_802B701C(Item_GObj*);
/* 2B7080 */ bool itSamusmissile_UnkMotion3_Anim(Item_GObj* gobj);
/* 2B70A0 */ void it_802B70A0(Item_GObj*);
/* 2B7104 */ void it_2725_Logic52_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7340 */ extern ItemStateTable it_803F7340[];
#define GALE01_294AB0
/* 294AB0 */ void itScball_Logic30_Spawned(Item_GObj*);
/* 294BE4 */ void itScball_Logic30_PickedUp(Item_GObj*);
/* 294C14 */ void itScball_Logic30_Dropped(Item_GObj*);
/* 294C3C */ void itScball_Logic30_Thrown(Item_GObj*);
/* 294CE4 */ void itScball_Logic30_EnteredAir(Item_GObj*);
/* 294D4C */ bool itScball_Logic30_DmgDealt(Item_GObj*);
/* 294D54 */ bool itScball_Logic30_Clanked(Item_GObj*);
/* 294D5C */ bool itScball_Logic30_Reflected(Item_GObj*);
/* 294D7C */ bool itScball_Logic30_HitShield(Item_GObj*);
/* 3F6220 */ extern ItemStateTable it_803F6220[];
#define GALE01_2BAEEC
/* 2BAEEC */ void it_802BAEEC(Item_GObj*);
/* 2BAF0C */ void it_802BAF0C(Item_GObj*);
/* 2BAF2C */ int it_802BAF2C(Item* ip, HSD_JObj* jobj);
/* 2BB20C */ void it_802BB20C(Item_GObj*);
/* 2BB290 */ Item_GObj* itSeakChain_Spawn(Fighter_GObj* owner_gobj, Vec3* arg1,
                                          float facing_dir);
/* 2BB428 */ void fn_802BB428(Item_GObj* gobj);
/* 2BB44C */ void fn_802BB44C(Item_GObj* gobj);
/* 2BB574 */ void fn_802BB574(Item_GObj* gobj);
/* 2BB694 */ void fn_802BB694(Item_GObj* gobj);
/* 2BB784 */ void fn_802BB784(Item_GObj* gobj);
/* 2BB880 */ bool itSeakchain_UnkMotion4_Anim(Item_GObj*);
/* 2BB938 */ int it_802BB938(ItemLink* link, int arg1, f32 arg2);
/* 2BBAEC */ s32 it_802BBAEC(ItemLink* link, s32 arg1, f32 arg2);
/* 2BBB0C */ void it_802BBB0C(ItemLink* link, Vec3* offset,
                              itSeakChain_Attrs* sa, float scale);
/* 2BBC38 */ void it_802BBC38(ItemLink*, Vec3*, itSeakChain_Attrs*, float);
/* 2BBD64 */ enum_t it_802BBD64(ItemLink*, Vec3*, itSeakChain_Attrs*);
/* 2BBED0 */ enum_t it_802BBED0(ItemLink*, Vec3*, itSeakChain_Attrs*);
/* 2BC94C */ bool it_802BC94C(ItemLink*, Vec3*, itSeakChain_Attrs*, float);
/* 2BCA30 */ void it_802BCA30(Item* ip);
/* 2BCE94 */ void it_2725_Logic54_PickedUp(Item_GObj* gobj);
/* 2BCED4 */ void it_802BCED4(Item_GObj* gobj);
/* 2BCF2C */ void it_802BCF2C(Item_GObj* gobj);
/* 2BCF84 */ void it_802BCF84(Item_GObj* gobj);
/* 2BCFC4 */ void it_802BCFC4(Item_GObj* gobj, Vec3* vel);
/* 2BD10C */ void itSeakChain_Logic54_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7438 */ extern ItemStateTable it_803F7438[];
#define GALE01_2B18B0
/* 2B18B0 */ void it_802B18B0(Item_GObj* gobj);
/* 2B19AC */ Item_GObj* it_802B19AC(Fighter_GObj* parent_gobj, Vec3* cur_pos,
                                    Fighter_Part part, ItemKind kind,
                                    float facing_dir);
/* 2B1AAC */ void itSeakNeedleHeld_Logic110_PickedUp(Item_GObj*);
/* 2B1AD4 */ bool itSeakneedleheld_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B1C34 */ void itSeakneedleheld_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B1C38 */ bool itSeakneedleheld_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B1C40 */ void itSeakNeedleHeld_Logic110_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F70A8 */ extern ItemStateTable it_803F70A8[];
#define GALE01_2AFD8C
typedef struct itSeakNeedleThrownAttributes {
    f32 x0;
    f32 x4;
    f32 x8;
} itSeakNeedleThrownAttributes;
/* 2AFD8C */ Item_GObj* it_802AFD8C(Item_GObj*, Vec3*, u32, float);
/* 2AFEA8 */ void it_802AFEA8(Item_GObj* gobj, Fighter_GObj* owner_gobj, u32);
/* 2AFEF8 */ void itSeakNeedleThrown_Logic109_Destroyed(Item_GObj*);
/* 2AFF08 */ void it_802AFF08(Item_GObj*, Fighter_GObj*);
/* 2B00F4 */ void it_802B00F4(Item_GObj*, Fighter_GObj*);
/* 2B0210 */ bool itSeakneedlethrown_UnkMotion0_Anim(Item_GObj* gobj);
/* 2B024C */ bool itSeakneedlethrown_UnkMotion1_Anim(Item_GObj* gobj);
/* 2B033C */ bool itSeakneedlethrown_UnkMotion2_Anim(Item_GObj* gobj);
/* 2B0444 */ bool itSeakneedlethrown_UnkMotion3_Anim(Item_GObj* gobj);
/* 2B0464 */ bool itSeakneedlethrown_UnkMotion4_Anim(Item_GObj* gobj);
/* 2B0544 */ void itSeakneedlethrown_UnkMotion0_Phys(Item_GObj* gobj);
/* 2B0548 */ void itSeakneedlethrown_UnkMotion1_Phys(Item_GObj* gobj);
/* 2B057C */ void itSeakneedlethrown_UnkMotion2_Phys(Item_GObj* gobj);
/* 2B0580 */ void itSeakneedlethrown_UnkMotion3_Phys(Item_GObj*);
/* 2B0598 */ void itSeakneedlethrown_UnkMotion4_Phys(Item_GObj* gobj);
/* 2B05CC */ bool itSeakneedlethrown_UnkMotion0_Coll(Item_GObj* gobj);
/* 2B0900 */ bool itSeakneedlethrown_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B0AB8 */ bool itSeakneedlethrown_UnkMotion2_Coll(Item_GObj* gobj);
/* 2B0C5C */ bool itSeakneedlethrown_UnkMotion3_Coll(Item_GObj* gobj);
/* 2B0C64 */ bool itSeakneedlethrown_UnkMotion4_Coll(Item_GObj* gobj);
/* 2B0D84 */ bool it_2725_Logic109_DmgDealt(Item_GObj*);
/* 2B0F34 */ bool it_2725_Logic109_Clanked(Item_GObj*);
/* 2B10E4 */ bool it_2725_Logic109_DmgReceived(Item_GObj*);
/* 2B1294 */ bool it_2725_Logic109_Reflected(Item_GObj*);
/* 2B14DC */ bool it_2725_Logic109_ShieldBounced(Item_GObj*);
/* 2B16E4 */ bool it_2725_Logic109_HitShield(Item_GObj*);
/* 2B1890 */ void itSeakNeedleThrown_Logic109_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6F50 */ extern ItemStateTable it_803F6F50[];
#define GALE01_2B1C60
/* 2B1C60 */ Item_GObj* it_802B1C60(HSD_GObj* parent, Vec3* pos, f32 dir);
/* 2B1D38 */ bool itSeakVanish_Logic42_DmgDealt(Item_GObj*);
/* 2B1D40 */ void it_802B1D40(Item_GObj*, HSD_GObj*);
/* 2B1DAC */ bool itSeakvanish_UnkMotion0_Anim(Item_GObj*);
/* 2B1DCC */ void it_802B1DCC(Item_GObj*, HSD_GObj*);
/* 3F70B8 */ extern ItemStateTable it_803F70B8[];
#define GALE01_2CD44C
/* 2CD44C */ void it_802CD44C(Item_GObj*);
/* 2CD4D8 */ void it_802CD4D8(Item_GObj*);
/* 2CD4DC */ void it_802CD4DC(Item_GObj*, Item_GObj*);
/* 2CD4FC */ void it_802CD4FC(Item_GObj*);
/* 2CD7B8 */ bool itSonans_Logic9_DmgDealt(Item_GObj*);
/* 2CD7D4 */ bool it_802CD7D4(Item_GObj*);
/* 2CD8E4 */ bool itSonans_UnkMotion0_Anim(Item_GObj* gobj);
/* 2CD954 */ void itSonans_UnkMotion0_Phys(Item_GObj* gobj);
/* 2CD974 */ bool itSonans_UnkMotion0_Coll(Item_GObj* gobj);
/* 2CD9C0 */ void it_802CD9C0(Item_GObj* gobj);
/* 2CDA0C */ bool itSonans_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CDA3C */ void itSonans_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CDA5C */ bool itSonans_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CDAA8 */ void it_802CDAA8(Item_GObj*);
/* 2CDB0C */ bool itSonans_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CDB30 */ void itSonans_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CDBB8 */ bool itSonans_UnkMotion2_Coll(Item_GObj* gobj);
/* 3F7CA0 */ extern ItemStateTable it_803F7CA0[];
#define GALE01_295C48
/* 295C48 */ void itSpyCloak_Logic33_Spawned(Item_GObj*);
/* 295D90 */ void itSpyCloak_Logic33_PickedUp(Item_GObj*);
/* 295DC0 */ void itSpyCloak_Logic33_Dropped(Item_GObj*);
/* 295E4C */ void itSpyCloak_Logic33_EnteredAir(Item_GObj*);
/* 295EB4 */ void itSpyCloak_Logic33_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6370 */ extern ItemStateTable it_803F6370[];
#define GALE01_291BE0
/* 291BE0 */ HSD_GObj* it_80291BE0(Vec3*);
/* 291C98 */ void itSScope_Logic21_Spawned(Item_GObj*);
/* 291CCC */ void it_80291CCC(Item_GObj* gobj, Vec3* pos);
/* 291CF4 */ s32 it_80291CF4(Item_GObj*, s32);
/* 291D38 */ s32 it_80291D38(Item_GObj*, s32);
/* 291DAC */ int it_80291DAC(Item_GObj*, int);
/* 291F14 */ void it_80291F14(Item_GObj*, int);
/* 291FA8 */ void it_80291FA8(Item_GObj*, Vec3*, int, float);
/* 292030 */ void it_80292030(Item_GObj* gobj);
/* 292080 */ bool itSscope_UnkMotion0_Anim(Item_GObj* gobj);
/* 292088 */ void itSscope_UnkMotion0_Phys(Item_GObj* gobj);
/* 29208C */ bool itSscope_UnkMotion0_Coll(Item_GObj* gobj);
/* 2920B8 */ void it_802920B8(Item_GObj* gobj);
/* 2920E0 */ bool itSscope_UnkMotion3_Anim(Item_GObj* gobj);
/* 2920E8 */ void itSscope_UnkMotion1_Phys(Item_GObj* gobj);
/* 292118 */ bool itSscope_UnkMotion3_Coll(Item_GObj* gobj);
/* 29215C */ void itSScope_Logic21_PickedUp(Item_GObj*);
/* 292184 */ bool itSscope_UnkMotion2_Anim(Item_GObj* gobj);
/* 29218C */ void itSscope_UnkMotion2_Phys(Item_GObj* gobj);
/* 292190 */ void itSScope_Logic21_Dropped(Item_GObj*);
/* 2921B8 */ void itSScope_Logic21_Thrown(Item_GObj*);
/* 2921E0 */ void itSscope_UnkMotion3_Phys(Item_GObj* gobj);
/* 29222C */ bool itSScope_Logic21_DmgDealt(Item_GObj*);
/* 292250 */ bool itSScope_Logic21_Clanked(Item_GObj*);
/* 292274 */ bool itSScope_Logic21_HitShield(Item_GObj*);
/* 292298 */ bool itSScope_Logic21_Reflected(Item_GObj*);
/* 2922B8 */ bool itSScope_Logic21_ShieldBounced(Item_GObj*);
/* 2922D8 */ void itSScope_Logic21_EnteredAir(Item_GObj*);
/* 292300 */ bool itSscope_UnkMotion4_Anim(Item_GObj* gobj);
/* 292308 */ void itSscope_UnkMotion4_Phys(Item_GObj* gobj);
/* 29230C */ bool itSscope_UnkMotion4_Coll(Item_GObj* gobj);
/* 292340 */ void itSScope_Logic21_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5F40 */ extern ItemStateTable it_803F5F40[];
#define GALE01_298DEC
/* 298DEC */ void it_80298DEC(Fighter_GObj*, Vec*, int, float);
/* 298ED0 */ void it_80298ED0(Item_GObj*, Fighter_GObj*);
/* 2990CC */ bool itSscopebeam_UnkMotion9_Anim(Item_GObj* gobj);
/* 299148 */ void itSscopebeam_UnkMotion9_Phys(Item_GObj* gobj);
/* 29914C */ bool itSscopebeam_UnkMotion9_Coll(Item_GObj* gobj);
/* 299360 */ bool itSScopeBeam_Logic38_DmgDealt(Item_GObj*);
/* 299368 */ bool itSScopeBeam_Logic38_Clanked(Item_GObj*);
/* 299370 */ bool itSScopeBeam_Logic38_HitShield(Item_GObj*);
/* 299378 */ bool itSScopeBeam_Logic38_Absorbed(Item_GObj*);
/* 299380 */ bool itSScopeBeam_Logic38_ShieldBounced(Item_GObj*);
/* 2993A0 */ bool itSScopeBeam_Logic38_Reflected(Item_GObj*);
/* 2993C0 */ void itSScopeBeam_Logic38_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6568 */ extern ItemStateTable it_803F6568[];
#define GALE01_284644
/* 284644 */ void itStar_Logic10_Spawned(Item_GObj*);
/* 2846D4 */ void it_802846D4(Item_GObj*);
/* 2846FC */ bool itStar_UnkMotion0_Anim(Item_GObj*);
/* 284704 */ void itStar_UnkMotion0_Phys(Item_GObj*);
/* 284734 */ bool itStar_UnkMotion0_Coll(Item_GObj*);
/* 28482C */ bool itStar_Logic10_DmgDealt(Item_GObj*);
/* 284834 */ void itStar_Logic10_EvtUnk(Item_GObj*, HSD_GObj* ref);
/* 3F57A0 */ extern ItemStateTable it_803F57A0[];
#define GALE01_292360
/* 292360 */ void itStarRod_Logic22_Spawned(Item_GObj*);
/* 292394 */ void it_80292394(Item_GObj*, Vec*);
/* 2923BC */ void it_802923BC(Item_GObj*, Vec*, float, int);
/* 2923F8 */ void it_802923F8(Item_GObj*);
/* 292450 */ bool itStarrod_UnkMotion0_Anim(Item_GObj* gobj);
/* 292458 */ void itStarrod_UnkMotion0_Phys(Item_GObj* gobj);
/* 29245C */ bool itStarrod_UnkMotion0_Coll(Item_GObj* gobj);
/* 292488 */ void it_80292488(Item_GObj*);
/* 2924B0 */ bool itStarrod_UnkMotion4_Anim(Item_GObj* gobj);
/* 2924B8 */ void itStarrod_UnkMotion1_Phys(Item_GObj* gobj);
/* 2924E8 */ bool itStarrod_UnkMotion1_Coll(Item_GObj* gobj);
/* 292514 */ void itStarRod_Logic22_PickedUp(Item_GObj*);
/* 29253C */ bool itStarrod_UnkMotion2_Anim(Item_GObj* gobj);
/* 292544 */ void itStarrod_UnkMotion2_Phys(Item_GObj* gobj);
/* 292548 */ void itStarRod_Logic22_Dropped(Item_GObj*);
/* 292570 */ bool itStarrod_UnkMotion4_Coll(Item_GObj* gobj);
/* 2925B4 */ void itStarRod_Logic22_Thrown(Item_GObj*);
/* 2925DC */ void itStarrod_UnkMotion4_Phys(Item_GObj* gobj);
/* 292628 */ bool itStarrod_UnkMotion3_Coll(Item_GObj* gobj);
/* 29266C */ bool itStarRod_Logic22_DmgDealt(Item_GObj*);
/* 2926A8 */ void itStarRod_Logic22_EnteredAir(Item_GObj*);
/* 2926D0 */ bool itStarrod_UnkMotion5_Anim(Item_GObj* gobj);
/* 2926D8 */ void itStarrod_UnkMotion5_Phys(Item_GObj* gobj);
/* 2926DC */ bool itStarrod_UnkMotion5_Coll(Item_GObj* gobj);
/* 292710 */ bool itStarRod_Logic22_Clanked(Item_GObj*);
/* 29274C */ bool itStarRod_Logic22_Reflected(Item_GObj*);
/* 29276C */ bool itStarRod_Logic22_HitShield(Item_GObj*);
/* 2927A8 */ bool itStarRod_Logic22_ShieldBounced(Item_GObj*);
/* 2927C8 */ void itStarRod_Logic22_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5F90 */ extern ItemStateTable it_803F5F90[];
#define GALE01_2988E4
/* 2988E4 */ void it_802988E4(Fighter_GObj*, Vec*, int, float);
/* 2989C8 */ void it_802989C8(Item_GObj*, Fighter_GObj*);
/* 298ACC */ bool itStarrodstar_UnkMotion0_Anim(Item_GObj* gobj);
/* 298BAC */ void itStarrodstar_UnkMotion0_Phys(Item_GObj* gobj);
/* 298BB0 */ bool itStarrodstar_UnkMotion0_Coll(Item_GObj* gobj);
/* 298BE4 */ bool itStarRodStar_Logic36_DmgDealt(Item_GObj*);
/* 298BEC */ bool itStarRodStar_Logic36_Clanked(Item_GObj*);
/* 298BF4 */ bool itStarRodStar_Logic36_HitShield(Item_GObj*);
/* 298BFC */ bool itStarRodStar_Logic36_Absorbed(Item_GObj*);
/* 298C04 */ bool itStarRodStar_Logic36_Reflected(Item_GObj*);
/* 298CE8 */ bool itStarRodStar_Logic36_ShieldBounced(Item_GObj*);
/* 298DCC */ void itStarRodStar_Logic36_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F6530 */ extern ItemStateTable it_803F6530[];
#define GALE01_2CFC48
void itSuikun_Logic14_Spawned(Item_GObj*);
void it_802CFCB4(Item_GObj*);
void it_802CFCB8(Item_GObj*, Item_GObj*);
void it_802CFCD8(Item_GObj*);
void it_802CFD3C(Item_GObj*);
bool itSuikun_UnkMotion0_Anim(Item_GObj*);
void itSuikun_UnkMotion0_Phys(Item_GObj*);
bool itSuikun_UnkMotion0_Coll(Item_GObj*);
void it_802CFF30(Item_GObj*);
void it_802CFFAC(Item_GObj*);
bool itSuikun_UnkMotion1_Anim(Item_GObj*);
void itSuikun_UnkMotion1_Phys(Item_GObj*);
bool itSuikun_UnkMotion1_Coll(Item_GObj*);
extern ItemStateTable it_803F7E08[];
#define GALE01_284D54
/* 284D54 */ Item_GObj* itSword_Spawn(Vec3* pos);
/* 284E10 */ void it_80284E10(HSD_GObj*, intptr_t);
/* 284FC4 */ void it_80284FC4(Item_GObj* gobj, int, float);
/* 285024 */ void it_80285024(Item_GObj* gobj, int);
/* 2852B8 */ void it_802852B8(Item_GObj* gobj, float*, float*);
/* 285300 */ itSword_UnkBytes* it_80285300(Item_GObj* gobj);
/* 285314 */ HSD_JObj* it_80285314(Item_GObj* gobj);
/* 285338 */ void itSword_Logic12_Spawned(Item_GObj* gobj);
/* 285804 */ void itSword_Logic12_PickedUp(Item_GObj* gobj);
/* 285B00 */ void itSword_Logic12_Dropped(Item_GObj* gobj);
/* 285C78 */ void itSword_Logic12_Thrown(Item_GObj* gobj);
/* 285DF0 */ void itSword_Logic12_EnteredAir(Item_GObj* gobj);
/* 285FAC */ bool itSword_Logic12_DmgDealt(Item_GObj* gobj);
/* 285FE0 */ bool itSword_Logic12_Reflected(Item_GObj* gobj);
/* 286000 */ bool itSword_Logic12_Clanked(Item_GObj* gobj);
/* 286024 */ bool itSword_Logic12_HitShield(Item_GObj* gobj);
/* 286048 */ bool itSword_Logic12_ShieldBounced(Item_GObj* gobj);
/* 286068 */ void itSword_Logic12_EvtUnk(Item_GObj* gobj, HSD_GObj* ref_gobj);
/* 3F5800 */ extern ItemStateTable it_803F5800[];
#define GALE01_287458
/* 287458 */ void it_3F14_Logic2_Spawned(Item_GObj*);
/* 2874F0 */ void it_802874F0(Item_GObj* gobj);
/* 287690 */ void it_80287690(Item_GObj* gobj);
/* 287B28 */ bool itTaru_UnkMotion0_Anim(Item_GObj* gobj);
/* 287B68 */ void itTaru_UnkMotion0_Phys(Item_GObj* gobj);
/* 287B6C */ bool itTaru_UnkMotion0_Coll(Item_GObj* gobj);
/* 287D0C */ void it_80287D0C(Item_GObj*);
/* 287D48 */ bool itTaru_UnkMotion1_Anim(Item_GObj* gobj);
/* 287D50 */ void itTaru_UnkMotion1_Phys(Item_GObj* gobj);
/* 287D80 */ bool itTaru_UnkMotion1_Coll(Item_GObj* gobj);
/* 287E68 */ void itTaru_Logic2_PickedUp(Item_GObj*);
/* 287E9C */ bool itTaru_UnkMotion2_Anim(Item_GObj* gobj);
/* 287EA4 */ void itTaru_UnkMotion2_Phys(Item_GObj* gobj);
/* 287EA8 */ void itTaru_Logic2_Dropped(Item_GObj*);
/* 287EC8 */ void itTaru_Logic2_Thrown(Item_GObj*);
/* 287F20 */ void it_80287F20(Item_GObj* gobj);
/* 287F5C */ bool itTaru_UnkMotion3_Anim(Item_GObj* gobj);
/* 287FE4 */ void itTaru_UnkMotion3_Phys(Item_GObj* gobj);
/* 288030 */ bool itTaru_UnkMotion3_Coll(Item_GObj* gobj);
/* 288194 */ void it_80288194(Item_GObj* gobj);
/* 2881B4 */ void it_802881B4(Item_GObj* gobj);
/* 2881FC */ void it_802881FC(Item_GObj* gobj);
/* 28824C */ bool itTaru_UnkMotion5_Anim(Item_GObj* gobj);
/* 288308 */ void itTaru_UnkMotion5_Phys(Item_GObj* gobj);
/* 28833C */ bool itTaru_UnkMotion5_Coll(Item_GObj* gobj);
/* 288454 */ bool itTaru_UnkMotion4_Anim(Item_GObj* gobj);
/* 2884DC */ void itTaru_UnkMotion4_Phys(Item_GObj* gobj);
/* 2885A8 */ bool itTaru_UnkMotion4_Coll(Item_GObj* gobj);
/* 2885C8 */ void it_802885C8(Item_GObj*);
/* 288698 */ bool itTaru_UnkMotion6_Anim(Item_GObj* gobj);
/* 2886B8 */ void itTaru_UnkMotion6_Phys(Item_GObj* gobj);
/* 2886BC */ bool itTaru_UnkMotion6_Coll(Item_GObj* gobj);
/* 2886C4 */ void it_802886C4(Item_GObj* gobj);
/* 2887E0 */ bool itTaru_UnkMotion7_Anim(Item_GObj* gobj);
/* 28880C */ void itTaru_UnkMotion7_Phys(Item_GObj* gobj);
/* 288810 */ bool itTaru_UnkMotion7_Coll(Item_GObj* gobj);
/* 288818 */ bool it_3F14_Logic2_DmgDealt(Item_GObj*);
/* 2888B8 */ bool it_3F14_Logic2_Clanked(Item_GObj*);
/* 288958 */ bool it_3F14_Logic2_HitShield(Item_GObj*);
/* 2889F8 */ bool it_3F14_Logic2_Reflected(Item_GObj*);
/* 288A98 */ bool it_3F14_Logic2_DmgReceived(Item_GObj*);
/* 288C68 */ void itTaru_Logic2_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F58E0 */ extern ItemStateTable it_803F58E0[];
#define GALE01_295ED4
/* 295ED4 */ void it_80295ED4(Item_GObj* gobj);
/* 295F38 */ void it_80295F38(Item_GObj* gobj);
/* 2960B8 */ int it_802960B8(Item_GObj* gobj);
/* 2960CC */ int it_802960CC(Item_GObj* gobj);
/* 2960E0 */ void it_3F14_Logic5_Destroyed(Item_GObj* gobj);
/* 296120 */ void it_3F14_Logic5_Spawned(Item_GObj*);
/* 2961E8 */ bool it_802961E8(Item_GObj* gobj);
/* 2962E0 */ void it_802962E0(Item_GObj* gobj);
/* 2964A4 */ bool itTarucann_UnkMotion0_Anim(Item_GObj* gobj);
/* 2964F8 */ void itTarucann_UnkMotion0_Phys(Item_GObj* gobj);
/* 2964FC */ bool itTarucann_UnkMotion0_Coll(Item_GObj* gobj);
/* 296694 */ void it_80296694(Item_GObj*);
/* 2966D0 */ bool itTarucann_UnkMotion1_Anim(Item_GObj* gobj);
/* 296724 */ void itTarucann_UnkMotion1_Phys(Item_GObj* gobj);
/* 296754 */ bool itTarucann_UnkMotion1_Coll(Item_GObj* gobj);
/* 29683C */ void itTaruCann_Logic5_PickedUp(Item_GObj*);
/* 296898 */ bool itTarucann_UnkMotion2_Anim(Item_GObj* gobj);
/* 2968D4 */ void itTarucann_UnkMotion2_Phys(Item_GObj* gobj);
/* 2968D8 */ void it_3F14_Logic5_Dropped(Item_GObj*);
/* 296930 */ void it_3F14_Logic5_Thrown(Item_GObj*);
/* 2969D8 */ void it_802969D8(Item_GObj* gobj);
/* 296A70 */ bool itTarucann_UnkMotion6_Anim(Item_GObj* gobj);
/* 296AC4 */ void itTarucann_UnkMotion6_Phys(Item_GObj* gobj);
/* 296C48 */ bool itTarucann_UnkMotion6_Coll(Item_GObj* gobj);
/* 296E88 */ void it_80296E88(Item_GObj* gobj);
/* 296EA8 */ void it_80296EA8(Item_GObj* gobj);
/* 296EF0 */ void it_80296EF0(Item_GObj* gobj);
/* 296F94 */ bool itTarucann_UnkMotion8_Anim(Item_GObj* gobj);
/* 296FE8 */ void itTarucann_UnkMotion8_Phys(Item_GObj* gobj);
/* 297154 */ bool itTarucann_UnkMotion8_Coll(Item_GObj* gobj);
/* 297368 */ bool itTarucann_UnkMotion7_Anim(Item_GObj* gobj);
/* 2973BC */ float itTarucann_UnkMotion7_Phys(Item_GObj* gobj);
/* 2975D4 */ bool itTarucann_UnkMotion7_Coll(Item_GObj* gobj);
/* 2975F4 */ void it_802975F4(Item_GObj* gobj);
/* 297674 */ bool itTarucann_UnkMotion9_Anim(Item_GObj* gobj);
/* 297784 */ void itTarucann_UnkMotion9_Phys(Item_GObj* gobj);
/* 297788 */ bool itTarucann_UnkMotion9_Coll(Item_GObj* gobj);
/* 297790 */ bool it_80297790(Item_GObj* gobj);
/* 29789C */ bool itTaruCann_Logic5_DmgDealt(Item_GObj*);
/* 2978A4 */ bool itTaruCann_Logic5_Clanked(Item_GObj*);
/* 2978AC */ bool itTaruCann_Logic5_HitShield(Item_GObj*);
/* 2978B4 */ bool itTaruCann_Logic5_Reflected(Item_GObj*);
/* 2978BC */ void itTaruCann_Logic5_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F63C0 */ extern ItemStateTable it_803F63C0[];
#define GALE01_2CCAB4
/* 2CCAB4 */ void itThunder_Logic7_Spawned(Item_GObj*);
/* 2CCB10 */ void it_802CCB10(Item_GObj*);
/* 2CCB14 */ void it_802CCB14(Item_GObj*, Item_GObj*);
/* 2CCB34 */ bool itThunder_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CCBAC */ void itThunder_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CCBCC */ bool itThunder_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CCBF8 */ void it_802CCBF8(Item_GObj* gobj);
/* 2CCC68 */ void it_802CCC68(HSD_GObj* gobj);
/* 2CCCC4 */ bool itThunder_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CCD9C */ void itThunder_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CCE20 */ bool itThunder_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CCE28 */ void it_802CCE28(Item_GObj*);
/* 2CCE9C */ bool itThunder_UnkMotion0_Anim(Item_GObj* gobj);
/* 2CCEC0 */ void itThunder_UnkMotion0_Phys(Item_GObj* gobj);
/* 2CCF74 */ bool itThunder_UnkMotion0_Coll(Item_GObj* gobj);
/* 3F7C40 */ extern ItemStateTable it_803F7C40[];
#define GALE01_2EB5C8
/* 2EB5C8 */ void it_802EB5C8(Item_GObj*);
/* 2EB684 */ bool itTincle_Logic13_DmgReceived(Item_GObj*);
/* 2EB6A8 */ bool itTincle_Logic13_DmgDealt(Item_GObj*);
/* 2EB6DC */ void it_802EB6DC(Item_GObj*);
/* 2EB808 */ bool itTincle_UnkMotion0_Anim(Item_GObj* gobj);
/* 2EB810 */ void itTincle_UnkMotion0_Phys(Item_GObj* gobj);
/* 2EB84C */ bool itTincle_UnkMotion0_Coll(Item_GObj* gobj);
/* 2EB870 */ void it_802EB870(Item_GObj*);
/* 2EB994 */ bool itTincle_UnkMotion1_Anim(Item_GObj* gobj);
/* 2EB99C */ void itTincle_UnkMotion1_Phys(Item_GObj* gobj);
/* 2EB9D4 */ bool itTincle_UnkMotion1_Coll(Item_GObj* gobj);
/* 2EBA00 */ void it_802EBA00(Item_GObj*);
/* 2EBAF0 */ bool itTincle_UnkMotion2_Anim(Item_GObj* gobj);
/* 2EBB38 */ void itTincle_UnkMotion2_Phys(Item_GObj* gobj);
/* 2EBCD0 */ bool itTincle_UnkMotion2_Coll(Item_GObj* gobj);
/* 2EBD14 */ void it_802EBD14(Item_GObj*);
/* 2EBDC8 */ bool itTincle_UnkMotion3_Anim(Item_GObj* gobj);
/* 2EBDD0 */ void itTincle_UnkMotion3_Phys(Item_GObj* gobj);
/* 2EBE30 */ bool itTincle_UnkMotion3_Coll(Item_GObj* gobj);
/* 2EBE5C */ void it_802EBE5C(Item_GObj*);
/* 2EBF00 */ bool itTincle_UnkMotion4_Anim(Item_GObj* gobj);
/* 2EBF08 */ void itTincle_UnkMotion4_Phys(Item_GObj* gobj);
/* 2EBF80 */ bool itTincle_UnkMotion4_Coll(Item_GObj* gobj);
/* 2EBFAC */ void it_802EBFAC(Item_GObj*);
/* 2EC0FC */ bool itTincle_UnkMotion5_Anim(Item_GObj* gobj);
/* 2EC104 */ void itTincle_UnkMotion5_Phys(Item_GObj* gobj);
/* 2EC168 */ bool itTincle_UnkMotion5_Coll(Item_GObj* gobj);
/* 2EC18C */ void it_802EC18C(Item_GObj* gobj);
/* 2EC1F4 */ void it_802EC1F4(Item_GObj* gobj);
/* 2EC25C */ bool itTincle_UnkMotion7_Anim(Item_GObj* gobj);
/* 2EC2E4 */ void itTincle_UnkMotion7_Phys(Item_GObj* gobj);
/* 2EC2E8 */ bool itTincle_UnkMotion7_Coll(Item_GObj* gobj);
/* 2EC35C */ void it_802EC35C(Item_GObj*);
/* 2EC390 */ bool itTincle_UnkMotion8_Anim(Item_GObj* gobj);
/* 2EC398 */ void itTincle_UnkMotion8_Phys(Item_GObj* gobj);
/* 2EC3C8 */ bool itTincle_UnkMotion8_Coll(Item_GObj* gobj);
/* 2EC3F4 */ void it_802EC3F4(Item_GObj*);
/* 2EC460 */ bool itTincle_UnkMotion9_Anim(Item_GObj* gobj);
/* 2EC4A0 */ void itTincle_UnkMotion9_Phys(Item_GObj* gobj);
/* 2EC4A4 */ bool itTincle_UnkMotion9_Coll(Item_GObj* gobj);
/* 2EC4D0 */ void it_802EC4D0(Item_GObj*);
/* 2EC55C */ bool itTincle_UnkMotion10_Anim(Item_GObj* gobj);
/* 2EC5D4 */ void itTincle_UnkMotion10_Phys(Item_GObj* gobj);
/* 2EC5D8 */ bool itTincle_UnkMotion10_Coll(Item_GObj* gobj);
/* 2EC604 */ void it_802EC604(HSD_GObj* gobj);
/* 2EC62C */ bool itTincle_UnkMotion11_Anim(Item_GObj* gobj);
/* 2EC66C */ void itTincle_UnkMotion11_Phys(Item_GObj* gobj);
/* 2EC670 */ bool itTincle_UnkMotion11_Coll(Item_GObj* gobj);
/* 2EC69C */ void it_802EC69C(Item_GObj* gobj);
/* 2EC7A0 */ bool itTincle_UnkMotion12_Anim(Item_GObj* gobj);
/* 2EC7A8 */ void itTincle_UnkMotion12_Phys(Item_GObj* gobj);
/* 2EC80C */ bool itTincle_UnkMotion12_Coll(Item_GObj* gobj);
/* 2EC830 */ void it_802EC830(Item_GObj* gobj);
/* 2EC850 */ void it_802EC850(Item_GObj*, Item_GObj*);
/* 2EC9E8 */ void it_802EC9E8(Item_GObj*);
/* 2ECA70 */ Item_GObj* it_802ECA70(HSD_GObj*);
/* 2ECC8C */ int it_802ECC8C(Item_GObj*);
/* 2ECC98 */ void it_802ECC98(Item_GObj*, float);
/* 2ECCA4 */ void it_802ECCA4(Item_GObj* gobj, s32* kind, Vec3* pos);
extern ItemStateTable it_803F9000[];
#define GALE01_2D36B0
void itTogepy_Logic21_Spawned(Item_GObj*);
void it_802D3728(Item_GObj*);
void itTogepy_Logic21_EvtUnk(Item_GObj*, Item_GObj*);
bool itTogepy_UnkMotion1_Anim(Item_GObj*);
void itTogepy_UnkMotion1_Phys(Item_GObj*);
bool itTogepy_UnkMotion1_Coll(Item_GObj*);
void it_802D3848(Item_GObj*);
bool itTogepy_UnkMotion6_Anim(Item_GObj*);
void itTogepy_UnkMotion6_Phys(Item_GObj*);
bool itTogepy_UnkMotion6_Coll(Item_GObj*);
void it_802D39F8(Item_GObj*);
bool itTogepy_UnkMotion0_Anim(Item_GObj*);
void itTogepy_UnkMotion0_Phys(Item_GObj*);
bool itTogepy_UnkMotion0_Coll(Item_GObj*);
extern ItemStateTable it_803F8058[];
#define GALE01_2841B4
/* 2841B4 */ Item_GObj* it_802841B4(Item_GObj* gobj, Vec3* arg1, s32 arg2);
/* 28428C */ void it_8028428C(Item_GObj* gobj);
/* 2842A4 */ void itTomato_Logic9_Spawned(Item_GObj*);
/* 284324 */ void itTomato_Logic9_Destroyed(Item_GObj*);
/* 2844E4 */ void itTomato_Logic9_PickedUp(Item_GObj*);
/* 28454C */ void itTomato_Logic9_Dropped(Item_GObj*);
/* 2845BC */ void itTomato_Logic9_EnteredAir(Item_GObj*);
/* 284624 */ void itTomato_Logic9_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F5740 */ extern ItemStateTable it_803F5740[];
#define GALE01_2EEFA8
/* 2EEFA8 */ Item_GObj* it_802EEFA8(Vec3*, s32, f32);
/* 2EF074 */ bool itTools_Logic22_DmgDealt(Item_GObj*);
/* 2EF098 */ void it_802EF098(Item_GObj*, s32);
/* 2EF128 */ bool itTools_UnkMotion4_Anim(Item_GObj* gobj);
/* 2EF27C */ void itTools_UnkMotion4_Phys(Item_GObj* gobj);
/* 2EF2BC */ bool itTools_UnkMotion4_Coll(Item_GObj* gobj);
/* 2EF320 */ void it_802EF320(Item_GObj* gobj);
/* 2EF3C4 */ bool itTools_UnkMotion9_Anim(Item_GObj* gobj);
/* 2EF468 */ void itTools_UnkMotion9_Phys(Item_GObj* gobj);
/* 2EF46C */ bool itTools_UnkMotion9_Coll(Item_GObj* gobj);
/* 2EF548 */ void it_802EF548(Item_GObj* gobj);
/* 2EF700 */ bool itTools_Logic22_DmgReceived(Item_GObj*);
/* 2EF724 */ bool it_2725_Logic22_Clanked(Item_GObj*);
/* 2EF7CC */ bool it_2725_Logic22_HitShield(Item_GObj*);
/* 2EF874 */ bool it_2725_Logic22_Absorbed(Item_GObj*);
/* 2EF924 */ bool itTools_Logic22_ShieldBounced(Item_GObj*);
/* 2EF944 */ bool itTools_Logic22_Reflected(Item_GObj*);
/* 2EFA24 */ void it_802EFA24(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F9260[];
#define GALE01_2C8F4C
/* 2C8F4C */ void it_802C8F4C(Item_GObj*);
/* 2C8FC4 */ void it_802C8FC4(Item_GObj*, Item_GObj*);
/* 2C8FE4 */ void it_802C8FE4(Item_GObj* gobj);
/* 2C90E8 */ void it_802C90E8(Item_GObj* gobj);
/* 2C9190 */ bool itTosakinto_UnkMotion2_Anim(Item_GObj* gobj);
/* 2C9204 */ void itTosakinto_UnkMotion2_Phys(Item_GObj* gobj);
/* 2C9240 */ bool itTosakinto_UnkMotion2_Coll(Item_GObj* gobj);
/* 2C93BC */ void it_802C93BC(Item_GObj* gobj);
/* 2C93FC */ bool itTosakinto_UnkMotion4_Anim(Item_GObj* gobj);
/* 2C9420 */ void itTosakinto_UnkMotion4_Phys(Item_GObj* gobj);
/* 2C9440 */ bool itTosakinto_UnkMotion4_Coll(Item_GObj* gobj);
/* 2C9468 */ void it_802C9468(Item_GObj* gobj);
/* 2C94A8 */ void itTosakinto_UnkMotion3_Phys(Item_GObj* gobj);
/* 2C94D8 */ bool itTosakinto_UnkMotion3_Coll(Item_GObj* gobj);
/* 2C9504 */ void itTosakinto_Logic0_Destroyed(Item_GObj* gobj);
/* 3F7A48 */ extern ItemStateTable it_803F7A48[];
/// @file
/// Unown, the Pokemon.
#define GALE01_2CE710
/* 2CE710 */ void it_802CE710(Item_GObj*);
/* 2CE7CC */ void it_802CE7CC(Item_GObj*);
/* 2CE7D0 */ void it_802CE7D0(Item_GObj*, Item_GObj*);
/* 2CE7F0 */ bool itUnknown_UnkMotion0_Anim(Item_GObj* gobj);
/* 2CE870 */ void itUnknown_UnkMotion0_Phys(Item_GObj* gobj);
/* 2CE8C8 */ bool itUnknown_UnkMotion0_Coll(Item_GObj* gobj);
/* 2CE8D0 */ void it_802CE8D0(Item_GObj*);
/* 2CEB9C */ bool itUnknown_UnkMotion1_Anim(Item_GObj* gobj);
/* 2CEC18 */ void itUnknown_UnkMotion1_Phys(Item_GObj* gobj);
/* 2CEC1C */ bool itUnknown_UnkMotion1_Coll(Item_GObj* gobj);
/* 2CEC24 */ void it_802CEC24(Item_GObj*);
/* 2CEC88 */ bool itUnknown_UnkMotion2_Anim(Item_GObj* gobj);
/* 2CECAC */ void itUnknown_UnkMotion2_Phys(Item_GObj* gobj);
/* 2CED2C */ bool itUnknown_UnkMotion2_Coll(Item_GObj* gobj);
/* 2CED54 */ void it_802CED54(Item_GObj* gobj);
/* 2CEEC8 */ void it_2725_Logic38_Spawned(Item_GObj*);
/* 2CF0B4 */ void itUnknown_Logic38_EvtUnk(Item_GObj*, Item_GObj*);
/* 2CF0D4 */ void it_802CF0D4(Item_GObj* gobj);
/* 2CF120 */ bool it_802CF120(Item_GObj* gobj);
/* 2CF154 */ void it_802CF154(Item_GObj* gobj);
/* 2CF3D8 */ bool it_802CF3D8(Item_GObj* gobj);
/* 3F7D60 */ extern ItemStateTable it_803F7D60[];
#define GALE01_2EE200
/* 2EE200 */ Item_GObj* it_802EE200(HSD_GObj* parent, Vec3* pos,
                                    f32 threshold1, f32 threshold2);
/* 2EE374 */ void it_802EE374(Item_GObj* gobj);
/* 2EE434 */ bool itWhispyapple_UnkMotion0_Anim(Item_GObj* gobj);
/* 2EE544 */ void itWhispyapple_UnkMotion0_Phys(Item_GObj* gobj);
/* 2EE5A0 */ bool itWhispyapple_UnkMotion0_Coll(Item_GObj* gobj);
/* 2EE6A0 */ void it_802EE6A0(Item_GObj* gobj);
/* 2EE6DC */ bool itWhispyapple_UnkMotion1_Anim(Item_GObj* gobj);
/* 2EE7CC */ void itWhispyapple_UnkMotion1_Phys(Item_GObj* gobj);
/* 2EE7D0 */ bool itWhispyapple_UnkMotion1_Coll(Item_GObj* gobj);
/* 2EE7FC */ void fn_802EE7FC(HSD_GObj* gobj);
/* 2EE824 */ bool itWhispyapple_UnkMotion5_Anim(Item_GObj* gobj);
/* 2EE914 */ void itWhispyapple_UnkMotion5_Phys(Item_GObj* gobj);
/* 2EE944 */ bool itWhispyapple_UnkMotion5_Coll(Item_GObj* gobj);
/* 2EEA08 */ void it_802EEA08(Item_GObj*);
/* 2EEA64 */ bool itWhispyapple_UnkMotion3_Anim(Item_GObj* gobj);
/* 2EEA6C */ void itWhispyapple_UnkMotion3_Phys(Item_GObj* gobj);
/* 2EEA70 */ void it_802EEA70(Item_GObj*);
/* 2EEB28 */ void it_802EEB28(Item_GObj*);
/* 2EEBB0 */ void itWhispyApple_Logic18_EnteredAir(Item_GObj*);
/* 2EEBD8 */ bool itWhispyapple_UnkMotion6_Anim(Item_GObj* gobj);
/* 2EECC8 */ void itWhispyapple_UnkMotion6_Phys(Item_GObj* gobj);
/* 2EECCC */ bool itWhispyapple_UnkMotion6_Coll(Item_GObj* gobj);
/* 2EED00 */ void it_802EED00(Item_GObj* gobj);
/* 2EEDD4 */ bool itWhispyapple_UnkMotion7_Anim(Item_GObj* gobj);
/* 2EEEC4 */ void itWhispyapple_UnkMotion7_Phys(Item_GObj* gobj);
/* 2EEEC8 */ bool itWhispyapple_UnkMotion7_Coll(Item_GObj*);
/* 2EEED0 */ bool it_802EEED0(Item_GObj*);
/* 2EEED8 */ bool it_802EEED8(Item_GObj*);
/* 2EEF10 */ bool it_802EEF10(Item_GObj*);
/* 2EEF30 */ bool it_802EEF30(Item_GObj*);
/* 2EEF68 */ bool it_802EEF68(Item_GObj*);
/* 2EEF88 */ void it_802EEF88(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F91D0[];
#define GALE01_2E31F8
/* 2E31F8 */ void it_802E31F8(Item_GObj*);
/* 2E324C */ bool itOldottosea_UnkMotion8_Anim(Item_GObj* gobj);
/* 2E32B0 */ void itOldottosea_UnkMotion8_Phys(Item_GObj* gobj);
/* 2E32B4 */ void it_802E32B4(Item_GObj*);
/* 2E3314 */ void it_802E3314(Item_GObj*);
/* 2E3364 */ bool itOldottosea_UnkMotion9_Anim(Item_GObj* gobj);
/* 2E33AC */ void itOldottosea_UnkMotion9_Phys(Item_GObj* gobj);
/* 2E33DC */ bool itOldottosea_UnkMotion9_Coll(Item_GObj* gobj);
/* 2E3400 */ void it_802E3400(Item_GObj*);
/* 2E3470 */ bool itOldottosea_UnkMotion10_Anim(Item_GObj* gobj);
/* 2E34B8 */ void itOldottosea_UnkMotion10_Phys(Item_GObj* gobj);
/* 2E34BC */ bool itOldottosea_UnkMotion10_Coll(Item_GObj* gobj);
/* 2E34DC */ void it_2725_Logic3_Destroyed(Item_GObj* gobj);
/* 2E3528 */ void it_802E3528(Item_GObj*);
/* 2E3588 */ bool itOldottosea_UnkMotion11_Anim(Item_GObj* gobj);
/* 2E3590 */ void itOldottosea_UnkMotion11_Phys(Item_GObj* gobj);
/* 2E35AC */ bool itOldottosea_UnkMotion11_Coll(Item_GObj* gobj);
/* 2E35CC */ bool it_802E35CC(Item_GObj*);
/* 2E3784 */ void it_802E3784(Item_GObj*, Item_GObj*);
/* 2E37A4 */ void it_802E37A4(Item_GObj*);
/* 2E37BC */ void it_802E37BC(Item_GObj*);
/* 2E3884 */ bool it_802E3884(Item_GObj*);
/* 2E398C */ void fn_802E398C(Item_GObj*);
/* 2E39C8 */ bool itWhitebea_UnkMotion0_Anim(Item_GObj* gobj);
/* 2E3A10 */ void itWhitebea_UnkMotion0_Phys(Item_GObj* gobj);
/* 2E3A8C */ bool itWhitebea_UnkMotion0_Coll(Item_GObj* gobj);
/* 2E3AC8 */ void it_802E3AC8(Item_GObj* gobj);
/* 2E3BB8 */ bool itWhitebea_UnkMotion1_Anim(Item_GObj* gobj);
/* 2E3C70 */ void itWhitebea_UnkMotion1_Phys(Item_GObj* gobj);
/* 2E3D38 */ bool itWhitebea_UnkMotion1_Coll(Item_GObj* gobj);
/* 2E3DA0 */ void it_802E3DA0(Item_GObj*);
/* 2E3E5C */ bool itWhitebea_UnkMotion3_Anim(Item_GObj* gobj);
/* 2E3E64 */ void itWhitebea_UnkMotion3_Phys(Item_GObj* gobj);
/* 2E3E94 */ bool itWhitebea_UnkMotion3_Coll(Item_GObj* gobj);
/* 2E3ED0 */ void it_802E3ED0(Item_GObj*);
/* 2E3FAC */ bool itWhitebea_UnkMotion4_Anim(Item_GObj* gobj);
/* 2E4018 */ void itWhitebea_UnkMotion4_Phys(Item_GObj* gobj);
/* 2E4040 */ bool itWhitebea_UnkMotion4_Coll(Item_GObj* gobj);
/* 2E40A4 */ void it_802E40A4(Item_GObj*);
/* 2E4190 */ void it_802E4190(Item_GObj* gobj);
/* 2E41D4 */ bool itWhitebea_UnkMotion2_Anim(Item_GObj* gobj);
/* 2E432C */ void itWhitebea_UnkMotion2_Phys(Item_GObj* gobj);
/* 2E4330 */ bool itWhitebea_UnkMotion2_Coll(Item_GObj* gobj);
/* 2E436C */ void it_802E436C(Item_GObj* gobj);
/* 2E43C0 */ bool itWhitebea_UnkMotion5_Anim(Item_GObj* gobj);
/* 2E4424 */ void itWhitebea_UnkMotion5_Phys(Item_GObj* gobj);
/* 2E4428 */ bool itWhitebea_UnkMotion5_Coll(Item_GObj* gobj);
/* 2E4464 */ void it_802E4464(Item_GObj*);
/* 2E44E4 */ bool itWhitebea_UnkMotion6_Anim(Item_GObj* gobj);
/* 2E44EC */ void itWhitebea_UnkMotion6_Phys(Item_GObj* gobj);
/* 2E451C */ bool itWhitebea_UnkMotion6_Coll(Item_GObj* gobj);
/* 2E4558 */ void it_802E4558(Item_GObj*);
/* 2E45D0 */ bool itWhitebea_UnkMotion7_Anim(Item_GObj* gobj);
/* 2E464C */ void itWhitebea_UnkMotion7_Phys(Item_GObj* gobj);
/* 2E4650 */ bool itWhitebea_UnkMotion7_Coll(Item_GObj* gobj);
/* 2E468C */ void itWhiteBea_Logic9_PickedUp(Item_GObj*);
/* 2E46B4 */ bool itWhitebea_UnkMotion8_Anim(Item_GObj* gobj);
/* 2E46FC */ void itWhitebea_UnkMotion8_Phys(Item_GObj* gobj);
/* 2E4700 */ void it_2725_Logic9_Dropped(Item_GObj*);
/* 2E47C0 */ void it_2725_Logic9_Thrown(Item_GObj*);
/* 2E4818 */ bool itWhitebea_UnkMotion9_Anim(Item_GObj* gobj);
/* 2E4860 */ void itWhitebea_UnkMotion9_Phys(Item_GObj* gobj);
/* 2E4890 */ bool itWhitebea_UnkMotion9_Coll(Item_GObj* gobj);
/* 2E48B4 */ void it_802E48B4(Item_GObj*);
/* 2E4914 */ bool itWhitebea_UnkMotion10_Anim(Item_GObj* gobj);
/* 2E495C */ void itWhitebea_UnkMotion10_Phys(Item_GObj* gobj);
/* 2E4960 */ bool itWhitebea_UnkMotion10_Coll(Item_GObj* gobj);
/* 2E4980 */ void it_802E4980(Item_GObj*);
/* 2E49E0 */ bool itWhitebea_UnkMotion11_Anim(Item_GObj* gobj);
/* 2E49E8 */ void itWhitebea_UnkMotion11_Phys(Item_GObj* gobj);
/* 2E4A04 */ bool itWhitebea_UnkMotion11_Coll(Item_GObj* gobj);
/* 2E4A24 */ void it_802E4A24(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F8A88[];
#define GALE01_294364
/* 294364 */ HSD_AnimJoint* it_80294364(Item_GObj*);
/* 294430 */ void it_80294430(Item_GObj*, float, float);
/* 2944AC */ void it_802944AC(Item_GObj*, ftCollisionBox*);
/* 29451C */ void itWStar_Logic29_Spawned(Item_GObj*);
/* 29455C */ void it_8029455C(Item_GObj*);
/* 2945AC */ bool itWstar_UnkMotion0_Anim(Item_GObj* gobj);
/* 2945B4 */ void itWstar_UnkMotion0_Phys(Item_GObj* gobj);
/* 2945F8 */ bool itWstar_UnkMotion0_Coll(Item_GObj* gobj);
/* 294624 */ void it_80294624(Item_GObj* gobj);
/* 29464C */ bool itWstar_UnkMotion1_Anim(Item_GObj* gobj);
/* 294654 */ void itWstar_UnkMotion1_Phys(Item_GObj* gobj);
/* 294684 */ bool itWstar_UnkMotion1_Coll(Item_GObj* gobj);
/* 2946B0 */ void it_802946B0(Item_GObj*);
/* 294728 */ void it_3F14_Logic29_PickedUp(Item_GObj*);
/* 294788 */ bool itWstar_UnkMotion3_Anim(Item_GObj* gobj);
/* 294790 */ void itWStar_Logic29_Dropped(Item_GObj*);
/* 2947CC */ void it_802947CC(Item_GObj* gobj, Vec3* pos);
/* 2949C0 */ bool itWstar_UnkMotion5_Anim(Item_GObj* gobj);
/* 294A1C */ void itWstar_UnkMotion5_Phys(Item_GObj* gobj);
/* 294A20 */ bool itWstar_UnkMotion5_Coll(Item_GObj* gobj);
/* 294A28 */ void itWStar_Logic29_EnteredAir(Item_GObj*);
/* 294A50 */ bool itWstar_UnkMotion4_Anim(Item_GObj* gobj);
/* 294A58 */ void itWstar_UnkMotion4_Phys(Item_GObj* gobj);
/* 294A5C */ bool itWstar_UnkMotion4_Coll(Item_GObj* gobj);
/* 294A90 */ void itWStar_Logic30_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F61B0 */ extern ItemStateTable it_803F61B0[];
#define GALE01_2E6AEC
/* 2E6AEC */ Item_GObj* it_802E6AEC(Ground*, int, int, HSD_JObj*, Vec3*, int,
                                    void (*)(Item_GObj*, Ground*),
                                    void (*)(Item_GObj*, Ground*, Vec3*,
                                             HSD_GObj*, f32),
                                    void (*)(Item_GObj*, Ground*, HSD_GObj*));
/* 2E6F7C */ bool it_2E6A_Logic117_DmgDealt(Item_GObj*);
/* 2E6FC0 */ bool it_2E6A_Logic117_DmgReceived(Item_GObj*);
/* 2E709C */ void it_2E6A_Logic117_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F8C8C */ extern ItemStateTable it_803F8C8C[];
#define GALE01_27CF30
/* 2F2F34 */ void it_802F2F34(HSD_GObj*, itYoshiEggLay_DatAttrs*);
/* 2F3020 */ void it_802F3020(HSD_GObj*);
/* 2F3078 */ bool it_27CF_UnkMotion1_Anim(HSD_GObj*);
/* 2F3120 */ void it_27CF_UnkMotion1_Phys(HSD_GObj*);
/* 2F3150 */ bool it_27CF_UnkMotion1_Coll(HSD_GObj*);
/* 2F317C */ void it_802F317C(HSD_GObj*);
/* 2F31B8 */ bool it_27CF_UnkMotion0_Anim(HSD_GObj*);
/* 2F3260 */ void it_27CF_UnkMotion0_Phys(HSD_GObj*);
/* 2F3264 */ bool it_27CF_UnkMotion0_Coll(HSD_GObj*);
/* 2F3290 */ void it_802F3290(Item_GObj*);
/* 2F32F8 */ bool it_27CF_UnkMotion2_Anim(HSD_GObj*);
/* 2F3330 */ bool it_27CF_Logic114_DmgReceived(Item_GObj*);
/* 2F3374 */ void it_27CF_Logic114_EvtUnk(Item_GObj*, HSD_GObj*);
/* 3F94A0 */ extern ItemStateTable it_803F94A0[];
#define GALE01_2B2890
/* 2B2890 */ void it_802B2890(Item_GObj*);
/* 2B28C8 */ void it_802B28C8(Item_GObj* gobj, Vec3* pos, Vec3* offset,
                              f32 facing_dir, f32 unused);
/* 2B2A10 */ Item_GObj* it_802B2A10(Fighter_GObj*, Vec3*, s32, f32);
/* 2B2AE0 */ void itYoshiEggThrow_Logic43_PickedUp(Item_GObj*);
/* 2B2B08 */ void it_802B2B08(Item_GObj* item_gobj);
/* 2B2B5C */ bool itYoshieggthrow_UnkMotion1_Anim(Item_GObj* gobj);
/* 2B2BA8 */ void itYoshieggthrow_UnkMotion1_Phys(Item_GObj* gobj);
/* 2B2BD8 */ bool itYoshieggthrow_UnkMotion1_Coll(Item_GObj* gobj);
/* 2B2C04 */ bool it_802B2C04(Item_GObj*);
/* 2B2C38 */ void it_802B2C38(HSD_GObj*);
/* 2B2D30 */ bool itYoshieggthrow_UnkMotion2_Anim(Item_GObj* gobj);
/* 2B2D50 */ bool it_2725_Logic43_Clanked(Item_GObj*);
/* 2B2E5C */ bool it_802B2E5C(Item_GObj*);
/* 2B2E7C */ bool it_802B2E7C(Item_GObj*);
/* 2B2F88 */ bool it_802B2F88(Item_GObj*);
/* 2B2FA8 */ void it_802B2FA8(Item_GObj*, Item_GObj*);
/* 3F7118 */ extern ItemStateTable it_803F7118[];
#define GALE01_2B2FC8
/* 2B2FC8 */ Item_GObj* it_802B2FC8(HSD_GObj* parent, Vec3* pos, f32 dir);
/* 2B309C */ bool it_802B309C(Item_GObj*);
/* 2B30C0 */ bool it_802B30C0(Item_GObj*);
/* 2B30E4 */ bool it_802B30E4(Item_GObj*);
/* 2B3108 */ bool it_802B3108(Item_GObj*);
/* 2B312C */ bool it_802B312C(Item_GObj*);
/* 2B314C */ bool it_802B314C(Item_GObj*);
/* 2B322C */ void it_802B322C(Item_GObj*, HSD_GObj*);
/* 2B3294 */ bool itYoshistar_UnkMotion0_Anim(Item_GObj*);
/* 2B32C8 */ void itYoshistar_UnkMotion0_Phys(Item_GObj*);
/* 2B3324 */ bool itYoshistar_UnkMotion0_Coll(Item_GObj*);
/* 2B3348 */ void it_802B3348(Item_GObj*, HSD_GObj*);
/* 3F7158 */ extern ItemStateTable it_803F7158[];
#define GALE01_2F2BFC
/* 2F2BFC */ void it_802F2BFC(Item_GObj* gobj, Fighter_GObj* owner_gobj);
/* 2F2CE0 */ void it_802F2CE0(Item_GObj* gobj, bool clear_destroy_type);
/* 3F9480 */ extern ItemStateTable it_803F9480[];
#define GALE01_2C3AF0
/* 2C3AF0 */ Fighter_GObj* itZeldaDinFire_GetOwner(Item_GObj* gobj);
/* 2C3AFC */ bool it_802C3AFC(Item_GObj* gobj, CollData* cd);
/* 2C3BAC */ Item_GObj* it_802C3BAC(Item_GObj* gobj, Vec3* vec,
                                    float facing_dir, float);
/* 2C3CBC */ void itZeldaDinFire_Logic65_Destroyed(Item_GObj* gobj);
/* 2C3D44 */ void it_802C3D44(Item_GObj* gobj);
/* 2C3D74 */ void it_802C3D74(Item_GObj* gobj);
/* 2C3E94 */ bool itZeldadinfire_UnkMotion0_Anim(Item_GObj* gobj);
/* 2C40A4 */ bool itZeldadinfire_UnkMotion1_Anim(Item_GObj* gobj);
/* 2C4208 */ void itZeldadinfire_UnkMotion0_Phys(Item_GObj* gobj);
/* 2C4364 */ void itZeldadinfire_UnkMotion1_Phys(Item_GObj* gobj);
/* 2C437C */ bool itZeldadinfire_UnkMotion0_Coll(Item_GObj* gobj);
/* 2C443C */ bool itZeldaDinFire_Logic65_Reflected(Item_GObj* gobj);
/* 2C4550 */ bool itZeldaDinFire_Logic65_Clanked(Item_GObj* gobj);
/* 2C4558 */ bool itZeldaDinFire_Logic65_Absorbed(Item_GObj* gobj);
/* 2C4560 */ void itZeldaDinFire_Logic65_EvtUnk(Item_GObj*, Item_GObj* gobj);
/* 3F76F8 */ extern ItemStateTable ItemStateTable_ZeldaDinFire[];
#define GALE01_2C4580
/* 2C4580 */ Item_GObj* it_802C4580(Item_GObj* parent_gobj, HSD_GObj* arg1,
                                    Vec3* pos, f32 facing_dir, f32 scale);
/* 2C4670 */ void itZeldaDinFireExplode_Logic66_Destroyed(Item_GObj*);
/* 2C46C4 */ void it_802C46C4(Item_GObj*, Item*);
/* 2C4820 */ bool itZeldadinfireexplode_UnkMotion0_Anim(Item_GObj*);
/* 2C4980 */ void itZeldadinfireexplode_UnkMotion0_Phys(Item_GObj*);
/* 2C49A0 */ bool itZeldaDinFireExplode_Logic66_Clanked(Item_GObj*);
/* 2C49A8 */ bool itZeldaDinFireExplode_Logic66_Absorbed(Item_GObj*);
/* 2C49B0 */ bool itZeldaDinFireExplode_Logic66_ShieldBounced(Item_GObj*);
/* 2C49B8 */ bool itZeldaDinFireExplode_Logic66_HitShield(Item_GObj*);
/* 2C49C0 */ void itZeldaDinFireExplode_Logic66_EvtUnk(Item_GObj*, Item_GObj*);
/* 3F7740 */ extern ItemStateTable it_803F7740[];
#define GALE01_2DDB38
/* 2DDB38 */ void it_802DDB38(Item_GObj*);
/* 2DDBE8 */ void it_802DDBE8(Item_GObj*);
/* 2DDC8C */ void fn_802DDC8C(Item_GObj*);
/* 2DDD38 */ void it_802DDD38(Item_GObj*);
/* 2DDEB4 */ void it_802DDEB4(Item_GObj*);
/* 2DE040 */ void it_802DE040(Item_GObj*);
/* 2DE0F0 */ void it_802DE0F0(Item_GObj*);
/* 2DE190 */ bool itZrshell_UnkMotion0_Anim(Item_GObj*);
/* 2DE198 */ void itZrshell_UnkMotion0_Phys(Item_GObj*);
/* 2DE1FC */ bool itZrshell_UnkMotion0_Coll(Item_GObj*);
/* 2DE320 */ void it_802DE320(Item_GObj*);
/* 2DE35C */ bool itZrshell_UnkMotion1_Anim(Item_GObj*);
/* 2DE3D8 */ void itZrshell_UnkMotion1_Phys(Item_GObj*);
/* 2DE408 */ bool itZrshell_UnkMotion1_Coll(Item_GObj*);
/* 2DE434 */ void it_2725_Logic11_PickedUp(Item_GObj*);
/* 2DE490 */ bool itZrshell_UnkMotion2_Anim(Item_GObj*);
/* 2DE498 */ void itZrshell_UnkMotion2_Phys(Item_GObj*);
/* 2DE4FC */ void itZGShell_Logic11_Thrown(Item_GObj*);
/* 2DE544 */ bool itZrshell_UnkMotion3_Anim(Item_GObj*);
/* 2DE5EC */ void itZrshell_UnkMotion3_Phys(Item_GObj*);
/* 2DE61C */ bool itZrshell_UnkMotion3_Coll(Item_GObj*);
/* 2DE648 */ void itZGShell_Logic11_Dropped(Item_GObj*);
/* 2DE670 */ bool itZrshell_UnkMotion4_Anim(Item_GObj*);
/* 2DE694 */ void itZrshell_UnkMotion4_Phys(Item_GObj*);
/* 2DE6C4 */ bool itZrshell_UnkMotion4_Coll(Item_GObj*);
/* 2DE6F0 */ void it_802DE6F0(Item_GObj*);
/* 2DE884 */ bool itZrshell_UnkMotion6_Anim(Item_GObj*);
/* 2DEA0C */ void itZrshell_UnkMotion6_Phys(Item_GObj*);
/* 2DEB44 */ bool itZrshell_UnkMotion6_Coll(Item_GObj*);
/* 2DEC80 */ void it_802DEC80(Item_GObj*);
/* 2DEE04 */ bool itZrshell_UnkMotion8_Anim(Item_GObj*);
/* 2DEE98 */ void itZrshell_UnkMotion8_Phys(Item_GObj*);
/* 2DEEC8 */ bool itZrshell_UnkMotion8_Coll(Item_GObj*);
/* 2DEEF4 */ void it_2725_Logic11_EnteredAir(Item_GObj*);
/* 2DEF78 */ bool itZrshell_UnkMotion9_Anim(Item_GObj*);
/* 2DEF80 */ void itZrshell_UnkMotion9_Phys(Item_GObj*);
/* 2DF104 */ bool itZrshell_UnkMotion9_Coll(Item_GObj*);
/* 2DF230 */ void it_802DF230(Item_GObj*);
/* 2DF724 */ bool itZrshell_UnkMotion11_Anim(Item_GObj*);
/* 2DF93C */ void itZrshell_UnkMotion11_Phys(Item_GObj*);
/* 2DF970 */ bool itZrshell_UnkMotion11_Coll(Item_GObj*);
/* 2DF9F8 */ void it_802DF9F8(Item_GObj*);
/* 2DFA68 */ bool itZrshell_UnkMotion10_Anim(Item_GObj*);
/* 2DFB90 */ void itZrshell_UnkMotion10_Phys(Item_GObj*);
/* 2DFBAC */ bool itZrshell_UnkMotion10_Coll(Item_GObj*);
/* 2DFC34 */ bool itZGShell_Logic11_DmgDealt(Item_GObj*);
/* 2DFC58 */ bool itZGShell_Logic11_DmgReceived(Item_GObj*);
/* 2DFC90 */ bool itZGShell_Logic11_Reflected(Item_GObj*);
/* 2DFCB0 */ bool it_2725_Logic11_Clanked(Item_GObj*);
/* 2DFD60 */ bool it_2725_Logic11_HitShield(Item_GObj*);
/* 2DFE40 */ bool itZGShell_Logic11_ShieldBounced(Item_GObj*);
/* 2DFE7C */ bool fn_802DFE7C(Item_GObj* gobj);
/* 2DFED4 */ void it_802DFED4(Item_GObj*, Item_GObj*);
/* 2DFEF4 */ void itZGShell_Logic11_Destroyed(Item_GObj*);
/* 2DFF14 */ void it_802DFF14(Item_GObj*, s32);
/* 2DFFB8 */ void it_802DFFB8(HSD_JObj*, Item*);
/* 2E0100 */ Item_GObj* it_802E0100(s32, Vec3*, s32);
extern ItemStateTable it_803F86C8[];
#define _itzrshell_h_
void it_802E02E8(Item_GObj*);
void itZRShell_Logic12_PickedUp(Item_GObj*);
void itZRShell_Logic12_Thrown(Item_GObj*);
void itZRShell_Logic12_Dropped(Item_GObj*);
void itZRShell_Logic12_EnteredAir(Item_GObj*);
void itZRShell_Logic12_Destroyed(Item_GObj*);
bool itZRShell_Logic12_DmgDealt(Item_GObj*);
bool itZRShell_Logic12_Clanked(Item_GObj* gobj);
bool itZRShell_Logic12_DmgReceived(Item_GObj*);
bool itZRShell_Logic12_Reflected(Item_GObj*);
bool itZRShell_Logic12_HitShield(Item_GObj*);
bool itZRShell_Logic12_ShieldBounced(Item_GObj*);
void it_802E0468(Item_GObj*, HSD_GObj*);
Item_GObj* it_802E0488(s32, Vec3*, s32);
extern ItemStateTable it_803F87F0[];
#define MELEE_LB_INLINES_H
#define GALE01_019880
#define MELEE_LB_CARDNEW_H
typedef enum {
    LbCardResult_Ready,
    LbCardResult_2 = 2,
    LbCardResult_NoFile = 4,
    LbCardResult_NullFilename = 7,
    LbCardResult_Malformed = 9,
    LbCardResult_10,
    LbCardResult_Busy,
    LbCardResult_BadSectorSize,
    LbCardResult_Invalid,
    LbCardResult_FatalError,
    LbCardResult_DeviceError,
    LbCardResult_16,
} lbCardResult;
typedef struct {
    int file_size;
    int file_flags;
    void* data;
} LbCardEntry;
typedef void (*LbCardOnFinishedCallback)(int);
/* 01B6E0 */ s32 lb_8001B6E0(s32 file_idx);
/* 01B6F8 */ enum_t lbCardNew_CompleteNextTask(void);
/* 01B760 */ int lbCardNew_CompleteAllTasks(int result);
/* 01B7E0 */ u32 lb_8001B7E0(int chan, char* filename, void* file_entries,
                             void* save_data, int* status_out);
/* 01B8C8 */ bool lb_8001B8C8(int chan);
/* 01B99C */ int lbCardNew_DeleteSnap(int chan, const char* filename,
                                      M2C_UNK status_out);
/* 01BA44 */ bool lb_8001BA44(int chan, const char* filename,
                              M2C_UNK status_out);
/* 01BB48 */ int lb_8001BB48(int chan, char* filename, void* file_entries,
                             void* save_data, char* comment, void* banner,
                             void* icons, M2C_UNK status_out);
/* 01BC18 */ int lb_8001BC18(int chan, char* filename, void** file_entries,
                             void* save_data, char* comment, void* banner,
                             void* icons, bool* status_out);
/* 01BD34 */ enum_t lb_8001BD34(int chan, const char* filename,
                                M2C_UNK file_entries, M2C_UNK status_out);
/* 01BE30 */ int lb_8001BE30(int chan, const char* filename,
                             M2C_UNK file_entries, char* comment, void* banner,
                             void* icons, M2C_UNK status_out, M2C_UNK callback);
/* 01BF04 */ int lb_8001BF04(int chan, char* filename, void* file_entries,
                             char* comment, void* banner, void* icons,
                             M2C_UNK status_out);
/* 01BFD8 */ int lb_8001BFD8(int chan,
                             lbCardNew_SnapshotEntry* snapshot_entries,
                             int* free_blocks, int* free_files);
/* 01C0F4 */ int lb_8001C0F4(int chan, const char* name_a, const char* name_b,
                             const char* name_c, M2C_UNK status_out);
/* 01C2D8 */ int lb_8001C2D8(int chan, const char* company,
                             const char* game_name, const char* filename);
/* 01C404 */ int lbCardNew_ProbeEx(int chan);
/* 01C4A8 */ int lb_8001C4A8(void* file_entries, void* icon_data);
/* 01C550 */ void lbCardNew_AllocWorkArea(void);
/* 01C5A4 */ void lbCardNew_ForgetMemory(void);
/* 01C5BC */ void lbCardNew_Init(void);
typedef enum {
    LbCardStatus_0,
    LbCardStatus_1,
    LbCardStatus_2,
    LbCardStatus_3,
    LbCardStatus_4,
} LbCardStatus;
/* 01C600 */ void lb_8001C600(void);
/* 01C87C */ u32 lb_8001C87C(void);
/* 01C8BC */ int lb_8001C8BC(void);
/* 01CBAC */ void lbCardGame_SetCardStatus(LbCardStatus status);
/* 01CBBC */ lbCardResult lb_8001CBBC(void);
/* 01CC30 */ void fn_8001CC30(bool);
/* 01CC4C */ int lb_8001CC4C(void);
/* 01CC84 */ void lb_8001CC84(void);
/* 01CDB4 */ void lb_8001CDB4(void);
/* 01CE00 */ void lbCardGame_SaveChanges(void);
/* 01CE78 */ u8 lbCardGame_DecideGameMode(void);
/* 01CF18 */ void lbCardGame_InitScene(void);
/* 01D164 */ void lbCardGame_LoadArchive(int);
/* 01D1F4 */ void lbCardGame_Reset(void);
/* 01D21C */ void lbCardGame_Init(void);
/// @todo Is a macro the best way?
#define SKIP_CMD(cmd, n) do { int i; for (i = 0; i < (n); i++) { ++(cmd)->u; } } while (0);
#define NEXT_CMD(cmd) do { ++(cmd)->u; } while (0);
static inline void lbCardGame_SetupArchive(void)
{
    lbCardNew_AllocWorkArea();
    lbCardGame_LoadArchive(0);
    lbCardGame_SaveChanges();
}
#define GALE01_00CE50
/* 00CF74 */ s32 powi(s32, s32);
/* 00D008 */ float lb_8000D008(float, float);
/* 00D148 */ s32 lb_8000D148(float, float, float, float, float, float, float);
#define GALE01_013C18
bool lb_80014258(Fighter_GObj* gobj, void* arg1, FtCmd2 cmd);
void lb_80014498(ColorOverlay*);
bool lb_800144C8(ColorOverlay*, struct Fighter_804D653C_t*, int, int);
void lb_80014534(void);
void lb_80014574(u8, int, int, int);
void lb_800145C0(u8 slot);
void lb_800145F4(void);
#define GALE01_014638
/* 014638 */ bool lb_80014638(struct lb_80014638_arg0_t*,
                              struct lb_80014638_arg1_t*);
/* 014770 */ bool lb_80014770(Vec3*, int);
/* 0149E0 */ bool lb_800149E0(Mtx, u32);
/* 4D3760 */ extern GXColor lb_ColorWhite;
/* 4D3764 */ extern GXColor lb_ColorBlack;
#define GALE01_0192A8
/* 0192A8 */ void lb_800192A8(Event cb);
#define GALE01_01955C
/* 01955C */ void lb_8001955C(void);
/* 0195D0 */ void lb_800195D0(void);
/* 0195FC */ void fn_800195FC(void);
/* 019628 */ void lb_80019628(void);
/* 019880 */ void lb_80019880(u64);
/* 019894 */ u8 lb_80019894(void);
/* 0198E0 */ void lb_800198E0(void);
/* 019900 */ void lb_80019900(void);
/* 019A30 */ bool lb_80019A30(int);
/* 019A48 */ void lb_80019A48(void);
/* 019AAC */ void lb_80019AAC(Event);
/**
 * @file lb_020A.h
 * @brief Skeletal transform and two-joint IK utilities.
 */
#define GALE01_020AEC
/* 020AEC */ void fn_80020AEC(HSD_JObj*, Mtx);
/* 020E38 */ void lbBgFlash_80020E38(HSD_JObj*, Vec3*, f32, f32, f32);
/* 02113C */ void fn_8002113C(HSD_JObj*, Vec3*, f32);
/* 021410 */ void lbBgFlash_80021410(IKState*);
/**
 * @file lb_0219.h
 * @brief Data-driven animated screen flashes.
 */
#define GALE01_0219E4
/* 0219E4 */ void lbBgFlash_Free(void*);
/* 021A10 */ void lbBgFlash_SetFlashScale(f32);
/* 021A18 */ void lbBgFlash_Init(int);
/* 021B04 */ void lbBgFlash_Proc(HSD_GObj*);
/* 021C1C */ void fn_80021C1C(void);
/* 021C48 */ void lbBgFlash_80021C48(u32, u32);
/* 021C80 */ void fn_80021C80(HSD_GObj* gobj);
#define GALE01_01E560
struct FigaTrack {
    u16 length;
    u16 startframe;
    u8 obj_type;
    u8 frac_value;
    u8 frac_slope;
    u8* ad_head;
};
struct FigaTree {
    int type;
    u32 flags;
    f32 frames;
    s8* nodes;
    FigaTrack* tracks;
};
/* 01E60C */ HSD_FObj* fn_8001E60C(FigaTrack*, s8 frames);
void lbAnim_8001E6D8(HSD_JObj*, FigaTree*, FigaTrack*, s8 frames);
void lbAnim_8001E7E8(HSD_JObj*, FigaTree*, FigaTrack*, s8 frames);
float lbAnim_8001E8F8(FigaTree*);
#define _lbarchive_h_
void lbArchive_InitializeDAT(HSD_Archive* archive, void* data, size_t length);
void lbArchive_LoadSections(HSD_Archive* archive, void* symbols, ...);
HSD_Archive* lbArchive_LoadArchive(const char* filename);
HSD_Archive* lbArchive_LoadSymbols(const char* filename, void* symbols, ...);
HSD_Archive* lbArchive_80016DBC(const char* filename, void* symbols, ...);
void lbArchive_80016EFC(HSD_Archive*);
bool lbArchive_80016F80(HSD_Archive**, const char* filename);
bool lbArchive_80017040(HSD_Archive** dst, const char* filename, void* symbols,
                        ...);
bool lbArchive_800171CC(HSD_Archive** dst, const char* filename, void* symbols,
                        ...);
int lbArchiveRelocate(HSD_Archive*, u8*, size_t file_size, intptr_t base_addr);
#define GALE01_014ABC
typedef void (*lbArqCallback)(void* arg);
void lbArq_80014BD0(unsigned int, void*, size_t, lbArqCallback, void*);
void lbArq_80014D2C(void);
#define GALE01_02305C
/// @todo Create an @c enum for SFX IDs.
#define SFX_NONE -1
enum {
    AUDIO_MODE_UNK0,
    AUDIO_MODE_UNK1,
};
int lbAudioAx_8002305C(int, int);
int lbAudioAx_80023090(int);
int lbAudioAx_800230C8(int, int*, int*);
int lbAudioAx_80023130(int);
int lbAudioAx_80023220(int);
int lbAudioAx_800233EC(int);
int lbAudioAx_80023694(void);
int lbAudioAx_800236B8(int);
int lbAudioAx_800236DC(void);
bool lbAudioAx_80023710(int);
bool lbAudioAx_80023730(void);
int lbAudioAx_800237A8(enum_t sfx_id, int sfx_vol, int sfx_pan);
int lbAudioAx_80023870(int, int, int, int);
void lbAudioAx_8002392C(void);
int lbAudioAx_80023968(int);
int lbAudioAx_80023A44(int, int);
int lbAudioAx_80023B24(int);
int lbAudioAx_80023F28(int);
void lbAudioAx_80024030(int);
int lbAudioAx_800240B4(int);
int lbAudioAx_8002411C(int);
int lbAudioAx_80024184(int, int, int, int);
int lbAudioAx_80024304(int);
int lbAudioAx_8002438C(int);
int lbAudioAx_800243F4(int);
void lbAudioAx_800245D4(int);
int lbAudioAx_800245F4(int);
void lbAudioAx_80024614(int);
void lbAudioAx_80024634(int);
void lbAudioAx_80024B1C(int, int);
void lbAudioAx_80024B58(int, int);
int lbAudioAx_80024B94(int arg0, int arg1);
bool lbAudioAx_80024BD0(void);
bool lbAudioAx_80024C08(enum_t);
void lbAudioAx_80024C84(void);
void lbAudioAx_80024D50(void);
void lbAudioAx_80024D78(int);
void lbAudioAx_80024DC4(int);
void lbAudioAx_80024E50(bool pause);
void lbAudioAx_80024E84(bool);
void lbAudioAx_80024F08(void);
void lbAudioAx_80024F6C(void);
void lbAudioAx_80024FDC(void);
void lbAudioAx_80024FF4(void);
void lbAudioAx_8002500C(int);
void lbAudioAx_80025038(int);
void lbAudioAx_80025064(bool, bool);
void lbAudioAx_80025098(bool debug);
HSD_GObj* lbAudioAx_800263E8(float, HSD_GObj*, int, int, int, int, int, int,
                             int, int, int);
int lbAudioAx_800264E4(HSD_GObj* data);
bool lbAudioAx_80026510(HSD_GObj*);
bool lbAudioAx_800265C4(HSD_GObj*, int sfx);
u64 lbAudioAx_80026E84(CharacterKind);
u64 lbAudioAx_80026EBC(StKind);
void lbAudioAx_80026F2C(u32);
void lbAudioAx_8002702C(u32 flags, u64 mask);
void lbAudioAx_80027168(void);
void lbAudioAx_80027648(void);
void lbAudioAx_8002785C(void);
void lbAudioAx_80027AB0(int);
void lbAudioAx_80027DBC(void);
void lbAudioAx_80027DF8(void);
void lbAudioAx_8002835C(void);
void lbAudioAx_8002838C(void);
void lbAudioAx_80028690(void);
int lbAudioAx_80028B2C(void);
int lbAudioAx_80028B4C(void);
void lbAudioAx_80028B6C(void);
void lbAudioAx_80028B90(void);
/**
 * @file lbbgflash.h
 * @brief Background flash effects for dramatic game events.
 */
#define GALE01_01FC08
/* 01FC08 */ void fn_8001FC08(void);
/* 01FEC4 */ void fn_8001FEC4(HSD_GObj* gobj, intptr_t code);
/* 0204C8 */ void fn_800204C8(void);
/* 0205F0 */ void lbBgFlash_800205F0(s32 duration);
/* 02063C */ void lbBgFlash_8002063C(int count);
/* 020688 */ void lbBgFlash_80020688(int);
/* 0206D4 */ void lbBgFlash_800206D4(GXColor*, GXColor*, int);
/* 02087C */ void lbBgFlash_InitState(GXColor*);
/* 0208B0 */ void fn_800208B0(u8 arg0);
/* 0208EC */ void lbBgFlash_800208EC(int);
/* 0209F4 */ void lbBgFlash_800209F4(void);
#define GALE01_005BB0
struct lbColl_8000A10C_arg0_t;
struct Fighter_x1614_t;
/* 005BB0 */ int lbColl_80005BB0(HitCapsule*, int);
/* 005C44 */ bool lbColl_80005C44(const Vec3*, const Vec3*, const Vec3*, Vec3*,
                                  float, float);
/* 005EBC */ float lbColl_80005EBC(const Vec3*, const Vec3*, const Vec3*,
                                   float*);
/* 005FC0 */ float lbColl_80005FC0(Vec3*, Vec3*, Vec3*, float*);
/* 006094 */ bool lbColl_80006094(Vec3*, Vec3*, Vec3*, Vec3*, Vec3*, Vec3*,
                                  float, float);
/* 0067F8 */ bool lbColl_800067F8(Vec3*, Vec3*, Vec3*, Vec3*, Vec3*, Vec3*,
                                  float, float);
/* 0077A0 */ void lbColl_800077A0(Vec3*, Mtx, Vec3*, Vec3*, Vec3*, Vec3*,
                                  float* angle, float, float);
/* 007AFC */ bool lbColl_80007AFC(HitCapsule*, HitCapsule*, float, float);
/* 007B78 */ bool lbColl_80007B78(struct Fighter_x1614_t*,
                                  struct Fighter_x1614_t*, float, float);
/* 007BCC */ bool lbColl_80007BCC(HitCapsule*, HitResult* shield_hit, M2C_UNK,
                                  s32, float, float, float);
/* 007D68 */ void lbColl_JObjSetupMatrix(HSD_JObj*);
/* 007DD8 */ void lbColl_80007DD8(HitCapsule*, HitResult*, Mtx, Vec3*, float*,
                                  float);
/* 007ECC */ bool lbColl_80007ECC(HitCapsule*, HurtCapsule*, Mtx,
                                  float hit_scl_y, float hurt_scl_y,
                                  float hurt_pos_z);
/* 00805C */ bool lbColl_8000805C(HitCapsule* arg0, HurtCapsule* arg1,
                                  Mtx arg2, s32 arg3, float arg4, float arg5,
                                  float arg6);
/* 008248 */ bool lbColl_80008248(HitCapsule*, HurtCapsule*, Mtx, float, float,
                                  float);
/* 0083C4 */ void lbColl_800083C4(HurtCapsule*);
/* 008428 */ void lbColl_80008428(HitCapsule*);
/* 008434 */ void lbColl_80008434(HitCapsule*);
/* 008440 */ void lbColl_80008440(HitCapsule*);
/* 0084FC */ void lbColl_CopyHitCapsule(HitCapsule* src, HitCapsule* dst);
/* 008688 */ bool lbColl_80008688(HitCapsule*, int type, void* victim);
/* 008820 */ bool lbColl_80008820(HitCapsule*, int type, void* victim);
/* 0089B8 */ void lbColl_800089B8(HitCapsule* hit, M2C_UNK arg1);
/* 008A5C */ void lbColl_80008A5C(HitCapsule* hit);
/* 008D30 */ void lbColl_80008D30(HitCapsule*, lbColl_80008D30_arg1*);
/* 008DA4 */ void lbColl_80008DA4(GXColor* arg0, GXColor* arg1);
/* 008FC8 */ void lbColl_80008FC8(Vec3, Vec3, GXColor*, GXColor*, float);
/* 0096B4 */ void lbColl_800096B4(MtxPtr, Vec3, Vec3, GXColor*, GXColor*,
                                  float);
/* 009DD4 */ void lbColl_80009DD4(Vec3* v0, Vec3* v1, GXColor* clr);
/* 009F54 */ bool lbColl_80009F54(HitCapsule* hit, u32 arg1, float arg8);
/* 00A044 */ bool lbColl_8000A044(HitCapsule* hit, u32 arg1, float arg8);
/* 00A10C */ bool lbColl_8000A10C(struct lbColl_8000A10C_arg0_t*, u32, f32);
/* 00A1A8 */ bool lbColl_8000A1A8(struct Fighter_x1614_t*, int, float scale_y);
/* 00A244 */ bool lbColl_8000A244(HurtCapsule* hurt, u32 arg1, Mtx arg2,
                                  float arg3);
/* 00A460 */ bool lbColl_8000A460(Fighter_x1670_t* hurt, u32 arg1);
/* 00A584 */ bool lbColl_8000A584(HurtCapsule* hurt, u32 arg1, u32 arg2,
                                  MtxPtr arg3, float arg8);
/* 00A78C */ bool lbColl_8000A78C(HitResult* hit, u32 arg1, Mtx arg2,
                                  float pos_z);
/* 00A95C */ bool lbColl_8000A95C(HitResult* hit, u32 arg1, Mtx arg2,
                                  float pos_z);
/* 00AB2C */ bool lbColl_8000AB2C(HitResult* hit, u32 arg1, Mtx arg2,
                                  float pos_z);
/* 00ACFC */ bool lbColl_8000ACFC(void*, HitCapsule*);
static inline bool approximatelyZero(float x)
{
    bool result;
    if ((x < 0.00001f) && (x > -0.00001f)) {
        result = 1;
    } else {
        result = 0;
    }
    return result;
}
static inline bool testPlusX(Vec3* a, Vec3* b, Vec3* c, float offset)
{
    float x = a->x + offset;
    if (x < b->x && x < c->x) {
        return 0;
    }
    return 1;
}
static inline bool testPlus(float a, float b, float c, float offset)
{
    float x = a + offset;
    if (x < b && x < c) {
        return 0;
    }
    return 1;
}
static inline bool testMinusX(Vec3* a, Vec3* b, Vec3* c, float offset)
{
    float x = a->x - offset;
    if (x > b->x && x > c->x) {
        return 0;
    }
    return 1;
}
#define _lbcommands_h_
void Command_00(CommandInfo* info);
void Command_01(CommandInfo* info);
void Command_02(CommandInfo* info);
void Command_03(CommandInfo* info);
void Command_04(CommandInfo* info);
void Command_05(CommandInfo* info);
void Command_14(CommandInfo* info);
void Command_06(CommandInfo* info);
void Command_07(CommandInfo* info);
void Command_08(CommandInfo* info);
void Command_09(CommandInfo* info);
bool Command_Execute(CommandInfo* info, u32 command);
#define GALE01_0174BC
typedef void (*lbDvd_Callback)(int, int index, int, int);
/* 015BD0 */ void* lbDvd_80015BD0(s8, s32);
/* 01634C */ u32 lbDvd_8001634C(s16);
/* 0174BC */ void lbDvd_SetupVsPreloadCache(void);
/* 0174E8 */ void lbDvd_800174E8(int index);
/* 017598 */ bool lbDvd_80017598(int heap);
/* 017700 */ void lbDvd_80017700(int);
/* 017740 */ void* lbDvd_80017740(int type, int entry_num, int transient_heap,
                                  int heap, u32 size, int load_state,
                                  int load_score, u8, int effect_index);
/* 0178E8 */ void lbDvd_800178E8(int, const char* name, int, int, int, int,
                                 int, u8, int);
/* 017960 */ void lbDvd_80017960(void);
/* 017AB0 */ void lbDvd_CachePreloadedFile(s32 index);
/* 017CC4 */ void lbDvd_80017CC4(void);
/* 017E64 */ void lbDvd_80017E64(int, uintptr_t, void*, bool);
/* 017EBC */ void* lbDvd_GetPreloadedArchive(ssize_t entry_num);
/* 01819C */ HSD_Archive* lbDvd_8001819C(const char* basename);
/* 01822C */ PreloadedGameModeState* lbDvd_GetPreloadCacheScene(void);
/* 01823C */ void lbDvd_8001823C(void);
/* 018254 */ void lbDvd_80018254(void);
/* 0187F4 */ int lbDvd_800187F4(int);
/* 018A2C */ int lbDvd_80018A2C(u8);
/* 018C2C */ void lbDvd_80018C2C(u8);
/* 018C6C */ void lbDvd_80018C6C(void);
/* 018CF4 */ void lbDvd_80018CF4(int);
/* 018F58 */ void lbDvd_80018F58(bool value);
/* 018F68 */ void lbDvd_80018F68(void);
/**
 * @file
 * @brief Utilities for reading files from the DVD drive
 *
 * Reads files into the heap synchronously, with optional preload caching.
 *
 * The target file is typically specified by its "base name", which omits the
 * .usd or .dat extension.
 */
#define MELEE_LB_FILE_H
void lbFile_800161C4(int file, uintptr_t src, uintptr_t dest, size_t size,
                     int type, int pri);
/// @returns The proper filename + extension of an extensionless "base name".
char* lbFileGetFullName(const char* basename);
size_t lbFile_8001634C(int fileno);
/// @returns The size in bytes of a specified file
size_t lbFileGetSize(const char* basename);
void lbFile_800164A4(int file, uintptr_t dest, size_t* size, int pri,
                     HSD_DevComCallback callback, uintptr_t args);
void lbFile_80016580(const char* basename, void* dst, size_t* size,
                     HSD_DevComCallback callback, uintptr_t args);
void lbFile_8001668C(const char* basename, void* dst, size_t* size);
/**
 * @brief Same as lbFile_800168A0, but with an implicit heap_id=0 and no
 * preload cache.
 */
void lbFile_80016760(const char* basename, void** dst, size_t* size);
/**
 * @param heap_id The heap ID to use for the allocation (if needed)
 * @param basename Base (extensionless) file name to read
 * @param[out] dst Address of read contents
 * @param[out] size Size of read contents
 * @returns True iff the file was already preloaded, rather than read from
 * disc.
 */
bool lbFile_800168A0(int arg0, const char* basename, void** dst, size_t* size);
#define GALE01_01E2F8
bool lbGx_8001E2F8(Vec4*, Vec3*, U8Vec4*, u32, float);
#define MELEE_LB_HEAP_H
/// @remarks @c LbHeapStatus_Create is named by an assert in #lbHeap_80015CA8.
typedef enum LbHeapStatus {
    /* 0x00 */ LbHeapStatus_Create,
    /* 0x01 */ LbHeapStatus_Destroy,
} LbHeapStatus;
typedef enum LbHeapKind {
    /* 0x00 */ LbHeapKind_Hsd,
    /* 0x01 */ LbHeapKind_ARAM,
    /* 0x02 */ LbHeapKind_Seq,
    /* 0x03 */ LbHeapKind_Stay,
    /* 0x04 */ LbHeapKind_AllM,
    /* 0x05 */ LbHeapKind_AllA,
    /* 0x06 */ LbHeapKind_Count,
} LbHeapKind;
/* 0158D0 */ void lbHeap_800158D0(int, int);
/* 0158E8 */ int lbHeap_800158E8(int);
/* 015900 */ void lbHeap_80015900(void);
/* 015BB8 */ LbHeapStatus lbHeap_80015BB8(int);
/** Returns a RAM pointer for Hsd, an ARAM address for ARAM, or an
 * HSD_AllocEntry pointer for the other heaps.
 */
/* 015BD0 */ void* lbHeap_80015BD0(int heap_id, size_t size);
/// Takes the payload address, not the allocation record.
/* 015CA8 */ void lbHeap_80015CA8(int, void*);
/* 015D6C */ int lbHeap_80015D6C(u32 heap0, void (*cb)(u32), u32 heap1);
/* 015DF8 */ void lbHeap_80015DF8(void);
/* 015F3C */ void lbHeap_80015F3C(void);
#define _lblanguage_h_
typedef enum {
    LANG_JP,
    LANG_US,
    LANG_COUNT,
} LbLanguage;
enum_t lbLang_GetLanguageSetting(void);
enum_t lbLang_SetLanguageSetting(enum_t language);
bool lbLang_IsSettingJP(void);
bool lbLang_IsSettingUS(void);
enum_t lbLang_GetSavedLanguage(void);
void lbLang_SetSavedLanguage(enum_t language);
bool lbLang_IsSavedLanguageJP(void);
bool lbLang_IsSavedLanguageUS(void);
#define MELEE_LB_MEMORY_H
struct HSD_AllocEntry {
    struct HSD_AllocEntry* next;
    void* addr; ///< ARAM addresses are opaque.
    size_t size;
};
/// Heap spanning [lo, hi).
typedef struct Handle {
    struct Handle* next;
    void* lo;
    void* hi;
    HSD_AllocEntry* blocks; ///< Sorted by address.
} Handle;
/* 014E24 */ Handle* lbMemory_80014E24(void* lo, void* hi);
/* 014EEC */ void lbMemory_80014EEC(Handle*);
/* 014F7C */ u32 lbMemory_80014F7C(Handle*);
/* 014FC8 */ HSD_AllocEntry* lbMemory_80014FC8(Handle*, size_t);
/* 0150F0 */ void lbMemFreeToHeap(Handle*, void*);
/* 01529C */ u32 lbMemory_8001529C(Handle*, void (*)(u32), u32);
/* 0154BC */ void lbMemory_800154BC(uintptr_t*, uintptr_t*);
/* 0154D4 */ Handle* lbMemory_800154D4(void* lo, void* hi);
/* 0155A4 */ void lbMemory_800155A4(void);
/* 01564C */ void lbMemory_8001564C(void);
#define GALE01_01E8F8
void lbMthp_8001F410(const char* filename, u32* rate_table, void* buf,
                     size_t heap_size, int loop);
void lbMthp_8001F578(void);
int lbMthp_8001F5C4(void);
u32 lbMthp_8001F5D4(void);
int lbMthp_8001F5E4(void);
int lbMthp_8001F5F4(void);
int lbMthp_8001F604(void);
void lbMthp_8001F614(int arg0);
HSD_SObj* lbMthp_8001F624(HSD_GObj*, int, int);
void lbMthp_8001F67C(HSD_GObj*, intptr_t);
void lbMthp_8001F800(void);
void lbMthp_8001F87C(void);
HSD_SObj* lbMthp8001F890(HSD_GObj*);
void lbMthp8001F928(HSD_GObj*, intptr_t);
void lbMthp8001FAA0(const char* filename, int, int);
/**
 * @file
 * @brief Refraction visual effects using GX indirect textures.
 *
 * Uses reference counting to track active effect users.
 * Supports IA4, IA8, and RGBA8 texture formats.
 */
#define GALE01_021CE8
/* 0222A4 */ void lbRefract_800222A4(void);
/* 02247C */ void lbRefract_8002247C(HSD_CObj*);
/// @brief Copy framebuffer to refraction source texture.
/* 022560 */ void lbRefract_80022560(void);
/// @brief Reset TEV and indirect texture stages.
/* 0225D4 */ void lbRefract_800225D4(void);
/* 0226A8 */ s32 lbRefract_PObjLoad(HSD_PObj* pobj, HSD_PObjDesc* desc);
/* 022998 */ void lbRefract_80022998(HSD_MObj*, u32 rendermode, s32);
/// @brief Increment refraction effect user count.
/* 022BB8 */ void lbRefract_80022BB8(void);
/// @brief Decrement refraction effect user count.
/* 022BD0 */ void lbRefSetUnuse(void);
#define MELEE_LB_SHADOW_H
/* 00E9F0 */ void lbShadow_8000E9F0(Vec3*, HSD_Spline*, f32);
/* 00ED54 */ void lbShadow_8000ED54(LbShadow*, HSD_JObj*);
/* 00EE8C */ void lbShadow_8000EE8C(LbShadow*);
/* 00EEE0 */ void lbShadow_8000EEE0(HSD_GObj*);
/* 00EFEC */ void lbShadow_8000EFEC(void);
/* 00F214 */ void lbShadow_8000F214(HSD_Shadow*);
/* 00F38C */ void lbShadow_8000F38C(s32);
#define GALE01_01D2BC
/* 01D2BC */ void lbSnap_8001D2BC(void);
/* 01D338 */ int lbSnap_8001D338(int);
/* 01D350 */ int lbSnap_8001D350(int i);
/* 01D394 */ int lbSnap_8001D394(int);
/* 01D3B0 */ int lbSnap_8001D3B0(int);
/* 01D3CC */ int lbSnap_8001D3CC(int);
/* 01D3E8 */ int lbSnap_8001D3E8(int, int);
/* 01D40C */ int lbSnap_8001D40C(int);
/* 01D4A4 */ void lbSnap_8001D4A4(int, char*);
/* 01D5FC */ int lbSnap_8001D5FC(int, int);
/* 01D7B0 */ int lbSnap_8001D7B0(int, int, int);
/* 01DA5C */ void lbSnap_8001DA5C(const u8*);
/* 01DC0C */ int lbSnap_8001DC0C(u8*);
/* 01DE8C */ int lbSnap_8001DE8C(void*);
/* 01DF20 */ int lbSnap_8001DF20(void);
/* 01DF6C */ int lbSnap_8001DF6C(int);
/* 01E058 */ int lbSnap_8001E058(int, int);
/* 01E204 */ int lbSnap_8001E204(void);
/* 01E210 */ int lbSnap_8001E210(void);
/* 01E218 */ void lbSnap_8001E218(void* arg0, Unk80433380_48* arg1);
/* 01E27C */ void lbSnap_8001E27C(void);
/* 01E290 */ void lbSnap_8001E290(void);
#define GALE01_00F9F8
/* 011AC4 */ HSD_LObj* lb_80011AC4(LightList**);
/* 011B74 */ void lb_80011B74(HSD_DObj* dobj, u32 flags);
/* 011C18 */ void lb_80011C18(HSD_JObj* jobj, u32 flags);
/* 011E24 */ int lb_80011E24(HSD_JObj*, HSD_JObj**, ...);
/* 01204C */ int lb_8001204C(HSD_JObj*, HSD_JObj**, u16*, int);
/* 0121FC */ HSD_ImageDesc* lb_800121FC(HSD_ImageDesc* image_desc, int width,
                                        int height, GXTexFmt format,
                                        s16 entry_num);
/* 0122C8 */ void lb_800122C8(HSD_ImageDesc* image_desc, u16 origx, u16 origy,
                              bool clear);
/* 0122F0 */ void lb_800122F0(HSD_ImageDesc*, GXTexObj*, float);
/* 01271C */ void lb_8001271C(GXTexObj*, float, float, float, float, float,
                              float);
/* 01285C */ void lb_8001285C(HSD_ImageDesc*, GXTexObj*);
/* 012994 */ void lb_80012994(HSD_ImageDesc*, u8, u8, float, float, float,
                              float, float);
/* 013614 */ void fn_80013614(HSD_GObj*);
/* 0138AC */ void fn_800138AC(void* ptr);
/* 0138CC */ void lb_800138CC(HSD_GObj* gobj, HSD_GObjEvent arg1);
/* 0138D8 */ void lb_800138D8(HSD_GObj* gobj, s8 arg1);
/* 0138EC */ HSD_GObj* lb_800138EC(HSD_ImageDesc*, GObj_RenderFunc, int, s8,
                                   float, float, float, float);
/* 013B14 */ HSD_CObj* lb_80013B14(HSD_CameraDescPerspective*);
#define MELEE_LB_LBTIME_H
u32 lbTime_8000AEC8(u32 a, u32 b);
u32 lbTime_8000AEE4(u32 a, int b);
u32 lbTime_8000AF24(u32 a, int b);
u32 lbTime_8000AF74(u32 a, int b);
u32 lbTime_GetTimeInSeconds(void);
void lbTime_8000B028(OSCalendarTime* td, unsigned int secs);
#define GALE01_022C30
#define MELEE_MN_INLINES_H
#define MELEE_MN_MAIN_H
typedef struct _MainMenuData {
    /* 0x0000 */ MenuKind8 menu_kind;
    /* 0x0001 */ MenuKind8 hovered_selection;
    /* 0x0002 */ MenuState8 state;
    /* 0x0003 */ u8 pad_3;
    /* 0x0004 */ HSD_JObj* tree[42]; // 42 * 4 = 0xA8 bytes
    /* 0x00AC */ HSD_Text* description;
} MainMenuData;
typedef struct _MainMenuPanelData {
    /* 0x0000 */ MenuKind8 cur_menu;
    /* 0x0001 */ MenuKind8 prev_menu;
    /* 0x0002 */ u8 x2;
    /* 0x0003 */ MenuState8 state;
} MainMenuPanelData;
typedef struct _MenuFlow {
    /* 0x0000 */ MenuKind8 cur_menu;
    /* 0x0001 */ MenuKind8 prev_menu;
    /* 0x0002 */ u16 hovered_selection;
    /* 0x0004 */ u8 confirmed_selection;
    /* 0x0005 */ u8 pad_5[3];
    /* 0x0008 */ u64 buttons;
    /* 0x0010 */ u8 x10;
    /* 0x0011 */ u8 entering_menu; ///< bool
    /* 0x0012 */ u8 light_lerp_frames;
    /* 0x0013 */ u8 pad_13;
    /* 0x0014 */ GXColor* light_color; ///< used for the main panel color
} MenuFlow;
typedef struct _MenuInputState {
    u16 cooldown;
    u16 x2;
    s32 x4;
} MenuInputState;
/// Test for some sort of analogue movement and return the port that inputted
/// it.
/* 2295AC */ u8 mn_802295AC(void);
/* 229624 */ u32 mn_80229624(u32);
/* 229860 */ void mn_80229860(s8);
/* 229894 */ void mn_80229894(s32, u16, s32);
/* 229938 */ bool mn_80229938(MenuKind, s32);
/* 229A04 */ int mn_80229A04(MenuKind, int);
/* 229B2C */ HSD_GObj* mn_80229B2C(void);
/* 229BF4 */ void fn_80229BF4(HSD_GObj*);
/* 229DC0 */ HSD_GObj* mn_80229DC0(void);
/* 229F60 */ void mn_80229F60(HSD_GObj*, HSD_JObj*, MainMenuSelection);
/* 22A440 */ void mn_8022A440(HSD_GObj*, HSD_JObj*, MainMenuSelection);
/* 22A5D0 */ void mn_8022A5D0(HSD_GObj*, MainMenuSelection);
/* 22ADD8 */ void mn_8022ADD8(HSD_GObj*, bool);
/* 22AF10 */ void fn_8022AF10(HSD_GObj*);
/* 22AFEC */ void fn_8022AFEC(HSD_GObj*);
/* 22B3A0 */ HSD_GObj* mn_8022B3A0(u8);
/* 22BA1C */ void mn_8022BA1C(HSD_GObj*);
/* 22BCD4 */ void fn_8022BCD4(HSD_GObj*, intptr_t);
/* 22BCF8 */ HSD_GObj* mn_8022BCF8(void);
/* 22BD6C */ void mn_8022BD6C(void);
/* 22BD8C */ void mn_8022BD8C(void);
/* 22BDB4 */ void fn_8022BDB4(HSD_GObj*, intptr_t);
/* 22BE34 */ HSD_GObj* mn_8022BE34(void);
/* 22BEDC */ void mn_8022BEDC(HSD_GObj*);
/* 22BFBC */ GXColor* mn_8022BFBC(int);
/* 22C010 */ int mn_8022C010(int, int);
/* 22C128 */ void fn_8022C128(HSD_GObj*);
/* 22C304 */ void mn_8022C304(void);
/* 22C4F4 */ void mn_8022C4F4(HSD_GObj*);
/* 22C7CC */ void mn_8022C7CC(HSD_GObj*);
/* 22CA54 */ void mn_8022CA54(HSD_GObj*);
/* 22CC28 */ void mn_8022CC28(HSD_GObj*);
/* 22CE6C */ void mn_8022CE6C(HSD_GObj*);
/* 22D104 */ void mn_8022D104(HSD_GObj*);
/* 22D34C */ void mn_8022D34C(HSD_GObj*);
/* 22D594 */ void mn_8022D594(HSD_GObj*);
/* 22D7F4 */ void mn_8022D7F4(HSD_GObj*);
/* 22DB10 */ void mn_8022DB10(HSD_GObj*);
/* 22DD38 */ void mnMain_Scene_OnFrame(void);
/* 22DDA8 */ void mnMain_Scene_OnEnter(void*);
/* 22E950 */ bool mn_IsFighterUnlocked(SelectableCharacterKind);
/// Fill arg0 with the string representation of arg1.
/* 22E978 */ void mn_8022E978(u8 item_idx,
                              u8 enable); ///< set/unset item mask bit
/* 22EA08 */ void mn_8022EA08(char* buf, u32 num);
/* 22EA78 */ void mn_8022EA78(char* buf, int buf_end, u32 num);
/* 22EAE0 */ void mn_8022EAE0(HSD_GObj*);
/* 22EB04 */ void mn_8022EB04(void* user_data);
/// Shift arg0 left in base 10 by arg1 digits and return the ones digit.
/* 22EB24 */ s32 mn_GetDigitAt(s32, s32);
/// Return how many digits are in a number.
/* 22EB78 */ s32 mn_GetDigitCount(s32);
/* 22EBDC */ void mn_8022EBDC(void);
/* 22EC18 */ float mn_8022EC18(HSD_JObj*, AnimLoopSettings*, HSD_TypeMask);
/* 22ED6C */ float mn_8022ED6C(HSD_JObj*, AnimLoopSettings*);
/* 22EE84 */ float mn_8022EE84(HSD_JObj* arg0, AnimLoopSettings* arg1,
                               HSD_TypeMask arg2);
/* 22EFD8 */ float mn_8022EFD8(HSD_JObj*, AnimLoopSettings*);
/* 22F0F0 */ void mn_8022F0F0(int);
/* 22F138 */ void mn_8022F138(u16, u16);
/* 22F1A8 */ void mn_8022F1A8(u16, u16);
/* 22F218 */ bool mn_8022F218(void);
/* 22F268 */ void mn_8022F268(void);
/* 22F298 */ f32 mn_8022F298(HSD_JObj*);
/* 22F360 */ void mn_8022F360(HSD_AObj* aobj, void* obj, u32 arg2);
/* 22F3D8 */ void mn_8022F3D8(HSD_JObj*, u8, HSD_TypeMask);
/* 22F410 */ int mn_8022F410(float* x, const float* target, float dx);
/* 22F470 */ int mn_8022F470(int* x, const int* target, int dx);
/* 22F4CC */ void mn_8022F4CC(void);
/* 4A04F0 */ extern MenuFlow mn_804A04F0;
/* 4A0508 */ extern StaticModelDesc MenMainBack_Top;
/* 4A0518 */ extern StaticModelDesc MenMainPanel_Top;
/* 4D6BB4 */ extern u8 mn_804D6BB4;
/* 4D6BB5 */ extern u8 mn_804D6BB5;
/* 4D6BB8 */ extern HSD_Archive* mn_804D6BB8;
/* 4D6BBC */ extern LightList** MenMain_lights;
/* 4D6BC0 */ extern HSD_FogDesc* MenMain_fog;
/* 4D6BC4 */ extern HSD_CObjDesc* MenMain_cam;
/* 4D6BC8 */ extern MenuInputState mn_804D6BC8;
/* 4D6C00 */ extern char** NotAllowedNamesList;
/* 4D6C04 */ extern u8** AutoNamesList;
#define SYSDOLPHIN_BASELIB_SISLIB_H
struct SisBlock {
    SisBlock* next;
    void* data;
    u32 size;
};
/// Growable encoded string owned by an #HSD_Text.
typedef struct SisBuffer {
    u8* end; ///< terminator of the encoded string
    u8* data;
    u32 size;
    u32 count; ///< entries appended
} SisBuffer;
struct HSD_Text {
    // these get passed to the text initializer HSD_SisLib_803A5ACC
    f32 pos_x; ///< world position x
    f32 pos_y; ///< world position y
    f32 pos_z; ///< world position z
    f32 box_size_x; ///< text box size x
    f32 box_size_y; ///< text box size y
    Vec4 x14;
    Vec2 font_size; ///< font size, 1.0 being 100% of the screen?
    GXColor bg_color;
    GXColor text_color;
    Vec2 x34;
    Vec2 x3C;
    u16 x44; ///< render flags?
    u16 x46; ///< more flags?
    u8 default_fitting; ///< sets fitting below
    u8 default_kerning; ///< sets kerning below
    u8 default_alignment; ///< sets alignment below
    u8 x4B;
    u8 x4C; // whether to test for Z depth?
    u8 hidden; ///< visibility flag
    u8 x4E;
    u8 font_idx; ///< which font to select from the array HSD_SisLib_804D1124
    HSD_Text* next;
    HSD_GObj* entity;
    void (*render_callback)(
        void*); ///< callback in the text renderer (HSD_SisLib_803A84BC)
    u8* sis_buffer; ///< SIS text buffer
    u8* x60; ///< position in text buffer
    SisBuffer* alloc_data;
    u8* state_stack; ///< saved text-state records
    u16 state_stack_used;
    u16 state_stack_capacity;
    f32 current_width;
    f32 current_height;
    Vec2 x78;
    Vec2 x80;
    f32 x88;
    GXColor active_color; ///< the texts current color
    u16 x90; ///< set by x44
    u16 x92; ///< set by x46
    u32 x94;
    u32 x98;
    u8 fitting;
    u8 kerning;
    u8 alignment;
    u8 x9F;
};
struct sislib_UnkAlloc3 {
    sislib_UnkAlloc3* x0;
    HSD_GObj* x4;
    u16 x8;
    u16 xA;
    u8 xC;
    u8 xD;
    u8 xE;
    u8 xF;
};
/**
 * Per-font SIS tables of relocated archive pointers: [0] glyph images,
 * [1] glyph widths, then the encoded strings.
 */
extern u8** HSD_SisLib_804D1124[5];
extern SisBlock* free_head;
extern SisBlock* used_head;
extern HSD_Text* HSD_SisLib_804D7978;
extern sislib_UnkAlloc3* HSD_SisLib_804D797C;
void HSD_SisLib_803A6048(size_t);
M2C_UNK func_804A70A0(M2C_UNK, s32, u32, s32, s32, s32, s32, s32, f64, f64, f64,
                    f64, f64, f64, f64, f64);
void HSD_SisLib_803A947C(HSD_Archive*);
HSD_Archive* HSD_SisLib_803A945C(char*);
void HSD_SisLib_803A84BC(HSD_GObj*, intptr_t);
u8* HSD_SisLib_803A7F0C(HSD_Text*, s32);
void HSD_SisLib_803A8134(u8*, HSD_Text*, f32*, f32*);
void HSD_SisLib_803A7684(HSD_Text*, const u8*, u8);
void HSD_SisLib_803A7664(HSD_Text*);
void HSD_SisLib_803A75E0(HSD_Text*, s32);
void HSD_SisLib_803A7548(HSD_Text*, int, float, float);
void HSD_SisLib_803A74F0(HSD_Text*, s32 arg1, GXColor* arg2);
void HSD_SisLib_803A746C(HSD_Text*, s32, f32, f32);
s32 HSD_SisLib_803A70A0(HSD_Text*, s32 entry_idx, char* fmt, ...);
u32 lbl_803A6FEC(s32, s32, bool);
int HSD_SisLib_803A6B98(HSD_Text* arg0, float, float, const char*, ...);
s32 HSD_SisLib_803A67EC(u8*, u8*);
HSD_Text* HSD_SisLib_803A6754(int arg0, int arg1);
void HSD_SisLib_803A660C(s32, s32, s32);
u8* HSD_SisLib_803A6530(s32, s32, s32);
u8* HSD_SisLib_803A6478(u8*, u8*);
void HSD_SisLib_803A6368(HSD_Text*, s32);
void HSD_SisLib_803A62A0(s32, char*, char*);
int HSD_SisLib_803A611C(int, HSD_GObj*, u16, u8, u8, u8, u8, u32);
void lbl_803A60EC(void);
HSD_Text* HSD_SisLib_803A5ACC(int, s32, f32, f32, f32, f32, f32);
void* HSD_SisLib_Alloc(s32);
void HSD_SisLib_Free(void*);
void HSD_SisLib_803A5CC4(HSD_Text*);
void HSD_SisLib_803A5A2C(void*);
void HSD_SisLib_803A5D30(void);
void HSD_SisLib_803A5DA0(s32);
void HSD_SisLib_803A5E70(void);
void HSD_SisLib_803A5F50(s32);
void HSD_SisLib_803A5FBC(void);
void fn_803A60EC(void*);
u8* fn_803A6FEC(u8*, s32, s32*);
/// void *HSD_SisLib_803A84BC(HSD_GObj *, intptr_t);
typedef enum _MenuInput {
    MenuInput_Up = 1 << 0, ///< 0x0001
    MenuInput_Down = 1 << 1, ///< 0x0002
    MenuInput_Left = 1 << 2, ///< 0x0004
    MenuInput_Right = 1 << 3, ///< 0x0008
    MenuInput_Confirm = 1 << 4, ///< 0x0010
    MenuInput_Back = 1 << 5, ///< 0x0020
    MenuInput_LTrigger = 1 << 6, ///< 0x0040
    MenuInput_RTrigger = 1 << 7, ///< 0x0080
    MenuInput_StartButton = 1 << 8, ///< 0x0100
    MenuInput_AButton = 1 << 9, ///< 0x0200
    MenuInput_XButton = 1 << 10, ///< 0x0400
    MenuInput_YButton = 1 << 11, ///< 0x0800
} MenuInput;
#define GET_MENU(gobj) ((Menu*) HSD_GObjGetUserData(gobj))
#define GET_DIAGRAM(gobj) ((Diagram*) HSD_GObjGetUserData(gobj))
#define GET_MNINFO(gobj) ((MnInfoData*) HSD_GObjGetUserData(gobj))
static inline void Menu_DecrementAnimTimer(void)
{
    mn_804D6BC8.cooldown--;
    mn_804D6BC8.x2 = 0;
    mn_804D6BC8.x4 = 0;
}
static inline u64 Menu_GetAllInputs(void)
{
    /// Return a MenuEvent bitfield of controller input.
    return mn_804A04F0.buttons = mn_80229624(4);
}
static inline u64 Menu_GetInputsForPort(s32 i)
{
    return mn_804A04F0.buttons = mn_80229624(i);
}
/// @todo The functions `fn_8017435C`, `fn_80174338`, and `fn_80174380` are
/// probably deduplicated clones of these.
static inline void sfxBack(void)
{
    lbAudioAx_80024030(0);
}
static inline void sfxForward(void)
{
    lbAudioAx_80024030(1);
}
static inline void sfxMove(void)
{
    lbAudioAx_80024030(2);
}
static inline void Menu_InitCenterText(Menu* menu, s32 val)
{
    HSD_Text* text =
        HSD_SisLib_803A5ACC(0, 1, -9.5F, 9.1F, 17.0F, 364.68332F, 38.38772F);
    menu->text = text;
    text->font_size.x = 0.0521F;
    text->font_size.y = 0.0521F;
    HSD_SisLib_803A6368(text, val);
}
/// @todo One of these inlines is probably correct
static inline void inline_test_3(HSD_JObj* jobj, f32 val, u8 loops,
                                 HSD_TypeMask type)
{
    HSD_JObjReqAnimAll(jobj, val);
    mn_8022F3D8(jobj, loops, type);
    HSD_JObjAnimAll(jobj);
}
static inline void inline_test_4(HSD_GObj* gobj, f32 val, u8 loops,
                                 HSD_TypeMask type)
{
    HSD_JObj* jobj;
    lb_80011E24(((HSD_JObj*) HSD_GObjGetHSDObj(gobj)), &jobj, 5, -1);
    HSD_JObjReqAnimAll(jobj, val);
    mn_8022F3D8(jobj, loops, type);
    HSD_JObjAnimAll(jobj);
}
#define GALE01_25BC20
/* 25BC20 */ u8* mnCharSel_8025BC20(u8* dst, u32 value);
/* 25BD30 */ void mnCharSel_8025BD30(void);
/* 25C020 */ void mnCharSel_8025C020(int);
/* 25D1C4 */ void mnCharSel_8025D1C4(int, int);
/* 25D5AC */ void mnCharSel_8025D5AC(int door, int frame, bool hidden);
/* 25DAA0 */ bool mnCharSel_8025DAA0(int door);
/* 25DB34 */ void mnCharSel_8025DB34(u8);
/* 25EE8C */ void mnCharSel_8025EE8C(u8 idx);
/* 25F0E0 */ void fn_8025F0E0(HSD_GObj*);
/* 25FAC0 */ void fn_8025FAC0(HSD_GObj*);
/* 25FB2C */ void fn_8025FB2C(HSD_GObj*);
/* 25FB50 */ void mnCharSel_8025FB50(u8 door, s32 arg1);
/* 25FDEC */ s32 mnCharSel_8025FDEC(u8 door);
/* 260094 */ void mnCharSel_CostumeChange(int door, u32 input);
/* 2602A0 */ void mnCharSel_CursorThink(HSD_GObj* gobj);
/* 262648 */ void fn_80262648(HSD_GObj*);
/* 262F44 */ void fn_80262F44(HSD_GObj*);
/* 263354 */ void fn_80263354(HSD_GObj*);
/* 2633B0 */ void fn_802633B0(HSD_GObj*);
/* 264070 */ void mnCharSel_80264070(void);
/* 26407C */ void fn_8026407C(HSD_GObj*);
/* 2640A0 */ s32 mnCharSel_802640A0(void);
/* 26688C */ void mnCharSel_Scene_OnEnter(void*);
/* 2669F4 */ void mnCharSel_Scene_OnFrame(void);
/* 266D70 */ void mnCharSel_Scene_OnExit(void*);
#define MELEE_MN_MNCOUNT_H
#define MNCOUNT_VISIBLE_ROWS 10
typedef struct MnCountData {
    unsigned char scroll_pos;
    int expand_anim_duration;
    HSD_Text* labels[10];
    HSD_Text* values[10];
    HSD_Text* title;
} MnCountData;
#ifdef M2C
#define GET_MNCOUNT(gobj) ((MnCountData*) HSD_GObjGetUserData((HSD_GObj*) gobj))
#else
#define GET_MNCOUNT(gobj) ((MnCountData*) HSD_GObjGetUserData(gobj))
#endif
typedef enum {
    POWER_COUNT, // Power Count
    POWER_TIME, // Power Time
    PLAY_TIME, // Play Time
    SINGLEPLAYER_TIME, // Single-Player Time
    VS_PLAY_TIME, // VS. Play Time
    COMBINED_VS_PLAY_TIME, // Combined VS. Play Time
    VS_PLAY_MATCH_TOTAL, // VS. Play Match Total
    TIME_MATCH_TOTAL, // Time Match Total
    STOCK_MATCH_TOTAL, // Stock Match Total
    COIN_MATCH_TOTAL, // Coin Match Total
    BONUS_MATCH_TOTAL, // Bonus Match Total
    VS_PLAY_CONTESTANTS, // VS. Play Contestants
    MATCH_RESET_COUNTER, // Match Reset Counter
    TOTAL_DAMAGE, // Total Damage
    KO_TOTAL, // KO Total
    SELFDESTRUCT_TOTAL, // Self-Destruct Total
    AVAILABLE_CHARACTERS, // Available Characters
    AVAILABLE_MAPS, // Available Maps
    TROPHY_TOTAL, // Trophy Total
    NAME_TOTAL, // Name Total
    LONGEST_TIME, // Longest Time
    SECOND_LONGEST_TIME, // 2nd Longest Time
    SHORTEST_TIME, // Shortest Time
    SMASH_CHAMP, // Smash Champ
    SMASH_SAP, // Smash Sap
    SLUG_MEISTER, // Slug Meister
    PUNCHING_BAG, // Punching Bag
    KO_KINGPIN, // KO Kingpin
    NO_DEFENSE_NELLY, // No-Defense Nelly
    DISASTER_MASTER, // Disaster Master
} mnCount_row;
/* 2502CC */ u32 mnCount_GetMatchTime(SelectableCharacterKind);
/* 2502F0 */ u32 mnCount_GetKOKingpin(SelectableCharacterKind);
/* 250314 */ u32 mnCount_GetNoDefenseNelly(SelectableCharacterKind);
/* 250338 */ u32 mnCount_GetDisasterMaster(SelectableCharacterKind);
/* 25035C */ int
mnCount_8025035C(s32 skip_count, u32 (*get_val_func)(SelectableCharacterKind));
/* 25069C */ u32 mnCount_GetSmashChamp(SelectableCharacterKind);
/* 2506C0 */ u32 mnCount_GetSmashSap(SelectableCharacterKind);
/* 2506E4 */ u32 mnCount_GetSlugMeister(SelectableCharacterKind);
/* 250708 */ u32 mnCount_GetPunchingBag(SelectableCharacterKind);
/* 25072C */ s32 mnCount_8025072C(CountEntry* entries, s32 start_idx,
                                  bool mode);
/* 25092C */ s32
mnCount_8025092C(s32 rank, u32 (*getVal)(SelectableCharacterKind), bool mode);
/* 250C7C */ SelectableCharacterKind
mnCount_GetRowValue_Character(mnCount_row row);
/* 250DE4 */ unsigned int mnCount_GetRowValue_Number(int);
/* 250FF8 */ void mnCount_CreateRow(HSD_GObj*, int, mnCount_row);
/* 251278 */ void mnCount_HandleUserInput(HSD_GObj* gobj);
/* 2513F4 */ void mnCount_UpdateArrowIndicators(HSD_GObj* gobj);
/* 2514B8 */ void fn_802514B8(HSD_GObj* gobj);
/* 2514D8 */ void fn_802514D8(HSD_GObj* gobj);
/* 251640 */ void fn_80251640(HSD_GObj* gobj);
/* 2517E0 */ void mnCount_InitUserData(MnCountData* arg0);
/* 25186C */ void mnCount_Create(void);
#define MELEE_MN_DATADEL_H
/* 24E940 */ void mnDataDel_8024E940(void);
/* 24EA6C */ void mnDataDel_8024EA6C(void);
/* 24EBC8 */ void mnDataDel_8024EBC8(HSD_JObj*, u8, u8, u8);
/* 24ECCC */ void fn_8024ECCC(HSD_GObj*);
/* 24EEC0 */ void mnDataDel_8024EEC0(void);
/* 24F1D4 */ void fn_8024F1D4(HSD_GObj*);
/* 24F318 */ void fn_8024F318(HSD_GObj*);
/* 24F840 */ void fn_8024F840(HSD_GObj*);
/* 24FBA4 */ void fn_8024FBA4(HSD_GObj*);
/* 24FC48 */ void fn_8024FC48(HSD_GObj*);
/* 24FD40 */ void fn_8024FD40(HSD_GObj*);
/* 24FE4C */ void mnDataDel_8024FE4C(u8);
/* 250170 */ void mnDataDel_80250170(void);
#define MELEE_MN_DEFLICKER_H
/* 24A168 */ void mnDeflicker_8024A168(void);
/* 24A2E8 */ void mnDeflicker_8024A2E8(void);
/* 24A344 */ void mnDeflicker_8024A344(void);
/* 24A3E8 */ void mnDeflicker_8024A3E8(void);
/* 24A4BC */ void mnDeflicker_8024A4BC(void);
/* 24A6C4 */ void mnDeflicker_8024A6C4(int);
#define GALE01_23EA2C
/* 23EA2C */ u8 mnDiagram_GetFighterByIndex(int idx);
/* 23EA40 */ u8 mnDiagram_GetNameByIndex(int idx);
/**
 * @brief Tests whether a distance is at or above the large-unit threshold.
 *
 * The threshold is 160934 when #lbLang_IsSavedLanguageUS is true and 100000
 * otherwise. Callers use a true result to select SIS entry @c 0x7F instead of
 * their per-stat unit entry. Despite the name, this is not an arithmetic
 * overflow check.
 *
 * @param[in] distance Accumulated distance, before conversion.
 */
/* 23EA54 */ bool mnDiagram_IsDistanceOverflow(u32 distance);
/**
 * @brief Scales a distance for display with a language-dependent divisor.
 *
 * US: @c distance/30.4788 (f64, truncated) below 160934, else
 * @c distance/160934. Otherwise: @c distance/100 below 100000, else
 * @c distance/100000. The result is not capped at the threshold: 160933 gives
 * 5280, 160934 gives 1, and 321868 gives 2. The unit is chosen by the caller.
 *
 * @param[in] distance Accumulated distance, before conversion.
 */
/* 23EAC4 */ u32 mnDiagram_ConvertDistanceForDisplay(u32 distance);
/* 23EB84 */ s32 mnDiagram_GetHitPercentage(u8 is_name_mode, u8 player_index);
/* 23ECC4 */ s32 mnDiagram_GetPlayPercentage(u8 is_name_mode, u8 player_index);
/* 23EE38 */ s32 mnDiagram_GetAveragePlayerCount(u8 is_name_mode,
                                                 u8 player_index);
/* 23EF70 */ int mnDiagram_GetNameTotalKOs(u8 field_index);
/* 23EFE4 */ int mnDiagram_GetNameTotalFalls(u8 field_index);
/* 23F068 */ int mnDiagram_GetFighterTotalKOs(u8 field_index);
/* 23F0DC */ int mnDiagram_GetFighterTotalFalls(u8 field_index);
/**
 * @brief Writes @p val as NUL-terminated decimal text with its low
 * @p decimal_places digits after a decimal point.
 *
 * Callers pass 0 or 2. With 2, 5 gives "0.05" and 12345 gives "123.45"; with
 * 0, no decimal point is written. No thousands separators.
 *
 * @param[out] buf Must hold the whole result and its NUL.
 * @param[in] val Value scaled by 10^@p decimal_places.
 * @param[in] decimal_places Digits after the decimal point.
 */
/* 23F14C */ void mnDiagram_FormatDecimalNumber(char* buf, u32 val,
                                                int decimal_places);
/**
 * @brief Writes nonnegative @p seconds as "M:SS" with unpadded minutes.
 *
 * 59 gives "0:59", 60 gives "1:00", and 600000 gives "10000:00"; minutes are
 * neither capped nor split into hours. Callers apply their own limits.
 *
 * @param[out] buf Must hold the whole result and its NUL.
 * @param[in] seconds Nonnegative elapsed seconds.
 */
/* 23F238 */ void mnDiagram_FormatTime(char* buf, s32 seconds);
/**
 * @brief Writes @p val as NUL-terminated decimal digits.
 *
 * No padding or separators; 0 gives "0". Both callers cap @p val first. This
 * and #mnDiagram_FormatDecimalNumber use the signed #mn_GetDigitCount and
 * #mn_GetDigitAt, so the full @c u32 range is not established.
 *
 * @param[out] buf Must hold the whole result and its NUL.
 * @param[in] val Value to format.
 */
/* 23F334 */ void mnDiagram_IntToStr(char* buf, u32 val);
/* 23F3A8 */ u8 mnDiagram_GetPrevNameIndex(s32 idx);
/* 23F400 */ u8 mnDiagram_GetNextNameIndex(s32 idx);
/* 23F45C */ u8 mnDiagram_GetPrevFighterIndex(s32 idx);
/* 23F4CC */ u8 mnDiagram_GetNextFighterIndex(s32 idx);
/* 23F540 */ u32
mnDiagram_GetNamePlayTimeByFighter(int name_idx,
                                   SelectableCharacterKind fighter_idx);
/* 23F578 */ int mnDiagram_GetRankedFighterForName(int rank, int name_idx,
                                                   u32 (*func)(int, int));
/* 23F8CC */ u8 mnDiagram_GetLeastPlayedFighter(u8 name_idx);
/* 23FA6C */ void mnDiagram_SortFightersByKOs(void);
/* 23FC28 */ void mnDiagram_SortNamesByKOs(void);
/* 23FDD8 */ int mnDiagram_CountUnlockedFighters(void);
/* 23FE30 */ void mnDiagram_PopupInputProc(HSD_GObj*);
/* 23FED4 */ void mnDiagram_InputProc(HSD_GObj*);
/* 240B18 */ void mnDiagram_PopupCleanup(void* arg0);
/* 240B98 */ void mnDiagram_PopupAnimProc(HSD_GObj* arg0);
/* 240D94 */ void mnDiagram_CreatePopupTexts(HSD_GObj* arg0, s32 arg1,
                                             s32 arg2, s32 arg3);
/* 241310 */ void mnDiagram_CreatePopup(s32 arg0, s32 arg1, s32 arg2);
/* 241668 */ void mnDiagram_ClearGrid(HSD_GObj* arg0);
/* 241730 */ void mnDiagram_RefreshGrid(HSD_GObj* arg0, int arg1, int arg2);
/* 2417D0 */ void mnDiagram_UpdateScrollArrows(HSD_GObj* gobj);
/* 241AE8 */ void mnDiagram_ExitAnimProc(HSD_GObj* gobj);
/* 241B4C */ void mnDiagram_UpdateScrollArrowVisibility(HSD_GObj* gobj,
                                                        int count);
/* 241BF8 */ void mnDiagram_OnFrame(HSD_GObj* gobj);
/* 241E78 */ void mnDiagram_DrawCellValue(HSD_GObj* arg0, u8 arg1, u8 arg2,
                                          int arg3);
/* 24227C */ void mnDiagram_DrawGridValues(HSD_GObj* arg0, s32 arg1, s32 arg2,
                                           u8 arg3);
/* 2427B4 */ void mnDiagram_DrawNameHeaders(HSD_GObj* arg0, s32 arg1,
                                            s32 arg2);
/* 242B38 */ HSD_JObj* mnDiagram_CreateFighterIcon(int idx, int arg1);
/* 242C0C */ void mnDiagram_DrawFighterHeaders(HSD_GObj* arg0, int arg1,
                                               int arg2);
/* 243038 */ void mnDiagram_CursorProc(HSD_GObj* gobj);
/* 2433AC */ void mnDiagram_CreateCursor(void);
/* 243434 */ void mnDiagram_CreateScreen(u8 arg0);
/* 2437E8 */ void mnDiagram_Init(u8 arg0, u8 arg1);
/* 4A0834 */ extern StaticModelDesc MenMainConB2_Top;
/* 4A0844 */ extern StaticModelDesc MenMainConB3_Top;
/* 4A0854 */ extern StaticModelDesc MenMainCursorB3_Top;
#define MELEE_MN_MNDIAGRAM2_H
/* Union for 64-bit sorting operations */
typedef union {
    struct {
        u8 idx; ///< SelectableCharacterKind or a nametag slot id
        char pad1[7];
        s32 x8;
        s32 xC;
    };
    struct {
        f64 d0;
        f64 d8;
    };
    struct {
        char pad2[8];
        u64 value;
    };
} mnDiagram2_SortEntry;
/* 243A3C */ bool mnDiagram2_IsTimeStat(u8 stat_type);
/* 243A5C */ bool mnDiagram2_IsDistanceStat(u8 stat_type);
/* 243A84 */ bool mnDiagram2_IsPercentageStat(u8 stat_type);
/* 243AB4 */ bool mnDiagram2_IsIconOnlyStat(u8 stat_type);
/* 243ADC */ void mnDiagram2_ClearStatRows(HSD_GObj* gobj);
/* 243BBC */ void mnDiagram2_UpdateHeader(HSD_GObj* gobj, u8 is_name_mode,
                                          u8 entity_idx);
/* 243D40 */ void mnDiagram2_HandleInput(HSD_GObj* gobj);
/* 244330 */ int mnDiagram2_GetStatValue(u8 is_name_mode, u8 stat_type,
                                         u8 entity_idx);
/* 24469C */ void mnDiagram2_CreateStatRow(HSD_GObj* gobj, u8 is_name_mode,
                                           u8 stat_type, u8 row_idx,
                                           u8 entity_idx);
/* 244C74 */ void mnDiagram2_PopulateStatRows(HSD_GObj* gobj, u8 scroll_offset,
                                              u8 is_name_mode, u8 entity_idx);
/* 244D20 */ void mnDiagram2_OnAnimComplete(HSD_GObj* gobj);
/* 244D80 */ void mnDiagram2_UpdateScrollArrows(HSD_GObj* gobj);
/* 244F68 */ void mnDiagram2_Think(HSD_GObj* gobj);
/* 245028 */ void mnDiagram2_FreeUserData(Diagram2* data);
/* 245068 */ void mnDiagram2_InitUserData(void* arg, int unused);
/* 245178 */ void mnDiagram2_Create(int arg0);
/* 2453B0 */ void mnDiagram2_Init(void);
/* 24541C */ u8 mnDiagram2_GetRankedFighter(u8 stat_type, u8 rank);
/* 245684 */ u8 mnDiagram2_GetRankedName(u8 stat_type, u8 rank);
/* 24589C */ void
mnDiagram2_GetAggregatedFighterRank(mnDiagram2_SortEntry* out, u8 type,
                                    u8 idx);
/* 245AE4 */ void mnDiagram2_ClearDetailView(HSD_GObj* gobj);
/* 4D4FD0 */ extern u8 mnDiagram2_804D4FD0[3];
#define MNDIAGRAM3_H
/* 245BA4 */ void mnDiagram3_PopulateRankings(HSD_GObj* gobj);
/* 2461BC */ void mnDiagram3_HandleInput(HSD_GObj* gobj);
/* 246D40 */ void mnDiagram3_UpdateScrollArrows(HSD_GObj* gobj);
/* 246E04 */ void mnDiagram3_OnAnimComplete(HSD_GObj* gobj);
/* 246E64 */ void mnDiagram3_Think(HSD_GObj* gobj);
/* 246F0C */ void mnDiagram3_FreeUserData(void* arg0);
/* 246F2C */ void mnDiagram3_InitUserData(Diagram3* data, int arg1);
/* 247008 */ void mnDiagram3_Create(int arg0);
/* 24714C */ void mnDiagram3_Init(void* arg0);
#define MELEE_MN_EVENT_H
typedef struct MnEventData {
    /* 0x00 */ u8 page;
    /* 0x01 */ u8 pad_01[3];
    /* 0x04 */ s32 first_event;
    /* 0x08 */ HSD_GObj* gobjs[9];
    /* 0x2C */ HSD_Text* texts[9];
    /* 0x50 */ HSD_Text* icons[9];
    /* 0x74 */ HSD_Text* name_text;
    /* 0x78 */ HSD_Text* desc_text;
} MnEventData;
/* 24CE74 */ s32 mnEvent_8024CE74(void);
/* 24D014 */ void mnEvent_8024D014(HSD_GObj*);
/* 24D0CC */ void mnEvent_8024D0CC(HSD_GObj*, s32);
/* 24D15C */ void mnEvent_8024D15C(s32, s32);
/* 24D4E0 */ void mnEvent_8024D4E0(HSD_JObj*, Vec3*);
/* 24D5B0 */ void mnEvent_8024D5B0(HSD_GObj*, u8);
/* 24D7E0 */ void mnEvent_8024D7E0(HSD_GObj*, s32);
/* 24D864 */ void mnEvent_8024D864(HSD_GObj*);
/* 24E1B4 */ void mnEvent_8024E1B4(HSD_GObj*);
/* 24E2A0 */ void mnEvent_8024E2A0(HSD_GObj*);
/* 24E34C */ void mnEvent_8024E34C(HSD_GObj*);
/* 24E420 */ void mnEvent_8024E420(MnEventData*, s32);
/* 24E524 */ void mnEvent_8024E524(s32);
/* 24E838 */ void mnEvent_8024E838(int, bool);
#define GALE01_258940
/* 258940 */ void mnGallery_80258940(void);
/* 25896C */ void mnGallery_8025896C(HSD_GObj* gobj, intptr_t render_pass);
/* 258A08 */ void mnGallery_80258A08(HSD_GObj* gobj, u16 width, u16 height,
                                     u32 priority);
/* 258ED0 */ void fn_80258ED0(HSD_GObj* gobj);
/* 2590C4 */ void fn_802590C4(HSD_GObj* gobj);
/* 2591BC */ void mnGallery_802591BC(HSD_GObj* gobj);
/* 25963C */ void mnGallery_8025963C(void);
/* 259868 */ void mnGallery_80259868(void);
#define _MN_HYAKU_
#define SYSDOLPHIN_BASELIB_GOBJOBJECT_H
M2C_UNK HSD_GObjObject_80390ADC(HSD_GObj* gobj);
void HSD_GObjObject_80390A70(HSD_GObj* gobj, u8 kind, void* obj);
void HSD_GObjObject_80390B0C(HSD_GObj* gobj);
HSD_GObj* HSD_GObjObject_80390A3C(u16 id, u8 arg1);
void mnHyaku_8024C68C(HSD_GObj*);
void mnHyaku_8024CB94(u8);
void mnHyaku_8024CD64(u8);
void mnHyaku_8024C9F0(HSD_GObj*);
void mnHyaku_8024CA50(HSD_GObj*);
void mnHyaku_8024CAC8(HSD_GObj*);
#define MELEE_MN_INFO_H
/* 251A08 */ s32 mnInfo_80251A08(s32);
/* 251AA4 */ s32 mnInfo_80251AA4(void);
/* 251AFC */ void mnInfo_80251AFC(void);
/* 251D58 */ s32 mnInfo_80251D58(mnInfo_GObj*, s32, u32, u32);
/* 251F04 */ void mnInfo_80251F04(mnInfo_GObj*, s32, u32);
/* 251FE4 */ void fn_80251FE4(void);
/* 2522B8 */ void mnInfo_802522B8(HSD_GObj*);
/* 2523B8 */ void fn_802523B8(HSD_GObj*);
/* 2523D8 */ void fn_802523D8(HSD_GObj*);
/* 252548 */ void fn_80252548(HSD_GObj*);
/* 252720 */ void mnInfo_80252720(MnInfoData*);
/* 252758 */ s32 mnInfo_80252758(void);
/* 4A0958 */ extern StaticModelDesc mnInfo_804A0958;
/* 4A0968 */ extern u8 mnInfo_804A0968[0x48];
#define MELEE_MN_INFOBONUS_H
/* 2528F8 */ int mnInfoBonus_802528F8(void);
/* 2529B4 */ void mnInfoBonus_802529B4(void);
/* 252ADC */ void mnInfoBonus_80252ADC(void);
/* 252C50 */ void fn_80252C50(HSD_GObj*);
/* 252E4C */ void fn_80252E4C(HSD_GObj*);
/* 252F8C */ void mnInfoBonus_80252F8C(void);
#define MELEE_MN_ITEMSW_H
typedef struct MnItemSwData {
    /* 0x00 */ u8 menu_kind;
    /* 0x01 */ u8 cursor;
    /* 0x02 */ u8 items[0x1F];
    /* 0x21 */ u8 x21;
    /* 0x22 */ u8 pad;
    /* 0x23 */ u8 x23;
    /* 0x24 */ HSD_JObj* jobjs[9];
} MnItemSwData; // size 0x48
/* 233A98 */ s32 mnItemSw_80233A98(s32);
/* 233B68 */ void mnItemSw_80233B68(MnItemSwData*, u32);
/* 233E10 */ void fn_80233E10(HSD_GObj*);
/* 23405C */ HSD_JObj* mnItemSw_8023405C(MnItemSwData*, u8);
/* 234104 */ void mnItemSw_80234104(HSD_GObj*);
/* 23453C */ void mnItemSw_8023453C(HSD_GObj*, u8, u8);
/* 234C24 */ void fn_80234C24(HSD_GObj*);
/* 235020 */ HSD_JObj* mnItemSw_80235020(u8, MnItemSwData*);
/* 2351A0 */ HSD_GObj* mnItemSw_802351A0(s32);
/* 2358C0 */ void mnItemSw_802358C0(void);
extern HSD_GObj* mnItemSw_804D6BE8;
extern u8 mnItemSw_804D6BEC;
#define MELEE_MN_MNLANGUAGE_H
void mnLanguage_8024BFE0(HSD_GObj*);
void fn_8024C210(HSD_GObj*);
void fn_8024C270(HSD_GObj*);
void fn_8024C2E8(HSD_GObj*);
void mnLanguage_8024C3C4(HSD_GObj*);
void mnLanguage_8024C5C0(HSD_GObj*);
#define MELEE_MN_MAINRULE_H
struct mn_802307F8_t {
    /* 0x000 */ u8 x0;
    /* 0x001 */ u8 x1;
    /* 0x002 */ u8 x2;
    /* 0x003 */ u8 x3;
    /* 0x004 */ u8 x4;
    /* 0x005 */ u8 x5;
    /* 0x006 */ u8 x6;
    /* 0x007 */ u8 x7_pad[0x009 - 0x007];
    /* 0x009 */ u8 x9;
    /* 0x00A */ u8 xA;
    /* 0x00B */ u8 xB_pad[0x00C - 0x00B];
    union {
        /* 0x00C */ HSD_JObj* xC[17];
        struct {
            /* 0x00C */ HSD_JObj* xC0[10];
            struct {
                /* 0x00 */ HSD_JObj* joints[9];
            } x34[7];
        };
    };
    /* 0x130 */ HSD_Text* text;
};
struct mn_80231634_t {
    /*  +0 */ char pad_0[0x10];
    /* +10 */ int x10;
};
/* 22F538 */ void fn_8022F538(HSD_GObj*);
/* 22FB88 */ void mn_8022FB88(u8, void*);
/* 22FD18 */ void mn_8022FD18(u8);
/* 22FEC8 */ void mn_8022FEC8(HSD_GObj*, HSD_JObj*, u8, u8);
/* 230198 */ void mn_80230198(HSD_GObj*, HSD_JObj*, u8);
/* 230274 */ void mn_80230274(HSD_GObj*, int, int);
/* 2307F8 */ void mn_802307F8(struct mn_802307F8_t*, s32, s32);
/* 2308F0 */ void mn_802308F0(HSD_GObj*, int, int);
/* 2309F0 */ void fn_802309F0(HSD_GObj*);
/* 230D18 */ s32 mn_80230D18(struct mn_802307F8_t*, HSD_JObj*, int);
/* 230E38 */ HSD_GObj* mn_80230E38(int);
/* 231634 */ int mn_80231634(struct mn_80231634_t*);
/* 23164C */ void mn_8023164C(void);
/* 231714 */ void mn_80231714(void);
/* 2317E4 */ void mn_802317E4(HSD_Archive*, int);
/* 231804 */ void mn_80231804(HSD_Archive*, int);
/* 231F80 */ bool mn_80231F80(u8);
#define GALE01_23749C
typedef struct MnName_GObj {
    /* +00 */ HSD_GObj gobj;
    /* +38 */ void* x38;
    /* +3C */ HSD_Text* text;
    /* +40 */ HSD_Text* text2;
} MnName_GObj;
/* 23749C */ char* mnName_8023749C(int slot);
/* 23754C */ char* GetNameText(int slot);
/* 237594 */ int GetNameCount(void);
/* 2375EC */ bool IsNameListFull(void);
/* 237654 */ s32 CompareNameStrings(char* str, char* slot);
/* 2377A8 */ bool IsNameUnique(char* name);
/* 237834 */ void DeleteName(u8);
/* 2379BC */ bool IsNameValid(int slot);
/* 237A04 */ void CreateNameAtIndex(s32 slot);
/* 237A68 */ void mnName_SortNames(HSD_GObj*);
/* 237D94 */ u8 mnName_80237D94(s32, u8);
/* 237F78 */ void mnName_ConfirmNameDeleteInput(HSD_GObj*);
/* 23817C */ void mnName_MainInput(HSD_GObj*);
/* 238540 */ void fn_80238540(HSD_GObj* gobj);
/* 2385A0 */ void mnName_802385A0(HSD_GObj* gobj);
/* 2385D4 */ s32 mnName_GetPageCount(void);
/* 238698 */ s32 mnName_GetColumnCount(void);
/* 238754 */ void mnName_80238754(HSD_GObj* gobj);
/* 2388D4 */ HSD_JObj* mnName_802388D4(HSD_GObj* gobj, u8 index);
/* 238964 */ f32 mnName_80238964(u8 index, u8 target, u8 flag);
/* 238A04 */ void mnName_80238A04(HSD_GObj* gobj, u8 target, u8 flag);
/* 238AE0 */ void mnName_80238AE0(HSD_GObj* gobj, u8 index, u8 arg2);
/* 238C34 */ void mnName_80238C34(HSD_GObj*, u8, u8);
/* 239574 */ void fn_80239574(HSD_GObj*);
/* 239878 */ void mnName_80239878(u8, HSD_GObj*);
/* 239A24 */ void mnName_80239A24(HSD_GObj* gobj);
/* 239EBC */ void mnName_80239EBC(HSD_JObj* jobj, f32 y);
/* 239F5C */ void mnName_80239F5C(HSD_JObj* jobj, f32 x);
/* 239FFC */ void mnName_80239FFC(HSD_GObj* gobj);
/* 23A058 */ void mnName_8023A058(HSD_GObj* gobj);
/* 23A0BC */ void fn_8023A0BC(HSD_GObj*);
/* 23A290 */ void mnName_8023A290(void);
/* 23A59C */ HSD_GObj* mnName_8023A59C(u8);
/* 23A9B4 */ void mnName_8023A9B4(u8);
/* 23AC40 */ s32 mnName_8023AC40(void);
/* 23B084 */ bool IsNameNotAllowed(char* name_idx);
#define MELEE_MN_NAME_NEW_H
/* 23B0F8 */ void mnNameNew_8023B0F8(HSD_GObj* arg0, u8 arg1);
/* 23B224 */ void mnNameNew_8023B224(u8);
/* 23B314 */ void mnNameNew_8023B314(NameNewEntry*, s32);
/* 23B3FC */ HSD_Text* mnNameNew_KeySetup(NameNewEntry*, u8);
/* 23BAA8 */ s32 mnNameNew_8023BAA8(NameNewEntry* arg0, s32 arg1, u8 arg2);
/* 23BD4C */ s32 PickAutoName(HSD_GObj* arg0);
/* 23BEE0 */ bool NameContainsOnlySpaces(void);
/* 23BFE4 */ s32 WriteCharactersForNameAtIndex(u8 arg0, s32 arg1);
/* 23C148 */ char* AddCharacterToName(char* arg0, u8 arg1, u8 arg2, u8 arg3);
/* 23C290 */ void mnNameNew_GlyphVariantInput(HSD_GObj*);
/* 23C54C */ void mnNameNew_MainInput(HSD_GObj*);
/* 23CE4C */ void mnNameNew_8023CE4C(void);
/* 23CFC8 */ void fn_8023CFC8(HSD_GObj* arg0);
/* 23D0F8 */ void fn_8023D0F8(void*);
/* 23D130 */ HSD_Text* mnNameNew_8023D130(GlyphVariantEntry* arg0, u16 arg1,
                                          u8 arg2, s32 arg3);
/* 23D3E8 */ HSD_GObj* mnNameNew_GlyphVariantSetup(NameNewEntry* arg0,
                                                   u16 arg1, s32 arg2);
/* 23DA08 */ s32 mnNameNew_8023DA08(NameNewEntry*);
/* 23DAEC */ void fn_8023DAEC(HSD_GObj*);
/* 23DBE8 */ void fn_8023DBE8(HSD_GObj*);
/* 23E0D8 */ void mnNameNew_8023E0D8(NameNewEntry* arg0);
/* 23E264 */ s32 InitNameEntryUIState(NameNewEntry*, s32);
/* 23E32C */ void mnNameNew_8023E32C(s32);
/* 23E630 */ void mnNameNew_EnterFromMnName(M2C_UNK);
/* 23E6D0 */ void mnNameNew_EnterFromMnCharSel(HSD_Archive*, s32);
/* 23EA08 */ void mnNameNew_8023EA08(M2C_UNK);
/* 3EE720 */ extern char* mnNameNew_803EE720[];
/* 3EE724 */ extern char* mnNameNew_803EE724[];
#define MELEE_MN_RULEPLUS_H
enum RulePlusOption {
    RULEPLUS_TIME_LIMIT,
    RULEPLUS_FRIENDLY_FIRE,
    RULEPLUS_PAUSE,
    RULEPLUS_SCORE,
    RULEPLUS_SD_PENALTY,
    RULEPLUS_STAGE_SELECT,
    RULEPLUS_COUNT,
};
typedef struct _MenuRulesPlusData {
    MenuKind8 menu_kind;
    u8 hovered_selection;
    union {
        struct {
            u8 time_limit;
            u8 friendly_fire;
            u8 pause;
            u8 score;
            u8 sd_penalty;
        };
        u8 values[5];
    } rule_values;
    u8 x7;
    MenuState8 state;
    HSD_JObj* xC[10]; ///< layout tree?
    HSD_JObj* x34[6][7];
    HSD_Text* description;
} MenuRulesPlusData;
typedef struct mn_803ED1D0_t {
    u16 x0[7]; ///< option jobj mapping?
    u16 xE[6]; ///< value jobj mapping?
    float text_start_frames[12];
    AnimLoopSettings x4C;
    AnimLoopSettings x58;
    AnimLoopSettings x64[2]; ///< [0] = unselected, [1] = selected (non-stage)
    AnimLoopSettings x7C[2]; ///< [0] = unselected, [1] = selected (stage)
    AnimLoopSettings x94;
} mn_803ED1D0_t;
;
/* 23201C */ void fn_8023201C(HSD_GObj*);
/* 232458 */ AnimLoopSettings* mn_80232458(u8, u8, u8);
/* 2324E4 */ void mn_802324E4(u8, MenuRulesPlusData*);
/* 232660 */ void mn_80232660(HSD_GObj*, HSD_JObj*, u8);
/* 2327A4 */ void mn_802327A4(HSD_GObj*, u32, u32);
/* 232D4C */ void mn_80232D4C(HSD_GObj*, u32, u32);
/* 232F44 */ void fn_80232F44(HSD_GObj*);
/* 233218 */ HSD_GObj* mn_80233218(MenuState);
/* 2339FC */ void mn_802339FC(void);
#define MELEE_MN_SNAP_H
/* 253184 */ void mnSnap_80253184(void);
/* 253640 */ void mnSnap_80253640(s32 page);
/* 253964 */ void mnSnap_80253964(void);
/* 253AE4 */ void mnSnap_80253AE4(s32 mode);
/* 253BE0 */ s32 mnSnap_80253BE0(u64 buttons, s32* cursor, s32 count);
/* 253DB4 */ void fn_80253DB4(HSD_GObj* gobj, intptr_t rendermode);
/* 253DE8 */ void fn_80253DE8(HSD_GObj* gobj, intptr_t rendermode);
/* 253E1C */ void fn_80253E1C(HSD_GObj* gobj, intptr_t rendermode);
/* 253E5C */ void fn_80253E5C(HSD_GObj* gobj, intptr_t rendermode);
/* 253E90 */ void mnSnap_80253E90(s32 idx);
/* 253F60 */ void mnSnap_80253F60(void);
/* 254014 */ void mnSnap_80254014(void);
/* 25409C */ void mnSnap_8025409C(s32 dlg_type);
/* 254298 */ void mnSnap_80254298(void);
/* 2545C4 */ void fn_802545C4(void);
/* 257D7C */ void fn_80257D7C(void);
/* 257F24 */ void mnSnap_80257F24(void);
/* 4A0B90 */ extern struct mnSnap_804A0B90_t* mnSnap_804A0B90[4];
#define MELEE_MN_MNSOUND_H
/* 2492CC */ void mnSound_802492CC(HSD_GObj*);
/* 249A1C */ void fn_80249A1C(HSD_GObj*);
/* 249C08 */ void mnSound_80249C08(int);
/* 24A09C */ void mnSound_8024A09C(int);
#define MELEE_MN_SOUNDTEST_H
/* 24A790 */ void mnSoundTest_8024A790(mnSoundTest_GObj*);
/* 24A958 */ void mnSoundTest_8024A958(mnSoundTest_GObj*);
/* 24AA70 */ void mnSoundTest_8024AA70(mnSoundTest_GObj*, u8);
/* 24ABF8 */ void mnSoundTest_8024ABF8(mnSoundTest_GObj*, u8);
/* 24AD58 */ void mnSoundTest_8024AD58(mnSoundTest_GObj*, u8);
/* 24AED0 */ void fn_8024AED0(mnSoundTest_GObj*);
/* 24B2B0 */ void fn_8024B2B0(mnSoundTest_GObj*);
/* 24B7E4 */ void fn_8024B7E4(mnSoundTest_GObj*);
/* 24B8B4 */ void fn_8024B8B4(mnSoundTest_GObj*, f32);
/* 24BAF0 */ void fn_8024BAF0(mnSoundTest_GObj*);
/* 24BCA0 */ void mnSoundTest_8024BCA0(int);
/* 24BEE0 */ HSD_GObjProc* mnSoundTest_8024BEE0(s32);
#define GALE01_2599EC
/* 2599EC */ int mnStageSel_802599EC(void);
/* 259C28 */ void mnStageSel_80259C28(void);
/* 259D84 */ void fn_80259D84(HSD_GObj*);
/* 259ED8 */ void mnStageSel_80259ED8(int);
/* 25A090 */ void fn_8025A090(HSD_GObj*);
/* 25A310 */ void fn_8025A310(HSD_GObj*);
/* 25A560 */ void fn_8025A560(HSD_GObj*);
/* 25A91C */ void fn_8025A91C(HSD_GObj*);
/* 25A974 */ void fn_8025A974(HSD_GObj*, intptr_t);
/* 25A998 */ void mnStageSel_Scene_OnEnter(M2C_UNK);
/* 25B850 */ void mnStageSel_Scene_OnFrame(void);
/* 25BB5C */ void mnStageSel_Scene_OnExit(M2C_UNK);
/* 25BBD4 */ int mnSelStageRandom(void);
/* 25BC08 */ int mnStageSel_8025BC08(int);
#define MELEE_MN_STAGESW_H
/* 237410 */ void mnStageSw_80237410(void);
#define MELEE_MN_VIBRATION_H
extern char mnVibration_804D4FF4[];
extern char mnVibration_804D4FFC[];
/// @name Intro-reveal frames
/// @{
extern const f32 mnVibration_804DC050; ///< port panel 1
extern const f32 mnVibration_804DC054; ///< port panel 2
extern const f32 mnVibration_804DC058; ///< port panel 3
extern const f32 mnVibration_804DC05C; ///< port panel 4
extern const f32 mnVibration_804DC060; ///< name list
                                       /// @}
/* 2474C4 */ HSD_JObj* mnVibration_GetNameRowJObj(s32 count);
/* 247510 */ void mnVibration_HandleInput(HSD_GObj*);
/* 248084 */ void mnVibration_CursorThink(HSD_GObj* gobj);
/* 2480B4 */ void mnVibration_UpdatePortPanel(HSD_JObj* arg0, u8 arg1,
                                              u8 arg2);
/* 24829C */ void mnVibration_CreatePortPanels(HSD_GObj* arg0);
/* 248444 */ void mnVibration_CreateNameRow(HSD_GObj* arg0, u8 arg1, u8 arg2);
/* 248644 */ void mnVibration_RefreshNameRows(HSD_GObj* arg0);
/* 248748 */ void mnVibration_OnAnimComplete(HSD_GObj* gobj);
/* 2487A8 */ void mnVibration_Think(HSD_GObj* gobj);
/* 248A78 */ void mnVibration_IntroProc(HSD_GObj*);
/* 248ED4 */ void mnVibration_CreateScreen(s32 arg0);
/* 249174 */ void mnVibration_Init(int arg0);
#define GALE01_05A6F8
/* 05A6F8 */ void mpIsland_8005A6F8(void);
/* 05A728 */ void mpIsland_8005A728(void);
/* 05AB54 */ mp_UnkStruct0* mpIsland_8005AB54(int surface_idx);
/* 05AC14 */ mp_UnkStruct0* mpIsland_8005AC14(Vec3*, float);
/* 05AC8C */ bool mpIsland_8005AC8C(mp_UnkStruct0* arg0);
/* 05ACE8 */ void mpIsland_8005ACE8(mp_UnkStruct0*, Vec3*, Vec3*);
/* 05AE1C */ void mpIsland_8005AE1C(mp_UnkStruct0** arg0, mp_UnkStruct0** arg1,
                                    int arg2, int arg3, bool arg4);
/* 05B004 */ void mpIsland_8005B004(mp_UnkStruct0** arg0, mp_UnkStruct0** arg1,
                                    int arg2, int arg3, int arg4, int arg5,
                                    bool arg6);
/* 05B334 */ void mpIsland_8005B334(int arg0, int arg1, int arg2, bool arg3);
/* 3B73E8 */ extern mpIsland_Palette const mpIsland_TerrainPalette;
/* 458E88 */ extern struct mpIsland_80458E88_t mpIsland_80458E88;
#define MELEE_PL_INLINES_H
#define _player_h_
#define MELEE_PL_TYPES_H
struct plAllocInfo {
    FighterKind internal_id;
    u8 slot;
    s8 x5;
    struct {
        u8 b0 : 1;
        u8 has_transformation : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    };
};
/// @todo Probably the same struct as #plAllocInfo, figure out how to make them
///       work as one.
/// @todo Probably the same struct as #plAllocInfo, figure out how to make them
///       work as one.
struct plAllocInfo2 {
    FighterKind internal_id;
    u8 slot;
    enum_t unk8;
    struct {
        u8 b0 : 1;
        u8 has_transformation : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    };
};
struct plAttackStats {
    /*   +0 */ u32 total;
    /*   +4 */ u32 by_attack_counts[StatsAttack_Count];
    /* +194 */ u32 thrown_item_count;
    /* +198 */ u32 aerials_count;
    /* +19C */ u32 specials_count;
    /* +1A0 */ u32
        x1A0_count; ///< increments on most attacks, but not down special?
    /* +1A4 */ u32 x1A4_count; ///< increments on down specials?
    /* +1A8 */ u32 x1A8;
};
struct plActionStats {
    /*   +0 */ struct plAttackStats attacks;
    /* +1AC */ struct plAttackStats hits;
    /// @todo i dont think this is a union but in-game, x358 follows
    // the pattern for plAttackStats... but pl_800386D8 directly references
    // x3E8. it doesnt really make sense that it would split the enum at
    // StatsAttack_KbSpecialNMt
    /* +358 */ union {
        struct plAttackStats x358_hits;
        struct {
            u32 total;
            u32 by_attack_lo[35];
            u32 by_attack_hi[65];
            u32 thrown_item_count;
            u32 aerials_count;
            u32 specials_count;
            u32 x4F8_count;
            u32 x4FC_count;
            u32 x500;
        };
    };
    /* +504 */ u8 x504[StatsAttack_Count]; ///< indexed by Struct2070::x2073
    /* +568 */ u32 x568;
    /* +56C */ u32 x56C;
    /* +570 */ u32 x570;
    /* +574 */ u32 x574;
    /* +578 */ u32 x578;
    /* +57C */ u32 x57C;
    /* +580 */ u32 x580;
    /* +584 */ u32 x584;
    /* +588 */ u32 x588;
    /* +58C */ u32 x58C;
    /* +590 */ u32 x590;
    /* +594 */ u32 x594;
    /* +598 */ u32 x598[8];
    /* +5B8 */ u8 x5B8[4];
    /* +5BC */ u8 x5BC_b0 : 1;
    /* +5BC */ u8 x5BC_b1 : 1;
    /* +5BC */ u8 x5BC_b2 : 1;
    /* +5BC */ u8 x5BC_b3 : 1;
};
struct pl_x8C0_t {
    int x0;
    struct {
        u16 x0;
        u8 x2;
        u8 x3_b0 : 1;
    } x4[5];
};
struct pl_x8D8_t {
    int x0;
    struct {
        u32 x0;
        u8 x4_b0 : 1;
        u8 x4_b1 : 1;
    } x4[5];
};
struct pl_x5EC_t {
    u8 x0; ///< player slot
    f32 x4;
    u32 x8;
    u32 xC;
    struct {
        float x0; ///< combo damage?
        s16 x4;
        u16 x6;
        s16 x8;
        int xC;
        s16 x10;
        u16 x12_b0 : 1;
    } x10[6];
};
struct StaleMoveTable {
    /*   +0 */ int current_index;
    /*   +4 */ struct {
        u16 move_id;
        u16 attack_instance;
    } StaleMoves[10];
    /*  +2C */ plActionStats total_attack_count_struct;
    /* +5EC */ struct pl_x5EC_t x5EC;
    /* +674 */ u32 x674[Pl_ItemLog_Terminate];
    /* +710 */ int x710[Pl_ItemLog_Terminate];
    /* +7AC */ int x7AC[Pl_ItemLog_Terminate];
    /* +848 */ int x848[30];
    /* +8C0 */ struct pl_x8C0_t x8C0;
    /* +8D8 */ struct pl_x8D8_t x8D8;
    /* +904 */ unsigned int x904[215];
    /* +C60 */ float xC60;
    /* +C64 */ float xC64;
    /* +C68 */ int xC68;
    /* +C6C */ float xC6C;
    /* +C70 */ float xC70;
    /* +C74 */ float xC74;
    /* +C78 */ float xC78[6];
    /* +C90 */ unsigned int xC90;
    /* +C94 */ int xC94;
    /* +C98 */ float xC98;
    /* +C9C */ float xC9C;
    /* +CA0 */ float xCA0;
    /* +CA4 */ int xCA4;
    /* +CA8 */ unsigned int xCA8;
    /* +CAC */ unsigned int xCAC;
    /* +CB0 */ int xCB0;
    /* +CB4 */ int xCB4;
    /* +CB8 */ int xCB8;
    /* +CBC */ union Struct2070 xCBC;
    /* +CC0 */ ft_800898B4_t xCC0;
    /* +CD4 */ u16 xCD4;
    /* +CD8 */ int xCD8;
    /* +CDC */ float xCDC;
    /* +CE0 */ float xCE0;
    /* +CE4 */ u32 xCE4;
    /* +CE8 */ u32 xCE8;
    /* +CEC */ int xCEC;
    /* +CF0 */ int xCF0;
};
;
struct pl_StaleMoveTableExt_t {
    /*   +0 */ StaleMoveTable x0_staleMoveTable;
    /* +CF4 */ int xCF4;
    /* +CF8 */ float xCF8;
    /* +CFC */ int xCFC;
    /* +D00 */ int xD00;
    /* +D04 */ unsigned int xD04;
    /* +D08 */ unsigned int xD08;
    /* +D0C */ unsigned int xD0C;
    /* +D10 */ int xD10;
    /* +D14 */ u32 xD14;
    /* +D18 */ unsigned int xD18;
    /* +D1C */ u32 xD1C;
    /* +D20 */ u32 xD20;
    /* +D24 */ u32 xD24;
    /* +D28 */ u32 xD28;
    /* +D2C */ u32 xD2C;
    /* +D30 */ u32 xD30;
    /* +D34 */ int xD34;
    /* +D38 */ u32 xD38;
    /* +D3C */ u32 xD3C;
    /* +D40 */ unsigned int xD40;
    /* +D44 */ unsigned int xD44;
    /* +D48 */ unsigned int xD48;
    /* +D4C */ unsigned int xD4C;
    /* +D50 */ unsigned int xD50;
    /* +D54 */ unsigned int xD54;
    /* +D58 */ unsigned int xD58;
    /* +D5C */ unsigned int xD5C;
    /* +D60 */ u32 xD60;
    /* +D64 */ int xD64;
    /* +D68 */ int xD68;
    /* +D6C */ int xD6C;
    /* +D70 */ int xD70;
    /* +D74 */ float xD74;
    /* +D78 */ float xD78;
    /* +D7C */ float xD7C;
    /* +D80 */ float xD80;
    /* +D84 */ float xD84;
    /* +D88 */ float xD88;
    /* +D8C */ float xD8C;
    /* +D90 */ int xD90;
    /* +D94 */ float xD94;
    /* +D98 */ int xD98;
    /* +D9C */ int xD9C;
    /* +DA0 */ int xDA0;
    /* +DA4 */ int xDA4;
    /* +DA8 */ int xDA8;
    /* +DAC */ int xDAC;
    /* +DB0 */ int xDB0;
    /* +DB4 */ int xDB4;
    /* +DB8 */ int xDB8;
    /* +DBC */ int xDBC;
    /* +DC0 */ float xDC0;
    /* +DC4 */ int xDC4;
    /* +DC8 */ int xDC8;
    /* +DCC */ int xDCC;
    /* +DD0 */ union {
        u8 xDD0_value;
        struct {
            u8 bit0 : 1;
            u8 bit1 : 1;
            u8 bit2 : 1;
            u8 bit3 : 1;
            u8 bit4 : 1;
            u8 bit5 : 1;
            u8 bit6 : 1;
            u8 bit7 : 1;
        };
    } xDD0;
    /* +DD1 */ union {
        u8 xDD1_value;
        struct {
            u8 bit0 : 1;
            u8 bit1 : 1;
            u8 bit2 : 1;
            u8 bit3 : 1;
            u8 bit4 : 1;
            u8 bit5 : 1;
            u8 bit6 : 1;
            u8 bit7 : 1;
        };
    } xDD1;
}; // UNKNOWN SIZE
struct pl_800386E8_arg0_t {
    /* 0x000 */ char pad_0[0x190];
    /* 0x190 */ int unk_190; /* inferred */
    /* 0x194 */ char pad_194[0x418]; /* maybe part of unk_190[0x107]? */
    /* 0x5AC */ int unk_5AC; /* inferred */
    /* 0x5B0 */ int unk_5B0; /* inferred */
}; /* size = 0x5B4 */
struct pl_804D6470_t {
    /*   +0 */ float x0;
    /*   +4 */ int x4;
    /*   +8 */ float x8;
    /*   +C */ u32 xC;
    /*  +10 */ float x10;
    /*  +14 */ float x14;
    /*  +18 */ unsigned int x18;
    /*  +1C */ unsigned int x1C;
    /*  +20 */ float x20;
    /*  +24 */ int x24;
    /*  +28 */ float x28;
    /*  +2C */ unsigned int x2C;
    /*  +30 */ unsigned int x30;
    /*  +34 */ float x34;
    /*  +38 */ float x38;
    /*  +3C */ u32 x3C;
    /*  +40 */ u32 x40;
    /*  +44 */ float x44;
    /*  +48 */ float x48;
    /*  +4C */ float x4C;
    /*  +50 */ u32 x50;
    /*  +54 */ u32 x54;
    /*  +58 */ float x58;
    /*  +5C */ float x5C;
    /*  +60 */ float x60;
    /*  +64 */ float x64;
    /*  +68 */ float x68;
    /*  +6C */ float x6C;
    /*  +70 */ unsigned int x70;
    /*  +74 */ unsigned int x74;
    /*  +78 */ float x78;
    /*  +7C */ unsigned int x7C;
    /*  +80 */ unsigned int x80;
    /*  +84 */ float x84;
    /*  +88 */ unsigned int x88;
    /*  +8C */ unsigned int x8C;
    /*  +90 */ unsigned int x90;
    /*  +94 */ unsigned int x94;
    /*  +98 */ float x98;
    /*  +9C */ float x9C;
    /*  +A0 */ float xA0;
    /*  +A4 */ unsigned int xA4;
    /*  +A8 */ unsigned int xA8;
    /*  +AC */ unsigned int xAC;
    /*  +B0 */ unsigned int xB0;
    /*  +B4 */ unsigned int xB4;
    /*  +B8 */ unsigned int xB8;
    /*  +BC */ unsigned int xBC;
    /*  +C0 */ u8 xC0[0xC4 - 0xC0];
    /*  +C4 */ unsigned int xC4;
    /*  +C8 */ unsigned int xC8;
    /*  +CC */ float xCC;
    /*  +D0 */ float xD0;
    /*  +D4 */ float xD4;
    /*  +D8 */ float xD8;
    /*  +DC */ u32 xDC;
    /*  +E0 */ unsigned int xE0;
    /*  +E4 */ unsigned int xE4;
    /*  +E8 */ float xE8;
    /*  +EC */ int xEC;
    /*  +F0 */ u32 xF0;
    /*  +F4 */ float xF4;
    /*  +F8 */ float xF8;
    /*  +FC */ float xFC;
    /* +100 */ float x100;
    /* +104 */ float x104;
    /* +108 */ int x108;
    /* +10C */ float x10C;
    /* +110 */ int x110;
    /* +114 */ float x114;
    /* +118 */ unsigned int x118;
    /* +11C */ float x11C;
    /* +120 */ int x120;
    /* +124 */ unsigned int x124;
    /* +128 */ int x128;
    /* +12C */ int x12C;
    /* +130 */ unsigned int x130;
    /* +134 */ unsigned int x134;
    /* +138 */ u32 x138;
    /* +13C */ unsigned int x13C;
    /* +140 */ unsigned int x140;
    /* +144 */ unsigned int x144;
    /* +148 */ unsigned int x148;
    /* +14C */ unsigned int x14C;
    /* +150 */ unsigned int x150;
    /* +154 */ unsigned int x154;
    /* +158 */ unsigned int x158;
    /* +15C */ unsigned int x15C;
    /* +160 */ float x160;
    /* +164 */ unsigned int x164;
    /* +168 */ unsigned int x168;
    /* +16C */ unsigned int x16C;
    /* +170 */ unsigned int x170;
    /* +174 */ unsigned int x174;
    /* +178 */ unsigned int x178;
    /* +17C */ int x17C;
    /* +180 */ float x180;
}; // UNKNOWN SIZE
#define PL_MAX_SUB_FIGHTERS 2
typedef struct _StaticPlayer {
    /// @todo 0x02 In-Game (includes dead). 0x00 Otherwise.
    enum_t player_state;
    CharacterKind ckind;
    Gm_PKind pkind;
    /// ::bool for each index indicating whether each fighter is active
    /*0x0C*/ u8 transformed[2];
    /*0x0E*/ s16 unk0E;
    union {
        struct {
            /*0x10-0x1B*/ Vec3
                nametag_pos; /// Horizontal, Vertical, Depth (floats)
            /*0x1C-0x27*/ Vec3 transformed_player_pos;
            /*0x28-0x33*/ Vec3 spawn_platform_final_pos;
            /*0x34-0x3f*/ Vec3 some_other_player_pos;
        } byVecName;
        Vec3 byIndex[4];
    } player_poses;
    /*0x40*/ f32 facing_direction;
    /*0x44*/ u8 costume_id; ///< ::CostumeId; max value depends on
                            ///< ::CostumeListsForeachCharacter and
                            ///< ::gm_GetNumCostumesForCKind
    /*0x45*/ u8 unk45;
    /*0x46*/ s8 sub_color; ///< Tint index, 0 to 4; see
                           ///< #gm_SetupSubColors
    /*0x47*/ u8 team; ///< ::TeamColor
    /*0x48*/ u8 pad_port; ///< Physical controller port up to
                           ///< ::PAD_MAX_CONTROLLERS
    /*0x49*/ u8 cpu_level; ///< 1 to 9
    /*0x4A*/ u8 cpu_type; ///< ::CpuKind
    /*0x4B*/ u8 handicap;
    /*0x4C*/ s8 unk4C;
    /*0x4D*/ s8 unk4D;
    /*0x4E*/ s8 unk4E;
    /*0x4F*/ s8 unk4F;
    /*0x50*/ f32 unk50;
    /*0x54*/ f32 attack_ratio;
    /*0x58*/ f32 defense_ratio;
    /*0x5C*/ f32 model_scale;
    union {
        struct {
            /*0x60*/ s16 damage_percent;
            /*0x62*/ s16 damage_percent_alt_or_start_hp;
            /*0x64*/ s16 stamina;
            /*0x66*/ s16 unk66;
        } byName;
        s16 byIndex[4];
    } staminas;
    /*0x68 - 0x6C*/ s32 falls[2];
    /*0x70-0x84*/ u32 kos_by_player[6];
    /// @remarks If -1 in zz_0035184, then it's set to MatchInfo->frame_count
    u32 match_frame_count;
    /*0x8C*/ u16 self_destructs;
    /*0x8E*/ s8 stocks;
    /*0x8F*/ s8 unk8F;
    /*0x90*/ int current_coins;
    /*0x94*/ s32 total_coins;
    /*0x98*/ s32 unk98;
    /*0x9C*/ s32 unk9C;
    /**
     * Incremented every time you move the joystick a different direction from
     * neutral.
     */
    /*0xA0-A4*/ s32 joystick_direction_input_count[2];
    /*0xA8*/ int nametag_slot_id;
    /*0xAC*/ struct {
        u8 b0 : 1; // rumble enabled
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 is_metal : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } flags;
    /*0xAD*/ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 2;
    } more_flags;
    /*0xAE*/ struct {
        u8 b0 : 1;
        u8 b1 : 1;
        u8 b2 : 1;
        u8 b3 : 1;
        u8 b4 : 1;
        u8 b5 : 1;
        u8 b6 : 1;
        u8 b7 : 1;
    } flagsAE;
    /*0xAF*/ s8 unkAF;
    /*0xB0*/ HSD_GObj* player_entity[2];
    /*0xB4*/ /*void* sub_character_entity;*/ // Used for followers, such as
                                             // Nana
    /*0xB8*/ void (*struct_func)(s32 slot);
    /*0xBC*/ StaleMoveTable stale_moves;
    /*0xDB0*/ u8 xDB0[0xE90 - 0xDB0];
} StaticPlayer;
StaticPlayer* Player_GetPtrForSlot(int slot);
void Player_80031790(int slot);
void Player_80031848(int slot);
void Player_80031900(void);
bool Player_800319C4(int slot, bool arg1);
void Player_80031AD0(int slot);
void Player_80031CB0(CharacterKind kind, u8 color);
void Player_80031D2C(CharacterKind kind, u8 color);
void Player_80031DA8(s32 param_1, s32 param_2);
void Player_80031DC8(void func_arg(s32, s32));
void Player_80031EBC(int slot);
void Player_80031FB0(int slot, s32 entity_index);
void Player_80032070(int slot, bool bool_arg);
bool Player_8003219C(int slot);
bool Player_8003221C(int slot);
s32 Player_GetPlayerState(s32 slot);
CharacterKind Player_GetPlayerCharacter(int slot);
void Player_SetPlayerCharacter(s32 slot, CharacterKind value);
Gm_PKind Player_GetPlayerSlotType(s32 slot);
Gm_PKind Player_8003248C(s32 slot, bool arg1);
void Player_SetSlottype(s32 slot, Gm_PKind value);
s8 Player_800325C8(CharacterKind, bool b);
s8 Player_80032610(s32 slot, bool arg1);
void Player_LoadPlayerCoords(s32 slot, Vec3* out_vec);
void Player_80032768(s32 slot, Vec3* arg_vec);
void Player_80032828(s32 slot, s32 index, Vec3* arg_vec);
void Player_800328D4(int slot, Vec3* arg_vec);
void Player_80032A04(int slot, Vec3* arg_vec);
void Player_SetPlayerAndEntityFacingDirection(s32 slot, f32 direction);
f32 Player_80032BB0(s32 slot);
void Player_SetScale(s32 slot, f32 scale);
void Player_GetSpawnPlatformPos(s32 slot, Vec3* arg_vec);
void Player_SetSpawnPlatformPos(s32 slot, Vec3* arg_vec);
void Player_GetSomePos(s32 slot, Vec3* arg_vec);
void Player_SetSomePos(s32 slot, Vec3* arg_vec);
s32 Player_80032F30(s32 slot);
void Player_80032FA4(s32 slot, s32 arg);
f32 Player_GetFacingDirection(s32 slot);
void Player_SetFacingDirection(s32 slot, f32 direction);
void Player_SetFacingDirectionConditional(s32 slot, bool b, f32 direction);
u32 Player_GetCostumeId(int slot);
void Player_SetCostumeId(int slot, int costume_id);
u8 Player_GetSubColor(int slot);
void Player_SetSubColor(int slot, s8 sub_color);
int Player_GetTeam(int slot);
void Player_SetTeam(int slot, s8 unk_color);
int Player_GetPadPort(int slot);
void Player_SetPadPort(int slot, int controller_index);
int Player_GetCpuLevel(int slot);
void Player_SetPlayerAndEntityCpuLevel(int slot, int cpu_level);
int Player_GetCpuType(int slot);
void Player_SetPlayerAndEntityCpuType(int slot, int cpu_type);
int Player_GetHandicap(int slot);
void Player_SetHandicap(int slot, s8 handicap);
f32 Player_GetUnk50(int slot);
f32 Player_GetAttackRatio(int slot);
void Player_SetAttackRatio(int slot, f32 attack_ratio);
f32 Player_GetDefenseRatio(int slot);
void Player_SetDefenseRatio(int slot, f32 defense_ratio);
f32 Player_GetModelScale(int slot);
void Player_SetModelScale(int slot, f32 model_scale);
s32 Player_GetStocks(int slot);
int Player_GetP1Stock(void);
void Player_SetStocks(int slot, int stocks);
void Player_LoseStock(int slot);
int Player_GetCoins(int slot);
void Player_SetCoins(int slot, int current_coins);
int Player_GetTotalCoins(int slot);
void Player_SetTotalCoins(int slot, int coins);
s32 Player_GetUnk98(s32 slot);
void Player_SetUnk98(s32 slot, s32 unk98);
s32 Player_GetUnk9C(s32 slot);
void Player_SetUnk9C(s32 slot, s32 unk9C);
HSD_GObj* Player_GetEntity(s32 slot);
HSD_GObj* Player_GetEntityAtIndex(int slot, int index);
void Player_SwapTransformedStates(s32 slot, s32 arg1, s32 arg2);
s32 Player_GetDamage(s32 slot);
void Player_SetHUDDamage(s32 slot, s32 arg1);
void Player_SetHPByIndex(s32 slot, s32 arg1, s32 arg2);
int Player_GetOtherStamina(s32 slot);
int Player_GetRemainingHP(s32 slot);
bool Player_GetMoreFlagsBit2(s32 slot);
void Player_SetMoreFlagsBit2(s32 slot, u8 bit2);
bool Player_GetMoreFlagsBit3(s32 slot);
void Player_SetMoreFlagsBit3(s32 slot, u8 bit3);
void Player_SetMoreFlagsBit4(s32 slot, u8 bit4);
bool Player_GetMoreFlagsBit4(s32 slot);
bool Player_GetMoreFlagsBit5(s32 slot);
void Player_SetMoreFlagsBit5(s32 slot, u8 bit5);
bool Player_GetMoreFlagsBit6(s32 slot);
void Player_SetMoreFlagsBit6(s32 slot, u8 bit6);
u8 Player_GetFlagsAEBit0(s32 slot);
s32 Player_GetRemainingHPByIndex(s32 slot, s32 index);
s32 Player_GetFalls(s32 slot);
s32 Player_GetFallsByIndex(s32 slot, s32 index);
void Player_SetFalls(int slot, s32 falls);
void Player_SetFallsByIndex(int slot, enum_t index, s32 falls);
s32 Player_GetKOsByPlayerIndex(int slot, int idx);
void Player_UpdateKOsBySlot(int slot, bool bool_arg, int other_slot);
u32 Player_GetMatchFrameCount(int slot);
void Player_UpdateMatchFrameCount(int slot, bool condition);
u32 Player_GetSelfDestructs(int slot);
void Player_SetSelfDestructs(s32 slot, u32 self_destructs);
void Player_IncSelfDestructs(s32 slot, s32 condition);
bool Player_800353BC(s32 slot);
bool Player_8003544C(s32 slot, bool condition);
void Player_SetFlagsBit0(int slot, bool bit0);
u8 Player_GetNametagSlotID(int slot);
void Player_SetNametagSlotID(int slot, int nametag_slot_id);
s32 Player_GetFlagsBit1(s32 slot);
void Player_SetFlagsBit1(s32 slot);
void Player_UnsetFlagsBit1(int slot);
s32 Player_GetFlagsBit3(s32 slot);
void Player_SetFlagsBit3(s32 slot, u8 bit3);
int Player_GetFlagsBit4(int slot);
u8 Player_GetFlagsBit5(s32 slot); ///< player is metal
void Player_SetFlagsBit5(s32 slot, u8 is_metal); ///< player is metal
u8 Player_GetFlagsBit6(s32 slot);
void Player_SetFlagsBit6(s32 slot, u8 bit6);
u8 Player_GetFlagsBit7(s32 slot);
void Player_SetFlagsBit7(s32 slot, u8 bit7);
bool Player_GetMoreFlagsBit0(s32 slot);
bool Player_GetMoreFlagsBit1(s32 slot);
void Player_SetMoreFlagsBit1(s32 slot, u8 bit1);
s32 Player_GetUnk4D(s32 slot);
void Player_SetUnk4D(s32 slot, s8 unk4D);
u8 Player_GetFlagsAEBit1(s32 slot);
u8 Player_SetFlagsAEBit1(int slot, u8 bit1);
int Player_GetUnk4C(s32 slot);
void Player_SetUnk4C(s32 slot, u8 unk4C);
bool Player_80036058(s32 slot);
float Player_800360D8(s32 slot);
void Player_SetStructFunc(s32 slot, void* arg_func);
plActionStats* Player_GetActionStats(int slot);
StaleMoveTable* Player_GetStaleMoveTableIndexPtr(s32 slot);
struct pl_x5EC_t* Player_GetUnk6A8Ptr(int slot);
pl_StaleMoveTableExt_t* Player_GetStaleMoveTableIndexPtr2(s32 slot);
FighterKind Player_80036394(s32 slot);
s32 Player_80036428(s32 slot);
void Player_SetUnk45(s32 slot, int unk45);
u32 Player_GetUnk45(s32 slot);
void Player_UpdateJoystickCountByIndex(s32 slot, s32 index);
s32 Player_GetJoystickCountByIndex(s32 slot, s32 index);
void Player_800366DC(s32 slot, s32 arg1);
void Player_80036790(s32 slot, f32 arg1);
void Player_80036844(s32 slot, s32 arg1);
bool Player_800368F8(int slot);
void Player_80036978(s32 slot, Vec3* pos);
void Player_InitOrResetPlayer(s32 slot);
void Player_80036CF0(s32 slot);
void Player_80036D24(s32 slot);
void Player_InitAllPlayers(void);
void Player_80036DA4(void);
void Player_80036DD8(void);
void Player_80036E20(CharacterKind ckind, HSD_Archive* archive, s32 arg2);
HSD_JObj* Player_80036EA0(s32 slot);
void Player_80036F34(s32 slot, s32 arg1);
void Player_80037054(s32 slot, s32 arg1);
void Player_SetOtherStamina(s32 slot, s32 stamina);
void Player_SetFlagsAEBit0(s32 slot, u8 bit0);
s32 Player_80033BB8(int slot);
/* 4D6470 */ extern pl_804D6470_t* pl_804D6470;
static inline bool pl_CheckIfSameTeam(int slotA, int slotB)
{
    int teamA;
    int teamB;
    if (gm_8016B168()) {
        teamA = Player_GetTeam(slotA);
        teamB = Player_GetTeam(slotB);
        if (teamB == teamA) {
            return 1;
        }
    }
    return 0;
}
static inline bool pl_Verify_gm_8016AEDC(void)
{
    if ((gm_GetFrameCount() != 0U) && (gm_GetFrameCount() != -2U)) {
        return 1;
    } else {
        return 0;
    }
}
#define MELEE_PL_PL040D_H
/* 040DDC */ void pl_80040DDC(int slot);
/* 040ED4 */ void pl_80040ED4(int slot, int, int, int, int, float);
/* 040FBC */ void pl_80040FBC(int slot, int, int, int, int);
/* 0410F4 */ void pl_800410F4(int slot, int, int, int, int);
/* 0411C4 */ void pl_800411C4(int slot, int);
/* 041280 */ void pl_80041280(int slot, int);
/* 0412D0 */ int pl_800412D0(int slot);
/* 041300 */ int pl_80041300(int slot);
/* 04134C */ int pl_8004134C(int slot);
/* 04138C */ void fn_8004138C(int, int);
/* 0414C0 */ float pl_800414C0(int);
/* 041524 */ void pl_80041524(int);
/* 0415B0 */ void fn_800415B0(int, int, u16, u32);
/* 041720 */ void pl_80041720(int, int, u16);
/* 041744 */ void pl_80041744(int, int, u16);
/* 041770 */ void fn_80041770(int, u8, u32);
/* 04182C */ void pl_8004182C(int);
/* 0418F4 */ void pl_800418F4(int);
/* 0419AC */ void pl_800419AC(int, int, u16);
/* 041B08 */ void pl_80041B08(int, M2C_UNK, u16);
/* 041BC8 */ void fn_80041BC8(int, u32, u32);
/* 041BFC */ void pl_80041BFC(int);
#define _plattack_h_
/* 037590 */ void plAttack_80037590(void);
/* 03759C */ void plAttack_8003759C(u32);
/* 037B08 */ u16 plAttack_80037B08(void);
#define GALE01_0386D8
/* 038788 */ void pl_80038788(int player, int kind, int);
/* 038824 */ void pl_80038824(int, int kind);
/* 038898 */ void pl_80038898(int, int kind);
/* 038914 */ pl_804D6470_t* pl_80038914(void);
/* 03891C */ void pl_8003891C(int slot);
/* 038F10 */ void pl_80038F10(int slot);
/* 038FB8 */ void fn_80038FB8(int);
/* 03906C */ int pl_8003906C(int, int, unsigned int*, unsigned int,
                             unsigned int, unsigned int, int*);
/* 039238 */ bool pl_80039238(int, int, int*, unsigned int, float*, float,
                              float);
/* 039418 */ unsigned int pl_80039418(int, int);
/* 039450 */ void pl_80039450(int);
/* 039618 */ void fn_80039618(int);
/* 03B044 */ void fn_8003B044(int);
/* 03B9A4 */ void fn_8003B9A4(int);
/* 03BD60 */ void fn_8003BD60(int);
/* 03C340 */ void fn_8003C340(int);
/* 03CC84 */ void fn_8003CC84(int);
/* 03D2EC */ void fn_8003D2EC(int);
#define MELEE_PL_PLBONUSLIB_INLINE_H
static inline float pl_CalculateAverage(float val, float total)
{
    ((total != 0.0F) ? ((void) 0) : __assert("src/melee/pl/plbonusinline.h", 8, "total != 0.0F"));
    return val / total;
}
#define GALE01_03D514
/* 03D60C */ bool pl_8003D60C(int);
/* 03D644 */ void pl_8003D644(int, int, int, int);
/* 03DF44 */ void pl_8003DF44(int, int);
/* 03DFF4 */ void pl_8003DFF4(int, int, int);
/* 03E058 */ void pl_8003E058(int, int, int, int);
/* 03E0E8 */ void pl_8003E0E8(int, int);
/* 03E114 */ void pl_8003E114(int, int, float);
/* 03E150 */ void pl_8003E150(int slot, int);
/* 03E17C */ void pl_8003E17C(int, int, Item_GObj*);
/* 03E2CC */ u32 pl_8003E2CC(int, Pl_ItemLog pl_itemlog_kind);
/* 03E334 */ u32 pl_8003E334(int, Pl_ItemLog pl_itemlog_kind);
/* 03E39C */ int pl_8003E39C(int);
/* 03E420 */ u32 pl_8003E420(int);
/* 03E4A4 */ void pl_8003E4A4(int slot, bool, void*, int);
/* 03E70C */ void pl_8003E70C(Item_GObj* igobj);
/* 03E7D4 */ u32 pl_8003E7D4(int, int kind);
/* 03E854 */ void pl_8003E854(int, int, Item_GObj*);
/* 03E978 */ void pl_8003E978(int slot, bool fp_x221F_b4,
                              Item_GObj* item_gobj);
/* 03E998 */ void fn_8003E998(int, int);
/* 03EA08 */ void pl_8003EA08(int slot, int);
/* 03EA40 */ void pl_8003EA40(int, int, int, int, int);
/* 03EA74 */ void pl_8003EA74(int, int);
/* 03EAAC */ void pl_8003EAAC(int, int, int);
/* 03EB30 */ void pl_8003EB30(float, int, int, int, int, int);
/* 03EC30 */ void pl_8003EC30(int slot, int, int, float);
/* 03EC9C */ void pl_8003EC9C(int, int, float, float);
/* 03ED0C */ void pl_8003ED0C(int, int, int, int, float);
/* 03EE2C */ void fn_8003EE2C(int, int);
/* 03F294 */ void fn_8003F294(int, int);
/* 03F53C */ void fn_8003F53C(int, int);
/* 03F654 */ void fn_8003F654(int slot, int index, Vec3* pos, Vec3* prevPos);
/* 03FAA8 */ void pl_8003FAA8(int slot, int index, Vec3* pos, Vec3* prevPos);
/* 03FBFC */ int pl_8003FBFC(int);
/* 03FC20 */ int pl_8003FC20(int);
/* 03FC44 */ void pl_8003FC44(int slot, int);
/* 03FC88 */ void pl_8003FC88(int, int, int);
/* 03FDA0 */ void pl_8003FDA0(int, int);
/* 03FDC8 */ void pl_8003FDC8(int, int);
/* 03FDF4 */ void pl_8003FDF4(int, int);
/* 03FE1C */ void pl_8003FE1C(int slot, int);
/* 03FE40 */ void pl_8003FE40(int, int);
/* 03FE64 */ void pl_8003FE64(int, int);
/* 03FED0 */ void pl_8003FED0(int, int);
/* 03FF44 */ void pl_8003FF44(int, int, int);
/* 03FFDC */ void pl_8003FFDC(int, int, int, int, int);
/* 040048 */ void pl_80040048(int, int);
/* 040120 */ void pl_80040120(int, int);
/* 0401F0 */ void pl_800401F0(int, int, float, float);
/* 040270 */ void pl_80040270(int, int, float);
/* 0402D0 */ void pl_800402D0(int slot, int, int);
/* 040330 */ void pl_80040330(int slot, int, float);
/* 040374 */ void pl_80040374(int, int);
/* 0403C0 */ void pl_800403C0(int, int);
/* 0403FC */ void pl_800403FC(int, int, int slot, int, int);
/* 040460 */ void pl_80040460(int slot, int);
/* 04049C */ void pl_8004049C(int, ItemKind);
/* 040614 */ void pl_80040614(int, bool, float);
/* 04065C */ void pl_8004065C(int, int);
/* 040688 */ void pl_80040688(int, int, int);
/* 0407C8 */ float pl_800407C8(int);
/* 040870 */ float pl_80040870(int);
/* 040894 */ unsigned int pl_80040894(int);
/* 0408B8 */ unsigned int pl_800408B8(int);
/* 0408DC */ int pl_800408DC(int);
/* 040900 */ int pl_80040900(int);
/* 040924 */ int pl_80040924(int);
/* 040948 */ float pl_80040948(int);
/* 040A04 */ int pl_80040A04(int);
/* 040A30 */ int pl_80040A30(int);
/* 040A54 */ int pl_80040A54(int);
/* 040A78 */ int pl_80040A78(int);
/* 040A9C */ int pl_80040A9C(int);
/* 040AF0 */ u32 pl_80040AF0(int);
/* 040B18 */ int pl_80040B18(int);
/* 040B3C */ unsigned int pl_80040B3C(int);
/* 040B64 */ unsigned int pl_80040B64(int);
/* 040B8C */ void pl_80040B8C(int slot, int, int);
/* 040BD8 */ int pl_80040BD8(int);
/* 040BFC */ unsigned int pl_80040BFC(int);
/* 040C24 */ float pl_80040C24(int);
/* 040C48 */ float pl_80040C48(int);
/* 040C6C */ float pl_80040C6C(int);
/* 040C90 */ float pl_80040C90(int);
/* 040CB4 */ int pl_80040CB4(int);
/* 040CD8 */ int pl_80040CD8(int);
/* 040CFC */ unsigned int pl_80040CFC(int);
/* 040D20 */ int pl_80040D20(int);
/* 040D44 */ float pl_80040D44(int);
/* 040D68 */ float pl_80040D68(int);
/* 040D8C */ void pl_80040D8C(int slot, int);
/* 040DB8 */ int pl_80040DB8(int slot);
#define _plstale_h_
void plStale_InitAttackInstance(void);
void plStale_ResetStaleMoveTableForPlayer(s32 slot);
u16 plStale_IncrementAttackInstance(void);
void plStale_UpdateStaleMovesFromFighter(HSD_GObj* gobj, HSD_GObj* gobj_2);
void plStale_UpdateStaleMovesFromItem(HSD_GObj* gobj, HSD_GObj* gobj_2);
#define MELEE_PL_PLTRICK_H
struct plActionStats;
struct plAttackStats;
/* 037B2C */ int pl_80037B2C(struct plActionStats* arg0, int arg1, int arg2);
/* 037BC0 */ void pl_80037BC0(struct plAttackStats* stats,
                              union Struct2070* ev);
/* 037C60 */ void pl_80037C60(Fighter_GObj*, volatile s32 prev2070_int);
/* 037DF4 */ void pl_80037DF4(HSD_GObj*, union Struct2070*);
/* 037ECC */ void pl_80037ECC(HSD_GObj*);
/* 038144 */ void pl_80038144(HSD_GObj*, HSD_GObj*, s32, ft_800898B4_t*, u16,
                              s32, s32);
/* 0384DC */ void pl_800384DC(HSD_GObj*, int, void*);
/* 038628 */ bool pl_80038628(HSD_GObj*, int);
/* 0386D8 */ unsigned int pl_800386D8(plActionStats*, ssize_t);
/* 0386E8 */ int pl_800386E8(pl_800386E8_arg0_t*);
/* 038700 */ int fn_80038700(const int*, int, int);
#define MELEE_CROWD_CROWDSFX_H
typedef struct CrowdSFX_UnkStruct {
    /* 0x00 */ s32 x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ f32 x8;
    /* 0x0C */ u32 xC;
    /* 0x10 */ s32 x10;
    /* 0x14 */ s32 x14;
    /* 0x18 */ s32 x18;
    /* 0x1C */ s32 x1C;
    /* 0x20 */ s32 x20;
    /* 0x24 */ s32 x24;
    /* 0x28 */ s32 x28;
    /* 0x2C */ s32 x2C;
} CrowdSFX_UnkStruct;
/// Configuration for crowd/announcer reactions during matches.
///
/// Evidence for "Crowd" naming:
/// - Symbol names from UnclePunch's Training Mode map (Feb 2019)
/// - Functions at 0x80321900+ named CrowdSFXManager_* in that map
/// - Audio function 0x8002411C named lbAudio_PlayCrowdSFX
/// - Code triggers match wiki descriptions of crowd gasps/cheers
typedef struct CrowdConfig {
    /// Knockback thresholds for crowd gasp intensity (cat 1/2/3)
    /* 0x00 */ f32 kb_threshold_low;
    /* 0x04 */ f32 kb_threshold_mid;
    /* 0x08 */ f32 kb_threshold_high;
    /// Angle range and multiplier for crowd reaction modifier
    /* 0x0C */ f32 angle_min;
    /* 0x10 */ f32 angle_max;
    /* 0x14 */ f32 angle_mult;
    /* 0x18 */ f32 x18;
    /* 0x1C */ s32 x1C;
    /// Cheer/gasp timing limits
    /* 0x20 */ s32 cheer_limit;
    /* 0x24 */ s32 x24;
    /* 0x28 */ s32 max_gasp_count;
    /// Horizontal margin from blast zone for out-of-bounds check
    /* 0x2C */ f32 horiz_margin;
    /// Y-position thresholds for recovery gasp intensity (cat 3/2/1)
    /* 0x30 */ f32 recovery_y_high;
    /* 0x34 */ f32 recovery_y_mid;
    /* 0x38 */ f32 recovery_y_low;
    /// Fighter count threshold to trigger blast zone proximity gasp
    /* 0x3C */ s32 fighters_near_blastzone;
    /// Y-offset added to blast zone bottom for proximity check
    /* 0x40 */ f32 blastzone_y_offset;
} CrowdConfig;
/* 321900 */ void sfx_setupCrowdSFX(void);
/* 321950 */ void sfx_initCrowdSFX(CrowdSFX_UnkStruct*);
/* 3219AC */ void fn_803219AC(HSD_GObj*);
/* 321A00 */ void un_80321A00(HSD_GObj*);
/* 321AF4 */ void un_80321AF4(HSD_GObj* gobj);
/* 321BF8 */ void un_80321BF8(int);
/* 321C28 */ void un_80321C28(void);
/* 321C70 */ void un_80321C70(void);
/* 321CA4 */ void un_80321CA4(s32);
/* 321CE8 */ void un_80321CE8(void);
/* 321D30 */ void un_80321D30(u32, f32);
/* 321EBC */ bool un_80321EBC(u32, f32);
/* 32201C */ bool un_8032201C(u32, s32);
/* 322178 */ void un_80322178(int);
/* 322258 */ bool un_80322258(float);
/* 322298 */ s32 un_80322298(float);
/* 3222EC */ float un_803222EC(float mag, float angle);
/* 322314 */ void un_80322314(void);
/* 32233C */ void un_8032233C(u32, u32);
/* 3224DC */ bool un_803224DC(s32 spawn_id, f32 pos_x, f32 kb_mag);
/* 322598 */ int un_80322598(int, float);
/* 4A2F08 */ extern CrowdSFX_UnkStruct crowdsfx;
/* 4D6500 */ extern CrowdConfig* gCrowdConfig;
/* 4D7050 */ extern CrowdSFX_UnkStruct* crowdsfx_ptr;
#define MELEE_TY_INLINES_H
#ifdef M2C
#define GET_TOY(gobj) ((Toy*) HSD_GObjGetUserData((HSD_GObj*) gobj))
#else
#define GET_TOY(gobj) ((Toy*) HSD_GObjGetUserData(gobj))
#endif
#define GALE01_31830C
/* 31B460 */ void tyDisplay_Scene_OnEnter(void*);
/* 31B9A4 */ void tyDisplay_Scene_OnFrame(void);
/* 31B9DC */ TyDspEntry* tyDisplay_8031B9DC(s32 id);
/* 31BB34 */ s32 tyDisplay_8031BB34(s8);
/* 31BB94 */ char* tyDisplay_8031BB94(s8);
/* 31C2CC */ void tyDisplay_8031C2CC(void);
/* 31C2EC */ s32 tyDisplay_8031C2EC(void);
/* 31C354 */ s32 tyDisplay_8031C354(s32, s32*, s32, s32);
/* 31C454 */ s32 tyDisplay_8031C454(s32);
/* 31C5E4 */ HSD_JObj* tyDisplay_8031C5E4(s32);
/* 31C8B8 */ void tyDisplay_8031C8B8(void);
#define GALE01_314AA8
/* 31638C */ s32 _tyFigupon_8031638C(s16 arg0);
/* 317D80 */ void tyFigupon_Scene_OnEnter(M2C_UNK);
/* 3182D4 */ void tyFigupon_Scene_OnFrame(void);
#define GALE01_312834
/* 3147C4 */ void tyList_803147C4(void);
#define MELEE_VI_FORWARD_H
typedef struct ViCharaDesc ViCharaDesc;
#define MELEE_VI_TYPES_H
struct ViCharaDesc {
    /* 0x0 */ u8 p1_char_index;
    /* 0x1 */ u8 p1_costume_index;
    /* 0x2 */ u8 p2_char_index;
    /* 0x3 */ u8 p2_costume_index;
    /* 0x4 */ int spawn_count;
    /* 0x8 */ int unk;
};
#define GALE01_31C99C
#define INCLUDE_SYSDOLPHIN_BASELIB_DISPLAYFUNC_H
#define DOBJ_TRSP_SHIFT 1
#define JOBJ_TRSP_SHIFT 18
#define JOBJ_OPA 0x40000
#define JOBJ_XLU 0x80000
#define JOBJ_TEXEDGE 0x100000
void _HSD_DispForgetMemory(void* lo, void* hi);
void HSD_ZListInitAllocData(void);
void HSD_EraseRect(f32 top_res, f32 bottom_res, f32 left_res, f32 right_res,
                   f32 neg_z_val, int enable_color, int enable_alpha,
                   int enable_depth);
void HSD_JObjMakePositionMtx(HSD_JObj* jobj, Mtx vmtx, Mtx pmtx);
MtxPtr _HSD_mkEnvelopeModelNodeMtx(HSD_JObj* m, MtxPtr mtx);
void HSD_JObjDisp(HSD_JObj* jobj, MtxPtr, HSD_TrspMask flags, u32 rendermode);
void HSD_JObjDispSub(HSD_JObj* jobj, MtxPtr vmtx, MtxPtr pmtx,
                     HSD_TrspMask trsp_mask, u32 rendermode);
void HSD_JObjDispDObj(HSD_JObj* jobj, MtxPtr vmtx, HSD_TrspMask trsp_mask,
                      u32 rendermode);
HSD_JObj* HSD_JObjFindSkeleton(HSD_JObj* jobj);
void HSD_StateInitDirect(int vtxfmt, u32 rendermode);
void _HSD_ZListSort(void);
void _HSD_ZListDisp(void);
void _HSD_ZListClear(void);
void HSD_JObjSetSPtclCallback(void (*func)(s32, s32, s32, HSD_JObj*));
void HSD_SetEraseColor(u8 r, u8 g, u8 b, u8 a);
/* 31C99C */ char* viGetCharAnimByIndex(s32);
/* 31C9B4 */ void vi_8031C9B4(s32, s32);
/* 31CA04 */ void vi_8031CA04(HSD_GObj*);
/* 31CAAC */ void vi_8031CAAC(void);
static inline void vi_RunCamera(HSD_GObj* gobj, GXColor* erase_color, u64 prio)
{
    HSD_CObj* cobj = ((HSD_CObj*) HSD_GObjGetHSDObj(gobj));
    if (HSD_CObjSetCurrent(cobj)) {
        HSD_SetEraseColor(erase_color->r, erase_color->g, erase_color->b,
                          erase_color->a);
        HSD_CObjEraseScreen(((HSD_CObj*) HSD_GObjGetHSDObj(gobj)), 1, 0, 1);
        vi_8031CA04(gobj);
        gobj->gxlink_prios = prio;
        HSD_GObj_80390ED0(gobj, 0x7);
        HSD_CObjEndCurrent();
    }
}
#define GALE01_31CB00
/* 31CB00 */ void vi0102_8031CB00(int, int);
/* 31CC68 */ void vi0102_JObjCallback(HSD_GObj*);
/* 31CC8C */ void vi0102_CameraCallback(HSD_GObj* gobj, intptr_t unused);
/* 31CD20 */ void vi0102_8031CD20(HSD_GObj*);
/* 31CD94 */ void vi0102_Scene_OnEnter(void*);
/* 31D000 */ void vi0102_Scene_OnFrame(void);
/* 4D6F3C */ extern u8 un_804D6F3C[8];
#define MELEE_VI_0401_H
/* 31D020 */ void vi0401_8031D020(int, int);
/* 31D030 */ void un_8031D030(CharacterKind, int);
/* 31D288 */ void vi0401_Scene_OnEnter(void*);
/* 31D698 */ void vi0401_Scene_OnFrame(void);
/* 4D6F60 */ extern u8 un_804D6F60[8];
#define GALE01_31D6E4
/* 31D6E4 */ void un_8031D6E4(HSD_GObj*);
/* 31D708 */ void un_8031D708(void);
/* 31D80C */ void vi_8031D80C(HSD_GObj* gobj);
/* 31D858 */ void vi0402_Scene_OnEnter(void*);
/* 31D9C4 */ void vi0402_Scene_OnFrame(void);
#define GALE01_31D9F8
/* 31D9E4 */ void un_8031D9E4(int arg0, int arg1, int arg2);
/* 31D9F8 */ void un_8031D9F8(CharacterKind char_kind, int costume,
                              int spawn_mode, int spawn_count);
/* 31DC80 */ void vi_8031DC80(HSD_GObj*, intptr_t);
/* 31DD14 */ void fn_8031DD14(HSD_GObj* gobj);
/* 31DE58 */ void vi0501_Scene_OnEnter(void* arg);
/* 31E0F0 */ void vi0501_Scene_OnFrame(void);
/* 4D6F84 */ extern u8 un_804D6F84[8];
#define MELEE_VI_0502_H
/* 31E110 */ void un_8031E110(int arg0, int arg1, int arg2);
/* 31E124 */ void vi0502_8031E124(CharacterKind, int, int);
/* 31E304 */ void vi0502_8031E304(HSD_GObj*);
/* 31E3BC */ void vi0502_GObj_OnProc(HSD_GObj*);
/* 31E444 */ void vi0502_Scene_OnEnter(void* arg);
/* 31E6CC */ void vi0502_Scene_OnFrame(void);
/* 4D6FA8 */ extern u8 un_804D6FA8[8];
#define GALE01_31E6CC
/* 31E6EC */ void vi_8031E6EC(HSD_GObj*);
/* 31E800 */ void fn_8031E800(HSD_GObj* gobj);
/* 31E9B8 */ void un_8031E9B8(void);
/* 31EB38 */ void vi0601_RunFrame(HSD_GObj* gobj);
/* 31EBBC */ void vi0601_Scene_OnEnter(void* unused);
/* 31ED50 */ void vi0601_Scene_OnFrame(void);
#define MELEE_VI_0801_H
/* 31EE60 */ void vi0801_8031EE60(HSD_GObj*);
/* 31EE84 */ void vi0801_8031EE84(void);
/* 31EFE4 */ void vi0801_8031EFE4(HSD_GObj*);
/* 31F07C */ void vi0801_Scene_OnEnter(void* unused);
/* 31F274 */ void vi0801_Scene_OnFrame(void);
#define GALE01_31F294
/* 31F294 */ void un_8031F294(s32 char_index, s32 costume_index);
/* 31F548 */ void fn_8031F548(HSD_GObj* gobj);
/* 31F600 */ void fn_8031F600(HSD_GObj* gobj);
/* 31F714 */ void vi1101_Scene_OnEnter(void*);
/* 31F960 */ void vi1101_Scene_OnFrame(void);
extern u8 un_804D6FD8[8];
#define GALE01_31F990
/* 31F980 */ void un_8031F980(int arg0, int arg1);
/* 31F990 */ void un_8031F990(HSD_GObj*);
/* 31F9B4 */ void un_8031F9B4(HSD_GObj*);
/* 31F9D8 */ void un_8031F9D8(CharacterKind, int);
/* 31FAA8 */ void fn_8031FAA8(HSD_GObj* gobj);
/* 31FB90 */ void fn_8031FB90(HSD_GObj*, intptr_t);
/* 31FC30 */ void fn_8031FC30(HSD_GObj*);
/* 31FCBC */ void fn_8031FCBC(HSD_GObj*);
/* 31FD18 */ void vi1201v1_Scene_OnEnter(void* arg);
/* 320490 */ void vi1201v1_Scene_OnFrame(void);
/* 4D7004 */ extern u8 un_804D7004[8];
#define MELEE_VI_1201_V2_H
/* 3204B0 */ void un_803204B0(int, int);
/* 3204C0 */ void un_803204C0(HSD_GObj*);
/* 3204E4 */ void un_803204E4(HSD_GObj*);
/* 320508 */ void un_80320508(CharacterKind char_kind, int costume);
/* 3205F4 */ void un_803205F4(void);
/* 32074C */ void un_8032074C(HSD_GObj*);
/* 3207C4 */ void un_803207C4(void);
/* 3208F0 */ void un_803208F0(HSD_GObj*, intptr_t);
/* 320984 */ void un_80320984(HSD_GObj*);
/* 320A1C */ void fn_80320A1C(HSD_GObj*);
/* 320A40 */ void vi1201v2_Scene_OnEnter(void*);
/* 3210EC */ void vi1201v2_Scene_OnFrame(void);
/* 4D7038 */ extern u8 un_804D7038[8]; ///< @todo #ViCharaDesc?
#define MELEE_VI_VI1202_H
/* 32110C */ void un_8032110C(HSD_GObj*);
/* 321130 */ void un_80321130(HSD_GObj*);
/* 321154 */ void un_80321154(HSD_GObj*);
/* 321178 */ void un_80321178(void);
/* 321294 */ void vi1202_RunFrame(HSD_GObj*);
/* 321300 */ void vi1202_Scene_OnEnter(M2C_UNK);
/* 3218E0 */ void vi1202_Scene_OnFrame(void);
#define _AXDRIVER_H_
#define SMSTATE_MASK 0xC0000000
#define SMSTATE_ACTIVE 0x40000000
#define SMSTATE_SLEEP 0x80000000
typedef enum {
    AXDRIVER_AUX_OFF = 0,
    AXDRIVER_AUX_REVERB_HI = 1,
    AXDRIVER_AUX_REVERB_STD = 2,
    AXDRIVER_AUX_CHORUS = 3,
    AXDRIVER_AUX_DELAY = 4
} AXDriverAuxType;
struct HSD_SM {
    /* 00 */ HSD_SM* prev;
    /* 04 */ HSD_SM* next;
    /* 08 */ u32 flags;
    /* 0C */ int unk;
    /* 10 */ int vID;
    /* 14 */ u16 fid;
    /* 16 */ u16 x16;
    /* 18 */ u8 track;
    /* 19 */ u8 pri;
    /* 1A */ u8 x1A;
    /* 1B */ u8 volume;
    /* 1C */ u8 x1C;
    /* 1D */ u8 pan;
    /* 1E */ u8 x1E;
    /* 20 */ s16 x20;
    /* 22 */ s16 fadetime;
    /* 24 */ u8 x24[2];
    /* 26 */ u8 x26;
    /* 27 */ u8 x27;
    /* 28 */ u8 dp12flag;
    /* 29 */ u8 itdflag;
    /* 2A */ u16 x2A;
    /* 2C */ u32* cmd_stream;
    /* 30 */ int x30;
};
/* 38BB34 */ void* AXDriverAlloc(size_t size);
/* 38BB98 */ void AXDriverFree(void* ptr);
/* 38BB9C */ void AXDriverUnlink(HSD_SM* v, HSD_SM** head);
/* 38BC20 */ bool HSD_AudioSFXKeyOff(int vid);
/* 38BD6C */ void HSD_AudioSFXKeyOffAll(void);
/* 38BE64 */ void HSD_AudioSFXKeyOffTrack(int track);
/* 38BF6C */ void AXDriverExec(HSD_SM* v);
/* 38C678 */ u32 parseWait(u32 param_type, u32 param_value);
/* 38C6C0 */ void AXDriverInterp(HSD_SM* v);
/* 38CFF4 */ int HSD_AudioSFXStartParam(int sound_id, u8 volume, u8 pan,
                                        int track, int channel);
/* 38D2B4 */ bool HSD_AudioSFXSetPan(int vid, u8 pan);
/* 38D3B8 */ bool HSD_AudioSFXSetVolumeEx(s32 vid, u8 volume);
/* 38D4E4 */ bool HSD_AudioSFXSetPitchFid(s32 vid, s16 pitch);
/* 38D5B4 */ bool HSD_AudioSFXSetMix(s32 vid, s32 aux_bus, u8 send_level);
/* 38D914 */ bool HSD_AudioSFXSetMixGroup(s32 channel, s32 aux_bus,
                                          s8 send_level);
/* 38D9D8 */ bool HSD_AudioSFXCheck(int vid);
/* 38DA70 */ void AXDriver_8038DA70(const char* path, void (*callback)(void));
/* 38DCFC */ void AXDriver_8038DCFC(void);
/* 38DD30 */ int AXDriverSetupAux(int channel, AXDriverAuxType type,
                                  void* param);
/* 38E034 */ s32 HSD_AudioGetAuxHeapSize(AXDriverAuxType type, void* param);
/* 38E30C */ bool HSD_AudioSFXSetupAux(s32 channel, s32 type, void* param,
                                       u8* heap, size_t heap_size);
/* 38E37C */ bool HSD_AudioSFXGetDefaultAuxParam(AXDriverAuxType type,
                                                 void* param);
/* 38E498 */ void HSD_AudioInitMultiPStream(int voices, int priority,
                                            int sample_rate, int aram_size);
/* 38E5D4 */ int AXDriver_8038E5D4(void);
/* 38E5DC */ int AXDriver_8038E5DC(void);
/* 38E6C0 */ bool HSD_AudioPStreamPauseCh(int channel);
/* 38E844 */ bool HSD_AudioPStreamResumeCh(int channel);
/* 38E8EC */ bool HSD_AudioPStreamStartChParam(const char* path, u8 volume,
                                               int track);
/* 38E968 */ bool AXDriverStop(void);
/* 38E9A8 */ bool AXDriverPause(void);
/* 38E9E0 */ bool AXDriverResume(void);
/* 38EA18 */ bool AXDriverCheck(void);
#define SYSDOLPHIN_BASELIB_BYTECODE_H
float HSD_ByteCodeEval(u8* pc, const f32* args, s32 nb_args);
#define GALE01_3A949C
#define _DOLPHIN_CARD_H_
#define _DOLPHIN_DSP_H_
typedef void (*DSPCallback)(void* task);
typedef struct STRUCT_DSP_TASK {
    /*0x00*/ volatile u32 state;
    /*0x04*/ volatile u32 priority;
    /*0x08*/ volatile u32 flags;
    /*0x0C*/ u16* iram_mmem_addr;
    /*0x10*/ u32 iram_length;
    /*0x14*/ u32 iram_addr;
    /*0x18*/ u16* dram_mmem_addr;
    /*0x1C*/ u32 dram_length;
    /*0x20*/ u32 dram_addr;
    /*0x24*/ u16 dsp_init_vector;
    /*0x26*/ u16 dsp_resume_vector;
    /*0x28*/ DSPCallback init_cb;
    /*0x2C*/ DSPCallback res_cb;
    /*0x30*/ DSPCallback done_cb;
    /*0x34*/ DSPCallback req_cb;
    /*0x38*/ struct STRUCT_DSP_TASK* next;
    /*0x3C*/ struct STRUCT_DSP_TASK* prev;
    OSTime t_context;
    OSTime t_task;
} DSPTaskInfo;
u32 DSPCheckMailToDSP(void);
u32 DSPCheckMailFromDSP(void);
u32 DSPReadCPUToDSPMbox(void);
u32 DSPReadMailFromDSP(void);
void DSPSendMailToDSP(u32 mail);
void DSPAssertInt(void);
void DSPInit(void);
BOOL DSPCheckInit(void);
void DSPReset(void);
void DSPHalt(void);
void DSPUnhalt(void);
u32 DSPGetDMAStatus(void);
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
DSPTaskInfo* DSPCancelTask(DSPTaskInfo* task);
DSPTaskInfo* DSPAssertTask(DSPTaskInfo* task);
DSPTaskInfo* __DSPGetCurrentTask(void);
#define CARD_FILENAME_MAX 32
#define CARD_MAX_FILE 127
#define CARD_ICON_MAX 8
typedef void (*CARDCallback)(s32 chan, s32 result);
// todo: sort into headers
typedef struct CARDFileInfo {
    /*0x00*/ s32 chan;
    /*0x04*/ s32 fileNo;
    /*0x08*/ s32 offset;
    /*0x0C*/ s32 length;
    /*0x10*/ u16 iBlock;
} CARDFileInfo;
typedef struct CARDDir {
    /*0x00*/ u8 gameName[4];
    /*0x04*/ u8 company[2];
    /*0x06*/ u8 _padding0;
    /*0x07*/ u8 bannerFormat;
    /*0x08*/ u8 fileName[32];
    /*0x28*/ u32 time; // seconds since 01/01/2000 midnight
    /*0x2C*/ u32 iconAddr; // 0xffffffff if not used
    /*0x30*/ u16 iconFormat;
    /*0x32*/ u16 iconSpeed;
    /*0x34*/ u8 permission;
    u8 copyTimes;
    /*0x36*/ u16 startBlock;
    u16 length;
    u8 _padding1[2];
    u32 commentAddr; // 0xffffffff if not used
} CARDDir;
typedef struct CARDControl {
    /*0x00*/ BOOL attached;
    /*0x04*/ s32 result;
    /*0x08*/ u16 size;
    /*0x0A*/ u16 pageSize;
    /*0x0C*/ s32 sectorSize;
    /*0x10*/ u16 cBlock;
    /*0x12*/ u16 vendorID;
    /*0x14*/ s32 latency;
    /*0x18*/ u8 id[12];
    /*0x24*/ int mountStep;
    /*0x28*/ u32 scramble;
    /*0x2C*/ int formatStep;
    DSPTaskInfo task;
    void* workArea;
    /*0x84*/ CARDDir* currentDir;
    u16* currentFat;
    OSThreadQueue threadQueue;
    u8 cmd[9];
    s32 cmdlen;
    volatile u32 mode;
    int retry;
    int repeat;
    u32 addr;
    void* buffer;
    s32 xferred;
    u16 freeNo;
    u16 startBlock;
    /*0xC0*/ CARDFileInfo* fileInfo;
    CARDCallback extCallback;
    CARDCallback txCallback;
    CARDCallback exiCallback;
    CARDCallback apiCallback;
    CARDCallback xferCallback;
    CARDCallback eraseCallback;
    CARDCallback unlockCallback;
    OSAlarm alarm;
    int cid;
    const DVDDiskID* diskID;
} CARDControl;
typedef struct CARDDecParam {
    /* 0x00 */ u8* inputAddr;
    /* 0x04 */ u32 inputLength;
    /* 0x08 */ u32 aramAddr;
    /* 0x0C */ u8* outputAddr;
} CARDDecParam;
typedef struct CARDID {
    /* 0x000 */ u8 serial[32];
    /* 0x020 */ u16 deviceID;
    /* 0x022 */ u16 size;
    /* 0x024 */ u16 encode;
    /* 0x026 */ u8 padding[470];
    /* 0x1FC */ u16 checkSum;
    /* 0x1FE */ u16 checkSumInv;
} CARDID;
// IWYU pragma: begin_exports
#define _DOLPHIN_CARDBIOS_H_
void CARDInit(void);
s32 CARDGetResultCode(s32 chan);
s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed);
long CARDGetEncoding(long chan, unsigned short* encode);
long CARDGetMemSize(long chan, unsigned short* size);
s32 CARDGetSectorSize(s32 chan, u32* size);
#define _DOLPHIN_CARDCHECK_H_
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
long CARDCheck(long chan);
#define _DOLPHIN_CARDCREATE_H_
s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size,
                    CARDFileInfo* fileInfo, CARDCallback callback);
long CARDCreate(long chan, char* fileName, unsigned long size,
                struct CARDFileInfo* fileInfo);
#define _DOLPHIN_CARDDELETE_H_
s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback);
long CARDFastDelete(long chan, long fileNo);
s32 CARDDeleteAsync(s32 chan, char* fileName, CARDCallback callback);
s32 CARDDelete(s32 chan, char* fileName);
#define _DOLPHIN_CARDDIR_H_
typedef struct CARDDirCheck {
    /* 0x00 */ u8 padding0[56];
    /* 0x38 */ u16 padding1;
    /* 0x3A */ s16 checkCode;
    /* 0x3C */ u16 checkSum;
    /* 0x3E */ u16 checkSumInv;
} CARDDirCheck;
#define _DOLPHIN_CARDFORMAT_H_
long CARDFormat(long chan);
#define _DOLPHIN_CARDMOUNT_H_
BOOL CARDProbe(long chan);
s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize);
s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback,
                   CARDCallback attachCallback);
s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback);
s32 CARDUnmount(s32 chan);
#define _DOLPHIN_CARDOPEN_H_
s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo);
s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo);
s32 CARDClose(CARDFileInfo* fileInfo);
#define _DOLPHIN_CARDRDWR_H_
long CARDGetXferredBytes(long chan);
#define _DOLPHIN_CARDREAD_H_
s32 CARDReadAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset,
                  CARDCallback callback);
long CARDRead(struct CARDFileInfo* fileInfo, void* buf, long length,
              long offset);
s32 CARDCancel(CARDFileInfo* fileInfo);
#define _DOLPHIN_CARDRENAME_H_
s32 CARDRename(s32 chan, char* oldName, char* newName);
#define _DOLPHIN_CARDSTAT_H_
typedef struct CARDStat {
    /*0x00*/ char fileName[32];
    /*0x20*/ u32 length;
    /*0x24*/ u32 time;
    /*0x28*/ u8 gameName[4];
    /*0x2C*/ u8 company[2];
    /*0x2E*/ u8 bannerFormat;
    /*0x30*/ u32 iconAddr;
    /*0x34*/ u16 iconFormat;
    /*0x36*/ u16 iconSpeed;
    /*0x38*/ u32 commentAddr;
    /*0x3C*/ u32 offsetBanner;
    /*0x40*/ u32 offsetBannerTlut;
    /*0x44*/ u32 offsetIcon[8];
    /*0x64*/ u32 offsetIconTlut;
    /*0x68*/ u32 offsetData;
} CARDStat;
s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat);
s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat,
                       CARDCallback callback);
long CARDSetStatus(long chan, long fileNo, struct CARDStat* stat);
#define _DOLPHIN_CARDWRITE_H_
s32 CARDWriteAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset,
                   CARDCallback callback);
s32 CARDWrite(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset);
// IWYU pragma: end_exports
#define CARD_ATTR_PUBLIC 0x04u
#define CARD_ATTR_NO_COPY 0x08u
#define CARD_ATTR_NO_MOVE 0x10u
#define CARD_ATTR_GLOBAL 0x20u
#define CARD_ATTR_COMPANY 0x40u
#define CARD_FAT_AVAIL 0x0000u
#define CARD_FAT_CHECKSUM 0x0000u
#define CARD_FAT_CHECKSUMINV 0x0001u
#define CARD_FAT_CHECKCODE 0x0002u
#define CARD_FAT_FREEBLOCKS 0x0003u
#define CARD_FAT_LASTSLOT 0x0004u
#define CARD_WORKAREA_SIZE (5 * 8 * 1024)
#define CARD_SEG_SIZE 0x200u
#define CARD_PAGE_SIZE 0x80u
#define CARD_MAX_SIZE 0x01000000U
#define CARD_NUM_SYSTEM_BLOCK 5
#define CARD_SYSTEM_BLOCK_SIZE (8 * 1024u)
#define CARD_MAX_MOUNT_STEP (CARD_NUM_SYSTEM_BLOCK + 2)
#define CARD_STAT_SPEED_END 0
#define CARD_STAT_SPEED_FAST 1
#define CARD_STAT_SPEED_MIDDLE 2
#define CARD_STAT_SPEED_SLOW 3
#define CARD_STAT_SPEED_MASK 3
#define CARD_RESULT_UNLOCKED 1
#define CARD_RESULT_READY 0
#define CARD_RESULT_BUSY (-1)
#define CARD_RESULT_WRONGDEVICE (-2)
#define CARD_RESULT_NOCARD (-3)
#define CARD_RESULT_NOFILE (-4)
#define CARD_RESULT_IOERROR (-5)
#define CARD_RESULT_BROKEN (-6)
#define CARD_RESULT_EXIST (-7)
#define CARD_RESULT_NOENT (-8)
#define CARD_RESULT_INSSPACE (-9)
#define CARD_RESULT_NOPERM (-10)
#define CARD_RESULT_LIMIT (-11)
#define CARD_RESULT_NAMETOOLONG (-12)
#define CARD_RESULT_ENCODING (-13)
#define CARD_RESULT_CANCELED (-14)
#define CARD_RESULT_FATAL_ERROR (-128)
#define CARDIsValidBlockNo(card, blockNo) ((blockNo) >= CARD_NUM_SYSTEM_BLOCK && (blockNo) < (card)->cBlock)
#define CARD_READ_SIZE 512
#define CARD_COMMENT_SIZE 64
#define CARD_ICON_WIDTH 32
#define CARD_ICON_HEIGHT 32
#define CARD_BANNER_WIDTH 96
#define CARD_BANNER_HEIGHT 32
#define CARD_STAT_ICON_NONE 0
#define CARD_STAT_ICON_C8 1
#define CARD_STAT_ICON_RGB5A3 2
#define CARD_STAT_ICON_MASK 3
#define CARD_STAT_BANNER_NONE 0
#define CARD_STAT_BANNER_C8 1
#define CARD_STAT_BANNER_RGB5A3 2
#define CARD_STAT_BANNER_MASK 3
#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK)
#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK)
#define CARDGetDirCheck(dir) ((CARDDirCheck*) &(dir)[CARD_MAX_FILE])
void CARDInit(void);
s32 CARDGetResultCode(s32 chan);
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed);
s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName,
                    CARDCallback callback);
s32 CARDFormatAsync(s32 chan, CARDCallback callback);
typedef enum {
    HSD_CardResult_Ok,
    HSD_CardResult_UnkN1,
    HSD_CardResult_UnkN2,
    HSD_CardResult_UnkN3,
    HSD_CardResult_UnkN4,
    HSD_CardResult_UnkN261 = -261,
} HSD_CardResult;
typedef enum {
    CardBanner_None,
    CardBanner_Small, ///< Indexed color, including its palette.
    CardBanner_Large, ///< RGB5A3 color.
} CardBannerFormat;
#define HSD_CARD_MAX_FILES 9
typedef struct {
    u8 banner_format;
    u8 unused;
    u8 icon_format[8];
    u8 icon_speed[8];
} CardIconInfo;
;
/// One CARD file containing up to nine logical files. file_idx selects a
/// logical file; file_no is the SDK directory-entry number. Block positions
/// (phys) are relative to this CARD file, not hardware sector addresses.
typedef struct CardState {
    /* 0x00 */ u8* sector_buf;
    /* 0x04 */ s32 chan;
    /* 0x08 */ u32 sector_size;
    /* 0x0C */ CARDFileInfo file_info;
    /* 0x20 */ s32 file_no;
    /// Bytes of comment + banner + icons; the 0x30-byte digest follows.
    /* 0x24 */ u32 header_size;
    /* 0x28 */ int file_flags[9]; ///< @todo enum, not flags
    /* 0x4C */ int file_sizes[9];
    /* 0x70 */ u8* file_data[9];
    /* 0x94 */ u8 pad_94[0xDC];
    /// Block id stored in each physical block; negated = stale copy,
    /// -0x7FFF = free.
    /* 0x170 */ s32 block_ids[64];
    /* 0x270 */ s32 block_seqs[64];
    /* 0x370 */ char comment[64];
    /* 0x3B0 */ CardIconInfo icon_info;
    /* 0x3C4 */ CARDStat stat;
    /* 0x430 */ u8 digest[0x30];
    /// Physical blocks 1..num_blocks each fill a sector; block 0 shares the
    /// last header sector.
    /* 0x460 */ s32 num_blocks;
} CardState;
;
/// Completion callback: (file index or 0, result).
typedef void (*CardCallback)(int file_idx, int result);
/// Ring commands run by hsd_803AAA48; asynchronous CARD operations are
/// completed by hsd_803A949C. Names describe the observed operations; they
/// are not recovered original identifiers.
typedef enum CardCmdType {
    /* 0x00 */ CARD_CMD_NONE,
    /* 0x01 */ CARD_CMD_WRITE_BLOCK,
    /* 0x02 */ CARD_CMD_READ_BLOCK,
    /* 0x03 */ CARD_CMD_UNK_0x03, ///< No producer or handler identified.
    /* 0x04 */ CARD_CMD_CLEAR_BUF,
    /* 0x05 */ CARD_CMD_VERIFY_BLOCK,
    /// After queued verification, changes result 2 to 0 and otherwise sets
    /// result 1. Subsequent write commands skip their work when result is 1.
    /* 0x06 */ CARD_CMD_CHECK_VERIFIED,
    /* 0x07 */ CARD_CMD_CREATE_FILE,
    /* 0x08 */ CARD_CMD_SET_STATUS,
    /* 0x09 */ CARD_CMD_WRITE_HEADER,
    /* 0x0A */ CARD_CMD_VERIFY_HEADER,
    /* 0x0B */ CARD_CMD_READ_HEADER,
    /* 0x0C */ CARD_CMD_GET_STATUS,
    /// Reads one block's header into block_ids/block_seqs and merges its
    /// file table into file_flags/file_sizes.
    /* 0x0D */ CARD_CMD_SCAN_BLOCK,
    /// fn_803AD16C: mark stale copies negative; for file_flags 0 files also
    /// clear surplus copies and rebuild a missing or stale mirror.
    /* 0x0E */ CARD_CMD_REPAIR,
    /* 0x0F */ CARD_CMD_READ_SECTOR,
    /* 0x10 */ CARD_CMD_WRITE_SECTOR,
    /// Queues header validation and CARD_CMD_SCAN_BLOCK for each block,
    /// followed by CARD_CMD_REPAIR.
    /* 0x11 */ CARD_CMD_SCAN_FILE,
} CardCmdType;
/// CARD_CMD_WRITE_BLOCK: 0x20-byte block header followed by size bytes of
/// data; the remaining bytes in the block are cleared.
typedef struct CardWriteArgs {
    /* 0x00 */ s32 file_idx;
    /* 0x04 */ s32 phys;
    /* 0x08 */ s32 block_id;
    /* 0x0C */ s32 seq;
    /* 0x10 */ void* data;
    /* 0x14 */ s32 offset;
    /* 0x18 */ s32 size;
} CardWriteArgs;
/// CARD_CMD_READ_BLOCK, CARD_CMD_SCAN_BLOCK: phys 0 shares the last header
/// sector. For READ_BLOCK, a negative phys only loads sector_buf (no
/// checksum, no copy) so that the WRITE_HEADER after it keeps block 0's data.
typedef struct CardReadArgs {
    /* 0x00 */ s32 x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 phys;
    /* 0x0C */ s32 xC;
    /* 0x10 */ void* data;
    /* 0x14 */ s32 offset;
    /* 0x18 */ s32 size;
} CardReadArgs;
/// CARD_CMD_VERIFY_BLOCK: compare the block header and data against
/// block_id/seq/data.
typedef struct CardVerifyArgs {
    /* 0x00 */ s32 x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 block_id;
    /* 0x0C */ s32 seq;
    /* 0x10 */ void* data;
    /* 0x14 */ s32 offset;
    /* 0x18 */ s32 size;
} CardVerifyArgs;
/// CARD_CMD_READ_SECTOR, CARD_CMD_WRITE_SECTOR: transfer through sector_buf.
/// Reads verify the checksum; writes regenerate it and record block_id/seq
/// for phys.
typedef struct CardSectorArgs {
    /* 0x00 */ s32 x0;
    /* 0x04 */ s32 phys;
    /* 0x08 */ s32 block_id;
    /* 0x0C */ s32 seq;
    /* 0x10 */ void* x10;
    /* 0x14 */ s32 offset;
} CardSectorArgs;
/// CARD_CMD_CLEAR_BUF: memset(data, 0, size).
typedef struct CardClearArgs {
    /* 0x00 */ s32 x0;
    /* 0x04 */ s32 x4;
    /* 0x08 */ s32 x8;
    /* 0x0C */ s32 xC;
    /* 0x10 */ void* data;
    /* 0x14 */ s32 x14;
    /* 0x18 */ s32 size;
} CardClearArgs;
/// CARD_CMD_CREATE_FILE
typedef struct CardCreateArgs {
    /* 0x00 */ const char* filename;
    /* 0x04 */ s32 size;
} CardCreateArgs;
/// CARD_CMD_WRITE_HEADER, CARD_CMD_VERIFY_HEADER: header sector index and
/// the banner/icons buffers (the comment comes from CardState).
typedef struct CardHeaderArgs {
    /* 0x00 */ s32 index;
    /* 0x04 */ void* banner;
    /* 0x08 */ void* icons;
} CardHeaderArgs;
/// CARD_CMD_READ_HEADER: destination buffers, any of which may be NULL.
typedef struct CardReadHeaderArgs {
    /* 0x00 */ s32 index;
    /* 0x04 */ void* comment;
    /* 0x08 */ void* banner;
    /* 0x0C */ void* icons;
} CardReadHeaderArgs;
/// CARD_CMD_GET_STATUS
typedef struct CardGetStatusArgs {
    /* 0x00 */ s32 file_no;
} CardGetStatusArgs;
/// One entry of the command ring hsd_804D1148.
typedef struct CardCmd {
    /* 0x00 */ CardCmdType type;
    /* 0x04 */ CardState* state;
    union {
        /* 0x08 */ CardWriteArgs write;
        /* 0x08 */ CardReadArgs read;
        /* 0x08 */ CardVerifyArgs verify;
        /* 0x08 */ CardSectorArgs sector;
        /* 0x08 */ CardClearArgs clear;
        /* 0x08 */ CardCreateArgs create;
        /* 0x08 */ CardHeaderArgs header;
        /* 0x08 */ CardReadHeaderArgs read_header;
        /* 0x08 */ CardGetStatusArgs get_status;
    };
} CardCmd;
;
/// Requests queued by hsd_3B27.c and started by fn_803AA790.
typedef enum CardRequestType {
    /* 0x00 */ CARD_REQ_NONE,
    /* 0x01 */ CARD_REQ_READ_FILE,
    /* 0x02 */ CARD_REQ_WRITE_FILE,
    /* 0x03 */ CARD_REQ_CREATE_FILE,
    /// Rewrites the comment/banner/icons header if it changed, then
    /// CARDSetStatus.
    /* 0x04 */ CARD_REQ_SET_STATUS,
    /* 0x05 */ CARD_REQ_OPEN_FILE,
    /// Reads the header sectors back into the caller's buffers.
    /* 0x06 */ CARD_REQ_READ_HEADER,
} CardRequestType;
/// CARD_REQ_READ_FILE, CARD_REQ_WRITE_FILE
typedef struct CardFileReqArgs {
    /* 0x00 */ s32 file_idx;
    /* 0x04 */ u8* buf;
} CardFileReqArgs;
/// CARD_REQ_CREATE_FILE
typedef struct CardCreateReqArgs {
    /* 0x00 */ const char* filename;
    /* 0x04 */ void* banner;
    /* 0x08 */ void* icons;
} CardCreateReqArgs;
/// CARD_REQ_SET_STATUS
typedef struct CardStatusReqArgs {
    /* 0x00 */ s32 x0;
    /* 0x04 */ void* banner;
    /* 0x08 */ void* icons;
} CardStatusReqArgs;
/// CARD_REQ_OPEN_FILE
typedef struct CardOpenReqArgs {
    /* 0x00 */ s32 file_no;
} CardOpenReqArgs;
/// CARD_REQ_READ_HEADER: destination buffers, any of which may be NULL.
typedef struct CardHeaderReqArgs {
    /* 0x00 */ void* comment;
    /* 0x04 */ void* banner;
    /* 0x08 */ void* icons;
} CardHeaderReqArgs;
/// One entry of the request queue hsd_804D2348. The state and buffers are
/// borrowed; they must remain valid while the request is pending or active.
typedef struct CardRequest {
    /* 0x00 */ CardRequestType type;
    /* 0x04 */ CardState* state;
    union {
        /* 0x08 */ CardFileReqArgs file;
        /* 0x08 */ CardCreateReqArgs create;
        /* 0x08 */ CardStatusReqArgs status;
        /* 0x08 */ CardOpenReqArgs open;
        /* 0x08 */ CardHeaderReqArgs header;
    };
    /* 0x14 */ CardCallback callback;
} CardRequest;
;
/// What the queued commands complete; its callback runs when the ring
/// drains. Write suffixes refer to file_flags modes, not these tag values.
typedef enum CardActiveType {
    /* 0x00 */ CARD_ACTIVE_NONE,
    /* 0x01 */ CARD_ACTIVE_READ_FILE,
    /* 0x02 */ CARD_ACTIVE_WRITE_FILE, ///< file_flags 0
    /// Writes files with file_flags 1 or 2. On completion the older of two
    /// copies of each block is marked stale.
    /* 0x03 */ CARD_ACTIVE_WRITE_FILE_1_2,
    /* 0x04 */ CARD_ACTIVE_WRITE_FILE_3, ///< file_flags 3
    /// Set by fn_803ADE4C (open file) and fn_803B26CC (read header).
    /* 0x05 */ CARD_ACTIVE_OPEN_OR_READ_HEADER,
    /* 0x06 */ CARD_ACTIVE_CREATE_FILE,
    /* 0x07 */ CARD_ACTIVE_SET_STATUS,
} CardActiveType;
/// Drives queued requests and commands until idle or waiting for CARD I/O.
/// Async CARD calls start with interrupts disabled; the busy flag is set
/// after the call returns, before interrupts are restored. CARD completion
/// callbacks must therefore not run inline from those calls.
/* 3AAA48 */ void hsd_803AAA48(void);
/* 3AC340 */ int hsd_803AC340(CardIconInfo* icon_info);
/* 3AC3E0 */ void hsd_803AC3E0(CardState* state, int file_idx, int file_size,
                               int file_flags, u8* data);
/* 3B2374 */ void hsd_803B2374(void);
/* 3B24E4 */ void hsd_803B24E4(CardState* state, int chan, int sector_size,
                               void* work_buf);
/* 3B2550 */ int hsd_803B2550(CardState* state, const char* filename,
                              CardCallback callback);
/* 3B2674 */ int hsd_803B2674(CardState* state);
/// Queues a header read into the non-NULL destination buffers. Returns 0
/// when queued, not when complete; a negative return does not queue a
/// request or invoke the callback. The same return contract applies to
/// the create, status, read and write request functions below.
/* 3B27F4 */ int hsd_803B27F4(CardState* state, void* comment, void* banner,
                              void* icons, CardCallback callback);
/// Queues file creation. Copies 0x40 bytes from comment into state even if
/// the queue is full; filename, banner and icons are borrowed.
/* 3B286C */ int hsd_803B286C(CardState* state, const char* filename,
                              const char* comment, void* banner, void* icons,
                              CardCallback callback);
/// Queues a header/status update. Copies 0x40 bytes from comment into state
/// even if the queue is full; banner and icons are borrowed.
/* 3B2928 */ int hsd_803B2928(CardState* state, const char* comment,
                              void* banner, void* icons,
                              CardCallback callback);
/// Queues a logical-file read into the borrowed destination buffer.
/* 3B29D8 */ int hsd_803B29D8(CardState* state, int file_idx, u8* buf,
                              CardCallback callback);
/// Queues a logical-file write from the borrowed source buffer.
/* 3B2A4C */ int hsd_803B2A4C(CardState* state, int file_idx, u8* buf,
                              CardCallback callback);
/* 3B2ADC */ int hsd_SetCardIconInfo(CardState* state,
                                     CardIconInfo* icon_info);
#define SYSDOLPHIN_BASELIB_CRYPT_H
/// Simple additive checksum using the MD5 intial state. Not the MD5 algorithm.
void HSD_Checksum(u8* src, int len, void* dest);
/// @returns 0 if success, -1 if error
int HSD_Encrypt(u8* data, int len);
/// @returns 0 if success, -1 if error
int HSD_Decrypt(u8* data, int len);
#define SYSDOLPHIN_DEBCONSOLE_MAIN_H
/* 394950 */ void hsd_80394950(OSContext*);
/* 394A48 */ void Exception_ReportStackTrace(OSContext*, int);
/* 394B18 */ void Exception_ReportCodeline(u16, int, int, OSContext*);
/* 394DF4 */ void fn_80394DF4(void*);
/* 394F48 */ void hsd_80394F48(void*);
/* 395550 */ s32 hsd_80395550(void*);
/* 395644 */ void hsd_80395644(void);
/* 3956D8 */ s32 hsd_803956D8(void*);
/* 3957C0 */ void hsd_803957C0(void* input);
/* 395970 */ s32 hsd_80395970(void);
/* 395A78 */ bool hsd_80395A78(void);
/* 395D88 */ bool hsd_80395D88(void*);
/* 396130 */ void hsd_80396130(void);
/* 396188 */ void hsd_80396188(void);
/* 3962A8 */ s32 hsd_803962A8(void*);
/* 3966A0 */ s32 hsd_803966A0(void*);
/* 396868 */ void hsd_80396868(void);
/* 396884 */ void hsd_80396884(void);
/* 396A20 */ s32 hsd_80396A20(void*);
/* 396C78 */ s32 hsd_80396C78(void*);
/* 396E40 */ void hsd_80396E40(int);
/* 3970D8 */ void fn_803970D8(int);
/* 3970DC */ void fn_803970DC(int);
/* 3970E0 */ void fn_803970E0(int);
/* 3970E4 */ void fn_803970E4(int);
/* 3970E8 */ void fn_803970E8(int);
/* 3970EC */ void fn_803970EC(int);
/* 3970F0 */ void fn_803970F0(int);
/* 3970F4 */ void fn_803970F4(int);
/* 3970F8 */ void fn_803970F8(int);
/* 3970FC */ void fn_803970FC(int);
/* 397100 */ void fn_80397100(int);
/* 397104 */ void fn_80397104(int);
/* 397108 */ void fn_80397108(int);
/* 397110 */ void hsd_80397110(void);
/* 397374 */ s32 fn_80397374(void*);
/* 397520 */ void hsd_80397520(void*);
/* 3975D4 */ void hsd_803975D4(void);
/* 397814 */ void* fn_80397814(void*);
/* 397DA4 */ void hsd_80397DA4(OSContext*);
/* 397DF4 */ void Exception_StoreDebugLevel(int);
/* 397DFC */ void hsd_80397DFC(u32 size);
#define SYSDOLPHIN_BASELIB_DEVCOM_H
bool HSD_DevComIsBusy(int idx);
void HSD_DevComARAMWakeUp(void);
void HSD_DevComDVDWakeUp(void);
int HSD_DevComRequest(int file, uintptr_t src, uintptr_t dest, size_t size,
                      int type, int pri, HSD_DevComCallback callback,
                      uintptr_t args);
int HSD_DevComCancelEx(int dcReq, u32 flags, HSD_DevComCallback cb,
                       uintptr_t args);
#define SYSDOLPHIN_BASELIB_FOG_H
struct HSD_FogAdj {
    /* 0x00 */ HSD_Obj parent;
    /* 0x08 */ s16 center;
    /* 0x0A */ u16 width;
    /* 0x0C */ Mtx44 mtx;
    /* 0x3C */ HSD_AObj* aobj;
};
struct HSD_Fog {
    /* 0x00 */ HSD_Obj parent;
    /* 0x08 */ u32 type;
    /* 0x0C */ HSD_FogAdj* fog_adj;
    /* 0x10 */ f32 start;
    /* 0x14 */ f32 end;
    /* 0x18 */ GXColor color;
    /* 0x1C */ HSD_AObj* aobj;
};
struct HSD_FogAdjDesc {
    /* 0x00 */ u16 center;
    /* 0x02 */ u16 width;
    /* 0x04 */ Mtx44 mtx;
};
struct HSD_FogInfo {
    HSD_ObjInfo parent;
};
struct HSD_FogAdjInfo {
    HSD_ObjInfo parent;
};
struct HSD_FogDesc {
    /* 0x00 */ u32 type;
    /* 0x04 */ HSD_FogAdjDesc* fogadjdesc;
    /* 0x08 */ f32 start;
    /* 0x0C */ f32 end;
    /* 0x10 */ GXColor color;
};
void HSD_FogSet(HSD_Fog*);
HSD_FogAdj* HSD_FogAdjLoadDesc(HSD_FogAdjDesc*);
void HSD_FogInit(HSD_Fog*, HSD_FogDesc*);
void HSD_FogAdjInit(HSD_FogAdj*, HSD_FogAdjDesc*);
void HSD_FogReqAnimByFlags(HSD_Fog*, u32 flags, f32 frame);
void FogUpdateFunc(void* obj, enum_t type, HSD_ObjData* fval);
HSD_Fog* HSD_FogLoadDesc(HSD_FogDesc* desc);
HSD_Fog* HSD_FogAlloc(void);
HSD_FogAdj* HSD_FogAdjAlloc(void);
void HSD_Fog_8037DE7C(HSD_Fog* fog, HSD_AObjDesc* desc);
void HSD_FogReqAnim(HSD_Fog* fog, f32 frame);
void HSD_FogInterpretAnim(HSD_Fog* fog);
#define SYSDOLPHIN_GENERATOR_H
struct hsd_804D0F60_t {
    HSD_ObjAllocData alloc_data;
    M2C_UNK pad;
};
/* 39D0A0 */ void hsd_8039D0A0(HSD_Generator*);
/* 39D1E4 */ void hsd_8039D1E4(HSD_Generator*, void*);
/* 39D1EC */ u16 hsd_8039D1EC(void);
/* 39D214 */ void hsd_8039D214(HSD_Generator*);
/* 39D354 */ void hsd_8039D354(u32);
/* 39D3AC */ HSD_Generator* hsd_8039D3AC(HSD_Generator*, HSD_Generator*);
/* 39D4DC */ void hsd_8039D4DC(HSD_Generator*);
/* 39D580 */ void hsd_8039D580(HSD_JObj*);
/* 39D5DC */ void hsd_8039D5DC(HSD_JObj*);
/* 39D688 */ void hsd_8039D688(HSD_JObj*, f32**, s32);
/* 39D71C */ void hsd_8039D71C(HSD_Generator*);
/* 39D9C8 */ HSD_Generator* hsd_8039D9C8(void);
/* 39DAD4 */ f32 hsd_8039DAD4(HSD_Generator*);
/* 39EE24 */ void hsd_8039EE24(u32);
/* 39EFAC */ HSD_Generator* hsd_8039EFAC(s32 linkNo, s32 bank, s32 gfx_id,
                                         HSD_JObj*);
/* 39F05C */ HSD_Generator* hsd_8039F05C(s32 linkNo, s32 bank, s32 idx);
/* 39F6CC */ HSD_Generator* hsd_8039F6CC(s32 linkNo, s32 bank, s32 gfx_id,
                                         HSD_JObj*);
/* 4D0F60 */ extern struct hsd_804D0F60_t hsd_804D0F60;
/* 4D0F90 */ extern struct hsd_804D0F60_t hsd_804D0F90;
/* 4D78FC */ extern HSD_Generator* hsd_804D78FC;
/* 4D7900 */ extern void (*hsd_804D7900)(HSD_Generator*);
#define SYSDOLPHIN_BASELIB_GOBJPLINK_H
void HSD_GObjFree(HSD_GObj*);
void HSD_GObjPLink_ChangeGObjPri_Unk(u32 arg0, HSD_GObj* gobj, u8 p_link,
                                     u8 priority, HSD_GObj* position);
void GObj_PReorder(HSD_GObj* gobj, HSD_GObj* hiprio_gobj);
HSD_GObj* CreateGObj(s32 where, u16 classifier, u8 p_link, u8 priority,
                     HSD_GObj* position);
#define _gobjuserdata_h_
#define HSD_GOBJ_USER_DATA_NONE (u8) - 1
void GObj_InitUserData(HSD_GObj* gobj, u8 kind, void (*remove_func)(void*),
                       void* data);
void GObj_RemoveUserData(HSD_GObj* gobj);
#define _hash_h_
#define hash(s) (s % 0x65)
struct HSD_HashEntry {
    HSD_HashEntry* next;
    void* key;
    void* value;
};
typedef struct _HSD_HashClass {
    struct _HSD_HashClassInfo* class_info;
} HSD_HashClass;
typedef struct _HSD_HashClassInfo {
    HSD_ClassInfo parent;
    int (*getidx)(HSD_Hash* hash);
    bool (*keycheck)(HSD_Hash* hash, void* table_key, void* key);
} HSD_HashClassInfo;
struct HSD_Hash {
    HSD_HashClass parent;
    HSD_HashEntry** table;
    u32 table_size;
};
HSD_HashEntry* HashSearchEntry(HSD_Hash*, int, void*, HSD_HashEntry**);
void* HSD_HashSearch(HSD_Hash*, void*, int*);
#define HSD_3915_H
/// One cell of the debug console's ASCII font: 14 rows of 4 bytes, 2 bits per
/// pixel, 12 of the 16 pixels used.
typedef struct DebugFontGlyph {
    /*0x00*/ u8 data[56];
} DebugFontGlyph;
/* 391580 */ void DrawRectangle(float x, float y, float w, float h,
                                GXColor* color);
/* 391664 */ f32 DrawASCII(int chr, float x, float y, GXColor* color);
/* 391A04 */ void hsd_80391A04(float scale_x, float scale_y, int line_width);
/* 391AC8 */ s32 hsd_80391AC8(char*, GXColor*, f32, f32);
/* 391E18 */ void hsd_80391E18(const u8* list, f32 x1, f32 y1, f32 x2, f32 y2);
/* 391F28 */ void hsd_80391F28(GXColor*, f32, f32, f32, f32, f32);
/* 392194 */ void hsd_80392194(u8* dst, s32 flags, s32 unused1, s32 unused2,
                               const u8* src);
/* 3921B8 */ void hsd_803921B8(void*, s32, s32, s32, s32, s32, s32, void*);
/* 3922FC */ void hsd_803922FC(void*, s32, s32, s32, s32, s32, s32, s32,
                               void*);
/* 4088B8 */ extern DebugFontGlyph HSD_DebugFontAtlas[];
#define HSD_3924_H
/* 392474 */ void hsd_80392474(void);
/* 392480 */ HSD_SList* fn_80392480(Event event, int priority);
/* 392528 */ void hsd_80392528(Event);
/* 39254C */ void hsd_8039254C(void);
#define HSD_392A_H
/* 392934 */ void fn_80392934(void);
/* 392A08 */ void fn_80392A08(int, int, int);
/* 392A3C */ void* fn_80392A3C(void);
#define HSD_392C_H
/* 392CCC */ s32 fn_80392CCC(s32);
/* 392CD8 */ u8 fn_80392CD8(char*);
/* 392E2C */ void fn_80392E2C(s32);
/* 392E80 */ int hsd_80392E80(void);
/* 3931A4 */ bool hsd_803931A4(s32);
#define HSD_3933_H
/// One 0x20-byte host-IO packet, as exchanged with the MCC server.
typedef struct _MCCPacket {
    /* 0x0 */ s32 x0;
    /* 0x4 */ u8 x4_b7 : 1;
    /* 0x4 */ u8 _x4_pad : 7;
    /* 0x5 */ u8 command;
    /* 0x6 */ u16 x6;
    /* 0x8 */ u8 payload[0x18];
} MCCPacket;
;
/**
 * A packet buffer: one MCC block plus 8 bytes the transfers never touch. The
 * buffers are 32-byte aligned, like the MCC blocks they are copied to and
 * from.
 */
typedef struct MccPacketBuffer {
    /* 0x00 */ MCCPacket packet;
    /* 0x20 */ u8 pad20[8];
} MccPacketBuffer;
;
/// Which MCC channels are open, indexed by channel.
/* 4CF740 */ extern s32 hsd_804CF740[16];
/* 3932D0 */ void fn_803932D0(s32, u32, s32);
/* 393328 */ s32 hsd_80393328(void);
/* 393440 */ void hsd_80393440(MCCPacket*, MCCPacket*);
/* 393840 */ void hsd_80393840(MCCPacket*, MCCPacket*);
/* 393844 */ void hsd_80393844(void);
/// Checks whether USB server is set up.
/* 393A04 */ bool hsd_80393A04(void);
/* 393A54 */ void hsd_80393A54(int);
/* 393A5C */ int hsd_80393A5C(char*, void*, int);
#define HSD_393C_H
/* 393C14 */ void fn_80393C14(const u8* buf, size_t);
/* 393D2C */ s32 hsd_80393D2C(s32);
/* 393DA0 */ void hsd_80393DA0(u8*, size_t);
/* 393E34 */ void hsd_80393E34(s32* col_out, s32* row_out);
/* 393E68 */ void hsd_80393E68(u32, u32);
/* 393EF4 */ void hsd_80393EF4(int, int);
/* 394068 */ u8 hsd_80394068(void);
/* 394128 */ u8 hsd_80394128(s32, s32);
/* 3941E8 */ s32 hsd_803941E8(void*, void*);
/* 394314 */ void hsd_80394314(void);
/* 394434 */ void hsd_80394434(void*);
/* 394544 */ void hsd_80394544(s32, s32, u32, u32, s32, s32, s32, s32, s32,
                               s32, s32, void*);
/* 394668 */ void hsd_80394668(void);
#define SYSDOLPHIN_BASELIB_HSD_397E_H
/* 397E0C */ s32 baselib_mfspr(s32);
#define SYSDOLPHIN_BASELIB_HSD_3982_H
/* 3982E4 */ void fn_803982E4(HSD_GObj*, intptr_t);
/* 398310 */ HSD_GObj* hsd_80398310(u16, u8, u8, u32);
#define SYSDOLPHIN_BASELIB_BASELIB_UNKNOWN_008_H
void hsd_803B3344(u8 byte);
void hsd_803B3398(void* src, size_t size);
#define GALE01_3B3408
typedef struct JpegWork {
    jmp_buf buf;
    s32 x118[0x100];
    s32 x518[0x40];
    s32 x618[0x40];
    s32 coef[0x40];
    s32 prev_dc[3];
} JpegWork;
/* 3B3408 */ void hsd_803B3408(u8*, s32, s32, s32, s32);
/* 3B3CD8 */ void hsd_803B3CD8(s32);
/* 3B46D4 */ void hsd_803B46D4(void);
/* 3B4A2C */ void hsd_803B4A2C(void);
/* 3B4D64 */ void hsd_803B4D64(u32, u32);
/* 3B51C8 */ s32 hsd_803B51C8(s32, s32, s32, char*, s32);
/* 3B5C2C */ void hsd_803B5C2C(s32);
/* 3B5C4C */ s32 hsd_803B5C4C(s32);
/* 3B5D70 */ s32 hsd_803B5D70(s32, s32);
/* 3B5EA0 */ void hsd_803B5EA0(s32);
/* 3B6BE4 */ s32 hsd_803B6BE4(char*, s32, void*);
/* 4D79A0 */ extern u8* hsd_804D79A0;
/* 4D79A4 */ extern u8* hsd_804D79A4;
/* 4D79A8 */ extern s32 hsd_804D79A8;
/* 4D79AC */ extern s32 hsd_804D79AC;
/* 4D79B0 */ extern u8 hsd_804D79B0[8];
/* 4D79B8 */ extern u8* hsd_804D79B8;
/* 4D79BC */ extern u8* hsd_804D79BC;
/* 4D79C0 */ extern s32 hsd_804D79C0;
/* 4D79C4 */ extern s32 hsd_804D79C4;
/* 4D79C8 */ extern u8 hsd_804D79C8;
#define _id_h_
typedef struct _IDEntry {
    struct _IDEntry* next;
    HSD_IDKey id;
    void* data;
} IDEntry;
typedef struct _HSD_IDTable {
    struct _IDEntry* table[101];
} HSD_IDTable;
HSD_ObjAllocData* HSD_IDGetAllocData(void);
void HSD_IDInitAllocData(void);
void HSD_IDSetup(void);
void HSD_IDInsertToTable(HSD_IDTable* table, HSD_IDKey id, void* data);
void HSD_IDRemoveByIDFromTable(HSD_IDTable* table, HSD_IDKey id);
void* HSD_IDGetDataFromTable(HSD_IDTable* table, HSD_IDKey id, s32* success);
void _HSD_IDForgetMemory(void* low, void* high);
static inline void* HSD_IDGetData(HSD_IDKey id, s32* success)
{
    return HSD_IDGetDataFromTable(0L, id, success);
}
#define _initialize_h_
#define _video_h_
#define HSD_VI_XFB_MAX 3
#define HSD_ANTIALIAS_OVERLAP 4
#define VI_DISPLAY_PIX_SZ 2
#define HSD_ANTIALIAS_GARBAGE_SIZE (640 * HSD_ANTIALIAS_OVERLAP * VI_DISPLAY_PIX_SZ)
typedef void (*HSD_VIGXDrawDoneCallback)(int);
typedef void (*HSD_VIRetraceCallback)(u32);
typedef enum _HSD_VIXFBDrawDispStatus {
    HSD_VI_XFB_NONE,
    HSD_VI_XFB_NOUSE,
    HSD_VI_XFB_FREE,
    HSD_VI_XFB_DRAWING,
    HSD_VI_XFB_WAITDONE,
    HSD_VI_XFB_DRAWDONE,
    HSD_VI_XFB_NEXT,
    HSD_VI_XFB_DISPLAY,
    HSD_VI_XFB_COPYEFB,
    HSD_VI_XFB_TERMINATE
} HSD_VIXFBDrawDispStatus;
typedef enum _HSD_VIEFBDrawDispStatus {
    HSD_VI_EFB_FREE,
    HSD_VI_EFB_DRAWDONE,
    HSD_VI_EFB_TERMINATE
} HSD_VIEFBDrawDispStatus;
typedef enum _HSD_RenderPass {
    HSD_RP_SCREEN,
    HSD_RP_TOPHALF,
    HSD_RP_BOTTOMHALF,
    HSD_RP_OFFSCREEN,
    HSD_RP_NUM
} HSD_RenderPass;
typedef struct _HSD_VIStatus {
    GXRenderModeObj rmode;
    s32 black;
    u8 vf;
    GXGamma gamma;
    GXColor clear_clr;
    u32 clear_z;
    u8 update_clr;
    u8 update_alpha;
    u8 update_z;
} HSD_VIStatus;
typedef struct _current {
    struct _HSD_VIStatus vi;
    u8 chg_flag;
} Current;
typedef struct _XFB {
    void* buffer;
    HSD_VIXFBDrawDispStatus status;
    Current vi_all;
} XFB;
typedef struct _HSD_VIInfo {
    Current current;
    XFB xfb[3];
    struct _EFB {
        HSD_VIEFBDrawDispStatus status;
        Current vi_all;
    } efb;
    s32 nb_xfb;
    HSD_VIRetraceCallback pre_cb;
    HSD_VIRetraceCallback post_cb;
    struct drawdone {
        s32 waiting;
        s32 arg;
        HSD_VIGXDrawDoneCallback cb;
    } drawdone;
    struct perf {
        s32 frame_period;
        s32 frame_renew;
    } perf;
} HSD_VIInfo;
extern HSD_VIInfo HSD_VIData;
void HSD_VIInit(struct _HSD_VIStatus* vi_status, void* xfb0, void* xfb1,
                void* xfb2);
void HSD_VISetConfigure(GXRenderModeObj* rmode);
void HSD_VISetBlack(bool);
HSD_VIRetraceCallback
HSD_VISetUserPreRetraceCallback(HSD_VIRetraceCallback cb);
HSD_VIRetraceCallback
HSD_VISetUserPostRetraceCallback(HSD_VIRetraceCallback cb);
HSD_VIGXDrawDoneCallback
HSD_VISetUserGXDrawDoneCallback(HSD_VIGXDrawDoneCallback cb);
int HSD_VIGetXFBDrawEnable(void);
int HSD_VIWaitXFBDrawEnable(void);
void HSD_VICopyEFB2XFBPtr(HSD_VIStatus* vi, void* buffer,
                          HSD_RenderPass rpass);
void HSD_VIGXDrawDone(int arg);
void HSD_VIGXSetDrawDone(int arg);
void HSD_VISetXFBWaitDone(int idx);
void HSD_VICopyXFBAsync(HSD_RenderPass rpass);
void HSD_VIDrawDoneXFB(int idx);
void HSD_VIWaitXFBFlush(void);
void HSD_VIWaitXFBFlushNoYield(void);
int HSD_VIGetXFBLastDrawDone(void);
static inline int HSD_VIGetNbXFB(void)
{
    return HSD_VIData.nb_xfb;
}
static inline void* HSD_VIGetXFBPtr(int idx)
{
    return HSD_VIData.xfb[idx].buffer;
}
static inline HSD_VIStatus* HSD_VIGetVIStatus(void)
{
    return &HSD_VIData.current.vi;
}
static inline GXRenderModeObj* HSD_VIGetRenderMode(void)
{
    return &HSD_VIData.current.vi.rmode;
}
#define HSD_DEFAULT_FIFO_SIZE (256 * 1024)
#define HSD_DEFAULT_XFB_MAX_NUM 2
#define HSD_DEFAULT_AUDIO_SIZE (512 * 1024)
typedef struct _HSD_MemReport {
    u32 total;
    u32 system;
    u32 xfb;
    u32 gxfifo;
    u32 heap;
    u8 x14_pad[0x2C - 0x14];
} HSD_MemReport;
typedef enum _HSD_InitParam {
    HSD_INIT_FIFO_SIZE,
    HSD_INIT_XFB_MAX_NUM,
    HSD_INIT_HEAP_MAX_NUM,
    HSD_INIT_AUDIO_HEAP_SIZE,
    HSD_INIT_RENDER_MODE_OBJ
} HSD_InitParam;
void HSD_InitComponent(void);
void HSD_GXSetFifoObj(GXFifoObj* fifo);
void** HSD_AllocateXFB(s32 nbuffer, GXRenderModeObj* rm);
GXFifoObj* HSD_AllocateFifo(u32 size);
OSHeapHandle HSD_GetHeap(void);
void HSD_SetHeap(OSHeapHandle handle);
void HSD_GetNextArena(void** lo, void** hi);
OSHeapHandle HSD_CreateMainHeap(void* lo, void* hi);
HSD_RenderPass HSD_GetCurrentRenderPass(void);
void HSD_StartRender(HSD_RenderPass pass);
void HSD_Init_803755A8(void);
void HSD_ObjDumpStat(void);
bool HSD_SetInitParameter(HSD_InitParam param, ...);
#define _leak_h_
int HSD_Leak_80387DF8(int);
#define _memory_h_
void HSD_Free(void* ptr);
void* HSD_MemAlloc(ssize_t size);
#define GALE01_391580
#define SYSDOLPHIN_BASELIB_PSSTRUCTS_H
struct HSD_Fog;
enum HSD_ParticleKind {
    Tornado = 1 << 2,
    TexEdge = 1 << 3,
    ComTLUT = 1 << 4,
    MirrorS = 1 << 5,
    MirrorT = 1 << 6,
    PrimEnv = 1 << 7,
    TexInterpNear = 1 << 9,
    DispTexture = 1 << 10,
    TexFlipS = 1 << 18,
    TexFlipT = 1 << 19,
    Trail = 1 << 20,
    DirVec = 1 << 21,
    DispFog = 1 << 24,
    NoZComp = 1 << 28,
    DispPoint = 1 << 30,
    DispLighting = 1 << 31
};
/* size: 0x1C */
typedef struct _HSD_PSTexGroup {
    u32 num; /* 0x0 */
    u32 fmt; /* 0x4 */
    u32 tlutfmt; /* 0x8 */
    u32 width; /* 0xC */
    u32 height; /* 0x10 */
    u16 palnum; /* 0x14 */
    u16 palflag; /* 0x16 */
    u8* texTable[1]; /* 0x18 */
} HSD_PSTexGroup;
/* size: 0x8 */
typedef struct _HSD_PSFormGroup {
    u32 num; /* 0x0 */
    u8* formTable[1]; /* 0x4 */
} HSD_PSFormGroup;
/* size: 0x40 */
typedef struct _HSD_PSCmdList {
    u16 type; /* 0x0 */
    u16 texGroup; /* 0x2 */
    u16 genLife; /* 0x4 */
    u16 life; /* 0x6 */
    u32 kind; /* 0x8 */
    float grav; /* 0xC */
    float fric; /* 0x10 */
    float vx; /* 0x14 */
    float vy; /* 0x18 */
    float vz; /* 0x1C */
    float radius; /* 0x20 */
    float angle; /* 0x24 */
    float random; /* 0x28 */
    float size; /* 0x2C */
    float param1; /* 0x30 */
    float param2; /* 0x34 */
    float param3; /* 0x38 */
    u8 cmdList[1]; /* 0x3C */
} HSD_PSCmdList;
enum PS_AppStatus {
    PS_APPSTATUS_ONCE = 1,
    PS_APPSTATUS_STILL = 2,
};
struct HSD_psAppSRT {
    struct HSD_psAppSRT* next; /* 0x0 */
    struct HSD_Generator* gp; /* 0x4 */
    Vec3 translate; /* 0x8 */
    Quaternion rot; /* 0x14 */
    Vec3 scale; /* 0x24 */
    u8 status; /* 0x30 */
    u8 frameNum; /* 0x31 */
    u16 usedCount; /* 0x32 */
    Mtx mmtx; /* 0x34 */
    float ssx; /* 0x64 */
    float ssy; /* 0x68 */
    f32 x6C; /* 0x6C */
    f32 x70; /* 0x70 */
    f32 x74; /* 0x74 */
    f32 x78; /* 0x78 */
    f32 x7C; /* 0x7C */
    f32 x80; /* 0x80 */
    f32 x84; /* 0x84 */
    f32 x88; /* 0x88 */
    f32 x8C; /* 0x8C */
    f32 x90; /* 0x90 */
    f32 x94; /* 0x94 */
    f32 x98; /* 0x98 */
    void (*freefunc)(struct HSD_psAppSRT* appSrt); /* 0x9C */
    u16 idnum; /* 0xA0 */
    u8 xA2; /* 0xA2 */
};
/* size: 0x98 */
struct HSD_Particle {
    HSD_Particle* next; // 0x00
    u32 kind; // 0x04
    u8 bank; // 0x08
    u8 texGroup; // 0x09
    u8 poseNum; // 0x0A
    u8 palNum; // 0x0B
    u16 sizeCount; // 0x0C
    u16 primColCount; // 0x0E
    u16 envColCount; // 0x10
    GXColor primCol; // 0x12
    GXColor envCol; // 0x16
    u16 cmdWait; // 0x1A
    u8 loopCount; // 0x1C
    u8 linkNo; // 0x1D
    u16 idnum; // 0x1E
    u8* cmdList; // 0x20
    u16 cmdPtr; // 0x24
    u16 cmdMarkPtr; // 0x26
    u16 cmdLoopPtr; // 0x28
    u16 life; // 0x2A
    Vec3 vel; // 0x2C
    float grav; // 0x38
    float fric; // 0x3C
    Vec3 pos; // 0x40
    float size; // 0x4C
    float rotate; // 0x50
    u16 aCmpCount; // 0x54
    u8 aCmpMode; // 0x56
    u8 aCmpParam1; // 0x57
    u8 aCmpParam2; // 0x58
    u8 pJObjOfs; // 0x59
    u16 matColCount; // 0x5A
    u16 ambColCount; // 0x5C
    u16 rotateCount; // 0x5E
    float sizeTarget; // 0x60
    float rotateTarget; // 0x64
    u16 primColRemain; // 0x68
    u16 envColRemain; // 0x6A
    GXColor primColTarget; // 0x6C
    GXColor envColTarget; // 0x70
    u16 matColRemain; // 0x74
    u16 ambColRemain; // 0x76
    u16 aCmpRemain; // 0x78
    u8 aCmpParam1Target; // 0x7A
    u8 aCmpParam2Target; // 0x7B
    u8 matRGB; // 0x7C
    u8 matA; // 0x7D
    u8 ambRGB; // 0x7E
    u8 ambA; // 0x7F
    u8 matRGBTarget; // 0x80
    u8 matATarget; // 0x81
    u8 ambRGBTarget; // 0x82
    u8 ambATarget; // 0x83
    float trail; // 0x84
    struct HSD_Generator* gen; // 0x88
    struct HSD_psAppSRT* appsrt; // 0x8C
    float* userdata; // 0x90
    int (*callback)(HSD_Particle* part); // 0x94
};
/* size: 0xC */
typedef struct _PSUserFunc {
    int (*hookCreate)(HSD_Particle* part); /* 0x0 */
    int (*hookDelete)(HSD_Particle* part); /* 0x4 */
    int (*setUserData)(HSD_Particle* part, u8 unknown1,
                       float unknown2); /* 0x8 */
} HSD_PSUserFunc;
typedef struct _auxDisc {
    f32 minAngle;
    f32 maxAngle;
} auxDisc;
typedef struct _auxLine {
    f32 x2;
    f32 y2;
    f32 z2;
} auxLine;
typedef struct _auxTornado {
    f32 vel;
} auxTornado;
typedef struct _auxRect {
    f32 x;
    f32 y;
    f32 z;
    f32 xx;
    f32 xy;
    f32 xz;
    f32 yx;
    f32 yy;
    f32 yz;
    f32 zx;
    f32 zy;
    f32 zz;
    u16 flag;
} auxRect;
typedef struct _auxCone {
    f32 minAngle;
    f32 maxAngle;
    f32 height;
} auxCone;
typedef struct _auxSphere {
    f32 speed;
    f32 latMid;
    f32 latRange;
    f32 lonMid;
    f32 lonRange;
} auxSphere;
struct HSD_Generator {
    HSD_Generator* next; // 0x0
    u32 kind; // 0x4
    f32 random; // 0x8
    f32 count; // 0xC
    HSD_JObj* jobj; // 0x10
    u16 genLife; // 0x14
    u16 type; // 0x16
    u8 bank; // 0x18
    u8 linkNo; // 0x19
    u8 texGroup; // x1A
    u8 dummy; // 0x1B
    u16 idnum; // 0x1C
    u16 life; // 0x1E
    u8* cmdList; // 0x20
    Vec3 pos; // 0x24
    Vec3 vel; // 0x30
    f32 grav; // 0x3C
    f32 fric; // 0x40
    f32 size; // 0x44
    f32 radius; // 0x48
    f32 angle; // 0x4C
    u32 numChild; // 0x50
    HSD_psAppSRT* appsrt; // 0x54
    HSD_PSUserFunc* userfunc; // 0x58
    int (*callback)(HSD_Generator* part); // 0x5C
    union {
        auxDisc disc;
        auxLine line;
        auxTornado tornado;
        auxRect rect;
        auxCone cone;
        auxSphere sphere;
    } aux; // 0x60
};
#define PS_TEXDIRECTION
extern int texc[4][4];
extern int td;
void psSetFog(struct HSD_Fog* fog);
void psRemoveFog(void);
static inline void setBlendMode(int blendmode);
static inline void setupChanCtrl(HSD_Particle* pp);
static inline void setupChanReg(HSD_Particle* pp);
static inline void getClrTrail(HSD_Particle* pp, GXColor* col);
static inline void setupTevReg(HSD_Particle* pp);
static inline void psSetCurrentMtx(GXPosNrmMtx idx);
static inline HSD_Particle* psDispSubPoint(HSD_Particle* pp);
static inline HSD_Particle* psDispSubPointTrail(HSD_Particle* pp);
static inline void psDispSubMakePolygon(HSD_Particle* pp, u8* texform, f32 x,
                                        f32 y, f32 z, f32 x0, f32 y0, f32 z0,
                                        f32 x1, f32 y1, f32 z1, GXColor* color,
                                        f32* prev_x, f32* prev_y, f32* prev_z);
static inline void psDispSub(HSD_Particle* pp, u8* texform);
#define PS_APPSRT
static inline void psDispSubAppSRT(HSD_Particle* pp, u8* texform);
static inline void psDispSubAPPSRTPoint(HSD_Particle* pp);
void psInitDataBank(int bank, int* cmdBank, int* texBank, u32* ref,
                    int* formBank);
void psInitParticle(int num);
void psRemoveParticle(void);
HSD_Particle* psGenerateParticleID0(HSD_Particle* p, int linkNo, int bank,
                                    int id, int flgInterpret);
HSD_Particle* psGenerateParticle(int linkNo, int bank, u32 kind, u16 texGroup,
                                 u8* list, int life, float x, float y, float z,
                                 float vx, float vy, float vz, float size,
                                 float grav, float fric, int palflag,
                                 HSD_Generator* gp);
HSD_Particle* psGenerateParticleIDPV(int linkNo, int bank, int id, float px,
                                     float py, float pz, float vx, float vy,
                                     float vz);
HSD_Particle* psGenerateParticleID(int linkNo, int bank, int id);
HSD_Particle* psGenerateParticleIDN(int linkNo, int bank, int id);
void psKillParticle(HSD_Particle* pp);
void psKillAllParticle(void);
void psSetPointJObj(int no, HSD_JObj* jobj);
void psSetPointJObjNodup(HSD_JObj* jobj, int no);
void psClearPointJObj(void);
void psDeletePntJObjwithParticle(HSD_Particle* pp);
void psKillFamily(u16 idnum, int linkNo);
void psKillGeneratorChild(HSD_Generator* gp);
void psAddOffsetAll(float xofs, float yofs, float zofs);
void psPauseFamily(u16 idnum, int linkNo);
void psRestartFamily(u16 idnum, int linkNo);
void psSetCallback(int (**callback)(HSD_Particle* part));
void psSetUserFunc(HSD_Generator* gp, HSD_PSUserFunc* userfunc);
static inline void psRemoveBillboardCamera(void);
/* 3983A4 */ void hsd_803983A4(HSD_Generator*);
/* 3984F4 */ void psInitDataBankLoad(int bank, const int* cmdBank,
                                     const int* texBank, const u32* ref,
                                     const int* formBank);
/* 398614 */ void psInitDataBankLocate(HSD_Archive* cmdBank,
                                       HSD_Archive* texBank, int* formBank);
/* 3989A0 */ void psInitDataBankRelocate(int* cmdBank, int* texBank,
                                         int* formBank, int* newCmdBank,
                                         int* newTexBank, int* newFormBank);
/* 398A08 */ void hsd_80398A08(u32);
/* 398C04 */ HSD_Particle*
psGenerateParticle0(HSD_Particle** head, int linkNo, int bank, u32 kind,
                    u16 texGroup, u8* list, int life, int palflag, f32 x,
                    f32 y, f32 z, f32 vx, f32 vy, f32 vz, f32 size, f32 grav,
                    f32 fric, HSD_Generator* gp, int flgInterpret);
/* 398F0C */ void hsd_80398F0C(s32, s32, s32, u16, u8*, s32, s32,
                               HSD_Generator*, f32, f32, f32, f32, f32, f32,
                               f32, f32, f32);
/* 398F8C */ void hsd_80398F8C(HSD_Particle*, f32);
/* 3991D8 */ s32 hsd_803991D8(HSD_Generator*, HSD_JObj*, f32, f32);
/* 39930C */ void* hsd_8039930C(HSD_Particle*, HSD_Particle*);
/* 39CEAC */ void hsd_8039CEAC(u32);
/* 39CF4C */ void hsd_8039CF4C(s32, HSD_JObj*);
/* 39D048 */ void hsd_8039D048(void* particle);
/* 4D0B50 */ extern HSD_PSTexGroup** psTexGroupArray[65];
/* 4D0C54 */ extern HSD_PSFormGroup** psNumCmdList[65];
/* 4D0D58 */ extern int psCmdListArray[65];
/* 4D0E5C */ extern HSD_PSCmdList** ptclref_804D0E5C[65];
/* 4D78D8 */ extern u16 hsd_804D78D8;
/* 4D78DA */ extern u16 hsd_804D78DA;
/* 4D78DE */ extern u16 hsd_804D78DE;
/* 4D78E0 */ extern u16 hsd_804D78E0;
/* 4D78E8 */ extern u32 hsd_804D78E8;
/* 4D78EC */ extern u32 hsd_804D78EC;
/* 4D78F0 */ extern HSD_CObj* psCamera;
/* 4D78F4 */ extern HSD_SList* hsd_804D78F4;
#define _hsd_perf_h_
typedef struct _HSD_PerfStat {
    f32 cpu_time;
    f32 draw_time;
    f32 total_time;
    u32 nb_mtx_load;
    u32 env_blend[32];
} HSD_PerfStat;
extern HSD_PerfStat HSD_PerfCurrentStat;
extern HSD_PerfStat HSD_PerfLastStat;
void HSD_PerfInitStat(void);
void HSD_PerfSetStartTime(void);
void HSD_PerfSetCPUTime(void);
void HSD_PerfSetDrawTime(void);
void HSD_PerfSetTotalTime(void);
void HSD_PerfCountEnvelopeBlending(s32 n);
static inline void HSD_PerfCountMtxLoad(void)
{
    HSD_PerfCurrentStat.nb_mtx_load += 1;
}
#define SYSDOLPHIN_BASELIB_PSAPPSRT_H
#define PSAPPSRT_UNK_B09 (1 << 9)
#define PSAPPSRT_UNK_B10 (1 << 10)
#define PSAPPSRT_UNK_B11 (1 << 11)
/* 003A0D18 */ bool psInitAppSRT(int, int);
/* 003A0D58 */ HSD_psAppSRT* psAddGeneratorAppSRT(s32, u16);
/* 003A0E3C */ HSD_psAppSRT* psAddParticleAppSRT_begin(HSD_Particle*, s32);
int psRemoveGeneratorSRT(HSD_Generator*);
int psRemoveParticleAppSRT(HSD_Particle*);
HSD_psAppSRT* psAddGeneratorAppSRT_begin(HSD_Generator*, s32);
int psAttachParticleAppSRT(HSD_Particle*, HSD_psAppSRT*);
int psAttachGeneratorAppSRT(HSD_Generator*, HSD_psAppSRT*);
extern HSD_ObjAllocData HSD_PSAppSrt_804D10B0;
#define SYSDOLPHIN_BASELIB_PSDISP_H
void psDispParticles(u32 target_link, u32 sw);
HSD_Particle* particleSort(s32, u8, HSD_Particle**, HSD_Particle**);
void setVtxDesc(s32);
#define SYSDOLPHIN_BASELIB_PSDISPTEV_H
void psSetupTevCommon(void);
void psSetupTevInvalidState(void);
void psSetupTev(HSD_Particle* pp);
#define INCLUDE_SYSDOLPHIN_BASELIB_QUATLIB_H
s32 MatToQuat(Mtx, Quaternion*);
s32 HSD_QuatLib_8037EB28(Mtx, Vec3*);
s32 HSD_QuatLib_8037EC4C(Quaternion*, Quaternion*, Quaternion*);
s32 HSD_QuatLib_8037ECE0(Vec3*, Quaternion*, f32);
s32 EulerToQuat(Vec3*, Quaternion*);
s32 HSD_QuatLib_8037EF28(Quaternion*, Quaternion*, Quaternion*, f32);
#define _robj_h_
#define ROBJ_TYPE_MASK 0x70000000
#define REFTYPE_EXP 0x00000000
#define REFTYPE_JOBJ 0x10000000
#define REFTYPE_LIMIT 0x20000000
#define REFTYPE_BYTECODE 0x30000000
#define REFTYPE_IKHINT 0x40000000
struct HSD_Rvalue {
    HSD_Rvalue* next;
    u32 flags;
    HSD_JObj* jobj;
};
struct HSD_RvalueList {
    u32 flags;
    HSD_Joint* joint;
};
struct HSD_IKHint {
    f32 bone_length;
    f32 rotate_x;
};
struct HSD_IKHintDesc {
    f32 bone_length;
    f32 rotate_x;
};
struct HSD_Exp {
    union {
        f32 (*func)(void*);
        u8* bytecode;
    } expr;
    HSD_Rvalue* rvalue;
    u32 nb_args;
    u8 is_bytecode;
};
struct HSD_ExpDesc {
    f32 (*func)(void*);
    HSD_RvalueList* rvalue;
};
struct HSD_ByteCodeExpDesc {
    u8* bytecode;
    HSD_RvalueList* rvalue;
};
struct HSD_RObj {
    HSD_RObj* next;
    u32 flags;
    union {
        HSD_JObj* jobj;
        HSD_Exp exp;
        f32 limit;
        HSD_IKHint ik_hint;
    } u;
    HSD_AObj* aobj;
};
struct HSD_RObjDesc {
    HSD_RObjDesc* next;
    u32 flags; // 0x04
    union {
        u32 i;
        HSD_ExpDesc* exp;
        HSD_ByteCodeExpDesc* bcexp;
        HSD_IKHintDesc* ik_hint;
        HSD_Joint* joint;
        f32 limit;
    } u;
};
struct HSD_RObjAnimJoint {
    HSD_RObjAnimJoint* next;
    HSD_AObjDesc* aobjdesc;
};
void _HSD_RObjForgetMemory(void* low, void* high);
void HSD_RObjInitAllocData(void);
HSD_ObjAllocData* HSD_RObjGetAllocData(void);
HSD_ObjAllocData* HSD_RvalueObjGetAllocData(void);
HSD_RObj* HSD_RObjAlloc(void);
void HSD_RObjFree(HSD_RObj* robj);
void HSD_RObjSetFlags(HSD_RObj* robj, u32 flags);
HSD_RObj* HSD_RObjGetByType(HSD_RObj* robj, u32 type, u32 subtype);
void HSD_RObjAnimAll(HSD_RObj* robj);
void HSD_RObjRemoveAnimAllByFlags(HSD_RObj* robj, u32 flags);
void HSD_RObjRemoveAnimAll(HSD_RObj* robj);
void HSD_RObjReqAnimAllByFlags(HSD_RObj* robj, f32 startframe, u32 flags);
void HSD_RObjReqAnimAll(HSD_RObj* robj, f32 startframe);
void HSD_RObjAddAnimAll(HSD_RObj* robj, HSD_RObjAnimJoint* anim);
void HSD_RObjRemove(HSD_RObj*);
void HSD_RObjRemoveAll(HSD_RObj*);
void HSD_RObjResolveRefs(HSD_RObj*, HSD_RObjDesc*);
void HSD_RObjResolveRefsAll(HSD_RObj*, HSD_RObjDesc*);
HSD_RObj* HSD_RObjLoadDesc(HSD_RObjDesc*);
void HSD_RObjSetConstraintObj(HSD_RObj* robj, void* obj);
void HSD_RObjUpdateAll(HSD_RObj* robj, void* obj, HSD_ObjUpdateFunc);
int HSD_RObjGetGlobalPosition(HSD_RObj* robj, int, Vec3* translate);
void HSD_RObjRemoveAnimByFlags(HSD_RObj* robj, u32 flags);
void HSD_RObjReqAnimByFlags(HSD_RObj* robj, f32 startframe, u32 flags);
void HSD_RObjAddAnim(HSD_RObj* robj, HSD_RObjAnimJoint* anim);
void HSD_RObjAnim(HSD_RObj* robj);
HSD_Rvalue* HSD_RvalueAlloc(void);
void HSD_RvalueRemove(HSD_Rvalue* rvalue);
void HSD_RvalueRemoveAll(HSD_Rvalue* rvalue);
void HSD_RvalueResolveRefs(HSD_Rvalue* rvalue, HSD_RvalueList* list);
void HSD_RvalueResolveRefsAll(HSD_Rvalue* rvalue, HSD_RvalueList* list);
static inline bool RObjHasFlags(HSD_RObj* robj)
{
    if ((robj->flags & 0x70000000) == 0) {
        return 1;
    }
    return 0;
}
static inline bool RObjHasFlags2(HSD_RObj* robj)
{
    if ((robj->flags & 0x80000000) != 0) {
        return 1;
    }
    return 0;
}
static inline bool RObjHasLimitReftype(HSD_RObj* robj)
{
    if ((robj->flags & 0x70000000) == 0x20000000) {
        return 1;
    }
    return 0;
}
#define _shadow_h_
struct HSD_Shadow {
    HSD_SList* objects; // 0x0
    HSD_CObj* camera; // 0x4
    HSD_TObj* texture; // 0x8
    f32 scaleS; // 0xC
    f32 scaleT; // 0x10
    f32 transS; // 0x14
    f32 transT; // 0x18
    bool active; // 0x1C
    u8 intensity; // 0x20
    void* user_data; // 0x24
};
struct HSD_ViewingRect {
    Vec3 origin;
    Vec3 up_v;
    Vec3 right_v;
    Vec3 eye_v;
    Vec3 eye_vn;
    f32 distance;
    f32 top;
    f32 bottom;
    f32 left;
    f32 right;
    int perspective;
};
HSD_ObjAllocData* HSD_ShadowGetAllocData(void);
void HSD_ShadowInitAllocData(void);
HSD_Shadow* HSD_ShadowAlloc(void);
void HSD_ShadowAddObject(HSD_Shadow* shadow, HSD_JObj* jobj);
void HSD_ShadowDeleteObject(HSD_Shadow* shadow, HSD_JObj* jobj);
void HSD_ShadowStartRender(HSD_Shadow* shadow);
void HSD_ShadowEndRender(HSD_Shadow* shadow);
void HSD_ShadowSetActive(HSD_Shadow* shadow, int active);
HSD_TObj* makeShadowTObj(void);
void HSD_ShadowRemove(HSD_Shadow* shadow);
void HSD_ShadowInit(HSD_Shadow* shadow);
void HSD_ShadowSetSize(HSD_Shadow* shadow, u16 width, u16 height);
void HSD_ShadowSetViewingRect(HSD_Shadow* shadow, float top, float bottom,
                              float left, float right);
void HSD_ViewingRectInit(HSD_ViewingRect* rect, Vec3* position, Vec3* interest,
                         Vec3* upvector, int perspective);
int HSD_ViewingRectCheck(HSD_ViewingRect* rect);
void HSD_ViewingRectAddRect(HSD_ViewingRect* rect, Vec3* position, float top,
                            float bottom, float left, float right);
#define GALE01_40CD40
typedef struct TextGlyphTexture {
    /*0x00*/ u8 data[512];
} TextGlyphTexture;
/// Per-glyph left and right margins used by proportional text rendering.
typedef struct TextGlyphMetrics {
    /*0x00*/ u8 left;
    /*0x01*/ u8 right;
} TextGlyphMetrics;
/// A big-endian SIS glyph opcode, as stored in encoded strings.
typedef struct SisGlyphCode {
    /*0x00*/ u8 hi;
    /*0x01*/ u8 lo;
} SisGlyphCode;
/// A double-byte Shift-JIS character.
typedef struct SjisChar {
    /*0x00*/ u8 lead;
    /*0x01*/ u8 trail;
} SjisChar;
/* 40C680 */ extern SisGlyphCode HSD_SisLib_8040C680[288];
/* 40C8C0 */ extern SjisChar lbl_8040C8C0[288];
/* 40CB00 */ extern TextGlyphMetrics HSD_SisLib_8040CB00[288];
/* 40CD40 */ extern TextGlyphTexture HSD_SisLib_FontAtlas[287];
#define SYSDOLPHIN_BASELIB_S
#define HSD_STATE_ALL -1
#define HSD_STATE_NONE 0
#define HSD_STATE_PRIMITIVE 0x1
#define HSD_STATE_VTX_ATTR 0x2
#define HSD_STATE_COLOR_CHANNEL 0x4
#define HSD_STATE_TEV_STAGE 0x8
#define HSD_STATE_TEV_REGISTER 0x10
#define HSD_STATE_TEX_COORD_GEN 0x20
#define HSD_STATE_RENDER_MODE 0x40
typedef struct HSD_Chan {
    struct HSD_Chan* next;
    GXChannelID chan;
    u32 flags;
    GXColor amb_color;
    GXColor mat_color;
    GXBool enable;
    GXColorSrc amb_src;
    GXColorSrc mat_src;
    GXLightID light_mask;
    GXDiffuseFn diff_fn;
    GXAttnFn attn_fn;
    HSD_AObj* aobj;
} HSD_Chan;
void HSD_SetupChannelMode(u32 arg0);
void HSD_SetupPEMode(u32 flags, HSD_PEDesc* pe);
void HSD_SetupRenderModeWithCustomPE(u32 rendermode, HSD_PEDesc* pe);
void HSD_SetupRenderMode(u32);
void HSD_SetMaterialColor(GXColor ambient, GXColor diffuse, GXColor specular,
                          f32 alpha);
void HSD_SetMaterialShininess(f32 shininess);
void HSD_StateSetLineWidth(u8 width, int tex_offsets);
void HSD_StateSetCullMode(int mode);
void HSD_StateSetBlendMode(int type, int src_factor, int dst_factor, int op);
void HSD_StateSetZMode(int, int, int);
void HSD_StateSetPointSize(u8, int);
void HSD_StateSetAlphaCompare(int, u8, int, int, u8);
void HSD_StateSetColorUpdate(int);
void HSD_StateSetAlphaUpdate(int);
void HSD_StateSetDstAlpha(int, u8);
void HSD_StateSetZCompLoc(int);
void HSD_StateSetDither(int);
void _HSD_StateInvalidatePrimitive(void);
void _HSD_StateInvalidateVtxAttr(void);
void _HSD_StateInvalidateRenderMode(void);
void HSD_StateInvalidate(int mask);
#define SYSDOLPHIN_SYNTH_H
struct HSD_SynthSFXNode;
/* 4D6018 */ extern OSHeapHandle HSD_Synth_804D6018; ///< audio heap
/* 388330 */ void* HSD_AudioMalloc(size_t);
/* 38838C */ void HSD_AudioFree(void*);
/* 38893C */ void HSD_SynthSFXLoadNewProc(void);
/* 3889B8 */ int HSD_SynthSFXLoad(const char* filename, int,
                                  void (*)(int, int), int);
/* 388B0C */ void HSD_SynthSFXWaitForLoadCompletion(void (*)(void));
/* 388B50 */ int HSD_SynthSFXGetPendingLoadCount(void);
/* 388B60 */ int HSD_SynthSFXCancelLoad(int);
/* 388CB0 */ void HSD_SynthSFXAllocateBank(int);
/* 388D30 */ void HSD_SynthSFXUnloadBank(int);
/* 388DC8 */ void HSD_SynthSFXDataUnlink(int);
/* 388E08 */ void HSD_SynthSFXGroupDataRemove(int);
/* 388FF0 */ void HSD_SynthSFXBankDeflag(int);
/* 389084 */ void HSD_SynthSFXBankDeflagSync(void);
/* 389094 */ u32 HSD_SynthGetSoundMode(void);
/* 3890B4 */ void HSD_SynthSetSoundMode(int); // set sound mode
/* 38912C */ void HSD_SynthSFXStopNode(struct HSD_SynthSFXNode*);
/* 3891D0 */ void dropcallback(void*);
/* 389334 */ // s32 HSD_Synth_80389334(u16, u8, u8, u8, u8, u8, f32, f32, f32,
             //                       f32, f32);
/* 3896F0 */ bool HSD_SynthSFXPlayWithGroup(int, u8, u8, u8, int, int, int,
                                            f32, f32, f32, f32, f32);
void HSD_SynthSFXKeyOff(int);
/* 3899B0 */ void HSD_SynthSFXStopRange(int);
/* 389A50 */ void HSD_SynthSFXPause(int);
/* 389AD0 */ void HSD_SynthSFXResume(int);
/* 389B50 */ int HSD_SynthSFXCheck(int);
/* 389BD8 */ void HSD_SynthSFXSetVolumeFade(int, u8, int);
/* 389CC4 */ void HSD_SynthSFXSetPan(int, u8);
/* 389D24 */ void HSD_SynthSFXSetMix(int, float, float, float);
/* 389D8C */ void HSD_SynthSFXUpdatePitch(struct HSD_SynthSFXNode*);
/* 389E2C */ void HSD_SynthSFXSetPitchRatio(int, int, float);
/* 389F4C */ void HSD_SynthSFXSetPriority(int id, int prio);
/* 38A000 */ s32 HSD_SynthSFXVolumeEnvelope(void);
/* 38A5A4 */ void HSD_SynthSFXUpdateVolume(struct HSD_SynthSFXNode*);
/* 38A600 */ void HSD_SynthSFXUpdateMix(struct HSD_SynthSFXNode*, int);
/* 38AAB0 */ void HSD_SynthSFXUpdateAllVolume(int, u16, int);
/* 38ABBC */ void HSD_SynthSFXSetDriverInactivatedCallback(M2C_UNK);
/* 38ABC4 */ void HSD_SynthSFXSetDriverMasterClockCallback(M2C_UNK);
/* 38ABCC */ void HSD_SynthSFXSetDriverPauseCallback(void (*)(s32));
/* 38ABD4 */ void HSD_SynthCallback(void);
/* 38AD60 */ void HSD_SynthResetStreamCounters(int, uintptr_t, void*, bool);
/* 38AD74 */ void HSD_SynthPStreamHakoHeaderCallback(int, uintptr_t, void*,
                                                     bool);
/* 38ADD0 */ void HSD_SynthPStreamMasterClockCallback(void);
/* 38B120 */ void HSD_SynthPStreamFirstHakoDataCallback(void);
/* 38B380 */ void HSD_SynthPStreamFirstHakoHeaderCallback(int, uintptr_t,
                                                          void*, bool);
/* 38B3E0 */ void HSD_SynthPStreamHeaderCallback(int, uintptr_t, void*,
                                                 bool cancelflag);
/* 38B5AC */ int HSD_SynthPStreamStart(int, u8, u8, int);
/* 38B81C */ void HSD_SynthStreamSetVolume(float);
/* 38B938 */ void HSD_SynthInit(int, int, int, int);
#define _tev_h_
void HSD_RenderInitAllocData(void);
HSD_ObjAllocData* HSD_RenderGetAllocData(void);
HSD_ObjAllocData* HSD_TevRegGetAllocData(void);
HSD_ObjAllocData* HSD_ChanGetAllocData(void);
void HSD_SetupChannel(HSD_Chan*);
void HSD_StateSetNumChans(int num);
void HSD_SetupChannelAll(HSD_Chan*);
void HSD_StateRegisterTexGen(int);
void HSD_StateSetNumTexGens(void);
void HSD_StateInitTev(void);
int HSD_StateGetNumTevStages(void);
int HSD_StateAssignTev(void);
void HSD_StateSetNumTevStages(void);
void HSD_SetupTevStage(HSD_TevDesc*);
void HSD_SetupTevStageAll(HSD_TevDesc*);
int HSD_Channel2Num(int chan);
int HSD_Index2TevStage(int idx);
int HSD_TevStage2Index(int stage);
int HSD_TevStage2Num(int stage);
void HSD_SetTevRegAll(void);
void ChanUpdateFunc(HSD_Chan*, int, const f32*);
void _HSD_StateInvalidateColorChannel(void);
void _HSD_StateInvalidateTevStage(void);
void _HSD_StateInvalidateTevRegister(void);
void _HSD_StateInvalidateTexCoordGen(void);
#define SYSDOLPHIN_BASELIB_TEXPDAG_H
typedef struct HSD_TExpDag {
    struct _HSD_TETev* tev;
    u8 idx;
    u8 nb_dep;
    u8 nb_ref;
    u8 dist;
    HSD_TExpDag* depend[8];
} HSD_TExpDag;
/* 385798 */ int assign_reg(int num, u32*, HSD_TExpDag* list,
                            const int* order);
/* 385944 */ void order_dag(int num, u32* dep, u32* full_dep,
                            HSD_TExpDag* list, int depth, int idx,
                            u32 done_set, u32 ready_set, int* order, int* min,
                            int* min_order);
/* 385B8C */ void CalcDistance(HSD_TExp** tevs, int* dist, HSD_TExp* tev,
                               int num, int depth);
/* 385C60 */ int HSD_TExpMakeDag(HSD_TExp* root, HSD_TExpDag* list);
/* 386100 */ void make_full_dependancy_mtx(int num, const u32* dep, u32* full);
/* 386230 */ void fn_80386230(void);
/* 386234 */ void HSD_TExpSchedule(int num, HSD_TExpDag* list,
                                   HSD_TExp** result, HSD_TExpRes* resource);
/* 386470 */ int SimplifySrc(HSD_TExp*);
/* 38687C */ int SimplifyThis(HSD_TExp*);
/* 3870E4 */ int SimplifyByMerge(HSD_TExp*);
/* 387B1C */ int HSD_TExpSimplify(HSD_TExp* texp);
/* 387BA4 */ int HSD_TExpSimplify2(HSD_TExp* texp);
#define _UTIL_H_
/// functions
void HSD_MulColor(GXColor* arg0, GXColor* arg1, GXColor* dest);
u32 HSD_GetNbBits(u32 arg0);
s32 HSD_Index2PosNrmMtx(u32 arg0);
/// variables
extern Mtx HSD_identityMtx;
#define FLT_MIN 1.17549435e-38f
#define DEG_TO_RAD 0.017453292519943295
#define RAD_TO_DEG 57.29577951308232
static inline int vec_normalize_check(Vec3* src, Vec3* dst)
{
    if (!src || !dst) {
        return -1;
    }
    if (fabsf_bitwise(src->x) <= 1.17549435e-38f && fabsf_bitwise(src->y) <= 1.17549435e-38f &&
        fabsf_bitwise(src->z) <= 1.17549435e-38f)
    {
        return -1;
    }
    PSVECNormalize(src, dst);
    return 0;
}
static inline f32 atan2f_check(s8 y, s8 x)
{
    if (fabs(x) == 0.0) {
        return y >= 0 ? 1.5707963267948966 : -1.5707963267948966;
    } else {
        return atan2f(y, x);
    }
}
#define SYSDOLPHIN_BASELIB_WOBJ_H
struct HSD_WObj {
    HSD_Obj parent;
    u32 flags;
    Vec3 pos;
    HSD_AObj* aobj;
    HSD_RObj* robj;
};
struct HSD_WObjDesc {
    char* class_name;
    Vec3 pos;
    HSD_RObjDesc* robjdesc;
};
struct HSD_WObjInfo {
    HSD_ObjInfo parent;
    int (*load)(HSD_WObj* wobj, HSD_WObjDesc* desc);
};
struct HSD_WObjAnim {
    HSD_AObjDesc* aobjdesc;
    HSD_RObjAnimJoint* robjanim;
};
extern HSD_WObjInfo hsdWObj;
#define HSD_WOBJ_INFO(i) ((HSD_WObjInfo*) (i))
#define HSD_WOBJ_METHOD(o) HSD_WOBJ_INFO(HSD_OBJECT_METHOD(o))
static inline void HSD_WObjUnref(HSD_WObj* wobj)
{
    if (wobj == 0L) {
        return;
    }
    if (ref_DEC(wobj) != 0) {
        if (wobj != 0L) {
            (wobj->parent.parent.class_info)->release((HSD_Class*) wobj);
            (wobj->parent.parent.class_info)->destroy((HSD_Class*) wobj);
        }
    }
}
static inline void HSD_WObjClearFlags(HSD_WObj* wobj, u32 flags)
{
    wobj->flags &= ~flags;
}
void HSD_WObjRemoveAnim(HSD_WObj* wobj);
void HSD_WObjReqAnim(HSD_WObj* wobj, f32 frame);
void HSD_WObjAddAnim(HSD_WObj* wobj, HSD_WObjAnim* anim);
void HSD_WObjInterpretAnim(HSD_WObj* wobj);
void HSD_WObjInit(HSD_WObj* wobj, HSD_WObjDesc* desc);
HSD_WObj* HSD_WObjLoadDesc(HSD_WObjDesc* desc);
void WObjSetupPosition(HSD_WObj* wobj);
void HSD_WObjSetPosition(HSD_WObj*, Vec3*);
void HSD_WObjSetPositionX(HSD_WObj*, f32);
void HSD_WObjSetPositionY(HSD_WObj*, f32);
void HSD_WObjSetPositionZ(HSD_WObj*, f32);
void HSD_WObjGetPosition(HSD_WObj*, Vec3*);
HSD_WObj* HSD_WObjAlloc(void);
void HSD_WObjSetDefaultClass(HSD_ClassInfo* info);