Click to expand
#define MSL_PPC_EABI_CRITICAL_REGIONS_GAMECUBE_H
#define RUNTIME_PLATFORM_H
/// @file
/// @todo Assumes @c __PPCGEKKO__.
#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
/// @file
/// @todo Assumes @c __PPCGEKKO__.
#define __STDDEF_H__
typedef unsigned short wchar_t;
typedef signed int ssize_t;
/// @deprecated Use #usize_t.
typedef unsigned long size_t;
/// @todo Rename to @c size_t when #size_t is deleted.
typedef unsigned int usize_t;
typedef signed int intptr_t;
typedef unsigned int uintptr_t;
/// A null pointer
#define NULL ((void*) 0)
/// A signed 8-bit integer
typedef signed char s8;
/// A signed 16-bit integer
typedef signed short s16;
/// A signed 32-bit integer
typedef signed long s32;
/// A signed 64-bit integer
typedef signed long long s64;
/// An unsigned 8-bit integer
typedef unsigned char u8;
/// An unsigned 16-bit integer
typedef unsigned short u16;
/// An unsigned 32-bit integer
typedef unsigned long u32;
/// An unsigned 64-bit integer
typedef unsigned long long u64;
/// An unsigned short integer of platform-dependent size
typedef unsigned short ushort;
/// An unsigned integer of platform-dependent size
typedef unsigned int uint;
/// A volatile, unsigned 8-bit integer
typedef volatile u8 vu8;
/// A volatile, unsigned 16-bit integer
typedef volatile u16 vu16;
/// A volatile, unsigned 32-bit integer
typedef volatile u32 vu32;
/// A volatile, unsigned 64-bit integer
typedef volatile u64 vu64;
/// A volatile, signed 8-bit integer
typedef volatile s8 vs8;
/// A volatile, signed 16-bit integer
typedef volatile s16 vs16;
/// A volatile, signed 32-bit integer
typedef volatile s32 vs32;
/// A volatile, signed 64-bit integer
typedef volatile s64 vs64;
/// A 32-bit floating-point number
typedef float f32;
/// A 64-bit floating-point number
typedef double f64;
/// A volatile 32-bit floating-point number
typedef volatile f32 vf32;
/// A volatile 64-bit floating-point number
typedef volatile f64 vf64;
/// The underlying type of an @c enum, used as a placeholder
typedef int enum_t;
/// A @c void callback with no arguments.
typedef void (*Event)(void);
#define ATTRIBUTE_ALIGN(num) __attribute__((aligned(num)))
#define SECTION_INIT
#define SECTION_CTORS
#define ATTRIBUTE_NORETURN
#define ATTRIBUTE_RESTRICT
#define AT_ADDRESS(x)
#define U8_MAX 0xFF
#define U16_MAX 0xFFFF
#define U32_MAX 0xFFFFFFFF
#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)) ? (b) : (a))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
#define STATIC_ASSERT(cond) struct { int x[1 - 2 * !(cond)]; };
#define RETURN_IF(cond) do { if ((cond)) { return; } } while (0)
#define SDATA
#define WEAK
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
#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 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;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtypedef-redefinition"
typedef unsigned short wchar_t;
#pragma clang diagnostic pop
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 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
s32 MSL_ConsoleIo_80325F18(void);
s32 __write_console(s32, s32 arg1, s32* arg2);
u8 __read_console(u32, u8* buf, u32* n);
#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))
inline int isalpha(int c)
{
return (int) (__ctype_map[(unsigned char) c] & (0x40 | 0x80));
}
inline int isdigit(int c)
{
return (int) (__ctype_map[(unsigned char) c] & 0x10);
}
inline int isspace(int c)
{
return (int) (__ctype_map[(unsigned char) c] & (0x02 | 0x04));
}
inline int isupper(int c)
{
return (int) (__ctype_map[(unsigned char) c] & 0x80);
}
inline int isxdigit(int c)
{
return (int) (__ctype_map[(unsigned char) c] & 0x20);
}
int toupper(int c);
int tolower(int c);
#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 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);
void* __memcpy(void* dst, const void* src, unsigned long n);
#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)
#define M_PI_3 (M_PI / 3)
static float const deg_to_rad = 3.14159265358979323846 / 180;
static float const rad_to_deg = 180 / 3.14159265358979323846;
#pragma push
#pragma cplusplus on
#define FLT_EPSILON 1.00000001335e-10F
#pragma pop
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 = 0b01111111100000000000000000000000; // = 0x7F800000
const s32 mantissa_mask =
0b00000000011111111111111111111111; // = 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)))
/// @todo Is #fabs_inline fake? See #ftCo_AttackS3_CheckInput.
#define ABS(x) ((x) < 0 ? -(x) : (x))
static inline f32 fabs_inline(f32 x)
{
if (x < 0) {
return -x;
} else {
return x;
}
}
static inline double fabs(double f)
{
return __fabs(f);
}
double frexp(double x, int* exponent);
float fabsf__Ff(float);
float tanf(float x);
float cos__Ff(float x);
float sin__Ff(float x);
float cosf(float x);
float sinf(float x);
void __sinit_trigf_c(void);
float logf(float);
#define _MATH_PPC_H_
#pragma push
#pragma cplusplus on
extern inline float sqrtf(float x)
{
static const double _half = .5;
static const double _three = 3.0;
volatile float y;
if (x > 0.0f) {
double guess = __frsqrte((double) x); // returns an approximation to
guess = _half * guess *
(_three - guess * guess * x); // now have 12 sig bits
guess = _half * guess *
(_three - guess * guess * x); // now have 24 sig bits
guess = _half * guess *
(_three - guess * guess * x); // now have 32 sig bits
y = (float) (x * guess);
return y;
}
return x;
}
#pragma pop
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
#define PLACEHOLDER_H
/** @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
/// A label in a jump table
typedef void (*jmp_t)(void);
/// A jump table
typedef jmp_t jtbl_t[];
#define NOT_IMPLEMENTED asm { nop }
#define UNK_T M2C_UNK
#define UNK_RET M2C_UNK
#define UNK_PARAMS
#define UNK_SIZE_ARRAY [0]
#define U32_TO_F32 4503599627370496.0
#define S32_TO_F32 4503601774854144.0
#define ASM
#define UNUSED
#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_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)
/* 323CF0 */ M2C_UNK __stdio_atexit();
/* 323CF4 */ int sprintf(char* s, const char* format, ...);
/* 323DC8 */ int vsprintf(char* s, const char* format, va_list arg);
/* 323E38 */ int vprintf(const char* format, va_list arg);
/* 323EB4 */ int printf(const char*, ...);
/* 323F80 */ M2C_UNK __StringWrite();
/* 323FEC */ M2C_UNK __FileWrite();
/* 324044 */ M2C_UNK __pformatter();
/* 324674 */ M2C_UNK float2str();
/* 324CAC */ M2C_UNK round_decimal();
/* 324DE0 */ M2C_UNK longlong2str();
/* 3250C0 */ M2C_UNK long2str();
/* 3252E4 */ M2C_UNK parse_format();
#define _RAND_H_
void srand(unsigned int seed);
int rand(void);
#define _STDLIB_H_
#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 _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 _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 MSL_TRIGF_H
float acosf(float);
float asinf(float);
float atan2f(float y, float x);
float atanf(float);
float cosf(float);
float sinf(float);
float tanf(float);
#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 EnableMetroTRKInterrupts(void);
#define _METROTRK_TRK_GLUE_H
// https://github.com/kiwi515/open_rvl/blob/605e2a99ad053441f0ebb9b322a18433f92025e2/include/OS/OSInterrupt.h
#define _OS_INTERRUPT_H_
#define DOLPHIN_OS_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 {
u32 gprs[32]; // at 0x0
u32 cr; // at 0x80
u32 lr; // at 0x84
u32 ctr; // at 0x88
u32 xer; // at 0x8C
f64 fprs[32]; // at 0x90
u32 fpscr_pad; // at 0x190
u32 fpscr; // at 0x194
u32 srr0; // at 0x198
u32 srr1; // at 0x19C
u16 mode; // at 0x1A0
u16 state; // at 0x1A2
u32 gqrs[8]; // at 0x1A4
f64 psfs[32]; // at 0x1C8
} OSContext;
extern OSContext* OS_CURRENT_CONTEXT ;
extern OSContext* OS_CURRENT_FPU_CONTEXT ;
void OSSaveFPUContext(OSContext*);
void OSSetCurrentContext(OSContext*);
OSContext* OSGetCurrentContext(void);
bool OSSaveContext(OSContext*);
void OSLoadContext(OSContext*);
void* OSGetStackPointer(void);
void OSSwitchFiber(void*, void*);
void OSSwitchFiberEx(u32, u32, u32, u32, void*, void*);
void OSClearContext(OSContext*);
void OSInitContext(OSContext* ctx, u32 pc, u32 newsp);
void OSDumpContext(const OSContext*);
void __OSContextInit(void);
void __OSLoadFPUContext(u32 _, OSContext* fpuctx);
void OSLoadFPUContext(OSContext* fpuctx);
void __OSSaveFPUContext(u32 unused1, u32 unused2, OSContext* fpuctx);
#define _DOLPHIN_OS_EXCEPTION_
typedef enum OSException {
OS_EXCEPTION_FLOATING_POINT = 7,
OS_EXCEPTION_COUNT = 15,
} OSException;
typedef u8 __OSException;
typedef void (*__OSExceptionHandler)(__OSException exception,
OSContext* context);
#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 OS_INTRMASK_MEM_0 (0x80000000U >> OS_INTR_MEM_0)
#define OS_INTRMASK_MEM_1 (0x80000000U >> OS_INTR_MEM_1)
#define OS_INTRMASK_MEM_2 (0x80000000U >> OS_INTR_MEM_2)
#define OS_INTRMASK_MEM_3 (0x80000000U >> OS_INTR_MEM_3)
#define OS_INTRMASK_MEM_ADDRESS (0x80000000U >> OS_INTR_MEM_ADDRESS)
#define OS_INTRMASK_DSP_AI (0x80000000U >> OS_INTR_DSP_AI)
#define OS_INTRMASK_DSP_ARAM (0x80000000U >> OS_INTR_DSP_ARAM)
#define OS_INTRMASK_DSP_DSP (0x80000000U >> OS_INTR_DSP_DSP)
#define OS_INTRMASK_AI_AI (0x80000000U >> OS_INTR_AI_AI)
#define OS_INTRMASK_EXI_0_EXI (0x80000000U >> OS_INTR_EXI_0_EXI)
#define OS_INTRMASK_EXI_0_TC (0x80000000U >> OS_INTR_EXI_0_TC)
#define OS_INTRMASK_EXI_0_EXT (0x80000000U >> OS_INTR_EXI_0_EXT)
#define OS_INTRMASK_EXI_1_EXI (0x80000000U >> OS_INTR_EXI_1_EXI)
#define OS_INTRMASK_EXI_1_TC (0x80000000U >> OS_INTR_EXI_1_TC)
#define OS_INTRMASK_EXI_1_EXT (0x80000000U >> OS_INTR_EXI_1_EXT)
#define OS_INTRMASK_EXI_2_EXI (0x80000000U >> OS_INTR_EXI_2_EXI)
#define OS_INTRMASK_EXI_2_TC (0x80000000U >> OS_INTR_EXI_2_TC)
#define OS_INTRMASK_PI_CP (0x80000000U >> OS_INTR_PI_CP)
#define OS_INTRMASK_PI_PE_TOKEN (0x80000000U >> OS_INTR_PI_PE_TOKEN)
#define OS_INTRMASK_PI_PE_FINISH (0x80000000U >> OS_INTR_PI_PE_FINISH)
#define OS_INTRMASK_PI_SI (0x80000000U >> OS_INTR_PI_SI)
#define OS_INTRMASK_PI_DI (0x80000000U >> OS_INTR_PI_DI)
#define OS_INTRMASK_PI_RSW (0x80000000U >> OS_INTR_PI_RSW)
#define OS_INTRMASK_PI_ERROR (0x80000000U >> OS_INTR_PI_ERROR)
#define OS_INTRMASK_PI_VI (0x80000000U >> OS_INTR_PI_VI)
#define OS_INTRMASK_PI_DEBUG (0x80000000U >> OS_INTR_PI_DEBUG)
#define OS_INTRMASK_PI_HSP (0x80000000U >> OS_INTR_PI_HSP)
#define OS_INTRMASK_MEM (OS_INTRMASK_MEM_0 | OS_INTRMASK_MEM_1 | OS_INTRMASK_MEM_2 | OS_INTRMASK_MEM_3 | OS_INTRMASK_MEM_ADDRESS)
#define OS_INTRMASK_AI (OS_INTRMASK_AI_AI)
#define OS_INTRMASK_DSP (OS_INTRMASK_DSP_AI | OS_INTRMASK_DSP_ARAM | OS_INTRMASK_DSP_DSP)
#define OS_INTRMASK_EXI_0 (OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT)
#define OS_INTRMASK_EXI_1 (OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT)
#define OS_INTRMASK_EXI_2 (OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
#define OS_INTRMASK_EXI (OS_INTRMASK_EXI_0_EXI | OS_INTRMASK_EXI_0_TC | OS_INTRMASK_EXI_0_EXT | OS_INTRMASK_EXI_1_EXI | OS_INTRMASK_EXI_1_TC | OS_INTRMASK_EXI_1_EXT | OS_INTRMASK_EXI_2_EXI | OS_INTRMASK_EXI_2_TC)
#define OS_INTRMASK_PI (OS_INTRMASK_PI_CP | OS_INTRMASK_PI_SI | OS_INTRMASK_PI_DI | OS_INTRMASK_PI_RSW | OS_INTRMASK_PI_ERROR | OS_INTRMASK_PI_VI | OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH | OS_INTRMASK_PI_DEBUG | OS_INTRMASK_PI_HSP)
#define OS_INTRMASK_PI_PE (OS_INTRMASK_PI_PE_TOKEN | OS_INTRMASK_PI_PE_FINISH)
typedef enum OSInterruptType {
OS_INTR_MEM_0,
OS_INTR_MEM_1,
OS_INTR_MEM_2,
OS_INTR_MEM_3,
OS_INTR_MEM_ADDRESS,
OS_INTR_DSP_AI,
OS_INTR_DSP_ARAM,
OS_INTR_DSP_DSP,
OS_INTR_AI_AI,
OS_INTR_EXI_0_EXI,
OS_INTR_EXI_0_TC,
OS_INTR_EXI_0_EXT,
OS_INTR_EXI_1_EXI,
OS_INTR_EXI_1_TC,
OS_INTR_EXI_1_EXT,
OS_INTR_EXI_2_EXI,
OS_INTR_EXI_2_TC,
OS_INTR_PI_CP,
OS_INTR_PI_PE_TOKEN,
OS_INTR_PI_PE_FINISH,
OS_INTR_PI_SI,
OS_INTR_PI_DI,
OS_INTR_PI_RSW,
OS_INTR_PI_ERROR,
OS_INTR_PI_VI,
OS_INTR_PI_DEBUG,
OS_INTR_PI_HSP,
OS_INTR_PI_ACR,
OS_INTR_28,
OS_INTR_29,
OS_INTR_30,
OS_INTR_31,
OS_INTR_MAX
} OSInterruptType;
typedef s16 __OSInterrupt;
typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt,
OSContext* context);
typedef u32 OSInterruptMask;
extern volatile u32 __OSLastInterruptSrr0;
extern volatile s16 __OSLastInterrupt;
extern volatile s64 __OSLastInterruptTime;
/// @sz{4}
extern M2C_UNK lbl_804D738C;
void __RAS_OSDisableInterrupts_begin(void);
void __RAS_OSDisableInterrupts_end(void);
bool OSDisableInterrupts(void);
bool OSEnableInterrupts(void);
bool OSRestoreInterrupts(bool);
__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt,
__OSInterruptHandler);
__OSInterruptHandler __OSGetInterruptHandler(__OSInterrupt);
void __OSInterruptInit(void);
u32 __OSMaskInterrupts(u32);
u32 __OSUnmaskInterrupts(u32);
u32 SetInterruptMask(OSInterruptMask mask, OSInterruptMask current);
void __OSDispatchInterrupt(__OSException exception, OSContext* context);
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
#define _METROTRK_TRK_H
#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;
/*
* 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, unsigned long n);
void* TRK_memset(void* dst, int val, unsigned long 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_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
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(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
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);
DSError TRKInitializeTarget(void);
DSError TRKTargetContinue(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);
void TRKTargetSetStopped(bool);
DSError TRKTargetStop(void);
u32 TRKTargetTranslate(u32 addr);
void TRKInterruptHandler(u16);
void TRKTargetSetInputPendingPtr(void*);
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_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_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 */
} __jmp_buf;
int __setjmp(register __jmp_buf*);
void longjmp(register __jmp_buf* env, register int val);
#define RUNTIME___INIT_CPP_EXCEPTIONS_H
void __fini_cpp_exceptions(void);
void __init_cpp_exceptions(void);
#define ___mem_
void* memset(void* dst, int val, unsigned long n);
void __fill_mem(void* dst, int val, unsigned long n);
void* memcpy(void* dst, const void* src, unsigned long n);
#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);
void __cvt_dbl_usll(void);
void __cvt_dbl_ull(void);
unsigned long __cvt_fp2unsigned(register double d);
/// @file
/// @todo Delete this.
#define _common_structs_h_
#define DOLPHIN_GX_FORWARD_H
#define DOLPHIN_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 {
GX_PERSPECTIVE,
GX_ORTHOGRAPHIC,
} GXProjectionType;
typedef enum {
GX_NEVER,
GX_LESS,
GX_EQUAL,
GX_LEQUAL,
GX_GREATER,
GX_NEQUAL,
GX_GEQUAL,
GX_ALWAYS,
} GXCompare;
typedef enum {
GX_AOP_AND,
GX_AOP_OR,
GX_AOP_XOR,
GX_AOP_XNOR,
GX_MAX_ALPHAOP,
} GXAlphaOp;
typedef enum {
GX_ZC_LINEAR,
GX_ZC_NEAR,
GX_ZC_MID,
GX_ZC_FAR,
} GXZFmt16;
typedef enum {
GX_GM_1_0,
GX_GM_1_7,
GX_GM_2_2,
} GXGamma;
typedef enum {
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 {
GX_QUADS = 0x80,
GX_TRIANGLES = 0x90,
GX_TRIANGLESTRIP = 0x98,
GX_TRIANGLEFAN = 0xA0,
GX_LINES = 0xA8,
GX_LINESTRIP = 0xB0,
GX_POINTS = 0xB8,
} GXPrimitive;
typedef enum {
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 {
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,
} GXTexFmt;
typedef enum {
GX_TF_C4 = 0x8,
GX_TF_C8 = 0x9,
GX_TF_C14X2 = 0xA,
} GXCITexFmt;
typedef enum {
GX_CLAMP,
GX_REPEAT,
GX_MIRROR,
GX_MAX_TEXWRAPMODE,
} GXTexWrapMode;
typedef enum {
GX_NEAR,
GX_LINEAR,
GX_NEAR_MIP_NEAR,
GX_LIN_MIP_NEAR,
GX_NEAR_MIP_LIN,
GX_LIN_MIP_LIN,
} GXTexFilter;
typedef enum {
GX_ANISO_1,
GX_ANISO_2,
GX_ANISO_4,
GX_MAX_ANISOTROPY,
} GXAnisotropy;
typedef enum {
GX_TLUT0 = 0,
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 {
GX_TL_IA8 = 0x0,
GX_TL_RGB565 = 0x1,
GX_TL_RGB5A3 = 0x2,
GX_MAX_TLUTFMT
} GXTlutFmt;
typedef enum {
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 {
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 {
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 {
GX_MODULATE,
GX_DECAL,
GX_BLEND,
GX_REPLACE,
GX_PASSCLR,
} GXTevMode;
typedef enum {
GX_MTX3x4,
GX_MTX2x4,
} GXTexMtxType;
typedef enum {
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 {
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 {
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 {
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 {
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 {
GX_BM_NONE,
GX_BM_BLEND,
GX_BM_LOGIC,
GX_BM_SUBTRACT,
GX_MAX_BLENDMODE,
} GXBlendMode;
typedef enum {
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 {
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 {
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 {
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 {
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 {
GX_TEVPREV,
GX_TEVREG0,
GX_TEVREG1,
GX_TEVREG2,
GX_MAX_TEVREG,
} GXTevRegID;
typedef enum {
GX_DF_NONE,
GX_DF_SIGN,
GX_DF_CLAMP,
} GXDiffuseFn;
typedef enum {
GX_SRC_REG,
GX_SRC_VTX,
} GXColorSrc;
typedef enum {
GX_AF_SPEC,
GX_AF_SPOT,
GX_AF_NONE,
} GXAttnFn;
typedef enum {
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 = 9,
GX_LIGHT_AMBIENT = 0x100,
GX_LIGHT_NULL = 0,
} GXLightID;
typedef enum {
GX_TO_ZERO,
GX_TO_SIXTEENTH,
GX_TO_EIGHTH,
GX_TO_FOURTH,
GX_TO_HALF,
GX_TO_ONE,
GX_MAX_TEXOFFSET,
} GXTexOffset;
typedef enum {
GX_SP_OFF,
GX_SP_FLAT,
GX_SP_COS,
GX_SP_COS2,
GX_SP_SHARP,
GX_SP_RING1,
GX_SP_RING2,
} GXSpotFn;
typedef enum {
GX_DA_OFF,
GX_DA_GENTLE,
GX_DA_MEDIUM,
GX_DA_STEEP,
} GXDistAttnFn;
typedef enum {
GX_CULL_NONE,
GX_CULL_FRONT,
GX_CULL_BACK,
GX_CULL_ALL
} GXCullMode;
typedef enum {
GX_TEV_SWAP0 = 0,
GX_TEV_SWAP1,
GX_TEV_SWAP2,
GX_TEV_SWAP3,
GX_MAX_TEVSWAP
} GXTevSwapSel;
typedef enum {
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 {
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
} GXTevColorArg;
typedef enum {
GX_CA_APREV,
GX_CA_A0,
GX_CA_A1,
GX_CA_A2,
GX_CA_TEXA,
GX_CA_RASA,
GX_CA_KONST,
GX_CA_ZERO
} GXTevAlphaArg;
typedef enum {
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 {
GX_TB_ZERO,
GX_TB_ADDHALF,
GX_TB_SUBHALF,
GX_MAX_TEVBIAS
} GXTevBias;
typedef enum {
GX_CS_SCALE_1,
GX_CS_SCALE_2,
GX_CS_SCALE_4,
GX_CS_DIVIDE_2,
GX_MAX_TEVSCALE
} GXTevScale;
typedef enum {
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 {
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 {
GX_KCOLOR0 = 0,
GX_KCOLOR1,
GX_KCOLOR2,
GX_KCOLOR3,
GX_MAX_KCOLOR
} GXTevKColorID;
typedef enum {
GX_ZT_DISABLE,
GX_ZT_ADD,
GX_ZT_REPLACE,
GX_MAX_ZTEXOP,
} GXZTexOp;
typedef enum {
GX_ITF_8,
GX_ITF_5,
GX_ITF_4,
GX_ITF_3,
GX_MAX_ITFORMAT,
} GXIndTexFormat;
typedef enum {
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 {
GX_ITBA_OFF,
GX_ITBA_S,
GX_ITBA_T,
GX_ITBA_U,
GX_MAX_ITBALPHA,
} GXIndTexAlphaSel;
typedef enum {
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 {
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 {
GX_INDTEXSTAGE0,
GX_INDTEXSTAGE1,
GX_INDTEXSTAGE2,
GX_INDTEXSTAGE3,
GX_MAX_INDTEXSTAGE,
} GXIndTexStageID;
typedef enum {
GX_CLIP_ENABLE = 0,
GX_CLIP_DISABLE = 1,
} GXClipMode;
typedef enum {
GX_TC_LINEAR,
GX_TC_GE,
GX_TC_EQ,
GX_TC_LE,
GX_MAX_TEVCLAMPMODE,
} GXTevClampMode;
// todo: clean up invocations via defines or inlines
/* for example,
static inline void WriteBP(u32 i) {
WGPIPE.u8 = GX_LOAD_BP_REG;
WGPIPE.u32 = i;
} */
// most or all GX commands follow a pattern of fixed args
typedef enum {
GX_NOP = 0x00,
GX_DRAW_QUADS = 0x80,
GX_DRAW_TRIANGLES = 0x90,
GX_DRAW_TRIANGLE_STRIP = 0x98,
GX_DRAW_TRIANGLE_FAN = 0xA0,
GX_DRAW_LINES = 0xA8,
GX_DRAW_LINE_STRIP = 0xB0,
GX_DRAW_POINTS = 0xB8,
GX_LOAD_BP_REG = 0x61,
GX_LOAD_CP_REG = 0x08,
GX_LOAD_XF_REG = 0x10,
GX_LOAD_INDX_A = 0x20,
GX_LOAD_INDX_B = 0x28,
GX_LOAD_INDX_C = 0x30,
GX_LOAD_INDX_D = 0x38,
GX_CMD_CALL_DL = 0x40,
GX_CMD_INVL_VC = 0x48,
GX_OPCODE_MASK = 0xF8,
GX_VAT_MASK = 0x07,
} GXCommand;
typedef enum {
GX_CLAMP_NONE,
GX_CLAMP_TOP,
GX_CLAMP_BOTTOM
} GXFBClamp;
typedef struct GXTexObj GXTexObj;
typedef struct GXTlutObj GXTlutObj;
typedef struct GXColor GXColor;
typedef struct GXColorS10 GXColorS10;
typedef struct GXRenderModeObj GXRenderModeObj;
typedef struct GXContexts GXContexts;
typedef struct GXGPFifo GXGPFifo;
typedef struct GXSettings GXSettings;
typedef struct GXContext GXContext;
typedef struct GXFifoObj GXFifoObj;
typedef void (*GXDrawDoneCallback)(void);
/// @todo Signature unknown.
typedef void* (*GXTexRegionCallback)(void);
static inline void GXEnd(void) {}
#define DOLPHIN_GX_TYPES_H
#define GX_FIFO_OBJSIZE 128
struct GXFifoObj {
u8 pad[128];
};
struct GXRenderModeObj {
u32 viTVMode;
u16 fbWidth;
u16 efbHeight;
u16 xfbHeight;
u16 viXOrigin;
u16 viYOrigin;
u16 viWidth;
u16 viHeight;
u32 xfbMode;
u8 field_rendering;
u8 aa;
u8 sample_pattern[12][2];
u8 vfilter[7];
};
struct GXColor {
u8 r, g, b, a;
};
struct GXColorS10 {
s16 r, g, b, a;
};
#define GX_MAX_Z24 0x00ffffff
#define DOLPHIN_MTX_TYPES_H
#define DOLPHIN_MTX_FORWARD_H
typedef f32 Mtx[3][4];
typedef f32 (*MtxPtr)[4];
typedef f32 Mtx44[4][4];
typedef f32 (*Mtx44Ptr)[4];
typedef struct IntVec2 IntVec2;
typedef struct IntVec3 IntVec3;
typedef struct S16Vec3 S16Vec3;
typedef struct S32Vec2 S32Vec2;
typedef struct S32Vec3 S32Vec3;
typedef struct S8Vec3 S8Vec3;
typedef struct U8Vec4 U8Vec4;
typedef struct Vec2 Vec2;
typedef struct Vec3 Vec3;
typedef struct Vec4 Quaternion, Vec4;
struct Vec2 {
f32 x, y;
};
struct Vec3 {
f32 x, y, z;
};
struct Vec4 {
f32 x, y, z, w;
};
struct U8Vec4 {
u8 x, y, z, w;
};
struct S8Vec3 {
s8 x, y, z;
};
struct S16Vec3 {
s16 x, y, z;
};
struct S32Vec2 {
s32 x, y;
};
struct S32Vec3 {
s32 x, y, z;
};
struct IntVec2 {
int x, y;
};
struct IntVec3 {
int x, y, z;
};
// Most of these should be moved to independent headers once they are created
// SOUND EFFECTS
#define SFX_VOLUME_MAX 0x7FU
#define SFX_PAN_MID 0x40U
// HSD_PAD
/// @todo @c PascalCase members
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)
// COLLISION FLAGS
// From Ness's Yo-Yo collision check
/// @todo These (and #CollData::env_flags) should be a bitfield struct
#define MPCOLL_RIGHTWALL 0x3F ///< Bits 0-5
#define MPCOLL_FLAGS_B05 (1 << 5)
#define MPCOLL_LEFTWALL 0xFC0 ///< Bits 6-11
#define MPCOLL_WALL (MPCOLL_RIGHTWALL | MPCOLL_LEFTWALL) ///< Bits 0-11
#define MPCOLL_FLAGS_B11 (1 << 11)
#define MPCOLL_CEIL 0x6000 ///< Bits 13-14
#define MPCOLL_FLAGS_B14 (1 << 14)
#define MPCOLL_UNK 0x18000 // Floor??
#define MPCOLL_GRPUSH (1 << 15)
#define MPCOLL_FLAGS_B16 (1 << 16)
#define MPCOLL_FLAGS_B20 (1 << 20) // 0x100000
#define MPCOLL_FLAGS_B21 (1 << 21) // 0x200000
#define MPCOLL_FLAGS_B23 (1 << 23)
#define MPCOLL_FLAGS_B24 (1 << 24)
#define MPCOLL_FLAGS_B25 (1 << 25)
typedef union UnkFlagStruct {
u8 u8;
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;
typedef struct ColorOverlay {
s32 x0_timer; // 0x0
s32 x4_pri; // 0x4 this colanims priority, lower = will persist
s32* 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
s32 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_angle; // 0x74
f32 x78_light_unk; // 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
} ColorOverlay;
struct r13_ColAnimStruct {
u32 x0_unk;
u8 x4_unk;
u8 x5_unk;
u8 x6_unk;
u8 x7_unk;
};
typedef enum GroundOrAir {
GA_Ground,
GA_Air,
} GroundOrAir;
#define GALE01_32AFE4
/* 32AFE4 */ M2C_UNK DBGEXIImm();
/* 32B27C */ M2C_UNK DBGReadMailbox();
/* 32B328 */ M2C_UNK DBGRead();
/* 32B404 */ M2C_UNK DBGWrite();
/* 32B4E0 */ M2C_UNK DBGReadStatus();
/* 32B58C */ M2C_UNK MWCallback();
/* 32B5C8 */ M2C_UNK DBGHandler();
/* 32B608 */ M2C_UNK DBInitComm();
/* 32B680 */ M2C_UNK DBInitInterrupts();
/* 32B6D4 */ M2C_UNK DBQueryData();
/* 32B770 */ M2C_UNK DBRead();
/* 32B7FC */ M2C_UNK DBWrite();
/* 32BA5C */ M2C_UNK DBOpen();
/* 32BA60 */ M2C_UNK DBClose();
/* 32BA64 */ bool Hu_IsStub(void);
#define DOLPHIN_AI_AI
typedef void (*AISCallback)(u32 count);
typedef void (*AIDCallback)(void);
extern vu32 __AIRegs[8] ;
AIDCallback AIRegisterDMACallback(AIDCallback);
void AIInitDMA(u32 addr, u32 length);
void AIStartDMA(void);
void AISetStreamPlayState(u32 state);
u32 AIGetStreamPlayState(void);
void AISetDSPSampleRate(u32 rate);
u32 AIGetDSPSampleRate(void);
void AISetStreamSampleRate(u32 rate);
u32 AIGetStreamSampleRate(void);
void AISetStreamVolLeft(u8 volume);
u8 AIGetStreamVolLeft(void);
void AISetStreamVolRight(u8 volume);
u8 AIGetStreamVolRight(void);
void AIInit(u8* stack);
void AIResetStreamSampleCount(void);
void AISetStreamTrigger(u32 trigger);
#define _AMCEXI2STUBS_H_
void EXI2_Init(void);
void EXI2_EnableInterrupts(void);
bool EXI2_Poll(void);
bool EXI2_ReadN(void);
bool EXI2_WriteN(void);
void EXI2_Reserve(void);
void EXI2_Unreserve(void);
bool AMC_IsStub(void);
#define DOLPHIN_AR_AR_H
// 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
void ARStartDMA(u32 type, u32 source, u32 dest, u32 length);
Event ARRegisterDMACallback(Event callback);
void __ARChecksize(void);
u32 ARGetBaseAddress(void);
u32 ARGetSize(void);
u32 ARGetDMAStatus(void);
u32 ARAlloc(u32 length);
u32 ARFree(u32* length);
bool ARCheckInit(void);
u32 ARInit(u32* stack_index_addr, u32 num_entries);
#define DOLPHIN_AR_ARQ_H
#define ARQ_CHUNK_SIZE_DEFAULT 4096
typedef enum ARQType {
ARQ_TYPE_MRAM_TO_ARAM,
ARQ_TYPE_ARAM_TO_MRAM,
} ARQType;
typedef enum ARQPrio {
ARQ_PRIORITY_LOW,
ARQ_PRIORITY_HIGH,
} ARQPrio;
typedef struct ARQRequest ARQRequest;
typedef void (*ARQCallback)(ARQRequest*);
struct ARQRequest {
ARQRequest* next;
u32 owner;
u32 type;
ARQPrio priority;
u32 source;
u32 dest;
size_t length;
ARQCallback callback;
};
void ARQInit(void);
void ARQReset(void);
void ARQPostRequest(ARQRequest* task, u32 owner, ARQType type,
ARQPrio priority, u32 source, u32 dest, size_t length,
ARQCallback callback);
void __ARQServiceQueueLo(void);
void __ARQCallbackHack(ARQRequest*);
void __ARQInitTempQueue(void);
void __ARQPushTempQueue(ARQRequest* task);
void __ARQInterruptServiceRoutine(void);
#define _DOLPHIN_AX_H_
#define __DOLPHIN_DSP_H_
#define __DOLPHIN_OSTIME_H_
typedef s64 OSTime;
typedef u32 OSTick;
typedef struct OSCalendarTime {
int sec; // seconds after the minute [0, 61]
int min; // minutes after the hour [0, 59]
int hour; // hours since midnight [0, 23]
int mday; // day of the month [1, 31]
int mon; // month since January [0, 11]
int year; // years in AD [1, ...]
int wday; // days since Sunday [0, 6]
int yday; // days since January 1 [0, 365]
int msec; // milliseconds after the second [0,999]
int usec; // microseconds after the millisecond [0,999]
} OSCalendarTime;
void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td);
OSTime OSGetTime(void);
OSTick OSGetTick(void);
OSTime __OSTimeToSystemTime(OSTime);
OSTime __OSGetSystemTime(void);
extern u32 __OSBusClock ;
#define OS_BUS_CLOCK __OSBusClock
#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 OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8)
#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000)
#define HW_REG(reg, type) *(volatile type*) (uintptr_t) (reg)
extern volatile u16 __DSPRegs[] ;
typedef void (*DSPCallback)(void* task);
typedef struct _DSPTaskInfo {
/*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 _DSPTaskInfo* next;
/*0x3C*/ struct _DSPTaskInfo* prev;
OSTime t_context;
OSTime t_task;
} DSPTaskInfo;
u32 DSPCheckMailToDSP(void);
u32 DSPCheckMailFromDSP(void);
u32 DSPReadMailFromDSP(void);
void DSPSendMailToDSP(u32 mail);
void DSPInit(void);
bool DSPCheckInit(void);
void __DSP_debug_printf(const char* fmt, ...);
void __DSPHandler(__OSInterrupt intr, OSContext* ctx);
void __DSP_boot_task(DSPTaskInfo* task);
void __DSP_insert_task(DSPTaskInfo* task);
void __DSP_remove_task(DSPTaskInfo* task);
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*);
void DSPCancelTask(void);
void* DSPAssertTask(DSPTaskInfo* task);
typedef struct _AXPBMIX {
/* 0x00 */ u16 vL;
/* 0x02 */ u16 vDeltaL;
/* 0x04 */ u16 vR;
/* 0x06 */ u16 vDeltaR;
/* 0x08 */ u16 vAuxAL;
/* 0x0A */ u16 vDeltaAuxAL;
/* 0x0C */ u16 vAuxAR;
/* 0x0E */ u16 vDeltaAuxAR;
/* 0x10 */ u16 vAuxBL;
/* 0x12 */ u16 vDeltaAuxBL;
/* 0x14 */ u16 vAuxBR;
/* 0x16 */ u16 vDeltaAuxBR;
/* 0x18 */ u16 vAuxBS;
/* 0x1A */ u16 vDeltaAuxBS;
/* 0x1C */ u16 vS;
/* 0x1E */ u16 vDeltaS;
/* 0x20 */ u16 vAuxAS;
/* 0x22 */ u16 vDeltaAuxAS;
} AXPBMIX;
typedef struct _AXPBITD {
/* 0x00 */ u16 flag;
/* 0x02 */ u16 bufferHi;
/* 0x04 */ u16 bufferLo;
/* 0x06 */ u16 shiftL;
/* 0x08 */ u16 shiftR;
/* 0x0A */ u16 targetShiftL;
/* 0x0C */ u16 targetShiftR;
} AXPBITD;
typedef struct _AXPBUPDATE {
/* 0x00 */ u16 updNum[5];
/* 0x0A */ u16 dataHi;
/* 0x0C */ u16 dataLo;
} AXPBUPDATE;
typedef struct _AXPBDPOP {
/* 0x00 */ s16 aL;
/* 0x02 */ s16 aAuxAL;
/* 0x04 */ s16 aAuxBL;
/* 0x06 */ s16 aR;
/* 0x08 */ s16 aAuxAR;
/* 0x0A */ s16 aAuxBR;
/* 0x0C */ s16 aS;
/* 0x0E */ s16 aAuxAS;
/* 0x10 */ s16 aAuxBS;
} AXPBDPOP;
typedef struct _AXPBVE {
/* 0x00 */ u16 currentVolume;
/* 0x02 */ s16 currentDelta;
} AXPBVE;
typedef struct _AXPBFIR {
/* 0x00 */ u16 numCoefs;
/* 0x02 */ u16 coefsHi;
/* 0x04 */ u16 coefsLo;
} AXPBFIR;
typedef struct _AXPBADDR {
/* 0x00 */ u16 loopFlag;
/* 0x02 */ u16 format;
/* 0x04 */ u16 loopAddressHi;
/* 0x06 */ u16 loopAddressLo;
/* 0x08 */ u16 endAddressHi;
/* 0x0A */ u16 endAddressLo;
/* 0x0C */ u16 currentAddressHi;
/* 0x0E */ u16 currentAddressLo;
} AXPBADDR;
typedef struct _AXPBADPCM {
/* 0x00 */ u16 a[8][2];
/* 0x20 */ u16 gain;
/* 0x22 */ u16 pred_scale;
/* 0x24 */ u16 yn1;
/* 0x26 */ u16 yn2;
} AXPBADPCM;
typedef struct _AXPBSRC {
/* 0x00 */ u16 ratioHi;
/* 0x02 */ u16 ratioLo;
/* 0x04 */ u16 currentAddressFrac;
/* 0x06 */ u16 last_samples[4];
} AXPBSRC;
typedef struct _AXPBADPCMLOOP {
/* 0x00 */ u16 loop_pred_scale;
/* 0x02 */ u16 loop_yn1;
/* 0x04 */ u16 loop_yn2;
} AXPBADPCMLOOP;
typedef struct _AXPB {
/* 0x00 */ u16 nextHi;
/* 0x02 */ u16 nextLo;
/* 0x04 */ u16 currHi;
/* 0x06 */ u16 currLo;
/* 0x08 */ u16 srcSelect;
/* 0x0A */ u16 coefSelect;
/* 0x0C */ u16 mixerCtrl;
/* 0x0E */ u16 state;
/* 0x10 */ u16 type;
/* 0x12 */ AXPBMIX mix;
/* 0x36 */ AXPBITD itd;
/* 0x44 */ AXPBUPDATE update;
/* 0x52 */ AXPBDPOP dpop;
/* 0x64 */ AXPBVE ve;
/* 0x68 */ AXPBFIR fir;
/* 0x6E */ AXPBADDR addr;
/* 0x7E */ AXPBADPCM adpcm;
/* 0xA6 */ AXPBSRC src;
/* 0xB4 */ AXPBADPCMLOOP adpcmLoop;
/* 0xBA */ u16 pad[3];
} AXPB;
typedef struct _AXVPB {
/* 0x000 */ void* next;
/* 0x004 */ void* prev;
/* 0x008 */ void* next1;
/* 0x00C */ u32 priority;
/* 0x010 */ void (*callback)(void*);
/* 0x014 */ u32 userContext;
/* 0x018 */ u32 index;
/* 0x01C */ u32 sync;
/* 0x020 */ u32 depop;
/* 0x024 */ u32 updateMS;
/* 0x028 */ u32 updateCounter;
/* 0x02C */ u32 updateTotal;
/* 0x030 */ u16* updateWrite;
/* 0x034 */ u16 updateData[128];
/* 0x134 */ void* itdBuffer;
/* 0x138 */ AXPB pb;
} AXVPB;
typedef struct _AXPBITDBUFFER {
/* 0x00 */ s16 data[32];
} AXPBITDBUFFER;
typedef struct _AXPBU {
/* 0x00 */ u16 data[128];
} AXPBU;
typedef struct _AXSPB {
/* 0x00 */ u16 dpopLHi;
/* 0x02 */ u16 dpopLLo;
/* 0x04 */ s16 dpopLDelta;
/* 0x06 */ u16 dpopRHi;
/* 0x08 */ u16 dpopRLo;
/* 0x0A */ s16 dpopRDelta;
/* 0x0C */ u16 dpopSHi;
/* 0x0E */ u16 dpopSLo;
/* 0x10 */ s16 dpopSDelta;
/* 0x12 */ u16 dpopALHi;
/* 0x14 */ u16 dpopALLo;
/* 0x16 */ s16 dpopALDelta;
/* 0x18 */ u16 dpopARHi;
/* 0x1A */ u16 dpopARLo;
/* 0x1C */ s16 dpopARDelta;
/* 0x1E */ u16 dpopASHi;
/* 0x20 */ u16 dpopASLo;
/* 0x22 */ s16 dpopASDelta;
/* 0x24 */ u16 dpopBLHi;
/* 0x26 */ u16 dpopBLLo;
/* 0x28 */ s16 dpopBLDelta;
/* 0x2A */ u16 dpopBRHi;
/* 0x2C */ u16 dpopBRLo;
/* 0x2E */ s16 dpopBRDelta;
/* 0x30 */ u16 dpopBSHi;
/* 0x32 */ u16 dpopBSLo;
/* 0x34 */ s16 dpopBSDelta;
} AXSPB;
typedef struct _AXPROFILE {
/* 0x00 */ u64 axFrameStart;
/* 0x08 */ u64 auxProcessingStart;
/* 0x10 */ u64 auxProcessingEnd;
/* 0x18 */ u64 userCallbackStart;
/* 0x20 */ u64 userCallbackEnd;
/* 0x28 */ u64 axFrameEnd;
/* 0x30 */ u32 axNumVoices;
} AXPROFILE;
struct AX_AUX_DATA {
/* 0x00 */ long* l;
/* 0x00 */ long* r;
/* 0x00 */ long* s;
};
#define AX_DSP_SLAVE_LENGTH 3264
#define AX_MAX_VOICES 64
#define AX_SRC_TYPE_NONE 0
#define AX_SRC_TYPE_LINEAR 1
#define AX_SRC_TYPE_4TAP_8K 2
#define AX_SRC_TYPE_4TAP_12K 3
#define AX_SRC_TYPE_4TAP_16K 4
// sync flags
#define AX_SYNC_FLAG_COPYALL (1 << 31)
#define AX_SYNC_FLAG_UNK1 (1 << 30) // reserved, unused?
#define AX_SYNC_FLAG_UNK2 (1 << 29) // reserved, unused?
#define AX_SYNC_FLAG_UNK3 (1 << 28) // reserved, unused?
#define AX_SYNC_FLAG_UNK4 (1 << 27) // reserved, unused?
#define AX_SYNC_FLAG_UNK5 (1 << 26) // reserved, unused?
#define AX_SYNC_FLAG_UNK6 (1 << 25) // reserved, unused?
#define AX_SYNC_FLAG_UNK7 (1 << 24) // reserved, unused?
#define AX_SYNC_FLAG_UNK8 (1 << 23) // reserved, unused?
#define AX_SYNC_FLAG_UNK9 (1 << 22) // reserved, unused?
#define AX_SYNC_FLAG_UNK10 (1 << 21) // reserved, unused?
#define AX_SYNC_FLAG_COPYADPCMLOOP (1 << 20)
#define AX_SYNC_FLAG_COPYRATIO (1 << 19)
#define AX_SYNC_FLAG_COPYSRC (1 << 18)
#define AX_SYNC_FLAG_COPYADPCM (1 << 17)
#define AX_SYNC_FLAG_COPYCURADDR (1 << 16)
#define AX_SYNC_FLAG_COPYENDADDR (1 << 15)
#define AX_SYNC_FLAG_COPYLOOPADDR (1 << 14)
#define AX_SYNC_FLAG_COPYLOOP (1 << 13)
#define AX_SYNC_FLAG_COPYADDR (1 << 12)
#define AX_SYNC_FLAG_COPYFIR (1 << 11)
#define AX_SYNC_FLAG_SWAPVOL (1 << 10)
#define AX_SYNC_FLAG_COPYVOL (1 << 9)
#define AX_SYNC_FLAG_COPYDPOP (1 << 8)
#define AX_SYNC_FLAG_COPYUPDATE (1 << 7)
#define AX_SYNC_FLAG_COPYTSHIFT (1 << 6)
#define AX_SYNC_FLAG_COPYITD (1 << 5)
#define AX_SYNC_FLAG_COPYAXPBMIX (1 << 4)
#define AX_SYNC_FLAG_COPYTYPE (1 << 3)
#define AX_SYNC_FLAG_COPYSTATE (1 << 2)
#define AX_SYNC_FLAG_COPYMXRCTRL (1 << 1)
#define AX_SYNC_FLAG_COPYSELECT (1 << 0)
#define AX_PRIORITY_STACKS 32
// AX.c
void AXInit(void);
void AXQuit(void);
// AXAlloc.c
void AXFreeVoice(AXVPB* p);
AXVPB* AXAcquireVoice(u32 priority, void (*callback)(void*), u32 userContext);
void AXSetVoicePriority(AXVPB* p, u32 priority);
// AXAux.c
void AXRegisterAuxACallback(void (*callback)(void*, void*), void* context);
void AXRegisterAuxBCallback(void (*callback)(void*, void*), void* context);
// AXCL.c
void AXSetMode(u32 mode);
u32 AXGetMode(void);
// AXOut.c
extern AXPROFILE __AXLocalProfile;
extern DSPTaskInfo task;
extern u16 ax_dram_image[8192];
// AXProf.c
void AXInitProfile(AXPROFILE* profile, u32 maxProfiles);
u32 AXGetProfile(void);
// AXVPB.c
void AXSetVoiceSrcType(AXVPB* p, u32 type);
void AXSetVoiceState(AXVPB* p, u16 state);
void AXSetVoiceType(AXVPB* p, u16 type);
void AXSetVoiceMix(AXVPB* p, AXPBMIX* mix);
void AXSetVoiceItdOn(AXVPB* p);
void AXSetVoiceItdTarget(AXVPB* p, u16 lShift, u16 rShift);
void AXSetVoiceUpdateIncrement(AXVPB* p);
void AXSetVoiceUpdateWrite(AXVPB* p, u16 param, u16 data);
void AXSetVoiceDpop(AXVPB* p, AXPBDPOP* dpop);
void AXSetVoiceVe(AXVPB* p, AXPBVE* ve);
void AXSetVoiceVeDelta(AXVPB* p, s16 delta);
void AXSetVoiceFir(AXVPB* p, AXPBFIR* fir);
void AXSetVoiceAddr(AXVPB* p, AXPBADDR* addr);
void AXSetVoiceLoop(AXVPB* p, u16 loop);
void AXSetVoiceLoopAddr(AXVPB* p, u32 addr);
void AXSetVoiceEndAddr(AXVPB* p, u32 addr);
void AXSetVoiceCurrentAddr(AXVPB* p, u32 addr);
void AXSetVoiceAdpcm(AXVPB* p, AXPBADPCM* adpcm);
void AXSetVoiceSrc(AXVPB* p, AXPBSRC* src_);
void AXSetVoiceSrcRatio(AXVPB* p, float ratio);
void AXSetVoiceAdpcmLoop(AXVPB* p, AXPBADPCMLOOP* adpcmloop);
void AXSetMaxDspCycles(u32 cycles);
u32 AXGetMaxDspCycles(void);
u32 AXGetDspCycles(void);
// DSPCode.c
extern u16 axDspSlaveLength;
extern u16 axDspSlave[3264];
#define DOLPHIN_AX_AX_H
void AXInitEx(void);
#define DOLPHIN_AX_AXALLOC_H
AXVPB* __AXGetStackHead(u32 priority);
void __AXServiceCallbackStack(void);
void __AXInitVoiceStacks(void);
void __AXAllocInit(void);
void __AXAllocQuit(void);
void __AXPushFreeStack(AXVPB* p);
AXVPB* __AXPopFreeStack(void);
void __AXPushCallbackStack(AXVPB* p);
AXVPB* __AXPopCallbackStack(void);
void __AXRemoveFromStack(AXVPB* p);
void __AXPushStackHead(AXVPB* p, u32 priority);
AXVPB* __AXPopStackFromBottom(u32 priority);
#define DOLPHIN_AX_AXAUX_H
void __AXAuxInit(void);
void __AXAuxQuit(void);
void __AXGetAuxAInput(u32* p);
void __AXGetAuxAOutput(u32* p);
void __AXGetAuxBInput(u32* p);
void __AXGetAuxBOutput(u32* p);
void __AXProcessAux(void);
#define DOLPHIN_AX_AXCL_H
/* 3592B4 */ u32 __AXGetCommandListCycles(void);
/* 3592BC */ M2C_UNK __AXGetCommandListAddress();
/* 3592F8 */ M2C_UNK __AXNextFrame();
/* 359708 */ void __AXClInit(void);
#define DOLPHIN_AX_AXINIT_H
void __AXAuxInit(void);
#define DOLPHIN_AX_AXOUT_H
/* 359724 */ M2C_UNK __AXOutNewFrame();
/* 3598AC */ M2C_UNK __AXOutAiCallback();
/* 359914 */ M2C_UNK __AXDSPInitCallback();
/* 359920 */ M2C_UNK __AXDSPResumeCallback();
/* 359978 */ M2C_UNK __AXDSPDoneCallback();
/* 359984 */ M2C_UNK __AXOutInitDSP();
/* 359A48 */ void __AXOutInit(void);
#define DOLPHIN_AX_AXPROF_H
AXPROFILE* __AXGetCurrentProfile(void);
void AXInitProfile(AXPROFILE* profile, u32 maxProfiles);
u32 AXGetProfile(void);
#define GALE01_359D8C
/* 359D8C */ AXSPB* __AXGetStudio(void);
/* 359D98 */ M2C_UNK __AXPrintStudio();
/* 35A190 */ void __AXSPBInit(void);
/* 35A1BC */ M2C_UNK __AXDepopVoice();
#define GALE01_35A250
/* 35A250 */ u32 __AXGetNumVoices(void);
/* 35A258 */ void __AXServiceVPB(AXVPB* pvpb);
/* 35A934 */ void __AXSyncPBs(u32 lessDspCycles);
/* 35AB7C */ AXPB* __AXGetPBs(void);
/* 35AB88 */ void __AXSetPBDefault(AXVPB* p);
/* 35ABC4 */ void __AXVPBInit(void);
/* 35AE20 */ M2C_UNK AXVPB_8035AE20();
#define DOLPHIN_AXFX_AXFX_H
void* AXFXAllocFunction(size_t size);
void AXFXFreeFunction(void* ptr);
void AXFXSetHooks(void* (*alloc_hook)(size_t), void (*free_hook)(void*));
#define DOLPHIN_BASE_PPCARCH_H
// Gekko registers
#define GQR0 0x390
#define GQR1 0x391
#define GQR2 0x392
#define GQR3 0x393
#define GQR4 0x394
#define GQR5 0x395
#define GQR6 0x396
#define GQR7 0x397
u32 PPCMfmsr(void);
void PPCMtmsr(u32);
u32 PPCMfhid0(void);
void PPCMthid0(u32);
u32 PPCMfl2cr(void);
void PPCMtl2cr(u32);
void PPCMtdec(u32);
void PPCSync(void);
void PPCHalt(void);
u32 PPCMfhid2(void);
void PPCMtwpar(u32);
void PPCDisableSpeculation(void);
void PPCSetFpNonIEEEMode(void);
void PPCMthid2(u32);
#define DOLPHIN_CARD_H
#define DOLPHIN_CARD_FORWARD_H
#define _DOLPHIN_OS_H__
#define OS_SOUND_MODE_MONO 0
#define OS_SOUND_MODE_STEREO 1
#define OSRoundUp32B(x) (((u32) (x) + 32 - 1) & ~(32 - 1))
#define OSRoundDown32B(x) (((u32) (x)) & ~(32 - 1))
#define OS_CACHED_REGION_PREFIX 0x8000
#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16)
#define OSPhysicalToCached(paddr) ((void*) ((u32) (paddr) + OS_BASE_CACHED))
#define OSPhysicalToUncached(paddr) ((void*) ((u32) (paddr) - 0x40000000))
#define DOLPHIN_OS_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;
};
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler);
void OSCancelAlarm(OSAlarm* alarm);
void OSInitAlarm(void);
void OSCreateAlarm(OSAlarm* alarm);
void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period,
OSAlarmHandler handler);
#define __DOLPHIN_OSALLOC_H_
typedef struct _HeapCell {
struct _HeapCell* prev;
struct _HeapCell* next;
size_t size;
} HeapCell;
typedef struct _Heap {
s32 size;
struct _HeapCell* free; // linked list of free cells
struct _HeapCell* allocated; // linked list of allocated cells
} Heap;
typedef int OSHeapHandle;
extern volatile OSHeapHandle __OSCurrHeap;
void* OSInitAlloc(void*, void*, int);
OSHeapHandle OSCreateHeap(void*, void*);
void OSDestroyHeap(size_t idx);
OSHeapHandle OSSetCurrentHeap(OSHeapHandle);
void* OSAllocFromHeap(OSHeapHandle heap, size_t size);
size_t OSCheckHeap(OSHeapHandle);
void OSFreeToHeap(OSHeapHandle heap, void* ptr);
#define OSAlloc(size) OSAllocFromHeap(__OSCurrHeap, (size))
#define OSFree(ptr) OSFreeToHeap(__OSCurrHeap, (ptr))
#define __DOLPHIN_OSARENA_H_
void* OSGetArenaHi(void);
void* OSGetArenaLo(void);
void OSSetArenaHi(void* addr);
void OSSetArenaLo(void* addr);
void* OSAllocFromArenaLo(u32 size, u32 align);
void* OSAllocFromArenaHi(u32 size, u32 align);
#define _OSCACHE_H_
void DCFlushRange(void* addr, size_t nbytes);
void DCStoreRange(void* addr, size_t nbytes);
void DCInvalidateRange(void* addr, size_t nbytes);
void DCFlushRangeNoSync(void* addr, size_t nbytes);
void ICFlashInvalidate(void);
void ICInvalidateRange(void* addr, size_t nbytes);
void LCDisable(void);
void __OSCacheInit(void);
void DCZeroRange(register void* addr, register size_t nbytes);
void ICEnable(void);
void __LCEnable(void);
void DCEnable(void);
void LCEnable(void);
u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes);
void LCQueueWait(register u32 len);
void L2GlobalInvalidate(void);
void L2Enable(void);
void LCStoreBlocks(void* dst, void* src, u32 nblocks);
#define DOLPHIN_OS_OSERROR_H
#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_PROTECTION 15
#define OS_ERROR_MAX (OS_ERROR_THERMAL_INTERRUPT + 1)
typedef u16 OSError;
typedef void (*OSErrorHandler)(OSError error, OSContext* context, ...);
OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler);
void __OSUnhandledException(u8 error, OSContext* context, u32 dsisr, u32 dar);
void OSPanic(char* file, int line, char* msg, ...);
void OSReport(const char* msg, ...);
#define DOLPHIN_OS_OSEXI_H
typedef void (*EXICallback)(s32 chan, OSContext* context);
typedef enum {
EXI_STATE_DMA_ACCESS = (1 << 0),
EXI_STATE_IMM_ACCESS = (1 << 1),
EXI_STATE_SELECTED = (1 << 2),
EXI_STATE_ATTACHED = (1 << 3),
EXI_STATE_LOCKED = (1 << 4),
EXI_STATE_BUSY = EXI_STATE_DMA_ACCESS | EXI_STATE_IMM_ACCESS
} EXIState;
typedef enum {
EXI_CHAN_0,
EXI_CHAN_1,
EXI_CHAN_2,
EXI_MAX_CHAN
} EXIChannel;
typedef enum {
EXI_READ,
EXI_WRITE,
EXI_TYPE_2,
EXI_MAX_TYPE
} EXIType;
typedef struct EXIControl {
EXICallback exiCallback;
EXICallback tcCallback;
EXICallback extCallback;
vu32 state;
int immLen;
u8* immBuf;
u32 dev;
u32 id;
s32 idTime;
int items;
struct {
u32 dev;
EXICallback callback;
} queue[3];
} EXIControl;
#define EXI_REG_MAX 5
extern vu32 __EXIRegs[EXI_MAX_CHAN][5] ;
void SetExiInterruptMask(EXIChannel, volatile EXIControl*);
bool EXIImm(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
bool EXIImmEx(EXIChannel, void* buf, s32 len, u32 mode);
bool EXIDma(EXIChannel, void* buf, s32 len, u32 type, EXICallback);
bool EXISync(EXIChannel);
u32 EXIClearInterrupts(EXIChannel, bool exi, bool tc, bool ext);
EXICallback EXISetExiCallback(EXIChannel, EXICallback exiCallback);
bool EXIProbe(EXIChannel);
s32 EXIProbeEx(EXIChannel);
bool EXIAttach(EXIChannel, EXICallback);
bool EXIDetach(EXIChannel);
bool EXISelect(s32, u32 dev, u32 freq);
bool EXIDeselect(EXIChannel);
void EXIInit(void);
bool EXILock(s32, u32 dev, EXICallback unlockedCallback);
bool EXIUnlock(EXIChannel);
u32 EXIGetState(EXIChannel);
s32 EXIGetID(EXIChannel, u32 dev, u32* id);
#define DOLPHIN_OS_OSFONT_H
u16 OSGetFontEncode(void);
#define DOLPHIN_OS_OSLINK_H
void __OSModuleInit(void);
#define __DOLPHIN_OSMEMORY_H_
extern volatile u16 __MEMRegs[64] ;
u32 OSGetPhysicalMemSize(void);
u32 OSGetConsoleSimulatedMemSize(void);
void Config48MB(void);
void RealMode(Event);
void __OSInitMemoryProtection(void);
void Config24MB(void);
#define DOLPHIN_OS_OSMUTEX_H
// https://github.com/kiwi515/open_rvl/blob/fe0742f3ed2090041d5a3c98b98da5ff3546338a/include/OS/OSThread.h
#define _OSTHREAD_H_
#define OS_PRIORITY_MIN 0
#define OS_PRIORITY_MAX 31
#define OS_THREAD_ATTR_DETACH 0x0001u
#define OS_THREAD_STACK_MAGIC 0xDEADBABE
#define OS_THREAD_SPECIFIC_MAX 2
typedef s32 OSPriority; // 0 highest, 31 lowest
typedef struct OSThread OSThread;
typedef struct OSThreadQueue OSThreadQueue;
typedef struct OSThreadLink OSThreadLink;
typedef struct OSMutex OSMutex;
typedef struct OSMutexQueue OSMutexQueue;
typedef struct OSMutexLink OSMutexLink;
typedef struct OSCond OSCond;
typedef enum {
OS_THREAD_STATE_EXITED = 0,
OS_THREAD_STATE_READY = 1,
OS_THREAD_STATE_RUNNING = 2,
OS_THREAD_STATE_WAITING = 4,
OS_THREAD_STATE_MORIBUND = 8
} OSThreadState;
typedef enum {
OS_THREAD_DETACHED = (1 << 0)
} OSThreadFlag;
struct OSThreadQueue {
OSThread* head; // at 0x0
OSThread* tail; // at 0x4
};
struct OSThreadLink {
OSThread* next;
OSThread* prev;
};
struct OSMutexQueue {
OSMutex* head; // at 0x0
OSMutex* tail; // at 0x4
};
struct OSMutexLink {
OSMutex* next; // at 0x0
OSMutex* prev; // at 0x4
};
struct OSThread {
OSContext context;
u16 state;
u16 attr;
s32 suspend;
OSPriority priority;
OSPriority base;
void* val;
OSThreadQueue* queue;
OSThreadLink link;
OSThreadQueue queueJoin;
OSMutex* mutex;
OSMutexQueue queueMutex;
OSThreadLink linkActive;
u8* stackBase;
u32* stackEnd;
s32 error;
void* specific[2];
};
typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to);
extern OSThreadQueue OS_THREAD_QUEUE ;
extern OSThread* OS_CURRENT_THREAD ;
OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback);
void __OSThreadInit(void);
void OSSetCurrentThread(OSThread*);
void OSInitMutexQueue(OSMutexQueue*);
void OSInitThreadQueue(OSThreadQueue*);
OSThread* OSGetCurrentThread(void);
bool OSIsThreadTerminated(OSThread*);
s32 OSDisableScheduler(void);
s32 OSEnableScheduler(void);
s32 __OSGetEffectivePriority(OSThread*);
void __OSPromoteThread(OSThread*, s32);
void __OSReschedule(void);
void OSYieldThread(void);
bool OSCreateThread(OSThread* thread, void* (*func)(void*), void* param,
void* stack, u32 stackSize, OSPriority priority, u16 attr);
void OSExitThread(OSThread*);
void OSCancelThread(OSThread*);
bool OSJoinThread(OSThread*, void*);
void OSDetachThread(OSThread*);
s32 OSResumeThread(OSThread*);
s32 OSSuspendThread(OSThread*);
void OSSleepThread(OSThreadQueue*);
void OSWakeupThread(OSThreadQueue*);
bool OSSetThreadPriority(OSThread*, s32);
void OSClearStack(u8);
void OSSleepTicks(s64);
void CheckThreadQueue(void);
void UnsetRun(OSThread* thread);
void OSCheckActiveThreads(void);
void SetEffectivePriority(void);
typedef struct OSMutex {
OSThreadQueue queue; // at 0x00
OSThread* thread; // at 0x08
s32 count; // at 0x0C
OSMutexLink link; // at 0x10
} OSMutex;
void OSInitMutex(OSMutex*);
void OSLockMutex(OSMutex*);
void OSUnlockMutex(OSMutex*);
void __OSUnlockAllMutex(OSThread*);
bool OSTryLockMutex(OSMutex*);
bool __OSCheckDeadLock(OSThread* thread);
bool __OSCheckMutexes(OSThread* thread);
bool __OSCheckMutex(OSMutex* mutex);
#define DOLPHIN_OS_OSRESET_H
typedef bool (*OSResetFunction)(bool);
typedef struct OSResetFunctionInfo OSResetFunctionInfo;
struct OSResetFunctionInfo {
OSResetFunction func;
u32 priority;
OSResetFunctionInfo* next;
OSResetFunctionInfo* prev;
};
void OSResetSystem(int reset, u32 resetCode, bool forceMenu);
void OSRegisterResetFunction(OSResetFunctionInfo* func);
void __OSDoHotReset(s32 arg0);
/// @todo @c enum
#define OS_RESET_RESTART 0
#define OS_RESET_HOTRESET 1
#define OS_RESET_SHUTDOWN 2
bool __OSCallResetFunctions(bool funcs_arg);
u32 OSGetResetCode(void);
#define DOLPHIN_OS_OSRESETSW_H
struct _OSResetSW_Unk1;
typedef bool (*OSResetSW_Predicate)(struct _OSResetSW_Unk1*);
typedef union {
OSResetSW_Predicate predicate;
struct {
u8 x0_addr_prefix;
u8 x1_addr_suffix;
} bytes;
} OSResetSW_Predicate_Union;
typedef enum {
OSRESETSW_ENUM1_UNK0,
OSRESETSW_ENUM1_UNK1,
OSRESETSW_ENUM1_UNK2,
OSRESETSW_ENUM1_UNK3,
OSRESETSW_ENUM1_UNK4,
OSRESETSW_ENUM1_UNK5,
OSRESETSW_ENUM1_UNK6,
} OSResetSW_Enum1;
typedef struct _OSResetSW_Unk1 {
OSResetSW_Predicate_Union x0_predicate_union;
s32 x4;
s32 x8;
u8* xC_buffer;
u8 x10_pad[0x14 - 0x10];
OSResetSW_Enum1 x14_enum;
u8 x18_pad[0x54 - 0x18];
u8* x54_buffer;
u8 x58_pad[0x5E - 0x58];
u8 x5E;
u8 x5F_pad[0x8E - 0x5F];
u8 x8E;
u8 x8F_pad[0x9A - 0x8F];
u8 x9A;
u8 x9B_pad[0xB4 - 0x9B];
u8* xB4_buffer;
u8 xB8_pad[0xBC - 0xB8];
u32 xBC_flags;
u8 xC0_pad[0xC4 - 0xC0];
bool xC4;
u8 xCC_pad[0xD0 - 0xCC];
bool xD0;
OSResetSW_Predicate xD4_predicate;
} OSResetSW_Unk1;
typedef bool (*OSResetSW_MulticastPredicate)(OSResetSW_Predicate*);
bool OSGetResetSwitchState(void);
void __OSResetSWInterruptHandler(__OSInterrupt interrupt, OSContext* context);
bool OSGetResetButtonState(void);
#define DOLPHIN_OS_OSSERIAL_H
#define _DOLPHIN_SIPRIV
typedef void (*SICallback)(s32 chan, u32 sr, OSContext* context);
typedef void (*SITypeAndStatusCallback)(s32 chan, u32 type);
typedef struct SIPacket {
s32 chan;
void* output;
u32 outputBytes;
void* input;
u32 inputBytes;
SICallback callback;
OSTime fire;
} SIPacket;
void SIInit(void);
u32 SIGetStatus(s32 chan);
bool SIBusy(void);
bool SIIsChanBusy(s32 chan);
bool SITransfer(s32 chan, void* output, u32 outputBytes, void* input,
u32 inputBytes, SICallback callback, OSTime delay);
u32 SISync(void);
void SISetCommand(s32 chan, u32 command);
u32 SIGetCommand(s32 chan);
void SITransferCommands(void);
u32 SISetXY(u32 x, u32 y);
u32 SIEnablePolling(u32 poll);
u32 SIDisablePolling(u32 poll);
bool SIGetResponse(s32 chan, void* data);
bool SIRegisterPollingHandler(__OSInterruptHandler handler);
bool SIUnregisterPollingHandler(__OSInterruptHandler handler);
u32 SIGetType(s32 chan);
u32 SIGetTypeAsync(s32 chan, SITypeAndStatusCallback callback);
u32 SIDecodeType(u32 type);
#define SI_MAX_CHAN 4
#define SI_MAX_COMCSR_INLNGTH 128
#define SI_MAX_COMCSR_OUTLNGTH 128
#define SI_ERROR_UNDER_RUN 0x0001
#define SI_ERROR_OVER_RUN 0x0002
#define SI_ERROR_COLLISION 0x0004
#define SI_ERROR_NO_RESPONSE 0x0008
#define SI_ERROR_WRST 0x0010
#define SI_ERROR_RDST 0x0020
#define SI_ERROR_UNKNOWN 0x0040
#define SI_ERROR_BUSY 0x0080
#define SI_CHAN0 0
#define SI_CHAN1 1
#define SI_CHAN2 2
#define SI_CHAN3 3
#define SI_CHAN0_BIT 0x80000000
#define SI_CHAN1_BIT 0x40000000
#define SI_CHAN2_BIT 0x20000000
#define SI_CHAN3_BIT 0x10000000
#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan))
#define SI_TYPE_MASK 0x18000000u
#define SI_TYPE_N64 0x00000000u
#define SI_TYPE_DOLPHIN 0x08000000u
#define SI_TYPE_GC SI_TYPE_DOLPHIN
#define SI_GC_WIRELESS 0x80000000
#define SI_GC_NOMOTOR 0x20000000
#define SI_GC_STANDARD 0x01000000
#define SI_WIRELESS_RECEIVED 0x40000000
#define SI_WIRELESS_IR 0x04000000
#define SI_WIRELESS_STATE 0x02000000
#define SI_WIRELESS_ORIGIN 0x00200000
#define SI_WIRELESS_FIX_ID 0x00100000
#define SI_WIRELESS_TYPE 0x000f0000
#define SI_WIRELESS_LITE_MASK 0x000c0000
#define SI_WIRELESS_LITE 0x00040000
#define SI_WIRELESS_CONT_MASK 0x00080000
#define SI_WIRELESS_CONT 0x00000000
#define SI_WIRELESS_ID 0x00c0ff00
#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID)
#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000)
#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000)
#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000)
#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000)
#define SI_GBA (SI_TYPE_N64 | 0x00040000)
#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD)
#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS)
#define SI_GC_WAVEBIRD (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID)
#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000)
#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000)
#define DOLPHIN_OS_OSSYNC_H
void __OSSystemCallVector(void);
void __OSInitSystemCall(void);
typedef struct CARDFileInfo CARDFileInfo;
typedef struct CARDStat CARDStat;
typedef void (*CARDCallback)(EXIChannel chan, s32 result);
#define __DOLPHIN_DVD_H_
#define DOLPHIN_DVD_FORWARD_H
typedef struct DVDCommandBlock DVDCommandBlock;
typedef void (*DVDCBCallback)(s32 result, DVDCommandBlock* block);
struct bb2struct {
u32 _00;
u32 _04;
s32 _08; // size?
u32 FSTMaxLength;
void* FSTLocationInRam;
};
typedef struct DVDDiskID {
char gameName[4];
char company[2];
u8 diskNumber;
u8 gameVersion;
u8 streaming;
u8 streamingBufSize;
u8 padding[22];
} DVDDiskID;
typedef struct DVDBuffer {
void* bootFilePosition;
u32 FSTPosition;
u32 FSTLength;
u32 FSTMaxLength;
void* FSTAddress;
u32 userPosition;
u32 userLength;
u32 padding0;
} DVDBuffer;
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 DVDDriveInfo {
u16 revisionLevel;
u16 deviceCode;
u32 releaseDate;
u8 padding[24];
} DVDDriveInfo;
// Minimum transfer size.
#define DVD_MIN_TRANSFER_SIZE 32
// DVD states.
#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
// File info states.
#define DVD_FILEINFO_READY 0
#define DVD_FILEINFO_BUSY 1
// DVD results.
#define DVD_RESULT_GOOD 0
#define DVD_RESULT_FATAL_ERROR -1
#define DVD_RESULT_IGNORED -2
#define DVD_RESULT_CANCELED -3
#define DVD_AIS_SUCCESS 0
extern OSThreadQueue __DVDThreadQueue;
typedef void (*DVDLowCallback)(u32 intType);
DVDLowCallback DVDLowClearCallback(void);
void DVDInit(void);
bool DVDOpen(char*, DVDFileInfo*);
bool DVDClose(DVDFileInfo*);
bool DVDChangeDir(char*);
bool DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo);
bool DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length,
s32 offset, DVDCallback callback, s32 prio);
s32 DVDConvertPathToEntrynum(const char* pathPtr);
void DVDReset(void);
s32 DVDCancel(DVDCommandBlock* block);
s32 DVDGetDriveStatus(void);
void __CARDSetDiskID(const DVDDiskID* id);
bool DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length,
s32 offset, DVDCBCallback callback);
bool DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID,
DVDCBCallback callback);
bool DVDCheckDisk(void);
void __DVDPrepareResetAsync(DVDCBCallback callback);
bool DVDSetAutoInvalidation(bool autoInval);
#define DVDReadAsync(fileInfo, addr, length, offset, callback) DVDReadAsyncPrio((fileInfo), (addr), (length), (offset), (callback), 2)
s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block);
bool DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback);
int DVDCancelAll(void);
DVDDiskID* DVDGetCurrentDiskID(void);
u32 CategorizeError(u32 error);
bool DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback);
int DVDCancelStream(DVDCommandBlock* block);
bool DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback);
bool DVDInquiryAsync(DVDCommandBlock* block, void* addr,
DVDCBCallback callback);
bool DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length,
s32 offset, DVDCBCallback callback, s32 prio);
bool DVDSeekAbsAsyncPrio(DVDCommandBlock* block, u32 offset,
DVDCBCallback callback, s32 prio);
bool DVDPrepareStreamAbsAsync(DVDCommandBlock* block, u32 length, u32 offset,
DVDCBCallback callback);
#define CARD_FAT_CHECKSUM 0
#define CARD_FAT_CHECKSUMINV 1
#define CARD_FAT_CHECKCODE 2
#define CARD_FAT_FREEBLOCKS 3
#define CARD_FAT_LASTSLOT 4
#define CARD_FAT_AVAIL 0
#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 CARD_NUM_SYSTEM_BLOCK 5
#define CARD_WORKAREA_SIZE (5 * 8 * 1024)
#define CARD_SYSTEM_BLOCK_SIZE (8 * 1024)
#define CARD_READ_SIZE 512
#define CARD_MAX_FILE 127
#define CARD_COMMENT_SIZE 64
#define CARD_FILENAME_MAX 32
#define CARD_ICON_MAX 8
#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 CARD_STAT_ANIM_LOOP 0x00
#define CARD_STAT_ANIM_BOUNCE 0x04
#define CARD_STAT_ANIM_MASK 0x04
#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_MAX_MOUNT_STEP (CARD_NUM_SYSTEM_BLOCK + 2)
#define CARD_PAGE_SIZE 128
#define CARD_SEG_SIZE 512
#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_ATTR_PUBLIC 0x04
#define CARD_ATTR_NO_COPY 0x08
#define CARD_ATTR_NO_MOVE 0x10
#define CARD_ATTR_GLOBAL 0x20
#define CARD_ATTR_COMPANY 0x40
struct CARDFileInfo {
s32 chan;
s32 fileNo;
s32 offset;
s32 length;
u16 iBlock;
u16 __padding;
};
typedef struct CARDDir {
u8 gameName[4];
u8 company[2];
u8 _padding0;
u8 bannerFormat;
u8 fileName[32];
u32 time; // seconds since 01/01/2000 midnight
u32 iconAddr; // 0xffffffff if not used
u16 iconFormat;
u16 iconSpeed;
u8 permission;
u8 copyTimes;
u16 startBlock;
u16 length;
u8 _padding1[2];
u32 commentAddr; // 0xffffffff if not used
} CARDDir;
typedef struct CARDDirCheck {
u8 padding0[64 - 2 * 4];
u16 padding1;
s16 checkCode;
u16 checkSum;
u16 checkSumInv;
} CARDDirCheck;
typedef struct CARDControl {
bool attached;
s32 result;
u16 size;
u16 pageSize;
s32 sectorSize;
u16 cBlock;
u16 vendorID;
s32 latency;
u8 id[12];
union {
int mountStep;
int formatStep;
};
u32 scramble;
DSPTaskInfo task;
void* workArea;
CARDDir* currentDir;
u16* currentFat;
OSThreadQueue threadQueue;
u8 cmd[9];
s32 cmdlen;
vu32 mode;
int retry;
int repeat;
u32 addr;
void* buffer;
u32 xferred;
u16 freeNo;
u16 startBlock;
CARDFileInfo* fileInfo;
CARDCallback extCallback;
CARDCallback txCallback;
CARDCallback exiCallback;
CARDCallback apiCallback;
CARDCallback xferCallback;
CARDCallback eraseCallback;
CARDCallback unlockCallback;
OSAlarm alarm;
u32 cid;
const DVDDiskID* diskID;
} CARDControl;
extern CARDControl __CARDBlock[2];
typedef struct CARDID {
u8 serial[32]; // flashID[12] + timebase[8] + counterBias[4] + language[4]
// +
// XXX[4]
u16 deviceID;
u16 size;
u16 encode; // character set -- 0: S-JIS, 1: ANSI
u8 padding[512 - 32 - 5 * 2];
u16 checkSum;
u16 checkSumInv;
} CARDID;
s32 CARDClose(CARDFileInfo*);
int CARDWrite(CARDFileInfo*, void* buf, s32 length, s32 offset);
int CARDRead(CARDFileInfo*, void* buf, u32 length, u32 offset);
s32 __CARDClearStatus(s32 chan);
s32 __CARDReadStatus(s32 chan, u8* status);
static s32 Retry(s32 chan);
CARDDir* __CARDGetDirBlock(CARDControl*);
u16* __CARDGetFatBlock(CARDControl* card);
s32 __CARDUpdateFatBlock(s32 chan, u16* fat, CARDCallback);
void __CARDDefaultApiCallback(s32 chan, s32 result);
void __CARDSyncCallback(s32, s32);
#define __CARDGetDirCheck(dir) ((CARDDirCheck*) &(dir)[CARD_MAX_FILE])
#define CARDIsValidBlockNo(card, iBlock) (CARD_NUM_SYSTEM_BLOCK <= (iBlock) && (iBlock) < (card)->cBlock)
#define DOLPHIN_CARD_CARDBIOS_H
s32 __CARDEnableInterrupt(s32 chan, bool enable);
s32 __CARDEraseSector(s32 chan, u32 addr, CARDCallback callback);
s32 __CARDGetControlBlock(s32 chan, CARDControl** pcard);
s32 __CARDPutControlBlock(struct CARDControl* card, s32 result);
s32 __CARDReadSegment(s32 chan, CARDCallback callback);
s32 __CARDSync(s32 i);
s32 __CARDWritePage(s32 chan, CARDCallback callback);
void __CARDExiHandler(s32 chan, OSContext* context);
void __CARDExtHandler(s32 chan, OSContext* context);
void CARDInit(void);
s32 __CARDStart(s32 chan, CARDCallback txCallback, CARDCallback exiCallback);
s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed);
s32 CARDGetResultCode(s32 chan);
s32 CARDGetSectorSize(s32 chan, u32* size);
void __CARDTxHandler(s32 chan, OSContext* context);
void __CARDUnlockedHandler(s32 chan, OSContext* context);
#define DOLPHIN_CARD_CARDBLOCK_H
s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback);
s32 __CARDFreeBlock(s32 chan, u16 nBlock, CARDCallback callback);
s32 __CARDFreeBlock(s32 chan, u16 nBlock, CARDCallback callback);
s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback);
#define DOLPHIN_CARD_CARDCHECK_H
void __CARDCheckSum(void* ptr, int length, u16* checksum, u16* checksumInv);
s32 __CARDVerify(CARDControl* card);
void __CARDCheckSum(void* ptr, int length, u16* checksum, u16* checksumInv);
s32 __CARDVerify(CARDControl* card);
s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback);
s32 CARDCheckAsync(s32 chan, CARDCallback callback);
#define DOLPHIN_CARD_CARDCREATE_H
s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size,
CARDFileInfo* fileInfo, CARDCallback callback);
void CreateCallbackFat(s32 chan, s32 result);
#define DOLPHIN_CARD_CARDDELETE_H
s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback);
s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback);
#define DOLPHIN_CARD_CARDDIR_H
s32 __CARDUpdateDir(s32 chan, CARDCallback callback);
s32 __CARDUpdateDir(s32 chan, CARDCallback callback);
#define DOLPHIN_CARD_CARDFORMAT_H
void FormatCallback(s32 chan, s32 result);
s32 CARDFormatAsync(s32 chan, CARDCallback callback);
s32 __CARDFormatRegionAsync(s32 chan, u16 encode, CARDCallback callback);
#define DOLPHIN_CARD_CARDMOUNT_H
s32 CARDUnmount(s32 chan);
void __CARDMountCallback(s32 chan, s32 result);
s32 CARDProbe(EXIChannel chan);
s32 CARDProbeEx(EXIChannel chan, s32* memSize, s32* sectorSize);
s32 DoMount(EXIChannel chan);
s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback,
CARDCallback attachCallback);
#define DOLPHIN_CARD_CARDOPEN_H
bool __CARDCompareFileName(CARDDir* ent, const char* filename);
s32 __CARDAccess(CARDControl* card, CARDDir* ent);
bool __CARDIsOpened(CARDControl* card, s32 fileno);
s32 __CARDGetFileNo(CARDControl* card, const char* filename, s32* pfileno);
s32 CARDFastOpen(EXIChannel chan, s32 fileno, CARDFileInfo* fileinfo);
s32 CARDOpen(EXIChannel chan, const char* filename, CARDFileInfo* fileInfo);
s32 __CARDIsPublic(CARDDir* ent);
s32 CARDOpen(EXIChannel chan, const char* filename, CARDFileInfo* fileinfo);
bool __CARDCompareFileName(CARDDir* ent, const char* filename);
bool __CARDIsOpened(CARDControl* card, s32 fileno);
s32 __CARDAccess(CARDControl* card, CARDDir* ent);
s32 __CARDIsPublic(CARDDir* ent);
s32 __CARDGetFileNo(CARDControl* card, const char* filename, s32* pfileno);
s32 CARDFastOpen(EXIChannel chan, s32 fileno, CARDFileInfo* fileinfo);
#define DOLPHIN_CARD_CARDRDWR_H
s32 __CARDWrite(s32 chan, u32 addr, u32 length, void* dst,
CARDCallback callback);
s32 __CARDRead(s32 chan, u32 addr, u32 length, void* dst,
CARDCallback callback);
u32 CARDGetXferredBytes(s32 chan);
#define DOLPHIN_CARD_CARDREAD_H
s32 __CARDSeek(CARDFileInfo* fileInfo, s32 length, s32 offset,
CARDControl** pcard);
s32 CARDReadAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset,
CARDCallback callback);
#define DOLPHIN_CARD_CARDRENAME_H
s32 CARDRenameAsync(s32 chan, const char* old, const char* new,
CARDCallback callback);
#define DOLPHIN_CARD_CARDSTAT_H
s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat);
s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat,
CARDCallback callback);
#define DOLPHIN_CARD_CARDUNLOCK_H
s32 __CARDUnlock(s32 chan, u8 flashID[12]);
s32 DummyLen(void);
u32 bitrev(u32 data);
s32 ReadArrayUnlock(s32 chan, u32 data, void* rbuf, s32 rlen, s32 mode);
#define DOLPHIN_CARD_CARDWRITE_H
s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* buf, u32 length,
s32 offset, CARDCallback callback);
#define __DOLPHIN_DB_H__
typedef struct {
u32 bPresent;
u32 exceptionMask;
void (*ExceptionDestination)(void);
void* exceptionReturn;
} DBInterface;
void DBInit(void);
bool DBIsDebuggerPresent(void);
bool __DBIsExceptionMarked(u8 exception);
void DBPrintf(const char* str, ...);
int __DBIsExceptionMarked(u8 a);
#define DOLPHIN_DVD_DVDERROR_H
void __DVDStoreErrorCode(u32 error);
#define DOLPHIN_DVD_DVDFS_H
typedef struct FSTEntry {
unsigned int isDirAndStringOff;
unsigned int parentOrPosition;
unsigned int nextEntryOrLength;
} FSTEntry;
void __DVDFSInit(void);
#define DOLPHIN_DVD_DVDLOW_H
void __DVDInitWA(void);
void __DVDInterruptHandler(__OSInterrupt, OSContext*);
bool DVDLowRead(void*, u32, u32, DVDLowCallback);
bool DVDLowStopMotor(DVDLowCallback callback);
bool DVDLowRequestError(DVDLowCallback callback);
bool DVDLowSeek(u32 offset, DVDLowCallback callback);
bool DVDLowAudioBufferConfig(bool enable, u32 size, DVDLowCallback callback);
bool DVDLowReadDiskID(DVDDiskID* diskID, DVDLowCallback callback);
bool DVDLowRequestAudioStatus(u32 subcmd, DVDLowCallback callback);
bool DVDLowAudioStream(u32 subcmd, u32 length, u32 offset,
DVDLowCallback callback);
bool DVDLowInquiry(DVDDriveInfo* info, DVDLowCallback callback);
bool DVDLowWaitCoverClose(DVDLowCallback callback);
void DVDLowReset(void);
bool DVDLowBreak(void);
#define DOLPHIN_DVD_DVDQUEUE_H
void __DVDClearWaitingQueue(void);
bool __DVDCheckWaitingQueue(void);
int __DVDPushWaitingQueue(int a, DVDCommandBlock* b);
bool __DVDDequeueWaitingQueue(DVDCommandBlock* a);
DVDCommandBlock* __DVDPopWaitingQueue(void);
#define DOLPHIN_DVD_FSTLOAD_H
void __fstLoad(void);
void cb(s32 param_1, DVDCommandBlock* block);
#define DOLPHIN_GX_GXATTR_H
#define GXSetTexCoordGen(dst_coord, func, src_param, mtx) GXSetTexCoordGen2(dst_coord, func, src_param, mtx, GX_DISABLE, GX_PTIDENTITY)
void GXSetNumTexGens(u8 num);
void GXSetTexCoordGen2(GXTexCoordID, GXTexGenType, GXTexGenSrc, u32, GXBool,
u32);
void GXInvalidateVtxCache(void);
void GXSetArray(GXAttr attr, s32 base_ptr, u8 stride);
void GXSetVtxAttrFmt(size_t vtxfmt, GXAttr attr, enum_t count, GXCompType type,
u8 frac);
void GXClearVtxDesc(void);
void GXSetVtxDesc(GXAttr attr, s32 type);
void __GXSetVCD(void);
void __GXSetVAT(void);
void __GXSetVCD(void);
void GXClearVtxDesc(void);
void __GXXfVtxSpecs(void);
void __GXSetVAT(void);
void GXInvalidateVtxCache(void);
#define DOLPHIN_GX_GXBUMP_H
void __GXUpdateBPMask(void);
void GXSetIndTexCoordScale(s32, s32, s32);
void GXSetIndTexMtx(s32, M2C_UNK, s32);
void XSetIndTexCoordScale(void);
void GXSetIndTexOrder(s32, s32, s32);
void GXSetNumIndStages(s32 arg0);
void GXSetTevDirect(void);
void __GXUpdateBPMask(void);
void __GXFlushTextureState(void);
void GXSetTevIndirect(s32, s32, u8, s32, s32, s32, s32, s32);
#define DOLPHIN_GX_GXDISPLAYLIST_H
void GXCallDisplayList(s32, s32);
#define DOLPHIN_GX_GXFRAMEBUF_H
extern GXRenderModeObj GXPal528IntDf;
extern GXRenderModeObj GXMpal480IntDf;
extern GXRenderModeObj GXFrameBuf_804011E0;
extern GXRenderModeObj GXFrameBuf_804011A4;
extern GXRenderModeObj GXNtsc480IntDf;
void GXClearBoundingBox(void);
void GXCopyDisp(void*, GXBool);
void GXCopyTex(void*, GXBool);
void GXSetCopyFilter(GXBool, u8[12][2], GXBool, u8[7]);
void GXSetDispCopyDst(u16, u16);
void GXSetDispCopyFrame2Field(s32 arg0);
void GXSetDispCopyFrame2Field(s32 arg0);
void GXSetDispCopyGamma(s32 arg0);
void GXSetDispCopySrc(u16, u16, u16, u16);
u32 GXSetDispCopyYScale(f32);
void GXSetTexCopyDst(u16, u16, GXTexFmt, GXBool);
void GXSetTexCopySrc(u16, u16, u16, u16);
void GXSetCopyClamp(s32);
void GXSetCopyClear(GXColor, u32);
#define DOLPHIN_GX_GXGEOMETRY_H
void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts);
void GXSetLineWidth(u8 width, GXTexOffset texOffsets);
void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets);
void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable,
GXBool point_enable);
void GXSetCullMode(GXCullMode mode);
void GXSetCoPlanar(GXBool enable);
void __GXSetDirtyState(void);
void __GXSendFlushPrim(void);
#define _GXINIT_H_
GXFifoObj* GXInit(GXFifoObj* fifo, u32 size);
void __GXDefaultTexRegionCallback(void);
M2C_UNK __GXDefaultTlutRegionCallback(u32 arg0);
#define DOLPHIN_GX_GXLIGHT_H
#define DOLPHIN_GX___TYPES_H
#define GX_WRITE_U8(ub) WGPIPE.u8 = ((u8*) &ub);
#define GX_WRITE_U16(us) WGPIPE.u16 = (*(u16*) &us);
#define GX_WRITE_U32(ui) WGPIPE.u32 = (*(u32*) &ui);
#define GX_WRITE_F32(f) WGPIPE.f32 = (*(f32*) &f);
#define INSERT_FIELD(reg, value, nbits, shift) (reg) = ((u32) (reg) & ~(((1 << (nbits)) - 1) << (shift))) | ((u32) (value) << (shift));
// GXFifoObj private fields
typedef struct __GXFifoObj {
void* base; // at 0x00
void* end; // at 0x04
u32 size; // at 0x08
u32 hiWaterMark; // at 0x0C
u32 loWaterMark; // at 0x10
void* readPtr; // at 0x14
void* writePtr; // at 0x18
s32 x1C; // at 0x1C
u8 x20_pad[4]; // at 0x20
} __GXFifoObj;
struct GXContext {
union {
u32 u32;
u16 u16[2];
} x0; // at 0x000
u16 x4; // at 0x004
u16 x6; // at 0x006
OSContext* x8; // at 0x008
u32 xC; // at 0x00C
u32 x10; // at 0x010
u32 x14; // at 0x014
u32 x18; // at 0x018
s32 x1C_data[(0x3C - 0x1C) / 4]; // at 0x01C
s32 x3C_data[(0x5C - 0x3C) / 4]; // at 0x03C
s32 x5C_data[(0x7C - 0x5C) / 4]; // at 0x05C
s32 x7C; // at 0x07C
s32 x80; // at 0x080
s32 x84; // at 0x084
u32 x88_data[4]; // at 0x088
u32 x98_data[4]; // at 0x098
u32 ambColors[2]; // at 0x0A8
u32 matColors[2]; // at 0x0B0
s32 xB8[GX_MAX_TEXCOORD]; // at 0x0B8
u8 xD8_pad[0xF8 - 0xD8]; // at 0x0D8
s32 xF8; // at 0x0F8
s32 xFC; // at 0x0FC
u32 x100_data[(0x130 - 0x100) / 4]; // at 0x100
u32 x130_data[(0x170 - 0x130) / 4]; // at 0x130
u32 x170_data[(0x1AC - 0x170) / 4]; // at 0x170
u8 x1AC_pad[0x1B0 - 0x1AC]; // at 0x1AC
GXTexRegionCallback callbacks[(0x1D0 - 0x1B0) / 4]; // at 0x1B0
u32 x1D0[(0x204 - 0x1D0) / 4]; // at 0x1D0
u32 x204; // at 0x204
u8 x208_pad[0x2D0 - 0x208]; // at 0x208
struct {
u32 unk[4];
} x2D0[(0x410 - 0x2D0) / 16]; // at 0x2D0
GXTexRegionCallback tex_region_cb; // at 0x410
GXTexRegionCallback tlut_region_cb; // at 0x414
u32 x418; // at 0x418
GXBool x41C; // at 0x41C
GXBool x41D; // at 0x41D
u32 projection_type; // at 0x420
f32 projection_v[6]; // at 0x424
f32 viewport_v[6]; // at 0x43C
u8 x454_pad[4]; // at 0x454
f32 x458; // at 0x458
s32 x45C_data[0x20 / 4]; // at 0x45C
s32 x47C_data[0x20 / 4]; // at 0x47C
u32 x49C_data[(0x4EC - 0x49C) / 4]; // at 0x49C
u8 x4EC; // at 0x4EC
GXBool x4ED; // at 0x4ED
u8 x4EE; // at 0x4EE
u32 x4F0_flags; // at 0x4F0
GXFifoObj* fifo; // at 0x4F4
u8 x4F8_pad[0x570 - 0x4F8]; // at 0x4F8
u32 dirtyFlags; // at 0x570
};
struct GXSettings {
u16 z_mode;
u16 color_settings;
u16 dst_alpha;
u16 x6;
u16 x8;
};
extern volatile u32* __piReg;
extern volatile u16* __peReg;
extern volatile u16* __cpReg;
extern volatile u32* __memReg;
extern volatile union WGPIPE_T {
s8 s8;
u8 u8;
s16 s16;
u16 u16;
u32 u32;
s32 s32;
void* ptr;
f32 f32;
} WGPIPE ;
typedef struct __GXGPFifo {
u16 x0;
s16 x2;
s16 x4;
s16 x6;
u8 x8_pad[0x38 - 0x8];
} __GXGPFifo;
struct GXContexts {
GXContext* main;
GXContext* null;
};
struct GXTexObj {
u8 x0_pad[0x8];
u32 dimensions;
u8 xC_pad[0x8];
GXTexFmt tex_fmt; // at 0x14
u8 x18_pad[8]; // at 0x18
};
struct GXTlutObj {
u32 dummy[3];
};
typedef struct _GXLightObj {
char x0[0xC]; // at 0x00
GXColor color; // at 0x0C
f32 aa; // at 0x10
f32 ab; // at 0x14
f32 ac; // at 0x18
f32 ka; // at 0x1C
f32 kb; // at 0x20
f32 kc; // at 0x24
Vec3 pos; // at 0x28
Vec3 dir; // at 0x34
} GXLightObj;
void GXInitLightAttn(GXLightObj* light, f32 aa, f32 ab, f32 ac, f32 ka, f32 kb,
f32 kc);
void GXInitLightSpot(GXLightObj* light, f32 angle, GXSpotFn fn);
void GXInitLightDistAttn(GXLightObj* light, f32 ref_distance,
f32 ref_brightness, GXDistAttnFn dist_fn);
void GXInitLightPos(GXLightObj* light, f32 x, f32 y, f32 z);
void GXInitLightDir(GXLightObj* light, f32 x, f32 y, f32 z);
void GXInitLightColor(GXLightObj* light, GXColor color);
void GXLoadLightObjImm(GXLightObj* light, GXLightID light_id);
void GXSetChanAmbColor(GXChannelID chan, GXColor* color);
void GXSetChanMatColor(GXChannelID chan, GXColor* color);
void GXSetNumChans(u8 num_chans);
void GXSetChanCtrl(GXChannelID chan, GXBool enable, GXColorSrc amb_src,
GXColorSrc mat_src, u32 light_mask, GXDiffuseFn diff_fn,
GXAttnFn attn_fn);
#define DOLPHIN_GX_GXMISC_H
void GXPixModeSync(void);
void GXWaitDrawDone(void);
void GXSetDrawDone(void);
void GXSetMisc(s32, u32);
void GXPokeAlphaMode(GXCompare func, u8 threshold);
void GXPokeAlphaRead(s32 mode);
void GXPokeAlphaUpdate(bool update_enable);
void GXPokeColorUpdate(bool update_enable);
void GXPokeDstAlpha(bool enable, u8 alpha);
void GXPokeDither(s32 dither);
void GXPokeZMode(bool compare_enable, GXCompare func, bool update_enable);
void GXTokenInterruptHandler(__OSInterrupt _, OSContext* current_ctx);
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback cb);
void GXFinishInterruptHandler(__OSInterrupt _, OSContext* current_ctx);
void __GXPEInit(void);
void GXPokeBlendMode(GXBlendMode type, GXBlendFactor src_factor,
GXBlendFactor dst_factor, GXLogicOp op);
#define DOLPHIN_GX_GXPERF_H
void GXClearGPMetric(void);
void GXSetGPMetric(u32, u32);
#define DOLPHIN_GX_GXPIXEL_H
typedef struct _GXFogAdjTbl {
u16 r[10];
} GXFogAdjTbl;
void GXSetFieldMode(int, int);
void GXInitFogAdjTable(GXFogAdjTbl*, u16, Mtx44);
void GXSetFogRangeAdj(s8, u16, GXFogAdjTbl*);
void GXSetPixelFmt(int, int);
void GXSetFieldMask(s32, s8);
void GXSetDstAlpha(u8, u8);
void GXSetDither(u8);
void GXSetZCompLoc(u8);
void GXSetZMode(u8, u32, u32);
void GXSetAlphaUpdate(u8);
void GXSetColorUpdate(u8);
void GXSetBlendMode(s32, s32, s32, s32);
void GXSetFog(s32, GXColor, f32, f32, f32, f32);
#define DOLPHIN_GX_GXSTUBS_H
void __GXSetRange(f32 nearz, f32);
#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 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 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);
void GXSetTevColorS10(s32, GXColorS10);
void GXSetTevClampMode(s32 arg0, s32 arg1);
#define DOLPHIN_GX_GXTEXTURE_H
void __GXSetSUTexSize(void);
void GXLoadTexObjPreLoaded(const GXTexObj*, M2C_UNK, GXTexMapID);
void GXInvalidateTexAll(void);
GXTexRegionCallback GXSetTlutRegionCallback(GXTexRegionCallback arg0);
void __SetSURegs(s32, s32);
void GXInitTexObj(GXTexObj*, void*, u16, u16, GXTexFmt, GXTexWrapMode,
GXTexWrapMode, GXBool);
s32 GXGetTexObjWidth(GXTexObj* tex_obj);
s32 GXGetTexObjHeight(GXTexObj* tex_obj);
GXTexFmt GXGetTexObjFmt(GXTexObj* tex_obj);
void GXLoadTexObj(const GXTexObj*, GXTexMapID);
void GXInitTlutRegion(s32* arg0, s32 arg1, s32 arg2);
s32 GXGetTexBufferSize(u16, u16, u32, u8, u8);
void GXInitTexObjCI(GXTexObj*, void*, u16, u16, GXCITexFmt, GXTexWrapMode,
GXTexWrapMode, GXBool, u32);
void GXInitTexObjLOD(GXTexObj*, GXTexFilter, GXTexFilter, f32, f32, f32,
GXBool, GXBool, GXAnisotropy);
void GXInitTlutObj(GXTlutObj*, void*, GXTlutFmt, u16);
void GXLoadTlut(GXTlutObj*, s32);
void __GXSetTmemConfig(s32);
GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback arg0);
void GXInitTexCacheRegion(M2C_UNK, s8, u32, s32, u32, s32, s32);
void __GetImageTileCount(u32, s16, s16, s32*, s32*, s32*);
#define DOLPHIN_GX_GXTRANSFORM_H
void GXProject(f32 x, // model coordinates
f32 y, f32 z,
Mtx mtx, // model-view matrix
f32* pm, // projection matrix, as returned by GXGetProjectionv
f32* vp, // viewport, as returned by GXGetViewportv
f32* sx, // screen coordinates
f32* sy, f32* sz);
void GXSetViewportJitter(f32 left, f32 top, f32 wd, f32 ht, f32 nearz,
f32 farz, u32 field);
void GXSetViewport(f32, f32, f32, f32, f32, f32);
void GXLoadTexMtxImm(void* arg0, u32 arg1, s32 arg2);
void GXSetCurrentMtx(s32 arg0);
void GXLoadNrmMtxImm(M2C_UNK, s32);
void GXLoadPosMtxImm(M2C_UNK, s32);
void GXSetScissor(s32 left, s32 top, s32 width, s32 height);
void GXSetScissorBoxOffset(u32 x_off, u32 y_off);
void GXGetProjectionv(f32* proj);
void GXGetViewportv(f32* viewport_v);
void GXSetProjection(Mtx44 proj, s32 projection_type);
void WriteMTXPS4x3(float* src, float* dst);
void WriteMTXPS3x3from3x4(float* src, float* dst);
void WriteMTXPS4x2(float* src, float* dst);
void __GXSetMatrixIndex(s32);
void GXSetClipMode(s32);
#define _DOLPHIN_GXVERT_H_
static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z)
{
WGPIPE.f32 = x;
WGPIPE.f32 = y;
WGPIPE.f32 = z;
}
static inline void GXPosition3u16(const u16 x, const u16 y, const u16 z)
{
WGPIPE.u16 = x;
WGPIPE.u16 = y;
WGPIPE.u16 = z;
}
static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z)
{
WGPIPE.s16 = x;
WGPIPE.s16 = y;
WGPIPE.s16 = z;
}
static inline void GXPosition3u8(const u8 x, const u8 y, const u8 z)
{
WGPIPE.u8 = x;
WGPIPE.u8 = y;
WGPIPE.u8 = z;
}
static inline void GXPosition3s8(const s8 x, const s8 y, const s8 z)
{
WGPIPE.s8 = x;
WGPIPE.s8 = y;
WGPIPE.s8 = z;
}
static inline void GXPosition2f32(const f32 x, const f32 y)
{
WGPIPE.f32 = x;
WGPIPE.f32 = y;
}
static inline void GXPosition2u16(const u16 x, const u16 y)
{
WGPIPE.u16 = x;
WGPIPE.u16 = y;
}
static inline void GXPosition2s16(const s16 x, const s16 y)
{
WGPIPE.s16 = x;
WGPIPE.s16 = y;
}
static inline void GXPosition2u8(const u8 x, const u8 y)
{
WGPIPE.u8 = x;
WGPIPE.u8 = y;
}
static inline void GXPosition2s8(const s8 x, const s8 y)
{
WGPIPE.s8 = x;
WGPIPE.s8 = y;
}
static inline void GXPosition1x8(const u8 index)
{
WGPIPE.u8 = index;
}
static inline void GXPosition1x16(const u16 index)
{
WGPIPE.u16 = index;
}
static inline void GXNormal3f32(const f32 nx, const f32 ny, const f32 nz)
{
WGPIPE.f32 = nx;
WGPIPE.f32 = ny;
WGPIPE.f32 = nz;
}
static inline void GXNormal3s16(const s16 nx, const s16 ny, const s16 nz)
{
WGPIPE.s16 = nx;
WGPIPE.s16 = ny;
WGPIPE.s16 = nz;
}
static inline void GXNormal3s8(const s8 nx, const s8 ny, const s8 nz)
{
WGPIPE.s8 = nx;
WGPIPE.s8 = ny;
WGPIPE.s8 = nz;
}
static inline void GXNormal1x8(const u8 index)
{
WGPIPE.u8 = index;
}
static inline void GXNormal1x16(const u16 index)
{
WGPIPE.u16 = index;
}
static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a)
{
WGPIPE.u8 = r;
WGPIPE.u8 = g;
WGPIPE.u8 = b;
WGPIPE.u8 = a;
}
static inline void GXColor3u8(const u8 r, const u8 g, const u8 b)
{
WGPIPE.u8 = r;
WGPIPE.u8 = g;
WGPIPE.u8 = b;
}
static inline void GXColor3f32(const f32 r, const f32 g, const f32 b)
{
WGPIPE.u8 = (u8) (r * 255.0);
WGPIPE.u8 = (u8) (g * 255.0);
WGPIPE.u8 = (u8) (b * 255.0);
}
static inline void GXColor1u32(const u32 clr)
{
WGPIPE.u32 = clr;
}
static inline void GXColor1u16(const u16 clr)
{
WGPIPE.u16 = clr;
}
static inline void GXColor1x8(const u8 index)
{
WGPIPE.u8 = index;
}
static inline void GXColor1x16(const u16 index)
{
WGPIPE.u16 = index;
}
static inline void GXTexCoord2f32(const f32 s, const f32 t)
{
WGPIPE.f32 = s;
WGPIPE.f32 = t;
}
static inline void GXTexCoord2u16(const u16 s, const u16 t)
{
WGPIPE.u16 = s;
WGPIPE.u16 = t;
}
static inline void GXTexCoord2s16(const s16 s, const s16 t)
{
WGPIPE.s16 = s;
WGPIPE.s16 = t;
}
static inline void GXTexCoord2u8(const u8 s, const u8 t)
{
WGPIPE.u8 = s;
WGPIPE.u8 = t;
}
static inline void GXTexCoord2s8(const s8 s, const s8 t)
{
WGPIPE.s8 = s;
WGPIPE.s8 = t;
}
static inline void GXTexCoord1f32(const f32 s)
{
WGPIPE.f32 = s;
}
static inline void GXTexCoord1u16(const u16 s)
{
WGPIPE.u16 = s;
}
static inline void GXTexCoord1s16(const s16 s)
{
WGPIPE.s16 = s;
}
static inline void GXTexCoord1u8(const u8 s)
{
WGPIPE.u8 = s;
}
static inline void GXTexCoord1s8(const s8 s)
{
WGPIPE.s8 = s;
}
static inline void GXTexCoord1x8(const u8 index)
{
WGPIPE.u8 = index;
}
static inline void GXTexCoord1x16(const u16 index)
{
WGPIPE.u16 = index;
}
static inline void GXMatrixIndex1u8(const u8 index)
{
WGPIPE.u8 = index;
}
#define DOLPHIN_GX___GXBUMP_H
void __GXFlushTextureState(void);
#define DOLPHIN_GX___GXFIFO_H
void __GXFifoInit(void);
void GXSetGPFifo(GXFifoObj* fifo);
void GXSetCPUFifo(GXFifoObj* fifo);
void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size);
#define DOLPHIN_GX___GXINIT_H
/* 004D2788 */ extern GXContexts __GXContexts;
static inline void set_x2(GXBool value)
{
__GXContexts.main->x0.u16[1] = value;
}
#define DOLPHIN_GX___GXMISC_HG
/* 00339BB0 */ extern void __GXPEInit(void);
void GXPokeZMode(bool compare_enable, GXCompare func, bool update_enable);
void GXPokeDstAlpha(bool enable, u8 alpha);
void GXPokeAlphaRead(s32 mode);
void GXPokeAlphaMode(GXCompare func, u8 threshold);
void GXPokeBlendMode(GXBlendMode type, GXBlendFactor src_factor,
GXBlendFactor dst_factor, GXLogicOp op);
void GXPokeDither(s32 dither);
void GXPokeAlphaUpdate(bool update_enable);
void GXPokeColorUpdate(bool update_enable);
#define HIO_DEV Dev
typedef void (*HIOCallback)(void);
typedef bool (*HIOEnumCallback)(s32 chan);
bool HIOEnumDevices(HIOEnumCallback callback);
bool HIOInit(s32 chan, HIOCallback callback);
bool HIOReadMailbox(u32* word);
bool HIOWriteMailbox(u32 word);
bool HIORead(u32 addr, void* buffer, s32 size);
bool HIOWrite(u32 addr, void* buffer, s32 size);
bool HIOReadAsync(u32 addr, void* buffer, s32 size, HIOCallback callback);
bool HIOWriteAsync(u32 addr, void* buffer, s32 size, HIOCallback callback);
bool HIOReadStatus(u32* status);
#define DOLPHIN_MCC_FIO_H
/* 32EA84 */ M2C_UNK fioMccChannelEvent();
/* 32EB44 */ M2C_UNK FIOInit();
/* 32EC00 */ M2C_UNK FIOExit();
/* 32EC6C */ M2C_UNK FIOQuery();
/* 32ED8C */ M2C_UNK FIOFopen();
/* 32EE94 */ M2C_UNK FIOFclose();
/* 32EF48 */ M2C_UNK FIOFwrite();
/* 32F020 */ M2C_UNK fioPacketMakeHeader();
/* 32F0E4 */ M2C_UNK fioPacketSendPacket();
/* 32F228 */ M2C_UNK fioPacketReceiveResult();
/* 32F390 */ M2C_UNK fioPacketReceiveDone();
/* 32F39C */ M2C_UNK fioPacketWrite();
/* 32F468 */ M2C_UNK fioPacketResultWrite();
#define DOLPHIN_MCC_MCC_H
/* 32C74C */ M2C_UNK callbackEventStream();
/* 32C7D0 */ M2C_UNK MCCStreamOpen();
/* 32C848 */ M2C_UNK MCCStreamClose();
/* 32C880 */ M2C_UNK MCCStreamWrite();
/* 32CA60 */ M2C_UNK LoadChannelInfo();
/* 32CB7C */ M2C_UNK FlushChannelInfo();
/* 32CC80 */ void SetChannelInfoDirty(bool dirty);
/* 32CC88 */ M2C_UNK MakeMemoryMap();
/* 32CD40 */ M2C_UNK SearchFreeBlocks();
/* 32CE40 */ M2C_UNK NotifyCompulsorily();
/* 32CF48 */ M2C_UNK WaitAMinute();
/* 32CFD8 */ M2C_UNK MailboxCheck();
/* 32D260 */ M2C_UNK MCCExiCallback();
/* 32D280 */ M2C_UNK MCCTxCallback();
/* 32D29C */ M2C_UNK MCCRxCallback();
/* 32D2B8 */ M2C_UNK mccInitializeCheck();
/* 32D5E8 */ M2C_UNK MCCInit();
/* 32D88C */ M2C_UNK MCCExit();
/* 32D954 */ M2C_UNK MCCEnumDevices();
/* 32D9AC */ M2C_UNK MCCGetFreeBlocks();
/* 32DA3C */ u8 MCCGetLastError(void);
/* 32DA44 */ M2C_UNK MCCGetChannelInfo();
/* 32DB14 */ M2C_UNK MCCGetConnectionStatus();
/* 32DBD4 */ M2C_UNK MCCNotify();
/* 32DCB0 */ M2C_UNK MCCSetChannelEventMask();
/* 32DDC0 */ M2C_UNK MCCOpen();
/* 32DFDC */ M2C_UNK MCCClose();
/* 32E1B8 */ M2C_UNK MCCRead();
/* 32E504 */ M2C_UNK MCCWrite();
/* 32E868 */ M2C_UNK MCCCheckAsyncDone();
#define __MTX_H__
void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f);
void C_MTXIdentity(Mtx m);
void C_MTXCopy(const Mtx src, Mtx dst);
void C_MTXConcat(const Mtx a, const Mtx b, Mtx ab);
void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase,
u32 count);
void C_MTXTranspose(const Mtx src, Mtx xPose);
void C_MTXFrustum(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
u32 C_MTXInverse(const Mtx src, Mtx inv);
u32 C_MTXInvXpose(const Mtx src, Mtx invX);
void PSMTXIdentity(Mtx m);
void PSMTXCopy(const Mtx src, Mtx dst);
void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab);
void PSMTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase,
u32 count);
void PSMTXTranspose(const Mtx src, Mtx xPose);
u32 PSMTXInverse(const Mtx src, Mtx inv);
u32 PSMTXInvXpose(const Mtx src, Mtx invX);
#define MTXIdentity PSMTXIdentity
#define MTXCopy PSMTXCopy
#define MTXConcat PSMTXConcat
#define MTXConcatArray PSMTXConcatArray
#define MTXTranspose PSMTXTranspose
#define MTXInverse PSMTXInverse
#define MTXInvXpose PSMTXInvXpose
void C_MTXQuat(Mtx m, const Quaternion* q);
void C_MTXReflect(Mtx m, const Vec3* p, const Vec3* n);
void C_MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT);
void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
void C_MTXRotRad(Mtx m, char axis, f32 rad);
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
void C_MTXRotAxisRad(Mtx m, const Vec3* axis, f32 rad);
void C_MTXLookAt(Mtx m, Vec3* cam_pos, Vec3* up, Vec3* target);
void PSMTXQuat(Mtx m, const Quaternion* q);
void PSMTXReflect(Mtx m, const Vec3* p, const Vec3* n);
void PSMTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
void PSMTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
void PSMTXRotRad(Mtx m, char axis, f32 rad);
void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
void PSMTXRotAxisRad(Mtx m, const Vec3* axis, f32 rad);
#define MTXQuat PSMTXQuat
#define MTXReflect PSMTXReflect
#define MTXTrans PSMTXTrans
#define MTXTransApply PSMTXTransApply
#define MTXScale PSMTXScale
#define MTXScaleApply PSMTXScaleApply
#define MTXRotRad PSMTXRotRad
#define MTXRotTrig PSMTXRotTrig
#define MTXRotAxisRad PSMTXRotAxisRad
void PSMTXIdentity(Mtx m);
void PSMTXTrans(Mtx m, f32 x_trans, f32 y_trans, f32 z_trans);
void PSMTXScale(Mtx m, f32 x_scale, f32 y_scale, f32 z_scale);
#define MTXLightPerspective C_MTXLightPerspective
#define MTXLightFrustum C_MTXLightFrustum
#define MTXLightOrtho C_MTXLightOrtho
void C_MTXLightPerspective(Mtx m, f32 fov, f32 aspect, f32 x_scale,
f32 y_scale, f32 z_x_mult, f32 z_y_mult);
void C_MTXLightFrustum(Mtx m, f32 top, f32 bottom, f32 left, f32 right,
f32 near, f32 x_scale, f32 y_scale, f32 z_x_mult,
f32 z_y_mult);
void C_MTXLightOrtho(Mtx m, f32 top, f32 bottom, f32 left, f32 right,
f32 x_scale, f32 y_scale, f32 z_x_mult, f32 z_y_mult);
#define DOLPHIN_MTX_MTXVEC_H
void PSMTXMUltiVec(Mtx, Vec3*, Vec3*);
void PSMTXMultVecSR(Mtx, Vec3*, Vec3*);
#define DOLPHIN_MTX_VEC_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)))
#define VECCrossProduct PSVECCrossProduct
#define VECSubtract PSVECSubtract
#define VECNormalize PSVECNormalize
#define VECAdd PSVECAdd
#define VECScale PSVECScale
#define VECMag PSVECMag
#define VECDotProduct PSVECDotProduct
void PSVECCrossProduct(Vec3* a, Vec3* b, Vec3* axb);
void PSVECSubtract(Vec3 const* a, Vec3 const* b, Vec3* ab);
void PSVECNormalize(Vec3* a, Vec3* b);
void PSVECAdd(Vec3* a, Vec3* b, Vec3* result);
void PSVECScale(Vec3* src, Vec3* dst, float scale);
float PSVECMag(Vec3* v);
float PSVECDotProduct(Vec3* a, Vec3* b);
#define DOLPHIN_OS_OSAUDIOSYSTEM_H
void __OSInitAudioSystem(void);
void __OSStopAudioSystem(void);
typedef struct OSBootInfo {
DVDDiskID DVDDiskID; // _00
u32 magic; // _20
u32 version; // _24
u32 memorySize; // _28
u32 consoleType; // _2C
void* arenaLo; // _30, overrides __ArenaLo if non-null
void* arenaHi; // _34, overrides FSTLocation if non-null
void* FSTLocation; // _38, start addr of FST area
u32 FSTMaxLength; // _3C, length of FST area
} OSBootInfo;
/** @file
* @todo Should be called @c OS.h.
*/
#define DOLPHIN_OS_OS_H
extern vu32 __PIRegs[12] ;
extern vu32 __DIRegs[16] ;
__OSExceptionHandler __OSGetExceptionHandler(u8);
__OSExceptionHandler __OSSetExceptionHandler(u8, __OSExceptionHandler);
u32 OSGetConsoleType(void);
void OSInit(void);
void __OSPSInit(void);
void OSExceptionInit(void);
void __OSDBIntegrator(void);
void __OSDBJump(void);
void __DBVECTOR(void);
void __OSEVSetNumber(void);
void __OSEVEnd(void);
void OSExceptionVector(void);
void OSDefaultExceptionHandler(void);
void ClearArena(void);
u32 __OSGetDIConfig(void);
#define DOLPHIN_OS_OSREBOOT_H
void __OSReboot(u32 resetCode, bool forceMenu);
void Run(Event);
void __OSReboot(u32 resetCode, bool forceMenu);
#define DOLPHIN_OS_OSRTC
typedef struct OSSram {
u16 checkSum;
u16 checkSumInv;
u32 ead0;
u32 ead1;
u32 counterBias;
s8 displayOffsetH;
u8 ntd;
u8 language;
u8 flags;
} OSSram;
typedef struct OSSramEx {
u8 flashID[2][12];
u32 wirelessKeyboardID;
u16 wirelessPadID[4];
u8 dvdErrorCode;
u8 _padding0;
u8 flashIDCheckSum[2];
u16 gbs;
u8 _padding1[2];
} OSSramEx;
OSSram* __OSLockSram(void);
OSSramEx* __OSLockSramEx(void);
void __OSUnlockSram(bool commit);
void __OSUnlockSramEx(bool commit);
bool __OSSyncSram(void);
u32 OSGetWirelessID(u32 chan);
void OSSetWirelessID(u32 chan, u16 id);
u32 OSGetSoundMode(void);
void OSSetSoundMode(u32 mode);
u32 OSGetProgressiveMode(void);
void OSSetProgressiveMode(u32 mode);
void WriteSramCallback(s32 unused0, OSContext* unused1);
void __OSInitSram(void);
#define DOLPHIN_OS_OSUARTEXI_H
s32 ReadUARTN(void);
void WriteUARTN(void);
s32 InitializeUART(void);
#define DOLPHIN_OS_INIT___PPC_EABI_INIT_H
void __init_user(void);
void _ExitProcess(void);
void __init_hardware(void);
void __flush_cache(void* address, size_t size);
#define DOLPHIN_OS_INIT___START_H
#define PAD3_BUTTON_ADDR 0x800030E4
#define EXCEPTIONMASK_ADDR 0x80000044
#define BOOTINFO2_ADDR 0x800000F4
#define OS_BI2_DEBUGFLAG_OFFSET 0xC
#define ARENAHI_ADDR 0x80000034
#define DEBUGFLAG_ADDR 0x800030E8
#define DVD_DEVICECODE_ADDR 0x800030E6
#define MSR_FP 0x2000
extern void InitMetroTRK(void);
u16 Pad3Button ;
extern int main(int argc, char* argv[]);
extern void exit(int);
extern void __init_user(void);
extern void OSInit(void);
extern void DBInit(void);
void __check_pad3(void);
void __start(void);
void __init_data(void);
void __init_hardware(void);
void __flush_cache(void* address, size_t size);
extern u8 _stack_addr[];
extern u8 _SDA_BASE_[];
extern u8 _SDA2_BASE_[];
typedef struct __rom_copy_info {
u8* rom;
void* addr;
size_t size;
} __rom_copy_info;
extern __rom_copy_info _rom_copy_info[];
typedef struct __bss_init_info {
void* addr;
size_t size;
} __bss_init_info;
extern __bss_init_info _bss_init_info[];
#define DOLPHIN_PAD_PADCLAMP_H
void ClampStick(s8* px, s8* py, s8 max, s8 xy, s8 min);
#define DOLPHIN_PAD_FORWARD_H
typedef struct PADStatus PADStatus;
#define _PAD_H_
#define PAD_CHAN0 0
#define PAD_CHAN1 1
#define PAD_CHAN2 2
#define PAD_CHAN3 3
#define PAD_CHANMAX 4
#define PAD_CHAN0_BIT 0x80000000
#define PAD_CHAN1_BIT 0x40000000
#define PAD_CHAN2_BIT 0x20000000
#define PAD_CHAN3_BIT 0x10000000
#define PAD_ERR_NO_CONTROLLER -1
#define PAD_ERR_NONE 0
#define PAD_SPEC_2 2
struct PADStatus {
u16 button;
s8 stickX;
s8 stickY;
s8 substickX;
s8 substickY;
u8 triggerLeft;
u8 triggerRight;
u8 analogA;
u8 analogB;
s8 err;
};
extern u32 __PADFixBits;
void PADControlMotor(int chan, u32 command);
void VISetBlack(bool);
u32 VIGetRetraceCount(void);
void PADClamp(PADStatus*);
void PADRead(PADStatus*);
void PADReset(u32);
void PADTypeAndStatusCallback(s32 chan, u32 type);
void PADSetSpec(s32);
void PADInit(void);
bool __PADDisableRecalibration(bool);
void PADRecalibrate(s32);
void PADOriginCallback(s32 unused0, s32 arg1);
void PADOriginUpdateCallback(s32 chan, u32 error, OSContext* context);
void PADProbeCallback(s32 chan, u32 error, OSContext* context);
void UpdateOrigin(s32 arg0);
#define _vi_h_
#define VIPadFrameBufferWidth(width) ((u16) (((u16) (width) + 15) & ~15))
#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 void (*VIRetraceCallback)(u32 retraceCount);
u32 VIGetTvFormat(void);
void VIConfigure(GXRenderModeObj*);
void VISetBlack(bool);
void VIFlush(void);
void VISetNextFrameBuffer(void*);
void VIWaitForRetrace(void);
void VIInit(void);
u32 VIGetNextField(void);
M2C_UNK VIGetDTVStatus(void);
VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback callback);
VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback);
#define GALE01_028B9C
#define MELEE_CM_FORWARD_H
// typedef struct Camera Camera;
typedef struct CameraBounds CameraBounds;
typedef struct CameraBox CameraBox;
typedef struct CameraMovement CameraMovement;
typedef struct CameraUnkGlobals CameraUnkGlobals;
typedef struct CameraDebugMode CameraDebugMode;
typedef struct CameraModeCallbacks CameraModeCallbacks;
typedef struct CameraFixednessMult CameraFixednessMult;
#define SYSDOLPHIN_BASELIB_FORWARD_H
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_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_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_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_PEDesc HSD_PEDesc;
typedef struct HSD_PObj HSD_PObj;
typedef struct HSD_PObjDesc HSD_PObjDesc;
typedef struct HSD_PObjInfo HSD_PObjInfo;
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_Spline HSD_Spline;
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 sislib_UnkAlloc3 sislib_UnkAlloc3;
typedef struct sislib_UnkAllocData sislib_UnkAllocData;
typedef struct TextKerning TextKerning;
typedef struct UnkGeneratorMember UnkGeneratorMember;
typedef struct UnkGeneratorStruct UnkGeneratorStruct;
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 void (*GObj_RenderFunc)(HSD_GObj* gobj, int code);
typedef void (*HSD_ObjUpdateFunc)(void* obj, enum_t type, HSD_ObjData* fval);
typedef void (*HSD_DevComCallback)(void*, int, 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_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 3
#define LOBJ_LIGHT_ATTN_NONE 0
#define LOBJ_LIGHT_ATTN 1
#define MELEE_CM_TYPES_H
struct CameraBox {
CameraBox* next;
CameraBox* prev;
bool x8;
/* +C:0 */ u8 xC_b0 : 1;
u8 xD_fill[0x10 - 0xD];
Vec3 x10; // might be Vec2?
Vec3 x1C;
float x28;
Vec2 x2C;
Vec3 x34;
Vec2 x40;
Vec3 x48;
Vec3 x54;
Vec3 x60;
};
struct CameraMovement {
/* +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 subjects;
float z_pos;
};
struct UnkInternalCameraStruct {
/* 0x0 */ s32 x0;
/* 0x4 */ s32 x4;
/* 0x8 */ s32 x8;
/* 0xC */ s32 xC;
};
typedef struct Camera {
/* 0x000 */ HSD_GObj* gobj;
/* 0x004 */ u32 mode;
/* 0x008 */ u8 background_r;
/* 0x009 */ u8 background_g;
/* 0x00A */ u8 background_b;
/* 0x00B */ s8 pad_B;
/* 0x00C */ f32 nearz;
/* 0x010 */ f32 farz;
/* 0x014 */ CameraMovement movement;
/* 0x04C */ CameraMovement movement_lerp;
/* 0x084 */ Vec2 translation;
/* 0x08C */ s32 unk_8C[5]; /* maybe part of translation[4]? */
/* 0x0A0 */ HSD_GObj* unk_A0;
/* 0x0A4 */ f32 unk_A4;
/* 0x0A8 */ f32 unk_A8;
/* 0x0AC */ f32 unk_AC; /* inferred */
/* 0x0B0 */ struct UnkInternalCameraStruct unk_B0[2][8];
/* 0x1B0 */ struct UnkInternalCameraStruct unk_1B0[2][8];
/* 0x2B0 */ u8 pad_2B0[0x2BC - 0x2B0];
/* 0x2BC */ f32 unk_2bc;
/* 0x2C0 */ f32 unk_2c0;
/* 0x2C4 */ char pad_2C4[0x7D]; /* maybe part of unk_2c0[0x20]? */
/* 0x341:0 */ u8 unk_341_b0 : 1;
/* 0x341:1 */ u8 unk_341_b1 : 1;
/* 0x341:2 */ u8 unk_341_b2 : 1;
/* 0x341:3 */ u8 unk_341_b3 : 1;
/* 0x341:4 */ u8 unk_341_b4 : 1;
/* 0x341:5 */ u8 unk_341_b5 : 1;
/* 0x341:6 */ u8 unk_341_b6 : 1;
/* 0x341:7 */ u8 unk_341_b7 : 1;
/* 0x342 */ char pad_342[0x56]; /* maybe part of unk_341[0x57]? */
/* 0x398:0 */ u8 unk_398_b0 : 1;
/* 0x398:1 */ u8 unk_398_b1 : 1;
/* 0x398:2 */ u8 unk_398_b2 : 1;
/* 0x398:3 */ u8 unk_398_b3 : 1;
/* 0x398:4 */ u8 unk_398_b4 : 1;
/* 0x398:5 */ u8 unk_398_b5 : 1;
/* 0x398:6 */ u8 unk_398_b6_b7 : 2;
/* 0x399:0 */ u8 unk_399_b0_b1 : 2;
/* 0x399:2 */ u8 unk_399_b2 : 1;
/* 0x399:3 */ u8 unk_399_b3 : 1;
/* 0x399:4 */ u8 unk_399_b4 : 1;
/* 0x399:5 */ u8 unk_399_b5 : 1;
/* 0x399:6 */ u8 unk_399_b6 : 1;
/* 0x399:7 */ u8 unk_399_b7 : 1;
/* 0x39A:0 */ u8 unk_39A_b0 : 1;
/* 0x39A:1 */ u8 unk_39A_b1 : 1;
/* 0x39A:2 */ u8 unk_39A_b2 : 1;
/* 0x39A:3 */ u8 unk_39A_b3 : 1;
/* 0x39A:4 */ u8 unk_39A_b4 : 1;
/* 0x39A:5 */ u8 unk_39A_b5 : 1;
/* 0x39A:6 */ u8 unk_39A_b6 : 1;
/* 0x39A:7 */ u8 unk_39A_b7 : 1;
/* 0x39B */ char pad_39B[5]; /* maybe part of unk_39A[6]? */
/* 0x3A0 */ u32 last_mode;
} Camera; /* size = 0x3A4 */
/// @todo Size should be 0x39C like #cm_80452C68
struct { int x[1 - 2 * !(sizeof(struct Camera) == 0x3A4)]; };;
struct CameraUnkGlobals {
/* +0 */ float _0[11];
/* +2C */ float x2C;
/* +30 */ float x30;
/* +34 */ float x34;
/* +38 */ float x38;
/* +3C */ float x3C;
/* +40 */ float x40;
/* +44 */ float _44[43];
};
// global vars for camera mode 7 and 8
// mode 7 will attach and follow a player, and 8 is free cam
struct CameraDebugMode {
/* +00 */ u32 last_mode;
/* +04 */ int ply_slot;
/* +08 */ Vec3 mode7_int_offset;
/* +14 */ Vec3 mode7_eye_offset;
/* +20 */ Vec3 mode7_eye_pos;
/* +2C */ Vec3 mode7_int_pos;
/* +38 */ float mode7_fov;
/* +3C */ Vec3 mode8_int_pos;
/* +48 */ Vec3 mode8_eye_pos;
/* +54 */ float mode8_fov;
/* +58 */ u8 x4c[0x8]; // padding? not sure if this is correct
};
struct CameraModeCallbacks {
void* mode_0;
void* mode_1;
void* mode_2;
void* mode_3;
void* mode_4;
void* mode_5;
void* mode_6;
void* mode_7;
void* mode_8;
};
struct CameraFixednessMult {
float x0;
float x4;
float x8;
float xC;
float x10;
};
#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 == ((void*) 0)) {
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)(s32, s32);
typedef void (*PanicCallback)(OSContext*, ...);
typedef int (*LogFunc)(s32, s32, s32*, s32);
void __assert(char*, u32, char*);
void HSD_LogInit(void);
void HSD_Panic(char*, u32, char*);
/// @todo Take @c file as another arg, ignore it if @c BUGFIX.
#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))
int report_func(s32 arg0, s32 arg1, s32* arg2, s32 arg3);
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 != ((void*) 0)) {
((HSD_Obj*) o)->ref_count++;
((((HSD_Obj*) o)->ref_count != ((u16) - 1)) ? ((void) 0) : __assert("src/sysdolphin/baselib/object.h", 93, "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", 158, "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, Mtx 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*);
u32 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_80028B9C(int);
/* 028F5C */ void Camera_80028F5C(CameraBox* subject, s32 arg1);
/* 029020 */ CameraBox* Camera_80029020(void);
/* 029044 */ CameraBox* Camera_80029044(int);
/* 0290D4 */ void Camera_800290D4(CameraBox*);
/* 029124 */ u32 Camera_80029124(Vec3*, s32);
/* 02928C */ s32 Camera_8002928C(CameraBox*);
/* 0293E0 */ M2C_UNK Camera_800293E0();
/* 02958C */ M2C_UNK Camera_8002958C();
/* 029AAC */ void Camera_80028F5C(CameraBox*, s32);
/* 029BC4 */ void Camera_80029BC4(CameraBounds* bounds,
CameraMovement* movement);
/* 029C88 */ void Camera_80029C88(CameraMovement* movement, f32);
/* 029CF8 */ M2C_UNK Camera_80029CF8();
/* 02A0C0 */ M2C_UNK Camera_8002A0C0();
/* 02A278 */ void Camera_8002A278(float x, float y);
/* 02A28C */ M2C_UNK Camera_8002A28C();
/* 02A4AC */ void Camera_8002A4AC(HSD_GObj*);
/* 02A768 */ void Camera_8002A768(CameraMovement* movement, int arg1);
/* 02AF68 */ M2C_UNK Camera_8002AF68();
/* 02B0E0 */ M2C_UNK Camera_8002B0E0();
/* 02B1F8 */ void Camera_8002B1F8(CameraMovement* movement);
/* 02B3D4 */ void Camera_8002B3D4(void);
/* 02B694 */ M2C_UNK Camera_8002B694();
/* 02BA00 */ M2C_UNK Camera_8002BA00();
/* 02BAA8 */ M2C_UNK Camera_8002BAA8();
/* 02BC78 */ M2C_UNK Camera_8002BC78();
/* 02BD88 */ M2C_UNK Camera_8002BD88();
/* 02C010 */ M2C_UNK Camera_8002C010();
/* 02C1A8 */ M2C_UNK Camera_8002C1A8();
/* 02C5B4 */ M2C_UNK Camera_8002C5B4();
/* 02C908 */ void Camera_8002C908(void);
/* 02CB0C */ M2C_UNK Camera_8002CB0C();
/* 02CDDC */ void Camera_8002CDDC(void);
/* 02D318 */ void Camera_8002D318(void);
/* 02D85C */ void Camera_8002D85C(void);
/* 02DDC4 */ void Camera_8002DDC4(void);
/* 02DFE4 */ M2C_UNK Camera_8002DFE4();
/* 02E158 */ M2C_UNK Camera_8002E158();
/* 02E234 */ M2C_UNK Camera_8002E234();
/* 02E490 */ void Camera_8002E490(void);
/* 02E6FC */ void Camera_8002E6FC(u8);
/* 02E818 */ void Camera_8002E818(Vec3*);
/* 02E948 */ void Camera_8002E948(bool (*)(Vec3*));
/* 02EA64 */ void Camera_8002EA64(Vec3*);
/* 02EB5C */ void Camera_8002EB5C(float);
/* 02EC7C */ void Camera_8002EC7C(float);
/* 02ED9C */ void Camera_8002ED9C(float);
/* 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 */ M2C_UNK fn_8002F360();
/* 02F3AC */ M2C_UNK Camera_8002F3AC();
/* 02F474 */ void Camera_8002F474(void);
/* 02F488 */ M2C_UNK fn_8002F488();
/* 02F4D4 */ M2C_UNK Camera_8002F4D4();
/* 02F73C */ M2C_UNK Camera_8002F73C();
/* 02F760 */ M2C_UNK Camera_8002F760();
/* 02F784 */ M2C_UNK Camera_8002F784();
/* 02F7AC */ M2C_UNK Camera_8002F7AC();
/* 02F8F4 */ void Camera_8002F8F4(void);
/* 02F908 */ M2C_UNK fn_8002F908();
/* 02F9E4 */ M2C_UNK Camera_8002F9E4();
/* 02FBA0 */ M2C_UNK fn_8002FBA0();
/* 02FC7C */ M2C_UNK Camera_8002FC7C();
/* 02FE38 */ M2C_UNK Camera_8002FE38();
/* 02FEEC */ void Camera_8002FEEC(int);
/* 03006C */ M2C_UNK Camera_8003006C();
/* 0300F0 */ M2C_UNK Camera_800300F0();
/* 03010C */ bool Camera_8003010C(void);
/* 030130 */ bool Camera_80030130(void);
/* 030154 */ bool Camera_80030154(void);
/* 030178 */ bool Camera_80030178(void);
/* 03019C */ M2C_UNK Camera_8003019C();
/* 0301D0 */ M2C_UNK fn_800301D0();
/* 0304E0 */ M2C_UNK Camera_800304E0();
/* 030688 */ M2C_UNK Camera_80030688();
/* 030730 */ void Camera_80030730(f32 arg8);
/* 030740 */ void Camera_SetBackgroundColor(u8 r, u8 g, u8 b);
/* 030758 */ M2C_UNK Camera_80030758();
/* 030788 */ void Camera_80030788(Vec3*);
/* 0307AC */ M2C_UNK Camera_800307AC();
/* 0307D0 */ M2C_UNK Camera_800307D0();
/* 030A50 */ HSD_GObj* Camera_80030A50(void);
/* 030A60 */ void Camera_80030A60(bool arg0);
/* 030A78 */ bool Camera_80030A78(void);
/* 030A8C */ void Camera_80030A8C(bool arg0);
/* 030AA4 */ void Camera_SetStageVisible(int);
/* 030AC4 */ M2C_UNK Camera_80030AC4();
/* 030AE0 */ void Camera_80030AE0(bool arg0);
/* 030AF8 */ bool Camera_80030AF8(void);
/* 030B0C */ void Camera_80030B0C(bool arg0);
/* 030B24 */ bool Camera_80030B24(void);
/* 030B38 */ void Camera_80030B38(bool arg0);
/* 030B50 */ bool Camera_80030B50(void);
/* 030B64 */ void Camera_80030B64(bool arg0);
/* 030B7C */ bool Camera_80030B7C(void);
/* 030B90 */ void Camera_80030B90(bool arg0);
/* 030BA8 */ bool Camera_80030BA8(void);
/* 030BBC */ M2C_UNK Camera_80030BBC();
/* 030CD8 */ bool Camera_80030CD8(CameraBox*, S32Vec2*);
/* 030CFC */ bool Camera_80030CFC(CameraBox*, float);
/* 030DE4 */ void Camera_80030DE4(f32 arg8, f32 arg9);
/* 030DF8 */ M2C_UNK Camera_80030DF8();
/* 030E10 */ M2C_UNK Camera_80030E10();
/* 030E34 */ void Camera_80030E34(f32 arg8);
/* 030E44 */ void Camera_80030E44(enum_t, Vec3*);
/* 031044 */ M2C_UNK Camera_80031044();
/* 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 */ M2C_UNK Camera_800310E8();
/* 031144 */ float Camera_80031144(void);
/* 031154 */ bool Camera_80031154(Vec3*);
/* 03118C */ bool Camera_8003118C(Vec3*, float);
/* 0311CC */ void Camera_800311CC(f32 arg8);
/* 0311DC */ void Camera_800311DC(f32 arg8);
/* 0311EC */ M2C_UNK Camera_800311EC();
/* 031328 */ M2C_UNK Camera_80031328();
/* 0313E0 */ void Camera_800313E0(HSD_GObj*, u64);
/* 453004 */ extern CameraDebugMode cm_80453004;
#define __GALE01_028B9C
#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 == ((void*) 0)) {
return;
}
if (ref_DEC(wobj) != 0) {
if (wobj != ((void*) 0)) {
(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);
/// .bss
/* 452C68 */ static Camera cm_80452C68;
// /* 453004 */ static CameraDebugMode cm_80453004;
// .data
/* 3BCB18 */ static CameraModeCallbacks cm_803BCB18 = {
Camera_8002B3D4, Camera_8002CDDC, Camera_8002D318,
Camera_8002D85C, Camera_8002DDC4, Camera_8002C908,
Camera_8002E490, 0, 0
};
/* 3BCB3C */ static HSD_WObjDesc cm_803BCB3C = {
((void*) 0), { 0.0f, 40.241425f, 300.241f }, 0
};
/* 3BCB50 */ static HSD_WObjDesc cm_803BCB50 = {
((void*) 0), { 0.0f, 10.0f, 0.0f }, 0
};
/* 3BCB64 */ static HSD_CameraDescPerspective cm_803BCB64 = {
0, 0, 1, { 0, 0x280, 0, 0x1E0}, { 0, 0x280, 0, 0x1E0},
&cm_803BCB3C, &cm_803BCB50, 0.0f, ((void*) 0), 0.1f, 16384.0f, 30.0f, 1.2173333f
};
/* 3BCB9C */ static CameraFixednessMult cm_803BCB9C = { 0.0f, 1.5f, 1.32f, 1.16f, 1.0f };
/* 3BCBB0 */ static s8 cm_803BCBB0[0x20] = "couldn't get CmSubject struct.\n";
/* 3BCBD0 */ static char cm_803BCBD0[0xB] = "camera.c";
/* 3BCBDC */ static char cm_803BCBDC[0x1B] = "fov_u<MTXDegToRad(90.0F)";
/* 3BCBF8 */ static char cm_803BCBF8[0x1B] = "fov_d<MTXDegToRad(90.0F)";
/* 3BCC14 */ static char cm_803BCC14[0x1B] = "fov_r<MTXDegToRad(90.0F)";
/* 3BCC30 */ static char cm_803BCC30[0x1B] = "fov_l<MTXDegToRad(90.0F)";
// /* 3BCC4C */ static void* jumptable_803BCC4C[8] = {
// (void*)0x8002a4f8,
// (void*)0x8002a554,
// (void*)0x8002a6c0,
// (void*)0x8002a6c0,
// (void*)0x8002a52c,
// (void*)0x8002a6c0,
// (void*)0x8002a700,
// (void*)0x8002a728,
// };
/* 3BCC70 */ static char lbl_803BCC70[0x17] = "rate>0.0F&&rate<=1.0F";
/* 3BCC88 */ static char lbl_803BCC88[0x17] = "snapshot! ptr=%08x\n";
/* 3BCCA0 */ static CameraUnkGlobals cm_803BCCA0 = {
83.0f, 1000.0f, -30.0f, 5.0f, -7.0f, 17.5f, -17.5f, 0.0f, 0.0682f,
60.0f, 120.0f, 0.05f, 0.1f, 120.0f, 900.0f, 0.15f, 38.0f, 0.1f,
0.1f, 0.001f, 0.1f, 1.0f, 1.0f, 0.6f, 0.6f, 0.05f, 0.1f,
29.0f, 0.1f, 0.1f, 0.1f, 0.1f, 0.5f, 0.5f, 0.4f, -11.0f,
400.0f, 0.2f, 4.0f, 0.05f, 1.0f, -7.0f, 7.0f, 0.5f, 0.5f,
0.004f, 0.2f, 0.025f, 0.2f, 0.003f, 0.2f, 0.025f, 0.2f, 0.02f,
1.0f, 0.14f, 1200.0f, -0.2f, 1.2f, 0.0f,
};
/// .rodata
/* 3B73B8 */ static Vec3 cm_803B73B8 = {0.0f, 0.0f, -1.0f};
/* 3B73C4 */ static Vec3 cm_803B73C4 = { 0.0f };
/* 3B73D0 */ static Vec3 cm_803B73D0 = { 0.0f, 1.0f, 0.0f };
/* 3B73DC */ static Vec3 cm_803B73DC = { 0.0f, 1.0f, 0.0f };
/// .sbss
/* 4D6458 */ static CameraBox* cm_804D6458;
/* 4D645C */ static CameraBox* cm_804D645C;
/* 4D6460 */ static CameraBox* cm_804D6460;
/* 4D6468 */ static CameraBox* cm_804D6468; // requires a size of 8?
/// .sdata
/* 4D3938 */ static char cm_804D3938[0x8] = "0";
/// sdata2
/* 4D7E00 */ float const cm_804D7E00 = -3.4028235E+38f;
/* 4D7E04 */ float const cm_804D7E04 = 1.0f;
/* 4D7E08 */ float const cm_804D7E08 = 0.1f; // near clip
/* 4D7E10 */ float const cm_804D7E0C = 16384.0f; // far clip
/* 4D7E10 */ float const cm_804D7E10 = -1.0f;
/* 4D7E14 */ float const cm_804D7E14 = 0.0f;
/* 4D7E18 */ double const cm_804D7E18 = 1.0f;
/* 4D7E20 */ double const cm_804D7E20 = 4503601774854144.0f;
/* 4D7E28 */ float const cm_804D7E28 = 0.64999998f;
/* 4D7E2C */ float const cm_804D7E2C = 0.34999999f;
/* 4D7E30 */ float const cm_804D7E30 = 0.5f;
/* 4D7E34 */ float const cm_804D7E34 = -0.5f;
/* 4D7E38 */ float const cm_804D7E38 = 3.4028235E+38f;
/* 4D7E3C */ float const cm_804D7E3C = 40.0f;
/* 4D7E40 */ float const cm_804D7E40 = 80.0f;
/* 4D7E44 */ float const cm_804D7E44 = 5000.0f;
/* 4D7E48 */ float const cm_804D7E48 = 4920.0f;
/* 4D7E4C */ float const cm_804D7E4C = 10.0f;
/* 4D7E50 */ float const cm_804D7E50 = 390.0f;
/* 4D7E54 */ float const cm_804D7E54 = 99999.0f;
/* 4D7E58 */ float const cm_804D7E58 = 0.000099999997f;
/* 4D7E5C */ float const cm_804D7E5C = 1000.0f;
/* 4D7E60 */ float const cm_804D7E60 = 0.017453292f; // deg2rad
/* 4D7E64 */ float const cm_804D7E64 = 1.5707964f; // rad2deg
/* 4D7E68 */ float const cm_804D7E68 = 0.001f;
/* 4D7E6C */ float const cm_804D7E6C = -0.001f;
/* 4D7E70 */ float const cm_804D7E70 = 30.0f;
/* 4D7E74 */ float const cm_804D7E74 = 0.85f;
/* 4D7E78 */ double const cm_804D7E78 = 0.5f;
/* 4D7E80 */ double const cm_804D7E80 = 3.0f;
/* 4D7E88 */ float const cm_804D7E88 = 0.999f;
/* 4D7E8C */ float const cm_804D7E8C = -0.999f;
/* 4D7E90 */ float const cm_804D7E90 = 5.0f;
/* 4D7E94 */ float const cm_804D7E94 = 20.0f;
/* 4D7E98 */ float const cm_804D7E98 = 3.0f;
/* 4D7EA0 */ double const cm_804D7EA0 = 0.125f;
/* 4D7EA8 */ float const cm_804D7EA8 = 2.0f;
/* 4D7EAC */ float const cm_804D7EAC = 2000.0f;
/* 4D7EB0 */ float const cm_804D7EB0 = -2000.0f;
/* 4D7EB8 */ double const cm_804D7EB8 = -1.0f;
/* 4D7EC0 */ float const cm_804D7EC0 = 4.0f;
/* 4D7EC8 */ float const cm_804D7EC8[2] = { 1.6963495f, 3.3702806E+12f};
/* 4D7ED0 */ float const cm_804D7ED0[2] = { 1.5713495f, 3.3702806E+12f };
/* 4D7ED8 */ float const cm_804D7ED8[2] = { 2.392699f, 3.3702806E+12f};
/* 4D7EE0 */ float const cm_804D7EE0[2] = { 2.142699f, 3.3702806E+12f};
/* 4D7EE8 */ float const cm_804D7EE8[2] = { 0.60239995f, -1.8890966E+26f};
/* 4D7EF0 */ double const cm_804D7EF0 = 0.0f;
/* 4D7EF8 */ float const cm_804D7EF8 = 8.5070587E+37f;
/* 4D7EFC */ float const cm_804D7EFC = -8.5070587E+37f;
/* 4D7F00 */ float const cm_804D7F00 = 2.1474836E+9f;
/* 4D7F04 */ float const cm_804D7F04 = -2.1474836E+9f;
/* 4D7F08 */ float const cm_804D7F08 = 10000.0f;
#define _CMSNAP_H_
#define GALE01_390730
#define _objalloc_h_
typedef struct _objheap {
u32 top;
u32 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", 205, "data"));
return data->used;
}
static inline u32 HSD_ObjAllocGetFreed(HSD_ObjAllocData* data)
{
((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 221, "data"));
return data->free;
}
static inline u32 HSD_ObjAllocGetPeak(HSD_ObjAllocData* data)
{
((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 237, "data"));
return data->peak;
}
static inline void HSD_ObjAllocSetNumLimit(HSD_ObjAllocData* data,
u32 num_limit)
{
((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 251, "data"));
data->num_limit = num_limit;
}
static inline void HSD_ObjAllocEnableNumLimit(HSD_ObjAllocData* data)
{
((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 278, "data"));
data->num_limit_flag = 1;
}
static inline void HSD_ObjAllocDisableNumLimit(HSD_ObjAllocData* data)
{
((data) ? ((void) 0) : __assert("src/sysdolphin/baselib/objalloc.h", 291, "data"));
data->num_limit_flag = 0;
}
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);
struct _GObjUnkStruct;
#define HSD_GOBJ_GXLINK_NONE ((u8) 0xFF)
#define HSD_GOBJ_OBJ_NONE 0xFF
#define HSD_GOBJ_CLASS_STAGE 0x3
#define HSD_GOBJ_CLASS_FIGHTER 0x4
#define HSD_GOBJ_CLASS_ITEM 0x6
/// Used by chain-type items in-game to link multiple parts together
#define HSD_GOBJ_CLASS_ITEMLINK 0x7
#define HSD_GOBJ_CLASS_EFFECT 0x8
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;
};
typedef struct _HSD_GObjLibInitDataType {
u8 p_link_max; // 804CE380
u8 gx_link_max; // 804CE381
u8 gproc_pri_max; // 804CE382
u32 unk_1; // 804CE384
u64* unk_2; // 804CE388
HSD_ObjAllocData gobj_def; // 804CE38C
HSD_ObjAllocData gobj_proc_def; // 804CE3B8
} HSD_GObjLibInitDataType;
/// @todo Belongs in `melee/` somewhere
typedef struct _HSD_GObjList {
/* +0 */ HSD_GObj* x0;
/* +4 */ HSD_GObj* x4;
/* +8 */ HSD_GObj* x8;
/* +C */ HSD_GObj* xC;
/* +10 */ HSD_GObj* x10;
/* +14 */ HSD_GObj* x14;
/* +18 */ HSD_GObj* x18;
/* +1C */ HSD_GObj* x1C;
/* +20 */ HSD_GObj* fighters;
/* +24 */ HSD_GObj* items;
/* +28 */ HSD_GObj* x28;
/* +2C */ HSD_GObj* x2C;
/* +30 */ HSD_GObj* x30;
/* +34 */ HSD_GObj* x34;
/* +38 */ HSD_GObj* x38;
/* +3C */ HSD_GObj* x3C;
/* +40 */ HSD_GObj* x40;
/* +44 */ HSD_GObj* x44;
/* +48 */ HSD_GObj* x48;
} HSD_GObjList;
extern struct _unk_gobj_struct {
union {
u32 flags;
struct {
u32 b0 : 1;
u32 b1 : 1;
u32 b2 : 1;
u32 b3 : 1;
};
};
u32 type;
u8 p_link;
u8 p_prio;
HSD_GObj* gobj;
} HSD_GObj_804CE3E4;
typedef struct _GObjUnkStruct GObjUnkStruct;
typedef struct _GObjFuncs GObjFuncs;
extern HSD_GObj* HSD_GObj_804D7818;
extern HSD_GObj* HSD_GObj_804D781C;
extern HSD_GObjProc* HSD_GObj_804D7830;
extern HSD_GObjProc* HSD_GObj_804D7838;
extern HSD_GObjProc** HSD_GObj_804D7840;
extern s32 HSD_GObj_804D7834;
extern s32 HSD_GObj_804D783C;
// extern HSD_GObj* HSD_SisLib_804D797C; @todo: is this actually correct?
extern HSD_GObj** HSD_GObj_804D7820;
extern HSD_GObj** HSD_GObj_804D7824;
extern HSD_GObjLibInitDataType HSD_GObjLibInitData;
extern HSD_GObj** plinklow_gobjs;
extern HSD_GObjList* HSD_GObj_Entities;
extern u8 HSD_GObj_804D784B[5];
extern GObjFuncs HSD_GObj_80408610;
extern s8 HSD_GObj_804D7848;
extern s8 HSD_GObj_804D7849;
extern s8 HSD_GObj_804D784A;
extern GObjFuncs HSD_GObj_80408620;
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*, int);
u8 HSD_GObj_803912A8(GObjUnkStruct*, GObjFuncs*);
HSD_GObj* GObj_Create(u16 classifier, u8 p_link, u8 priority);
void HSD_GObj_JObjCallback(HSD_GObj* gobj, int arg1);
void HSD_GObj_80390CD4(HSD_GObj* gobj);
void HSD_GObj_80390CFC(void);
void render_gobj(HSD_GObj* cur, int i);
void HSD_GObj_80390FC0(void);
void HSD_GObj_LObjCallback(HSD_GObj* gobj, int unused);
void HSD_GObj_FogCallback(HSD_GObj* gobj, int unused);
void HSD_GObj_80391120(HSD_Obj* obj);
void HSD_GObj_803911C0(HSD_Obj* obj);
void HSD_GObj_80391260(struct _GObjUnkStruct* arg0);
void HSD_GObj_803912E0(GObjFuncs* arg0);
void HSD_GObj_80390ED0(HSD_GObj* gobj, u32 mask);
extern HSD_GObj* HSD_GObj_804D7814;
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, int code);
#define GALE01_225374
#define MELEE_FT_FORWARD_H
#define FIGHTERVARS_SIZE 0xF8
typedef enum_t FtMotionId;
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 FighterBone FighterBone;
typedef struct ftCmdScript ftCmdScript;
typedef struct FtCmdState FtCmdState;
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 ftDeviceUnk1 ftDeviceUnk1;
typedef struct ftDeviceUnk2 ftDeviceUnk2;
typedef struct ftLk_SpecialN_Vec3Group ftLk_SpecialN_Vec3Group;
typedef struct ftMaterial_UnkTevStruct ftMaterial_UnkTevStruct;
typedef struct FtSFX FtSFX;
typedef struct ftSubactionList ftSubactionList;
typedef struct gmScriptEventDefault gmScriptEventDefault;
typedef struct MotionState MotionState;
typedef struct UnkFloat6_Camera UnkFloat6_Camera;
typedef u32 MotionFlags;
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;
};
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* gobj, FtCmdState* cmd);
typedef bool (*ftDevice_Callback0)(M2C_UNK, HSD_GObj*, Vec3*);
typedef enum FighterKind {
FTKIND_MARIO,
FTKIND_FOX,
FTKIND_CAPTAIN,
FTKIND_DONKEY,
FTKIND_KIRBY,
FTKIND_KOOPA,
FTKIND_LINK,
FTKIND_SEAK,
FTKIND_NESS,
FTKIND_PEACH,
FTKIND_POPO,
FTKIND_NANA,
FTKIND_PIKACHU,
FTKIND_SAMUS,
FTKIND_YOSHI,
FTKIND_PURIN,
FTKIND_MEWTWO,
FTKIND_LUIGI,
FTKIND_MARS,
FTKIND_ZELDA,
FTKIND_CLINK,
FTKIND_DRMARIO,
FTKIND_FALCO,
FTKIND_PICHU,
FTKIND_GAMEWATCH,
FTKIND_GANON,
FTKIND_EMBLEM,
FTKIND_MASTERH,
FTKIND_CREZYH,
FTKIND_BOY,
FTKIND_GIRL,
FTKIND_GKOOPS,
FTKIND_SANDBAG,
FTKIND_NONE,
FTKIND_MAX = FTKIND_NONE
} FighterKind;
typedef enum CharacterKind {
CKIND_CAPTAIN, // Captain Falcon (Captain)
CKIND_DONKEY, // Donkey Kong (Donkey)
CKIND_FOX, // Fox
CKIND_GAMEWATCH, // Mr. Game & Watch (GameWatch)
CKIND_KIRBY, // Kirby
CKIND_KOOPA, // Bowser (Koopa)
CKIND_LINK, // Link
CKIND_LUIGI, // Luigi
CKIND_MARIO, // Mario
CKIND_MARS, // Marth (Mars)
CKIND_MEWTWO, // Mewtwo
CKIND_NESS, // Ness
CKIND_PEACH, // Peach
CKIND_PIKACHU, // Pikachu
CKIND_POPONANA, // Ice Climbers (Popo & Nana)
CKIND_PURIN, // Jigglypuff (Purin)
CKIND_SAMUS, // Samus
CKIND_YOSHI, // Yoshi
CKIND_ZELDA, // Zelda (ZE->SE)
CKIND_SEAK, // Sheik (SE->ZE)
CKIND_FALCO, // Falco
CKIND_CLINK, // Young Link (CLink)
CKIND_DRMARIO, // Dr. Mario
CKIND_EMBLEM, // Roy (Emblem)
CKIND_PICHU, // Pichu
CKIND_GANON, // Ganondorf (Ganon)
CKIND_MASTERH, // Master Hand (MasterH)
CKIND_BOY, // Male Wireframe (Boy)
CKIND_GIRL, // Female Wireframe (Girl)
CKIND_GKOOPS, // Giga Bowser (GKoops)
CKIND_CREZYH, // Crazy Hand (CrezyH)
CHKIND_SANDBAG, // Sandbag
CHKIND_POPO, // Popo
CHKIND_NONE, // None
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_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;
#define Ft_Dynamics_NumMax 10
#define MELEE_IT_FORWARD_H
typedef struct Article Article;
typedef struct BobOmbRain BobOmbRain;
typedef struct BoneDynamicsDesc BoneDynamicsDesc;
typedef struct CameraBoxFlags CameraBoxFlags;
typedef struct DynamicBoneTable DynamicBoneTable;
typedef struct ECB ECB;
typedef struct flag32 flag32;
typedef struct HSD_ObjAllocUnk HSD_ObjAllocUnk;
typedef struct HSD_ObjAllocUnk2 HSD_ObjAllocUnk2;
typedef struct HSD_ObjAllocUnk4 HSD_ObjAllocUnk4;
typedef struct HSD_ObjAllocUnk5 HSD_ObjAllocUnk5;
typedef struct HSD_ObjAllocUnk6 HSD_ObjAllocUnk6;
typedef struct it_2F28_DatAttrs it_2F28_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;
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;
};
typedef void (*ItCmd)(Item_GObj* gobj, FtCmdState* cmd);
typedef enum Item_StateChangeFlags {
ITEM_UNK_0x1 = (1 << 0),
ITEM_ANIM_UPDATE = (1 << 1),
ITEM_DROP_UPDATE = (1 << 2),
ITEM_MODEL_UPDATE = (1 << 3),
ITEM_HIT_PRESERVE = (1 << 4),
ITEM_SFX_PRESERVE = (1 << 5),
ITEM_COLANIM_PRESERVE = (1 << 6),
ITEM_UNK_UPDATE = (1 << 7),
ITEM_CMD_UPDATE = (1 << 8),
} Item_StateChangeFlags;
typedef enum Item_UnkKinds {
ITEM_UNK_MATO = 4,
ITEM_UNK_LOCKON,
ITEM_UNK_ENEMY,
ITEM_UNK_7
} Item_UnkKinds;
// 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
typedef enum ItemKind {
// COMMON ITEMS
It_Kind_Capsule, // Capsule
It_Kind_Box, // Crate
It_Kind_Taru, // Barrel
It_Kind_Egg, // Egg
It_Kind_Kusudama, // Party Ball (Kusudama)
It_Kind_TaruCann, // Barrel Cannon (TaruCann)
It_Kind_BombHei, // Bob-omb (BombHei)
It_Kind_Dosei, // Mr. Saturn (Dosei)
It_Kind_Heart, // Heart Container
It_Kind_Tomato, // Maxim Tomato
It_Kind_Star, // Starman (Super Star)
It_Kind_Bat, // Home-Run Bat
It_Kind_Sword, // Beam Sword
It_Kind_Parasol, // Parasol
It_Kind_G_Shell, // Green Shell (G Shell)
It_Kind_R_Shell, // Red Shell (R Shell)
It_Kind_L_Gun, // Ray Gun (L Gun)
It_Kind_Freeze, // Freezie (Freeze)
It_Kind_Foods, // Food
It_Kind_MSBomb, // Proximity Mine (MSBomb)
It_Kind_Flipper, // Flipper
It_Kind_S_Scope, // Super Scope (S Scope)
It_Kind_StarRod, // Star Rod
It_Kind_LipStick, // Lip's Stick
It_Kind_Harisen, // Fan (Harisen)
It_Kind_F_Flower, // Fire Flower (F Flower)
It_Kind_Kinoko, // Super Mushroom (Kinoko)
It_Kind_DKinoko, // Poison Mushroom (DKinoko)
It_Kind_Hammer, // Hammer
It_Kind_WStar, // Warp Star (WStar)
It_Kind_ScBall, // Screw Attack (ScBall)
It_Kind_RabbitC, // Bunny Hood (RabbitC)
It_Kind_MetalB, // Metal Box
It_Kind_Spycloak, // Cloaking Device (Spycloak)
It_Kind_M_Ball, // Poke Ball (M Ball)
// 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)
// 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)
// 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 (?)
// POKEMON
Pokemon_Random, // Used for Random Pokemon value
Pokemon_Tosakinto, // Goldeen (Tosakinto)
Pokemon_Chicorita, // Chikorita (Chicorita)
Pokemon_Kabigon, // Snorlax (Kabigon)
Pokemon_Kamex, // Blastoise (Kamex)
Pokemon_Matadogas, // Weezing (Matadogas)
Pokemon_Lizardon, // Charizard (Lizardon)
Pokemon_Fire, // Moltres (Fire)
Pokemon_Thunder, // Zapdos (Thunder)
Pokemon_Freezer, // Articuno (Freezer)
Pokemon_Sonans, // Wobbuffet (Sonans)
Pokemon_Hassam, // Scizor (Hassam)
Pokemon_Unknown, // Unown (Unknown)
Pokemon_Entei, // Entei
Pokemon_Raikou, // Raikou
Pokemon_Suikun, // Suicune (Suikun)
Pokemon_Kireihana, // Bellossom (Kireihana)
Pokemon_Marumine, // Electrode (Marumine)
Pokemon_Lugia, // Lugia
Pokemon_Houou, // Ho-oh (Houou)
Pokemon_Metamon, // Ditto (Metamon)
Pokemon_Pippi, // Clefairy (Pippi)
Pokemon_Togepy, // Togepi (Togepy)
Pokemon_Mew, // Mew
Pokemon_Cerebi, // Celebi (Cerebi)
Pokemon_Hitodeman, // Staryu (Hitodeman)
Pokemon_Lucky, // Chansey (Lucky)
Pokemon_Porygon2, // Porygon2
Pokemon_Hinoarashi, // Cyndaquil (Hinoarashi)
Pokemon_Maril, // Marill (Maril)
Pokemon_Fushigibana, // Venusaur (Fushigibana)
// POKEMON-RELATED
Pokemon_Chicorita_Leaf, // Chikorita's Leaf
Pokemon_Kamex_HydroPump, // Blastoise's Water
Pokemon_Matadogas_Gas1, // Weezing's Gas
Pokemon_Matadogas_Gas2, // Weezing's Gas
Pokemon_Lizardon_Flame1, // Charizard's Breath
Pokemon_Lizardon_Flame2, // Charizard's Breath
Pokemon_Lizardon_Flame3, // Charizard's Breath
Pokemon_Lizardon_Flame4, // Charizard's Breath
Pokemon_Unknown_Swarm, // Mini-Unowns
Pokemon_Lugia_Aeroblast, // Lugia's Aeroblast
Pokemon_Lugia_Aeroblast2, // Lugia's Aeroblast
Pokemon_Lugia_Aeroblast3, // Lugia's Aeroblast
Pokemon_Houou_SacredFire, // Ho-Oh's Flame
Pokemon_Hitodeman_Star, // Staryu's Star
Pokemon_Lucky_Egg, // Chansey's Healing Egg
Pokemon_Hinoarashi_Flame, // Cyndaquil's Fire
Pokemon_Unk, // ???
// 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)
// 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
} ItemKind;
/* 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 */ static void fn_SetupItemAndPokemonMenu(void);
/* 225A54 */ static void fn_80225A54(int arg0);
/* 225B0C */ u32 db_ShowEnemyStompRange(void);
/* 225B20 */ u32 db_ShowItemPickupRange(void);
/* 225B34 */ u32 db_ShowCoinPickupRange(void);
/* 225B48 */ static void fn_EnableShowCoinPickupRange(void);
/* 225B9C */ static void fn_DisableShowCoinPickupRange(void);
/* 225BF0 */ static void fn_EnableShowEnemyStompRange(void);
/* 225C44 */ static void fn_DisableShowEnemyStompRange(void);
/* 225C8C */ static void fn_EnableShowItemPickupRange(void);
/* 225CD4 */ static 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 */ static void fn_ToggleItemCollisionBubbles(void);
/* 225DD8 */ void db_80225DD8(Item_GObj* item, Fighter_GObj* owner);
/* 225E6C */ static void fn_80225E6C(Fighter_GObj* owner);
/* 225F20 */ void db_HandleItemPokemonMenuInput(int player);
/* 2260D4 */ static void fn_ShowOrCreateItemAndPokemonMenu(int player);
/* 2261BC */ static void fn_UpdateItemAndPokemonMenu(int player);
/* 2262E0 */ void db_CheckAndSpawnItem(int player);
/* 2264C4 */ static void fn_CheckItemAndPokemonMenu(int player);
/* 22659C */ static void fn_SetupCpuHandicapInfo(void);
/* 22666C */ static void fn_UpdateCpuHandicapInfo(void);
/* 226730 */ static void fn_CheckCpuHandicapInfo(int arg0);
/* 2267C8 */ static void fn_SetupAnimationInfo(void);
/* 2268B8 */ static void fn_ToggleMiscFighterVisuals(void);
/* 22697C */ static u8 fn_8022697C(Fighter_GObj* owner);
/* 2269C0 */ static void fn_UpdateAnimationInfo(void);
/* 226BD4 */ static void fn_CheckAnimationInfo(int player);
/* 226E00 */ static void fn_SetupMiscStageVisuals(void);
/* 226E0C */ static void fn_CheckMiscStageEffects(int arg0);
/* 2270C4 */ static void fn_802270C4(int arg0);
/* 22713C */ static void fn_8022713C(int arg0);
/* 227174 */ static void fn_SetupCameraInfo(void);
/* 227188 */ static void fn_80227188(void);
/* 227484 */ static void fn_CheckCameraInfo(int player, int buttons_down,
int buttons_pressed, f32 cstick_x,
f32 cstick_y);
/* 2277E8 */ static void fn_802277E8(HSD_GObj*, int);
/* 227904 */ static void fn_80227904(HSD_GObj* camera, u8 port);
/* 2279E8 */ static void fn_802279E8(HSD_GObj* camera, Vec3* camera_pos,
Vec3* camera_interest, float cstick_x,
float cstick_y);
/* 227B64 */ static void fn_80227B64(HSD_GObj* camera, float cstick_x,
float cstick_y);
/* 227BA8 */ static M2C_UNK fn_80227BA8();
/* 227CAC */ static void fn_80227CAC(HSD_GObj* camera, float cstick_y);
/* 227D38 */ static M2C_UNK fn_80227D38();
/* 227EB0 */ static M2C_UNK fn_80227EB0();
/* 227FE0 */ static void fn_80227FE0(HSD_GObj* camera, float cstick_x,
float cstick_y);
/* 228124 */ static M2C_UNK fn_80228124();
/* 228318 */ static void fn_SetupSoundInfo(void);
/* 2283F0 */ static M2C_UNK fn_UpdateSoundInfo();
/* 228620 */ static void fn_CheckSoundInfo(int player);
/* 22873C */ static void fn_CheckMiscVisualEffects(int player);
/* 2287C4 */ static M2C_UNK fn_Setup5xSpeed();
/* 2287D8 */ static void fn_Check5xSpeed(int player);
/* 228820 */ static void fn_Toggle5xSpeed(void);
/* 22886C */ void db_InitScreenshot(void);
/* 22887C */ void db_CheckScreenshot(void);
/* 22892C */ void db_TakeScreenshotIfPending(void);
/* 2289F8 */ static int fn_802289F8(char* arg0, int arg1, int arg2);
/* 228A64 */ void db_ClearFPUExceptions(void);
/* 228AB4 */ static void fn_HSDPanicHandler(OSContext* ctx);
/* 228B28 */ static void fn_OSErrorHandler(u16 error, OSContext* ctx, ...);
/* 228C4C */ void db_SetupCrashHandler(void);
/* 228CF4 */ static void fn_SetupBonusInfo(void);
/* 228D18 */ static void fn_80228D18(void);
/* 228D38 */ static void fn_80228D38(void);
/* 228E54 */ static void fn_80228E54(int arg0, int arg1, int arg2);
/* 22900C */ static void fn_8022900C(int arg0);
/* 2291A0 */ static void fn_CheckBonusInfo(int arg0);
/* 229220 */ static void fn_SetupObjAllocLimiter(void);
/* 229240 */ static void fn_UpdateObjAllocLimiter(int arg0);
/* 4D4A08 */ extern enum_t g_debugLevel;
/* 4D6B30 */ extern u16 db_gameLaunchButtonState;
#define __GALE01_225374
#define MELEE_UN_FORWARD_H
typedef struct DevText DevText;
typedef struct un_80302DF8_t un_80302DF8_t;
typedef struct un_80304334_t un_80304334_t;
// externs
extern unsigned char _stack_end[];
extern unsigned char _stack_addr[];
// rodata
static const Vec3 db_803B84D8 = { 0.0F, 1.0F, 0.0F };
// data
static char db_string_803EA6C8[] = "DATE Feb 13 2002 TIME 22:06:27";
static char db_string_803EA6E8[] = "DbCo.dat";
static char db_string_803EA6F4[] = "dbLoadCommonData";
static char db_string_803EA708[] = "[all PLink num] -- Report --\n";
static char db_string_803EA728[] =
"------------------------------------------------------------\n";
static char db_string_803EA768[] = "------ Thread info ------\n";
static char db_string_803EA784[] = "base:%x, end:%x, size:%d peak:%d \n";
/* 3EA94C */ static char* db_ItemNames[] = {
// clang-format off
"Capsule ",
"Box ",
"Taru ",
"Egg ",
"Kusudama",
"TaruCann",
"BombHei ",
"Dosei ",
"Heart ",
"Tomato ",
"Star ",
"Bat ",
"Sword ",
"Parasol ",
"G Shell ",
"R Shell ",
"L Gun ",
"Freeze ",
"Foods ",
"MSBomb ",
"Flipper ",
"S Scope ",
"StarRod ",
"LipStick",
"Harisen ",
"F Flower",
"Kinoko ",
"DKinoko ",
"Hammer ",
"WStar ",
"ScBall ",
"RabbitC ",
"MetalB ",
"Spycloak",
"M Ball ",
// clang-format on
};
/* 3EAA50 */ static char* db_PokemonNames[] = {
"Random", "Tosakinto", "Chicorita", "Kabigon", "Kamex",
"Matadogas", "Lizardon", "Fire", "Thunder", "Freezer",
"Sonans", "Hassam", "Unknown", "Entei", "Raikou",
"Suikun", "Kireihana", "Marumine", "Lugia", "Houou",
"Metamon", "Pippi", "Togepy", "Mew", "Cerebi",
"Hitodeman", "Lucky", "Porygon2", "Hinoarashi", "Maril",
"Fushigibana",
};
/* 3EAAFC */ static char* db_BarrelEnemies[] = { "Kuriboh ", "Leadead ",
"Octarock", "Ottosei " };
/* 3EABA8 */ static char* db_AdventureEnemies[] = {
// clang-format off
"old-Kuri",
"Mato ",
"Heiho ",
"Nokonoko",
"Patapata",
"likelike",
"old-lead",
"old-octa",
"old-otto",
"whitebea",
"klap ",
"zgshell ",
"zrshell ",
// clang-format on
};
/* 3EABDC */ static int db_803EABDC[0xD] = { 0 };
static char db_string_803EAC10[0x78] =
"Item=%d Foods=%d Yaku=%d Sp_Item=%d Pokemon=%d PokeShot=%d CZako=%d "
"CZakoShot=%d Zako=%d ZakoShot=%d Shot=%d Etc=%d\n";
/* 3EAD40 */ static int db_SoundToggleOrder[4] = { 3, 2, 0, 1 };
/* 3EAE08 */ static struct {
struct GXColor bg;
struct GXColor fg;
} db_TextColors[2] = {
{ { 0x00, 0x00, 0x00, 0x00 }, { 0xFF, 0x00, 0x00, 0xFF } },
{ { 0x80, 0x40, 0xFF, 0x80 }, { 0x00, 0x00, 0x00, 0xFF } }
};
// bss
/* 49FA00 */ static struct {
/* +0 */ HSD_Pad current;
/* +4 */ HSD_Pad prev;
/* +8 */ HSD_Pad pressed;
/* +C */ HSD_Pad released;
/* +10 */ HSD_Pad repeat;
} db_ButtonStates[4];
/* 49FA50 */ static char db_ItemAndPokemonMenuText_buf[0x50];
/* 49FAA0 */ static struct {
unsigned int DisplayStatus; // 0=uninitialized, 1=visible, 2=hidden
unsigned int DisplayFadeTimer;
int ItemSpawnsEnabled;
int Player;
ItemKind CurrentlySelectedItem;
int CurrentlySelectedPokemon;
ItemKind LastSelectedItem;
int LastSelectedPokemon;
struct {
u32 ShowEnemyStompRange : 1;
u32 ShowItemPickupRange : 1;
u32 ShowCoinPickupRange : 1;
};
} db_ItemAndPokemonMenu;
/* 49FAC8 */ static struct {
DevText* text;
char buf[0x34C];
} db_CpuHandicapInfo;
/* 49FE18 */ static struct {
DevText* text;
char buf[0x5A4];
} db_AnimationInfo;
/* 4A03C0 */ static char db_CameraInfoDisplay_buf[0xC0];
/* 4A0480 */ static char db_SoundInfoText_buf[0x70];
// sdata
/* 4D4A08 */ int g_debugLevel = 1;
/* 4D4AF8 */ static int db_804D4AF8 = 1;
// sbss
/* 4D6B20 */ static int db_804D6B20;
/* 4D6B24 */ static char** db_submotion_names;
/* 4D6B28 */ static char** db_motionstate_names;
/* 4D6B2C */ static char** db_bonus_names;
/* 4D6B30 */ unsigned short db_gameLaunchButtonState;
/* 4D6B38 */ static DevText* db_ItemAndPokemonMenuText;
/* 4D6B3C */ static int db_ShowItemCollisionBubbles;
/* 4D6B40 */ static UnkFlagStruct db_ShowCpuHandicapInfo;
/* 4D6B48 */ static struct {
int ShowFighterCollisionBubbles : 3;
unsigned int MiscFighterVisualsStatus : 6;
unsigned int ShowAnimationInfo : 1;
} db_804D6B48;
/* 4D6B50 */ static unsigned int db_MiscStageVisualsStatus;
/* 4D6B58 */ static DevText* db_CameraInfoDisplay;
/* 4D6B5C */ static unsigned char db_CameraInfoDisplayTimer;
/* 4D6B5D */ static unsigned char db_ShowCameraInfo;
/* 4D6B60 */ static int db_SoundToggles;
/* 4D6B64 */ static int db_ShowSoundInfo;
/* 4D6B68 */ static int db_SoundRelated_6B68;
/* 4D6B6C */ static int db_SoundRelated_6B6C;
/* 4D6B70 */ static int db_SoundRelated_6B70;
/* 4D6B74 */ static int db_SoundRelated_6B74;
/* 4D6B78 */ static DevText* db_SoundInfoText;
/* 4D6B7C */ static HSD_GObj* db_804D6B7C;
/* 4D6B80 */ static int db_MiscVisualEffectsStatus;
/* 4D6B88 */ static int db_804D6B88;
/* 4D6B8C */ static UnkFlagStruct db_5xSpeedStatus;
/* 4D6B90 */ static unsigned int db_ScreenshotPending;
/* 4D6B94 */ static int db_ScreenshotNumber;
/* 4D6B98 */ static struct {
unsigned char x0;
UnkFlagStruct x1;
} db_804D6B98;
/* 4D6B9C */ static struct {
DevText* text;
char buffer[1500];
}* db_804D6B9C;
/* 4D6BA0 */ static UnkFlagStruct db_804D6BA0;
// sdata2 (constants)
#define GALE01_063930
/* 06729C */ void efAsync_8006729C(void);
/* 06730C */ void efAsync_8006730C(HSD_Archive* archive, u8* data, u32 length,
int index);
/* 06737C */ void efAsync_8006737C(s8);
/* 067624 */ void efAsync_80067624(HSD_GObj*, M2C_UNK*);
/* 067688 */ void efAsync_80067688(void*);
/* 0676F0 */ void efAsync_Spawn(HSD_GObj*, void*, u32, u32, HSD_JObj*, ...);
#define __GALE01_063930
struct efAsync_80067980_objalloc_t {
char pad_0[0x24];
};
struct { int x[1 - 2 * !(sizeof(struct efAsync_80067980_objalloc_t) == 0x24)]; };;
/* 458FA0 */ static HSD_ObjAllocData efSync_80458FA0;
#define GALE01_05B4B8
#define MELEE_EF_FORWARD_H
typedef struct ef_UnkStruct1 ef_UnkStruct1;
typedef struct ef_UnkStruct2 ef_UnkStruct2;
typedef struct Effect Effect;
typedef struct EffectDesc EffectDesc;
typedef M2C_UNK (*efLib_UnkCallback)();
/* 05B4B8 */ void efLib_8005B4B8(void);
/* 05B704 */ M2C_UNK efLib_8005B704();
/* 05B780 */ M2C_UNK efLib_8005B780();
/* 05B880 */ void efLib_DestroyAll(HSD_GObj* gobj);
/* 05BA40 */ void efLib_PauseAll(HSD_GObj* gobj);
/* 05BAC4 */ void efLib_ResumeAll(HSD_GObj* gobj);
/* 05BB40 */ void Effect_RemoveUserData(void* user_data);
/* 05BBB4 */ M2C_UNK efLib_8005BBB4();
/* 05BC50 */ void fn_8005BC50(HSD_GObj* gobj);
/* 05BE88 */ Effect* efLib_8005BE88(int, HSD_GObj* parent_gobj);
/* 05C1B4 */ M2C_UNK efLib_8005C1B4();
/* 05C2BC */ M2C_UNK efLib_8005C2BC();
/* 05C3DC */ M2C_UNK efLib_8005C3DC();
/* 05C5C4 */ M2C_UNK efLib_8005C5C4();
/* 05C6F4 */ M2C_UNK efLib_8005C6F4();
/* 05C814 */ M2C_UNK efLib_8005C814();
/* 05C904 */ M2C_UNK fn_8005C904();
/* 05C9A4 */ M2C_UNK efLib_8005C9A4();
/* 05C9D0 */ M2C_UNK fn_8005C9D0();
/* 05C9FC */ M2C_UNK efLib_8005C9FC();
/* 05CAB0 */ M2C_UNK efLib_8005CAB0();
/* 05CB34 */ M2C_UNK efLib_8005CB34();
/* 05CC2C */ void efLib_8005CC2C(int arg0, HSD_JObj* arg1);
/* 05CC84 */ M2C_UNK efLib_8005CC84();
/* 05CD2C */ M2C_UNK efLib_8005CD2C();
/* 05CE48 */ M2C_UNK efLib_8005CE48();
/* 05CF40 */ M2C_UNK efLib_8005CF40();
/* 05D044 */ M2C_UNK efLib_8005D044();
/* 05D174 */ M2C_UNK efLib_8005D174();
/* 05DB20 */ M2C_UNK fn_8005DB20();
/* 05DB70 */ M2C_UNK fn_8005DB70();
/* 05DBC0 */ M2C_UNK efLib_8005DBC0();
/* 05DCD0 */ M2C_UNK fn_8005DCD0();
/* 05DDB8 */ M2C_UNK efLib_8005DDB8();
/* 05DE94 */ M2C_UNK efLib_8005DE94();
/* 05E090 */ M2C_UNK efLib_8005E090();
/* 05E1D8 */ M2C_UNK efLib_8005E1D8();
/* 05E2B4 */ M2C_UNK efLib_8005E2B4();
/* 05E3A0 */ M2C_UNK efLib_8005E3A0();
/* 05E648 */ M2C_UNK efLib_8005E648();
/* 05E950 */ M2C_UNK efLib_8005E950();
/* 05EB70 */ M2C_UNK efLib_8005EB70();
/* 05EBC8 */ M2C_UNK efLib_8005EBC8();
/* 05EDDC */ M2C_UNK efLib_8005EDDC();
/* 05F08C */ M2C_UNK efLib_8005F08C();
/* 05F270 */ M2C_UNK efLib_8005F270();
/* 05F454 */ M2C_UNK efLib_8005F454();
/* 05F748 */ M2C_UNK efLib_8005F748();
/* 05F774 */ M2C_UNK efLib_8005F774();
/* 05F864 */ void efLib_8005F864(HSD_GObj* gobj, s8, float, float);
/* 05F990 */ M2C_UNK efLib_8005F990();
/* 05FAB8 */ M2C_UNK efLib_8005FAB8();
/* 05FBE4 */ M2C_UNK fn_8005FBE4();
/* 05FCD8 */ Effect* efLib_8005FCD8(int arg0, HSD_GObj* arg1,
ef_UnkStruct1* arg3);
/* 458EB0 */ extern HSD_ObjAllocData Effect_AllocData;
#define MELEE_EF_EFSYNC_H
void efSync_Spawn(s32, ...);
#define MELEE_EF_TYPES_H
#define MELEE_SC_TYPES_H
#define MELEE_SC_FORWARD_H
typedef struct StaticModelDesc StaticModelDesc;
typedef struct DynamicModelDesc DynamicModelDesc;
typedef struct SceneDesc SceneDesc;
/// 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;
};
// The basis of a rendered scene, like a stage, menu, or HUD overlay
struct SceneDesc {
DynamicModelDesc** models;
HSD_CObjDesc** cameras;
HSD_LightDesc** lights;
HSD_FogDesc** fogs;
};
struct ef_UnkStruct2 {
/* +0 */ HSD_JObj* x0;
};
struct Effect {
/* +0 */ ef_UnkStruct2* x0;
/* +4 */ HSD_GObj* gobj;
/* +8 */ HSD_GObj* parent_gobj;
/* +C */ HSD_GObj* xC;
/* +10 */ efLib_UnkCallback x10;
/* +14 */ int x14;
/* +18 */ int x18;
/* +1C */ M2C_UNK x1C;
/* +20 */ M2C_UNK x20;
/* +24 */ u16 x24;
/* +26 */ s8 x26;
/* +27 */ s8 x27;
/* +28 */ s8 x28;
/* +29 */ u8 x29;
/* +2A */ s8 x2A;
/* +2B */ s8 x2B;
};
struct EffectDesc {
/* +0 */ float x0;
/* +4 */ StaticModelDesc model_desc;
};
struct ef_UnkStruct1 {
/* +0 */ int x0;
/* +4 */ int x4;
/* +8 */ int x8;
/* +C */ int xC;
};
#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_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 GALE01_148C64
#define MELEE_FT_CHARA_FTLINK_FORWARD_H
#define MELEE_FT_CHARA_FTCOMMON_FORWARD_H
struct UNK_SAMUS_S2;
typedef Fighter ftCo_Fighter;
typedef Fighter_GObj ftCo_GObj;
typedef struct ftCollisionBox ftCollisionBox;
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,
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,
ftCo_MS_OttottoWait,
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,
ftCo_SM_OttottoWait,
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 Fighter ftLk_Fighter;
typedef HSD_GObj ftLk_GObj;
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_TYPES_H
#define MELEE_FT_CHARA_FTCAPTAIN_TYPES_H
#define MELEE_FT_CHARA_FTCAPTAIN_FORWARD_H
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 {
/* 0x222C */ u32 during_specials_start;
/* 0x2230 */ u32 during_specials;
u8 _[0xF8 - 8];
};
struct ftCaptain_DatAttrs {
/* +0 */ float specialn_stick_range_y_neg;
/* +4 */ float specialn_stick_range_y_pos;
/* +8 */ float specialn_angle_diff;
/* +C */ float specialn_vel_x;
/* +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;
/* +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;
/* +68 */ float x68;
/* +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;
} speciallw;
};
#define MELEE_FT_CHARA_FTCOMMON_TYPES_H
#define MELEE_FT_CHARA_FTKIRBY_FORWARD_H
typedef struct HSD_GObj ftKb_GObj;
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;
struct ftCollisionBox {
/* +0 */ float top;
/* +4 */ float bottom;
/* +8 */ Vec2 left;
/* +10 */ Vec2 right;
};
struct UNK_SAMUS_S2 {
Fighter_Part parts[3];
Vec3 vec1;
Vec3 vec2;
float scale;
};
union ftCommon_MotionVars {
struct {
/* fp+2340 */ M2C_UNK x0;
/* fp+2344 */ M2C_UNK x4;
/* fp+2348 */ M2C_UNK x8;
/* fp+234C */ M2C_UNK xC;
/* 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 */ u8 pad_x0[12];
/* fp+234C */ float accel_mul;
} turnrun;
struct {
/* fp+2340 */ bool x0;
} attack1;
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 */ s8 x0;
/* fp+2341 */ s8 x1;
/* fp+2342 */ s8 x2;
/* fp+2343 */ s8 x3;
/* fp+2344 */ float x4;
/* fp+2348 */ ftCollisionBox x8;
} damageice;
struct {
/* fp+2340 */ float x0;
} 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 */ 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 x8;
/* fp+234C */ int xC;
/* fp+2350 */ bool x10;
/* fp+2354 */ float x14;
/* 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 */ 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_start;
} rebound;
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 */ ftCo_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 */ ftKb_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+2344 */ float x8;
} jumpb;
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 */ bool timer;
} entry;
struct {
/* fp+2340 */ Item_GObj* x0;
} capturelikelike;
struct {
/* fp+2340 */ HSD_GObjEvent x0;
/* fp+2344 */ HSD_GObjEvent x4;
/* fp+2348 */ int x8;
} mushroom;
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 */ void* 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[0x68 - 0x48];
/* fp+2368 */ int x68;
} unk_deadup;
};
#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 ftDk_HeavyWalk.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
#define MELEE_LB_FORWARD_H
typedef struct AbsorbDesc AbsorbDesc;
typedef struct CollData CollData;
typedef struct DynamicsDesc DynamicsDesc;
typedef struct HitCapsule HitCapsule;
typedef struct HitResult HitResult;
typedef struct HitVictim HitVictim;
typedef struct HSD_AllocEntry HSD_AllocEntry;
typedef struct HurtCapsule HurtCapsule;
typedef struct lbMthp_8001E8F8_t lbMthp_8001E8F8_t;
typedef struct lbRefract_CallbackData lbRefract_CallbackData;
typedef struct PreloadCache PreloadCache;
typedef struct PreloadCacheScene PreloadCacheScene;
typedef struct PreloadCacheSceneEntry PreloadCacheSceneEntry;
typedef struct PreloadEntry PreloadEntry;
typedef struct ReflectDesc ReflectDesc;
typedef struct ShieldDesc ShieldDesc;
typedef struct Unk80433380_48 Unk80433380_48;
typedef enum HurtCapsuleState {
HurtCapsule_Enabled,
HurtCapsule_Disabled,
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_Max = HitCapsule_Unk3,
} HitCapsuleState;
struct { int x[1 - 2 * !(HitCapsule_Max == 3)]; };;
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*);
struct DynamicsData {
/* +0 */ HSD_JObj* jobj;
/* +4 */ u8 _4[0x90 - 0x4];
/* +90 */ struct DynamicsData* next;
};
struct DynamicsDesc {
/* +0 */ struct DynamicsData* data;
/* +4 */ unsigned int count;
/* +8 */ Vec3 pos;
};
struct BoneDynamicsDesc {
enum_t bone_id;
DynamicsDesc dyn_desc;
};
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;
uint x4;
};
struct HitCapsule {
/* +0 */ HitCapsuleState state;
/* +4 */ uint 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 */ uint element;
/* +34 */ int x34;
/* +38 */ int sfx_severity;
/* +3C */ enum_t sfx_kind;
/* +40 */ u8 x40_b0 : 1;
/* +40 */ u8 x40_b1 : 1;
/* +40 */ u8 x40_b2 : 1;
/* +40 */ u8 x40_b3 : 1;
/* +40 */ u8 x40_b4 : 1;
/* +40 */ u8 x40_b5 : 1;
/* +40 */ u8 x40_b6 : 1;
/* +40 */ u8 x40_b7 : 1;
/* +41:0 */ u8 x41_b0 : 1;
/* +41:1 */ u8 x41_b1 : 1;
/* +41:2 */ u8 x41_b2 : 1;
/* +41:3 */ u8 x41_b3 : 1;
/* +41:4 */ u8 x41_b4 : 1;
/* +41:5 */ u8 x41_b5 : 1;
/* +41:6 */ u8 x41_b6 : 1;
/* +41:7 */ u8 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 */ union {
/* +43 */ u8 x43;
struct {
/* +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;
/* +45 */ u8 x45;
/* +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 { int x[1 - 2 * !(sizeof(HitCapsule) == 0x138)]; };;
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
enum_t kind; // 0x44. 0 = low, 1 = mid, 2 = high
bool is_grabbable; // 0x48
};
struct { int x[1 - 2 * !(sizeof(HurtCapsule) == 0x4C)]; };;
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 {
s32 unk0; // x00
s32 unk1; // x04
s32 unk2; // x08
s32 unk3; // x08
s32 unk4; // x10
s32 unk5; // x14
void* callback0; // x1C
void* callback1; // x20
};
typedef struct _ECBFlagStruct {
union {
struct {
u8 b0 : 1;
u8 b1234 : 4;
u8 b5 : 1;
u8 b6 : 1;
u8 b7 : 1;
};
u8 raw;
};
} ECBFlagStruct;
typedef struct SurfaceData {
int index;
u32 unk;
Vec3 normal;
} SurfaceData;
typedef struct _ftECB {
Vec2 top;
Vec2 bottom;
Vec2 right;
Vec2 left;
} ftECB;
struct CollData {
/* fp+6F0 */ HSD_GObj* x0_gobj;
/* fp+6F4 */ Vec3 cur_topn;
/* fp+700 */ Vec3 cur_topn_correct;
/* fp+70C */ Vec3 prev_topn;
/* fp+718 */ Vec3 x28_vec;
/* fp+724 */ ECBFlagStruct x34_flags;
/* fp+725 */ ECBFlagStruct x35_flags;
/* fp+726 */ s16 x36;
/* fp+728 */ s32 x38;
/* fp+72C */ s32 x3C;
/* fp+730 */ int ledge_id_unk0;
/* fp+734 */ int ledge_id_unk1;
/* fp+738 */ u32 x48;
/* fp+73C */ u32 x4C;
/* fp+740 */ float x50;
/* fp+744 */ float x54;
/* fp+748 */ float x58;
/* fp+74C */ float x5C;
/* fp+750 */ s32 x60;
/* fp+754 */ ftECB x64_ecb;
/* fp+774 */ ftECB x84_ecb;
/* fp+794 */ ftECB xA4_ecbCurrCorrect;
/* fp+7B4 */ ftECB xC4_ecb;
/* fp+7D4 */ ftECB xE4_ecb;
/// @todo this is the start of a substruct with size 0x2C
/* fp+7F4 */ s32 x104;
/* 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 x108_f32;
/* fp+7FC */ float x10C_f32;
/* fp+800 */ float x110_f32;
/* fp+804 */ float x114_f32;
/* fp+808 */ float x118_f32;
/* fp+80C */ float x11C_f32;
/* fp+810 */ float x120_f32;
};
};
/* fp+814 */ float x124;
/* fp+818 */ float x128;
/* fp+81C */ float x12C;
/* fp+820 */ u32 x130_flags;
/* fp+824 */ s32 env_flags;
/* fp+828 */ s32 prev_env_flags;
/* fp+82C */ s32 x13C;
/* fp+830 */ Vec3 x140;
/* fp+83C */ SurfaceData floor;
/* fp+850 */ SurfaceData right_wall;
/* fp+864 */ SurfaceData left_wall;
/* fp+878 */ SurfaceData ceiling;
};
struct HSD_AllocEntry {
struct HSD_AllocEntry* next;
u32* addr;
size_t size;
};
struct PreloadCacheSceneEntry {
struct PreloadCache* field0_0x0;
struct PreloadCache* field1_0x4;
};
struct PreloadEntry {
s8 state;
u8 type;
s8 heap;
u8 load_state;
u8 unknown004;
u8 field5_0x5;
u16 entry_num;
s16 load_score;
u8 field8_0xa;
u8 field9_0xb;
u32 size;
HSD_AllocEntry* raw_data;
HSD_AllocEntry* archive;
s32 effect_index;
};
struct PreloadCacheScene {
u32 is_heap_persistent[2];
u8 major_id;
u8 field2_0x9;
u8 field3_0xa;
u8 field4_0xb;
u32 stage_id;
PreloadCacheSceneEntry entries[8];
s32 major_scene_changes;
};
struct PreloadCache {
u32 persistent_heaps;
PreloadCacheScene scene;
PreloadCacheScene new_scene;
PreloadEntry entries[80];
s32 persistent_heap;
int preloaded;
M2C_UNK x974;
};
struct lb_800138D8_t {
/* +0 */ char pad_0[0x11];
/* +11 */ s8 x11;
/* +12 */ s8 x12;
/* +13 */ char pad_13[0x18 - 0x13];
/* +18 */ int x18;
};
/// @todo Maybe #Vec3
struct lbMthp_8001E8F8_t {
char pad_0[0x8];
float x8;
};
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
#define MELEE_FT_CHARA_FTMARS_TYPES_H
struct ftMars_FighterVars {
/* 0x222C */ u32 x222C;
u8 _[0xF8 - 4];
};
typedef struct _MarsAttributes {
int x0;
int x4;
int x8;
float specialn_friction;
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;
float x54;
float x58;
float x5C;
float x60;
AbsorbDesc x64;
u8 x78[0x98 - 0x78];
} 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;
};
#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,
ftNs_MS_SpecialNStart,
ftNs_MS_SpecialNHold,
ftNs_MS_SpecialNRelease,
ftNs_MS_SpecialNEnd,
ftNs_MS_SpecialAirNStart,
ftNs_MS_SpecialAirNHold,
ftNs_MS_SpecialAirNRelease,
ftNs_MS_SpecialAirNEnd,
ftNs_MS_SpecialS,
ftNs_MS_SpecialAirS,
ftNs_MS_SpecialHiStart,
ftNs_MS_SpecialHiHold,
ftNs_MS_SpecialHiEnd,
ftNs_MS_SpecialHi,
ftNs_MS_SpecialAirHiStart,
ftNs_MS_SpecialAirHiHold,
ftNs_MS_SpecialAirHiEnd,
ftNs_MS_SpecialAirHi,
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;
};
union ftNess_MotionVars {
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;
} attackhi4, 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;
struct ftKb_FighterVars {
/* fp+222C */ struct ftKb_Hat {
/* +0 fp+222C */ M2C_UNK x0;
/* +4 fp+2230 */ uint 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 */ u32 x14;
/* +18 fp+2244 */ M2C_UNK unk_hsd_obj;
/* +1C fp+2248 */ M2C_UNK x1C;
/* +20 fp+224C */ M2C_UNK x20;
/* +24 fp+2250 */ M2C_UNK x24;
} hat;
/* fp+224C */ u8 _28[0x60 - 0x28];
/* fp+228C */ M2C_UNK x60;
/* fp+2290 */ M2C_UNK x64;
/* fp+2294 */ u8 _68[0x7C - 0x68];
/* fp+22A8 */ Item_GObj* ns_flash_gobj;
/* fp+2294 */ u8 x80[0x9C - 0x80];
/* fp+22C8 */ int x9C;
/* fp+22CC */ M2C_UNK xA0;
/* fp+22D0 */ M2C_UNK xA4;
/* fp+22D4 */ int xA8;
/* fp+22D8 */ M2C_UNK xAC;
/* fp+22DC */ M2C_UNK xB0;
/* fp+22E0 */ int xB4;
/* fp+22E4 */ M2C_UNK xB8;
/* fp+22E8 */ int xBC;
/* fp+22EC */ M2C_UNK xC0;
/* fp+22F0 */ M2C_UNK xC4;
/* fp+22F4 */ M2C_UNK xC8;
/* fp+22F8 */ bool xCC;
/* fp+22FC */ Item_GObj* xD0;
/* fp+2300 */ M2C_UNK xD4;
/* fp+2304 */ M2C_UNK xD8;
/* fp+2308 */ M2C_UNK xDC;
/* 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 { int x[1 - 2 * !(sizeof(struct ftKb_FighterVars) == 0xF8)]; };;
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;
};
struct { int x[1 - 2 * !(sizeof(struct ftKb_SpecialNMs_DatAttrs) == 0x14)]; };;
/// @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 */ u32 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 */ u32 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 */ u32 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 */ float specialn_pk_ground_spawn_offset_x;
/* +1C4 */ float specialn_pk_ground_spawn_offset_y;
/* +1C8 */ float specialn_pk_air_spawn_offset_x;
/* +1CC */ float specialn_pk_air_spawn_offset_y;
/* +1D0 */ float specialn_pk_freefall_toggle;
/* +1D4 */ u32 specialn_pk_grounded_item_id;
/* +1D8 */ u32 specialn_pk_air_item_id;
// Pichu
/* +1DC */ float specialn_pc_ground_spawn_offset_x;
/* +1E0 */ float specialn_pc_ground_spawn_offset_y;
/* +1E4 */ float specialn_pc_air_spawn_offset_x;
/* +1E8 */ float specialn_pc_air_spawn_offset_y;
/* +1EC */ float specialn_pc_freefall_toggle;
/* +1F0 */ u32 specialn_pc_grounded_item_id;
/* +1F4 */ u32 specialn_pc_air_item_id;
// 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 */ float 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;
// Final Cutter
/* +424 */ float specialhi_initial_velocity;
/* +428 */ float specialhi_unk2;
/* +42C */ float specialhi_duration;
/* +430 */ float specialhi_deceleration_rate;
};
struct { int x[1 - 2 * !(sizeof(struct ftKb_DatAttrs) == 0x434)]; };;
union ftKb_MotionVars {
struct ftGameWatch_SpecialNVars specialn_gw;
struct ftMars_SpecialNVars specialn_ms;
struct ftNess_SpecialNVars specialn_ns;
struct ftKb_SpecialNPe_Vars {
/* fp+2340 */ int facing_dir;
} specialn_pe;
};
#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;
} specials;
};
typedef struct _ftKoopaAttributes {
float x0;
u32 x4;
float x8;
float xC;
float x10;
float x14;
float x18;
float x1C;
u32 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
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 */ M2C_UNK x64;
/* +68 */ M2C_UNK x68;
/* +6C */ M2C_UNK x6C;
/* +70 */ M2C_UNK x70;
/* +74 */ M2C_UNK x74;
/* +78 */ M2C_UNK x78;
/* +7C */ M2C_UNK x7C;
/* +80 */ M2C_UNK x80;
/* +84 */ M2C_UNK x84;
/* +88 */ s32 x88;
/* +8C */ M2C_UNK x8C;
/* +90 */ M2C_UNK x90;
/* +94 */ M2C_UNK x94;
/* +98 */ s32 x98;
/* +9C */ M2C_UNK x9C;
/* +A0 */ M2C_UNK xA0;
/* +A4 */ int xA4;
/* +A8 */ s32 xA8;
/* +AC */ M2C_UNK 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;
u8 _[0xF8 - 0x20];
};
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 */ uint 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;
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;
uint x4;
uint x8;
uint xC;
uint x10;
uint 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_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;
};
#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;
s32 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_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 */ HSD_GObj* unk_item_gobj;
/* fp+223C */ HSD_GObj* parasol_gobj;
/* fp+2240 */ bool specialairn_used;
/* fp+2244 */ HSD_GObj* toad_gobj;
/* fp+2248 */ HSD_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 x38;
/* +3C */ float x3C;
/* +40 */ float x40;
/* +44 */ float specials_vel_x;
/* +48 */ float specials_smash_vel_x;
/* +4C */ float specials_vel_y;
/* +50 */ float x50;
/* +54 */ float x54;
/* +58 */ float x58;
/* +5C */ float x5C;
/* +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 {
float x0;
float x4;
float x8;
float xC;
float x10;
u32 x14;
u32 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;
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;
s32 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;
float height_attributes[6];
} 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 */ u32 x2238;
/* 0x223C */ u32 x223C;
/* 0x2240 */ u32 x2240;
/* 0x2244 */ u32 x2244;
/* 0x2248 */ u32 x2248;
/* 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;
u8 _30[0x68 - 0x30];
int x68;
u8 _6C[0xC4 - 0x6C];
float xC4;
float xC8;
u8 _CC[0x90];
} ftIceClimberAttributes;
struct { int x[1 - 2 * !(sizeof(ftIceClimberAttributes) == 0x15C)]; };;
union ftPp_MotionVars {
struct ftPp_SpecialSVars {
/* fp+2340 */ float x0;
/* fp+2344 */ int x4;
/* fp+2348 */ int x8;
/* fp+234C */ int xC;
/* fp+2350 */ int x10;
/* fp+2354 */ int x14;
/* fp+2358 */ M2C_UNK x18;
/* fp+235C */ float x1C;
} specials;
};
#define MELEE_FT_CHARA_FTPURIN_TYPES_H
struct ftPurin_FighterVars {
/* 0x222C */ u32 x222C;
/* 0x2230 */ Vec3 x2230;
/* 0x223C */ HSD_JObj* x223C;
/* 0x2240 */ u32 x2240;
/* 0x2244 */ void* x2244;
/* 0x2248 */ u32 x2248;
};
typedef union ftPurin_MotionVars {
struct ftPurin_SpecialHiVars {
bool x0;
} specialhi;
struct ftPurin_SpecialNVars {
/* fp+2340 */ int x0;
/* fp+2344 */ M2C_UNK x4;
/* fp+2348 */ M2C_UNK x8;
/* fp+234C */ M2C_UNK xC;
/* fp+2350 */ u8 _10[0x1C - 0x10];
/* fp+235C */ float x1C;
/* fp+2360 */ float facing_dir;
/* fp+2364 */ u8 _24[0x34 - 0x24];
/* 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[0x88 - 0x48];
Vec2 specialn_vel;
u8 _90[0xDC - 0x90];
float xDC;
float xE0;
float xE4;
M2C_UNK xE8;
M2C_UNK xEC;
float xF0;
float xF4;
u8 _F8[0x100 - 0xF8];
} ftPurinAttributes;
struct { int x[1 - 2 * !(sizeof(ftPurinAttributes) == 0x100)]; };;
#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 */ M2C_UNK x9C;
/* +A0 */ M2C_UNK xA0;
/* +A4 */ M2C_UNK xA4;
/* +A8 */ M2C_UNK xA8;
/* +AC */ M2C_UNK xAC;
/* +B0 */ M2C_UNK xB0;
/* +B4 */ M2C_UNK xB4;
/* +B8 */ M2C_UNK xB8;
/* +BC */ int xBC;
/* +C0 */ int xC0;
/* +C4 */ int xC4;
/* +C8 */ int xC8;
/* +CC */ M2C_UNK 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;
/// @todo Proper state name.
struct ftSamus_State3Vars {
s32 x0;
s32 x4;
float x8;
} unk3;
/// @todo Proper state name.
struct ftSamus_State5Vars {
s32 x0;
} unk5;
/// @todo Proper state name.
struct ftSamus_State6Vars {
s32 x0;
} unk6;
};
#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;
};
/// @sz{74}
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;
s32 x30;
s32 x34;
s32 x38;
s32 x3C;
s32 x40;
s32 x44;
s32 x48;
s32 x4C;
u8 data_filler_1[0x24];
} ftSeakAttributes;
typedef 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;
} itChainSegment;
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;
s32 x4;
s32 x8;
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 */ u32 x222C;
/* 0x2230 */ u32 x2230;
/* 0x2234 */ u32 x2234;
/* 0x2238 */ u32 x2238;
};
typedef struct _ftYoshiAttributes {
float x0;
float x4;
float x8;
float xC;
float x10;
float x14;
float x18;
float x1C;
float x20;
float x24;
s32 x28;
s32 x2C;
u8 data_filler1[0xEF];
float x120;
u8 data_filler2[0x14];
} ftYoshiAttributes;
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 {
/// @todo Proper state name.
struct ftYoshi_State2Vars {
float x0;
M2C_UNK x4;
M2C_UNK x8;
bool xC;
M2C_UNK x10;
float x14;
float x18;
} unk2;
struct ftYoshi_SpecialNVars {
/* fp+2340 */ int x0_b0 : 1;
} specialn;
};
#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;
s32 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_GR_TYPES_H
#define MELEE_GR_FORWARD_H
typedef struct grDynamicAttr_UnkStruct grDynamicAttr_UnkStruct;
typedef struct Ground Ground;
typedef struct StageInfo StageInfo;
typedef struct UnkArchiveStruct UnkArchiveStruct;
typedef struct UnkBgmStruct UnkBgmStruct;
typedef struct UnkStage6B0 UnkStage6B0;
typedef struct UnkStageDatInternal UnkStageDatInternal;
typedef struct UnkStageDat UnkStageDat;
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;
};
/// @todo Finish values, use @c PascalCase
typedef enum InternalStageId {
InternalStageID_Unk00,
InternalStageID_Unk01,
/// Princess Peach's Castle
CASTLE,
/// Rainbow Cruise
RCRUISE,
/// Kongo Jungle
KONGO,
/// Jungle Japes
GARDEN,
/// Great Bay
GREATBAY,
/// Hyrule Temple
SHRINE,
/// Brinstar
ZEBES,
/// Brinstar Depths
KRAID,
/// Yoshi's Story
STORY,
/// Yoshi's Island
YORSTER,
/// Fountain of Dreams
IZUMI,
/// Green Greens
GREENS,
/// Corneria
CORNERIA,
/// Venom
VENOM,
/// Pokemon Stadium
PSTADIUM,
/// Poke Floats
PURA,
/// Mute City
MUTECITY,
/// Big Blue
BIGBLUE,
/// Onett
ONETT,
/// Fourside
FOURSIDE,
/// Icicle Mountain
ICEMTN,
InternalStageID_Unk23,
/// Mushroom Kingdom
INISHIE1,
/// Mushroom Kingdom II
INISHIE2,
InternalStageID_Unk26,
/// Flat Zone
FLATZONE,
/// Dream Land
OLDPUPUPU,
/// Yoshi's Island (64)
OLDYOSHI,
/// Kongo Jungle (64)
OLDKONGO,
STAGEKIND_UNK31,
STAGEKIND_UNK32,
STAGEKIND_UNK33,
STAGEKIND_UNK34,
STAGEKIND_UNK35,
STAGEKIND_UNK36,
STAGEKIND_UNK37,
STAGEKIND_UNK38,
STAGEKIND_UNK39,
} InternalStageId;
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
InternalStageId internal_stage_id; // 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;
u8 xA0[4];
u8 xA4_pad[0x12C - 0xA4];
HSD_GObj* x12C;
Vec3 x130, x13C, x148, x154, x160, x16C;
DynamicsDesc* (*x178)(int);
bool (*x17C)(Vec3*, int, HSD_JObj*);
HSD_GObj* x180[4];
u8 x190_pad[0x280 - 0x190];
HSD_JObj* x280[261];
void* x694[4];
void* x6A4;
/* +6A8 */ struct {
s32 unk0;
Article* unk4;
}** itemdata;
/* +6AC */ void* coll_data;
/* +6B0 */ UnkStage6B0* param;
/* +6B4 */ M2C_UNK** ald_yaku_all;
/* +6B8 */ void* map_ptcl;
/* +6BC */ void* map_texg;
/* +6C0 */ void* yakumono_param;
/* +6C4 */ void* 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 */ void (*callback0)(HSD_GObj*);
/* +4 */ bool (*callback1)(HSD_GObj*);
/* +8 */ void (*callback2)(HSD_GObj*);
/* +C */ void (*callback3)(HSD_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;
typedef struct StageData {
u32 flags1;
StageCallbacks* callbacks;
char* data1;
void (*callback0)(void);
void (*callback1)(int);
void (*callback2)(void);
void (*callback3)(void);
bool (*callback4)(void);
DynamicsDesc* (*callback5)(enum_t);
bool (*callback6)(Vec3*, int, HSD_JObj*);
u32 flags2;
S16Vec3* x2C;
size_t x30; // size of x2C array
} StageData;
typedef struct StructPairWithStageID {
s32 stage_id;
s32 list_idx;
} StructPairWithStageID;
struct GroundVars_unk {
int xC4;
int xC8;
int xCC;
int xD0;
int xD4;
int xD8;
float xDC;
};
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 {
short xC4;
short xC6;
short xC8;
short 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 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;
s32 xD0;
s32 xD4;
};
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 grCorneria_GroundVars {
u32 xC4_b0 : 1;
u32 xC4_b1 : 1;
u32 xC8;
u32 xCC;
f32 xD0;
f32 xD4;
f32 xD8;
f32 xDC;
f32 xE0;
f32 xE4;
f32 xE8;
f32 xEC;
f32 xF0;
f32 xF4;
f32 xF8;
u32 xFC;
u32 x100;
u32 x104;
u32 x108;
u32 x10C;
u32 x110;
f32 x114;
u8 x118;
u8 x119;
u8 x11A;
u8 x11B;
u32 x11C;
u32 x120;
u32 x124;
HSD_GObj* x128;
HSD_JObj* x12C;
};
struct grIceMt_GroundVars {
/* +0 gp+C4 */ char pad_0[0x14];
/* +0 gp+D8 */ s16 xD8;
};
struct grStadium_GroundVars {
/* +0 gp+C4:0 */ u8 x0_b0 : 1;
};
struct grZebes_GroundVars {
/* +0 gp+C4:0 */ u8 x0_b0 : 1;
/* +4 gp+C8 */ M2C_UNK x4;
/* +8 gp+CC */ M2C_UNK x8;
/* +C gp+D0 */ Vec3 xC;
};
struct grOnett_GroundVars {
/* +0 gp+C4:0 */ u8 x0_b0 : 1;
};
struct grBigBlue_GroundVars {
/* +0 gp+C4:0 */ u8 x0_b0 : 1;
};
struct grLast_GroundVars {
/* +0 gp+C4:0 */ u8 x0_b0 : 1;
};
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;
InternalStageId map_id; // 0x14
HSD_GObj* x18; // 0x18
HSD_GObjEvent x1C_callback;
int x20[8];
Vec3 self_vel;
Vec3 cur_pos;
int x58;
int x5C;
int x60;
int x64;
int x68;
int x6C;
int x70;
char pad_40[0xC4 - 0x74];
union GroundVars {
char pad_0[0x204 - 0xC4];
struct grBigBlue_GroundVars bigblue;
struct grCorneria_GroundVars corneria;
struct GroundVars_flatzone flatzone;
struct GroundVars_flatzone2 flatzone2;
struct grIceMt_GroundVars icemt;
struct GroundVars_izumi izumi;
struct GroundVars_izumi2 izumi2;
struct GroundVars_izumi3 izumi3;
struct grKongo_GroundVars kongo;
struct grKongo_GroundVars2 kongo2;
struct grKongo_GroundVars3 kongo3;
struct grLast_GroundVars last;
struct grOnett_GroundVars onett;
struct grStadium_GroundVars stadium;
struct GroundVars_unk unk;
struct grZebes_GroundVars zebes;
} gv;
};
struct { int x[1 - 2 * !(sizeof(struct Ground) == 0x204)]; };;
// Appears to be related to stage audio
struct UnkBgmStruct {
s32 x0;
s32 x4;
s32 x8;
u32 xC;
u32 x10;
s16 x14;
s16 x16;
s16 x18;
u8 pad[0x64 - 0x1A];
};
// TODO: what is this struct?
struct UnkStage6B0 {
f32 x0;
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;
u8 x6C_pad[0xB0 - 0x6A];
UnkBgmStruct* xB0;
s32 xB4; // number of entries in xB0
s32 xB8;
s32 xBC;
s32 xC0;
s32 xC4;
s32 xC8;
s32 xCC;
s32 xD0;
s32 xD4;
s32 xD8;
};
struct UnkStageDatInternal {
u8 x0_fill[0x4];
u32 unk4; // flags
};
struct UnkStageDat_x8_t {
/* +0 */ struct HSD_Joint* unk0;
/* +4 */ u8 _4[0x10 - 0x4];
/* +10 */ HSD_CameraDescPerspective* x10;
/* +14 */ M2C_UNK x14;
/* +18 */ M2C_UNK x18;
/* +1C */ HSD_FogDesc* x1C;
/* +20 */ S16Vec3* unk20;
/* +24 */ s32 unk24; // size of unk20 array
/* +28 */ M2C_UNK x28;
/* +2C */ s16* x2C;
/* +30 */ int x30;
};
struct UnkStageDat {
void* unk0;
s32 unk4;
struct UnkStageDat_x8_t* unk8;
s32 unkC;
HSD_Spline** unk10;
s32 unk14;
u8 x18_fill[0x20 - 0x18];
void* unk20;
s32 unk24;
UnkStageDatInternal** unk28;
s32 unk2C; // size
};
struct { int x[1 - 2 * !(sizeof(struct UnkStageDat_x8_t) == 0x34)]; };;
struct UnkArchiveStruct {
HSD_Archive* unk0;
UnkStageDat* unk4;
s32 unk8;
};
#define FTPART_INVALID 0xFF
// Table in PlCo.dat
typedef struct _FighterPartsTable {
u8* joint_to_part;
u8* part_to_joint;
u32 parts_num;
} FighterPartsTable;
// Points to data in PlCo.dat
struct ftCommonData {
/* +0 */ float x0;
/* +4 */ float x4;
/* +8 */ float x8_someStickThreshold;
/* +C */ float xC;
/* +10 */ float x10;
/* +14 */ float x14;
/* +18 */ float x18;
/* +1C */ int x1C;
/* +20 */ float x20;
/* +24 */ float x24;
/* +28 */ float x28;
/* +2C */ float x2C;
/* +30 */ float x30;
/* +34 */ M2C_UNK x34;
/* +38 */ M2C_UNK x38;
/* +3C */ float x3C;
/* +40 */ int x40;
/* +44 */ float x44;
/* +48 */ M2C_UNK x48;
/* +4C */ M2C_UNK x4C;
/* +50 */ float x50;
/* +54 */ M2C_UNK x54;
/* +58 */ M2C_UNK x58;
/* +5C */ M2C_UNK x5C;
/* +60 */ float x60_turnrunFrictionMul;
/* +64 */ M2C_UNK x64;
/* +68 */ float x68;
/* +6C */ float x6C;
/* +70 */ float x70_someLStickYMax;
/* +6C */ int x74;
/* +78 */ float x78;
/* +7C */ u8 x7C[0x88 - 0x7C];
/* +88 */ float x88;
/* +8C */ int x8C;
/* +90 */ u8 x90[0x98 - 0x90];
/* +98 */ float x98;
/* +9C */ float x9C;
/* +A0 */ float xA0;
/* +A4 */ float xA4;
/* +A8 */ float xA8;
/* +AC */ float attackhi3_stick_threshold_y;
/* +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 */ 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 */ M2C_UNK x108;
/* +10C */ M2C_UNK x10C;
/* +110 */ M2C_UNK x110;
/* +114 */ M2C_UNK x114;
/* +118 */ M2C_UNK x118;
/* +11C */ M2C_UNK x11C;
/* +120 */ M2C_UNK 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;
/* +148 */ float x148;
/* +14C */ float x14C;
/* +150 */ float x150;
/* +154 */ float x154;
/* +158 */ float x158;
/* +15C */ float x15C;
/* +160 */ float x160;
/* +164 */ float x164;
/* +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 */ M2C_UNK x1A4;
/* +1A8 */ float x1A8;
/* +1AC */ float x1AC;
/* +1B0 */ float x1B0;
/* +1B4 */ M2C_UNK x1B4;
/* +1B8 */ int x1B8;
/* +1BC */ float x1BC;
/* +1C0 */ float x1C0;
/* +1C4 */ M2C_UNK x1C4;
/* +1C8 */ float x1C8;
/* +1CC */ M2C_UNK x1CC;
/* +1D0 */ float x1D0;
/* +1D4 */ M2C_UNK x1D4;
/* +1D8 */ M2C_UNK x1D8;
/* +1DC */ M2C_UNK x1DC;
/* +1E0 */ float x1E0;
/* +1E4 */ float x1E4;
/* +1E8 */ M2C_UNK x1E8;
/* +1EC */ float x1EC;
/* +1F0 */ float x1F0;
/* +1F4 */ float x1F4;
/* +1F8 */ M2C_UNK x1F8;
/* +1FC */ float x1FC;
/* +200 */ float x200;
/* +204 */ float x204_knockbackFrameDecay;
/* +208 */ u8 x208[0x210 - 0x208];
/* +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 */ M2C_UNK x234;
/* +238 */ M2C_UNK x238;
/* +23C */ M2C_UNK x23C;
/* +240 */ M2C_UNK 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 */ M2C_UNK x26C;
/* +270 */ M2C_UNK x270;
/* +274 */ M2C_UNK 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 */ M2C_UNK x29C;
/* +2A0 */ int x2A0;
/* +2A4 */ float x2A4;
/* +2A8 */ float x2A8;
/* +2AC */ float x2AC;
/* +2B0 */ float x2B0;
/* +2B4 */ float x2B4;
/* +2B8 */ int x2B8;
/* +2BC */ float x2BC;
/* +2C0 */ M2C_UNK x2C0;
/* +2C4 */ M2C_UNK x2C4;
/* +2C8 */ M2C_UNK x2C8;
/* +2CC */ M2C_UNK x2CC;
/* +2D0 */ M2C_UNK 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 */ M2C_UNK x2F4;
/* +2F8 */ float x2F8;
/* +2FC */ float x2FC;
/* +300 */ float x300;
/* +304 */ float x304;
/* +308 */ float x308;
/* +30C */ M2C_UNK x30C;
/* +310 */ M2C_UNK x310;
/* +314 */ float x314;
/* +318 */ int x318;
/* +31C */ float x31C;
/* +320 */ int x320;
/* +324 */ int x324;
/* +328 */ M2C_UNK x328;
/* +32C */ Vec2 escapeair_deadzone;
/* +334 */ int x334;
/* +338 */ float escapeair_force;
/* +33C */ float escapeair_decay;
/* +340 */ float x340;
/* +344 */ float x344;
/* +348 */ M2C_UNK x348;
/* +34C */ M2C_UNK x34C;
/* +350 */ M2C_UNK x350;
/* +354 */ M2C_UNK x354;
/* +358 */ M2C_UNK x358;
/* +35C */ M2C_UNK x35C;
/* +360 */ M2C_UNK x360;
/* +364 */ M2C_UNK x364;
/* +368 */ M2C_UNK x368;
/* +36C */ M2C_UNK x36C;
/* +370 */ M2C_UNK x370;
/* +374 */ M2C_UNK x374;
/* +378 */ M2C_UNK x378;
/* +37C */ M2C_UNK x37C;
/* +380 */ M2C_UNK x380;
/* +384 */ M2C_UNK x384;
/* +388 */ M2C_UNK x388;
/* +38C */ M2C_UNK x38C;
/* +390 */ M2C_UNK x390;
/* +394 */ M2C_UNK x394;
/* +398 */ M2C_UNK x398;
/* +39C */ M2C_UNK x39C;
/* +3A0 */ M2C_UNK x3A0;
/* +3A4 */ M2C_UNK x3A4;
/* +3A8 */ float x3A8;
/* +3AC */ M2C_UNK x3AC;
/* +3B0 */ float x3B0;
/* +3B4 */ float shouldered_anim_rate;
/* +3B8 */ M2C_UNK x3B8;
/* +3BC */ M2C_UNK x3BC;
/* +3C0 */ int x3C0;
/* +3C4 */ M2C_UNK x3C4;
/* +3C8 */ M2C_UNK 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 */ u8 x3F0[0x400 - 0x3F0];
/* +410 */ float x400;
/* +410 */ float x404;
/* +410 */ float x408;
/* +40C */ float x40C;
/* +410 */ M2C_UNK x410;
/* +414 */ M2C_UNK x414;
/* +418 */ int x418;
/* +41C */ int x41C;
/* +420 */ M2C_UNK x420;
/* +424 */ float x424;
/* +428 */ int x428;
/* +42C */ M2C_UNK x42C;
/* +430 */ M2C_UNK x430;
/* +434 */ M2C_UNK x434;
/* +438 */ float x438;
/* +43C */ M2C_UNK 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;
/* +474 */ M2C_UNK x474;
/* +478 */ float x478;
/* +47C */ float x47C;
/* +480 */ float x480;
/* +484 */ M2C_UNK 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 x4B0;
/* +4B4 */ int x4B4;
/* +4B8 */ float x4B8;
/* +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 */ M2C_UNK x4F4;
/* +4F8 */ u32 x4F8;
/* +4FC */ u32 x4FC;
/* +500 */ M2C_UNK x500;
/* +504 */ int x504;
/* +508 */ M2C_UNK x508;
/* +50C */ M2C_UNK x50C;
/* +510 */ M2C_UNK x510;
/* +514 */ M2C_UNK x514;
/* +518 */ M2C_UNK x518;
/* +51C */ M2C_UNK x51C;
/* +520 */ int x520;
/* +524 */ M2C_UNK x524;
/* +528 */ M2C_UNK x528;
/* +52C */ M2C_UNK x52C;
/* +530 */ M2C_UNK x530;
/* +534 */ M2C_UNK x534;
/* +538 */ M2C_UNK x538;
/* +53C */ M2C_UNK x53C;
/* +540 */ M2C_UNK x540;
/* +544 */ M2C_UNK x544;
/* +548 */ M2C_UNK x548;
/* +54C */ M2C_UNK x54C;
/* +550 */ M2C_UNK x550;
/* +554 */ M2C_UNK x554;
/* +558 */ M2C_UNK x558;
/* +55C */ M2C_UNK x55C;
/* +560 */ M2C_UNK x560;
/* +564 */ M2C_UNK x564;
/* +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 */ M2C_UNK x58C;
/* +590 */ M2C_UNK x590;
/* +594 */ M2C_UNK x594;
/* +598 */ M2C_UNK x598;
/* +59C */ float x59C;
/* +5A0 */ u8 x5A0[0x5C0 - 0x5A0];
/* +5C0 */ float x5C0;
/* +5C4 */ M2C_UNK x5C4;
/* +5C8 */ int x5C8;
/* +5CC */ float x5CC;
/* +5D0 */ M2C_UNK x5D0;
/* +5D4 */ M2C_UNK x5D4;
/* +5D8 */ M2C_UNK x5D8;
/* +5DC */ uint bury_timer_unk1;
/* +5E0 */ uint bury_timer_unk2;
/* +5E4 */ uint bury_timer_unk3;
/* +5E8 */ M2C_UNK x5E8;
/* +5EC */ M2C_UNK 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 x668;
/* +66C */ float x66C;
/* +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 x69C;
/* +6A0 */ float x6A0;
/* +6A4 */ float x6A4;
/* +6A8 */ float x6A8;
/* +6AC */ int x6AC;
/* +6B0 */ int x6B0;
/* +6B4 */ int x6B4;
/* +6B8 */ int x6B8;
/* +6BC */ M2C_UNK x6BC;
/* +6C0 */ M2C_UNK x6C0;
/* +6C4 */ M2C_UNK x6C4;
/* +6C8 */ int x6C8;
/* +6CC */ int x6CC;
/* +6D0 */ float x6D0;
/* +6D4 */ M2C_UNK x6D4;
/// @todo expand to actual size
/* +6D8 */ void* x6D8[1];
/* +6DC */ GXColor x6DC_colorsByPlayer[4];
/* +6EC */ u8 x6EC[0x6F0 - 0x6EC];
/* +6F0 */ float unk_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 */ u8 x71C[0x760 - 0x71C];
/* +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 x77C;
/* +780 */ M2C_UNK x780;
/* +784 */ M2C_UNK x784;
/* +788 */ float x788;
/* +78C */ float x78C;
/* +790 */ M2C_UNK x790;
/* +794 */ float x794;
/* +798 */ float x798;
/* +79C */ float x79C;
/* +7A0 */ float x7A0;
/* +7A4 */ float x7A4;
/* +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 */ int x7C8;
/* +7CC */ int x7CC;
/* +7D0 */ int x7D0;
/* +7D4 */ float hit_weight_mul;
/* +7D8 */ int x7D8;
/* +7DC */ int x7DC;
/* +7E0 */ int x7E0;
/* +7E4 */ float x7E4_scaleZ;
/* +7E8 */ uint unk_kb_angle_min;
/* +7EC */ uint unk_kb_angle_max;
/* +7F0 */ int x7F0;
/* +7F4 */ u8 x7F4[0x800 - 0x7F4];
/* +800 */ float x800;
/* +804 */ u8 x804[0x814 - 0x804];
/* +814 */ int x814;
// lots of more data following, exact size to be determined
};
typedef struct _FtSFXArr {
int num;
int* sfx_ids;
} FtSFXArr;
struct FtSFX {
FtSFXArr* smash;
int x4;
int x8;
int xC;
int x10;
int x14;
int x18;
int x1C;
int x20;
int x24;
int x28;
int x2C;
int x30;
int x34;
};
typedef struct _DObjList {
usize_t count;
HSD_DObj** data;
} DObjList;
typedef struct {
u32 unk0;
f32 unk4;
} ftData_x34;
typedef struct ftData_x44_t {
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
s16 unkC;
s16 unk10;
s16 unk12;
s16 unk14;
s16 unk16;
s16 unk18;
} ftData_x44_t;
struct ftData {
/* +0 */ struct {
/* +0 */ u8 x0[0x8C];
/* +8C */ float x8C;
/* +90 */ u8 x90[0xFC - 0x90];
/* +FC */ float xFC;
/* +100 */ u8 x100[0x168 - 0x100];
/* +168 */ float x168;
/* +16C */ int x16C_idx;
}* x0;
/* +4 */ void* ext_attr;
/* +8 */ struct ftData_x8 {
/* +0 */ u8 x0[0x10];
/* +10 */ u8 x10;
/* +11 */ u8 x11;
/* +12 */ u8 x12;
/* +13 */ u8 x13;
/* +14 */ u8 x14;
}* x8;
/* +C */ struct S_TEMP4* xC;
/* +10 */ u8* x10;
/* +14 */ struct S_TEMP4* x14;
/* +18 */ u8* x18;
/* +1C */ M2C_UNK x1C;
/* +20 */ struct {
/* +0 */ M2C_UNK x0;
/* +4 */ HSD_Joint* x8;
}* x20;
/* +24 */ M2C_UNK x24;
/* +28 */ M2C_UNK x28;
/* +2C */ struct ftDynamics* x2C;
/* +30 */ M2C_UNK x30;
/* +34 */ struct ftData_x34 {
/* +0 */ Fighter_Part x0;
/* +4 */ float scale;
}* x34;
/* +38 */ M2C_UNK x38;
/* +3C */ struct UnkFloat6_Camera* x3C;
/* +40 */ M2C_UNK _40;
/* +44 */ ftData_x44_t* x44;
/* +48 */ M2C_UNK* x48_items;
/* +4C */ FtSFX* x4C_sfx;
/* +50 */ u8 x50[0x58 - 0x50];
/* +58 */ void* x58;
};
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 {
/* +000 fp+110 */ float walk_init_vel;
/* +004 fp+114 */ float walk_accel;
/* +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 gr_friction;
/* +01C fp+12C */ float dash_initial_velocity;
/* +020 fp+130 */ float dash_run_acceleration_a;
/* +024 fp+134 */ float dash_run_acceleration_b;
/* +028 fp+138 */ float dash_run_terminal_velocity;
/* +02C fp+13C */ float run_animation_scaling;
/* +030 fp+140 */ float max_run_brake_frames;
/* +034 fp+144 */ float grounded_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 grav;
/* +060 fp+170 */ float terminal_vel;
/* +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 horizontal_air_mobility_constant;
/* +07C fp+18C */ float jab_2_input_window;
/* +080 fp+190 */ float jab_3_input_window;
/* +084 fp+194 */ int frames_to_change_direction_on_standing_turn;
/* +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 x9C;
/* +0A0 fp+1B0 */ int xA0;
/* +0A4 fp+1B4 */ int xA4;
/* +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 */ int xB4;
/* +0B8 fp+1C8 */ float xB8;
/* +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;
/* +118 fp+230 */ Vec3 x118;
/* +11C fp+23C */ float x11C;
/* +120 fp+240 */ Vec3 x120;
/* +124 fp+24C */ float x124;
/* +128 fp+250 */ float x128;
/* +12C fp+254 */ int x12C;
/* +130 fp+258 */ float x130;
/* +134 fp+25C */ float bubble_ratio;
/* +138 fp+260 */ int x138;
/* +13C fp+264 */ int x13C;
/* +140 fp+268 */ float x140;
/* +144 fp+26C */ int x144;
/* +148 fp+270 */ float respawn_platform_scale;
/* +14C fp+274 */ float x14C;
/* +150 fp+278 */ int x150;
/* +154 fp+27C */ int camera_zoom_target_bone;
/* +158 fp+280 */ Vec3 x158;
/* +15C fp+28C */ float x15C;
/* +160 fp+290 */ int weight_dependent_throw_speed_flags;
} ftCo_DatAttrs;
struct FighterBone {
/* +0 */ HSD_JObj* joint;
/* +4 */ HSD_JObj* x4_jobj2; // used for interpolation
/* +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;
/* +C */ M2C_UNK xC;
};
struct { int x[1 - 2 * !(sizeof(struct FighterBone) == 0x10)]; };;
/* 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 */ s8 x212C;
/* fp+212D */ s8 x212D;
/* fp+212E */ s8 x212E;
/* fp+212F */ s8 x212F;
/// bool for smash sfx?
/* fp+2130 */ s32 x2130_sfxBool;
/* fp+2134 */ s8 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;
typedef struct {
HSD_Joint* joint;
u8 padding[0x10];
HSD_Archive* x14_archive;
} UnkCostumeStruct;
struct UnkCostumeList {
UnkCostumeStruct* costume_list;
u8 numCostumes;
};
struct S_TEMP1 {
FighterKind fighterKind;
u8 playerID;
u8 unk5;
/* +6:0 */ u8 flags_b0 : 1;
/* +6:1 */ u8 flags_b1 : 1;
};
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 S_TEMP4 {
s32 x0;
s32 x4;
s32 x8;
ftSubactionList* xC;
s32 x10_animCurrFlags;
s32 x14;
};
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+2070:0 */ u8 x2071_b0_3 : 4;
/* fp+2070:4 */ u8 x2071_b4 : 1;
/* fp+2070:5 */ u8 x2071_b5 : 1;
/* fp+2070:6 */ u8 x2071_b6 : 1;
/* fp+2070:7 */ u8 x2071_b7 : 1;
/* fp+2070:0 */ u8 x2072_b0_3 : 4;
/* fp+2070:4 */ u8 x2072_b4 : 1;
/* fp+2070:5 */ u8 x2072_b5 : 1;
/* fp+2070:6 */ u8 x2072_b6 : 1;
/* fp+2070:7 */ u8 x2072_b7 : 1;
/* fp+2073 */ u8 x2073;
};
/* fp+2070 */ s32 x2070_int;
};
/// @todo See if this should likewise be instituted for item->xD94 thru
/// xDA4_word/xDA8_short
/* fp+2074 */ struct Struct2074 {
/* fp+2074 */ Vec2 x2074_vec;
/* fp+207C */ Vec2 x207C;
/* fp+2084 */ u32 x2084;
/* fp+2088 */ u16 x2088;
};
struct ftSubactionList {
u8 x0_opcode;
};
struct ftCmdScript {
float x3E4_scriptEventTimer; // 0x3E4
float x3E8_scriptFrameTimer; // 0x3E8
ftSubactionList* x3EC_scriptCurrent; // 0x3EC
s32 x3F0_scriptLoopNum; // 0x3F0
void* x3F4_scriptReturn; // 0x3F4
};
struct ftDeviceUnk1 {
/* +0 */ u8 x0[0x7B - 0x00];
/* +7B */ u8 x7B;
};
struct ftDeviceUnk2 {
/* +0 */ M2C_UNK x0;
/* +4 */ M2C_UNK x4;
/* +8 */ M2C_UNK x8;
/* +C */ M2C_UNK xC;
/* +10 */ M2C_UNK x10;
/* +14 */ M2C_UNK x14;
/* +18 */ M2C_UNK x18;
/* +1C */ M2C_UNK x1C;
/* +20 */ M2C_UNK x20;
/* +24 */ M2C_UNK x24;
/* +28 */ ftDeviceUnk1* x28;
/* +2C */ M2C_UNK x2C;
/* +30 */ M2C_UNK x30;
/* +34 */ M2C_UNK x34;
/* +38 */ M2C_UNK x38;
/* +3C */ M2C_UNK x3C;
/* +40 */ M2C_UNK x40;
/* +44 */ M2C_UNK x44;
/* +48 */ M2C_UNK x48;
/* +4C */ M2C_UNK x4C;
/* +50 */ GXColor lobj_color;
/* +54 */ M2C_UNK x54;
/* +58 */ M2C_UNK x58;
/* +5C */ M2C_UNK x5C;
/* +60 */ M2C_UNK x60;
/* +64 */ M2C_UNK x64;
/* +68 */ M2C_UNK x68;
/* +6C */ M2C_UNK x6C;
/* +70 */ M2C_UNK x70;
/* +74 */ float lobj_rot_x;
/* +74 */ float lobj_rot_yz;
/* +7C:0 */ u8 x7C_b0 : 1;
/* +7C:1 */ u8 x7C_b1 : 1;
/* +7C:2 */ u8 x7C_b2 : 1;
/* +7C:3 */ u8 x7C_b3 : 1;
/* +7C:4 */ u8 x7C_b4 : 1;
/* +7C:5 */ u8 x7C_b5 : 1;
/* +7C:6 */ u8 x7C_b6 : 1;
/* +7C:7 */ u8 x7C_b7 : 1;
};
struct ftDeviceUnk3 {
M2C_UNK x0;
u32 x4;
ftDevice_Callback0 active_cb;
};
struct ftDeviceUnk4 {
int x0;
M2C_UNK x4;
};
struct { int x[1 - 2 * !(sizeof(struct ftDeviceUnk4) == 0x8)]; };;
struct ftDeviceUnk5 {
M2C_UNK x0;
ftCommon_BuryType x4;
bool (*cb)(M2C_UNK, Fighter_GObj*);
};
struct { int x[1 - 2 * !(sizeof(struct ftDeviceUnk5) == 0xC)]; };;
struct Fighter_x1A88_xFC_t {
/* +0 */ HSD_Pad x0;
/* +4 */ u8 x4;
/* +5 */ u8 x5;
/* +6 */ u8 x6;
/* +7 */ u8 x7;
/* +8 */ u8 x8;
/* +9 */ u8 x9;
/* +A */ u8 xA;
/* +B */ u8 xB;
/* +C */ Vec3 cur_pos;
/* +18 */ float facing_dir;
/* +1C */ struct Fighter_x1A88_xFC_t* x1C;
/* +20 */ u8 x20[0x348 - 0x20];
};
struct { int x[1 - 2 * !(sizeof(struct Fighter_x1A88_xFC_t) == 0x348)]; };;
struct Fighter_x1A88_t {
/* +0 */ HSD_Pad x0;
/* +4 */ u8 x4;
/* +5 */ u8 x5;
/* +6 */ u8 x6;
/* +7 */ u8 x7;
/* +8 */ u8 x8;
/* +9 */ u8 x9;
/* +A */ u8 xA;
/* +B */ u8 xB;
/* +C */ enum_t xC;
/* +10 */ int x10;
/* +14 */ int x14;
/* +18 */ int x18;
/* +1C */ int x1C;
/* +20 */ int x20;
/* +24 */ u8 x24[0x34 - 0x24];
/* +34 */ float x34;
/* +38 */ float x38;
/* +3C */ M2C_UNK x3C;
/* +40 */ M2C_UNK x40;
/* +44 */ Fighter* x44;
/* +48 */ M2C_UNK x48;
/* +4C */ void* x4C;
/* +50 */ int x50;
/* +54 */ Vec2 x54;
/* +5C */ float x5C;
/* +60 */ int x60;
/* +64 */ Vec2 x64;
/* +64 */ u8 x6C[0x7C - 0x6C];
/* +7C */ int x7C;
/* +80 */ u8 x80[0xF8 - 0x80];
/* +F8:0 */ u8 xF8_b0 : 1;
/* +F8:1 */ u8 xF8_b1 : 1;
/* +F8:2 */ u8 xF8_b2 : 1;
/* +F8:3 */ u8 xF8_b3 : 1;
/* +F8:4 */ u8 xF8_b4 : 1;
/* +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_b3 : 1;
/* +FA:4 */ u8 xFA_b4 : 1;
/* +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;
/* +444 */ struct Fighter_x1A88_xFC_t* x444;
/* +448 */ struct Fighter_x1A88_xFC_t* x448;
/* +44C */ M2C_UNK x44C;
/* +450 */ M2C_UNK x450;
/* +454 */ uint x454;
/* +458 */ u8 x458[0x554 - 0x458];
/* +554 */ union Fighter_x1A88_x544_t {
struct {
u8 x0_u8;
};
uint x0_u32;
void* x0_p;
} x554;
/* +558 */ float x558;
/* +558 */ u8 x55C[0x568 - 0x55C];
/* +568 */ float x568;
/* +56C */ float x56C;
/* +570 */ M2C_UNK x570;
/* +574 */ float half_width;
/* +578 */ float half_height;
};
struct { int x[1 - 2 * !(sizeof(struct Fighter_x1A88_t) == 0x57C)]; };;
struct Fighter_x59C_t {
char pad_0[0x8000];
};
struct { int x[1 - 2 * !(sizeof(struct Fighter_x59C_t) == 0x8000)]; };;
struct Fighter {
/* fp+0 */ HSD_GObj* gobj;
/* fp+4 */ FighterKind kind;
/* fp+8 */ s32 x8_spawnNum;
/* fp+C */ u8 player_id;
/* 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 S_TEMP4* x24;
/* fp+28 */ u8* x28;
/* 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_anim_vel;
/* 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 */ void* x2D0;
/* 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[10];
/* fp+3E0 */ int dynamics_num;
/* fp+3E4 */ ftCmdScript x3E4_fighterCmdScript;
/* fp+3F8 */ M2C_UNK x3F8;
/* fp+3FC */ M2C_UNK x3FC;
/* fp+400 */ M2C_UNK x400;
/* fp+404 */ M2C_UNK x404;
/* fp+408 */ ftDeviceUnk2 x408;
/* fp+488 */ ftDeviceUnk2 x488;
/* fp+508 */ ftDeviceUnk2 x508;
/* fp+588 */ HSD_LObj* x588;
/* fp+58C */ s32 x58C;
/* fp+590 */ uint x590;
/* fp+594 */ union {
struct {
/* fp+594:0 */ u8 x594_b0 : 1;
/* fp+594:1 */ u8 x594_b1 : 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;
};
/* fp+594 */ s32 x594_s32;
};
/* fp+598 */ s32 x598;
/* fp+59C */ struct Fighter_x59C_t* x59C;
/* fp+5A0 */ struct Fighter_x59C_t* x5A0;
/* fp+5A4 */ M2C_UNK x5A4;
/* fp+5A8 */ M2C_UNK x5A8;
/* fp+5AC */ u8 _5AC[0x5B8 - 0x5AC];
/* fp+5B8 */ s32 x5B8;
/* fp+5BC */ M2C_UNK x5BC;
/* fp+598 */ u8 filler_x598[0x5C8 - 0x5C0];
/* fp+5A0 */ void* x5C8;
/* fp+5CC */ u8 filler_x5CC[0x5E8 - 0x5CC];
/* fp+5E8 */ FighterBone* parts;
/* fp+5EC */ DObjList dobj_list;
union {
struct {
s8 x0, x1;
}
/// @todo This is nonsense. Used by #ftParts_80074A74.
x5F4_arr[2];
struct {
/* fp+5F4 */ s8 x5F4;
/* fp+5F5 */ s8 x5F5;
/* fp+5F6 */ s8 x5F6;
/* fp+5F7 */ s8 x5F7;
};
};
/* fp+5F8 */ s8 x5F8;
/* fp+5FC */ u8 filler_x5FC[0x60C - 0x5F9];
/* fp+60C */ void* x60C;
/* fp+610 */ union {
/* fp+610 */ GXColor x610_color_rgba[2];
/* fp+610 */ struct {
/* fp+610 */ s32 x610;
/* fp+614 */ GXColor x614;
};
};
/* fp+618 */ u8 x618_player_id;
/* fp+619 */ u8 x619_costume_id;
/* fp+61A */ u8 x61A_controller_index;
/* fp+61B */ u8 team;
/* fp+61C */ u8 x61C;
/* fp+61D */ u8 x61D;
/* fp+61E */ u8 filler_x61E[0x620 - 0x61E];
/* fp+620 */ struct {
/* fp+620 */ Vec2 lstick;
/* fp+628 */ Vec2 lstick1;
/* fp+630 */ float x630;
/* fp+634 */ float x634;
/* fp+638 */ Vec2 cstick;
/* fp+640 */ Vec2 cstick1;
/* fp+648 */ float x648;
/* fp+64C */ float x64C;
/* fp+650 */ float x650;
/* fp+654 */ float x654;
/* fp+658 */ float x658;
/* fp+65C */ HSD_Pad held_inputs;
/* fp+660 */ s32 x660;
/* fp+664 */ s32 x664;
/* fp+668 */ HSD_Pad x668;
/* fp+66C */ s32 x66C;
} input;
/* fp+670 */ u8 x670_timer_lstick_tilt_x;
/* fp+671 */ u8 x671_timer_lstick_tilt_y;
/* fp+672 */ u8 x672_input_timer_counter;
/* fp+673 */ u8 x673;
/* fp+674 */ u8 x674;
/* fp+674 */ u8 x675;
/* fp+676 */ u8 x676_x;
/* fp+677 */ u8 x677_y;
/* fp+678 */ u8 x678;
/* fp+679 */ u8 x679_x;
/* fp+67A */ u8 x67A_y;
/* fp+67B */ u8 x67B;
/* 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 */ CameraBox* 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_unk;
/* fp+8AC */ HSD_JObj* x8AC_animSkeleton;
/* fp+8AC */ u8 filler_x8AC[0x914 - 0x8B0];
/* 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 */ HurtCapsule hurt_capsules[15];
/* fp+1614 */ M2C_UNK x1614;
/* fp+1618 */ u8 filler_x1618[0x166C - 0x1618];
/* fp+166C */ u8 x166C;
/* fp+1670 */ M2C_UNK x1670;
/* fp+1674 */ u8 filler_x1674[0x1828 - 0x1674];
/* 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 */ uint x1860_element;
/* fp+1864 */ int x1864;
/* fp+1868 */ HSD_GObj* x1868_source;
/* fp+186C */ int x186c;
/* fp+1870 */ int x1870;
/* fp+1874 */ int x1874;
/* fp+1878 */ int x1878;
/* fp+187C */ int x187c;
/* fp+1880 */ int x1880;
/* fp+1884 */ int x1884;
/* fp+1888 */ int x1888;
/* fp+188C */ int x188c;
/* fp+1890 */ int x1890;
/* fp+1894 */ int x1894;
/* fp+1898 */ int 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 */ int x18d4;
/* fp+18D8 */ int x18d8;
/* fp+18DC */ int x18dc;
/* fp+18E0 */ float kb_applied1;
/* fp+18E4 */ int x18e4;
/* fp+18E8 */ int x18e8;
/// 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 */ Vec3 x1930;
/* fp+193C */ Vec3 x193c;
/* 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;
/* fp+197C */ HSD_GObj* x197C;
/* 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 */ bool 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 x1A4C;
/* 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* x1A60;
/* 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 Fighter_x1A88_t x1A88;
/* 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 */ s32 x2028;
/* fp+202C */ s32 x202C;
/* fp+2030 */ s32 x2030;
/* fp+2034 */ s32 x2034;
/* fp+2038 */ s32 x2038;
/* fp+203C */ s32 x203C;
/* fp+2040 */ void* x2040;
/* fp+203C */ u8 filler_x203C[0x2064 - 0x2044];
/* fp+2064 */ int x2064_ledgeCooldown;
/* fp+2068 */ s32 x2068_attackID;
/* fp+206C */ u16 x206C_attack_instance;
/* fp+206E */ short 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 */ s16 x209C;
/* fp+20A0 */ HSD_JObj* x20A0_accessory;
/* fp+20A4 */ UnkFlagStruct x20A4;
/* fp+20A8 */ s32 x20A8;
/* fp+20AC */ HSD_GObj* unk_gobj;
/* fp+20B0 */ M2C_UNK x20B0;
/* fp+20B4 */ M2C_UNK x20B4;
/* fp+20B8 */ M2C_UNK x20B8;
/* fp+20BC */ M2C_UNK x20BC;
/* fp+20C0 */ M2C_UNK x20C0;
/* fp+20C4 */ M2C_UNK x20C4;
/* fp+20C8 */ M2C_UNK x20C8;
/* fp+20CC */ M2C_UNK x20CC;
/* fp+20D0 */ M2C_UNK x20D0;
/* fp+20D4 */ M2C_UNK x20D4;
/* fp+20D8 */ M2C_UNK x20D8;
/* fp+20DC */ M2C_UNK x20DC;
/* fp+20E0 */ M2C_UNK x20E0;
/* fp+20E4 */ M2C_UNK x20E4;
/* fp+20E8 */ M2C_UNK x20E8;
/* fp+20EC */ M2C_UNK x20EC;
/* fp+20F0 */ M2C_UNK x20F0;
/* fp+20F4 */ M2C_UNK x20F4;
/* fp+20F8 */ float x20F8;
/* fp+20FC */ float x20FC;
/* fp+2100 */ s8 x2100;
/* fp+2101 */ union {
/* fp+2101 */ u8 x2101;
/* fp+2101 */ struct {
/* 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 */ s32 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;
/* fp+2148 */ s32 x2148;
/* fp+214C */ s32 x214C;
/* fp+2150 */ s32 x2150;
/* fp+2154 */ s32 x2154;
/* fp+2158 */ s32 x2158;
/* fp+215C */ s32 x215C;
/* fp+2160 */ s32 x2160;
/* fp+2164 */ int x2164;
/* fp+2168 */ int x2168;
/* fp+216C */ float unk_grab_val;
/* fp+2170 */ float x2170;
/* fp+2174 */ u8 filler_x2174[0x2180 - 0x2174];
/* 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 x21F0;
/* fp+21F4 */ HSD_GObjEvent x21F4;
/* 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 x2214;
union {
/* fp+2218 */ u8 x2218;
/* fp+2218 */ struct {
/* 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 x2218_b3 : 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;
};
};
union {
/* fp+2219 */ u8 x2219;
/* fp+2219 */ struct {
/* 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 x221A_b2 : 1;
/* fp+221A:3 */ u8 x221A_b3 : 1;
/* fp+221A:4 */ u8 x221A_b4 : 1;
/* fp+221A:5 */ u8 x221A_b5 : 1;
/* fp+221A:6 */ u8 x221A_b6 : 1;
/* fp+221A:7 */ u8 x221A_b7 : 1;
/* fp+221B */ union {
/* fp+221B */ u8 x221B;
/* 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 */ union {
/* fp+221C */ struct {
/* fp+221C */ u8 x221C;
/* fp+221D */ u8 x221D;
};
/* fp+221C */ struct {
/* fp+221C:0 */ u8 x221C_b0 : 1;
/* fp+221C:1 */ u8 x221C_b1 : 1;
/* fp+221C:2 */ u8 x221C_b2 : 1;
/* fp+221C:3 */ u8 x221C_b3 : 1;
/* fp+221C:4 */ u8 x221C_b4 : 1;
/* fp+221C:5 */ u8 x221C_b5 : 1;
/* fp+221C:6 */ u8 x221C_b6 : 1;
/* fp+221C:7 */ u8 x221C_b7 : 1;
/* fp+221D:0 */ u8 x221D_b0 : 1;
/* fp+221D:1 */ u8 x221D_b1 : 1;
/* fp+221D:2 */ u8 x221D_b2 : 1;
/* fp+221D:3 */ u8 x221D_b3 : 1;
/* fp+221D:4 */ u8 x221D_b4 : 1;
/* fp+221D:5 */ u8 x221D_b5 : 1;
/* fp+221D:6 */ u8 x221D_b6 : 1;
/* fp+221D:7 */ u8 x221D_b7 : 1;
};
/* fp+221C */ struct {
/* fp+221C:0 */ u16 x221C_u16_x : 7;
/* fp+221C:7 */ u16 x221C_u16_y : 3;
/* fp+221D:2 */ u16 x221C_u16_z : 6;
};
};
/* fp+221E:0 */ u8 x221E_b0 : 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 x221F_b3 : 1;
/* fp+221F:4 */ u8 x221F_b4 : 1;
/* fp+221F:5 */ u8 x221F_b5 : 1;
/* fp+221F:6 */ u8 x221F_b6 : 1;
/* fp+221F:7 */ u8 x221F_b7 : 1;
/* fp+2220 */ union {
/* fp+2220 */ struct {
/* fp+2220:0 */ u8 b0 : 3;
/* fp+2220:3 */ u8 b3 : 1;
/* fp+2220:4 */ u8 b4 : 1;
/* fp+2220:5 */ u8 b5 : 1;
/* fp+2220:6 */ u8 b6 : 1;
/* fp+2220:7 */ u8 b7 : 1;
};
/* fp+2220 */ u8 flags;
} x2220_flag;
/* fp+2221 */ union {
/* fp+2221 */ u8 x2221;
/* fp+2221 */ struct {
/* 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;
/* fp+2221:5 */ u8 x2221_b5 : 1;
/* fp+2221:6 */ u8 x2221_b6 : 1;
/* fp+2221:7 */ u8 x2221_b7 : 1;
};
};
/* fp+2222:0 */ u8 x2222_b0 : 1;
/* fp+2222:1 */ u8 x2222_b1 : 1;
/* 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 x2223_b6 : 1;
/* fp+2223:7 */ u8 x2223_b7 : 1;
/* fp+2224:0 */ u8 x2224_b0 : 1;
/* fp+2224:1 */ u8 x2224_b1 : 1;
/* fp+2224:2 */ u8 x2224_b2 : 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 x2224_b7 : 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 x2228_b2 : 1;
/* fp+2228:3 */ u8 x2228_b3 : 2;
/* fp+2228:5 */ u8 x2228_b5 : 1;
/* fp+2228:6 */ u8 x2228_b6 : 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 x2229_b5_no_normal_motion : 1;
/* fp+2229:6 */ u8 x2229_b6 : 1;
/* fp+2229:7 */ u8 x2229_b7 : 1;
/* fp+222A */ UnkFlagStruct x222A_flag;
/* fp+222B */ u8 filler_x222B;
/* 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;
} fv;
/* fp+2324 */ InternalStageId bury_stage_kind;
/* fp+2328 */ uint bury_timer_1;
/* fp+232C */ uint bury_timer_2;
/* fp+2330 */ IntVec2 x2330;
/* fp+2338 */ IntVec2 x2338;
/// @at{2340} @sz{AC}
/* 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 { int x[1 - 2 * !(sizeof(Fighter) == 0x23EC)]; };;
struct gmScriptEventDefault {
u32 opcode : 6;
u32 value1 : 26;
};
struct ftData_UnkCountStruct {
void* data;
int count;
};
struct UnkFloat6_Camera {
Vec3 x0;
Vec3 xC;
};
struct FtCmdState {
float x0; // timer
float x4; // frame
union {
char* x8; // script
struct {
union {
s16 x0;
struct {
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;
u8 x1_b0 : 1;
u8 x1_b1 : 1;
u8 x1_b2 : 1;
u8 x1_b3 : 1;
u8 x1_b4 : 1;
u8 x1_b5 : 1;
u8 x1_b6 : 1;
u8 x1_b7 : 1;
};
};
union {
s16 x2;
struct {
u8 x2_b0 : 1;
u8 x2_b1 : 1;
u8 x2_b2 : 1;
u8 x2_b3 : 1;
u8 x2_b4 : 1;
u8 x2_b5 : 1;
u8 x2_b6 : 1;
u8 x2_b7 : 1;
u8 x3_b0 : 1;
u8 x3_b1 : 1;
u8 x3_b2 : 1;
u8 x3_b3 : 1;
u8 x3_b4 : 1;
u8 x3_b5 : 1;
u8 x3_b6 : 1;
u8 x3_b7 : 1;
};
};
}* x8_bits;
};
int xC; // stack_depth
void*(x10[5]); // stack
};
typedef struct ftData_UnkModelStruct {
Fighter_ModelEvent model_events[FTKIND_MAX];
HSD_JObj* (*getter[FTKIND_MAX])(HSD_GObj*);
} ftData_UnkModelStruct;
struct ftData_80085FD4_ret {
/* +0 */ M2C_UNK x0;
/* +4 */ M2C_UNK x4;
/* +8 */ M2C_UNK x8;
};
typedef struct ArticleDynamicBones {
BoneDynamicsDesc array[10];
} ArticleDynamicBones;
typedef struct ftDynamics {
/// @todo Very similar to #ItemDynamics.
struct {
/* +0 */ int dynamicsNum;
/* +4 */ ArticleDynamicBones* ftDynamicBones;
};
/* +8 */ int x4;
/* +C */ void* x8;
/* +10 */ Fighter_Part* x10;
} ftDynamics;
typedef struct KirbyHatStruct {
/* +0 */ HSD_Joint* hat_joint;
/* +4 */ s32 joint_num;
/* +8 */ void* hat_vis_table;
/* +C */ ftDynamics* hat_dynamics[5];
} KirbyHatStruct;
typedef struct Kirby_Unk {
/* +0 */ HSD_Joint* x0;
/* +4 */ HSD_Joint** x4;
/* +8 */ M2C_UNK x8;
/* +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[FTKIND_MAX];
};
struct { int x[1 - 2 * !(sizeof(struct ft_80459B88_t) == 0x88)]; };;
struct Fighter_804D653C_t {
u32 unk;
u8 unk4;
u8 unk5;
};
/* 148C64 */ void ftCl_Init_OnDeath(ftLk_GObj* gobj);
/* 148CE4 */ void ftCl_Init_OnLoad(ftLk_GObj* gobj);
/* 148DC0 */ void ftCl_Init_OnItemPickup(ftLk_GObj* gobj, bool flag);
/* 148E34 */ void ftCl_Init_OnItemInvisible(ftLk_GObj* gobj);
/* 148E7C */ void ftCl_Init_OnItemVisible(ftLk_GObj* gobj);
/* 148EC4 */ void ftCl_Init_OnItemDrop(ftLk_GObj* gobj, bool flag);
/* 148F38 */ void ftCl_Init_OnItemPickupExt(ftLk_GObj* gobj, bool flag);
/* 149018 */ void ftCl_Init_OnItemDropExt(ftLk_GObj* gobj, bool flag);
/* 14906C */ void ftCl_Init_LoadSpecialAttrs(ftLk_GObj* gobj);
/* 14908C */ void ftCl_Init_OnKnockbackEnter(ftLk_GObj* gobj);
/* 1490D0 */ void ftCl_Init_OnKnockbackExit(ftLk_GObj* gobj);
/* 149114 */ void ftCl_Init_80149114(ftLk_GObj* gobj);
/* 14919C */ void ftCl_Init_8014919C(ftLk_GObj* gobj);
/* 14920C */ bool ftCl_Init_8014920C(ftLk_GObj* gobj);
/* 149268 */ void ftCl_Init_80149268(ftLk_GObj* gobj);
/* 1492C4 */ void ftCl_Init_801492C4(ftLk_GObj* gobj);
/* 1492F4 */ bool ftCl_Init_801492F4(ftLk_GObj* gobj);
/* 149318 */ void ftCl_Init_80149318(ftLk_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[];
#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 {
/// @at{0} @sz{4}
enum_t anim_id;
/// @at{4} @sz{4}
HSD_GObjPredicate animated;
/// @at{8} @sz{4}
HSD_GObjEvent physics_updated;
/// @at{C} @sz{4}
HSD_GObjPredicate collided;
};
struct ItemLogicTable {
/// @at{0} @sz{4}
ItemStateTable* states;
/// @at{4} @sz{4}
HSD_GObjEvent spawned;
/// @at{8} @sz{4}
HSD_GObjEvent destroyed;
/// @at{C} @sz{4}
HSD_GObjEvent picked_up;
/// @at{10} @sz{4}
HSD_GObjEvent dropped;
/// @at{14} @sz{4}
HSD_GObjEvent thrown;
/// @at{18} @sz{4}
HSD_GObjPredicate dmg_dealt;
/// @at{1C} @sz{4}
HSD_GObjPredicate dmg_received;
/// @at{20} @sz{4}
HSD_GObjEvent entered_air;
/// @at{24} @sz{4}
HSD_GObjPredicate reflected;
/// @at{28} @sz{4}
HSD_GObjPredicate clanked;
/// @at{2C} @sz{4}
HSD_GObjPredicate absorbed;
/// @at{30} @sz{4}
HSD_GObjPredicate shield_bounced;
/// @at{34} @sz{4}
HSD_GObjPredicate hit_shield;
/// @at{38} @sz{4}
HSD_GObjInteraction evt_unk;
};
struct itSword_UnkBytes {
/* +0 */ u8 x0;
/* +1 */ u8 x1;
/* +2 */ u8 x2;
/* +3 */ u8 x3;
/* +4 */ u8 x4;
/* +5 */ u8 x5;
/* +6 */ u8 x6;
/* +7 */ u8 x7;
/* +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_802C8C74(Item_GObj*);
/* 2C8CDC */ M2C_UNK it_802C8CDC();
/* 2C8F20 */ M2C_UNK it_802C8F20();
/* 2C8F24 */ M2C_UNK it_802C8F24();
/* 2C8F2C */ void it_802C8F2C(Item_GObj*, Item_GObj*);
/* 3F7A28 */ extern ItemStateTable it_803F7A28[];
static inline void checkFighter2244(HSD_GObj* gobj)
{
Fighter* fp;
if (gobj == ((void*) 0)) {
return;
}
fp = gobj->user_data;
if (fp != ((void*) 0) && fp->fv.lk.x18 != ((void*) 0)) {
it_802C8C34(fp->fv.lk.x18);
fp->fv.lk.x18 = ((void*) 0);
}
if (gobj == ((void*) 0)) {
gobj == ((void*) 0);
}
}
#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[];
#define GALE01_0E4040
/* 0E4354 */ void ftCa_SpecialHi_Anim(HSD_GObj* gobj);
/* 0E4838 */ void ftCa_SpecialLwEndAir_Coll(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);
/* 0E4A78 */ void ftCa_SpecialHi_Enter(HSD_GObj* gobj);
/* 0E4CF4 */ void ftCa_SpecialAirHi_Enter(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
/// Side Special - Raptor Boost / Gerudo Dragon (SpecialS)
#define GALE01_0E3278
/* 0E3278 */ void ftCa_SpecialS_RemoveGFX(HSD_GObj* gobj);
/* 0E32B0 */ void ftCa_SpecialS_Enter(HSD_GObj* gobj);
/* 0E33E0 */ void ftCa_SpecialAirS_Enter(HSD_GObj* gobj);
/* 0E350C */ void ftCa_SpecialS_OnDetect(HSD_GObj* gobj);
/* 0E384C */ void ftCa_SpecialSStart_Anim(HSD_GObj* gobj);
/* 0E3888 */ void ftCa_SpecialS_Anim(HSD_GObj* gobj);
/* 0E3964 */ void ftCa_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 0E39F0 */ void ftCa_SpecialAirS_Anim(HSD_GObj* gobj);
/* 0E3B0C */ void ftCa_SpecialSStart_IASA(HSD_GObj* gobj);
/* 0E3B10 */ void ftCa_SpecialS_IASA(HSD_GObj* gobj);
/* 0E3B14 */ void ftCa_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 0E3B18 */ void ftCa_SpecialAirS_IASA(HSD_GObj* gobj);
/* 0E3B1C */ void ftCa_SpecialSStart_Phys(HSD_GObj* gobj);
/* 0E3B3C */ void ftCa_SpecialS_Phys(HSD_GObj* gobj);
/* 0E3B5C */ void ftCa_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 0E3BD0 */ void ftCa_SpecialAirS_Phys(HSD_GObj* gobj);
/* 0E3C38 */ void ftCa_SpecialSStart_Coll(HSD_GObj* gobj);
/* 0E3D44 */ void ftCa_SpecialS_Coll(HSD_GObj* gobj);
/* 0E3DE4 */ void ftCa_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 0E3E40 */ void ftCa_SpecialAirS_Coll(HSD_GObj* gobj);
#define GALE01_09C4F8
/* 09C4F8 */ bool ftCo_8009C4F8(ftCo_GObj* gobj);
#define GALE01_09F480
/* 09F4A4 */ M2C_UNK ftCo_8009F4A4();
/* 09F578 */ void ftCo_8009F578(ftCo_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(ftCo_GObj*, int, Fighter_Part, int, int, Vec3*,
Vec3*, float);
/* 0A0098 */ void ftCo_800A0098(ftCo_Fighter* fp);
#define GALE01_0A0148
#define MELEE_MP_FORWARD_H
typedef struct mp_UnkStruct0 mp_UnkStruct0;
typedef struct mp_UnkStruct1 mp_UnkStruct1;
typedef struct mp_UnkStruct2 mp_UnkStruct2;
typedef struct mp_UnkStruct3 mp_UnkStruct3;
typedef struct mp_UnkStruct4 mp_UnkStruct4;
typedef struct mp_UnkStruct5 mp_UnkStruct5;
typedef struct mp_UnkStruct6 mp_UnkStruct6;
typedef struct mp_UnkStruct7 mp_UnkStruct7;
typedef struct mpisland mpisland;
typedef struct mpLib_804D64B8_t mpLib_804D64B8_t;
typedef struct mpLib_804D64C0_t mpLib_804D64C0_t;
typedef enum mpLib_GroundEnum {
mpLib_GroundEnum_Unk0,
mpLib_GroundEnum_Unk1,
mpLib_GroundEnum_Unk2,
} mpLib_GroundEnum;
typedef void (*mpLib_Callback)(s32, s32, CollData*, s32, s32, f32);
typedef bool (*mpColl_Callback)(CollData*, u32);
typedef void (*mpLib_GroundCallback)(Ground* gp, M2C_UNK, M2C_UNK, M2C_UNK,
mpLib_GroundEnum arg4);
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(ftCo_Fighter* fp);
/* 09D694 */ void ftCo_800A0798(ftCo_Fighter* fp);
/* 09DB88 */ void ftCo_800A0C8C(ftCo_Fighter* fp);
/* 09DCA0 */ void ftCo_800A0DA4(Fighter* fp);
/* 09DEAC */ bool ftCo_800A0FB0(Vec3* arg0, int* arg1, int arg2, int arg3,
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_800A17E4(Fighter* fp);
/* 09E770 */ float ftCo_800A1874(Fighter* fp);
/* 09E800 */ float ftCo_800A1904(Fighter* fp);
/* 09E844 */ float ftCo_800A1948(Fighter* fp);
/* 09E888 */ HSD_Pad ftCo_800A198C(Fighter* fp);
/* 09E890 */ float ftCo_800A1994(Fighter* fp);
/* 09E920 */ float ftCo_800A1A24(Fighter* fp);
/* 09F06C */ bool ftCo_800A2170(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 09F7CC */ bool ftCo_800A28D0(ftCo_Fighter* fp, float arg1);
/* 09F894 */ bool ftCo_800A2998(ftCo_Fighter* fp, float arg1);
/* 09F96C */ float ftCo_800A2A70(ftCo_Fighter* fp, bool);
/* 09FAD0 */ bool ftCo_800A2BD4(ftCo_Fighter* fp);
/* 09FB04 */ bool ftCo_800A2C08(ftCo_Fighter* fp);
/* 0A0030 */ bool ftCo_800A3134(ftCo_Fighter* fp);
/* 0A007C */ bool ftCo_IsGrabbing(ftCo_Fighter* fp);
/* 0A00FC */ bool ftCo_800A3200(ftCo_Fighter* fp);
/* 0A0740 */ bool ftCo_IsAlly(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A193C */ ftCo_Fighter* ftCo_800A4A40(ftCo_Fighter* fp);
/* 0A1AB4 */ float ftCo_800A1AB4(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A1BA8 */ bool ftCo_800A1BA8(ftCo_Fighter* fp);
/* 0A1C44 */ bool ftCo_800A1C44(ftCo_Fighter* fp);
/* 0A1CA8 */ bool ftCo_800A1CA8(ftCo_Fighter* fp);
/* 0A1D88 */ M2C_UNK ftCo_800A4E8C();
/* 0A2040 */ bool ftCo_800A2040(Fighter* fp);
/* 0A2804 */ bool ftCo_800A5908(Fighter* fp);
/* 0A287C */ bool ftCo_800A5980(Fighter* fp);
/* 0A28BC */ bool ftCo_800A59C0(M2C_UNK);
/* 0A28E0 */ enum_t ftCo_800A59E4(ftCo_Fighter* fp);
/* 0A2924 */ bool ftCo_800A5A28(ftCo_Fighter* fp);
/* 0A41F4 */ bool ftCo_800B395C(ftCo_GObj* gobj, int);
/* 0A5A5C */ bool ftCo_800A5A5C(ftCo_Fighter*);
/* 0A5A90 */ bool ftCo_800A5A90(ftCo_Fighter* fp);
/* 0B07FC */ void ftCo_800B3900(Fighter_GObj* gobj);
/* 0B0858 */ M2C_UNK ftCo_800B3958();
/// @todo Static functions belong in #ftCo_0A01.c
/* 09D044 */ static M2C_UNK ftCo_800A0148();
/* 09D06C */ static M2C_UNK ftCo_800AC7D4();
/* 09D280 */ static void ftCo_800A0384(ftCo_Fighter* fp);
/* 09D3DC */ static M2C_UNK ftCo_800ACB44();
/* 09D404 */ static void ftCo_800A0508(ftCo_Fighter* fp);
/* 09D5F4 */ static M2C_UNK ftCo_800ACD5C();
/* 09D7EC */ static void ftCo_800A08F0(ftCo_Fighter* fp);
/* 09D9F0 */ static void ftCo_800A0AF4(ftCo_Fighter* fp);
/* 09DBAC */ static void ftCo_800A0CB0(ftCo_Fighter* fp);
/* 09DCC4 */ static void ftCo_800AD42C(ftCo_Fighter* fp);
/* 09DDE4 */ static M2C_UNK ftCo_800AD54C();
/* 09DDFC */ static bool ftCo_800A0F00(ftCo_GObj* gobj);
/* 09E094 */ static M2C_UNK ftCo_800AD7FC();
/* 09E4C0 */ static M2C_UNK ftCo_800ADC28();
/* 09E6E0 */ static void ftCo_800ADE48(ftCo_Fighter* fp);
/* 09EBC0 */ static void ftCo_800A1CC4(ftCo_Fighter* fp, StageBlastZone*);
/* 09EE38 */ static void ftCo_800A1F3C(ftCo_Fighter* fp, float arg1,
float arg2, float arg3);
/* 09EE94 */ static bool ftCo_800A1F98(int x, float y);
/* 09EF9C */ static void ftCo_800A20A0(ftCo_Fighter* fp);
/* 09F044 */ static M2C_UNK ftCo_800AE7AC();
/* 09F0F8 */ static bool ftCo_800A21FC(ftCo_Fighter* fp);
/* 09F198 */ static M2C_UNK ftCo_800A229C();
/* 09F324 */ static M2C_UNK ftCo_800AEA8C();
/* 09F588 */ static void ftCo_800AECF0(ftCo_Fighter* fp);
/* 09F614 */ static bool ftCo_800A2718(mp_UnkStruct0*);
/* 09F850 */ static M2C_UNK ftCo_800AEFB8();
/* 09FB28 */ static M2C_UNK ftCo_800AF290();
/* 09FB7C */ static M2C_UNK ftCo_800A2C80();
/* 0A0024 */ static M2C_UNK ftCo_800AF78C();
/* 0A0130 */ static M2C_UNK ftCo_800A3234();
/* 0A0394 */ static bool ftCo_800A3498(ftCo_Fighter* fp);
/* 0A0450 */ static bool ftCo_800A3554(ftCo_Fighter* fp, float);
/* 0A04D8 */ static void ftCo_800AFC40(ftCo_Fighter* fp);
/* 0A060C */ static bool ftCo_800A3710(ftCo_Fighter* fp);
/* 0A06D4 */ static M2C_UNK ftCo_800AFE3C();
/* 0A0804 */ static bool ftCo_800A3908(ftCo_Fighter* fp, bool);
/* 0A0990 */ static M2C_UNK ftCo_800B00F8();
/* 0A0D74 */ static M2C_UNK ftCo_800B04DC();
/* 0A0F34 */ static bool ftCo_800A4038(ftCo_Fighter* fp, bool);
/* 0A0FF8 */ static void ftCo_800B0760(ftCo_Fighter* fp);
/* 0A11B0 */ static void ftCo_800B0918(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A138C */ static void ftCo_800B0AF4(ftCo_Fighter* fp);
/* 0A1540 */ static bool ftCo_800B0CA8(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A1664 */ static M2C_UNK ftCo_800A4768();
/* 0A1730 */ static bool ftCo_800B0E98(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A18B0 */ static void ftCo_800A49B4(ftCo_Fighter* fp);
/* 0A18B4 */ static M2C_UNK ftCo_800B101C();
/* 0A1AE8 */ static ftCo_Fighter* ftCo_800A4BEC(ftCo_Fighter* fp);
/* 0A1B04 */ static M2C_UNK ftCo_800B126C();
/* 0A1B38 */ static bool ftCo_800A1B38(enum_t);
/* 0A1D10 */ static M2C_UNK ftCo_800B1478();
/* 0A1FD0 */ static ftCo_Fighter* ftCo_800A50D4(ftCo_Fighter* fp);
/* 0A2068 */ static M2C_UNK ftCo_800B17D0();
/* 0A2190 */ static ftCo_Fighter* ftCo_800A5294(ftCo_Fighter* fp,
int player_id);
/* 0A22D8 */ static M2C_UNK ftCo_800A53DC();
/* 0A2350 */ static M2C_UNK ftCo_800B1AB8();
// /* 0A2638 */ static void ftCo_800B1DA0(ftCo_Fighter* fp);
/* 0A2788 */ static M2C_UNK ftCo_800B1EF0();
/* 0A2798 */ static ftCo_Fighter* ftCo_800A589C(ftCo_Fighter* fp);
/* 0A2840 */ static bool ftCo_800A5944(Item* ip);
/* 0A2A60 */ static M2C_UNK ftCo_800B21C8();
/* 0A2D50 */ static M2C_UNK ftCo_800B24B8();
/* 0A3028 */ static void ftCo_800B2790(ftCo_Fighter* fp);
/* 0A3C48 */ static void ftCo_800B33B0(ftCo_Fighter* fp);
/* 0A5ACC */ static M2C_UNK ftCo_800A5ACC();
/* 0A5CE0 */ static M2C_UNK ftCo_800A5CE0(ftCo_Fighter* fp);
/* 0A5F4C */ static struct Fighter_x1A88_t* ftCo_800A5F4C(ftCo_Fighter* fp,
int);
/* 0A61D8 */ static M2C_UNK ftCo_800A61D8();
/* 0A648C */ static int ftCo_800A648C(ftCo_Fighter* fp);
/* 0A6700 */ static bool ftCo_800A6700(ftCo_Fighter* fp, Vec3*, Vec3*);
/* 0A6A98 */ static M2C_UNK ftCo_800A6A98();
/* 0A6D2C */ static M2C_UNK ftCo_800A6D2C();
/* 0A6FC4 */ static M2C_UNK ftCo_800A6FC4();
/* 0A75DC */ static void ftCo_800A75DC(ftCo_Fighter* fp0, ftCo_Fighter* fp1);
/* 0A7AAC */ static void ftCo_800A7AAC(ftCo_Fighter* fp);
/* 0A80E4 */ static void ftCo_800A80E4(ftCo_Fighter* fp);
/* 0A8210 */ static M2C_UNK ftCo_800A8210();
/* 0A866C */ static M2C_UNK ftCo_800A866C();
/* 0A8940 */ static void ftCo_800A8940(ftCo_Fighter* fp);
/* 0A8DE4 */ static void ftCo_800A8DE4(ftCo_Fighter* fp);
/* 0A8EB0 */ static M2C_UNK ftCo_800A8EB0();
/* 0A92CC */ static void ftCo_800A92CC(ftCo_Fighter* fp);
/* 0A949C */ static void ftCo_800A949C(ftCo_Fighter* fp);
/* 0A963C */ static void ftCo_800A963C(ftCo_Fighter* fp);
/* 0A96B8 */ static M2C_UNK ftCo_800A96B8();
/* 0A9904 */ static M2C_UNK ftCo_800A9904();
/* 0A9CB4 */ static void ftCo_800A9CB4(ftCo_Fighter* fp);
/* 0AA320 */ static void ftCo_800AA320(ftCo_Fighter* fp, int*, int*);
/* 0AA42C */ static M2C_UNK ftCo_800AA42C();
/* 0AA844 */ static M2C_UNK ftCo_800AA844();
/* 0AABC8 */ static void ftCo_800AABC8(ftCo_Fighter* fp);
/* 0AACD0 */ static M2C_UNK ftCo_800AACD0();
/* 0AAF48 */ static M2C_UNK ftCo_800AAF48();
/* 0AB224 */ static void ftCo_800AB224(ftCo_Fighter* fp);
/* 0ABA34 */ static void ftCo_800ABA34(ftCo_Fighter* fp);
/* 0ABBA8 */ static M2C_UNK ftCo_800ABBA8();
/* 0AC30C */ static void ftCo_800AC30C(ftCo_Fighter* fp);
/* 0AC434 */ static void ftCo_800AC434(ftCo_Fighter* fp);
/* 0AC5A0 */ static M2C_UNK ftCo_800AC5A0();
/* 0B2AFC */ static void ftCo_800B2AFC(ftCo_Fighter* fp);
#define GALE01_0B3E04
/* 0B3E04 */ void ftCo_800B3E04(ftCo_Fighter* fp);
/* 0B463C */ void ftCo_800B463C(ftCo_Fighter* fp, int);
/* 0B46B8 */ void ftCo_800B46B8(ftCo_Fighter* fp, int, int);
/// @todo Static declarations belong in #ftCo_0B3E.c
/* 0B462C */ static M2C_UNK ftCo_800B462C(ftCo_Fighter* fp);
/* 0B4778 */ static void ftCo_800B4778(ftCo_Fighter* fp, int, s8, s8);
/* 0B4880 */ static void ftCo_800B4880(ftCo_Fighter* fp, int);
/* 0B49F4 */ static M2C_UNK ftCo_800B49F4();
/* 0B4A78 */ static void ftCo_800B4A78(ftCo_Fighter* fp);
/* 0B4AB0 */ static M2C_UNK ftCo_800B4AB0();
/* 0B52AC */ static M2C_UNK ftCo_800B52AC();
/* 0B5AB0 */ static M2C_UNK ftCo_800B5AB0();
/* 0B6208 */ static M2C_UNK ftCo_800B6208();
/* 0B630C */ static M2C_UNK ftCo_800B630C();
/* 0B63D8 */ static M2C_UNK ftCo_800B63D8();
/* 0B658C */ static M2C_UNK ftCo_800B658C();
/* 0B683C */ static M2C_UNK ftCo_800B683C();
/* 0B7180 */ static M2C_UNK ftCo_800B7180();
/* 0B732C */ static M2C_UNK ftCo_800B732C();
/* 0B7638 */ static M2C_UNK ftCo_800B7638();
/* 0B77E8 */ static M2C_UNK ftCo_800B77E8();
/* 0B885C */ static M2C_UNK ftCo_800B885C();
/* 0B89CC */ static M2C_UNK ftCo_800B89CC();
/* 0B8A9C */ static M2C_UNK ftCo_800B8A9C();
/* 0B9020 */ static M2C_UNK ftCo_800B9020();
/* 0B920C */ static M2C_UNK ftCo_800B920C();
/* 0B92D4 */ static void ftCo_800B92D4(ftCo_Fighter* fp);
/* 0B9340 */ static M2C_UNK ftCo_800B9340();
/* 0B9504 */ static M2C_UNK ftCo_800B9504();
/* 0B9704 */ static M2C_UNK ftCo_800B9704();
/* 0B9790 */ static M2C_UNK ftCo_800B9790();
/* 0B98C8 */ static M2C_UNK ftCo_800B98C8();
/* 0B9A04 */ static M2C_UNK ftCo_800B9A04();
/* 0B9CBC */ static M2C_UNK ftCo_800B9CBC();
/* 0B9F6C */ static bool ftCo_800B9F6C(ftCo_Fighter* fp);
/* 0B9F90 */ static M2C_UNK ftCo_800B9F90();
/* 0BA080 */ static M2C_UNK ftCo_800BA080();
/* 0BA160 */ static M2C_UNK ftCo_800BA160();
/* 0BA224 */ static M2C_UNK ftCo_800BA224();
/* 0BA2E8 */ static M2C_UNK ftCo_800BA2E8();
/* 0BA674 */ static M2C_UNK ftCo_800BA674();
/* 0BA9A0 */ static M2C_UNK ftCo_800BA9A0();
/* 0BB104 */ static M2C_UNK ftCo_800BB104();
/* 0BB220 */ static M2C_UNK ftCo_800BB220();
/* 0BB768 */ static M2C_UNK ftCo_800BB768();
/* 0BB9B4 */ static M2C_UNK ftCo_800BB9B4();
#define GALE01_0C3598
/* 0C3598 */ void ftCo_800C3598(ftCo_GObj* gobj);
/* 0C36DC */ void ftCo_800C36DC(ftCo_GObj* gobj);
/* 0C37A0 */ void ftCo_800C37A0(ftCo_GObj* gobj);
#define GALE01_0C60C8
/* 0C60C8 */ bool ftCo_800C60C8(ftCo_GObj* gobj);
/* 0C6110 */ void ftCo_800C6110(ftCo_GObj* gobj);
#define GALE01_0C3A14
/* 0C3A14 */ bool ftCo_800C3A14(ftCo_GObj* gobj);
/* 0C3B10 */ bool ftCo_800C3B10(ftCo_GObj* gobj);
/* 0C3BE8 */ void ftCo_800C3BE8(ftCo_GObj* gobj);
/* 0C3CC0 */ void ftCo_800C3CC0(ftCo_GObj* gobj);
/* 0C3D6C */ void ftCo_AirCatch_Anim(ftCo_GObj* gobj);
/* 0C4380 */ void ftCo_AirCatchHit_Anim(ftCo_GObj* gobj);
/* 0C4384 */ void ftCo_AirCatch_IASA(ftCo_GObj* gobj);
/* 0C4388 */ void ftCo_AirCatchHit_IASA(ftCo_GObj* gobj);
/* 0C438C */ void ftCo_AirCatch_Phys(ftCo_GObj* gobj);
/* 0C4438 */ void ftCo_AirCatchHit_Phys(ftCo_GObj* gobj);
/* 0C447C */ void ftCo_AirCatch_Coll(ftCo_GObj* gobj);
#define GALE01_08A9F8
/* 08A9F8 */ bool ftCo_Attack1_CheckInput(ftCo_GObj* gobj);
/* 08AC9C */ void ftCo_Attack11_Anim(ftCo_GObj* gobj);
/* 08ACD8 */ void ftCo_Attack11_IASA(ftCo_GObj* gobj);
/* 08ADF0 */ void ftCo_Attack11_Phys(ftCo_GObj* gobj);
/* 08AE10 */ void ftCo_Attack11_Coll(ftCo_GObj* gobj);
/* 08B040 */ void ftCo_Attack12_Anim(ftCo_GObj* gobj);
/* 08B07C */ void ftCo_Attack12_IASA(ftCo_GObj* gobj);
/* 08B354 */ void ftCo_Attack13_Anim(ftCo_GObj* gobj);
/* 08B390 */ void ftCo_Attack13_IASA(ftCo_GObj* gobj);
#define GALE01_08CD68
/* 08CD68 */ bool ftCo_AttackAir_CheckItemThrowInput(ftCo_GObj* gobj);
/* 08CE68 */ FtMotionId ftCo_AttackAir_GetMsidFromCStick(ftCo_Fighter* fp);
/* 08CF70 */ void ftCo_AttackAir_EnterFromCStick(ftCo_GObj* gobj);
/* 08CFAC */ void ftCo_AttackAir_EnterFromMsid(ftCo_GObj* gobj, FtMotionId);
/* 08D010 */ void ftCo_AttackAir_Anim(ftCo_GObj* gobj);
/* 08D08C */ void ftCo_AttackAirN_IASA(ftCo_GObj* gobj);
/* 08D194 */ void ftCo_AttackAirF_IASA(ftCo_GObj* gobj);
/* 08D29C */ void ftCo_AttackAirB_IASA(ftCo_GObj* gobj);
/* 08D3A4 */ void ftCo_AttackAirHi_IASA(ftCo_GObj* gobj);
/* 08D4AC */ void ftCo_AttackAirLw_IASA(ftCo_GObj* gobj);
/* 08D5B4 */ void ftCo_AttackAir_Phys(ftCo_GObj* gobj);
/* 08D5D4 */ void ftCo_AttackAir_Coll(ftCo_GObj* gobj);
#define GALE01_08B3E4
/* 08B3E4 */ bool ftCo_AttackDash_CheckInput(ftCo_GObj* gobj);
/* 08B548 */ void ftCo_AttackDash_Anim(ftCo_GObj* gobj);
/* 08B584 */ void ftCo_AttackDash_SetMv0(ftCo_GObj* gobj);
/* 08B5AC */ void ftCo_AttackDash_IASA(ftCo_GObj* gobj);
/* 08B600 */ void ftCo_AttackDash_Phys(ftCo_GObj* gobj);
/* 08B638 */ void ftCo_AttackDash_Coll(ftCo_GObj* gobj);
#define GALE01_08B980
/* 08B980 */ bool ftCo_AttackHi3_CheckInput(ftCo_GObj* gobj);
/* 08BA98 */ void ftCo_AttackHi3_Anim(ftCo_GObj* gobj);
/* 08BAD4 */ void ftCo_AttackHi3_IASA(ftCo_GObj* gobj);
/* 08BB04 */ void ftCo_AttackHi3_Phys(ftCo_GObj* gobj);
/* 08BB24 */ void ftCo_AttackHi3_Coll(ftCo_GObj* gobj);
#define GALE01_08C830
/* 08C830 */ bool ftCo_AttackHi4_CheckInput(ftCo_GObj* gobj);
/* 08C948 */ bool ftCo_AttackHi4_CheckInputNoD0(ftCo_GObj* gobj);
/* 08CA98 */ void ftCo_AttackHi4_Anim(ftCo_GObj* gobj);
/* 08CAD4 */ void ftCo_AttackHi4_IASA(ftCo_GObj* gobj);
/* 08CB04 */ void ftCo_AttackHi4_Phys(ftCo_GObj* gobj);
/* 08CB24 */ void ftCo_AttackHi4_Coll(ftCo_GObj* gobj);
#define GALE01_08BB44
/* 08BB44 */ bool ftCo_AttackLw3_CheckInput(ftCo_GObj* gobj);
/* 08BCFC */ void ftCo_AttackLw3_Anim(ftCo_GObj* gobj);
/* 08BD80 */ void ftCo_AttackLw3_IASA(ftCo_GObj* gobj);
/* 08BF84 */ void ftCo_AttackLw3_Phys(ftCo_GObj* gobj);
/* 08BFA4 */ void ftCo_AttackLw3_Coll(ftCo_GObj* gobj);
#define GALE01_08CB44
/* 08CB44 */ bool ftCo_AttackLw4_CheckInput(ftCo_GObj* gobj);
/* 08CCBC */ void ftCo_AttackLw4_Anim(ftCo_GObj* gobj);
/* 08CCF8 */ void ftCo_AttackLw4_IASA(ftCo_GObj* gobj);
/* 08CD28 */ void ftCo_AttackLw4_Phys(ftCo_GObj* gobj);
/* 08CD48 */ void ftCo_AttackLw4_Coll(ftCo_GObj* gobj);
#define GALE01_08B8D4
/* 08B658 */ bool ftCo_AttackS3_CheckInput(ftCo_GObj* gobj);
/* 08B8D4 */ void ftCo_AttackS3_Anim(ftCo_GObj* gobj);
/* 08B910 */ void ftCo_AttackS3_IASA(ftCo_GObj* gobj);
/* 08B940 */ void ftCo_AttackS3_Phys(ftCo_GObj* gobj);
/* 08B960 */ void ftCo_AttackS3_Coll(ftCo_GObj* gobj);
#define GALE01_08BFC4
/* 08BFC4 */ bool ftCo_AttackS4_CheckInput(ftCo_GObj* gobj);
/* 08C114 */ bool ftCo_AttackS4_8008C114(ftCo_GObj* gobj);
/* 08C520 */ void ftCo_AttackS4_Anim(ftCo_GObj* gobj);
/* 08C55C */ void ftCo_AttackS4_IASA(ftCo_GObj* gobj);
/* 08C7F0 */ void ftCo_AttackS4_Phys(ftCo_GObj* gobj);
/* 08C810 */ void ftCo_AttackS4_Coll(ftCo_GObj* gobj);
#define GALE01_09EB18
/* 09EB18 */ void ftCo_8009EB18(ftCo_GObj* gobj);
/* 09EC08 */ void ftCo_BarrelWait_Anim(ftCo_GObj* gobj);
/* 09EC0C */ void ftCo_BarrelWait_IASA(ftCo_GObj* gobj);
/* 09EC3C */ void ftCo_BarrelWait_Phys(ftCo_GObj* gobj);
/* 09EC40 */ void ftCo_BarrelWait_Coll(ftCo_GObj* gobj);
#define GALE01_0C0874
/* 0C0874 */ void ftCo_800C0874(ftCo_GObj* gobj, M2C_UNK arg1,
ftCommon_BuryType arg2);
/* 0C08A0 */ void ftCo_800C08A0(ftCo_GObj* gobj, ftCo_GObj* arg1,
DynamicsDesc* arg2, ftCommon_BuryType arg3);
/* 0C09B4 */ void ftCo_800C09B4(ftCo_GObj* gobj);
/* 0C0A28 */ bool ftCo_800C0A28(ftCo_GObj* gobj, M2C_UNK arg1,
ftCommon_BuryType arg2);
/* 0C0A98 */ void ftCo_800C0A98(ftCo_GObj* gobj);
/* 0C0B20 */ void ftCo_800C0B20(ftCo_GObj* gobj);
/* 0C0C88 */ bool ftCo_800C0C88(ftCommon_BuryType);
/* 0C0CB8 */ bool ftCo_800C0CB8(ftCo_GObj* gobj);
/* 0C0D0C */ void ftCo_800C0D0C(ftCo_GObj* gobj);
/* 0C0F34 */ void ftCo_Bury_Anim(ftCo_GObj* gobj);
/* 0C0FC8 */ void ftCo_Bury_IASA(ftCo_GObj* gobj);
/* 0C0FCC */ void ftCo_800C0FCC(HSD_GObj* arg0, ftCo_GObj* arg1);
/* 0C1194 */ void ftCo_Bury_Phys(ftCo_GObj* gobj);
/* 0C11E4 */ void ftCo_Bury_Coll(ftCo_GObj* gobj);
/* 0C124C */ void ftCo_800C124C(ftCo_GObj* gobj);
/* 0C12D8 */ void ftCo_BuryWait_Anim(ftCo_GObj* gobj);
/* 0C134C */ void ftCo_BuryWait_IASA(ftCo_GObj* gobj);
/* 0C1350 */ void ftCo_BuryWait_Phys(ftCo_GObj* gobj);
/* 0C1354 */ void ftCo_BuryWait_Coll(ftCo_GObj* gobj);
/* 0C13BC */ void ftCo_800C13BC(ftCo_GObj* gobj);
/* 0C1460 */ void ftCo_BuryJump_Anim(ftCo_GObj* gobj);
/* 0C14B0 */ void ftCo_BuryJump_IASA(ftCo_GObj* gobj);
/* 0C1574 */ void ftCo_BuryJump_Phys(ftCo_GObj* gobj);
/* 0C15B4 */ void ftCo_BuryJump_Coll(ftCo_GObj* gobj);
#define GALE01_0C12D8
#define GALE01_09CA0C
/* 09CA0C */ void ftCo_8009CA0C(ftCo_GObj* gobj, ftCo_GObj* vic_gobj);
/* 09CB04 */ void ftCo_CaptureCaptain_Anim(ftCo_GObj* gobj);
/* 09CB08 */ void ftCo_CaptureCaptain_IASA(ftCo_GObj* gobj);
/* 09CB0C */ void ftCo_CaptureCaptain_Phys(ftCo_GObj* gobj);
/* 09CB10 */ void ftCo_CaptureCaptain_Coll(ftCo_GObj* gobj);
#define GALE01_0BC9C8
/* 0BC9C8 */ void ftCo_800BC9C8(ftCo_GObj* gobj);
/* 0BCA54 */ void ftCo_CaptureDamageKoopa_Anim(ftCo_GObj* gobj);
/* 0BCAE8 */ void ftCo_CaptureDamageKoopa_IASA(ftCo_GObj* gobj);
/* 0BCAEC */ void ftCo_CaptureDamageKoopa_Phys(ftCo_GObj* gobj);
/* 0BCAF0 */ void ftCo_CaptureDamageKoopa_Coll(ftCo_GObj* gobj);
/* 0BCAF4 */ void ftCo_800BCAF4(ftCo_GObj* gobj);
/* 0BCB80 */ void ftCo_CaptureDamageKoopaAir_Anim(ftCo_GObj* gobj);
/* 0BCC14 */ void ftCo_CaptureDamageKoopaAir_IASA(ftCo_GObj* gobj);
/* 0BCC18 */ void ftCo_CaptureDamageKoopaAir_Phys(ftCo_GObj* gobj);
/* 0BCC1C */ void ftCo_CaptureDamageKoopaAir_Coll(ftCo_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(ftCo_GObj* gobj);
/* 0986D0 */ void ftCo_800BC4A8(ftCo_GObj* gobj);
/* 098A08 */ void ftCo_800BC7E0(ftCo_GObj* gobj, ftCo_GObj* arg1);
/* 098AEC */ void ftCo_CaptureKoopa_Anim(ftCo_GObj* gobj);
/* 098AF0 */ void ftCo_CaptureKoopa_IASA(ftCo_GObj* gobj);
/* 098AF4 */ void ftCo_CaptureKoopa_Phys(ftCo_GObj* gobj);
/* 098AF8 */ void ftCo_CaptureKoopa_Coll(ftCo_GObj* gobj);
/* 098AFC */ void ftCo_800BC8D4(ftCo_GObj* gobj, ftCo_GObj* arg1);
/* 098BE0 */ void ftCo_CaptureKoopaAir_Anim(ftCo_GObj* gobj);
/* 098BE4 */ void ftCo_CaptureKoopaAir_IASA(ftCo_GObj* gobj);
/* 098BE8 */ void ftCo_CaptureKoopaAir_Phys(ftCo_GObj* gobj);
/* 098BEC */ void ftCo_CaptureKoopaAir_Coll(ftCo_GObj* gobj);
/* 0BC438 */ void ftCo_800BC438(ftCo_GObj* gobj);
#define GALE01_0BCF18
/* 0BCF18 */ void ftCo_800BCF18(ftCo_GObj*, ftCo_GObj* gobj);
/* 0BCF18 */ void ftCo_800BCF18(ftCo_GObj* gobj, ftCo_GObj* victim_gobj);
/* 0BD000 */ void ftCo_800BD000(ftCo_GObj* gobj, ftCo_GObj* victim_gobj);
#define GALE01_0BD620
/* 0BD620 */ void ftCo_800BD620(ftCo_GObj* gobj);
/* 0BD6E8 */ void ftCo_CaptureWaitKirby_Anim(ftCo_GObj* gobj);
/* 0BD6EC */ void ftCo_800BD6EC(Fighter_GObj* gobj);
/* 0BD7BC */ void ftCo_CaptureWaitKirby_IASA(ftCo_GObj* gobj);
/* 0BD9D8 */ void ftCo_CaptureWaitKirby_Phys(ftCo_GObj* gobj);
/* 0BD9DC */ void ftCo_CaptureWaitKirby_Coll(ftCo_GObj* gobj);
#define GALE01_0BCC20
/* 099150 */ void ftCo_CaptureWaitKoopa_Anim(ftCo_GObj* gobj);
/* 0991C8 */ void ftCo_CaptureWaitKoopa_IASA(ftCo_GObj* gobj);
/* 0991CC */ void ftCo_CaptureWaitKoopa_Phys(ftCo_GObj* gobj);
/* 0991D0 */ void ftCo_CaptureWaitKoopa_Coll(ftCo_GObj* gobj);
/* 099230 */ void ftCo_CaptureWaitKoopaAir_Anim(ftCo_GObj* gobj);
/* 0992A8 */ void ftCo_CaptureWaitKoopaAir_IASA(ftCo_GObj* gobj);
/* 0992AC */ void ftCo_CaptureWaitKoopaAir_Phys(ftCo_GObj* gobj);
/* 0992B0 */ void ftCo_CaptureWaitKoopaAir_Coll(ftCo_GObj* gobj);
/* 0BCC20 */ void ftCo_800BCC20(ftCo_GObj* gobj);
/* 0BCD00 */ void ftCo_800BCD00(ftCo_GObj* gobj);
#define GALE01_09D6E8
/* 09D6E8 */ void ftCo_800BBB8C(ftCo_GObj* gobj, ftCo_GObj* attacker_gobj);
/* 09D7D4 */ void ftCo_CaptureYoshi_Anim(ftCo_GObj* gobj);
/* 09D7D8 */ void ftCo_CaptureYoshi_IASA(ftCo_GObj* gobj);
/* 09D7DC */ void ftCo_CaptureYoshi_Phys(ftCo_GObj* gobj);
/* 09D7E0 */ void ftCo_CaptureYoshi_Coll(ftCo_GObj* gobj);
#define GALE01_09BC58
/* 09BC58 */ void ftCo_8009BC58(ftCo_GObj* gobj);
/* 09BCDC */ void ftCo_CargoFall_Anim(ftCo_GObj* gobj);
/* 09BCE0 */ void ftCo_CargoFall_IASA(ftCo_GObj* gobj);
/* 09BD04 */ void ftCo_CargoFall_Phys(ftCo_GObj* gobj);
/* 09BD24 */ void ftCo_CargoFall_Coll(ftCo_GObj* gobj);
#define GALE01_09BB1C
/* 09BB1C */ bool ftCo_8009BB1C(ftCo_GObj* gobj);
/* 09BB64 */ void ftCo_8009BB64(ftCo_GObj* gobj);
/* 09BBF0 */ void ftCo_CargoJump_Anim(ftCo_GObj* gobj);
/* 09BBF4 */ void ftCo_CargoJump_IASA(ftCo_GObj* gobj);
/* 09BC18 */ void ftCo_CargoJump_Phys(ftCo_GObj* gobj);
/* 09BC38 */ void ftCo_CargoJump_Coll(ftCo_GObj* gobj);
#define GALE01_09B9C8
/* 09B9C8 */ void ftCo_8009B9C8(ftCo_GObj* gobj, int arg1);
/* 09BA50 */ void ftCo_CargoKneebend_Anim(ftCo_GObj* gobj);
/* 09BAA0 */ void ftCo_CargoKneebend_IASA(ftCo_GObj* gobj);
/* 09BADC */ void ftCo_CargoKneebend_Phys(ftCo_GObj* gobj);
/* 09BAFC */ void ftCo_CargoKneebend_Coll(ftCo_GObj* gobj);
#define GALE01_09BD4C
/* 09BD4C */ void ftCo_8009BD4C(ftCo_GObj* gobj);
/* 09BDC4 */ void ftCo_CargoLanding_Anim(ftCo_GObj* gobj);
/* 09BE14 */ void ftCo_CargoLanding_Phys(ftCo_GObj* gobj);
/* 09BE34 */ void ftCo_CargoLanding_Coll(ftCo_GObj* gobj);
#define GALE01_09BE54
/* 09BE54 */ void ftCo_CargoWait2_Anim(ftCo_GObj* gobj);
/* 09BEB8 */ void ftCo_CargoWait2_Phys(ftCo_GObj* gobj);
/* 09BED8 */ void ftCo_CargoWait2_Coll(ftCo_GObj* gobj);
/* 09BF3C */ bool ftCo_8009BF3C(ftCo_GObj* gobj);
/* 09C0EC */ void ftCo_CargoThrowF_Anim(ftCo_GObj* gobj);
/* 09C130 */ void ftCo_CargoThrowF_IASA(ftCo_GObj* gobj);
/* 09C150 */ void ftCo_CargoThrowF_Phys(ftCo_GObj* gobj);
/* 09C20C */ void ftCo_CargoThrowF_Coll(ftCo_GObj* gobj);
/* 09C234 */ void ftCo_CargoThrowB_Anim(ftCo_GObj* gobj);
/* 09C254 */ void ftCo_CargoThrowB_IASA(ftCo_GObj* gobj);
/* 09C274 */ void ftCo_CargoThrowB_Phys(ftCo_GObj* gobj);
/* 09C294 */ void ftCo_CargoThrowB_Coll(ftCo_GObj* gobj);
/* 09C2BC */ void ftCo_CargoThrowHi_Anim(ftCo_GObj* gobj);
/* 09C2DC */ void ftCo_CargoThrowHi_IASA(ftCo_GObj* gobj);
/* 09C2FC */ void ftCo_CargoThrowHi_Phys(ftCo_GObj* gobj);
/* 09C31C */ void ftCo_CargoThrowHi_Coll(ftCo_GObj* gobj);
/* 09C344 */ void ftCo_CargoThrowLw_Anim(ftCo_GObj* gobj);
/* 09C364 */ void ftCo_CargoThrowLw_IASA(ftCo_GObj* gobj);
/* 09C384 */ void ftCo_CargoThrowLw_Phys(ftCo_GObj* gobj);
/* 09C3A4 */ void ftCo_CargoThrowLw_Coll(ftCo_GObj* gobj);
/* 09C3CC */ void ftCo_CargoThrowAir_Anim(ftCo_GObj* gobj);
/* 09C410 */ void ftCo_CargoThrowAir_IASA(ftCo_GObj* gobj);
/* 09C414 */ void ftCo_CargoThrowAir_Phys(ftCo_GObj* gobj);
/* 09C434 */ void ftCo_CargoThrowAir_Coll(ftCo_GObj* gobj);
#define GALE01_09B818
/* 09B818 */ bool ftCo_8009B818(ftCo_GObj* gobj);
/* 09B8B4 */ void ftCo_CargoTurn_Anim(ftCo_GObj* gobj);
/* 09B948 */ void ftCo_CargoTurn_IASA(ftCo_GObj* gobj);
/* 09B988 */ void ftCo_CargoTurn_Phys(ftCo_GObj* gobj);
/* 09B9A8 */ void ftCo_CargoTurn_Coll(ftCo_GObj* gobj);
#define GALE01_09B4D0
/* 09B4D0 */ bool ftCo_8009B4D0(ftCo_GObj* gobj);
/* 09B518 */ void ftCo_8009B518(ftCo_GObj* gobj);
/* 09B56C */ void ftCo_8009B56C(ftCo_GObj* gobj);
/* 09B5C0 */ void ftCo_CargoWait_Anim(ftCo_GObj* gobj);
/* 09B5C4 */ void ftCo_CargoWait_IASA(ftCo_GObj* gobj);
/* 09B634 */ void ftCo_CargoWait_Phys(ftCo_GObj* gobj);
/* 09B654 */ void ftCo_CargoWait_Coll(ftCo_GObj* gobj);
/* 09B860 */ void ftCo_8009B860(ftCo_GObj* gobj);
#define GALE01_09B67C
/* 09B67C */ bool ftCo_8009B67C(ftCo_GObj* gobj);
/* 09B744 */ void ftCo_CargoWalk_Anim(ftCo_GObj* gobj);
/* 09B764 */ void ftCo_CargoWalk_IASA(ftCo_GObj* gobj);
/* 09B7D8 */ void ftCo_CargoWalk_Phys(ftCo_GObj* gobj);
/* 09B7F8 */ void ftCo_CargoWalk_Coll(ftCo_GObj* gobj);
#define GALE01_09AE14
/* 09AE14 */ void ftCo_8009AE14(ftCo_GObj* gobj);
/* 09AE38 */ bool ftCo_8009AE38(ftCo_GObj* gobj);
/* 09AF70 */ void ftCo_CliffAttack_Anim(ftCo_GObj* gobj);
/* 09AF90 */ void ftCo_CliffAttack_IASA(ftCo_GObj* gobj);
/* 09AF94 */ void ftCo_CliffAttack_Phys(ftCo_GObj* gobj);
/* 09AFB4 */ void ftCo_CliffAttack_Coll(ftCo_GObj* gobj);
/* 09AFD4 */ bool ftCo_8009AFD4(ftCo_GObj* gobj);
#define GALE01_09AA0C
/* 09AA0C */ bool ftCo_8009AA0C(ftCo_GObj* gobj);
/* 09AC68 */ void ftCo_CliffClimb_Anim(ftCo_GObj* gobj);
/* 09ACA4 */ void ftCo_CliffClimb_IASA(ftCo_GObj* gobj);
/* 09ACA8 */ void ftCo_CliffClimb_Phys(ftCo_GObj* gobj);
/* 09ADA4 */ void ftCo_CliffClimb_Coll(ftCo_GObj* gobj);
#define GALE01_09B040
/* 09B040 */ void ftCo_8009B040(ftCo_GObj* gobj);
/* 09B10C */ void ftCo_CliffEscape_Anim(ftCo_GObj* gobj);
/* 09B12C */ void ftCo_CliffEscape_IASA(ftCo_GObj* gobj);
/* 09B130 */ void ftCo_CliffEscape_Phys(ftCo_GObj* gobj);
/* 09B150 */ void ftCo_CliffEscape_Coll(ftCo_GObj* gobj);
#define GALE01_09B170
/* 09B170 */ bool ftCo_8009B170(ftCo_GObj* gobj);
/* 09B278 */ void ftCo_CliffJump1_Anim(ftCo_GObj* gobj);
/* 09B2B4 */ void ftCo_CliffJump1_IASA(ftCo_GObj* gobj);
/* 09B2B8 */ void ftCo_CliffJump1_Phys(ftCo_GObj* gobj);
/* 09B2D8 */ void ftCo_CliffJump1_Coll(ftCo_GObj* gobj);
/* 09B390 */ void ftCo_8009B390(ftCo_GObj* gobj, float force_mul);
/* 09B424 */ void ftCo_CliffJump2_Anim(ftCo_GObj* gobj);
/* 09B460 */ void ftCo_CliffJump2_IASA(ftCo_GObj* gobj);
/* 09B464 */ void ftCo_CliffJump2_Phys(ftCo_GObj* gobj);
/* 09B4A0 */ void ftCo_CliffJump2_Coll(ftCo_GObj* gobj);
#define GALE01_09A804
/* 09A804 */ void ftCo_8009A804(ftCo_GObj* gobj);
/* 09A8D8 */ void ftCo_CliffWait_Anim(ftCo_GObj* gobj);
/* 09A8FC */ void ftCo_CliffWait_IASA(ftCo_GObj* gobj);
/* 09A96C */ void ftCo_CliffWait_Phys(ftCo_GObj* gobj);
/* 09A98C */ void ftCo_CliffWait_Coll(ftCo_GObj* gobj);
#define GALE01_08D7F0
/* 08D7F0 */ float ftCo_Damage_CalcAngle(ftCo_Fighter* fp, float kb_applied);
/* 08D8D8 */ float ftCo_ScaleBy154(float);
/* 08D8E8 */ bool ftCo_8008D8E8(float);
/* 08D930 */ void ftCo_Damage_CalcKnockback(ftCo_Fighter* fp);
/* 08DB10 */ void ftCo_8008DB10(ftCo_GObj* gobj, enum_t, float);
/* 08DC0C */ void ftCo_Damage_CalcVel(ftCo_Fighter* fp, float x, float y);
/* 08DCE0 */ void ftCo_8008DCE0(ftCo_GObj* gobj, int, float facing_dir);
/* 08E498 */ bool ftCo_Damage_CheckAirMotion(ftCo_Fighter* fp);
/* 08E4F0 */ void ftCo_Damage_OnEveryHitlag(ftCo_GObj* gobj);
/* 08E714 */ void ftCo_Damage_OnExitHitlag(ftCo_GObj* gobj);
/* 08E908 */ void ftCo_8008E908(ftCo_GObj* gobj, float);
/* 08E984 */ bool ftCo_8008E984(ftCo_Fighter* fp);
/* 08E9D0 */ void ftCo_8008E9D0(ftCo_GObj* gobj);
/* 08EB58 */ void ftCo_8008EB58(ftCo_GObj* gobj);
/* 08EC90 */ void ftCo_8008EC90(ftCo_GObj* gobj);
/* 08F744 */ void ftCo_8008F744(ftCo_GObj* gobj);
/* 08F7F0 */ void ftCo_Damage_Anim(ftCo_GObj* gobj);
/* 08FA44 */ void ftCo_Damage_IASA(ftCo_GObj* gobj);
/* 08FB18 */ void ftCo_Damage_Phys(ftCo_GObj* gobj);
/* 08FB64 */ void ftCo_Damage_Coll(ftCo_GObj* gobj);
/* 08FC94 */ void ftCo_8008FC94(ftCo_GObj* gobj);
/* 08FCB8 */ void ftCo_Damage_SetMv8FromKbThreshold(ftCo_Fighter* fp);
/* 08FD98 */ void ftCo_DamageFly_Anim(ftCo_GObj* gobj);
/* 08FF48 */ void ftCo_DamageFly_IASA(ftCo_GObj* gobj);
/* 08FF84 */ void ftCo_DamageFly_Phys(ftCo_GObj* gobj);
/* 0900EC */ void ftCo_DamageFly_Coll(ftCo_GObj* gobj);
/* 090184 */ void ftCo_80090184(ftCo_GObj* gobj);
/* 0901D0 */ void ftCo_DamageFlyRoll_Anim(ftCo_GObj* gobj);
/* 090324 */ void ftCo_DamageFlyRoll_IASA(ftCo_GObj* gobj);
/* 09035C */ void ftCo_DamageFlyRoll_Phys(ftCo_GObj* gobj);
/* 0904C0 */ void ftCo_DamageFlyRoll_Coll(ftCo_GObj* gobj);
/* 3C5520 */ extern int ftCo_803C5520[2][12];
#define GALE01_0C44CC
/* 0C44CC */ bool ftCo_800C44CC(ftCo_GObj* gobj);
/* 0C4550 */ void ftCo_800C4550(ftCo_GObj* gobj);
/* 0C466C */ void ftCo_DamageBind_Anim(ftCo_GObj* gobj);
/* 0C46E0 */ void ftCo_DamageBind_IASA(ftCo_GObj* gobj);
/* 0C46E4 */ void ftCo_DamageBind_Phys(ftCo_GObj* gobj);
/* 0C4704 */ void ftCo_DamageBind_Coll(ftCo_GObj* gobj);
#define GALE01_090824
/* 090574 */ void ftCo_80090574(ftCo_GObj* gobj);
/* 090594 */ void ftCo_80090594(ftCo_Fighter* fp, enum_t element, int dmg,
FtMotionId msid, GroundOrAir ground_or_air,
float hitlag_mul);
/* 090690 */ Vec2* ftCo_80090690(ftCo_Fighter* fp, Vec2* shift);
/* 090718 */ void ftCo_80090718(ftCo_Fighter* fp);
/* 090780 */ void ftCo_80090780(ftCo_GObj* gobj);
/* 090824 */ void ftCo_DamageFall_Anim(ftCo_GObj* gobj);
/* 090828 */ void ftCo_DamageFall_IASA(ftCo_GObj* gobj);
/* 09093C */ void ftCo_DamageFall_Phys(ftCo_GObj* gobj);
/* 09095C */ void ftCo_DamageFall_Coll(ftCo_GObj* gobj);
#define GALE01_0912A8
/* 090984 */ void ftCo_80090984(ftCo_GObj* gobj);
/* 090B60 */ void ftCo_80090B60(ftCo_GObj* gobj);
/* 090AC0 */ void ftCo_80090AC0(Fighter*);
/* 091030 */ void ftCo_80091030(ftCo_GObj* gobj);
/* 0912A8 */ void ftCo_DamageIce_Anim(ftCo_GObj* gobj);
/* 0913DC */ void ftCo_DamageIce_IASA(ftCo_GObj* gobj);
/* 0913E0 */ void ftCo_DamageIce_Phys(ftCo_GObj* gobj);
/* 09144C */ void ftCo_DamageIce_Coll(ftCo_GObj* gobj);
/* 0914A4 */ void ftCo_800914A4(ftCo_GObj* gobj);
/* 091854 */ void ftCo_80091854(ftCo_GObj* gobj);
/* 091988 */ void ftCo_DamageIceJump_Anim(ftCo_GObj* gobj);
/* 0919D8 */ void ftCo_DamageIceJump_IASA(ftCo_GObj* gobj);
/* 0919DC */ void ftCo_DamageIceJump_Phys(ftCo_GObj* gobj);
/* 0919FC */ void ftCo_DamageIceJump_Coll(ftCo_GObj* gobj);
#define GALE01_0C318C
/* 0C318C */ void ftCo_800C318C(ftCo_GObj* gobj, bool);
/* 0C32AC */ void ftCo_DamageSong_Anim(ftCo_GObj* gobj);
/* 0C334C */ void ftCo_DamageSong_IASA(ftCo_GObj* gobj);
/* 0C3350 */ void ftCo_DamageSong_Phys(ftCo_GObj* gobj);
/* 0C3370 */ void ftCo_DamageSong_Coll(ftCo_GObj* gobj);
/* 0C33C8 */ void ftCo_DamageSongWait_Anim(ftCo_GObj* gobj);
/* 0C343C */ void ftCo_DamageSongWait_IASA(ftCo_GObj* gobj);
/* 0C3440 */ void ftCo_DamageSongWait_Phys(ftCo_GObj* gobj);
/* 0C3460 */ void ftCo_DamageSongWait_Coll(ftCo_GObj* gobj);
/* 0C34B8 */ void ftCo_DamageSongRv_Anim(ftCo_GObj* gobj);
/* 0C34F4 */ void ftCo_DamageSongRv_IASA(ftCo_GObj* gobj);
/* 0C34F8 */ void ftCo_DamageSongRv_Phys(ftCo_GObj* gobj);
/* 0C3518 */ void ftCo_DamageSongRv_Coll(ftCo_GObj* gobj);
/* 0C3538 */ bool ftCo_800C3538(ftCo_GObj* gobj);
#define GALE01_0C6150
/* 0C6150 */ void ftCo_800C6150(ftCo_GObj* gobj);
#define GALE01_097D9C
/* 097D9C */ bool ftCo_Down_CheckInput(ftCo_GObj* gobj);
/* 097F08 */ void ftCo_Down_Anim(ftCo_GObj* gobj);
/* 097F44 */ void ftCo_Down_IASA(ftCo_GObj* gobj);
/* 097F48 */ void ftCo_Down_Phys(ftCo_GObj* gobj);
/* 097F68 */ void ftCo_Down_Coll(ftCo_GObj* gobj);
/* 098400 */ bool ftCo_80098400(ftCo_GObj* gobj);
#define GALE01_09805C
/* 097270 */ void ftCo_800978D4(ftCo_GObj* gobj);
/* 09813C */ void ftCo_DownAttack_Anim(ftCo_GObj* gobj);
/* 098178 */ void ftCo_DownAttack_IASA(ftCo_GObj* gobj);
/* 09817C */ void ftCo_DownAttack_Phys(ftCo_GObj* gobj);
/* 09819C */ void ftCo_DownAttack_Coll(ftCo_GObj* gobj);
/* 0981BC */ void ftCo_80098634(HSD_ObjAllocUnk2*);
/* 098238 */ bool ftCo_800986B0(ftCo_GObj* gobj);
/* 0984D4 */ bool ftCo_800984D4(ftCo_GObj* gobj);
/* 09856C */ void ftCo_8009856C(ftCo_GObj*, FtMotionId msid);
/* 09856C */ void ftCo_8009857C(ftCo_GObj*, FtMotionId msid);
/* 09872C */ bool ftCo_8009872C(ftCo_GObj* gobj);
#define GALE01_096F0C
/* 096FCC */ void ftCo_80097630(ftCo_Fighter* fp, enum_t* sfx_ids,
float threshold);
/* 097570 */ bool ftCo_80097570(ftCo_GObj* gobj);
/* 0976DC */ void ftCo_80097D40(ftCo_GObj* gobj);
/* 097724 */ void ftCo_80097D88(ftCo_GObj* gobj);
/* 09775C */ void ftCo_DownBound_Anim(ftCo_GObj* gobj);
/* 0977B8 */ void ftCo_DownBound_IASA(ftCo_GObj* gobj);
/* 0977BC */ void ftCo_DownBound_Phys(ftCo_GObj* gobj);
/* 0977DC */ void ftCo_DownBound_Coll(ftCo_GObj* gobj);
/* 097A18 */ void ftCo_80097E8C(ftCo_GObj* gobj);
/* 097B4C */ void ftCo_DownWait_Anim(ftCo_GObj* gobj);
/* 097BB8 */ void ftCo_DownWait_IASA(ftCo_GObj* gobj);
/* 097C08 */ void ftCo_DownWait_Phys(ftCo_GObj* gobj);
/* 097C28 */ void ftCo_DownWait_Coll(ftCo_GObj* gobj);
/* 097F38 */ void ftCo_80097F38(ftCo_GObj* gobj);
/* 3C5700 */ extern enum_t ftCo_DownBound_SfxIds[4];
#define GALE01_09F0F0
/* 09F0F0 */ bool ftCo_8009F0F0(ftCo_GObj* gobj);
/* 09CDB0 */ void ftCo_DownDamage_Anim(ftCo_GObj* gobj);
/* 09CE80 */ void ftCo_DownDamage_IASA(ftCo_GObj* gobj);
/* 09CE84 */ void ftCo_DownDamage_Phys(ftCo_GObj* gobj);
/* 09CEA4 */ void ftCo_DownDamage_Coll(ftCo_GObj* gobj);
#define GALE01_0980BC
/* 0980BC */ bool ftCo_800980BC(ftCo_GObj* gobj);
/* 098160 */ void ftCo_80098160(ftCo_GObj* gobj, FtMotionId msid);
/* 098194 */ void ftCo_DownStand_Anim(ftCo_GObj* gobj);
/* 0981D0 */ void ftCo_DownStand_IASA(ftCo_GObj* gobj);
/* 0981D4 */ void ftCo_DownStand_Phys(ftCo_GObj* gobj);
/* 0981F4 */ void ftCo_DownStand_Coll(ftCo_GObj* gobj);
#define GALE01_09917C
/* 09917C */ bool ftCo_8009917C(ftCo_GObj* gobj);
/* 099264 */ bool ftCo_80099264(ftCo_GObj* gobj);
/* 0994D8 */ void ftCo_Escape_Anim(ftCo_GObj* gobj);
/* 0996F0 */ void ftCo_Escape_IASA(ftCo_GObj* gobj);
/* 099714 */ void ftCo_Escape_Phys(ftCo_GObj* gobj);
/* 099734 */ void ftCo_Escape_Coll(ftCo_GObj* gobj);
/* 099794 */ bool ftCo_80099794(ftCo_GObj* gobj);
/* 09980C */ bool ftCo_8009980C(ftCo_GObj* gobj);
/* 0999D8 */ void ftCo_EscapeN_Anim(ftCo_GObj* gobj);
/* 099A14 */ void ftCo_EscapeN_IASA(ftCo_GObj* gobj);
/* 099A18 */ void ftCo_EscapeN_Phys(ftCo_GObj* gobj);
/* 099A38 */ void ftCo_EscapeN_Coll(ftCo_GObj* gobj);
#define GALE01_099A58
/* 099A58 */ bool ftCo_80099A58(ftCo_GObj* gobj);
/* 099A9C */ void ftCo_80099A9C(ftCo_GObj* gobj, int);
/* 099BD0 */ void ftCo_EscapeAir_Anim(ftCo_GObj* gobj);
/* 099C24 */ void ftCo_EscapeAir_IASA(ftCo_GObj* gobj);
/* 099CEC */ void ftCo_EscapeAir_Phys(ftCo_GObj* gobj);
/* 099D48 */ void ftCo_EscapeAir_Coll(ftCo_GObj* gobj);
#define GALE01_0968C8
/* 0968C8 */ void ftCo_800968C8(ftCo_GObj* gobj);
/* 096900 */ void ftCo_80096900(ftCo_GObj* gobj, int, int,
bool allow_interrupt, float, float);
/* 0969D8 */ void ftCo_800969D8(ftCo_GObj* gobj, int, int, int, float, float,
float);
/* 096AA0 */ void ftCo_FallSpecial_Anim(ftCo_GObj* gobj);
/* 096AF4 */ void ftCo_FallSpecial_IASA(ftCo_GObj* gobj);
/* 096B44 */ void ftCo_FallSpecial_Phys(ftCo_GObj* gobj);
/* 096C98 */ void ftCo_FallSpecial_Coll(ftCo_GObj* gobj);
/* 096CC8 */ bool ftCo_80096CC8(ftCo_GObj* gobj, enum_t);
/* 096D28 */ void ftCo_80096D28(ftCo_GObj* gobj);
#define GALE01_0C15F4
/* 0C15F4 */ bool ftCo_800C15F4(ftCo_GObj* gobj);
/* 0C1718 */ bool ftCo_800C1718(ftCo_GObj* gobj);
/* 0C17CC */ bool ftCo_800C17CC(ftCo_GObj* gobj);
/* 0C18A8 */ void ftCo_800C18A8(ftCo_GObj* gobj, ftCommon_MotionState msid,
Vec3* normal, Vec3*);
/* 0C1B2C */ void ftCo_FlyReflect_Anim(ftCo_GObj* gobj);
/* 0C1B64 */ void ftCo_FlyReflect_IASA(ftCo_GObj* gobj);
/* 0C1B84 */ void ftCo_FlyReflect_Phys(ftCo_GObj* gobj);
/* 0C1BA4 */ void ftCo_FlyReflect_Coll(ftCo_GObj* gobj);
#define GALE01_099010
/* 099010 */ void ftCo_80099010(ftCo_GObj* gobj);
/* 0990B8 */ void ftCo_Furafura_Anim(ftCo_GObj* gobj);
/* 099138 */ void ftCo_Furafura_IASA(ftCo_GObj* gobj);
/* 09913C */ void ftCo_Furafura_Phys(ftCo_GObj* gobj);
/* 09915C */ void ftCo_Furafura_Coll(ftCo_GObj* gobj);
#define GALE01_091A2C
/* 091A2C */ bool ftCo_80091A2C(ftCo_GObj* gobj);
/* 091A4C */ bool ftCo_80091A4C(ftCo_GObj* gobj);
/* 091AD8 */ bool ftCo_80091AD8(ftCo_GObj* gobj, int mv_x20);
/* 091B90 */ void ftCo_80091B90(ftCo_GObj* gobj, int);
/* 091B9C */ void ftCo_80091B9C(ftCo_GObj* gobj);
/* 091D58 */ void ftCo_80091D58(ftCo_Fighter* fp);
/* 092450 */ void ftCo_80092450(ftCo_GObj* gobj);
/* 0925A4 */ bool ftCo_800925A4(ftCo_GObj* gobj);
/* 0926DC */ void ftCo_GuardOn_Anim(ftCo_GObj* gobj);
/* 092758 */ void ftCo_GuardOn_IASA(ftCo_GObj* gobj);
/* 092870 */ void ftCo_GuardOn_Phys(ftCo_GObj* gobj);
/* 0928AC */ void ftCo_GuardOn_Coll(ftCo_GObj* gobj);
/* 0928CC */ void ftCo_800928CC(ftCo_GObj* gobj);
/* 092A24 */ void ftCo_Guard_Anim(ftCo_GObj* gobj);
/* 092A78 */ void ftCo_Guard_IASA(ftCo_GObj* gobj);
/* 092B70 */ void ftCo_Guard_Phys(ftCo_GObj* gobj);
/* 092BAC */ void ftCo_Guard_Coll(ftCo_GObj* gobj);
/* 092BCC */ void ftCo_80092BCC(ftCo_GObj* gobj);
/* 092BE8 */ void ftCo_80092BE8(ftCo_GObj* gobj);
/* 092CAC */ void ftCo_GuardOff_Anim(ftCo_GObj* gobj);
/* 092CFC */ void ftCo_GuardOff_IASA(ftCo_GObj* gobj);
/* 092E10 */ void ftCo_GuardOff_Phys(ftCo_GObj* gobj);
/* 092E30 */ void ftCo_GuardOff_Coll(ftCo_GObj* gobj);
/* 092ED8 */ float ftCo_80092ED8(int, float);
/* 093240 */ void ftCo_80093240(ftCo_GObj* gobj);
/* 0932DC */ void ftCo_800932DC(ftCo_GObj* gobj);
/* 093354 */ void ftCo_GuardSetOff_Anim(ftCo_GObj* gobj);
/* 093624 */ void ftCo_GuardSetOff_IASA(ftCo_GObj* gobj);
/* 093628 */ void ftCo_GuardSetOff_Phys(ftCo_GObj* gobj);
/* 09365C */ void ftCo_GuardSetOff_Coll(ftCo_GObj* gobj);
/* 093694 */ bool ftCo_80093694(ftCo_GObj* gobj);
/* 09370C */ void ftCo_8009370C(HSD_GObj*, HSD_GObjEvent);
/* 093BC0 */ void ftCo_80093BC0(ftCo_GObj* gobj);
/* 093C3C */ float ftCo_80094098(HSD_GObj*, float*);
/* 093CD0 */ void ftCo_GuardReflect_Anim(ftCo_GObj* gobj);
/* 093CDC */ void ftCo_80094138(ftCo_Fighter* fp);
/* 093EC0 */ void ftCo_GuardReflect_IASA(ftCo_GObj* gobj);
/* 09403C */ void ftCo_GuardReflect_Phys(ftCo_GObj* gobj);
/* 094078 */ void ftCo_GuardReflect_Coll(ftCo_GObj* gobj);
#define __GALE01_091A2C
/* 091BC4 */ static void ftCo_80091BC4(ftCo_Fighter* fp);
/* 091E78 */ static void ftCo_80091E78(ftCo_GObj* gobj, float);
/* 092158 */ static void ftCo_80092158(ftCo_GObj* gobj, int arg1,
HSD_JObj* arg2);
/* 0921DC */ static void ftCo_800921DC(ftCo_GObj* gobj);
/* 0923B4 */ static void ftCo_800923B4(ftCo_GObj* gobj);
/* 0924C0 */ static void ftCo_800924C0(HSD_GObj* gobj);
/* 092908 */ static void ftCo_80092908(ftCo_GObj* gobj);
/* 092C54 */ static void ftCo_80092C54(ftCo_GObj* gobj);
/* 092E50 */ static void ftCo_80092E50(ftCo_GObj* gobj);
/* 092F2C */ static void ftCo_80092F2C(ftCo_GObj* gobj, bool);
/* 093790 */ static void ftCo_80093790(ftCo_GObj* gobj);
/* 093850 */ static void ftCo_80093850(ftCo_GObj* gobj);
/* 09388C */ static void ftCo_8009388C(ftCo_GObj* gobj);
/* 0939B4 */ static void ftCo_800939B4(ftCo_GObj* gobj);
/* 093A50 */ static void ftCo_80093A50(ftCo_GObj* gobj);
#define GALE01_0C5CD4
/* 0C5CD4 */ bool ftCo_800C5CD4(ftCo_GObj* gobj);
/* 0C5D34 */ void ftCo_800C5D34(ftCo_GObj* gobj);
/* 0C5DBC */ void ftCo_HammerFall_Anim(ftCo_GObj* gobj);
/* 0C5DDC */ bool ftCo_800C5DDC(ftCo_GObj* gobj);
/* 0C5E94 */ void ftCo_HammerFall_IASA(ftCo_GObj* gobj);
/* 0C5F40 */ void ftCo_HammerFall_Phys(ftCo_GObj* gobj);
/* 0C5F60 */ void ftCo_HammerFall_Coll(ftCo_GObj* gobj);
#define GALE01_0C5A50
/* 0C5A50 */ bool ftCo_800C5A50(ftCo_GObj* gobj);
/* 0C5A98 */ void ftCo_800C5A98(ftCo_GObj* gobj);
/* 0C5B24 */ void ftCo_HammerJump_Anim(ftCo_GObj* gobj);
/* 0C5B44 */ void ftCo_HammerJump_IASA(ftCo_GObj* gobj);
/* 0C5B48 */ void ftCo_HammerJump_Phys(ftCo_GObj* gobj);
/* 0C5B68 */ void ftCo_HammerJump_Coll(ftCo_GObj* gobj);
#define GALE01_0C5B88
/* 0C5B88 */ void ftCo_800C5B88(ftCo_GObj* gobj, enum_t);
/* 0C5C10 */ void ftCo_HammerKneeBend_Anim(ftCo_GObj* gobj);
/* 0C5C74 */ void ftCo_HammerKneeBend_IASA(ftCo_GObj* gobj);
/* 0C5C94 */ void ftCo_HammerKneeBend_Phys(ftCo_GObj* gobj);
/* 0C5CB4 */ void ftCo_HammerKneeBend_Coll(ftCo_GObj* gobj);
#define GALE01_0C5F88
/* 0C5F88 */ void ftCo_800C5F88(ftCo_GObj* gobj);
/* 0C6020 */ void ftCo_HammerLanding_Anim(ftCo_GObj* gobj);
/* 0C6084 */ void ftCo_HammerLanding_IASA(ftCo_GObj* gobj);
/* 0C6088 */ void ftCo_HammerLanding_Phys(ftCo_GObj* gobj);
/* 0C60A8 */ void ftCo_HammerLanding_Coll(ftCo_GObj* gobj);
#define GALE01_0C576C
/* 0C576C */ bool ftCo_800C576C(ftCo_GObj* gobj);
/* 0C5848 */ void ftCo_HammerTurn_Anim(ftCo_GObj* gobj);
/* 0C59EC */ void ftCo_HammerTurn_IASA(ftCo_GObj* gobj);
/* 0C5A10 */ void ftCo_HammerTurn_Phys(ftCo_GObj* gobj);
/* 0C5A30 */ void ftCo_HammerTurn_Coll(ftCo_GObj* gobj);
#define GALE01_0C4E4C
/* 0C4E4C */ bool ftCo_800C4E4C(ftCo_GObj* gobj);
/* 0C4E94 */ void ftCo_800C4E94(ftCo_Fighter* fp);
/* 0C4ED8 */ void ftCo_800C4ED8(ftCo_GObj* gobj);
/* 0C4F64 */ void ftCo_800C4F64(ftCo_GObj* gobj);
/* 0C4FEC */ void ftCo_HammerWait_Anim(ftCo_GObj* gobj);
/* 0C5074 */ void ftCo_HammerWait_IASA(ftCo_GObj* gobj);
/* 0C50D4 */ void ftCo_HammerWait_Phys(ftCo_GObj* gobj);
/* 0C50F4 */ void ftCo_HammerWait_Coll(ftCo_GObj* gobj);
/* 0C511C */ void ftCo_800C511C(ftCo_GObj* gobj);
/* 0C5240 */ bool ftCo_800C5240(ftCo_GObj* gobj);
/* 0C5284 */ void ftCo_800C5284(ftCo_GObj* gobj);
/* 0C52F4 */ void ftCo_800C52F4(ftCo_GObj* gobj);
/* 0C53E4 */ bool ftCo_800C53E4(ftCo_Fighter* fp);
/* 0C544C */ void ftCo_800C544C(ftCo_Fighter* fp);
/* 0C548C */ float ftCo_800C548C(ftCo_Fighter* fp);
/* 0C54C4 */ u32 ftCo_800C54C4(ftCo_Fighter* fp);
/* 0C5500 */ void ftCo_800C5500(ftCo_GObj* gobj);
/* 0C554C */ void ftCo_800C554C(ftCo_Fighter* fp);
/* 0C555C */ void ftCo_800C555C(ftCo_GObj* gobj);
#define GALE01_0C55CC
/* 0C55CC */ bool ftCo_800C55CC(ftCo_GObj* gobj);
/* 0C56BC */ void ftCo_HammerWalk_Anim(ftCo_GObj* gobj);
/* 0C56DC */ void ftCo_HammerWalk_IASA(ftCo_GObj* gobj);
/* 0C572C */ void ftCo_HammerWalk_Phys(ftCo_GObj* gobj);
/* 0C574C */ void ftCo_HammerWalk_Coll(ftCo_GObj* gobj);
#define GALE01_0949F4
/* 0949F4 */ bool ftCo_80094E54(ftCo_Fighter* fp);
/* 094CFC */ bool ftCo_8009515C(ftCo_GObj* gobj);
/* 094EA4 */ bool ftCo_80094EA4(ftCo_GObj* gobj);
/* 0951DC */ bool ftCo_8009563C(ftCo_GObj* gobj);
/* 0952E4 */ void ftCo_80095744(ftCo_GObj* gobj, int*);
/* 095328 */ bool ftCo_80095328(ftCo_GObj*, bool*);
/* 095394 */ void ftCo_800957F4(ftCo_GObj* gobj, FtMotionId msid);
/* 095A20 */ void ftCo_ItemThrow_Anim(ftCo_GObj* gobj);
/* 095CC0 */ void ftCo_ItemThrow_IASA(ftCo_GObj* gobj);
/* 095CC4 */ void ftCo_ItemThrow_Phys(ftCo_GObj* gobj);
/* 095CE4 */ void ftCo_LightThrowDash_Phys(ftCo_GObj* gobj);
/* 095D50 */ void ftCo_LightThrowAir_Phys(ftCo_GObj* gobj);
/* 095DA8 */ void ftCo_LightThrowDashDrop_Coll(ftCo_GObj* gobj);
/* 095DC8 */ void ftCo_LightThrow_Coll(ftCo_GObj* gobj);
/* 095EEC */ void ftCo_LightThrowAir_Coll(ftCo_GObj* gobj);
/* 096010 */ void ftCo_HeavyThrow_Coll(ftCo_GObj* gobj);
/* 0961D0 */ void ftCo_800961D0(ftCo_GObj* gobj);
/* 096250 */ void ftCo_80096250(ftCo_GObj* gobj);
/* 096374 */ void ftCo_80096374(ftCo_GObj* gobj);
/* 096498 */ void ftCo_80096498(ftCo_GObj* gobj);
#define GALE01_08D5FC
/* 08D5FC */ void ftCo_LandingAir_EnterWithLag(ftCo_GObj* gobj);
/* 08D708 */ void ftCo_LandingAir_EnterWithMsidLag(ftCo_GObj* gobj,
FtMotionId msid, float lag);
/* 08D78C */ void ftCo_LandingAir_Anim(ftCo_GObj* gobj);
/* 08D7AC */ void ftCo_LandingAir_IASA(ftCo_GObj* gobj);
/* 08D7B0 */ void ftCo_LandingAir_Phys(ftCo_GObj* gobj);
/* 08D7D0 */ void ftCo_LandingAir_Coll(ftCo_GObj* gobj);
#define GALE01_0968E0
/* 0968E0 */ void ftCo_LiftWait_Anim(ftCo_GObj* gobj);
/* 0968E4 */ void ftCo_LiftWait_IASA(ftCo_GObj* gobj);
/* 096934 */ void ftCo_LiftWait_Phys(ftCo_GObj* gobj);
/* 0969BC */ void ftCo_LiftWait_Coll(ftCo_GObj* gobj);
/* 096D9C */ void ftCo_80096D9C(ftCo_GObj* gobj);
/* 096E68 */ void ftCo_80096E68(ftCo_GObj* gobj);
/* 096EF8 */ bool ftCo_80096EF8(ftCo_GObj* gobj);
/* 096F48 */ void ftCo_80096F48(ftCo_GObj* gobj);
/* 096FD0 */ void ftCo_LiftWalk_Anim(ftCo_GObj* gobj);
/* 097074 */ void ftCo_LiftWalk_IASA(ftCo_GObj* gobj);
/* 097098 */ void ftCo_LiftWalk_Phys(ftCo_GObj* gobj);
/* 0970B8 */ void ftCo_LiftWalk_Coll(ftCo_GObj* gobj);
/* 0970E0 */ bool ftCo_800970E0(ftCo_GObj* gobj);
/* 097130 */ void ftCo_80097130(ftCo_GObj* gobj);
/* 0971B0 */ void ftCo_LiftTurn_Anim(ftCo_GObj* gobj);
/* 097458 */ void ftCo_LiftTurn_IASA(ftCo_GObj* gobj);
/* 09747C */ void ftCo_LiftTurn_Phys(ftCo_GObj* gobj);
/* 09749C */ void ftCo_LiftTurn_Coll(ftCo_GObj* gobj);
/* 0974C4 */ void ftCo_800974C4(ftCo_GObj* gobj);
/* 09750C */ void ftCo_8009750C(ftCo_GObj* gobj);
#define GALE01_09CD5C
/* 09CD5C */ void ftCo_8009F39C(ftCo_GObj* gobj);
/* 09CDC0 */ void ftCo_MissFoot_Anim(ftCo_GObj* gobj);
/* 09CDFC */ void ftCo_MissFoot_IASA(ftCo_GObj* gobj);
/* 09CE00 */ void ftCo_MissFoot_Phys(ftCo_GObj* gobj);
/* 09CE20 */ void ftCo_MissFoot_Coll(ftCo_GObj* gobj);
#define GALE01_09A3C8
/* 09A3C8 */ bool ftCo_8009A3C8(ftCo_GObj* gobj);
/* 09A468 */ void ftCo_Ottotto_Anim(ftCo_GObj* gobj);
/* 09A4A4 */ void ftCo_Ottotto_IASA(ftCo_GObj* gobj);
/* 09A5F4 */ void ftCo_Ottotto_Phys(ftCo_GObj* gobj);
/* 09A5F8 */ void ftCo_Ottotto_Coll(ftCo_GObj* gobj);
/* 09A728 */ void ftCo_OttottoWait_Anim(ftCo_GObj* gobj);
/* 09A72C */ void ftCo_OttottoWait_IASA(ftCo_GObj* gobj);
/* 09A74C */ void ftCo_OttottoWait_Phys(ftCo_GObj* gobj);
/* 09A750 */ void ftCo_OttottoWait_Coll(ftCo_GObj* gobj);
#define GALE01_099F1C
/* 099F1C */ bool ftCo_80099F1C(ftCo_GObj* gobj);
/* 099F9C */ bool ftCo_80099F9C(ftCo_GObj* gobj);
/* 09A080 */ bool ftCo_8009A080(ftCo_GObj* gobj);
/* 09A134 */ bool ftCo_8009A134(ftCo_GObj* gobj);
/* 09A184 */ void ftCo_8009A184(ftCo_GObj* gobj, FtMotionId msid,
MotionFlags mf, float anim_start);
/* 09A228 */ void ftCo_8009A228(ftCo_GObj* gobj);
/* 09A2A8 */ void ftCo_Pass_Anim(ftCo_GObj* gobj);
/* 09A2E4 */ void ftCo_Pass_IASA(ftCo_GObj* gobj);
/* 09A388 */ void ftCo_Pass_Phys(ftCo_GObj* gobj);
/* 09A3A8 */ void ftCo_Pass_Coll(ftCo_GObj* gobj);
#define GALE01_098430
/* 098358 */ void ftCo_800987D0(ftCo_GObj* gobj);
/* 098430 */ void ftCo_Passive_Anim(ftCo_GObj* gobj);
/* 09846C */ void ftCo_Passive_IASA(ftCo_GObj* gobj);
/* 098470 */ void ftCo_Passive_Phys(ftCo_GObj* gobj);
/* 098490 */ void ftCo_Passive_Coll(ftCo_GObj* gobj);
#define GALE01_0C23A0
/* 0C23A0 */ bool ftCo_800C23A0(ftCo_GObj* gobj);
/* 0C23FC */ void ftCo_800C23FC(ftCo_GObj* gobj);
/* 0C252C */ void ftCo_PassiveCeil_Anim(ftCo_GObj* gobj);
/* 0C25AC */ void ftCo_PassiveCeil_IASA(ftCo_GObj* gobj);
/* 0C25B0 */ void ftCo_PassiveCeil_Phys(ftCo_GObj* gobj);
/* 0C25D0 */ void ftCo_PassiveCeil_Coll(ftCo_GObj* gobj);
#define GALE01_0984B0
/* 0984B0 */ bool ftCo_80098928(ftCo_GObj* gobj);
/* 098628 */ void ftCo_PassiveStand_Anim(ftCo_GObj* gobj);
/* 098664 */ void ftCo_PassiveStand_IASA(ftCo_GObj* gobj);
/* 098668 */ void ftCo_PassiveStand_Phys(ftCo_GObj* gobj);
/* 098688 */ void ftCo_PassiveStand_Coll(ftCo_GObj* gobj);
#define GALE01_0C1D38
/* 0C1D38 */ bool ftCo_800C1D38(ftCo_GObj* gobj);
/* 0C1E0C */ bool ftCo_800C1E0C(Fighter* fp);
/* 0C1E64 */ void ftCo_800C1E64(ftCo_GObj* gobj, int msid, int timer,
int vel_y_exponent, float facing_dir);
/* 0C2028 */ void ftCo_PassiveWall_Anim(ftCo_GObj* gobj);
/* 0C2180 */ void ftCo_PassiveWall_IASA(ftCo_GObj* gobj);
/* 0C22C0 */ void ftCo_PassiveWall_Phys(ftCo_GObj* gobj);
/* 0C2348 */ void ftCo_PassiveWall_Coll(ftCo_GObj* gobj);
#define GALE01_099D9C
/* 099D9C */ void ftCo_80099D9C(ftCo_GObj* gobj);
/* 099E24 */ void ftCo_ReboundStop_Anim(ftCo_GObj* gobj);
/* 099E80 */ void ftCo_Rebound_Anim(ftCo_GObj* gobj);
/* 099EBC */ void ftCo_Rebound_IASA(ftCo_GObj* gobj);
/* 099EC0 */ void ftCo_Rebound_Phys(ftCo_GObj* gobj);
/* 099EFC */ void ftCo_Rebound_Coll(ftCo_GObj* gobj);
#define GALE01_098E3C
/* 098E3C */ void ftCo_80098E3C(ftCo_GObj* gobj);
/* 098A44 */ void ftCo_ShieldBreakDown_Anim(ftCo_GObj* gobj);
/* 098A80 */ void ftCo_ShieldBreakDown_IASA(ftCo_GObj* gobj);
/* 098A84 */ void ftCo_ShieldBreakDown_Phys(ftCo_GObj* gobj);
/* 098AA4 */ void ftCo_ShieldBreakDown_Coll(ftCo_GObj* gobj);
#define GALE01_0988E4
/* 0988E4 */ void ftCo_80098D90(ftCo_GObj* gobj);
/* 098940 */ void ftCo_ShieldBreakFall_Anim(ftCo_GObj* gobj);
/* 098944 */ void ftCo_ShieldBreakFall_IASA(ftCo_GObj* gobj);
/* 098948 */ void ftCo_ShieldBreakFall_Phys(ftCo_GObj* gobj);
/* 098968 */ void ftCo_ShieldBreakFall_Coll(ftCo_GObj* gobj);
#define GALE01_0986A0
/* 0986A0 */ void ftCo_80098B20(ftCo_GObj* gobj);
/* 098794 */ void ftCo_ShieldBreakFly_Anim(ftCo_GObj* gobj);
/* 0987D0 */ void ftCo_ShieldBreakFly_IASA(ftCo_GObj* gobj);
/* 0987D4 */ void ftCo_ShieldBreakFly_Phys(ftCo_GObj* gobj);
/* 0987F4 */ void ftCo_ShieldBreakFly_Coll(ftCo_GObj* gobj);
/* 098820 */ void ftCo_80098C9C(Fighter_GObj* gobj);
#define GALE01_098F3C
/* 098F3C */ void ftCo_80098F3C(ftCo_GObj* gobj);
/* 098F90 */ void ftCo_ShieldBreakStand_Anim(ftCo_GObj* gobj);
/* 098FCC */ void ftCo_ShieldBreakStand_IASA(ftCo_GObj* gobj);
/* 098FD0 */ void ftCo_ShieldBreakStand_Phys(ftCo_GObj* gobj);
/* 098FF0 */ void ftCo_ShieldBreakStand_Coll(ftCo_GObj* gobj);
#define GALE01_08A7A8
/* 09C5A4 */ void ftCo_8009C5A4(ftCo_GObj* gobj, int);
/* 09C640 */ void ftCo_8009C640(ftCo_GObj* gobj, int);
/* 09C830 */ void ftCo_Shouldered_Anim(ftCo_GObj* gobj);
/* 09CA00 */ void ftCo_Shouldered_IASA(ftCo_GObj* gobj);
/* 09CA04 */ void ftCo_Shouldered_Phys(ftCo_GObj* gobj);
/* 09CA08 */ void ftCo_Shouldered_Coll(ftCo_GObj* gobj);
#define GALE01_09614C
/* 09614C */ bool ftCo_SpecialAir_CheckInput(ftCo_GObj* gobj);
#define GALE01_095FEC
/* 0964FC */ bool ftCo_SpecialS_HasInput(Fighter* fp);
/* 096030 */ bool ftCo_SpecialS_CheckInput(ftCo_GObj* gobj);
#define GALE01_09CA98
/* 09CA98 */ bool ftCo_8009EF68(ftCo_GObj* gobj);
/* 09CB78 */ void ftCo_StopCeil_Anim(ftCo_GObj* gobj);
/* 09CBE8 */ void ftCo_StopCeil_IASA(ftCo_GObj* gobj);
/* 09CBEC */ void ftCo_StopCeil_Phys(ftCo_GObj* gobj);
/* 09CBF0 */ void ftCo_StopCeil_Coll(ftCo_GObj* gobj);
#define GALE01_09EDA4
/* 09EDA4 */ bool ftCo_8009EDA4(ftCo_GObj* gobj);
/* 09EF04 */ void ftCo_StopWall_Anim(ftCo_GObj* gobj);
/* 09EF40 */ void ftCo_StopWall_IASA(ftCo_GObj* gobj);
/* 09EF44 */ void ftCo_StopWall_Phys(ftCo_GObj* gobj);
/* 09EF48 */ void ftCo_StopWall_Coll(ftCo_GObj* gobj);
#define GALE01_0BD9E0
/* 0BD9E0 */ FighterKind ftCo_800BD9E0(ftKb_GObj* gobj,
Fighter_GObj* victim_gobj);
/* 0BDA50 */ void ftCo_800BDA50(ftCo_GObj* gobj);
/* 0BDA74 */ void ftCo_800BDA74(ftCo_GObj* gobj, Vec3* normal);
/* 0BDB58 */ void ftCo_800BDB58(ftCo_GObj* gobj, ftKb_GObj* thrower_gobj);
/* 0BDDC4 */ void ftCo_ThrownKirbyStar_Anim(ftCo_GObj* gobj);
/* 0BDDC8 */ void ftCo_ThrownKirbyStar_IASA(ftCo_GObj* gobj);
/* 0BDDCC */ void ftCo_ThrownKirbyStar_Phys(ftCo_GObj* gobj);
/* 0BDF10 */ void ftCo_ThrownKirbyStar_Coll(ftCo_GObj* gobj);
/* 0BE000 */ void ftCo_800BE000(ftCo_GObj* gobj, ftKb_GObj* thrower_gobj);
/* 0BE258 */ void ftCo_ThrownCopyStar_Anim(ftCo_GObj* gobj);
/* 0BE25C */ void ftCo_ThrownCopyStar_IASA(ftCo_GObj* gobj);
/* 0BE260 */ void ftCo_ThrownCopyStar_Phys(ftCo_GObj* gobj);
/* 0BE3A4 */ void ftCo_ThrownCopyStar_Coll(ftCo_GObj* gobj);
/* 0BE494 */ void ftCo_800BE494(ftCo_GObj* gobj);
/* 0BE618 */ void ftCo_ThrownKirby_Anim(ftCo_GObj* gobj);
/* 0BE61C */ void ftCo_ThrownKirby_IASA(ftCo_GObj* gobj);
/* 0BE620 */ void ftCo_ThrownKirby_Phys(ftCo_GObj* gobj);
/* 0BE6A8 */ void ftCo_ThrownKirby_Coll(ftCo_GObj* gobj);
/* 0BE6AC */ void ftCo_800BE6AC(ftCo_GObj* gobj);
/* 0BE7C0 */ void ftCo_800BE7C0(ftCo_GObj* gobj);
#define GALE01_0BCDE0
/* 0BCDE0 */ void ftCo_800BCDE0(ftCo_GObj* gobj, FtMotionId msid);
/* 0BCE64 */ void ftCo_800BCE64(ftCo_GObj* gobj, FtMotionId msid);
/* 0BCED8 */ void ftCo_ThrownKoopaF_Anim(ftCo_GObj* gobj);
/* 0BCEDC */ void ftCo_ThrownKoopaF_IASA(ftCo_GObj* gobj);
/* 0BCEE0 */ void ftCo_ThrownKoopaF_Phys(ftCo_GObj* gobj);
/* 0BCEE4 */ void ftCo_ThrownKoopaF_Coll(ftCo_GObj* gobj);
/* 0BCEE8 */ void ftCo_ThrownKoopaB_Anim(ftCo_GObj* gobj);
/* 0BCEEC */ void ftCo_ThrownKoopaB_IASA(ftCo_GObj* gobj);
/* 0BCEF0 */ void ftCo_ThrownKoopaB_Phys(ftCo_GObj* gobj);
/* 0BCEF4 */ void ftCo_ThrownKoopaB_Coll(ftCo_GObj* gobj);
/* 0BCEF8 */ void ftCo_ThrownKoopaAirF_Anim(ftCo_GObj* gobj);
/* 0BCEFC */ void ftCo_ThrownKoopaAirF_IASA(ftCo_GObj* gobj);
/* 0BCF00 */ void ftCo_ThrownKoopaAirF_Phys(ftCo_GObj* gobj);
/* 0BCF04 */ void ftCo_ThrownKoopaAirF_Coll(ftCo_GObj* gobj);
/* 0BCF08 */ void ftCo_ThrownKoopaAirB_Anim(ftCo_GObj* gobj);
/* 0BCF0C */ void ftCo_ThrownKoopaAirB_IASA(ftCo_GObj* gobj);
/* 0BCF10 */ void ftCo_ThrownKoopaAirB_Phys(ftCo_GObj* gobj);
/* 0BCF14 */ void ftCo_ThrownKoopaAirB_Coll(ftCo_GObj* gobj);
#define GALE01_0BD17C
/* 0BD0E8 */ void ftCo_800BD0E8(ftCo_GObj* gobj, FtMotionId msid);
/* 0BD17C */ void ftCo_ThrownMewtwo_Anim(ftCo_GObj* gobj);
/* 0BD180 */ void ftCo_ThrownMewtwo_IASA(ftCo_GObj* gobj);
/* 0BD184 */ void ftCo_ThrownMewtwo_Phys(ftCo_GObj* gobj);
/* 0BD188 */ void ftCo_ThrownMewtwo_Coll(ftCo_GObj* gobj);
/* 0BD18C */ void ftCo_ThrownMewtwoAir_Anim(ftCo_GObj* gobj);
/* 0BD190 */ void ftCo_ThrownMewtwoAir_IASA(ftCo_GObj* gobj);
/* 0BD194 */ void ftCo_ThrownMewtwoAir_Phys(ftCo_GObj* gobj);
/* 0BD198 */ void ftCo_ThrownMewtwoAir_Coll(ftCo_GObj* gobj);
#define GALE01_08A494
/* 08A494 */ void ftCo_Wait_Anim(ftCo_GObj* gobj);
/* 08A4D4 */ void ftCo_Wait_IASA(ftCo_GObj* gobj);
/* 08A644 */ void ftCo_Wait_Phys(ftCo_GObj* gobj);
/* 08A678 */ void ftCo_Wait_Coll(ftCo_GObj* gobj);
#define GALE01_0C4724
/* 0C4724 */ void ftCo_800C4724(ftCo_GObj* gobj);
/* 0C4900 */ void ftCo_WarpStarJump_Anim(ftCo_GObj* gobj);
/* 0C4964 */ void ftCo_WarpStarJump_IASA(ftCo_GObj* gobj);
/* 0C4968 */ void ftCo_WarpStarJump_Phys(ftCo_GObj* gobj);
/* 0C4A14 */ void ftCo_WarpStarJump_Coll(ftCo_GObj* gobj);
/* 0C4A18 */ void ftCo_WarpStarJump_Cam(ftCo_GObj* gobj);
/* 0C4BA4 */ void ftCo_WarpStarFall_Anim(ftCo_GObj* gobj);
/* 0C4BA8 */ void ftCo_WarpStarFall_IASA(ftCo_GObj* gobj);
/* 0C4BAC */ void ftCo_WarpStarFall_Phys(ftCo_GObj* gobj);
/* 0C4C30 */ void ftCo_WarpStarFall_Coll(ftCo_GObj* gobj);
/* 0C4E2C */ void ftCo_WarpStarFall_Cam(ftCo_GObj* gobj);
#define GALE01_09D7E4
/* 09DA30 */ void ftCo_800BBED4(ftCo_GObj* arg0, ftCo_GObj* arg1);
/* 09DD0C */ void ftCo_YoshiEgg_Anim(ftCo_GObj* gobj);
/* 09DE60 */ void ftCo_YoshiEgg_IASA(ftCo_GObj* gobj);
/* 09DE64 */ void ftCo_YoshiEgg_Phys(ftCo_GObj* gobj);
/* 09DE9C */ void ftCo_YoshiEgg_Coll(ftCo_GObj* gobj);
/* 0BC388 */ void ftCo_800BC388(ftCo_GObj* gobj);
/* 0BC3AC */ void ftCo_800BC3AC(ftCo_GObj* gobj);
/* 0BC3D0 */ void ftCo_800BC3D0(ftCo_GObj* gobj);
#define GALE01_093C3C
/* 093CF4 */ bool ftpickupitem_80094150(ftCo_GObj* arg0, Item_GObj* arg1);
/* 094334 */ bool ftpickupitem_80094790(HSD_GObj* gobj);
/* 0943BC */ void ftpickupitem_80094818(HSD_GObj* gobj, bool);
/* 0945B8 */ void ftpickupitem_Anim(ftCo_GObj* gobj);
/* 0946C4 */ void ftpickupitem_IASA(ftCo_GObj* gobj);
/* 0946C8 */ void ftpickupitem_Phys(ftCo_GObj* gobj);
/* 0946E8 */ void ftpickupitem_Coll(ftCo_GObj* gobj);
/* 094D90 */ void ftpickupitem_80094D90(ftCo_GObj* gobj);
/* 094DF8 */ void ftpickupitem_80094DF8(ftCo_GObj* gobj);
#define MELEE_FT_CHARA_FTCOMMON_INLINES_H
#define GALE01_0679B0
#define MELEE_FT_INLINES_H
#define GALE01_06DBF4
/* 06FE08 */ void ftAnim_8006FE08(Fighter* fp, bool);
/* 06DE00 */ void ftAnim_GetNextJointInTree(HSD_Joint** pjoint, s32* pdepth);
/* 06E9B4 */ void ftAnim_8006E9B4(Fighter_GObj*);
/* 06EBA4 */ void ftAnim_8006EBA4(Fighter_GObj*);
/* 06EBE8 */ void ftAnim_8006EBE8(HSD_GObj* gobj, float, float anim_rate,
float anim_blend_frames);
/* 06EED4 */ void ftAnim_8006EED4(Fighter*, Fighter_Part, Fighter_Part, float,
float);
/* 06F0FC */ void ftAnim_8006F0FC(Fighter_GObj* gobj, float);
/* 06F190 */ void ftAnim_SetAnimRate(Fighter_GObj*, float);
/* 06F238 */ bool ftAnim_IsFramesRemaining(Fighter_GObj*);
/* 06F484 */ float ftAnim_8006F484(void*);
/* 06F4C8 */ void ftAnim_8006F4C8(Fighter* fp, int, lbMthp_8001E8F8_t*);
/* 06FA58 */ void ftAnim_8006FA58(Fighter* fp, bool, HSD_Joint* joint);
/* 06FB88 */ void ftAnim_8006FB88(Fighter* fp, bool, HSD_Joint* joint);
/* 06FE48 */ void ftAnim_8006FE48(Fighter_GObj*);
/* 06FE9C */ void ftAnim_8006FE9C(Fighter* fp, int, float, float);
/* 06FF74 */ void ftAnim_8006FF74(Fighter* fp, int);
/* 070010 */ void ftAnim_80070010(Fighter* fp, int, HSD_Joint* joint, float,
float);
/* 070108 */ void ftAnim_80070108(Fighter* fp, int, HSD_Joint* joint, float,
float);
/* 070308 */ void ftAnim_80070308(Fighter_GObj*);
/* 0704F0 */ void ftAnim_800704F0(Fighter_GObj*, s32, float);
/* 070654 */ void ftAnim_80070654(Fighter_GObj*);
/* 070710 */ void ftAnim_80070710(HSD_JObj* joint, float);
/* 070734 */ void ftAnim_80070734(HSD_JObj* jobj, float);
/* 070758 */ void ftAnim_80070758(HSD_JObj*);
/* 07077C */ void ftAnim_8007077C(Fighter_GObj*);
/* 070B88 */ void ftAnim_ApplyPartAnim(Fighter_GObj*, s32, s32, float);
/* 070C48 */ void ftAnim_80070C48(Fighter_GObj*, s32);
/* 070CC4 */ void ftAnim_80070CC4(Fighter_GObj*, s32);
/* 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
/* 26B1D4 */ float it_8026B1D4(Item_GObj* gobj, HitCapsule* itemHitboxUnk);
/* 26B294 */ void it_8026B294(Item_GObj* gobj, Vec3* pos);
/* 26B2B4 */ enum_t it_8026B2B4(Item_GObj* gobj);
/* 26B2D8 */ bool it_8026B2D8(Item_GObj* gobj);
/* 26B300 */ s32 itGetKind(Item_GObj* gobj);
/* 26B30C */ enum_t it_8026B30C(Item_GObj* gobj);
/* 26B320 */ enum_t it_8026B320(Item_GObj* gobj);
/* 26B334 */ float it_8026B334(Item_GObj* gobj);
/* 26B344 */ void it_8026B344(Item_GObj* gobj, Vec3* pos);
/* 26B378 */ float it_8026B378(Item_GObj* gobj);
/* 26B384 */ float it_8026B384(Item_GObj* gobj);
/* 26B390 */ void it_8026B390(Item_GObj* gobj);
/* 26B3A8 */ void it_8026B3A8(Item_GObj* gobj);
/* 26B3C0 */ int it_8026B3C0(ItemKind kind);
/* 26B3F8 */ void it_8026B3F8(Article* article, s32 kind);
/* 26B40C */ void it_8026B40C(Article* article, s32 kind);
/* 26B424 */ float it_8026B424(s32 damage);
/* 26B47C */ s32 it_8026B47C(Item_GObj* gobj);
/* 26B4F0 */ bool it_8026B4F0(Item_GObj* gobj);
/* 26B54C */ float it_8026B54C(Item_GObj* gobj);
/* 26B560 */ float it_8026B560(Item_GObj* gobj);
/* 26B574 */ float it_8026B574(Item_GObj* gobj);
/* 26B588 */ s32 it_8026B588(void);
/* 26B594 */ bool it_8026B594(Item_GObj* gobj);
/* 26B5E4 */ HSD_GObj* it_8026B5E4(Vec3* vector, Vec3* vector2,
Item_GObj* gobj);
/* 26B634 */ HSD_GObj* it_8026B634(Vec3* vector, Vec3* vector2,
Item_GObj* gobj);
/* 26B684 */ float it_8026B684(Vec3* pos);
/* 26B6A8 */ float it_8026B6A8(Vec3* pos, HSD_GObj* arg);
/* 26B6C8 */ bool it_8026B6C8(Item_GObj* gobj);
/* 26B718 */ void it_8026B718(Item_GObj* gobj, float hitlagFrames);
/* 26B724 */ void it_8026B724(Item_GObj* gobj);
/* 26B73C */ void it_8026B73C(Item_GObj* gobj);
/* 26B774 */ bool it_8026B774(Item_GObj* gobj, u8 arg1);
/* 26B7A4 */ s32 it_8026B7A4(Item_GObj* gobj);
/* 26B7B0 */ u8 it_8026B7B0(Item_GObj* gobj);
/* 26B7BC */ s32 it_8026B7BC(Item_GObj* gobj);
/* 26B7CC */ s32 it_8026B7CC(Item_GObj* gobj);
/* 26B7D8 */ s32 it_8026B7D8(void);
/* 26B7E0 */ s32 it_8026B7E0(void);
/* 26B7E8 */ s32 it_8026B7E8(Item_GObj* gobj);
/* 26B7F8 */ void it_8026B7F8(Item_GObj* gobj);
/* 26B894 */ bool it_8026B894(Item_GObj* gobj, HSD_GObj* referenced_gobj);
/* 26B924 */ s32 it_8026B924(Item_GObj* gobj);
/* 26B960 */ float it_8026B960(Item_GObj* gobj);
/* 26B9A8 */ void it_8026B9A8(Item_GObj* gobj, HSD_GObj* arg1,
Fighter_Part arg2);
/* 26BAE8 */ void it_8026BAE8(Item_GObj* gobj, float scale_mul);
/* 26BB20 */ void it_8026BB20(Item_GObj* gobj);
/* 26BB44 */ void it_8026BB44(Item_GObj* gobj);
/* 26BB68 */ void it_8026BB68(Item_GObj* gobj, Vec3* pos);
/* 26BB88 */ void it_8026BB88(Item_GObj* gobj, Vec3* pos);
/* 26BBCC */ void it_8026BBCC(Item_GObj* gobj, Vec3* pos);
/* 26BC14 */ void it_8026BC14(Item_GObj* gobj);
/* 26BC68 */ bool it_8026BC68(Item_GObj* gobj);
/* 26BC78 */ HSD_GObj* it_8026BC78(Item_GObj* gobj);
/* 26BC84 */ bool it_8026BC84(Item_GObj* gobj);
/* 26BC90 */ void it_8026BC90(Item_GObj* gobj, Vec3* pos);
/* 26BCF4 */ void it_8026BCF4(Item_GObj* gobj);
/* 26BD0C */ void it_8026BD0C(Item_GObj* gobj);
/* 26BD24 */ void it_8026BD24(Item_GObj* gobj);
/* 26BD3C */ void it_8026BD3C(Item_GObj* gobj);
/* 26BD54 */ void it_8026BD54(Item_GObj* gobj);
/* 26BD6C */ void it_8026BD6C(Item_GObj* gobj);
/* 26BD84 */ void it_8026BD84(Item_GObj* gobj);
/* 26BD9C */ void it_8026BD9C(Item_GObj* gobj);
/* 26BDB4 */ void it_8026BDB4(Item_GObj* gobj);
/* 26BDCC */ void it_8026BDCC(Item_GObj* gobj);
/* 26BE28 */ void it_8026BE28(Item_GObj* gobj);
/* 26BE84 */ HSD_GObj* it_8026BE84(BobOmbRain* bobOmbRain);
/* 26C100 */ CollData* it_8026C100(Item_GObj* gobj);
/* 26C16C */ void it_8026C16C(Item_GObj* gobj, bool isHeadless);
/* 26C1B4 */ bool it_8026C1B4(Item_GObj* gobj);
/* 26C1D4 */ u32 it_8026C1D4(void);
/* 26C1E8 */ bool it_8026C1E8(Item_GObj* gobj);
/* 26C220 */ void it_8026C220(Item_GObj* gobj, HSD_GObj* arg1);
/* 26C258 */ HSD_GObj* it_8026C258(Vec3* vector, float facingDir);
/* 26C334 */ void it_8026C334(Item_GObj* gobj, Vec3* pos);
/* 26C368 */ void it_8026C368(Item_GObj* gobj);
/* 26C3FC */ void it_8026C3FC(void);
/* 26C42C */ void it_8026C42C(void);
#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 */
};
struct { int x[1 - 2 * !(sizeof(struct HSD_Archive) == 0x44)]; };;
s32 HSD_ArchiveParse(HSD_Archive*, u8*, u32);
void* HSD_ArchiveGetPublicAddress(HSD_Archive*, char*);
char* HSD_ArchiveGetExtern(HSD_Archive*, int);
void HSD_ArchiveLocateExtern(HSD_Archive*, char*, void*);
#define _controller_h_
/// @todo Circular dependency
#define SYSDOLPHIN_BASELIB_RUMBLE_H
struct HSD_RumbleData {
u8 last_status;
u8 status;
u8 direct_status;
u16 nb_list;
HSD_PadRumbleListData* listdatap;
};
struct RumbleCommand {
u16 op;
u16 frame;
};
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* */ u16* stack;
/*0x18*/ /* HSD_Rumble* */ u16* listp;
/*0x1C*/ /* HSD_Rumble* */ u16* 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);
#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*/ RumbleInfo rumble_info;
};
extern HSD_PadStatus HSD_PadMasterStatus[4];
extern HSD_PadStatus HSD_PadGameStatus[4];
extern HSD_PadStatus HSD_PadCopyStatus[4];
void HSD_PadFlushQueue(HSD_FlushType);
u8 HSD_PadGetRawQueueCount(void);
s32 HSD_PadGetResetSwitch(void);
void HSD_PadRenewRawStatus(bool);
void HSD_PadRenewMasterStatus(void);
void HSD_PadRenewGameStatus(void);
void HSD_PadRenewStatus(void);
void HSD_PadReset(void);
void HSD_PadInit(u8, HSD_PadData*, u16, HSD_PadRumbleListData*);
#define SYSDOLPHIN_BASELIB_DOBJ_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
typedef 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;
} HSD_FObj;
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 _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;
HSD_TExp* next;
void* val;
HSD_TEInput comp;
HSD_TEType ctype;
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);
#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, int 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);
HSD_TObj* HSD_TObjAlloc(void);
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)
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);
#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 _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 _jobj_h_
#define _aobj_h_
#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;
u32 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);
float fmod(float x, float y);
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_AObjGetEndFrame(HSD_AObj* aobj)
{
if (!aobj) {
__assert("aobj.h", 0xAAU, "aobj");
}
return aobj->end_frame;
}
#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 HSD_MTX_RIGID 1
#define HSD_MTX_ENVELOPE 2
struct _unk_struct_pobj {
u32 data[8];
HSD_AObj* aobj;
};
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;
struct _unk_struct_pobj* unk;
} 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);
struct HSD_JObj;
#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)
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 */ u32 id;
};
struct { int x[1 - 2 * !(sizeof(struct HSD_JObj) == 0x88)]; };;
struct HSD_Joint {
char* class_name;
u32 flags;
HSD_Joint* child;
HSD_Joint* next;
union {
HSD_DObjDesc* dobjdesc;
HSD_Spline* spline;
HSD_SList* ptcl;
} u;
Vec3 rotation;
Vec3 scale;
Vec3 position;
MtxPtr mtx;
HSD_RObjDesc* robjdesc;
};
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_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 == ((void*) 0)) {
return ((void*) 0);
} else {
return jobj->child;
}
}
static inline HSD_JObj* HSD_JObjGetNext(HSD_JObj* jobj)
{
if (jobj == ((void*) 0)) {
return ((void*) 0);
} else {
return jobj->next;
}
}
static inline HSD_JObj* HSD_JObjGetParent(HSD_JObj* jobj)
{
if (jobj == ((void*) 0)) {
return ((void*) 0);
} else {
return jobj->parent;
}
}
static inline HSD_RObj* HSD_JObjGetRObj(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 405, "jobj"));
return jobj->robj;
}
static inline bool HSD_JObjMtxIsDirty(HSD_JObj* jobj)
{
bool result;
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 564, "jobj"));
result = 0;
if (!(jobj->flags & (1 << 23)) && (jobj->flags & (1 << 6))) {
result = 1;
}
return result;
}
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); } }
static inline void HSD_JObjSetRotation(HSD_JObj* jobj, Quaternion* rotate)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 618, "jobj"));
((rotate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 619, "rotate"));
jobj->rotate = *rotate;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetRotationX(HSD_JObj* jobj, f32 x)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 639, "jobj"));
((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 640, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
jobj->rotate.x = x;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetRotationY(HSD_JObj* jobj, f32 y)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 660, "jobj"));
((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 661, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
jobj->rotate.y = y;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetRotationZ(HSD_JObj* jobj, f32 z)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 681, "jobj"));
((!(jobj->flags & (1 << 17))) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 682, "!(jobj->flags & JOBJ_USE_QUATERNION)"));
jobj->rotate.z = z;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjGetRotation(HSD_JObj* jobj, Quaternion* quat)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 699, "jobj"));
*quat = jobj->rotate;
}
static inline f32 HSD_JObjGetRotationX(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 715, "jobj"));
return jobj->rotate.x;
}
static inline f32 HSD_JObjGetRotationY(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 730, "jobj"));
return jobj->rotate.y;
}
static inline f32 HSD_JObjGetRotationZ(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 745, "jobj"));
return jobj->rotate.z;
}
static inline void HSD_JObjSetScale(HSD_JObj* jobj, Vec3* scale)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 760, "jobj"));
((scale) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 761, "scale"));
jobj->scale = *scale;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetScaleX(HSD_JObj* jobj, f32 x)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 776, "jobj"));
jobj->scale.x = x;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetScaleY(HSD_JObj* jobj, f32 y)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 791, "jobj"));
jobj->scale.y = y;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetScaleZ(HSD_JObj* jobj, f32 z)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 806, "jobj"));
jobj->scale.z = z;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjGetScale(HSD_JObj* jobj, Vec3* scale)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 823, "jobj"));
((scale) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 824, "scale"));
*scale = jobj->scale;
}
static inline f32 HSD_JObjGetScaleX(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 875, "jobj"));
return jobj->scale.x;
}
static inline f32 HSD_JObjGetScaleY(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 888, "jobj"));
return jobj->scale.y;
}
static inline f32 HSD_JObjGetScaleZ(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 901, "jobj"));
return jobj->scale.z;
}
static inline void HSD_JObjSetTranslate(HSD_JObj* jobj, Vec3* translate)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 916, "jobj"));
((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 917, "translate"));
jobj->translate = *translate;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetTranslateX(HSD_JObj* jobj, f32 x)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 932, "jobj"));
jobj->translate.x = x;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetTranslateY(HSD_JObj* jobj, f32 y)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 947, "jobj"));
jobj->translate.y = y;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjSetTranslateZ(HSD_JObj* jobj, f32 z)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 962, "jobj"));
jobj->translate.z = z;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjGetTranslation(HSD_JObj* jobj, Vec3* translate)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 979, "jobj"));
((translate) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 980, "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", 979, "jobj"));
*translate = jobj->translate;
}
static inline f32 HSD_JObjGetTranslationX(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 993, "jobj"));
return jobj->translate.x;
}
static inline f32 HSD_JObjGetTranslationY(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1006, "jobj"));
return jobj->translate.y;
}
static inline float HSD_JObjGetTranslationZ(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1019, "jobj"));
return jobj->translate.z;
}
static inline void HSD_JObjAddRotationX(HSD_JObj* jobj, float x)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1029, "jobj"));
jobj->rotate.x += x;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjAddRotationY(HSD_JObj* jobj, float y)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1041, "jobj"));
jobj->rotate.y += y;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !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", 1053, "jobj"));
jobj->rotate.z += z;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjAddScaleX(HSD_JObj* jobj, float x)
{
// ((jobj) ? ((void) 0) : __assert("jobj.h", 1065, "jobj"));
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1065, "jobj"));
jobj->scale.x += x;
// if (!(jobj->flags & (1 << 25))) {
if (!(jobj->flags & (1 << 25))) {
// { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
// HSD_JObjSetMtxDirtySub(jobj); } };
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjAddScaleY(HSD_JObj* jobj, float y)
{
// ((jobj) ? ((void) 0) : __assert("jobj.h", 1077, "jobj"));
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1077, "jobj"));
jobj->scale.y += y;
// if (!(jobj->flags & (1 << 25))) {
if (!(jobj->flags & (1 << 25))) {
// { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
// HSD_JObjSetMtxDirtySub(jobj); } };
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjAddScaleZ(HSD_JObj* jobj, float z)
{
// ((jobj) ? ((void) 0) : __assert("jobj.h", 1089, "jobj"));
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1089, "jobj"));
jobj->scale.z += z;
// if (!(jobj->flags & (1 << 25))) {
if (!(jobj->flags & (1 << 25))) {
// { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
// HSD_JObjSetMtxDirtySub(jobj); } };
{ if (jobj != ((void*) 0) && !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", 1102, "jobj"));
jobj->translate.x += x;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !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", 1114, "jobj"));
jobj->translate.y += y;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
static inline void HSD_JObjAddTranslationZ(HSD_JObj* jobj, float z)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1126, "jobj"));
jobj->translate.z += z;
if (!(jobj->flags & (1 << 25))) {
{ if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) { HSD_JObjSetMtxDirtySub(jobj); } };
}
}
/// @todo This is inlined into lbcoll, and linker deduplication
/// only kept that definition.
/// Rename it back to HSD_JObjSetupMatrix once lbcoll is matched.
void lbColl_JObjSetupMatrix(HSD_JObj*);
static inline MtxPtr HSD_JObjGetMtxPtr(HSD_JObj* jobj)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1144, "jobj"));
lbColl_JObjSetupMatrix(jobj);
return jobj->mtx;
}
static inline void HSD_JObjCopyMtx(HSD_JObj* jobj, Mtx mtx)
{
((jobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1170, "jobj"));
((mtx) ? ((void) 0) : __assert("src/sysdolphin/baselib/jobj.h", 1171, "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 != ((void*) 0)) {
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);
#define SYSDOLPHIN_BASELIB_LOBJ_H
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)))
inline u8 HSD_LObjGetPriority(HSD_LObj* lobj)
{
((lobj) ? ((void) 0) : __assert("src/sysdolphin/baselib/lobj.h", 367, "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 == ((void*) 0)) {
return ((void*) 0);
} else {
return lobj->next;
}
}
#define _random_h_
s32 HSD_Rand(void);
f32 HSD_Randf(void);
s32 HSD_Randi(s32 max_val);
void _HSD_RandForgetMemory(void* low, void* high);
#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;
#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj))
/// @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 bool ftGetGroundAir(Fighter* fp)
{
return fp->ground_or_air;
}
static inline float stickGetDir(float x1, float x2)
{
if (x1 < x2) {
return -x1;
} else {
return x1;
}
}
/// used for all fighters except Kirby and Purin
static inline void Fighter_OnItemPickup(Fighter_GObj* gobj, bool catchItemFlag,
bool bool2, bool bool3)
{
Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
if (!it_8026B2B4(fp->item_gobj)) {
switch (it_8026B320(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;
}
if (catchItemFlag) {
ftAnim_80070C48(gobj, bool3);
}
}
}
static inline void Fighter_OnItemInvisible(Fighter_GObj* gobj, bool flag)
{
Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
if (!it_8026B2B4(fp->item_gobj)) {
ftAnim_80070CC4(gobj, flag);
}
}
static inline void Fighter_OnItemVisible(Fighter_GObj* gobj, bool flag)
{
Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
if (!it_8026B2B4(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 = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
fp->cmd_vars[0] = 0;
}
static inline CollData* Fighter_GetCollData(Fighter* fp)
{
return &fp->coll_data;
}
/// @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;
}
}
/// Ternary macro for fcmpo-based facing direction check
#define CLIFFCATCH_O(fp) ((fp)->facing_dir < 0.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
/// Ternary macro for fcmpu-based facing direction check
#define CLIFFCATCH_U(fp) ((fp)->facing_dir != 1.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
/// @todo Fix naming.
#define gmScriptEventCast(p_event, type) ((type*) p_event)
#define gmScriptEventUpdatePtr(event, type) (event = (void*) ((uintptr_t) event + (sizeof(type))))
inline ftCmdScript* getCmdScript(Fighter* fp)
{
return &fp->x3E4_fighterCmdScript;
}
/* 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_UnkProcessDeath_80068354(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 S_TEMP1* argdata);
/* 068E40 */ u32 Fighter_NewSpawn_80068E40(void);
/* 068E64 */ void Fighter_80068E64(Fighter_GObj* gobj);
/* 068E98 */ Fighter_GObj* Fighter_Create(struct S_TEMP1* input);
/* 0693AC */ void Fighter_ChangeMotionState(Fighter_GObj* gobj,
FtMotionId msid, MotionFlags flags,
float anim_start, float anim_speed,
float anim_blend,
Fighter_GObj* arg3);
/* 06A1BC */ void Fighter_8006A1BC(Fighter_GObj* gobj);
/* 06A360 */ void Fighter_8006A360(Fighter_GObj* gobj);
/* 06ABA0 */ void Fighter_8006ABA0(Fighter_GObj* gobj);
/* 06ABEC */ void Fighter_UnkIncrementCounters_8006ABEC(Fighter_GObj* gobj);
/* 06AD10 */ void Fighter_Spaghetti_8006AD10(Fighter_GObj* gobj);
/* 06B82C */ void Fighter_procUpdate(Fighter_GObj* gobj);
/* 06C0F0 */ void Fighter_UnkApplyTransformation_8006C0F0(Fighter_GObj* gobj);
/* 06C27C */ void Fighter_8006C27C(Fighter_GObj* gobj);
/* 06C5F4 */ void Fighter_8006C5F4(Fighter_GObj* gobj);
/* 06C624 */ void Fighter_CallAcessoryCallbacks_8006C624(Fighter_GObj* gobj);
/* 06C80C */ void Fighter_8006C80C(Fighter_GObj* gobj);
/* 06CA5C */ void Fighter_UnkProcessGrab_8006CA5C(Fighter_GObj* gobj);
/* 06CB94 */ void Fighter_8006CB94(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, s32 arg2);
/* 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_UnkProcessShieldHit_8006D1EC(Fighter_GObj* gobj);
/* 06D9AC */ void Fighter_8006D9AC(Fighter_GObj* gobj);
/* 06D9EC */ void Fighter_UnkCallCameraCallback_8006D9EC(Fighter_GObj* gobj);
/* 06DA4C */ void Fighter_8006DA4C(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;
/* 4598B8 */ extern ftData* gFtDataList[FTKIND_MAX];
/* 4D64FC */ extern M2C_UNK Fighter_804D64FC;
/* 4D6500 */ extern M2C_UNK Fighter_804D6500;
/* 4D6504 */ extern HSD_Joint* Fighter_804D6504;
/* 4D6508 */ extern u8* Fighter_804D6508;
/* 4D650C */ extern u8* Fighter_804D650C;
/* 4D6510 */ extern M2C_UNK Fighter_804D6510;
/* 4D6514 */ extern M2C_UNK Fighter_804D6514;
/* 4D6518 */ extern M2C_UNK Fighter_804D6518;
/* 4D651C */ extern M2C_UNK Fighter_804D651C;
/* 4D6520 */ extern M2C_UNK Fighter_804D6520;
/* 4D6524 */ extern float* Fighter_804D6524;
/* 4D6528 */ extern M2C_UNK Fighter_804D6528;
/* 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;
/* 4D6540 */ extern int** Fighter_804D6540;
/* 4D6544 */ extern FighterPartsTable** ftPartsTable;
/* 4D6548 */ extern M2C_UNK Fighter_804D6548;
/* 4D654C */ extern M2C_UNK Fighter_804D654C;
/* 4D6550 */ extern int** Fighter_804D6550;
/* 4D6554 */ extern ftCommonData* p_ftCommonData;
#define GALE01_0D14E4
/* 0D14E4 */ int Fighter_SuperMushroomApply(ftCo_GObj* gobj);
/* 0D15D0 */ void ftCo_800D15D0(Fighter_GObj*);
/* 0D170C */ void ftCo_800D170C(ftCo_GObj* gobj);
/* 0D1868 */ void ftCo_KinokoGiantStart_Anim(ftCo_GObj* gobj);
/* 0D18A4 */ void ftCo_KinokoGiantStart_Coll(ftCo_GObj* gobj);
/* 0D18CC */ void ftCo_800D18CC(Fighter_GObj*);
/* 0D19BC */ void fn_800D19BC(Fighter_GObj*);
/* 0D1A28 */ void ftCo_KinokoGiantStartAir_Anim(ftCo_GObj* gobj);
/* 0D1A64 */ void ftCo_KinokoGiantStartAir_Coll(ftCo_GObj* gobj);
/* 0D1A8C */ int Fighter_SuperMushroomEnd(ftCo_GObj* gobj);
/* 0D1B04 */ void ftCo_800D1B04(Fighter_GObj*);
/* 0D1BA0 */ void ftCo_800D1BA0(Fighter_GObj*, int);
/* 0D1CAC */ void ftCo_KinokoGiantEnd_Anim(ftCo_GObj* gobj);
/* 0D1CE8 */ void ftCo_KinokoGiantEnd_Coll(ftCo_GObj* gobj);
/* 0D1D10 */ void ftCo_800D1D10(Fighter_GObj*, int);
/* 0D1DB0 */ void fn_800D1DB0(Fighter_GObj*);
/* 0D1E1C */ void ftCo_KinokoGiantEndAir_Anim(ftCo_GObj* gobj);
/* 0D1E58 */ void ftCo_KinokoGiantEndAir_Coll(ftCo_GObj* gobj);
/* 0D1E80 */ bool Fighter_PoisonMushroomApply(ftCo_GObj* gobj);
/* 0D1F6C */ void ftCo_800D1F6C(Fighter_GObj*);
/* 0D1FFC */ void ftCo_800D1FFC(Fighter_GObj*);
/* 0D2158 */ void ftCo_KinokoSmallStart_Anim(ftCo_GObj* gobj);
/* 0D2194 */ void ftCo_KinokoSmallStart_Coll(ftCo_GObj* gobj);
/* 0D21BC */ void ftCo_800D21BC(Fighter_GObj*);
/* 0D22AC */ void fn_800D22AC(Fighter_GObj* gobj);
/* 0D2318 */ void ftCo_KinokoSmallStartAir_Anim(ftCo_GObj* gobj);
/* 0D2354 */ void ftCo_KinokoSmallStartAir_Coll(ftCo_GObj* gobj);
/* 0D237C */ bool Fighter_PoisonMushroomEnd(ftCo_GObj* gobj);
/* 0D23F4 */ void ftCo_800D23F4(Fighter_GObj*);
/* 0D2490 */ void ftCo_800D2490(Fighter_GObj*, int);
/* 0D259C */ void ftCo_KinokoSmallEnd_Anim(ftCo_GObj* gobj);
/* 0D25D8 */ void ftCo_KinokoSmallEnd_Coll(ftCo_GObj* gobj);
/* 0D2600 */ void ftCo_800D2600(Fighter_GObj*, int);
/* 0D26A0 */ void fn_800D26A0(Fighter_GObj* gobj);
/* 0D270C */ void ftCo_KinokoSmallEndAir_Anim(ftCo_GObj* gobj);
/* 0D2748 */ void ftCo_KinokoSmallEndAir_Coll(ftCo_GObj* gobj);
/* 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*);
/* 0D2D50 */ void ft_800D2D50(Fighter_GObj*);
/* 0D2DD0 */ void ftCo_ItemScrew_Anim(ftCo_GObj* gobj);
/* 0D2E0C */ void ftCo_ItemScrew_IASA(ftCo_GObj* gobj);
/* 0D2E2C */ void ftCo_ItemScrew_Phys(ftCo_GObj* gobj);
/* 0D2E4C */ void ftCo_ItemScrew_Coll(ftCo_GObj* gobj);
/* 0D2E7C */ void ft_800D2E7C(Fighter_GObj*, Vec3*);
/* 0D2EF8 */ void ftCo_ItemScrewAir_Anim(ftCo_GObj* gobj);
/* 0D2F34 */ void ftCo_ItemScrewAir_IASA(ftCo_GObj* gobj);
/* 0D2F54 */ void ftCo_ItemScrewAir_Phys(ftCo_GObj* gobj);
/* 0D2F74 */ void ftCo_ItemScrewAir_Coll(ftCo_GObj* gobj);
/* 0D2FA4 */ bool ftCo_800D2FA4(ftCo_GObj* gobj);
/* 0D3004 */ void ftCo_800D3004(Fighter_GObj*);
/* 0D30C0 */ void ftCo_DamageScrew_Anim(ftCo_GObj* gobj);
/* 0D30FC */ void ftCo_DamageScrew_IASA(ftCo_GObj* gobj);
/* 0D3100 */ void ftCo_DamageScrew_Phys(ftCo_GObj* gobj);
/* 0D3120 */ void ftCo_DamageScrew_Coll(ftCo_GObj* gobj);
/* 0D3158 */ bool ftCo_800D3158(ftCo_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(ftCo_GObj* gobj);
/* 0D394C */ void ftCo_DeadLeft_Cam(ftCo_GObj* gobj);
/* 0D3950 */ void ftCo_800D3950(Fighter_GObj*);
/* 0D3B88 */ void ftCo_DeadRight_Anim(ftCo_GObj* gobj);
/* 0D3BC4 */ void ftCo_DeadRight_Cam(ftCo_GObj* gobj);
/* 0D3BC8 */ void ftCo_800D3BC8(Fighter_GObj*);
/* 0D3E00 */ void ftCo_DeadDown_Anim(ftCo_GObj* gobj);
/* 0D3E3C */ void ftCo_DeadDown_Cam(ftCo_GObj* gobj);
/* 0D3E40 */ void ftCo_800D3E40(Fighter_GObj*);
/* 0D4078 */ void ftCo_DeadUp_Anim(ftCo_GObj* gobj);
/* 0D40B4 */ void ftCo_DeadUp_Cam(ftCo_GObj* gobj);
/* 0D40B8 */ void ftCo_800D40B8(Fighter_GObj*);
/* 0D41C4 */ void ftCo_800D41C4(Fighter_GObj*);
/* 0D42E4 */ void ftCo_DeadUpStar_Anim(ftCo_GObj* gobj);
/* 0D4560 */ void ftCo_DeadUpStar_Cam(ftCo_GObj* gobj);
/* 0D4580 */ void ftCo_800D4580(Fighter_GObj*, int);
/* 0D4780 */ void ftCo_800D4780(Fighter_GObj*);
/* 0D47B8 */ void ftCo_800D47B8(Fighter_GObj*);
/* 0D481C */ M2C_UNK ftCo_800D481C();
/* 0D4A08 */ void ftCo_DeadUpFall_Anim(ftCo_GObj* gobj);
/* 0D4CE8 */ void ftCo_DeadUpFall_Phys(ftCo_GObj* gobj);
/* 0D4E30 */ void ftCo_DeadUpFall_Cam(ftCo_GObj* gobj);
/* 0D4E50 */ void ftCo_800D4E50(Fighter*, Vec3*, int, float);
/* 0D4F24 */ void ftCo_800D4F24(ftCo_GObj* gobj, int index);
/* 0D4FF4 */ void ftCo_800D4FF4(ftCo_GObj* gobj);
/* 0D52F8 */ void ftCo_Rebirth_Anim(ftCo_GObj* gobj);
/* 0D5358 */ void ftCo_Rebirth_IASA(ftCo_GObj* gobj);
/* 0D535C */ void ftCo_Rebirth_Phys(ftCo_GObj* gobj);
/* 0D5470 */ void ftCo_Rebirth_Coll(ftCo_GObj* gobj);
/* 0D5600 */ M2C_UNK ftCo_800D5600();
/* 0D56EC */ void ftCo_RebirthWait_Anim(ftCo_GObj* gobj);
/* 0D575C */ void ftCo_RebirthWait_IASA(ftCo_GObj* gobj);
/* 0D58F4 */ void ftCo_RebirthWait_Phys(ftCo_GObj* gobj);
/* 0D5A08 */ void ftCo_RebirthWait_Coll(ftCo_GObj* gobj);
/* 0D5A6C */ void ftCo_Rebirth_Cam(ftCo_GObj* gobj);
/* 0D5AEC */ void ftCo_800D5AEC(ftCo_GObj* gobj, enum_t, int, int, float,
float);
/* 0D5BF8 */ void ftCo_800D5BF8(ftCo_GObj* gobj);
/* 0D5C54 */ M2C_UNK ft_800D5C54();
/* 0D5CB0 */ void ftCo_800D5CB0(ftCo_GObj*, bool, float landing_lag);
/* 0D5D3C */ void ftCo_Landing_Anim(ftCo_GObj* gobj);
/* 0D5D78 */ void ftCo_Landing_IASA(ftCo_GObj* gobj);
/* 0D5F18 */ void ftCo_Landing_Phys(ftCo_GObj* gobj);
/* 0D5F38 */ void ftCo_Landing_Coll(ftCo_GObj* gobj);
/* 0D5F58 */ bool ftCo_Squat_CheckInput(ftCo_GObj* gobj);
/* 0D5FB0 */ bool ftCo_800D5FB0(ftCo_GObj* gobj);
/* 0D607C */ void ftCo_Squat_Anim(ftCo_GObj* gobj);
/* 0D60B8 */ void ftCo_Squat_IASA(ftCo_GObj* gobj);
/* 0D623C */ void ftCo_Squat_Phys(ftCo_GObj* gobj);
/* 0D625C */ void ftCo_Squat_Coll(ftCo_GObj* gobj);
/* 0D638C */ void ftCo_800D638C(ftCo_GObj* gobj);
/* 0D6448 */ void ftCo_SquatWait_Anim(ftCo_GObj* gobj);
/* 0D6474 */ void ftCo_SquatWait_IASA(ftCo_GObj* gobj);
/* 0D6584 */ void ftCo_SquatWait_Phys(ftCo_GObj* gobj);
/* 0D65B8 */ void ftCo_SquatWait_Coll(ftCo_GObj* gobj);
/* 0D6658 */ void ftCo_SquatRv_Anim(ftCo_GObj* gobj);
/* 0D6694 */ void ftCo_SquatRv_IASA(ftCo_GObj* gobj);
/* 0D6784 */ void ftCo_SquatRv_Phys(ftCo_GObj* gobj);
/* 0D67A4 */ void ftCo_SquatRv_Coll(ftCo_GObj* gobj);
/* 0D67C4 */ s32 ftCo_800D67C4(Fighter*);
/* 0D6824 */ bool ftCo_800D6824(ftCo_GObj* gobj);
/* 0D688C */ s32 ftCo_800D688C(Fighter*);
/* 0D68C0 */ bool ftCo_800D68C0(ftCo_GObj* gobj);
/* 0D6928 */ s32 ftCo_800D6928(Fighter*);
/* 0D695C */ bool ftCo_Attack100_CheckInput(ftCo_GObj* gobj);
/* 0D69C4 */ bool ftCo_800D69C4(ftCo_GObj* gobj);
/* 0D6A50 */ bool ftCo_Attack_800D6A50(ftCo_GObj* gobj);
/* 0D6B00 */ void ftCo_800D6B00(ftCo_GObj*, s32);
/* 0D6C0C */ void ftCo_Attack100Start_Anim(ftCo_GObj* gobj);
/* 0D6C60 */ void ftCo_800D6C60(ftCo_GObj*, HSD_GObjEvent callback);
/* 0D6D48 */ void ftCo_Attack100Loop_Anim(ftCo_GObj* gobj);
/* 0D6E34 */ void ftCo_Attack100End_Anim(ftCo_GObj* gobj);
/* 0D6E70 */ void ftCo_Attack100Loop_IASA(ftCo_GObj* gobj);
/* 0D6E98 */ void ftCo_Attack100Start_Phys(ftCo_GObj* gobj);
/* 0D6EB8 */ void ftCo_Attack100Loop_Phys(ftCo_GObj* gobj);
/* 0D6ED8 */ void ftCo_Attack100End_Phys(ftCo_GObj* gobj);
/* 0D6EF8 */ void ftCo_Attack100Start_Coll(ftCo_GObj* gobj);
/* 0D6F18 */ void ftCo_Attack100Loop_Coll(ftCo_GObj* gobj);
/* 0D6F38 */ void ftCo_Attack100End_Coll(ftCo_GObj* gobj);
/* 0D705C */ bool ftCo_800D705C(ftCo_GObj* gobj);
/* 0D7100 */ bool ftCo_800D7100(ftCo_GObj* gobj);
/* 0D71D8 */ void ftCo_800D71D8(ftCo_GObj* gobj);
/* 0D7268 */ M2C_UNK ftCo_800D7268();
/* 0D72A0 */ M2C_UNK ftCo_800D72A0();
/* 0D730C */ M2C_UNK ftCo_800D730C();
/* 0D74A4 */ M2C_UNK ftCo_800D74A4();
/* 0D7590 */ void ftCo_JumpAerialF1_Anim(ftCo_GObj* gobj);
/* 0D7614 */ void ftCo_JumpAerialF1_IASA(ftCo_GObj* gobj);
/* 0D7634 */ void ftCo_JumpAerialF1_Phys(ftCo_GObj* gobj);
/* 0D767C */ void ftCo_JumpAerialF1_Coll(ftCo_GObj* gobj);
/* 0D76B8 */ M2C_UNK ft_800D76B8();
/* 0D7770 */ M2C_UNK ft_800D7770();
/* 0D79AC */ void ftCo_ItemScopeStart_Anim(ftCo_GObj* gobj);
/* 0D79B0 */ void ftCo_ItemScopeAirStart_Anim(ftCo_GObj* gobj);
/* 0D7AEC */ void ftCo_ItemScopeStart_IASA(ftCo_GObj* gobj);
/* 0D7B1C */ void ftCo_ItemScopeAirStart_IASA(ftCo_GObj* gobj);
/* 0D7B4C */ void ftCo_ItemScopeStart_Phys(ftCo_GObj* gobj);
/* 0D7B6C */ void ftCo_ItemScopeAirStart_Phys(ftCo_GObj* gobj);
/* 0D7B8C */ void ftCo_ItemScopeStart_Coll(ftCo_GObj* gobj);
/* 0D7BB4 */ void ftCo_ItemScopeAirStart_Coll(ftCo_GObj* gobj);
/* 0D7DFC */ void ftCo_ItemScopeRapid_Anim(ftCo_GObj* gobj);
/* 0D7F10 */ void ftCo_ItemScopeAirRapid_Anim(ftCo_GObj* gobj);
/* 0D8024 */ void ftCo_ItemScopeRapid_IASA(ftCo_GObj* gobj);
/* 0D8044 */ void ftCo_ItemScopeAirRapid_IASA(ftCo_GObj* gobj);
/* 0D8064 */ void ftCo_ItemScopeRapid_Phys(ftCo_GObj* gobj);
/* 0D8084 */ void ftCo_ItemScopeAirRapid_Phys(ftCo_GObj* gobj);
/* 0D80A4 */ void ftCo_ItemScopeRapid_Coll(ftCo_GObj* gobj);
/* 0D80CC */ void ftCo_ItemScopeAirRapid_Coll(ftCo_GObj* gobj);
/* 0D83AC */ void ftCo_ItemScopeFire_Anim(ftCo_GObj* gobj);
/* 0D83F4 */ void ftCo_ItemScopeAirFire_Anim(ftCo_GObj* gobj);
/* 0D843C */ void ftCo_ItemScopeFire_IASA(ftCo_GObj* gobj);
/* 0D8440 */ void ftCo_ItemScopeAirFire_IASA(ftCo_GObj* gobj);
/* 0D8444 */ void ftCo_ItemScopeFire_Phys(ftCo_GObj* gobj);
/* 0D8464 */ void ftCo_ItemScopeAirFire_Phys(ftCo_GObj* gobj);
/* 0D8484 */ void ftCo_ItemScopeFire_Coll(ftCo_GObj* gobj);
/* 0D84AC */ void ftCo_ItemScopeAirFire_Coll(ftCo_GObj* gobj);
/* 0D88B8 */ void ftCo_ItemScopeEnd_Anim(ftCo_GObj* gobj);
/* 0D88D8 */ void ftCo_ItemScopeAirEnd_Anim(ftCo_GObj* gobj);
/* 0D88F8 */ void ftCo_ItemScopeEnd_IASA(ftCo_GObj* gobj);
/* 0D88FC */ void ftCo_ItemScopeAirEnd_IASA(ftCo_GObj* gobj);
/* 0D8900 */ void ftCo_ItemScopeEnd_Phys(ftCo_GObj* gobj);
/* 0D8920 */ void ftCo_ItemScopeAirEnd_Phys(ftCo_GObj* gobj);
/* 0D8940 */ void ftCo_ItemScopeEnd_Coll(ftCo_GObj* gobj);
/* 0D8968 */ void ftCo_ItemScopeAirEnd_Coll(ftCo_GObj* gobj);
/* 0D8990 */ bool ftCo_Catch_CheckInput(ftCo_GObj* gobj);
/* 0D8A38 */ M2C_UNK ftCo_800D8A38();
/* 0D8AE0 */ bool ftCo_800D8AE0(ftCo_GObj* gobj);
/* 0D8B9C */ bool ftCo_800D8B9C(ftCo_GObj* gobj);
/* 0D8C54 */ M2C_UNK ftCo_800D8C54();
/* 0D8CC8 */ void ftCo_Catch_Anim(ftCo_GObj* gobj);
/* 0D8D24 */ void ftCo_CatchDash_Anim(ftCo_GObj* gobj);
/* 0D8D80 */ void ftCo_Catch_IASA(ftCo_GObj* gobj);
/* 0D8D84 */ void ftCo_CatchDash_IASA(ftCo_GObj* gobj);
/* 0D8D88 */ void ftCo_Catch_Phys(ftCo_GObj* gobj);
/* 0D8DD0 */ void ftCo_CatchDash_Phys(ftCo_GObj* gobj);
/* 0D8E08 */ void ftCo_Catch_Coll(ftCo_GObj* gobj);
/* 0D8E6C */ void ftCo_CatchDash_Coll(ftCo_GObj* gobj);
/* 0D8EC8 */ bool fn_800D8EC8(Fighter_GObj*);
/* 0D94D8 */ void ftCo_800D94D8(ftCo_GObj* gobj);
/* 0D9558 */ bool fn_800D9558(Fighter_GObj*);
/* 0D9C98 */ void ftCo_800D9C98(ftCo_GObj* gobj);
/* 0D9E80 */ void ftCo_CatchPull_Anim(ftCo_GObj* gobj);
/* 0D9F90 */ void ftCo_CatchPull_IASA(ftCo_GObj* gobj);
/* 0D9F94 */ void ftCo_CatchPull_Phys(ftCo_GObj* gobj);
/* 0D9FDC */ void ftCo_CatchPull_Coll(ftCo_GObj* gobj);
/* 0DA2B0 */ void fn_800DA2B0(Fighter_GObj*);
/* 0DA318 */ void ftCo_CatchWait_Anim(ftCo_GObj* gobj);
/* 0DA31C */ void ftCo_CatchWait_IASA(ftCo_GObj* gobj);
/* 0DA3D0 */ void ftCo_CatchWait_Phys(ftCo_GObj* gobj);
/* 0DA418 */ void ftCo_CatchWait_Coll(ftCo_GObj* gobj);
/* 0DA490 */ void fn_800DA490(Fighter_GObj* gobj);
/* 0DA568 */ void ftCo_CatchAttack_Anim(ftCo_GObj* gobj);
/* 0DA5A4 */ void ftCo_CatchAttack_IASA(ftCo_GObj* gobj);
/* 0DA5A8 */ void ftCo_CatchAttack_Phys(ftCo_GObj* gobj);
/* 0DA5F0 */ void ftCo_CatchAttack_Coll(ftCo_GObj* gobj);
/* 0DA668 */ void fn_800DA668(Fighter_GObj* gobj);
/* 0DA698 */ void ftCo_800DA698(ftCo_GObj* gobj, bool);
/* 0DA744 */ void ftCo_CatchCut_Anim(ftCo_GObj* gobj);
/* 0DA780 */ void ftCo_CatchCut_IASA(ftCo_GObj* gobj);
/* 0DA784 */ void ftCo_CatchCut_Phys(ftCo_GObj* gobj);
/* 0DA7E4 */ void ftCo_CatchCut_Coll(ftCo_GObj* gobj);
/* 0DA824 */ float ftCo_800DA824(Fighter*);
/* 0DAC70 */ void ftCo_CapturePulledHi_Anim(ftCo_GObj* gobj);
/* 0DAC74 */ void ftCo_CapturePulledHi_IASA(ftCo_GObj* gobj);
/* 0DADE8 */ void ftCo_CapturePulledHi_Phys(ftCo_GObj* gobj);
/* 0DAE94 */ void ftCo_CapturePulledHi_Coll(ftCo_GObj* gobj);
/* 0DB004 */ void ftCo_CapturePulledLw_Anim(ftCo_GObj* gobj);
/* 0DB008 */ void ftCo_CapturePulledLw_IASA(ftCo_GObj* gobj);
/* 0DB00C */ void ftCo_CapturePulledLw_Phys(ftCo_GObj* gobj);
/* 0DB1F8 */ void ftCo_CapturePulledLw_Coll(ftCo_GObj* gobj);
/* 0DB368 */ void ftCo_800DB368(Fighter*, Fighter*);
/* 0DB464 */ void ftCo_800DB464(ftCo_GObj* gobj);
/* 0DB500 */ M2C_UNK ftCo_800DB500();
/* 0DB790 */ void fn_800DB790(Fighter_GObj*);
/* 0DB8A4 */ void fn_800DB8A4(Fighter_GObj*);
/* 0DB908 */ void ftCo_CaptureWaitHi_Anim(ftCo_GObj* gobj);
/* 0DBA4C */ void ftCo_CaptureWaitHi_IASA(ftCo_GObj* gobj);
/* 0DBA6C */ void ftCo_CaptureWaitHi_Phys(ftCo_GObj* gobj);
/* 0DBA8C */ void ftCo_CaptureWaitHi_Coll(ftCo_GObj* gobj);
/* 0DBAE4 */ void fn_800DBAE4(Fighter_GObj*);
/* 0DBD10 */ void ftCo_CaptureWaitLw_Anim(ftCo_GObj* gobj);
/* 0DBD30 */ void ftCo_CaptureWaitLw_IASA(ftCo_GObj* gobj);
/* 0DBD50 */ void ftCo_CaptureWaitLw_Phys(ftCo_GObj* gobj);
/* 0DBE9C */ void ftCo_CaptureWaitLw_Coll(ftCo_GObj* gobj);
/* 0DC014 */ void fn_800DC014(Fighter_GObj*);
/* 0DC110 */ void ftCo_CaptureJump_Anim(ftCo_GObj* gobj);
/* 0DC160 */ void ftCo_CaptureJump_IASA(ftCo_GObj* gobj);
/* 0DC224 */ void ftCo_CaptureJump_Phys(ftCo_GObj* gobj);
/* 0DC264 */ void ftCo_CaptureJump_Coll(ftCo_GObj* gobj);
/* 0DC284 */ void ftCo_800DC284(ftCo_GObj* gobj);
/* 0DC2E4 */ void ftCo_CaptureDamageHi_Anim(ftCo_GObj* gobj);
/* 0DC328 */ void ftCo_CaptureDamageHi_IASA(ftCo_GObj* gobj);
/* 0DC32C */ void ftCo_CaptureDamageHi_Phys(ftCo_GObj* gobj);
/* 0DC34C */ void ftCo_CaptureDamageHi_Coll(ftCo_GObj* gobj);
/* 0DC3A4 */ void ftCo_800DC3A4(ftCo_GObj* gobj);
/* 0DC468 */ void ftCo_CaptureDamageLw_Anim(ftCo_GObj* gobj);
/* 0DC4AC */ void ftCo_CaptureDamageLw_IASA(ftCo_GObj* gobj);
/* 0DC4B0 */ void ftCo_CaptureDamageLw_Phys(ftCo_GObj* gobj);
/* 0DC5EC */ void ftCo_CaptureDamageLw_Coll(ftCo_GObj* gobj);
/* 0DC750 */ void ftCo_800DC750(ftCo_GObj* gobj);
/* 0DC7F0 */ void ftCo_CaptureCut_Anim(ftCo_GObj* gobj);
/* 0DC82C */ void ftCo_CaptureCut_IASA(ftCo_GObj* gobj);
/* 0DC830 */ void ftCo_CaptureCut_Phys(ftCo_GObj* gobj);
/* 0DC890 */ void ftCo_CaptureCut_Coll(ftCo_GObj* gobj);
/* 0DC920 */ void ftCo_800DC920(ftCo_GObj*, ftCo_GObj* gobj);
/* 0DCE34 */ void ftCo_800DCE34(ftCo_GObj* gobj0, ftCo_GObj* gobj1);
/* 0DCFD4 */ void ftCo_800DCFD4(ftCo_GObj* gobj);
/* 0DD100 */ void ftCo_800DD100(Fighter_GObj*);
/* 0DD168 */ void ftCo_800DD168(ftCo_GObj* gobj);
/* 0DD1E4 */ M2C_UNK ftCo_800DD1E4();
/* 0DD398 */ M2C_UNK ftCo_800DD398();
/* 0DD4B0 */ M2C_UNK ftCo_800DD4B0();
/* 0DD724 */ void ftCo_800DD724(ftCo_GObj* gobj);
/* 0DD8C4 */ void ftCo_ThrowF_Anim(ftCo_GObj* gobj);
/* 0DD92C */ void ftCo_ThrowF_IASA(ftCo_GObj* gobj);
/* 0DD930 */ void ftCo_ThrowF_Phys(ftCo_GObj* gobj);
/* 0DD990 */ void ftCo_ThrowF_Coll(ftCo_GObj* gobj);
/* 0DDA10 */ void ftCo_ThrowB_Anim(ftCo_GObj* gobj);
/* 0DDA5C */ void ftCo_ThrowB_IASA(ftCo_GObj* gobj);
/* 0DDA60 */ void ftCo_ThrowB_Phys(ftCo_GObj* gobj);
/* 0DDAC0 */ void ftCo_ThrowB_Coll(ftCo_GObj* gobj);
/* 0DDB40 */ void ftCo_ThrowHi_Anim(ftCo_GObj* gobj);
/* 0DDB8C */ void ftCo_ThrowHi_IASA(ftCo_GObj* gobj);
/* 0DDB90 */ void ftCo_ThrowHi_Phys(ftCo_GObj* gobj);
/* 0DDBF0 */ void ftCo_ThrowHi_Coll(ftCo_GObj* gobj);
/* 0DDC70 */ void ftCo_ThrowHi_Cam(ftCo_GObj* gobj);
/* 0DDCB4 */ void ftCo_ThrowLw_Anim(ftCo_GObj* gobj);
/* 0DDD00 */ void ftCo_ThrowLw_IASA(ftCo_GObj* gobj);
/* 0DDD04 */ void ftCo_ThrowLw_Phys(ftCo_GObj* gobj);
/* 0DDD64 */ void ftCo_ThrowLw_Coll(ftCo_GObj* gobj);
/* 0DDDE4 */ M2C_UNK ftCo_800DDDE4();
/* 0DE2A8 */ void ftCo_800DE2A8(ftCo_GObj*, ftCo_GObj* gobj);
/* 0DE2CC */ M2C_UNK ftCo_800DE2CC();
/* 0DE2F0 */ void ftCo_800DE2F0(ftCo_GObj* gobj);
/* 0DE3FC */ bool ftCo_800DE3FC(ftCo_GObj* gobj, FtMotionId msid, float arg2);
/* 0DE508 */ void ftCo_800DE508(ftCo_GObj* gobj);
/* 0DE5A4 */ void ftCo_800DE5A4(Fighter_GObj*);
/* 0DE69C */ void ftCo_ThrownF_Anim(ftCo_GObj* gobj);
/* 0DE6BC */ void ftCo_ThrownF_IASA(ftCo_GObj* gobj);
/* 0DE6C0 */ void ftCo_ThrownF_Phys(ftCo_GObj* gobj);
/* 0DE6C4 */ void ftCo_ThrownF_Coll(ftCo_GObj* gobj);
/* 0DE6C8 */ void ftCo_ThrownB_Anim(ftCo_GObj* gobj);
/* 0DE6E8 */ void ftCo_ThrownB_IASA(ftCo_GObj* gobj);
/* 0DE6EC */ void ftCo_ThrownB_Phys(ftCo_GObj* gobj);
/* 0DE6F0 */ void ftCo_ThrownB_Coll(ftCo_GObj* gobj);
/* 0DE6F4 */ void ftCo_ThrownHi_Anim(ftCo_GObj* gobj);
/* 0DE714 */ void ftCo_ThrownHi_IASA(ftCo_GObj* gobj);
/* 0DE718 */ void ftCo_ThrownHi_Phys(ftCo_GObj* gobj);
/* 0DE71C */ void ftCo_ThrownHi_Coll(ftCo_GObj* gobj);
/* 0DE720 */ void ftCo_ThrownHi_Cam(ftCo_GObj* gobj);
/* 0DE76C */ void ftCo_ThrownLw_Anim(ftCo_GObj* gobj);
/* 0DE78C */ void ftCo_ThrownLw_IASA(ftCo_GObj* gobj);
/* 0DE790 */ void ftCo_ThrownLw_Phys(ftCo_GObj* gobj);
/* 0DE794 */ void ftCo_ThrownLw_Coll(ftCo_GObj* gobj);
/* 0DE7C0 */ void ftCo_800DE7C0(ftCo_GObj*, s32, s32);
/* 0DE854 */ void ftCo_800DE854(ftCo_GObj* gobj);
/* 0DE920 */ M2C_UNK ftCo_800DE920();
/* 0DE974 */ M2C_UNK ftCo_800DE974();
/* 0DE9B8 */ M2C_UNK ftCo_800DE9B8();
/* 0DE9D8 */ bool ftCo_800DE9D8(ftCo_GObj* gobj);
/* 0DEA28 */ M2C_UNK ftCo_800DEA28();
/* 0DEAE8 */ void ftCo_800DEAE8(ftCo_GObj* gobj, enum_t asid0, enum_t asid1);
/* 0DEBD0 */ M2C_UNK ftCo_800DEBD0();
/* 0DECF4 */ void ftCo_AppealS_Anim(ftCo_GObj* gobj);
/* 0DED30 */ void ftCo_AppealS_IASA(ftCo_GObj* gobj);
/* 0DEE44 */ void ftCo_AppealS_Phys(ftCo_GObj* gobj);
/* 0DEE64 */ void ftCo_AppealS_Coll(ftCo_GObj* gobj);
/* 0DEE84 */ void ftCo_800DEE84(int, u8, char*, u32, float, float);
/* 0DEEA8 */ void ftCo_800DEEA8(ftCo_GObj* gobj);
/* 0DEEB8 */ void ftCo_800DEEB8(void);
/* 0DEEE8 */ M2C_UNK ftCo_800DEEE8(ftCo_Fighter* fp, Vec2* shift);
/* 0DEF38 */ void ftCo_800DEF38(ftCo_GObj* gobj);
/* 0DF0D0 */ void ftCo_800DF0D0(ftCo_GObj* gobj);
/* 0DF1C8 */ bool ftCo_800DF1C8(ftCo_Fighter* fp);
/* 0DF21C */ bool ftCo_800DF21C(ftCo_Fighter* fp);
/* 0DF2D8 */ bool ftCo_800DF2D8(ftCo_Fighter* fp);
/* 0DF30C */ bool ftCo_800DF30C(ftCo_Fighter* fp);
/* 0DF3A8 */ bool ftCo_800DF3A8(ftCo_Fighter* fp);
/* 0DF3DC */ bool ftCo_800DF3DC(ftCo_Fighter* fp);
/* 0DF478 */ bool ftCo_800DF478(Fighter*);
/* 0DF50C */ bool ftCo_800DF50C(ftCo_Fighter* fp);
/* 0DF608 */ bool ftCo_800DF608(ftCo_Fighter* fp);
/* 0DF644 */ bool ftCo_800DF644(ftCo_Fighter* fp);
/* 0DF678 */ bool ftCo_800DF678(Fighter* fp);
/* 0DF6F8 */ bool ftCo_800DF6F8(ftCo_Fighter* fp);
/* 0DF72C */ bool ftCo_800DF72C(ftCo_Fighter* fp);
/* 0DF79C */ bool ftCo_800DF79C(ftCo_Fighter* fp);
/* 0DF7F4 */ M2C_UNK ftCo_800DF7F4();
/* 0DF844 */ M2C_UNK ftCo_800DF844();
/* 0DF878 */ M2C_UNK ftCo_800DF878();
/* 0DF8B0 */ bool ftCo_800DF8B0(ftCo_Fighter* fp);
/* 0DF8E8 */ bool ftCo_800DF8E8(ftCo_Fighter* fp);
/* 0DF910 */ M2C_UNK ftCo_800DF910();
#define GALE01_07C930
/* 07C930 */ void ftCommon_8007C930(ftCo_Fighter*, float);
/* 07C98C */ void ftCommon_8007C98C(ftCo_Fighter*, float vel, float,
float gr_friction);
/* 07CA80 */ void ftCommon_8007CA80(ftCo_Fighter* fp, float result, float,
float);
/* 07CADC */ void ftCommon_8007CADC(ftCo_Fighter*, float, float, float);
/* 07CB74 */ void ftCommon_8007CB74(ftCo_GObj*);
/* 07CC1C */ ftCo_GObj* ftCommon_8007CC1C(ftCo_GObj*);
/* 07CC78 */ void ftCommon_8007CC78(ftCo_Fighter*, float);
/* 07CCA0 */ void ftCommon_8007CCA0(ftCo_Fighter*, float);
/* 07CCE8 */ void ftCommon_8007CCE8(ftCo_Fighter*);
/* 07CD6C */ float ftCommon_8007CD6C(float, float decrement);
/* 07CDA4 */ float ftCommon_8007CDA4(ftCo_Fighter*);
/* 07CDF8 */ float ftCommon_8007CDF8(ftCo_Fighter*);
/* 07CE4C */ void ftCommon_8007CE4C(ftCo_Fighter*, float);
/* 07CE94 */ void ftCommon_8007CE94(ftCo_Fighter*, float);
/* 07CEF4 */ void ftCommon_8007CEF4(ftCo_Fighter*);
/* 07CF58 */ bool ftCommon_8007CF58(ftCo_Fighter*);
/* 07D050 */ bool ftCommon_8007D050(ftCo_Fighter*, float);
/* 07D140 */ void ftCommon_8007D140(ftCo_Fighter*, float, float, float);
/* 07D174 */ void ftCommon_8007D174(ftCo_Fighter*, float, float, float, float);
/* 07D268 */ void ftCommon_8007D268(ftCo_Fighter*);
/* 07D28C */ void ftCommon_8007D28C(ftCo_Fighter*, float);
/* 07D2E8 */ void ftCommon_8007D2E8(ftCo_Fighter*, float, float);
/* 07D344 */ void ftCommon_8007D344(ftCo_Fighter*, float, float, float);
/* 07D3A8 */ void ftCommon_8007D3A8(ftCo_Fighter*, float, float, float);
/* 07D440 */ void ftCommon_8007D440(ftCo_Fighter*, float);
/* 07D468 */ void ftCommon_8007D468(ftCo_Fighter*);
/* 07D494 */ void ftCommon_8007D494(ftCo_Fighter*, float, float);
/* 07D4B8 */ void ftCommon_8007D4B8(ftCo_Fighter*);
/* 07D4E4 */ void ftCommon_8007D4E4(ftCo_Fighter*);
/* 07D4F4 */ void ftCommon_ClampFallSpeed(ftCo_Fighter*, float);
/* 07D508 */ void ftCommon_8007D508(ftCo_Fighter*, float, float);
/* 07D528 */ bool ftCommon_8007D528(ftCo_Fighter*);
/* 07D5BC */ void ftCommon_8007D5BC(ftCo_Fighter*);
/* 07D5D4 */ void ftCommon_8007D5D4(ftCo_Fighter*);
/* 07D60C */ void ftCommon_8007D60C(ftCo_Fighter*);
/* 07D698 */ void ftCommon_8007D698(ftCo_Fighter*);
/* 07D6A4 */ void ftCommon_8007D6A4(ftCo_Fighter*);
/* 07D780 */ void ftCommon_8007D780(ftCo_Fighter*);
/* 07D7FC */ void ftCommon_8007D7FC(ftCo_Fighter*);
/* 07D92C */ void ftCommon_8007D92C(ftCo_GObj*);
/* 07D964 */ float ftCo_GetLStickAngle(ftCo_Fighter* fp);
/* 07D99C */ float ftCo_GetCStickAngle(ftCo_Fighter* fp);
/* 07D9D4 */ float ftCommon_8007D9D4(ftCo_Fighter*);
/* 07D9FC */ void ftCommon_8007D9FC(ftCo_Fighter*);
/* 07DA24 */ void ftCommon_8007DA24(ftCo_Fighter*);
/* 07DA74 */ float ftCommon_CalcHitlag(int dmg, FtMotionId msid, float mul);
/* 07DB24 */ void ftCommon_8007DB24(ftCo_GObj*);
/* 07DB58 */ void ftCommon_8007DB58(ftCo_GObj*);
/* 07DBCC */ void ftCommon_8007DBCC(ftCo_Fighter*, bool, float);
/* 07DC08 */ bool ftCommon_8007DC08(ftCo_Fighter*, float);
/* 07DD7C */ void ftCommon_8007DD7C(ftCo_GObj*, Vec3*);
/* 07DFD0 */ void ftCommon_8007DFD0(ftCo_GObj* gobj, Vec3* arg1);
/* 07E0E4 */ void ftCommon_8007E0E4(ftCo_GObj*);
/* 07E2A4 */ ftCo_GObj* ftCommon_8007E2A4(ftCo_GObj*);
/* 07E2D0 */ void ftCommon_8007E2D0(ftCo_Fighter*, s16, HSD_GObjEvent,
HSD_GObjEvent,
void (*)(ftCo_GObj*, ftCo_GObj*));
/* 07E2F4 */ void ftCommon_8007E2F4(ftCo_Fighter*, s16 val);
/* 07E2FC */ void ftCommon_8007E2FC(ftCo_GObj*);
/* 07E358 */ void ftCommon_8007E358(ftCo_GObj*);
/* 07E3EC */ void ftCommon_8007E3EC(ftCo_GObj*);
/* 07E5AC */ void ftCommon_8007E5AC(ftCo_Fighter*);
/* 07E620 */ void ftCommon_SetAccessory(ftCo_Fighter*, HSD_Joint*);
/* 07E690 */ void ftCommon_8007E690(ftCo_Fighter*, HSD_AnimJoint*);
/* 07E6DC */ void ftCommon_8007E6DC(ftCo_GObj*, ftCo_GObj* gobj, s32);
/* 07E79C */ void ftCommon_8007E79C(ftCo_GObj*, s32);
/* 07E7E4 */ void ftCommon_8007E7E4(ftCo_GObj*, s32);
/* 07E82C */ void ftCommon_8007E82C(ftCo_GObj*);
/* 07E83C */ void ftCommon_8007E83C(ftCo_GObj*, s32, float div);
/* 07E994 */ s32 ftGetParasolStatus(ftCo_GObj*);
/* 07EA90 */ void ftCommon_8007EA90(ftCo_Fighter*, s32);
/* 07EBAC */ void ftCommon_8007EBAC(ftCo_Fighter*, u32, u32);
/* 07EC30 */ void ftCommon_8007EC30(u32, u32);
/* 07ECD4 */ void ftCommon_8007ECD4(ftCo_Fighter*, s32);
/* 07ED2C */ void ftCommon_8007ED2C(ftCo_Fighter*);
/* 07ED50 */ void ftCommon_8007ED50(ftCo_Fighter*, s32);
/* 07EE0C */ void ftCommon_8007EE0C(ftCo_Fighter*, s32);
/* 07EEC8 */ void ftCommon_8007EEC8(ftCo_Fighter*, s32, s32);
/* 07EF5C */ void ftCommon_8007EF5C(ftCo_Fighter*, s32);
/* 07EFC0 */ void ftCommon_8007EFC0(ftCo_Fighter*, u32 val);
/* 07EFC8 */ void ftCommon_8007EFC8(ftCo_GObj*, void (*)(ftCo_GObj*));
/* 07F578 */ void ftCommon_8007F578(ftCo_GObj*);
/* 07F5CC */ void ftCommon_8007F5CC(ftCo_GObj*, s32);
/* 07F694 */ float ftCommon_GetModelScale(ftCo_Fighter*);
/* 07F6A4 */ void ftCommon_8007F6A4(ftCo_Fighter*, HSD_JObj*);
/* 07F76C */ void ftCommon_8007F76C(ftCo_GObj*);
/* 07F7B4 */ void ftCommon_8007F7B4(ftCo_GObj*);
/* 07F804 */ MtxPtr ftCommon_8007F804(ftCo_Fighter*);
/* 07F824 */ void ftCommon_8007F824(ftCo_GObj*);
/* 07F86C */ void ftCommon_8007F86C(ftCo_GObj*);
/* 07F8B4 */ void ftCommon_8007F8B4(ftCo_Fighter*, Vec3* v);
/* 07F8E8 */ void ftCommon_8007F8E8(ftCo_GObj*);
/* 07F948 */ void ftCommon_8007F948(ftCo_GObj*, ftCo_GObj*, s32);
/* 07F9B4 */ void ftCommon_8007F9B4(ftCo_GObj*);
/* 07FA00 */ void ftCommon_8007FA00(ftCo_GObj*);
/* 07FA58 */ void ftCommon_8007FA58(ftCo_GObj*, Item_GObj*);
/* 07FC7C */ void ftCommon_8007FC7C(ftCo_GObj*, float);
/* 07FDA0 */ void ftCommon_8007FDA0(ftCo_GObj*);
/* 07FE84 */ void ftCommon_8007FE84(ftCo_GObj*, ftCo_GObj*, s32, float);
/* 07FF74 */ void ftCommon_8007FF74(ftCo_GObj*);
/* 07FFD8 */ bool ftCommon_8007FFD8(ftCo_Fighter*, float);
/* 080144 */ bool ftCommon_80080144(ftCo_Fighter*);
/* 080174 */ void ftCommon_80080174(ftCo_Fighter* fp);
/* 08021C */ void ftCommon_8008021C(ftCo_GObj*);
/* 08031C */ void ftCommon_8008031C(ftCo_GObj*);
/* 080460 */ void ftCommon_80080460(ftCo_Fighter*);
/* 080474 */ void ftCommon_80080474(ftCo_Fighter*);
/* 080484 */ void ftCommon_80080484(ftCo_Fighter*);
/* 0804A0 */ void ftCommon_800804A0(ftCo_Fighter*, float);
/* 0804EC */ float ftCommon_800804EC(ftCo_Fighter*);
/* 0804FC */ void ftCommon_800804FC(ftCo_Fighter*);
static inline void ftCo_SpawnEf(ftCo_GObj* gobj, HSD_JObj* joint, uint arg2,
enum_t arg3)
{
u8 _[8] = { 0 };
ftCo_Fighter* fp = gobj->user_data;
efAsync_Spawn((HSD_GObj*) gobj, &fp->x60C, arg2, arg3, joint);
}
static inline void ftCo_Thrown_Enter(ftCo_GObj* gobj, FtMotionId msid,
MotionFlags mf, float anim_start)
{
ftCo_Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
fp->facing_dir = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) 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);
}
#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;
#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);
/* 155FCC */ void ftCh_Init_80155FCC(HSD_GObj* gobj);
/* 156014 */ void ftCh_Init_80156014(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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 1576B0 */ void ftCh_Slap_Anim(HSD_GObj* gobj);
/* 157724 */ void ftCh_Slap_IASA(HSD_GObj* gobj);
/* 157768 */ void ftCh_Slap_Phys(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);
/* 1578E4 */ void ftCh_Slap_Coll(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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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);
/* 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[];
#define MELEE_FT_CHARA_FTCRAZYHAND_TYPES_H
typedef struct _ftCrazyHandAttributes {
s32 x0;
s32 x4;
s32 x8;
s32 xC;
s32 x10;
float x14;
float x18;
float 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;
} ftCrazyHand_DatAttrs;
#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_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,
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_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_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[];
#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_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 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[];
#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[];
#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[];
#define GALE01_0E5970
/* 0E5970 */ bool ftFx_AppealS_CheckIfUsed(Fighter* fp);
/* 0E59BC */ bool ftFx_AppealS_CheckInput(HSD_GObj* gobj);
/* 0E5A90 */ void ftFx_AppealS_Enter(HSD_GObj* gobj);
/* 0E5B18 */ void ftFx_AppealS_Anim(HSD_GObj* gobj);
/* 0E5C38 */ void ftFx_AppealS_IASA(HSD_GObj* gobj);
/* 0E5C3C */ void ftFx_AppealS_Phys(HSD_GObj* gobj);
/* 0E5C5C */ void ftFx_AppealS_Coll(HSD_GObj* gobj);
#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[];
#define GALE01_0E7100
/* 0E7100 */ void ftFx_SpecialHi_CreateLaunchGFX(HSD_GObj* gobj);
/* 0E719C */ void ftFx_SpecialHi_CreateChargeGFX(HSD_GObj* gobj);
/* 0E7238 */ void ftFx_SpecialHi_Enter(HSD_GObj* gobj);
/* 0E72C4 */ void ftFx_SpecialAirHiStart_Enter(HSD_GObj* gobj);
/* 0E7354 */ void ftFx_SpecialHiHold_Anim(HSD_GObj* gobj);
/* 0E73B4 */ void ftFx_SpecialHiHoldAir_Anim(HSD_GObj* gobj);
/* 0E7414 */ void ftFx_SpecialHiHold_IASA(HSD_GObj* gobj);
/* 0E7418 */ void ftFx_SpecialHiHoldAir_IASA(HSD_GObj* gobj);
/* 0E741C */ void ftFx_SpecialHiHold_Phys(HSD_GObj* gobj);
/* 0E743C */ void ftFx_SpecialHiHoldAir_Phys(HSD_GObj* gobj);
/* 0E74A8 */ void ftFx_SpecialHiHold_Coll(HSD_GObj* gobj);
/* 0E74E4 */ void ftFx_SpecialHiHoldAir_Coll(HSD_GObj* gobj);
/* 0E7554 */ void ftFx_SpecialHiHold_GroundToAir(HSD_GObj* gobj);
/* 0E75C0 */ void ftFx_SpecialHiHoldAir_AirToGround(HSD_GObj* gobj);
/* 0E7634 */ void ftFx_SpecialHi_Anim(HSD_GObj* gobj);
/* 0E7684 */ void ftFx_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 0E76D4 */ void ftFx_SpecialHi_IASA(HSD_GObj* gobj);
/* 0E76D8 */ void ftFx_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 0E76DC */ void ftFx_SpecialHi_Phys(HSD_GObj* gobj);
/* 0E7758 */ void ftFx_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 0E7800 */ void ftFx_SpecialHi_Coll(HSD_GObj* gobj);
/* 0E78B4 */ void ftFx_SpecialAirHi_Coll(HSD_GObj* gobj);
/* 0E7A78 */ void ftFx_SpecialHi_GroundToAir(HSD_GObj* gobj);
/* 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
/* 0E83E0 */ void ftFx_SpecialLw_CreateLoopGFX(HSD_GObj* gobj);
/* 0E845C */ void ftFx_SpecialLw_CreateStartGFX(HSD_GObj* gobj);
/* 0E84D8 */ void ftFx_SpecialLw_CreateReflectGFX(HSD_GObj* gobj);
/* 0E8560 */ void ftFx_SpecialLw_Enter(HSD_GObj* gobj);
/* 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);
/* 0E87D4 */ bool ftFx_SpecialLwStart_CheckPass(HSD_GObj* gobj);
/* 0E881C */ void ftFx_SpecialLwStart_Pass(HSD_GObj* gobj);
/* 0E8864 */ void ftFx_SpecialLwStart_Phys(HSD_GObj* gobj);
/* 0E8884 */ void ftFx_SpecialAirLwStart_Phys(HSD_GObj* gobj);
/* 0E88E4 */ void ftFx_SpecialLwStart_Coll(HSD_GObj* gobj);
/* 0E8920 */ void ftFx_SpecialAirLwStart_Coll(HSD_GObj* gobj);
/* 0E895C */ void ftFx_SpecialLwStart_GroundToAir(HSD_GObj* gobj);
/* 0E89BC */ void ftFx_SpecialAirLwStart_AirToGround(HSD_GObj* gobj);
/* 0E8A24 */ void ftFx_SpecialLwLoop_Anim(HSD_GObj* gobj);
/* 0E8A9C */ void ftFx_SpecialAirLwLoop_Anim(HSD_GObj* gobj);
/* 0E8B14 */ void ftFx_SpecialLwLoop_IASA(HSD_GObj* gobj);
/* 0E8B64 */ void ftFx_SpecialAirLwLoop_IASA(HSD_GObj* gobj);
/* 0E8C34 */ void ftFx_SpecialLwLoop_Phys(HSD_GObj* gobj);
/* 0E8C68 */ void ftFx_SpecialAirLwLoop_Phys(HSD_GObj* gobj);
/* 0E8CDC */ void ftFx_SpecialLwLoop_Coll(HSD_GObj* gobj);
/* 0E8D18 */ void ftFx_SpecialAirLwLoop_Coll(HSD_GObj* gobj);
/* 0E8FDC */ void ftFx_SpecialLwTurn_Anim(HSD_GObj* gobj);
/* 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
/* 0E5CB0 */ void ftFx_SpecialN_FtGetHoldJoint(HSD_GObj* gobj, Vec3* pos);
/* 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);
/// @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);
#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[];
/// @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 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[];
#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[];
#define GALE01_0EE528
/* 0EE528 */ void ftKb_Init_800EE528(void);
/* 0EE5C0 */ void ftKb_Init_OnDeath(ftKb_GObj* gobj);
/* 0EE680 */ void ftKb_Init_OnLoad(ftKb_GObj* gobj);
/* 0EE74C */ void ftKb_Init_800EE74C(ftKb_GObj* gobj);
/* 0EE7B8 */ void ftKb_Init_800EE7B8(ftKb_GObj* gobj);
/* 0EE818 */ void ftKb_Init_UnkMotionStates4(ftKb_GObj* gobj);
/* 0EE914 */ void ftKb_Init_OnItemPickup(ftKb_GObj* gobj, bool flag);
/* 0EE9DC */ void ftKb_Init_OnItemInvisible(ftKb_GObj* gobj);
/* 0EEA24 */ void ftKb_Init_OnItemVisible(ftKb_GObj* gobj);
/* 0EEA6C */ void ftKb_Init_OnItemDrop(ftKb_GObj* gobj, bool);
/* 0EEAC0 */ void ftKb_Init_LoadSpecialAttrs(ftKb_GObj* gobj);
/* 0EEB00 */ void ftKb_Init_800EEB00(ftKb_GObj* gobj, void*);
/* 0EEB1C */ void ftKb_Init_800EEB1C(ftKb_GObj* gobj, void*);
/* 0EEB38 */ void ftKb_Init_OnKnockbackEnter(ftKb_GObj* gobj);
/* 0EEB7C */ void ftKb_Init_OnKnockbackExit(ftKb_GObj* gobj);
/* 0EEBC0 */ void ftKb_Init_UnkDemoCallbacks0(int, int*, int*);
/* 0EEBF8 */ char* ftKb_Init_GetMotionFileString(enum_t);
/* 0EEC34 */ void ftKb_SpecialN_800EEC34(ftKb_GObj* gobj);
/* 0EED50 */ void ftKb_SpecialN_800EED50(s32, s32);
/* 0EEE9C */ void ftKb_Init_UnkMotionStates5(ftKb_GObj* gobj);
/* 0EEEC4 */ void ftKb_SpecialN_800EEEC4(ftKb_GObj* gobj,
FighterKind victim_kind);
/* 0EEF04 */ void ftKb_UnkMtxFunc0(ftKb_GObj* gobj, int, Mtx);
/* 0EF028 */ HSD_JObj* ftKb_Init_UnkMotionStates6(ftKb_GObj* gobj);
/* 0EF040 */ M2C_UNK ftKb_SpecialN_800EF040();
/* 0EF0E4 */ M2C_UNK ftKb_SpecialN_800EF0E4();
/* 0EF35C */ M2C_UNK ftKb_SpecialN_800EF35C();
/* 0EF438 */ M2C_UNK ftKb_SpecialN_800EF438();
/* 0EF69C */ M2C_UNK ftKb_SpecialN_800EF69C();
/* 0EF87C */ void ftKb_UnkIntBoolFunc0(Fighter*, int, bool);
/* 0EF9BC */ void ftKb_Init_UnkCallbackPairs0_0(ftKb_GObj* gobj);
/* 0EF9FC */ void ftKb_Init_UnkCallbackPairs0_1(ftKb_GObj* gobj);
/* 0EFA40 */ void ftKb_SpecialN_800EFA40(ftKb_GObj* gobj);
/* 0EFAF0 */ void ftKb_SpecialN_800EFAF0(ftKb_GObj* gobj);
/* 0EFB4C */ void ftKb_SpecialN_800EFB4C(ftKb_GObj* gobj);
/* 0EFBFC */ void ftKb_SpecialN_800EFBFC(ftKb_GObj* gobj);
/* 0EFC58 */ void ftKb_SpecialN_800EFC58(ftKb_GObj* gobj);
/* 0EFD08 */ void ftKb_SpecialN_800EFD08(ftKb_GObj* gobj);
/* 0EFD64 */ void ftKb_SpecialN_800EFD64(ftKb_GObj* gobj);
/* 0EFE1C */ void ftKb_SpecialN_800EFE1C(ftKb_GObj* gobj);
/* 0EFE80 */ void ftKb_SpecialN_800EFE80(ftKb_GObj* gobj);
/* 0EFF38 */ void ftKb_SpecialN_800EFF38(ftKb_GObj* gobj);
/* 0EFF9C */ void ftKb_SpecialN_800EFF9C(ftKb_GObj* gobj);
/* 0F0054 */ void ftKb_SpecialN_800F0054(ftKb_GObj* gobj);
/* 0F00B8 */ void ftKb_SpecialN_800F00B8(ftKb_GObj* gobj);
/* 0F0168 */ void ftKb_SpecialN_800F0168(ftKb_GObj* gobj);
/* 0F01C4 */ void ftKb_SpecialN_800F01C4(ftKb_GObj* gobj);
/* 0F0274 */ void ftKb_SpecialN_800F0274(ftKb_GObj* gobj);
/* 0F02D0 */ void ftKb_SpecialN_800F02D0(ftKb_GObj* gobj);
/* 0F0380 */ void ftKb_SpecialN_800F0380(ftKb_GObj* gobj);
/* 0F03DC */ void ftKb_SpecialN_800F03DC(ftKb_GObj* gobj);
/* 0F0494 */ void ftKb_SpecialN_800F0494(ftKb_GObj* gobj);
/* 0F04F8 */ void ftKb_SpecialN_800F04F8(ftKb_GObj* gobj);
/* 0F05A8 */ void ftKb_SpecialN_800F05A8(ftKb_GObj* gobj);
/* 0F0604 */ void ftKb_SpecialN_800F0604(ftKb_GObj* gobj);
/* 0F06B4 */ void ftKb_SpecialN_800F06B4(ftKb_GObj* gobj);
/* 0F0710 */ void ftKb_SpecialN_800F0710(ftKb_GObj* gobj);
/* 0F07C0 */ void ftKb_SpecialN_800F07C0(ftKb_GObj* gobj);
/* 0F081C */ void ftKb_SpecialN_800F081C(ftKb_GObj* gobj);
/* 0F08D4 */ void ftKb_SpecialN_800F08D4(ftKb_GObj* gobj);
/* 0F0938 */ void ftKb_SpecialN_800F0938(ftKb_GObj* gobj);
/* 0F09F0 */ void ftKb_SpecialN_800F09F0(ftKb_GObj* gobj);
/* 0F0A54 */ void ftKb_SpecialN_800F0A54(ftKb_GObj* gobj);
/* 0F0B0C */ void ftKb_SpecialN_800F0B0C(ftKb_GObj* gobj);
/* 0F0B70 */ void ftKb_SpecialN_800F0B70(ftKb_GObj* gobj);
/* 0F0C20 */ void ftKb_SpecialN_800F0C20(ftKb_GObj* gobj);
/* 0F0C7C */ void ftKb_SpecialN_800F0C7C(ftKb_GObj* gobj);
/* 0F0D34 */ void ftKb_SpecialN_800F0D34(ftKb_GObj* gobj);
/* 0F0D98 */ void ftKb_SpecialN_800F0D98(ftKb_GObj* gobj);
/* 0F0E48 */ void ftKb_SpecialN_800F0E48(ftKb_GObj* gobj);
/* 0F0EA4 */ void ftKb_SpecialN_800F0EA4(ftKb_GObj* gobj);
/* 0F0F5C */ void ftKb_SpecialN_800F0F5C(ftKb_GObj* gobj);
/* 0F0FC0 */ void ftKb_SpecialN_800F0FC0(ftKb_GObj* gobj);
/* 0F10A4 */ void ftKb_SpecialN_800F10A4(ftKb_GObj* gobj);
/* 0F10D4 */ void ftKb_SpecialN_800F10D4(ftKb_GObj* gobj);
/* 0F11AC */ void ftKb_SpecialN_800F11AC(ftKb_GObj* gobj);
/* 0F11F0 */ void ftKb_SpecialN_800F11F0(ftKb_GObj* gobj);
/* 0F12C8 */ void ftKb_SpecialN_800F12C8(ftKb_GObj* gobj);
/* 0F130C */ void ftKb_SpecialN_800F130C(ftKb_GObj* gobj);
/* 0F13F0 */ void ftKb_SpecialN_800F13F0(ftKb_GObj* gobj);
/* 0F1420 */ void ftKb_SpecialN_800F1420(ftKb_GObj* gobj);
/* 0F14B4 */ void ftKb_SpecialN_800F14B4(ftKb_GObj* gobj);
/* 0F15D8 */ void ftKb_SpecialN_800F15D8(ftKb_GObj* gobj);
/* 0F1630 */ void ftKb_SpecialN_Enter(ftKb_GObj* gobj);
/* 0F1680 */ void ftKb_SpecialAirN_Enter(ftKb_GObj* gobj);
/* 0F16D0 */ M2C_UNK ftKb_SpecialN_800F16D0();
/* 0F190C */ void ftKb_SpecialN_800F190C(ftCo_GObj* gobj,
FighterKind victim_kind);
/* 0F19AC */ void ftKb_SpecialN_800F19AC(ftKb_GObj* gobj);
/* 0F1A8C */ void ftKb_SpecialN_800F1A8C(ftKb_GObj* gobj);
/* 0F1B6C */ void ftKb_Init_UnkMotionStates3(ftKb_GObj* gobj);
/* 0F1BAC */ void ftKb_SpecialN_800F1BAC(ftKb_GObj* gobj, s32, bool);
/* 0F1CD8 */ M2C_UNK ftKb_SpecialN_800F1CD8();
/* 0F1D24 */ void ftKb_SpecialN_800F1D24(ftKb_GObj* gobj);
/* 0F1DAC */ M2C_UNK ftKb_SpecialN_800F1DAC();
/* 0F1F1C */ void ftKb_SpecialN_800F1F1C(ftCo_GObj* gobj, Vec3*);
/* 0F1F68 */ void ftKb_SpecialN_800F1F68(ftKb_GObj* gobj);
/* 0F203C */ void ftKb_AttackDash_Anim(ftKb_GObj* gobj);
/* 0F205C */ void ftKb_AttackDash_IASA(ftKb_GObj* gobj);
/* 0F207C */ void ftKb_AttackDash_Phys(ftKb_GObj* gobj);
/* 0F209C */ void ftKb_AttackDash_Coll(ftKb_GObj* gobj);
/* 0F2124 */ void ftKb_AttackDashAir_Anim(ftKb_GObj* gobj);
/* 0F2160 */ void ftKb_AttackDashAir_IASA(ftKb_GObj* gobj);
/* 0F2164 */ void ftKb_AttackDashAir_Phys(ftKb_GObj* gobj);
/* 0F2198 */ void ftKb_AttackDashAir_Coll(ftKb_GObj* gobj);
/* 0F21C0 */ void ftKb_AttackDashAir_800F21C0(ftKb_GObj* gobj);
/* 0F22D4 */ void ftKb_AttackDashAir_800F22D4(ftKb_GObj* gobj);
/* 0F2300 */ void ftKb_SpecialHi_Enter(ftKb_GObj* gobj);
/* 0F23B8 */ void ftKb_SpecialAirHi_Enter(ftKb_GObj* gobj);
/* 0F2470 */ void ftKb_SpecialHi1_Anim(ftKb_GObj* gobj);
/* 0F24F8 */ void ftKb_SpecialHi2_Anim(ftKb_GObj* gobj);
/* 0F2578 */ void ftKb_SpecialHi3_Anim(ftKb_GObj* gobj);
/* 0F257C */ void ftKb_SpecialHi4_Anim(ftKb_GObj* gobj);
/* 0F25EC */ void ftKb_SpecialAirHi1_Anim(ftKb_GObj* gobj);
/* 0F266C */ void ftKb_SpecialAirHi2_Anim(ftKb_GObj* gobj);
/* 0F26E4 */ void ftKb_SpecialAirHi3_Anim(ftKb_GObj* gobj);
/* 0F26E8 */ void ftKb_SpecialAirHiEnd_Anim(ftKb_GObj* gobj);
/* 0F2758 */ void ftKb_SpecialHi1_IASA(ftKb_GObj* gobj);
/* 0F2828 */ void ftKb_SpecialHi2_IASA(ftKb_GObj* gobj);
/* 0F282C */ void ftKb_SpecialHi3_IASA(ftKb_GObj* gobj);
/* 0F2830 */ void ftKb_SpecialHi4_IASA(ftKb_GObj* gobj);
/* 0F2834 */ void ftKb_SpecialAirHi1_IASA(ftKb_GObj* gobj);
/* 0F2904 */ void ftKb_SpecialAirHi2_IASA(ftKb_GObj* gobj);
/* 0F2908 */ void ftKb_SpecialAirHi3_IASA(ftKb_GObj* gobj);
/* 0F290C */ void ftKb_SpecialAirHiEnd_IASA(ftKb_GObj* gobj);
/* 0F2910 */ void ftKb_SpecialHi1_Phys(ftKb_GObj* gobj);
/* 0F2984 */ void ftKb_SpecialHi2_Phys(ftKb_GObj* gobj);
/* 0F29F8 */ void ftKb_SpecialHi3_Phys(ftKb_GObj* gobj);
/* 0F2A48 */ void ftKb_SpecialHi4_Phys(ftKb_GObj* gobj);
/* 0F2A68 */ void ftKb_SpecialAirHi1_Phys(ftKb_GObj* gobj);
/* 0F2AE4 */ void ftKb_SpecialAirHi2_Phys(ftKb_GObj* gobj);
/* 0F2B60 */ void ftKb_SpecialAirHi3_Phys(ftKb_GObj* gobj);
/* 0F2B9C */ void ftKb_SpecialAirHiEnd_Phys(ftKb_GObj* gobj);
/* 0F2BBC */ void ftKb_SpecialHi1_Coll(ftKb_GObj* gobj);
/* 0F2C5C */ void ftKb_SpecialHi2_Coll(ftKb_GObj* gobj);
/* 0F2D98 */ void ftKb_SpecialHi3_Coll(ftKb_GObj* gobj);
/* 0F2EA0 */ void ftKb_SpecialHi4_Coll(ftKb_GObj* gobj);
/* 0F2F70 */ void ftKb_SpecialAirHi1_Coll(ftKb_GObj* gobj);
/* 0F3004 */ void ftKb_SpecialAirHi2_Coll(ftKb_GObj* gobj);
/* 0F3140 */ void ftKb_SpecialAirHi3_Coll(ftKb_GObj* gobj);
/* 0F3248 */ void ftKb_SpecialAirHiEnd_Coll(ftKb_GObj* gobj);
/* 0F331C */ M2C_UNK ftKb_SpecialHi_800F331C();
/* 0F346C */ M2C_UNK ftKb_SpecialHi_800F346C();
/* 0F3570 */ M2C_UNK ftKb_SpecialHi_800F3570();
/* 0F36DC */ M2C_UNK ftKb_SpecialHi_800F36DC();
/* 0F37EC */ M2C_UNK ftKb_SpecialHi_800F37EC();
/* 0F3B28 */ M2C_UNK ftKb_SpecialHi_800F3B28();
/* 0F3D50 */ void ftKb_SpecialLw_Enter(ftKb_GObj* gobj);
/* 0F3E68 */ void ftKb_SpecialAirLw_Enter(ftKb_GObj* gobj);
/* 0F3F80 */ void ftKb_SpecialLw1_Anim(ftKb_GObj* gobj);
/* 0F402C */ void ftKb_SpecialLw_Anim(ftKb_GObj* gobj);
/* 0F4074 */ void ftKb_SpecialLwEnd_Anim(ftKb_GObj* gobj);
/* 0F412C */ void ftKb_SpecialAirLwStart_Anim(ftKb_GObj* gobj);
/* 0F41D8 */ void ftKb_SpecialAirLw_Anim(ftKb_GObj* gobj);
/* 0F4220 */ void ftKb_SpecialAirLwEnd_Anim(ftKb_GObj* gobj);
/* 0F42D8 */ void ftKb_SpecialLw1_IASA(ftKb_GObj* gobj);
/* 0F42DC */ void ftKb_SpecialLw_IASA(ftKb_GObj* gobj);
/* 0F43FC */ void ftKb_SpecialLwEnd_IASA(ftKb_GObj* gobj);
/* 0F4400 */ void ftKb_SpecialAirLwStart_IASA(ftKb_GObj* gobj);
/* 0F4404 */ void ftKb_SpecialAirLw_IASA(ftKb_GObj* gobj);
/* 0F4518 */ void ftKb_SpecialAirLwEnd_IASA(ftKb_GObj* gobj);
/* 0F451C */ void ftKb_SpecialLw1_Phys(ftKb_GObj* gobj);
/* 0F453C */ void ftKb_SpecialLw_Phys(ftKb_GObj* gobj);
/* 0F4584 */ void ftKb_SpecialLwEnd_Phys(ftKb_GObj* gobj);
/* 0F45A4 */ void ftKb_SpecialAirLwStart_Phys(ftKb_GObj* gobj);
/* 0F45C4 */ void ftKb_SpecialAirLw_Phys(ftKb_GObj* gobj);
/* 0F4608 */ void ftKb_SpecialAirLwEnd_Phys(ftKb_GObj* gobj);
/* 0F4628 */ void ftKb_SpecialLw1_Coll(ftKb_GObj* gobj);
/* 0F4800 */ void ftKb_SpecialLw_Coll(ftKb_GObj* gobj);
/* 0F49E4 */ void ftKb_SpecialLwEnd_Coll(ftKb_GObj* gobj);
/* 0F4B3C */ void ftKb_SpecialAirLwStart_Coll(ftKb_GObj* gobj);
/* 0F4E78 */ void ftKb_SpecialAirLw_Coll(ftKb_GObj* gobj);
/* 0F51C0 */ void ftKb_SpecialAirLwEnd_Coll(ftKb_GObj* gobj);
/* 0F5318 */ void ftKb_SpecialAirLw_800F5318(ftKb_GObj* gobj);
/* 0F539C */ void ftKb_SpecialAirLw_800F539C(ftKb_GObj* gobj);
/* 0F5524 */ void ftKb_SpecialAirLw_800F5524(ftKb_GObj* gobj);
/* 0F5564 */ void ftKb_SpecialS_Enter(ftKb_GObj* gobj);
/* 0F55D0 */ void ftKb_SpecialAirS_Enter(ftKb_GObj* gobj);
/* 0F5660 */ void ftKb_SpecialS_Anim(ftKb_GObj* gobj);
/* 0F569C */ void ftKb_SpecialAirS_Anim(ftKb_GObj* gobj);
/* 0F56D8 */ void ftKb_SpecialS_Phys(ftKb_GObj* gobj);
/* 0F56F8 */ void ftKb_SpecialAirS_Phys(ftKb_GObj* gobj);
/* 0F5718 */ void ftKb_SpecialS_Coll(ftKb_GObj* gobj);
/* 0F5778 */ void ftKb_SpecialAirS_Coll(ftKb_GObj* gobj);
/* 0F5800 */ M2C_UNK ftKb_SpecialN_800F5800();
/* 0F5820 */ void ftKb_SpecialN_800F5820(ftKb_GObj* gobj,
ftCollisionBox* victim_coll_box,
float victim_scale_x);
/* 0F5874 */ void ftKb_SpecialN_800F5874(Vec2* arg0);
/* 0F5898 */ HSD_Joint* ftKb_SpecialN_800F5898(ftKb_GObj* gobj, int);
/* 0F58AC */ float ftKb_SpecialN_800F58AC(ftKb_GObj* gobj,
Vec3* victim_self_vel,
float victim_facing_dir);
/* 0F58D8 */ float ftKb_SpecialN_800F58D8(ftKb_GObj* gobj,
Vec3* victim_self_vel,
float victim_facing_dir);
/* 0F5954 */ void ftKb_SpecialN_800F5954(ftKb_GObj* gobj);
/* 0F597C */ bool ftKb_SpecialN_800F597C(ftKb_GObj* gobj);
/* 0F598C */ void ftKb_SpecialN_800F598C(ftKb_GObj* gobj, int arg1);
/* 0F5A04 */ void ftKb_SpecialN_800F5A04(ftKb_GObj* gobj);
/* 0F5A38 */ bool ftKb_SpecialN_800F5A38(ftKb_GObj* gobj,
ftCo_Fighter* victim_fp);
/* 0F5A60 */ float ftKb_SpecialN_800F5A60(ftKb_GObj* gobj);
/* 0F5A70 */ float ftKb_SpecialN_800F5A70(void);
/* 0F5A88 */ float ftKb_SpecialN_800F5A88(ftKb_GObj* gobj);
/* 0F5A98 */ float ftKb_SpecialN_800F5A98(void);
/* 0F5AB0 */ float ftKb_SpecialN_800F5AB0(ftKb_GObj* gobj);
/* 0F5AC0 */ float ftKb_SpecialN_800F5AC0(void);
/* 0F5AD8 */ float ftKb_SpecialN_800F5AD8(void);
/* 0F5AF0 */ float ftKb_SpecialN_800F5AF0(ftKb_GObj* gobj);
/* 0F5B00 */ float ftKb_SpecialN_800F5B00(ftKb_GObj* gobj);
/* 0F5B10 */ float ftKb_SpecialN_800F5B10(ftKb_GObj* gobj);
/* 0F5B20 */ M2C_UNK ftKb_SpecialN_800F5B20(ftKb_GObj* gobj);
/* 0F5B3C */ float ftKb_SpecialN_800F5B3C(ftKb_GObj* gobj);
/* 0F5B4C */ float ftKb_SpecialN_800F5B4C(ftKb_GObj* gobj);
/* 0F5B5C */ void ftKb_SpecialN_800F5B5C(ftKb_GObj* gobj);
/* 0F5BA4 */ void ftKb_SpecialN_800F5BA4(Fighter* fp);
/* 0F5C34 */ void ftKb_SpecialN_800F5C34(Fighter* fp);
/* 0F5D04 */ void ftKb_SpecialN_800F5D04(ftKb_GObj* gobj, bool);
/* 0F5DE8 */ void ftKb_SpecialN_800F5DE8(ftKb_GObj* gobj);
/* 0F5EA8 */ void ftKb_SpecialN_800F5EA8(ftKb_GObj* gobj);
/* 0F5F68 */ void ftKb_SpecialN_800F5F68(ftKb_GObj* gobj);
/* 0F6070 */ void ftKb_SpecialN_800F6070(ftKb_GObj* gobj);
/* 0F6388 */ void ftKb_SpecialN_800F6388(ftKb_GObj* gobj);
/* 0F63EC */ void ftKb_SpecialN_800F63EC(ftKb_GObj* gobj);
/* 0F6BB0 */ void ftKb_SpecialS_800F6BB0(ftKb_GObj* gobj);
/* 0F70A0 */ void ftKb_SpecialN_Anim(ftKb_GObj* gobj);
/* 0F71CC */ void ftKb_SpecialAirN_Anim(ftKb_GObj* gobj);
/* 0F72F8 */ void ftKb_SpecialNLoop_Anim(ftKb_GObj* gobj);
/* 0F72FC */ void ftKb_SpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 0F7300 */ void ftKb_SpecialNEnd_Anim(ftKb_GObj* gobj);
/* 0F733C */ void ftKb_SpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 0F7378 */ void ftKb_SpecialNCapture0_Anim(ftKb_GObj* gobj);
/* 0F7498 */ void ftKb_SpecialNCapture_Anim(ftKb_GObj* gobj);
/* 0F75B8 */ void ftKb_SpecialNCapture1_Anim(ftKb_GObj* gobj);
/* 0F75D8 */ void ftKb_SpecialAirNCapture_Anim(ftKb_GObj* gobj);
/* 0F75F8 */ void ftKb_Eat_Anim(ftKb_GObj* gobj);
/* 0F7674 */ void ftKb_SpecialAirNCaptured_Anim(ftKb_GObj* gobj);
/* 0F76F8 */ void ftKb_EatWait_Anim(ftKb_GObj* gobj);
/* 0F76FC */ void ftKb_SpecialAirNCaptureWait_Anim(ftKb_GObj* gobj);
/* 0F7700 */ void ftKb_SpecialNSpit0_Anim(ftKb_GObj* gobj);
/* 0F7808 */ void ftKb_SpecialNSpit_Anim(ftKb_GObj* gobj);
/* 0F78B8 */ void ftKb_SpecialNSpit1_Anim(ftKb_GObj* gobj);
/* 0F79C0 */ void ftKb_SpecialAirNSpit_Anim(ftKb_GObj* gobj);
/* 0F7A70 */ void ftKb_SpecialNDrink0_Anim(ftKb_GObj* gobj);
/* 0F7B20 */ void ftKb_SpecialNDrink_Anim(ftKb_GObj* gobj);
/* 0F7BE4 */ void ftKb_SpecialNDrink1_Anim(ftKb_GObj* gobj);
/* 0F7C94 */ void ftKb_SpecialAirNDrink_Anim(ftKb_GObj* gobj);
/* 0F7D58 */ void ftKb_EatTurn_Anim(ftKb_GObj* gobj);
/* 0F7DE4 */ void ftKb_SpecialAirNCaptureTurn_Anim(ftKb_GObj* gobj);
/* 0F7E78 */ void ftKb_EatWalk_Anim(ftKb_GObj* gobj);
/* 0F7E98 */ void ftKb_EatJump1_Anim(ftKb_GObj* gobj);
/* 0F7F20 */ void ftKb_EatJump2_Anim(ftKb_GObj* gobj);
/* 0F7F24 */ void ftKb_EatLanding_Anim(ftKb_GObj* gobj);
/* 0F7FA0 */ void ftKb_SpecialNLoop_IASA(ftKb_GObj* gobj);
/* 0F8000 */ void ftKb_SpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 0F8060 */ void ftKb_EatWait_IASA(ftKb_GObj* gobj);
/* 0F844C */ void ftKb_SpecialAirNCaptureWait_IASA(ftKb_GObj* gobj);
/* 0F8770 */ void ftKb_EatWalk_IASA(ftKb_GObj* gobj);
/* 0F8870 */ void ftKb_EatJump1_IASA(ftKb_GObj* gobj);
/* 0F8890 */ void ftKb_SpecialN_Phys(ftKb_GObj* gobj);
/* 0F88B0 */ void ftKb_SpecialAirN_Phys(ftKb_GObj* gobj);
/* 0F88D0 */ void ftKb_SpecialNLoop_Phys(ftKb_GObj* gobj);
/* 0F88F0 */ void ftKb_SpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 0F8910 */ void ftKb_SpecialNEnd_Phys(ftKb_GObj* gobj);
/* 0F8930 */ void ftKb_SpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 0F8950 */ void ftKb_SpecialNCapture0_Phys(ftKb_GObj* gobj);
/* 0F8970 */ void ftKb_SpecialNCapture_Phys(ftKb_GObj* gobj);
/* 0F8990 */ void ftKb_SpecialNCapture1_Phys(ftKb_GObj* gobj);
/* 0F89B0 */ void ftKb_SpecialAirNCapture_Phys(ftKb_GObj* gobj);
/* 0F89D0 */ void ftKb_Eat_Phys(ftKb_GObj* gobj);
/* 0F89F0 */ void ftKb_SpecialAirNCaptured_Phys(ftKb_GObj* gobj);
/* 0F8A10 */ void ftKb_EatWait_Phys(ftKb_GObj* gobj);
/* 0F8A30 */ void ftKb_SpecialAirNCaptureWait_Phys(ftKb_GObj* gobj);
/* 0F8A50 */ void ftKb_SpecialNSpit0_Phys(ftKb_GObj* gobj);
/* 0F8A70 */ void ftKb_SpecialNSpit_Phys(ftKb_GObj* gobj);
/* 0F8A90 */ void ftKb_SpecialNSpit1_Phys(ftKb_GObj* gobj);
/* 0F8AB0 */ void ftKb_SpecialAirNSpit_Phys(ftKb_GObj* gobj);
/* 0F8AD0 */ void ftKb_SpecialNDrink0_Phys(ftKb_GObj* gobj);
/* 0F8AF0 */ void ftKb_SpecialNDrink_Phys(ftKb_GObj* gobj);
/* 0F8B10 */ void ftKb_SpecialNDrink1_Phys(ftKb_GObj* gobj);
/* 0F8B30 */ void ftKb_SpecialAirNDrink_Phys(ftKb_GObj* gobj);
/* 0F8B50 */ void ftKb_EatTurn_Phys(ftKb_GObj* gobj);
/* 0F8B70 */ void ftKb_SpecialAirNCaptureTurn_Phys(ftKb_GObj* gobj);
/* 0F8B90 */ void ftKb_EatWalk_Phys(ftKb_GObj* gobj);
/* 0F8BB0 */ void ftKb_EatJump1_Phys(ftKb_GObj* gobj);
/* 0F8BD0 */ void ftKb_EatJump2_Phys(ftKb_GObj* gobj);
/* 0F8BF0 */ void ftKb_EatLanding_Phys(ftKb_GObj* gobj);
/* 0F8C10 */ void ftKb_SpecialN_Coll(ftKb_GObj* gobj);
/* 0F8C38 */ void ftKb_SpecialAirN_Coll(ftKb_GObj* gobj);
/* 0F8C60 */ void ftKb_SpecialNLoop_Coll(ftKb_GObj* gobj);
/* 0F8C88 */ void ftKb_SpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 0F8CB0 */ void ftKb_SpecialNEnd_Coll(ftKb_GObj* gobj);
/* 0F8CD8 */ void ftKb_SpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 0F8D00 */ void ftKb_SpecialNCapture0_Coll(ftKb_GObj* gobj);
/* 0F8D28 */ void ftKb_SpecialNCapture_Coll(ftKb_GObj* gobj);
/* 0F8D50 */ void ftKb_SpecialNCapture1_Coll(ftKb_GObj* gobj);
/* 0F8D78 */ void ftKb_SpecialAirNCapture_Coll(ftKb_GObj* gobj);
/* 0F8DA0 */ void ftKb_Eat_Coll(ftKb_GObj* gobj);
/* 0F8DC8 */ void ftKb_SpecialAirNCaptured_Coll(ftKb_GObj* gobj);
/* 0F8DF0 */ void ftKb_EatWait_Coll(ftKb_GObj* gobj);
/* 0F8E18 */ void ftKb_SpecialAirNCaptureWait_Coll(ftKb_GObj* gobj);
/* 0F8E40 */ void ftKb_SpecialNSpit0_Coll(ftKb_GObj* gobj);
/* 0F8E68 */ void ftKb_SpecialNSpit_Coll(ftKb_GObj* gobj);
/* 0F8E90 */ void ftKb_SpecialNSpit1_Coll(ftKb_GObj* gobj);
/* 0F8EB8 */ void ftKb_SpecialAirNSpit_Coll(ftKb_GObj* gobj);
/* 0F8EE0 */ void ftKb_SpecialNDrink0_Coll(ftKb_GObj* gobj);
/* 0F8F08 */ void ftKb_SpecialNDrink_Coll(ftKb_GObj* gobj);
/* 0F8F30 */ void ftKb_SpecialNDrink1_Coll(ftKb_GObj* gobj);
/* 0F8F58 */ void ftKb_SpecialAirNDrink_Coll(ftKb_GObj* gobj);
/* 0F8F80 */ void ftKb_EatTurn_Coll(ftKb_GObj* gobj);
/* 0F8FA8 */ void ftKb_SpecialAirNCaptureTurn_Coll(ftKb_GObj* gobj);
/* 0F8FD0 */ void ftKb_EatWalk_Coll(ftKb_GObj* gobj);
/* 0F8FF8 */ void ftKb_EatJump1_Coll(ftKb_GObj* gobj);
/* 0F9020 */ void ftKb_EatJump2_Coll(ftKb_GObj* gobj);
/* 0F9048 */ void ftKb_EatLanding_Coll(ftKb_GObj* gobj);
/* 0F9070 */ void ftKb_SpecialN_800F9070(ftKb_GObj* gobj);
/* 0F9090 */ void ftKb_SpecialN_800F9090(ftKb_GObj* gobj);
/* 0F9110 */ void ftKb_SpecialN_800F9110(ftKb_GObj* gobj);
/* 0F9198 */ void ftKb_MrSpecialN_Anim(ftKb_GObj* gobj);
/* 0F91D4 */ void ftKb_MrSpecialN_IASA(ftKb_GObj* gobj);
/* 0F9204 */ void ftKb_MrSpecialN_Phys(ftKb_GObj* gobj);
/* 0F9224 */ void ftKb_MrSpecialN_Coll(ftKb_GObj* gobj);
/* 0F93CC */ void ftKb_SpecialNMr_800F93CC(ftKb_GObj* gobj);
/* 0F9454 */ void ftKb_MrSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0F9490 */ void ftKb_MrSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0F94C0 */ void ftKb_MrSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0F94E0 */ void ftKb_MrSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0F951C */ void ftKb_SpecialNLg_800F951C(ftKb_GObj* gobj);
/* 0F9598 */ void ftKb_SpecialNLg_800F9598(ftKb_GObj* gobj);
/* 0F9614 */ void ftKb_SpecialNLg_800F9614(ftKb_GObj* gobj);
/* 0F9684 */ void ftKb_SpecialNLg_800F9684(ftKb_GObj* gobj);
/* 0F96F4 */ void ftKb_LgSpecialN_Anim(ftKb_GObj* gobj);
/* 0F9730 */ void ftKb_LgSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0F976C */ void ftKb_LgSpecialN_IASA(ftKb_GObj* gobj);
/* 0F979C */ void ftKb_LgSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0F97CC */ void ftKb_LgSpecialN_Phys(ftKb_GObj* gobj);
/* 0F97EC */ void ftKb_LgSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0F980C */ void ftKb_LgSpecialN_Coll(ftKb_GObj* gobj);
/* 0F9880 */ void ftKb_LgSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0F99BC */ void ftKb_SpecialNCa_800F99BC(ftKb_GObj* gobj);
/* 0F9A54 */ void ftKb_SpecialNCa_800F9A54(ftKb_GObj* gobj);
/* 0F9AEC */ void ftKb_CaSpecialN_Anim(ftKb_GObj* gobj);
/* 0F9B28 */ void ftKb_CaSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0F9B64 */ void ftKb_CaSpecialN_IASA(ftKb_GObj* gobj);
/* 0F9B68 */ void ftKb_CaSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0F9C58 */ void ftKb_CaSpecialN_Phys(ftKb_GObj* gobj);
/* 0F9D40 */ void ftKb_CaSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0F9E8C */ void ftKb_CaSpecialN_Coll(ftKb_GObj* gobj);
/* 0F9F34 */ void ftKb_CaSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0F9FD4 */ void ftKb_SpecialNPk_800F9FD4(ftKb_GObj* gobj);
/* 0FA064 */ void ftKb_SpecialNPk_800FA064(ftKb_GObj* gobj);
/* 0FA0F4 */ void ftKb_PkSpecialN_Anim(ftKb_GObj* gobj);
/* 0FA254 */ void ftKb_PkSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0FA418 */ void ftKb_PkSpecialN_IASA(ftKb_GObj* gobj);
/* 0FA41C */ void ftKb_PkSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0FA420 */ void ftKb_PkSpecialN_Phys(ftKb_GObj* gobj);
/* 0FA440 */ void ftKb_PkSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0FA460 */ void ftKb_PkSpecialN_Coll(ftKb_GObj* gobj);
/* 0FA4F0 */ void ftKb_PkSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0FA588 */ void ftKb_SpecialNKp_800FA588(ftKb_GObj* gobj);
/* 0FA7D4 */ void ftKb_SpecialNKp_800FA7D4(ftKb_GObj* gobj);
/* 0FA83C */ void ftKb_SpecialNKp_800FA83C(ftKb_GObj* gobj);
/* 0FA878 */ void ftKb_SpecialNKp_800FA878(ftKb_GObj* gobj);
/* 0FA8B4 */ void ftKb_SpecialNKp_800FA8B4(ftKb_GObj* gobj);
/* 0FA958 */ void ftKb_SpecialNKp_800FA958(ftKb_GObj* gobj);
/* 0FA9FC */ void ftKb_KpSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FAA74 */ void ftKb_KpSpecialN_Anim(ftKb_GObj* gobj);
/* 0FAB18 */ void ftKb_KpSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 0FAB54 */ void ftKb_KpSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 0FABCC */ void ftKb_KpSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0FAC70 */ void ftKb_KpSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 0FACAC */ void ftKb_KpSpecialNStart_IASA(ftKb_GObj* gobj);
/* 0FACB0 */ void ftKb_KpSpecialN_IASA(ftKb_GObj* gobj);
/* 0FAE0C */ void ftKb_KpSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 0FAE10 */ void ftKb_KpSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 0FAE14 */ void ftKb_KpSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0FAF70 */ void ftKb_KpSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 0FAF74 */ void ftKb_KpSpecialNStart_Phys(ftKb_GObj* gobj);
/* 0FAF94 */ void ftKb_KpSpecialN_Phys(ftKb_GObj* gobj);
/* 0FAFB4 */ void ftKb_KpSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 0FAFD4 */ void ftKb_KpSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 0FAFF4 */ void ftKb_KpSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0FB014 */ void ftKb_KpSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 0FB034 */ void ftKb_KpSpecialNStart_Coll(ftKb_GObj* gobj);
/* 0FB0C4 */ void ftKb_KpSpecialN_Coll(ftKb_GObj* gobj);
/* 0FB154 */ void ftKb_KpSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 0FB1E4 */ void ftKb_KpSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 0FB274 */ void ftKb_KpSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0FB304 */ void ftKb_KpSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 0FB394 */ ftLk_SpecialNIndex ftKb_SpecialNLk800FB394(ftKb_GObj* gobj);
/* 0FB418 */ void ftKb_SpecialNLk800FB418(ftKb_GObj* gobj);
/* 0FB444 */ void ftKb_SpecialNLk800FB444(ftKb_GObj* gobj);
/* 0FB470 */ bool ftKb_SpecialNLk800FB470(ftKb_GObj* gobj);
/* 0FB500 */ void ftKb_SpecialNLk800FB500(ftKb_GObj* gobj);
/* 0FB5F4 */ void ftKb_SpecialNLk800FB5F4(ftKb_GObj* gobj);
/* 0FB6DC */ void ftKb_SpecialNLk800FB6DC(ftKb_GObj* gobj);
/* 0FB800 */ void ftKb_SpecialNLk800FB800(ftKb_GObj* gobj);
/* 0FB840 */ void ftKb_SpecialNLk800FB840(ftKb_GObj* gobj);
/* 0FB880 */ void ftKb_SpecialNLk800FB880(ftKb_GObj* gobj);
/* 0FBA00 */ void ftKb_SpecialNLk800FBA00(ftKb_GObj* gobj);
/* 0FBBC4 */ void ftKb_LkSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FBDFC */ void ftKb_LkSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 0FBED0 */ void ftKb_LkSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 0FBF34 */ void ftKb_LkSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 0FC1A0 */ void ftKb_LkSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 0FC274 */ void ftKb_LkSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 0FC374 */ void ftKb_LkSpecialNStart_IASA(ftKb_GObj* gobj);
/* 0FC46C */ void ftKb_LkSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 0FC53C */ void ftKb_LkSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 0FC540 */ void ftKb_LkSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 0FC638 */ void ftKb_LkSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 0FC708 */ void ftKb_LkSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 0FC70C */ void ftKb_LkSpecialNStart_Phys(ftKb_GObj* gobj);
/* 0FC72C */ void ftKb_LkSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 0FC74C */ void ftKb_LkSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 0FC76C */ void ftKb_LkSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 0FC78C */ void ftKb_LkSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 0FC7AC */ void ftKb_LkSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 0FC7CC */ void ftKb_LkSpecialNStart_Coll(ftKb_GObj* gobj);
/* 0FC880 */ void ftKb_LkSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 0FC934 */ void ftKb_LkSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 0FC9F0 */ void ftKb_LkSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 0FCAA4 */ void ftKb_LkSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 0FCB58 */ void ftKb_LkSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 0FCC14 */ void ftKb_SpecialNSs_800FCC14(ftKb_GObj* gobj);
/* 0FCC6C */ void ftKb_SpecialNSs_800FCC6C(ftKb_GObj* gobj);
/* 0FCCBC */ void ftKb_SpecialNSs_800FCCBC(ftKb_GObj* gobj);
/* 0FCD04 */ void ftKb_SpecialNSs_800FCD04(ftKb_GObj* gobj);
/* 0FCD60 */ void ftKb_SpecialNSs_800FCD60(ftKb_GObj* gobj);
/* 0FCDE0 */ void ftKb_SpecialNSs_800FCDE0(ftKb_GObj* gobj);
/* 0FCF74 */ void ftKb_SpecialNSs_800FCF74(ftKb_GObj* gobj);
/* 0FD020 */ void ftKb_SpecialNSs_800FD020(ftKb_GObj* gobj);
/* 0FD0BC */ void ftKb_SsSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FD250 */ void ftKb_SsSpecialNHold_Anim(ftKb_GObj* gobj);
/* 0FD418 */ void ftKb_SsSpecialNCancel_Anim(ftKb_GObj* gobj);
/* 0FD49C */ void ftKb_SsSpecialN_Anim(ftKb_GObj* gobj);
/* 0FD4E0 */ void ftKb_SsSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 0FD608 */ void ftKb_SsSpecialAirN_Anim(ftKb_GObj* gobj);
/* 0FD688 */ void ftKb_SsSpecialNStart_IASA(ftKb_GObj* gobj);
/* 0FD68C */ void ftKb_SsSpecialNHold_IASA(ftKb_GObj* gobj);
/* 0FD7E0 */ void ftKb_SsSpecialNCancel_IASA(ftKb_GObj* gobj);
/* 0FD7E4 */ void ftKb_SsSpecialN_IASA(ftKb_GObj* gobj);
/* 0FD7E8 */ void ftKb_SsSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 0FD7EC */ void ftKb_SsSpecialAirN_IASA(ftKb_GObj* gobj);
/* 0FD7F0 */ void ftKb_SsSpecialNStart_Phys(ftKb_GObj* gobj);
/* 0FD810 */ void ftKb_SsSpecialNHold_Phys(ftKb_GObj* gobj);
/* 0FD830 */ void ftKb_SsSpecialNCancel_Phys(ftKb_GObj* gobj);
/* 0FD850 */ void ftKb_SsSpecialN_Phys(ftKb_GObj* gobj);
/* 0FD870 */ void ftKb_SsSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 0FD890 */ void ftKb_SsSpecialAirN_Phys(ftKb_GObj* gobj);
/* 0FD8B0 */ void ftKb_SsSpecialNStart_Coll(ftKb_GObj* gobj);
/* 0FD938 */ void ftKb_SsSpecialNHold_Coll(ftKb_GObj* gobj);
/* 0FD9E0 */ void ftKb_SsSpecialNCancel_Coll(ftKb_GObj* gobj);
/* 0FDA68 */ void ftKb_SsSpecialN_Coll(ftKb_GObj* gobj);
/* 0FDAF0 */ void ftKb_SsSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 0FDB78 */ void ftKb_SsSpecialAirN_Coll(ftKb_GObj* gobj);
/* 0FDC00 */ void ftKb_SpecialNFx_800FDC00(ftKb_GObj* gobj, Vec3* vec);
/* 0FDC70 */ void ftKb_SpecialNFx_800FDC70(ftKb_GObj* gobj, Vec3* vec);
/* 0FDD14 */ bool ftKb_SpecialNFx_800FDD14(ftKb_GObj* gobj);
/* 0FDD4C */ ftFx_SpecialNIndex ftKb_SpecialNFx_800FDD4C(ftKb_GObj* gobj);
/* 0FDDF4 */ bool ftKb_SpecialNFx_800FDDF4(ftKb_GObj* gobj);
/* 0FDEB4 */ void ftKb_SpecialNFx_800FDEB4(ftKb_GObj* gobj);
/* 0FDEE0 */ void ftKb_SpecialNFx_800FDEE0(ftKb_GObj* gobj);
/* 0FDF30 */ void ftKb_SpecialNFx_800FDF30(ftKb_GObj* gobj);
/* 0FE100 */ void ftKb_SpecialNFx_800FE100(ftKb_GObj* gobj);
/* 0FE240 */ void ftKb_SpecialNFx_800FE240(ftKb_GObj* gobj);
/* 0FE360 */ void ftKb_FxSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FE450 */ void ftKb_FxSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 0FE5C8 */ void ftKb_FxSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 0FE688 */ void ftKb_FxSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 0FE778 */ void ftKb_FxSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 0FE928 */ void ftKb_FxSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 0FEA50 */ void ftKb_FxSpecialNStart_IASA(ftKb_GObj* gobj);
/* 0FEA78 */ void ftKb_FxSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 0FEAA0 */ void ftKb_FxSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 0FEAA4 */ void ftKb_FxSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 0FEACC */ void ftKb_FxSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 0FEAF4 */ void ftKb_FxSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 0FEAF8 */ void ftKb_FxSpecialNStart_Phys(ftKb_GObj* gobj);
/* 0FEB18 */ void ftKb_FxSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 0FEB38 */ void ftKb_FxSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 0FEB58 */ void ftKb_FxSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 0FEB78 */ void ftKb_FxSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 0FEB98 */ void ftKb_FxSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 0FEBB8 */ void ftKb_FxSpecialNStart_Coll(ftKb_GObj* gobj);
/* 0FEBD8 */ void ftKb_FxSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 0FEBF8 */ void ftKb_FxSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 0FEC18 */ void ftKb_FxSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 0FEC38 */ void ftKb_FxSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 0FEC58 */ void ftKb_FxSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 0FEC78 */ bool ftKb_SpecialNNs_800FEC78(ftKb_GObj* gobj);
/* 0FECBC */ void ftKb_SpecialNNs_800FECBC(ftKb_GObj* gobj);
/* 0FECE8 */ void ftKb_SpecialNNs_800FECE8(ftKb_GObj* gobj);
/* 0FED38 */ void ftKb_SpecialNNs_800FED38(ftKb_GObj* gobj);
/* 0FEDD0 */ void ftKb_SpecialNNs_800FEDD0(ftKb_GObj* gobj);
/* 0FEE70 */ void ftKb_NsSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FEF58 */ void ftKb_NsSpecialNHold_Anim(ftKb_GObj* gobj);
/* 0FF08C */ void ftKb_NsSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 0FF10C */ void ftKb_NsSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 0FF1F4 */ void ftKb_NsSpecialAirNHold_Anim(ftKb_GObj* gobj);
/* 0FF328 */ void ftKb_NsSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 0FF3DC */ void ftKb_NsSpecialNStart_IASA(ftKb_GObj* gobj);
/* 0FF3E0 */ void ftKb_NsSpecialNHold_IASA(ftKb_GObj* gobj);
/* 0FF450 */ void ftKb_NsSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 0FF454 */ void ftKb_NsSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 0FF458 */ void ftKb_NsSpecialAirNHold_IASA(ftKb_GObj* gobj);
/* 0FF4C8 */ void ftKb_NsSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 0FF4CC */ void ftKb_NsSpecialNStart_Phys(ftKb_GObj* gobj);
/* 0FF504 */ void ftKb_NsSpecialNHold_Phys(ftKb_GObj* gobj);
/* 0FF524 */ void ftKb_NsSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 0FF544 */ void ftKb_NsSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 0FF5A4 */ void ftKb_NsSpecialAirNHold_Phys(ftKb_GObj* gobj);
/* 0FF604 */ void ftKb_NsSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 0FF664 */ void ftKb_NsSpecialNStart_Coll(ftKb_GObj* gobj);
/* 0FF6D0 */ void ftKb_NsSpecialNHold_Coll(ftKb_GObj* gobj);
/* 0FF73C */ void ftKb_NsSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 0FF7A8 */ void ftKb_NsSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 0FF814 */ void ftKb_NsSpecialAirNHold_Coll(ftKb_GObj* gobj);
/* 0FF880 */ void ftKb_NsSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 0FF8EC */ void ftKb_SpecialNDk_800FF8EC(ftKb_GObj* gobj);
/* 0FFA10 */ void ftKb_SpecialNDk_800FFA10(ftKb_GObj* gobj);
/* 0FFB24 */ void ftKb_DkSpecialNStart_Anim(ftKb_GObj* gobj);
/* 0FFBAC */ void ftKb_DkSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 0FFC48 */ void ftKb_DkSpecialNCancel_Anim(ftKb_GObj* gobj);
/* 0FFC94 */ void ftKb_DkSpecialN_Anim(ftKb_GObj* gobj);
/* 0FFE6C */ void ftKb_DkSpecialNFull_Anim(ftKb_GObj* gobj);
/* 0FFFB8 */ void ftKb_DkSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 100040 */ void ftKb_DkSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 1000DC */ void ftKb_DkSpecialAirNCancel_Anim(ftKb_GObj* gobj);
/* 100128 */ void ftKb_DkSpecialAirN_Anim(ftKb_GObj* gobj);
/* 1002C8 */ void ftKb_DkSpecialAirNFull_Anim(ftKb_GObj* gobj);
/* 1003DC */ void ftKb_DkSpecialNStart_IASA(ftKb_GObj* gobj);
/* 1003E0 */ void ftKb_DkSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 100518 */ void ftKb_DkSpecialNCancel_IASA(ftKb_GObj* gobj);
/* 10051C */ void ftKb_DkSpecialN_IASA(ftKb_GObj* gobj);
/* 100520 */ void ftKb_DkSpecialNFull_IASA(ftKb_GObj* gobj);
/* 100524 */ void ftKb_DkSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 100528 */ void ftKb_DkSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 100654 */ void ftKb_DkSpecialAirNCancel_IASA(ftKb_GObj* gobj);
/* 100658 */ void ftKb_DkSpecialAirN_IASA(ftKb_GObj* gobj);
/* 10065C */ void ftKb_DkSpecialAirNFull_IASA(ftKb_GObj* gobj);
/* 100660 */ void ftKb_DkSpecialNStart_Phys(ftKb_GObj* gobj);
/* 100680 */ void ftKb_DkSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 1006A0 */ void ftKb_DkSpecialNCancel_Phys(ftKb_GObj* gobj);
/* 1006C0 */ void ftKb_DkSpecialN_Phys(ftKb_GObj* gobj);
/* 1006E0 */ void ftKb_DkSpecialNFull_Phys(ftKb_GObj* gobj);
/* 100700 */ void ftKb_DkSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 100720 */ void ftKb_DkSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 100740 */ void ftKb_DkSpecialAirNCancel_Phys(ftKb_GObj* gobj);
/* 100760 */ void ftKb_DkSpecialAirN_Phys(ftKb_GObj* gobj);
/* 100780 */ void ftKb_DkSpecialAirNFull_Phys(ftKb_GObj* gobj);
/* 1007A0 */ void ftKb_DkSpecialNStart_Coll(ftKb_GObj* gobj);
/* 100840 */ void ftKb_DkSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 1008E0 */ void ftKb_DkSpecialNCancel_Coll(ftKb_GObj* gobj);
/* 100980 */ void ftKb_DkSpecialN_Coll(ftKb_GObj* gobj);
/* 100A20 */ void ftKb_DkSpecialNFull_Coll(ftKb_GObj* gobj);
/* 100AC0 */ void ftKb_DkSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 100B60 */ void ftKb_DkSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 100C00 */ void ftKb_DkSpecialAirNCancel_Coll(ftKb_GObj* gobj);
/* 100CA0 */ void ftKb_DkSpecialAirN_Coll(ftKb_GObj* gobj);
/* 100D40 */ void ftKb_DkSpecialAirNFull_Coll(ftKb_GObj* gobj);
/* 100DE0 */ void ftKb_SpecialNPr_80100DE0(ftKb_GObj* gobj);
/* 100F94 */ void ftKb_SpecialNPr_80100F94(ftKb_GObj* gobj);
/* 1010D4 */ void ftKb_SpecialNPr_801010D4(ftKb_GObj* gobj);
/* 10131C */ void ftKb_SpecialNPr_8010131C(ftKb_GObj* gobj);
/* 10140C */ void ftKb_SpecialNPr_8010140C(ftKb_GObj* gobj);
/* 101560 */ void ftKb_SpecialNPr_80101560(ftKb_GObj* gobj);
/* 101618 */ void ftKb_SpecialNPr_80101618(ftKb_GObj* gobj);
/* 1016CC */ void ftKb_PrSpecialNStart_Anim(ftKb_GObj* gobj);
/* 1017B0 */ void ftKb_PrSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 101960 */ void ftKb_PrSpecialNFull_Anim(ftKb_GObj* gobj);
/* 101AD0 */ void ftKb_PrSpecialN1_Anim(ftKb_GObj* gobj);
/* 101EA0 */ void ftKb_PrSpecialNTurn_Anim(ftKb_GObj* gobj);
/* 102198 */ void ftKb_PrSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 102470 */ void ftKb_PrSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 10254C */ void ftKb_PrSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 1026FC */ void ftKb_PrSpecialAirNFull_Anim(ftKb_GObj* gobj);
/* 10286C */ void ftKb_PrSpecialAirN_Anim(ftKb_GObj* gobj);
/* 102DD0 */ void ftKb_PrSpecialN_Anim(ftKb_GObj* gobj);
/* 103088 */ void ftKb_PrSpecialAirNEndR_Anim(ftKb_GObj* gobj);
/* 103374 */ void ftKb_PrSpecialNHit_Anim(ftKb_GObj* gobj);
/* 1035C8 */ void ftKb_PrSpecialNStart_IASA(ftKb_GObj* gobj);
/* 1035CC */ void ftKb_PrSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 103734 */ void ftKb_PrSpecialNFull_IASA(ftKb_GObj* gobj);
/* 10389C */ void ftKb_PrSpecialN1_IASA(ftKb_GObj* gobj);
/* 103A24 */ void ftKb_PrSpecialNTurn_IASA(ftKb_GObj* gobj);
/* 103A28 */ void ftKb_PrSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 103A2C */ void ftKb_PrSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 103A30 */ void ftKb_PrSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 103B98 */ void ftKb_PrSpecialAirNFull_IASA(ftKb_GObj* gobj);
/* 103D00 */ void ftKb_PrSpecialAirN_IASA(ftKb_GObj* gobj);
/* 103D04 */ void ftKb_PrSpecialN_IASA(ftKb_GObj* gobj);
/* 103D08 */ void ftKb_PrSpecialAirNEndR_IASA(ftKb_GObj* gobj);
/* 103D0C */ void ftKb_PrSpecialNHit_IASA(ftKb_GObj* gobj);
/* 103D10 */ void ftKb_PrSpecialNStart_Phys(ftKb_GObj* gobj);
/* 103D40 */ void ftKb_PrSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 103D70 */ void ftKb_PrSpecialNFull_Phys(ftKb_GObj* gobj);
/* 103DA0 */ void ftKb_PrSpecialN1_Phys(ftKb_GObj* gobj);
/* 103FA8 */ void ftKb_PrSpecialNTurn_Phys(ftKb_GObj* gobj);
/* 1042AC */ void ftKb_PrSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 1042E8 */ void ftKb_PrSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 104318 */ void ftKb_PrSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 104348 */ void ftKb_PrSpecialAirNFull_Phys(ftKb_GObj* gobj);
/* 104378 */ void ftKb_PrSpecialAirN_Phys(ftKb_GObj* gobj);
/* 1044F8 */ void ftKb_PrSpecialN_Phys(ftKb_GObj* gobj);
/* 104610 */ void ftKb_PrSpecialAirNEndR_Phys(ftKb_GObj* gobj);
/* 104640 */ void ftKb_PrSpecialNHit_Phys(ftKb_GObj* gobj);
/* 1046A4 */ void ftKb_PrSpecialNStart_Coll(ftKb_GObj* gobj);
/* 10475C */ void ftKb_PrSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 104864 */ void ftKb_PrSpecialNFull_Coll(ftKb_GObj* gobj);
/* 10496C */ void ftKb_PrSpecialN1_Coll(ftKb_GObj* gobj);
/* 104D14 */ void ftKb_PrSpecialNTurn_Coll(ftKb_GObj* gobj);
/* 104DF8 */ void ftKb_PrSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 104E58 */ void ftKb_PrSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 104F10 */ void ftKb_PrSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 105018 */ void ftKb_PrSpecialAirNFull_Coll(ftKb_GObj* gobj);
/* 105120 */ void ftKb_PrSpecialAirN_Coll(ftKb_GObj* gobj);
/* 1056FC */ void ftKb_PrSpecialN_Coll(ftKb_GObj* gobj);
/* 1057BC */ void ftKb_PrSpecialAirNEndR_Coll(ftKb_GObj* gobj);
/* 10581C */ void ftKb_PrSpecialNHit_Coll(ftKb_GObj* gobj);
/* 105B2C */ void ftKb_SpecialNZd_80105B2C(ftKb_GObj* gobj);
/* 105BA8 */ void ftKb_SpecialNZd_80105BA8(ftKb_GObj* gobj);
/* 105C3C */ void ftKb_ZdSpecialN_Anim(ftKb_GObj* gobj);
/* 105CD0 */ void ftKb_ZdSpecialAirN_Anim(ftKb_GObj* gobj);
/* 105D64 */ void ftKb_ZdSpecialN_IASA(ftKb_GObj* gobj);
/* 105D68 */ void ftKb_ZdSpecialAirN_IASA(ftKb_GObj* gobj);
/* 105D6C */ void ftKb_ZdSpecialN_Phys(ftKb_GObj* gobj);
/* 105DA0 */ void ftKb_ZdSpecialAirN_Phys(ftKb_GObj* gobj);
/* 105E14 */ void ftKb_ZdSpecialN_Coll(ftKb_GObj* gobj);
/* 105E50 */ void ftKb_ZdSpecialAirN_Coll(ftKb_GObj* gobj);
/* 105E8C */ void ftKb_SpecialNSk_80105E8C(ftKb_GObj* gobj);
/* 105F3C */ void ftKb_SpecialNSk_80105F3C(ftKb_GObj* gobj);
/* 105FF0 */ void ftKb_SpecialNSk_80105FF0(ftKb_GObj* gobj);
/* 106020 */ void ftKb_SpecialNSk_80106020(ftKb_GObj* gobj);
/* 10603C */ void ftKb_SpecialNSk_8010603C(ftKb_GObj* gobj);
/* 10612C */ void ftKb_SpecialNSk_8010612C(ftKb_GObj* gobj);
/* 1061E4 */ void ftKb_SpecialNSk_801061E4(ftKb_GObj* gobj);
/* 10629C */ void ftKb_SkSpecialNStart_Anim(ftKb_GObj* gobj);
/* 106334 */ void ftKb_SkSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 1063E0 */ void ftKb_SkSpecialNCancel_Anim(ftKb_GObj* gobj);
/* 106428 */ void ftKb_SkSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 1064AC */ void ftKb_SkSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 106544 */ void ftKb_SkSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 1065F0 */ void ftKb_SkSpecialAirNCancel_Anim(ftKb_GObj* gobj);
/* 106670 */ void ftKb_SkSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 10672C */ void ftKb_SkSpecialNStart_IASA(ftKb_GObj* gobj);
/* 106730 */ void ftKb_SkSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 10680C */ void ftKb_SkSpecialNCancel_IASA(ftKb_GObj* gobj);
/* 106810 */ void ftKb_SkSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 106814 */ void ftKb_SkSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 106818 */ void ftKb_SkSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 1068F4 */ void ftKb_SkSpecialAirNCancel_IASA(ftKb_GObj* gobj);
/* 1068F8 */ void ftKb_SkSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 1068FC */ void ftKb_SkSpecialNStart_Phys(ftKb_GObj* gobj);
/* 10691C */ void ftKb_SkSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 10693C */ void ftKb_SkSpecialNCancel_Phys(ftKb_GObj* gobj);
/* 10695C */ void ftKb_SkSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 10697C */ void ftKb_SkSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 10699C */ void ftKb_SkSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 1069BC */ void ftKb_SkSpecialAirNCancel_Phys(ftKb_GObj* gobj);
/* 1069DC */ void ftKb_SkSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 1069FC */ void ftKb_SkSpecialNStart_Coll(ftKb_GObj* gobj);
/* 106A84 */ void ftKb_SkSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 106B0C */ void ftKb_SkSpecialNCancel_Coll(ftKb_GObj* gobj);
/* 106B84 */ void ftKb_SkSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 106C10 */ void ftKb_SkSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 106C98 */ void ftKb_SkSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 106D20 */ void ftKb_SkSpecialAirNCancel_Coll(ftKb_GObj* gobj);
/* 106D5C */ void ftKb_SkSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 106F44 */ void ftKb_SpecialNMt_80106F44(ftKb_GObj* gobj);
/* 106F9C */ void ftKb_SpecialNMt_80106F9C(ftKb_GObj* gobj);
/* 106FEC */ void ftKb_SpecialNMt_80106FEC(ftKb_GObj* gobj);
/* 107040 */ void ftKb_SpecialNMt_80107040(ftKb_GObj* gobj);
/* 10709C */ void ftKb_SpecialNMt_8010709C(ftKb_GObj* gobj);
/* 107130 */ void ftKb_SpecialNMt_80107130(ftKb_GObj* gobj);
/* 1071FC */ void ftKb_SpecialNMt_801071FC(ftKb_GObj* gobj);
/* 107410 */ void ftKb_SpecialNMt_80107410(ftKb_GObj* gobj);
/* 107568 */ void ftKb_SpecialNMt_80107568(ftKb_GObj* gobj);
/* 107638 */ void ftKb_SpecialNMt_80107638(ftKb_GObj* gobj);
/* 107700 */ void ftKb_MtSpecialNStart_Anim(ftKb_GObj* gobj);
/* 107884 */ void ftKb_MtSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 107A84 */ void ftKb_MtSpecialNLoopFull_Anim(ftKb_GObj* gobj);
/* 107AB4 */ void ftKb_MtSpecialNCancel_Anim(ftKb_GObj* gobj);
/* 107B38 */ void ftKb_MtSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 107B7C */ void ftKb_MtSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 107D0C */ void ftKb_MtSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 107F0C */ void ftKb_MtSpecialAirNLoopFull_Anim(ftKb_GObj* gobj);
/* 107F3C */ void ftKb_MtSpecialAirNCancel_Anim(ftKb_GObj* gobj);
/* 107FC0 */ void ftKb_MtSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 108040 */ void ftKb_MtSpecialNStart_IASA(ftKb_GObj* gobj);
/* 108044 */ void ftKb_MtSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 1081F8 */ void ftKb_MtSpecialNLoopFull_IASA(ftKb_GObj* gobj);
/* 108394 */ void ftKb_MtSpecialNCancel_IASA(ftKb_GObj* gobj);
/* 108398 */ void ftKb_MtSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 10839C */ void ftKb_MtSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 1083A0 */ void ftKb_MtSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 108504 */ void ftKb_MtSpecialAirNLoopFull_IASA(ftKb_GObj* gobj);
/* 108650 */ void ftKb_MtSpecialAirNCancel_IASA(ftKb_GObj* gobj);
/* 108654 */ void ftKb_MtSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 108658 */ void ftKb_MtSpecialNStart_Phys(ftKb_GObj* gobj);
/* 108678 */ void ftKb_MtSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 108698 */ void ftKb_MtSpecialNLoopFull_Phys(ftKb_GObj* gobj);
/* 1086B8 */ void ftKb_MtSpecialNCancel_Phys(ftKb_GObj* gobj);
/* 1086D8 */ void ftKb_MtSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 1086F8 */ void ftKb_MtSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 108718 */ void ftKb_MtSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 108738 */ void ftKb_MtSpecialAirNLoopFull_Phys(ftKb_GObj* gobj);
/* 108758 */ void ftKb_MtSpecialAirNCancel_Phys(ftKb_GObj* gobj);
/* 108778 */ void ftKb_MtSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 108798 */ void ftKb_MtSpecialNStart_Coll(ftKb_GObj* gobj);
/* 108820 */ void ftKb_MtSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 1088A8 */ void ftKb_MtSpecialNLoopFull_Coll(ftKb_GObj* gobj);
/* 108930 */ void ftKb_MtSpecialNCancel_Coll(ftKb_GObj* gobj);
/* 1089B8 */ void ftKb_MtSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 108A40 */ void ftKb_MtSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 108AC8 */ void ftKb_MtSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 108B50 */ void ftKb_MtSpecialAirNLoopFull_Coll(ftKb_GObj* gobj);
/* 108BD8 */ void ftKb_MtSpecialAirNCancel_Coll(ftKb_GObj* gobj);
/* 108C60 */ void ftKb_MtSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 108CE8 */ void ftKb_SpecialNIc_80108CE8(ftKb_GObj* gobj);
/* 108D04 */ void ftKb_SpecialNIc_80108D04(ftKb_GObj* gobj);
/* 108D64 */ void ftKb_SpecialNIc_80108D64(ftKb_GObj* gobj);
/* 108E14 */ void ftKb_SpecialNIc_80108E14(ftKb_GObj* gobj);
/* 108EFC */ void ftKb_PpSpecialN_Anim(ftKb_GObj* gobj);
/* 108F38 */ void ftKb_PpSpecialAirN_Anim(ftKb_GObj* gobj);
/* 108F74 */ void ftKb_PpSpecialN_IASA(ftKb_GObj* gobj);
/* 108F78 */ void ftKb_PpSpecialAirN_IASA(ftKb_GObj* gobj);
/* 108F7C */ void ftKb_PpSpecialN_Phys(ftKb_GObj* gobj);
/* 108F9C */ void ftKb_PpSpecialAirN_Phys(ftKb_GObj* gobj);
/* 108FBC */ void ftKb_PpSpecialN_Coll(ftKb_GObj* gobj);
/* 109030 */ void ftKb_PpSpecialAirN_Coll(ftKb_GObj* gobj);
/* 109238 */ Fighter_Part ftKb_SpecialNYs_80109238(ftKb_GObj* gobj);
/* 109260 */ void ftKb_SpecialNYs_80109260(ftKb_GObj* gobj);
/* 109290 */ float ftKb_SpecialNYs_80109290(ftKb_GObj* gobj);
/* 10929C */ float ftKb_SpecialNYs_8010929C(ftKb_GObj* gobj);
/* 1092AC */ float ftKb_SpecialNYs_801092AC(ftKb_GObj* gobj);
/* 1092BC */ float ftKb_SpecialNYs_801092BC(ftKb_GObj* gobj);
/* 1092CC */ float ftKb_SpecialNYs_801092CC(ftKb_GObj* gobj);
/* 1092DC */ f32 ftKb_SpecialNYs_801092DC(ftKb_GObj* gobj);
/* 1092F4 */ float ftKb_SpecialNYs_801092F4(ftKb_GObj* gobj);
/* 10930C */ float ftKb_SpecialNYs_8010930C(ftKb_GObj* gobj);
/* 109324 */ float ftKb_SpecialNYs_80109324(ftKb_GObj* gobj);
/* 10933C */ int ftKb_SpecialNYs_8010933C(ftKb_GObj* gobj);
/* 109354 */ void ftKb_SpecialNYs_80109354(ftKb_GObj* gobj);
/* 109380 */ void ftKb_SpecialNYs_80109380(ftKb_GObj* gobj);
/* 1093A0 */ ftDynamics* ftKb_SpecialNYs_801093A0(ftKb_GObj* gobj);
/* 1093B4 */ void ftKb_SpecialNYs_801093B4(ftKb_GObj* gobj);
/* 10941C */ void ftKb_SpecialNYs_8010941C(ftKb_GObj* gobj);
/* 1094FC */ void ftKb_SpecialNYs_801094FC(ftKb_GObj* gobj);
/* 109D6C */ void ftKb_YsSpecialN1_Anim(ftKb_GObj* gobj);
/* 109DB8 */ void ftKb_YsSpecialAirNCapture2_Anim(ftKb_GObj* gobj);
/* 109E04 */ void ftKb_YsSpecialAirNCapture1_Anim(ftKb_GObj* gobj);
/* 109EE8 */ void ftKb_YsSpecialNCapture1_Anim(ftKb_GObj* gobj);
/* 109FD4 */ void ftKb_YsSpecialAirCapture2_Anim(ftKb_GObj* gobj);
/* 10A0B8 */ void ftKb_YsSpecialAirCapture1_Anim(ftKb_GObj* gobj);
/* 10A1A4 */ void ftKb_YsSpecialNCapture2_0_Anim(ftKb_GObj* gobj);
/* 10A304 */ void ftKb_YsSpecialNCapture2_1_Anim(ftKb_GObj* gobj);
/* 10A3C8 */ void ftKb_YsSpecialAirN2_1_Anim(ftKb_GObj* gobj);
/* 10A528 */ void ftKb_YsSpecialAirN2_0_Anim(ftKb_GObj* gobj);
/* 10A5EC */ void ftKb_YsSpecialN1_Phys(ftKb_GObj* gobj);
/* 10A60C */ void ftKb_YsSpecialAirNCapture2_Phys(ftKb_GObj* gobj);
/* 10A62C */ void ftKb_YsSpecialAirNCapture1_Phys(ftKb_GObj* gobj);
/* 10A64C */ void ftKb_YsSpecialNCapture1_Phys(ftKb_GObj* gobj);
/* 10A66C */ void ftKb_YsSpecialAirCapture1_Phys(ftKb_GObj* gobj);
/* 10A68C */ void ftKb_YsSpecialAirCapture2_Phys(ftKb_GObj* gobj);
/* 10A6AC */ void ftKb_YsSpecialNCapture2_0_Phys(ftKb_GObj* gobj);
/* 10A6CC */ void ftKb_YsSpecialNCapture2_1_Phys(ftKb_GObj* gobj);
/* 10A6EC */ void ftKb_YsSpecialAirN2_1_Phys(ftKb_GObj* gobj);
/* 10A70C */ void ftKb_YsSpecialAirN2_0_Phys(ftKb_GObj* gobj);
/* 10A72C */ void ftKb_YsSpecialN1_Coll(ftKb_GObj* gobj);
/* 10A754 */ void ftKb_YsSpecialAirNCapture2_Coll(ftKb_GObj* gobj);
/* 10A77C */ void ftKb_YsSpecialAirNCapture1_Coll(ftKb_GObj* gobj);
/* 10A7A4 */ void ftKb_YsSpecialNCapture1_Coll(ftKb_GObj* gobj);
/* 10A7CC */ void ftKb_YsSpecialAirCapture2_Coll(ftKb_GObj* gobj);
/* 10A7F4 */ void ftKb_YsSpecialAirCapture1_Coll(ftKb_GObj* gobj);
/* 10A81C */ void ftKb_YsSpecialNCapture2_0_Coll(ftKb_GObj* gobj);
/* 10A844 */ void ftKb_YsSpecialNCapture2_1_Coll(ftKb_GObj* gobj);
/* 10A86C */ void ftKb_YsSpecialAirN2_1_Coll(ftKb_GObj* gobj);
/* 10A894 */ void ftKb_YsSpecialAirN2_0_Coll(ftKb_GObj* gobj);
/* 10A8BC */ void ftKb_SpecialNYs_8010A8BC(ftKb_GObj* gobj);
/* 10AA1C */ void ftCo_CaptureKirbyYoshi_Anim(ftKb_GObj* gobj);
/* 10AA20 */ void ftCo_CaptureKirbyYoshi_IASA(ftKb_GObj* gobj);
/* 10AA24 */ void ftCo_CaptureKirbyYoshi_Phys(ftKb_GObj* gobj);
/* 10AA28 */ void ftCo_CaptureKirbyYoshi_Coll(ftKb_GObj* gobj);
/* 10AA2C */ void ftKb_SpecialNYs_8010AA2C(ftKb_GObj* gobj);
/* 10AC78 */ void ftKb_SpecialNYs_8010AC78(ftKb_GObj* gobj);
/* 10AF54 */ void ftCo_KirbyYoshiEgg_Anim(ftKb_GObj* gobj);
/* 10B0A0 */ void ftCo_KirbyYoshiEgg_IASA(ftKb_GObj* gobj);
/* 10B0A4 */ void ftCo_KirbyYoshiEgg_Phys(ftKb_GObj* gobj);
/* 10B0DC */ void ftCo_KirbyYoshiEgg_Coll(ftKb_GObj* gobj);
/* 10B2FC */ void ftKb_SpecialNMs_8010B2FC(ftKb_GObj* gobj);
/* 10B4A0 */ void ftKb_SpecialNMs_8010B4A0(ftKb_GObj* gobj);
/* 10B65C */ void ftKb_MsSpecialNStart_Anim(ftKb_GObj* gobj);
/* 10B6C4 */ void ftKb_MsSpecialAirNStart_Anim(ftKb_GObj* gobj);
/* 10B72C */ void ftKb_MsSpecialNStart_IASA(ftKb_GObj* gobj);
/* 10B730 */ void ftKb_MsSpecialAirNStart_IASA(ftKb_GObj* gobj);
/* 10B734 */ void ftKb_MsSpecialNStart_Phys(ftKb_GObj* gobj);
/* 10B78C */ void ftKb_MsSpecialAirNStart_Phys(ftKb_GObj* gobj);
/* 10B7F0 */ void ftKb_MsSpecialNStart_Coll(ftKb_GObj* gobj);
/* 10B82C */ void ftKb_MsSpecialAirNStart_Coll(ftKb_GObj* gobj);
/* 10B868 */ void ftKb_SpecialNMs_8010B868(ftKb_GObj* gobj);
/* 10B8E0 */ void ftKb_SpecialNMs_8010B8E0(ftKb_GObj* gobj);
/* 10B958 */ void ftKb_MsSpecialNLoop_Anim(ftKb_GObj* gobj);
/* 10B9C0 */ void ftKb_MsSpecialAirNLoop_Anim(ftKb_GObj* gobj);
/* 10BA28 */ void ftKb_MsSpecialNLoop_IASA(ftKb_GObj* gobj);
/* 10BA60 */ void ftKb_MsSpecialAirNLoop_IASA(ftKb_GObj* gobj);
/* 10BA98 */ void ftKb_MsSpecialNLoop_Phys(ftKb_GObj* gobj);
/* 10BAB8 */ void ftKb_MsSpecialAirNLoop_Phys(ftKb_GObj* gobj);
/* 10BAD8 */ void ftKb_MsSpecialNLoop_Coll(ftKb_GObj* gobj);
/* 10BB14 */ void ftKb_MsSpecialAirNLoop_Coll(ftKb_GObj* gobj);
/* 10BB50 */ void ftKb_SpecialNMs_8010BB50(ftKb_GObj* gobj);
/* 10BBC8 */ void ftKb_SpecialNMs_8010BBC8(ftKb_GObj* gobj);
/* 10BC40 */ void ftKb_SpecialNMs_8010BC40(ftKb_GObj* gobj);
/* 10BC90 */ void ftKb_SpecialNMs_8010BC90(ftKb_GObj* gobj);
/* 10BCE0 */ void ftKb_MsSpecialNEnd_Anim(ftKb_GObj* gobj);
/* 10BDD8 */ void ftKb_MsSpecialAirNEnd_Anim(ftKb_GObj* gobj);
/* 10BED0 */ void ftKb_MsSpecialNEnd_IASA(ftKb_GObj* gobj);
/* 10BED4 */ void ftKb_MsSpecialAirNEnd_IASA(ftKb_GObj* gobj);
/* 10BED8 */ void ftKb_MsSpecialNEnd_Phys(ftKb_GObj* gobj);
/* 10BEF8 */ void ftKb_MsSpecialAirNEnd_Phys(ftKb_GObj* gobj);
/* 10BF18 */ void ftKb_MsSpecialNEnd_Coll(ftKb_GObj* gobj);
/* 10BF54 */ void ftKb_MsSpecialAirNEnd_Coll(ftKb_GObj* gobj);
/* 10BF90 */ void ftKb_SpecialNPe_8010BF90(ftKb_GObj* gobj);
/* 10C06C */ void ftKb_SpecialNPe_8010C06C(ftKb_GObj* gobj);
/* 10C148 */ void ftKb_SpecialNPe_8010C148(ftKb_GObj* gobj);
/* 10C1E8 */ void ftKb_SpecialNPe_8010C1E8(ftKb_GObj* gobj);
/* 10C3C0 */ void ftKb_SpecialNPe_8010C3C0(ftKb_GObj* gobj);
/* 10C3F4 */ void ftKb_SpecialNPe_8010C3F4(ftKb_GObj* gobj);
/* 10C47C */ void ftKb_SpecialNPe_8010C47C(ftKb_GObj* gobj);
/* 10C4AC */ bool ftKb_SpecialNPe_8010C4AC(ftKb_GObj* gobj);
/* 10C4D4 */ void ftKb_SpecialNPe_8010C4D4(ftKb_GObj* gobj);
/* 10C560 */ void ftKb_SpecialNPe_8010C560(ftKb_GObj* gobj);
/* 10C5FC */ void ftKb_PeSpecialLw_Anim(ftKb_GObj* gobj);
/* 10C6B8 */ void ftKb_PeSpecialAirLw_Anim(ftKb_GObj* gobj);
/* 10C774 */ void ftKb_PeSpecialLw_IASA(ftKb_GObj* gobj);
/* 10C778 */ void ftKb_PeSpecialAirLw_IASA(ftKb_GObj* gobj);
/* 10C77C */ void ftKb_PeSpecialLw_Phys(ftKb_GObj* gobj);
/* 10C7B0 */ void ftKb_PeSpecialAirLw_Phys(ftKb_GObj* gobj);
/* 10C860 */ void ftKb_PeSpecialLw_Coll(ftKb_GObj* gobj);
/* 10C89C */ void ftKb_PeSpecialAirLw_Coll(ftKb_GObj* gobj);
/* 10C8D8 */ void ftKb_SpecialNPe_8010C8D8(ftKb_GObj* gobj);
/* 10C9CC */ void ftKb_SpecialNPe_8010C9CC(ftKb_GObj* gobj);
/* 10CAB4 */ void ftKb_PeSpecialLwHit_Anim(ftKb_GObj* gobj);
/* 10CB18 */ void ftKb_PeSpecialAirLwHit_Anim(ftKb_GObj* gobj);
/* 10CB7C */ void ftKb_PeSpecialLwHit_IASA(ftKb_GObj* gobj);
/* 10CB80 */ void ftKb_PeSpecialAirLwHit_IASA(ftKb_GObj* gobj);
/* 10CB84 */ void ftKb_PeSpecialLwHit_Phys(ftKb_GObj* gobj);
/* 10CBA4 */ void ftKb_PeSpecialAirLwHit_Phys(ftKb_GObj* gobj);
/* 10CBF4 */ void ftKb_PeSpecialLwHit_Coll(ftKb_GObj* gobj);
/* 10CC30 */ void ftKb_PeSpecialAirLwHit_Coll(ftKb_GObj* gobj);
/* 10CC6C */ void ftKb_SpecialNGw_8010CC6C(ftKb_GObj* gobj);
/* 10CCD4 */ void ftKb_SpecialNGw_8010CCD4(ftKb_GObj* gobj);
/* 10CD44 */ void ftKb_SpecialNGw_8010CD44(ftKb_GObj* gobj);
/* 10D074 */ void ftKb_SpecialNGw_8010D074(ftKb_GObj* gobj);
/* 10D0A8 */ void ftKb_SpecialNGw_8010D0A8(ftKb_GObj* gobj);
/* 10D130 */ void ftKb_SpecialNGw_8010D130(ftKb_GObj* gobj);
/* 10D160 */ void ftKb_SpecialNGw_8010D160(ftKb_GObj* gobj);
/* 10D188 */ void ftKb_SpecialNGw_8010D188(ftKb_GObj* gobj);
/* 10D204 */ void ftKb_SpecialNGw_8010D204(ftKb_GObj* gobj);
/* 10D280 */ void ftKb_GwSpecialN_Anim(ftKb_GObj* gobj);
/* 10D320 */ void ftKb_GwSpecialAirN_Anim(ftKb_GObj* gobj);
/* 10D3C0 */ void ftKb_GwSpecialN_IASA(ftKb_GObj* gobj);
/* 10D444 */ void ftKb_GwSpecialAirN_IASA(ftKb_GObj* gobj);
/* 10D4C8 */ void ftKb_GwSpecialN_Phys(ftKb_GObj* gobj);
/* 10D4E8 */ void ftKb_GwSpecialAirN_Phys(ftKb_GObj* gobj);
/* 10D508 */ void ftKb_GwSpecialN_Coll(ftKb_GObj* gobj);
/* 10D544 */ void ftKb_GwSpecialAirN_Coll(ftKb_GObj* gobj);
/* 10D580 */ void ftKb_SpecialNGw_8010D580(ftKb_GObj* gobj);
/* 10D5F0 */ void ftKb_SpecialNGw_8010D5F0(ftKb_GObj* gobj);
/* 10D660 */ void ftKb_SpecialNGw_8010D660(ftKb_GObj* gobj);
/* 10D6D0 */ void ftKb_SpecialNGw_8010D6D0(ftKb_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;
/* 3CA5B4 */ extern Fighter_CostumeStrings ftKb_Init_CostumeStrings[];
#define __GALE01_0EE528
/* 0F6178 */ static void fn_800F6178(ftKb_GObj*);
/* 0F6210 */ static void fn_800F6210(ftKb_GObj*);
/* 10B2E8 */ static void fn_8010B2E8(ftKb_GObj*);
/* 10C344 */ static void fn_8010C344(ftKb_GObj*);
/* 10C44C */ static void fn_8010C44C(ftKb_GObj*);
/* 10CD88 */ static void fn_8010CD88(ftKb_GObj*);
/* 10CFB0 */ static void fn_8010CFB0(ftKb_GObj*);
#define GALE01_132A0C
/* 132A0C */ void ftKp_Init_OnDeath(HSD_GObj* gobj);
/* 132A64 */ void ftKp_Init_UnkMotionStates3(HSD_GObj* gobj);
/* 132A84 */ void ftKp_Init_OnLoadForGKoopa(Fighter* fp);
/* 132ABC */ void ftKp_Init_OnLoad(HSD_GObj* gobj);
/* 132B38 */ void ftKp_Init_80132B38(void);
/* 132B3C */ void ftKp_Init_OnItemPickup(HSD_GObj* gobj, bool flag);
/* 132C1C */ void ftKp_Init_OnItemInvisible(HSD_GObj* gobj);
/* 132C64 */ void ftKp_Init_OnItemVisible(HSD_GObj* gobj);
/* 132CAC */ void ftKp_Init_OnItemDrop(HSD_GObj* gobj, bool bool1);
/* 132D00 */ void ftKp_Init_LoadSpecialAttrs(HSD_GObj* gobj);
/* 132D38 */ void ftKp_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 132D7C */ void ftKp_Init_OnKnockbackExit(HSD_GObj* gobj);
/* 132DC0 */ float ftKp_SpecialS_80132DC0(HSD_GObj* gobj);
/* 132DD0 */ float ftKp_SpecialS_80132DD0(HSD_GObj* gobj);
/* 132DE0 */ float ftKp_SpecialS_80132DE0(HSD_GObj* gobj);
/* 132DF0 */ float ftKp_SpecialS_80132DF0(HSD_GObj* gobj);
/* 132E00 */ float ftKp_SpecialS_80132E00(HSD_GObj* gobj);
/* 132E10 */ float ftKp_SpecialS_80132E10(HSD_GObj* gobj);
/* 132E20 */ float ftKp_SpecialS_80132E20(HSD_GObj* gobj);
/* 132E30 */ void ftKp_SpecialS_80132E30(HSD_GObj* gobj);
/* 132EFC */ void ftKp_SpecialS_Enter(HSD_GObj* gobj);
/* 132F94 */ void ftKp_SpecialAirS_Enter(HSD_GObj* gobj);
/* 13302C */ void ftKp_SpecialS_8013302C(HSD_GObj* gobj);
/* 1330E4 */ void ftKp_SpecialS_801330E4(HSD_GObj* gobj);
/* 13319C */ void ftKp_SpecialS_8013319C(HSD_GObj* gobj);
/* 13322C */ void ftKp_SpecialS_8013322C(HSD_GObj* gobj);
/* 1332C4 */ void ftKp_SpecialS_801332C4(HSD_GObj* gobj);
/* 133324 */ void ftKp_SpecialS_80133324(HSD_GObj* gobj);
/* 133398 */ void ftKp_SpecialS_80133398(HSD_GObj* gobj);
/* 1333F8 */ void ftKp_SpecialS_801333F8(HSD_GObj* gobj);
/* 133484 */ void ftKp_SpecialS_80133484(HSD_GObj* gobj);
/* 1334E4 */ void ftKp_SpecialS_801334E4(HSD_GObj* gobj);
/* 13359C */ void ftKp_SpecialS_8013359C(HSD_GObj* gobj);
/* 133654 */ void ftKp_SpecialSStart_Anim(HSD_GObj* gobj);
/* 133690 */ void ftKp_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 1336CC */ void ftKp_SpecialSHit_Anim(HSD_GObj* gobj);
/* 13383C */ void ftKp_SpecialAirSHit_Anim(HSD_GObj* gobj);
/* 1339AC */ void ftKp_SpecialSWait_Anim(HSD_GObj* gobj);
/* 1339B0 */ void ftKp_SpecialAirSWait_Anim(HSD_GObj* gobj);
/* 1339B4 */ void ftKp_SpecialSEndF_Anim(HSD_GObj* gobj);
/* 133A90 */ void ftKp_SpecialSEndB_Anim(HSD_GObj* gobj);
/* 133AD4 */ void ftKp_SpecialAirSEndF_Anim(HSD_GObj* gobj);
/* 133BB0 */ void ftKp_SpecialAirSEndB_Anim(HSD_GObj* gobj);
/* 133BF4 */ void ftKp_SpecialSHit_IASA(HSD_GObj* gobj);
/* 133D20 */ void ftKp_SpecialAirSHit_IASA(HSD_GObj* gobj);
/* 133E4C */ void ftKp_SpecialSWait_IASA(HSD_GObj* gobj);
/* 134038 */ void ftKp_SpecialAirSWait_IASA(HSD_GObj* gobj);
/* 134224 */ void ftKp_SpecialSStart_Phys(HSD_GObj* gobj);
/* 134244 */ void ftKp_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 134288 */ void ftKp_SpecialSHit_Phys(HSD_GObj* gobj);
/* 1342A8 */ void ftKp_SpecialAirSHit_Phys(HSD_GObj* gobj);
/* 1342C8 */ void ftKp_SpecialSWait_Phys(HSD_GObj* gobj);
/* 1342E8 */ void ftKp_SpecialAirSWait_Phys(HSD_GObj* gobj);
/* 134308 */ void ftKp_SpecialSEndF_Phys(HSD_GObj* gobj);
/* 134328 */ void ftKp_SpecialSEndB_Phys(HSD_GObj* gobj);
/* 134348 */ void ftKp_SpecialAirSEndF_Phys(HSD_GObj* gobj);
/* 134368 */ void ftKp_SpecialAirSEndB_Phys(HSD_GObj* gobj);
/* 134388 */ void ftKp_SpecialSStart_Coll(HSD_GObj* gobj);
/* 1343B0 */ void ftKp_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 1343D8 */ void ftKp_SpecialSHit_Coll(HSD_GObj* gobj);
/* 134400 */ void ftKp_SpecialAirSHit_Coll(HSD_GObj* gobj);
/* 134428 */ void ftKp_SpecialSWait_Coll(HSD_GObj* gobj);
/* 134450 */ void ftKp_SpecialAirSWait_Coll(HSD_GObj* gobj);
/* 134478 */ void ftKp_SpecialSEndF_Coll(HSD_GObj* gobj);
/* 1344A0 */ void ftKp_SpecialSEndB_Coll(HSD_GObj* gobj);
/* 1344C8 */ void ftKp_SpecialAirSEndF_Coll(HSD_GObj* gobj);
/* 1344F0 */ void ftKp_SpecialAirSEndB_Coll(HSD_GObj* gobj);
/* 13460C */ void ftKp_SpecialLw_Enter(HSD_GObj* gobj);
/* 1346A4 */ void ftKp_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 13474C */ void ftKp_SpecialLw_Anim(HSD_GObj* gobj);
/* 134788 */ void ftKp_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 1347C4 */ void ftKp_SpecialLw_Phys(HSD_GObj* gobj);
/* 134804 */ void ftKp_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 1348A0 */ void ftKp_SpecialLw_Coll(HSD_GObj* gobj);
/* 1348C0 */ void ftKp_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 134988 */ void ftKp_SpecialLw_80134988(HSD_GObj* gobj);
/* 1349C4 */ void ftKp_SpecialLwLanding_Anim(HSD_GObj* gobj);
/* 134A00 */ void ftKp_SpecialLwLanding_Phys(HSD_GObj* gobj);
/* 134A20 */ void ftKp_SpecialLwLanding_Coll(HSD_GObj* gobj);
/* 134A5C */ void ftKp_SpecialLw_80134A5C(HSD_GObj* gobj);
/* 134ACC */ void ftKp_SpecialLw_80134ACC(HSD_GObj* gobj);
/* 134D78 */ void ftKp_SpecialLw_80134D78(HSD_GObj* gobj);
/* 134DE0 */ void ftKp_SpecialLw_80134DE0(HSD_GObj* gobj);
/* 134E1C */ void ftKp_SpecialLw_80134E1C(HSD_GObj* gobj);
/* 134E58 */ void ftKp_SpecialN_Enter(HSD_GObj* gobj);
/* 134ED0 */ void ftKp_SpecialAirN_Enter(HSD_GObj* gobj);
/* 134F48 */ void ftKp_SpecialNStart_Anim(HSD_GObj* gobj);
/* 134F9C */ void ftKp_SpecialN_Anim(HSD_GObj* gobj);
/* 135040 */ void ftKp_SpecialNEnd_Anim(HSD_GObj* gobj);
/* 13507C */ void ftKp_SpecialAirNStart_Anim(HSD_GObj* gobj);
/* 1350D0 */ void ftKp_SpecialAirN_Anim(HSD_GObj* gobj);
/* 135174 */ void ftKp_SpecialAirNEnd_Anim(HSD_GObj* gobj);
/* 1351B0 */ void ftKp_SpecialNStart_IASA(HSD_GObj* gobj);
/* 1351B4 */ void ftKp_SpecialN_IASA(HSD_GObj* gobj);
/* 1352F0 */ void ftKp_SpecialNEnd_IASA(HSD_GObj* gobj);
/* 1352F4 */ void ftKp_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 1352F8 */ void ftKp_SpecialAirN_IASA(HSD_GObj* gobj);
/* 135434 */ void ftKp_SpecialAirNEnd_IASA(HSD_GObj* gobj);
/* 135438 */ void ftKp_SpecialNStart_Phys(HSD_GObj* gobj);
/* 135458 */ void ftKp_SpecialN_Phys(HSD_GObj* gobj);
/* 135478 */ void ftKp_SpecialNEnd_Phys(HSD_GObj* gobj);
/* 135498 */ void ftKp_SpecialAirNStart_Phys(HSD_GObj* gobj);
/* 1354B8 */ void ftKp_SpecialAirN_Phys(HSD_GObj* gobj);
/* 1354D8 */ void ftKp_SpecialAirNEnd_Phys(HSD_GObj* gobj);
/* 1354F8 */ void ftKp_SpecialNStart_Coll(HSD_GObj* gobj);
/* 135564 */ void ftKp_SpecialN_Coll(HSD_GObj* gobj);
/* 1355D0 */ void ftKp_SpecialNEnd_Coll(HSD_GObj* gobj);
/* 13563C */ void ftKp_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 1356A8 */ void ftKp_SpecialAirN_Coll(HSD_GObj* gobj);
/* 135714 */ void ftKp_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/* 135780 */ void ftKp_SpecialN_80135780(HSD_GObj* gobj);
/* 135A2C */ void ftKp_SpecialHi_Enter(HSD_GObj* gobj);
/* 135B04 */ void ftKp_SpecialAirHi_Enter(HSD_GObj* gobj);
/* 135C08 */ void ftKp_SpecialHi_Anim(HSD_GObj* gobj);
/* 135C60 */ void ftKp_SpecialAirHi_Anim(HSD_GObj* gobj);
/* 135D78 */ void ftKp_SpecialHi_IASA(HSD_GObj* gobj);
/* 135D7C */ void ftKp_SpecialAirHi_IASA(HSD_GObj* gobj);
/* 135D80 */ void ftKp_SpecialHi_Phys(HSD_GObj* gobj);
/* 135DE0 */ void ftKp_SpecialAirHi_Phys(HSD_GObj* gobj);
/* 135E4C */ void ftKp_SpecialHi_Coll(HSD_GObj* gobj);
/* 135F6C */ void ftKp_SpecialAirHi_Coll(HSD_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[];
#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_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, int 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);
/* 0EC354 */ void ftLk_SpecialS_Enter(HSD_GObj* gobj);
/* 0EC404 */ void ftLk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 3B7520 */ extern ftLk_SpecialN_Vec3Group const ftLk_Init_Vec3Group;
/* 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[];
#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 */ void ftLk_SpecialHi_ProcessPartLThumbNb(HSD_GObj* gobj);
/* 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(ftLk_GObj* gobj);
/* 0ECC0C */ void ftLk_SpecialN_UnsetArrow(ftLk_GObj* gobj);
/* 0ECC6C */ void ftLk_SpecialN_UnsetFv14(ftLk_GObj* gobj);
/* 0ECCCC */ bool ftLk_SpecialN_IsActiveAnd2071b6(ftLk_GObj* gobj);
/* 0ECD04 */ void ftLk_SpecialN_ProcessFv10(ftLk_GObj* gobj);
/* 0ECD58 */ void ftLk_SpecialN_ProcessFv14(ftLk_GObj* gobj);
/* 0ECDAC */ void ftLk_SpecialN_Enter(ftLk_GObj* gobj);
/* 0ECF78 */ void ftLk_SpecialAirN_Enter(ftLk_GObj* gobj);
/* 0ED15C */ void ftLk_SpecialNStart_Anim(ftLk_GObj* gobj);
/* 0ED480 */ void ftLk_SpecialNLoop_Anim(ftLk_GObj* gobj);
/* 0ED5B4 */ void ftLk_SpecialNEnd_Anim(ftLk_GObj* gobj);
/* 0ED72C */ void ftLk_SpecialAirNStart_Anim(ftLk_GObj* gobj);
/* 0EDA58 */ void ftLk_SpecialAirNLoop_Anim(ftLk_GObj* gobj);
/* 0EDB8C */ void ftLk_SpecialAirNEnd_Anim(ftLk_GObj* gobj);
/* 0EDD88 */ void ftLk_SpecialNStart_IASA(ftLk_GObj* gobj);
/* 0EDE30 */ void ftLk_SpecialNLoop_IASA(ftLk_GObj* gobj);
/* 0EDEAC */ void ftLk_SpecialNEnd_IASA(ftLk_GObj* gobj);
/* 0EDEB0 */ void ftLk_SpecialAirNStart_IASA(ftLk_GObj* gobj);
/* 0EDF58 */ void ftLk_SpecialAirNLoop_IASA(ftLk_GObj* gobj);
/* 0EDFD4 */ void ftLk_SpecialAirNEnd_IASA(ftLk_GObj* gobj);
/* 0EDFD8 */ void ftLk_SpecialNStart_Phys(ftLk_GObj* gobj);
/* 0EDFF8 */ void ftLk_SpecialNLoop_Phys(ftLk_GObj* gobj);
/* 0EE018 */ void ftLk_SpecialNEnd_Phys(ftLk_GObj* gobj);
/* 0EE038 */ void ftLk_SpecialAirNStart_Phys(ftLk_GObj* gobj);
/* 0EE058 */ void ftLk_SpecialAirNLoop_Phys(ftLk_GObj* gobj);
/* 0EE078 */ void ftLk_SpecialAirNEnd_Phys(ftLk_GObj* gobj);
/* 0EE098 */ void ftLk_SpecialNStart_Coll(ftLk_GObj* gobj);
/* 0EE120 */ void ftLk_SpecialNLoop_Coll(ftLk_GObj* gobj);
/* 0EE1A8 */ void ftLk_SpecialNEnd_Coll(ftLk_GObj* gobj);
/* 0EE2E0 */ void ftLk_SpecialAirNStart_Coll(ftLk_GObj* gobj);
/* 0EE368 */ void ftLk_SpecialAirNLoop_Coll(ftLk_GObj* gobj);
/* 0EE3F0 */ void ftLk_SpecialAirNEnd_Coll(ftLk_GObj* gobj);
#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 */ void 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;
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[];
/// @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
static usize_t const aux_states_count = 2;
/* 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[aux_states_count];
#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[];
#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_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);
/* 155C20 */ void ftMh_CaptureDamageMasterHand_Anim(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);
#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[];
/// @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_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;
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[];
/// @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;
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;
/* 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);
/* 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[];
#define GALE01_114EB8
/* 114EB8 */ void ftNs_AttackHi4_YoyoUpdateHitPos(HSD_GObj* gobj);
/* 114F0C */ void ftNs_AttackHi4_YoyoCheckTimedRehit(HSD_GObj* gobj);
/* 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);
/* 1151EC */ void ftNs_AttackHi4_YoyoSetHitPos(HSD_GObj* gobj);
/* 1152D0 */ void ftNs_AttackHi4_YoyoSetHitPosUnk(HSD_GObj* gobj, float arg8);
/* 115404 */ bool ftNs_AttackHi4_YoyoCheckNoObstruct(HSD_GObj* gobj);
/* 115534 */ void ftNs_AttackHi4_YoyoSetVarAll(HSD_GObj* gobj);
/* 11556C */ void ftNs_AttackHi4_YoyoApplySmash(HSD_GObj* gobj);
/* 115680 */ void ftNs_AttackHi4_YoyoSetChargeDamage(HSD_GObj* gobj);
/* 115784 */ bool ftNs_AttackHi4_YoyoThink_IsRemove(HSD_GObj* gobj);
/* 11599C */ void ftNs_AttackHi4_YoyoSetUnkRate(HSD_GObj* gobj);
/* 115A08 */ void ftNs_AttackHi4_YoyoCreateItem(HSD_GObj* gobj);
/* 115AC4 */ void ftNs_AttackHi4_YoyoItemSetFlag(HSD_GObj* gobj);
/* 115AF8 */ void ftNs_AttackHi4_YoyoItemDespawn(HSD_GObj* gobj);
/* 115B50 */ void ftNs_AttackHi4_YoyoItemSetUnk2(HSD_GObj* gobj);
/* 115B80 */ void ftNs_AttackHi4_YoyoItemSetUnk(HSD_GObj* gobj);
/* 115BB0 */ void ftNs_AttackHi4_Enter(HSD_GObj* gobj);
/* 115C74 */ void ftNs_AttackHi4_YoyoStartTimedRehit(HSD_GObj* gobj);
/* 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);
/* 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);
#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);
/* 114B6C */ void ftNs_Init_OnKnockbackEnter(HSD_GObj* gobj);
/* 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[];
/// @file
/// PK Thunder callbacks (SpecialHi)
#define GALE01_116D04
/* 116D04 */ void ftNs_SpecialAirS_Enter(HSD_GObj* gobj);
/* 116DB0 */ void ftNs_SpecialAirS_Anim(HSD_GObj* gobj);
/* 116E0C */ void ftNs_SpecialAirS_Phys(HSD_GObj* gobj);
/* 116E68 */ void ftNs_SpecialAirS_Coll(HSD_GObj* gobj);
/* 117034 */ void ftNs_SpecialAirNStart_Enter(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);
/* 1176CC */ void ftNs_SpecialAirNStart_IASA(HSD_GObj* gobj);
/* 1176D0 */ void ftNs_SpecialAirNRelease_IASA(HSD_GObj* gobj);
/* 11774C */ void ftNs_SpecialAirNEnd_IASA(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);
/* 117A2C */ void ftNs_SpecialAirNStart_Coll(HSD_GObj* gobj);
/* 117A98 */ void ftNs_SpecialAirNRelease_Coll(HSD_GObj* gobj);
/* 117B04 */ void ftNs_SpecialAirNEnd_Coll(HSD_GObj* gobj);
/* 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_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_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[];
#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;
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;
/* 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[];
#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[];
#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_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);
/* 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);
/* 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);
/* 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);
/* 122264 */ void ftPp_SpecialAirHiThrow_1_Coll(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);
/* 122898 */ void ftPp_SpecialHi_80122898(Fighter_GObj* gobj);
/* 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);
/* 122C18 */ void ftPp_SpecialLw_Coll(Fighter_GObj* gobj);
/* 122D04 */ void ftPp_SpecialAirLw_Coll(Fighter_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[];
#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);
/* 121164 */ void ftPp_SpecialS_80121164(Fighter_GObj* gobj);
/* 1221AC */ void ftPp_SpecialHiThrow_1_IASA(Fighter_GObj* gobj);
/* 1221B4 */ void ftPp_SpecialHiThrow_1_Phys(Fighter_GObj* gobj);
/* 122228 */ void ftPp_SpecialHiThrow_1_Coll(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[];
#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);
/* 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_FTSAMUS_FORWARD_H
typedef struct HSD_GObj ftSs_GObj;
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[];
#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, s32* arg1, s32* 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(ftSs_GObj* gobj);
/* 129258 */ void ftSs_SpecialN_80129258(ftSs_GObj* gobj);
/* 12954C */ void ftSs_SpecialN_Enter(ftSs_GObj* gobj);
/* 1295F0 */ void ftSs_SpecialAirN_Enter(ftSs_GObj* gobj);
/* 129684 */ void ftSs_SpecialNStart_Anim(ftSs_GObj* gobj);
/* 129774 */ void ftSs_SpecialNHold_Anim(ftSs_GObj* gobj);
/* 129940 */ void ftSs_SpecialNCancel_Anim(ftSs_GObj* gobj);
/* 1299D0 */ void ftSs_SpecialN_Anim(ftSs_GObj* gobj);
/* 129A14 */ void ftSs_SpecialAirNStart_Anim(ftSs_GObj* gobj);
/* 129A98 */ void ftSs_SpecialAirN_Anim(ftSs_GObj* gobj);
/* 129B18 */ void ftSs_SpecialNStart_IASA(ftSs_GObj* gobj);
/* 129B1C */ void ftSs_SpecialNHold_IASA(ftSs_GObj* gobj);
/* 129C78 */ void ftSs_SpecialNCancel_IASA(ftSs_GObj* gobj);
/* 129C7C */ void ftSs_SpecialN_IASA(ftSs_GObj* gobj);
/* 129C80 */ void ftSs_SpecialAirNStart_IASA(ftSs_GObj* gobj);
/* 129C84 */ void ftSs_SpecialAirN_IASA(ftSs_GObj* gobj);
/* 129C88 */ void ftSs_SpecialNStart_Phys(ftSs_GObj* gobj);
/* 129CA8 */ void ftSs_SpecialNHold_Phys(ftSs_GObj* gobj);
/* 129CC8 */ void ftSs_SpecialNCancel_Phys(ftSs_GObj* gobj);
/* 129CE8 */ void ftSs_SpecialN_Phys(ftSs_GObj* gobj);
/* 129D08 */ void ftSs_SpecialAirNStart_Phys(ftSs_GObj* gobj);
/* 129D28 */ void ftSs_SpecialAirN_Phys(ftSs_GObj* gobj);
/* 129D48 */ void ftSs_SpecialNStart_Coll(ftSs_GObj* gobj);
/* 129DC8 */ void ftSs_SpecialNHold_Coll(ftSs_GObj* gobj);
/* 129E68 */ void ftSs_SpecialNCancel_Coll(ftSs_GObj* gobj);
/* 129EE8 */ void ftSs_SpecialN_Coll(ftSs_GObj* gobj);
/* 129F68 */ void ftSs_SpecialAirNStart_Coll(ftSs_GObj* gobj);
/* 129FE8 */ void ftSs_SpecialAirN_Coll(ftSs_GObj* gobj);
/* 12A068 */ int ftSs_SpecialS_8012A068(ftSs_GObj* gobj);
/* 12A074 */ void ftSs_SpecialS_8012A074(ftSs_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);
/* 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);
/* 1110E8 */ bool ftSk_SpecialS_CheckInitChain(HSD_GObj* gobj);
/* 1112CC */ void ftSk_SpecialSStart_Anim(HSD_GObj* gobj);
/* 111344 */ void ftSk_SpecialSStart_IASA(HSD_GObj* gobj);
/* 11134C */ void ftSk_SpecialSStart_Phys(HSD_GObj* gobj);
/* 1113C8 */ void ftSk_SpecialSStart_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);
/* 111708 */ void ftSk_SpecialS_IASA(HSD_GObj* gobj);
/* 111778 */ void ftSk_SpecialS_Phys(HSD_GObj* gobj);
/* 1117B8 */ void ftSk_SpecialS_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);
/* 111BF0 */ void ftSk_SpecialSEnd_IASA(HSD_GObj* gobj);
/* 111BF8 */ void ftSk_SpecialSEnd_Phys(HSD_GObj* gobj);
/* 111C38 */ void ftSk_SpecialSEnd_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);
/* 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 */ M2C_UNK it_802B5518();
/* 2B55C8 */ HSD_GObj* it_802B55C8(Item_GObj* owner, Vec3*, s32, s32,
float facing_dir);
/* 2B56E4 */ void it_802B56E4(Item_GObj*, Vec3*, float, float, float);
/* 2B58D8 */ void it_802B58D8(Item_GObj*);
/* 2B5974 */ void it_802B5974(Item_GObj*);
/* 2B59C4 */ void it_802B59C4(Item_GObj*);
/* 2B5A98 */ M2C_UNK it_802B5A98();
/* 2B5CB0 */ M2C_UNK it_802B5CB0();
/* 2B5CB4 */ M2C_UNK it_802B5CB4();
/* 2B5CBC */ M2C_UNK it_802B5CBC();
/* 2B5D54 */ M2C_UNK it_802B5D54();
/* 2B5E50 */ M2C_UNK it_802B5E50();
/* 2B5EA0 */ M2C_UNK it_802B5EA0();
/* 2B5EDC */ M2C_UNK it_802B5EDC();
/* 2B5FD8 */ bool it_802B5FD8(Item_GObj*);
/* 2B5FE0 */ bool it_802B5FE0(Item_GObj*);
/* 2B5FE8 */ bool it_802B5FE8(Item_GObj*);
/* 2B5FF0 */ bool it_802B5FF0(Item_GObj*);
/* 2B613C */ bool it_802B613C(Item_GObj*);
/* 2B6144 */ bool it_802B6144(Item_GObj*);
/* 2B62B0 */ void it_802B62B0(Item_GObj*, Item_GObj*);
/* 2B62D0 */ void it_802B62D0(Item_GObj*, Vec3* pos, bool, float facing_dir);
/* 3F7288 */ extern ItemStateTable it_803F7288[];
static inline void ftSamus_updateDamageDeathCBs(HSD_GObj* gobj)
{
Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) 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->fv.ss.x2234 = 0;
}
static inline void ftSamus_destroyAllEF(HSD_GObj* gobj)
{
if (gobj) {
Fighter* fp = ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj));
if (fp->fv.ss.x2234) {
efLib_DestroyAll(gobj);
fp->fv.ss.x2234 = 0;
}
}
}
static inline void ftSamus_UnkAndDestroyAllEF(HSD_GObj* gobj)
{
if (gobj != ((void*) 0)) {
Fighter* fp = gobj->user_data;
Item_GObj* x222C = fp->fv.ss.x222C;
if (x222C != ((void*) 0)) {
it_802B5974(x222C);
fp->fv.ss.x222C = ((void*) 0);
}
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[];
#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;
#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[];
#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
/* 1142E8 */ void ftSk_SpecialLw_Anim(HSD_GObj* gobj);
/* 1143D4 */ void ftSk_SpecialLw_Coll(HSD_GObj* gobj);
/* 114524 */ void ftSk_SpecialLw2_Anim(HSD_GObj* gobj);
/* 114608 */ void ftSk_SpecialLw2_Coll(HSD_GObj* gobj);
/* 11459C */ void ftSk_SpecialLw2_IASA(HSD_GObj* gobj);
/* 1145A4 */ void ftSk_SpecialLw2_Phys(HSD_GObj* gobj);
/* 114368 */ void ftSk_SpecialLw_IASA(HSD_GObj* gobj);
/* 114370 */ void ftSk_SpecialLw_Phys(HSD_GObj* gobj);
/* 11108C */ void ftSk_SpecialAirS_Enter(HSD_GObj* gobj);
/* 111308 */ void ftSk_SpecialAirSStart_Anim(HSD_GObj* gobj);
/* 111348 */ void ftSk_SpecialAirSStart_IASA(HSD_GObj* gobj);
/* 11136C */ void ftSk_SpecialAirSStart_Phys(HSD_GObj* gobj);
/* 111404 */ void ftSk_SpecialAirSStart_Coll(HSD_GObj* gobj);
/* 111648 */ void ftSk_SpecialAirS_Anim(HSD_GObj* gobj);
/* 111740 */ void ftSk_SpecialAirS_IASA(HSD_GObj* gobj);
/* 111798 */ void ftSk_SpecialAirS_Phys(HSD_GObj* gobj);
/* 1117F4 */ void ftSk_SpecialAirS_Coll(HSD_GObj* gobj);
/* 111B1C */ void ftSk_SpecialAirSEnd_Anim(HSD_GObj* gobj);
/* 111BF4 */ void ftSk_SpecialAirSEnd_IASA(HSD_GObj* gobj);
/* 111C18 */ void ftSk_SpecialAirSEnd_Phys(HSD_GObj* gobj);
/* 111C74 */ void ftSk_SpecialAirSEnd_Coll(HSD_GObj* gobj);
/* 114160 */ void ftSk_SpecialLw_Enter(HSD_GObj* gobj);
/* 114224 */ void ftSk_SpecialAirLw_Enter(HSD_GObj* gobj);
/* 114328 */ void ftSk_SpecialAirLw_Anim(HSD_GObj* gobj);
/* 11436C */ void ftSk_SpecialAirLw_IASA(HSD_GObj* gobj);
/* 114390 */ void ftSk_SpecialAirLw_Phys(HSD_GObj* gobj);
/* 114410 */ void ftSk_SpecialAirLw_Coll(HSD_GObj* gobj);
/* 11444C */ void ftSk_SpecialLw_80114758(HSD_GObj* gobj);
/* 114560 */ void ftSk_SpecialAirLw2_Anim(HSD_GObj* gobj);
/* 1145A0 */ void ftSk_SpecialAirLw2_IASA(HSD_GObj* gobj);
/* 1145C4 */ void ftSk_SpecialAirLw2_Phys(HSD_GObj* gobj);
/* 114644 */ void ftSk_SpecialAirLw2_Coll(HSD_GObj* 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 MELEE_FT_CHARA_FTYOSHI_FORWARD_H
struct S_UNK_YOSHI1;
typedef struct HSD_GObj ftYs_GObj;
/// @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;
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,
ftYs_MS_SpecialAirSStart_0,
ftYs_MS_SpecialAirSLoop_0,
ftYs_MS_SpecialAirSLoop_1,
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 GALE01_12C030
/* 12C030 */ void ftYs_GuardOn_0_Anim(ftYs_GObj* gobj);
/* 12C114 */ void ftYs_GuardOn_0_IASA(ftYs_GObj* gobj);
/* 12C194 */ void ftYs_GuardOn_0_Phys(ftYs_GObj* gobj);
/* 12C1B4 */ void ftYs_GuardOn_0_Coll(ftYs_GObj* gobj);
/* 12C1D4 */ void ftYs_Shield_8012C1D4(ftYs_GObj* gobj);
/* 12C2F4 */ void ftYs_GuardHold_Anim(ftYs_GObj* gobj);
/* 12C3EC */ void ftYs_GuardHold_IASA(ftYs_GObj* gobj);
/* 12C45C */ void ftYs_GuardHold_Phys(ftYs_GObj* gobj);
/* 12C47C */ void ftYs_GuardHold_Coll(ftYs_GObj* gobj);
/* 12C49C */ void ftYs_Shield_8012C49C(ftYs_GObj* gobj);
/* 12C54C */ void ftYs_GuardOff_Anim(ftYs_GObj* gobj);
/* 12C59C */ void ftYs_GuardOff_IASA(ftYs_GObj* gobj);
/* 12C5C0 */ void ftYs_GuardOff_Phys(ftYs_GObj* gobj);
/* 12C5E0 */ void ftYs_GuardOff_Coll(ftYs_GObj* gobj);
/* 12C600 */ void ftYs_Shield_8012C600(ftYs_GObj* gobj, bool);
/* 12C7A4 */ void ftYs_GuardDamage_Anim(ftYs_GObj* gobj);
/* 12C80C */ void ftYs_GuardDamage_IASA(ftYs_GObj* gobj);
/* 12C810 */ void ftYs_GuardDamage_Phys(ftYs_GObj* gobj);
/* 12C830 */ void ftYs_GuardDamage_Coll(ftYs_GObj* gobj);
/* 12C850 */ void ftYs_Shield_8012C850(ftYs_GObj* gobj);
/* 12C914 */ void ftYs_Shield_8012C914(ftYs_GObj* gobj);
/* 12CACC */ void ftYs_Shield_8012CACC(ftYs_GObj* gobj);
/* 12CAD0 */ void ftYs_GuardOn_1_Anim(ftYs_GObj* gobj);
/* 12CBBC */ void ftYs_GuardOn_1_IASA(ftYs_GObj* gobj);
/* 12CBDC */ void ftYs_GuardOn_1_Phys(ftYs_GObj* gobj);
/* 12CBFC */ void ftYs_GuardOn_1_Coll(ftYs_GObj* gobj);
/* 12CC1C */ bool ftYs_Shield_8012CC1C(ftYs_GObj* gobj);
/* 12CC6C */ Fighter_Part ftYs_Shield_8012CC6C(ftYs_GObj* gobj);
/* 12CC94 */ void ftYs_Shield_8012CC94(ftYs_GObj* gobj, Vec3* out);
/* 12CCC4 */ float ftYs_Shield_8012CCC4(ftYs_GObj* gobj);
/* 12CCD0 */ float ftYs_Shield_8012CCD0(ftYs_GObj* gobj);
/* 12CCE0 */ float ftYs_Shield_8012CCE0(ftYs_GObj* gobj);
/* 12CCF0 */ float ftYs_Shield_8012CCF0(ftYs_GObj* gobj);
/* 12CD00 */ float ftYs_Shield_8012CD00(ftYs_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 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);
/* 12BDA0 */ void ftYs_Init_8012BDA0(ftCo_GObj* gobj);
/* 12BE3C */ void ftYs_Init_8012BE3C(HSD_GObj* gobj);
/* 12BECC */ void ftYs_Init_8012BECC(ftCo_GObj* gobj);
/* 3CE6D0 */ extern MotionState ftYs_Init_MotionStateTable[ftYs_MS_SelfCount];
#define GALE01_12CDE8
/* 12CD10 */ float ftYs_SpecialN_8012CD10(ftYs_GObj* gobj);
/* 12CD28 */ float ftYs_SpecialN_8012CD28(void);
/* 12CD40 */ float ftYs_SpecialN_8012CD40(void);
/* 12CD58 */ float ftYs_SpecialN_8012CD58(void);
/* 12CD70 */ bool ftYs_SpecialN_8012CD70(void);
/* 12CD88 */ void ftYs_SpecialN_8012CD88(Vec3*);
/* 12CDB4 */ float ftYs_SpecialN_8012CDB4(ftYs_GObj* gobj);
/* 12CDD4 */ HSD_Joint* ftYs_SpecialN_8012CDD4(ftYs_GObj* gobj);
/* 12CDE8 */ void ftYs_SpecialN_Enter(ftYs_GObj* gobj);
/* 12CE64 */ void ftYs_SpecialAirN_Enter(ftYs_GObj* gobj);
/* 12D004 */ M2C_UNK fn_8012D004();
/* 12D0A0 */ M2C_UNK fn_8012D0A0();
/* 12D128 */ M2C_UNK fn_8012D128();
/* 12D1AC */ M2C_UNK fn_8012D1AC();
/* 12D230 */ M2C_UNK fn_8012D230();
/* 12D298 */ M2C_UNK fn_8012D298();
/* 12D2F8 */ M2C_UNK fn_8012D2F8();
/* 12D360 */ M2C_UNK fn_8012D360();
/* 12D3C0 */ M2C_UNK fn_8012D3C0();
/* 12D428 */ M2C_UNK fn_8012D428();
/* 12D488 */ M2C_UNK fn_8012D488();
/* 12D4F0 */ M2C_UNK fn_8012D4F0();
/* 12D550 */ void ftYs_SpecialN1_Anim(ftYs_GObj* gobj);
/* 12D58C */ void ftYs_SpecialAirN1_0_Anim(ftYs_GObj* gobj);
/* 12D5C8 */ void ftYs_SpecialN1_1_Anim(ftYs_GObj* gobj);
/* 12D658 */ void ftYs_SpecialN1_0_Anim(ftYs_GObj* gobj);
/* 12D6D0 */ void ftYs_SpecialAirN1_2_Anim(ftYs_GObj* gobj);
/* 12D760 */ void ftYs_SpecialAirN1_1_Anim(ftYs_GObj* gobj);
/* 12D7D8 */ void ftYs_SpecialN2_1_Anim(ftYs_GObj* gobj);
/* 12D948 */ void ftYs_SpecialN2_0_Anim(ftYs_GObj* gobj);
/* 12DA04 */ void ftYs_SpecialAirN2_1_Anim(ftYs_GObj* gobj);
/* 12DB74 */ void ftYs_SpecialAirN2_0_Anim(ftYs_GObj* gobj);
/* 12DC30 */ void ftYs_SpecialN1_Phys(ftYs_GObj* gobj);
/* 12DC50 */ void ftYs_SpecialAirN1_0_Phys(ftYs_GObj* gobj);
/* 12DC70 */ void ftYs_SpecialN1_1_Phys(ftYs_GObj* gobj);
/* 12DC90 */ void ftYs_SpecialN1_0_Phys(ftYs_GObj* gobj);
/* 12DCB0 */ void ftYs_SpecialAirN1_2_Phys(ftYs_GObj* gobj);
/* 12DCD0 */ void ftYs_SpecialAirN1_1_Phys(ftYs_GObj* gobj);
/* 12DCF0 */ void ftYs_SpecialN2_1_Phys(ftYs_GObj* gobj);
/* 12DD10 */ void ftYs_SpecialN2_0_Phys(ftYs_GObj* gobj);
/* 12DD30 */ void ftYs_SpecialAirN2_1_Phys(ftYs_GObj* gobj);
/* 12DD50 */ void ftYs_SpecialAirN2_0_Phys(ftYs_GObj* gobj);
/* 12DD70 */ void ftYs_SpecialN1_Coll(ftYs_GObj* gobj);
/* 12DD98 */ void ftYs_SpecialAirN1_0_Coll(ftYs_GObj* gobj);
/* 12DDC0 */ void ftYs_SpecialN1_1_Coll(ftYs_GObj* gobj);
/* 12DDE8 */ void ftYs_SpecialN1_0_Coll(ftYs_GObj* gobj);
/* 12DE10 */ void ftYs_SpecialAirN1_2_Coll(ftYs_GObj* gobj);
/* 12DE38 */ void ftYs_SpecialAirN1_1_Coll(ftYs_GObj* gobj);
/* 12DE60 */ void ftYs_SpecialN2_1_Coll(ftYs_GObj* gobj);
/* 12DE88 */ void ftYs_SpecialN2_0_Coll(ftYs_GObj* gobj);
/* 12DEB0 */ void ftYs_SpecialAirN2_1_Coll(ftYs_GObj* gobj);
/* 12DED8 */ void ftYs_SpecialAirN2_0_Coll(ftYs_GObj* gobj);
/* 12DF18 */ void ftYs_SpecialS_8012DF18(ftYs_GObj* gobj);
/* 12DF8C */ M2C_UNK ftYs_SpecialS_8012DF8C();
/* 12E110 */ M2C_UNK fn_8012E110();
/* 12E270 */ void ftYs_SpecialS_8012E270(ftYs_GObj* gobj);
/* 12E2C4 */ void ftYs_SpecialHi_Enter(ftYs_GObj* gobj);
/* 12E33C */ void ftYs_SpecialAirHi_Enter(ftYs_GObj* gobj);
/* 12E3B4 */ M2C_UNK fn_8012E3B4();
/* 12E44C */ M2C_UNK fn_8012E44C();
/* 12E4DC */ void ftYs_SpecialHi_Anim(ftYs_GObj* gobj);
/* 12E538 */ void ftYs_SpecialAirHi_Anim(ftYs_GObj* gobj);
/* 12E594 */ void ftYs_SpecialHi_Phys(ftYs_GObj* gobj);
/* 12E5B4 */ void ftYs_SpecialAirHi_Phys(ftYs_GObj* gobj);
/* 12E5D4 */ void ftYs_SpecialHi_Coll(ftYs_GObj* gobj);
/* 12E5FC */ void ftYs_SpecialAirHi_Coll(ftYs_GObj* gobj);
/* 12E6F8 */ void ftYs_SpecialLw_Enter(ftYs_GObj* gobj);
/* 12E78C */ void ftYs_SpecialAirLw_Enter(ftYs_GObj* gobj);
/* 12E814 */ void ftYs_SpecialLw_Anim(ftYs_GObj* gobj);
/* 12E850 */ void ftYs_SpecialAirLw_Anim(ftYs_GObj* gobj);
/* 12E88C */ void ftYs_SpecialLw_Phys(ftYs_GObj* gobj);
/* 12E8CC */ void ftYs_SpecialAirLw_Phys(ftYs_GObj* gobj);
/* 12E924 */ void ftYs_SpecialLw_Coll(ftYs_GObj* gobj);
/* 12E944 */ void ftYs_SpecialAirLw_Coll(ftYs_GObj* gobj);
/* 12EA04 */ M2C_UNK ftYs_SpecialS_8012EA04();
/* 12EA40 */ void ftYs_SpecialLwLanding_Anim(ftYs_GObj* gobj);
/* 12EA7C */ void ftYs_SpecialLwLanding_Phys(ftYs_GObj* gobj);
/* 12EA9C */ void ftYs_SpecialLwLanding_Coll(ftYs_GObj* gobj);
/* 12EB48 */ M2C_UNK ftYs_SpecialS_8012EB48();
/* 12EC7C */ M2C_UNK fn_8012EC7C();
/* 12EDE8 */ M2C_UNK fn_8012EDE8();
/* 12EFC0 */ M2C_UNK fn_8012EFC0();
/* 12EFF4 */ M2C_UNK fn_8012EFF4();
/* 12F0DC */ M2C_UNK ftYs_SpecialS_8012F0DC();
/* 12F35C */ M2C_UNK ftYs_SpecialS_8012F35C();
/* 12F4B4 */ void ftYs_SpecialS_Enter(ftYs_GObj* gobj);
/* 12F588 */ void ftYs_SpecialAirS_Enter(ftYs_GObj* gobj);
/* 12F654 */ void ftYs_SpecialAirSStart_0_Anim(ftYs_GObj* gobj);
/* 12F750 */ void ftYs_SpecialAirSLoop_0_Anim(ftYs_GObj* gobj);
/* 12FAC4 */ void ftYs_SpecialAirSLoop_1_Anim(ftYs_GObj* gobj);
/* 12FFF4 */ void ftYs_SpecialAirSEnd_Anim(ftYs_GObj* gobj);
/* 130368 */ void ftYs_SpecialAirSStart_1_Anim(ftYs_GObj* gobj);
/* 130428 */ void ftYs_SpecialAirSLoop_2_Anim(ftYs_GObj* gobj);
/* 1306A8 */ void ftYs_SpecialAirSLoop_3_Anim(ftYs_GObj* gobj);
/* 130A24 */ void ftYs_SpecialAirSLanding_Anim(ftYs_GObj* gobj);
/* 130DB8 */ void ftYs_SpecialAirSStart_0_IASA(ftYs_GObj* gobj);
/* 130DBC */ void ftYs_SpecialAirSLoop_0_IASA(ftYs_GObj* gobj);
/* 130F7C */ void ftYs_SpecialAirSLoop_1_IASA(ftYs_GObj* gobj);
/* 130FD8 */ void ftYs_SpecialAirSEnd_IASA(ftYs_GObj* gobj);
/* 130FDC */ void ftYs_SpecialAirSStart_1_IASA(ftYs_GObj* gobj);
/* 130FEC */ void ftYs_SpecialAirSLoop_2_IASA(ftYs_GObj* gobj);
/* 131050 */ void ftYs_SpecialAirSLoop_3_IASA(ftYs_GObj* gobj);
/* 1310B4 */ void ftYs_SpecialAirSLanding_IASA(ftYs_GObj* gobj);
/* 1310C4 */ void ftYs_SpecialAirSStart_0_Phys(ftYs_GObj* gobj);
/* 1310E8 */ void ftYs_SpecialAirSLoop_0_Phys(ftYs_GObj* gobj);
/* 1312EC */ void ftYs_SpecialAirSLoop_1_Phys(ftYs_GObj* gobj);
/* 131618 */ void ftYs_SpecialAirSEnd_Phys(ftYs_GObj* gobj);
/* 131654 */ void ftYs_SpecialAirSStart_1_Phys(ftYs_GObj* gobj);
/* 13168C */ void ftYs_SpecialAirSLoop_2_Phys(ftYs_GObj* gobj);
/* 131718 */ void ftYs_SpecialAirSLoop_3_Phys(ftYs_GObj* gobj);
/* 1317A4 */ void ftYs_SpecialAirSLanding_Phys(ftYs_GObj* gobj);
/* 1317DC */ void ftYs_SpecialAirSStart_0_Coll(ftYs_GObj* gobj);
/* 13187C */ void ftYs_SpecialAirSLoop_0_Coll(ftYs_GObj* gobj);
/* 131B60 */ void ftYs_SpecialAirSLoop_1_Coll(ftYs_GObj* gobj);
/* 131E74 */ void ftYs_SpecialAirSEnd_Coll(ftYs_GObj* gobj);
/* 131ED4 */ void ftYs_SpecialAirSStart_1_Coll(ftYs_GObj* gobj);
/* 131F80 */ void ftYs_SpecialAirSLoop_2_Coll(ftYs_GObj* gobj);
/* 13245C */ void ftYs_SpecialAirSLoop_3_Coll(ftYs_GObj* gobj);
/* 1328F0 */ void ftYs_SpecialAirSLanding_Coll(ftYs_GObj* gobj);
/* 3B75C0 */ extern Vec3 const ftYs_Unk1_803B75C0;
/// @todo Move to C file
/* 12CEE0 */ static void fn_8012CEE0(HSD_GObj*);
/* 12CF7C */ static void fn_8012CF7C(HSD_GObj*);
/* 12DF00 */ static void ftYs_SpecialS_8012DF00(HSD_GObj*);
/* 12E644 */ static void fn_8012E644(HSD_GObj*);
/* 12EAD8 */ static void ftYs_SpecialS_8012EAD8(HSD_GObj*);
#define __GALE01_12CDE8
/* 12CEE0 */ static void fn_8012CEE0(HSD_GObj*);
/* 12CF7C */ static void fn_8012CF7C(HSD_GObj*);
/* 12DF00 */ static void ftYs_SpecialS_8012DF00(HSD_GObj*);
/* 12E644 */ static void fn_8012E644(HSD_GObj*);
/* 12EAD8 */ static void ftYs_SpecialS_8012EAD8(HSD_GObj*);
/* 3CED48 */ static bool ftYs_Unk3_803CED48[] = {
0, 1, 0, 0, 0, 1, 1, 0,
0, 1, 1, 1, 0, 1, 1,
};
/* 3CED84 */ static Vec4 ftYs_Unk3_803CED84 = { 0.65, 0.7, 0.8, 1 };
/* 3CED94 */ static Vec4 ftYs_Unk3_803CED94 = { 1.1, 1.35, 1.3, 1.2 };
/* 3CEDA4 */ static Vec3 ftYs_Unk3_803CEDA4[] = {
{ 12, 0, -6 },
{ 6, 6, 6 },
};
#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[];
#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[];
#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;
typedef enum ftZd_MotionState {
ftZd_MS_SpecialN = ftCo_MS_Count,
ftZd_MS_SpecialAirN,
ftZd_MS_SpecialSStart,
ftZd_MS_SpecialSLoop,
ftZd_MS_SpecialSEnd,
ftZd_MS_SpecialAirSStart,
ftZd_MS_SpecialAirSLoop,
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[];
#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_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(HSD_GObj* gobj);
/* 07C6DC */ void ft_8007C6DC(HSD_GObj* gobj);
/* 07C77C */ void ft_8007C77C(HSD_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
/* 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);
/* 0822A4 */ bool ft_CheckGroundAndLedge(Fighter_GObj* gobj, s32 direction);
/* 08239C */ bool ft_8008239C(Fighter_GObj* gobj, s32 facing_direction,
float* height_attributes);
/* 0824A0 */ bool ft_800824A0(Fighter_GObj*, ftCollisionBox*);
/* 082578 */ M2C_UNK ft_80082578();
/* 082638 */ void ft_80082638(Fighter_GObj* gobj, ftCollisionBox*);
/* 082708 */ GroundOrAir ft_80082708(Fighter_GObj* gobj);
/* 0827A0 */ bool ft_800827A0(Fighter_GObj* gobj);
/* 082838 */ void ft_80082838(void);
/* 082888 */ bool ft_80082888(Fighter_GObj*, ftCollisionBox*);
/* 082978 */ M2C_UNK ft_80082978();
/* 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*, 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*, enum_t), HSD_GObjEvent);
/* 0831CC */ void ft_800831CC(Fighter_GObj*, bool (*)(Fighter_GObj*, enum_t),
HSD_GObjEvent);
/* 083318 */ void ft_80083318(Fighter_GObj* gobj,
bool (*)(Fighter_GObj* gobj, enum_t),
HSD_GObjEvent);
/* 083464 */ void ft_80083464(Fighter_GObj* gobj,
bool (*)(Fighter_GObj* gobj, enum_t),
HSD_GObjEvent);
/* 0835B0 */ void ft_800835B0(Fighter_GObj* gobj,
bool (*)(Fighter_GObj* gobj, enum_t),
HSD_GObjEvent);
/* 08370C */ void ft_8008370C(Fighter_GObj* gobj, HSD_GObjEvent cb);
/* 083844 */ M2C_UNK ft_80083844();
/* 083910 */ M2C_UNK ft_80083910();
/* 083A48 */ M2C_UNK ft_80083A48();
/* 083B68 */ void ft_80083B68(Fighter_GObj* gobj);
/* 083C00 */ M2C_UNK ft_80083C00();
/* 083CE4 */ M2C_UNK ft_80083CE4();
/* 083DCC */ M2C_UNK ft_80083DCC();
/* 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);
/* 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 */ M2C_UNK ft_800844EC();
/* 0845B4 */ void ft_800845B4(Fighter_GObj* gobj);
/* 0846B0 */ M2C_UNK ft_800846B0();
/* 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 */ M2C_UNK ft_80084A80();
/* 084BFC */ bool ft_80084BFC(Fighter_GObj* gobj, int*, int*);
/* 084C38 */ bool ft_80084C38(Fighter_GObj*, int*, int*, int*, char*);
/* 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*);
/* 084E1C */ M2C_UNK ft_80084E1C();
/* 084EEC */ void ft_80084EEC(Fighter_GObj* gobj);
/* 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 */ M2C_UNK ft_800850B4();
/* 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_08521C
/* 08521C */ void ft_8008521C(Fighter_GObj* gobj);
/* 0852B0 */ void ft_800852B0(void);
/* 08549C */ void ft_8008549C(void);
/* 3C0EC0 */ extern struct UnkCostumeList
CostumeListsForeachCharacter[FTKIND_MAX];
#define GALE01_0877F8
/* 0877F8 */ s32 ft_800877F8(Fighter_GObj*, s32);
/* 087818 */ s32 ft_80087818(Fighter_GObj*, s32);
/* 087838 */ s32 ft_80087838(Fighter_GObj* gobj);
/* 087858 */ s32 ft_80087858(Fighter_GObj* gobj);
/* 087878 */ s32 ft_80087878(Fighter_GObj*, s32);
/* 0878BC */ s32 ft_800878BC(Fighter_GObj* gobj);
/* 087900 */ s32 ft_80087900(Fighter_GObj* gobj);
/* 087944 */ s32 ft_80087944(Fighter_GObj* gobj);
/* 087988 */ s32 ft_80087988(Fighter_GObj* gobj);
/* 0879D8 */ s32 ft_800879D8(Fighter_GObj* gobj);
/* 0879F8 */ s32 ft_800879F8(Fighter_GObj* gobj);
/* 087A18 */ s32 ft_80087A18(Fighter_GObj* gobj);
/* 087A80 */ s8 ft_80087A80(Fighter_GObj* gobj);
/* 087A8C */ float ft_80087A8C(Fighter_GObj* gobj);
/* 087A98 */ s32 ft_80087A98(Fighter_GObj* gobj);
/* 087AA4 */ u8 ft_80087AA4(Fighter_GObj* gobj);
/* 087AB4 */ u8 ft_80087AB4(Fighter_GObj* gobj);
/* 087AC0 */ void ft_80087AC0(Fighter_GObj*, s32);
/* 087AEC */ s32 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_80087C1C(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*);
/* 088148 */ void ft_80088148(Fighter*, enum_t, int, int);
/* 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[];
/* 459B88 */ extern struct ft_80459B88_t ft_80459B88;
/* 45A1E0 */ extern HSD_Joint* ft_8045A1E0[6];
#define GALE01_0881D8
/* 0881D8 */ void ft_800881D8(Fighter* fp, int, int, int);
/* 088328 */ void ft_80088328(Fighter* fp, int, int, int);
/* 088478 */ void ft_80088478(Fighter*, int, int, int);
/* 088510 */ void ft_80088510(Fighter*, int, int, int);
/* 0885A8 */ void ft_800885A8(Fighter* fp, int, int, int);
/* 088640 */ void ft_80088640(Fighter*, int, int, int);
/* 0886D8 */ void ftCo_800886D8(Fighter* fp, int, int, int);
/* 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 */ M2C_UNK ft_80088998();
/* 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*, s32, s32, f32);
/* 0892A0 */ void ft_800892A0(Fighter_GObj* gobj);
#define GALE01_0892D4
/* 0892D4 */ void ft_800892D4(Fighter*);
/* 089460 */ M2C_UNK ft_80089460();
/* 0895E0 */ void ft_800895E0(Fighter*, int);
/* 089768 */ void ft_80089768(Vec2*);
/* 089824 */ void ft_80089824(Fighter_GObj* gobj);
/* 089884 */ union Struct2070* ft_80089884(Fighter_GObj* gobj);
/* 089890 */ M2C_UNK ft_80089890(Fighter_GObj* gobj);
/* 08989C */ u16 ft_8008989C(Fighter_GObj* gobj);
/* 0898A8 */ struct Struct2074* ft_800898A8(Fighter_GObj* gobj);
/* 0898B4 */ int ft_800898B4(Fighter_GObj* gobj);
/* 0898C0 */ M2C_UNK ft_800898C0();
/* 089914 */ M2C_UNK ft_80089914();
/* 08998C */ M2C_UNK fn_8008998C();
/* 089B08 */ void ft_80089B08(Fighter_GObj* gobj);
/* 08A1B8 */ void ft_8008A1B8(Fighter_GObj* gobj, int);
/* 08A1FC */ bool ft_8008A1FC(Fighter_GObj* gobj);
/* 08A244 */ M2C_UNK ft_8008A244();
/* 08A2BC */ void ft_8008A2BC(Fighter_GObj* gobj);
/* 08A324 */ void ft_8008A324(Fighter_GObj* gobj);
/* 08A348 */ M2C_UNK ft_8008A348();
#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(ftCo_GObj* gobj);
/* 0C6370 */ void ftCo_Entry_Anim(ftCo_GObj* gobj);
/* 0C63B4 */ void ftCo_Entry_IASA(ftCo_GObj* gobj);
/* 0C63B8 */ void ftCo_Entry_Phys(ftCo_GObj* gobj);
/* 0C6404 */ void ftCo_Entry_Coll(ftCo_GObj* gobj);
/* 0C6408 */ void ftCo_800C6408(ftCo_GObj* gobj);
/* 0C6700 */ void ftCo_EntryStart_Anim(ftCo_GObj* gobj);
/* 0C673C */ void ftCo_EntryStart_IASA(ftCo_GObj* gobj);
/* 0C6740 */ void ftCo_EntryStart_Phys(ftCo_GObj* gobj);
/* 0C6950 */ void ftCo_EntryStart_Coll(ftCo_GObj* gobj);
/* 0C6AFC */ void ftCo_800C6AFC(HSD_JObj* jobj);
/* 0C6B6C */ void ftCo_800C6B6C(ftCo_GObj* gobj);
/* 0C6CC8 */ void ftCo_EntryEnd_Anim(ftCo_GObj* gobj);
/* 0C6D34 */ void ftCo_EntryEnd_IASA(ftCo_GObj* gobj);
/* 0C6D38 */ void ftCo_EntryEnd_Phys(ftCo_GObj* gobj);
/* 0C6E90 */ void ftCo_EntryEnd_Coll(ftCo_GObj* gobj);
/* 0C703C */ void ftCo_800C703C(ftCo_GObj* gobj);
/* 0C7070 */ void ftCo_800C7070(ftCo_GObj* gobj);
/* 0C70D0 */ void ftCo_800C70D0(ftCo_GObj* gobj);
/* 0C7158 */ void ftCo_800C7158(ftCo_GObj* gobj);
/* 0C7178 */ void ftCo_800C7178(ftCo_GObj* gobj);
/* 0C7200 */ void ftCo_800C7200(ftCo_GObj* gobj);
/* 0C7220 */ void ftCo_800C7220(ftCo_GObj* gobj);
/* 0C7294 */ void ftCo_800C7294(ftCo_GObj* gobj);
/* 0C7308 */ void ftCo_800C7308(ftCo_GObj* gobj);
/* 0C737C */ void ftCo_800C737C(ftCo_GObj* gobj);
/* 0C739C */ void ftCo_800C739C(ftCo_GObj* gobj);
/* 0C7414 */ void ftCo_800C7414(ftCo_GObj* gobj);
/* 0C7434 */ void ftCo_800C7434(ftCo_GObj* gobj);
/* 0C74AC */ void ftCo_800C74AC(ftCo_GObj* gobj);
/* 0C74F4 */ bool ftCo_800C74F4(ftCo_GObj* gobj);
/* 0C7590 */ void ftCo_800C7590(ftCo_GObj* gobj);
/* 0C7734 */ void ftCo_CaptureLeadead_Anim(ftCo_GObj* gobj);
/* 0C77B0 */ void ftCo_CaptureLeadead_IASA(ftCo_GObj* gobj);
/* 0C77B4 */ void ftCo_CaptureLeadead_Phys(ftCo_GObj* gobj);
/* 0C77B8 */ void ftCo_CaptureLeadead_Coll(ftCo_GObj* gobj);
/* 0C7800 */ M2C_UNK ftCo_800C7800();
/* 0C78B0 */ M2C_UNK ftCo_800C78B0();
/* 0C7A30 */ void ftCo_800C7A30(ftCo_GObj* gobj);
/* 0C7A58 */ void ftCo_CaptureLikelike_Anim(ftCo_GObj* gobj);
/* 0C7AD4 */ void ftCo_CaptureLikelike_IASA(ftCo_GObj* gobj);
/* 0C7AD8 */ void ftCo_CaptureLikelike_Phys(ftCo_GObj* gobj);
/* 0C7ADC */ void ftCo_CaptureLikelike_Coll(ftCo_GObj* gobj);
/* 0C7AE0 */ void fn_800C7AE0(ftCo_GObj* gobj);
/* 0C7B0C */ M2C_UNK ftCo_800C7B0C();
/* 0C7C60 */ void ftCo_800C7C60(ftCo_GObj* gobj, int damage_amount);
/* 0C7CA0 */ bool ftCo_800C7CA0(ftCo_GObj* gobj);
/* 0C7FC8 */ void ftCo_DownReflect_Anim(ftCo_GObj* gobj);
/* 0C8004 */ void ftCo_DownReflect_IASA(ftCo_GObj* gobj);
/* 0C8008 */ void ftCo_DownReflect_Phys(ftCo_GObj* gobj);
/* 0C8028 */ void ftCo_DownReflect_Coll(ftCo_GObj* gobj);
/* 0C8064 */ void ftCo_800C8064(void);
/* 0C80A4 */ void ft_800C80A4(Fighter* fp);
/* 4D6580 */ extern HSD_MObj* ft_804D6580;
/* 4D6588 */ extern HSD_MObj* ft_804D6588;
#define GALE01_0928CC
/* 0C884C */ void ftCo_800C884C(ftCo_GObj* gobj);
/* 0C88A0 */ void ftCo_800C88A0(Fighter*);
/* 0C88D4 */ void ftCo_800C88D4(ftCo_GObj* gobj, int, bool);
/* 0C89A0 */ void ftCo_800C89A0(ftCo_GObj* gobj);
/* 0C8A64 */ void ftCo_800C8A64(ftCo_GObj* gobj);
/* 0C8AF0 */ void ftCo_800C8AF0(Fighter*);
/* 0C8B1C */ void fn_800C8B1C(Fighter_GObj* gobj);
/* 0C8B2C */ bool ftCo_800C8B2C(Fighter*, bool, bool);
/* 0C8B60 */ void ftCo_800C8B60(ftCo_Fighter* fp, int, s8);
/* 0C8B74 */ void ftCo_800C8B74(ftCo_GObj* gobj);
/* 0C8C04 */ void ftCo_DownSpot_Anim(ftCo_GObj* gobj);
/* 0C8C40 */ void ftCo_DownSpot_IASA(ftCo_GObj* gobj);
/* 0C8C44 */ void ftCo_DownSpot_Phys(ftCo_GObj* gobj);
/* 0C8C64 */ void ftCo_DownSpot_Coll(ftCo_GObj* gobj);
/* 0C8C84 */ void ftCo_800C8C84(ftCo_GObj* gobj);
/* 0C8D00 */ void ftCo_800C8D00(ftCo_GObj* gobj);
/* 0C8F6C */ void ftCo_800C8F6C(void);
/* 0C8FC4 */ void ftCo_800C8FC4(ftCo_GObj* gobj);
/* 0C9034 */ void ftCo_800C9034(ftCo_GObj* gobj);
/* 0C9078 */ M2C_UNK ftCo_800C9078();
/* 0C91C0 */ void ftCo_Barrel_Anim(ftCo_GObj* gobj);
/* 0C9208 */ void ftCo_Barrel_IASA(ftCo_GObj* gobj);
/* 0C925C */ void ftCo_Barrel_Phys(ftCo_GObj* gobj);
/* 0C9260 */ void ftCo_Barrel_Coll(ftCo_GObj* gobj);
/* 0C92E4 */ M2C_UNK ftCo_800C92E4();
/* 0C9468 */ bool ftCo_Walk_CheckInput(ftCo_GObj* gobj);
/* 0C94B4 */ bool ftCo_800C94B4(ftCo_GObj* gobj);
/* 0C95F4 */ void ftCo_Walk_Anim(ftCo_GObj* gobj);
/* 0C9614 */ void ftCo_Walk_IASA(ftCo_GObj* gobj);
/* 0C9768 */ void ftCo_Walk_Phys(ftCo_GObj* gobj);
/* 0C9788 */ void ftCo_Walk_Coll(ftCo_GObj* gobj);
/* 0C97A8 */ bool ftCo_800C97A8(ftCo_GObj* gobj);
/* 0C97DC */ bool ftCo_Turn_CheckInput(ftCo_GObj* gobj);
/* 0C9840 */ void ftCo_800C9840(ftCo_GObj*, s32, s32, float, float, float);
/* 0C9924 */ void ftCo_800C9924(ftCo_GObj* gobj);
/* 0C9970 */ void ftCo_Turn_Anim(ftCo_GObj* gobj);
/* 0C99F8 */ void ftCo_Turn_IASA(ftCo_GObj* gobj);
/* 0C9BEC */ void ftCo_Turn_Phys(ftCo_GObj* gobj);
/* 0C9C0C */ void ftCo_Turn_Coll(ftCo_GObj* gobj);
/* 0C9E10 */ void ftCo_TurnRun_Anim(ftCo_GObj* gobj);
/* 0C9ED8 */ void ftCo_TurnRun_IASA(ftCo_GObj* gobj);
/* 0C9EFC */ void ftCo_TurnRun_Phys(ftCo_GObj* gobj);
/* 0CA024 */ void ftCo_TurnRun_Coll(ftCo_GObj* gobj);
/* 0CA094 */ bool ftCo_Dash_CheckInput(ftCo_GObj* gobj);
/* 0CA1F4 */ void ftCo_Dash_Anim(ftCo_GObj* gobj);
/* 0CA230 */ void ftCo_Dash_IASA(ftCo_GObj* gobj);
/* 0CA53C */ void ftCo_Dash_Phys(ftCo_GObj* gobj);
/* 0CA5D0 */ void ftCo_Dash_Coll(ftCo_GObj* gobj);
/* 0CA77C */ void ftCo_Run_Anim(ftCo_GObj* gobj);
/* 0CA830 */ void ftCo_Run_IASA(ftCo_GObj* gobj);
/* 0CA95C */ void ftCo_Run_Phys(ftCo_GObj* gobj);
/* 0CAA2C */ void ftCo_Run_Coll(ftCo_GObj* gobj);
/* 0CAA4C */ void ftCo_RunDirect_Anim(ftCo_GObj* gobj);
/* 0CAA6C */ void ftCo_RunDirect_IASA(ftCo_GObj* gobj);
/* 0CAB84 */ void ftCo_RunDirect_Phys(ftCo_GObj* gobj);
/* 0CABA4 */ void ftCo_RunDirect_Coll(ftCo_GObj* gobj);
/* 0CAC9C */ void ftCo_RunBrake_Anim(ftCo_GObj* gobj);
/* 0CADB0 */ void ftCo_RunBrake_IASA(ftCo_GObj* gobj);
/* 0CAE18 */ void ftCo_RunBrake_Phys(ftCo_GObj* gobj);
/* 0CAE60 */ void ftCo_RunBrake_Coll(ftCo_GObj* gobj);
/* 0CAE80 */ enum_t ftCo_800CAE80(ftCo_GObj* gobj);
/* 0CAED0 */ bool ftCo_Jump_CheckInput(ftCo_GObj* gobj);
/* 0CB024 */ bool ftCo_800CB024(ftCo_GObj* gobj);
/* 0CB110 */ void ftCo_800CB110(ftCo_GObj*, s32, float);
/* 0CB2F8 */ void ftCo_Jump_Anim(ftCo_GObj* gobj);
/* 0CB334 */ void ftCo_Jump_IASA(ftCo_GObj* gobj);
/* 0CB438 */ void ftCo_800CB438(ftCo_GObj* gobj);
/* 0CB474 */ void ftCo_Jump_Phys(ftCo_GObj* gobj);
/* 0CB4B0 */ void ftCo_Jump_Coll(ftCo_GObj* gobj);
/* 0CB528 */ void ftCo_KneeBend_Anim(ftCo_GObj* gobj);
/* 0CB59C */ void ftCo_800CB59C(ftCo_GObj* gobj);
/* 0CB5FC */ void ftCo_KneeBend_IASA(ftCo_GObj* gobj);
/* 0CB6AC */ void ftCo_KneeBend_Phys(ftCo_GObj* gobj);
/* 0CB6CC */ void ftCo_KneeBend_Coll(ftCo_GObj* gobj);
/* 0CB6EC */ M2C_UNK ft_800CB6EC();
/* 0CB804 */ M2C_UNK ft_800CB804();
/* 0CB870 */ bool ftCo_800CB870(ftCo_GObj* gobj);
/* 0CB8E0 */ bool ftCo_800CB8E0(ftCo_GObj* gobj);
/* 0CB950 */ M2C_UNK ftCo_800CB950();
/* 0CBAC4 */ void ftCo_800CBAC4(Fighter_GObj*, ftCommon_MotionState, Vec3*, int);
/* 0CBBC0 */ M2C_UNK ftCo_800CBBC0();
/* 0CBD18 */ M2C_UNK ftCo_800CBD18();
/* 0CBE98 */ M2C_UNK ftCo_800CBE98();
/* 0CC0E8 */ M2C_UNK ftCo_800CC0E8();
/* 0CC238 */ M2C_UNK ftCo_800CC238();
/* 0CC388 */ void ftCo_JumpAerial_Anim(ftCo_GObj* gobj);
/* 0CC4F8 */ void ftCo_JumpAerial_IASA(ftCo_GObj* gobj);
/* 0CC634 */ void ftCo_JumpAerial_Phys(ftCo_GObj* gobj);
/* 0CC6C8 */ void ftCo_800CC6C8(ftCo_GObj* gobj);
/* 0CC700 */ void ftCo_JumpAerial_Coll(ftCo_GObj* gobj);
/* 0CC730 */ void ftCo_800CC730(ftCo_GObj* gobj);
/* 0CC830 */ void ftCo_800CC830(ftCo_GObj* gobj);
/* 0CC8DC */ M2C_UNK ftCo_800CC8DC();
/* 0CC988 */ void ftCo_800CC988(ftCo_GObj* gobj, float);
/* 0CCA00 */ void ftCo_Fall_Anim(ftCo_GObj* gobj);
/* 0CCAAC */ void ftCo_800CCAAC(ftCo_GObj* gobj);
/* 0CCBE0 */ void ftCo_800CCBE0(ftCo_GObj* gobj, float*, FtMotionId,
FtMotionId, FtMotionId);
/* 0CCD34 */ void ftCo_Fall_IASA(ftCo_GObj* gobj);
/* 0CCD58 */ void ftCo_Fall_Phys(ftCo_GObj* gobj);
/* 0CCD78 */ void ftCo_Fall_Coll(ftCo_GObj* gobj);
/* 0CCDA8 */ void ftCo_800CCDA8(ftCo_GObj* gobj);
/* 0CCDFC */ void ftCo_FallAerial_Anim(ftCo_GObj* gobj);
/* 0CCE50 */ void ftCo_FallAerial_IASA(ftCo_GObj* gobj);
/* 0CCE74 */ void ftCo_FallAerial_Phys(ftCo_GObj* gobj);
#define GALE01_0CD140
/* 0CD140 */ M2C_UNK ftCo_800CD140();
/* 0CD1BC */ M2C_UNK ftCo_800CD1BC();
/* 0CD204 */ M2C_UNK ftCo_800CD204();
/* 0CD278 */ M2C_UNK ftCo_800CD278();
/* 0CD2C4 */ M2C_UNK ftCo_800CD2C4();
/* 0CD31C */ M2C_UNK ft_800CD31C();
/* 0CD350 */ M2C_UNK ftCo_800CD350();
/* 0CD390 */ void ftCo_SwordSwing_Anim(ftCo_GObj* gobj);
/* 0CD3B0 */ void ftCo_SwordSwing_IASA(ftCo_GObj* gobj);
/* 0CD3D0 */ void ftCo_SwordSwing_Phys(ftCo_GObj* gobj);
/* 0CD3F0 */ void ftCo_SwordSwing_Coll(ftCo_GObj* gobj);
/* 0CD418 */ M2C_UNK ftCo_800CD418();
/* 0CD458 */ void ftCo_BatSwing_Anim(ftCo_GObj* gobj);
/* 0CD478 */ void ftCo_BatSwing_IASA(ftCo_GObj* gobj);
/* 0CD498 */ void ftCo_BatSwing_Phys(ftCo_GObj* gobj);
/* 0CD4B8 */ void ftCo_BatSwing_Coll(ftCo_GObj* gobj);
/* 0CD4E0 */ M2C_UNK ftCo_800CD4E0();
/* 0CD520 */ void ftCo_ParasolSwing_Anim(ftCo_GObj* gobj);
/* 0CD540 */ void ftCo_ParasolSwing_IASA(ftCo_GObj* gobj);
/* 0CD560 */ void ftCo_ParasolSwing_Phys(ftCo_GObj* gobj);
/* 0CD580 */ void ftCo_ParasolSwing_Coll(ftCo_GObj* gobj);
/* 0CD5A8 */ M2C_UNK ftCo_800CD5A8();
/* 0CD604 */ M2C_UNK ft_800CD604();
/* 0CD65C */ M2C_UNK ft_800CD65C();
/* 0CD6A0 */ void ftCo_HarisenSwing_Anim(ftCo_GObj* gobj);
/* 0CD7C4 */ void ftCo_HarisenSwing_IASA(ftCo_GObj* gobj);
/* 0CD7E4 */ void ftCo_HarisenSwing_Phys(ftCo_GObj* gobj);
/* 0CD804 */ void ftCo_HarisenSwing_Coll(ftCo_GObj* gobj);
#define GALE01_0CDD14
/* 0CDD14 */ void ftCo_Attack_800CDD14(ftCo_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(ftCo_GObj* gobj);
/* 0CE328 */ void ftCo_LGunShootAir_Anim(ftCo_GObj* gobj);
/* 0CE348 */ void ftCo_LGunShoot_IASA(ftCo_GObj* gobj);
/* 0CE34C */ void ftCo_LGunShootAir_IASA(ftCo_GObj* gobj);
/* 0CE350 */ void ftCo_LGunShoot_Phys(ftCo_GObj* gobj);
/* 0CE370 */ void ftCo_LGunShootAir_Phys(ftCo_GObj* gobj);
/* 0CE390 */ void ftCo_LGunShoot_Coll(ftCo_GObj* gobj);
/* 0CE3B8 */ void ftCo_LGunShootAir_Coll(ftCo_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*);
/* 0CEAF0 */ void ftCo_FireFlowerShoot_Anim(ftCo_GObj* gobj);
/* 0CEBA0 */ void ftCo_FireFlowerShootAir_Anim(ftCo_GObj* gobj);
/* 0CEC50 */ void ftCo_FireFlowerShoot_IASA(ftCo_GObj* gobj);
/* 0CEC54 */ void ftCo_FireFlowerShootAir_IASA(ftCo_GObj* gobj);
/* 0CEC58 */ void ftCo_FireFlowerShoot_Phys(ftCo_GObj* gobj);
/* 0CEC78 */ void ftCo_FireFlowerShootAir_Phys(ftCo_GObj* gobj);
/* 0CEC98 */ void ftCo_FireFlowerShoot_Coll(ftCo_GObj* gobj);
/* 0CECC0 */ void ftCo_FireFlowerShootAir_Coll(ftCo_GObj* gobj);
#define GALE01_0CEE70
/* 0CEE70 */ bool ftCo_800CEE70(ftCo_GObj* gobj);
/* 0CEF08 */ M2C_UNK ft_800CEF08();
/* 0CEFE0 */ void ftCo_800CEFE0(ftCo_GObj* gobj, int);
/* 0CF0B8 */ void ftCo_ItemParasolOpen_Anim(ftCo_GObj* gobj);
/* 0CF118 */ void ftCo_ItemParasolOpen_IASA(ftCo_GObj* gobj);
/* 0CF1A0 */ void ftCo_ItemParasolOpen_Phys(ftCo_GObj* gobj);
/* 0CF258 */ void ftCo_ItemParasolOpen_Coll(ftCo_GObj* gobj);
/* 0CF280 */ void ftCo_800CF280(Fighter_GObj* gobj);
/* 0CF2B8 */ void ftCo_ItemParasolFall_Anim(ftCo_GObj* gobj);
/* 0CF2BC */ void ftCo_ItemParasolFall_IASA(ftCo_GObj* gobj);
/* 0CF380 */ void ftCo_ItemParasolFall_Phys(ftCo_GObj* gobj);
/* 0CF3A0 */ void ftCo_ItemParasolFall_Coll(ftCo_GObj* gobj);
/* 0CF3C8 */ M2C_UNK ftCo_800CF3C8();
/* 0CF424 */ void ftCo_ItemParasolFallSpecial_Anim(ftCo_GObj* gobj);
/* 0CF428 */ void ftCo_ItemParasolFallSpecial_IASA(ftCo_GObj* gobj);
/* 0CF494 */ void ftCo_ItemParasolFallSpecial_Phys(ftCo_GObj* gobj);
/* 0CF4B4 */ void ftCo_ItemParasolFallSpecial_Coll(ftCo_GObj* gobj);
/* 0CF4DC */ void ftCo_800CF4DC(ftCo_GObj* gobj);
/* 0CF528 */ void ftCo_ItemParasolDamageFall_Anim(ftCo_GObj* gobj);
/* 0CF52C */ void ftCo_ItemParasolDamageFall_IASA(ftCo_GObj* gobj);
/* 0CF54C */ void ftCo_ItemParasolDamageFall_Phys(ftCo_GObj* gobj);
/* 0CF56C */ void ftCo_ItemParasolDamageFall_Coll(ftCo_GObj* gobj);
#define GALE01_071028
/* 071028 */ void ftAction_80071028(Fighter_GObj* gobj, FtCmdState* cmd);
/* 0711DC */ void ftAction_800711DC(Fighter_GObj* gobj, FtCmdState* cmd);
/* 071B50 */ void ftAction_80071B50(Fighter_GObj* gobj, FtCmdState* cmd);
/* 071CA4 */ void ftAction_80071CA4(Fighter_GObj* gobj, FtCmdState* cmd);
/* 0730B8 */ void ftAction_800730B8(Fighter_GObj* gobj, FtCmdState* cmd);
/* 073108 */ void ftAction_80073108(Fighter_GObj* gobj, FtCmdState* 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(ftCo_GObj* gobj);
/* 0CED30 */ void ftCo_800CED30(ftCo_GObj* gobj);
/* 0CEDE0 */ void ftCo_AttackS42_Anim(ftCo_GObj* gobj);
/* 0CEE00 */ void ftCo_AttackS42_IASA(ftCo_GObj* gobj);
/* 0CEE30 */ void ftCo_AttackS42_Phys(ftCo_GObj* gobj);
/* 0CEE50 */ void ftCo_AttackS42_Coll(ftCo_GObj* gobj);
#define GALE01_15BD20
/* 15BD20 */ void ftBossLib_8015BD20(HSD_GObj*);
/* 15BD24 */ void ftBossLib_8015BD24(s32, float*, float, s32, s32, s32);
/* 15BDB4 */ void ftBossLib_8015BDB4(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_8015C270(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_8015C3E8(FighterKind arg0);
/* 15C44C */ enum_t ftBossLib_8015C44C(FighterKind kind);
/* 15C4C4 */ enum_t ftBossLib_8015C4C4(void);
/* 15C530 */ s32 ftBossLib_8015C530(enum_t arg0);
/* 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, float);
/* 0CF6E8 */ M2C_UNK ftCo_800CF6E8();
/* 0D0CBC */ M2C_UNK ftCo_800D0CBC();
/* 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(ftCo_GObj* gobj);
/* 081370 */ void ftCliffCommon_80081370(ftCo_GObj* gobj);
/* 081504 */ void ftCo_CliffCatch_Anim(ftCo_GObj* gobj);
/* 081540 */ void ftCo_CliffCatch_IASA(ftCo_GObj* gobj);
/* 081544 */ void ftCo_CliffCatch_Phys(ftCo_GObj* gobj);
/* 0815E4 */ void ftCo_CliffCatch_Coll(ftCo_GObj* gobj);
/* 081644 */ void ftCo_Cliff_Cam(ftCo_GObj* gobj);
#define GALE01_0BFE6C
/* 0BFE6C */ void ftCo_Sleep_Anim(ftCo_GObj* gobj);
/* 0BFE70 */ void ftCo_Sleep_IASA(ftCo_GObj* gobj);
/* 0BFFAC */ void ftCo_800BFFAC(Fighter* fp);
/* 0BFFD0 */ bool ftCo_800BFFD0(Fighter*, enum_t, bool);
/* 0C0074 */ void ftCo_800C0074(Fighter* fp);
/* 0C0098 */ M2C_UNK ft_800C0098();
/* 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
/* 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, HurtCapsule*);
/* 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 */ M2C_UNK ftColl_80077464();
/* 077688 */ void ftColl_80077688(Item*, HitCapsule*, Fighter*, Vec3*, f32);
/* 077970 */ M2C_UNK ftColl_80077970();
/* 077C60 */ M2C_UNK ftColl_80077C60();
/* 078384 */ void ftColl_80078384(Fighter*, HurtCapsule*, HitCapsule*);
/* 078488 */ void ftColl_80078488(Fighter*);
/* 0784B4 */ M2C_UNK ftColl_800784B4(M2C_UNK, M2C_UNK, M2C_UNK);
/* 078538 */ M2C_UNK ftColl_80078538();
/* 07861C */ M2C_UNK ftColl_8007861C(bool, Fighter_GObj* gobj, int, int, int,
u32, int, M2C_UNK, int);
/* 078710 */ M2C_UNK ftColl_80078710();
/* 078754 */ void ftColl_80078754(Fighter_GObj*, Fighter_GObj*, bool);
/* 0787B4 */ M2C_UNK ftColl_800787B4();
/* 0788D4 */ void ftColl_800788D4(Fighter_GObj* gobj);
/* 07891C */ void ftColl_8007891C(Fighter_GObj*, Fighter_GObj*, float);
/* 078998 */ M2C_UNK ftColl_80078998();
/* 078A2C */ void ftColl_80078A2C(Fighter_GObj*);
/* 078C70 */ void ftColl_80078C70(Fighter_GObj*);
/* 07925C */ void ftColl_8007925C(Fighter_GObj*);
/* 079AB0 */ M2C_UNK ftColl_80079AB0();
/* 079C70 */ float ftColl_80079C70(Fighter*, Fighter*, void*, int);
/* 079EA8 */ float ftColl_80079EA8(Fighter*, HitCapsule*, int);
// /* 07A06C */ static void ftColl_8007A06C(float facing_dir, DmgLogEntry**
// log,
// int idx, bool);
/* 076808 */ static void ftColl_80076808(Fighter* fp, HitCapsule* hit, int,
void* victim, bool);
/* 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(uint kb_angle);
/* 07AC9C */ void ftColl_8007AC9C(HitCapsule*, int, Fighter_GObj*);
/* 07AD18 */ void ftColl_8007AD18(ftCo_Fighter* fp, HitCapsule*);
/* 07AE80 */ void ftColl_8007AE80(Fighter_GObj*);
/* 07AEE0 */ void ftColl_8007AEE0(Fighter_GObj*);
/* 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_8007B5AC(ftCo_Fighter* fp, HurtCapsule*,
struct UNK_SAMUS_S2*);
/* 07B62C */ void ftColl_8007B62C(Fighter_GObj*, bool);
/* 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);
/* 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_085560
struct ftData_80086060_arg0 {
u32 unk0;
s32 unk4;
s32 unk8;
u8 unkC;
u8 pad[0x20];
s32 unk2C;
};
/* 085560 */ void ftData_80085560(int idx, int increment);
/* 0855C8 */ void ftData_800855C8(enum_t id, int slot);
/* 08572C */ void ftData_8008572C(s32);
/* 08578C */ void ftData_8008578C(enum_t id, int slot);
/* 0857E0 */ void ftData_800857E0(bool);
/* 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(bool);
/* 085B10 */ void ftData_80085B10(Fighter*);
/* 085B98 */ void ftData_80085B98(Fighter*, int, int);
/* 085CD8 */ void ftData_80085CD8(Fighter*, Fighter*, enum_t msid);
/* 085E50 */ lbMthp_8001E8F8_t* ftData_80085E50(Fighter*, enum_t msid);
/* 085FD4 */ struct ftData_80085FD4_ret* ftData_80085FD4(Fighter* fp,
FtMotionId msid);
/* 086060 */ Fighter* ftData_80086060(struct ftData_80086060_arg0* arg0);
/* 3C10D0 */ extern Event ftData_Table_Unk1[FTKIND_MAX];
/* 3C1154 */ extern HSD_GObjEvent ftData_OnLoad[FTKIND_MAX];
/* 3C11D8 */ extern HSD_GObjEvent ftData_OnDeath[FTKIND_MAX];
/* 3C125C */ extern HSD_GObjEvent ftData_OnUserDataRemove[FTKIND_MAX];
/* 3C13E8 */ extern HSD_GObjEvent ftData_SpecialS[FTKIND_MAX];
/* 3C146C */ extern HSD_GObjEvent ftData_SpecialAirHi[FTKIND_MAX];
/* 3C14F0 */ extern HSD_GObjEvent ftData_SpecialAirLw[FTKIND_MAX];
/* 3C1574 */ extern HSD_GObjEvent ftData_SpecialAirS[FTKIND_MAX];
/* 3C15F8 */ extern HSD_GObjEvent ftData_SpecialAirN[FTKIND_MAX];
/* 3C1808 */ extern HSD_GObjEvent ftData_OnAbsorb[FTKIND_MAX];
/* 3C188C */ extern Fighter_ItemEvent ftData_OnItemPickupExt[FTKIND_MAX];
/* 3C1DB4 */ extern HSD_GObjEvent ftData_UnkMotionStates3[FTKIND_MAX];
/* 3C1E38 */ extern HSD_GObjEvent ftData_UnkMotionStates4[FTKIND_MAX];
/* 3C20CC */ extern Fighter_UnkMtxEvent ftData_UnkMtxFunc0[FTKIND_MAX];
/* 3C2150 */ extern ftData_UnkModelStruct ftData_UnkIntBoolFunc0;
/* 3C2468 */ extern Fighter_DemoStrings* ftData_803C2468[FTKIND_MAX];
/* 3C24EC */ extern Fighter_MotionFileStringGetter ftData_803C24EC[FTKIND_MAX];
/* 3C2570 */ extern Fighter_UnkPtrEvent ftData_UnkDemoCallbacks0[FTKIND_MAX];
/* 3C25F4 */ extern ftData_UnkCountStruct ftData_UnkIntPairs[FTKIND_MAX];
/* 3C26FC */ extern s8 ftData_UnkBytePerCharacter[FTKIND_MAX];
/* 3C2800 */ extern MotionState ftData_MotionStateList[ftCo_MS_Count];
/* 3C52A0 */ extern MotionState ftData_803C52A0[14];
#define GALE01_0BE7E0
#define MELEE_PL_FORWARD_H
#define PL_SLOT_MAX 6
typedef struct pl_800386D8_t pl_800386D8_t;
typedef struct pl_800386E8_arg0_t pl_800386E8_arg0_t;
typedef struct plAllocInfo2 plAllocInfo2;
/* 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[FTKIND_MAX];
#define GALE01_0C0658
/* 0C0658 */ ftDeviceUnk2* ftCo_800C0658(Fighter* fp);
/* 0C0674 */ ftDeviceUnk2* ftCo_800C0674(Fighter_GObj* gobj);
/* 0C0694 */ enum_t ftCo_800C0694(Fighter* fp);
/* 0C06B4 */ int ftCo_800C06B4(Fighter* fp);
/* 0C06C0 */ void ftCo_800C06C0(void);
/* 0C06E8 */ M2C_UNK ftCo_800C06E8();
/* 0C0764 */ M2C_UNK ftCo_800C0764();
/* 0C07F8 */ void ftCo_800C07F8(M2C_UNK arg0, int arg1, int arg2);
/* 459A68 */ extern struct ftDeviceUnk3 ft_80459A68[4];
/* 459A74 */ extern struct ftDeviceUnk5 ftDevice_BuryThings[2];
/* 459A8C */ extern M2C_UNK ft_80459A8C;
/* 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* gobj, s32 arg1, s32 arg2);
/* 080C28 */ void ftDrawCommon_80080C28(HSD_GObj* gobj, int arg1);
/* 080E18 */ void ftDrawCommon_80080E18(HSD_GObj*, int);
/* 081118 */ void ftDrawCommon_80081118(void);
/* 081140 */ void ftDrawCommon_80081140(void);
/* 081168 */ void ftDrawCommon_80081168(void);
/* 081200 */ void ftDrawCommon_80081200(void);
#define GALE01_09CB40
/* 09CF84 */ void ftCo_8009CF84(Fighter* fp);
/* 09D074 */ void ftCo_8009D074(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*);
/* 09EAF8 */ void ftCo_8009EAF8(HSD_GObj* gobj);
/// @todo
/* 09CB40 */ static void ftCo_8009CB40(Fighter* fp, ssize_t bone_idx, bool,
Fighter_Part);
/* 09D18C */ static void ftCo_8009D18C(Fighter* fp);
/* 09D2A4 */ static void ftCo_8009D2A4(Fighter* fp);
/* 09D3BC */ static void ftCo_8009D3BC(Fighter* fp);
/* 09D4D4 */ static void ftCo_8009D4D4(Fighter* fp);
/* 09D5EC */ static void ftCo_8009D5EC(Fighter* fp);
/* 09D704 */ static void ftCo_8009D704(Fighter* fp);
/* 09D81C */ static void ftCo_8009D81C(Fighter* fp);
/* 09D920 */ static void ftCo_8009D920(Fighter* fp);
/* 09DA38 */ static void ftCo_8009DA38(ftKb_Fighter* fp);
/* 09DB50 */ static void ftCo_8009DB50(Fighter* fp);
/* 09DD94 */ static void ftCo_8009DD94(Fighter_GObj*, bool);
/* 09E1D4 */ static HSD_JObj* ftCo_8009E1D4(HSD_JObj*, HSD_JObj*, HSD_JObj*);
/* 09E4A8 */ static void ftCo_8009E4A8(Fighter* fp);
/* 09E614 */ static void ftCo_8009E614(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 */ HSD_GObj* ftLib_80086368(Vec3*, HSD_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 */ void* ftLib_800865F0(HSD_GObj*);
/* 086630 */ void* ftLib_80086630(Fighter_GObj*, Fighter_Part part);
/* 086644 */ void ftLib_80086644(HSD_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_80086794(HSD_GObj*);
/* 0867A0 */ bool ftLib_800867A0(HSD_GObj*, HSD_GObj*);
/* 0867CC */ HSD_GObj* ftLib_800867CC(HSD_GObj*);
/* 0867D8 */ bool ftLib_800867D8(HSD_GObj*);
/* 0867E8 */ void ftLib_800867E8(HSD_GObj*);
/* 086824 */ void ftLib_80086824(void);
/* 08688C */ void ftLib_8008688C(HSD_GObj*);
/* 0868A4 */ void ftLib_800868A4(void);
/* 0868D4 */ bool ftLib_800868D4(HSD_GObj*, HSD_GObj*);
/* 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 */ CameraBox* ftLib_80086B74(HSD_GObj*);
/* 086B80 */ float ftLib_80086B80(HSD_GObj*);
/* 086B90 */ void ftLib_80086B90(HSD_GObj*, Vec3* v);
/* 086BB4 */ void ftLib_80086BB4(HSD_GObj*);
/* 086BE0 */ u8 ftLib_80086BE0(HSD_GObj*);
/* 086BEC */ void ftLib_80086BEC(HSD_GObj*, Vec3*);
/* 086C0C */ enum_t ftLib_80086C0C(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*, void**);
/* 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_800872A4(HSD_GObj*);
/* 0872B0 */ void* 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);
/* 087574 */ void ftLib_80087574(s8);
/* 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 */ void ftLib_8008777C(HSD_GObj*);
/* 0877D4 */ bool ftLib_800877D4(HSD_GObj*);
#define GALE01_0CDAB4
/* 0CDAB4 */ M2C_UNK ftCo_800CDAB4();
/* 0CDB14 */ void ftCo_LipstickSwing_Anim(ftCo_GObj* gobj);
/* 0CDB34 */ void ftCo_LipstickSwing_IASA(ftCo_GObj* gobj);
/* 0CDB54 */ void ftCo_LipstickSwing_Phys(ftCo_GObj* gobj);
/* 0CDB74 */ void ftCo_LipstickSwing_Coll(ftCo_GObj* gobj);
/* 0CDB9C */ M2C_UNK ft_800CDB9C();
#define GALE01_0BF260
/* 0BF260 */ void ftMaterial_800BF260(void);
/* 0BF2B8 */ void ftMaterial_800BF2B8(HSD_MObj* mobj, u32 rendermode);
/* 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(ftCo_GObj* gobj, GXColor* diffuse);
/* 0BFD04 */ void ftMaterial_800BFD04(ftCo_GObj* gobj);
/* 0BFD9C */ void ftMaterial_800BFD9C(ftCo_GObj* gobj);
/* 3C6980 */ extern HSD_MObjInfo ftMObj;
#define GALE01_0C8170
/* 0C8170 */ M2C_UNK ft_800C8170();
/* 0C8348 */ void ftCo_800C8348(ftCo_GObj*, s32, s32);
/* 0C8438 */ void ftCo_800C8438(ftCo_GObj* gobj);
/* 0C8540 */ void ftCo_800C8540(ftCo_GObj* gobj);
/* 0C85B8 */ M2C_UNK ft_800C85B8();
#define GALE01_0735BC
/* 0735BC */ void ftParts_JObjMakePositionMtx(HSD_JObj* jobj, Mtx mtx,
Mtx rmtx);
/* 073700 */ void ftParts_JObjInfoInit(void);
/* 073758 */ void ftParts_80073758(HSD_JObj*);
/* 073780 */ s32 ftParts_IntpJObjLoad(HSD_JObj* jobj, HSD_Joint* joint,
HSD_JObj* parent);
/* 0737D8 */ void ftParts_IntpJObjInfoInit(void);
/* 073830 */ void ftParts_80073830(void);
/* 0739B8 */ void ftParts_800739B8(void);
/* 073CA8 */ void ftParts_80073CA8(void);
/* 074048 */ void ftParts_PObjSetupMtx(HSD_PObj* pobj, Mtx vmtx, Mtx pmtx,
u32 rendermode);
/* 0740E4 */ void ftParts_PObjInfoInit(void);
/* 074148 */ void ftParts_80074148(void);
/* 074170 */ void ftParts_80074170(void);
/* 074194 */ void ftParts_80074194(Fighter* fighter, FighterBone* bone,
HSD_JObj* jobj, u32* dobj_index,
u32 tree_depth);
/* 0743E0 */ void ftParts_SetupParts(Fighter_GObj* fighter_obj);
/* 0743E0 */ void func_800743E0(void);
/* 07462C */ void ftParts_8007462C(void);
/* 07482C */ void ftParts_8007482C(void);
/* 07487C */ void ftParts_8007487C(M2C_UNK item, M2C_UNK, u8 costume_id, M2C_UNK,
M2C_UNK);
/* 0749CC */ void ftParts_800749CC(Fighter_GObj*);
/* 074A4C */ void ftParts_80074A4C(Fighter_GObj*, enum_t, enum_t);
/* 074A74 */ int ftParts_80074A74(Fighter_GObj*, int);
/* 074A8C */ void ftParts_80074A8C(Fighter_GObj*);
/* 074ACC */ void ftParts_80074ACC(ftCo_GObj* gobj);
/* 074B0C */ void ftParts_80074B0C(Fighter_GObj*, int, int);
/* 074B6C */ void ftParts_80074B6C(void);
/* 074CA0 */ void ftParts_80074CA0(u32*, s32, u32*);
/* 074D7C */ void ftParts_80074D7C(u32*, s32, u32*);
/* 074E58 */ void ftParts_80074E58(Fighter*);
/* 07500C */ Fighter_Part ftParts_8007500C(Fighter*, Fighter_Part);
/* 075028 */ u8 ftParts_80075028(size_t to_table_idx, size_t from_table_idx,
size_t joint_idx);
/* 07506C */ u32 ftParts_8007506C(s32 ftkind, u32 part);
/* 0750C8 */ void ftParts_800750C8(Fighter*, enum_t, bool);
/* 075240 */ void ftParts_80075240(void);
/* 075304 */ void ftParts_80075304(void);
/* 0753D4 */ void ftParts_800753D4(Fighter*, s32, M2C_UNK);
/* 0755E8 */ void ftParts_800755E8(Fighter*, u8*);
/* 075650 */ void ftParts_80075650(Fighter_GObj* gobj, HSD_JObj*, u32*);
/* 07584C */ void ftParts_JObjSetRotation(HSD_JObj*, Quaternion*);
/* 07592C */ void ftParts_8007592C(Fighter*, s32, float);
/* 075AF0 */ void ftParts_80075AF0(Fighter*, s32, float);
/* 075CB4 */ void ftParts_80075CB4(Fighter*, s32, float);
/* 075E78 */ float ftParts_80075E78(Fighter*, bool);
/* 075F48 */ float ftParts_80075F48(Fighter*, s32);
#define GALE01_0CD82C
/* 0CD82C */ M2C_UNK ftCo_800CD82C();
/* 0CD88C */ void ftCo_StarRodSwing_Anim(ftCo_GObj* gobj);
/* 0CD8AC */ void ftCo_StarRodSwing_IASA(ftCo_GObj* gobj);
/* 0CD8CC */ void ftCo_StarRodSwing_Phys(ftCo_GObj* gobj);
/* 0CD8EC */ void ftCo_StarRodSwing_Coll(ftCo_GObj* gobj);
/* 0CD914 */ M2C_UNK ft_800CD914();
#define GALE01_0CCE94
/* 0CCE94 */ void ftCo_FallAerial_Coll(ftCo_GObj* gobj);
/* 0CCF58 */ void ftCo_Attack_800CCF58(ftCo_GObj* gobj, enum_t);
#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(ftCo_Fighter* fp);
/* 08A6D8 */ void ftCo_8008A6D8(ftCo_GObj* gobj, s32 anim_id);
/* 08A7A8 */ void ftCo_8008A7A8(ftCo_GObj* gobj, WaitStruct* arg1);
/* 3C54A8 */ extern char ftWaitAnim_803C54A8[];
/* 3C54C4 */ extern char ftWaitAnim_803C54C4[];
#define GALE01_0DFBF8
/* 0DFBF8 */ FtWalkType ftWalkCommon_GetWalkType(ftCo_GObj* gobj);
/* 0DFC70 */ bool ftWalkCommon_800DFC70(ftCo_GObj* gobj);
/* 0DFCA4 */ void
ftWalkCommon_800DFCA4(ftCo_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(ftCo_GObj* gobj);
/* 0DFEC8 */ void ftWalkCommon_800DFEC8(ftCo_GObj* gobj,
void (*arg_cb)(ftCo_GObj*, float));
/* 0E0060 */ void ftWalkCommon_800E0060(ftCo_GObj* gobj);
#define GALE01_08169C
/* 08169C */ bool ftWallJump_8008169C(HSD_GObj* gobj);
#define MELEE_GM_FORWARD_H
typedef struct datetime datetime;
typedef struct GameRules GameRules;
typedef struct gm_8016A92C_arg0_t gm_8016A92C_arg0_t;
typedef struct gm_8017DB6C_arg0_t gm_8017DB6C_arg0_t;
typedef struct lbl_8046B6A0_t lbl_8046B6A0_t;
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;
#define GALE01_1601C4
/* 1601C4 */ M2C_UNK gm_801601C4();
/* 160244 */ M2C_UNK gm_80160244();
/* 1602C0 */ M2C_UNK gm_801602C0();
/* 1603B0 */ M2C_UNK gm_801603B0();
/* 160400 */ M2C_UNK fn_80160400();
/* 160438 */ M2C_UNK gm_80160438();
/* 160474 */ M2C_UNK gm_80160474();
/* 1604DC */ M2C_UNK gm_801604DC();
/* 160564 */ M2C_UNK gm_80160564();
/* 1605EC */ M2C_UNK fn_801605EC();
/* 160638 */ M2C_UNK gm_80160638();
/* 1606A8 */ M2C_UNK fn_801606A8();
/* 160710 */ M2C_UNK fn_80160710();
/* 16075C */ M2C_UNK gm_8016075C();
/* 1607A8 */ M2C_UNK fn_801607A8();
/* 1607F4 */ M2C_UNK fn_801607F4();
/* 160854 */ u8 gm_80160854(int idx, s8 team, s8, s8 slot_type);
/* 160968 */ int gm_80160968(u8);
/* 160980 */ M2C_UNK gm_80160980();
/* 1609E0 */ M2C_UNK fn_801609E0();
/* 160A60 */ M2C_UNK gm_80160A60();
/* 160B40 */ M2C_UNK gm_80160B40();
/* 160C90 */ M2C_UNK gm_80160C90();
/* 160DE8 */ M2C_UNK fn_80160DE8();
/* 160F58 */ M2C_UNK fn_80160F58();
/* 161004 */ M2C_UNK fn_80161004();
/* 161154 */ M2C_UNK fn_80161154();
/* 161C90 */ M2C_UNK fn_80161C90();
/* 162068 */ M2C_UNK fn_80162068();
/* 162170 */ M2C_UNK fn_80162170();
/* 1623A4 */ M2C_UNK gm_801623A4();
/* 1623D8 */ M2C_UNK gm_801623D8();
/* 1623FC */ M2C_UNK gm_801623FC();
/* 16247C */ M2C_UNK gm_8016247C();
/* 162574 */ M2C_UNK gm_80162574();
/* 16260C */ M2C_UNK gm_8016260C();
/* 16279C */ M2C_UNK gm_8016279C();
/* 162800 */ M2C_UNK gm_80162800();
/* 1628C4 */ M2C_UNK gm_801628C4();
/* 162968 */ M2C_UNK gm_80162968();
/* 1629B4 */ M2C_UNK gm_801629B4();
/* 162A00 */ M2C_UNK gm_80162A00();
/* 162A4C */ M2C_UNK gm_80162A4C();
/* 162A98 */ M2C_UNK gm_80162A98();
/* 162B4C */ M2C_UNK gm_80162B4C();
/* 162B98 */ M2C_UNK gm_80162B98();
/* 162BD8 */ M2C_UNK gm_80162BD8();
/* 162BFC */ M2C_UNK fn_80162BFC();
/* 162C48 */ M2C_UNK gm_80162C48();
/* 162CCC */ M2C_UNK fn_80162CCC();
/* 162D1C */ M2C_UNK gm_80162D1C();
/* 162D6C */ M2C_UNK gm_80162D6C();
/* 162DD4 */ M2C_UNK gm_80162DD4();
/* 162DF8 */ M2C_UNK fn_80162DF8();
/* 162E44 */ M2C_UNK gm_80162E44();
/* 162EC8 */ M2C_UNK gm_80162EC8();
/* 162F18 */ M2C_UNK gm_80162F18();
/* 162F68 */ M2C_UNK gm_80162F68();
/* 162FD0 */ M2C_UNK gm_80162FD0();
/* 162FF4 */ M2C_UNK fn_80162FF4();
/* 163040 */ M2C_UNK gm_80163040();
/* 1630C4 */ M2C_UNK fn_801630C4();
/* 163114 */ M2C_UNK gm_80163114();
/* 163164 */ M2C_UNK gm_80163164();
/* 1631CC */ M2C_UNK gm_801631CC();
/* 1631F0 */ M2C_UNK gm_801631F0();
/* 163274 */ M2C_UNK gm_80163274();
/* 163298 */ M2C_UNK gm_80163298();
/* 16332C */ M2C_UNK gm_8016332C();
/* 163374 */ M2C_UNK gm_80163374();
/* 1634D4 */ M2C_UNK gm_801634D4();
/* 16365C */ M2C_UNK gm_8016365C();
/* 163690 */ M2C_UNK gm_80163690();
/* 1636D8 */ M2C_UNK gm_801636D8();
/* 163838 */ M2C_UNK gm_80163838();
/* 1639C0 */ M2C_UNK gm_801639C0();
/* 1639F4 */ M2C_UNK gm_801639F4();
/* 163A3C */ M2C_UNK gm_80163A3C();
/* 163B9C */ M2C_UNK gm_80163B9C();
/* 163D24 */ M2C_UNK fn_80163D24();
/* 163D74 */ M2C_UNK fn_80163D74();
/* 163DC4 */ M2C_UNK gm_80163DC4();
/* 163DE8 */ M2C_UNK gm_80163DE8();
/* 163E3C */ M2C_UNK gm_80163E3C();
/* 163E60 */ M2C_UNK gm_80163E60();
/* 163EB4 */ M2C_UNK gm_80163EB4();
/* 163ED8 */ M2C_UNK gm_80163ED8();
/* 163F2C */ M2C_UNK gm_80163F2C();
/* 163F50 */ M2C_UNK gm_80163F50();
/* 163FA4 */ M2C_UNK fn_80163FA4();
/* 16400C */ u8 gm_8016400C(u8);
/* 164024 */ u8 gm_80164024(u8 arg0);
/* 16403C */ M2C_UNK gm_8016403C();
/* 1640B0 */ M2C_UNK fn_801640B0();
/* 16419C */ float fn_8016419C(u8);
/* 1641B4 */ float fn_801641B4(u8);
/* 1641CC */ u16 gm_801641CC(u8);
/* 1641E4 */ M2C_UNK gm_801641E4();
/* 164250 */ M2C_UNK gm_80164250();
/* 1642A0 */ M2C_UNK fn_801642A0();
/* 164330 */ M2C_UNK gm_80164330();
/* 164430 */ M2C_UNK gm_80164430();
/* 164504 */ M2C_UNK gm_80164504();
/* 164600 */ bool gm_80164600(void);
/* 16468C */ M2C_UNK gm_8016468C();
/* 1647D0 */ M2C_UNK gm_801647D0();
/* 1647F8 */ M2C_UNK gm_801647F8();
/* 164840 */ bool gm_80164840(u8);
/* 164910 */ M2C_UNK gm_80164910();
/* 164A0C */ M2C_UNK gm_80164A0C();
/* 164ABC */ bool gm_80164ABC(void);
/* 164B48 */ M2C_UNK fn_80164B48();
/* 164F18 */ M2C_UNK gm_80164F18();
/* 16505C */ M2C_UNK gm_8016505C();
/* 165084 */ bool gm_80165084(void);
/* 1650E8 */ M2C_UNK fn_801650E8();
/* 165108 */ M2C_UNK fn_80165108();
/* 165190 */ M2C_UNK fn_80165190();
/* 1651FC */ M2C_UNK fn_801651FC();
/* 165268 */ M2C_UNK gm_80165268();
/* 165290 */ M2C_UNK gm_80165290();
/* 1652B0 */ M2C_UNK fn_801652B0();
/* 1652D8 */ M2C_UNK fn_801652D8();
/* 165388 */ M2C_UNK gm_80165388();
/* 1653C8 */ M2C_UNK gm_801653C8();
/* 1653E8 */ M2C_UNK fn_801653E8();
/* 165418 */ M2C_UNK fn_80165418();
/* 1654A0 */ M2C_UNK fn_801654A0();
/* 165548 */ M2C_UNK fn_80165548();
/* 1656A8 */ M2C_UNK fn_801656A8();
/* 16588C */ M2C_UNK fn_8016588C();
/* 165AC0 */ M2C_UNK fn_80165AC0();
/* 165D60 */ M2C_UNK fn_80165D60();
/* 165E7C */ M2C_UNK fn_80165E7C();
/* 165FA4 */ M2C_UNK fn_80165FA4();
/* 1661E0 */ M2C_UNK fn_801661E0();
/* 166378 */ M2C_UNK gm_80166378();
/* 166A98 */ M2C_UNK gm_80166A98();
/* 166CBC */ s32 gmCamera_801A2640(void);
/* 166CCC */ M2C_UNK gm_80166CCC();
/* 167140 */ M2C_UNK gm_80167140();
/* 167194 */ u8 fn_80167194(M2C_UNK arg0);
/* 16719C */ M2C_UNK fn_8016719C();
/* 167320 */ void gm_80167320(int slot, bool);
/* 167470 */ M2C_UNK gm_80167470();
/* 1674C4 */ M2C_UNK gm_801674C4();
/* 16758C */ M2C_UNK fn_8016758C();
/* 167638 */ M2C_UNK fn_80167638();
/* 1677C0 */ M2C_UNK gm_801677C0();
/* 1677E8 */ void gm_801677E8(s8 arg0);
/* 1677F0 */ u8 gm_801677F0(void);
/* 1677F8 */ M2C_UNK gm_801677F8();
/* 167858 */ M2C_UNK gm_80167858();
/* 1678F8 */ void gm_801678F8(s32, s32, s32);
/* 16795C */ M2C_UNK gm_8016795C();
/* 167A14 */ M2C_UNK gm_80167A14();
/* 167A64 */ M2C_UNK gm_80167A64();
/* 167B50 */ M2C_UNK gm_80167B50();
/* 167BC8 */ M2C_UNK gm_80167BC8();
/* 167FC4 */ M2C_UNK gm_80167FC4();
/* 1685D4 */ M2C_UNK gm_801685D4();
/* 168638 */ M2C_UNK gm_80168638();
/* 168710 */ M2C_UNK gm_80168710();
/* 1688AC */ M2C_UNK gm_801688AC();
/* 168940 */ M2C_UNK gm_80168940();
/* 16895C */ void gm_8016895C(HSD_JObj*, void*, s32);
/* 1689E4 */ M2C_UNK fn_801689E4();
/* 168A6C */ M2C_UNK fn_80168A6C();
/* 168B34 */ void gm_80168B34(void);
/* 168BF8 */ M2C_UNK gm_80168BF8();
/* 168C5C */ M2C_UNK gm_80168C5C();
/* 168E54 */ M2C_UNK fn_80168E54();
/* 168F2C */ M2C_UNK fn_80168F2C();
/* 168F7C */ M2C_UNK fn_80168F7C();
/* 168F88 */ M2C_UNK gm_80168F88();
/* 168FC4 */ M2C_UNK gm_80168FC4();
/* 169000 */ M2C_UNK fn_80169000();
/* 169238 */ M2C_UNK gm_80169238();
/* 169264 */ M2C_UNK gm_80169264();
/* 169290 */ M2C_UNK gm_80169290();
/* 1692BC */ M2C_UNK gm_801692BC();
/* 1692E8 */ void gm_801692E8(uint ticks, struct datetime* datetime);
/* 169370 */ u8 gm_80169370(s32);
/* 169384 */ u8 gm_80169384(void);
/* 169394 */ s32 gm_80169394(void);
/* 1693BC */ bool gm_801693BC(int);
/* 169434 */ void fn_80169434(s32 arg0);
/* 169444 */ M2C_UNK fn_80169444();
/* 1694A0 */ M2C_UNK gm_801694A0();
/* 169520 */ void* gm_80169520(void);
/* 169530 */ void* gm_80169530(void);
/* 169540 */ void* gm_80169540(void);
/* 169550 */ M2C_UNK fn_80169550();
/* 169574 */ M2C_UNK fn_80169574();
/* 1695BC */ M2C_UNK fn_801695BC();
/* 1697FC */ M2C_UNK fn_801697FC();
/* 16989C */ M2C_UNK fn_8016989C();
/* 169900 */ M2C_UNK fn_80169900();
/* 169A84 */ M2C_UNK fn_80169A84();
/* 169C54 */ M2C_UNK fn_80169C54();
/* 169F50 */ M2C_UNK fn_80169F50();
/* 16A09C */ M2C_UNK fn_8016A09C();
/* 16A164 */ M2C_UNK gm_8016A164();
/* 16A1F8 */ M2C_UNK gm_8016A1F8();
/* 16A21C */ void gm_8016A21C(M2C_UNK arg0);
/* 16A22C */ M2C_UNK gm_8016A22C();
/* 16A404 */ void gm_8016A404(s32 arg0);
/* 16A414 */ void gm_8016A414(f32 arg8);
/* 16A424 */ void gm_8016A424(s8 arg0);
/* 16A434 */ M2C_UNK gm_8016A434();
/* 16A450 */ M2C_UNK fn_8016A450();
/* 16A46C */ M2C_UNK fn_8016A46C();
/* 16A488 */ M2C_UNK fn_8016A488();
/* 16A4C8 */ M2C_UNK fn_8016A4C8();
/* 16A92C */ void gm_8016A92C(struct gm_8016A92C_arg0_t*);
/* 16A944 */ M2C_UNK gm_8016A944();
/* 16A97C */ void* gm_8016A97C(void);
/* 16A98C */ M2C_UNK gm_8016A98C(void);
/* 16A998 */ M2C_UNK gm_8016A998();
/* 16A9E8 */ M2C_UNK gm_8016A9E8();
/* 16AC44 */ M2C_UNK gm_8016AC44();
/* 16AE38 */ lbl_8046B6A0_t* gm_8016AE38(void);
/* 16AE44 */ lbl_8046B6A0_t* gm_8016AE44(void);
/* 16AE50 */ Placeholder_8016AE38_flags_2* gm_8016AE50(void);
/* 16AE60 */ M2C_UNK fn_8016AE60();
/* 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 */ bool gm_8016AEDC(void);
/* 16AEEC */ bool gm_8016AEEC(void);
/* 16AEFC */ u16 gm_8016AEFC(void);
/* 16AF0C */ M2C_UNK gm_8016AF0C();
/* 16AF88 */ M2C_UNK gm_8016AF88();
/* 16B004 */ u16 gm_8016B004(void);
/* 16B014 */ bool gm_8016B014(void);
/* 16B094 */ bool gm_8016B094(void);
/* 16B0B4 */ bool gm_8016B0B4(void);
/* 16B0D4 */ bool gm_8016B0D4(void);
/* 16B0E8 */ bool gm_8016B0E8(void);
/* 16B0FC */ bool gm_8016B0FC(void);
/* 16B110 */ bool gm_8016B110(void);
/* 16B124 */ bool gm_8016B124(void);
/* 16B138 */ M2C_UNK fn_8016B138();
/* 16B14C */ bool gm_8016B14C(void);
/* 16B168 */ bool gm_8016B168(void);
/* 16B184 */ M2C_UNK gm_8016B184();
/* 16B1A8 */ M2C_UNK gm_8016B1A8();
/* 16B1C4 */ bool gm_8016B1C4(void);
/* 16B1D8 */ bool gm_8016B1D8(void);
/* 16B1EC */ bool gm_8016B1EC(void);
/* 16B204 */ M2C_UNK gm_8016B204();
/* 16B238 */ bool gm_8016B238(void);
/* 16B248 */ float gm_8016B248(void);
/* 16B258 */ M2C_UNK gm_8016B258();
/* 16B274 */ void gm_SetGameSpeed(f32);
/* 16B2C8 */ void gm_ResetGameSpeed(void);
/* 16B328 */ M2C_UNK gm_8016B328();
/* 16B33C */ void gm_8016B33C(s32 arg0);
/* 16B350 */ void gm_8016B350(s32 arg0);
/* 16B364 */ void gm_8016B364(s32 arg0);
/* 16B378 */ void gm_8016B378(s8 arg0);
/* 16B388 */ void fn_8016B388(ssize_t arg0, s16 arg1);
/* 16B3A0 */ bool gm_8016B3A0(void);
/* 16B3D8 */ bool gm_8016B3D8(void);
/* 16B41C */ bool gm_8016B41C(void);
/* 16B498 */ bool gm_8016B498(void);
/* 16B4BC */ M2C_UNK fn_8016B4BC();
/* 16B510 */ M2C_UNK fn_8016B510();
/* 16B558 */ M2C_UNK gm_8016B558();
/* 16B5B0 */ M2C_UNK fn_8016B5B0();
/* 16B6E8 */ M2C_UNK gm_8016B6E8();
/* 16B728 */ u8 fn_8016B728(void);
/* 16B738 */ M2C_UNK fn_8016B738();
/* 16B774 */ M2C_UNK gm_8016B774(void);
/* 16B784 */ M2C_UNK fn_8016B784();
/* 16B7B4 */ M2C_UNK fn_8016B7B4();
/* 16B7F8 */ M2C_UNK fn_8016B7F8();
/* 16B88C */ M2C_UNK fn_8016B88C();
/* 16B8D4 */ void gm_8016B8D4(s32, s32);
/* 16B918 */ M2C_UNK fn_8016B918();
/* 16BAF4 */ M2C_UNK fn_8016BAF4();
/* 16BBB4 */ M2C_UNK fn_8016BBB4();
/* 16BC74 */ M2C_UNK fn_8016BC74();
/* 16BE80 */ M2C_UNK gm_8016BE80();
/* 16BF74 */ M2C_UNK fn_8016BF74();
/* 16C0C8 */ M2C_UNK fn_8016C0C8();
/* 16C35C */ M2C_UNK fn_8016C35C();
/* 16C46C */ M2C_UNK fn_8016C46C();
/* 16C4F4 */ M2C_UNK fn_8016C4F4();
/* 16C5C0 */ bool gm_8016C5C0(int pl_slot);
/* 16C658 */ int gm_8016C658(int);
/* 16C6C0 */ /* static */ s32 gm_8016C6C0(Item_GObj*);
/* 16C6C0 */ s32 gm_8016C6C0(Item_GObj*);
/* 16C75C */ /* static */ M2C_UNK gm_8016C75C();
/* 16C75C */ M2C_UNK gm_8016C75C();
/* 16C7D0 */ M2C_UNK fn_8016C7D0();
/* 16C7F0 */ M2C_UNK fn_8016C7F0();
/* 16CA68 */ M2C_UNK fn_8016CA68();
/* 16CBE8 */ M2C_UNK fn_8016CBE8();
/* 16CD98 */ M2C_UNK fn_8016CD98();
/* 16CF4C */ M2C_UNK fn_8016CF4C();
/* 16CFE0 */ M2C_UNK fn_8016CFE0();
/* 16D32C */ M2C_UNK gm_8016D32C();
/* 16D538 */ M2C_UNK fn_8016D538();
/* 16D634 */ M2C_UNK fn_8016D634();
/* 16D800 */ M2C_UNK gm_8016D800();
/* 16D8AC */ M2C_UNK fn_8016D8AC();
/* 16DCC0 */ M2C_UNK fn_8016DCC0();
/* 16DEEC */ M2C_UNK fn_8016DEEC();
/* 16E124 */ M2C_UNK fn_8016E124();
/* 16E2BC */ M2C_UNK fn_8016E2BC();
/* 16E5C0 */ M2C_UNK fn_8016E5C0();
/* 16E730 */ M2C_UNK fn_8016E730();
/* 16E934 */ M2C_UNK gm_8016E934();
/* 16E9C8 */ M2C_UNK gm_8016E9C8();
/* 16EBC0 */ M2C_UNK gm_8016EBC0();
/* 16EC28 */ M2C_UNK gm_8016EC28();
/* 16ECE8 */ M2C_UNK gm_8016ECE8();
/* 16EDDC */ M2C_UNK gm_8016EDDC();
/* 16EF98 */ M2C_UNK fn_8016EF98();
/* 16F00C */ M2C_UNK gm_8016F00C();
/* 16F030 */ M2C_UNK fn_8016F030();
/* 16F088 */ M2C_UNK gm_8016F088();
/* 16F120 */ M2C_UNK gm_8016F120();
/* 16F140 */ M2C_UNK fn_8016F140();
/* 16F160 */ M2C_UNK fn_8016F160();
/* 16F180 */ M2C_UNK fn_8016F180();
/* 16F1B8 */ int gm_8016F1B8(int);
/* 16F1F0 */ short fn_8016F1F0(int idx);
/* 16F208 */ M2C_UNK gm_8016F208();
/* 16F280 */ M2C_UNK fn_8016F280();
/* 16F2F8 */ M2C_UNK gm_8016F2F8();
/* 16F344 */ M2C_UNK fn_8016F344();
/* 16F39C */ M2C_UNK fn_8016F39C();
/* 16F548 */ M2C_UNK fn_8016F548();
/* 16F740 */ M2C_UNK fn_8016F740();
/* 16F870 */ M2C_UNK fn_8016F870();
/* 16F9A8 */ M2C_UNK fn_8016F9A8();
/* 16FAD4 */ M2C_UNK fn_8016FAD4();
/* 16FFD4 */ M2C_UNK fn_8016FFD4();
/* 170110 */ M2C_UNK fn_80170110();
/* 1701A0 */ M2C_UNK gm_801701A0();
/* 1701AC */ M2C_UNK fn_801701AC();
/* 1701B8 */ u8 fn_801701B8(void);
/* 1701C0 */ M2C_UNK fn_801701C0();
/* 171A88 */ M2C_UNK fn_80171A88();
/* 171AD4 */ M2C_UNK fn_80171AD4();
/* 171B00 */ M2C_UNK fn_80171B00();
/* 171B2C */ M2C_UNK fn_80171B2C();
/* 171B64 */ M2C_UNK fn_80171B64();
/* 171BA4 */ M2C_UNK fn_80171BA4();
/* 171DC4 */ M2C_UNK fn_80171DC4();
/* 1720B4 */ M2C_UNK gm_801720B4();
/* 1720F8 */ M2C_UNK gm_801720F8();
/* 172140 */ M2C_UNK gm_80172140();
/* 172174 */ M2C_UNK gm_80172174();
/* 17219C */ M2C_UNK gm_8017219C();
/* 1721EC */ M2C_UNK gm_801721EC();
/* 1722BC */ M2C_UNK fn_801722BC();
/* 1722F4 */ M2C_UNK fn_801722F4();
/* 17232C */ M2C_UNK fn_8017232C();
/* 172380 */ M2C_UNK fn_80172380();
/* 1723D4 */ M2C_UNK fn_801723D4();
/* 172428 */ M2C_UNK fn_80172428();
/* 172478 */ M2C_UNK fn_80172478();
/* 1724C8 */ bool fn_801724C8(void);
/* 1724D0 */ M2C_UNK fn_801724D0();
/* 172504 */ M2C_UNK fn_80172504();
/* 172538 */ M2C_UNK fn_80172538();
/* 17256C */ M2C_UNK fn_8017256C();
/* 1725A8 */ M2C_UNK fn_801725A8();
/* 1725E4 */ M2C_UNK fn_801725E4();
/* 172624 */ M2C_UNK fn_80172624();
/* 172664 */ M2C_UNK fn_80172664();
/* 172698 */ M2C_UNK fn_80172698();
/* 1726CC */ M2C_UNK fn_801726CC();
/* 172700 */ M2C_UNK fn_80172700();
/* 172734 */ M2C_UNK fn_80172734();
/* 172768 */ M2C_UNK fn_80172768();
/* 17279C */ M2C_UNK fn_8017279C();
/* 17280C */ M2C_UNK fn_8017280C();
/* 172898 */ M2C_UNK gm_80172898();
/* 17297C */ M2C_UNK gm_8017297C();
/* 1729EC */ M2C_UNK gm_801729EC();
/* 172BC4 */ M2C_UNK gm_80172BC4();
/* 172C04 */ M2C_UNK gm_80172C04();
/* 172C44 */ M2C_UNK gm_80172C44();
/* 172C78 */ M2C_UNK fn_80172C78();
/* 172CC0 */ M2C_UNK gm_80172CC0();
/* 172D78 */ M2C_UNK gm_80172D78();
/* 172DD4 */ M2C_UNK gm_80172DD4();
/* 172E74 */ M2C_UNK gm_80172E74();
/* 172F00 */ M2C_UNK gm_80172F00();
/* 172FAC */ M2C_UNK fn_80172FAC();
/* 173098 */ M2C_UNK fn_80173098();
/* 173224 */ M2C_UNK gm_80173224();
/* 1732D8 */ M2C_UNK gm_801732D8();
/* 17335C */ M2C_UNK gm_8017335C();
/* 1733D8 */ M2C_UNK gm_801733D8();
/* 17341C */ M2C_UNK gm_8017341C();
/* 173460 */ M2C_UNK gm_80173460();
/* 173498 */ M2C_UNK gm_80173498();
/* 1734D0 */ M2C_UNK gm_801734D0();
/* 173510 */ M2C_UNK fn_80173510();
/* 1735F0 */ M2C_UNK fn_801735F0();
/* 173644 */ M2C_UNK fn_80173644();
/* 17367C */ M2C_UNK fn_8017367C();
/* 1736E8 */ M2C_UNK gm_801736E8();
/* 173754 */ M2C_UNK gm_80173754();
/* 1737D8 */ u8 gm_801737D8(void);
/* 1737E8 */ M2C_UNK gm_801737E8();
/* 173834 */ M2C_UNK fn_80173834();
/* 17390C */ M2C_UNK gm_8017390C();
/* 173AA4 */ M2C_UNK gm_80173AA4();
/* 173B30 */ M2C_UNK gm_80173B30();
/* 173BC4 */ M2C_UNK gm_80173BC4();
/* 173C70 */ M2C_UNK gm_80173C70();
/* 173D3C */ M2C_UNK gm_80173D3C();
/* 173DE4 */ M2C_UNK gm_80173DE4();
/* 173EEC */ M2C_UNK gm_80173EEC();
/* 174180 */ M2C_UNK gm_80174180();
/* 1741FC */ M2C_UNK gm_801741FC();
/* 174238 */ M2C_UNK gm_80174238();
/* 174284 */ M2C_UNK fn_80174284();
/* 174338 */ M2C_UNK fn_80174338();
/* 17435C */ M2C_UNK fn_8017435C();
/* 174380 */ M2C_UNK fn_80174380();
/* 1743A4 */ M2C_UNK gm_801743A4();
/* 1743C4 */ M2C_UNK fn_801743C4();
/* 174468 */ M2C_UNK fn_80174468();
/* 1748EC */ M2C_UNK fn_801748EC();
/* 174920 */ M2C_UNK fn_80174920();
/* 1749B8 */ M2C_UNK fn_801749B8();
/* 174A60 */ M2C_UNK fn_80174A60();
/* 174B4C */ M2C_UNK fn_80174B4C();
/* 174FD0 */ M2C_UNK fn_80174FD0();
/* 175038 */ M2C_UNK fn_80175038();
/* 17507C */ M2C_UNK fn_8017507C();
/* 175240 */ M2C_UNK fn_80175240();
/* 17556C */ M2C_UNK fn_8017556C();
/* 1756E0 */ M2C_UNK fn_801756E0();
/* 175880 */ M2C_UNK fn_80175880();
/* 175A94 */ M2C_UNK fn_80175A94();
/* 175C5C */ M2C_UNK fn_80175C5C();
/* 175D34 */ M2C_UNK fn_80175D34();
/* 175DC8 */ M2C_UNK fn_80175DC8();
/* 176A6C */ M2C_UNK fn_80176A6C();
/* 176BCC */ M2C_UNK fn_80176BCC();
/* 176BF0 */ M2C_UNK fn_80176BF0();
/* 176D18 */ M2C_UNK fn_80176D18();
/* 176D3C */ M2C_UNK fn_80176D3C();
/* 176F60 */ M2C_UNK fn_80176F60();
/* 1771C0 */ M2C_UNK fn_801771C0();
/* 177368 */ M2C_UNK gm_80177368();
/* 177704 */ M2C_UNK gm_80177704();
/* 177724 */ M2C_UNK gm_80177724();
/* 177748 */ M2C_UNK fn_80177748();
/* 177920 */ M2C_UNK fn_80177920();
/* 177B7C */ M2C_UNK fn_80177B7C();
/* 177DD0 */ M2C_UNK fn_80177DD0();
/* 178050 */ M2C_UNK fn_80178050();
/* 1785B0 */ M2C_UNK fn_801785B0();
/* 178BB4 */ M2C_UNK fn_80178BB4();
/* 1791E4 */ M2C_UNK fn_801791E4();
/* 179350 */ M2C_UNK fn_80179350();
/* 1795D4 */ M2C_UNK fn_801795D4();
/* 1796F0 */ M2C_UNK fn_801796F0();
/* 179854 */ M2C_UNK fn_80179854();
/* 179990 */ M2C_UNK fn_80179990();
/* 179D3C */ M2C_UNK fn_80179D3C();
/* 179D60 */ M2C_UNK fn_80179D60();
/* 179D84 */ M2C_UNK fn_80179D84();
/* 179DA8 */ M2C_UNK fn_80179DA8();
/* 179DCC */ M2C_UNK fn_80179DCC();
/* 179E34 */ M2C_UNK fn_80179E34();
/* 179E9C */ M2C_UNK fn_80179E9C();
/* 179F04 */ M2C_UNK fn_80179F04();
/* 179F6C */ M2C_UNK fn_80179F6C(int idx, int value);
/* 179F84 */ M2C_UNK fn_80179F84();
/* 17A004 */ M2C_UNK fn_8017A004();
/* 17A078 */ M2C_UNK fn_8017A078();
/* 17A318 */ M2C_UNK fn_8017A318();
/* 17A67C */ M2C_UNK fn_8017A67C();
/* 17A9B4 */ M2C_UNK fn_8017A9B4();
/* 17AA78 */ M2C_UNK fn_8017AA78();
/* 17AD04 */ M2C_UNK fn_8017AD04();
/* 17AD28 */ M2C_UNK fn_8017AD28();
/* 17AD48 */ M2C_UNK fn_8017AD48();
/* 17AD78 */ M2C_UNK fn_8017AD78();
/* 17ADA8 */ M2C_UNK fn_8017ADA8();
/* 17AE0C */ M2C_UNK fn_8017AE0C();
/* 17AE70 */ M2C_UNK fn_8017AE70();
/* 17AED8 */ M2C_UNK fn_8017AED8();
/* 17AF40 */ M2C_UNK fn_8017AF40();
/* 17AFA8 */ M2C_UNK fn_8017AFA8();
/* 17B010 */ M2C_UNK fn_8017B010();
/* 17B07C */ M2C_UNK fn_8017B07C();
/* 17B0E4 */ M2C_UNK fn_8017B0E4();
/* 17B14C */ M2C_UNK fn_8017B14C();
/* 17B1B4 */ M2C_UNK fn_8017B1B4();
/* 17B21C */ M2C_UNK fn_8017B21C();
/* 17B280 */ M2C_UNK fn_8017B280();
/* 17B2E4 */ M2C_UNK fn_8017B2E4();
/* 17B348 */ M2C_UNK fn_8017B348();
/* 17B3AC */ M2C_UNK fn_8017B3AC();
/* 17B410 */ M2C_UNK fn_8017B410();
/* 17B4D0 */ M2C_UNK fn_8017B4D0();
/* 17B534 */ M2C_UNK fn_8017B534();
/* 17B598 */ M2C_UNK fn_8017B598();
/* 17B5FC */ M2C_UNK fn_8017B5FC();
/* 17B660 */ M2C_UNK fn_8017B660();
/* 17B6C4 */ M2C_UNK fn_8017B6C4();
/* 17B728 */ M2C_UNK fn_8017B728();
/* 17B78C */ M2C_UNK fn_8017B78C();
/* 17B7F0 */ M2C_UNK fn_8017B7F0();
/* 17B854 */ M2C_UNK fn_8017B854();
/* 17B8B8 */ M2C_UNK fn_8017B8B8();
/* 17B91C */ M2C_UNK fn_8017B91C();
/* 17B9F4 */ M2C_UNK fn_8017B9F4();
/* 17BACC */ M2C_UNK fn_8017BACC();
/* 17BB30 */ M2C_UNK fn_8017BB30();
/* 17BB94 */ M2C_UNK fn_8017BB94();
/* 17BC50 */ M2C_UNK fn_8017BC50();
/* 17BD0C */ M2C_UNK fn_8017BD0C();
/* 17BDC8 */ M2C_UNK fn_8017BDC8();
/* 17BE84 */ s32 gm_8017BE84(u32 arg0);
/* 17BE8C */ M2C_UNK gm_8017BE8C();
/* 17BEC8 */ M2C_UNK gm_8017BEC8();
/* 17C0C8 */ M2C_UNK fn_8017C0C8();
/* 17C1A4 */ M2C_UNK fn_8017C1A4();
/* 17C71C */ M2C_UNK fn_8017C71C();
/* 17C7A0 */ M2C_UNK fn_8017C7A0();
/* 17C7EC */ M2C_UNK fn_8017C7EC();
/* 17C838 */ M2C_UNK gm_8017C838();
/* 17C984 */ M2C_UNK gm_8017C984();
/* 17C9A8 */ M2C_UNK gm_8017C9A8();
/* 17CA38 */ M2C_UNK gm_8017CA38();
/* 17CBAC */ M2C_UNK gm_8017CBAC();
/* 17CD94 */ M2C_UNK gm_8017CD94();
/* 17CE34 */ M2C_UNK gm_8017CE34();
/* 17D7AC */ M2C_UNK gm_8017D7AC();
/* 17D9C0 */ M2C_UNK fn_8017D9C0();
/* 17DB58 */ void gm_8017DB58(void* arg0);
/* 17DB6C */ u8 gm_8017DB6C(gm_8017DB6C_arg0_t* arg0, ssize_t index);
/* 17DB78 */ u8 gm_8017DB78(gm_8017DB6C_arg0_t* arg0, ssize_t index);
/* 17DB88 */ M2C_UNK gm_8017DB88();
/* 17DD7C */ M2C_UNK fn_8017DD7C();
/* 17DE54 */ M2C_UNK fn_8017DE54();
/* 17DEC8 */ M2C_UNK fn_8017DEC8();
/* 17DF28 */ M2C_UNK fn_8017DF28();
/* 17DF90 */ M2C_UNK fn_8017DF90();
/* 17DFF4 */ M2C_UNK gm_8017DFF4();
/* 17E068 */ bool gm_8017E068(void);
/* 17E0E4 */ M2C_UNK fn_8017E0E4();
/* 17E160 */ M2C_UNK fn_8017E160();
/* 17E21C */ M2C_UNK fn_8017E21C();
/* 17E280 */ M2C_UNK gm_8017E280(u16, bool);
/* 17E318 */ M2C_UNK fn_8017E318();
/* 17E3C8 */ M2C_UNK fn_8017E3C8();
/* 17E424 */ M2C_UNK gm_8017E424(void);
/* 17E430 */ u8 gm_8017E430(void);
/* 17E440 */ u8 gm_8017E440(void);
/* 17E48C */ M2C_UNK gm_8017E48C();
/* 17E4C4 */ M2C_UNK gm_8017E4C4();
/* 17E500 */ M2C_UNK gm_8017E500();
/* 17E528 */ M2C_UNK gm_8017E528();
/* 17E578 */ M2C_UNK gm_8017E578();
/* 17E5C8 */ M2C_UNK gm_8017E5C8();
/* 17E5FC */ M2C_UNK gm_8017E5FC();
/* 17E630 */ M2C_UNK gm_8017E630();
/* 17E664 */ M2C_UNK gm_8017E664();
/* 17E6B4 */ M2C_UNK gm_8017E6B4();
/* 17E704 */ M2C_UNK gm_8017E704();
/* 17E738 */ M2C_UNK gm_8017E738();
/* 17E76C */ M2C_UNK gm_8017E76C();
/* 17E7A0 */ M2C_UNK gm_8017E7A0();
/* 17E7E0 */ M2C_UNK gm_8017E7E0();
/* 17E7FC */ M2C_UNK gm_8017E7FC();
/* 17E8A4 */ M2C_UNK fn_8017E8A4();
/* 17EB30 */ M2C_UNK gm_8017EB30(void);
/* 17EB3C */ M2C_UNK gm_8017EB3C();
/* 17EB64 */ M2C_UNK gm_8017EB64();
/* 17EB98 */ M2C_UNK gm_8017EB98();
/* 17EBCC */ M2C_UNK gm_8017EBCC();
/* 17EC00 */ M2C_UNK gm_8017EC00();
/* 17EC50 */ M2C_UNK gm_8017EC50();
/* 17ECA0 */ M2C_UNK gm_8017ECA0();
/* 17ECD4 */ M2C_UNK gm_8017ECD4();
/* 17ED08 */ M2C_UNK gm_8017ED08();
/* 17ED3C */ M2C_UNK gm_8017ED3C();
/* 17ED8C */ M2C_UNK gm_8017ED8C();
/* 17EDDC */ M2C_UNK fn_8017EDDC();
/* 17EE40 */ M2C_UNK fn_8017EE40();
/* 17F008 */ M2C_UNK fn_8017F008();
/* 17F09C */ M2C_UNK fn_8017F09C();
/* 17F14C */ M2C_UNK fn_8017F14C();
/* 17F1B8 */ M2C_UNK fn_8017F1B8();
/* 17F2A4 */ M2C_UNK fn_8017F2A4();
/* 17F47C */ M2C_UNK fn_8017F47C();
/* 17F608 */ M2C_UNK fn_8017F608();
/* 17FA1C */ M2C_UNK fn_8017FA1C();
/* 17FBA4 */ M2C_UNK fn_8017FBA4();
/* 17FE54 */ M2C_UNK fn_8017FE54();
/* 17FF1C */ M2C_UNK fn_8017FF1C();
/* 1803FC */ M2C_UNK fn_801803FC();
/* 180630 */ M2C_UNK fn_80180630();
/* 180AC0 */ M2C_UNK fn_80180AC0();
/* 180AE4 */ s32 gm_80180AE4(void);
/* 180AF4 */ M2C_UNK gm_80180AF4();
/* 180B18 */ M2C_UNK gm_80180B18();
/* 180BA0 */ M2C_UNK gm_80180BA0();
/* 180C14 */ M2C_UNK fn_80180C14();
/* 180C60 */ M2C_UNK fn_80180C60();
/* 181598 */ M2C_UNK fn_80181598();
/* 181708 */ M2C_UNK fn_80181708();
/* 181998 */ M2C_UNK gm_80181998();
/* 181A00 */ void gm_80181A00(s32 arg0, s32 arg1);
/* 181A24 */ u16 gm_80181A24(void);
/* 181A34 */ s32 gm_80181A34(void);
/* 181A44 */ M2C_UNK gm_80181A44();
/* 181AC8 */ M2C_UNK gm_80181AC8();
/* 181B64 */ M2C_UNK gm_80181B64();
/* 181BFC */ M2C_UNK fn_80181BFC();
/* 181C80 */ M2C_UNK fn_80181C80();
/* 181E18 */ M2C_UNK fn_80181E18();
/* 182174 */ M2C_UNK gm_80182174();
/* 182510 */ M2C_UNK gm_80182510();
/* 182554 */ M2C_UNK gm_80182554();
/* 182578 */ M2C_UNK gm_80182578();
/* 182B5C */ M2C_UNK fn_80182B5C();
/* 182DF0 */ M2C_UNK gm_80182DF0();
/* 182F40 */ M2C_UNK fn_80182F40();
/* 183218 */ M2C_UNK gm_80183218();
/* 18325C */ M2C_UNK fn_8018325C();
/* 184138 */ M2C_UNK fn_80184138();
/* 1849E0 */ M2C_UNK fn_801849E0();
/* 184A04 */ M2C_UNK fn_80184A04();
/* 184A28 */ M2C_UNK fn_80184A28();
/* 184A4C */ M2C_UNK fn_80184A4C();
/* 184A70 */ M2C_UNK fn_80184A70();
/* 184A94 */ M2C_UNK fn_80184A94();
/* 184AB8 */ M2C_UNK fn_80184AB8();
/* 18504C */ M2C_UNK fn_8018504C();
/* 1851C0 */ M2C_UNK fn_801851C0();
/* 1852FC */ M2C_UNK fn_801852FC();
/* 185408 */ M2C_UNK fn_80185408();
/* 1855BC */ M2C_UNK fn_801855BC();
/* 18564C */ M2C_UNK fn_8018564C();
/* 18569C */ M2C_UNK fn_8018569C();
/* 18575C */ M2C_UNK fn_8018575C();
/* 1857C4 */ M2C_UNK fn_801857C4();
/* 1859C8 */ M2C_UNK fn_801859C8();
/* 185A0C */ M2C_UNK fn_80185A0C();
/* 185D64 */ M2C_UNK fn_80185D64();
/* 185E34 */ M2C_UNK fn_80185E34();
/* 185F5C */ M2C_UNK fn_80185F5C();
/* 186080 */ M2C_UNK fn_80186080();
/* 1861B8 */ M2C_UNK fn_801861B8();
/* 186400 */ M2C_UNK fn_80186400();
/* 186634 */ M2C_UNK fn_80186634();
/* 186DFC */ M2C_UNK gm_80186DFC();
/* 186E30 */ M2C_UNK gm_80186E30();
/* 186EFC */ M2C_UNK fn_80186EFC();
/* 186F6C */ M2C_UNK fn_80186F6C();
/* 1873F0 */ M2C_UNK fn_801873F0();
/* 187494 */ M2C_UNK fn_80187494();
/* 1874FC */ M2C_UNK fn_801874FC();
/* 187714 */ M2C_UNK fn_80187714();
/* 18776C */ M2C_UNK gm_8018776C();
/* 1877A8 */ M2C_UNK gm_801877A8();
/* 187910 */ M2C_UNK fn_80187910();
/* 187AB4 */ M2C_UNK fn_80187AB4();
/* 187C9C */ M2C_UNK fn_80187C9C();
/* 187CF4 */ M2C_UNK fn_80187CF4();
/* 187F48 */ M2C_UNK gm_80187F48();
/* 188364 */ M2C_UNK gm_80188364();
/* 18838C */ M2C_UNK gm_8018838C();
/* 1883C0 */ M2C_UNK gm_801883C0();
/* 18841C */ bool gm_8018841C(void);
/* 188454 */ int gm_80188454(int idx);
/* 18846C */ M2C_UNK fn_8018846C();
/* 1884F8 */ M2C_UNK fn_801884F8();
/* 188550 */ M2C_UNK fn_80188550();
/* 188644 */ M2C_UNK fn_80188644();
/* 188738 */ M2C_UNK fn_80188738();
/* 188910 */ M2C_UNK fn_80188910();
/* 188B3C */ M2C_UNK fn_80188B3C();
/* 188D3C */ M2C_UNK fn_80188D3C();
/* 188EE8 */ M2C_UNK fn_80188EE8();
/* 1891F4 */ M2C_UNK fn_801891F4();
/* 189B88 */ M2C_UNK fn_80189B88();
/* 189CDC */ M2C_UNK gm_80189CDC();
/* 18A000 */ M2C_UNK fn_8018A000();
/* 18A160 */ M2C_UNK gm_8018A160();
/* 18A188 */ M2C_UNK gm_8018A188();
/* 18A1D8 */ M2C_UNK gm_8018A1D8();
/* 18A228 */ M2C_UNK gm_8018A228();
/* 18A25C */ M2C_UNK gm_8018A25C();
/* 18A290 */ M2C_UNK gm_8018A290();
/* 18A2C4 */ M2C_UNK gm_8018A2C4();
/* 18A314 */ M2C_UNK gm_8018A314();
/* 18A364 */ M2C_UNK fn_8018A364();
/* 18A514 */ M2C_UNK fn_8018A514();
/* 18A970 */ M2C_UNK fn_8018A970();
/* 18AA74 */ M2C_UNK fn_8018AA74();
/* 18B090 */ M2C_UNK fn_8018B090();
/* 18C8D4 */ M2C_UNK fn_8018C8D4();
/* 18D50C */ M2C_UNK fn_8018D50C();
/* 18DC18 */ M2C_UNK fn_8018DC18();
/* 18DF68 */ M2C_UNK fn_8018DF68();
/* 18E46C */ M2C_UNK fn_8018E46C();
/* 18E618 */ M2C_UNK fn_8018E618();
/* 18E85C */ M2C_UNK fn_8018E85C();
/* 18EC48 */ M2C_UNK fn_8018EC48();
/* 18EC7C */ M2C_UNK fn_8018EC7C();
/* 18ECA8 */ M2C_UNK fn_8018ECA8();
/* 18F00C */ M2C_UNK fn_8018F00C();
/* 18F1B0 */ M2C_UNK gm_8018F1B0();
/* 18F310 */ M2C_UNK fn_8018F310();
// /* 18F3BC */ UNK_RET fn_8018F3BC(UNK_PARAMS);
/* 18F3D0 */ M2C_UNK fn_8018F3D0();
/* 18F410 */ M2C_UNK fn_8018F410();
/* 18F4A0 */ M2C_UNK fn_8018F4A0();
/* 18F508 */ M2C_UNK fn_8018F508();
/* 18F5F0 */ M2C_UNK fn_8018F5F0();
/* 18F62C */ s32 fn_8018F62C(M2C_UNK arg0);
/* 18F634 */ M2C_UNK gm_8018F634(void);
/* 18F640 */ M2C_UNK fn_8018F640();
/* 18F674 */ M2C_UNK fn_8018F674();
/* 18F6A8 */ M2C_UNK fn_8018F6A8();
/* 18F6DC */ M2C_UNK fn_8018F6DC();
/* 18F6FC */ M2C_UNK fn_8018F6FC();
/* 18F71C */ M2C_UNK fn_8018F71C();
/* 18F74C */ M2C_UNK fn_8018F74C();
/* 18F808 */ M2C_UNK fn_8018F808();
/* 18F888 */ M2C_UNK fn_8018F888();
/* 18FA24 */ M2C_UNK fn_8018FA24();
/* 18FBD8 */ void fn_8018FBD8(M2C_UNK arg0, s32 arg1);
/* 18FBE0 */ M2C_UNK fn_8018FBE0();
/* 18FDC4 */ M2C_UNK fn_8018FDC4();
/* 18FF9C */ M2C_UNK fn_8018FF9C();
/* 190174 */ M2C_UNK fn_80190174();
/* 1901F8 */ M2C_UNK fn_801901F8();
/* 19027C */ M2C_UNK fn_8019027C();
/* 1902F0 */ M2C_UNK fn_801902F0();
/* 19035C */ M2C_UNK fn_8019035C();
/* 19044C */ M2C_UNK fn_8019044C();
/* 190480 */ M2C_UNK fn_80190480();
/* 1904D0 */ M2C_UNK fn_801904D0();
/* 190520 */ M2C_UNK fn_80190520();
/* 1905F0 */ M2C_UNK gm_801905F0();
/* 190ABC */ M2C_UNK fn_80190ABC();
/* 190EA4 */ M2C_UNK gm_80190EA4();
/* 190FE4 */ M2C_UNK gm_80190FE4();
/* 1910E0 */ M2C_UNK fn_801910E0();
/* 191154 */ M2C_UNK fn_80191154();
/* 191240 */ M2C_UNK fn_80191240();
/* 1913BC */ M2C_UNK fn_801913BC();
/* 191678 */ M2C_UNK fn_80191678();
/* 19175C */ M2C_UNK fn_8019175C();
/* 1918F0 */ M2C_UNK fn_801918F0();
/* 191A54 */ M2C_UNK fn_80191A54();
/* 191B5C */ M2C_UNK fn_80191B5C();
/* 191CA4 */ M2C_UNK fn_80191CA4();
/* 191D38 */ M2C_UNK fn_80191D38();
/* 191E9C */ M2C_UNK fn_80191E9C();
/* 191FD4 */ M2C_UNK fn_80191FD4();
/* 19237C */ M2C_UNK fn_8019237C();
/* 19249C */ M2C_UNK fn_8019249C();
/* 192690 */ M2C_UNK fn_80192690();
/* 192758 */ M2C_UNK fn_80192758();
/* 192938 */ M2C_UNK fn_80192938();
/* 192BB0 */ M2C_UNK fn_80192BB0();
/* 192E6C */ M2C_UNK fn_80192E6C();
/* 193230 */ M2C_UNK fn_80193230();
/* 193308 */ M2C_UNK fn_80193308();
/* 1935B8 */ M2C_UNK fn_801935B8();
/* 1937C4 */ M2C_UNK fn_801937C4();
/* 193B58 */ M2C_UNK fn_80193B58();
/* 193FCC */ M2C_UNK fn_80193FCC();
/* 194658 */ M2C_UNK fn_80194658();
/* 1949B4 */ M2C_UNK fn_801949B4();
/* 194BC4 */ M2C_UNK fn_80194BC4();
/* 194D84 */ M2C_UNK fn_80194D84();
/* 194F30 */ M2C_UNK fn_80194F30();
/* 1953C8 */ M2C_UNK fn_801953C8();
/* 195AF0 */ M2C_UNK fn_80195AF0();
/* 195CCC */ M2C_UNK fn_80195CCC();
/* 19610C */ M2C_UNK fn_8019610C();
/* 19628C */ M2C_UNK gm_8019628C();
/* 1963B4 */ M2C_UNK gm_801963B4();
/* 1964A4 */ M2C_UNK gm_801964A4();
/* 196510 */ M2C_UNK fn_80196510();
/* 19655C */ s32 fn_8019655C(void);
/* 196564 */ M2C_UNK fn_80196564();
/* 196594 */ M2C_UNK fn_80196594();
/* 1965C4 */ M2C_UNK fn_801965C4();
/* 196684 */ M2C_UNK fn_80196684();
/* 1967E0 */ M2C_UNK fn_801967E0();
/* 196CF8 */ M2C_UNK fn_80196CF8();
/* 196DBC */ M2C_UNK fn_80196DBC();
/* 196E30 */ M2C_UNK fn_80196E30();
/* 196EEC */ M2C_UNK fn_80196EEC();
/* 196FFC */ M2C_UNK fn_80196FFC();
/* 1973F8 */ M2C_UNK fn_801973F8();
/* 1975C8 */ M2C_UNK fn_801975C8();
/* 1976D4 */ M2C_UNK fn_801976D4();
/* 1977AC */ M2C_UNK fn_801977AC();
/* 197AF0 */ M2C_UNK fn_80197AF0();
/* 197D4C */ M2C_UNK fn_80197D4C();
/* 197E18 */ M2C_UNK fn_80197E18();
/* 197FD8 */ M2C_UNK fn_80197FD8();
/* 1981A0 */ M2C_UNK fn_801981A0();
/* 1983E4 */ M2C_UNK fn_801983E4();
/* 198584 */ M2C_UNK fn_80198584();
/* 1985D4 */ M2C_UNK fn_801985D4();
/* 198824 */ M2C_UNK fn_80198824();
/* 198BA0 */ M2C_UNK fn_80198BA0();
/* 198C60 */ M2C_UNK fn_80198C60();
/* 198D18 */ M2C_UNK fn_80198D18();
/* 198EBC */ M2C_UNK fn_80198EBC();
/* 199AF0 */ M2C_UNK fn_80199AF0();
/* 19A158 */ M2C_UNK fn_8019A158();
/* 19A71C */ M2C_UNK fn_8019A71C();
/* 19A828 */ M2C_UNK gm_8019A828();
/* 19A86C */ M2C_UNK fn_8019A86C();
/* 19AF50 */ M2C_UNK fn_8019AF50();
/* 19B2DC */ M2C_UNK gm_8019B2DC();
/* 19B458 */ M2C_UNK fn_8019B458();
/* 19B81C */ M2C_UNK fn_8019B81C();
/* 19B860 */ M2C_UNK fn_8019B860();
/* 19B8C4 */ M2C_UNK gm_8019B8C4();
/* 19B9C8 */ M2C_UNK gm_8019B9C8();
/* 19BA04 */ M2C_UNK fn_8019BA04();
/* 19BA08 */ M2C_UNK fn_8019BA08();
/* 19BF18 */ M2C_UNK fn_8019BF18();
/* 19BF8C */ M2C_UNK fn_8019BF8C();
/* 19C048 */ M2C_UNK fn_8019C048();
/* 19C3EC */ M2C_UNK fn_8019C3EC();
/* 19C570 */ M2C_UNK fn_8019C570();
/* 19C6AC */ M2C_UNK fn_8019C6AC();
/* 19C744 */ M2C_UNK fn_8019C744();
/* 19CA38 */ M2C_UNK fn_8019CA38();
/* 19CBFC */ M2C_UNK fn_8019CBFC();
/* 19CC74 */ M2C_UNK fn_8019CC74();
/* 19CDBC */ M2C_UNK fn_8019CDBC();
/* 19CFA4 */ M2C_UNK fn_8019CFA4();
/* 19D074 */ M2C_UNK fn_8019D074();
/* 19D1BC */ M2C_UNK fn_8019D1BC();
/* 19DD60 */ M2C_UNK fn_8019DD60();
/* 19DF8C */ M2C_UNK gm_8019DF8C();
/* 19E634 */ M2C_UNK gm_8019E634();
/* 19ECAC */ M2C_UNK gm_8019ECAC();
/* 19EE54 */ M2C_UNK gm_8019EE54();
/* 19EE80 */ M2C_UNK fn_8019EE80();
/* 19EF08 */ M2C_UNK fn_8019EF08();
/* 19EFC4 */ M2C_UNK fn_8019EFC4();
/* 19F1D0 */ M2C_UNK fn_8019F1D0();
/* 19F2D4 */ M2C_UNK fn_8019F2D4();
/* 19F6EC */ M2C_UNK fn_8019F6EC();
/* 19F810 */ M2C_UNK fn_8019F810();
/* 19F9C4 */ M2C_UNK fn_8019F9C4();
/* 1A0A10 */ M2C_UNK gm_801A0A10();
/* 1A0B18 */ M2C_UNK gm_801A0B18();
/* 1A0B60 */ M2C_UNK fn_801A0B60();
/* 1A0C6C */ M2C_UNK gm_801A0C6C();
/* 1A0E0C */ M2C_UNK gm_801A0E0C();
/* 1A0E34 */ M2C_UNK fn_801A0E34();
/* 1A0FEC */ M2C_UNK gm_801A0FEC();
/* 1A10FC */ M2C_UNK gm_801A10FC();
/* 1A1134 */ M2C_UNK fn_801A1134();
/* 473A18 */ extern M2C_UNK gm_80473A18;
#define __GALE01_1601C4
#define MELEE_GM_TYPES_H
struct gmm_x1CB0 {
u8 padding_x0[0x10 - 0x0];
u8 x10[0x16 - 0x10];
/* 0x1CC6 0x16 */ u8 saved_language;
u8 padding_x16[0x20 - 0x16 - 1];
};
typedef union _UnkFlagStruct2 {
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;
u16 b10_to_12 : 3;
u16 b13_to_15 : 3;
};
u16 flags;
} UnkFlagStruct2;
struct gmm_x1F2C {
u8 padding_x0[0x78];
s8 x78;
s8 x79;
UnkFlagStruct x7A;
s8 x7B;
UnkFlagStruct2 x7C;
s16 x7E;
s8 x80;
s8 x81;
s8 x82;
s8 x83;
s32 x84;
s32 x88;
s32 x8C;
s32 x90;
s32 x94;
s32 x98;
s32 x9C;
s16 xA0;
s16 xA2;
s32 xA4;
s32 xA8;
};
struct gmm_x2FF8_inner {
u8 padding[0x1A2];
s8 x1A2;
u8 padding_x1A2;
};
struct gmm_x2FF8 {
struct gmm_x2FF8_inner inner[19];
};
struct GameRules {
/* 0x00 */ u8 unk_x0;
/* 0x01 */ u8 unk_x1;
/* 0x02 */ u8 mode;
/* 0x03 */ u8 time_limit;
/* 0x04 */ u8 stock_count;
/* 0x05 */ u8 handicap;
/* 0x06 */ u8 damage_ratio;
/* 0x07 */ u8 unk_x7;
/* 0x08 */ u8 stock_time_limit;
/* 0x09 */ u8 friendly_fire;
/* 0x0A */ u8 pause;
/* 0x0B */ u8 score_display;
/* 0x0C */ u8 unk_xc;
/* 0x0D */ char pad_D[3]; /* maybe part of unk_xc[4]? */
/* 0x10 */ u8 unk_x10;
/* 0x11 */ char pad_11[3]; /* maybe part of unk_x10[4]? */
/* 0x14 */ s32 unk_14; /* inferred */
}; /* size = 0x18 */
struct { int x[1 - 2 * !(sizeof(struct GameRules) == 0x18)]; };;
struct gmm_retval_ED98 {
u8 padding[0xC];
s32 xC;
s32 x10;
s32 x14;
s32 x18;
s32 x1C;
};
struct gmm_retval_EDB0 {
s32 x0;
s32 x4;
};
struct gmm_retval_EDBC {
s32 x0;
s32 x4;
s32 x8;
u8 padding[0x4C - 0x8 - 4];
s32 x4C[4];
u8 padding_x4C[0xB0 - 0x4C - 4 * 4];
s32 xB0[4];
};
struct gmm_x1868 {
/* 0x0000 */ s32 x1868;
/* 0x0004 */ u8 unk_4;
/* 0x0005 */ char pad_5[3]; /* maybe part of unk_4[4]? */
/* 0x0008 */ struct gmm_retval_ED98 unk_8;
/* 0x0028 */ struct gmm_retval_EDB0 unk_28;
/* 0x0030 */ struct gmm_retval_EDBC unk_30;
/* 0x00F0 */ char pad_F0[0xB8];
/* 0x01A8 */ u8 unk_1A8; /* inferred */
/* 0x01A9 */ char pad_1A9[7]; /* maybe part of unk_1A8[8]? */
/* 0x01B0 */ s32 x1A18;
/* 0x01B4 */ s32 x1A1C;
/* 0x01B8 */ s32 x1A20;
/* 0x01BC */ s32 x1A24;
/* 0x01C0 */ s32 x1A28;
/* 0x01C4 */ s32 x1A2C;
/* 0x01C8 */ s32 x1A30;
/* 0x01CC */ s32 x1A34;
/* 0x01D0 */ s32 x1A38;
/* 0x01D4 */ s32 x1A3C;
/* 0x01D8 */ s32 x1A40;
/* 0x01DC */ s32 x1A44;
/* 0x01E0 */ s32 x1A48;
/* 0x01E4 */ s32 x1A4C;
/* 0x01E8 */ s32 x1A50;
/* 0x01EC */ s32 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[3];
/* 0x02FC */ u8 padding_x1B58[0x1C];
/* 0x0318 */ u32 x1B80[4];
/* 0x0328 */ u8 padding_x1B80[0xF8];
/* 0x0420 */ u32 x1C88[3];
/* 0x042C */ u8 padding_x1C88[0x1C];
/* 0x0448 */ struct gmm_x1CB0 x1CB0;
/* 0x0468 */ s16 x1CD0;
/* 0x046A */ s16 x1CD2;
/* 0x046C */ s32 x1CD4;
/* 0x0470 */ u8 padding_x1CD4[0x254];
/* 0x06C4 */ struct gmm_x1F2C x1F2C[0x19];
/* 0x1790 */ struct gmm_x2FF8 x2FF8[2];
}; /* size = 0x55E8 */
struct gmm_x0 {
/* 0x0000 */ u8 language;
/* 0x0001 */ u8 unk_1;
/* 0x0002 */ char pad_2[0x37]; /* maybe part of x1[0x38]? */
/* 0x0039 */ u8 x39[0xB];
/* 0x0044 */ s32 unk_44;
/* 0x0048 */ char pad_48[0x24]; /* maybe part of x44[0xA]? */
/* 0x006C */ u32 unk_6C[4];
/* 0x007C */ char pad_7C[0x4A0]; /* maybe part of x6C[0x4B]? */
/* 0x051C */ s32 unk_51C;
/* 0x0520 */ s16 unk_520;
/* 0x0522 */ s16 unk_522;
/* 0x0524 */ s16 unk_524;
/* 0x0526 */ s16 unk_526;
/* 0x0528 */ s32 unk_528;
/* 0x052C */ s32 unk_52C;
/* 0x0530 */ char pad_530[5]; /* maybe part of x52C[2]? */
/* 0x0535 */ u8 unk_535;
/* 0x0536 */ char pad_536[0x46]; /* maybe part of unk_535[0x47]? */
/* 0x057C */ s32 unk_57C;
/* 0x0580 */ char pad_580[4];
/* 0x0584 */ M2C_UNK unk_584; /* inferred */
/* 0x0588 */ s8 unk_588[4]; /* inferred */
/* 0x0590 */ char pad_58B[4]; /* inferred */
/* 0x0590 */ s8 unk_590; /* inferred */
/* 0x0591 */ char pad_591[3]; /* maybe part of unk_590[4]? */
/* 0x0594 */ char unk_594;
/* 0x0595 */ char pad_595[3]; /* maybe part of unk_594[4]? */
/* 0x0598 */ char unk_598;
/* 0x0599 */ char pad_599[1];
/* 0x059A */ s16 unk_59A;
/* 0x05A0 */ char pad_59C[0x12B4]; /* maybe part of x588[0x4B0]? */
/* 0x1850 */ GameRules x1850;
/* 0x1898 */ struct gmm_x1868 thing;
}; /* size = 0x6E80 */
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_t {
/* 0x0000 */ u8 unk_0;
/* 0x0001 */ u8 unk_1;
/* 0x0002 */ u8 unk_2;
/* 0x0003 */ u8 unk_3;
/* 0x0004 */ u32 unk_4;
/* 0x0008 */ u32 unk_8;
/* 0x000C */ u8 unk_C;
/* 0x000D */ u8 unk_D;
/* 0x000E */ u8 unk_E;
/* 0x000F */ u8 unk_F;
/* 0x0010 */ s32 unk_10;
/* 0x0014 */ s32 unk_14;
/* 0x0018 */ char pad_18[0xC]; /* maybe part of unk_14[4]? */
/* 0x0024 */ s32 unk_24;
/* 0x0028 */ s32 unk_28;
/* 0x002C */ u16 unk_2C;
/* 0x002E */ char pad_2E[6]; /* maybe part of unk_2C[4]? */
/* 0x0034 */ f32 unk_34;
/* 0x0038 */ char pad_38[0x2490]; /* maybe part of unk_34[0x925]? */
/* 0x24C8 */ Placeholder_8016AE38_flags_2 unk24C8;
/* 0x24CB */ char pad_24CB[1];
/* 0x24CC:0 */ u8 unk_24CC_b0 : 1;
/* 0x24CC:1 */ u8 unk_24CC_b1 : 1;
/* 0x24CC:2 */ u8 unk_24CC_b2 : 1;
/* 0x24CC:3 */ u8 unk_24CC_b3 : 1;
/* 0x24CC:4 */ u8 unk_24CC_b4 : 1;
/* 0x24CC:5 */ u8 unk_24CC_b5 : 1;
/* 0x24CC:6 */ u8 unk_24CC_b6 : 1;
/* 0x24CC:7 */ u8 unk_24CC_b7 : 1;
/* 0x24CD:0 */ u8 unk_24CD_b0 : 1;
/* 0x24CD:1 */ u8 unk_24CD_b1 : 1;
/* 0x24CD:2 */ u8 unk_24CD_b2 : 1;
/* 0x24CD:3 */ u8 unk_24CD_b3 : 1;
/* 0x24CD:4 */ u8 unk_24CD_b4 : 1;
/* 0x24CD:5 */ u8 unk_24CD_b5 : 1;
/* 0x24CD:6 */ u8 unk_24CD_b6 : 1;
/* 0x24CD:7 */ u8 unk_24CD_b7 : 1;
/* 0x24CE */ u8 unk_24CE;
/* 0x24CF */ char pad_24CF[1];
/* 0x24D0 */ s8 unk_24D0;
/* 0x24D1 */ char pad_24D1[2]; /* maybe part of unk_24D0[3]? */
/* 0x24D3 */ s8 unk_24D3;
/* 0x24D4 */ s8 unk_24D4;
/* 0x24D5 */ char pad_24D5[1];
/* 0x24D6 */ u16 unk_24D6;
/* 0x24D8 */ char pad_24D8[0x10]; /* maybe part of unk_24D6[9]? */
/* 0x24E8 */ u64 unk_24E8;
/* 0x24F0 */ s32 unk_24F0;
/* 0x24F4 */ char pad_24F4[4];
/* 0x24F8 */ f32 unk_24F8; /* inferred */
/* 0x24FC */ char pad_24FC[0x2C]; /* maybe part of unk_24F8[0xC]? */
}; /* size = 0x2528 */
struct { int x[1 - 2 * !(sizeof(struct lbl_8046B6A0_t) == 0x2528)]; };;
struct datetime {
u16 year;
u8 month, day, hour, minute, second;
};
struct gmMainLib_8015ED8C_arg0_t {
u8 pad[0x2ac];
u8 id[0x24];
struct {
u8 unk0, unk1;
u8 unkpad[4];
} thing[11];
};
struct gm_8017DB6C_arg0_t {
/* +0 */ u8 x0;
/* +1 */ u8 x1;
/* +2 */ u8 _1[0xC - 0x2];
};
struct { int x[1 - 2 * !(sizeof(struct gm_8017DB6C_arg0_t) == 0xC)]; };;
struct gmMainLib_8046B0F0_t {
bool x0;
int x4, x8, xC, x10, x14;
};
struct gm_8016A92C_arg0_t {
char pad_0[0x58];
struct lbl_8046B668_t* x58;
};
struct lbl_8046B488_t {
/* 0x000 */ char pad_0[0x10];
/* 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[0x1CF]; /* maybe part of unk_10[0x1D0]? */
}; /* size = 0x1E0 */
struct { int x[1 - 2 * !(sizeof(struct lbl_8046B488_t) == 0x1E0)]; };;
struct fn_80166CBC_arg0_t {
/* +0 */ char pad_0[0x5E];
/* +5E */ u8 x5E;
/* +5F */ char pad_5F[0xA8 - 0x5F];
};
struct { int x[1 - 2 * !(sizeof(struct fn_80166CBC_arg0_t) == 0xA8)]; };;
struct lbl_8046DBE8_t {
/* +0 */ char pad_0[0x94];
/* +94 */ int x94;
/* +98 */ char pad_98[0x5A8 - 0x98];
};
struct { int x[1 - 2 * !(sizeof(struct lbl_8046DBE8_t) == 0x5A8)]; };;
struct lbl_80472D28_t {
/* +0 */ char pad_0[0x104];
/* +104 */ int x104;
};
struct lbl_80472E48_t {
/* 0x00 */ char pad_0[4];
/* 0x04 */ s32 unk_4; /* inferred */
/* 0x08 */ s32 unk_8; /* inferred */
/* 0x0C */ char pad_C[0x74]; /* maybe part of unk_8[0x1E]? */
}; /* size = 0x80 */
struct { int x[1 - 2 * !(sizeof(struct lbl_80472E48_t) == 0x80)]; };;
struct lbl_803D9D20_t {
/* +0 */ char pad_0[0xB0];
/* +B0 */ HSD_CObj* cobj;
/* +B4 */ char pad_B4[0xD8 - 0xB4];
/* +D8 */ Vec3 eye_position;
/* +E4 */ char pad_E4[0xEC - 0xE4];
/* +EC */ Vec3 interest;
};
struct lbl_8046B668_t {
/* 0x00 */ char pad_0[0x1C];
/* 0x1C */ s8 unk_1C; /* inferred */
/* 0x1D */ char pad_1D[0x1B]; /* maybe part of unk_1C[0x1C]? */
}; /* size = 0x38 */
struct { int x[1 - 2 * !(sizeof(struct lbl_8046B668_t) == 0x38)]; };;
struct lbl_803D5A4C_t {
/* +0 */ short x0;
/* +2 */ short x2;
/* +4 */ u32 x4;
};
struct lbl_80473700_t {
/* +0 */ char pad_0[0x114];
};
struct { int x[1 - 2 * !(sizeof(struct lbl_80473700_t) == 0x114)]; };;
/* 160840 */ static u8 fn_80160840(u8 arg0);
/* 166A8C */ static f32 fn_80166A8C(Vec3*, Vec3*);
/* 166CBC */ static u8 fn_80166CBC(struct fn_80166CBC_arg0_t* arg0,
ssize_t index);
/* 169364 */ static M2C_UNK fn_80169364(void);
/* 1693A8 */ static s32 fn_801693A8(void);
/* 16A1E4 */ static s32 fn_8016A1E4(void);
/* 1736DC */ static M2C_UNK gm_801736DC(void);
/* 174274 */ static int fn_80174274(void);
/* 17F294 */ static int fn_8017F294(void);
/* 3B75F8 */ static struct gmMainLib_8015ED8C_arg0_t lbl_803B75F8 = { 0 };
/* 3B7808 */ static s16 lbl_803B7808[0x3C / 2];
/* 3B7864 */ static int const lbl_803B7864[9] = {
0x991A1AFF, 0x333380FF, 0x806600FF, 0x1A661AFF, 0x666666FF,
0x664D4DFF, 0x4D4D66FF, 0x665933FF, 0x4D664DFF,
};
/* 3B7888 */ static u8 lbl_803B7888[0x1C];
/* 3B78A4 */ static u8 lbl_803B78A4[0x24];
/* 3B7930 */ static Vec2 const lbl_803B7930[0x114 / sizeof(Vec2)];
/* 3D5A4C */ static struct lbl_803D5A4C_t
lbl_803D5A4C[0x80C / sizeof(struct lbl_803D5A4C_t)] = {
{ 0, 0x11, 0xFF000200 },
{ 1, 0x12, 0xFF000000 },
{ 2, 0x13, 0x7F010000 },
{ 3, 0x14, 0xFF000000 },
{ 4, 0x15, 0xFF000000 },
{ 5, 0x16, 0xFF000200 },
{ 6, 0x17, 0xFF010000 },
{ 7, 0x18, 0xFD010000 },
{ 8, 0x19, 0xFF000000 },
{ 9, 0x1A, 0xFF000000 },
{ 0xA, 0x1B, 0xFF010000 },
{ 0xB, 0x1C, 0xFF010000 },
{ 0xC, 0x1D, 0xFF000000 },
{ 0xD, 0x1E, 0xFF000000 },
{ 0xE, 0x1F, 0xFF000000 },
{ 0xF, 0x20, 0xFF000000 },
{ 0x10, 0x21, 0xFF000000 },
{ 0x11, 0x22, 0xFF000000 },
{ 0x12, 0x23, 0xFF000000 },
{ 0x13, 0x24, 0xFF010000 },
{ 0x14, 0x25, 0xFF000000 },
{ 0x15, 0x26, 0xFF000200 },
{ 0x16, 0x27, 0x9F000000 },
{ 0x17, 0x28, 0xFF000200 },
{ 0x18, 0x29, 0xFF000200 },
{ 0x19, 0x2A, 0xFF000000 },
{ 0x1A, 0x2B, 0xFF010000 },
{ 0x1B, 0x2C, 0xFF000000 },
{ 0x1C, 0x2D, 0xFF000000 },
{ 0x1D, 0x2E, 0xFF000000 },
{ 0x1E, 0x2F, 0xFF000000 },
{ 0x1F, 0x30, 0xFF000000 },
{ 0x20, 0x31, 0xFF000000 },
{ 0x21, 0x33, 0xFF000200 },
{ 0x22, 0x32, 0xFF000200 },
{ 0x23, 0x34, 0xFF000000 },
{ 0x24, 0x35, 0xFF000200 },
{ 0x25, 0x36, 0xFF000000 },
{ 0x26, 0x37, 0xFF000000 },
{ 0x27, 0x38, 0xFF000000 },
{ 0x28, 0x39, 0xFF000000 },
{ 0x29, 0x3A, 0xFF010000 },
{ 0x2A, 0x3B, 0xFD010000 },
{ 0x2B, 0x3C, 0xFF000000 },
{ 0x2C, 0x3D, 0xFF000000 },
{ 0x2D, 0x3E, 0xFF010000 },
{ 0x2E, 0x3F, 0x87000000 },
{ 0x2F, 0x40, 0x87000000 },
{ 0x30, 0x41, 0xFF000000 },
{ 0x31, 0x42, 0xFF000000 },
{ 0x32, 0x43, 0xFF000000 },
{ 0x33, 0x44, 0xFF000000 },
{ 0x34, 0x45, 0xFF000000 },
{ 0x35, 0x46, 0xFF000000 },
{ 0x36, 0x47, 0xFF000000 },
{ 0x37, 0x48, 0xFF000000 },
{ 0x38, 0x49, 0xFF000000 },
{ 0x39, 0x4A, 0xFF000000 },
{ 0x3A, 0x4B, 0xFF000000 },
{ 0x3B, 0x4C, 0xFF010000 },
{ 0x3C, 0x4D, 0xFF000000 },
{ 0x3D, 0x4E, 0xFF010000 },
{ 0x3E, 0x4F, 0xFF010000 },
{ 0x3F, 0x50, 0xFF010000 },
{ 0x40, 0x51, 0xFF010000 },
{ 0x41, 0x52, 0xFF010000 },
{ 0x42, 0x53, 0xFF000000 },
{ 0x43, 0x54, 0xFF010000 },
{ 0x44, 0x55, 0xFF010000 },
{ 0x45, 0x56, 0xFF010000 },
{ 0x46, 0x57, 0xFF010000 },
{ 0x47, 0x58, 0xFF000000 },
{ 0x48, 0x59, 0xFF010000 },
{ 0x49, 0x5A, 0xFF010000 },
{ 0x4A, 0x5B, 0xFF010000 },
{ 0x4B, 0x5C, 0xFF010000 },
{ 0x4C, 0x5D, 0xFF010000 },
{ 0x4D, 0x5E, 0xFF010000 },
{ 0x4E, 0x60, 0x02000000 },
{ 0x4F, 0x61, 0xFF000000 },
{ 0x50, 0x62, 0xDF000000 },
{ 0x51, 0x63, 0xFF000000 },
{ 0x52, 0x64, 0xFF000000 },
{ 0x53, 0x65, 0xFF000000 },
{ 0x54, 0x66, 0xFF010000 },
{ 0x55, 0x67, 0xDF000000 },
{ 0x56, 0x68, 0xFF010000 },
{ 0x57, 0x69, 0xFF000000 },
{ 0x58, 0x6A, 0xFF010000 },
{ 0x59, 0x6B, 0x1F000000 },
{ 0x5A, 0x6C, 0xFF000000 },
{ 0x5B, 0x6D, 0xFF010000 },
{ 0x5C, 0x6E, 0xFF010000 },
{ 0x5D, 0x6F, 0xFF000000 },
{ 0x5E, 0x70, 0xFF000000 },
{ 0x5F, 0x71, 0xFD010000 },
{ 0x60, 0x72, 0xFD000000 },
{ 0x61, 0x74, 0x02000000 },
{ 0x62, 0x75, 0xDF000000 },
{ 0x63, 0x76, 0xDF000000 },
{ 0x64, 0x77, 0xDF000000 },
{ 0x65, 0x78, 0x02000000 },
{ 0x66, 0x7A, 0xFF000000 },
{ 0x67, 0x7B, 0x02000000 },
{ 0x68, 0x7C, 0x02000000 },
{ 0x69, 0x7D, 0x87000000 },
{ 0x6A, 0x7E, 0x87000000 },
{ 0x6B, 0x7F, 0x1F000000 },
{ 0x6C, 0x80, 0x87000000 },
{ 0x6D, 0x82, 0xFF010100 },
{ 0x6E, 0x84, 0xFF010100 },
{ 0x6F, 0x85, 0xFF010100 },
{ 0x70, 0x86, 0xFF010100 },
{ 0x71, 0x87, 0xFF010100 },
{ 0x72, 0x88, 0xFF010100 },
{ 0x73, 0x89, 0x02010100 },
{ 0x74, 0x8A, 0xFF010100 },
{ 0x75, 0x8B, 0xFF010100 },
{ 0x76, 0x8C, 0xFF010100 },
{ 0x77, 0x8D, 0xFF010100 },
{ 0x78, 0x8E, 0xFF010100 },
{ 0x79, 0x8F, 0xFF010100 },
{ 0x7A, 0x90, 0xFF010100 },
{ 0x7B, 0x91, 0xFF010100 },
{ 0x7C, 0x92, 0xFF010100 },
{ 0x7D, 0x93, 0xFF010100 },
{ 0x7E, 0x94, 0xFF010100 },
{ 0x7F, 0x95, 0xFF010100 },
{ 0x80, 0x96, 0xFF010100 },
{ 0x81, 0x97, 0xFF010000 },
{ 0x82, 0x98, 0x02010000 },
{ 0x83, 0x99, 0x02010000 },
{ 0x84, 0x9A, 0x02010000 },
{ 0x85, 0x9B, 0x02010000 },
{ 0x86, 0x9C, 0x02000000 },
{ 0x87, 0x9D, 0x02010000 },
{ 0x88, 0x9E, 0x02010000 },
{ 0x89, 0x9F, 0xFF000000 },
{ 0x8A, 0xA0, 0xFF000000 },
{ 0x8B, 0xA1, 0xFF000000 },
{ 0x8C, 0xA2, 0xFF000000 },
{ 0x8D, 0xA3, 0xFF000000 },
{ 0x8E, 0xA4, 0xFD000000 },
{ 0x8F, 0xA5, 0xFD000000 },
{ 0x90, 0xA6, 0xFD000000 },
{ 0x91, 0xA7, 0xFF000000 },
{ 0x92, 0xA8, 0xDF000000 },
{ 0x93, 0xA9, 0x1F000000 },
{ 0x94, 0xAA, 0xFF000200 },
{ 0x95, 0xAB, 0xFF000200 },
{ 0x96, 0xAC, 0xFF000200 },
{ 0x97, 0xAD, 0xFF010100 },
{ 0x98, 0xAE, 0xFF010100 },
{ 0x99, 0xAF, 0x02010000 },
{ 0x9A, 0xB0, 0xFF010000 },
{ 0x9B, 0xB1, 0xFF010000 },
{ 0x9C, 0xB2, 0xFF010000 },
{ 0x9D, 0xB3, 0xFF010000 },
{ 0x9E, 0xB6, 0x02000000 },
{ 0x9F, 0xB7, 0xFF000000 },
{ 0xA0, 0xB8, 0xFF000000 },
{ 0xA1, 0xB9, 0xFF000000 },
{ 0xA2, 0xBA, 0xFF000000 },
{ 0xA3, 0xBB, 0xFF000000 },
{ 0xA4, 0xBC, 0xFF000000 },
{ 0xA5, 0xBD, 0xFF000000 },
{ 0xA6, 0xBE, 0xFF000000 },
{ 0xA7, 0xBF, 0xFF000000 },
{ 0xA8, 0xC0, 0xFF000000 },
{ 0xA9, 0xC1, 0xFF000000 },
{ 0xAA, 0xC2, 0xFF000000 },
{ 0xAB, 0xC3, 0xFF000000 },
{ 0xAC, 0xC4, 0xFF010100 },
{ 0xAD, 0xC5, 0xFF010100 },
{ 0xAE, 0xC6, 0xFF000000 },
{ 0xAF, 0xC7, 0xFF000000 },
{ 0xB0, 0xC8, 0xFF010100 },
{ 0xB1, 0xC9, 0xFF010100 },
{ 0xB2, 0xCA, 0xFF010100 },
{ 0xB3, 0xCB, 0xFF000000 },
{ 0xB4, 0xCC, 0xFF000000 },
{ 0xB5, 0xCD, 0xFF000000 },
{ 0xB6, 0xCE, 0xFF010000 },
{ 0xB7, 0xCF, 0xFF010100 },
{ 0xB8, 0xD0, 0xFF010100 },
{ 0xB9, 0xD1, 0xFF010100 },
{ 0xBA, 0xD2, 0xFF010100 },
{ 0xBB, 0xD3, 0xFF010100 },
{ 0xBC, 0xD4, 0xFF000000 },
{ 0xBD, 0xD5, 0xFF000000 },
{ 0xBE, 0xD6, 0xFF000000 },
{ 0xBF, 0xD7, 0xFF010100 },
{ 0xC0, 0xD8, 0xFF010100 },
{ 0xC1, 0xD9, 0xFF010100 },
{ 0xC2, 0xDA, 0xFF010000 },
{ 0xC3, 0xDB, 0xFF010000 },
{ 0xC4, 0xDC, 0xFF010000 },
{ 0xC5, 0xDD, 0xFF010000 },
{ 0xC6, 0xDE, 0xFF010100 },
{ 0xC7, 0xDF, 0xFF010000 },
{ 0xC8, 0xE0, 0xFF010000 },
{ 0xC9, 0xE1, 0xFF010000 },
{ 0xCA, 0xE2, 0xFF010000 },
{ 0xCB, 0xE3, 0xFF010100 },
{ 0xCC, 0xE4, 0xFF000000 },
{ 0xCD, 0xE5, 0xFF000000 },
{ 0xCE, 0xF0, 0xFF010000 },
{ 0xCF, 0xF1, 0xFF010000 },
{ 0xD0, 0xF2, 0xFF010000 },
{ 0xD1, 0xF3, 0xFF010000 },
{ 0xD2, 0xF4, 0xFF010000 },
{ 0xD3, 0xF5, 0xFF010000 },
{ 0xD4, 0xF6, 0xFF010000 },
{ 0xD5, 0xF7, 0xFF010000 },
{ 0xD6, 0xF8, 0xFF010000 },
{ 0xD7, 2, 0x02000000 },
{ 0xD8, 3, 0x02000000 },
{ 0xD9, 4, 0x02000000 },
{ 0xDA, 5, 0x02000000 },
{ 0xDB, 6, 0x02000000 },
{ 0xDC, 7, 0x02000000 },
{ 0xDD, 8, 0x02000000 },
{ 0xDE, 9, 0x02000000 },
{ 0xDF, 0xA, 0x02000000 },
{ 0xE0, 0xB, 0x02000000 },
{ 0xE1, 0xC, 0x02000000 },
{ 0xE2, 0xD, 0x02000000 },
{ 0xE3, 0xE, 0x02010000 },
{ 0xE4, 0xF, 0x02010000 },
{ 0xE5, 0x10, 0x02010000 },
{ 0xE6, 0xE6, 0xFD000000 },
{ 0xE7, 0xE7, 0xFD000000 },
{ 0xE8, 0xE8, 0xFD000000 },
{ 0xE9, 0xE9, 0xFD000000 },
{ 0xEA, 0xEA, 0xFD000000 },
{ 0xEB, 0xEB, 0xFD000000 },
{ 0xEC, 0xEC, 0xFD000000 },
{ 0xED, 0xED, 0xFD000000 },
{ 0xEE, 0xEE, 0xFD000000 },
{ 0xEF, 0xEF, 0xFD000000 },
{ 0xF0, 0xF9, 0xFD000000 },
{ 0xF1, 0xFA, 0xFD000000 },
{ 0xF2, 0xFB, 0xFD000000 },
{ 0xF3, 0xFC, 0xFD000000 },
{ 0xF4, 0xFD, 0xFD000000 },
{ 0xF5, 0xFE, 0xFD000000 },
{ 0xF6, 0xFF, 0xFD000000 },
{ 0xF7, 0x100, 0xFD000000 },
{ 0xF8, 0x101, 0xFD000000 },
{ 0xF9, 0x5F, 0x02000000 },
{ 0xFA, 0x73, 0x02000000 },
{ 0xFB, 0x79, 0x02000000 },
{ 0xFC, 0x81, 0x87000000 },
{ 0xFD, 0x83, 0x14000000 },
{ 0xFE, 0xB4, 0x87000000 },
{ 0xFF, 0xB5, 0x87000000 },
{ 0x29A, 0, 0 },
};
/* 3D9D20 */ static struct lbl_803D9D20_t lbl_803D9D20;
/* 46B488 */ static struct lbl_8046B488_t lbl_8046B488;
/* 46B668 */ static struct lbl_8046B668_t lbl_8046B668;
/* 46B6A0 */ static lbl_8046B6A0_t lbl_8046B6A0;
/* 46DBD8 */ static M2C_UNK lbl_8046DBD8[4];
/* 46DBE8 */ static struct lbl_8046DBE8_t lbl_8046DBE8;
/* 46E38C */ static int lbl_8046E38C[4];
/* 472C30 */ static M2C_UNK lbl_80472C30[32];
/* 472CB0 */ static M2C_UNK lbl_80472CB0[30];
/* 472D28 */ static struct lbl_80472D28_t lbl_80472D28;
/* 472E48 */ static struct lbl_80472E48_t lbl_80472E48;
/* 472EC8 */ static int lbl_80472EC8[4];
/* 473594 */ static u8 lbl_80473594[0x14];
/* 473700 */ static int lbl_80473700[69];
/* 4771C4 */ static M2C_UNK gm_804771C4[349];
/* 4D4190 */ static s32 lbl_804D4190 = 0xFFFFFFFF;
/* 4D6598 */ static s8 lbl_804D6598;
/* 4D65A0 */ static s8 lbl_804D65A0;
#define NUM_UNLOCKABLE_CHARACTERS 11
#define GALE01_1A3680
/* 1A3680 */ u64 gm_801A3680(u8);
/* 1A36A0 */ u64 gm_801A36A0(u8);
/* 1A36C0 */ u64 gm_801A36C0(u8);
/* 1A36E0 */ void gm_801A36E0(s32, s32);
/* 1A3714 */ void gm_801A3714(s32, u64, u64);
/* 1A3820 */ void gm_801A3820(s32, u64, u64);
/* 1A396C */ void fn_801A396C(int idx);
/* 1A3A74 */ M2C_UNK gm_801A3A74();
/* 1A3E88 */ M2C_UNK gm_801A3E88();
/* 1A427C */ int gm_801A427C(void* arg0);
/* 1A428C */ void gm_801A428C(u8 arg0);
/* 1A42A0 */ void gm_801A42A0(int pending_minor);
/* 1A42D4 */ M2C_UNK gm_801A42D4();
/* 1A4310 */ u8 gm_801A4310(void);
/* 1A4340 */ M2C_UNK gm_801A4340();
/* 1A43A0 */ u8 gm_801A43A0(u8 arg0);
/* 1A4510 */ void gm_801A4510(void);
/* 1A45E8 */ bool gm_801A45E8(s32);
/* 1A4634 */ M2C_UNK gm_801A4634();
/* 1A4674 */ M2C_UNK gm_801A4674();
/* 1A46B8 */ M2C_UNK gm_801A46B8();
/* 1A46F4 */ M2C_UNK fn_801A46F4();
/* 1A47E4 */ M2C_UNK fn_801A47E4();
/* 1A48A4 */ M2C_UNK gm_801A48A4();
/* 1A4970 */ M2C_UNK gm_801A4970();
/* 1A4B08 */ void gm_801A4B08(s32 arg0, s32 arg1);
/* 1A4B1C */ M2C_UNK gm_801A4B1C();
/* 1A4B60 */ M2C_UNK gm_801A4B60();
/* 1A4B74 */ M2C_UNK gm_801A4B74();
/* 1A4B90 */ s32 gm_801A4B90(void);
/* 1A4B9C */ s8* gm_801A4B9C(void);
/* 1A4BA8 */ struct gm_80479D58_t* gm_801A4BA8(void);
/* 1A4BC8 */ s32 gm_801A4BC8(void);
/* 1A4BD0 */ M2C_UNK fn_801A4BD0();
/* 1A50B8 */ M2C_UNK gm_801A50B8();
/* 1A5130 */ M2C_UNK gm_801A5130();
/* 1A51A8 */ M2C_UNK gm_801A51A8();
/* 1A5220 */ M2C_UNK gm_801A5220();
/* 1A5258 */ M2C_UNK gm_801A5258();
/* 1A52D0 */ M2C_UNK gm_801A52D0();
/* 1A5360 */ M2C_UNK gm_801A5360();
/* 1A5598 */ M2C_UNK gm_801A5598();
/* 1A55C4 */ M2C_UNK gm_801A55C4();
/* 1A55EC */ M2C_UNK gm_801A55EC();
/* 1A5618 */ M2C_UNK gm_801A5618();
/* 1A5680 */ M2C_UNK gm_801A5680();
/* 1A5754 */ M2C_UNK gm_801A5754();
/* 1A57A8 */ M2C_UNK gm_801A57A8();
/* 1A583C */ M2C_UNK gm_801A583C();
/* 1A5AF0 */ M2C_UNK gm_801A5AF0();
/* 1A5C3C */ M2C_UNK gm_801A5C3C();
/* 1A5EC8 */ M2C_UNK gm_801A5EC8();
/* 1A5F00 */ M2C_UNK gm_801A5F00();
/* 1A5F64 */ M2C_UNK gm_801A5F64();
/* 1A6254 */ M2C_UNK gm_801A6254();
/* 1A6308 */ M2C_UNK gm_801A6308();
/* 1A632C */ M2C_UNK gm_801A632C();
/* 1A637C */ M2C_UNK gm_801A637C();
/* 1A64A8 */ M2C_UNK gm_801A64A8();
/* 1A659C */ M2C_UNK gm_801A659C();
/* 1A6630 */ M2C_UNK gm_801A6630();
/* 1A6664 */ M2C_UNK fn_801A6664();
/* 1A6844 */ M2C_UNK fn_801A6844();
/* 1A6868 */ M2C_UNK fn_801A6868();
/* 1A68D8 */ M2C_UNK gm_801A68D8();
/* 1A6A48 */ M2C_UNK fn_801A6A48();
/* 1A6ACC */ M2C_UNK fn_801A6ACC();
/* 1A6B6C */ M2C_UNK fn_801A6B6C();
/* 1A6C30 */ M2C_UNK fn_801A6C30();
/* 1A6C54 */ M2C_UNK gm_801A6C54();
/* 1A6D78 */ M2C_UNK fn_801A6D78();
/* 1A6DC0 */ M2C_UNK gm_801A6DC0();
/* 1A6EE4 */ M2C_UNK gm_801A6EE4();
/* 1A7070 */ M2C_UNK gm_801A7070();
/* 1A79D4 */ M2C_UNK gm_801A79D4();
/* 1A7A44 */ M2C_UNK fn_801A7A44();
/* 1A7A68 */ M2C_UNK fn_801A7A68();
/* 1A7A8C */ M2C_UNK fn_801A7A8C();
/* 1A7B00 */ M2C_UNK gm_801A7B00();
/* 1A7FB4 */ M2C_UNK fn_801A7FB4();
/* 1A80CC */ M2C_UNK fn_801A80CC();
/* 1A80F0 */ M2C_UNK fn_801A80F0();
/* 1A8114 */ M2C_UNK gm_801A8114();
/* 1A851C */ M2C_UNK fn_801A851C();
/* 1A85E4 */ M2C_UNK gm_801A85E4();
/* 1A8D54 */ M2C_UNK gm_801A8D54();
/* 1A9094 */ M2C_UNK gm_801A9094();
/* 1A9498 */ M2C_UNK fn_801A9498();
/* 1A94BC */ M2C_UNK fn_801A94BC();
/* 1A9630 */ M2C_UNK gm_801A9630();
/* 1A9B30 */ M2C_UNK gm_801A9B30();
/* 1A9D0C */ M2C_UNK gm_801A9D0C();
/* 1A9DD0 */ M2C_UNK gm_801A9DD0();
/* 1A9FCC */ M2C_UNK fn_801A9FCC();
/* 1AA0E8 */ M2C_UNK fn_801AA0E8();
/* 1AA110 */ M2C_UNK gm_801AA110();
/* 1AA28C */ M2C_UNK gm_801AA28C();
/* 1AA644 */ M2C_UNK gm_801AA644();
/* 1AA664 */ M2C_UNK gm_801AA664();
/* 1AA688 */ M2C_UNK gm_801AA688();
/* 1AA6D8 */ M2C_UNK gm_801AA6D8();
/* 1AA6FC */ M2C_UNK gm_801AA6FC();
/* 1AA774 */ M2C_UNK gm_801AA774();
/* 1AA7C4 */ M2C_UNK gm_801AA7C4();
/* 1AA7F8 */ void fn_801AA7F8(HSD_GObj* gobj);
/* 1AA854 */ void fn_801AA854(HSD_GObj* gobj, int code);
/* 1AAA28 */ void fn_801AAA28(HSD_GObj* gobj, int code);
/* 1AAABC */ void fn_801AAABC(HSD_GObj* gobj);
/* 1AAB18 */ void fn_801AAB18(HSD_GObj* gobj);
/* 1AAB74 */ void fn_801AAB74(HSD_GObj* gobj);
/* 1AB200 */ void fn_801AB200(HSD_GObj* gobj);
/* 1AC67C */ void fn_801AC67C(HSD_GObj* gobj);
/* 1AC6D8 */ M2C_UNK gm_801AC6D8();
/* 1ACC94 */ M2C_UNK gm_801ACC94(void);
/* 1ACCA0 */ M2C_UNK gm_801ACCA0();
/* 1ACD8C */ M2C_UNK gm_801ACD8C();
/* 1ACE94 */ M2C_UNK gm_801ACE94();
/* 1ACF8C */ M2C_UNK gm_801ACF8C();
/* 1AD088 */ M2C_UNK gm_801AD088();
/* 1AD254 */ M2C_UNK gm_801AD254();
/* 1AD620 */ M2C_UNK gm_801AD620();
/* 1AD874 */ M2C_UNK gm_801AD874();
/* 1AD8EC */ M2C_UNK gm_801AD8EC();
/* 1AD920 */ M2C_UNK fn_801AD920();
/* 1ADB04 */ M2C_UNK gm_801ADB04();
/* 1ADC88 */ M2C_UNK gm_801ADC88();
/* 1ADCE4 */ M2C_UNK gm_801ADCE4();
/* 1ADDA8 */ M2C_UNK gm_801ADDA8();
/* 1ADDD8 */ M2C_UNK gm_801ADDD8();
/* 1ADE1C */ M2C_UNK gm_801ADE1C();
/* 1AE050 */ M2C_UNK gm_801AE050();
/* 1AE44C */ M2C_UNK gm_801AE44C();
/* 1AE544 */ M2C_UNK gm_801AE544();
/* 1AE640 */ M2C_UNK gm_801AE640();
/* 1AE74C */ M2C_UNK gm_801AE74C();
/* 1AE848 */ M2C_UNK gm_801AE848();
/* 1AE948 */ M2C_UNK fn_801AE948();
/* 1AEBB0 */ M2C_UNK gm_801AEBB0();
/* 1AECC4 */ M2C_UNK gm_801AECC4();
/* 1AEDC8 */ M2C_UNK gm_801AEDC8();
/* 1AEE6C */ M2C_UNK gm_801AEE6C();
/* 1AF0D4 */ M2C_UNK gm_801AF0D4();
/* 1AF250 */ M2C_UNK gm_801AF250();
/* 1AF568 */ M2C_UNK gm_801AF568();
/* 1B0264 */ M2C_UNK gm_801B0264();
/* 1B0304 */ M2C_UNK gm_801B0304();
/* 1B0348 */ M2C_UNK gm_801B0348();
/* 1B0474 */ M2C_UNK gm_801B0474();
/* 1B05F4 */ M2C_UNK gm_801B05F4();
/* 1B0620 */ M2C_UNK gm_801B0620();
/* 1B0664 */ M2C_UNK gm_801B0664();
/* 1B06B0 */ M2C_UNK gm_801B06B0();
/* 1B0730 */ M2C_UNK gm_801B0730();
/* 1B07B4 */ M2C_UNK gm_801B07B4();
/* 1B07E8 */ M2C_UNK gm_801B07E8();
/* 1B087C */ M2C_UNK gm_801B087C();
/* 1B089C */ M2C_UNK gm_801B089C();
/* 1B099C */ M2C_UNK gm_801B099C();
/* 1B09C0 */ M2C_UNK gm_801B09C0();
/* 1B09F8 */ M2C_UNK fn_801B09F8();
/* 1B0A34 */ M2C_UNK gm_801B0A34();
/* 1B0A8C */ M2C_UNK fn_801B0A8C();
/* 1B0AC8 */ M2C_UNK gm_801B0AC8();
/* 1B0B00 */ M2C_UNK gm_801B0B00();
/* 1B0B24 */ M2C_UNK gm_801B0B24();
/* 1B0B48 */ M2C_UNK gm_801B0B48();
/* 1B0B8C */ M2C_UNK gm_801B0B8C();
/* 1B0BF0 */ M2C_UNK gm_801B0BF0();
/* 1B0C18 */ M2C_UNK gm_801B0C18();
/* 1B0C50 */ M2C_UNK gm_801B0C50();
/* 1B0C74 */ M2C_UNK gm_801B0C74();
/* 1B0CF0 */ M2C_UNK gm_801B0CF0();
/* 1B0DD0 */ M2C_UNK gm_801B0DD0();
/* 1B0F1C */ M2C_UNK gm_801B0F1C();
/* 1B0F60 */ M2C_UNK gm_801B0F60();
/* 1B0F90 */ M2C_UNK gm_801B0F90();
/* 1B0FB8 */ M2C_UNK gm_801B0FB8();
/* 1B138C */ M2C_UNK gm_801B138C();
/* 1B13B8 */ M2C_UNK gm_801B13B8();
/* 1B14A0 */ M2C_UNK gm_801B14A0();
/* 1B14DC */ M2C_UNK gm_801B14DC();
/* 1B1514 */ M2C_UNK gm_801B1514();
/* 1B154C */ M2C_UNK gm_801B154C();
/* 1B1588 */ M2C_UNK gm_801B1588();
/* 1B15C8 */ M2C_UNK gm_801B15C8();
/* 1B1648 */ M2C_UNK gm_801B1648();
/* 1B1688 */ M2C_UNK gm_801B1688();
/* 1B16A8 */ M2C_UNK gm_801B16A8();
/* 1B16C8 */ M2C_UNK gm_801B16C8();
/* 1B1724 */ M2C_UNK gm_801B1724();
/* 1B174C */ M2C_UNK gm_801B174C();
/* 1B1788 */ M2C_UNK gm_801B1788();
/* 1B1810 */ M2C_UNK gm_801B1810();
/* 1B1834 */ M2C_UNK gm_801B1834();
/* 1B18D4 */ M2C_UNK gm_801B18D4();
/* 1B1A2C */ M2C_UNK gm_801B1A2C();
/* 1B1A84 */ M2C_UNK gm_801B1A84();
/* 1B1AD4 */ M2C_UNK gm_801B1AD4();
/* 1B1B74 */ M2C_UNK gm_801B1B74();
/* 1B1C24 */ M2C_UNK gm_801B1C24();
/* 1B1EB8 */ M2C_UNK gm_801B1EB8();
/* 1B1EEC */ M2C_UNK gm_801B1EEC();
/* 1B1F6C */ M2C_UNK fn_801B1F6C();
/* 1B1F70 */ M2C_UNK gm_801B1F70();
/* 1B2204 */ M2C_UNK gm_801B2204();
/* 1B2298 */ M2C_UNK gm_801B2298();
/* 1B23C4 */ M2C_UNK gm_801B23C4();
/* 1B23F0 */ M2C_UNK gm_801B23F0();
/* 1B24B4 */ M2C_UNK gm_801B24B4();
/* 1B2510 */ M2C_UNK gm_801B2510();
/* 1B254C */ M2C_UNK gm_801B254C();
/* 1B25D4 */ M2C_UNK gm_801B25D4();
/* 1B26AC */ M2C_UNK gm_801B26AC();
/* 1B2704 */ M2C_UNK gm_801B2704();
/* 1B2790 */ M2C_UNK gm_801B2790();
/* 1B2AF8 */ M2C_UNK gm_801B2AF8();
/* 1B2B7C */ M2C_UNK gm_801B2B7C();
/* 1B2BA4 */ M2C_UNK gm_801B2BA4();
/* 1B2D54 */ M2C_UNK gm_801B2D54();
/* 1B2F78 */ M2C_UNK gm_801B2F78();
/* 1B34B8 */ M2C_UNK gm_801B34B8();
/* 1B3500 */ M2C_UNK gm_801B3500();
/* 1B3A34 */ M2C_UNK gm_801B3A34();
/* 1B3B40 */ M2C_UNK gm_801B3B40();
/* 1B3D44 */ M2C_UNK gm_801B3D44();
/* 1B3D84 */ M2C_UNK gm_801B3D84();
/* 1B3DD8 */ M2C_UNK gm_801B3DD8();
/* 1B3E44 */ M2C_UNK gm_801B3E44();
/* 1B3F18 */ M2C_UNK gm_801B3F18();
/* 1B3F40 */ M2C_UNK gm_801B3F40();
/* 1B4064 */ M2C_UNK gm_801B4064();
/* 1B4170 */ M2C_UNK gm_801B4170();
/* 1B4254 */ M2C_UNK gm_801B4254();
/* 1B4294 */ M2C_UNK gm_801B4294();
/* 1B42E8 */ M2C_UNK gm_801B42E8();
/* 1B4350 */ M2C_UNK gm_801B4350();
/* 1B4408 */ M2C_UNK gm_801B4408();
/* 1B4430 */ M2C_UNK gm_801B4430();
/* 1B44A0 */ M2C_UNK gm_801B44A0();
/* 1B45A4 */ M2C_UNK gm_801B45A4();
/* 1B461C */ M2C_UNK gm_801B461C();
/* 1B4684 */ M2C_UNK gm_801B4684();
/* 1B4768 */ M2C_UNK gm_801B4768();
/* 1B47FC */ M2C_UNK gm_801B47FC();
/* 1B4860 */ M2C_UNK gm_801B4860();
/* 1B4974 */ M2C_UNK gm_801B4974();
/* 1B4B28 */ M2C_UNK gm_801B4B28();
/* 1B4C5C */ M2C_UNK gm_801B4C5C();
/* 1B4D34 */ M2C_UNK gm_801B4D34();
/* 1B4DAC */ M2C_UNK gm_801B4DAC();
/* 1B4E58 */ M2C_UNK gm_801B4E58();
/* 1B4EB8 */ M2C_UNK gm_801B4EB8();
/* 1B4F44 */ M2C_UNK gm_801B4F44();
/* 1B4FCC */ M2C_UNK gm_801B4FCC();
/* 1B5078 */ M2C_UNK gm_801B5078();
/* 1B50C4 */ M2C_UNK gm_801B50C4();
/* 1B518C */ M2C_UNK gm_801B518C();
/* 1B51CC */ M2C_UNK gm_801B51CC();
/* 1B5214 */ M2C_UNK gm_801B5214();
/* 1B5324 */ M2C_UNK gm_801B5324();
/* 1B5624 */ M2C_UNK gm_801B5624();
/* 1B59AC */ M2C_UNK gm_801B59AC();
/* 1B5AA8 */ M2C_UNK fn_801B5AA8();
/* 1B5ACC */ M2C_UNK gm_801B5ACC();
/* 1B5E7C */ M2C_UNK gm_801B5E7C();
/* 1B5EB4 */ M2C_UNK gm_801B5EB4();
/* 1B5EE4 */ M2C_UNK gm_801B5EE4();
/* 1B5F50 */ M2C_UNK gm_801B5F50();
/* 1B5FB4 */ M2C_UNK gm_801B5FB4();
/* 1B607C */ M2C_UNK gm_801B607C();
/* 1B60A4 */ M2C_UNK gm_801B60A4();
/* 1B62D8 */ M2C_UNK gm_801B62D8();
/* 1B632C */ M2C_UNK gm_801B632C();
/* 1B63C4 */ M2C_UNK gm_801B63C4();
/* 1B6428 */ M2C_UNK gm_801B6428();
/* 1B65D4 */ M2C_UNK gm_801B65D4();
/* 1B67E8 */ M2C_UNK gm_801B67E8();
/* 1B6808 */ M2C_UNK gm_801B6808();
/* 1B6834 */ M2C_UNK gm_801B6834();
/* 1B685C */ M2C_UNK gm_801B685C();
/* 1B688C */ M2C_UNK gm_801B688C();
/* 1B69C0 */ M2C_UNK gm_801B69C0();
/* 1B6AD8 */ M2C_UNK gm_801B6AD8();
/* 1B6B70 */ M2C_UNK gm_801B6B70();
/* 1B6BE8 */ M2C_UNK gm_801B6BE8();
/* 1B6F44 */ M2C_UNK gm_801B6F44();
/* 1B7044 */ M2C_UNK gm_801B7044();
/* 1B70DC */ M2C_UNK gm_801B70DC();
/* 1B7154 */ M2C_UNK gm_801B7154();
/* 1B74F0 */ M2C_UNK gm_801B74F0();
/* 1B75F0 */ M2C_UNK gm_801B75F0();
/* 1B7688 */ M2C_UNK gm_801B7688();
/* 1B7700 */ M2C_UNK gm_801B7700();
/* 1B7AA0 */ M2C_UNK gm_801B7AA0();
/* 1B7B74 */ M2C_UNK gm_801B7B74();
/* 1B7C0C */ M2C_UNK gm_801B7C0C();
/* 1B7C84 */ M2C_UNK gm_801B7C84();
/* 1B8024 */ M2C_UNK gm_801B8024();
/* 1B8110 */ M2C_UNK gm_801B8110();
/* 1B81A8 */ M2C_UNK gm_801B81A8();
/* 1B8220 */ M2C_UNK gm_801B8220();
/* 1B8580 */ M2C_UNK gm_801B8580();
/* 1B863C */ M2C_UNK gm_801B863C();
/* 1B86D4 */ M2C_UNK gm_801B86D4();
/* 1B874C */ M2C_UNK gm_801B874C();
/* 1B8AF8 */ M2C_UNK gm_801B8AF8();
/* 1B8BB4 */ M2C_UNK gm_801B8BB4();
/* 1B8BE0 */ M2C_UNK gm_801B8BE0();
/* 1B8C08 */ M2C_UNK gm_801B8C08();
/* 1B8C30 */ M2C_UNK gm_801B8C30();
/* 1B8C68 */ M2C_UNK gm_801B8C68();
/* 1B8C9C */ M2C_UNK gm_801B8C9C();
/* 1B8CC4 */ M2C_UNK gm_801B8CC4();
/* 1B8CF4 */ M2C_UNK gm_801B8CF4();
/* 1B8D14 */ M2C_UNK gm_801B8D14();
/* 1B8D34 */ M2C_UNK gm_801B8D34();
/* 1B8D60 */ M2C_UNK gm_801B8D60();
/* 1B8D88 */ M2C_UNK gm_801B8D88();
/* 1B8DA8 */ M2C_UNK gm_801B8DA8();
/* 1B8DD4 */ M2C_UNK gm_801B8DD4();
/* 1B8DFC */ M2C_UNK gm_801B8DFC();
/* 1B8E24 */ M2C_UNK gm_801B8E24();
/* 1B8E50 */ M2C_UNK fn_801B8E50();
/* 1B8E74 */ M2C_UNK gm_801B8E74();
/* 1B8EA8 */ M2C_UNK gm_801B8EA8();
/* 1B8ED0 */ M2C_UNK gm_801B8ED0();
/* 1B8F04 */ M2C_UNK gm_801B8F04();
/* 1B8F24 */ M2C_UNK gm_801B8F24();
/* 1B8F44 */ M2C_UNK gm_801B8F44();
/* 1B8F70 */ M2C_UNK gm_801B8F70();
/* 1B8F98 */ M2C_UNK gm_801B8F98();
/* 1B8FB8 */ M2C_UNK gm_801B8FB8();
/* 1B8FE4 */ M2C_UNK gm_801B8FE4();
/* 1B900C */ M2C_UNK gm_801B900C();
/* 1B9034 */ M2C_UNK gm_801B9034();
/* 1B9060 */ M2C_UNK fn_801B9060();
/* 1B9084 */ M2C_UNK gm_801B9084();
/* 1B90B8 */ M2C_UNK gm_801B90B8();
/* 1B90E0 */ M2C_UNK gm_801B90E0();
/* 1B9114 */ M2C_UNK gm_801B9114();
/* 1B9134 */ M2C_UNK gm_801B9134();
/* 1B9154 */ M2C_UNK gm_801B9154();
/* 1B9180 */ M2C_UNK gm_801B9180();
/* 1B91A8 */ M2C_UNK gm_801B91A8();
/* 1B91C8 */ M2C_UNK gm_801B91C8();
/* 1B922C */ M2C_UNK gm_801B922C();
/* 1B9254 */ M2C_UNK gm_801B9254();
/* 1B927C */ M2C_UNK gm_801B927C();
/* 1B931C */ M2C_UNK gm_801B931C();
/* 1B9560 */ M2C_UNK gm_801B9560();
/* 1B95B0 */ M2C_UNK gm_801B95B0();
/* 1B95D8 */ M2C_UNK gm_801B95D8();
/* 1B9600 */ M2C_UNK gm_801B9600();
/* 1B96E8 */ M2C_UNK fn_801B96E8();
/* 1B97C4 */ M2C_UNK gm_801B97C4();
/* 1B9850 */ M2C_UNK fn_801B9850();
/* 1B98E8 */ M2C_UNK gm_801B98E8();
/* 1B999C */ M2C_UNK gm_801B999C();
/* 1B9A3C */ M2C_UNK gm_801B9A3C();
/* 1B9DD8 */ M2C_UNK gm_801B9DD8();
/* 1B9EB8 */ M2C_UNK gm_801B9EB8();
/* 1B9EE4 */ M2C_UNK gm_801B9EE4();
/* 1B9F10 */ M2C_UNK gm_801B9F10();
/* 1B9F3C */ M2C_UNK gm_801B9F3C();
/* 1B9F64 */ M2C_UNK gm_801B9F64();
/* 1B9F8C */ M2C_UNK gm_801B9F8C();
/* 1B9FC8 */ M2C_UNK gm_801B9FC8();
/* 1B9FFC */ M2C_UNK gm_801B9FFC();
/* 1BA024 */ M2C_UNK gm_801BA024();
/* 1BA058 */ M2C_UNK gm_801BA058();
/* 1BA078 */ M2C_UNK gm_801BA078();
/* 1BA098 */ M2C_UNK gm_801BA098();
/* 1BA0C4 */ M2C_UNK gm_801BA0C4();
/* 1BA0EC */ M2C_UNK gm_801BA0EC();
/* 1BA10C */ M2C_UNK gm_801BA10C();
/* 1BA138 */ M2C_UNK gm_801BA138();
/* 1BA160 */ M2C_UNK gm_801BA160();
/* 1BA188 */ M2C_UNK gm_801BA188();
/* 1BA1C8 */ M2C_UNK gm_801BA1C8();
/* 1BA1FC */ M2C_UNK gm_801BA1FC();
/* 1BA224 */ M2C_UNK gm_801BA224();
/* 1BA258 */ M2C_UNK gm_801BA258();
/* 1BA278 */ M2C_UNK gm_801BA278();
/* 1BA298 */ M2C_UNK gm_801BA298();
/* 1BA2C4 */ M2C_UNK gm_801BA2C4();
/* 1BA2EC */ M2C_UNK gm_801BA2EC();
/* 1BA30C */ M2C_UNK gm_801BA30C();
/* 1BA338 */ M2C_UNK gm_801BA338();
/* 1BA360 */ M2C_UNK gm_801BA360();
/* 1BA388 */ M2C_UNK gm_801BA388();
/* 1BA3C8 */ M2C_UNK gm_801BA3C8();
/* 1BA3FC */ M2C_UNK gm_801BA3FC();
/* 1BA424 */ M2C_UNK gm_801BA424();
/* 1BA458 */ M2C_UNK gm_801BA458();
/* 1BA478 */ M2C_UNK gm_801BA478();
/* 1BA498 */ M2C_UNK gm_801BA498();
/* 1BA4C4 */ M2C_UNK gm_801BA4C4();
/* 1BA4EC */ M2C_UNK gm_801BA4EC();
/* 1BA50C */ M2C_UNK gm_801BA50C();
/* 1BA538 */ M2C_UNK gm_801BA538();
/* 1BA560 */ M2C_UNK gm_801BA560();
/* 1BA588 */ M2C_UNK gm_801BA588();
/* 1BA5C0 */ M2C_UNK gm_801BA5C0();
/* 1BA5F4 */ M2C_UNK gm_801BA5F4();
/* 1BA61C */ M2C_UNK gm_801BA61C();
/* 1BA650 */ M2C_UNK gm_801BA650();
/* 1BA670 */ M2C_UNK gm_801BA670();
/* 1BA690 */ M2C_UNK gm_801BA690();
/* 1BA6BC */ M2C_UNK gm_801BA6BC();
/* 1BA6E4 */ M2C_UNK gm_801BA6E4();
/* 1BA704 */ M2C_UNK gm_801BA704();
/* 1BA730 */ M2C_UNK gm_801BA730();
/* 1BA758 */ M2C_UNK gm_801BA758();
/* 1BA780 */ M2C_UNK gm_801BA780();
/* 1BA7B8 */ M2C_UNK gm_801BA7B8();
/* 1BA7EC */ M2C_UNK gm_801BA7EC();
/* 1BA814 */ M2C_UNK gm_801BA814();
/* 1BA848 */ M2C_UNK gm_801BA848();
/* 1BA868 */ M2C_UNK gm_801BA868();
/* 1BA888 */ M2C_UNK gm_801BA888();
/* 1BA8B4 */ M2C_UNK gm_801BA8B4();
/* 1BA8DC */ M2C_UNK gm_801BA8DC();
/* 1BA8FC */ M2C_UNK gm_801BA8FC();
/* 1BA938 */ M2C_UNK gm_801BA938();
/* 1BAA60 */ M2C_UNK gm_801BAA60();
/* 1BAAD0 */ M2C_UNK gm_801BAAD0();
/* 1BAB40 */ M2C_UNK gm_801BAB40();
/* 1BAC9C */ M2C_UNK gm_801BAC9C();
/* 1BAD70 */ M2C_UNK gm_801BAD70();
/* 1BB758 */ M2C_UNK gm_801BB758();
/* 1BBA60 */ M2C_UNK gm_801BBA60();
/* 1BBB64 */ M2C_UNK gm_801BBB64();
/* 1BBEA8 */ M2C_UNK gm_801BBEA8();
/* 1BBFE8 */ M2C_UNK fn_801BBFE8();
/* 1BC00C */ M2C_UNK gm_801BC00C();
/* 1BC488 */ M2C_UNK gm_801BC488();
/* 1BC4F4 */ M2C_UNK gm_801BC4F4();
/* 1BC670 */ M2C_UNK gm_801BC670();
/* 1BC754 */ M2C_UNK gm_801BC754();
/* 1BC9E8 */ M2C_UNK gm_801BC9E8();
/* 1BCAF0 */ M2C_UNK gm_801BCAF0();
/* 1BCC9C */ M2C_UNK gm_801BCC9C();
/* 1BCF20 */ M2C_UNK gm_801BCF20();
/* 1BCF40 */ M2C_UNK gm_801BCF40();
/* 1BD028 */ M2C_UNK gm_801BD028();
/* 1BD164 */ M2C_UNK gm_801BD164();
/* 1BD30C */ M2C_UNK gm_801BD30C();
/* 1BD44C */ M2C_UNK gm_801BD44C();
/* 1BD46C */ M2C_UNK gm_801BD46C();
/* 1BD658 */ M2C_UNK gm_801BD658();
/* 1BD7FC */ M2C_UNK gm_801BD7FC();
/* 1BD93C */ M2C_UNK gm_801BD93C();
/* 1BDAD4 */ M2C_UNK gm_801BDAD4();
/* 1BDAF4 */ M2C_UNK gm_801BDAF4();
/* 1BDC08 */ M2C_UNK gm_801BDC08();
/* 1BDD44 */ M2C_UNK gm_801BDD44();
/* 1BDE94 */ M2C_UNK gm_801BDE94();
/* 1BE37C */ M2C_UNK gm_801BE37C();
/* 1BE39C */ M2C_UNK gm_801BE39C();
/* 1BE618 */ M2C_UNK gm_801BE618();
/* 1BE638 */ M2C_UNK gm_801BE638();
/* 1BEA10 */ M2C_UNK gm_801BEA10();
/* 1BEA4C */ M2C_UNK gm_801BEA4C();
/* 1BEA88 */ M2C_UNK gm_801BEA88();
/* 1BEAF0 */ M2C_UNK gm_801BEAF0();
/* 1BEB2C */ M2C_UNK gm_801BEB2C();
/* 1BEB68 */ void gm_801BEB68(s32);
/* 1BEB74 */ void gm_801BEB74(u8);
/* 1BEB80 */ u8 gm_801BEB80(void);
/* 1BEB8C */ M2C_UNK gm_801BEB8C();
/* 1BEBA8 */ u8 gm_801BEBA8(s8 arg0);
/* 1BEBC0 */ M2C_UNK gm_801BEBC0();
/* 1BEBF8 */ M2C_UNK gm_801BEBF8();
/* 1BEC54 */ void* gm_801BEC54(void);
/* 1BEC80 */ M2C_UNK gm_801BEC80();
/* 1BECA8 */ M2C_UNK gm_801BECA8();
/* 1BECD0 */ M2C_UNK gm_801BECD0();
/* 1BED14 */ M2C_UNK gm_801BED14();
/* 1BED3C */ M2C_UNK gm_801BED3C();
/* 1BEDA8 */ M2C_UNK gm_801BEDA8();
/* 1BEE58 */ M2C_UNK gm_801BEE58();
/* 1BEE9C */ M2C_UNK gm_801BEE9C();
/* 1BEF84 */ M2C_UNK gm_801BEF84();
/* 1BEFA4 */ void gm_801BEFA4(s8);
/* 1BEFF0 */ u8 gm_801BEFF0(void);
/* 1BF000 */ void gm_801BF000(s8 arg0);
/* 1BF010 */ u8 gm_801BF010(void);
/* 1BF020 */ void gm_801BF020(s8 arg0);
/* 1BF030 */ u8 gm_801BF030(void);
/* 1BF040 */ void gm_801BF040(s8 arg0);
/* 1BF050 */ u8 gm_801BF050(void);
/* 1BF060 */ M2C_UNK gm_801BF060();
/* 1BF128 */ M2C_UNK gm_801BF128();
/* 1BF3F8 */ M2C_UNK gm_801BF3F8();
/* 1BF4DC */ M2C_UNK gm_801BF4DC();
/* 1BF634 */ void gm_801BF634(s32 arg0, s8 arg1);
/* 1BF648 */ u8 gm_801BF648(s32 arg0);
/* 1BF65C */ void gm_801BF65C(s32 arg0, s8 arg1);
/* 1BF670 */ u8 gm_801BF670(s32 arg0);
/* 1BF6A8 */ void gm_801BF6A8(s8 arg0);
/* 1BF6B8 */ u8 gm_801BF6B8(void);
/* 1BF6C8 */ void gm_801BF6C8(s8 arg0);
/* 1BF6D8 */ u8 gm_801BF6D8(void);
/* 1BF6E8 */ void gm_801BF6E8(s8 arg0);
/* 1BF6F8 */ u8 gm_801BF6F8(void);
/* 1BF708 */ void gm_801BF708(s8 arg0);
/* 1BF718 */ u8 gm_801BF718(void);
/* 1BF728 */ M2C_UNK gm_801BF728();
/* 1BF834 */ M2C_UNK gm_801BF834();
/* 1BF85C */ M2C_UNK gm_801BF85C();
/* 1BF898 */ M2C_UNK gm_801BF898();
/* 1BF8B8 */ M2C_UNK gm_801BF8B8();
/* 1BF8D8 */ M2C_UNK gm_801BF8D8();
/* 1BF8F8 */ M2C_UNK gm_801BF8F8();
/* 1BF920 */ M2C_UNK gm_801BF920();
/* 1BF948 */ M2C_UNK gm_801BF948();
/* 1BF9A8 */ void gm_801BF9A8(M2C_UNK);
/* 1BFA3C */ M2C_UNK gm_801BFA3C();
/* 1BFA6C */ M2C_UNK gm_801BFA6C();
/* 1BFABC */ M2C_UNK gm_801BFABC();
/* 1BFBA8 */ M2C_UNK gm_801BFBA8();
/* 1BFC60 */ M2C_UNK gm_801BFC60();
/* 1BFCFC */ M2C_UNK gm_801BFCFC();
/* 1BFF7C */ M2C_UNK gm_801BFF7C();
/// @todo Move to C file
#define __GALE01_1A3680
typedef struct MajorScene MajorScene;
typedef struct MinorScene MinorScene;
typedef struct MinorSceneHandler MinorSceneHandler;
struct MinorScene {
u8 idx;
u8 preload;
u16 flags;
void (*Prep)(MinorScene*);
void (*Decide)(MinorScene*);
u8 class_id;
void* unk_struct_0;
void* unk_struct_1;
};
struct MajorScene {
u8 preload;
u8 idx;
void (*Load)(void);
void (*Unload)(void);
void (*Init)(void);
MinorScene* minor_scenes;
}; // 803DACA4
struct MinorSceneHandler {
u8 class_id;
void (*OnFrame)(void);
void (*OnLoad)(u32);
void (*OnLeave)(u32);
void (*unk_func)(void);
}; // 803DA920
typedef struct {
u8 curr_major;
u8 pending_major;
u8 prev_major;
u8 curr_minor;
u8 prev_minor;
u8 pending_minor;
} SceneNums;
typedef struct {
SceneNums nums;
SceneNums nums2;
u8 pending;
u8 x0D;
u8 x0E;
u8 x0F;
void* data;
} GameState;
struct { int x[1 - 2 * !(sizeof(GameState) == 0x14)]; };;
struct sceneData {
u32 a;
u8 scene_id;
};
struct gm_80479D58_t {
/* 0x00 */ struct gm_80479D58_t* unk_0;
/* 0x04 */ char pad_4[4];
/* 0x08 */ s32 unk_8;
/* 0x0C */ s32 unk_C; /* inferred */
/* 0x10 */ u8 unk_10;
/* 0x11 */ char pad_11[3]; /* maybe part of unk_10[4]? */
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ char pad_1C[0x24]; /* maybe part of unk_18[0xA]? */
}; /* size = 0x40 */
struct { int x[1 - 2 * !(sizeof(struct gm_80479D58_t) == 0x40)]; };;
struct gm_8049E548_t {
/* 0x00 */ char pad_0[8];
/* 0x08 */ s8 unk_8;
/* 0x09 */ u8 unk_9;
/* 0x0A */ s8 unk_A;
/* 0x0B */ char pad_B[1];
/* 0x0C */ u16 unk_C;
/* 0x0E */ s8 unk_E; /* inferred */
/* 0x0F */ char pad_F[1];
}; /* size = 0x10 */
struct { int x[1 - 2 * !(sizeof(struct gm_8049E548_t) == 0x10)]; };;
struct fn_801BA1B4_arg0_t {
char pad_0[0x2];
/* +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 fn_801BA3B4_arg0_t {
char pad_0[0xC];
/* +C:0 */ u8 xC_b0 : 1;
/* +C:1 */ u8 xC_b1 : 1;
/* +C:2 */ u8 xC_b2 : 1;
/* +C:3 */ u8 xC_b3 : 1;
/* +C:4 */ u8 xC_b4 : 1;
/* +C:5 */ u8 xC_b5 : 1;
/* +C:6 */ u8 xC_b6 : 1;
/* +C:7 */ u8 xC_b7 : 1;
};
typedef struct gm_controller_map gm_controller_map;
struct gm_controller_map {
u64 button;
u64 trigger;
u64 repeat;
u64 release;
u64 unk;
s32 x28;
s32 x2C;
};
struct gm_804D67F8_t {
char pad_0[0x948];
};
struct { int x[1 - 2 * !(sizeof(struct gm_804D67F8_t) == 0x948)]; };;
struct gm_804D67FC_t {
char pad_0[0x2E68];
};
struct { int x[1 - 2 * !(sizeof(struct gm_804D67FC_t) == 0x2E68)]; };;
struct gm_804D6804_t {
/* +0 */ float x0;
/* +4 */ float x4;
};
struct gm_80480D58_t {
/* +0 */ M2C_UNK x0;
/* +4 */ M2C_UNK x4;
/* +8 */ M2C_UNK x8;
/* +C */ M2C_UNK xC;
/* +10 */ M2C_UNK x10;
/* +14 */ M2C_UNK x14;
};
struct { int x[1 - 2 * !(sizeof(struct gm_80480D58_t) == 0x18)]; };;
struct gm_803DBFD8_t {
/* +0 */ char pad_0[0x10F0];
};
struct { int x[1 - 2 * !(sizeof(struct gm_803DBFD8_t) == 0x10F0)]; };;
struct gm_804D6840_cameras_t {
/* +0 */ HSD_CObjDesc* desc;
/* +4 */ HSD_CameraAnim** anims;
};
struct gm_804D6840_fogs_t {
/* +0 */ HSD_FogDesc* desc;
/* +4 */ HSD_AObjDesc*** anims;
};
/// @todo Possibly a #SceneDesc. File pointer passed to #lbArchive_80016DBC.
struct gm_804D6840_t {
HSD_Joint*** models;
struct gm_804D6840_cameras_t* cameras;
HSD_LightDesc** lights;
struct gm_804D6840_fogs_t* fogs;
};
struct gm_801B0FF8_arg0_x10_t {
/* +0 */ s8 x0;
/* +1 */ s8 x1;
/* +2 */ s8 x2;
};
struct gm_801B0FF8_arg0_t {
/* +0 */ char pad_0[0x10];
/* +10 */ struct gm_801B0FF8_arg0_x10_t* x10;
};
/* 1A3F48 */ static void gm_801A3F48(MinorScene*);
/* 1A4014 */ static void gm_801A4014(MajorScene* scene);
/* 1A4284 */ static M2C_UNK gm_801A4284(M2C_UNK);
/* 1A42B4 */ static u8 gm_801A42B4(void);
/* 1A42C4 */ static u8 gm_801A42C4(void);
/* 1A42E8 */ static void gm_801A42E8(s8 arg0);
/* 1A42F8 */ static void gm_801A42F8(int);
/* 1A4310 */ static M2C_UNK gm_800A4310();
/* 1A4320 */ static u8 gm_801A4320(void);
/* 1A4330 */ static void gm_801A4330(void*);
/* 1A4624 */ static u8 gm_801A4624(void);
/* 1A4B40 */ static void gm_801A4B40(s32 arg0);
/* 1A4B50 */ static void gm_801A4B50(s32 arg0);
/* 1A4B88 */ static void gm_801A4B88(void*);
/* 1A4BB8 */ static s32 gm_801A4BB8(void);
/* 1A4BD4 */ static void gm_801A4BD4(void);
/* 1A4CE0 */ static MinorSceneHandler* gm_801A4CE0(u8);
/* 1A4D34 */ static void gm_801A4D34(void*);
/* 1A50A0 */ static MajorScene* gm_801A50A0(void);
/* 1A50AC */ static MajorScene* gm_801A50AC(void);
/* 1A5244 */ static s8* gm_801A5244(void);
/* 1A5614 */ static void gm_801A5614(void);
/* 1ACC90 */ static void gm_801ACC90(void);
/* 1B0FF8 */ static void gm_801B0FF8(struct gm_801B0FF8_arg0_t*);
/* 1B6320 */ static M2C_UNK gm_801B6320(void);
/* 1B8C5C */ static void fn_801B8C5C(M2C_UNK);
/* 1B9FB8 */ static void fn_801B9FB8(void* arg0);
/* 1BA1B4 */ static void fn_801BA1B4(struct fn_801BA1B4_arg0_t*);
/* 1BA3B4 */ void fn_801BA3B4(struct fn_801BA3B4_arg0_t* arg0);
/* 1BA5B4 */ static void fn_801BA5B4(M2C_UNK);
/* 1BA7AC */ static void fn_801BA7AC(M2C_UNK);
/* 1BBFE4 */ static void gm_801BBFE4(void);
/* 1BEFB0 */ static u8 gm_801BEFB0(void);
/* 1BEFC0 */ static void gm_801BEFC0(s8 arg0);
/* 1BEFD0 */ static u8 gm_801BEFD0(void);
/* 1BEFE0 */ static void gm_801BEFE0(s8 arg0);
/* 1BF684 */ static void gm_801BF684(s16 arg0);
/* 1BF694 */ static u8 gm_801BF694(void);
/* 2A3EF4 */ static void gm_801A3EF4(void);
/* 3DA788 */ extern u64 gm_803DA788;
/* 3DA920 */ extern MajorScene gm_803DA920;
/* 3DACA4 */ extern MajorScene gm_803DACA4;
/* 3DBFD8 */ extern struct gm_803DBFD8_t gm_803DBFD8;
/* 3DD0F0 */ extern HSD_CObjDesc gm_803DD0F0;
/* 3DD248 */ extern HSD_Archive gm_803DD248;
/* 3DD2C0 */ extern int gm_803DD2C0[74];
/* 479C30 */ static gm_controller_map gm_80479C30[4];
/* 479CF0 */ static gm_controller_map controller_union;
/* 479D20 */ void (*gm_80479D20)(s32);
/* 479D24 */ s32 gm_80479D24;
/* 479D30 */ static GameState gm_80479D30;
/* 479D58 */ static struct gm_80479D58_t gm_80479D58;
/* 480D58 */ static struct gm_80480D58_t gm_80480D58;
/* 49C178 */ static s8 gm_8049C178[16];
/* 49E548 */ static struct gm_8049E548_t gm_8049E548;
/* 4D6720 */ static M2C_UNK gm_804D6720;
/* 4D672C */ static s32 gm_804D672C;
/* 4D6730 */ static M2C_UNK gm_804D6730;
/* 4D67F8 */ static struct gm_804D67F8_t* gm_804D67F8;
/* 4D67FC */ static struct gm_804D67FC_t* gm_804D67FC;
/* 4D6804 */ static struct gm_804D6804_t* gm_804D6804;
/* 4D680C */ static s32 gm_804D680C;
/* 4D6810 */ static s32 gm_804D6810;
/* 4D6814 */ static s32 gm_804D6814;
/* 4D6818 */ static s32 gm_804D6818;
/* 4D681C */ static s32 gm_804D681C;
/* 4D6820 */ static s32 gm_804D6820;
/* 4D6824 */ static f32 gm_804D6824;
/* 4D6828 */ static f32 gm_804D6828;
/* 4D682C */ static HSD_JObj* gm_804D682C;
/* 4D6830 */ static HSD_CObj* gm_804D6830;
/* 4D6834 */ static HSD_CObj* gm_804D6834;
/* 4D6838 */ static HSD_Fog* gm_804D6838;
/* 4D683C */ static M2C_UNK gm_804D683C;
/* 4D6840 */ static struct gm_804D6840_t* gm_804D6840;
/* 4D6844 */ static HSD_Joint*** gm_804D6844;
/* 4D6848 */ static s32 gm_804D6848;
/* 4D684C */ static s32 gm_804D684C;
#define GALE01_1A2224
typedef struct _gmCameraUnkStruct3 {
/*0x00*/ u8 x0_padding[0x24 - 0x0];
/*0x24*/ float x24;
/*0x28*/ float x28;
/*0x2C*/ u8 x2C_padding[0x49 - 0x2C];
/*0x49*/ u8 x49;
} gmCameraUnkStruct3;
typedef struct _gmCameraUnkStruct2 {
/*0x00*/ u8 x0_padding[0x24 - 0x0];
/*0x24*/ u32 x24;
/*0x28*/ u32 x28;
/*0x2C*/ int x2C;
/*0x30*/ u32 x30;
} gmCameraUnkStruct2;
typedef struct _gmCameraUnkStruct {
/*0x00*/ u8 x0_padding[0x20 - 0x0];
/*0x20*/ u32 x20;
/*0x24*/ u32 x24;
/*0x28*/ u8 x28_padding[0x54 - 0x28];
/*0x54*/ u32 x54;
} gmCameraUnkStruct;
typedef struct _gmCameraUnkStructPtrs {
/*0x00*/ u8 x0_padding[0x58 - 0x0];
} gmCameraUnkStruct2Ptrs;
union _gmCameraUnkUnion {
gmCameraUnkStruct gcus;
// gmCameraUnkStruct2* gcus2_ptrs[0x58/4];
gmCameraUnkStruct2Ptrs gcus2_ptrs;
};
/* 479BC8 */ static union _gmCameraUnkUnion gmCamera_80479BC8;
/* 4DA9B8 */ static float gmCamera_804DA9B8;
/* 4DA9BC */ static float gmCamera_804DA9BC;
/* 4DA9C0 */ static float gmCamera_804DA9C0;
/* 1A2224 */ u8* gmCamera_801A2224(u8* arg0, u32 arg1);
/* 1A2334 */ void* gmCamera_801A2334(int arg0, float argA, float argB);
/* 1A253C */ M2C_UNK gmCamera_801A253C();
/* 1A25C8 */ M2C_UNK gmCamera_801A25C8();
/* 1A2640 */ s32 gmCamera_801A2640(void);
/* 1A2650 */ M2C_UNK gmCamera_801A2650();
/* 1A26C0 */ M2C_UNK gmCamera_801A26C0();
/* 1A2798 */ M2C_UNK gmCamera_801A2798();
/* 1A2800 */ M2C_UNK gmCamera_801A2800();
/* 1A28AC */ M2C_UNK gmCamera_801A28AC();
/* 1A292C */ M2C_UNK gmCamera_801A292C();
/* 1A2AAC */ M2C_UNK gmCamera_801A2AAC();
/* 1A2BB0 */ M2C_UNK gmCamera_801A2BB0();
/* 1A2BF0 */ M2C_UNK gmCamera_801A2BF0();
/* 1A2D44 */ M2C_UNK gmCamera_801A2D44();
/* 1A2FBC */ M2C_UNK gmCamera_801A2FBC();
/* 1A2FFC */ M2C_UNK gmCamera_801A2FFC();
/* 1A3048 */ M2C_UNK gmCamera_801A3048();
/* 1A3098 */ M2C_UNK gmCamera_801A3098();
/* 1A30E4 */ M2C_UNK gmCamera_801A30E4();
/* 1A31D8 */ M2C_UNK fn_801A31D8();
/* 1A31FC */ M2C_UNK gmCamera_801A31FC();
/* 1A33BC */ M2C_UNK gmCamera_801A33BC();
/* 1A34FC */ M2C_UNK gmCamera_801A34FC();
/* 1A3634 */ M2C_UNK gmCamera_801A3634();
/* 1A367C */ M2C_UNK gmCamera_801A367C();
#define GALE01_15CC34
/* 15CC34 */ GameRules* gmMainLib_8015CC34(void);
/* 15CC40 */ void* gmMainLib_8015CC40(void);
/* 15CC4C */ void* gmMainLib_8015CC4C(void);
/* 15CC58 */ struct gmm_x1CB0* gmMainLib_8015CC58(void);
/* 15CC64 */ void* gmMainLib_8015CC64(s32);
/* 15CC78 */ void* gmMainLib_8015CC78(void);
/* 15CC84 */ void* gmMainLib_8015CC84(void);
/* 15CC90 */ void* gmMainLib_8015CC90(void);
/* 15CC9C */ void* gmMainLib_8015CC9C(s32);
/* 15CCE4 */ void* gmMainLib_8015CCE4(void);
/* 15CCF0 */ void* gmMainLib_8015CCF0(void);
/* 15CCFC */ void* gmMainLib_8015CCFC(void);
/* 15CD08 */ void* gmMainLib_8015CD08(void);
/* 15CD14 */ void* gmMainLib_8015CD14(void);
/* 15CD20 */ void* gmMainLib_8015CD20(void);
/* 15CD2C */ void* gmMainLib_8015CD2C(void);
/* 15CD38 */ void* gmMainLib_8015CD38(void);
/* 15CD44 */ void* gmMainLib_8015CD44(void);
/* 15CD50 */ void* gmMainLib_8015CD50(void);
/* 15CD5C */ void* gmMainLib_8015CD5C(void);
/* 15CD68 */ void* gmMainLib_8015CD68(void);
/* 15CD74 */ void* gmMainLib_8015CD74(void);
/* 15CD80 */ void* gmMainLib_8015CD80(void);
/* 15CD8C */ void* gmMainLib_8015CD8C(void);
/* 15CD98 */ void* gmMainLib_8015CD98(void);
/* 15CDA4 */ void* gmMainLib_8015CDA4(void);
/* 15CDB0 */ void* gmMainLib_8015CDB0(void);
/* 15CDBC */ void* gmMainLib_8015CDBC(void);
/* 15CDC8 */ void* gmMainLib_8015CDC8(void);
/* 15CDD4 */ void* gmMainLib_8015CDD4(void);
/* 15CDE0 */ void* gmMainLib_8015CDE0(void);
/* 15CDEC */ void gmMainLib_8015CDEC(void);
/* 15CE44 */ s8* gmMainLib_8015CE44(s32, s32);
/* 15CEB4 */ void gmMainLib_8015CEB4(s32);
/* 15CEFC */ s32 gmMainLib_8015CEFC(s32);
/* 15CF5C */ s32 gmMainLib_8015CF5C(s32);
/* 15CF70 */ void gmMainLib_8015CF70(s32, s32);
/* 15CF84 */ void gmMainLib_8015CF84(void);
/* 15CF94 */ s32 gmMainLib_8015CF94(void);
/* 15CFAC */ s32 func_8015CFAC(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(s32);
/* 15D0C0 */ s32* gmMainLib_8015D0C0(u8);
/* 15D0D8 */ s32 gmMainLib_8015D0D8(u8);
/* 15D0F4 */ s32 gmMainLib_8015D0F4(u8);
/* 15D134 */ void gmMainLib_8015D134(u8);
/* 15D194 */ s8* gmMainLib_8015D194(u8);
/* 15D1AC */ s32 gmMainLib_8015D1AC(u8);
/* 15D1C8 */ void gmMainLib_8015D1C8(u8, s32);
/* 15D1E8 */ s32* gmMainLib_8015D1E8(u8);
/* 15D200 */ s32 gmMainLib_8015D200(u8);
/* 15D21C */ s32 gmMainLib_8015D21C(u8);
/* 15D25C */ void gmMainLib_8015D25C(u8);
/* 15D2BC */ s8* gmMainLib_8015D2BC(u8);
/* 15D2D4 */ s32 gmMainLib_8015D2D4(u8);
/* 15D2F0 */ void gmMainLib_8015D2F0(u8, s32);
/* 15D310 */ s32* gmMainLib_8015D310(u8);
/* 15D328 */ s32 gmMainLib_8015D328(u8);
/* 15D344 */ s32 gmMainLib_8015D344(u8);
/* 15D384 */ void gmMainLib_8015D384(u8);
/* 15D3E4 */ s8* gmMainLib_8015D3E4(u8);
/* 15D3FC */ s32 gmMainLib_8015D3FC(u8);
/* 15D418 */ void gmMainLib_8015D418(u8, s32);
/* 15D438 */ s32* gmMainLib_8015D438(u8);
/* 15D450 */ s32* gmMainLib_8015D450(s32);
/* 15D48C */ s32 gmMainLib_8015D48C(u8);
/* 15D4A8 */ s32 gmMainLib_8015D4A8(u8);
/* 15D4E8 */ void gmMainLib_8015D4E8(u8, s32);
/* 15D508 */ s32 gmMainLib_8015D508(void);
/* 15D5DC */ s32 gmMainLib_8015D5DC(void);
/* 15D640 */ s32 gmMainLib_8015D640(void);
/* 15D6A4 */ s32* gmMainLib_8015D6A4(u8);
/* 15D6BC */ s32 gmMainLib_8015D6BC(u8);
/* 15D6D8 */ void gmMainLib_8015D6D8(u8, s32);
/* 15D6F8 */ s32* gmMainLib_8015D6F8(u8);
/* 15D710 */ s32 gmMainLib_8015D710(u8);
/* 15D72C */ void gmMainLib_8015D72C(u8, s32);
/* 15D74C */ s16* gmMainLib_8015D74C(u8);
/* 15D764 */ s32 gmMainLib_8015D764(u8);
/* 15D780 */ void gmMainLib_8015D780(u8);
/* 15D7A4 */ s16* gmMainLib_8015D7A4(u8);
/* 15D7BC */ s32* gmMainLib_8015D7BC(u8);
/* 15D7D4 */ s32* gmMainLib_8015D7D4(u8);
/* 15D7EC */ s16* gmMainLib_8015D7EC(u8);
/* 15D804 */ void* 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 */ u32 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 */ s32 gmMainLib_8015DADC(u32);
/* 15DB00 */ u8 gmMainLib_8015DB00(void);
/* 15DB0C */ void gmMainLib_8015DB0C(u8);
/* 15DB18 */ void gmMainLib_8015DB18(void);
/* 15DB2C */ void gmMainLib_8015DB2C(u8, s32);
/* 15DB6C */ u8 gmMainLib_8015DB6C(u8);
/* 15DB80 */ void gmMainLib_8015DB80(void);
/* 15DBF4 */ M2C_UNK gmMainLib_8015DBF4();
/* 15EA80 */ M2C_UNK gmMainLib_8015EA80();
/* 15ECB0 */ u8 gmMainLib_8015ECB0(void);
/* 15ECBC */ M2C_UNK gmMainLib_8015ECBC();
/* 15ED30 */ u8 gmMainLib_8015ED30(void);
/* 15ED3C */ u8 gmMainLib_8015ED3C(s32 arg0);
/* 15ED4C */ void gmMainLib_8015ED4C(s32 arg0, s8 arg1);
/* 15ED5C */ s32 gmMainLib_8015ED5C(void);
/* 15ED68 */ void gmMainLib_8015ED68(s32 arg0);
/* 15ED74 */ u8 gmMainLib_8015ED74(void);
/* 15ED80 */ void gmMainLib_8015ED80(u8);
/* 15ED8C */ u16* gmMainLib_8015ED8C(void);
/* 15ED98 */ struct gmm_retval_ED98* gmMainLib_8015ED98(void);
/* 15EDA4 */ M2C_UNK gmMainLib_8015EDA4(void);
/* 15EDB0 */ struct gmm_retval_EDB0* gmMainLib_8015EDB0(void);
/* 15EDBC */ struct gmm_retval_EDBC* gmMainLib_8015EDBC(void);
/* 15EDC8 */ u8* gmMainLib_8015EDC8(void);
/* 15EDD4 */ s32 gmMainLib_8015EDD4(void);
/* 15EDE4 */ M2C_UNK gmMainLib_8015EDE4();
/* 15EDF8 */ M2C_UNK gmMainLib_8015EDF8();
/* 15EE0C */ s32 gmMainLib_8015EE0C(void);
/* 15EE1C */ M2C_UNK gmMainLib_8015EE1C();
/* 15EE30 */ M2C_UNK gmMainLib_8015EE30();
/* 15EE44 */ s32 gmMainLib_8015EE44(void);
/* 15EE54 */ M2C_UNK gmMainLib_8015EE54();
/* 15EE68 */ M2C_UNK gmMainLib_8015EE68();
/* 15EE90 */ s32 gmMainLib_8015EE90(void);
/* 15EEA0 */ M2C_UNK gmMainLib_8015EEA0();
/* 15EEB4 */ M2C_UNK gmMainLib_8015EEB4();
/* 15EEC8 */ M2C_UNK gmMainLib_8015EEC8();
/* 15EF30 */ M2C_UNK gmMainLib_8015EF30();
/* 15EF84 */ M2C_UNK gmMainLib_8015EF84();
/* 15F150 */ M2C_UNK gmMainLib_8015F150();
/* 15F260 */ M2C_UNK gmMainLib_8015F260();
/* 15F464 */ M2C_UNK gmMainLib_8015F464();
/* 15F490 */ M2C_UNK gmMainLib_8015F490();
/* 15F4BC */ M2C_UNK gmMainLib_8015F4BC();
/* 15F4E8 */ u8* gmMainLib_8015EDC8(void);
/* 15F4F4 */ void gmMainLib_8015F4F4(u8 arg0);
/* 15F500 */ M2C_UNK gmMainLib_8015F500();
/* 15F588 */ M2C_UNK gmMainLib_8015F588();
/* 15F600 */ M2C_UNK gmMainLib_8015F600();
/* 15FA34 */ M2C_UNK gmMainLib_8015FA34();
/* 15FB68 */ M2C_UNK gmMainLib_8015FB68();
/* 15FBA4 */ void gmMainLib_8015FBA4(void);
/* 15FC74 */ M2C_UNK gmMainLib_8015FC74();
/* 15FCC0 */ void gmMainLib_8015FCC0(void);
/* 46B0F0 */ extern struct gmMainLib_8046B0F0_t gmMainLib_8046B0F0;
/* 4D3EE0 */ extern struct gmm_x0* gmMainLib_804D3EE0;
#define __GALE01_15CC34
/* 15D888 */ static void gmMainLib_8015D888(u32);
/* 45A6C0 */ static struct gmm_x0 gmMainLib_8045A6C0[2];
/* 46B0F0 */ struct gmMainLib_8046B0F0_t gmMainLib_8046B0F0;
/* 4D3EE0 */ struct gmm_x0* gmMainLib_804D3EE0 = gmMainLib_8045A6C0;
#define GALE01_1C65B0
/* 1C752C */ void grAnime_801C752C(HSD_JObj*, ...);
/* 1C78FC */ void grAnime_801C78FC(HSD_GObj*, int, u32);
/* 1C7A04 */ void grAnime_801C7A04(HSD_GObj*, int, u32, f32);
/* 1C7C1C */ void grAnime_801C7C1C(HSD_JObj*, s32, s32, s32, s32, int, f32, f32);
/* 1C7FF8 */ void grAnime_801C7FF8(HSD_GObj*, s32, s32, s32, f32, f32);
/* 1C8138 */ void grAnime_801C8138(HSD_GObj*, enum_t, bool);
/* 1C83D0 */ bool grAnime_801C83D0(HSD_GObj*, bool, enum_t);
/* 1C84A4 */ bool grAnime_801C84A4(HSD_GObj*, s32, s32);
/* 1C8780 */ void grAnime_801C8780(HSD_GObj*, u32, u32, f32, f32);
#define GALE01_219C98
/* 21A10C */ bool grBattle_8021A10C(HSD_GObj*);
#define GALE01_1E57BC
/* 1E57BC */ M2C_UNK grBigBlue_801E57BC();
/* 1E57C0 */ M2C_UNK grBigBlue_801E57C0();
/* 1E59C8 */ M2C_UNK grBigBlue_801E59C8();
/* 1E59CC */ M2C_UNK grBigBlue_801E59CC();
/* 1E59F0 */ M2C_UNK grBigBlue_801E59F0();
/* 1E59F8 */ M2C_UNK grBigBlue_801E59F8();
/* 1E5AE4 */ M2C_UNK grBigBlue_801E5AE4();
/* 1E5B10 */ M2C_UNK grBigBlue_801E5B10();
/* 1E5B18 */ M2C_UNK grBigBlue_801E5B18();
/* 1E5B1C */ M2C_UNK grBigBlue_801E5B1C();
/* 1E5B20 */ M2C_UNK grBigBlue_801E5B20();
/* 1E6114 */ M2C_UNK grBigBlue_801E6114();
/* 1E611C */ M2C_UNK grBigBlue_801E611C();
/* 1E6120 */ M2C_UNK grBigBlue_801E6120();
/* 1E6124 */ void fn_801E6124(Ground_GObj* gobj);
/* 1E613C */ M2C_UNK grBigBlue_801E613C();
/* 1E61BC */ M2C_UNK grBigBlue_801E61BC();
/* 1E61C4 */ M2C_UNK grBigBlue_801E61C4();
/* 1E61FC */ M2C_UNK grBigBlue_801E61FC();
/* 1E6200 */ M2C_UNK grBigBlue_801E6200();
/* 1E6288 */ M2C_UNK grBigBlue_801E6288();
/* 1E6290 */ M2C_UNK grBigBlue_801E6290();
/* 1E6294 */ M2C_UNK grBigBlue_801E6294();
/* 1E6298 */ M2C_UNK grBigBlue_801E6298();
/* 1E6354 */ M2C_UNK grBigBlue_801E6354();
/* 1E635C */ M2C_UNK grBigBlue_801E635C();
/* 1E6360 */ M2C_UNK grBigBlue_801E6360();
/* 1E6364 */ M2C_UNK grBigBlue_801E6364();
/* 1E687C */ M2C_UNK grBigBlue_801E687C();
/* 1E6884 */ M2C_UNK grBigBlue_801E6884();
/* 1E68B8 */ M2C_UNK grBigBlue_801E68B8();
/* 1E6904 */ M2C_UNK grBigBlue_801E6904();
/* 1E6C58 */ M2C_UNK grBigBlue_801E6C58();
/* 1E6C60 */ M2C_UNK grBigBlue_801E6C60();
/* 1E855C */ M2C_UNK grBigBlue_801E855C();
/* 1E8560 */ M2C_UNK fn_801E8560();
/* 1E8794 */ M2C_UNK grBigBlue_801E8794();
/* 1E8978 */ M2C_UNK grBigBlue_801E8978();
/* 1E89DC */ M2C_UNK grBigBlue_801E89DC();
/* 1E8A1C */ M2C_UNK grBigBlue_801E8A1C();
/* 1E8B84 */ M2C_UNK grBigBlue_801E8B84();
/* 1E8D04 */ M2C_UNK grBigBlue_801E8D04();
/* 1E8D64 */ M2C_UNK grBigBlue_801E8D64();
/* 1E93D0 */ M2C_UNK grBigBlue_801E93D0();
/* 1E93D8 */ M2C_UNK grBigBlue_801E93D8();
/* 1E9F38 */ M2C_UNK grBigBlue_801E9F38();
/* 1E9F3C */ M2C_UNK grBigBlue_801E9F3C();
/* 1EA054 */ M2C_UNK grBigBlue_801EA054();
/* 1EA05C */ M2C_UNK grBigBlue_801EA05C();
/* 1EAB4C */ M2C_UNK grBigBlue_801EAB4C();
/* 1EAB50 */ M2C_UNK grBigBlue_801EAB50();
/* 1EACE8 */ M2C_UNK grBigBlue_801EACE8();
/* 1EB004 */ M2C_UNK grBigBlue_801EB004();
/* 1EB4AC */ M2C_UNK grBigBlue_801EB4AC();
/* 1EBAF8 */ M2C_UNK grBigBlue_801EBAF8();
/* 1EC58C */ M2C_UNK grBigBlue_801EC58C();
/* 1EC6C0 */ M2C_UNK grBigBlue_801EC6C0();
/* 1ECB50 */ M2C_UNK grBigBlue_801ECB50();
/* 1ED694 */ M2C_UNK grBigBlue_801ED694();
/* 1EDF44 */ M2C_UNK grBigBlue_801EDF44();
/* 1EE398 */ M2C_UNK grBigBlue_801EE398();
/* 1EEF00 */ M2C_UNK grBigBlue_801EEF00();
/* 1EF424 */ M2C_UNK grBigBlue_801EF424();
/* 1EF60C */ M2C_UNK fn_801EF60C();
/* 1EF7D8 */ void grBigBlue_801EF7D8(Vec3*);
/* 1EF844 */ bool grBigBlue_801EF844(enum_t);
/* 1EFB9C */ M2C_UNK fn_801EFB9C();
/* 1EFC0C */ M2C_UNK grBigBlue_801EFC0C();
/* 1EFC14 */ M2C_UNK grBigBlue_801EFC14();
#define GALE01_20B864
struct grBigBlueRoute_8020DA9C_t {
/* +0 */ char pad_0[0x8];
/* +8 */ int x8;
};
/* 20B864 */ M2C_UNK grBigBlueRoute_8020B864();
/* 20B89C */ M2C_UNK grBigBlueRoute_8020B89C();
/* 20B920 */ M2C_UNK grBigBlueRoute_8020B920();
/* 20B95C */ M2C_UNK grBigBlueRoute_8020B95C();
/* 20B9CC */ bool grBigBlueRoute_8020B9CC();
/* 20B9D4 */ M2C_UNK grBigBlueRoute_8020B9D4();
/* 20BABC */ M2C_UNK grBigBlueRoute_8020BABC();
/* 20BB00 */ bool grBigBlueRoute_8020BB00();
/* 20BB08 */ M2C_UNK grBigBlueRoute_8020BB08();
/* 20BB0C */ M2C_UNK grBigBlueRoute_8020BB0C();
/* 20BB10 */ M2C_UNK grBigBlueRoute_8020BB10();
/* 20BB58 */ bool grBigBlueRoute_8020BB58();
/* 20BB60 */ M2C_UNK grBigBlueRoute_8020BB60();
/* 20BB64 */ M2C_UNK grBigBlueRoute_8020BB64();
/* 20BB68 */ M2C_UNK grBigBlueRoute_8020BB68();
/* 20BC24 */ bool grBigBlueRoute_8020BC24();
/* 20BC2C */ M2C_UNK grBigBlueRoute_8020BC2C();
/* 20BC30 */ M2C_UNK grBigBlueRoute_8020BC30();
/* 20BC34 */ M2C_UNK fn_8020BC34();
/* 20BC68 */ M2C_UNK grBigBlueRoute_8020BC68();
/* 20BF30 */ bool grBigBlueRoute_8020BF30();
/* 20BF38 */ M2C_UNK grBigBlueRoute_8020BF38();
/* 20C13C */ M2C_UNK grBigBlueRoute_8020C13C();
/* 20C140 */ M2C_UNK grBigBlueRoute_8020C140();
/* 20C1D4 */ bool grBigBlueRoute_8020C1D4();
/* 20C1DC */ M2C_UNK grBigBlueRoute_8020C1DC();
/* 20C210 */ M2C_UNK grBigBlueRoute_8020C210();
/* 20C238 */ M2C_UNK grBigBlueRoute_8020C238();
/* 20C530 */ M2C_UNK grBigBlueRoute_8020C530();
/* 20C85C */ M2C_UNK grBigBlueRoute_8020C85C();
/* 20CD20 */ M2C_UNK grBigBlueRoute_8020CD20();
/* 20DA9C */ int grBigBlueRoute_8020DA9C(struct grBigBlueRoute_8020DA9C_t*);
/* 20DAB4 */ M2C_UNK grBigBlueRoute_8020DAB4();
/* 20DD64 */ M2C_UNK grBigBlueRoute_8020DD64();
/* 20DE48 */ M2C_UNK grBigBlueRoute_8020DE48();
/* 20DEAC */ M2C_UNK fn_8020DEAC();
/* 20DED4 */ M2C_UNK grBigBlueRoute_8020DED4();
/* 20DF78 */ bool grBigBlueRoute_8020DF78();
/* 20DF80 */ M2C_UNK grBigBlueRoute_8020DF80();
#define GALE01_1CD338
/* 1CD338 */ M2C_UNK grCastle_801CD338();
/* 1CD37C */ M2C_UNK grCastle_801CD37C();
/* 1CD4A0 */ M2C_UNK grCastle_801CD4A0();
/* 1CD4A4 */ M2C_UNK grCastle_801CD4A4();
/* 1CD4C8 */ M2C_UNK grCastle_801CD4C8();
/* 1CD4D0 */ M2C_UNK grCastle_801CD4D0();
/* 1CD5BC */ M2C_UNK grCastle_801CD5BC();
/* 1CD600 */ M2C_UNK grCastle_801CD600();
/* 1CD608 */ M2C_UNK grCastle_801CD608();
/* 1CD60C */ M2C_UNK grCastle_801CD60C();
/* 1CD610 */ M2C_UNK fn_801CD610();
/* 1CD658 */ M2C_UNK grCastle_801CD658();
/* 1CD8A0 */ M2C_UNK grCastle_801CD8A0();
/* 1CD8A8 */ M2C_UNK grCastle_801CD8A8();
/* 1CD960 */ M2C_UNK grCastle_801CD960();
/* 1CD9B4 */ M2C_UNK fn_801CD9B4();
/* 1CDA0C */ M2C_UNK grCastle_801CDA0C();
/* 1CDC3C */ M2C_UNK grCastle_801CDC3C();
/* 1CDC44 */ M2C_UNK grCastle_801CDC44();
/* 1CDF50 */ M2C_UNK grCastle_801CDF50();
/* 1CDF54 */ M2C_UNK grCastle_801CDF54();
/* 1CDFD8 */ M2C_UNK grCastle_801CDFD8();
/* 1CE054 */ M2C_UNK grCastle_801CE054();
/* 1CE19C */ M2C_UNK grCastle_801CE19C();
/* 1CE260 */ M2C_UNK grCastle_801CE260();
/* 1CE3A0 */ M2C_UNK fn_801CE3A0();
/* 1CE3A4 */ M2C_UNK grCastle_801CE3A4();
/* 1CE3AC */ M2C_UNK grCastle_801CE3AC();
/* 1CE578 */ M2C_UNK grCastle_801CE578();
/* 1CE7E4 */ M2C_UNK grCastle_801CE7E4();
/* 1CE7E8 */ M2C_UNK grCastle_801CE7E8();
/* 1CE858 */ M2C_UNK grCastle_801CE858();
/* 1CE860 */ M2C_UNK grCastle_801CE860();
/* 1CE8E4 */ M2C_UNK grCastle_801CE8E4();
/* 1CE8E8 */ M2C_UNK grCastle_801CE8E8();
/* 1CE9DC */ M2C_UNK fn_801CE9DC();
/* 1CE9E0 */ M2C_UNK grCastle_801CE9E0();
/* 1CE9E8 */ M2C_UNK grCastle_801CE9E8();
/* 1CEAC8 */ M2C_UNK grCastle_801CEAC8();
/* 1CEACC */ M2C_UNK grCastle_801CEACC();
/* 1CEEFC */ M2C_UNK grCastle_801CEEFC();
/* 1CEF04 */ M2C_UNK grCastle_801CEF04();
/* 1CF0F0 */ M2C_UNK grCastle_801CF0F0();
/* 1CF0F4 */ M2C_UNK grCastle_801CF0F4();
/* 1CF300 */ M2C_UNK grCastle_801CF300();
/* 1CF308 */ M2C_UNK grCastle_801CF308();
/* 1CF74C */ M2C_UNK grCastle_801CF74C();
/* 1CF750 */ M2C_UNK fn_801CF750();
/* 1CF7B0 */ M2C_UNK grCastle_801CF7B0();
/* 1CF868 */ M2C_UNK grCastle_801CF868();
/* 1CFAFC */ M2C_UNK fn_801CFAFC();
/* 1CFB68 */ M2C_UNK fn_801CFB68();
/* 1CFBD4 */ M2C_UNK grCastle_801CFBD4();
/* 1D0298 */ M2C_UNK grCastle_801D0298();
/* 1D02B8 */ M2C_UNK grCastle_801D02B8();
/* 1D0520 */ M2C_UNK fn_801D0520();
/* 1D0550 */ M2C_UNK grCastle_801D0550();
/* 1D059C */ M2C_UNK grCastle_801D059C();
/* 1D05E8 */ M2C_UNK grCastle_801D05E8();
/* 1D0634 */ M2C_UNK grCastle_801D0634();
/* 1D0680 */ M2C_UNK grCastle_801D0680();
/* 1D06CC */ M2C_UNK grCastle_801D06CC();
/* 1D0744 */ M2C_UNK grCastle_801D0744();
/* 1D07BC */ M2C_UNK grCastle_801D07BC();
/* 1D0834 */ M2C_UNK grCastle_801D0834();
/* 1D08AC */ M2C_UNK grCastle_801D08AC();
/* 1D0924 */ M2C_UNK fn_801D0924();
/* 1D09B8 */ M2C_UNK fn_801D09B8();
/* 1D0A9C */ M2C_UNK grCastle_801D0A9C();
/* 1D0B04 */ M2C_UNK grCastle_801D0B04();
/* 1D0B0C */ bool grCastle_801D0B0C(Vec3* v, u32 arg1, HSD_JObj* jobj);
/* 1D0BBC */ M2C_UNK grCastle_801D0BBC();
/* 1D0D24 */ M2C_UNK grCastle_801D0D24();
/* 1D0D84 */ M2C_UNK grCastle_801D0D84();
/* 1D0FF0 */ M2C_UNK grCastle_801D0FF0();
#define GALE01_1DCCFC
/* 1DCCFC */ M2C_UNK grCorneria_801DCCFC();
/* 1DCE1C */ M2C_UNK grCorneria_801DCE1C();
/* 1DD2C0 */ M2C_UNK grCorneria_801DD2C0();
/* 1DD350 */ M2C_UNK grCorneria_801DD350();
/* 1DD478 */ M2C_UNK grCorneria_801DD478();
/* 1DD508 */ M2C_UNK grCorneria_801DD508();
/* 1DD52C */ bool grCorneria_801DD52C(void);
/* 1DD534 */ HSD_GObj* grCorneria_801DD534(int);
/* 1DD620 */ M2C_UNK grCorneria_801DD620();
/* 1DD64C */ bool grCorneria_801DD64C(void);
/* 1DD654 */ void grCorneria_801DD654(void);
/* 1DD658 */ void grCorneria_801DD658(void);
/* 1DD65C */ void fn_801DD65C(Ground_GObj* gobj);
/* 1DD674 */ void grCorneria_801DD674(Ground_GObj*);
/* 1DD9A0 */ bool grCorneria_801DD9A0(void);
/* 1DD9A8 */ M2C_UNK grCorneria_801DD9A8();
/* 1DDAC4 */ M2C_UNK grCorneria_801DDAC4();
/* 1DDCE8 */ bool grCorneria_801DDCE8(void);
/* 1DDCF0 */ M2C_UNK grCorneria_801DDCF0();
/* 1DDD4C */ M2C_UNK grCorneria_801DDD4C();
/* 1DDDA8 */ M2C_UNK grCorneria_801DDDA8();
/* 1DDE88 */ M2C_UNK grCorneria_801DDE88();
/* 1DE024 */ M2C_UNK grCorneria_801DE024();
/* 1DE4BC */ void grCorneria_801DE4BC(void);
/* 1DE4C0 */ M2C_UNK grCorneria_801DE4C0();
/* 1DE560 */ bool grCorneria_801DE560(void);
/* 1DE568 */ M2C_UNK grCorneria_801DE568();
/* 1DE8E4 */ M2C_UNK grCorneria_801DE8E4();
/* 1DEC00 */ bool grCorneria_801DEC00(void);
/* 1DEC08 */ M2C_UNK grCorneria_801DEC08();
/* 1DEC94 */ M2C_UNK grCorneria_801DEC94();
/* 1DED50 */ M2C_UNK grCorneria_801DED50();
/* 1DF8D0 */ M2C_UNK grCorneria_801DF8D0();
/* 1DFBC4 */ bool grCorneria_801DFBC4(void);
/* 1DFBCC */ M2C_UNK grCorneria_801DFBCC();
/* 1DFBF0 */ M2C_UNK grCorneria_801DFBF0();
/* 1DFC1C */ bool grCorneria_801DFC1C(void);
/* 1DFC2C */ M2C_UNK grCorneria_801DFC2C();
/* 1DFC90 */ bool grCorneria_801DFC90(void);
/* 1DFC98 */ M2C_UNK grCorneria_801DFC98();
/* 1DFEB8 */ M2C_UNK grCorneria_801DFEB8();
/* 1DFF18 */ bool grCorneria_801DFF18(void);
/* 1DFF20 */ M2C_UNK grCorneria_801DFF20();
/* 1E0140 */ M2C_UNK grCorneria_801E0140();
/* 1E01A0 */ bool grCorneria_801E01A0(void);
/* 1E01A8 */ M2C_UNK grCorneria_801E01A8();
/* 1E03C8 */ M2C_UNK grCorneria_801E03C8();
/* 1E0678 */ M2C_UNK grCorneria_801E0678();
/* 1E08CC */ M2C_UNK grCorneria_801E08CC();
/* 1E0A74 */ int grCorneria_801E0A74(f32*);
/* 1E0C3C */ void grCorneria_801E0C3C(HSD_GObj*);
/* 1E0D28 */ bool grCorneria_801E0D28(void);
/* 1E0D30 */ M2C_UNK grCorneria_801E0D30();
/* 1E0DE4 */ M2C_UNK grCorneria_801E0DE4();
/* 1E0E0C */ bool grCorneria_801E0E0C(void);
/* 1E0E14 */ M2C_UNK grCorneria_801E0E14();
/* 1E0E40 */ M2C_UNK grCorneria_801E0E40();
/* 1E0F34 */ M2C_UNK grCorneria_801E0F34();
/* 1E0F64 */ bool grCorneria_801E0F64(void);
/* 1E0F6C */ M2C_UNK grCorneria_801E0F6C();
/* 1E1030 */ M2C_UNK grCorneria_801E1030();
/* 1E1058 */ bool grCorneria_801E1058(void);
/* 1E1060 */ M2C_UNK grCorneria_801E1060();
/* 1E12D0 */ M2C_UNK fn_801E12D0();
/* 1E12D4 */ void fn_801E12D4(HSD_GObj*);
/* 1E1348 */ M2C_UNK grCorneria_801E1348();
/* 1E1878 */ void grCorneria_801E1878(Ground_GObj*);
/* 1E1970 */ M2C_UNK grCorneria_801E1970();
/* 1E1BF0 */ M2C_UNK grCorneria_801E1BF0();
/* 1E2110 */ M2C_UNK grCorneria_801E2110();
/* 1E2228 */ M2C_UNK grCorneria_801E2228();
/* 1E2454 */ M2C_UNK fn_801E2454();
/* 1E2480 */ M2C_UNK fn_801E2480();
/* 1E24AC */ M2C_UNK fn_801E24AC();
/* 1E2550 */ M2C_UNK grCorneria_801E2550();
/* 1E2598 */ M2C_UNK grCorneria_801E2598();
/* 1E25C4 */ M2C_UNK grCorneria_801E25C4();
/* 1E2738 */ M2C_UNK grCorneria_801E2738();
/* 1E277C */ M2C_UNK grCorneria_801E277C();
/* 1E2A6C */ void grCorneria_801E2A6C(void);
/* 1E2AF4 */ void grCorneria_801E2AF4(void);
/* 1E2B80 */ s32 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 */ M2C_UNK grCorneria_801E2E50();
/* 1E2EA0 */ M2C_UNK grCorneria_801E2EA0();
/* 1E2EE4 */ bool grCorneria_801E2EE4(void);
/* 1E2EEC */ bool grCorneria_801E2EEC(Vec3* v, u32 arg1, HSD_JObj* jobj);
/* 1E2FCC */ M2C_UNK grCorneria_801E2FCC();
#define __GALE01_1DCCFC
/* 1DD654 */ static void grCorneria_801DD654(void);
/* 1DD658 */ static void grCorneria_801DD658(void);
/* 1DDAC0 */ static void grCorneria_801DDAC0(void);
/* 1DE4BC */ static void grCorneria_801DE4BC(void);
/* 1DE8E0 */ static void grCorneria_801DE8E0(void);
/* 1DF8CC */ static void grCorneria_801DF8CC(void);
/* 1DFBEC */ static void grCorneria_801DFBEC(void);
/* 1DFC24 */ static void grCorneria_801DFC24(void);
/* 1DFC28 */ static void grCorneria_801DFC28(void);
/* 1DFEB4 */ static void grCorneria_801DFEB4(void);
/* 1E013C */ static void grCorneria_801E013C(void);
/* 1E03C4 */ static void grCorneria_801E03C4(void);
/* 1E0DE0 */ static void grCorneria_801E0DE0(void);
/* 1E0E3C */ static void grCorneria_801E0E3C(void);
/* 1E0F30 */ static void grCorneria_801E0F30(void);
/* 1E1054 */ static void grCorneria_801E1054(void);
/* 1E12CC */ static void grCorneria_801E12CC(void);
#define GALE01_1C5FC0
/* 1C5FC0 */ void grDatFiles_801C5FC0(HSD_Archive*, void* data, u32 length);
/* 1C6038 */ void grDatFiles_801C6038(void*, s32, s32);
/* 1C6228 */ static void grDatFiles_801C6228(UnkStageDat*);
/* 1C6288 */ void grDatFiles_801C6288(void);
/* 1C62B4 */ static UnkArchiveStruct* grDatFiles_801C62B4(void);
/* 1C6324 */ UnkArchiveStruct* grDatFiles_801C6324(void);
/* 1C6330 */ UnkArchiveStruct* grDatFiles_801C6330(s32);
/* 1C6478 */ UnkArchiveStruct* grDatFiles_801C6478(void* data, s32 length);
#define GALE01_1C5B90
/* 1C5DB0 */ void grDisplay_801C5DB0(HSD_GObj*, int);
/* 1C5F60 */ void grDisplay_801C5F60(HSD_GObj* gobj, int 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
void grFigure1_8020E270(int);
#define GALE01_20E274
#define GALE01_20E504
#define GALE01_219530
/* 219530 */ M2C_UNK grFigureGet_80219530();
/* 219534 */ M2C_UNK grFigureGet_80219534();
/* 21959C */ M2C_UNK grFigureGet_8021959C();
/* 2195A0 */ M2C_UNK grFigureGet_802195A0();
/* 2195C4 */ M2C_UNK grFigureGet_802195C4();
/* 2195CC */ M2C_UNK grFigureGet_802195CC();
/* 2196B4 */ M2C_UNK grFigureGet_802196B4();
/* 2196E0 */ M2C_UNK grFigureGet_802196E0();
/* 2196E8 */ M2C_UNK grFigureGet_802196E8();
/* 2196EC */ M2C_UNK grFigureGet_802196EC();
/* 2196F0 */ M2C_UNK grFigureGet_802196F0();
/* 219898 */ M2C_UNK grFigureGet_80219898();
/* 219B10 */ M2C_UNK fn_80219B10();
/* 219C34 */ M2C_UNK grFigureGet_80219C34(s32);
/* 219C50 */ int grFigureGet_80219C50(s32);
/* 219C90 */ M2C_UNK grFigureGet_80219C90();
#define MELEE_IT_INLINES_H
#define MELEE_IT_TYPES_H
/// @file
/// @todo Restructure this, possibly items/chara/types.h
#define MELEE_IT_ITCHARITEMS_H
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 */ s32 xDE0; // 0 when never shot yet; 1 when has been shot (in this
// spawn instance of the blaster - not put away)
/* x10 */ s32 xDE4; // group 1; gets set to 0 in func (it_802ADF10) that
// sets item joint locations from corresponding fighter
// joint locations
/* x14 */ s32 xDE8; // group 1
/* x18 */ s32 xDEC; // group 1
/* x1C */ s32 xDF0; // group 1
/* x20 */ s32 xDF4; // group 1
/* x24 */ s32 xDF8; // group 1
/* x28 */ s32 xDFC; // group 2; gets set to 0 in func (it_802ADF10) that
// sets item joint locations from corresponding fighter
// joint locations
/* x2C */ s32 xE00; // group 2
/* x30 */ s32 xE04; // group 2
/* x34 */ s32 xE08; // group 2
/* x38 */ s32 xE0C; // group 2
/* x3C */ s32 xE10; // group 2
/* x40 */ Vec3 xE14; // group 3; gets set as the vector from fighter's
// current position to the joint holding the blaster
// on the frame blaster its shot
/* x4C */ Vec3 xE20; // group 3
/* x58 */ Vec3 xE2C; // group 3
/* x64 */ Vec3 xE38; // group 3
/* x70 */ Vec3 xE44; // group 3
/* x7C */ Vec3 xE50; // group 3
/* x88 */ f32 angle; // xE5C group 4; gets set to an angle value in func
// (it_802ADF10) that sets item joint locations from
// corresponding fighter joint locations
/* x8C */ f32 xE60; // group 4
/* x90 */ f32 xE64; // group 4
/* x94 */ f32 xE68; // group 4
/* x98 */ f32 xE6C; // group 4
/* x9C */ f32 xE70; // group 4
/* x100 */ s32 gfx_spawn_var; // xE74 Signals to spawn shoot gfx from
// blaster when set to '1', 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 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 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 ItemLink // user_data struct of GObj class 7
{
struct ItemLink* prev;
struct ItemLink* next;
Vec3 x8_vel;
Vec3 pos;
Vec3 x20_vec; // Previous position?
u8 flag0 : 1;
u8 flag1 : 1;
u8 flag2 : 1;
u8 flag3 : 1;
u8 flag4 : 1;
u8 flag5 : 1;
u8 flag6 : 1;
u8 flag7 : 1;
CollData x30_collData;
s32 unk;
HSD_GObj* x1D0_GObj;
HSD_JObj* x1D4_JObj;
} ItemLink;
struct { int x[1 - 2 * !(sizeof(struct ItemLink) == 0x1D8)]; };;
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 {
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;
s32 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;
/// @file
/// @todo Restructure this, possibly items/common/types.h
#define MELEE_IT_ITCOMMONITEMS_H
struct ECB {
f32 top;
f32 bottom;
f32 right;
f32 left;
};
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 {
s32 xDD4;
s32 xDD8;
s32 xDDC;
s32 xDE0;
s32 xDE4;
s32 xDE8;
float xDEC;
} itBombHei_ItemVars;
typedef struct itHeart_ItemVars {
s32 xDD4_heal;
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;
} 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 {
s32 heal_amount;
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;
} x4;
s32 x8;
} itTomato_ItemVars;
typedef struct {
int x0;
int x4;
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;
typedef struct itLGunRay_ItemVars {
/* +0 ip+DD4 */ float scale;
/* +4 ip+DD8 */ float angle;
/* +8 ip+DDC */ float speed;
/* +C ip+DE0 */ Vec3 pos;
} 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;
/// 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;
typedef struct itFoods_ItemVars {
/* +0 ip+DD4 */ s32 x0;
/* +4 ip+DD8 */ s32 heal_amount;
} itFoods_ItemVars;
typedef struct itFoodsAttributes {
s32 x0;
HSD_Joint* x4;
s32 x8;
s32 xC;
} itFoodsAttributes;
typedef struct itWhispyApple_ItemVars {
s32 xDD4_heal;
} itWhispyApple_ItemVars;
typedef struct itFreeze_ItemVars {
/* +0 */ char pad_0[0x1C];
/* +1C */ int unk_1C;
} itFreeze_ItemVars;
typedef struct itPikachutJoltGround_ItemVars {
/* +0 +DD4 */ char pad_0[0x8];
/* +8 +DDC */ M2C_UNK unk_8;
} itPikachutJoltGround_ItemVars;
typedef struct itSamusGrapple_ItemVars {
/* +0 +DD4 */ char pad_0[0x10];
/* +10 +DE4 */ M2C_UNK (*unk_10)();
} itSamusGrapple_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 {
int x0;
int x4;
} itTomatoVars;
typedef struct itTincle_ItemVars {
/* +0 ip+DD4 */ u8 x0[0x54 - 0x0];
/* +54 ip+E28 */ float x54;
} itTincle_ItemVars;
typedef struct {
/* ip+DD4 */ char pad_0[0x3C];
/* ip+E10 */ int xE10;
/* ip+E14 */ char pad_40[0xC];
/* ip+E24 */ Vec3 vel;
} itGShell_ItemVars;
typedef struct itPokemonAttributes {
f32 x0;
s32 timer;
s32 max;
s32 xC;
s32 x10;
s32 x14;
s32 x18;
} itPokemonAttributes;
typedef struct {
s16 x0;
u8 padding[0xE34 - 0xDD8];
s32 timer;
int x64;
} itPokemon_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;
int x14;
} itCoin_ItemVars;
typedef struct itFFlower_ItemVars {
int x0;
uint 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;
ECB 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 itTaruCann_DatAttrs {
/* +0 */ char pad_0[0x28];
/* +28 */ int x28;
/* +2C */ int x2C;
} itTaruCann_DatAttrs;
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 */ f32 x20;
/* +24 ip+DF8 */ f32 x24;
/* +28 ip+DFC */ f32 x28;
} itKlap_ItemVars;
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 itChicoritaAttr {
f32 scale;
s32 x4; // x60 in item vars gets set to this if -1; max timer/lifetime?
} itChicoritaAttr;
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 it_279D_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;
} it_279D_ItemVars;
typedef struct it_279D_DatAttrs {
f32 x0;
f32 x4;
f32 x8;
f32 xC;
f32 x10;
f32 x14;
f32 x18;
f32 x1C[6];
// f32 x20;
// f32 x24;
// f32 x28;
// f32 x2C;
// f32 x30;
f32 x34;
s32 x38;
s32 x3C[160];
// f32 x3C;
// f32 x40;
// f32 x44;
// f32 x48;
// f32 x4C;
// f32 x50;
// f32 x54;
// f32 x58;
// f32 x5C;
// s32 x60[160];
// f32 padding[0x248 - 0x4C];
// f32 x248;
} it_279D_DatAttrs;
typedef struct it_27B5_ItemVars {
/* ip+DD4 */ HSD_JObj* x0;
/* ip+DD8 */ s32 x4;
/* 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;
} it_27B5_ItemVars;
typedef struct it_27B5_DatAttrs {
f32 scale;
} it_27B5_DatAttrs;
typedef struct it_27CE_ItemVars {
/* ip+DD4 */ void* attr;
} it_27CE_ItemVars;
// Should it_2F28 and it_27CF use the same structs?
typedef struct it_27CF_ItemVars {
f32 x0;
} it_27CF_ItemVars;
typedef struct it_27CF_DatAttrs {
Vec3 pos;
Vec3 vel;
f32 float1; // lifetime
f32 float2;
f32 float3; // item var x0
f32 x24; // item->xC98
int x28; // ItemKind
} it_27CF_DatAttrs;
typedef struct it_2F28_ItemVars {
f32 x0;
} it_2F28_ItemVars;
struct it_2F28_DatAttrs {
Vec3 pos;
Vec3 vel;
f32 float1; // lifetime
f32 float2; // item var x0
};
typedef struct it_2E5A_ItemVars_struct {
f32 x0; // set to float calc result/item->x3C
HSD_JObj* x4; // set to item_gobj->hsd_obj
Vec3 x8; // called in lb_8000B1CC
Vec3 x14; // set equal to x8
} it_2E5A_ItemVars_struct;
typedef struct it_2E5A_ItemVars {
// /* ip+DD4 */ HSD_GObj* x0;
/* ip+DD4 */ s32 x0;
/* ip+DD8 */ s32 x4; // uses regular registers (#? gets multiplied by 2C,
// then indexed into attr)
/* ip+DDC */ s32 x8; // uses regular registers
/* ip+DE0 */ s32 xC; // uses regular registers
/* ip+DE4 */ f32 x10; // uses float registers; timer?
/* ip+DE8 */ f32 x14;
/* ip+DEC */ UnkFlagStruct x18; // has bit assignments
/* ip+DF0 */ it_2E5A_ItemVars_struct* x1C;
// /* ip+DF4 */ s32 x20;
// /* ip+DF8 */ s32 x24;
// /* ip+DFC */ s32 x28;
// /* ip+E00 */ s32 x2C;
// /* ip+E04 */ s32 x30;
// /* ip+E08 */ s32 x34;
// /* ip+E0C */ s32 x38;
// /* ip+E10 */ s32 x3C;
// /* ip+E14 */ s32 x40;
// /* ip+E18 */ s32 x44;
// /* ip+E1C */ s32 x48;
// /* ip+E20 */ s32 x4C;
// /* ip+E24 */ s32 x50;
// /* ip+E28 */ s32 x54;
// /* ip+E2C */ s32 x58;
} it_2E5A_ItemVars;
typedef struct it_2E5A_DatAttrs_1 {
f32 x0; // lifetime?
f32 x4; // float assignment
f32 x8;
f32 xC;
f32 x10;
f32 x14; // item->x40_vel.x
f32 x18;
f32 x1C;
f32 x20;
f32 x24; // float assignment
f32 x28;
f32 x2C; // float assignment
f32 x30;
f32 x34;
f32 x38;
HSD_Joint* x3C; // called in it_80273318
f32 x40;
f32 x44;
f32 x48;
s32 x4C; // item->xD84
s32 x50;
f32 x54; // item->scl
ECB* x58; // called in it_80275D5C
s32 x5C;
} it_2E5A_DatAttrs_1;
typedef struct it_2E5A_DatAttrs_2 {
f32 x0; // lifetime?
f32 x4; // float assignment
f32 x8;
f32 xC;
HSD_Joint* x10; // called in it_80273318
ItemStateDesc* x14; // item2->xD0_itemStateDesc
f32 x18;
f32 x1C;
s32 x20; // item->xD84
f32 x24; // float assignment
f32 x28; // item->scl
// ECB* x2C; // called in it_80275D5C
} it_2E5A_DatAttrs_2;
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;
// Not sure if there is a way to combine these two structs?
typedef struct it_2E6A_ItemVars_1 {
/* +0 ip+DD4 */ s16 x0;
/* +2 ip+DD6 */ s16 x2;
/* +4 ip+DD8 */ HSD_JObj* x4;
/* +8 ip+DDC */ f32 x8; // unused?
/* +C ip+DE0 */ f32 xC; // unused?
/* +10 ip+DE4 */ void* x10;
/* +14 ip+DE8 */ void* x14;
/* +18 ip+DEC */ void* x18;
/* +1C ip+DF0 */ void* x1C;
} it_2E6A_ItemVars_1;
typedef struct it_2E6A_ItemVars_2 {
/* +0 ip+DD4 */ s16 x0;
/* +2 ip+DD6 */ u16 x2;
/* +4 ip+DD8 */ Vec3 x4;
/* +10 ip+DE4 */ void* x10;
/* +14 ip+DE8 */ void* x14;
/* +18 ip+DEC */ void* x18;
/* +1C ip+DF0 */ void* x1C;
} it_2E6A_ItemVars_2;
typedef struct itWhiteBea_ItemVars {
/* +0 ip+DD4 */ char pad_0[0x20];
/* +20 ip+DF4 */ M2C_UNK x20;
} itWhiteBea_ItemVars;
typedef struct itOctarock_ItemVars {
/* +0 ip+DD4 */ char pad_0[0x20];
/* +20 ip+DF4 */ Vec3 x20;
} itOctarock_ItemVars;
typedef struct itMasterHandLaser_ItemVars {
/* +0 ip+DD4 */ bool x0;
} itMasterHandLaser_ItemVars;
#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;
s32 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 xDEC;
Vec3 xDFC;
Vec3 xE08;
Vec3 xE14;
Vec3 xE20;
Vec3 xE2C;
Vec3 xE38;
Vec3 xE44;
Vec3 xE50;
Vec3 xE5C;
Vec3 xE68;
Vec3 xE74;
Vec3 xE80;
Vec3 xE8C;
Vec3 xE98;
Vec3 xEA0;
float xEAC; // PK Thunder release angles?
float xEB0;
float xEB4;
float xEB8;
float xEBC;
float xEC0;
float xEC4;
float xEC8;
float xECC;
float xED0;
float xED4;
float xED8;
float xEDC;
float xEE0;
float xEE4;
float xEE8;
s32 xEEC;
s32 xEF0;
HSD_GObj* xEF4;
HSD_GObj* xEF8;
HSD_GObj* xEFC;
HSD_GObj* xF00;
HSD_GObj* xF04;
HSD_GObj* xF08;
} itPKThunder_ItemVars;
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 {
union {
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;
u32 word;
};
};
struct DynamicBoneTable {
/// @at{0} @sz{190}
HSD_JObj* bones[100];
};
struct { int x[1 - 2 * !(sizeof(struct DynamicBoneTable) == 0x190)]; };;
struct Item_DynamicBones {
int flags;
HSD_JObj* skeleton;
DynamicsDesc dyn_desc;
};
struct { int x[1 - 2 * !(sizeof(struct Item_DynamicBones) == 0x1C)]; };;
struct ItemAttr {
u8 x0_is_heavy : 1; // 0x0, bit 0x80, is heavy item (crate)
u8 x0_78 : 4; // unk, might be lock-on behavior? (Samus Missile)
u8 x0_hold_kind : 3; // defines hand hold behavior
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
ECB x20;
Vec2 x30_unk; // 0x34
Vec2 x38_grab_range; // 0x38
ECB x40;
f32 x50; // 0x50
f32 x54; // 0x54
f32 x58; // 0x58
f32 x5c; // 0x5c
f32 x60_scale; // 0x60, does not affect hitboxes
/// @at{64} @sz{4}
/// @brief GFX to play on destroy.
enum_t destroy_gfx;
s32 x68; // 0x68
s32 x6C; // 0x6c
s32 x70; // 0x70
s32 x74; // 0x74
/// @at{78} @sz{4}
/// @brief SFX that plays when this item is destroyed
enum_t destroy_sfx;
s32 x7C; // 0x7c
s32 x80; // 0x80
s32 x84; // 0x84
s32 x88; // 0x88
s32 x8C; // 0x8c
s32 x90; // 0x90
s32 x94; // 0x94
s32 x98; // 0x98
s32 x9C; // 0x9c
};
/// @sz{8}
struct ItemDynamics {
/// @todo Combine with ftDynamics? Can see in it_8027163C that this struct
/// does not work perfectly
/// @at{0} @sz{4}
int count;
/// @at{4} @sz{4}
BoneDynamicsDesc* dyn_descs;
};
/// @sz{10}
struct ItemStateDesc {
/// @at{0} @sz{4}
HSD_AnimJoint* x0_anim_joint;
/// @at{0} @sz{4}
HSD_MatAnimJoint* x4_matanim_joint;
/// @at{0} @sz{4}
M2C_UNK x8_parameters;
/// @at{0} @sz{4}
M2C_UNK xC_script;
};
struct ItemStateArray {
struct ItemStateDesc x0_itemStateDesc[8];
};
/// @sz{10}
struct ItemModelDesc {
/// @at{0} @sz{4}
HSD_Joint* x0_joint;
/// @at{4} @sz{4}
u32 x4_bone_count;
/// @at{8} @sz{4}
s32 x8_bone_attach_id;
/// @at{C} @sz{4}
u8 xC_bit_field;
};
struct Article {
ItemAttr* x0_common_attr;
void* x4_specialAttributes;
M2C_UNK x8_hurtbox;
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;
Vec3 x1C[2];
} it_266F_ItemVars;
struct Item {
void* x0;
/// @at{4} @sz{4}
HSD_GObj* entity;
s32 x8;
/// @at{C} @sz{4}
enum_t spawn_kind;
/// @at{10} @sz{4}
ItemKind kind;
/// @at{14} @sz{4}
enum_t hold_kind;
s32 x18;
s32 x1C;
/// @at{20} @sz1
u8 x20_team_id;
u8 x21;
u8 x22;
u8 x23;
/// @at{24} @sz{4}
enum_t msid;
/// @at{28} @sz{4}
enum_t anim_id;
/// @at{2C} @sz{4}
f32 facing_dir;
/// @at{30} @sz{4}
f32 init_facing_dir;
/// @at{34} @sz{4}
f32 spin_spd;
/// @at{38} @sz{4}
f32 scl;
/// @at{3C} @sz{4}
f32 x3C;
/// @at{40} @sz{C}
Vec3 x40_vel;
/// @at{4C} @sz{C}
Vec3 pos;
/// @at{58} @sz{C}
Vec3 x58_vec_unk;
/// @at{64} @sz{C}
Vec3 x64_vec_unk2;
/// @at{70} @sz{C}
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;
/// @at{518} @sz{4}
/// @brief Item's current owner
HSD_GObj* owner;
HSD_GObj* x51C; // Related to the owner gobj
CameraBox* x520_cameraBox; // CameraBox
FtCmdState 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;
struct {
HitCapsule hit;
s32 x138;
} 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]; // Are these really size 0x4C? Code in itcoll.c
// and it_266F.c adds 0x44 to iterate through.
// (Conversely can see adding 0x4C to iterate in
// ftcoll.c) Can see how vars don't line up in
// it_80274D6C and it_80274DAC
f32 xB64;
u8 xB68; // int for ItemDynamics->count?
u8 xB69;
u8 xB6A;
u8 xB6B;
struct {
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?
} 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;
M2C_UNK xBC0;
u8 xBC4;
u8 xBC5;
u8 xBC6;
u8 xBC7;
u32 xBC8;
Vec2 xBCC_unk;
Vec2 xBD4_grabRange;
ECB xBDC;
ECB xBEC;
ECB xBFC;
ECB xC0C;
ECB 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;
Vec2 xC78; // 0xc74
Vec2 xC80; // 0xc7c
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;
/// @at{CF8} @sz{4}
/// @brief The entity that was detected by this item's inert hitbox.
HSD_GObj* toucher;
HSD_GObj* xCFC;
/// @at{D00} @sz{4}
/// @brief The entity that got grabbed by this item.
HSD_GObj* grab_victim;
/// @at{D04} @sz{4}
/// @brief The entity that collided with this item's hitbox?
HSD_GObj* atk_victim;
u8 xD08;
u8 xD09;
u8 xD0A;
u8 xD0B;
/// @at{D0C} @sz{4}
enum_t xD0C;
f32 xD10;
/// @at{D14} @sz{4}
HSD_GObjPredicate animated;
/// @at{D18} @sz{4}
HSD_GObjEvent physics_updated;
/// @at{D1C} @sz{4}
HSD_GObjPredicate collided;
/// @at{D20} @sz{4}
/// @todo What does this mean?
HSD_GObjEvent on_accessory;
/// @at{D24} @sz{4}
/// @brief Runs when an entity is detected by this item's inert hibox.
HSD_GObjPredicate touched;
/// @at{D28} @sz{4}
/// @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;
/// @at{D28} @sz{4}
/// @brief Runs when the item is jumped on.
/// @todo What function is @c 80269bac?
HSD_GObjPredicate jumped_on;
/// @at{D34} @sz{4}
/// @brief When grabbing a fighter, run this function on self.
HSD_GObjEvent grab_dealt;
/** @at{D38} @sz{4}
* @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;
u32 xD50_landNum; // Number of times this item has landed
s32 xD54_throwNum; // Number of times this item has been thrown
u32 xD58;
s32 xD5C;
/// @at{D60} @sz{4}
enum_t destroy_type;
/// @at{D64} @sz{4}
enum_t sfx_unk1;
/// @at{D68} @sz{4}
enum_t sfx_unk2;
s32 xD6C;
s32 xD70;
s32 xD74;
s32 xD78;
/// @at{D7C} @sz{4}
/// @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
Vec2 xD94;
Vec2 xD9C;
union {
UnkFlagStruct xDA4_flag;
u32 xDA4_word;
};
union {
UnkFlagStruct xDA8_flag;
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;
u32 xDBC_itcmd_var4;
flag32 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 {
itBombHei_ItemVars bombhei;
itCapsule_ItemVars capsule;
itChicorita_ItemVars chicorita;
itCoin_ItemVars coin;
itEgg_ItemVars egg;
itFFlower_ItemVars fflower;
itFFlowerFlame_ItemVars fflowerflame;
itFoods_ItemVars foods;
itFoxBlaster_ItemVars foxblaster;
itFoxIllusion_ItemVars foxillusion;
itFoxLaser_ItemVars foxlaser;
itFreeze_ItemVars freeze;
itGShell_ItemVars gshell, rshell, zgshell, zrshell;
itHassam_ItemVars hassam;
itHeart_ItemVars heart;
itHeiho_ItemVars heiho;
it_266F_ItemVars it_266F;
it_279D_ItemVars it_279D;
it_27B5_ItemVars it_27B5;
it_27CE_ItemVars it_27CE;
it_27CF_ItemVars it_27CF;
it_2E5A_ItemVars it_2E5A;
it_2E6A_ItemVars_1 it_2E6A_1;
it_2E6A_ItemVars_2 it_2E6A_2;
it_2F28_ItemVars it_2F28;
itKinoko_ItemVars kinoko;
itKirbyHammer_ItemVars kirbyhammer;
itKlap_ItemVars klap;
itLGun_ItemVars lgun;
itLGunBeam_ItemVars lgunbeam;
itLGunRay_ItemVars lgunray;
itLinkArrow_ItemVars linkarrow;
itLinkBomb_ItemVars linkbomb;
itLinkBow_ItemVars linkbow;
itLinkHookshot_ItemVars linkhookshot;
itMato_ItemVars mato;
itNokoNoko_ItemVars nokonoko;
itOctarock_ItemVars octarock;
itPikachutJoltGround_ItemVars pikachujoltground;
itPKFlush_ItemVars pkflush;
itPKFlushExplode_ItemVars pkflushexplode;
itPKThunder_ItemVars pkthunder;
itPokemon_ItemVars pokemon;
itSamusGrapple_ItemVars samusgrapple;
itStar_ItemVars star;
itSword_ItemVars sword;
itTincle_ItemVars tincle;
itTomato_ItemVars tomato;
itWhispyApple_ItemVars whispyapple;
itWhiteBea_ItemVars whitebea;
itMasterHandLaser_ItemVars masterhandlaser;
u8 _[0xFCC - 0xDD4];
} xDD4_itemVar;
};
struct { int x[1 - 2 * !(sizeof(struct Item) == 0xFCC)]; };;
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;
/* +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 ItemModStruct {
GXColor x0_unk;
};
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;
u32 x48_float;
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;
uint xD8;
s32 xDC;
f32 unk_degrees; ///< @at{E0}
u8 filler_1a[0xE8 - 0xE4];
u8 xE8; // struct that has a float (scale?) as the first member? See
// it_80275BC8
u8 filler_1a_2[0xF0 - 0xEC];
f32 xF0;
f32 xF4;
f32 xF8;
u8 filler_1b[0x124 - 0xFC];
s32 x124; // max value for a random integer generation in it_8026F6BC
s32 x128; // used in it_8026CF04
s32 x12C; // used in it_8026CF04
s32 x130; // used in it_8026CF04
s32 x134; // used in 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;
};
struct HSD_ObjAllocUnk2 {
// float x0;
// float x4;
// float x8;
// float xC;
// u8 pad_10[0xB0 - 0x10];
ECB ecb_arr[11];
int xB0;
int xB4;
int xB8;
M2C_UNK xBC;
// Vec3 xC0;
// u8 pad_CC[0x148 - 0xCC];
Vec3 xC0_vec3_arr[11];
u32 x144;
u32 x148;
u32 x14C;
u32 x150; // num of ECB/Vec3's with data?
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?
};
struct HSD_ObjAllocUnk6 {
u8 x0; // Gets incremented and decremented by 1 for various checks. Gets
// indexed into x4's struct
u8* x4; // Points to struct of ItemKinds (or array?)
u16 x8; // Max value for random integers
u16 xA;
u16* xC; // Points to struct of ???
};
struct HSD_ObjAllocUnk4 {
u32 x0;
HSD_ObjAllocUnk6 x4;
s32 x14;
u64 x18; // Gets set equal to gm_8016AEA4(), aka lbl_8046B6A0.unk_24D3
// (which is an s8?)
};
struct HSD_ObjAllocUnk5 {
u8 x0;
u32 x4;
u16 x8;
u16 xA;
u16 xC;
};
typedef struct HSD_ObjAllocUnk7 {
s32 x0;
void* x4;
HitCapsule* x8;
void* xC;
} HSD_ObjAllocUnk7;
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 it_8026F3D4_body_t {
u8 x0[32]; // This array length was a guess
};
#define GET_ITEM(gobj) ((Item*) HSD_GObjGetUserData(gobj))
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;
}
/* 216E74 */ void grFlatzone_80216E74(int);
/* 216E78 */ void grFlatzone_80216E78(void);
/* 216F38 */ void grFlatzone_80216F38(void);
/* 216F3C */ void grFlatzone_80216F3C(void);
/* 216F40 */ int grFlatzone_80216F40(void);
/* 216F48 */ HSD_GObj* grFlatzone_80216F48(s32);
/* 217030 */ void grFlatzone_80217030(Ground_GObj*);
/* 21705C */ int grFlatzone_8021705C(HSD_GObj*);
/* 217064 */ void grFlatzone_80217064(HSD_GObj*);
/* 217068 */ void grFlatzone_80217068(HSD_GObj*);
/* 21707C */ void grFlatzone_8021707C(Ground_GObj*);
/* 2171CC */ int grFlatzone_802171CC(HSD_GObj*);
/* 2171D4 */ void grFlatzone_802171D4(Ground_GObj*);
/* 2173D0 */ void grFlatzone_802173D0(HSD_GObj*);
/* 2173D4 */ void grFlatzone_802173D4(Ground_GObj*);
/* 217430 */ int grFlatzone_80217430(HSD_GObj*);
/* 217438 */ void grFlatzone_80217438(HSD_GObj*);
/* 21743C */ void grFlatzone_8021743C(HSD_GObj*);
/* 217450 */ void grFlatzone_80217450(Ground_GObj*);
/* 2174E4 */ int grFlatzone_802174E4(HSD_GObj*);
/* 2174EC */ void grFlatzone_802174EC(Ground_GObj*);
/* 217644 */ void grFlatzone_80217644(HSD_GObj*);
/* 217648 */ void grFlatzone_80217648(Ground_GObj*);
/* 2176B4 */ int grFlatzone_802176B4(HSD_GObj*);
/* 2176BC */ void grFlatzone_802176BC(Ground_GObj*);
/* 217CD0 */ void grFlatzone_80217CD0(HSD_GObj*);
/* 217CD4 */ void grFlatzone_80217CD4(Ground_GObj*);
/* 217D28 */ int grFlatzone_80217D28(HSD_GObj*);
/* 217D30 */ void grFlatzone_80217D30(Ground_GObj*);
/* 217DA4 */ void grFlatzone_80217DA4(HSD_GObj*);
/* 217DA8 */ void grFlatzone_80217DA8(Ground_GObj*);
/* 217DFC */ int grFlatzone_80217DFC(HSD_GObj*);
/* 217E04 */ void grFlatzone_80217E04(Ground_GObj*);
/* 217E78 */ void grFlatzone_80217E78(HSD_GObj*);
/* 217E7C */ void grFlatzone_80217E7C(HSD_GObj*);
/* 217E80 */ int grFlatzone_80217E80(HSD_GObj*);
/* 217E88 */ void grFlatzone_80217E88(HSD_GObj*);
/* 217E8C */ void grFlatzone_80217E8C(HSD_GObj*);
/* 217E90 */ void grFlatzone_80217E90(Ground_GObj*);
/* 217EE8 */ int grFlatzone_80217EE8(HSD_GObj*);
/* 217EF0 */ void grFlatzone_80217EF0(Ground_GObj*);
/* 21805C */ void grFlatzone_8021805C(HSD_GObj*);
/* 218060 */ void grFlatzone_80218060(s32);
/* 2181B4 */ void grFlatzone_802181B4(void);
/* 218260 */ void grFlatzone_80218260(void);
/* 2182B4 */ DynamicsDesc* grFlatzone_802182B4(int);
/* 2182BC */ int grFlatzone_802182BC(Vec3*, int, HSD_JObj*);
#define GALE01_1F2D0C
/* 1F2D0C */ M2C_UNK grFourside_801F2D0C();
/* 1F2D10 */ M2C_UNK grFourside_801F2D10();
/* 1F2DA0 */ M2C_UNK grFourside_801F2DA0();
/* 1F2DA4 */ M2C_UNK grFourside_801F2DA4();
/* 1F2DC8 */ M2C_UNK grFourside_801F2DC8();
/* 1F2DD0 */ M2C_UNK grFourside_801F2DD0();
/* 1F2EBC */ M2C_UNK grFourside_801F2EBC();
/* 1F2EE8 */ M2C_UNK grFourside_801F2EE8();
/* 1F2EF0 */ M2C_UNK grFourside_801F2EF0();
/* 1F2EF4 */ M2C_UNK grFourside_801F2EF4();
/* 1F2EF8 */ M2C_UNK grFourside_801F2EF8();
/* 1F2F24 */ M2C_UNK grFourside_801F2F24();
/* 1F2F2C */ M2C_UNK grFourside_801F2F2C();
/* 1F2F30 */ M2C_UNK grFourside_801F2F30();
/* 1F2F34 */ M2C_UNK grFourside_801F2F34();
/* 1F3070 */ M2C_UNK grFourside_801F3070();
/* 1F3078 */ M2C_UNK grFourside_801F3078();
/* 1F309C */ M2C_UNK grFourside_801F309C();
/* 1F30A0 */ M2C_UNK fn_801F30A0();
/* 1F30F0 */ M2C_UNK grFourside_801F30F0();
/* 1F3144 */ M2C_UNK grFourside_801F3144();
/* 1F314C */ M2C_UNK grFourside_801F314C();
/* 1F3150 */ M2C_UNK grFourside_801F3150();
/* 1F3154 */ M2C_UNK grFourside_801F3154();
/* 1F326C */ M2C_UNK grFourside_801F326C();
/* 1F3274 */ M2C_UNK grFourside_801F3274();
/* 1F37F8 */ M2C_UNK grFourside_801F37F8();
/* 1F37FC */ M2C_UNK grFourside_801F37FC();
/* 1F388C */ M2C_UNK grFourside_801F388C();
/* 1F3894 */ M2C_UNK grFourside_801F3894();
/* 1F3B6C */ M2C_UNK grFourside_801F3B6C();
/* 1F3B70 */ M2C_UNK grFourside_801F3B70();
/* 1F3C40 */ M2C_UNK grFourside_801F3C40();
/* 1F3CC0 */ M2C_UNK grFourside_801F3CC0();
/* 1F3CC8 */ M2C_UNK grFourside_801F3CC8();
/* 1F3F0C */ M2C_UNK grFourside_801F3F0C();
/* 1F3F10 */ M2C_UNK grFourside_801F3F10();
/* 1F3F74 */ M2C_UNK fn_801F3F74();
/* 1F41E0 */ M2C_UNK grFourside_801F41E0();
/* 1F41E8 */ M2C_UNK grFourside_801F41E8();
#define GALE01_202B6C
/* 202B6C */ M2C_UNK grGarden_80202B6C();
/* 202B70 */ M2C_UNK grGarden_80202B70();
/* 202C24 */ M2C_UNK grGarden_80202C24();
/* 202C4C */ M2C_UNK grGarden_80202C4C();
/* 202C70 */ M2C_UNK grGarden_80202C70();
/* 202C78 */ M2C_UNK grGarden_80202C78();
/* 202D60 */ M2C_UNK grGarden_80202D60();
/* 202D8C */ M2C_UNK grGarden_80202D8C();
/* 202D94 */ M2C_UNK grGarden_80202D94();
/* 202D98 */ M2C_UNK grGarden_80202D98();
/* 202D9C */ M2C_UNK fn_80202D9C();
/* 202DC8 */ M2C_UNK grGarden_80202DC8();
/* 202E40 */ M2C_UNK grGarden_80202E40();
/* 202E48 */ M2C_UNK grGarden_80202E48();
/* 202E68 */ M2C_UNK grGarden_80202E68();
/* 202E6C */ M2C_UNK grGarden_80202E6C();
/* 202F34 */ M2C_UNK grGarden_80202F34();
/* 202F3C */ M2C_UNK grGarden_80202F3C();
/* 202F40 */ M2C_UNK grGarden_80202F40();
/* 202F44 */ M2C_UNK grGarden_80202F44();
/* 202F94 */ M2C_UNK grGarden_80202F94();
/* 202F9C */ M2C_UNK grGarden_80202F9C();
/* 202FA0 */ M2C_UNK grGarden_80202FA0();
/* 202FA4 */ M2C_UNK grGarden_80202FA4();
/* 202FF4 */ M2C_UNK grGarden_80202FF4();
/* 202FFC */ M2C_UNK grGarden_80202FFC();
/* 203000 */ M2C_UNK grGarden_80203000();
/* 203004 */ M2C_UNK grGarden_80203004();
/* 203090 */ M2C_UNK grGarden_80203090();
/* 203098 */ M2C_UNK grGarden_80203098();
/* 2031A0 */ M2C_UNK grGarden_802031A0();
/* 2031A4 */ M2C_UNK grGarden_802031A4();
/* 203248 */ M2C_UNK grGarden_80203248();
/* 203250 */ M2C_UNK grGarden_80203250();
/* 203494 */ M2C_UNK grGarden_80203494();
/* 203498 */ M2C_UNK fn_80203498();
/* 20349C */ M2C_UNK fn_8020349C();
/* 203560 */ M2C_UNK grGarden_80203560();
/* 2035C8 */ M2C_UNK grGarden_802035C8();
/* 2035D0 */ M2C_UNK grGarden_802035D0();
/* 203624 */ M2C_UNK grGarden_80203624();
#define GALE01_1F423C
/* 1F423C */ M2C_UNK grGreatBay_801F423C();
/* 1F4240 */ M2C_UNK grGreatBay_801F4240();
/* 1F42D0 */ M2C_UNK grGreatBay_801F42D0();
/* 1F42D4 */ M2C_UNK grGreatBay_801F42D4();
/* 1F42F8 */ M2C_UNK grGreatBay_801F42F8();
/* 1F4300 */ M2C_UNK grGreatBay_801F4300();
/* 1F4404 */ M2C_UNK grGreatBay_801F4404();
/* 1F4430 */ M2C_UNK grGreatBay_801F4430();
/* 1F4438 */ M2C_UNK grGreatBay_801F4438();
/* 1F443C */ M2C_UNK grGreatBay_801F443C();
/* 1F4440 */ M2C_UNK grGreatBay_801F4440();
/* 1F44A0 */ M2C_UNK grGreatBay_801F44A0();
/* 1F44A8 */ M2C_UNK grGreatBay_801F44A8();
/* 1F44AC */ M2C_UNK grGreatBay_801F44AC();
/* 1F44B0 */ M2C_UNK grGreatBay_801F44B0();
/* 1F4510 */ M2C_UNK grGreatBay_801F4510();
/* 1F4518 */ M2C_UNK grGreatBay_801F4518();
/* 1F451C */ M2C_UNK grGreatBay_801F451C();
/* 1F4520 */ M2C_UNK fn_801F4520();
/* 1F454C */ M2C_UNK grGreatBay_801F454C();
/* 1F4650 */ M2C_UNK grGreatBay_801F4650();
/* 1F4658 */ M2C_UNK grGreatBay_801F4658();
/* 1F4690 */ M2C_UNK grGreatBay_801F4690();
/* 1F4694 */ M2C_UNK grGreatBay_801F4694();
/* 1F4994 */ M2C_UNK grGreatBay_801F4994();
/* 1F499C */ M2C_UNK grGreatBay_801F499C();
/* 1F545C */ M2C_UNK grGreatBay_801F545C();
/* 1F5460 */ M2C_UNK grGreatBay_801F5460();
/* 1F55F8 */ M2C_UNK grGreatBay_801F55F8();
/* 1F5600 */ M2C_UNK grGreatBay_801F5600();
/* 1F5914 */ M2C_UNK fn_801F5914();
/* 1F5988 */ M2C_UNK grGreatBay_801F5988();
/* 1F598C */ M2C_UNK grGreatBay_801F598C();
/* 1F59F0 */ M2C_UNK grGreatBay_801F59F0();
/* 1F59F8 */ M2C_UNK grGreatBay_801F59F8();
/* 1F59FC */ M2C_UNK grGreatBay_801F59FC();
/* 1F5A00 */ M2C_UNK grGreatBay_801F5A00();
/* 1F5AF0 */ M2C_UNK grGreatBay_801F5AF0();
/* 1F5AF8 */ M2C_UNK grGreatBay_801F5AF8();
/* 1F5D48 */ M2C_UNK grGreatBay_801F5D48();
/* 1F5D4C */ M2C_UNK grGreatBay_801F5D4C();
/* 1F5E28 */ M2C_UNK grGreatBay_801F5E28();
/* 1F60C4 */ M2C_UNK fn_801F60C4();
/* 1F62F8 */ M2C_UNK grGreatBay_801F62F8();
/* 1F63F4 */ M2C_UNK grGreatBay_801F63F4();
/* 1F660C */ M2C_UNK grGreatBay_801F660C();
/* 1F66A4 */ M2C_UNK grGreatBay_801F66A4();
/* 1F6708 */ M2C_UNK fn_801F6708();
/* 1F67A4 */ M2C_UNK grGreatBay_801F67A4();
/* 1F680C */ M2C_UNK grGreatBay_801F680C();
/* 1F6814 */ M2C_UNK grGreatBay_801F6814();
#define GALE01_213458
/* 213458 */ M2C_UNK grGreens_80213458();
/* 213464 */ M2C_UNK grGreens_80213464();
/* 2134F4 */ M2C_UNK grGreens_802134F4();
/* 2134F8 */ M2C_UNK grGreens_802134F8();
/* 21351C */ M2C_UNK grGreens_8021351C();
/* 213524 */ M2C_UNK grGreens_80213524();
/* 21360C */ M2C_UNK grGreens_8021360C();
/* 2138AC */ M2C_UNK grGreens_802138AC();
/* 2138B4 */ M2C_UNK grGreens_802138B4();
/* 2138B8 */ M2C_UNK grGreens_802138B8();
/* 2138BC */ M2C_UNK grGreens_802138BC();
/* 213900 */ M2C_UNK grGreens_80213900();
/* 213908 */ M2C_UNK grGreens_80213908();
/* 21390C */ M2C_UNK grGreens_8021390C();
/* 213910 */ M2C_UNK grGreens_80213910();
/* 21393C */ M2C_UNK grGreens_8021393C();
/* 213944 */ M2C_UNK grGreens_80213944();
/* 213948 */ M2C_UNK grGreens_80213948();
/* 21394C */ M2C_UNK grGreens_8021394C();
/* 213978 */ M2C_UNK grGreens_80213978();
/* 213980 */ M2C_UNK grGreens_80213980();
/* 213984 */ M2C_UNK grGreens_80213984();
/* 213988 */ M2C_UNK grGreens_80213988();
/* 2139B4 */ M2C_UNK grGreens_802139B4();
/* 2139BC */ M2C_UNK grGreens_802139BC();
/* 2139C0 */ M2C_UNK grGreens_802139C0();
/* 2139C4 */ M2C_UNK grGreens_802139C4();
/* 213AAC */ M2C_UNK grGreens_80213AAC();
/* 213AB4 */ M2C_UNK grGreens_80213AB4();
/* 213B1C */ M2C_UNK fn_80213B1C();
/* 213C10 */ M2C_UNK grGreens_80213C10();
/* 214654 */ M2C_UNK grGreens_80214654();
/* 214658 */ M2C_UNK fn_80214658();
/* 214674 */ M2C_UNK grGreens_80214674();
/* 214794 */ M2C_UNK grGreens_80214794();
/* 21479C */ M2C_UNK grGreens_8021479C();
/* 214804 */ M2C_UNK grGreens_80214804();
/* 21483C */ M2C_UNK grGreens_8021483C();
/* 214B58 */ M2C_UNK grGreens_80214B58();
/* 214FA8 */ M2C_UNK grGreens_80214FA8();
/* 2150C4 */ M2C_UNK grGreens_802150C4();
/* 215358 */ M2C_UNK grGreens_80215358();
/* 2159B4 */ M2C_UNK fn_802159B4();
/* 2159B8 */ M2C_UNK grGreens_802159B8();
/* 215B84 */ M2C_UNK fn_80215B84();
/* 215D50 */ M2C_UNK fn_80215D50();
/* 215D54 */ M2C_UNK grGreens_80215D54();
/* 215ED8 */ M2C_UNK grGreens_80215ED8();
/* 2166C4 */ M2C_UNK grGreens_802166C4();
/* 216C20 */ M2C_UNK grGreens_80216C20();
/* 216DE4 */ M2C_UNK fn_80216DE4();
/* 216E64 */ M2C_UNK grGreens_80216E64();
/* 216E6C */ M2C_UNK grGreens_80216E6C();
#define GALE01_21EF38
/* 21EF38 */ M2C_UNK grHeal_8021EF38();
/* 21EF3C */ M2C_UNK grHeal_8021EF3C();
/* 21EFBC */ M2C_UNK grHeal_8021EFBC();
/* 21EFC0 */ M2C_UNK grHeal_8021EFC0();
/* 21EFE4 */ M2C_UNK grHeal_8021EFE4();
/* 21EFEC */ M2C_UNK grHeal_8021EFEC();
/* 21F0D8 */ M2C_UNK grHeal_8021F0D8();
/* 21F170 */ M2C_UNK grHeal_8021F170();
/* 21F178 */ M2C_UNK grHeal_8021F178();
/* 21F17C */ M2C_UNK grHeal_8021F17C();
/* 21F180 */ M2C_UNK grHeal_8021F180();
/* 21F41C */ M2C_UNK grHeal_8021F41C();
/* 21F424 */ M2C_UNK fn_8021F424();
/* 21F474 */ M2C_UNK grHeal_8021F474();
/* 21F4BC */ M2C_UNK grHeal_8021F4BC();
/* 21F4C0 */ M2C_UNK fn_8021F4C0();
/* 21F4E8 */ M2C_UNK grHeal_8021F4E8();
/* 21F5C8 */ M2C_UNK grHeal_8021F5C8();
/* 21F5CC */ M2C_UNK grHeal_8021F5CC();
/* 21F5D4 */ M2C_UNK grHeal_8021F5D4();
/* 21F5D8 */ M2C_UNK grHeal_8021F5D8();
/* 21F5DC */ M2C_UNK grHeal_8021F5DC();
/* 21F618 */ M2C_UNK grHeal_8021F618();
/* 21F620 */ M2C_UNK grHeal_8021F620();
/* 21F624 */ M2C_UNK grHeal_8021F624();
/* 21F628 */ M2C_UNK grHeal_8021F628();
/* 21F6F8 */ M2C_UNK grHeal_8021F6F8();
/* 21F6FC */ M2C_UNK grHeal_8021F6FC();
/* 21F704 */ M2C_UNK grHeal_8021F704();
/* 21F708 */ M2C_UNK grHeal_8021F708();
/* 21F70C */ M2C_UNK grHeal_8021F70C();
/* 21F79C */ M2C_UNK grHeal_8021F79C();
/* 21F830 */ M2C_UNK grHeal_8021F830();
/* 21F838 */ M2C_UNK grHeal_8021F838();
#define GALE01_21C750
#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);
/* 21C750 */ M2C_UNK grHomeRun_8021C750();
/* 21C754 */ M2C_UNK grHomeRun_8021C754();
/* 21C7FC */ M2C_UNK grHomeRun_8021C7FC();
/* 21C800 */ M2C_UNK grHomeRun_8021C800();
/* 21C824 */ bool grHomeRun_8021C824();
/* 21C82C */ M2C_UNK grHomeRun_8021C82C();
/* 21C914 */ M2C_UNK grHomeRun_8021C914();
/* 21CB10 */ bool grHomeRun_8021CB10();
/* 21CB18 */ M2C_UNK grHomeRun_8021CB18();
/* 21CB1C */ M2C_UNK grHomeRun_8021CB1C();
/* 21CB20 */ M2C_UNK grHomeRun_8021CB20();
/* 21D678 */ bool grHomeRun_8021D678();
/* 21D680 */ M2C_UNK grHomeRun_8021D680();
/* 21DEB0 */ M2C_UNK grHomeRun_8021DEB0();
/* 21DEB4 */ M2C_UNK grHomeRun_8021DEB4();
/* 21DEE0 */ bool grHomeRun_8021DEE0();
/* 21DEE8 */ M2C_UNK grHomeRun_8021DEE8();
/* 21DEEC */ M2C_UNK grHomeRun_8021DEEC();
/* 21DEF0 */ M2C_UNK grHomeRun_8021DEF0();
/* 21DF48 */ bool grHomeRun_8021DF48();
/* 21DF50 */ M2C_UNK grHomeRun_8021DF50();
/* 21E008 */ M2C_UNK grHomeRun_8021E008();
/* 21E038 */ M2C_UNK grHomeRun_8021E038();
/* 21E064 */ bool grHomeRun_8021E064();
/* 21E06C */ M2C_UNK grHomeRun_8021E06C();
/* 21E070 */ M2C_UNK grHomeRun_8021E070();
/* 21E074 */ M2C_UNK grHomeRun_8021E074();
/* 21E0CC */ bool grHomeRun_8021E0CC();
/* 21E0D4 */ M2C_UNK grHomeRun_8021E0D4();
/* 21E18C */ M2C_UNK grHomeRun_8021E18C();
/* 21E1BC */ M2C_UNK grHomeRun_8021E1BC();
/* 21E1E8 */ bool grHomeRun_8021E1E8();
/* 21E1F0 */ M2C_UNK grHomeRun_8021E1F0();
/* 21E1F4 */ M2C_UNK grHomeRun_8021E1F4();
/* 21E1F8 */ M2C_UNK grHomeRun_8021E1F8();
/* 21E250 */ bool grHomeRun_8021E250();
/* 21E258 */ M2C_UNK grHomeRun_8021E258();
/* 21E310 */ M2C_UNK grHomeRun_8021E310();
/* 21E340 */ M2C_UNK grHomeRun_8021E340();
/* 21E36C */ bool grHomeRun_8021E36C();
/* 21E374 */ M2C_UNK grHomeRun_8021E374();
/* 21E378 */ M2C_UNK grHomeRun_8021E378();
/* 21E37C */ M2C_UNK grHomeRun_8021E37C();
/* 21E3D4 */ bool grHomeRun_8021E3D4();
/* 21E3DC */ M2C_UNK grHomeRun_8021E3DC();
/* 21E494 */ M2C_UNK grHomeRun_8021E494();
/* 21E4C4 */ M2C_UNK grHomeRun_8021E4C4();
/* 21E4F0 */ bool grHomeRun_8021E4F0();
/* 21E4F8 */ M2C_UNK grHomeRun_8021E4F8();
/* 21E4FC */ M2C_UNK grHomeRun_8021E4FC();
/* 21E500 */ M2C_UNK grHomeRun_8021E500();
/* 21E994 */ M2C_UNK fn_8021E994();
/* 21EA30 */ M2C_UNK grHomeRun_8021EA30();
/* 21EAF8 */ M2C_UNK grHomeRun_8021EAF8();
/* 21EB10 */ void fn_8021EB10(HSD_GObj* target_cam_gobj);
/* 21EC58 */ M2C_UNK grHomeRun_8021EC58();
/* 21ED74 */ M2C_UNK grHomeRun_8021ED74();
/* 21EDD4 */ M2C_UNK grHomeRun_8021EDD4();
/* 21EEB4 */ bool grHomeRun_8021EEB4(void);
/* 21EEBC */ M2C_UNK grHomeRun_8021EEBC();
/* 21EF10 */ M2C_UNK grHomeRun_8021EF10();
#define GALE01_1F6868
/* 1F6868 */ M2C_UNK grIceMt_801F6868();
/* 1F686C */ M2C_UNK grIceMt_801F686C();
/* 1F7080 */ M2C_UNK grIceMt_801F7080();
/* 1F71DC */ M2C_UNK grIceMt_801F71DC();
/* 1F71E0 */ M2C_UNK grIceMt_801F71E0();
/* 1F71E8 */ M2C_UNK grIceMt_801F71E8();
/* 1F72D4 */ M2C_UNK grIceMt_801F72D4();
/* 1F75DC */ M2C_UNK grIceMt_801F75DC();
/* 1F75E4 */ M2C_UNK grIceMt_801F75E4();
/* 1F75E8 */ M2C_UNK grIceMt_801F75E8();
/* 1F75EC */ void fn_801F75EC(Ground_GObj*);
/* 1F75FC */ M2C_UNK grIceMt_801F75FC();
/* 1F7720 */ M2C_UNK grIceMt_801F7720();
/* 1F7728 */ M2C_UNK grIceMt_801F7728();
/* 1F77AC */ M2C_UNK grIceMt_801F77AC();
/* 1F77B0 */ M2C_UNK fn_801F77B0();
/* 1F785C */ M2C_UNK grIceMt_801F785C();
/* 1F796C */ M2C_UNK grIceMt_801F796C();
/* 1F7A2C */ M2C_UNK grIceMt_801F7A2C();
/* 1F7D90 */ M2C_UNK grIceMt_801F7D90();
/* 1F7D94 */ M2C_UNK grIceMt_801F7D94();
/* 1F7EE0 */ M2C_UNK grIceMt_801F7EE0();
/* 1F7EE8 */ M2C_UNK grIceMt_801F7EE8();
/* 1F7F1C */ M2C_UNK grIceMt_801F7F1C();
/* 1F7F70 */ M2C_UNK grIceMt_801F7F70();
/* 1F8154 */ M2C_UNK grIceMt_801F8154();
/* 1F815C */ M2C_UNK grIceMt_801F815C();
/* 1F81B4 */ M2C_UNK grIceMt_801F81B4();
/* 1F8208 */ M2C_UNK grIceMt_801F8208();
/* 1F835C */ M2C_UNK grIceMt_801F835C();
/* 1F8364 */ M2C_UNK grIceMt_801F8364();
/* 1F8398 */ M2C_UNK grIceMt_801F8398();
/* 1F83EC */ M2C_UNK grIceMt_801F83EC();
/* 1F85BC */ M2C_UNK grIceMt_801F85BC();
/* 1F85C4 */ M2C_UNK grIceMt_801F85C4();
/* 1F8608 */ M2C_UNK grIceMt_801F8608();
/* 1F865C */ M2C_UNK grIceMt_801F865C();
/* 1F87C0 */ M2C_UNK grIceMt_801F87C0();
/* 1F87C8 */ M2C_UNK grIceMt_801F87C8();
/* 1F87FC */ M2C_UNK grIceMt_801F87FC();
/* 1F8850 */ M2C_UNK grIceMt_801F8850();
/* 1F89A4 */ M2C_UNK grIceMt_801F89A4();
/* 1F89AC */ M2C_UNK grIceMt_801F89AC();
/* 1F89E0 */ M2C_UNK grIceMt_801F89E0();
/* 1F8A34 */ M2C_UNK grIceMt_801F8A34();
/* 1F8B08 */ M2C_UNK grIceMt_801F8B08();
/* 1F8B10 */ M2C_UNK grIceMt_801F8B10();
/* 1F8C60 */ M2C_UNK grIceMt_801F8C60();
/* 1F8C64 */ M2C_UNK fn_801F8C64();
/* 1F8CDC */ M2C_UNK grIceMt_801F8CDC();
/* 1F8E58 */ M2C_UNK fn_801F8E58();
/* 1F9038 */ M2C_UNK fn_801F9038();
/* 1F9150 */ M2C_UNK fn_801F9150();
/* 1F91A4 */ M2C_UNK fn_801F91A4();
/* 1F91A8 */ M2C_UNK fn_801F91A8();
/* 1F91EC */ M2C_UNK grIceMt_801F91EC();
/* 1F929C */ M2C_UNK grIceMt_801F929C();
/* 1F9338 */ M2C_UNK fn_801F9338();
/* 1F9448 */ M2C_UNK fn_801F9448();
/* 1F9558 */ M2C_UNK fn_801F9558();
/* 1F9668 */ M2C_UNK grIceMt_801F9668();
/* 1F96E0 */ M2C_UNK grIceMt_801F96E0();
/* 1F98A8 */ M2C_UNK grIceMt_801F98A8();
/* 1F993C */ M2C_UNK grIceMt_801F993C();
/* 1F9ACC */ M2C_UNK grIceMt_801F9ACC();
/* 1FA0BC */ M2C_UNK grIceMt_801FA0BC();
/* 1FA364 */ M2C_UNK grIceMt_801FA364();
/* 1FA4CC */ M2C_UNK fn_801FA4CC();
/* 1FA500 */ M2C_UNK grIceMt_801FA500();
/* 1FA6D8 */ M2C_UNK grIceMt_801FA6D8();
/* 1FA728 */ void grIceMt_801FA728(Vec3*);
/* 1FA7F0 */ M2C_UNK grIceMt_801FA7F0();
/* 1FA854 */ M2C_UNK grIceMt_801FA854();
/* 1FA8F8 */ M2C_UNK grIceMt_801FA8F8();
/* 1FA900 */ M2C_UNK grIceMt_801FA900();
#define GALE01_1FA908
/* 1FA908 */ M2C_UNK grInishie1_801FA908();
/* 1FA90C */ M2C_UNK grInishie1_801FA90C();
/* 1FA984 */ M2C_UNK grInishie1_801FA984();
/* 1FA988 */ M2C_UNK grInishie1_801FA988();
/* 1FA9AC */ M2C_UNK grInishie1_801FA9AC();
/* 1FA9B4 */ M2C_UNK grInishie1_801FA9B4();
/* 1FAAA0 */ M2C_UNK grInishie1_801FAAA0();
/* 1FAACC */ M2C_UNK grInishie1_801FAACC();
/* 1FAAD4 */ M2C_UNK grInishie1_801FAAD4();
/* 1FAAD8 */ M2C_UNK grInishie1_801FAAD8();
/* 1FAADC */ M2C_UNK grInishie1_801FAADC();
/* 1FAB60 */ M2C_UNK grInishie1_801FAB60();
/* 1FAB68 */ M2C_UNK grInishie1_801FAB68();
/* 1FABB0 */ M2C_UNK grInishie1_801FABB0();
/* 1FABB4 */ M2C_UNK grInishie1_801FABB4();
/* 1FABF4 */ M2C_UNK grInishie1_801FABF4();
/* 1FABFC */ M2C_UNK grInishie1_801FABFC();
/* 1FAC00 */ M2C_UNK grInishie1_801FAC00();
/* 1FAC04 */ M2C_UNK grInishie1_801FAC04();
/* 1FAC50 */ M2C_UNK grInishie1_801FAC50();
/* 1FAC58 */ M2C_UNK grInishie1_801FAC58();
/* 1FAD80 */ M2C_UNK grInishie1_801FAD80();
/* 1FAD84 */ M2C_UNK grInishie1_801FAD84();
/* 1FB0AC */ M2C_UNK grInishie1_801FB0AC();
/* 1FB3F0 */ M2C_UNK grInishie1_801FB3F0();
/* 1FBA34 */ M2C_UNK grInishie1_801FBA34();
/* 1FBAA0 */ M2C_UNK grInishie1_801FBAA0();
/* 1FBC4C */ M2C_UNK grInishie1_801FBC4C();
/* 1FBCEC */ M2C_UNK grInishie1_801FBCEC();
/* 1FBEB8 */ M2C_UNK fn_801FBEB8();
/* 1FBF6C */ M2C_UNK fn_801FBF6C();
/* 1FC018 */ M2C_UNK grInishie1_801FC018();
/* 1FC110 */ M2C_UNK grInishie1_801FC110();
/* 1FC4A0 */ M2C_UNK grInishie1_801FC4A0();
/* 1FC664 */ M2C_UNK grInishie1_801FC664();
/* 1FC9AC */ M2C_UNK fn_801FC9AC();
/* 1FCAAC */ bool grInishie1_801FCAAC(enum_t);
/* 1FCB10 */ M2C_UNK grInishie1_801FCB10();
/* 1FCBB0 */ M2C_UNK grInishie1_801FCBB0();
/* 1FCBB8 */ M2C_UNK grInishie1_801FCBB8();
#define GALE01_1FCBC0
/* 1FCBC0 */ M2C_UNK grInishie2_801FCBC0();
/* 1FCBC4 */ M2C_UNK grInishie2_801FCBC4();
/* 1FCCAC */ M2C_UNK grInishie2_801FCCAC();
/* 1FCCB0 */ M2C_UNK grInishie2_801FCCB0();
/* 1FCCD4 */ M2C_UNK grInishie2_801FCCD4();
/* 1FCCDC */ M2C_UNK grInishie2_801FCCDC();
/* 1FCDC8 */ M2C_UNK grInishie2_801FCDC8();
/* 1FCDF4 */ M2C_UNK grInishie2_801FCDF4();
/* 1FCDFC */ M2C_UNK grInishie2_801FCDFC();
/* 1FCE00 */ M2C_UNK grInishie2_801FCE00();
/* 1FCE04 */ M2C_UNK grInishie2_801FCE04();
/* 1FCF24 */ M2C_UNK grInishie2_801FCF24();
/* 1FCF2C */ M2C_UNK grInishie2_801FCF2C();
/* 1FCFCC */ M2C_UNK grInishie2_801FCFCC();
/* 1FD014 */ M2C_UNK grInishie2_801FD014();
/* 1FD018 */ M2C_UNK grInishie2_801FD018();
/* 1FD0B4 */ M2C_UNK grInishie2_801FD0B4();
/* 1FD198 */ M2C_UNK grInishie2_801FD198();
/* 1FD21C */ M2C_UNK grInishie2_801FD21C();
/* 1FD224 */ M2C_UNK grInishie2_801FD224();
/* 1FD364 */ M2C_UNK grInishie2_801FD364();
/* 1FD368 */ M2C_UNK grInishie2_801FD368();
/* 1FD3CC */ M2C_UNK grInishie2_801FD3CC();
/* 1FD448 */ M2C_UNK grInishie2_801FD448();
/* 1FD4CC */ M2C_UNK grInishie2_801FD4CC();
/* 1FD4F0 */ M2C_UNK grInishie2_801FD4F0();
/* 1FD64C */ M2C_UNK grInishie2_801FD64C();
/* 1FD654 */ M2C_UNK grInishie2_801FD654();
/* 1FD740 */ M2C_UNK grInishie2_801FD740();
/* 1FD744 */ M2C_UNK grInishie2_801FD744();
/* 1FD7A8 */ M2C_UNK grInishie2_801FD7A8();
/* 1FD824 */ M2C_UNK grInishie2_801FD824();
/* 1FD9EC */ M2C_UNK grInishie2_801FD9EC();
/* 1FDE8C */ M2C_UNK grInishie2_801FDE8C();
/* 1FDED0 */ M2C_UNK grInishie2_801FDED0();
/* 1FDED8 */ M2C_UNK grInishie2_801FDED8();
/* 1FDFB4 */ M2C_UNK grInishie2_801FDFB4();
/* 1FDFE4 */ M2C_UNK grInishie2_801FDFE4();
/* 1FDFE8 */ M2C_UNK grInishie2_801FDFE8();
/* 1FDFF0 */ M2C_UNK grInishie2_801FDFF0();
#define GALE01_1CBB84
/* 1CBB84 */ void grIzumi_801CBB84(int);
/* 1CBB88 */ void grIzumi_801CBB88(void);
/* 1CBC0C */ void grIzumi_801CBC0C(void);
/* 1CBCBC */ void grIzumi_801CBCBC(void);
/* 1CBCE0 */ bool grIzumi_801CBCE0(void);
/* 1CBCE8 */ HSD_GObj* grIzumi_801CBCE8(int gobj_id);
/* 1CBDD4 */ void grIzumi_801CBDD4(HSD_GObj* gobj);
/* 1CBE00 */ bool grIzumi_801CBE00(HSD_GObj* gobj);
/* 1CBE08 */ void grIzumi_801CBE08(HSD_GObj* gobj);
/* 1CBE0C */ void grIzumi_801CBE0C(HSD_GObj* gobj);
/* 1CBE10 */ void grIzumi_801CBE10(HSD_GObj* gobj);
/* 1CBE54 */ bool grIzumi_801CBE54(HSD_GObj* gobj);
/* 1CBE5C */ void grIzumi_801CBE5C(HSD_GObj* gobj);
/* 1CBE60 */ void grIzumi_801CBE60(HSD_GObj* gobj);
/* 1CBE64 */ void grIzumi_801CBE64(HSD_GObj* gobj);
/* 1CC0CC */ bool grIzumi_801CC0CC(HSD_GObj* gobj);
/* 1CC0D4 */ void grIzumi_801CC0D4(HSD_GObj* gobj);
/* 1CC338 */ void grIzumi_801CC338(HSD_GObj* gobj);
/* 1CC33C */ void grIzumi_801CC33C(HSD_GObj* gobj);
/* 1CC350 */ bool grIzumi_801CC350(HSD_GObj* gobj);
/* 1CC358 */ void grIzumi_801CC358(HSD_GObj* gobj);
/* 1CCA10 */ void grIzumi_801CCA10(HSD_GObj* gobj);
/* 1CCA14 */ void grIzumi_801CCA14(HSD_GObj* gobj);
/* 1CCA54 */ bool grIzumi_801CCA54(HSD_GObj* gobj);
/* 1CCA5C */ void grIzumi_801CCA5C(HSD_GObj* gobj);
/* 1CCA60 */ void grIzumi_801CCA60(HSD_GObj* gobj);
/* 1CCA64 */ void grIzumi_801CCA64(HSD_GObj* gobj);
/* 1CCB08 */ bool grIzumi_801CCB08(HSD_GObj* gobj);
/* 1CCB10 */ void grIzumi_801CCB10(HSD_GObj* gobj);
/* 1CCB14 */ void grIzumi_801CCB14(HSD_GObj* gobj);
/* 1CCB18 */ void grIzumi_801CCB18(HSD_GObj* gobj);
/* 1CCB90 */ void grIzumi_801CCB90(HSD_GObj* gobj, int 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, int renderpass);
/* 1CD090 */ HSD_TObj* grIzumi_801CD090(HSD_GObj* gobj, HSD_ImageDesc* image);
/* 1CD220 */ void grIzumi_801CD220(HSD_GObj* gobj, int);
/* 1CD278 */ DynamicsDesc* grIzumi_801CD278(enum_t);
/* 1CD280 */ bool grIzumi_801CD280(Vec3*, int, HSD_JObj*);
/* 1CD2D4 */ void grIzumi_801CD2D4(void);
#define GALE01_20741C
/* 20741C */ M2C_UNK grKinokoRoute_8020741C();
/* 207420 */ M2C_UNK grKinokoRoute_80207420();
/* 207490 */ M2C_UNK grKinokoRoute_80207490();
/* 2074D8 */ M2C_UNK grKinokoRoute_802074D8();
/* 207544 */ M2C_UNK grKinokoRoute_80207544();
/* 20754C */ M2C_UNK grKinokoRoute_8020754C();
/* 207634 */ M2C_UNK grKinokoRoute_80207634();
/* 2078E8 */ M2C_UNK grKinokoRoute_802078E8();
/* 2078F0 */ M2C_UNK grKinokoRoute_802078F0();
/* 207A94 */ M2C_UNK grKinokoRoute_80207A94();
/* 207A98 */ M2C_UNK grKinokoRoute_80207A98();
/* 207ACC */ M2C_UNK grKinokoRoute_80207ACC();
/* 207AD4 */ M2C_UNK grKinokoRoute_80207AD4();
/* 207AD8 */ M2C_UNK grKinokoRoute_80207AD8();
/* 207ADC */ M2C_UNK grKinokoRoute_80207ADC();
/* 207B20 */ M2C_UNK grKinokoRoute_80207B20();
/* 207B28 */ M2C_UNK grKinokoRoute_80207B28();
/* 207B2C */ M2C_UNK grKinokoRoute_80207B2C();
/* 207B30 */ M2C_UNK fn_80207B30();
/* 207B5C */ M2C_UNK grKinokoRoute_80207B5C();
/* 207C80 */ M2C_UNK grKinokoRoute_80207C80();
/* 207C88 */ M2C_UNK grKinokoRoute_80207C88();
/* 208368 */ M2C_UNK grKinokoRoute_80208368();
/* 20836C */ M2C_UNK grKinokoRoute_8020836C();
/* 208480 */ M2C_UNK fn_80208480();
/* 2084B4 */ M2C_UNK fn_802084B4();
/* 208564 */ M2C_UNK grKinokoRoute_80208564();
/* 208660 */ M2C_UNK fn_80208660();
/* 2086EC */ M2C_UNK grKinokoRoute_802086EC();
/* 208754 */ M2C_UNK grKinokoRoute_80208754();
/* 20875C */ M2C_UNK grKinokoRoute_8020875C();
#define GALE01_1D5238
/* 1D5238 */ void grKongo_801D5238(void);
/* 1D523C */ void grKongo_801D523C(void);
/* 1D52F8 */ void grKongo_801D52F8(void);
/* 1D52FC */ void grKongo_801D52FC(void);
/* 1D5338 */ s32 grKongo_801D5338(void);
/* 1D5340 */ HSD_GObj* grKongo_801D5340(s32);
/* 1D542C */ void fn_801D542C(HSD_GObj*);
/* 1D5490 */ void grKongo_801D5490(HSD_GObj*);
/* 1D5574 */ s32 grKongo_801D5574(void);
/* 1D557C */ void grKongo_801D557C(HSD_GObj*);
/* 1D55D4 */ void grKongo_801D55D4(void);
/* 1D55D8 */ void grKongo_801D55D8(HSD_GObj*);
/* 1D5774 */ s32 grKongo_801D5774(void);
/* 1D577C */ void grKongo_801D577C(HSD_GObj*);
/* 1D5FA4 */ void grKongo_801D5FA4(void);
/* 1D5FA8 */ void grKongo_801D5FA8(HSD_GObj*);
/* 1D5FD4 */ s32 grKongo_801D5FD4(void);
/* 1D5FDC */ void grKongo_801D5FDC(void);
/* 1D5FE0 */ void grKongo_801D5FE0(void);
/* 1D5FE4 */ void grKongo_801D5FE4(HSD_GObj*);
/* 1D6028 */ s32 grKongo_801D6028(void);
/* 1D6030 */ void grKongo_801D6030(void);
/* 1D6034 */ void grKongo_801D6034(void);
/* 1D6038 */ void grKongo_801D6038(HSD_GObj*);
/* 1D6064 */ s32 grKongo_801D6064(void);
/* 1D606C */ void grKongo_801D606C(void);
/* 1D6070 */ void grKongo_801D6070(void);
/* 1D6074 */ void grKongo_801D6074(HSD_GObj*);
/* 1D6190 */ s32 grKongo_801D6190(void);
/* 1D6198 */ void grKongo_801D6198(HSD_GObj*);
/* 1D6378 */ void grKongo_801D6378(void);
/* 1D637C */ void grKongo_801D637C(HSD_GObj*);
/* 1D64B4 */ s32 grKongo_801D64B4(void);
/* 1D64BC */ void grKongo_801D64BC(HSD_GObj*);
/* 1D6518 */ void grKongo_801D6518(void);
/* 1D651C */ void grKongo_801D651C(HSD_GObj*);
/* 1D6660 */ s32 grKongo_801D6660(void);
/* 1D6668 */ void grKongo_801D6668(HSD_GObj*);
/* 1D69AC */ void grKongo_801D69AC(void);
/* 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 */ M2C_UNK grKongo_801D7E78();
/* 1D7F78 */ bool grKongo_801D7F78(HSD_GObj*);
/* 1D8058 */ M2C_UNK grKongo_801D8058();
/* 1D8078 */ HSD_GObj* grKongo_801D8078(HSD_GObj*);
/* 1D8270 */ void grKongo_801D8270(HSD_GObj*);
/* 1D828C */ void grKongo_801D828C(HSD_GObj*);
/* 1D8314 */ f32 grKongo_801D8314(void);
/* 1D844C */ M2C_UNK grKongo_801D844C();
#define __GALE01_1D5238
/* 1D7700 */ static void fn_801D7700(Ground* gp, M2C_UNK, M2C_UNK, M2C_UNK,
mpLib_GroundEnum arg4);
/* 1D7E60 */ static void fn_801D7E60(Ground* gp, M2C_UNK, M2C_UNK, M2C_UNK,
mpLib_GroundEnum arg4);
/* 1D8134 */ static int fn_801D8134(HSD_GObj* arg0, HSD_GObj* arg1);
/* 1D8444 */ static bool grKongo_801D8444(void);
static StageCallbacks* grKg_803E16E0;
static struct {
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;
s32 unk84;
f32 unk88;
f32 unk8C;
f32 unk90;
f32 unk94;
f32 unk98;
}* grKg_804D6980;
extern StageInfo stage_info;
#define GALE01_1FDFF8
/* 1FDFF8 */ M2C_UNK grKraid_801FDFF8();
/* 1FDFFC */ M2C_UNK grKraid_801FDFFC();
/* 1FE094 */ M2C_UNK grKraid_801FE094();
/* 1FE098 */ M2C_UNK grKraid_801FE098();
/* 1FE0BC */ M2C_UNK grKraid_801FE0BC();
/* 1FE0C4 */ M2C_UNK grKraid_801FE0C4();
/* 1FE1B0 */ M2C_UNK grKraid_801FE1B0();
/* 1FE1DC */ M2C_UNK grKraid_801FE1DC();
/* 1FE1E4 */ M2C_UNK grKraid_801FE1E4();
/* 1FE1E8 */ M2C_UNK grKraid_801FE1E8();
/* 1FE1EC */ M2C_UNK grKraid_801FE1EC();
/* 1FE2C8 */ M2C_UNK grKraid_801FE2C8();
/* 1FE2D0 */ M2C_UNK grKraid_801FE2D0();
/* 1FE35C */ M2C_UNK grKraid_801FE35C();
/* 1FE360 */ M2C_UNK grKraid_801FE360();
/* 1FE3A4 */ M2C_UNK grKraid_801FE3A4();
/* 1FE3AC */ M2C_UNK grKraid_801FE3AC();
/* 1FE3B0 */ M2C_UNK grKraid_801FE3B0();
/* 1FE3B4 */ M2C_UNK grKraid_801FE3B4();
/* 1FE438 */ M2C_UNK grKraid_801FE438();
/* 1FE440 */ M2C_UNK grKraid_801FE440();
/* 1FE6D4 */ M2C_UNK grKraid_801FE6D4();
/* 1FE6D8 */ M2C_UNK grKraid_801FE6D8();
/* 1FE818 */ M2C_UNK grKraid_801FE818();
/* 1FE9F8 */ M2C_UNK grKraid_801FE9F8();
/* 1FEA00 */ M2C_UNK grKraid_801FEA00();
/* 1FEE54 */ M2C_UNK grKraid_801FEE54();
/* 1FF068 */ M2C_UNK grKraid_801FF068();
/* 1FF0E0 */ M2C_UNK grKraid_801FF0E0();
/* 1FF14C */ M2C_UNK grKraid_801FF14C();
/* 1FF150 */ M2C_UNK grKraid_801FF150();
/* 1FF154 */ M2C_UNK grKraid_801FF154();
/* 1FF15C */ M2C_UNK grKraid_801FF15C();
#define GALE01_21A620
/* 21A620 */ M2C_UNK grLast_8021A620();
/* 21A740 */ M2C_UNK grLast_8021A740();
/* 21A7C4 */ M2C_UNK grLast_8021A7C4();
/* 21A7C8 */ M2C_UNK grLast_8021A7C8();
/* 21A7EC */ bool grLast_8021A7EC();
/* 21A7F4 */ M2C_UNK grLast_8021A7F4();
/* 21A8E0 */ M2C_UNK grLast_8021A8E0();
/* 21A90C */ bool grLast_8021A90C();
/* 21A914 */ M2C_UNK grLast_8021A914();
/* 21A918 */ M2C_UNK grLast_8021A918();
/* 21A91C */ M2C_UNK grLast_8021A91C();
/* 21A960 */ bool grLast_8021A960();
/* 21A968 */ M2C_UNK grLast_8021A968();
/* 21A96C */ M2C_UNK grLast_8021A96C();
/* 21A970 */ M2C_UNK grLast_8021A970();
/* 21A99C */ bool grLast_8021A99C();
/* 21A9A4 */ M2C_UNK grLast_8021A9A4();
/* 21A9A8 */ M2C_UNK grLast_8021A9A8();
/* 21A9AC */ void fn_8021A9AC(Ground_GObj* gobj);
/* 21A9C4 */ M2C_UNK grLast_8021A9C4();
/* 21AAA8 */ bool grLast_8021AAA8();
/* 21AAB0 */ M2C_UNK grLast_8021AAB0();
/* 21AB30 */ M2C_UNK grLast_8021AB30();
/* 21AB34 */ M2C_UNK grLast_8021AB34();
/* 21AB78 */ bool grLast_8021AB78();
/* 21AB80 */ M2C_UNK grLast_8021AB80();
/* 21AB84 */ M2C_UNK grLast_8021AB84();
/* 21AB88 */ M2C_UNK grLast_8021AB88();
/* 21ABCC */ bool grLast_8021ABCC();
/* 21ABD4 */ M2C_UNK grLast_8021ABD4();
/* 21ABD8 */ M2C_UNK grLast_8021ABD8();
/* 21ABDC */ M2C_UNK grLast_8021ABDC();
/* 21AC20 */ bool grLast_8021AC20();
/* 21AC28 */ M2C_UNK grLast_8021AC28();
/* 21AC2C */ M2C_UNK grLast_8021AC2C();
/* 21AC30 */ M2C_UNK grLast_8021AC30();
/* 21ADC8 */ bool grLast_8021ADC8();
/* 21ADD0 */ M2C_UNK grLast_8021ADD0();
/* 21B23C */ M2C_UNK grLast_8021B23C();
/* 21B240 */ M2C_UNK grLast_8021B240();
/* 21B284 */ bool grLast_8021B284();
/* 21B28C */ M2C_UNK grLast_8021B28C();
/* 21B290 */ M2C_UNK grLast_8021B290();
/* 21B294 */ M2C_UNK grLast_8021B294();
/* 21B2D8 */ bool grLast_8021B2D8();
/* 21B2E0 */ M2C_UNK grLast_8021B2E0();
/* 21B2E4 */ M2C_UNK grLast_8021B2E4();
/* 21B2E8 */ M2C_UNK grLast_8021B2E8();
/* 21B5C4 */ M2C_UNK grLast_8021B5C4();
/* 21B920 */ M2C_UNK grLast_8021B920();
/* 21C40C */ M2C_UNK grLast_8021C40C();
/* 21C500 */ M2C_UNK grLast_8021C500();
/* 21C640 */ M2C_UNK grLast_8021C640();
/* 21C6AC */ M2C_UNK grLast_8021C6AC();
/* 21C740 */ bool grLast_8021C740();
/* 21C748 */ bool grLast_8021C748();
#define GALE01_1C96E8
#define _mtx_h_
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_Mtx_8037A230(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__Ff((mtx[0][col] * mtx[0][col]) +
(mtx[1][col] * mtx[1][col]) +
(mtx[2][col] * mtx[2][col]));
}
static inline f32 HSD_MtxColMagFloat(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 */ UnkGeneratorStruct* grLib_801C96F8(s32, s8, S32Vec3*);
/* 1C97DC */ void grLib_801C97DC(s32, s32, HSD_JObj*);
/* 1C9808 */ void grLib_801C9808(s32, s32, HSD_JObj*);
/* 1C9834 */ void grLib_801C9834(UnkGeneratorStruct*);
/* 1C9854 */ void grLib_801C9854(s32);
/* 1C9874 */ void grLib_801C9874(UnkGeneratorStruct*);
/* 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(s32);
/* 1C9E40 */ s16 grLib_801C9E40(void);
/* 1C9E50 */ void grLib_801C9E50(s16);
/* 1C9E60 */ bool grLib_801C9E60(Vec3*);
/* 1C9EE8 */ int grLib_801C9EE8(Vec3*, float);
#define GALE01_1C87D0
/* 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 */ M2C_UNK grMaterial_801C8CDC(HSD_GObj*);
/* 1C8CFC */ int grMaterial_801C8CFC(int, int, Ground*, HSD_JObj*, void (*)(void),
HSD_GObjEvent, int);
/* 1C8E08 */ void grMaterial_801C8E08(int);
/* 1C8E28 */ void grMaterial_801C8E28(HSD_GObj*);
/* 1C94D8 */ void grMaterial_801C94D8(M2C_UNK hsd_obj);
/* 1C95C4 */ void grMaterial_801C95C4(HSD_GObj*);
/* 1C9604 */ void grMaterial_801C9604(HSD_GObj* bg, int, bool);
/* 1C9698 */ void grMaterial_801C9698(HSD_GObj*);
#define GALE01_1EFC68
/* 1EFC68 */ M2C_UNK grMuteCity_801EFC68();
/* 1EFC6C */ M2C_UNK grMuteCity_801EFC6C();
/* 1EFCDC */ M2C_UNK grMuteCity_801EFCDC();
/* 1EFCE0 */ M2C_UNK grMuteCity_801EFCE0();
/* 1EFD04 */ bool grMuteCity_801EFD04();
/* 1EFD0C */ M2C_UNK grMuteCity_801EFD0C();
/* 1EFDF8 */ M2C_UNK grMuteCity_801EFDF8();
/* 1F0118 */ bool grMuteCity_801F0118();
/* 1F0120 */ M2C_UNK grMuteCity_801F0120();
/* 1F01B0 */ M2C_UNK grMuteCity_801F01B0();
/* 1F01B4 */ M2C_UNK grMuteCity_801F01B4();
/* 1F0288 */ bool grMuteCity_801F0288();
/* 1F0290 */ M2C_UNK grMuteCity_801F0290();
/* 1F040C */ M2C_UNK grMuteCity_801F040C();
/* 1F0410 */ M2C_UNK grMuteCity_801F0410();
/* 1F043C */ bool grMuteCity_801F043C();
/* 1F0444 */ M2C_UNK grMuteCity_801F0444();
/* 1F0448 */ M2C_UNK grMuteCity_801F0448();
/* 1F044C */ M2C_UNK grMuteCity_801F044C();
/* 1F04A8 */ bool grMuteCity_801F04A8();
/* 1F04B0 */ M2C_UNK grMuteCity_801F04B0();
/* 1F04B4 */ M2C_UNK grMuteCity_801F04B4();
/* 1F04B8 */ M2C_UNK grMuteCity_801F04B8();
/* 1F0948 */ M2C_UNK grMuteCity_801F0948();
/* 1F094C */ M2C_UNK grMuteCity_801F094C();
/* 1F0D20 */ M2C_UNK grMuteCity_801F0D20();
/* 1F0F4C */ M2C_UNK grMuteCity_801F0F4C();
/* 1F106C */ M2C_UNK grMuteCity_801F106C();
/* 1F1328 */ M2C_UNK grMuteCity_801F1328();
/* 1F173C */ void grMuteCity_801F173C(float);
/* 1F1754 */ void grMuteCity_801F1754(float);
/* 1F176C */ void grMuteCity_801F176C(float);
/* 1F1784 */ void grMuteCity_801F1784(float);
/* 1F179C */ void grMuteCity_801F179C(float);
/* 1F17B4 */ void grMuteCity_801F17B4(float);
/* 1F17CC */ void grMuteCity_801F17CC(float);
/* 1F17E4 */ void grMuteCity_801F17E4(float);
/* 1F17FC */ void grMuteCity_801F17FC(float);
/* 1F1814 */ void grMuteCity_801F1814(float);
/* 1F182C */ void grMuteCity_801F182C(float);
/* 1F1844 */ void grMuteCity_801F1844(float);
/* 1F185C */ void grMuteCity_801F185C(float);
/* 1F1874 */ void grMuteCity_801F1874(float);
/* 1F188C */ void grMuteCity_801F188C(float);
/* 1F18A4 */ void grMuteCity_801F18A4(float);
/* 1F18BC */ void grMuteCity_801F18BC(float);
/* 1F18D4 */ void grMuteCity_801F18D4(float);
/* 1F18EC */ void grMuteCity_801F18EC(float);
/* 1F1904 */ void grMuteCity_801F1904(float);
/* 1F191C */ void grMuteCity_801F191C(float);
/* 1F1934 */ void grMuteCity_801F1934(float);
/* 1F194C */ void grMuteCity_801F194C(float);
/* 1F1964 */ void grMuteCity_801F1964(float);
/* 1F197C */ void grMuteCity_801F197C(float);
/* 1F1994 */ void grMuteCity_801F1994(float);
/* 1F19AC */ void grMuteCity_801F19AC(float);
/* 1F19C4 */ void grMuteCity_801F19C4(float);
/* 1F19DC */ void grMuteCity_801F19DC(float);
/* 1F19F4 */ void grMuteCity_801F19F4(float);
/* 1F1A0C */ M2C_UNK fn_801F1A0C();
/* 1F1A34 */ M2C_UNK grMuteCity_801F1A34();
/* 1F28A8 */ M2C_UNK grMuteCity_801F28A8();
/* 1F290C */ M2C_UNK grMuteCity_801F290C();
/* 1F2AB0 */ M2C_UNK grMuteCity_801F2AB0();
/* 1F2B58 */ M2C_UNK fn_801F2B58();
/* 1F2BBC */ M2C_UNK grMuteCity_801F2BBC();
/* 1F2C10 */ M2C_UNK grMuteCity_801F2C10();
#define __GALE01_1EFC68
struct grMc_8049F4B8_t {
/* +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;
/* +F0 */ float xF0;
/* +F4 */ float xF4;
/* +F8 */ float xF8;
/* +FC */ float xFC;
/* +100 */ float x100;
/* +104 */ float x104;
/* +108 */ float x108;
/* +10C */ float x10C;
/* +110 */ float x110;
/* +114 */ float x114;
/* +118 */ float x118;
/* +11C */ float x11C;
/* +120 */ float x120;
/* +124 */ float x124;
/* +128 */ float x128;
/* +12C */ float x12C;
/* +130 */ float x130;
/* +134 */ float x134;
/* +138 */ float x138;
/* +13C */ float x13C;
/* +140 */ float x140;
/* +144 */ float x144;
/* +148 */ float x148;
/* +14C */ float x14C;
/* +150 */ float x150;
/* +154 */ float x154;
/* +158 */ float x158;
/* +15C */ float x15C;
/* +160 */ float x160;
/* +164 */ float x164;
/* +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 */ float x18C;
/* +190 */ float x190;
/* +194 */ float x194;
/* +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 */ float 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 */ float x1DC;
/* +1E0 */ float x1E0;
/* +1E4 */ float x1E4;
/* +1E8 */ float x1E8;
/* +1EC */ float x1EC;
/* +1F0 */ float x1F0;
/* +1F4 */ float x1F4;
/* +1F8 */ float x1F8;
/* +1FC */ float x1FC;
/* +200 */ float x200;
/* +204 */ float x204;
/* +208 */ float x208;
/* +20C */ float x20C;
/* +210 */ float x210;
/* +214 */ float x214;
/* +218 */ float x218;
/* +21C */ float x21C;
/* +220 */ float x220;
/* +224 */ float x224;
/* +228 */ float x228;
/* +22C */ float x22C;
/* +230 */ float x230;
/* +234 */ float x234;
/* +238 */ float x238;
/* +23C */ float 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;
/* +264 */ float x264;
/* +268 */ float x268;
/* +26C */ float x26C;
/* +270 */ float x270;
/* +274 */ float x274;
/* +278 */ float x278;
/* +27C */ float x27C;
/* +280 */ float x280;
/* +284 */ float x284;
/* +288 */ float x288;
/* +28C */ float x28C;
/* +290 */ float x290;
/* +294 */ float x294;
/* +298 */ float x298;
/* +29C */ float x29C;
/* +2A0 */ float x2A0;
/* +2A4 */ float x2A4;
/* +2A8 */ float x2A8;
/* +2AC */ float x2AC;
/* +2B0 */ float x2B0;
/* +2B4 */ float x2B4;
/* +2B8 */ float 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 */ float x318;
/* +31C */ float x31C;
/* +320 */ float x320;
/* +324 */ float x324;
/* +328 */ float x328;
/* +32C */ float x32C;
/* +330 */ float x330;
/* +334 */ float x334;
/* +338 */ float x338;
/* +33C */ float x33C;
/* +340 */ float x340;
/* +344 */ float x344;
/* +348 */ float 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 */ float x380;
/* +384 */ float x384;
/* +388 */ float x388;
/* +38C */ float x38C;
/* +390 */ float x390;
/* +394 */ float x394;
/* +398 */ float x398;
/* +39C */ float x39C;
/* +3A0 */ float x3A0;
/* +3A4 */ float x3A4;
/* +3A8 */ float x3A8;
/* +3AC */ float x3AC;
/* +3B0 */ float x3B0;
/* +3B4 */ float x3B4;
/* +3B8 */ float x3B8;
/* +3BC */ float x3BC;
/* +3C0 */ float x3C0;
/* +3C4 */ float x3C4;
/* +3C8 */ float x3C8;
/* +3CC */ float x3CC;
/* +3D0 */ float x3D0;
/* +3D4 */ float x3D4;
/* +3D8 */ float x3D8;
/* +3DC */ float x3DC;
/* +3E0 */ float x3E0;
/* +3E4 */ float x3E4;
/* +3E8 */ float x3E8;
/* +3EC */ float x3EC;
/* +3F0 */ float x3F0;
/* +3F4 */ float x3F4;
/* +3F8 */ float x3F8;
/* +3FC */ float x3FC;
/* +400 */ float x400;
/* +404 */ float x404;
/* +408 */ float x408;
/* +40C */ float x40C;
/* +410 */ float x410;
/* +414 */ float x414;
/* +418 */ float x418;
/* +41C */ float x41C;
/* +420 */ float x420;
/* +424 */ float x424;
/* +428 */ float 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;
/* +474 */ float x474;
/* +478 */ float x478;
/* +47C */ float x47C;
/* +480 */ float x480;
/* +484 */ float x484;
/* +488 */ float x488;
/* +48C */ float x48C;
/* +490 */ float x490;
/* +494 */ float x494;
/* +498 */ float x498;
/* +49C */ float x49C;
/* +4A0 */ float x4A0;
/* +4A4 */ float x4A4;
/* +4A8 */ float x4A8;
/* +4AC */ float x4AC;
/* +4B0 */ float x4B0;
/* +4B4 */ float x4B4;
/* +4B8 */ float x4B8;
/* +4BC */ float x4BC;
/* +4C0 */ float x4C0;
/* +4C4 */ float x4C4;
/* +4C8 */ float x4C8;
/* +4CC */ float x4CC;
/* +4D0 */ float x4D0;
/* +4D4 */ float x4D4;
/* +4D8 */ float x4D8;
/* +4DC */ float x4DC;
/* +4E0 */ float x4E0;
/* +4E4 */ float x4E4;
/* +4E8 */ float x4E8;
/* +4EC */ float x4EC;
/* +4F0 */ float x4F0;
/* +4F4 */ float x4F4;
/* +4F8 */ float x4F8;
/* +4FC */ float x4FC;
/* +500 */ float x500;
/* +504 */ float x504;
/* +508 */ float x508;
/* +50C */ float x50C;
/* +510 */ float x510;
/* +514 */ float x514;
/* +518 */ float x518;
/* +51C */ float x51C;
/* +520 */ float x520;
/* +524 */ float x524;
};
struct { int x[1 - 2 * !(sizeof(struct grMc_8049F4B8_t) == 0x528)]; };;
static struct grMc_8049F4B8_t grMc_8049F4B8;
#define GALE01_20F468
/* 20F468 */ M2C_UNK grOldKongo_8020F468();
/* 20F46C */ M2C_UNK grOldKongo_8020F46C();
/* 20F4E4 */ M2C_UNK grOldKongo_8020F4E4();
/* 20F4E8 */ M2C_UNK grOldKongo_8020F4E8();
/* 20F524 */ M2C_UNK grOldKongo_8020F524();
/* 20F52C */ M2C_UNK grOldKongo_8020F52C();
/* 20F618 */ M2C_UNK grOldKongo_8020F618();
/* 20F644 */ M2C_UNK grOldKongo_8020F644();
/* 20F64C */ M2C_UNK grOldKongo_8020F64C();
/* 20F650 */ M2C_UNK grOldKongo_8020F650();
/* 20F654 */ M2C_UNK grOldKongo_8020F654();
/* 20F6B4 */ M2C_UNK grOldKongo_8020F6B4();
/* 20F6BC */ M2C_UNK grOldKongo_8020F6BC();
/* 20F6E0 */ M2C_UNK grOldKongo_8020F6E0();
/* 20F6E4 */ M2C_UNK grOldKongo_8020F6E4();
/* 20F880 */ M2C_UNK grOldKongo_8020F880();
/* 20F888 */ M2C_UNK grOldKongo_8020F888();
/* 210058 */ M2C_UNK grOldKongo_80210058();
/* 21005C */ M2C_UNK grOldKongo_8021005C();
/* 2100F4 */ M2C_UNK grOldKongo_802100F4();
/* 2100FC */ M2C_UNK grOldKongo_802100FC();
/* 210450 */ M2C_UNK grOldKongo_80210450();
/* 210454 */ M2C_UNK fn_80210454();
/* 2105AC */ void grOldKongo_802105AC(HSD_GObj*);
/* 2105C8 */ void grOldKongo_802105C8(HSD_GObj*);
/* 210650 */ M2C_UNK grOldKongo_80210650();
/* 210780 */ M2C_UNK grOldKongo_80210780();
/* 210788 */ M2C_UNK grOldKongo_80210788();
#define GALE01_2107DC
/* 2107DC */ M2C_UNK grOldPupupu_802107DC();
/* 2107E0 */ M2C_UNK grOldPupupu_802107E0();
/* 210884 */ M2C_UNK grOldPupupu_80210884();
/* 210888 */ M2C_UNK grOldPupupu_80210888();
/* 2108AC */ M2C_UNK grOldPupupu_802108AC();
/* 2108B4 */ M2C_UNK grOldPupupu_802108B4();
/* 21099C */ M2C_UNK grOldPupupu_8021099C();
/* 2109C8 */ M2C_UNK grOldPupupu_802109C8();
/* 2109D0 */ M2C_UNK grOldPupupu_802109D0();
/* 2109D4 */ M2C_UNK grOldPupupu_802109D4();
/* 2109D8 */ M2C_UNK grOldPupupu_802109D8();
/* 210A1C */ M2C_UNK grOldPupupu_80210A1C();
/* 210A24 */ M2C_UNK grOldPupupu_80210A24();
/* 210B00 */ M2C_UNK grOldPupupu_80210B00();
/* 210B04 */ M2C_UNK grOldPupupu_80210B04();
/* 210B48 */ M2C_UNK grOldPupupu_80210B48();
/* 210B50 */ M2C_UNK grOldPupupu_80210B50();
/* 210B54 */ M2C_UNK grOldPupupu_80210B54();
/* 210B58 */ M2C_UNK grOldPupupu_80210B58();
/* 210BB8 */ M2C_UNK grOldPupupu_80210BB8();
/* 210BC0 */ M2C_UNK grOldPupupu_80210BC0();
/* 210BE0 */ M2C_UNK grOldPupupu_80210BE0();
/* 210BE4 */ M2C_UNK grOldPupupu_80210BE4();
/* 210C2C */ M2C_UNK grOldPupupu_80210C2C();
/* 210C34 */ M2C_UNK grOldPupupu_80210C34();
/* 210C78 */ M2C_UNK grOldPupupu_80210C78();
/* 210C7C */ M2C_UNK grOldPupupu_80210C7C();
/* 210D08 */ M2C_UNK grOldPupupu_80210D08();
/* 210D10 */ M2C_UNK grOldPupupu_80210D10();
/* 21110C */ M2C_UNK grOldPupupu_8021110C();
/* 211110 */ M2C_UNK grOldPupupu_80211110();
/* 21118C */ M2C_UNK grOldPupupu_8021118C();
/* 211194 */ M2C_UNK grOldPupupu_80211194();
/* 211198 */ M2C_UNK grOldPupupu_80211198();
/* 21119C */ M2C_UNK grOldPupupu_8021119C();
/* 211284 */ M2C_UNK grOldPupupu_80211284();
/* 21128C */ M2C_UNK grOldPupupu_8021128C();
/* 2112F4 */ M2C_UNK fn_802112F4();
/* 2113E0 */ M2C_UNK grOldPupupu_802113E0();
/* 211C0C */ M2C_UNK grOldPupupu_80211C0C();
/* 211C10 */ M2C_UNK grOldPupupu_80211C10();
/* 211C14 */ M2C_UNK grOldPupupu_80211C14();
/* 211C1C */ M2C_UNK grOldPupupu_80211C1C();
/* 211C9C */ M2C_UNK grOldPupupu_80211C9C();
/* 211CA0 */ M2C_UNK grOldPupupu_80211CA0();
/* 211CA8 */ M2C_UNK grOldPupupu_80211CA8();
#define GALE01_20E798
/* 20E798 */ M2C_UNK grOldYoshi_8020E798();
/* 20E79C */ M2C_UNK grOldYoshi_8020E79C();
/* 20E824 */ M2C_UNK grOldYoshi_8020E824();
/* 20E828 */ M2C_UNK grOldYoshi_8020E828();
/* 20E84C */ M2C_UNK grOldYoshi_8020E84C();
/* 20E854 */ M2C_UNK grOldYoshi_8020E854();
/* 20E93C */ M2C_UNK grOldYoshi_8020E93C();
/* 20E968 */ M2C_UNK grOldYoshi_8020E968();
/* 20E970 */ M2C_UNK grOldYoshi_8020E970();
/* 20E974 */ M2C_UNK grOldYoshi_8020E974();
/* 20E978 */ M2C_UNK grOldYoshi_8020E978();
/* 20E9E0 */ M2C_UNK grOldYoshi_8020E9E0();
/* 20E9E8 */ M2C_UNK grOldYoshi_8020E9E8();
/* 20E9EC */ M2C_UNK grOldYoshi_8020E9EC();
/* 20E9F0 */ M2C_UNK grOldYoshi_8020E9F0();
/* 20EA5C */ M2C_UNK grOldYoshi_8020EA5C();
/* 20EA64 */ M2C_UNK grOldYoshi_8020EA64();
/* 20EA88 */ M2C_UNK grOldYoshi_8020EA88();
/* 20EA8C */ M2C_UNK grOldYoshi_8020EA8C();
/* 20EAEC */ M2C_UNK grOldYoshi_8020EAEC();
/* 20EAF4 */ M2C_UNK grOldYoshi_8020EAF4();
/* 20EAF8 */ M2C_UNK grOldYoshi_8020EAF8();
/* 20EAFC */ M2C_UNK grOldYoshi_8020EAFC();
/* 20EC08 */ M2C_UNK grOldYoshi_8020EC08();
/* 20EC10 */ M2C_UNK grOldYoshi_8020EC10();
/* 20EFC8 */ M2C_UNK grOldYoshi_8020EFC8();
/* 20EFCC */ M2C_UNK grOldYoshi_8020EFCC();
/* 20F080 */ M2C_UNK grOldYoshi_8020F080();
/* 20F088 */ M2C_UNK grOldYoshi_8020F088();
/* 20F2A4 */ M2C_UNK grOldYoshi_8020F2A4();
/* 20F2A8 */ M2C_UNK fn_8020F2A8();
/* 20F31C */ M2C_UNK grOldYoshi_8020F31C();
/* 20F404 */ M2C_UNK grOldYoshi_8020F404();
/* 20F40C */ M2C_UNK grOldYoshi_8020F40C();
#define GALE01_1E3734
/* 1E3734 */ M2C_UNK grOnett_801E3734();
/* 1E3738 */ M2C_UNK grOnett_801E3738();
/* 1E37C4 */ M2C_UNK grOnett_801E37C4();
/* 1E37C8 */ M2C_UNK grOnett_801E37C8();
/* 1E37EC */ M2C_UNK grOnett_801E37EC();
/* 1E37F4 */ M2C_UNK grOnett_801E37F4();
/* 1E38DC */ M2C_UNK grOnett_801E38DC();
/* 1E3920 */ M2C_UNK grOnett_801E3920();
/* 1E3928 */ M2C_UNK grOnett_801E3928();
/* 1E392C */ M2C_UNK grOnett_801E392C();
/* 1E3930 */ M2C_UNK fn_801E3930();
/* 1E3A34 */ M2C_UNK grOnett_801E3A34();
/* 1E3C58 */ M2C_UNK grOnett_801E3C58();
/* 1E3C60 */ M2C_UNK grOnett_801E3C60();
/* 1E3CE0 */ M2C_UNK grOnett_801E3CE0();
/* 1E3CE4 */ M2C_UNK grOnett_801E3CE4();
/* 1E3D98 */ M2C_UNK grOnett_801E3D98();
/* 1E3DA0 */ M2C_UNK grOnett_801E3DA0();
/* 1E40E0 */ M2C_UNK grOnett_801E40E0();
/* 1E40E4 */ M2C_UNK fn_801E40E4();
/* 1E41B0 */ void fn_801E41B0(Ground_GObj* gobj);
/* 1E41C8 */ M2C_UNK grOnett_801E41C8();
/* 1E43D8 */ M2C_UNK grOnett_801E43D8();
/* 1E43E0 */ M2C_UNK grOnett_801E43E0();
/* 1E502C */ M2C_UNK grOnett_801E502C();
/* 1E5030 */ M2C_UNK fn_801E5030();
/* 1E5140 */ M2C_UNK grOnett_801E5140();
/* 1E5194 */ M2C_UNK grOnett_801E5194();
/* 1E5214 */ M2C_UNK grOnett_801E5214();
/* 1E54B4 */ M2C_UNK fn_801E54B4();
/* 1E5538 */ M2C_UNK grOnett_801E5538();
/* 1E56FC */ M2C_UNK grOnett_801E56FC();
/* 1E5760 */ M2C_UNK grOnett_801E5760();
/* 1E5768 */ M2C_UNK grOnett_801E5768();
#define GALE01_1BFFA8
/* 1BFFB0 */ void Ground_801BFFB0(void);
/* 1C0378 */ void Ground_801C0378(int);
/* 1C0478 */ void Ground_801C0478(void* ptr);
/* 1C0498 */ f32 Ground_801C0498(void);
/* 1C04BC */ void Ground_801C04BC(f32);
/* 1C0508 */ s32 Ground_801C0508(void);
/* 1C052C */ void Ground_801C052C(s32*);
/* 1C0544 */ void Ground_801C0544(s32*);
/* 1C055C */ void Ground_801C055C(s32*);
/* 1C0574 */ void Ground_801C0574(s32*);
/* 1C058C */ void Ground_801C058C(s32*);
/* 1C05A4 */ void Ground_801C05A4(s32*);
/* 1C05BC */ void Ground_801C05BC(s32*);
/* 1C05D4 */ void Ground_801C05D4(s32*);
/* 1C05EC */ void Ground_801C05EC(s32*);
/* 1C0604 */ s32* Ground_801C0604(void);
/* 1C0618 */ s32* Ground_801C0618(void);
/* 1C062C */ s32* Ground_801C062C(void);
/* 1C0640 */ s32* Ground_801C0640(void);
/* 1C0654 */ s32* Ground_801C0654(void);
/* 1C0668 */ s32* Ground_801C0668(void);
/* 1C067C */ s32* Ground_801C067C(void);
/* 1C0690 */ s32* Ground_801C0690(void);
/* 1C06A4 */ s32* Ground_801C06A4(void);
/* 1C06B8 */ void Ground_801C06B8(InternalStageId);
/* 1C0754 */ void Ground_801C0754(StructPairWithStageID* pair);
/* 1C0800 */ void Ground_801C0800(StructPairWithStageID* pair);
/* 1C0F78 */ void Ground_801C0F78(StructPairWithStageID* pair);
/* 1C0FB8 */ void Ground_801C0FB8(StructPairWithStageID* pair);
/* 1C1074 */ void Ground_801C1074(StructPairWithStageID* 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 */ HSD_GObj* Ground_801C14D0(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 */ s16 Ground_801C1DD4(void);
/* 1C1DE4 */ void Ground_801C1DE4(s32*, s32*);
/* 1C1E00 */ void Ground_801C1E00(s32);
/* 1C1E18 */ s32 Ground_801C1E18(void);
/* 1C1E84 */ void* 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(s32, u32, s32*);
/* 1C2AD8 */ u8* Ground_801C2AD8(void);
/* 1C2AE8 */ f32 Ground_801C2AE8(s32);
/* 1C2BA4 */ HSD_GObj* Ground_801C2BA4(s32);
/* 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*);
/* 1C2ED0 */ bool Ground_801C2ED0(HSD_JObj*, s32);
/* 1C2FE0 */ void Ground_801C2FE0(HSD_GObj*);
/* 1C3128 */ bool Ground_801C3128(s32, void (*)(s32));
/* 1C3214 */ bool Ground_801C3214(int);
/* 1C3260 */ bool Ground_801C3260(s32);
/* 1C32AC */ void Ground_801C32AC(s32);
/* 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);
/* 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 */ M2C_UNK Ground_801C49B4(void);
/* 1C49F8 */ void* Ground_801C49F8(void);
/* 1C4A08 */ void Ground_801C4A08(HSD_GObj* gobj);
/* 1C4B50 */ void Ground_801C4B50(s32, s32, Vec3* result, f32);
/* 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 */ s16 Ground_801C5774(void);
/* 1C5784 */ void Ground_801C5784(s32);
/* 1C5794 */ s32 Ground_801C5794(void);
/* 1C57A4 */ HSD_GObj* Ground_801C57A4(void);
/* 1C57C8 */ HSD_GObj* Ground_801C57C8(void);
/* 1C57F0 */ f32 Ground_801C57F0(void);
/* 1C5800 */ void Ground_801C5800(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 GALE01_211CFC
/* 211CFC */ M2C_UNK grPura_80211CFC();
/* 211D00 */ M2C_UNK grPura_80211D00();
/* 211DD8 */ M2C_UNK grPura_80211DD8();
/* 211DDC */ M2C_UNK grPura_80211DDC();
/* 211E00 */ M2C_UNK grPura_80211E00();
/* 211E08 */ M2C_UNK grPura_80211E08();
/* 211EF0 */ M2C_UNK grPura_80211EF0();
/* 211F1C */ M2C_UNK grPura_80211F1C();
/* 211F24 */ M2C_UNK grPura_80211F24();
/* 211F28 */ M2C_UNK grPura_80211F28();
/* 211F2C */ M2C_UNK grPura_80211F2C();
/* 211F58 */ M2C_UNK grPura_80211F58();
/* 211F60 */ M2C_UNK grPura_80211F60();
/* 211F64 */ M2C_UNK grPura_80211F64();
/* 211F68 */ M2C_UNK grPura_80211F68();
/* 211FD0 */ M2C_UNK grPura_80211FD0();
/* 211FD8 */ M2C_UNK grPura_80211FD8();
/* 212020 */ M2C_UNK grPura_80212020();
/* 212024 */ M2C_UNK grPura_80212024();
/* 2120D8 */ M2C_UNK grPura_802120D8();
/* 2120E0 */ M2C_UNK grPura_802120E0();
/* 21228C */ M2C_UNK grPura_8021228C();
/* 212290 */ M2C_UNK grPura_80212290();
/* 212314 */ M2C_UNK grPura_80212314();
/* 21231C */ M2C_UNK grPura_8021231C();
/* 2125EC */ M2C_UNK grPura_802125EC();
/* 2125F0 */ M2C_UNK grPura_802125F0();
/* 212CD4 */ M2C_UNK grPura_80212CD4();
/* 212EF4 */ M2C_UNK grPura_80212EF4();
/* 212FC0 */ M2C_UNK grPura_80212FC0();
/* 213030 */ M2C_UNK grPura_80213030();
/* 2130C0 */ M2C_UNK grPura_802130C0();
/* 2130C8 */ M2C_UNK grPura_802130C8();
/* 2130D0 */ M2C_UNK fn_802130D0();
/* 213128 */ M2C_UNK grPura_80213128();
/* 213224 */ M2C_UNK grPura_80213224();
/* 213250 */ M2C_UNK grPura_80213250();
#define GALE01_2182C4
/* 2182C4 */ M2C_UNK grPushOn_802182C4();
/* 2182C8 */ M2C_UNK grPushOn_802182C8();
/* 218330 */ M2C_UNK grPushOn_80218330();
/* 218378 */ M2C_UNK grPushOn_80218378();
/* 2183DC */ M2C_UNK grPushOn_802183DC();
/* 2183E4 */ M2C_UNK grPushOn_802183E4();
/* 2184CC */ M2C_UNK grPushOn_802184CC();
/* 218590 */ M2C_UNK grPushOn_80218590();
/* 218598 */ M2C_UNK grPushOn_80218598();
/* 21859C */ M2C_UNK grPushOn_8021859C();
/* 2185A0 */ M2C_UNK grPushOn_802185A0();
/* 218670 */ M2C_UNK grPushOn_80218670();
/* 218678 */ M2C_UNK fn_80218678();
/* 2186C8 */ M2C_UNK grPushOn_802186C8();
/* 2187A4 */ M2C_UNK grPushOn_802187A4();
/* 2187A8 */ M2C_UNK grPushOn_802187A8();
/* 218880 */ M2C_UNK grPushOn_80218880();
/* 218888 */ M2C_UNK grPushOn_80218888();
/* 218ED0 */ M2C_UNK grPushOn_80218ED0();
/* 218ED4 */ M2C_UNK grPushOn_80218ED4();
/* 218FC0 */ M2C_UNK grPushOn_80218FC0();
/* 2190A0 */ M2C_UNK fn_802190A0();
/* 2190D0 */ M2C_UNK grPushOn_802190D0();
/* 219204 */ M2C_UNK grPushOn_80219204();
/* 219230 */ M2C_UNK grPushOn_80219230();
/* 2192A4 */ M2C_UNK fn_802192A4();
/* 219458 */ M2C_UNK grPushOn_80219458();
/* 219528 */ M2C_UNK grPushOn_80219528();
#define GALE01_1FF164
/* 1FF164 */ M2C_UNK grRCruise_801FF164();
/* 1FF168 */ M2C_UNK grRCruise_801FF168();
/* 1FF298 */ M2C_UNK grRCruise_801FF298();
/* 1FF29C */ M2C_UNK grRCruise_801FF29C();
/* 1FF2C0 */ M2C_UNK grRCruise_801FF2C0();
/* 1FF2C8 */ M2C_UNK grRCruise_801FF2C8();
/* 1FF3B4 */ M2C_UNK grRCruise_801FF3B4();
/* 1FF3E0 */ M2C_UNK grRCruise_801FF3E0();
/* 1FF3E8 */ M2C_UNK grRCruise_801FF3E8();
/* 1FF3EC */ M2C_UNK grRCruise_801FF3EC();
/* 1FF3F0 */ M2C_UNK grRCruise_801FF3F0();
/* 1FF434 */ M2C_UNK grRCruise_801FF434();
/* 1FF43C */ M2C_UNK grRCruise_801FF43C();
/* 1FF440 */ M2C_UNK grRCruise_801FF440();
/* 1FF444 */ M2C_UNK fn_801FF444();
/* 1FF5B4 */ M2C_UNK grRCruise_801FF5B4();
/* 1FF6CC */ M2C_UNK grRCruise_801FF6CC();
/* 1FF6D4 */ M2C_UNK grRCruise_801FF6D4();
/* 1FF738 */ M2C_UNK grRCruise_801FF738();
/* 1FF73C */ M2C_UNK grRCruise_801FF73C();
/* 1FF794 */ M2C_UNK grRCruise_801FF794();
/* 1FF79C */ M2C_UNK grRCruise_801FF79C();
/* 1FF7A0 */ M2C_UNK grRCruise_801FF7A0();
/* 1FF7A4 */ M2C_UNK grRCruise_801FF7A4();
/* 1FF8DC */ M2C_UNK grRCruise_801FF8DC();
/* 1FF8E4 */ M2C_UNK grRCruise_801FF8E4();
/* 1FF920 */ M2C_UNK grRCruise_801FF920();
/* 1FF924 */ M2C_UNK grRCruise_801FF924();
/* 1FFAD4 */ M2C_UNK grRCruise_801FFAD4();
/* 1FFADC */ M2C_UNK grRCruise_801FFADC();
/* 200070 */ M2C_UNK grRCruise_80200070();
/* 200074 */ M2C_UNK grRCruise_80200074();
/* 20014C */ M2C_UNK grRCruise_8020014C();
/* 200154 */ M2C_UNK grRCruise_80200154();
/* 20045C */ M2C_UNK grRCruise_8020045C();
/* 200460 */ M2C_UNK fn_80200460();
/* 200540 */ M2C_UNK grRCruise_80200540();
/* 200578 */ M2C_UNK fn_80200578();
/* 20071C */ M2C_UNK grRCruise_8020071C();
/* 200B48 */ M2C_UNK grRCruise_80200B48();
/* 200C04 */ M2C_UNK grRCruise_80200C04();
/* 2010A4 */ M2C_UNK fn_802010A4();
/* 201110 */ M2C_UNK grRCruise_80201110();
/* 201288 */ M2C_UNK grRCruise_80201288();
/* 201410 */ M2C_UNK grRCruise_80201410();
/* 201588 */ M2C_UNK grRCruise_80201588();
/* 201918 */ void grRCruise_80201918(Vec3*);
/* 201988 */ M2C_UNK grRCruise_80201988();
/* 201B60 */ M2C_UNK grRCruise_80201B60();
/* 201BE0 */ M2C_UNK fn_80201BE0();
/* 201C50 */ M2C_UNK grRCruise_80201C50();
/* 201C58 */ M2C_UNK grRCruise_80201C58();
#define GALE01_201C60
#define GALE01_2087B0
/* 2087B0 */ M2C_UNK grShrineRoute_802087B0();
/* 2087B8 */ M2C_UNK grShrineRoute_802087B8();
/* 2087BC */ M2C_UNK grShrineRoute_802087BC();
/* 20882C */ M2C_UNK grShrineRoute_8020882C();
/* 208850 */ M2C_UNK grShrineRoute_80208850();
/* 2088B8 */ M2C_UNK grShrineRoute_802088B8();
/* 2088C0 */ M2C_UNK grShrineRoute_802088C0();
/* 2089AC */ M2C_UNK grShrineRoute_802089AC();
/* 2089D8 */ M2C_UNK grShrineRoute_802089D8();
/* 2089E0 */ M2C_UNK grShrineRoute_802089E0();
/* 2089E4 */ M2C_UNK grShrineRoute_802089E4();
/* 2089E8 */ M2C_UNK grShrineRoute_802089E8();
/* 208A28 */ M2C_UNK grShrineRoute_80208A28();
/* 208A30 */ M2C_UNK grShrineRoute_80208A30();
/* 208A34 */ M2C_UNK grShrineRoute_80208A34();
/* 208A38 */ M2C_UNK fn_80208A38();
/* 208D14 */ M2C_UNK grShrineRoute_80208D14();
/* 208F0C */ M2C_UNK grShrineRoute_80208F0C();
/* 208F14 */ M2C_UNK fn_80208F14();
/* 208F70 */ M2C_UNK grShrineRoute_80208F70();
/* 209AEC */ M2C_UNK grShrineRoute_80209AEC();
/* 209AF0 */ M2C_UNK grShrineRoute_80209AF0();
/* 209BE4 */ M2C_UNK grShrineRoute_80209BE4();
/* 209BEC */ M2C_UNK grShrineRoute_80209BEC();
/* 20A100 */ M2C_UNK grShrineRoute_8020A100();
/* 20A104 */ M2C_UNK grShrineRoute_8020A104();
/* 20A214 */ M2C_UNK grShrineRoute_8020A214();
/* 20A21C */ M2C_UNK grShrineRoute_8020A21C();
/* 20A864 */ M2C_UNK grShrineRoute_8020A864();
/* 20A868 */ M2C_UNK grShrineRoute_8020A868();
/* 20A894 */ M2C_UNK grShrineRoute_8020A894();
/* 20A89C */ M2C_UNK grShrineRoute_8020A89C();
/* 20A8A0 */ M2C_UNK grShrineRoute_8020A8A0();
/* 20A8A4 */ M2C_UNK grShrineRoute_8020A8A4();
/* 20AA40 */ M2C_UNK grShrineRoute_8020AA40();
/* 20AB58 */ M2C_UNK grShrineRoute_8020AB58();
/* 20AC44 */ M2C_UNK grShrineRoute_8020AC44();
/* 20AD24 */ M2C_UNK fn_8020AD24();
/* 20AD58 */ M2C_UNK fn_8020AD58();
/* 20AE08 */ M2C_UNK fn_8020AE08();
/* 20AF38 */ M2C_UNK grShrineRoute_8020AF38();
/* 20B020 */ M2C_UNK grShrineRoute_8020B020();
/* 20B0AC */ M2C_UNK grShrineRoute_8020B0AC();
/* 20B104 */ M2C_UNK grShrineRoute_8020B104();
/* 20B10C */ M2C_UNK grShrineRoute_8020B10C();
#define GALE01_1D1018
/* 1D1018 */ M2C_UNK grStadium_801D1018();
/* 1D101C */ M2C_UNK grStadium_801D101C();
/* 1D10C8 */ M2C_UNK grStadium_801D10C8();
/* 1D10CC */ M2C_UNK grStadium_801D10CC();
/* 1D10F0 */ M2C_UNK grStadium_801D10F0();
/* 1D10F8 */ M2C_UNK grStadium_801D10F8();
/* 1D11E4 */ M2C_UNK fn_801D11E4();
/* 1D1290 */ M2C_UNK grStadium_801D1290();
/* 1D1388 */ M2C_UNK grStadium_801D1388();
/* 1D1390 */ M2C_UNK grStadium_801D1390();
/* 1D13C4 */ M2C_UNK grStadium_801D13C4();
/* 1D13C8 */ void fn_801D13C8(Ground_GObj*);
/* 1D13E0 */ M2C_UNK grStadium_801D13E0();
/* 1D1518 */ M2C_UNK grStadium_801D1518();
/* 1D1520 */ M2C_UNK grStadium_801D1520();
/* 1D156C */ M2C_UNK grStadium_801D156C();
/* 1D1570 */ M2C_UNK grStadium_801D1570();
/* 1D15FC */ M2C_UNK grStadium_801D15FC();
/* 1D1604 */ M2C_UNK grStadium_801D1604();
/* 1D1624 */ M2C_UNK grStadium_801D1624();
/* 1D1648 */ M2C_UNK grStadium_801D1648();
/* 1D16D4 */ M2C_UNK grStadium_801D16D4();
/* 1D16DC */ M2C_UNK grStadium_801D16DC();
/* 1D16FC */ M2C_UNK grStadium_801D16FC();
/* 1D1720 */ M2C_UNK grStadium_801D1720();
/* 1D17E0 */ M2C_UNK grStadium_801D17E0();
/* 1D17E8 */ M2C_UNK grStadium_801D17E8();
/* 1D1808 */ M2C_UNK grStadium_801D1808();
/* 1D1840 */ M2C_UNK grStadium_801D1840();
/* 1D19D0 */ M2C_UNK grStadium_801D19D0();
/* 1D19D8 */ M2C_UNK grStadium_801D19D8();
/* 1D19F8 */ M2C_UNK grStadium_801D19F8();
/* 1D1A38 */ M2C_UNK grStadium_801D1A38();
/* 1D1B40 */ M2C_UNK grStadium_801D1B40();
/* 1D1B48 */ M2C_UNK grStadium_801D1B48();
/* 1D1D84 */ M2C_UNK grStadium_801D1D84();
/* 1D1DE4 */ M2C_UNK grStadium_801D1DE4();
/* 1D1E10 */ M2C_UNK grStadium_801D1E10();
/* 1D1E18 */ M2C_UNK grStadium_801D1E18();
/* 1D1E1C */ M2C_UNK grStadium_801D1E1C();
/* 1D1E20 */ M2C_UNK grStadium_801D1E20();
/* 1D1EF8 */ M2C_UNK grStadium_801D1EF8();
/* 1D21E4 */ M2C_UNK grStadium_801D21E4();
/* 1D2278 */ M2C_UNK grStadium_801D2278();
/* 1D2344 */ M2C_UNK grStadium_801D2344();
/* 1D2528 */ M2C_UNK grStadium_801D2528();
/* 1D2A60 */ M2C_UNK grStadium_801D2A60();
/* 1D2BEC */ M2C_UNK grStadium_801D2BEC();
/* 1D2D78 */ M2C_UNK grStadium_801D2D78();
/* 1D2E24 */ M2C_UNK grStadium_801D2E24();
/* 1D2ED0 */ M2C_UNK fn_801D2ED0();
/* 1D2FD0 */ M2C_UNK fn_801D2FD0();
/* 1D3084 */ M2C_UNK fn_801D3084();
/* 1D3138 */ M2C_UNK grStadium_801D3138();
/* 1D32D0 */ M2C_UNK grStadium_801D32D0();
/* 1D3460 */ M2C_UNK grStadium_801D3460();
/* 1D384C */ M2C_UNK grStadium_801D384C();
/* 1D39A0 */ void grStadium_801D39A0(HSD_GObj*);
/* 1D3A0C */ M2C_UNK grStadium_801D3A0C();
/* 1D3B4C */ M2C_UNK grStadium_801D3B4C();
/* 1D3BBC */ M2C_UNK grStadium_801D3BBC();
/* 1D3F40 */ M2C_UNK grStadium_801D3F40();
/* 1D4040 */ M2C_UNK grStadium_801D4040();
/* 1D4084 */ M2C_UNK grStadium_801D4084();
/* 1D40C8 */ M2C_UNK grStadium_801D40C8();
/* 1D410C */ M2C_UNK grStadium_801D410C();
/* 1D4150 */ M2C_UNK grStadium_801D4150();
/* 1D4194 */ M2C_UNK grStadium_801D4194();
/* 1D4220 */ M2C_UNK fn_801D4220();
/* 1D42B8 */ M2C_UNK grStadium_801D42B8();
/* 1D4354 */ M2C_UNK grStadium_801D4354();
/* 1D435C */ M2C_UNK grStadium_801D435C();
/* 1D4548 */ M2C_UNK grStadium_801D4548();
/* 1D4FF8 */ bool grStadium_801D4FF8(int pl_slot);
/* 1D5074 */ M2C_UNK fn_801D5074();
/* 1D50B8 */ M2C_UNK grStadium_801D50B8();
/* 1D50C0 */ M2C_UNK grStadium_801D50C0();
/* 1D511C */ void grStadium_801D511C(void);
#define GALE01_1E302C
/* 1E3030 */ void grStory_801E3030(void);
/* 1E30A8 */ void grStory_801E30A8(void);
/* 1E30AC */ void grStory_801E30AC(void);
/* 1E30D0 */ bool grStory_801E30D0(void);
/* 1E30D8 */ HSD_GObj* grStory_801E30D8(int);
/* 1E31C0 */ void grStory_801E31C0(HSD_GObj*);
/* 1E3224 */ bool grStory_801E3224(HSD_GObj*);
/* 1E322C */ void grStory_801E322C(HSD_GObj*);
/* 1E3230 */ void grStory_801E3230(HSD_GObj*);
/* 1E3234 */ void grStory_801E3234(HSD_GObj*);
/* 1E332C */ bool grStory_801E332C(HSD_GObj*);
/* 1E3334 */ void grStory_801E3334(HSD_GObj*);
/* 1E336C */ void grStory_801E336C(HSD_GObj*);
/* 1E3370 */ void grStory_801E3370(HSD_GObj*);
/* 1E33D8 */ bool grStory_801E33D8(HSD_GObj*);
/* 1E33E0 */ void grStory_801E33E0(HSD_GObj*);
/* 1E3414 */ void grStory_801E3414(HSD_GObj*);
/* 1E3418 */ void grStory_801E3418(HSD_GObj*);
/* 1E366C */ void grStory_801E366C(HSD_GObj*);
/* 1E36D8 */ bool grStory_801E36D8(Vec3*, int, HSD_JObj*);
#define GALE01_21FC60
#define _grtclink_h_
void grTCLink_8021FF44(bool);
void grTCLink_8021FF48(void);
void grTCLink_8021FFB8(void);
void grTCLink_8021FFBC(void);
bool grTCLink_8021FFE0(void);
HSD_GObj* grTCLink_8021FFE8(int);
void grTCLink_802200D0(HSD_GObj*);
bool grTCLink_802200FC(HSD_GObj*);
void grTCLink_80220104(HSD_GObj*);
void grTCLink_80220108(HSD_GObj*);
void grTCLink_8022010C(HSD_GObj*);
bool grTCLink_8022015C(HSD_GObj*);
void grTCLink_80220164(HSD_GObj*);
void grTCLink_80220198(HSD_GObj*);
void grTCLink_8022019C(HSD_GObj*);
bool grTCLink_802201EC(HSD_GObj*);
void grTCLink_802201F4(HSD_GObj*);
void grTCLink_80220214(HSD_GObj*);
DynamicsDesc* grTCLink_80220218(int unused);
bool grTCLink_80220220(Vec3*, int, HSD_JObj*);
#define GALE01_220228
#define GALE01_221EF4
#define GALE01_2243F4
#define GALE01_206E2C
/* 206E2C */ M2C_UNK grTest_80206E2C();
/* 206E30 */ M2C_UNK grTest_80206E30();
/* 207014 */ M2C_UNK grTest_80207014();
/* 207018 */ M2C_UNK grTest_80207018();
/* 20703C */ M2C_UNK grTest_8020703C();
/* 207044 */ M2C_UNK grTest_80207044();
/* 207130 */ M2C_UNK grTest_80207130();
/* 20715C */ M2C_UNK grTest_8020715C();
/* 207164 */ M2C_UNK grTest_80207164();
/* 207168 */ M2C_UNK grTest_80207168();
/* 20716C */ M2C_UNK grTest_8020716C();
/* 2071BC */ M2C_UNK grTest_802071BC();
/* 2071C4 */ M2C_UNK grTest_802071C4();
/* 2073AC */ M2C_UNK grTest_802073AC();
/* 2073B0 */ M2C_UNK fn_802073B0();
/* 2073D0 */ M2C_UNK grTest_802073D0();
/* 2073FC */ M2C_UNK grTest_802073FC();
/* 207404 */ M2C_UNK grTest_80207404();
/* 207408 */ M2C_UNK grTest_80207408();
/* 20740C */ M2C_UNK grTest_8020740C();
/* 207414 */ M2C_UNK grTest_80207414();
#define GALE01_2207F0
/* 2207F0 */ void grTFalco_802207F0(int);
/* 2207F4 */ void grTFalco_802207F4(void);
/* 22086C */ void grTFalco_8022086C(void);
/* 220870 */ void grTFalco_80220870(void);
/* 220894 */ bool grTFalco_80220894(void);
/* 22089C */ HSD_GObj* grTFalco_8022089C(int);
/* 220984 */ void grTFalco_80220984(HSD_GObj*);
/* 2209B0 */ bool grTFalco_802209B0(HSD_GObj*);
/* 2209B8 */ void grTFalco_802209B8(HSD_GObj*);
/* 2209BC */ void grTFalco_802209BC(HSD_GObj*);
/* 2209C0 */ void grTFalco_802209C0(HSD_GObj*);
/* 220A10 */ bool grTFalco_80220A10(HSD_GObj*);
/* 220A18 */ void grTFalco_80220A18(HSD_GObj*);
/* 220A4C */ void grTFalco_80220A4C(HSD_GObj*);
/* 220A50 */ void grTFalco_80220A50(HSD_GObj*);
/* 220AA0 */ bool grTFalco_80220AA0(HSD_GObj*);
/* 220AA8 */ void grTFalco_80220AA8(HSD_GObj*);
/* 220AC8 */ void grTFalco_80220AC8(HSD_GObj*);
/* 220ACC */ DynamicsDesc* grTFalco_80220ACC(enum_t);
/* 220B78 */ bool grTFalco_80220B78(Vec3*, int, HSD_JObj*);
#define GALE01_220B80
#define _grtgamewatch_h_
void grTGameWatch_80224110(bool);
void grTGameWatch_80224114(void);
void grTGameWatch_80224184(void);
void grTGameWatch_80224188(void);
bool grTGameWatch_802241AC(void);
HSD_GObj* grTGameWatch_802241B4(int);
void grTGameWatch_8022429C(HSD_GObj*);
bool grTGameWatch_802242C8(HSD_GObj*);
void grTGameWatch_802242D0(HSD_GObj*);
void grTGameWatch_802242D4(HSD_GObj*);
void grTGameWatch_802242D8(HSD_GObj*);
bool grTGameWatch_80224328(HSD_GObj*);
void grTGameWatch_80224330(HSD_GObj*);
void grTGameWatch_80224364(HSD_GObj*);
void grTGameWatch_80224368(HSD_GObj*);
bool grTGameWatch_802243B8(HSD_GObj*);
void grTGameWatch_802243C0(HSD_GObj*);
void grTGameWatch_802243E0(HSD_GObj*);
DynamicsDesc* grTGameWatch_802243E4(int);
bool grTGameWatch_802243EC(Vec3*, int, HSD_JObj*);
#define _grtganon_h_
void grTGanon_802246D8(bool);
void grTGanon_802246DC(void);
void grTGanon_80224754(void);
void grTGanon_80224758(void);
bool grTGanon_8022477C(void);
HSD_GObj* grTGanon_80224784(int);
void grTGanon_8022486C(HSD_GObj*);
bool grTGanon_80224898(HSD_GObj*);
void grTGanon_802248A0(HSD_GObj*);
void grTGanon_802248A4(HSD_GObj*);
void grTGanon_802248A8(HSD_GObj*);
void grTGanon_802248A8(HSD_GObj*);
bool grTGanon_802248F8(HSD_GObj*);
void grTGanon_80224900(HSD_GObj*);
void grTGanon_80224934(HSD_GObj*);
void grTGanon_80224938(HSD_GObj*);
bool grTGanon_80224988(HSD_GObj*);
void grTGanon_80224990(HSD_GObj*);
void grTGanon_802249B0(HSD_GObj*);
DynamicsDesc* grTGanon_802249B4(int);
bool grTGanon_80224A4C(Vec3*, int, HSD_JObj*);
#define GALE01_220F10
/* 1C8DE0 */ void grMaterial_801C8DE0(s32, f32, f32, f32, f32, f32, f32, f32);
/* 220F10 */ void grTIceClimber_80220F10(bool);
/* 220F14 */ void grTIceClimber_80220F14(void);
/* 220F84 */ void grTIceClimber_80220F84(void);
/* 220F88 */ void grTIceClimber_80220F88(void);
/* 220FAC */ bool grTIceClimber_80220FAC(void);
/* 220FB4 */ HSD_GObj* grTIceClimber_80220FB4(int);
/* 22109C */ void grTIceClimber_8022109C(HSD_GObj*);
/* 2210C8 */ bool grTIceClimber_802210C8(HSD_GObj*);
/* 2210D0 */ void grTIceClimber_802210D0(HSD_GObj*);
/* 2210D4 */ void grTIceClimber_802210D4(HSD_GObj*);
/* 2210D8 */ void grTIceClimber_802210D8(HSD_GObj*);
/* 22114C */ bool grTIceClimber_8022114C(HSD_GObj*);
/* 221154 */ void grTIceClimber_80221154(HSD_GObj*);
/* 221188 */ void grTIceClimber_80221188(HSD_GObj*);
/* 22118C */ void grTIceClimber_8022118C(HSD_GObj*);
/* 2211DC */ bool grTIceClimber_802211DC(HSD_GObj*);
/* 2211E4 */ void grTIceClimber_802211E4(HSD_GObj*);
/* 221204 */ void grTIceClimber_80221204(HSD_GObj*);
/* 221208 */ void grTIceClimber_80221208(HSD_GObj*);
/* 221288 */ void grTIceClimber_80221288(HSD_GObj*);
/* 221354 */ DynamicsDesc* grTIceClimber_80221354(enum_t);
/* 22135C */ bool grTIceClimber_8022135C(Vec3*, int, HSD_JObj*);
/* 3E8B5C */ extern s16 grTIc_803E8B5C[];
#define GALE01_221364
#define GALE01_221648
#define GALE01_22192C
#define GALE01_221C10
/* 221C10 */ void grTLuigi_80221C10(int);
/* 221C14 */ void grTLuigi_80221C14(void);
/* 221C84 */ void grTLuigi_80221C84(void);
/* 221C88 */ void grTLuigi_80221C88(void);
/* 221CAC */ bool grTLuigi_80221CAC(void);
/* 221CB4 */ HSD_GObj* grTLuigi_80221CB4(int);
/* 221D9C */ void grTLuigi_80221D9C(HSD_GObj*);
/* 221DC8 */ bool grTLuigi_80221DC8(HSD_GObj*);
/* 221DD0 */ void grTLuigi_80221DD0(HSD_GObj*);
/* 221DD4 */ void grTLuigi_80221DD4(HSD_GObj*);
/* 221DD8 */ void grTLuigi_80221DD8(HSD_GObj*);
/* 221E28 */ bool grTLuigi_80221E28(HSD_GObj*);
/* 221E30 */ void grTLuigi_80221E30(HSD_GObj*);
/* 221E64 */ void grTLuigi_80221E64(HSD_GObj*);
/* 221E68 */ void grTLuigi_80221E68(HSD_GObj*);
/* 221EB8 */ bool grTLuigi_80221EB8(HSD_GObj*);
/* 221EC0 */ void grTLuigi_80221EC0(HSD_GObj*);
/* 221EE0 */ void grTLuigi_80221EE0(HSD_GObj*);
/* 221EE4 */ DynamicsDesc* grTLuigi_80221EE4(enum_t);
/* 221EEC */ bool grTLuigi_80221EEC(Vec3*, int, HSD_JObj*);
#define GALE01_21F840
#define GALE01_2221D8
/* 3E8FCC */ extern StageData grTMewtwo_803E8FCC;
#define GALE01_2225D0
#define GALE01_2228B4
/* 3E914C */ extern StageData grTPe_803E914C;
#define GALE01_222B98
#define _grtpikachu_h_
void grTPikachu_80222E7C(bool);
void grTPikachu_80222E80(void);
void grTPikachu_80222EF0(void);
void grTPikachu_80222EF4(void);
bool grTPikachu_80222F18(void);
HSD_GObj* grTPikachu_80222F20(int);
void grTPikachu_80223008(HSD_GObj*);
bool grTPikachu_80223034(HSD_GObj*);
void grTPikachu_8022303C(HSD_GObj*);
void grTPikachu_80223040(HSD_GObj*);
void grTPikachu_80223044(HSD_GObj*);
bool grTPikachu_80223094(HSD_GObj*);
void grTPikachu_8022309C(HSD_GObj*);
void grTPikachu_802230D0(HSD_GObj*);
void grTPikachu_802230D4(HSD_GObj*);
bool grTPikachu_80223124(HSD_GObj*);
void grTPikachu_8022312C(HSD_GObj*);
void grTPikachu_8022314C(HSD_GObj*);
DynamicsDesc* grTPikachu_80223150(int);
bool grTPikachu_80223158(Vec3*, int, HSD_JObj*);
#define _grtpurin_h_
void grTPurin_80223160(bool);
void grTPurin_80223164(void);
void grTPurin_802231DC(void);
void grTPurin_802231E0(void);
bool grTPurin_80223204(void);
HSD_GObj* grTPurin_8022320C(int);
void grTPurin_802232F4(HSD_GObj*);
bool grTPurin_80223320(HSD_GObj*);
void grTPurin_80223328(HSD_GObj*);
void grTPurin_8022332C(HSD_GObj*);
void grTPurin_80223330(HSD_GObj*);
bool grTPurin_80223380(HSD_GObj*);
void grTPurin_80223388(HSD_GObj*);
void grTPurin_80223478(HSD_GObj*);
void grTPurin_8022347C(HSD_GObj*);
bool grTPurin_802234CC(HSD_GObj*);
void grTPurin_802234D4(HSD_GObj*);
void grTPurin_802234F4(HSD_GObj*);
DynamicsDesc* grTPurin_802234F8(int);
bool grTPurin_80223578(Vec3*, int, HSD_JObj*);
#define GALE01_223580
#define GALE01_223864
#define GALE01_223B48
#define GALE01_223E2C
#define GALE01_20362C
/* 20362C */ M2C_UNK grVenom_8020362C();
/* 203B14 */ M2C_UNK grVenom_80203B14();
/* 203B18 */ M2C_UNK grVenom_80203B18();
/* 203DD0 */ M2C_UNK grVenom_80203DD0();
/* 203E80 */ M2C_UNK grVenom_80203E80();
/* 203EA4 */ M2C_UNK grVenom_80203EA4();
/* 203EAC */ M2C_UNK grVenom_80203EAC();
/* 203F98 */ M2C_UNK grVenom_80203F98();
/* 203FC4 */ M2C_UNK grVenom_80203FC4();
/* 203FCC */ M2C_UNK grVenom_80203FCC();
/* 203FD0 */ M2C_UNK grVenom_80203FD0();
/* 203FD4 */ M2C_UNK grVenom_80203FD4();
/* 2040A4 */ M2C_UNK grVenom_802040A4();
/* 2040AC */ M2C_UNK grVenom_802040AC();
/* 2040B0 */ M2C_UNK grVenom_802040B0();
/* 2040B4 */ M2C_UNK fn_802040B4();
/* 2040F0 */ M2C_UNK grVenom_802040F0();
/* 20427C */ M2C_UNK grVenom_8020427C();
/* 204284 */ M2C_UNK grVenom_80204284();
/* 204424 */ M2C_UNK grVenom_80204424();
/* 204428 */ M2C_UNK grVenom_80204428();
/* 204544 */ M2C_UNK grVenom_80204544();
/* 20454C */ M2C_UNK grVenom_8020454C();
/* 204B84 */ M2C_UNK grVenom_80204B84();
/* 204B88 */ M2C_UNK grVenom_80204B88();
/* 204CE0 */ M2C_UNK grVenom_80204CE0();
/* 204CE4 */ M2C_UNK grVenom_80204CE4();
/* 204CEC */ M2C_UNK grVenom_80204CEC();
/* 204DB0 */ M2C_UNK grVenom_80204DB0();
/* 204DD4 */ M2C_UNK grVenom_80204DD4();
/* 204EF4 */ M2C_UNK grVenom_80204EF4();
/* 204EFC */ M2C_UNK grVenom_80204EFC();
/* 204F1C */ M2C_UNK grVenom_80204F1C();
/* 204F20 */ M2C_UNK grVenom_80204F20();
/* 2052D8 */ M2C_UNK grVenom_802052D8();
/* 2052E0 */ M2C_UNK grVenom_802052E0();
/* 2053B0 */ M2C_UNK grVenom_802053B0();
/* 2056AC */ M2C_UNK grVenom_802056AC();
/* 2056B0 */ M2C_UNK grVenom_802056B0();
/* 205750 */ M2C_UNK grVenom_80205750();
/* 205758 */ M2C_UNK grVenom_80205758();
/* 205AD0 */ M2C_UNK grVenom_80205AD0();
/* 205AD4 */ M2C_UNK grVenom_80205AD4();
/* 205DF0 */ M2C_UNK grVenom_80205DF0();
/* 205DF8 */ M2C_UNK grVenom_80205DF8();
/* 205E84 */ M2C_UNK grVenom_80205E84();
/* 205F30 */ M2C_UNK grVenom_80205F30();
/* 206870 */ M2C_UNK grVenom_80206870();
/* 206874 */ M2C_UNK grVenom_80206874();
/* 206B68 */ M2C_UNK grVenom_80206B68();
/* 206B70 */ M2C_UNK grVenom_80206B70();
/* 206B90 */ M2C_UNK grVenom_80206B90();
/* 206B94 */ M2C_UNK grVenom_80206B94();
/* 206BBC */ M2C_UNK grVenom_80206BBC();
/* 206BC4 */ M2C_UNK grVenom_80206BC4();
/* 206BEC */ M2C_UNK grVenom_80206BEC();
/* 206BF0 */ M2C_UNK grVenom_80206BF0();
/* 206CB0 */ M2C_UNK grVenom_80206CB0();
/* 206D10 */ bool grVenom_80206D10(enum_t);
/* 206D74 */ M2C_UNK grVenom_80206D74();
/* 206D7C */ M2C_UNK grVenom_80206D7C();
#define GALE01_201FA0
/* 201FA0 */ M2C_UNK grYorster_80201FA0();
/* 201FA4 */ M2C_UNK grYorster_80201FA4();
/* 20200C */ M2C_UNK grYorster_8020200C();
/* 202010 */ M2C_UNK grYorster_80202010();
/* 202034 */ M2C_UNK grYorster_80202034();
/* 20203C */ M2C_UNK grYorster_8020203C();
/* 202124 */ M2C_UNK grYorster_80202124();
/* 202150 */ M2C_UNK grYorster_80202150();
/* 202158 */ M2C_UNK grYorster_80202158();
/* 20215C */ M2C_UNK grYorster_8020215C();
/* 202160 */ M2C_UNK fn_80202160();
/* 2021AC */ M2C_UNK grYorster_802021AC();
/* 20224C */ M2C_UNK grYorster_8020224C();
/* 202254 */ M2C_UNK grYorster_80202254();
/* 2022A0 */ M2C_UNK grYorster_802022A0();
/* 2022A4 */ M2C_UNK grYorster_802022A4();
/* 202428 */ M2C_UNK fn_80202428();
/* 2024F0 */ M2C_UNK fn_802024F0();
/* 20266C */ M2C_UNK grYorster_8020266C();
/* 202B5C */ M2C_UNK grYorster_80202B5C();
/* 202B64 */ M2C_UNK grYorster_80202B64();
#define GALE01_1CA394
/* 1CA394 */ int grZakoGenerator_801CA394(M2C_UNK, int, M2C_UNK, f32);
/* 1CA43C */ M2C_UNK grZakoGenerator_801CA43C();
/* 1CA67C */ M2C_UNK grZakoGenerator_801CA67C();
/* 1CA8B4 */ M2C_UNK grZakoGenerator_801CA8B4();
/* 1CAC14 */ void grZakoGenerator_801CAC14(void);
/* 1CACB8 */ void grZakoGenerator_801CACB8(Ground_GObj* gobj);
/* 1CADBC */ M2C_UNK fn_801CADBC();
/* 1CADE0 */ M2C_UNK grZakoGenerator_801CADE0();
/* 1CAE04 */ void grZakoGenerator_801CAE04(bool);
/* 1CAEB0 */ M2C_UNK grZakoGenerator_801CAEB0();
/* 1CAEF0 */ M2C_UNK grZakoGenerator_801CAEF0(bool);
/* 1CAF08 */ M2C_UNK grZakoGenerator_801CAF08();
#define __GALE01_1CA394
struct lbl_8049F030_t {
/* +0 */ char pad_0[0xA];
/* +A:0 */ u8 xA_b0 : 1;
/* +A:1 */ u8 xA_b1 : 1;
/* +A:2 */ u8 xA_b2 : 1;
/* +A:3 */ u8 xA_b3 : 1;
/* +A:4 */ u8 xA_b4 : 1;
/* +A:5 */ u8 xA_b5 : 1;
/* +A:6 */ u8 xA_b6 : 1;
/* +A:7 */ u8 xA_b7 : 1;
};
static struct lbl_8049F030_t lbl_8049F030;
#define GALE01_1D84A0
/* 1D84A0 */ M2C_UNK grZebes_801D84A0();
/* 1D84A4 */ M2C_UNK grZebes_801D84A4();
/* 1D8528 */ M2C_UNK grZebes_801D8528();
/* 1D852C */ M2C_UNK grZebes_801D852C();
/* 1D8550 */ M2C_UNK grZebes_801D8550();
/* 1D8558 */ M2C_UNK grZebes_801D8558();
/* 1D8644 */ M2C_UNK grZebes_801D8644();
/* 1D8814 */ M2C_UNK grZebes_801D8814();
/* 1D881C */ M2C_UNK grZebes_801D881C();
/* 1D90FC */ M2C_UNK grZebes_801D90FC();
/* 1D9100 */ M2C_UNK grZebes_801D9100();
/* 1D9254 */ M2C_UNK grZebes_801D9254();
/* 1D925C */ M2C_UNK grZebes_801D925C();
/* 1D93D8 */ M2C_UNK grZebes_801D93D8();
/* 1D93DC */ M2C_UNK grZebes_801D93DC();
/* 1D9408 */ M2C_UNK grZebes_801D9408();
/* 1D9410 */ M2C_UNK grZebes_801D9410();
/* 1D94EC */ M2C_UNK grZebes_801D94EC();
/* 1D94F0 */ void fn_801D94F0(Ground_GObj* gobj);
/* 1D9508 */ M2C_UNK grZebes_801D9508();
/* 1D95B0 */ M2C_UNK grZebes_801D95B0();
/* 1D95B8 */ M2C_UNK grZebes_801D95B8();
/* 1D9754 */ M2C_UNK grZebes_801D9754();
/* 1D9758 */ M2C_UNK fn_801D9758();
/* 1D9798 */ M2C_UNK grZebes_801D9798();
/* 1D99D8 */ M2C_UNK grZebes_801D99D8();
/* 1D99E0 */ M2C_UNK grZebes_801D99E0();
/* 1D9F2C */ M2C_UNK grZebes_801D9F2C();
/* 1D9F30 */ M2C_UNK grZebes_801D9F30();
/* 1D9F7C */ M2C_UNK grZebes_801D9F7C();
/* 1D9F84 */ M2C_UNK grZebes_801D9F84();
/* 1DA0C0 */ M2C_UNK grZebes_801DA0C0();
/* 1DA0C4 */ M2C_UNK grZebes_801DA0C4();
/* 1DA254 */ M2C_UNK grZebes_801DA254();
/* 1DA3E8 */ M2C_UNK grZebes_801DA3E8();
/* 1DA3F4 */ void grZebes_801DA3F4(M2C_UNK);
/* 1DA4FC */ M2C_UNK grZebes_801DA4FC();
/* 1DA528 */ M2C_UNK grZebes_801DA528();
/* 1DA9D8 */ void fn_801DA9D8(M2C_UNK arg0, Ground* gp, float* y, float z);
/* 1DA9F0 */ void fn_801DA9F0(M2C_UNK arg0, Ground* gp, float y, float* x);
/* 1DAA08 */ M2C_UNK grZebes_801DAA08();
/* 1DAC90 */ M2C_UNK fn_801DAC90();
/* 1DAE70 */ M2C_UNK grZebes_801DAE70();
/* 1DB088 */ M2C_UNK grZebes_801DB088();
/* 1DB3CC */ M2C_UNK grZebes_801DB3CC();
/* 1DBB60 */ M2C_UNK grZebes_801DBB60();
/* 1DC260 */ M2C_UNK grZebes_801DC260();
/* 1DC408 */ M2C_UNK grZebes_801DC408();
/* 1DC744 */ M2C_UNK grZebes_801DC744();
/* 1DC9DC */ M2C_UNK grZebes_801DC9DC();
/* 1DCB64 */ M2C_UNK fn_801DCB64();
/* 1DCBB0 */ M2C_UNK fn_801DCBB0();
/* 1DCBFC */ M2C_UNK fn_801DCBFC();
/* 1DCCB8 */ M2C_UNK grZebes_801DCCB8();
/* 1DCCC0 */ M2C_UNK grZebes_801DCCC0();
/* 1DCCC8 */ M2C_UNK grZebes_801DCCC8();
#define GALE01_20B160
/* 20B160 */ M2C_UNK grZebesRoute_8020B160();
/* 20B164 */ M2C_UNK grZebesRoute_8020B164();
/* 20B1D4 */ M2C_UNK grZebesRoute_8020B1D4();
/* 20B1F4 */ M2C_UNK grZebesRoute_8020B1F4();
/* 20B258 */ M2C_UNK grZebesRoute_8020B258();
/* 20B260 */ M2C_UNK grZebesRoute_8020B260();
/* 20B348 */ M2C_UNK grZebesRoute_8020B348();
/* 20B374 */ M2C_UNK grZebesRoute_8020B374();
/* 20B37C */ M2C_UNK grZebesRoute_8020B37C();
/* 20B380 */ M2C_UNK grZebesRoute_8020B380();
/* 20B384 */ M2C_UNK grZebesRoute_8020B384();
/* 20B3B0 */ M2C_UNK grZebesRoute_8020B3B0();
/* 20B3B8 */ M2C_UNK grZebesRoute_8020B3B8();
/* 20B3BC */ M2C_UNK grZebesRoute_8020B3BC();
/* 20B3C0 */ M2C_UNK grZebesRoute_8020B3C0();
/* 20B424 */ M2C_UNK grZebesRoute_8020B424();
/* 20B42C */ M2C_UNK grZebesRoute_8020B42C();
/* 20B4D4 */ M2C_UNK grZebesRoute_8020B4D4();
/* 20B4D8 */ M2C_UNK fn_8020B4D8();
/* 20B548 */ M2C_UNK grZebesRoute_8020B548();
/* 20B854 */ M2C_UNK grZebesRoute_8020B854();
/* 20B85C */ M2C_UNK grZebesRoute_8020B85C();
#define MELEE_GR_INLINES_H
#define GET_GROUND(gobj) ((Ground*) HSD_GObjGetUserData(gobj))
static inline void Ground_JObjInline1(HSD_GObj* gobj)
{
Ground* gp = ((Ground*) HSD_GObjGetUserData(gobj));
HSD_JObj* jobj = ((HSD_JObj*) HSD_GObjGetHSDObj(gobj));
Ground_801C2ED0(jobj, gp->map_id);
grAnime_801C8138(gobj, gp->map_id, 0);
}
#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);
/* 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 */ enum_t Stage_80225194(void);
/* 22519C */ s32 Stage_8022519C(InternalStageId idx);
/* 2251B4 */ void Stage_802251B4(InternalStageId idx, s32);
/* 2251E8 */ void Stage_802251E8(InternalStageId idx, s32*);
/* 22524C */ void Stage_8022524C(void);
/* 225298 */ void Stage_80225298(void);
/* 2252E4 */ void Stage_802252E4(InternalStageId idx, HSD_GObj*);
/* 22532C */ void Stage_8022532C(InternalStageId idx, s32);
#define MELEE_IF_FORWARD_H
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 enum IfDamagePlace {
Hundreds,
Tens,
Ones,
Percent,
HUD_PLACE_MAX
} IfDamagePlace;
#define GALE01_2F7288
/* 2F7AF8 */ void if_802F7AF8(s32);
/* 2F7BB4 */ void if_802F7BB4(s32);
/* 2F7C30 */ void if_802F7C30(s32);
/* 2F7D08 */ void if_802F7D08(s32);
#define GALE01_2F3394
/* 2F3394 */ M2C_UNK ifAll_802F3394();
/* 2F33CC */ M2C_UNK ifAll_802F33CC();
/* 2F3404 */ s32 ifAll_802F3404(void);
/* 2F3414 */ M2C_UNK ifAll_802F3414(void);
/* 2F3424 */ struct ifAll_804A0FD8_x18_t* ifAll_802F3424(int idx);
/* 2F343C */ void ifAll_802F343C(void);
/* 2F3690 */ M2C_UNK ifAll_802F3690(void);
/* 2F3698 */ void ifAll_HideHUD(void);
/* 2F36A4 */ void ifAll_ShowHUD(void);
/* 2F36B0 */ u8 ifAll_IsHUDHidden(void);
/* 2F36B8 */ M2C_UNK fn_802F36B8();
/* 2F370C */ M2C_UNK ifAll_802F370C();
/* 2F390C */ M2C_UNK ifAll_802F390C();
/* 2F3A64 */ M2C_UNK ifAll_802F3A64();
#define __GALE01_2F3394
struct ifAll_804A0FD8_x18_t {
char pad_0[0xC];
};
struct { int x[1 - 2 * !(sizeof(struct ifAll_804A0FD8_x18_t) == 0xC)]; };;
struct ifAll_804A0FD8_t {
/* 0x00 */ s32 unk_0;
/* 0x04 */ char pad_4[8];
/* 0x0C */ M2C_UNK xC;
/* 0x10 */ char pad_10[0x8];
/* 0x18 */ struct ifAll_804A0FD8_x18_t x18[2];
};
/* 4D6D58 */ static u8 ifAll_804D6D58;
/* 4D6D5C */ static M2C_UNK ifAll_804D6D5C;
/* 4A0FD8 */ static struct ifAll_804A0FD8_t ifAll_804A0FD8;
#define GALE01_2FB6E8
#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 */ u16 damage_percent;
/* +0C */ u16 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* unk258;
/* +25C */ void* jobj_desc_parent;
/* +260 */ HSD_AnimJoint* janim_selection_joints;
/* +264 */ void* janim_selection_textures;
/* +268 */ void* unk268;
/* +26C */ void* unk26C;
/* +270 */ void* unk270;
/* +274 */ void* unk274;
// 8 elements of size 0x28, what is this?
};
struct Element_803F9628_Obj_14 {
s32 padding[6];
s32 unk1C;
};
struct Element_803F9628 {
/* +00 */ HSD_GObj* x0;
/* +04 */ u32 x4;
/* +08 */ M2C_UNK x8;
/* +0C */ u32 xC; // flags?
/* +10 */ u32 x10; // flags?
/* +14 */ s32 x14;
/* +18 */ u32 x18;
/* +1C */ u32 x1C;
/* +20 */ u32 x20;
/* +24 */ u32 x24;
/* +28 */ u32 x28;
};
struct Thing_803F9628 {
Element_803F9628 things[8];
u32 extra[6];
};
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;
};
struct ifMagnify {
HSD_Joint* joint; // // ifMagnify_802fc3c0 accesses 0x804A1DE0 for a Joint
int x4;
int x8;
int xC;
int x10;
struct {
HSD_GObj* gobj; // ifMagnify_802fc750 accesses 0x804A1DF4 + slot * 0x10
// for a GObj
HSD_TObj* tobj; // ifMagnify_802fc3c0 accesses 0x804A1DF8 + slot * 0x10
// for a TObj
HSD_ImageDesc*
idesc; // ifMagnify_802FBBDC access 0x804A1DFC for an ImageDesc
struct {
u8 is_offscreen : 1;
u8 ignore_offscreen : 1;
u8 unk : 6;
} state;
} player[6];
u8 unk[0xF0 - 0x74];
};
/* 2FB6E8 */ s32 ifMagnify_802FB6E8(s32);
/* 2FB73C */ M2C_UNK ifMagnify_802FB73C();
/* 2FB8C0 */ M2C_UNK ifMagnify_802FB8C0();
/* 2FBBDC */ M2C_UNK ifMagnify_802FBBDC();
/* 2FC3BC */ M2C_UNK ifMagnify_802FC3BC();
/* 2FC3C0 */ M2C_UNK ifMagnify_802FC3C0();
/* 2FC618 */ M2C_UNK ifMagnify_802FC618();
/* 2FC750 */ M2C_UNK ifMagnify_802FC750();
/* 2FC7C0 */ M2C_UNK ifMagnify_802FC7C0();
/* 2FC870 */ M2C_UNK ifMagnify_802FC870();
/* 2FC8E8 */ M2C_UNK ifMagnify_802FC8E8();
/* 2FC940 */ M2C_UNK ifMagnify_802FC940();
/* 2FC998 */ bool ifMagnify_802FC998(s32 ply_slot);
/* 4A1DE0 */ extern ifMagnify ifMagnify_804A1DE0;
#define GALE01_2F4910
/* 2F4910 */ HudIndex* ifStatus_802F4910(void);
/* 2F4B84 */ void ifStatus_802F4B84(void);
/* 2F4EDC */ void ifStatus_802F4EDC(void);
/* 2F5B48 */ void ifStatus_802F5B48(void);
/* 2F5DE0 */ void ifStatus_802F5DE0(HSD_GObj* player, s32 arg1);
/* 2F5E50 */ void ifStatus_802F5E50(void);
/* 2F5EC0 */ void ifStatus_802F5EC0(void);
/* 2F6194 */ HSD_GObj* ifStatus_802F6194(HSD_GObj*, s32);
/* 2F61FC */ void ifStatus_802F61FC(void);
/* 2F6508 */ void ifStatus_802F6508(s32);
/* 2F665C */ void ifStatus_802F665C(s8);
/* 2F66A4 */ void ifStatus_802F66A4(void);
/* 2F6788 */ void ifStatus_802F6788(s32);
/* 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);
/* 2F6EA4 */ void ifStatus_802F6EA4(void);
/* 2F7034 */ void ifStatus_802F7034(void);
/* 2F7134 */ void ifStatus_802F7134(void);
/* 2F7220 */ void ifStatus_802F7220(void);
/* 4A10C8 */ extern HudIndex ifStatus_HudInfo;
#define GALE01_2F7EFC
/* 2F98E8 */ void ifStock_802F98E8(void);
/* 2FB650 */ void ifStock_802FB650(s32);
/* 2FB6AC */ void ifStock_802FB6AC(s32);
#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;
s32 x50_UNK4;
s32 x54_UNK5;
s32 x58_UNK6;
s32 x5C_UNK7;
} itYoyoAttributes;
#define GALE01_26C47C
/* 26C47C */ void it_8026C47C(struct it_8026C47C_arg0_t*);
/* 26C530 */ s32 it_8026C530(s32, HSD_ObjAllocUnk6*, s32, s32);
/* 26C65C */ u8 it_8026C65C(HSD_ObjAllocUnk6*);
/* 26C704 */ bool it_8026C704(void);
/* 26C75C */ ItemKind it_8026C75C(HSD_ObjAllocUnk6*);
/* 26C88C */ void fn_8026C88C(HSD_GObj*);
/* 26CA4C */ void it_8026CA4C(u16*, 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);
/* 26D564 */ void it_8026D564(Item_GObj*);
/* 26D5CC */ void 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 */ bool 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);
/* 26E248 */ void it_8026E248(Item_GObj*, HSD_GObjEvent);
/* 26E32C */ bool 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*, s32*, Vec3*);
/* 26EA9C */ bool it_8026EA9C(HSD_GObj*, Vec3*, Vec3*, Vec3*, s32, Vec3*, s32);
/* 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 */ bool it_8026ECE0(Item_GObj*, u32);
/* 26EECC */ void it_8026EECC(HSD_GObj*, int);
/* 26F3AC */ void it_8026F3AC(void);
/* 26F3D4 */ void 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);
/* 26F9A0 */ void it_8026F9A0(void);
#define GALE01_272560
/* 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*, f32);
/* 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);
/* 272D1C */ bool it_80272D1C(Item_GObj*);
/* 272D40 */ s32 it_80272D40(Item_GObj*);
/* 272DB0 */ bool 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*, 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*, Item*);
/* 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 */ void 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*, Vec3*);
/* 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(u32);
/* 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*);
/* 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);
/* 2753DC */ void it_802753DC(Item_GObj*);
/* 275414 */ void it_80275414(Item_GObj*);
/* 27542C */ void it_8027542C(Item_GObj*);
/* 275444 */ void it_80275444(Item_GObj*);
/* 275474 */ void it_80275474(Item_GObj*);
/* 2754A4 */ void it_802754A4(Item_GObj*);
/* 2754BC */ void it_802754BC(Item_GObj*);
/* 2754D4 */ void it_802754D4(Item_GObj*);
/* 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*);
/* 2759DC */ void it_802759DC(Item_GObj*, Item_GObj*);
/* 275BC8 */ void it_80275BC8(Item_GObj*, HSD_GObj*);
/* 275D5C */ void it_80275D5C(Item_GObj*, ECB*);
/* 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);
/* 277D08 */ void it_80277D08(void);
/* 277D8C */ void fn_80277D8C(HSD_MObj*, 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*);
/* 27870C */ void it_8027870C(s32);
/* 2787B4 */ void it_802787B4(Item_GObj*, s32);
/* 278800 */ void it_80278800(Item_GObj*, s32, s32, Vec3*, Vec3*, s32, f32);
/* 278F2C */ void it_80278F2C(Item_GObj*, FtCmdState*);
/* 2790C0 */ void it_802790C0(Item_GObj*, FtCmdState*);
/* 279544 */ void it_80279544(Item_GObj*, FtCmdState*);
/* 2795EC */ void it_802795EC(Item_GObj*, FtCmdState*);
/* 279680 */ void it_80279680(Item_GObj*, FtCmdState*);
/* 2796C4 */ void it_802796C4(Item_GObj*, FtCmdState*);
/* 2796FC */ void it_802796FC(Item_GObj*, FtCmdState*);
/* 279720 */ void it_80279720(Item_GObj*, FtCmdState*);
/* 279744 */ void it_80279744(Item_GObj*, FtCmdState*);
/* 279768 */ void it_80279768(Item_GObj*, FtCmdState*);
/* 27978C */ void it_8027978C(Item_GObj*, FtCmdState*);
/* 279888 */ void it_80279888(Item_GObj*, FtCmdState*);
/* 2798D4 */ void it_802798D4(Item_GObj*, FtCmdState*);
/* 27990C */ void it_8027990C(Item_GObj*, FtCmdState*);
/* 279958 */ void it_80279958(Item_GObj*, FtCmdState*);
/* 2799A8 */ void it_802799A8(Item_GObj*, FtCmdState*);
/* 2799E4 */ void it_802799E4(Item_GObj*);
/* 279AF0 */ void it_80279AF0(Item_GObj*, FtCmdState*);
/* 279B10 */ void it_80279B10(Item_GObj*, FtCmdState*);
/* 279B30 */ void fn_80279B30(Item_GObj*, FtCmdState*);
// /* 279B30 */ void fn_80279B30(Item_GObj*, FtCmdState*, u32);
/* 279B64 */ void it_80279B64(Item*);
/* 279B88 */ void it_80279B88(Item*, s32, s32);
/* 279BBC */ void it_80279BBC(Item*);
/* 279BE0 */ void it_80279BE0(Item_GObj*);
/* 279C48 */ void it_80279C48(Item_GObj*, Article*);
/* 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*);
// /* 27B1F4 */ void it_8027B1F4(Item_GObj*, int);
/* 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*);
/* 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 */ void 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_8027C8B0(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*, int);
/* 3F14C4 */ extern struct ItemLogicTable it_803F14C4[43];
/* 3F23CC */ extern struct ItemLogicTable it_803F23CC[];
/* 3F3100 */ extern struct ItemLogicTable it_803F3100[118];
/* 3F4D20 */ extern struct ItemLogicTable it_803F4D20[];
/* 4A0E30 */ extern HSD_ObjAllocUnk4 it_804A0E30;
/* 4A0E50 */ extern HSD_ObjAllocUnk6 it_804A0E50;
/* 4A0E60 */ extern HSD_ObjAllocUnk6 it_804A0E60;
/* 4A0F60 */ extern Article* it_804A0F60[];
/* 4D6D00 */ extern s8 it_804D6D00;
/* 4D6D08 */ extern s32 it_804D6D08;
/* 4D6D0C */ extern s32 it_804D6D0C;
/* 4D6D10 */ extern u32 it_804D6D10;
/* 4D6D14 */ extern uint it_804D6D14;
/* 4D6D18 */ extern u32 it_804D6D18;
/* 4D6D24 */ extern Article** it_804D6D24;
/* 4D6D28 */ extern ItemCommonData* it_804D6D28;
/* 4D6D30 */ extern Article** it_804D6D30;
/* 4D6D38 */ extern Article** it_804D6D38;
#define _itcoll_h_
/* 26F9AC */ void it_8026F9AC(s32, void*, HitCapsule*, 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_266F3C
struct ItemStateDesc;
/* 266F3C */ bool Item_80266F3C(void);
/* 266F70 */ void Item_80266F70(void);
/* 266FA8 */ void Item_80266FA8(void);
/* 266FCC */ void Item_80266FCC(void);
/* 267454 */ void Item_80267454(HSD_GObj* gobj);
/* 267978 */ void Item_80267978(HSD_GObj* gobj);
/* 2680CC */ void Item_802680CC(HSD_GObj* gobj);
/* 26849C */ void Item_8026849C(HSD_GObj* gobj);
/* 268B18 */ Item_GObj* Item_80268B18(SpawnItem* spawnItem);
/* 268B5C */ Item_GObj* Item_80268B5C(SpawnItem* spawnItem);
/* 268B9C */ void Item_80268B9C(SpawnItem* spawnItem);
/* 268D34 */ void Item_80268D34(HSD_GObj* gobj,
struct ItemStateDesc* itemStateDesc);
/* 268DD4 */ void Item_80268DD4(HSD_GObj* gobj, float);
/* 268E40 */ void Item_80268E40(Item* item_data,
struct ItemStateDesc* itemStateDesc);
/* 268E5C */ void Item_80268E5C(HSD_GObj* gobj, enum_t msid,
Item_StateChangeFlags flags);
/* 2693E4 */ void Item_802693E4(HSD_GObj* gobj);
/* 2694CC */ void Item_802694CC(HSD_GObj* gobj);
/* 2697D4 */ void Item_802697D4(HSD_GObj* gobj);
/* 269978 */ void Item_80269978(HSD_GObj* gobj);
/* 269CA0 */ void Item_80269CA0(Item* item_data, s32 damage);
/* 26A848 */ void Item_8026A848(HSD_GObj* gobj, HSD_GObj* fgobj);
/* 26A8EC */ void Item_8026A8EC(Item_GObj* gobj);
/* 26AB54 */ void Item_8026AB54(HSD_GObj* gobj, HSD_GObj* owner_gobj,
Fighter_Part part);
/* 26ABD8 */ void Item_8026ABD8(Item_GObj* gobj, Vec3* pos, float);
/* 26AC74 */ void Item_8026AC74(HSD_GObj* gobj, Vec3*, Vec3*, float);
/* 26AD20 */ void Item_8026AD20(HSD_GObj* gobj, Vec3*, Vec3*, float);
/* 26ADC0 */ void Item_8026ADC0(HSD_GObj* gobj);
/* 26AE10 */ void Item_OnUserDataRemove(void* user_data);
/* 26AE10 */ void lbl_8026AE10(void* user_data);
/* 26AE60 */ uint Item_8026AE60(void);
/* 26AE84 */ void Item_8026AE84(Item* item_data, enum_t sfx, int pan,
int volume);
/* 26AF0C */ void Item_8026AF0C(Item* item_data, enum_t sfx, int pan,
int volume);
/* 26AFA0 */ void Item_8026AFA0(Item* item_data, enum_t sfx, int pan,
int volume);
/* 26B034 */ void Item_8026B034(Item* item_data);
/* 26B074 */ void Item_8026B074(Item* item_data);
/* 26B1A4 */ bool Item_IsGrabbable(Item_GObj* gobj);
/* 4A0C38 */ extern HSD_ObjAllocData item_link_alloc_data;
/* 4A0C64 */ extern HSD_ObjAllocUnk Item_804A0C64;
/* 4A0CCC */ extern HSD_ObjAllocUnk2 Item_804A0CCC;
/* 4A0E24 */ extern S32Vec3 Item_804A0E24;
#define GALE01_27CF30
/* 283AE4 */ Item_GObj* it_80283AE4(Item_GObj*, Vec3*, s32);
/* 283BD4 */ void it_80283BD4(Item_GObj*);
/* 2841B4 */ HSD_GObj* it_802841B4(HSD_GObj*, Vec3*, s32);
/* 28428C */ void it_8028428C(Item_GObj*);
/* 29D968 */ void it_8029D968(Item_GObj*);
/* 29DD58 */ HSD_GObj* it_8029DD58(Item_GObj* fighter_gobj, Vec3*, u8, int,
float);
/* 2A850C */ void it_802A850C(Item_GObj*, Vec3*, Vec3*, float, float, float);
/* 2A8A7C */ void it_802A8A7C(Item_GObj* gobj);
/* 2ADDD0 */ void it_802ADDD0(Item_GObj*, s32);
/* 2AE1D0 */ void it_802AE1D0(Item_GObj*);
/* 2AE538 */ void it_802AE538(Item_GObj*);
/* 2AE608 */ void it_802AE608(Item_GObj*);
/* 2AE8A8 */ Item_GObj* it_802AE8A8(float, Fighter_GObj*, Vec3*, Fighter_Part,
ItemKind);
/* 2AEAB4 */ void it_802AEAB4(Item_GObj*);
/* 2B2560 */ HSD_GObj* it_802B2560(Item_GObj*, float, Vec3*, long, u32);
/* 2B2674 */ void it_802B2674(Item_GObj*);
/* 2B26C0 */ void it_802B26C0(Item_GObj*);
/* 2B26E0 */ void it_802B26E0(Item_GObj*);
/* 2BAEEC */ void it_802BAEEC(Item_GObj*);
/* 2BAF0C */ void it_802BAF0C(Item_GObj*);
/* 2BB20C */ void it_802BB20C(Item_GObj*);
/* 2BB290 */ HSD_GObj* it_802BB290(Item_GObj* gobj, Vec3* arg1,
float facing_dir);
/* 2BCF84 */ void it_802BCF84(Item_GObj*);
/* 2BCFC4 */ void it_802BCFC4(Item_GObj* gobj, float* arg1,
itChainSegment* chainSegment, Item* item_data,
float arg4);
/* 2BDBF8 */ void it_802BDBF8(Item_GObj* gobj);
/* 2BDC18 */ void it_802BDC18(Item_GObj* gobj);
/* 2BDC38 */ bool it_802BDC38(Item_GObj* gobj);
/* 2C0510 */ void it_802C0510(Item_GObj*, Vec3*, s32, s32, float facing_dir);
/* 2C0850 */ u32 it_802C0850(Item_GObj*, Vec3*, u32, s32,
float facing_direction);
/* 2C0DBC */ void it_802C0DBC(u32 arg0);
/* 2C61F4 */ HSD_GObj* it_802C61F4(Item_GObj*, Vec3*, s32, float);
/* 2C6328 */ void it_802C6328(Item_GObj*);
/* 2C6374 */ void it_802C6374(Item_GObj*);
/* 2C6394 */ void it_802C6394(Item_GObj*);
/* 2C6430 */ void it_802C6430(Item_GObj*);
/* 2C6458 */ void it_802C6458(Item_GObj*);
/* 2C6480 */ void it_802C6480(Item_GObj*);
/* 2C64A8 */ void it_802C64A8(Item_GObj*);
/* 2C65E4 */ HSD_GObj* it_802C65E4(Item_GObj*, Vec3*, s32, float);
/* 2C6718 */ void it_802C6718(Item_GObj*);
/* 2C6764 */ void it_802C6764(Item_GObj*);
/* 2C6784 */ void it_802C6784(Item_GObj*);
/* 2C68F8 */ HSD_GObj* it_802C68F8(Item_GObj*, Vec3*, s32, float);
/* 2C6A2C */ void it_802C6A2C(Item_GObj*);
/* 2C6A78 */ void it_802C6A78(Item_GObj*);
/* 2C6A98 */ void it_802C6A98(Item_GObj*);
/* 2C6C38 */ HSD_GObj* it_802C6C38(Item_GObj*, Vec3*, enum_t part, float);
/* 2C6D6C */ void it_802C6D6C(Item_GObj*);
/* 2C6DB8 */ void it_802C6DB8(Item_GObj*);
/* 2C6DD8 */ void it_802C6DD8(Item_GObj*);
/* 2C6E50 */ void it_802C6E50(Item_GObj*);
/* 2C720C */ HSD_GObj* it_802C720C(Item_GObj*, Vec3*, s32, float);
/* 2C7340 */ void it_802C7340(Item_GObj*);
/* 2C738C */ void it_802C738C(Item_GObj*);
/* 2C73AC */ void it_802C73AC(Item_GObj*);
/* 2C7424 */ void it_802C7424(Item_GObj*);
/* 2C7774 */ HSD_GObj* it_802C7774(float, HSD_GObj*, Vec3*, s32, u32);
/* 2C7A84 */ void it_802C7A84(Item_GObj*);
/* 2C7AD0 */ void it_802C7AD0(Item_GObj*);
/* 2C7AF0 */ void it_802C7AF0(Item_GObj*);
/* 2F2094 */ Item_GObj* it_802F2094(int, Vec3*, int, int);
/* 2F2F34 */ void it_802F2F34(HSD_GObj*, it_27CF_DatAttrs*);
/* 2F3020 */ void it_802F3020(HSD_GObj*);
/* 2F3078 */ bool it_802F3078(HSD_GObj*);
/* 2F3120 */ void it_802F3120(HSD_GObj*);
/* 2F3150 */ bool it_802F3150(HSD_GObj*);
/* 2F317C */ void it_802F317C(HSD_GObj*);
/* 2F31B8 */ bool it_802F31B8(HSD_GObj*);
/* 2F3260 */ void it_802F3260(HSD_GObj*);
/* 2F3264 */ bool it_802F3264(HSD_GObj*);
/* 2F3290 */ void it_802F3290(Item_GObj*);
/* 2F32F8 */ bool it_802F32F8(HSD_GObj*);
/* 2F3330 */ bool it_802F3330(Item_GObj*);
/* 2F3374 */ void it_802F3374(Item_GObj*, HSD_GObj*);
/* 3F94A0 */ extern ItemStateTable it_803F94A0[];
#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*);
/* 2E614C */ void it_802E614C(Item_GObj*, Item_GObj*, SpawnItem*, Vec3*,
Vec3*);
/* 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_802E67A8(HSD_GObj*);
/* 2E67F4 */ void it_802E67F4(HSD_GObj*);
/* 2E6824 */ bool it_802E6824(HSD_GObj*);
/* 2E6888 */ void it_802E6888(HSD_GObj*);
/* 2E68EC */ bool it_802E68EC(HSD_GObj*);
/* 2E690C */ void it_802E690C(HSD_GObj*);
/* 2E6910 */ bool it_802E6910(HSD_GObj*);
/* 2E6A40 */ bool it_802E6A40(Item_GObj*);
/* 2E6A74 */ void it_802E6A74(HSD_GObj*);
/* 2E6ACC */ void it_802E6ACC(Item_GObj*, HSD_GObj*);
/* 3F8BD8 */ extern ItemStateTable it_803F8BD8[];
#define GALE01_2E6AEC
/* 2E6AEC */ Item_GObj* it_802E6AEC(Ground*, int, int, HSD_JObj*, Vec3*, int,
int, HSD_GObjEvent, int);
/* 2E6F7C */ bool it_802E6F7C(Item_GObj*);
/* 2E6FC0 */ bool it_802E6FC0(Item_GObj*);
/* 2E709C */ void it_802E709C(Item_GObj*, HSD_GObj*);
/* 3F8C8C */ extern ItemStateTable it_803F8C8C[];
#define GALE01_2F28C8
/* 2F28C8 */ void it_802F28C8(Item_GObj*, int, float);
/* 2F295C */ float it_802F295C(HSD_GObj* owner_gobj, it_2F28_DatAttrs* attr);
/* 2F2BDC */ void it_802F2BDC(Item_GObj*, HSD_GObj*);
/* 3F9470 */ extern ItemStateTable it_803F9470[];
#define GALE01_2F2BFC
/* 2F2BFC */ void it_802F2BFC(Item_GObj* gobj, ftYs_GObj* owner_gobj);
/* 2F2CE0 */ void it_802F2CE0(Item_GObj* gobj, bool clear_destroy_type);
/* 3F9480 */ extern ItemStateTable it_803F9480[];
extern ItemStateTable it_803F8DE8[];
void it_802E79C8(Item_GObj*);
bool it_802E838C(Item_GObj*);
bool it_802E8420(Item_GObj*);
bool it_802E838C(Item_GObj*);
bool it_802E8418(Item_GObj*);
bool it_802E85F4(Item_GObj*);
bool it_802E8784(Item_GObj*);
#define GALE01_284854
Item_GObj* it_80284854(Vec3*);
void it_80284910(Item_GObj*);
void it_80284974(Item_GObj*);
bool it_802849B8(Item_GObj*);
void it_802849C0(Item_GObj*);
bool it_802849C4(Item_GObj*);
void it_802849F0(Item_GObj*);
bool it_80284A2C(Item_GObj*);
void it_80284A34(Item_GObj*);
bool it_80284A80(Item_GObj*);
void it_80284AAC(Item_GObj*);
bool it_80284B1C(Item_GObj*);
void it_80284B24(Item_GObj*);
bool it_80284B28(Item_GObj*);
void it_80284B30(Item_GObj*);
void it_80284BA0(Item_GObj*);
void it_80284C10(Item_GObj*);
bool it_80284C38(Item_GObj*);
void it_80284C40(Item_GObj*);
bool it_80284C44(Item_GObj*);
bool it_80284C78(Item_GObj*);
bool it_80284CAC(Item_GObj*);
bool it_80284CCC(Item_GObj*);
bool it_80284CF0(Item_GObj*);
bool it_80284D14(Item_GObj*);
void it_80284D34(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F57B0[];
#define GALE01_27D670
/* 27D670 */ void it_8027D670(Vec3* const);
/* 27D730 */ void it_8027D730(Item_GObj*);
/* 27D76C */ void it_8027D76C(Item_GObj*);
/* 27D820 */ M2C_UNK it_8027D820();
/* 27DAC8 */ M2C_UNK fn_8027DAC8();
/* 27DC74 */ M2C_UNK it_8027DC74();
/* 27DDE8 */ M2C_UNK it_8027DDE8();
/* 27DDEC */ M2C_UNK it_8027DDEC();
/* 27DE18 */ M2C_UNK it_8027DE18();
/* 27E018 */ M2C_UNK it_8027E018();
/* 27E020 */ M2C_UNK it_8027E020();
/* 27E050 */ M2C_UNK it_8027E050();
/* 27E0B4 */ void it_8027E0B4(Item_GObj*);
/* 27E3E4 */ M2C_UNK it_8027E3E4();
/* 27E644 */ M2C_UNK it_8027E644();
/* 27E648 */ void it_8027E648(Item_GObj*);
/* 27E978 */ M2C_UNK it_8027E978();
/* 27EB7C */ M2C_UNK it_8027EB7C();
/* 27EDC0 */ M2C_UNK it_8027EDC0();
/* 27EDC4 */ M2C_UNK it_8027EDC4();
/* 27EE04 */ M2C_UNK it_8027EE04();
/* 27EFD0 */ M2C_UNK it_8027EFD0();
/* 27F26C */ M2C_UNK it_8027F26C();
/* 27F270 */ M2C_UNK it_8027F270();
/* 27F42C */ M2C_UNK it_8027F42C();
/* 27F5E8 */ M2C_UNK it_8027F5E8();
/* 27F89C */ M2C_UNK it_8027F89C();
/* 27F8A0 */ M2C_UNK it_8027F8A0();
/* 27F8E0 */ M2C_UNK it_8027F8E0();
/* 27FC44 */ M2C_UNK it_8027FC44();
/* 27FC78 */ M2C_UNK it_8027FC78();
/* 27FC7C */ M2C_UNK it_8027FC7C();
/* 27FCA8 */ M2C_UNK fn_8027FCA8();
/* 28000C */ M2C_UNK it_8028000C();
/* 280030 */ M2C_UNK it_80280030();
/* 28007C */ M2C_UNK fn_8028007C();
/* 280338 */ M2C_UNK it_80280338();
/* 280380 */ void it_80280380(Item_GObj*);
/* 2806CC */ M2C_UNK it_802806CC();
/* 280928 */ M2C_UNK it_80280928();
/* 280974 */ M2C_UNK fn_80280974();
/* 280B18 */ M2C_UNK it_80280B18();
/* 280B60 */ M2C_UNK it_80280B60();
/* 280DC0 */ M2C_UNK it_80280DC0();
/* 280DF0 */ int it_80280DF0(Item_GObj*);
/* 280E30 */ int it_80280E30(Item_GObj*);
/* 280E70 */ M2C_UNK it_80280E70();
/* 280E90 */ M2C_UNK it_80280E90();
/* 280E94 */ M2C_UNK it_80280E94();
/* 280E9C */ void it_80280E9C(Item_GObj*);
/* 281030 */ M2C_UNK it_80281030();
/* 281038 */ M2C_UNK it_80281038();
/* 28103C */ M2C_UNK it_8028103C();
/* 281070 */ int it_80281070(Item_GObj*);
/* 2810A4 */ int it_802810A4(Item_GObj*);
/* 2810C4 */ int it_802810C4(Item_GObj*);
/* 281104 */ int it_80281104(Item_GObj*);
/* 281144 */ void it_80281144(Item_GObj*, Item_GObj*);
/* 3F54D8 */ extern ItemStateTable it_803F54D8[];
#define GALE01_286088
/* 286088 */ HSD_GObj* it_80286088(HSD_GObj*);
/* 2861CC */ void it_802861CC(Item_GObj*);
/* 286208 */ void it_80286208(Item_GObj*);
/* 286248 */ M2C_UNK it_80286248();
/* 286340 */ M2C_UNK it_80286340();
/* 2863BC */ M2C_UNK it_802863BC();
/* 286480 */ M2C_UNK fn_80286480();
/* 2864D8 */ M2C_UNK it_802864D8();
/* 286518 */ M2C_UNK it_80286518();
/* 28651C */ M2C_UNK it_8028651C();
/* 28655C */ M2C_UNK it_8028655C();
/* 286598 */ M2C_UNK it_80286598();
/* 2865A0 */ M2C_UNK it_802865A0();
/* 286754 */ M2C_UNK it_80286754();
/* 286780 */ void it_80286780(Item_GObj*);
/* 2867A8 */ M2C_UNK it_802867A8();
/* 2867B0 */ M2C_UNK it_802867B0();
/* 2867B4 */ void it_802867B4(Item_GObj*);
/* 2867F0 */ M2C_UNK it_802867F0();
/* 28683C */ M2C_UNK it_8028683C();
/* 286964 */ void it_80286964(Item_GObj*);
/* 2869A0 */ M2C_UNK it_802869A0();
/* 286AA4 */ M2C_UNK it_80286AA4();
/* 286B74 */ M2C_UNK it_80286B74();
/* 286B94 */ M2C_UNK it_80286B94();
/* 286B98 */ M2C_UNK it_80286B98();
/* 286BA0 */ M2C_UNK it_80286BA0();
/* 286C7C */ M2C_UNK it_80286C7C();
/* 286CA8 */ M2C_UNK it_80286CA8();
/* 286CAC */ M2C_UNK it_80286CAC();
/* 286CB4 */ int it_80286CB4(Item_GObj*);
/* 286D48 */ int it_80286D48(Item_GObj*);
/* 286DDC */ int it_80286DDC(Item_GObj*);
/* 286E70 */ int it_80286E70(Item_GObj*);
/* 286F04 */ int it_80286F04(Item_GObj*);
/* 286FC8 */ void it_80286FC8(Item_GObj*);
/* 287044 */ M2C_UNK it_80287044();
/* 28704C */ M2C_UNK it_8028704C();
/* 287050 */ M2C_UNK it_80287050();
/* 287084 */ void it_80287084(Item_GObj*, Item_GObj*);
/* 2870A4 */ M2C_UNK it_802870A4();
/* 287104 */ M2C_UNK it_80287104();
/* 28710C */ M2C_UNK it_8028710C();
/* 287334 */ M2C_UNK it_80287334();
/* 28733C */ M2C_UNK it_8028733C();
/* 3F5850 */ extern ItemStateTable it_803F5850[];
#define GALE01_27CF00
/* 27CF00 */ void it_8027CF00(Item_GObj*);
/* 27CF30 */ void it_8027CF30(Item_GObj*);
/* 27CFE8 */ void it_8027CFE8(Item_GObj*);
/* 27D0B8 */ void it_8027D0B8(Item_GObj*);
/* 27D110 */ bool it_8027D110(Item_GObj*);
/* 27D118 */ void it_8027D118(Item_GObj*);
/* 27D11C */ bool it_8027D11C(Item_GObj*);
/* 27D148 */ void it_8027D148(Item_GObj*);
/* 27D170 */ bool it_8027D170(Item_GObj*);
/* 27D178 */ void it_8027D178(Item_GObj*);
/* 27D1A8 */ bool it_8027D1A8(Item_GObj*);
/* 27D1D4 */ void it_8027D1D4(Item_GObj*);
/* 27D1FC */ bool it_8027D1FC(Item_GObj*);
/* 27D204 */ void it_8027D204(Item_GObj*);
/* 27D208 */ void it_8027D208(Item_GObj*);
/* 27D230 */ void it_8027D230(Item_GObj*);
/* 27D258 */ void it_8027D258(Item_GObj*);
/* 27D2A4 */ bool it_8027D2A4(Item_GObj*);
/* 27D2DC */ void it_8027D2DC(Item_GObj*);
/* 27D30C */ bool it_8027D30C(Item_GObj*);
/* 27D32C */ void it_8027D32C(Item_GObj*);
/* 27D330 */ bool it_8027D330(Item_GObj*);
/* 27D338 */ bool it_8027D338(Item_GObj*);
/* 27D414 */ bool it_8027D414(Item_GObj*);
/* 27D450 */ void it_8027D450(Item_GObj*);
/* 27D478 */ bool it_8027D478(Item_GObj*);
/* 27D480 */ void it_8027D480(Item_GObj*);
/* 27D484 */ bool it_8027D484(Item_GObj*);
/* 27D4B8 */ bool it_8027D4B8(Item_GObj*);
/* 27D4F4 */ bool it_8027D4F4(Item_GObj*);
/* 27D530 */ bool it_8027D530(Item_GObj*);
/* 27D614 */ bool it_8027D614(Item_GObj*);
/* 27D650 */ void it_8027D650(Item_GObj*, HSD_GObj*);
/* 3F5468 */ extern ItemStateTable it_803F5468[];
#define GALE01_2D3EF8
/* 2D3EF8 */ void it_802D3EF8(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 it_802C961C(Item_GObj*, HSD_GObj*);
/* 2C963C */ void it_802C963C(HSD_GObj*);
/* 2C9670 */ void it_802C9670(Item_GObj*);
/* 2C96CC */ bool it_802C96CC(HSD_GObj*);
/* 2C9798 */ void it_802C9798(HSD_GObj*);
/* 2C9850 */ bool it_802C9850(HSD_GObj*);
/* 2C989C */ void it_802C989C(HSD_GObj*);
/* 2C98E4 */ void it_802C98E4(Item_GObj*);
/* 2C990C */ bool it_802C990C(HSD_GObj*);
/* 2C9970 */ void it_802C9970(HSD_GObj*);
/* 2C9A28 */ bool it_802C9A28(HSD_GObj*);
/* 2C9A74 */ void it_802C9A74(Item_GObj*);
/* 2C9AB4 */ bool it_802C9AB4(HSD_GObj*);
/* 2C9AD8 */ void it_802C9AD8(HSD_GObj*);
/* 2C9AF8 */ bool it_802C9AF8(HSD_GObj*);
/* 3F7A98 */ extern ItemStateTable it_803F7A98[];
#define GALE01_2C9B20
/* 2C9B20 */ void it_802C9B20(Item_GObj*);
/* 2C9C20 */ void it_802C9C20(Item_GObj*);
/* 2C9C78 */ bool it_802C9C78(Item_GObj*);
/* 2C9C80 */ void it_802C9C80(Item_GObj*, HSD_GObj*);
/* 2C9CA0 */ bool it_802C9CA0(Item_GObj*);
/* 2C9CC0 */ void it_802C9CC0(Item_GObj*);
/* 2C9CE8 */ bool it_802C9CE8(HSD_GObj*);
/* 2C9D1C */ void it_802C9D1C(HSD_GObj*);
/* 2C9D20 */ bool it_802C9D20(HSD_GObj*);
/* 3F7AC8 */ extern ItemStateTable it_803F7AC8[];
#define GALE01_2C2144
/* 2C2424 */ bool it_802C2424(Item_GObj*);
/* 2C242C */ bool it_802C242C(Item_GObj*);
/* 2C244C */ bool it_802C244C(Item_GObj*);
/* 2C2454 */ bool it_802C2454(Item_GObj*);
/* 2C245C */ bool it_802C245C(Item_GObj*);
/* 2C2464 */ bool it_802C2464(Item_GObj*);
/* 2C246C */ void it_802C246C(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_802C17FC(Item_GObj*);
/* 2C1854 */ M2C_UNK it_802C1854();
/* 2C1950 */ M2C_UNK it_802C1950();
/* 2C198C */ M2C_UNK it_802C198C();
/* 2C1A14 */ M2C_UNK it_802C1A14();
/* 2C1A18 */ M2C_UNK it_802C1A18();
/* 2C1A58 */ M2C_UNK it_802C1A58();
/* 2C1A80 */ M2C_UNK it_802C1A80();
/* 2C1A88 */ M2C_UNK it_802C1A88();
/* 2C1AB8 */ M2C_UNK it_802C1AB8();
/* 2C1AE4 */ M2C_UNK it_802C1AE4();
/* 2C1B80 */ M2C_UNK it_802C1B80();
/* 2C1BB4 */ M2C_UNK it_802C1BB4();
/* 2C1C7C */ M2C_UNK it_802C1C7C();
/* 2C1D44 */ M2C_UNK fn_802C1D44();
/* 2C1D80 */ M2C_UNK it_802C1D80();
/* 2C1DB4 */ M2C_UNK it_802C1DB4();
/* 2C1E94 */ M2C_UNK it_802C1E94();
/* 2C1FC8 */ bool it_802C1FC8(Item_GObj*);
/* 2C1FD0 */ bool it_802C1FD0(Item_GObj*);
/* 2C1FF0 */ bool it_802C1FF0(Item_GObj*);
/* 2C1FF8 */ bool it_802C1FF8(Item_GObj*);
/* 2C20E4 */ bool it_802C20E4(Item_GObj*);
/* 2C20EC */ bool it_802C20EC(Item_GObj*);
/* 2C210C */ void it_802C210C(Item_GObj*, Item_GObj*);
/* 3F7668 */ extern ItemStateTable it_803F7668[];
#define GALE01_2C248C
/* 2C37BC */ void it_802C37BC(Item_GObj*);
/* 2C3AA4 */ void it_802C3AA4(Item_GObj*, Item_GObj*);
/* 3F76B8 */ extern ItemStateTable it_803F76B8[];
#define GALE01_2F13B4
/* 2F13B4 */ void it_802F13B4(HSD_GObj*, int);
/* 2F14E4 */ void it_802F14E4(Item_GObj*);
/* 2F1518 */ void it_802F1518(Item_GObj*);
/* 2F1888 */ void it_802F1888(Item_GObj*);
/* 2F18F0 */ void it_802F18F0(Item_GObj*, Item_GObj*);
/* 2F1910 */ bool it_802F1910(Item_GObj*);
/* 2F1CE0 */ void it_802F1CE0(Item_GObj*);
/* 2F1F48 */ void it_802F1F48(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(int, Vec3*, int, int);
/* 3F93C8 */ extern ItemStateTable it_803F93C8[];
#define GALE01_2F0F6C
/* 2F0F6C */ M2C_UNK it_802F0F6C();
/* 2F1030 */ M2C_UNK it_802F1030();
/* 2F1094 */ void it_802F1094(Item_GObj*, Item_GObj*);
/* 2F10B4 */ bool it_802F10B4(Item_GObj*);
/* 2F10D8 */ bool it_802F10D8(Item_GObj*);
/* 2F10F8 */ M2C_UNK it_802F10F8();
/* 2F1168 */ M2C_UNK it_802F1168();
/* 2F1170 */ M2C_UNK it_802F1170();
/* 2F1304 */ M2C_UNK it_802F1304();
/* 2F1340 */ M2C_UNK it_802F1340();
/* 2F1344 */ M2C_UNK it_802F1344();
/* 2F1384 */ M2C_UNK it_802F1384();
/* 2F13A4 */ M2C_UNK it_802F13A4();
/* 2F13A8 */ M2C_UNK it_802F13A8();
/* 2F13B0 */ M2C_UNK it_802F13B0();
/* 3F93A8 */ extern ItemStateTable it_803F93A8[];
#define GALE01_293A08
void it_80293A08(Item_GObj*);
void it_80293A70(Item_GObj*);
bool it_80293AE0(Item_GObj*);
void it_80293AE8(Item_GObj*);
bool it_80293B24(Item_GObj*);
void it_80293BE8(Item_GObj*);
void it_80293C10(Item_GObj*);
bool it_80293C38(Item_GObj*);
void it_80293C40(Item_GObj*);
bool it_80293CF0(Item_GObj*);
bool it_80293D6C(Item_GObj*);
void it_80293D74(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F6130[];
#define GALE01_281164
/* 281164 */ void it_80281164(Item_GObj*);
/* 281390 */ M2C_UNK fn_80281390();
/* 2813F8 */ M2C_UNK it_802813F8();
/* 2816F0 */ M2C_UNK it_802816F0();
/* 2816F4 */ M2C_UNK it_802816F4();
/* 281734 */ M2C_UNK fn_80281734();
/* 2817A0 */ M2C_UNK it_802817A0();
/* 281AB4 */ M2C_UNK it_80281AB4();
/* 281B44 */ M2C_UNK it_80281B44();
/* 281B7C */ M2C_UNK it_80281B7C();
/* 281C6C */ M2C_UNK it_80281C6C();
/* 281D00 */ M2C_UNK it_80281D00();
/* 281E30 */ M2C_UNK it_80281E30();
/* 281E34 */ M2C_UNK it_80281E34();
/* 282074 */ M2C_UNK it_80282074();
/* 2820CC */ M2C_UNK it_802820CC();
/* 282130 */ M2C_UNK it_80282130();
/* 282160 */ M2C_UNK it_80282160();
/* 28218C */ void it_8028218C(Item_GObj*);
/* 2824B8 */ M2C_UNK it_802824B8();
/* 2826F4 */ M2C_UNK it_802826F4();
/* 2826F8 */ void it_802826F8(Item_GObj*);
/* 2829FC */ void it_802829FC(Item_GObj*);
/* 282AC0 */ M2C_UNK it_80282AC0();
/* 282AC8 */ M2C_UNK it_80282AC8();
/* 282B14 */ void it_80282B14(Item_GObj*);
/* 282B84 */ M2C_UNK it_80282B84();
/* 282BA8 */ M2C_UNK it_80282BA8();
/* 282BAC */ M2C_UNK it_80282BAC();
/* 282BFC */ M2C_UNK it_80282BFC();
/* 282C54 */ M2C_UNK it_80282C54();
/* 282C78 */ M2C_UNK it_80282C78();
/* 282CA8 */ M2C_UNK it_80282CA8();
/* 282CD4 */ M2C_UNK fn_80282CD4();
/* 282D48 */ M2C_UNK it_80282D48();
/* 282DA0 */ M2C_UNK it_80282DA0();
/* 282DA4 */ M2C_UNK it_80282DA4();
/* 282DE4 */ M2C_UNK it_80282DE4();
/* 2830F4 */ M2C_UNK it_802830F4();
/* 2832A8 */ M2C_UNK it_802832A8();
/* 2832AC */ M2C_UNK it_802832AC();
/* 283504 */ M2C_UNK it_80283504();
/* 283550 */ M2C_UNK it_80283550();
/* 283554 */ M2C_UNK it_80283554();
/* 283588 */ int it_80283588(Item_GObj*);
/* 2838FC */ M2C_UNK it_802838FC();
/* 283960 */ M2C_UNK it_80283960();
/* 283990 */ M2C_UNK it_80283990();
/* 2839BC */ int it_802839BC(Item_GObj*);
/* 283A3C */ int it_80283A3C(Item_GObj*);
/* 283A5C */ int it_80283A5C(Item_GObj*);
/* 283A80 */ int it_80283A80(Item_GObj*);
/* 283AA4 */ int it_80283AA4(Item_GObj*);
/* 283AC4 */ void it_80283AC4(Item_GObj*, Item_GObj*);
/* 3F55D0 */ extern ItemStateTable it_803F55D0[];
#define GALE01_2C0510
/* 2C09C4 */ Item_GObj* it_802C09C4(Fighter_GObj* owner, Vec3* pos, int,
enum_t, bool, bool, float facing_dir);
/* 2C11E0 */ void it_802C11E0(Item_GObj*);
/* 2C1384 */ bool it_802C1384(Item_GObj*);
/* 2C13CC */ bool it_802C13CC(Item_GObj*);
/* 2C1400 */ bool it_802C1400(Item_GObj*);
/* 2C145C */ bool it_802C145C(Item_GObj*);
/* 2C14B8 */ bool it_802C14B8(Item_GObj*);
/* 2C1514 */ bool it_802C1514(Item_GObj*);
/* 2C1570 */ void it_802C1570(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 it_80288D98(Item_GObj*);
/* 288F88 */ void it_80288F88(Item_GObj*);
/* 288FBC */ void it_80288FBC(Item_GObj*);
/* 288FDC */ void it_80288FDC(Item_GObj*);
/* 289218 */ bool it_80289218(Item_GObj*);
/* 2893D4 */ bool it_802893D4(Item_GObj*);
/* 289470 */ bool it_80289470(Item_GObj*);
/* 28950C */ bool it_8028950C(Item_GObj*);
/* 2895A8 */ bool it_802895A8(Item_GObj*);
/* 289644 */ void it_80289644(Item_GObj*);
/* 2896AC */ void it_802896AC(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 it_802CF544(Item_GObj*);
void it_802CF640(Item_GObj*);
bool it_802CF67C(Item_GObj*);
void it_802CF6C8(Item_GObj*);
void it_802CF744(Item_GObj*);
bool it_802CF7A8(Item_GObj*);
void it_802CF7CC(Item_GObj*);
bool it_802CF7EC(Item_GObj*);
extern ItemStateTable it_803F7DC8[];
#define GALE01_29B0C8
/* 29B0C8 */ M2C_UNK it_8029B0C8();
/* 29B188 */ void it_8029B188(Item_GObj*);
/* 29B1AC */ void it_8029B1AC(Item_GObj*);
/* 29B1D8 */ M2C_UNK it_8029B1D8();
/* 29B230 */ M2C_UNK it_8029B230();
/* 29B238 */ M2C_UNK it_8029B238();
/* 29B23C */ M2C_UNK it_8029B23C();
/* 29B268 */ M2C_UNK it_8029B268();
/* 29B290 */ M2C_UNK it_8029B290();
/* 29B298 */ M2C_UNK it_8029B298();
/* 29B2C8 */ M2C_UNK it_8029B2C8();
/* 29B2F4 */ void it_8029B2F4(Item_GObj*);
/* 29B31C */ M2C_UNK it_8029B31C();
/* 29B324 */ M2C_UNK it_8029B324();
/* 29B328 */ void it_8029B328(Item_GObj*);
/* 29B348 */ void it_8029B348(Item_GObj*);
/* 29B370 */ M2C_UNK it_8029B370();
/* 29B3BC */ M2C_UNK it_8029B3BC();
/* 29B400 */ M2C_UNK it_8029B400();
/* 29B460 */ M2C_UNK it_8029B460();
/* 29B464 */ M2C_UNK it_8029B464();
/* 29B46C */ bool it_8029B46C(Item_GObj*);
/* 29B4AC */ bool it_8029B4AC(Item_GObj*);
/* 29B4EC */ bool it_8029B4EC(Item_GObj*);
/* 29B52C */ bool it_8029B52C(Item_GObj*);
/* 29B56C */ bool it_8029B56C(Item_GObj*);
/* 29B670 */ void it_8029B670(Item_GObj*);
/* 29B698 */ M2C_UNK it_8029B698();
/* 29B6A0 */ M2C_UNK it_8029B6A0();
/* 29B6A4 */ M2C_UNK it_8029B6A4();
/* 29B6D8 */ void it_8029B6D8(Item_GObj*, Item_GObj*);
/* 3F6728 */ extern ItemStateTable it_803F6728[];
#define GALE01_292D48
/* 292D48 */ Item_GObj* it_80292D48(Vec3*);
/* 292E04 */ void it_80292E04(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 it_80293284(Item_GObj*);
/* 2933C4 */ void it_802933C4(Item_GObj*);
/* 2933EC */ void it_802933EC(Item_GObj*);
/* 293488 */ bool it_80293488(Item_GObj*);
/* 2934AC */ bool it_802934AC(Item_GObj*);
/* 2934D0 */ bool it_802934D0(Item_GObj*);
/* 2934F4 */ bool it_802934F4(Item_GObj*);
/* 293514 */ bool it_80293514(Item_GObj*);
/* 293534 */ void it_80293534(Item_GObj*);
/* 293640 */ void it_80293640(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 it_8029A9FC(Item_GObj*);
/* 29AD1C */ void it_8029AD1C(Item_GObj*);
/* 29AD94 */ void it_8029AD94(Item_GObj*);
/* 29AF34 */ void it_8029AF34(Item_GObj*);
/* 29B0A8 */ void it_8029B0A8(Item_GObj*, Item_GObj*);
/* 3F66C8 */ extern ItemStateTable it_803F66C8[];
#define GALE01_2CC6E4
/* 2CC6E4 */ void it_802CC6E4(Item_GObj*);
/* 2CC740 */ M2C_UNK it_802CC740();
/* 2CC744 */ void it_802CC744(Item_GObj*, Item_GObj*);
/* 2CC764 */ M2C_UNK it_802CC764();
/* 2CC7A4 */ M2C_UNK it_802CC7A4();
/* 2CC7A8 */ M2C_UNK it_802CC7A8();
/* 2CC7D4 */ M2C_UNK it_802CC7D4();
/* 2CC7D8 */ M2C_UNK it_802CC7D8();
/* 2CC860 */ M2C_UNK it_802CC860();
/* 2CC91C */ M2C_UNK it_802CC91C();
/* 2CC93C */ M2C_UNK it_802CC93C();
/* 2CC944 */ M2C_UNK it_802CC944();
/* 2CC9B8 */ M2C_UNK it_802CC9B8();
/* 2CC9DC */ M2C_UNK it_802CC9DC();
/* 2CCA8C */ M2C_UNK it_802CCA8C();
/* 3F7C10 */ extern ItemStateTable it_803F7C10[];
#define GALE01_290938
/* 290938 */ HSD_GObj* it_80290938(HSD_JObj*);
/* 290A20 */ void it_80290A20(Item_GObj*);
/* 290A7C */ M2C_UNK it_80290A7C();
/* 290C38 */ M2C_UNK it_80290C38();
/* 290CE8 */ M2C_UNK it_80290CE8();
/* 290DD4 */ M2C_UNK it_80290DD4();
/* 290E78 */ M2C_UNK it_80290E78();
/* 290EC8 */ M2C_UNK it_80290EC8();
/* 290ED0 */ M2C_UNK it_80290ED0();
/* 290ED4 */ M2C_UNK it_80290ED4();
/* 290F00 */ M2C_UNK it_80290F00();
/* 290F28 */ M2C_UNK it_80290F28();
/* 290F30 */ M2C_UNK it_80290F30();
/* 290F60 */ M2C_UNK it_80290F60();
/* 290F8C */ void it_80290F8C(Item_GObj*);
/* 290FB4 */ M2C_UNK it_80290FB4();
/* 290FBC */ M2C_UNK it_80290FBC();
/* 290FC0 */ void it_80290FC0(Item_GObj*);
/* 290FE0 */ void it_80290FE0(Item_GObj*);
/* 291068 */ M2C_UNK it_80291068();
/* 2910A8 */ M2C_UNK it_802910A8();
/* 291188 */ M2C_UNK it_80291188();
/* 291254 */ M2C_UNK it_80291254();
/* 29131C */ M2C_UNK it_8029131C();
/* 291344 */ M2C_UNK it_80291344();
/* 2914C8 */ M2C_UNK it_802914C8();
/* 29151C */ M2C_UNK it_8029151C();
/* 291570 */ M2C_UNK it_80291570();
/* 2915B4 */ M2C_UNK it_802915B4();
/* 2915E8 */ bool it_802915E8(Item_GObj*);
/* 2917C8 */ bool it_802917C8(Item_GObj*);
/* 2918A0 */ bool it_802918A0(Item_GObj*);
/* 291978 */ bool it_80291978(Item_GObj*);
/* 291998 */ bool it_80291998(Item_GObj*);
/* 2919B8 */ bool it_802919B8(Item_GObj*);
/* 291B58 */ void it_80291B58(Item_GObj*);
/* 291B80 */ M2C_UNK it_80291B80();
/* 291B88 */ M2C_UNK it_80291B88();
/* 291B8C */ M2C_UNK it_80291B8C();
/* 291BC0 */ void it_80291BC0(Item_GObj*, Item_GObj*);
/* 3F5EA8 */ extern ItemStateTable it_803F5EA8[];
#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 it_8028FBE4(Item_GObj* arg0);
/* 28FC5C */ void it_8028FC5C(HSD_GObj* arg0);
/* 28FD7C */ void it_8028FD7C(Item_GObj* arg0);
/* 28FDE4 */ void it_8028FDE4(Item_GObj* arg0);
/* 28FE70 */ void it_8028FE70(Item_GObj* arg0, Item_GObj* arg1);
/* 3F5DB0 */ extern ItemStateTable it_803F5DB0[];
#define GALE01_2ADDD0
/* 2AE994 */ Item_GObj* it_802AE994(Fighter_GObj*, Fighter_Part, ItemKind);
/* 2AEB00 */ void it_802AEB00(Item_GObj*);
/* 2AF184 */ void it_802AF184(Item_GObj*, HSD_GObj*);
/* 3F6CA8 */ extern ItemStateTable it_803F6CA8[];
#define GALE01_29CD18
/* 29CD18 */ void it_8029CD18(HSD_GObj*, int);
/* 29CD78 */ HSD_JObj* it_8029CD78(Item_GObj*);
/* 29CEB4 */ Item_GObj* it_8029CEB4(HSD_GObj*, Vec3*, ItemKind, f32);
/* 29CF8C */ bool it_8029CF8C(Item_GObj*);
/* 29CFA0 */ void it_8029CFA0(Item_GObj*);
/* 29CFF0 */ void it_8029CFF0(Item_GObj*);
/* 29D094 */ bool it_8029D094(Item_GObj*);
/* 29D24C */ void it_8029D24C(Item_GObj*);
/* 29D488 */ bool it_8029D488(Item_GObj*);
/* 29D490 */ bool it_8029D490(Item_GObj*);
/* 29D554 */ void it_8029D554(Item_GObj*);
/* 29D790 */ bool it_8029D790(Item_GObj*);
/* 29D798 */ void it_8029D798(Item_GObj*);
/* 29D7EC */ bool it_8029D7EC(Item_GObj*);
/* 29D870 */ void it_8029D870(Item_GObj*);
/* 29D940 */ bool it_8029D940(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 it_8029C6F4(Item_GObj*);
/* 29C9CC */ void it_8029C9CC(Item_GObj*);
/* 29C9EC */ bool it_8029C9EC(Item_GObj*);
/* 29CA78 */ bool it_8029CA78(Item_GObj*);
/* 29CA80 */ bool it_8029CA80(Item_GObj*);
/* 29CC4C */ bool it_8029CC4C(Item_GObj*);
/* 29CC54 */ bool it_8029CC54(Item_GObj*);
/* 29CCF0 */ bool it_8029CCF0(Item_GObj*);
/* 29CCF8 */ void it_8029CCF8(Item_GObj*, HSD_GObj*);
/* 3F67D0 */ extern ItemStateTable it_803F67D0[];
#define GALE01_28EB88
/* 28EB88 */ M2C_UNK it_8028EB88();
/* 28EC98 */ M2C_UNK it_8028EC98();
/* 28ECE0 */ void it_8028ECE0(Item_GObj* gobj);
/* 28ECF0 */ M2C_UNK it_8028ECF0();
/* 28ED10 */ void it_8028ED10(Item_GObj*);
/* 28ED50 */ void it_8028ED50(Item_GObj*);
/* 28EDBC */ M2C_UNK it_8028EDBC();
/* 28EF34 */ M2C_UNK it_8028EF34();
/* 28EF88 */ bool it_8028EF88(void);
/* 28EF90 */ M2C_UNK it_8028EF90();
/* 28EFB0 */ M2C_UNK it_8028EFB0();
/* 28F1D8 */ M2C_UNK it_8028F1D8();
/* 28F200 */ bool it_8028F200(void);
/* 28F208 */ M2C_UNK it_8028F208();
/* 28F238 */ M2C_UNK it_8028F238();
/* 28F2B4 */ void it_8028F2B4(Item_GObj*);
/* 28F310 */ bool it_8028F310(void);
/* 28F318 */ void it_8028F318(Item_GObj*);
/* 28F340 */ void it_8028F340(Item_GObj*);
/* 28F368 */ M2C_UNK it_8028F368();
/* 28F398 */ M2C_UNK it_8028F398();
/* 28F3CC */ bool it_8028F3CC(Item_GObj*);
/* 28F3D4 */ bool it_8028F3D4(Item_GObj*);
/* 28F3DC */ bool it_8028F3DC(Item_GObj*);
/* 28F3E4 */ bool it_8028F3E4(Item_GObj*);
/* 28F3EC */ bool it_8028F3EC(Item_GObj*);
/* 28F40C */ bool it_8028F40C(Item_GObj*);
/* 28F42C */ bool it_8028F42C(Item_GObj*);
/* 28F434 */ M2C_UNK it_8028F434();
/* 28F4AC */ bool it_8028F4AC(void);
/* 28F4B4 */ M2C_UNK it_8028F4B4();
/* 28F560 */ M2C_UNK it_8028F560();
/* 28F7C8 */ M2C_UNK it_8028F7C8();
/* 28F828 */ bool it_8028F828(void);
/* 28F830 */ M2C_UNK it_8028F830();
/* 28F834 */ M2C_UNK it_8028F834();
/* 28F8C4 */ void it_8028F8C4(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 it_802CCF9C(Item_GObj*);
/* 2CCFFC */ M2C_UNK it_802CCFFC();
/* 2CD000 */ void it_802CD000(Item_GObj*, Item_GObj*);
/* 2CD020 */ M2C_UNK it_802CD020();
/* 2CD060 */ M2C_UNK it_802CD060();
/* 2CD064 */ M2C_UNK it_802CD064();
/* 2CD090 */ M2C_UNK it_802CD090();
/* 2CD12C */ M2C_UNK it_802CD12C();
/* 2CD18C */ M2C_UNK it_802CD18C();
/* 2CD230 */ M2C_UNK it_802CD230();
/* 2CD288 */ M2C_UNK it_802CD288();
/* 2CD290 */ M2C_UNK it_802CD290();
/* 2CD2EC */ M2C_UNK it_802CD2EC();
/* 2CD360 */ M2C_UNK it_802CD360();
/* 2CD384 */ M2C_UNK it_802CD384();
/* 2CD424 */ M2C_UNK it_802CD424();
/* 3F7C70 */ extern ItemStateTable it_803F7C70[];
#define GALE01_2D6FD0
/* 2D6FD0 */ void it_802D6FD0(Item_GObj*);
/* 2D705C */ M2C_UNK it_802D705C();
/* 2D70A4 */ M2C_UNK it_802D70A4();
/* 2D7120 */ M2C_UNK it_802D7120();
/* 2D7144 */ M2C_UNK it_802D7144();
/* 2D7164 */ M2C_UNK it_802D7164();
/* 2D718C */ M2C_UNK it_802D718C();
/* 2D71E8 */ M2C_UNK it_802D71E8();
/* 2D72E4 */ M2C_UNK it_802D72E4();
/* 2D72E8 */ M2C_UNK it_802D72E8();
/* 2D7328 */ M2C_UNK it_802D7328();
/* 2D736C */ M2C_UNK it_802D736C();
/* 2D7374 */ M2C_UNK it_802D7374();
/* 2D73A4 */ M2C_UNK it_802D73A4();
/* 3F82F0 */ extern ItemStateTable it_803F82F0[];
#define GALE01_2C720C
/* 2C7310 */ void it_802C7310(Item_GObj*);
/* 2C73CC */ void it_802C73CC(Item_GObj*);
/* 2C74B8 */ void it_802C74B8(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 it_802C847C(Item_GObj*);
/* 2C84A0 */ M2C_UNK it_802C84A0();
/* 2C8540 */ M2C_UNK it_802C8540();
/* 2C8690 */ M2C_UNK it_802C8690();
/* 2C86D0 */ M2C_UNK it_802C86D0();
/* 2C875C */ M2C_UNK it_802C875C();
/* 2C87B4 */ M2C_UNK it_802C87B4();
/* 2C8828 */ M2C_UNK it_802C8828();
/* 2C882C */ M2C_UNK it_802C882C();
/* 2C88E4 */ bool it_802C88E4(Item_GObj*);
/* 2C8940 */ bool it_802C8940(Item_GObj*);
/* 2C899C */ bool it_802C899C(Item_GObj*);
/* 2C8A08 */ bool it_802C8A08(Item_GObj*);
/* 2C8A28 */ bool it_802C8A28(Item_GObj*);
/* 2C8B08 */ void it_802C8B08(Item_GObj*, Item_GObj*);
/* 3F79E0 */ extern ItemStateTable it_803F79E0[];
#define GALE01_2C68F8
/* 2C69FC */ void it_802C69FC(Item_GObj*);
/* 2C6AB8 */ void it_802C6AB8(Item_GObj*);
/* 2C6C18 */ void it_802C6C18(Item_GObj*, Item_GObj*);
/* 3F78E8 */ extern ItemStateTable it_803F78E8[];
#define GALE01_2C61F4
/* 2C62F8 */ void it_802C62F8(Item_GObj*);
/* 2C63B4 */ void it_802C63B4(Item_GObj*);
/* 2C65C4 */ void it_802C65C4(Item_GObj*, Item_GObj*);
/* 3F7898 */ extern ItemStateTable it_803F7898[];
#define GALE01_2C7774
/* 2C7A54 */ void it_802C7A54(Item_GObj*);
/* 2C7B10 */ void it_802C7B10(Item_GObj*);
/* 2C7D40 */ void it_802C7D40(Item_GObj*, Item_GObj*);
/* 3F7968 */ extern ItemStateTable it_803F7968[];
#define GALE01_2C65E4
/* 2C66E8 */ void it_802C66E8(Item_GObj*);
/* 2C67A4 */ void it_802C67A4(Item_GObj*);
/* 2C68D8 */ void it_802C68D8(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 it_802C7E64(Item_GObj*);
/* 2C7E94 */ void it_802C7E94(Item_GObj*);
/* 2C7EE0 */ void it_802C7EE0(Item_GObj*);
/* 2C7F00 */ void it_802C7F00(Item_GObj*);
/* 2C7F20 */ void it_802C7F20(Item_GObj*);
/* 2C8018 */ void it_802C8018(Item_GObj*, Item_GObj*);
/* 3F79A0 */ extern ItemStateTable it_803F79A0[];
#define GALE01_2C6C38
/* 2C6D3C */ void it_802C6D3C(Item_GObj*);
/* 2C6DF8 */ void it_802C6DF8(Item_GObj*);
/* 2C6F20 */ void it_802C6F20(Item_GObj*, Item_GObj*);
/* 3F78F8 */ extern ItemStateTable it_803F78F8[];
#define GALE01_2C8038
/* 2C8038 */ HSD_GObj* it_802C8038(Item_GObj*, Vec3*, s32, s32, float, float);
/* 2C8158 */ void it_802C8158(Item_GObj*);
/* 2C81C8 */ void it_802C81C8(Item_GObj*);
/* 2C81E8 */ void it_802C81E8(Item_GObj*);
/* 2C8208 */ M2C_UNK it_802C8208();
/* 2C8240 */ M2C_UNK it_802C8240();
/* 2C8350 */ M2C_UNK it_802C8350();
/* 2C8354 */ M2C_UNK it_802C8354();
/* 2C835C */ void it_802C835C(Item_GObj*, Item_GObj*);
/* 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 it_802C7044(Item_GObj* item_gobj);
void it_802C7074(Item_GObj* item_gobj);
void it_802C70C0(Item_GObj*);
void it_802C70E0(Item_GObj*);
void it_802C7100(Item_GObj* item_gobj);
void it_802C7158(HSD_GObj* arg0);
bool it_802C7180(Item_GObj* item_gobj);
void it_802C71EC(HSD_GObj*, HSD_GObj*);
#define GALE01_2EAF28
/* 2EAF28 */ M2C_UNK it_802EAF28(Item_GObj* gobj);
/* 2EAF34 */ M2C_UNK it_802EAF34();
/* 2EB1EC */ void it_802EB1EC(Item_GObj*);
/* 2EB268 */ M2C_UNK it_802EB268();
/* 2EB2C0 */ M2C_UNK it_802EB2C0();
/* 2EB3C0 */ M2C_UNK it_802EB3C0();
/* 2EB444 */ bool it_802EB444(Item_GObj*);
/* 2EB44C */ bool it_802EB44C(Item_GObj*);
/* 2EB454 */ bool it_802EB454(Item_GObj*);
/* 2EB45C */ bool it_802EB45C(Item_GObj*);
/* 2EB5A8 */ void it_802EB5A8(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F8FD0[];
#define GALE01_28B8D8
/* 28B8D8 */ M2C_UNK it_8028B8D8();
/* 28B988 */ M2C_UNK it_8028B988();
/* 28BA2C */ M2C_UNK it_8028BA2C();
/* 28BAD8 */ M2C_UNK it_8028BAD8();
/* 28BC2C */ M2C_UNK it_8028BC2C();
/* 28BDAC */ void it_8028BDAC(Item_GObj*);
/* 28BE54 */ M2C_UNK it_8028BE54();
/* 28BEE8 */ M2C_UNK it_8028BEE8();
/* 28BEF0 */ M2C_UNK it_8028BEF0();
/* 28BEF4 */ M2C_UNK it_8028BEF4();
/* 28C018 */ M2C_UNK it_8028C018();
/* 28C054 */ M2C_UNK it_8028C054();
/* 28C0D0 */ M2C_UNK it_8028C0D0();
/* 28C100 */ M2C_UNK it_8028C100();
/* 28C148 */ void it_8028C148(Item_GObj*);
/* 28C1A0 */ M2C_UNK it_8028C1A0();
/* 28C1A8 */ M2C_UNK it_8028C1A8();
/* 28C1AC */ void it_8028C1AC(Item_GObj*);
/* 28C1FC */ M2C_UNK it_8028C1FC();
/* 28C2A4 */ M2C_UNK it_8028C2A4();
/* 28C2D4 */ M2C_UNK it_8028C2D4();
/* 28C300 */ void it_8028C300(Item_GObj*);
/* 28C328 */ M2C_UNK it_8028C328();
/* 28C34C */ M2C_UNK it_8028C34C();
/* 28C37C */ M2C_UNK it_8028C37C();
/* 28C3A8 */ M2C_UNK it_8028C3A8();
/* 28C52C */ M2C_UNK it_8028C52C();
/* 28C6E4 */ M2C_UNK it_8028C6E4();
/* 28C75C */ M2C_UNK it_8028C75C();
/* 28C898 */ M2C_UNK it_8028C898();
/* 28CA14 */ M2C_UNK it_8028CA14();
/* 28CAC8 */ M2C_UNK it_8028CAC8();
/* 28CAF8 */ M2C_UNK it_8028CAF8();
/* 28CB24 */ void it_8028CB24(Item_GObj*);
/* 28CB70 */ M2C_UNK it_8028CB70();
/* 28CB78 */ M2C_UNK it_8028CB78();
/* 28CB7C */ M2C_UNK it_8028CB7C();
/* 28CCA8 */ bool it_8028CCA8(Item_GObj*);
/* 28CCCC */ bool it_8028CCCC(Item_GObj*);
/* 28CD04 */ bool it_8028CD04(Item_GObj*);
/* 28CD3C */ bool it_8028CD3C(Item_GObj*);
/* 28CE1C */ bool it_8028CE1C(Item_GObj*);
/* 28CF2C */ bool it_8028CF2C(Item_GObj*);
/* 28CF68 */ M2C_UNK it_8028CF68();
/* 28CFC0 */ void it_8028CFC0(Item_GObj*, Item_GObj*);
/* 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 it_80293F58(HSD_GObj* gobj);
/* 293F84 */ void it_80293F84(Item_GObj* gobj);
/* 2940FC */ void it_802940FC(HSD_GObj* gobj);
/* 2941F8 */ void it_802941F8(HSD_GObj* gobj);
/* 2942B0 */ void it_802942B0(HSD_GObj* gobj);
/* 294344 */ void it_80294344(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 it_80299D4C(Item_GObj*);
/* 299D7C */ M2C_UNK it_80299D7C();
/* 299DD0 */ void it_80299DD0(Item_GObj*);
/* 299E1C */ M2C_UNK it_80299E1C();
/* 299E24 */ M2C_UNK it_80299E24();
/* 299E28 */ void it_80299E28(Item_GObj*);
/* 299E48 */ void it_80299E48(Item_GObj*);
/* 299E9C */ M2C_UNK it_80299E9C();
/* 299F1C */ M2C_UNK it_80299F1C();
/* 299F68 */ M2C_UNK it_80299F68();
/* 299F94 */ M2C_UNK it_80299F94();
/* 299FB4 */ M2C_UNK it_80299FB4();
/* 29A000 */ M2C_UNK it_8029A000();
/* 29A080 */ M2C_UNK it_8029A080();
/* 29A084 */ M2C_UNK it_8029A084();
/* 29A0B0 */ bool it_8029A0B0(Item_GObj*);
/* 29A0B8 */ bool it_8029A0B8(Item_GObj*);
/* 29A0C0 */ bool it_8029A0C0(Item_GObj*);
/* 29A0C8 */ bool it_8029A0C8(Item_GObj*);
/* 29A0EC */ bool it_8029A0EC(Item_GObj*);
/* 29A0F4 */ void it_8029A0F4(Item_GObj*, Item_GObj*);
/* 3F6640 */ extern ItemStateTable it_803F6640[];
#define GALE01_2927E8
/* 2927E8 */ M2C_UNK it_802927E8();
/* 29282C */ M2C_UNK it_8029282C();
/* 29285C */ void it_8029285C(Item_GObj*);
/* 29287C */ M2C_UNK it_8029287C();
/* 2928D4 */ M2C_UNK it_802928D4();
/* 2928DC */ M2C_UNK it_802928DC();
/* 2928E0 */ M2C_UNK it_802928E0();
/* 29290C */ M2C_UNK it_8029290C();
/* 292934 */ M2C_UNK it_80292934();
/* 29293C */ M2C_UNK it_8029293C();
/* 29296C */ M2C_UNK it_8029296C();
/* 292998 */ M2C_UNK it_80292998();
/* 2929C8 */ M2C_UNK it_802929C8();
/* 2929F8 */ M2C_UNK it_802929F8();
/* 292A28 */ M2C_UNK it_80292A28();
/* 292A5C */ void it_80292A5C(Item_GObj*);
/* 292A84 */ M2C_UNK it_80292A84();
/* 292A8C */ M2C_UNK it_80292A8C();
/* 292A90 */ void it_80292A90(Item_GObj*);
/* 292AE8 */ M2C_UNK it_80292AE8();
/* 292B2C */ void it_80292B2C(Item_GObj*);
/* 292B54 */ M2C_UNK it_80292B54();
/* 292BA0 */ M2C_UNK it_80292BA0();
/* 292BCC */ bool it_80292BCC(Item_GObj*);
/* 292C08 */ void it_80292C08(Item_GObj*);
/* 292C30 */ M2C_UNK it_80292C30();
/* 292C38 */ M2C_UNK it_80292C38();
/* 292C3C */ M2C_UNK it_80292C3C();
/* 292C70 */ bool it_80292C70(Item_GObj*);
/* 292CAC */ bool it_80292CAC(Item_GObj*);
/* 292CCC */ bool it_80292CCC(Item_GObj*);
/* 292D08 */ bool it_80292D08(Item_GObj*);
/* 292D28 */ void it_80292D28(Item_GObj*, Item_GObj*);
/* 3F5FF0 */ extern ItemStateTable it_803F5FF0[];
#define GALE01_2CDBE0
/* 2CDBE0 */ void it_802CDBE0(Item_GObj*);
/* 2CDC60 */ void it_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 it_80283BEC(Item_GObj*);
/* 283C48 */ void it_80283C48(Item_GObj*);
/* 283F28 */ void it_80283F28(Item_GObj*);
/* 28402C */ void it_8028402C(Item_GObj*);
/* 28412C */ void it_8028412C(Item_GObj*);
/* 284194 */ void it_80284194(Item_GObj*, Item_GObj*);
/* 3F56C8 */ extern ItemStateTable it_803F56C8[];
/* 2D8618 */ void it_802D8618(s32, Vec3*, s32, s32);
/* 2D8688 */ void it_802D8688(Item_GObj*);
/* 2D8EC8 */ int 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*);
/* 2D6100 */ bool it_802D6100(Item_GObj*);
/* 2D61A8 */ void it_802D61A8(Item_GObj*, Item_GObj*);
/* 3F8270 */ extern ItemStateTable it_803F8270[];
/* 3F82A0 */ extern ItemStateTable it_803F82A0[];
#define GALE01_2D42C4
/* 2D42C4 */ void it_802D42C4(Item_GObj*);
/* 2D43AC */ M2C_UNK it_802D43AC();
/* 2D43B0 */ void it_802D43B0(Item_GObj*, Item_GObj*);
/* 2D43EC */ M2C_UNK it_802D43EC();
/* 2D4494 */ M2C_UNK it_802D4494();
/* 2D4510 */ M2C_UNK it_802D4510();
/* 2D4564 */ M2C_UNK it_802D4564();
/* 2D472C */ M2C_UNK it_802D472C();
/* 2D48A8 */ M2C_UNK it_802D48A8();
/* 2D48B0 */ M2C_UNK it_802D48B0();
/* 2D4990 */ M2C_UNK it_802D4990();
/* 2D49E8 */ M2C_UNK it_802D49E8();
/* 2D4B14 */ M2C_UNK it_802D4B14();
/* 2D4B48 */ M2C_UNK it_802D4B48();
/* 2D4B50 */ M2C_UNK it_802D4B50();
/* 2D4B54 */ M2C_UNK it_802D4B54();
/* 2D4BB8 */ M2C_UNK it_802D4BB8();
/* 2D4BDC */ M2C_UNK it_802D4BDC();
/* 2D4C4C */ M2C_UNK it_802D4C4C();
/* 2D4C74 */ M2C_UNK it_802D4C74();
/* 2D4DE0 */ void it_802D4DE0(Item_GObj*);
/* 2D4EF4 */ bool it_802D4EF4(Item_GObj*);
/* 2D4F08 */ bool it_802D4F08(Item_GObj*);
/* 2D4F28 */ bool it_802D4F28(Item_GObj*);
/* 2D4F48 */ bool it_802D4F48(Item_GObj*);
/* 2D4F50 */ bool it_802D4F50(Item_GObj*);
/* 2D4F58 */ void it_802D4F58(Item_GObj*, Item_GObj*);
/* 2D4F78 */ M2C_UNK it_802D4F78();
/* 2D4FFC */ M2C_UNK it_802D4FFC();
/* 2D5044 */ M2C_UNK it_802D5044();
/* 2D5048 */ M2C_UNK it_802D5048();
/* 3F8128 */ extern ItemStateTable it_803F8128[];
/* 3F8180 */ extern ItemStateTable it_803F8180[];
#define GALE01_2D251C
/* 2D251C */ void it_802D251C(Item_GObj*);
/* 2D25B8 */ M2C_UNK it_802D25B8();
/* 2D25BC */ void it_802D25BC(Item_GObj*, Item_GObj*);
/* 2D25DC */ M2C_UNK it_802D25DC();
/* 2D2640 */ M2C_UNK it_802D2640();
/* 2D2660 */ M2C_UNK it_802D2660();
/* 2D2668 */ M2C_UNK it_802D2668();
/* 2D26BC */ M2C_UNK it_802D26BC();
/* 2D26FC */ M2C_UNK it_802D26FC();
/* 2D27A8 */ M2C_UNK it_802D27A8();
/* 2D27B0 */ M2C_UNK it_802D27B0();
/* 2D27FC */ M2C_UNK it_802D27FC();
/* 2D288C */ M2C_UNK it_802D288C();
/* 2D2904 */ M2C_UNK it_802D2904();
/* 2D290C */ M2C_UNK it_802D290C();
/* 2D2970 */ M2C_UNK it_802D2970();
/* 2D29D4 */ M2C_UNK it_802D29D4();
/* 2D2A50 */ M2C_UNK it_802D2A50();
/* 2D2A58 */ M2C_UNK it_802D2A58();
/* 2D2AC0 */ M2C_UNK it_802D2AC0();
/* 2D2B24 */ M2C_UNK it_802D2B24();
/* 2D2B44 */ M2C_UNK it_802D2B44();
/* 2D2B4C */ M2C_UNK it_802D2B4C();
/* 2D2BE0 */ M2C_UNK it_802D2BE0();
/* 2D2C54 */ M2C_UNK it_802D2C54();
/* 2D2C78 */ M2C_UNK it_802D2C78();
/* 2D2D04 */ M2C_UNK it_802D2D04();
/* 2D2D2C */ M2C_UNK it_802D2D2C();
/* 2D2E80 */ void it_802D2E80(Item_GObj*);
/* 2D2ED0 */ void it_802D2ED0(Item_GObj*, Item_GObj*);
/* 2D2EF0 */ M2C_UNK it_802D2EF0();
/* 2D2F3C */ M2C_UNK it_802D2F3C();
/* 2D2F70 */ M2C_UNK it_802D2F70();
/* 2D2FE8 */ M2C_UNK it_802D2FE8();
/* 3F7F58 */ extern ItemStateTable it_803F7F58[];
/* 3F7FB8 */ extern ItemStateTable it_803F7FB8[];
#define GALE01_2C9D40
/* 2C9D40 */ void it_802C9D40(Item_GObj*);
/* 2C9DFC */ M2C_UNK it_802C9DFC();
/* 2C9E00 */ void it_802C9E00(Item_GObj*);
/* 2C9E24 */ void it_802C9E24(Item_GObj*, Item_GObj*);
/* 2C9E44 */ M2C_UNK it_802C9E44();
/* 2C9E8C */ M2C_UNK it_802C9E8C();
/* 2C9EF0 */ M2C_UNK it_802C9EF0();
/* 2C9F74 */ M2C_UNK it_802C9F74();
/* 2C9FBC */ M2C_UNK it_802C9FBC();
/* 2CA014 */ M2C_UNK it_802CA014();
/* 2CA074 */ M2C_UNK it_802CA074();
/* 2CA198 */ M2C_UNK it_802CA198();
/* 2CA318 */ M2C_UNK it_802CA318();
/* 2CA31C */ M2C_UNK it_802CA31C();
/* 2CA324 */ M2C_UNK it_802CA324();
/* 2CA388 */ M2C_UNK it_802CA388();
/* 2CA3AC */ M2C_UNK it_802CA3AC();
/* 2CA3CC */ M2C_UNK it_802CA3CC();
/* 2CA3F4 */ M2C_UNK it_802CA3F4();
/* 3F7AD8 */ extern ItemStateTable it_803F7AD8[];
#define GALE01_2CA49C
/* 2CA49C */ void it_802CA49C(Item_GObj*);
/* 2CA534 */ M2C_UNK it_802CA534();
/* 2CA538 */ void it_802CA538(Item_GObj*, Item_GObj*);
/* 2CA558 */ M2C_UNK it_802CA558();
/* 2CA58C */ M2C_UNK it_802CA58C();
/* 2CA5D8 */ M2C_UNK it_802CA5D8();
/* 2CA618 */ M2C_UNK it_802CA618();
/* 2CA654 */ M2C_UNK it_802CA654();
/* 2CA6A0 */ M2C_UNK it_802CA6A0();
/* 2CA724 */ M2C_UNK it_802CA724();
/* 2CA7FC */ M2C_UNK it_802CA7FC();
/* 2CA890 */ M2C_UNK it_802CA890();
/* 2CA8DC */ M2C_UNK it_802CA8DC();
/* 2CA938 */ M2C_UNK it_802CA938();
/* 2CA984 */ M2C_UNK it_802CA984();
/* 2CA9B8 */ M2C_UNK it_802CA9B8();
/* 2CA9F4 */ M2C_UNK it_802CA9F4();
/* 2CAA40 */ M2C_UNK it_802CAA40();
/* 2CAAA4 */ M2C_UNK it_802CAAA4();
/* 2CAAC8 */ M2C_UNK it_802CAAC8();
/* 2CAAE8 */ M2C_UNK it_802CAAE8();
/* 2CAB10 */ M2C_UNK it_802CAB10();
/* 2CACD0 */ void it_802CACD0(Item_GObj*);
/* 2CADC0 */ bool it_802CADC0(Item_GObj*);
/* 2CADC8 */ bool it_802CADC8(Item_GObj*);
/* 2CADD0 */ void it_802CADD0(Item_GObj*, Item_GObj*);
/* 2CADF0 */ M2C_UNK it_802CADF0();
/* 2CAE60 */ M2C_UNK it_802CAE60();
/* 2CAE94 */ M2C_UNK it_802CAE94();
/* 2CAFB4 */ M2C_UNK it_802CAFB4();
/* 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 it_8029367C(Item_GObj*);
void it_802936E4(Item_GObj*);
bool it_80293754(Item_GObj*);
void it_8029375C(Item_GObj*);
bool it_80293798(Item_GObj*);
void it_8029385C(Item_GObj*);
void it_80293884(Item_GObj*);
bool it_802938AC(Item_GObj*);
void it_802938B4(Item_GObj*);
bool it_80293964(Item_GObj*);
bool it_802939E0(Item_GObj*);
void it_802939E8(Item_GObj*, HSD_GObj*);
extern ItemStateTable it_803F6110[];
#define GALE01_2F23AC
/* 2F23AC */ M2C_UNK it_802F23AC();
/* 2F23EC */ void it_802F23EC(Item_GObj* gobj, Fighter_GObj* owner_gobj,
float facing_dir);
/* 2F2578 */ M2C_UNK it_802F2578();
/* 2F2580 */ M2C_UNK it_802F2580();
/* 2F2584 */ M2C_UNK it_802F2584();
/* 2F258C */ M2C_UNK it_802F258C();
/* 2F2810 */ M2C_UNK it_802F2810();
/* 2F2888 */ M2C_UNK it_802F2888();
/* 2F2890 */ M2C_UNK it_802F2890();
/* 2F2894 */ M2C_UNK it_802F2894();
/* 2F289C */ M2C_UNK it_802F289C();
#define GALE01_29BAB8
/* 29BAB8 */ M2C_UNK it_8029BAB8();
/* 29BB90 */ M2C_UNK it_8029BB90();
/* 29BC88 */ M2C_UNK it_8029BC88();
/* 29BCA8 */ M2C_UNK it_8029BCA8();
/* 29BDD4 */ M2C_UNK it_8029BDD4();
/* 29BFB4 */ bool it_8029BFB4(Item_GObj*);
/* 29BFBC */ bool it_8029BFBC(Item_GObj*);
/* 29BFC4 */ bool it_8029BFC4(Item_GObj*);
/* 29BFCC */ bool it_8029BFCC(Item_GObj*);
/* 29C208 */ bool it_8029C208(Item_GObj*);
/* 29C4AC */ bool it_8029C4AC(Item_GObj*);
/* 29C4B4 */ void it_8029C4B4(Item_GObj*, Item_GObj*);
/* 3F6798 */ extern ItemStateTable it_803F6798[];
#define GALE01_2C74D8
/* 2C75DC */ void it_802C75DC(Item_GObj*);
/* 2C7698 */ void it_802C7698(Item_GObj*);
/* 2C7754 */ void it_802C7754(Item_GObj*, Item_GObj*);
/* 3F7958 */ extern ItemStateTable it_803F7958[];
#define GALE01_2ADC04
/* 2ADC04 */ void it_802ADC04(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 it_802ADD88(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, ftKb_GObj* owner_gobj);
/* 2F2E7C */ void it_802F2E7C(Item_GObj* gobj, bool has_destroy_type);
/* 3F9490 */ extern ItemStateTable it_803F9490[];
#define GALE01_2D007C
/* 2D007C */ void it_802D007C(Item_GObj*);
/* 2D0118 */ void it_802D0118(Item_GObj*, Item_GObj*);
/* 3F7E28 */ extern ItemStateTable it_803F7E28[];
#define GALE01_2E1820
/* 2E1820 */ void it_802E1820(Item_GObj*);
/* 2E1874 */ void it_802E1874(Item_GObj*);
/* 2E18B4 */ M2C_UNK it_802E18B4();
/* 2E1930 */ M2C_UNK it_802E1930();
/* 2E1968 */ bool it_802E1968(void);
/* 2E1970 */ M2C_UNK it_802E1970();
/* 2E19FC */ M2C_UNK it_802E19FC();
/* 2E1C4C */ M2C_UNK it_802E1C4C();
/* 2E1C84 */ M2C_UNK it_802E1C84();
/* 2E1D24 */ bool it_802E1D24(void);
/* 2E1D2C */ M2C_UNK it_802E1D2C();
/* 2E1E54 */ bool it_802E1E54(void);
/* 2E1E5C */ bool it_802E1E5C(Item_GObj*);
/* 2E1E94 */ M2C_UNK it_802E1E94();
/* 2E1F2C */ bool it_802E1F2C(void);
/* 2E1F34 */ M2C_UNK it_802E1F34();
/* 2E20D0 */ bool it_802E20D0(void);
/* 2E20D8 */ void it_802E20D8(Item_GObj*);
/* 2E2148 */ bool it_802E2148(void);
/* 2E2150 */ void it_802E2150(void);
/* 2E2154 */ bool it_802E2154(void);
/* 2E215C */ M2C_UNK it_802E215C();
/* 2E2330 */ void it_802E2330(Item_GObj*, Vec3*, s32, f32);
/* 2E2450 */ void it_802E2450(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F8940[];
#define GALE01_2AC8A8
/* 2AD2E8 */ bool it_802AD2E8(Item_GObj*);
/* 2AD2F0 */ bool it_802AD2F0(Item_GObj*);
/* 2AD384 */ bool it_802AD384(Item_GObj*);
/* 2AD38C */ bool it_802AD38C(Item_GObj*);
/* 2AD3B0 */ bool it_802AD3B0(Item_GObj*);
/* 2AD450 */ bool it_802AD450(Item_GObj*);
/* 2AD458 */ void it_802AD458(Item_GObj*, Item_GObj*);
/* 3F6C58 */ extern ItemStateTable it_803F6C58[];
#define GALE01_2896CC
/* 2896CC */ HSD_GObj* it_802896CC(Vec3*);
/* 289784 */ void it_80289784(Item_GObj*);
/* 2897C8 */ M2C_UNK it_802897C8();
/* 289910 */ M2C_UNK it_80289910();
/* 289A00 */ M2C_UNK it_80289A00();
/* 289B50 */ M2C_UNK it_80289B50();
/* 289BE8 */ M2C_UNK it_80289BE8();
/* 28A114 */ M2C_UNK it_8028A114();
/* 28A190 */ M2C_UNK it_8028A190();
/* 28A298 */ M2C_UNK it_8028A298();
/* 28A2C0 */ M2C_UNK it_8028A2C0();
/* 28A2C4 */ M2C_UNK it_8028A2C4();
/* 28A2F0 */ M2C_UNK it_8028A2F0();
/* 28A3A4 */ M2C_UNK it_8028A3A4();
/* 28A3A8 */ M2C_UNK it_8028A3A8();
/* 28A3CC */ M2C_UNK it_8028A3CC();
/* 28A4C0 */ M2C_UNK it_8028A4C0();
/* 28A4E8 */ M2C_UNK it_8028A4E8();
/* 28A518 */ M2C_UNK it_8028A518();
/* 28A544 */ M2C_UNK it_8028A544();
/* 28A690 */ M2C_UNK it_8028A690();
/* 28A7F0 */ M2C_UNK it_8028A7F0();
/* 28A7F4 */ M2C_UNK it_8028A7F4();
/* 28A93C */ void it_8028A93C(Item_GObj*);
/* 28A964 */ M2C_UNK it_8028A964();
/* 28A96C */ M2C_UNK it_8028A96C();
/* 28A970 */ void it_8028A970(Item_GObj*);
/* 28A9AC */ M2C_UNK it_8028A9AC();
/* 28A9B4 */ M2C_UNK it_8028A9B4();
/* 28AA00 */ M2C_UNK it_8028AA00();
/* 28AB28 */ void it_8028AB28(Item_GObj*);
/* 28AB64 */ M2C_UNK it_8028AB64();
/* 28AC74 */ M2C_UNK it_8028AC74();
/* 28AD18 */ M2C_UNK it_8028AD18();
/* 28AD38 */ M2C_UNK it_8028AD38();
/* 28AD3C */ M2C_UNK it_8028AD3C();
/* 28AD44 */ M2C_UNK it_8028AD44();
/* 28ADD4 */ M2C_UNK it_8028ADD4();
/* 28AE98 */ M2C_UNK it_8028AE98();
/* 28AE9C */ M2C_UNK it_8028AE9C();
/* 28AEA4 */ int it_8028AEA4(Item_GObj*);
/* 28AF1C */ int it_8028AF1C(Item_GObj*);
/* 28AF54 */ int it_8028AF54(Item_GObj*);
/* 28AF8C */ int it_8028AF8C(Item_GObj*);
/* 28AFC4 */ int it_8028AFC4(Item_GObj*);
/* 28B06C */ void it_8028B06C(Item_GObj*, Item_GObj*);
/* 3F59F8 */ extern ItemStateTable it_803F59F8[];
#define GALE01_2ECCDC
/* 2ECCDC */ void it_802ECCDC(Item_GObj*);
/* 2ECD1C */ M2C_UNK it_802ECD1C();
/* 2ECD3C */ M2C_UNK it_802ECD3C();
/* 2ECE90 */ void it_802ECE90(Item_GObj*);
/* 2ECEB0 */ M2C_UNK it_802ECEB0();
/* 2ECF00 */ M2C_UNK it_802ECF00();
/* 2ECF70 */ M2C_UNK it_802ECF70();
/* 2ECFE0 */ M2C_UNK it_802ECFE0();
/* 2ED040 */ M2C_UNK it_802ED040();
/* 2ED088 */ M2C_UNK it_802ED088();
/* 2ED0D0 */ M2C_UNK it_802ED0D0();
/* 2ED124 */ M2C_UNK it_802ED124();
/* 2ED198 */ M2C_UNK it_802ED198();
/* 2ED25C */ M2C_UNK it_802ED25C();
/* 2ED2AC */ M2C_UNK it_802ED2AC();
/* 2ED31C */ M2C_UNK it_802ED31C();
/* 2ED4F8 */ M2C_UNK it_802ED4F8();
/* 2ED520 */ M2C_UNK it_802ED520();
/* 2ED774 */ M2C_UNK it_802ED774();
/* 2ED79C */ M2C_UNK it_802ED79C();
/* 2ED8BC */ M2C_UNK it_802ED8BC();
/* 2ED8E4 */ M2C_UNK it_802ED8E4();
/* 2ED92C */ M2C_UNK it_802ED92C();
/* 2EDCD0 */ M2C_UNK it_802EDCD0();
/* 2EDD18 */ M2C_UNK it_802EDD18();
/* 2EDD34 */ M2C_UNK it_802EDD34();
/* 2EDD54 */ M2C_UNK it_802EDD54();
/* 2EDD9C */ M2C_UNK it_802EDD9C();
/* 2EDDA0 */ M2C_UNK it_802EDDA0();
/* 2EDDC0 */ bool it_802EDDC0(Item_GObj*);
/* 2EE1E0 */ void it_802EE1E0(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F90D0[];
extern ItemStateTable it_803F9328[];
void it_802EFBC0(Item_GObj*);
M2C_UNK it_802EFBE8(Item_GObj*);
M2C_UNK it_802EFC08(Item_GObj*);
bool it_802EFE28(Item_GObj*);
bool it_802F022C(Item_GObj*);
bool it_802F0104(Item_GObj*);
bool it_802EFF1C(Item_GObj*);
bool it_802F01F8(Item_GObj*);
bool it_802F0010(Item_GObj*);
void it_802F0320(Item_GObj*, Item_GObj*);
#define GALE01_2E8BCC
/* 2E8BCC */ void it_802E8BCC(Item_GObj*);
/* 2E8CD8 */ bool it_802E8CD8(Item_GObj*);
/* 2E8F24 */ M2C_UNK it_802E8F24();
/* 2E8F7C */ M2C_UNK it_802E8F7C();
/* 2E8F84 */ M2C_UNK it_802E8F84();
/* 2E8FFC */ M2C_UNK it_802E8FFC();
/* 2E9038 */ M2C_UNK it_802E9038();
/* 2E90E8 */ M2C_UNK it_802E90E8();
/* 2E91AC */ M2C_UNK it_802E91AC();
/* 2E92A0 */ M2C_UNK it_802E92A0();
/* 2E9308 */ M2C_UNK it_802E9308();
/* 2E9354 */ M2C_UNK it_802E9354();
/* 2E935C */ M2C_UNK it_802E935C();
/* 2E938C */ M2C_UNK it_802E938C();
/* 2E93C8 */ M2C_UNK it_802E93C8();
/* 2E9494 */ M2C_UNK it_802E9494();
/* 2E959C */ M2C_UNK it_802E959C();
/* 2E9624 */ M2C_UNK it_802E9624();
/* 2E9674 */ M2C_UNK it_802E9674();
/* 2E969C */ M2C_UNK it_802E969C();
/* 2E9738 */ M2C_UNK it_802E9738();
/* 2E9780 */ M2C_UNK it_802E9780();
/* 2E9850 */ M2C_UNK it_802E9850();
/* 2E98A4 */ M2C_UNK it_802E98A4();
/* 2E98E0 */ M2C_UNK it_802E98E0();
/* 2E9948 */ M2C_UNK it_802E9948();
/* 2E9950 */ M2C_UNK it_802E9950();
/* 2E99C4 */ M2C_UNK it_802E99C4();
/* 2E9A00 */ M2C_UNK it_802E9A00();
/* 2E9A38 */ M2C_UNK it_802E9A38();
/* 2E9B60 */ M2C_UNK it_802E9B60();
/* 2E9B64 */ M2C_UNK it_802E9B64();
/* 2E9BA0 */ M2C_UNK it_802E9BA0();
/* 2E9BE4 */ M2C_UNK it_802E9BE4();
/* 2E9D10 */ M2C_UNK it_802E9D10();
/* 2E9D14 */ M2C_UNK it_802E9D14();
/* 2E9D50 */ M2C_UNK it_802E9D50();
/* 2E9D94 */ M2C_UNK it_802E9D94();
/* 2E9D9C */ M2C_UNK it_802E9D9C();
/* 2E9DE8 */ M2C_UNK it_802E9DE8();
/* 2E9F28 */ M2C_UNK it_802E9F28();
/* 2EA004 */ M2C_UNK it_802EA004();
/* 2EA008 */ M2C_UNK it_802EA008();
/* 2EA010 */ M2C_UNK it_802EA010();
/* 2EA0A0 */ M2C_UNK it_802EA0A0();
/* 2EA0A4 */ M2C_UNK it_802EA0A4();
/* 2EA0E0 */ void it_802EA0E0(Item_GObj*);
/* 2EA108 */ M2C_UNK it_802EA108();
/* 2EA150 */ M2C_UNK it_802EA150();
/* 2EA154 */ void it_802EA154(Item_GObj*);
/* 2EA1B4 */ void it_802EA1B4(Item_GObj*);
/* 2EA204 */ M2C_UNK it_802EA204();
/* 2EA24C */ M2C_UNK it_802EA24C();
/* 2EA27C */ M2C_UNK it_802EA27C();
/* 2EA2A0 */ M2C_UNK it_802EA2A0();
/* 2EA308 */ M2C_UNK it_802EA308();
/* 2EA310 */ M2C_UNK it_802EA310();
/* 2EA314 */ M2C_UNK it_802EA314();
/* 2EA334 */ M2C_UNK it_802EA334();
/* 2EA394 */ M2C_UNK it_802EA394();
/* 2EA39C */ M2C_UNK it_802EA39C();
/* 2EA3B8 */ M2C_UNK it_802EA3B8();
/* 2EA3D8 */ M2C_UNK it_802EA3D8();
/* 2EA3E0 */ M2C_UNK it_802EA3E0();
/* 2EA3FC */ M2C_UNK it_802EA3FC();
/* 2EA41C */ void it_802EA41C(Item_GObj*);
/* 2EA478 */ M2C_UNK it_802EA478();
/* 2EA674 */ M2C_UNK it_802EA674();
/* 2EA6F4 */ M2C_UNK it_802EA6F4();
/* 2EA804 */ M2C_UNK it_802EA804();
/* 2EA988 */ M2C_UNK it_802EA988();
/* 2EA9FC */ M2C_UNK it_802EA9FC();
/* 2EAAEC */ M2C_UNK it_802EAAEC();
/* 2EAC8C */ M2C_UNK it_802EAC8C();
/* 2EADD8 */ void it_802EADD8(Item_GObj*);
/* 2EAE80 */ M2C_UNK it_802EAE80();
/* 3F8EB0 */ extern ItemStateTable it_803F8EB0[];
#define GALE01_28E738
/* 28E738 */ void it_8028E738(Item_GObj*);
/* 28E904 */ void it_8028E904(Item_GObj*);
/* 28E9B8 */ void it_8028E9B8(Item_GObj*);
/* 28E9E0 */ void it_8028E9E0(Item_GObj*);
/* 28EA54 */ bool it_8028EA54(Item_GObj*);
/* 28EA78 */ bool it_8028EA78(Item_GObj*);
/* 28EA9C */ bool it_8028EA9C(Item_GObj*);
/* 28EAC0 */ bool it_8028EAC0(Item_GObj*);
/* 28EAE0 */ bool it_8028EAE0(Item_GObj*);
/* 28EB00 */ void it_8028EB00(Item_GObj*);
/* 28EB68 */ void it_8028EB68(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 */ void it_802996D0(HSD_GObj*, Vec3*, u32, f32);
/* 299B6C */ bool it_80299B6C(Item_GObj*);
/* 299B74 */ bool it_80299B74(Item_GObj*);
/* 299C08 */ bool it_80299C08(Item_GObj*);
/* 299C10 */ bool it_80299C10(Item_GObj*);
/* 299C18 */ bool it_80299C18(Item_GObj*);
/* 299C20 */ bool it_80299C20(Item_GObj*);
/* 299C28 */ void it_80299C28(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 it_80298634(Item_GObj*);
/* 29863C */ bool it_8029863C(Item_GObj*);
/* 298644 */ bool it_80298644(Item_GObj*);
/* 29864C */ bool it_8029864C(Item_GObj*);
/* 298654 */ bool it_80298654(Item_GObj*);
/* 298828 */ bool it_80298828(Item_GObj*);
/* 2988C4 */ void it_802988C4(Item_GObj*, HSD_GObj*);
/* 3F64F8 */ extern ItemStateTable it_803F64F8[];
#define GALE01_2D9A2C
/* 2D9A2C */ M2C_UNK it_802D9A2C();
/* 2D9B78 */ M2C_UNK it_802D9B78();
/* 2D9BA8 */ void it_802D9BA8(Item_GObj*);
/* 2D9CC4 */ bool it_802D9CC4(Item_GObj*);
/* 2D9DDC */ M2C_UNK it_802D9DDC();
/* 2D9E38 */ M2C_UNK it_802D9E38();
/* 2D9E80 */ M2C_UNK it_802D9E80();
/* 2D9EF4 */ M2C_UNK it_802D9EF4();
/* 2D9F9C */ M2C_UNK it_802D9F9C();
/* 2D9FDC */ M2C_UNK it_802D9FDC();
/* 2DA05C */ M2C_UNK it_802DA05C();
/* 2DA104 */ M2C_UNK it_802DA104();
/* 2DA194 */ M2C_UNK it_802DA194();
/* 2DA1DC */ M2C_UNK it_802DA1DC();
/* 2DA348 */ M2C_UNK it_802DA348();
/* 2DA4C0 */ M2C_UNK it_802DA4C0();
/* 2DA550 */ M2C_UNK it_802DA550();
/* 2DA598 */ M2C_UNK it_802DA598();
/* 2DA730 */ M2C_UNK it_802DA730();
/* 2DA8D8 */ M2C_UNK it_802DA8D8();
/* 2DA960 */ M2C_UNK it_802DA960();
/* 2DAA10 */ M2C_UNK it_802DAA10();
/* 2DAAD0 */ M2C_UNK it_802DAAD0();
/* 2DAAD8 */ M2C_UNK it_802DAAD8();
/* 2DAB48 */ M2C_UNK it_802DAB48();
/* 2DAB84 */ M2C_UNK it_802DAB84();
/* 2DABC0 */ M2C_UNK it_802DABC0();
/* 2DAC20 */ M2C_UNK it_802DAC20();
/* 2DAC98 */ M2C_UNK it_802DAC98();
/* 2DACE4 */ M2C_UNK it_802DACE4();
/* 2DAD18 */ M2C_UNK it_802DAD18();
/* 2DAE0C */ M2C_UNK it_802DAE0C();
/* 2DAE14 */ M2C_UNK it_802DAE14();
/* 2DAE30 */ M2C_UNK it_802DAE30();
/* 2DAE6C */ M2C_UNK it_802DAE6C();
/* 2DAEA8 */ M2C_UNK it_802DAEA8();
/* 2DAFC8 */ M2C_UNK it_802DAFC8();
/* 2DAFCC */ M2C_UNK it_802DAFCC();
/* 2DB074 */ M2C_UNK it_802DB074();
/* 2DB0F0 */ M2C_UNK it_802DB0F0();
/* 2DB138 */ M2C_UNK it_802DB138();
/* 2DB2B0 */ M2C_UNK it_802DB2B0();
/* 2DB358 */ M2C_UNK it_802DB358();
/* 2DB398 */ M2C_UNK it_802DB398();
/* 2DB464 */ M2C_UNK it_802DB464();
/* 2DB500 */ M2C_UNK it_802DB500();
/* 2DB570 */ M2C_UNK it_802DB570();
/* 2DB5F0 */ M2C_UNK it_802DB5F0();
/* 2DB670 */ M2C_UNK it_802DB670();
/* 2DB70C */ M2C_UNK it_802DB70C();
/* 2DB710 */ M2C_UNK it_802DB710();
/* 2DB74C */ M2C_UNK it_802DB74C();
/* 2DB7CC */ M2C_UNK it_802DB7CC();
/* 2DB868 */ M2C_UNK it_802DB868();
/* 2DB86C */ M2C_UNK it_802DB86C();
/* 2DB8A8 */ M2C_UNK it_802DB8A8();
/* 2DB914 */ M2C_UNK it_802DB914();
/* 2DB95C */ M2C_UNK it_802DB95C();
/* 2DB9B8 */ M2C_UNK it_802DB9B8();
/* 2DB9F4 */ M2C_UNK it_802DB9F4();
/* 2DBA68 */ void it_802DBA68(Item_GObj*);
/* 2DBAF0 */ M2C_UNK it_802DBAF0();
/* 2DBC68 */ M2C_UNK it_802DBC68();
/* 2DBD3C */ M2C_UNK it_802DBD3C();
/* 2DBD40 */ M2C_UNK it_802DBD40();
/* 2DBD7C */ M2C_UNK it_802DBD7C();
/* 2DBE50 */ M2C_UNK it_802DBE50();
/* 2DBE54 */ M2C_UNK it_802DBE54();
/* 2DBE90 */ void it_802DBE90(Item_GObj*);
/* 2DBED4 */ M2C_UNK it_802DBED4();
/* 2DBF2C */ M2C_UNK it_802DBF2C();
/* 2DBF30 */ void it_802DBF30(Item_GObj*);
/* 2DC000 */ void it_802DC000(Item_GObj*);
/* 2DC050 */ M2C_UNK it_802DC050();
/* 2DC058 */ M2C_UNK it_802DC058();
/* 2DC088 */ M2C_UNK it_802DC088();
/* 2DC0AC */ M2C_UNK it_802DC0AC();
/* 2DC114 */ M2C_UNK it_802DC114();
/* 2DC11C */ M2C_UNK it_802DC11C();
/* 2DC268 */ M2C_UNK it_802DC268();
/* 2DC310 */ M2C_UNK it_802DC310();
/* 2DC370 */ M2C_UNK it_802DC370();
/* 2DC3B8 */ M2C_UNK it_802DC3B8();
/* 2DC3BC */ M2C_UNK it_802DC3BC();
/* 2DC3DC */ M2C_UNK it_802DC3DC();
/* 2DC43C */ M2C_UNK it_802DC43C();
/* 2DC444 */ M2C_UNK it_802DC444();
/* 2DC460 */ M2C_UNK it_802DC460();
/* 2DC480 */ void it_802DC480(Item_GObj*);
/* 2DC4BC */ M2C_UNK it_802DC4BC();
extern ItemStateTable it_803F8468[];
#define GALE01_2A7D8C
/* 2A7D8C */ void it_802A7D8C(HSD_GObj*, int);
/* 2A7E40 */ void it_802A7E40(Item_GObj*);
/* 2A81C4 */ void fn_802A81C4(HSD_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 */ void it_802A850C(Item_GObj*, Vec3*, Vec3*, f32, f32, f32);
/* 2A8984 */ void it_802A8984(Item_GObj*);
/* 2A8A7C */ void it_802A8A7C(Item_GObj*);
/* 2A8AF8 */ void it_802A8AF8(Item_GObj*);
/* 2A8B20 */ int it_802A8B20(HSD_GObj*);
/* 2A8C70 */ void it_802A8C70(HSD_GObj*);
/* 2A8C74 */ int it_802A8C74(HSD_GObj*);
/* 2A8C7C */ void it_802A8C7C(HSD_GObj*);
/* 2A8CC8 */ int it_802A8CC8(HSD_GObj*);
/* 2A90F0 */ void it_802A90F0(HSD_GObj*);
/* 2A9138 */ int it_802A9138(Item_GObj*);
/* 2A934C */ int it_802A934C(Item_GObj*);
/* 2A93B4 */ void it_802A93B4(HSD_GObj*);
/* 2A943C */ int it_802A943C(HSD_GObj*);
/* 2A9444 */ int it_802A9444(HSD_GObj*);
/* 2A944C */ void it_802A944C(HSD_GObj*);
/* 2A9450 */ int it_802A9450(HSD_GObj*);
/* 2A9458 */ void it_802A9458(HSD_GObj*);
/* 2A96E4 */ int it_802A96E4(Item_GObj*);
/* 2A98E4 */ void it_802A98E4(HSD_GObj*);
/* 2A98E8 */ int it_802A98E8(HSD_GObj*);
/* 2A9A80 */ int it_802A9A80(Item_GObj*);
/* 2A9B08 */ int it_802A9B08(Item_GObj*);
/* 2A9CE0 */ int it_802A9CE0(Item_GObj*);
/* 2A9D4C */ int it_802A9D4C(Item_GObj*);
/* 2AA034 */ void it_802AA034(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*, u8, int,
f32);
/* 29DEB0 */ void it_8029DEB0(HSD_GObj*);
/* 29E074 */ int it_8029E074(HSD_GObj*);
/* 29E218 */ void it_8029E218(HSD_GObj*);
/* 29E21C */ void fn_8029E21C(HSD_GObj*);
/* 29E3D8 */ int it_8029E3D8(HSD_GObj*);
/* 29E574 */ void it_8029E574(HSD_GObj*);
/* 29E5A4 */ int it_8029E5A4(Item_GObj*);
/* 29E5D0 */ void it_8029E5D0(HSD_GObj*);
/* 29E920 */ int it_8029E920(HSD_GObj*);
/* 29EAF0 */ void it_8029EAF0(Item_GObj*);
/* 29EB3C */ int it_8029EB3C(HSD_GObj*);
/* 29EC34 */ void it_8029EC34(HSD_GObj*);
/* 29EF84 */ int it_8029EF84(HSD_GObj*);
/* 29F04C */ void it_8029F04C(Item_GObj*);
/* 29F098 */ int it_8029F098(HSD_GObj*);
/* 29F18C */ void it_8029F18C(HSD_GObj*);
/* 29F3DC */ int it_8029F3DC(HSD_GObj*);
/* 29F60C */ void it_8029F60C(HSD_GObj*);
/* 29F670 */ int it_8029F670(Item_GObj*);
/* 29F69C */ void it_8029F69C(HSD_GObj*);
/* 29F934 */ int it_8029F934(Item_GObj*);
/* 29F954 */ void it_8029F954(HSD_GObj*);
/* 29F958 */ int it_8029F958(HSD_GObj*);
/* 29F960 */ int it_8029F960(HSD_GObj*);
/* 29FA30 */ int it_8029FA30(Item_GObj*);
/* 29FB24 */ void it_8029FB24(Item_GObj*);
/* 29FB4C */ int it_8029FB4C(HSD_GObj*);
/* 29FCE8 */ void it_8029FCE8(HSD_GObj*);
/* 29FCEC */ int it_8029FCEC(Item_GObj*);
/* 29FD20 */ int it_8029FD20(Item_GObj*);
/* 29FD40 */ int it_8029FD40(Item_GObj*);
/* 29FD64 */ int it_8029FD64(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(HSD_GObj*, int);
/* 29FE64 */ M2C_UNK it_8029FE64();
/* 2A013C */ HSD_GObj* it_802A013C(float facing_dir, Fighter_GObj* owner_gobj,
Vec3* pos, Fighter_Part, int);
/* 2A0534 */ void it_802A0534(Item_GObj* gobj, Vec3*);
/* 2A07B4 */ void it_802A07B4(Item_GObj* gobj);
/* 2A0810 */ M2C_UNK it_802A0810();
/* 2A087C */ void it_802A087C(Item_GObj*);
/* 2A0930 */ M2C_UNK it_802A0930();
/* 2A0C34 */ M2C_UNK it_802A0C34();
/* 2A0E70 */ void it_802A0E70(Item_GObj*);
/* 2A0F08 */ M2C_UNK it_802A0F08();
/* 2A0F84 */ void it_802A0F84(Item_GObj*);
/* 2A0F88 */ void it_802A0F88(Item_GObj*);
/* 2A0FB0 */ M2C_UNK it_802A0FB0();
/* 2A0FD0 */ M2C_UNK it_802A0FD0();
/* 2A10C0 */ M2C_UNK it_802A10C0();
/* 2A10E4 */ M2C_UNK it_802A10E4();
/* 2A12DC */ M2C_UNK it_802A12DC();
/* 2A12FC */ M2C_UNK it_802A12FC();
/* 2A13EC */ M2C_UNK it_802A13EC();
/* 2A15EC */ M2C_UNK it_802A15EC();
/* 2A16E4 */ M2C_UNK it_802A16E4();
/* 2A1948 */ M2C_UNK it_802A1948();
/* 2A19E0 */ M2C_UNK it_802A19E0();
/* 2A1C30 */ M2C_UNK it_802A1C30();
/* 2A1D60 */ M2C_UNK it_802A1D60();
/* 2A1F08 */ bool it_802A1F08(Item_GObj*);
/* 2A1FA8 */ bool it_802A1FA8(Item_GObj*);
/* 2A2048 */ bool it_802A2048(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 it_802AF298(Item_GObj*);
/* 2AF304 */ void it_802AF304(Item_GObj*);
/* 2AF434 */ void it_802AF434(Item_GObj*);
/* 2AF920 */ void it_802AF920(Item_GObj*, Item_GObj*);
/* 3F6E98 */ extern ItemStateTable it_803F6E98[];
#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 it_802A7688(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, int 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 */ int it_802A2D88(Item_GObj* arg0);
/* 802A2ED0 */ void it_802A2ED0(Item_GObj* arg0);
/* 802A2EE4 */ void it_802A2EE4(Item_GObj* arg0);
/* 802A30FC */ void it_802A30FC(Item_GObj* arg0);
/* 802A3240 */ void it_802A3240(Item_GObj* arg0);
/* 802A3254 */ void it_802A3254(Item_GObj* arg0);
/* 802A338C */ void it_802A338C(Item_GObj* arg0);
/* 802A34EC */ void it_802A34EC(Item_GObj* arg0);
/* 802A3500 */ void it_802A3500(Item_GObj* arg0);
/* 802A361C */ void it_802A361C(Item_GObj* arg0);
/* 802A3630 */ void it_802A3630(Item_GObj* arg0);
/* 802A3814 */ void it_802A3814(Item_GObj* arg0);
/* 802A3828 */ void it_802A3828(Item_GObj* arg0);
/* 802A39E8 */ void it_802A39E8(Item_GObj* arg0);
/* 802A39FC */ void it_802A39FC(Item_GObj* arg0);
/* 802A3C84 */ void it_802A3C84(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* arg2,
itLinkHookshotAttributes* arg3);
/* 802A678C */ s32 it_802A678C(ItemLink* arg0, Vec3* arg1,
itLinkHookshotAttributes* arg2, f32 arg8);
/* 802A6944 */ void it_802A6944(Item*, f32);
/* 802A6A78 */ s32 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 it_802A7688(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, f32 arg2);
/* 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 Vec3 it_803B8650;
#define GALE01_29570C
/* 29570C */ void it_8029570C(Item_GObj*);
/* 295748 */ M2C_UNK it_80295748();
/* 295770 */ M2C_UNK it_80295770();
/* 2957AC */ M2C_UNK it_802957AC();
/* 295804 */ bool it_80295804(void);
/* 29580C */ M2C_UNK it_8029580C();
/* 295810 */ M2C_UNK it_80295810();
/* 29583C */ M2C_UNK it_8029583C();
/* 295864 */ bool it_80295864(void);
/* 29586C */ M2C_UNK it_8029586C();
/* 29589C */ M2C_UNK it_8029589C();
/* 2958C8 */ void it_802958C8(Item_GObj*);
/* 2958F0 */ bool it_802958F0(Item_GObj* gobj);
/* 295904 */ M2C_UNK it_80295904();
/* 295908 */ void it_80295908(Item_GObj*);
/* 295930 */ M2C_UNK it_80295930();
/* 295974 */ void it_80295974(Item_GObj*);
/* 29599C */ M2C_UNK it_8029599C();
/* 2959E8 */ M2C_UNK it_802959E8();
/* 295ACC */ bool it_80295ACC(Item_GObj*);
/* 295B08 */ void it_80295B08(Item_GObj*);
/* 295B30 */ bool it_80295B30(void);
/* 295B38 */ M2C_UNK it_80295B38();
/* 295B3C */ M2C_UNK it_80295B3C();
/* 295B70 */ bool it_80295B70(Item_GObj*);
/* 295BAC */ bool it_80295BAC(Item_GObj*);
/* 295BCC */ bool it_80295BCC(Item_GObj*);
/* 295C08 */ bool it_80295C08(Item_GObj*);
/* 295C28 */ void it_80295C28(Item_GObj*, Item_GObj*);
/* 3F6310 */ extern ItemStateTable it_803F6310[];
#define GALE01_29A114
/* 29A114 */ M2C_UNK it_8029A114();
/* 29A218 */ M2C_UNK it_8029A218();
/* 29A31C */ M2C_UNK it_8029A31C();
/* 29A498 */ M2C_UNK it_8029A498();
/* 29A504 */ M2C_UNK it_8029A504();
/* 29A524 */ M2C_UNK it_8029A524();
/* 29A58C */ M2C_UNK it_8029A58C();
/* 29A5C0 */ M2C_UNK it_8029A5C0();
/* 29A5E0 */ void it_8029A5E0(Item_GObj*);
/* 29A5F8 */ M2C_UNK it_8029A5F8();
/* 29A600 */ bool it_8029A600(Item_GObj*);
/* 29A608 */ bool it_8029A608(Item_GObj*);
/* 29A610 */ bool it_8029A610(Item_GObj*);
/* 29A618 */ bool it_8029A618(Item_GObj*);
/* 29A620 */ bool it_8029A620(Item_GObj*);
/* 29A704 */ bool it_8029A704(Item_GObj*);
/* 29A728 */ void it_8029A728(Item_GObj*, Item_GObj*);
/* 3F6680 */ extern ItemStateTable it_803F6680[];
#define GALE01_2CB8AC
/* 2CB8AC */ void it_802CB8AC(Item_GObj*);
/* 2CB93C */ M2C_UNK it_802CB93C();
/* 2CB940 */ void it_802CB940(Item_GObj*, Item_GObj*);
/* 2CB960 */ M2C_UNK it_802CB960();
/* 2CB994 */ M2C_UNK it_802CB994();
/* 2CB9E0 */ M2C_UNK it_802CB9E0();
/* 2CBA20 */ M2C_UNK it_802CBA20();
/* 2CBA5C */ M2C_UNK it_802CBA5C();
/* 2CBAA8 */ M2C_UNK it_802CBAA8();
/* 2CBB84 */ M2C_UNK it_802CBB84();
/* 2CBC9C */ M2C_UNK it_802CBC9C();
/* 2CBCD8 */ M2C_UNK it_802CBCD8();
/* 2CBD24 */ M2C_UNK it_802CBD24();
/* 2CBFE4 */ M2C_UNK it_802CBFE4();
/* 2CC030 */ M2C_UNK it_802CC030();
/* 2CC064 */ M2C_UNK it_802CC064();
/* 2CC0A0 */ M2C_UNK it_802CC0A0();
/* 2CC0EC */ M2C_UNK it_802CC0EC();
/* 2CC160 */ M2C_UNK it_802CC160();
/* 2CC184 */ M2C_UNK it_802CC184();
/* 2CC1A4 */ M2C_UNK it_802CC1A4();
/* 2CC1CC */ M2C_UNK it_802CC1CC();
/* 2CC3D4 */ void it_802CC3D4(Item_GObj*);
/* 2CC440 */ void it_802CC440(Item_GObj*);
/* 2CC4AC */ void it_802CC4AC(Item_GObj*);
/* 2CC518 */ void it_802CC518(Item_GObj*);
/* 2CC584 */ void it_802CC584(Item_GObj*, Item_GObj*);
/* 2CC5A4 */ bool it_802CC5A4(Item_GObj*);
/* 2CC5C4 */ bool it_802CC5C4(Item_GObj*);
/* 2CC5CC */ bool it_802CC5CC(Item_GObj*);
/* 2CC5D4 */ M2C_UNK it_802CC5D4();
/* 2CC650 */ M2C_UNK it_802CC650();
/* 2CC684 */ M2C_UNK it_802CC684();
/* 2CC6C4 */ M2C_UNK it_802CC6C4();
/* 3F7BC0 */ extern ItemStateTable it_803F7BC0[];
/* 3F7C00 */ extern ItemStateTable it_803F7C00[];
#define GALE01_2D5050
/* 2D5050 */ void it_802D5050(Item_GObj*);
/* 2D50F0 */ M2C_UNK it_802D50F0();
/* 2D5124 */ M2C_UNK it_802D5124();
/* 2D51C8 */ M2C_UNK it_802D51C8();
/* 2D52E4 */ M2C_UNK it_802D52E4();
/* 2D533C */ M2C_UNK it_802D533C();
/* 2D53AC */ M2C_UNK it_802D53AC();
/* 2D53F0 */ M2C_UNK it_802D53F0();
/* 2D53F4 */ M2C_UNK it_802D53F4();
/* 2D5420 */ M2C_UNK it_802D5420();
/* 2D546C */ M2C_UNK it_802D546C();
/* 2D54C4 */ M2C_UNK it_802D54C4();
/* 2D54CC */ M2C_UNK it_802D54CC();
/* 2D54FC */ M2C_UNK it_802D54FC();
/* 2D5528 */ M2C_UNK it_802D5528();
/* 2D5530 */ M2C_UNK it_802D5530();
/* 2D5560 */ M2C_UNK it_802D5560();
/* 2D55DC */ M2C_UNK it_802D55DC();
/* 2D5600 */ M2C_UNK it_802D5600();
/* 2D5620 */ M2C_UNK it_802D5620();
/* 2D5648 */ bool it_802D5648(Item_GObj*);
/* 2D56F0 */ void it_802D56F0(Item_GObj*, Item_GObj*);
/* 2D5710 */ M2C_UNK it_802D5710();
/* 2D57D0 */ void it_802D57D0(Item_GObj*);
/* 2D582C */ M2C_UNK it_802D582C();
/* 2D5884 */ M2C_UNK it_802D5884();
/* 2D58BC */ M2C_UNK it_802D58BC();
/* 2D58C0 */ M2C_UNK it_802D58C0();
/* 2D58EC */ M2C_UNK it_802D58EC();
/* 2D5914 */ M2C_UNK it_802D5914();
/* 2D594C */ M2C_UNK it_802D594C();
/* 2D597C */ M2C_UNK it_802D597C();
/* 2D59A8 */ void it_802D59A8(Item_GObj*);
/* 2D59D0 */ M2C_UNK it_802D59D0();
/* 2D59D8 */ M2C_UNK it_802D59D8();
/* 2D59DC */ void it_802D59DC(Item_GObj*);
/* 2D5A04 */ void it_802D5A04(Item_GObj*);
/* 2D5A2C */ M2C_UNK it_802D5A2C();
/* 2D5A64 */ M2C_UNK it_802D5A64();
/* 2D5A68 */ M2C_UNK it_802D5A68();
/* 2D5A9C */ void it_802D5A9C(Item_GObj*, Item_GObj*);
/* 3F8190 */ extern ItemStateTable it_803F8190[];
/* 3F8200 */ extern ItemStateTable it_803F8200[];
#define GALE01_2D1438
/* 2D1438 */ void it_802D1438(Item_GObj*);
/* 2D14D0 */ M2C_UNK it_802D14D0();
/* 2D14D4 */ void it_802D14D4(Item_GObj*, Item_GObj*);
/* 2D14F4 */ M2C_UNK it_802D14F4();
/* 2D1558 */ M2C_UNK it_802D1558();
/* 2D1578 */ M2C_UNK it_802D1578();
/* 2D1580 */ M2C_UNK it_802D1580();
/* 2D15E0 */ M2C_UNK it_802D15E0();
/* 2D1620 */ M2C_UNK it_802D1620();
/* 2D16CC */ M2C_UNK it_802D16CC();
/* 2D16D4 */ M2C_UNK it_802D16D4();
/* 2D1720 */ M2C_UNK it_802D1720();
/* 2D17B0 */ M2C_UNK it_802D17B0();
/* 2D1828 */ M2C_UNK it_802D1828();
/* 2D1830 */ M2C_UNK it_802D1830();
/* 2D1930 */ M2C_UNK it_802D1930();
/* 2D19C0 */ M2C_UNK it_802D19C0();
/* 2D1A3C */ M2C_UNK it_802D1A3C();
/* 2D1A44 */ M2C_UNK it_802D1A44();
/* 2D1B30 */ M2C_UNK it_802D1B30();
/* 2D1B94 */ M2C_UNK it_802D1B94();
/* 2D1BB4 */ M2C_UNK it_802D1BB4();
/* 2D1BBC */ M2C_UNK it_802D1BBC();
/* 2D1D40 */ M2C_UNK it_802D1D40();
/* 2D1DB4 */ M2C_UNK it_802D1DB4();
/* 2D1DD8 */ M2C_UNK it_802D1DD8();
/* 2D1E64 */ M2C_UNK it_802D1E64();
/* 2D1E8C */ M2C_UNK it_802D1E8C();
/* 2D1F64 */ M2C_UNK it_802D1F64();
/* 2D208C */ M2C_UNK it_802D208C();
/* 2D2308 */ void it_802D2308(Item_GObj*);
/* 2D234C */ void it_802D234C(Item_GObj*);
/* 2D2390 */ void it_802D2390(Item_GObj*);
/* 2D23D4 */ void it_802D23D4(Item_GObj*, Item_GObj*);
/* 2D23F4 */ M2C_UNK it_802D23F4();
/* 2D246C */ M2C_UNK it_802D246C();
/* 2D24A0 */ M2C_UNK it_802D24A0();
/* 2D24FC */ M2C_UNK it_802D24FC();
/* 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 it_802C0490(Item_GObj*);
/* 2C0498 */ bool it_802C0498(Item_GObj*);
/* 2C04B8 */ bool it_802C04B8(Item_GObj*);
/* 2C04C0 */ bool it_802C04C0(Item_GObj*);
/* 2C04C8 */ bool it_802C04C8(Item_GObj*);
/* 2C04D0 */ bool it_802C04D0(Item_GObj*);
/* 2C04F0 */ void it_802C04F0(Item_GObj*, HSD_GObj*);
/* 3F75C0 */ extern ItemStateTable it_803F75C0[];
#define GALE01_2D66F8
/* 2D66F8 */ M2C_UNK it_802D66F8();
/* 2D6740 */ M2C_UNK it_802D6740();
/* 2D6798 */ M2C_UNK it_802D6798();
/* 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 it_802D6870(Item_GObj*);
/* 2D68FC */ M2C_UNK it_802D68FC();
/* 2D6978 */ M2C_UNK it_802D6978();
/* 2D699C */ M2C_UNK it_802D699C();
/* 2D69BC */ M2C_UNK it_802D69BC();
/* 2D69E4 */ M2C_UNK it_802D69E4();
/* 2D6A54 */ M2C_UNK it_802D6A54();
/* 2D6AD4 */ M2C_UNK it_802D6AD4();
/* 2D6C2C */ M2C_UNK it_802D6C2C();
/* 2D6C60 */ M2C_UNK it_802D6C60();
/* 2D6DDC */ M2C_UNK it_802D6DDC();
/* 2D6E04 */ M2C_UNK it_802D6E04();
/* 2D6E3C */ M2C_UNK it_802D6E3C();
/* 2D6E6C */ M2C_UNK it_802D6E6C();
/* 2D6E98 */ M2C_UNK it_802D6E98();
/* 2D6ED0 */ M2C_UNK it_802D6ED0();
/* 2D6F00 */ bool it_802D6F00(Item_GObj*);
/* 2D6FB0 */ void it_802D6FB0(Item_GObj*, Item_GObj*);
/* 3F82B0 */ extern ItemStateTable it_803F82B0[];
#define GALE01_2B2560
/* 2B2644 */ void it_802B2644(Item_GObj*);
/* 2B2700 */ void it_802B2700(Item_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 it_8029B868(Item_GObj*);
void it_8029B8A0(Item_GObj*);
bool it_8029B8EC(Item_GObj*);
bool it_8029BA38(Item_GObj*);
bool it_8029BA40(Item_GObj*);
bool it_8029BA60(Item_GObj*);
bool it_8029BA68(Item_GObj*);
bool it_8029BA70(Item_GObj*);
bool it_8029BA78(Item_GObj*);
void it_8029BA98(Item_GObj*, Item_GObj*);
extern ItemStateTable it_803F6788[];
#define GALE01_2D09D0
/* 2D09D0 */ void it_802D09D0(Item_GObj*);
/* 2D0A0C */ void it_802D0A0C(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* fighter_gobj, Vec3*, Vec3*, enum_t,
bool, float facing_dir, float, float);
/* 2F0BC8 */ void it_802F0BC8(Item_GObj*, Item_GObj*);
/* 2F0BE8 */ M2C_UNK it_802F0BE8();
/* 2F0D2C */ M2C_UNK it_802F0D2C();
/* 2F0E70 */ M2C_UNK it_802F0E70();
/* 2F0ED4 */ M2C_UNK it_802F0ED4();
/* 2F0ED8 */ M2C_UNK it_802F0ED8();
/* 2F0F04 */ M2C_UNK it_802F0F04();
/* 2F0F08 */ M2C_UNK it_802F0F08();
/* 2F0F0C */ bool it_802F0F0C(Item_GObj*);
/* 2F0F14 */ bool it_802F0F14(Item_GObj*);
/* 2F0F34 */ bool it_802F0F34(Item_GObj*);
/* 2F0F3C */ bool it_802F0F3C(Item_GObj*);
/* 2F0F44 */ bool it_802F0F44(Item_GObj*);
/* 2F0F64 */ bool it_802F0F64(Item_GObj*);
/* 3F9388 */ extern ItemStateTable it_803F9388[];
#define GALE01_2F0340
/* 2F0340 */ Item_GObj* it_802F0340(Item_GObj*, Vec3*, Vec3*, u32, u32, float);
/* 2F044C */ void it_802F044C(Item_GObj*, Item_GObj*);
/* 2F046C */ void it_802F046C(Item_GObj*);
/* 2F0484 */ M2C_UNK it_802F0484();
/* 2F04F0 */ M2C_UNK it_802F04F0();
/* 2F059C */ M2C_UNK it_802F059C();
/* 2F05A0 */ bool it_802F05A0();
/* 2F05A8 */ M2C_UNK it_802F05A8();
/* 2F063C */ M2C_UNK it_802F063C();
/* 3F9378 */ extern ItemStateTable it_803F9378[];
#define GALE01_2CAFD4
/* 2CAFD4 */ void it_802CAFD4(Item_GObj*);
/* 2CB0F4 */ M2C_UNK it_802CB0F4();
/* 2CB0F8 */ void it_802CB0F8(Item_GObj*, Item_GObj*);
/* 2CB118 */ M2C_UNK it_802CB118();
/* 2CB14C */ M2C_UNK it_802CB14C();
/* 2CB150 */ M2C_UNK it_802CB150();
/* 2CB17C */ M2C_UNK it_802CB17C();
/* 2CB280 */ M2C_UNK it_802CB280();
/* 2CB284 */ M2C_UNK it_802CB284();
/* 2CB2B0 */ M2C_UNK it_802CB2B0();
/* 2CB350 */ M2C_UNK it_802CB350();
/* 2CB3B4 */ M2C_UNK it_802CB3B4();
/* 2CB3D8 */ M2C_UNK it_802CB3D8();
/* 2CB4C8 */ M2C_UNK it_802CB4C8();
/* 2CB4F0 */ M2C_UNK it_802CB4F0();
/* 2CB690 */ void it_802CB690(Item_GObj*);
/* 2CB704 */ void it_802CB704(Item_GObj*);
/* 2CB778 */ void it_802CB778(Item_GObj*, Item_GObj*);
/* 2CB798 */ M2C_UNK it_802CB798();
/* 2CB810 */ M2C_UNK it_802CB810();
/* 2CB844 */ M2C_UNK it_802CB844();
/* 2CB8A4 */ M2C_UNK it_802CB8A4();
/* 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 it_802D858C(Item_GObj*);
/* 2D8594 */ void it_802D8594(Item_GObj*);
/* 2D85EC */ bool it_802D85EC(Item_GObj*);
/* 2D85F4 */ bool it_802D85F4(Item_GObj*);
/* 3F83E0 */ extern ItemStateTable it_803F83E0[];
#define GALE01_2978DC
/* 2978DC */ void it_802978DC(Item_GObj*);
/* 297904 */ void it_80297904(Item_GObj*);
/* 297944 */ M2C_UNK it_80297944();
/* 29799C */ M2C_UNK it_8029799C();
/* 2979A4 */ M2C_UNK it_802979A4();
/* 2979A8 */ M2C_UNK it_802979A8();
/* 2979D4 */ M2C_UNK it_802979D4();
/* 297A1C */ M2C_UNK it_80297A1C();
/* 297A24 */ M2C_UNK it_80297A24();
/* 297A54 */ M2C_UNK it_80297A54();
/* 297ABC */ void it_80297ABC(Item_GObj*);
/* 297AE4 */ M2C_UNK it_80297AE4();
/* 297AEC */ M2C_UNK it_80297AEC();
/* 297AF0 */ void it_80297AF0(Item_GObj*);
/* 297B18 */ void it_80297B18(Item_GObj*);
/* 297B40 */ M2C_UNK it_80297B40();
/* 297B8C */ M2C_UNK it_80297B8C();
/* 297BB8 */ bool it_80297BB8(Item_GObj*);
/* 297BF8 */ void it_80297BF8(Item_GObj*);
/* 297C84 */ M2C_UNK it_80297C84();
/* 297C8C */ M2C_UNK it_80297C8C();
/* 297C90 */ M2C_UNK it_80297C90();
/* 297CC4 */ M2C_UNK it_80297CC4();
/* 297DD8 */ M2C_UNK it_80297DD8();
/* 297E28 */ M2C_UNK it_80297E28();
/* 297E5C */ M2C_UNK it_80297E5C();
/* 297E60 */ M2C_UNK it_80297E60();
/* 297E8C */ M2C_UNK it_80297E8C();
/* 297F94 */ M2C_UNK it_80297F94();
/* 297FC8 */ M2C_UNK it_80297FC8();
/* 297FF8 */ M2C_UNK it_80297FF8();
/* 298060 */ bool it_80298060(Item_GObj*);
/* 2980A0 */ bool it_802980A0(Item_GObj*);
/* 2980D4 */ bool it_802980D4(Item_GObj*);
/* 298114 */ bool it_80298114(Item_GObj*);
/* 298148 */ void it_80298148(Item_GObj*, Item_GObj*);
/* 3F6488 */ extern ItemStateTable it_803F6488[];
#define GALE01_2953C8
void it_802953C8(Item_GObj*);
void it_802953FC(Item_GObj*);
bool it_8029544C(Item_GObj*);
void it_80295454(Item_GObj*);
bool it_80295458(Item_GObj*);
void it_80295498(Item_GObj*);
bool it_802954C0(Item_GObj*);
void it_802954C8(Item_GObj*);
bool it_802954F8(Item_GObj*);
void it_80295524(Item_GObj*);
bool it_8029554C(Item_GObj*);
void it_80295554(Item_GObj*);
void it_8029557C(Item_GObj*);
bool it_802955AC(Item_GObj*);
bool it_802955E0(Item_GObj*);
void it_80295684(Item_GObj*);
bool it_802956AC(Item_GObj*);
void it_802956B4(Item_GObj*);
bool it_802956B8(Item_GObj*);
void it_802956EC(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 it_802D3070(Item_GObj*, Item_GObj*);
/* 2D3090 */ void it_802D3090(Item_GObj*);
/* 2D30C4 */ void it_802D30C4(Item_GObj*);
/* 2D30EC */ bool it_802D30EC(Item_GObj*);
/* 2D3120 */ void it_802D3120(Item_GObj*);
/* 2D3124 */ bool it_802D3124(Item_GObj*);
/* 2D3150 */ bool it_802D3150(Item_GObj*);
/* 2D3184 */ void it_802D3184(Item_GObj*);
/* 2D3188 */ bool it_802D3188(Item_GObj*);
/* 2D31B4 */ void it_802D31B4(Item_GObj*);
/* 2D31F4 */ bool it_802D31F4(Item_GObj*);
/* 2D3218 */ void it_802D3218(Item_GObj*);
/* 2D3238 */ bool it_802D3238(Item_GObj*);
/* 3F7FC8 */ extern ItemStateTable it_803F7FC8[];
#define GALE01_2D3B18
/* 2D3B18 */ void it_802D3B18(Item_GObj*);
/* 2D3B6C */ void it_802D3B6C(Item_GObj*, Item_GObj*);
/* 3F80C8 */ extern ItemStateTable it_803F80C8[];
#define GALE01_2C49E0
/* 2C49E0 */ void it_802C49E0(Item_GObj*);
/* 2C4A00 */ void it_802C4A00(Item_GObj*);
/* 2C4A40 */ HSD_GObj* it_802C4A40(Item_GObj*, Vec3*, float);
/* 2C4B38 */ M2C_UNK it_802C4B38();
/* 2C4BB8 */ M2C_UNK it_802C4BB8();
/* 2C4C08 */ M2C_UNK it_802C4C08();
/* 2C4C3C */ M2C_UNK it_802C4C3C();
/* 2C4C40 */ M2C_UNK it_802C4C40();
/* 2C4C90 */ bool it_802C4C90(Item_GObj*);
/* 2C4C98 */ bool it_802C4C98(Item_GObj*);
/* 2C4CB8 */ bool it_802C4CB8(Item_GObj*);
/* 2C4CC0 */ bool it_802C4CC0(Item_GObj*);
/* 2C4CC8 */ bool it_802C4CC8(Item_GObj*);
/* 2C4CD0 */ bool it_802C4CD0(Item_GObj*);
/* 2C4CD8 */ void it_802C4CD8(Item_GObj*, Item_GObj*);
/* 3F7750 */ extern ItemStateTable it_803F7750[];
#define GALE01_2C4D10
/* 2C4D10 */ M2C_UNK it_802C4D10();
/* 2C4F50 */ M2C_UNK it_802C4F50();
/* 2C5000 */ HSD_GObj* it_802C5000(Item_GObj*, Vec3*, s32, s32, float);
/* 2C519C */ void it_802C519C(Item_GObj*, Vec3*, s32, s32, float, float);
/* 2C53F0 */ void it_802C53F0(Item_GObj*, Vec3*, float, float, float);
/* 2C56A0 */ void it_802C56A0(Item_GObj*);
/* 2C573C */ void it_802C573C(Item_GObj*);
/* 2C578C */ void it_802C578C(Item_GObj*);
/* 2C57C8 */ M2C_UNK it_802C57C8();
/* 2C5B0C */ M2C_UNK it_802C5B0C();
/* 2C5B10 */ bool it_802C5B10(void);
/* 2C5B18 */ M2C_UNK it_802C5B18();
/* 2C5BF8 */ M2C_UNK it_802C5BF8();
/* 2C5CF4 */ M2C_UNK it_802C5CF4();
/* 2C5D64 */ M2C_UNK it_802C5D64();
/* 2C5DAC */ M2C_UNK it_802C5DAC();
/* 2C5DCC */ M2C_UNK it_802C5DCC();
/* 2C5DD0 */ M2C_UNK it_802C5DD0();
/* 2C5E18 */ M2C_UNK fn_802C5E18();
/* 2C5E5C */ M2C_UNK it_802C5E5C();
/* 2C5F7C */ M2C_UNK it_802C5F7C();
/* 2C6094 */ void it_802C6094(Item_GObj*);
/* 2C60AC */ bool it_802C60AC(void);
/* 2C60B4 */ bool it_802C60B4(Item_GObj*);
/* 2C60BC */ bool it_802C60BC(Item_GObj*);
/* 2C60C4 */ bool it_802C60C4(Item_GObj*);
/* 2C60CC */ bool it_802C60CC(Item_GObj*);
/* 2C6138 */ bool it_802C6138(Item_GObj*);
/* 2C6140 */ bool it_802C6140(Item_GObj*);
/* 2C61D4 */ void it_802C61D4(Item_GObj*, Item_GObj*);
/* 3F7760 */ extern ItemStateTable it_803F7760[];
#define GALE01_28FE90
/* 28FE90 */ void it_8028FE90(Item_GObj*);
/* 28FED4 */ void it_8028FED4(Item_GObj*);
/* 28FF1C */ M2C_UNK it_8028FF1C();
/* 28FF60 */ M2C_UNK it_8028FF60();
/* 28FF8C */ M2C_UNK it_8028FF8C();
/* 290070 */ M2C_UNK it_80290070();
/* 2900A0 */ M2C_UNK it_802900A0();
/* 2900CC */ void it_802900CC(Item_GObj*);
/* 2900F4 */ void it_802900F4(Item_GObj*);
/* 290114 */ void it_80290114(Item_GObj*);
/* 2901C0 */ M2C_UNK it_802901C0();
/* 29020C */ M2C_UNK it_8029020C();
/* 290238 */ M2C_UNK it_80290238();
/* 290314 */ M2C_UNK it_80290314();
/* 290404 */ M2C_UNK it_80290404();
/* 29047C */ M2C_UNK it_8029047C();
/* 290560 */ M2C_UNK it_80290560();
/* 2905AC */ M2C_UNK it_802905AC();
/* 2905D8 */ M2C_UNK it_802905D8();
/* 290614 */ M2C_UNK it_80290614();
/* 2906C4 */ M2C_UNK it_802906C4();
/* 2906E4 */ bool it_802906E4(Item_GObj*);
/* 290738 */ bool it_80290738(Item_GObj*);
/* 290794 */ void it_80290794(Item_GObj*);
/* 2907BC */ M2C_UNK it_802907BC();
/* 2907F0 */ bool it_802907F0(Item_GObj*);
/* 290830 */ bool it_80290830(Item_GObj*);
/* 290850 */ bool it_80290850(Item_GObj*);
/* 2908A4 */ bool it_802908A4(Item_GObj*);
/* 2908D8 */ M2C_UNK it_802908D8();
/* 290918 */ void it_80290918(Item_GObj*, Item_GObj*);
/* 3F5E00 */ extern ItemStateTable it_803F5E00[];
#define GALE01_2AD478
/* 2AD478 */ HSD_GObj* it_802AD478(Item_GObj*, Vec3*, s32, float);
/* 2AD590 */ Item_GObj* it_802AD590(Fighter_GObj*, Fighter_Part);
/* 2AD6B8 */ void it_802AD6B8(Item_GObj*);
/* 2AD6F0 */ void it_802AD6F0(Item_GObj*);
/* 2AD768 */ M2C_UNK it_802AD768();
/* 2AD8D0 */ M2C_UNK it_802AD8D0();
/* 2AD8D4 */ M2C_UNK it_802AD8D4();
/* 2AD8DC */ M2C_UNK it_802AD8DC();
/* 2AD9F0 */ M2C_UNK it_802AD9F0();
/* 2AD9F4 */ M2C_UNK it_802AD9F4();
/* 2AD9FC */ void it_802AD9FC(Item_GObj*, Item_GObj*);
/* 3F6C68 */ extern ItemStateTable it_803F6C68[];
#define GALE01_2AA054
/* 2AA054 */ void it_802AA054(Item_GObj*, Vec3*, Vec3*, float, float);
/* 2AA1D8 */ M2C_UNK it_802AA1D8();
/* 2AA22C */ M2C_UNK it_802AA22C();
/* 2AA264 */ M2C_UNK it_802AA264();
/* 2AA284 */ bool it_802AA284(Item_GObj*);
/* 2AA2E8 */ bool it_802AA2E8(Item_GObj*);
/* 2AA34C */ bool it_802AA34C(Item_GObj*);
/* 2AA354 */ bool it_802AA354(Item_GObj*);
/* 2AA35C */ bool it_802AA35C(Item_GObj*);
/* 2AA37C */ bool it_802AA37C(Item_GObj*);
/* 2AA474 */ void it_802AA474(Item_GObj*, Item_GObj*);
/* 3F6B28 */ extern ItemStateTable it_803F6B28[];
#define _ITNESSPKFIREPILLAR_H_
/* 2AA75C */ bool it_802AA75C(Item_GObj*);
/* 2AA7C4 */ void it_802AA7C4(Item_GObj*, Item_GObj*);
/* 3F6B60 */ extern ItemStateTable it_803F6B60[];
#define GALE01_2AA7E4
/* 2AA7E4 */ Fighter_GObj* it_802AA7E4(Item_GObj*);
/* 2AA7F0 */ bool it_802AA7F0(Item_GObj*);
/* 2AA810 */ M2C_UNK it_802AA810();
/* 2AA8C0 */ HSD_GObj* it_802AA8C0(Item_GObj*, Vec3*, enum_t, float);
/* 2AA9CC */ void it_802AA9CC(Item_GObj*);
/* 2AAA50 */ void it_802AAA50(Item_GObj*);
/* 2AAA80 */ M2C_UNK it_802AAA80();
/* 2AAB70 */ M2C_UNK it_802AAB70();
/* 2AAD48 */ M2C_UNK it_802AAD48();
/* 2AAEE4 */ M2C_UNK it_802AAEE4();
/* 2AAFDC */ M2C_UNK it_802AAFDC();
/* 2AB128 */ void it_802AB128(Item_GObj*);
/* 2AB140 */ void it_802AB140(Item_GObj*);
/* 2AB158 */ M2C_UNK it_802AB158();
/* 2AB2AC */ bool it_802AB2AC(Item_GObj*);
/* 2AB3C0 */ bool it_802AB3C0(Item_GObj*);
/* 2AB3C8 */ bool it_802AB3C8(Item_GObj*);
/* 2AB3D0 */ void it_802AB3D0(Item_GObj*, Item_GObj*);
/* 3F6B70 */ extern ItemStateTable it_803F6B70[];
#define GALE01_2AF940
/* 2AF940 */ M2C_UNK it_802AF940();
/* 2AFA2C */ void it_802AFA2C(Item_GObj*);
/* 2AFA70 */ M2C_UNK it_802AFA70();
/* 2AFBA4 */ M2C_UNK it_802AFBA4();
/* 2AFD2C */ void it_802AFD2C(Item_GObj*);
/* 2AFD44 */ M2C_UNK it_802AFD44();
/* 2AFD4C */ bool it_802AFD4C(Item_GObj*);
/* 2AFD54 */ bool it_802AFD54(Item_GObj*);
/* 2AFD5C */ bool it_802AFD5C(Item_GObj*);
/* 2AFD64 */ bool it_802AFD64(Item_GObj*);
/* 2AFD6C */ void it_802AFD6C(Item_GObj*, Item_GObj*);
/* 3F6F40 */ extern ItemStateTable it_803F6F40[];
#define GALE01_2AB3F0
/* 2AB3F0 */ void it_802AB3F0(Item_GObj*, void*, s32);
/* 2AB468 */ M2C_UNK it_802AB468();
/* 2AB4B8 */ M2C_UNK it_802AB4B8();
/* 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 */ M2C_UNK it_802ABA4C();
/* 2ABBB0 */ M2C_UNK it_802ABBB0();
/* 2ABCDC */ M2C_UNK it_802ABCDC();
/* 2AC050 */ bool it_802AC050(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 */ M2C_UNK it_802AC43C();
/* 2AC58C */ M2C_UNK it_802AC58C();
/* 2AC5D8 */ M2C_UNK it_802AC5D8();
/* 2AC604 */ M2C_UNK it_802AC604();
/* 2AC62C */ M2C_UNK it_802AC62C();
/* 2AC6B0 */ M2C_UNK it_802AC6B0();
/* 2AC8A0 */ M2C_UNK it_802AC8A0();
/* 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 */ M2C_UNK it_802BE65C();
/* 2BE958 */ void it_802BE958(void*);
/* 2BE9D8 */ HSD_GObj* it_802BE9D8(float, HSD_GObj*, Vec3*, s32);
/* 2BEB38 */ M2C_UNK it_802BEB38();
/* 2BEB5C */ M2C_UNK it_802BEB5C();
/* 2BEC58 */ M2C_UNK it_802BEC58();
/* 2BED54 */ M2C_UNK it_802BED54();
/* 2BEE88 */ M2C_UNK it_802BEE88();
/* 2BF030 */ M2C_UNK it_802BF030();
/* 2BF180 */ M2C_UNK it_802BF180();
/* 2BF28C */ M2C_UNK it_802BF28C();
/* 2BF4A0 */ M2C_UNK it_802BF4A0();
/* 2BF800 */ M2C_UNK it_802BF800();
/* 2BF900 */ M2C_UNK it_802BF900();
/* 2BFAFC */ M2C_UNK it_802BFAFC();
/* 2BFE34 */ void it_802BFE34(Item_GObj*);
/* 2BFE5C */ void it_802BFE5C(Item_GObj*, Vec3*, float);
/* 2BFEC4 */ void it_802BFEC4(void*);
/* 2C0010 */ void it_802C0010(Item_GObj*, void*);
/* 2C016C */ void it_802C016C(Item_GObj*, Item_GObj*);
/* 3F7558 */ extern ItemStateTable it_803F7558[];
#define GALE01_2DC69C
/* 2DC69C */ void it_802DC69C(Item_GObj*);
/* 2DC774 */ bool it_802DC774(Item_GObj*);
/* 2DC83C */ bool it_802DC83C(Item_GObj*);
/* 2DC8B8 */ void fn_802DC8B8(Item_GObj*);
/* 2DC910 */ bool it_802DC910(Item_GObj*);
/* 2DC918 */ void it_802DC918(Item_GObj*);
/* 2DC954 */ int it_802DC954(Item_GObj*);
/* 2DC990 */ void it_802DC990(Item_GObj*);
/* 2DCA5C */ int it_802DCA5C(Item_GObj*);
/* 2DCAA4 */ void it_802DCAA4(Item_GObj*);
/* 2DCB34 */ int it_802DCB34(Item_GObj*);
/* 2DCB9C */ void it_802DCB9C(Item_GObj*);
/* 2DCC58 */ bool it_802DCC58(Item_GObj*);
/* 2DCC60 */ void it_802DCC60(Item_GObj*);
/* 2DCC90 */ int it_802DCC90(Item_GObj*);
/* 2DCCCC */ void it_802DCCCC(Item_GObj*);
/* 2DCD54 */ bool it_802DCD54(Item_GObj*);
/* 2DCD9C */ void it_802DCD9C(Item_GObj*);
/* 2DCDC4 */ int it_802DCDC4(Item_GObj*);
/* 2DCE00 */ void it_802DCE00(Item_GObj*);
/* 2DCE74 */ void it_802DCE74(Item_GObj*);
/* 2DCEC4 */ void it_802DCEC4(Item_GObj*);
/* 2DCFBC */ void it_802DCFBC(Item_GObj*);
/* 2DD0A0 */ bool it_802DD0A0(Item_GObj*);
/* 2DD1B4 */ void it_802DD1B4(Item_GObj*);
/* 2DD1DC */ int it_802DD1DC(Item_GObj*);
/* 2DD25C */ bool it_802DD25C(Item_GObj*);
/* 2DD264 */ void it_802DD264(Item_GObj*);
/* 2DD290 */ void it_802DD290(Item_GObj*);
/* 2DD2DC */ void it_802DD2DC(Item_GObj*);
/* 2DD328 */ bool it_802DD328(Item_GObj*);
/* 2DD468 */ void it_802DD468(Item_GObj*);
/* 2DD46C */ int it_802DD46C(Item_GObj*);
/* 2DD4A8 */ void it_802DD4A8(Item_GObj*, s32, Item_StateChangeFlags);
/* 2DD4F4 */ void it_802DD4F4(Item_GObj*);
/* 2DD53C */ bool it_802DD53C(Item_GObj*);
/* 2DD598 */ void it_802DD598(Item_GObj*);
/* 2DD59C */ void it_802DD59C(Item_GObj*);
/* 2DD67C */ void it_802DD67C(Item_GObj*);
/* 2DD6D4 */ bool it_802DD6D4(Item_GObj*);
/* 2DD71C */ void it_802DD71C(Item_GObj*);
/* 2DD74C */ int it_802DD74C(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 */ M2C_UNK it_802E4C08();
/* 2E4C68 */ M2C_UNK it_802E4C68();
/* 2E4CB0 */ M2C_UNK it_802E4CB0();
/* 2E4D78 */ M2C_UNK it_802E4D78();
/* 2E4DB4 */ M2C_UNK it_802E4DB4();
/* 2E4DF8 */ bool it_802E4DF8(void);
/* 2E4E00 */ M2C_UNK it_802E4E00();
/* 2E4E30 */ M2C_UNK it_802E4E30();
/* 2E4E6C */ M2C_UNK it_802E4E6C();
/* 2E4F18 */ M2C_UNK it_802E4F18();
/* 2E4FB0 */ M2C_UNK it_802E4FB0();
/* 2E4FD8 */ M2C_UNK it_802E4FD8();
/* 2E503C */ M2C_UNK it_802E503C();
/* 2E50B0 */ M2C_UNK it_802E50B0();
/* 2E51C4 */ M2C_UNK it_802E51C4();
/* 2E521C */ M2C_UNK it_802E521C();
/* 2E52E0 */ M2C_UNK it_802E52E0();
/* 2E53C8 */ M2C_UNK it_802E53C8();
/* 2E5428 */ M2C_UNK it_802E5428();
/* 2E5514 */ M2C_UNK it_802E5514();
/* 2E5554 */ M2C_UNK it_802E5554();
/* 2E561C */ void it_802E561C(Item_GObj*);
/* 2E5644 */ M2C_UNK it_802E5644();
/* 2E568C */ M2C_UNK it_802E568C();
/* 2E5690 */ void it_802E5690(Item_GObj*);
/* 2E56E8 */ void it_802E56E8(Item_GObj*);
/* 2E5738 */ M2C_UNK it_802E5738();
/* 2E5780 */ M2C_UNK it_802E5780();
/* 2E57B0 */ M2C_UNK it_802E57B0();
/* 2E57D4 */ M2C_UNK it_802E57D4();
/* 2E5834 */ M2C_UNK it_802E5834();
/* 2E587C */ M2C_UNK it_802E587C();
/* 2E5880 */ M2C_UNK it_802E5880();
/* 2E58A0 */ M2C_UNK it_802E58A0();
/* 2E5900 */ bool it_802E5900(void);
/* 2E5908 */ M2C_UNK it_802E5908();
/* 2E5924 */ M2C_UNK it_802E5924();
/* 2E5944 */ void it_802E5944(Item_GObj*);
/* 2E595C */ M2C_UNK it_802E595C();
/* 2E5AA4 */ void it_802E5AA4(Item_GObj*, Item_GObj*);
/* 3F8B48 */ extern ItemStateTable it_803F8B48[];
#define GALE01_2E878C
/* 2E878C */ void it_802E878C(Item_GObj*);
/* 2E87D8 */ bool it_802E87D8(Item_GObj*);
/* 2E87E0 */ bool it_802E87E0(Item_GObj*);
/* 2E87E8 */ bool it_802E87E8(Item_GObj*);
/* 2E87F0 */ bool it_802E87F0(Item_GObj*);
/* 2E87F8 */ bool it_802E87F8(Item_GObj*);
/* 2E881C */ bool it_802E881C(Item_GObj*);
/* 2E883C */ M2C_UNK it_802E883C();
/* 2E8864 */ M2C_UNK it_802E8864();
/* 2E8898 */ M2C_UNK it_802E8898();
/* 2E889C */ M2C_UNK it_802E889C();
/* 2E890C */ M2C_UNK it_802E890C();
/* 2E896C */ bool it_802E896C(void);
/* 2E8974 */ M2C_UNK it_802E8974();
/* 2E8990 */ M2C_UNK it_802E8990();
/* 2E89B0 */ void it_802E89B0(Item_GObj*, Item_GObj*);
/* 2E89D0 */ M2C_UNK it_802E89D0();
/* 2E8ADC */ M2C_UNK it_802E8ADC();
/* 3F8E90 */ extern ItemStateTable it_803F8E90[];
#define GALE01_2D73D0
/* 2D73D0 */ void it_802D73D0(Item_GObj*, Item_GObj*);
/* 2D73F0 */ void it_802D73F0(Item_GObj*);
/* 2D747C */ M2C_UNK it_802D747C();
/* 2D74D0 */ M2C_UNK it_802D74D0();
/* 2D74D8 */ M2C_UNK it_802D74D8();
/* 2D7550 */ M2C_UNK it_802D7550();
/* 2D758C */ M2C_UNK it_802D758C();
/* 2D75F8 */ M2C_UNK it_802D75F8();
/* 2D7670 */ M2C_UNK it_802D7670();
/* 2D76EC */ M2C_UNK it_802D76EC();
/* 2D775C */ M2C_UNK it_802D775C();
/* 2D77C8 */ M2C_UNK it_802D77C8();
/* 2D788C */ M2C_UNK it_802D788C();
/* 2D795C */ M2C_UNK it_802D795C();
/* 2D7A18 */ M2C_UNK it_802D7A18();
/* 2D7A60 */ M2C_UNK it_802D7A60();
/* 2D7A90 */ M2C_UNK it_802D7A90();
/* 2D7AF0 */ M2C_UNK it_802D7AF0();
/* 2D7B3C */ M2C_UNK it_802D7B3C();
/* 2D7B84 */ M2C_UNK it_802D7B84();
/* 2D7BB4 */ M2C_UNK it_802D7BB4();
/* 2D7C14 */ void it_802D7C14(Item_GObj*);
/* 2D7C58 */ M2C_UNK it_802D7C58();
/* 2D7CB0 */ M2C_UNK it_802D7CB0();
/* 2D7CB4 */ void it_802D7CB4(Item_GObj*);
/* 2D7D18 */ void it_802D7D18(Item_GObj*);
/* 2D7D7C */ M2C_UNK it_802D7D7C();
/* 2D7DC4 */ M2C_UNK it_802D7DC4();
/* 2D7DF4 */ M2C_UNK it_802D7DF4();
/* 2D7E18 */ M2C_UNK it_802D7E18();
/* 2D7EAC */ M2C_UNK it_802D7EAC();
/* 2D7ED4 */ M2C_UNK it_802D7ED4();
/* 2D7F38 */ bool it_802D7F38(Item_GObj*);
/* 2D8098 */ M2C_UNK it_802D8098();
/* 2D813C */ M2C_UNK it_802D813C();
/* 2D8190 */ M2C_UNK it_802D8190();
/* 2D81D8 */ M2C_UNK it_802D81D8();
/* 2D81DC */ M2C_UNK it_802D81DC();
/* 2D81FC */ M2C_UNK it_802D81FC();
/* 2D8240 */ M2C_UNK it_802D8240();
/* 2D8274 */ M2C_UNK it_802D8274();
/* 2D82A4 */ M2C_UNK it_802D82A4();
/* 2D82C4 */ M2C_UNK it_802D82C4();
/* 2D8330 */ M2C_UNK it_802D8330();
/* 2D8378 */ M2C_UNK it_802D8378();
/* 2D837C */ M2C_UNK it_802D837C();
/* 2D839C */ M2C_UNK it_802D839C();
/* 2D8408 */ M2C_UNK it_802D8408();
/* 2D8450 */ M2C_UNK it_802D8450();
/* 2D846C */ M2C_UNK it_802D846C();
/* 2D848C */ M2C_UNK it_802D848C();
/* 2D84D8 */ M2C_UNK it_802D84D8(Item_GObj*, Item_GObj*);
/* 3F8320 */ extern ItemStateTable it_803F8320[];
#define GALE01_2E2470
/* 2E2470 */ void it_802E2470(Item_GObj*);
/* 2E257C */ bool it_802E257C(Item_GObj*);
/* 2E269C */ M2C_UNK it_802E269C();
/* 2E26F4 */ M2C_UNK it_802E26F4();
/* 2E273C */ M2C_UNK it_802E273C();
/* 2E2778 */ M2C_UNK it_802E2778();
/* 2E27B4 */ M2C_UNK it_802E27B4();
/* 2E28E0 */ M2C_UNK it_802E28E0();
/* 2E2A58 */ M2C_UNK it_802E2A58();
/* 2E2B38 */ M2C_UNK it_802E2B38();
/* 2E2BC0 */ M2C_UNK it_802E2BC0();
/* 2E2C0C */ M2C_UNK it_802E2C0C();
/* 2E2C14 */ M2C_UNK it_802E2C14();
/* 2E2C44 */ M2C_UNK it_802E2C44();
/* 2E2C80 */ M2C_UNK it_802E2C80();
/* 2E2CFC */ M2C_UNK it_802E2CFC();
/* 2E2D68 */ M2C_UNK it_802E2D68();
/* 2E2D90 */ M2C_UNK it_802E2D90();
/* 2E2DF4 */ M2C_UNK it_802E2DF4();
/* 2E2E30 */ M2C_UNK it_802E2E30();
/* 2E2E90 */ M2C_UNK it_802E2E90();
/* 2E2F08 */ M2C_UNK it_802E2F08();
/* 2E3024 */ M2C_UNK it_802E3024();
/* 2E3098 */ M2C_UNK it_802E3098();
/* 2E3110 */ M2C_UNK it_802E3110();
/* 2E31B8 */ M2C_UNK it_802E31B8();
/* 2E31BC */ M2C_UNK it_802E31BC();
/* 3F89C8 */ extern ItemStateTable it_803F89C8[];
#define GALE01_28B08C
/* 28B08C */ int it_8028B08C(Item_GObj* item_gobj, int statenum);
/* 28B0B8 */ void it_8028B0B8(Item_GObj* item_gobj);
/* 28B0EC */ void it_8028B0EC(Item_GObj* item_gobj);
/* 28B144 */ bool it_8028B144(Item_GObj* item_gobj);
/* 28B14C */ void it_8028B14C(Item_GObj* item_gobj);
/* 28B150 */ bool it_8028B150(Item_GObj* item_gobj);
/* 28B17C */ void it_8028B17C(Item_GObj* item_gobj);
/* 28B1A4 */ bool it_8028B1A4(Item_GObj* item_gobj);
/* 28B2EC */ void it_8028B2EC(Item_GObj* item_gobj);
/* 28B394 */ bool it_8028B394(Item_GObj* item_gobj);
/* 28B3C0 */ void it_8028B3C0(Item_GObj* item_gobj);
/* 28B3E0 */ void it_8028B3E0(Item_GObj* item_gobj);
/* 28B42C */ void it_8028B42C(Item_GObj* item_gobj);
/* 28B4D4 */ bool it_8028B4D4(Item_GObj* item_gobj);
/* 28B4F8 */ bool it_8028B4F8(Item_GObj* item_gobj);
/* 28B51C */ bool it_8028B51C(Item_GObj* item_gobj);
/* 28B540 */ bool it_8028B540(Item_GObj* item_gobj);
/* 28B560 */ bool it_8028B560(Item_GObj* item_gobj);
/* 28B580 */ void it_8028B580(Item_GObj* item_gobj);
/* 28B5A8 */ bool it_8028B5A8(Item_GObj* item_gobj);
/* 28B5B0 */ void it_8028B5B0(Item_GObj* item_gobj);
/* 28B5B4 */ bool it_8028B5B4(Item_GObj* item_gobj);
/* 28B5E8 */ void it_8028B5E8(Item_GObj* item_gobj);
/* 28B60C */ bool it_8028B60C(Item_GObj* item_gobj);
/* 28B614 */ void it_8028B614(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 it_8028B8B8(Item_GObj* item_gobj, HSD_GObj*);
/* 3F5AB0 */ extern ItemStateTable it_803F5AB0[];
/* 3F70B8 */ extern ItemStateTable it_803F70B8[];
#define GALE01_2E05A0
/* 2E05A0 */ void it_802E05A0(Item_GObj*);
/* 2E0678 */ M2C_UNK it_802E0678();
/* 2E06B4 */ M2C_UNK it_802E06B4();
/* 2E06BC */ M2C_UNK it_802E06BC();
/* 2E06F8 */ M2C_UNK it_802E06F8();
/* 2E0734 */ M2C_UNK it_802E0734();
/* 2E0974 */ M2C_UNK it_802E0974();
/* 2E09BC */ M2C_UNK it_802E09BC();
/* 2E0B78 */ M2C_UNK it_802E0B78();
/* 2E0D9C */ M2C_UNK it_802E0D9C();
/* 2E0E10 */ M2C_UNK it_802E0E10();
/* 2E0EE0 */ bool it_802E0EE0(Item_GObj*);
/* 2E0F1C */ M2C_UNK it_802E0F1C();
/* 2E0F70 */ void it_802E0F70(Item_GObj*);
/* 2E0F98 */ M2C_UNK it_802E0F98();
/* 2E0FE0 */ M2C_UNK it_802E0FE0();
/* 2E0FE4 */ void it_802E0FE4(Item_GObj*);
/* 2E1040 */ M2C_UNK it_802E1040();
/* 2E10A0 */ M2C_UNK it_802E10A0();
/* 2E10A4 */ M2C_UNK it_802E10A4();
/* 2E10C8 */ void it_802E10C8(Item_GObj*);
/* 2E1128 */ M2C_UNK it_802E1128();
/* 2E1170 */ M2C_UNK it_802E1170();
/* 2E11A0 */ M2C_UNK it_802E11A0();
/* 2E11E0 */ M2C_UNK it_802E11E0();
/* 2E13EC */ M2C_UNK it_802E13EC();
/* 2E1498 */ M2C_UNK it_802E1498();
/* 2E1578 */ M2C_UNK it_802E1578();
/* 2E15B0 */ M2C_UNK it_802E15B0();
/* 2E1648 */ M2C_UNK it_802E1648();
/* 2E1694 */ M2C_UNK it_802E1694();
/* 2E16D8 */ M2C_UNK it_802E16D8(Item_GObj*, Item_GObj*);
/* 2E16F8 */ M2C_UNK it_802E16F8();
extern ItemStateTable it_803F88C0[];
#define GALE01_2BD158
/* 2BD158 */ void it_802BD158(Item_GObj* gobj, Vec3*, int, float);
/* 2BD240 */ bool it_802BD240(Item_GObj*);
/* 2BD248 */ M2C_UNK it_802BD248();
/* 2BD2EC */ M2C_UNK it_802BD2EC();
/* 2BD30C */ void it_802BD30C(Item_GObj*, Item_GObj*);
/* 3F7488 */ extern ItemStateTable it_803F7488[];
#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 it_802BDB4C(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 it_802BDC74(Item_GObj*);
/* 2BDCC0 */ bool it_802BDCC0(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 it_802BDDF8(Item_GObj*, HSD_GObj*);
/* 3F74F8 */ extern ItemStateTable it_803F74F8[];
#define GALE01_2BDE18
/* 2BDE18 */ HSD_GObj* it_802BDE18(Item_GObj*, Vec3*, Fighter_Part, enum_t,
float);
/* 2BDEFC */ void it_802BDEFC(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 it_802BDFE0(Item_GObj*);
/* 2BE02C */ M2C_UNK it_802BE02C();
/* 2BE100 */ void it_802BE100(Item_GObj* gobj);
/* 2BE168 */ M2C_UNK it_802BE168();
/* 2BE1F4 */ void it_802BE1F4(Item_GObj*, Item_GObj*);
/* 3F7528 */ extern ItemStateTable it_803F7528[];
#define GALE01_2BE214
/* 2BE214 */ void it_802BE214(Item_GObj* gobj, Vec3* pos, enum_t,
float facing_dir);
/* 2BE2E8 */ M2C_UNK it_802BE2E8();
/* 2BE408 */ M2C_UNK it_802BE408();
/* 2BE458 */ M2C_UNK it_802BE458();
/* 2BE488 */ bool it_802BE488(Item_GObj*);
/* 2BE4AC */ bool it_802BE4AC(Item_GObj*);
/* 2BE4D0 */ bool it_802BE4D0(Item_GObj*);
/* 2BE4F4 */ bool it_802BE4F4(Item_GObj*);
/* 2BE518 */ bool it_802BE518(Item_GObj*);
/* 2BE538 */ bool it_802BE538(Item_GObj*);
/* 2BE578 */ void it_802BE578(Item_GObj*, Item_GObj*);
/* 3F7548 */ extern ItemStateTable it_803F7548[];
#define GALE01_2BD32C
/* 2BD32C */ M2C_UNK it_802BD32C();
/* 2BD45C */ void it_802BD45C(Item_GObj* gobj);
/* 2BD47C */ void it_802BD47C(Item_GObj*);
/* 2BD4AC */ HSD_GObj* it_802BD4AC(Item_GObj*, Vec3*, u8, s32, float);
/* 2BD628 */ void it_802BD628(Item_GObj*);
/* 2BD6D4 */ M2C_UNK it_802BD6D4();
/* 2BD6DC */ M2C_UNK it_802BD6DC();
/* 2BD6E0 */ M2C_UNK it_802BD6E0();
/* 2BD718 */ M2C_UNK it_802BD718();
/* 2BD748 */ void it_802BD748(Item_GObj*);
/* 2BD7E0 */ M2C_UNK it_802BD7E0();
/* 2BD818 */ M2C_UNK it_802BD818();
/* 2BD864 */ M2C_UNK it_802BD864();
/* 2BD8CC */ void it_802BD8CC(Item_GObj*);
/* 2BD938 */ bool it_802BD938(Item_GObj*);
/* 2BD978 */ bool it_802BD978(Item_GObj*);
/* 2BD99C */ bool it_802BD99C(Item_GObj*);
/* 2BD9C0 */ bool it_802BD9C0(Item_GObj*);
/* 2BD9E4 */ bool it_802BD9E4(Item_GObj*);
/* 2BDA08 */ void it_802BDA08(Item_GObj*, Item_GObj*);
/* 2BDB94 */ void it_802BDB94(Item_GObj* gobj);
/* 3F74A8 */ extern ItemStateTable it_803F74A8[];
#define GALE01_2B1DEC
/* 2B1DEC */ int it_802B1DEC(Item_GObj*);
/* 2B1DF8 */ Item_GObj* it_802B1DF8(Item_GObj*, Vec3*, Vec3*, s32, s32, s32);
/* 2B1FC8 */ s32 it_802B1FC8(Item_GObj*);
/* 2B1FE8 */ void it_802B1FE8(Item_GObj*, Vec3*);
/* 2B202C */ void it_802B202C(Item_GObj*);
/* 2B2080 */ M2C_UNK it_802B2080();
/* 2B20DC */ M2C_UNK it_802B20DC();
/* 2B211C */ M2C_UNK it_802B211C();
/* 2B21A8 */ M2C_UNK it_802B21A8();
/* 2B21E0 */ M2C_UNK it_802B21E0();
/* 2B22B8 */ M2C_UNK it_802B22B8();
/* 2B2340 */ M2C_UNK it_802B2340();
/* 2B2508 */ bool it_802B2508(Item_GObj*);
/* 2B2510 */ bool it_802B2510(Item_GObj*);
/* 2B2518 */ bool it_802B2518(Item_GObj*);
/* 2B2520 */ bool it_802B2520(Item_GObj*);
/* 2B2528 */ void it_802B2528(Item_GObj*, Item_GObj*);
/* 3F70C8 */ extern ItemStateTable it_803F70C8[];
#define GALE01_2B3EFC
/* 2B3EFC */ M2C_UNK it_802B3EFC();
/* 2B3F20 */ M2C_UNK it_802B3F20();
/* 2B3F88 */ M2C_UNK it_802B3F88();
/* 2B4224 */ M2C_UNK it_802B4224();
/* 2B43B0 */ M2C_UNK it_802B43B0();
/* 2B43D0 */ M2C_UNK it_802B43D0();
/* 2B4450 */ M2C_UNK it_802B4450();
/* 2B45D0 */ void it_802B45D0(Item_GObj*);
/* 2B45F0 */ bool it_802B45F0(Item_GObj*);
/* 2B4638 */ bool it_802B4638(Item_GObj*);
/* 2B4680 */ bool it_802B4680(Item_GObj*);
/* 2B46C8 */ bool it_802B46C8(Item_GObj*);
/* 2B4A18 */ bool it_802B4A18(Item_GObj*);
/* 2B4A60 */ bool it_802B4A60(Item_GObj*);
/* 2B4AA8 */ void it_802B4AA8(Item_GObj*, Item_GObj*);
/* 3F71D8 */ extern ItemStateTable it_803F71D8[];
#define GALE01_2B3368
/* 2B3368 */ M2C_UNK it_802B3368();
/* 2B338C */ void it_802B338C(Item_GObj*, Vec3*, float facing_dir, u32);
/* 2B34E4 */ void it_802B34E4(Item_GObj*);
/* 2B3544 */ void it_802B3544(Item_GObj* gobj);
/* 2B3554 */ M2C_UNK it_802B3554();
/* 2B3680 */ M2C_UNK it_802B3680();
/* 2B36BC */ M2C_UNK it_802B36BC();
/* 2B3790 */ M2C_UNK it_802B3790();
/* 2B3808 */ M2C_UNK it_802B3808();
/* 2B397C */ M2C_UNK it_802B397C();
/* 2B3A94 */ bool it_802B3A94(Item_GObj*);
/* 2B3AF8 */ bool it_802B3AF8(Item_GObj*);
/* 2B3C44 */ bool it_802B3C44(Item_GObj*);
/* 2B3CA8 */ bool it_802B3CA8(Item_GObj*);
/* 2B3D0C */ bool it_802B3D0C(Item_GObj*);
/* 2B3D70 */ bool it_802B3D70(Item_GObj*);
/* 2B3EDC */ void it_802B3EDC(Item_GObj*, Item_GObj*);
/* 3F7190 */ extern ItemStateTable it_803F7190[];
#define GALE01_2D3260
void it_802D3260(Item_GObj*);
void it_802D32D8(Item_GObj*);
void it_802D32DC(Item_GObj*, Item_GObj*);
bool it_802D32FC(Item_GObj*);
void it_802D3370(Item_GObj*);
bool it_802D33AC(Item_GObj*);
void it_802D33F8(Item_GObj*);
bool it_802D34A4(Item_GObj*);
void it_802D3508(Item_GObj*);
bool it_802D3544(Item_GObj*);
void it_802D3590(Item_GObj*);
bool it_802D3600(Item_GObj*);
void it_802D3624(Item_GObj*);
bool it_802D3688(Item_GObj*);
extern ItemStateTable it_803F7FF8[];
#define GALE01_2D5ABC
/* 2D5ABC */ void it_802D5ABC(Item_GObj*);
/* 2D5B14 */ void it_802D5B14(Item_GObj*);
/* 2D5B60 */ bool it_802D5B60(Item_GObj*);
/* 2D5BBC */ void it_802D5BBC(Item_GObj*);
/* 2D5BDC */ bool it_802D5BDC(Item_GObj*);
/* 2D5C00 */ void it_802D5C00(Item_GObj*);
/* 2D5C60 */ bool it_802D5C60(Item_GObj*);
/* 2D5CB0 */ void it_802D5CB0(Item_GObj*);
/* 2D5CD0 */ bool it_802D5CD0(Item_GObj*);
/* 2D5CD8 */ void it_802D5CD8(Item_GObj*, HSD_GObj*);
/* 3F8250 */ extern ItemStateTable it_803F8250[];
#define GALE01_294DA0
/* 294DA0 */ bool it_80294DA0(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 it_80295118(Item_GObj*);
/* 29524C */ void it_8029524C(Item_GObj*);
/* 295298 */ void it_80295298(Item_GObj*);
/* 295340 */ void it_80295340(Item_GObj*);
/* 2953A8 */ void it_802953A8(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 it_802CF978(Item_GObj*);
/* 2CFA74 */ void it_802CFA74(Item_GObj*);
/* 2CFAB0 */ bool it_802CFAB0(Item_GObj*);
/* 2CFAFC */ void it_802CFAFC(Item_GObj*);
/* 2CFB78 */ void it_802CFB78(Item_GObj*);
/* 2CFBDC */ bool it_802CFBDC(Item_GObj*);
/* 2CFC00 */ void it_802CFC00(Item_GObj*);
/* 2CFC20 */ bool it_802CFC20(Item_GObj*);
/* 3F7DE8 */ extern ItemStateTable it_803F7DE8[];
#define GALE01_28CFE0
/* 28CFE0 */ M2C_UNK it_8028CFE0();
/* 28D090 */ M2C_UNK it_8028D090();
/* 28D100 */ M2C_UNK it_8028D100();
/* 28D26C */ M2C_UNK it_8028D26C();
/* 28D390 */ M2C_UNK it_8028D390();
/* 28D3B8 */ M2C_UNK it_8028D3B8();
/* 28D4A8 */ M2C_UNK fn_8028D4A8();
/* 28D4E4 */ M2C_UNK it_8028D4E4();
/* 28D56C */ M2C_UNK it_8028D56C();
/* 28D59C */ void it_8028D59C(Item_GObj*);
/* 28D62C */ M2C_UNK it_8028D62C();
/* 28D6C0 */ M2C_UNK it_8028D6C0();
/* 28D6C8 */ M2C_UNK it_8028D6C8();
/* 28D6CC */ M2C_UNK it_8028D6CC();
/* 28D7F0 */ M2C_UNK it_8028D7F0();
/* 28D818 */ M2C_UNK it_8028D818();
/* 28D820 */ M2C_UNK it_8028D820();
/* 28D850 */ M2C_UNK it_8028D850();
/* 28D898 */ void it_8028D898(Item_GObj*);
/* 28D8D4 */ M2C_UNK it_8028D8D4();
/* 28D8DC */ M2C_UNK it_8028D8DC();
/* 28D8E0 */ void it_8028D8E0(Item_GObj*);
/* 28D940 */ M2C_UNK it_8028D940();
/* 28D998 */ M2C_UNK it_8028D998();
/* 28D9C8 */ M2C_UNK it_8028D9C8();
/* 28D9F4 */ void it_8028D9F4(Item_GObj*);
/* 28DA30 */ M2C_UNK it_8028DA30();
/* 28DA88 */ M2C_UNK it_8028DA88();
/* 28DAB8 */ M2C_UNK it_8028DAB8();
/* 28DAE4 */ M2C_UNK it_8028DAE4();
/* 28DC5C */ M2C_UNK it_8028DC5C();
/* 28DD88 */ M2C_UNK it_8028DD88();
/* 28DFE8 */ M2C_UNK it_8028DFE8();
/* 28E170 */ M2C_UNK it_8028E170();
/* 28E2D4 */ M2C_UNK it_8028E2D4();
/* 28E370 */ M2C_UNK it_8028E370();
/* 28E3A0 */ M2C_UNK it_8028E3A0();
/* 28E3CC */ void it_8028E3CC(Item_GObj*);
/* 28E408 */ M2C_UNK it_8028E408();
/* 28E410 */ M2C_UNK it_8028E410();
/* 28E414 */ M2C_UNK it_8028E414();
/* 28E540 */ bool it_8028E540(Item_GObj*);
/* 28E584 */ bool it_8028E584(Item_GObj*);
/* 28E5C8 */ bool it_8028E5C8(Item_GObj*);
/* 28E600 */ bool it_8028E600(Item_GObj*);
/* 28E624 */ bool it_8028E624(Item_GObj*);
/* 28E684 */ bool it_8028E684(Item_GObj*);
/* 28E6C0 */ M2C_UNK it_8028E6C0();
/* 28E718 */ void it_8028E718(Item_GObj*, Item_GObj*);
/* 3F5C48 */ extern ItemStateTable it_803F5C48[];
#define GALE01_2B4AC8
/* 2B4AC8 */ void it_802B4AC8(Item_GObj* gobj, Vec3*, float facing_dir,
float x);
/* 2B4BA0 */ M2C_UNK it_802B4BA0();
/* 2B4C10 */ M2C_UNK it_802B4C10();
/* 2B4C38 */ M2C_UNK it_802B4C38();
/* 2B4CC4 */ M2C_UNK it_802B4CC4();
/* 2B4CC8 */ M2C_UNK it_802B4CC8();
/* 2B4CF4 */ M2C_UNK it_802B4CF4();
/* 2B4D1C */ M2C_UNK it_802B4D1C();
/* 2B4F1C */ M2C_UNK it_802B4F1C();
/* 2B4F4C */ M2C_UNK it_802B4F4C();
/* 2B4F78 */ void it_802B4F78(Item_GObj*);
/* 2B4FA0 */ M2C_UNK it_802B4FA0();
/* 2B51A0 */ M2C_UNK it_802B51A0();
/* 2B5284 */ M2C_UNK it_802B5284();
/* 2B52B8 */ bool it_802B52B8(Item_GObj*);
/* 2B52EC */ bool it_802B52EC(Item_GObj*);
/* 2B5320 */ bool it_802B5320(Item_GObj*);
/* 2B5354 */ bool it_802B5354(Item_GObj*);
/* 2B5374 */ bool it_802B5374(Item_GObj*);
/* 2B53CC */ M2C_UNK it_802B53CC();
/* 2B5458 */ M2C_UNK it_802B5458();
/* 2B5478 */ M2C_UNK it_802B5478();
/* 2B54E4 */ void it_802B54E4(Item_GObj*, Item_GObj*);
/* 3F7220 */ extern ItemStateTable it_803F7220[];
#define GALE01_2B7150
/* 2A77DC */ void it_802A77DC(Item_GObj* gobj);
/* 2B7150 */ void it_802B7150(Item_GObj*);
/* 2B7160 */ M2C_UNK it_802B7160();
/* 2B743C */ M2C_UNK it_802B743C();
/* 2B75FC */ M2C_UNK it_802B75FC();
/* 2B7B84 */ void it_802B7B84(Item_GObj* gobj);
/* 2B7C18 */ Item_GObj* it_802B7C18(Fighter_GObj*, Vec3*, float facing_dir);
/* 2B7E34 */ M2C_UNK fn_802B7E34();
/* 2B8048 */ void it_802B8048(Item_GObj* gobj);
/* 2B805C */ M2C_UNK fn_802B805C();
/* 2B8370 */ void it_802B8370(Item_GObj* gobj);
/* 2B8384 */ M2C_UNK fn_802B8384();
/* 2B8510 */ void it_802B8510(Item_GObj* gobj);
/* 2B8524 */ M2C_UNK fn_802B8524();
/* 2B8670 */ void it_802B8670(Item_GObj* gobj);
/* 2B8684 */ M2C_UNK fn_802B8684();
/* 2B8800 */ void it_802B8800(Item_GObj* gobj);
/* 2B8814 */ M2C_UNK fn_802B8814();
/* 2B8948 */ void it_802B8948(Item_GObj* gobj);
/* 2B895C */ M2C_UNK fn_802B895C();
/* 2B8B40 */ void it_802B8B40(Item_GObj* gobj);
/* 2B8B54 */ M2C_UNK fn_802B8B54();
/* 2B8D24 */ void it_802B8D24(Item_GObj* gobj);
/* 2B8D38 */ M2C_UNK fn_802B8D38();
/* 2B8FF8 */ void it_802B8FF8(Item_GObj* gobj);
/* 2B900C */ M2C_UNK it_802B900C();
/* 2B91C4 */ M2C_UNK it_802B91C4();
/* 2B9328 */ M2C_UNK it_802B9328();
/* 2B99A0 */ M2C_UNK it_802B99A0();
/* 2B9CE8 */ M2C_UNK it_802B9CE8();
/* 2B9FD4 */ M2C_UNK it_802B9FD4();
/* 2BA194 */ M2C_UNK it_802BA194();
/* 2BA2D8 */ M2C_UNK it_802BA2D8();
/* 2BA3BC */ M2C_UNK it_802BA3BC();
/* 2BA5DC */ M2C_UNK it_802BA5DC();
/* 2BA760 */ M2C_UNK it_802BA760();
/* 2BA97C */ void it_802BA97C(Item_GObj*);
/* 2BA9B8 */ M2C_UNK it_802BA9B8();
/* 2BAA08 */ M2C_UNK it_802BAA08();
/* 2BAA58 */ void it_802BAA58(Item_GObj* gobj);
/* 2BAA94 */ M2C_UNK it_802BAA94();
/* 2BAAE4 */ void it_802BAAE4(HSD_GObj*, Vec3*, float facing_dir);
/* 2BAB40 */ M2C_UNK it_802BAB40();
/* 2BAB7C */ M2C_UNK it_802BAB7C();
/* 2BABB8 */ M2C_UNK it_802BABB8();
/* 2BAC3C */ void it_802BAC3C(Fighter_GObj* gobj);
/* 2BAC80 */ void it_802BAC80(Fighter_GObj* gobj);
/* 2BACC4 */ void it_802BACC4(Fighter_GObj* gobj);
/* 2BAEA0 */ void it_802BAEA0(Item_GObj*, Item_GObj*);
/* 3F73A8 */ extern ItemStateTable it_803F73A8[];
#define GALE01_2B62D0
/* 2B6C28 */ bool it_802B6C28(Item_GObj*);
/* 2B6C7C */ bool it_802B6C7C(Item_GObj*);
/* 2B6CD0 */ bool it_802B6CD0(Item_GObj*);
/* 2B6D24 */ bool it_802B6D24(Item_GObj*);
/* 2B6E4C */ bool it_802B6E4C(Item_GObj*);
/* 2B7104 */ void it_802B7104(Item_GObj*, Item_GObj*);
/* 3F7340 */ extern ItemStateTable it_803F7340[];
#define GALE01_294AB0
/* 294AB0 */ void it_80294AB0(Item_GObj*);
/* 294BE4 */ void it_80294BE4(Item_GObj*);
/* 294C14 */ void it_80294C14(Item_GObj*);
/* 294C3C */ void it_80294C3C(Item_GObj*);
/* 294CE4 */ void it_80294CE4(Item_GObj*);
/* 294D4C */ bool it_80294D4C(Item_GObj*);
/* 294D54 */ bool it_80294D54(Item_GObj*);
/* 294D5C */ bool it_80294D5C(Item_GObj*);
/* 294D7C */ bool it_80294D7C(Item_GObj*);
/* 3F6220 */ extern ItemStateTable it_803F6220[];
#define GALE01_2BAEEC
/* 2BCE94 */ void it_802BCE94(Item_GObj*);
/* 2BD10C */ void it_802BD10C(Item_GObj*, Item_GObj*);
/* 3F7438 */ extern ItemStateTable it_803F7438[];
#define GALE01_2B18B0
/* 2B18B0 */ M2C_UNK it_802B18B0();
/* 2B19AC */ Item_GObj* it_802B19AC(Item_GObj*, Vec3* cur_pos, u32, u32,
float facing_dir);
/* 2B1AAC */ void it_802B1AAC(Item_GObj*);
/* 2B1AD4 */ M2C_UNK it_802B1AD4();
/* 2B1C34 */ M2C_UNK it_802B1C34();
/* 2B1C38 */ bool it_802B1C38(void);
/* 2B1C40 */ void it_802B1C40(Item_GObj*, Item_GObj*);
/* 3F70A8 */ extern ItemStateTable it_803F70A8[];
#define GALE01_2AFD8C
/* 2AFD8C */ Item_GObj* it_802AFD8C(Item_GObj*, Vec3*, u32, float);
/* 2AFEA8 */ Item_GObj* it_802AFEA8(Item_GObj* gobj, Fighter_GObj* owner_gobj,
u32);
/* 2AFEF8 */ void it_802AFEF8(Item_GObj*);
/* 2AFF08 */ M2C_UNK it_802AFF08();
/* 2B00F4 */ M2C_UNK it_802B00F4();
/* 2B0210 */ M2C_UNK it_802B0210();
/* 2B024C */ M2C_UNK it_802B024C();
/* 2B033C */ M2C_UNK it_802B033C();
/* 2B0444 */ M2C_UNK it_802B0444();
/* 2B0464 */ M2C_UNK it_802B0464();
/* 2B0544 */ M2C_UNK it_802B0544();
/* 2B0548 */ M2C_UNK it_802B0548();
/* 2B057C */ M2C_UNK it_802B057C();
/* 2B0580 */ void it_802B0580(Item_GObj*);
/* 2B0598 */ M2C_UNK it_802B0598();
/* 2B05CC */ M2C_UNK it_802B05CC();
/* 2B0900 */ M2C_UNK it_802B0900();
/* 2B0AB8 */ M2C_UNK it_802B0AB8();
/* 2B0C5C */ bool it_802B0C5C(void);
/* 2B0C64 */ M2C_UNK it_802B0C64();
/* 2B0D84 */ bool it_802B0D84(Item_GObj*);
/* 2B0F34 */ bool it_802B0F34(Item_GObj*);
/* 2B10E4 */ bool it_802B10E4(Item_GObj*);
/* 2B1294 */ bool it_802B1294(Item_GObj*);
/* 2B14DC */ bool it_802B14DC(Item_GObj*);
/* 2B16E4 */ bool it_802B16E4(Item_GObj*);
/* 2B1890 */ void it_802B1890(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 it_802B1D38(Item_GObj*);
/* 2B1D40 */ void it_802B1D40(Item_GObj*, HSD_GObj*);
/* 2B1DAC */ bool it_802B1DAC(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 */ M2C_UNK it_802CD4D8();
/* 2CD4DC */ void it_802CD4DC(Item_GObj*, Item_GObj*);
/* 2CD4FC */ M2C_UNK it_802CD4FC();
/* 2CD7B8 */ bool it_802CD7B8(Item_GObj*);
/* 2CD7D4 */ bool it_802CD7D4(Item_GObj*);
/* 2CD8E4 */ M2C_UNK it_802CD8E4();
/* 2CD954 */ M2C_UNK it_802CD954();
/* 2CD974 */ M2C_UNK it_802CD974();
/* 2CD9C0 */ M2C_UNK it_802CD9C0();
/* 2CDA0C */ M2C_UNK it_802CDA0C();
/* 2CDA3C */ M2C_UNK it_802CDA3C();
/* 2CDA5C */ M2C_UNK it_802CDA5C();
/* 2CDAA8 */ M2C_UNK it_802CDAA8();
/* 2CDB0C */ M2C_UNK it_802CDB0C();
/* 2CDB30 */ M2C_UNK it_802CDB30();
/* 2CDBB8 */ M2C_UNK it_802CDBB8();
/* 3F7CA0 */ extern ItemStateTable it_803F7CA0[];
#define GALE01_295C48
/* 295C48 */ void it_80295C48(Item_GObj*);
/* 295D90 */ void it_80295D90(Item_GObj*);
/* 295DC0 */ void it_80295DC0(Item_GObj*);
/* 295E4C */ void it_80295E4C(Item_GObj*);
/* 295EB4 */ void it_80295EB4(Item_GObj*, Item_GObj*);
/* 3F6370 */ extern ItemStateTable it_803F6370[];
#define GALE01_291BE0
/* 291BE0 */ HSD_GObj* it_80291BE0(Vec3*);
/* 291C98 */ void it_80291C98(Item_GObj*);
/* 291CCC */ M2C_UNK it_80291CCC();
/* 291CF4 */ M2C_UNK it_80291CF4();
/* 291D38 */ M2C_UNK it_80291D38();
/* 291DAC */ M2C_UNK it_80291DAC();
/* 291F14 */ M2C_UNK it_80291F14();
/* 291FA8 */ M2C_UNK it_80291FA8();
/* 292030 */ M2C_UNK it_80292030();
/* 292080 */ M2C_UNK it_80292080();
/* 292088 */ M2C_UNK it_80292088();
/* 29208C */ M2C_UNK it_8029208C();
/* 2920B8 */ M2C_UNK it_802920B8();
/* 2920E0 */ M2C_UNK it_802920E0();
/* 2920E8 */ M2C_UNK it_802920E8();
/* 292118 */ M2C_UNK it_80292118();
/* 29215C */ void it_8029215C(Item_GObj*);
/* 292184 */ M2C_UNK it_80292184();
/* 29218C */ M2C_UNK it_8029218C();
/* 292190 */ void it_80292190(Item_GObj*);
/* 2921B8 */ void it_802921B8(Item_GObj*);
/* 2921E0 */ M2C_UNK it_802921E0();
/* 29222C */ bool it_8029222C(Item_GObj*);
/* 292250 */ bool it_80292250(Item_GObj*);
/* 292274 */ bool it_80292274(Item_GObj*);
/* 292298 */ bool it_80292298(Item_GObj*);
/* 2922B8 */ bool it_802922B8(Item_GObj*);
/* 2922D8 */ void it_802922D8(Item_GObj*);
/* 292300 */ M2C_UNK it_80292300();
/* 292308 */ M2C_UNK it_80292308();
/* 29230C */ M2C_UNK it_8029230C();
/* 292340 */ void it_80292340(Item_GObj*, Item_GObj*);
/* 3F5F40 */ extern ItemStateTable it_803F5F40[];
#define GALE01_298DEC
/* 298DEC */ M2C_UNK it_80298DEC();
/* 298ED0 */ M2C_UNK it_80298ED0();
/* 2990CC */ M2C_UNK it_802990CC();
/* 299148 */ M2C_UNK it_80299148();
/* 29914C */ M2C_UNK it_8029914C();
/* 299360 */ bool it_80299360(Item_GObj*);
/* 299368 */ bool it_80299368(Item_GObj*);
/* 299370 */ bool it_80299370(Item_GObj*);
/* 299378 */ bool it_80299378(Item_GObj*);
/* 299380 */ bool it_80299380(Item_GObj*);
/* 2993A0 */ bool it_802993A0(Item_GObj*);
/* 2993C0 */ void it_802993C0(Item_GObj*, Item_GObj*);
/* 3F6568 */ extern ItemStateTable it_803F6568[];
#define GALE01_284644
/* 284644 */ void it_80284644(Item_GObj*);
/* 2846D4 */ void it_802846D4(Item_GObj*);
/* 2846FC */ bool it_802846FC(Item_GObj*);
/* 284704 */ void it_80284704(Item_GObj*);
/* 284734 */ bool it_80284734(Item_GObj*);
/* 28482C */ bool it_8028482C(Item_GObj*);
/* 284834 */ void it_80284834(Item_GObj*, HSD_GObj* ref);
/* 3F57A0 */ extern ItemStateTable it_803F57A0[];
#define GALE01_292360
/* 292360 */ void it_80292360(Item_GObj*);
/* 292394 */ M2C_UNK it_80292394();
/* 2923BC */ M2C_UNK it_802923BC();
/* 2923F8 */ M2C_UNK it_802923F8();
/* 292450 */ M2C_UNK it_80292450();
/* 292458 */ M2C_UNK it_80292458();
/* 29245C */ M2C_UNK it_8029245C();
/* 292488 */ M2C_UNK it_80292488();
/* 2924B0 */ M2C_UNK it_802924B0();
/* 2924B8 */ M2C_UNK it_802924B8();
/* 2924E8 */ M2C_UNK it_802924E8();
/* 292514 */ void it_80292514(Item_GObj*);
/* 29253C */ M2C_UNK it_8029253C();
/* 292544 */ M2C_UNK it_80292544();
/* 292548 */ void it_80292548(Item_GObj*);
/* 292570 */ M2C_UNK it_80292570();
/* 2925B4 */ void it_802925B4(Item_GObj*);
/* 2925DC */ M2C_UNK it_802925DC();
/* 292628 */ M2C_UNK it_80292628();
/* 29266C */ bool it_8029266C(Item_GObj*);
/* 2926A8 */ void it_802926A8(Item_GObj*);
/* 2926D0 */ M2C_UNK it_802926D0();
/* 2926D8 */ M2C_UNK it_802926D8();
/* 2926DC */ M2C_UNK it_802926DC();
/* 292710 */ bool it_80292710(Item_GObj*);
/* 29274C */ bool it_8029274C(Item_GObj*);
/* 29276C */ bool it_8029276C(Item_GObj*);
/* 2927A8 */ bool it_802927A8(Item_GObj*);
/* 2927C8 */ void it_802927C8(Item_GObj*, Item_GObj*);
/* 3F5F90 */ extern ItemStateTable it_803F5F90[];
#define GALE01_2988E4
/* 2988E4 */ M2C_UNK it_802988E4();
/* 2989C8 */ M2C_UNK it_802989C8();
/* 298ACC */ M2C_UNK it_80298ACC();
/* 298BAC */ M2C_UNK it_80298BAC();
/* 298BB0 */ M2C_UNK it_80298BB0();
/* 298BE4 */ bool it_80298BE4(Item_GObj*);
/* 298BEC */ bool it_80298BEC(Item_GObj*);
/* 298BF4 */ bool it_80298BF4(Item_GObj*);
/* 298BFC */ bool it_80298BFC(Item_GObj*);
/* 298C04 */ bool it_80298C04(Item_GObj*);
/* 298CE8 */ bool it_80298CE8(Item_GObj*);
/* 298DCC */ void it_80298DCC(Item_GObj*, Item_GObj*);
/* 3F6530 */ extern ItemStateTable it_803F6530[];
#define GALE01_2CFC48
void it_802CFC48(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 it_802CFDAC(Item_GObj*);
void it_802CFEA8(Item_GObj*);
bool it_802CFEE4(Item_GObj*);
void it_802CFF30(Item_GObj*);
void it_802CFFAC(Item_GObj*);
bool it_802D0010(Item_GObj*);
void it_802D0034(Item_GObj*);
bool it_802D0054(Item_GObj*);
extern ItemStateTable it_803F7E08[];
#define GALE01_284D54
/* 284D54 */ Item_GObj* itSword_Spawn(Vec3* pos);
/* 284E10 */ void it_80284E10(HSD_GObj*, int);
/* 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 */ void it_80285314(Item_GObj* gobj);
/* 285338 */ void it_80285338(Item_GObj* gobj);
/* 285804 */ void it_80285804(Item_GObj* gobj);
/* 285B00 */ void it_80285B00(Item_GObj* gobj);
/* 285C78 */ void it_80285C78(Item_GObj* gobj);
/* 285DF0 */ void it_80285DF0(Item_GObj* gobj);
/* 285FAC */ bool it_80285FAC(Item_GObj* gobj);
/* 285FE0 */ bool it_80285FE0(Item_GObj* gobj);
/* 286000 */ bool it_80286000(Item_GObj* gobj);
/* 286024 */ bool it_80286024(Item_GObj* gobj);
/* 286048 */ bool itSword_BounceOffShield(Item_GObj* gobj);
/* 286068 */ void it_80286068(Item_GObj* gobj, HSD_GObj* ref_gobj);
/* 3F5800 */ extern ItemStateTable it_803F5800[];
#define GALE01_287458
/* 287458 */ void it_80287458(Item_GObj*);
/* 2874F0 */ M2C_UNK it_802874F0();
/* 287690 */ M2C_UNK it_80287690();
/* 287B28 */ M2C_UNK it_80287B28();
/* 287B68 */ M2C_UNK it_80287B68();
/* 287B6C */ M2C_UNK it_80287B6C();
/* 287D0C */ M2C_UNK it_80287D0C();
/* 287D48 */ M2C_UNK it_80287D48();
/* 287D50 */ M2C_UNK it_80287D50();
/* 287D80 */ M2C_UNK it_80287D80();
/* 287E68 */ void it_80287E68(Item_GObj*);
/* 287E9C */ M2C_UNK it_80287E9C();
/* 287EA4 */ M2C_UNK it_80287EA4();
/* 287EA8 */ void it_80287EA8(Item_GObj*);
/* 287EC8 */ void it_80287EC8(Item_GObj*);
/* 287F20 */ M2C_UNK it_80287F20();
/* 287F5C */ M2C_UNK it_80287F5C();
/* 287FE4 */ M2C_UNK it_80287FE4();
/* 288030 */ M2C_UNK it_80288030();
/* 288194 */ M2C_UNK it_80288194();
/* 2881B4 */ M2C_UNK it_802881B4();
/* 2881FC */ M2C_UNK it_802881FC();
/* 28824C */ M2C_UNK it_8028824C();
/* 288308 */ M2C_UNK it_80288308();
/* 28833C */ M2C_UNK it_8028833C();
/* 288454 */ M2C_UNK it_80288454();
/* 2884DC */ M2C_UNK it_802884DC();
/* 2885A8 */ M2C_UNK it_802885A8();
/* 2885C8 */ M2C_UNK it_802885C8();
/* 288698 */ M2C_UNK it_80288698();
/* 2886B8 */ M2C_UNK it_802886B8();
/* 2886BC */ M2C_UNK it_802886BC();
/* 2886C4 */ M2C_UNK it_802886C4();
/* 2887E0 */ M2C_UNK it_802887E0();
/* 28880C */ M2C_UNK it_8028880C();
/* 288810 */ M2C_UNK it_80288810();
/* 288818 */ int it_80288818(Item_GObj*);
/* 2888B8 */ int it_802888B8(Item_GObj*);
/* 288958 */ int it_80288958(Item_GObj*);
/* 2889F8 */ int it_802889F8(Item_GObj*);
/* 288A98 */ int it_80288A98(Item_GObj*);
/* 288C68 */ void it_80288C68(Item_GObj*, Item_GObj*);
/* 3F58E0 */ extern ItemStateTable it_803F58E0[];
#define GALE01_295ED4
/* 295ED4 */ M2C_UNK it_80295ED4();
/* 295F38 */ M2C_UNK it_80295F38();
/* 2960B8 */ int it_802960B8(Item_GObj* gobj);
/* 2960CC */ int it_802960CC(Item_GObj* gobj);
/* 2960E0 */ void it_802960E0(Item_GObj*);
/* 296120 */ void it_80296120(Item_GObj*);
/* 2961E8 */ M2C_UNK it_802961E8();
/* 2962E0 */ M2C_UNK it_802962E0();
/* 2964A4 */ M2C_UNK it_802964A4();
/* 2964F8 */ M2C_UNK it_802964F8();
/* 2964FC */ M2C_UNK it_802964FC();
/* 296694 */ M2C_UNK it_80296694();
/* 2966D0 */ M2C_UNK it_802966D0();
/* 296724 */ M2C_UNK it_80296724();
/* 296754 */ M2C_UNK it_80296754();
/* 29683C */ void it_8029683C(Item_GObj*);
/* 296898 */ M2C_UNK it_80296898();
/* 2968D4 */ M2C_UNK it_802968D4();
/* 2968D8 */ void it_802968D8(Item_GObj*);
/* 296930 */ void it_80296930(Item_GObj*);
/* 2969D8 */ M2C_UNK it_802969D8();
/* 296A70 */ M2C_UNK it_80296A70();
/* 296AC4 */ M2C_UNK it_80296AC4();
/* 296C48 */ M2C_UNK it_80296C48();
/* 296E88 */ M2C_UNK it_80296E88();
/* 296EA8 */ M2C_UNK it_80296EA8();
/* 296EF0 */ M2C_UNK it_80296EF0();
/* 296F94 */ M2C_UNK it_80296F94();
/* 296FE8 */ M2C_UNK it_80296FE8();
/* 297154 */ M2C_UNK it_80297154();
/* 297368 */ M2C_UNK it_80297368();
/* 2973BC */ M2C_UNK it_802973BC();
/* 2975D4 */ M2C_UNK it_802975D4();
/* 2975F4 */ M2C_UNK it_802975F4();
/* 297674 */ M2C_UNK it_80297674();
/* 297784 */ M2C_UNK it_80297784();
/* 297788 */ bool it_80297788(void);
/* 297790 */ M2C_UNK it_80297790();
/* 29789C */ int it_8029789C(Item_GObj*);
/* 2978A4 */ int it_802978A4(Item_GObj*);
/* 2978AC */ int it_802978AC(Item_GObj*);
/* 2978B4 */ int it_802978B4(Item_GObj*);
/* 2978BC */ void it_802978BC(Item_GObj*, Item_GObj*);
/* 3F63C0 */ extern ItemStateTable it_803F63C0[];
#define GALE01_2CCAB4
/* 2CCAB4 */ void it_802CCAB4(Item_GObj*);
/* 2CCB10 */ M2C_UNK it_802CCB10();
/* 2CCB14 */ void it_802CCB14(Item_GObj*, Item_GObj*);
/* 2CCB34 */ M2C_UNK it_802CCB34();
/* 2CCBAC */ M2C_UNK it_802CCBAC();
/* 2CCBCC */ M2C_UNK it_802CCBCC();
/* 2CCBF8 */ M2C_UNK it_802CCBF8();
/* 2CCC68 */ M2C_UNK it_802CCC68();
/* 2CCCC4 */ M2C_UNK it_802CCCC4();
/* 2CCD9C */ M2C_UNK it_802CCD9C();
/* 2CCE20 */ M2C_UNK it_802CCE20();
/* 2CCE28 */ M2C_UNK it_802CCE28();
/* 2CCE9C */ M2C_UNK it_802CCE9C();
/* 2CCEC0 */ M2C_UNK it_802CCEC0();
/* 2CCF74 */ M2C_UNK it_802CCF74();
/* 3F7C40 */ extern ItemStateTable it_803F7C40[];
#define GALE01_2EB5C8
/* 2EB5C8 */ void it_802EB5C8(Item_GObj*);
/* 2EB684 */ bool it_802EB684(Item_GObj*);
/* 2EB6A8 */ bool it_802EB6A8(Item_GObj*);
/* 2EB6DC */ M2C_UNK it_802EB6DC();
/* 2EB808 */ bool it_802EB808(void);
/* 2EB810 */ M2C_UNK it_802EB810();
/* 2EB84C */ M2C_UNK it_802EB84C();
/* 2EB870 */ M2C_UNK it_802EB870();
/* 2EB994 */ bool it_802EB994(void);
/* 2EB99C */ M2C_UNK it_802EB99C();
/* 2EB9D4 */ M2C_UNK it_802EB9D4();
/* 2EBA00 */ M2C_UNK it_802EBA00();
/* 2EBAF0 */ M2C_UNK it_802EBAF0();
/* 2EBB38 */ M2C_UNK it_802EBB38();
/* 2EBCD0 */ M2C_UNK it_802EBCD0();
/* 2EBD14 */ M2C_UNK it_802EBD14();
/* 2EBDC8 */ bool it_802EBDC8(void);
/* 2EBDD0 */ M2C_UNK it_802EBDD0();
/* 2EBE30 */ M2C_UNK it_802EBE30();
/* 2EBE5C */ M2C_UNK it_802EBE5C();
/* 2EBF00 */ bool it_802EBF00(void);
/* 2EBF08 */ M2C_UNK it_802EBF08();
/* 2EBF80 */ M2C_UNK it_802EBF80();
/* 2EBFAC */ M2C_UNK it_802EBFAC();
/* 2EC0FC */ bool it_802EC0FC(void);
/* 2EC104 */ M2C_UNK it_802EC104();
/* 2EC168 */ M2C_UNK it_802EC168();
/* 2EC18C */ M2C_UNK it_802EC18C();
/* 2EC1F4 */ M2C_UNK it_802EC1F4();
/* 2EC25C */ M2C_UNK it_802EC25C();
/* 2EC2E4 */ M2C_UNK it_802EC2E4();
/* 2EC2E8 */ M2C_UNK it_802EC2E8();
/* 2EC35C */ M2C_UNK it_802EC35C();
/* 2EC390 */ bool it_802EC390(void);
/* 2EC398 */ M2C_UNK it_802EC398();
/* 2EC3C8 */ M2C_UNK it_802EC3C8();
/* 2EC3F4 */ M2C_UNK it_802EC3F4();
/* 2EC460 */ M2C_UNK it_802EC460();
/* 2EC4A0 */ M2C_UNK it_802EC4A0();
/* 2EC4A4 */ M2C_UNK it_802EC4A4();
/* 2EC4D0 */ M2C_UNK it_802EC4D0();
/* 2EC55C */ M2C_UNK it_802EC55C();
/* 2EC5D4 */ M2C_UNK it_802EC5D4();
/* 2EC5D8 */ M2C_UNK it_802EC5D8();
/* 2EC604 */ M2C_UNK it_802EC604();
/* 2EC62C */ M2C_UNK it_802EC62C();
/* 2EC66C */ M2C_UNK it_802EC66C();
/* 2EC670 */ M2C_UNK it_802EC670();
/* 2EC69C */ M2C_UNK it_802EC69C();
/* 2EC7A0 */ bool it_802EC7A0(void);
/* 2EC7A8 */ M2C_UNK it_802EC7A8();
/* 2EC80C */ M2C_UNK it_802EC80C();
/* 2EC830 */ M2C_UNK it_802EC830();
/* 2EC850 */ void it_802EC850(Item_GObj*, Item_GObj*);
/* 2EC870 */ M2C_UNK it_802EC870();
/* 2EC9E8 */ M2C_UNK it_802EC9E8();
/* 2ECA70 */ M2C_UNK it_802ECA70();
/* 2ECC8C */ int it_802ECC8C(Item_GObj*);
/* 2ECC98 */ void it_802ECC98(Item_GObj*, float);
/* 2ECCA4 */ M2C_UNK it_802ECCA4();
extern ItemStateTable it_803F9000[];
#define GALE01_2D36B0
void it_802D36B0(Item_GObj*);
void it_802D3728(Item_GObj*);
void it_802D372C(Item_GObj*, Item_GObj*);
bool it_802D374C(Item_GObj*);
void it_802D37C0(Item_GObj*);
bool it_802D37FC(Item_GObj*);
void it_802D3848(Item_GObj*);
bool it_802D390C(Item_GObj*);
void it_802D3970(Item_GObj*);
bool it_802D39AC(Item_GObj*);
void it_802D39F8(Item_GObj*);
bool it_802D3A68(Item_GObj*);
void it_802D3A8C(Item_GObj*);
bool it_802D3AF0(Item_GObj*);
extern ItemStateTable it_803F8058[];
#define GALE01_2841B4
/* 2842A4 */ void it_802842A4(Item_GObj*);
/* 284324 */ void it_80284324(Item_GObj*);
/* 2844E4 */ void it_802844E4(Item_GObj*);
/* 28454C */ void it_8028454C(Item_GObj*);
/* 2845BC */ void it_802845BC(Item_GObj*);
/* 284624 */ void it_80284624(Item_GObj*, Item_GObj*);
/* 3F5740 */ extern ItemStateTable it_803F5740[];
#define GALE01_2EEFA8
/* 2EEFA8 */ M2C_UNK it_802EEFA8();
/* 2EF074 */ bool it_802EF074(Item_GObj*);
/* 2EF098 */ M2C_UNK it_802EF098();
/* 2EF128 */ M2C_UNK it_802EF128();
/* 2EF27C */ M2C_UNK it_802EF27C();
/* 2EF2BC */ M2C_UNK it_802EF2BC();
/* 2EF320 */ M2C_UNK it_802EF320();
/* 2EF3C4 */ M2C_UNK it_802EF3C4();
/* 2EF468 */ M2C_UNK it_802EF468();
/* 2EF46C */ M2C_UNK it_802EF46C();
/* 2EF548 */ M2C_UNK it_802EF548();
/* 2EF700 */ bool it_802EF700(Item_GObj*);
/* 2EF724 */ bool it_802EF724(Item_GObj*);
/* 2EF7CC */ bool it_802EF7CC(Item_GObj*);
/* 2EF874 */ bool it_802EF874(Item_GObj*);
/* 2EF924 */ bool it_802EF924(Item_GObj*);
/* 2EF944 */ bool it_802EF944(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*);
/* 2C9504 */ void it_802C9504(Item_GObj*);
/* 3F7A48 */ extern ItemStateTable it_803F7A48[];
/// @file
/// Unown, the Pokemon.
#define GALE01_2CE710
/* 2CE710 */ void it_802CE710(Item_GObj*);
/* 2CE7CC */ M2C_UNK it_802CE7CC();
/* 2CE7D0 */ void it_802CE7D0(Item_GObj*, Item_GObj*);
/* 2CE7F0 */ M2C_UNK it_802CE7F0();
/* 2CE870 */ M2C_UNK it_802CE870();
/* 2CE8C8 */ bool it_802CE8C8(void);
/* 2CE8D0 */ M2C_UNK it_802CE8D0();
/* 2CEB9C */ M2C_UNK it_802CEB9C();
/* 2CEC18 */ M2C_UNK it_802CEC18();
/* 2CEC1C */ bool it_802CEC1C(void);
/* 2CEC24 */ M2C_UNK it_802CEC24();
/* 2CEC88 */ M2C_UNK it_802CEC88();
/* 2CECAC */ M2C_UNK it_802CECAC();
/* 2CED2C */ M2C_UNK it_802CED2C();
/* 2CED54 */ M2C_UNK it_802CED54();
/* 2CEEC8 */ void it_802CEEC8(Item_GObj*);
/* 2CF0B4 */ void it_802CF0B4(Item_GObj*, Item_GObj*);
/* 2CF0D4 */ M2C_UNK it_802CF0D4();
/* 2CF120 */ M2C_UNK it_802CF120();
/* 2CF154 */ M2C_UNK it_802CF154();
/* 2CF3D8 */ bool it_802CF3D8(void);
/* 3F7D60 */ extern ItemStateTable it_803F7D60[];
/* 3F7D90 */ extern ItemStateTable it_803F7D90[];
#define GALE01_2EE200
/* 2EE200 */ M2C_UNK it_802EE200();
/* 2EE374 */ M2C_UNK it_802EE374();
/* 2EE434 */ M2C_UNK it_802EE434();
/* 2EE544 */ M2C_UNK it_802EE544();
/* 2EE5A0 */ M2C_UNK it_802EE5A0();
/* 2EE6A0 */ M2C_UNK it_802EE6A0();
/* 2EE6DC */ M2C_UNK it_802EE6DC();
/* 2EE7CC */ M2C_UNK it_802EE7CC();
/* 2EE7D0 */ M2C_UNK it_802EE7D0();
/* 2EE7FC */ M2C_UNK fn_802EE7FC();
/* 2EE824 */ M2C_UNK it_802EE824();
/* 2EE914 */ M2C_UNK it_802EE914();
/* 2EE944 */ M2C_UNK it_802EE944();
/* 2EEA08 */ void it_802EEA08(Item_GObj*);
/* 2EEA64 */ bool it_802EEA64(void);
/* 2EEA6C */ M2C_UNK it_802EEA6C();
/* 2EEA70 */ void it_802EEA70(Item_GObj*);
/* 2EEB28 */ void it_802EEB28(Item_GObj*);
/* 2EEBB0 */ void it_802EEBB0(Item_GObj*);
/* 2EEBD8 */ M2C_UNK it_802EEBD8();
/* 2EECC8 */ M2C_UNK it_802EECC8();
/* 2EECCC */ M2C_UNK it_802EECCC();
/* 2EED00 */ M2C_UNK it_802EED00();
/* 2EEDD4 */ M2C_UNK it_802EEDD4();
/* 2EEEC4 */ M2C_UNK it_802EEEC4();
/* 2EEEC8 */ bool it_802EEEC8(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 */ M2C_UNK it_802E324C();
/* 2E32B0 */ M2C_UNK it_802E32B0();
/* 2E32B4 */ void it_802E32B4(Item_GObj*);
/* 2E3314 */ void it_802E3314(Item_GObj*);
/* 2E3364 */ M2C_UNK it_802E3364();
/* 2E33AC */ M2C_UNK it_802E33AC();
/* 2E33DC */ M2C_UNK it_802E33DC();
/* 2E3400 */ M2C_UNK it_802E3400();
/* 2E3470 */ M2C_UNK it_802E3470();
/* 2E34B8 */ M2C_UNK it_802E34B8();
/* 2E34BC */ M2C_UNK it_802E34BC();
/* 2E34DC */ void it_802E34DC(Item_GObj*);
/* 2E3528 */ M2C_UNK it_802E3528();
/* 2E3588 */ bool it_802E3588(void);
/* 2E3590 */ M2C_UNK it_802E3590();
/* 2E35AC */ M2C_UNK it_802E35AC();
/* 2E35CC */ M2C_UNK it_802E35CC();
/* 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 */ M2C_UNK fn_802E398C();
/* 2E39C8 */ M2C_UNK it_802E39C8();
/* 2E3A10 */ M2C_UNK it_802E3A10();
/* 2E3A8C */ M2C_UNK it_802E3A8C();
/* 2E3AC8 */ M2C_UNK it_802E3AC8();
/* 2E3BB8 */ M2C_UNK it_802E3BB8();
/* 2E3C70 */ M2C_UNK it_802E3C70();
/* 2E3D38 */ M2C_UNK it_802E3D38();
/* 2E3DA0 */ M2C_UNK it_802E3DA0();
/* 2E3E5C */ bool it_802E3E5C(void);
/* 2E3E64 */ M2C_UNK it_802E3E64();
/* 2E3E94 */ M2C_UNK it_802E3E94();
/* 2E3ED0 */ M2C_UNK it_802E3ED0();
/* 2E3FAC */ M2C_UNK it_802E3FAC();
/* 2E4018 */ M2C_UNK it_802E4018();
/* 2E4040 */ M2C_UNK it_802E4040();
/* 2E40A4 */ M2C_UNK it_802E40A4();
/* 2E4190 */ M2C_UNK it_802E4190();
/* 2E41D4 */ M2C_UNK it_802E41D4();
/* 2E432C */ M2C_UNK it_802E432C();
/* 2E4330 */ M2C_UNK it_802E4330();
/* 2E436C */ M2C_UNK it_802E436C();
/* 2E43C0 */ M2C_UNK it_802E43C0();
/* 2E4424 */ M2C_UNK it_802E4424();
/* 2E4428 */ M2C_UNK it_802E4428();
/* 2E4464 */ M2C_UNK it_802E4464();
/* 2E44E4 */ bool it_802E44E4(void);
/* 2E44EC */ M2C_UNK it_802E44EC();
/* 2E451C */ M2C_UNK it_802E451C();
/* 2E4558 */ M2C_UNK it_802E4558();
/* 2E45D0 */ M2C_UNK it_802E45D0();
/* 2E464C */ M2C_UNK it_802E464C();
/* 2E4650 */ M2C_UNK it_802E4650();
/* 2E468C */ void it_802E468C(Item_GObj*);
/* 2E46B4 */ M2C_UNK it_802E46B4();
/* 2E46FC */ M2C_UNK it_802E46FC();
/* 2E4700 */ void it_802E4700(Item_GObj*);
/* 2E47C0 */ void it_802E47C0(Item_GObj*);
/* 2E4818 */ M2C_UNK it_802E4818();
/* 2E4860 */ M2C_UNK it_802E4860();
/* 2E4890 */ M2C_UNK it_802E4890();
/* 2E48B4 */ M2C_UNK it_802E48B4();
/* 2E4914 */ M2C_UNK it_802E4914();
/* 2E495C */ M2C_UNK it_802E495C();
/* 2E4960 */ M2C_UNK it_802E4960();
/* 2E4980 */ M2C_UNK it_802E4980();
/* 2E49E0 */ bool it_802E49E0(void);
/* 2E49E8 */ M2C_UNK it_802E49E8();
/* 2E4A04 */ M2C_UNK it_802E4A04();
/* 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 it_8029451C(Item_GObj*);
/* 29455C */ M2C_UNK it_8029455C();
/* 2945AC */ bool it_802945AC(void);
/* 2945B4 */ M2C_UNK it_802945B4();
/* 2945F8 */ M2C_UNK it_802945F8();
/* 294624 */ M2C_UNK it_80294624();
/* 29464C */ bool it_8029464C(void);
/* 294654 */ M2C_UNK it_80294654();
/* 294684 */ M2C_UNK it_80294684();
/* 2946B0 */ void it_802946B0(Item_GObj*);
/* 294728 */ void it_80294728(Item_GObj*);
/* 294788 */ bool it_80294788(void);
/* 294790 */ void it_80294790(Item_GObj*);
/* 2947CC */ void it_802947CC(Item_GObj* gobj, Vec3* pos);
/* 2949C0 */ M2C_UNK it_802949C0();
/* 294A1C */ M2C_UNK it_80294A1C();
/* 294A20 */ bool it_80294A20(void);
/* 294A28 */ void it_80294A28(Item_GObj*);
/* 294A50 */ bool it_80294A50(void);
/* 294A58 */ M2C_UNK it_80294A58();
/* 294A5C */ M2C_UNK it_80294A5C();
/* 294A90 */ void it_80294A90(Item_GObj*, Item_GObj*);
/* 3F61B0 */ extern ItemStateTable it_803F61B0[];
#define GALE01_2B2890
/* 2B2AE0 */ void it_802B2AE0(Item_GObj*);
/* 2B2C04 */ bool it_802B2C04(Item_GObj*);
/* 2B2D50 */ bool it_802B2D50(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 it_802B3294(Item_GObj*);
/* 2B32C8 */ void it_802B32C8(Item_GObj*);
/* 2B3324 */ bool it_802B3324(Item_GObj*);
/* 2B3348 */ void it_802B3348(Item_GObj*, HSD_GObj*);
/* 3F7158 */ extern ItemStateTable it_803F7158[];
#define GALE01_2C3AF0
/* 2C3AF0 */ Fighter_GObj* it_802C3AF0(Item_GObj*);
/* 2C3AFC */ M2C_UNK it_802C3AFC();
/* 2C3BAC */ HSD_GObj* it_802C3BAC(Item_GObj*, Vec3*, float facing_dir, float);
/* 2C3CBC */ void it_802C3CBC(Item_GObj*);
/* 2C3D44 */ void it_802C3D44(Item_GObj*);
/* 2C3D74 */ M2C_UNK it_802C3D74();
/* 2C3E94 */ M2C_UNK it_802C3E94();
/* 2C40A4 */ M2C_UNK it_802C40A4();
/* 2C4208 */ M2C_UNK it_802C4208();
/* 2C4364 */ void it_802C4364(Item_GObj*);
/* 2C437C */ M2C_UNK it_802C437C();
/* 2C443C */ bool it_802C443C(Item_GObj*);
/* 2C4550 */ bool it_802C4550(Item_GObj*);
/* 2C4558 */ bool it_802C4558(Item_GObj*);
/* 2C4560 */ void it_802C4560(Item_GObj*, Item_GObj*);
/* 3F76F8 */ extern ItemStateTable it_803F76F8[];
#define GALE01_2C4580
/* 2C4580 */ M2C_UNK it_802C4580();
/* 2C4670 */ void it_802C4670(Item_GObj*);
/* 2C46C4 */ M2C_UNK it_802C46C4();
/* 2C4820 */ M2C_UNK it_802C4820();
/* 2C4980 */ void it_802C4980(Item_GObj*);
/* 2C49A0 */ bool it_802C49A0(Item_GObj*);
/* 2C49A8 */ bool it_802C49A8(Item_GObj*);
/* 2C49B0 */ bool it_802C49B0(Item_GObj*);
/* 2C49B8 */ bool it_802C49B8(Item_GObj*);
/* 2C49C0 */ void it_802C49C0(Item_GObj*, Item_GObj*);
/* 3F7740 */ extern ItemStateTable it_803F7740[];
#define GALE01_2DDB38
/* 2DDB38 */ M2C_UNK it_802DDB38();
/* 2DDBE8 */ M2C_UNK it_802DDBE8();
/* 2DDC8C */ M2C_UNK fn_802DDC8C();
/* 2DDD38 */ M2C_UNK it_802DDD38();
/* 2DDEB4 */ M2C_UNK it_802DDEB4();
/* 2DE040 */ void it_802DE040(Item_GObj*);
/* 2DE0F0 */ void it_802DE0F0(Item_GObj*);
/* 2DE190 */ bool it_802DE190(Item_GObj*);
/* 2DE198 */ void it_802DE198(Item_GObj*);
/* 2DE1FC */ bool it_802DE1FC(Item_GObj*);
/* 2DE320 */ void it_802DE320(Item_GObj*);
/* 2DE35C */ bool it_802DE35C(Item_GObj*);
/* 2DE3D8 */ void it_802DE3D8(Item_GObj*);
/* 2DE408 */ bool it_802DE408(Item_GObj*);
/* 2DE434 */ void it_802DE434(Item_GObj*);
/* 2DE490 */ bool it_802DE490(Item_GObj*);
/* 2DE498 */ void it_802DE498(Item_GObj*);
/* 2DE4FC */ void it_802DE4FC(Item_GObj*);
/* 2DE544 */ bool it_802DE544(Item_GObj*);
/* 2DE5EC */ void it_802DE5EC(Item_GObj*);
/* 2DE61C */ bool it_802DE61C(Item_GObj*);
/* 2DE648 */ void it_802DE648(Item_GObj*);
/* 2DE670 */ bool it_802DE670(Item_GObj*);
/* 2DE694 */ void it_802DE694(Item_GObj*);
/* 2DE6C4 */ bool it_802DE6C4(Item_GObj*);
/* 2DE6F0 */ M2C_UNK it_802DE6F0();
/* 2DE884 */ bool it_802DE884(Item_GObj*);
/* 2DEA0C */ void it_802DEA0C(Item_GObj*);
/* 2DEB44 */ bool it_802DEB44(Item_GObj*);
/* 2DEC80 */ M2C_UNK it_802DEC80();
/* 2DEE04 */ bool it_802DEE04(Item_GObj*);
/* 2DEE98 */ void it_802DEE98(Item_GObj*);
/* 2DEEC8 */ bool it_802DEEC8(Item_GObj*);
/* 2DEEF4 */ void it_802DEEF4(Item_GObj*);
/* 2DEF78 */ bool it_802DEF78(Item_GObj*);
/* 2DEF80 */ void it_802DEF80(Item_GObj*);
/* 2DF104 */ bool it_802DF104(Item_GObj*);
/* 2DF230 */ M2C_UNK it_802DF230();
/* 2DF724 */ bool it_802DF724(Item_GObj*);
/* 2DF93C */ void it_802DF93C(Item_GObj*);
/* 2DF970 */ bool it_802DF970(Item_GObj*);
/* 2DF9F8 */ M2C_UNK it_802DF9F8();
/* 2DFA68 */ bool it_802DFA68(Item_GObj*);
/* 2DFB90 */ void it_802DFB90(Item_GObj*);
/* 2DFBAC */ bool it_802DFBAC(Item_GObj*);
/* 2DFC34 */ bool it_802DFC34(Item_GObj*);
/* 2DFC58 */ bool it_802DFC58(Item_GObj*);
/* 2DFC90 */ bool it_802DFC90(Item_GObj*);
/* 2DFCB0 */ bool it_802DFCB0(Item_GObj*);
/* 2DFD60 */ bool it_802DFD60(Item_GObj*);
/* 2DFE40 */ bool it_802DFE40(Item_GObj*);
/* 2DFE7C */ M2C_UNK fn_802DFE7C();
/* 2DFED4 */ void it_802DFED4(Item_GObj*, Item_GObj*);
/* 2DFEF4 */ void it_802DFEF4(Item_GObj*);
/* 2DFF14 */ M2C_UNK it_802DFF14();
/* 2DFFB8 */ M2C_UNK it_802DFFB8();
/* 2E0100 */ Item_GObj* it_802E0100(s32, Vec3*, s32);
/* 2E0408 */ bool it_802E0408(Item_GObj*);
extern ItemStateTable it_803F86C8[];
#define _itzrshell_h_
void it_802E02E8(Item_GObj*);
void it_802E0308(Item_GObj*);
void it_802E0328(Item_GObj*);
void it_802E0348(Item_GObj*);
void it_802E0368(Item_GObj*);
void it_802E0388(Item_GObj*);
bool it_802E03A8(Item_GObj*);
bool it_802E03C8(Item_GObj*);
bool it_802E03E8(Item_GObj*);
bool it_802E0428(Item_GObj*);
bool it_802E0448(Item_GObj*);
void it_802E0468(Item_GObj*, HSD_GObj*);
Item_GObj* it_802E0488(s32, Vec3*, s32);
extern ItemStateTable it_803F87F0[];
#define GALE01_00B074
/* 00B074 */ bool lb_8000B074(HSD_JObj*);
/* 00B09C */ bool lb_8000B09C(HSD_JObj*);
/* 00B134 */ bool lb_8000B134(HSD_JObj*);
/* 00B1CC */ void lb_8000B1CC(HSD_JObj*, Vec3*, Vec3*);
/* 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 GALE01_00CE50
/* 00CE50 */ float expf(float);
/* 00CEE0 */ float powf(float, float);
/* 00CF74 */ s32 powi(s32, s32);
/* 00D008 */ float lb_8000D008(float, float);
/* 00D148 */ s32 lb_8000D148(float, float, float, float, float, float, float);
#define GALE01_00F9F8
/* 00F9F8 */ void lb_8000F9F8(HSD_JObj* jobj);
/* 00FA94 */ M2C_UNK lb_8000FA94();
/* 00FCDC */ void lb_8000FCDC(void);
/* 00FD18 */ void lb_8000FD18(M2C_UNK);
/* 00FD48 */ void lb_8000FD48(HSD_JObj*, DynamicsDesc*, size_t);
/* 0100B0 */ M2C_UNK lb_800100B0();
/* 0101C8 */ M2C_UNK lb_800101C8();
/* 0103B8 */ M2C_UNK lb_800103B8();
/* 0103D8 */ M2C_UNK lb_800103D8();
/* 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(M2C_UNK, float*, float*, u32, int);
/* 0119DC */ void lb_800119DC(Vec3*, int, float, float, float);
/* 011A50 */ void lb_80011A50(Vec3*, int, float, float, float, float, float,
float, float);
/* 011ABC */ enum_t lb_80011ABC(void);
/* 011AC4 */ HSD_LObj* lb_80011AC4(HSD_LightDesc**);
/* 011C18 */ void lb_80011C18(HSD_JObj* jobj, u32 flags);
/* 011E24 */ int lb_80011E24(HSD_JObj*, HSD_JObj**, ...);
/* 01204C */ M2C_UNK lb_8001204C();
/* 0121FC */ void lb_800121FC(HSD_ImageDesc*, int, int, int, int);
/* 0122C8 */ void lb_800122C8(HSD_ImageDesc*, int, int, int);
/* 0122F0 */ M2C_UNK lb_800122F0();
/* 01271C */ M2C_UNK lb_8001271C();
/* 01285C */ M2C_UNK lb_8001285C();
/* 012994 */ M2C_UNK lb_80012994();
/* 013614 */ M2C_UNK fn_80013614();
/* 0138AC */ M2C_UNK fn_800138AC();
/* 0138CC */ void lb_800138CC(HSD_GObj* gobj, int arg1);
/* 0138D8 */ void lb_800138D8(HSD_GObj* gobj, s8 arg1);
/* 0138EC */ M2C_UNK lb_800138EC();
/* 013B14 */ HSD_CObj* lb_80013B14(HSD_CameraDescPerspective*);
/* 013BB8 */ M2C_UNK lb_80013BB8();
/* 013BE4 */ M2C_UNK lb_80013BE4();
/* 013C18 */ M2C_UNK lb_80013C18();
/* 013D68 */ M2C_UNK lb_80013D68();
/* 013E3C */ M2C_UNK lb_80013E3C();
/* 013F78 */ M2C_UNK lb_80013F78();
/* 013FF0 */ M2C_UNK lb_80013FF0();
/* 014014 */ M2C_UNK lb_80014014();
/* 0140F8 */ M2C_UNK lb_800140F8();
/* 014234 */ M2C_UNK lb_80014234();
/* 014258 */ bool lb_80014258(HSD_GObj* gobj, void* arg1, FtCmd cmd);
/* 014498 */ void lb_80014498(void* arg0);
/* 0144C8 */ bool lb_800144C8(void*, void*, s32, s32);
/* 014534 */ M2C_UNK lb_80014534();
/* 014574 */ void lb_80014574(u8, int, int, int);
/* 0145C0 */ void lb_800145C0(u8);
/* 0145F4 */ void lb_800145F4(void);
;
/* 014638 */ bool lb_80014638(Vec3*, M2C_UNK);
/* 014770 */ bool lb_80014770(Vec3*, int);
/* 0149E0 */ bool lb_800149E0(f32*, u32);
#define __GALE01_00F9F8
/* 011B74 */ static void lb_80011B74(HSD_DObj* dobj, u32 flags);
/* 013BB0 */ static bool lb_80013BB0(void);
/* 4D63B4 */ static enum_t lb_804D63B4;
#define GALE01_019230
/* 0192A8 */ void lb_800192A8(M2C_UNK cb);
/* 01955C */ M2C_UNK lb_8001955C();
/* 0195D0 */ void lb_800195D0(void);
#define GALE01_01E560
typedef struct FigaTrack {
u16 length;
u16 startframe;
u8 obj_type;
u8 frac_value;
u8 frac_slope;
u8* ad_head;
} FigaTrack;
typedef struct FigaTree {
int type;
u32 flags;
f32 frames;
void* nodes;
FigaTrack** tracks;
} FigaTree;
/* 01E60C */ M2C_UNK lbAnim_8001E60C(M2C_UNK, s8);
void lbAnim_8001E6D8(HSD_JObj* jobj, FigaTree* tree, FigaTrack* track,
s8 frames);
/* 01E7E8 */ void lbAnim_8001E7E8(M2C_UNK, M2C_UNK, s32, s8);
#define _lbarchive_h_
void lbArchive_InitializeDAT(HSD_Archive* archive, u8* data, u32 length);
void lbArchive_80016EFC(HSD_Archive* archive);
HSD_Archive* lbArchive_LoadArchive(char* filename);
void* lbArchive_LoadSymbols(char*, void**, ...);
void* lbArchive_80016DBC(char*, void**, ...);
s32 lbArchive_800171CC(void*, ...);
void lbArchive_LoadSections(HSD_Archive* archive, void** file, ...);
#define GALE01_014ABC
/* 014ABC */ M2C_UNK lbArq_80014ABC();
/* 014AC4 */ M2C_UNK lbArq_80014AC4();
/* 014BD0 */ M2C_UNK lbArq_80014BD0();
/* 014D2C */ void lbArq_80014D2C(void);
#define GALE01_02305C
/// @todo Create an @c enum for SFX IDs.
#define SFX_NONE -1
/* 02305C */ s32 lbAudioAx_8002305C(s32, s32);
/* 023090 */ M2C_UNK lbAudioAx_80023090();
/* 0230C8 */ s32 lbAudioAx_800230C8(s32, int*, int*);
/* 023130 */ s32 lbAudioAx_80023130(void);
/* 023220 */ s32 lbAudioAx_80023220(s32);
/* 023254 */ M2C_UNK fn_80023254();
/* 0233EC */ s32 lbAudioAx_800233EC(s32);
/* 023694 */ s32 lbAudioAx_80023694(void);
/* 0236B8 */ int lbAudioAx_800236B8(int);
/* 0236DC */ void lbAudioAx_800236DC(void);
/* 023710 */ bool lbAudioAx_80023710(s32);
/* 023730 */ M2C_UNK lbAudioAx_80023730();
/* 023750 */ M2C_UNK fn_80023750();
/* 0237A8 */ u32 lbAudioAx_800237A8(enum_t sfx_id, u8 sfx_vol, u8 sfx_pan);
/* 023870 */ int lbAudioAx_80023870(int, int, int, int);
/* 02392C */ M2C_UNK lbAudioAx_8002392C();
/* 023968 */ s32 lbAudioAx_80023968(s32);
/* 023A44 */ s32 lbAudioAx_80023A44(u8, u16);
/* 023B24 */ f32 lbAudioAx_80023B24(s32);
/* 023ED4 */ M2C_UNK fn_80023ED4();
/* 023F28 */ void lbAudioAx_80023F28(s32);
/* 024030 */ void lbAudioAx_80024030(s32);
/* 0240B4 */ M2C_UNK lbAudioAx_800240B4();
/* 02411C */ M2C_UNK lbAudioAx_8002411C();
/* 024184 */ int lbAudioAx_80024184(int, int, int, int);
/* 024304 */ M2C_UNK lbAudioAx_80024304();
/* 02438C */ void lbAudioAx_8002438C(s32);
/* 0243F4 */ M2C_UNK lbAudioAx_800243F4();
/* 0244F4 */ M2C_UNK fn_800244F4();
/* 0245D4 */ M2C_UNK lbAudioAx_800245D4();
/* 0245F4 */ s32 lbAudioAx_800245F4(s32);
/* 024614 */ void lbAudioAx_80024614(s32);
/* 024634 */ M2C_UNK lbAudioAx_80024634();
/* 024654 */ M2C_UNK fn_80024654();
/* 024B1C */ void lbAudioAx_80024B1C(s32, s32);
/* 024B58 */ void lbAudioAx_80024B58(s32, s32);
/* 024B94 */ int lbAudioAx_80024B94(int arg0, int arg1);
/* 024BD0 */ u8 lbAudioAx_80024BD0(void);
/* 024C08 */ void lbAudioAx_80024C08(u8);
/* 024C84 */ M2C_UNK lbAudioAx_80024C84();
/* 024D50 */ M2C_UNK lbAudioAx_80024D50();
/* 024D78 */ M2C_UNK lbAudioAx_80024D78();
/* 024DC4 */ void lbAudioAx_80024DC4(s32);
/* 024E50 */ void lbAudioAx_80024E50(s32);
/* 024E84 */ M2C_UNK lbAudioAx_80024E84();
/* 024F08 */ M2C_UNK lbAudioAx_80024F08();
/* 024F6C */ M2C_UNK lbAudioAx_80024F6C();
/* 024FDC */ void lbAudioAx_80024FDC(void);
/* 024FF4 */ void lbAudioAx_80024FF4(void);
/* 02500C */ void lbAudioAx_8002500C(s32);
/* 025038 */ void lbAudioAx_80025038(s32);
/* 025064 */ void lbAudioAx_80025064(int, int);
/* 025098 */ void lbAudioAx_80025098(s32 arg0);
/* 0250A0 */ M2C_UNK fn_800250A0();
/* 0251EC */ M2C_UNK fn_800251EC();
/* 0253D8 */ M2C_UNK fn_800253D8();
/* 0256BC */ M2C_UNK fn_800256BC();
/* 0259A0 */ M2C_UNK fn_800259A0();
/* 0259EC */ M2C_UNK fn_800259EC();
/* 025A98 */ M2C_UNK fn_80025A98();
/* 025B44 */ M2C_UNK fn_80025B44();
/* 025CBC */ M2C_UNK fn_80025CBC();
/* 025E38 */ M2C_UNK fn_80025E38();
/* 025FAC */ M2C_UNK fn_80025FAC();
/* 0262A0 */ M2C_UNK fn_800262A0();
/* 0263B4 */ M2C_UNK fn_800263B4();
/* 0263E8 */ void lbAudioAx_800263E8(HSD_GObj*, int, int, int, float);
/* 0264E4 */ bool lbAudioAx_800264E4(void);
/* 026510 */ void lbAudioAx_80026510(HSD_GObj*);
/* 0265C4 */ enum_t lbAudioAx_800265C4(HSD_GObj*, enum_t sfx);
/* 026650 */ M2C_UNK fn_80026650();
/* 0267B0 */ M2C_UNK fn_800267B0();
/* 0268B4 */ M2C_UNK fn_800268B4();
/* 0269AC */ M2C_UNK fn_800269AC();
/* 026C04 */ M2C_UNK fn_80026C04();
/* 026E58 */ M2C_UNK fn_80026E58();
/* 026E84 */ M2C_UNK lbAudioAx_80026E84();
/* 026EBC */ M2C_UNK lbAudioAx_80026EBC();
/* 026F2C */ u64 lbAudioAx_80026F2C(s32);
/* 02702C */ void lbAudioAx_8002702C(s32, u64);
/* 027168 */ void lbAudioAx_80027168(void);
/* 027488 */ M2C_UNK fn_80027488();
/* 027648 */ void lbAudioAx_80027648(void);
/* 02785C */ M2C_UNK lbAudioAx_8002785C();
/* 027AB0 */ M2C_UNK lbAudioAx_80027AB0();
/* 027DBC */ void lbAudioAx_80027DBC(void);
/* 027DF8 */ M2C_UNK lbAudioAx_80027DF8();
/* 02835C */ M2C_UNK lbAudioAx_8002835C();
/* 02838C */ void lbAudioAx_8002838C(void);
/* 028690 */ M2C_UNK lbAudioAx_80028690();
/* 028B2C */ int lbAudioAx_80028B2C(void);
/* 028B4C */ int lbAudioAx_80028B4C(void);
/* 028B6C */ M2C_UNK lbAudioAx_80028B6C();
/* 028B90 */ M2C_UNK lbAudioAx_80028B90();
#define __GALE01_02305C
/* 4D38CC */ static s32 lbl_804D38CC = 0x7F;
/* 4D6408 */ static s32 lbl_804D6408;
/* 4D6420 */ static s32 lbl_804D6420;
/* 4D6424 */ static s32 lbl_804D6424;
/* 4D6430 */ static s32 lbl_804D6430;
/* 4D6434 */ static s32 lbl_804D6434;
#define GALE01_01FC08
/* 01FC08 */ M2C_UNK fn_8001FC08();
/* 01FEC4 */ M2C_UNK fn_8001FEC4();
/* 0204C8 */ M2C_UNK fn_800204C8();
/* 0205F0 */ M2C_UNK lbBgFlash_800205F0();
/* 02063C */ M2C_UNK lbBgFlash_8002063C();
/* 020688 */ M2C_UNK lbBgFlash_80020688();
/* 0206D4 */ M2C_UNK lbBgFlash_800206D4();
/* 02087C */ M2C_UNK fn_8002087C();
/* 0208B0 */ M2C_UNK fn_800208B0();
/* 0208EC */ M2C_UNK lbBgFlash_800208EC();
/* 0209F4 */ void lbBgFlash_800209F4(void);
/* 020AEC */ M2C_UNK fn_80020AEC();
/* 020E38 */ M2C_UNK lbBgFlash_80020E38();
/* 02113C */ M2C_UNK fn_8002113C();
/* 021410 */ M2C_UNK lbBgFlash_80021410();
/* 0219E4 */ M2C_UNK fn_800219E4();
/* 021A10 */ M2C_UNK lbBgFlash_80021A10();
/* 021A18 */ M2C_UNK lbBgFlash_80021A18();
/* 021B04 */ M2C_UNK fn_80021B04();
/* 021C1C */ M2C_UNK fn_80021C1C();
/* 021C48 */ void lbBgFlash_80021C48(u32, u32);
/* 021C80 */ M2C_UNK fn_80021C80();
#define GALE01_019880
/* 019880 */ void lb_80019880(s32 arg0, s32 arg1);
/* 019894 */ M2C_UNK lb_80019894();
/* 0198E0 */ M2C_UNK lb_800198E0();
/* 019900 */ M2C_UNK lb_80019900();
/* 019A30 */ s32 lb_80019A30(s32 arg0);
/* 019A48 */ M2C_UNK lb_80019A48();
/* 019AAC */ void lb_80019AAC(Event);
/* 019BB8 */ M2C_UNK lb_80019BB8();
/* 019C38 */ M2C_UNK lb_80019C38();
/* 019CB0 */ M2C_UNK lb_80019CB0();
/* 019EF0 */ M2C_UNK lb_80019EF0();
/* 01A008 */ M2C_UNK fn_8001A008();
/* 01A0B0 */ M2C_UNK fn_8001A0B0();
/* 01A184 */ M2C_UNK lb_8001A184();
/* 01A3A4 */ M2C_UNK lb_8001A3A4();
/* 01A4CC */ M2C_UNK lb_8001A4CC();
/* 01A594 */ M2C_UNK lb_8001A594();
/* 01A860 */ M2C_UNK lb_8001A860();
/* 01A8A4 */ M2C_UNK lb_8001A8A4();
/* 01A9CC */ M2C_UNK lb_8001A9CC();
/* 01AAE4 */ M2C_UNK lb_8001AAE4();
/* 01AC04 */ M2C_UNK lb_8001AC04();
/* 01ACEC */ M2C_UNK lb_8001ACEC();
/* 01AE38 */ M2C_UNK lb_8001AE38();
/* 01AF84 */ M2C_UNK lb_8001AF84();
/* 01B068 */ M2C_UNK lb_8001B068();
/* 01B14C */ M2C_UNK lb_8001B14C();
/* 01B614 */ M2C_UNK lb_8001B614();
/* 01B6E0 */ s32 lb_8001B6E0(s32 arg0);
/* 01B6F8 */ enum_t lb_8001B6F8(void);
/* 01B760 */ void lb_8001B760(int);
/* 01B7E0 */ M2C_UNK lb_8001B7E0();
/* 01B8C8 */ M2C_UNK lb_8001B8C8();
/* 01B99C */ int lb_8001B99C(int, char*, int);
/* 01BA44 */ M2C_UNK lb_8001BA44();
/* 01BB48 */ int lb_8001BB48(int, char*, void*, void*, char*, int, int, int);
/* 01BC18 */ M2C_UNK lb_8001BC18();
/* 01BD34 */ M2C_UNK lb_8001BD34();
/* 01BE30 */ M2C_UNK lb_8001BE30();
/* 01BF04 */ int lb_8001BF04(int, char*, void*, void*, int, int, int);
/* 01BFD8 */ int lb_8001BFD8(int, M2C_UNK, M2C_UNK, M2C_UNK);
/* 01C0F4 */ int lb_8001C0F4(int, char*, char*, char*, int);
/* 01C2D8 */ int lb_8001C2D8(int, char*, char*, char*);
/* 01C404 */ M2C_UNK lb_8001C404();
/* 01C4A8 */ void lb_8001C4A8(void*, void*);
/* 01C550 */ void lb_8001C550(void);
/* 01C5A4 */ M2C_UNK lb_8001C5A4();
/* 01C5BC */ void lb_8001C5BC(void);
/* 01C600 */ M2C_UNK lb_8001C600();
/* 01C658 */ M2C_UNK lb_8001C658();
/* 01C820 */ M2C_UNK lb_8001C820();
/* 01C87C */ M2C_UNK lb_8001C87C();
/* 01C8BC */ M2C_UNK lb_8001C8BC();
/* 01CAF4 */ M2C_UNK lb_8001CAF4();
/* 01CBAC */ void lb_8001CBAC(s32 arg0);
/* 01CBBC */ M2C_UNK lb_8001CBBC();
/* 01CC30 */ M2C_UNK fn_8001CC30();
/* 01CC4C */ M2C_UNK lb_8001CC4C();
/* 01CC84 */ void lb_8001CC84(void);
/* 01CDB4 */ void lb_8001CDB4(void);
/* 01CE00 */ M2C_UNK lb_8001CE00();
/* 01CE78 */ void lb_8001CE78(void);
/* 01CEC0 */ M2C_UNK fn_8001CEC0();
/* 01CEE4 */ M2C_UNK fn_8001CEE4();
/* 01CF18 */ M2C_UNK lb_8001CF18();
/* 01D164 */ void lb_8001D164(int);
/* 01D1F4 */ M2C_UNK lb_8001D1F4();
/* 01D21C */ void lb_8001D21C(void);
#define __GALE01_019880
struct lb_80433318_t {
/* +0 */ M2C_UNK x0;
/* +4 */ M2C_UNK x4;
/* +8 */ int x8;
/* +C */ u8 _C[0x5C];
};
struct { int x[1 - 2 * !(sizeof(struct lb_80433318_t) == 0x68)]; };;
struct lb_804329F0_t {
/* 0x00 */ char pad_0[8];
/* 0x08 */ s32 unk_8; /* inferred */
/* 0x0C */ s32 unk_C; /* inferred */
/* 0x10 */ s32 unk_10;
/* 0x14 */ char pad_14[4];
}; /* size = 0x18 */
struct lb_80432A68_38_t {
/* 0x0 */ s32 unk_0;
/* 0x4 */ s32 unk_4;
};
struct { int x[1 - 2 * !(sizeof(struct lb_80432A68_38_t) == 0x8)]; };;
struct lb_80432A68_t {
/* 0x000 */ s32 unk_0; /* inferred */
/* 0x004 */ s32 unk_4; /* inferred */
/* 0x008 */ s32 unk_8;
/* 0x00C */ s32 unk_C;
/* 0x010 */ s32 unk_10;
/* 0x014 */ s32 unk_14;
/* 0x018 */ s32 unk_18;
/* 0x01C */ s32 unk_1C;
/* 0x020 */ s32 unk_20;
/* 0x024 */ s32 unk_24;
/* 0x028 */ s32 unk_28;
/* 0x02C */ char pad_2C[8]; /* maybe part of unk_28[3]? */
/* 0x034 */ s32 unk_34;
/* 0x038 */ struct lb_80432A68_38_t unk_38[8];
/* 0x078 */ char pad_78[8];
/* 0x080 */ s32 unk_80;
/* 0x084 */ char pad_84[0x488]; /* maybe part of unk_80[0x123]? */
/* 0x50C */ s32 unk_50C;
/* 0x510 */ s32 unk_510;
/* 0x514 */ char pad_514[0x50]; /* maybe part of unk_510[0x15]? */
/* 0x564 */ s32 unk_564;
/* 0x568 */ char pad_568[0x50]; /* maybe part of unk_564[0x15]? */
/* 0x5B8 */ s32 unk_5B8;
/* 0x5BC */ char pad_5BC[0x50]; /* maybe part of unk_5B8[0x15]? */
/* 0x60C */ s32 unk_60C;
/* 0x610 */ char pad_610[0x50]; /* maybe part of unk_60C[0x15]? */
/* 0x660 */ s32 unk_660;
/* 0x664 */ char pad_664[0x50]; /* maybe part of unk_660[0x15]? */
/* 0x6B4 */ s32 unk_6B4;
/* 0x6B8 */ char pad_6B8[0x50]; /* maybe part of unk_6B4[0x15]? */
/* 0x708 */ s32 unk_708;
/* 0x70C */ char pad_70C[0x50]; /* maybe part of unk_708[0x15]? */
/* 0x75C */ s32 unk_75C;
/* 0x760 */ char pad_760[0x150]; /* maybe part of unk_75C[0x55]? */
}; /* size = 0x8B0 */
struct { int x[1 - 2 * !(sizeof(struct lb_80432A68_t) == 0x8B0)]; };;
/* 4329F0 */ static struct lb_804329F0_t lb_804329F0[5];
/* 432A68 */ static struct lb_80432A68_t lb_80432A68;
/* 433318 */ static struct lb_80433318_t lb_80433318;
#define GALE01_005BB0
typedef struct {
Vec3 v1;
float v2;
HSD_JObj* jobj;
} Foo;
/* 005BB0 */ int lbColl_80005BB0(HitCapsule*, int);
/* 005C44 */ bool lbColl_80005C44(Vec3*, Vec3*, Vec3*, Vec3*, float, float);
/* 005EBC */ float lbColl_80005EBC(Vec3*, Vec3*, 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, float);
/* 0077A0 */ void lbColl_800077A0(Vec3*, Mtx, Vec3*, Vec3*, Vec3*, Vec3*,
float* angle, float, float);
/* 007AFC */ bool lbColl_80007AFC(HitCapsule*, HitCapsule*, float, float);
/* 007B78 */ M2C_UNK lbColl_80007B78(Mtx, Mtx, 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, void*);
/* 008820 */ bool lbColl_80008820(HitCapsule*, int, void*);
/* 0089B8 */ void lbColl_800089B8(HitCapsule* hit, M2C_UNK arg1);
/* 008A5C */ void lbColl_80008A5C(HitCapsule* hit);
/* 008D30 */ void lbColl_80008D30(HitCapsule*, M2C_UNK);
/* 008DA4 */ M2C_UNK lbColl_80008DA4();
/* 008FC8 */ void lbColl_80008FC8(Vec3, Vec3, u8*, u8*, float);
/* 0096B4 */ void lbColl_800096B4(MtxPtr, Vec3, Vec3, u8*, u8*, float);
/* 009DD4 */ M2C_UNK lbColl_80009DD4();
/* 009F54 */ bool lbColl_80009F54(HitCapsule* hit, u32 arg1, float arg8);
/* 00A044 */ bool lbColl_8000A044(HitCapsule* hit, u32 arg1, float arg8);
/* 00A10C */ bool lbColl_8000A10C(Vec3 (*)[2], u32, f32);
/* 00A1A8 */ bool lbColl_8000A1A8(M2C_UNK, int, float scale_y);
/* 00A244 */ bool lbColl_8000A244(HurtCapsule* hurt, u32 arg1, Mtx arg2,
float arg3);
/* 00A460 */ bool lbColl_8000A460(Foo* 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_
typedef struct _Command_04_Struct {
u32* ptr[1];
} Command_04_Struct;
typedef struct _Command_09_Struct {
u32 id : 6;
u32 param_1 : 8;
u32 param_2 : 18;
} Command_09_Struct;
/// @todo Unify with #ftCmdScript
typedef struct _CommandInfo {
f32 timer; // 0x00
f32 frame_count; // 0x04
union {
u32* data_position; // 0x08
struct _Command_04_Struct Command_04;
struct _Command_09_Struct* Command_09;
} u;
u32 loop_count; // 0x0C
u32* event_return[4]; // 0x10 - Array Size is purely made-up for now
u32 loop_count_dup; // 0x14
u32 unk_x18; // 0x18
} CommandInfo;
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 */ M2C_UNK lbDvd_800174BC();
/* 0174E8 */ void lbDvd_800174E8(s32 index);
/* 017598 */ bool lbDvd_80017598(bool cached);
/* 017644 */ M2C_UNK lbDvd_80017644();
/* 017700 */ void lbDvd_80017700(int);
/* 017740 */ void* lbDvd_80017740(int type, s16 entry_num, s32 transient_heap,
s32 heap, u32 size, s8 load_state,
s16 load_score, s8, s32 effect_index);
/* 0178E8 */ void lbDvd_800178E8(s32, char*, s32, s32, s32, s32, s32, s32,
s32);
/* 017960 */ M2C_UNK lbDvd_80017960();
/* 017A80 */ M2C_UNK lbDvd_80017A80();
/* 017AB0 */ void lbDvd_CachePreloadedFile(s32 index);
/* 017CC4 */ M2C_UNK lbDvd_80017CC4();
/* 017E64 */ void lbDvd_80017E64(void*, int, void*, bool);
/* 017EBC */ HSD_Archive* lbDvd_GetPreloadedArchive(s32);
/* 01819C */ HSD_Archive* lbDvd_8001819C(const char* basename);
/* 01822C */ PreloadCacheScene* lbDvd_8001822C(void);
/* 01823C */ void lbDvd_8001823C(void);
/* 018254 */ void lbDvd_80018254(void);
/* 0187F4 */ M2C_UNK lbDvd_800187F4();
/* 018A2C */ M2C_UNK lbDvd_80018A2C();
/* 018C2C */ M2C_UNK lbDvd_80018C2C();
/* 018C6C */ void lbDvd_80018C6C(void);
/* 018CF4 */ M2C_UNK lbDvd_80018CF4();
/* 018F58 */ void lbDvd_80018F58(bool value);
/* 018F68 */ void lbDvd_80018F68(void);
/* 019100 */ M2C_UNK lbDvd_80019100();
#define __GALE01_0174BC
/* 0189EC */ static void lbDvd_800189EC(int);
/* 0189EC */ static void lbDvd_800189EC(int);
/* 3BA638 */ static PreloadCache lbDvd_803BA638 = { 0 };
/* 3BA68C */ static PreloadEntry lbDvd_803BA68C = { 0 };
/* 3BA6A8 */ static char* lbDvd_803BA6A8;
/* 432078 */ static PreloadCache preloadCache;
/* 4D37D0 */ static char* lbDvd_804D37D0;
/* 4D37D8 */ static char* lbDvd_804D37D8;
/* 4D37E0 */ static char* lbDvd_804D37E0;
#define GALE01_01615C
/* 01615C */ void lbFile_8001615C(void*, int, void*, bool);
/* 0161A0 */ bool lbFile_800161A0(void);
/* 0161C4 */ void lbFile_800161C4(int file, u32 src, u32 dest, u32 size,
int type, int pri);
/* 016204 */ char* lbFile_80016204(const char* basename);
/* 01634C */ size_t lbFile_8001634C(s32 fileno);
/* 0163D8 */ s32 lbFile_800163D8(const char* basename);
/* 0164A4 */ void lbFile_800164A4(s32 file, u32 src, u32* dest, s32 size,
HSD_DevComCallback callback, void* args);
/* 016580 */ void lbFile_80016580(const char* basename, u32 src, u32* dest,
HSD_DevComCallback callback, void* args);
/* 01668C */ void lbFile_8001668C(const char* basename, u32* src, u32* dest);
/* 016760 */ void lbFile_80016760(const char* basename, u32* src, u32* dest);
/* 0168A0 */ bool lbFile_800168A0(s32 arg0, const char* basename, u32* src,
u32* dest);
#define GALE01_01E2F8
bool lbGx_8001E2F8(Vec4*, Vec3*, U8Vec4*, uint, float);
#define GALE01_0158D0
/* 0158D0 */ void lbHeap_800158D0(int, int);
/* 015BB8 */ bool lbHeap_80015BB8(int);
/* 015BD0 */ HSD_Archive* lbHeap_80015BD0(int arg0, int arg1);
/* 015CA8 */ void lbHeap_80015CA8(int, void*);
/* 015D6C */ int lbHeap_80015D6C(int heap0, M2C_UNK cb, int heap1);
/* 015F3C */ void lbHeap_80015F3C(void);
#define __GALE01_0158D0
struct lbHeap_80431FA0_x10_t {
s32 unk_10;
s32 unk_14;
s32 unk_18;
s32 unk_1C;
s32 unk_20;
s32 unk_24;
s32 unk_28;
};
struct { int x[1 - 2 * !(sizeof(struct lbHeap_80431FA0_x10_t) == 0x1C)]; };;
struct lbHeap_80431FA0_t {
/* 0x00 */ void* unk_0; /* inferred */
/* 0x04 */ void* unk_4; /* inferred */
/* 0x08 */ u32 unk_8; /* inferred */
/* 0x0C */ u32 unk_C; /* inferred */
/* 0x10 */ struct lbHeap_80431FA0_x10_t unk_10[6];
}; /* size = 0xB8 */
struct { int x[1 - 2 * !(sizeof(struct lbHeap_80431FA0_t) == 0xB8)]; };;
/* 431FA0 */ static struct lbHeap_80431FA0_t lbHeap_80431FA0;
#define _lblanguage_h_
enum_t lbLang_GetLanguageSetting(void);
enum_t lbLang_SetLanguageSetting(enum_t language);
enum_t lbLang_IsSettingJP(void);
enum_t lbLang_IsSettingUS(void);
enum_t lbLang_GetSavedLanguage(void);
void lbLang_SetSavedLanguage(enum_t language);
enum_t lbLang_IsSavedLanguageJP(void);
enum_t lbLang_IsSavedLanguageUS(void);
#define GALE01_014E24
/* 014FC8 */ HSD_Archive* lbMemory_80014FC8(s32, s32);
/* 0154BC */ void lbMemory_800154BC(uintptr_t*, uintptr_t*);
/* 01564C */ void lbMemory_8001564C(void);
#define GALE01_01E8F8
/* 01E8F8 */ float lbMthp_8001E8F8(lbMthp_8001E8F8_t*);
/* 01E910 */ M2C_UNK fn_8001E910();
/* 01EB14 */ M2C_UNK fn_8001EB14();
/* 01EBF0 */ M2C_UNK fn_8001EBF0();
/* 01ECF4 */ M2C_UNK fn_8001ECF4();
/* 01EF5C */ M2C_UNK fn_8001EF5C();
/* 01F06C */ M2C_UNK fn_8001F06C();
/* 01F13C */ M2C_UNK fn_8001F13C();
/* 01F294 */ s32 fn_8001F294(void);
/* 01F2A4 */ M2C_UNK fn_8001F2A4();
/* 01F410 */ M2C_UNK lbMthp_8001F410();
/* 01F578 */ M2C_UNK lbMthp_8001F578();
/* 01F5C4 */ s32 lbMthp_8001F5C4(void);
/* 01F5D4 */ s32 lbMthp_8001F5D4(void);
/* 01F5E4 */ s32 lbMthp_8001F5E4(void);
/* 01F5F4 */ s32 lbMthp_8001F5F4(void);
/* 01F604 */ s32 lbMthp_8001F604(void);
/* 01F614 */ void lbMthp_8001F614(s32 arg0);
/* 01F624 */ M2C_UNK lbMthp_8001F624();
/* 01F67C */ M2C_UNK lbMthp_8001F67C();
/* 01F800 */ void lbMthp_8001F800(void);
/* 01F87C */ void lbMthp_8001F87C(void);
/* 01F890 */ M2C_UNK lbMthp8001F890();
/* 01F928 */ M2C_UNK lbMthp8001F928();
/* 01FAA0 */ M2C_UNK lbMthp8001FAA0();
#define __GALE01_01E8F8
struct lbl_804333E0_t {
/* 0x000 */ char pad_0[0x84];
/* 0x084 */ s32 unk_84; /* inferred */
/* 0x088 */ char pad_88[0x80]; /* maybe part of unk_84[0x21]? */
/* 0x108 */ s32 unk_108;
/* 0x10C */ s32 unk_10C;
/* 0x110 */ s32 unk_110;
/* 0x114 */ char pad_114[0x20]; /* maybe part of unk_110[9]? */
/* 0x134 */ s32 unk_134;
/* 0x138 */ char pad_138[0xC]; /* maybe part of unk_134[4]? */
/* 0x144 */ s32 unk_144;
/* 0x148 */ s32 unk_148;
/* 0x14C */ s32 unk_14C;
/* 0x150 */ char pad_150[0x88]; /* maybe part of unk_14C[0x23]? */
}; /* size = 0x1D8 */
struct { int x[1 - 2 * !(sizeof(struct lbl_804333E0_t) == 0x1D8)]; };;
/* 4333E0 */ static struct lbl_804333E0_t lbl_804333E0;
/* 4D7CC0 */ static float lb_804D7CC0;
#define GALE01_021CE8
void lbRefract_800222A4(void);
void lbRefract_8002247C(HSD_CObj*);
void lbRefract_80022560(void);
void lbRefract_800225D4(void);
s32 lbRefract_PObjLoad(HSD_PObj* pobj, HSD_PObjDesc* desc);
void lbRefract_80022998(HSD_MObj*, u32 rendermode, s8);
void lbRefract_80022BB8(void);
void lbRefract_80022BD0(void);
float atan2f(float y, float x);
float acosf(float);
float asinf(float);
float atanf(float);
void lbRefract_80021CE8(void*, s32);
#define GALE01_00E9F0
/* 00E9F0 */ void lbShadow_8000E9F0(Vec3*, s32, f32);
/* 00ED54 */ void lbShadow_8000ED54(UnkFlagStruct*, HSD_JObj*);
/* 00EE8C */ void lbShadow_8000EE8C(UnkFlagStruct*);
/* 00EEE0 */ void lbShadow_8000EEE0(HSD_GObj*);
/* 00EFEC */ void lbShadow_8000EFEC(void);
/* 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(int);
/* 01DC0C */ int lbSnap_8001DC0C(int);
/* 01DE8C */ int lbSnap_8001DE8C(void*);
/* 01DF20 */ void 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 */ M2C_UNK lbSnap_8001E27C();
/* 01E290 */ void lbSnap_8001E290(void);
#define __GALE01_01D2BC
struct Unk80433380_48_10 {
unsigned int unk0;
s16 unk4;
u16 unk6;
};
struct { int x[1 - 2 * !(sizeof(struct Unk80433380_48_10) == 0x8)]; };;
struct Unk80433380_48 {
int unk0;
int num;
int unk8;
int unkC;
struct Unk80433380_48_10 unk10[0x7F];
};
struct { int x[1 - 2 * !(sizeof(struct Unk80433380_48) == 0x408)]; };;
struct Unk80433380_0 {
s32 x0;
u16 x4;
u16 x6;
u8 x8;
s32 xC;
u16 x10;
struct it_8026C47C_arg0_t x14;
s32 x34;
char x38[4];
};
struct Unk80433380 {
/* 0x00 */ struct Unk80433380_0* x0;
/* 0x04 */ char x4_string[0x40];
/* 0x44 */ int* x44_LbMcSnap_MemSnapIconData;
/* 0x48 */ struct Unk80433380_48* x48;
/* 0x4C */ int x4C_cardState[2];
/* 0x54 */ int x54_stateChanged[3];
}; /* size = 0x60 */
struct { int x[1 - 2 * !(sizeof(struct Unk80433380) == 0x60)]; };;
struct Unk803BACC8 {
char pad0[0x14];
int x14;
char pad18[0x1C - 0x18];
struct Unk80433380_0* x1C;
};
static struct Unk80433380 lbSnap_80433380;
static struct Unk803BACC8 lbSnap_803BACC8 = {
{ 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3 }, 0, { 0, 0, 0, 3 }, (void*) -1
};
#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, int c);
u32 lbTime_8000AF74(u32 a, int b);
u32 lbTime_8000AFBC(void);
void lbTime_8000B028(OSCalendarTime* td, unsigned int ticks);
#define GALE01_00D2EC
static float lbVector_Len(Vec3* vec);
static float lbVector_Len_xy(Vec3* vec);
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);
static float sin(float angle);
static float cos(float angle);
void lbVector_RotateAboutUnitAxis(Vec3* v, Vec3* axis, float angle);
void lbVector_Rotate(Vec3* v, int axis, float angle);
float dummy(void);
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(Mtx m, 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, Vec3* angles);
float lbVector_8000E838(Vec3* a, Vec3* b, Vec3* c, Vec3* d);
#define MELEE_MN_FORWARD_H
typedef struct CSSData CSSData;
typedef struct PlayerInitData PlayerInitData;
typedef struct StartMeleeData StartMeleeData;
typedef struct StartMeleeRules StartMeleeRules;
typedef struct VsModeData VsModeData;
typedef struct CSSModeInfo CSSModeInfo;
typedef struct CSSIcon CSSIcon;
typedef struct CSSIconsData CSSIconsData;
typedef struct CSSDoor CSSDoor;
typedef struct CSSTagData CSSTagData;
typedef struct CSSTag CSSTag;
typedef struct CSSKOStar CSSKOStar;
typedef struct CSSDoorsData CSSDoorsData;
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;
#define GALE01_2295AC
typedef struct _mn_unk1 {
u8 x0;
u8 x1;
s16 x2;
s32 x4;
u64 x8;
u8 x10;
u8 x11;
} mn_unk1;
typedef struct _mn_unk2 {
u16 x0;
u16 x2;
s32 x4;
} mn_unk2;
struct mn_80231634_t {
/* +0 */ char pad_0[0x10];
/* +10 */ int x10;
};
/* 2295AC */ u8 mn_802295AC(void);
/* 229624 */ u32 mn_80229624(u32);
/* 229860 */ void mn_80229860(s8);
/* 229894 */ void mn_80229894(s32, s32, s32);
/* 229938 */ s32 mn_80229938(s32 arg0, s32 arg1);
/* 229A04 */ M2C_UNK mn_80229A04();
/* 229A7C */ M2C_UNK mn_80229A7C();
/* 229B2C */ M2C_UNK mn_80229B2C();
/* 229BF4 */ M2C_UNK fn_80229BF4();
/* 229DC0 */ M2C_UNK mn_80229DC0();
/* 229F60 */ M2C_UNK mn_80229F60();
/* 22A440 */ M2C_UNK mn_8022A440();
/* 22A5D0 */ M2C_UNK mn_8022A5D0();
/* 22ADD8 */ M2C_UNK mn_8022ADD8();
/* 22AF10 */ M2C_UNK fn_8022AF10();
/* 22AFEC */ M2C_UNK fn_8022AFEC();
/* 22B3A0 */ M2C_UNK mn_8022B3A0();
/* 22BA1C */ M2C_UNK mn_8022BA1C();
/* 22BCD4 */ M2C_UNK fn_8022BCD4();
/* 22BCF8 */ M2C_UNK mn_8022BCF8();
/* 22BD6C */ M2C_UNK mn_8022BD6C();
/* 22BD8C */ M2C_UNK mn_8022BD8C();
/* 22BDB4 */ M2C_UNK fn_8022BDB4();
/* 22BE34 */ M2C_UNK mn_8022BE34();
/* 22BEDC */ M2C_UNK mn_8022BEDC();
/* 22BFBC */ M2C_UNK mn_8022BFBC();
/* 22C010 */ M2C_UNK mn_8022C010();
/* 22C068 */ M2C_UNK mn_8022C068();
/* 22C128 */ M2C_UNK fn_8022C128();
/* 22C304 */ M2C_UNK mn_8022C304();
/* 22C4F4 */ M2C_UNK mn_8022C4F4();
/* 22C7CC */ M2C_UNK mn_8022C7CC();
/* 22CA54 */ M2C_UNK mn_8022CA54();
/* 22CC28 */ M2C_UNK mn_8022CC28();
/* 22CE6C */ M2C_UNK mn_8022CE6C();
/* 22D104 */ M2C_UNK mn_8022D104();
/* 22D34C */ M2C_UNK mn_8022D34C();
/* 22D594 */ M2C_UNK mn_8022D594();
/* 22D7F4 */ M2C_UNK mn_8022D7F4();
/* 22DB10 */ M2C_UNK mn_8022DB10();
/* 22DD38 */ M2C_UNK mn_8022DD38();
/* 22DDA8 */ M2C_UNK mn_8022DDA8();
/* 22E950 */ M2C_UNK mn_8022E950();
/* 22E978 */ M2C_UNK mn_8022E978();
/* 22EA08 */ void mn_8022EA08(char*, u32);
/* 22EA78 */ M2C_UNK mn_8022EA78();
/* 22EAE0 */ M2C_UNK mn_8022EAE0();
/* 22EB04 */ void mn_8022EB04(void* user_data);
/* 22EB24 */ s32 mn_8022EB24(s32, s32);
/* 22EB78 */ s32 mn_8022EB78(s32);
/* 22EBDC */ M2C_UNK mn_8022EBDC();
/* 22EC18 */ float mn_8022EC18(HSD_JObj*, float*, int);
/* 22ED6C */ void mn_8022ED6C(HSD_JObj*, Vec3*);
/* 22EE84 */ M2C_UNK mn_8022EE84();
/* 22EFD8 */ M2C_UNK mn_8022EFD8();
/* 22F0F0 */ M2C_UNK mn_8022F0F0();
/* 22F138 */ M2C_UNK mn_8022F138();
/* 22F1A8 */ M2C_UNK mn_8022F1A8();
/* 22F218 */ M2C_UNK mn_8022F218();
/* 22F268 */ M2C_UNK mn_8022F268();
/* 22F298 */ f32 mn_8022F298(HSD_JObj*);
/* 22F360 */ M2C_UNK mn_8022F360();
/* 22F3D8 */ void mn_8022F3D8(void*, u8, HSD_TypeMask);
/* 22F410 */ M2C_UNK mn_8022F410();
/* 22F470 */ M2C_UNK mn_8022F470();
/* 22F4CC */ M2C_UNK mn_8022F4CC();
/* 22F538 */ M2C_UNK fn_8022F538();
/* 22FB88 */ M2C_UNK mn_8022FB88();
/* 22FD18 */ M2C_UNK mn_8022FD18();
/* 22FEC8 */ M2C_UNK mn_8022FEC8();
/* 230198 */ M2C_UNK mn_80230198();
/* 230274 */ M2C_UNK mn_80230274();
/* 2307F8 */ M2C_UNK mn_802307F8();
/* 2308F0 */ M2C_UNK mn_802308F0();
/* 2309F0 */ M2C_UNK fn_802309F0();
/* 230D18 */ M2C_UNK mn_80230D18();
/* 230E38 */ M2C_UNK mn_80230E38();
/* 231634 */ int mn_80231634(struct mn_80231634_t*);
/* 23164C */ M2C_UNK mn_8023164C();
/* 231714 */ M2C_UNK mn_80231714();
/* 2317E4 */ M2C_UNK mn_802317E4();
/* 231804 */ M2C_UNK mn_80231804();
/* 231F80 */ M2C_UNK mn_80231F80();
/* 23201C */ M2C_UNK fn_8023201C();
/* 232458 */ M2C_UNK mn_80232458();
/* 2324E4 */ M2C_UNK mn_802324E4();
/* 232660 */ M2C_UNK mn_80232660();
/* 2327A4 */ M2C_UNK mn_802327A4();
/* 232D4C */ M2C_UNK mn_80232D4C();
/* 232F44 */ M2C_UNK fn_80232F44();
/* 233218 */ M2C_UNK mn_80233218();
/* 2339FC */ M2C_UNK mn_802339FC();
/* 4A04F0 */ extern mn_unk1 mn_804A04F0;
/* 4D6BB8 */ extern HSD_Archive* mn_804D6BB8;
/* 4D6BC8 */ extern mn_unk2 mn_804D6BC8;
#define MELEE_MN_TYPES_H
#define SYSDOLPHIN_BASELIB_SISLIB_H
typedef struct {
M2C_UNK x0;
M2C_UNK x4;
M2C_UNK x8;
f32 xC;
M2C_UNK x10;
} sislib_UnknownType001;
typedef struct _TextGlyphTexture {
/*0x00*/ u8 data[512];
} TextGlyphTexture;
struct TextKerning {
/*0x00*/ u8 left;
/*0x01*/ u8 right;
};
typedef struct SIS {
/*0x00*/ TextKerning* kerning;
/*0x04*/ TextGlyphTexture* textures;
} SIS;
// @todo: give actual names?
struct sislib_UnkAllocData {
sislib_UnkAllocData* data_0;
HSD_Text* data_1;
u32 size;
};
struct HSD_Text {
// these get passed to the text initializer HSD_SisLib_803A5ACC
f32 x0; // global x position, 0,0 at center
f32 x4; // global y position
f32 x8; // scale that happens from the origin after the translation of x0,
// x4
f32 xC; // scale that happens on the X axis from the left side of the text
f32 x10; // unknown, no effect observed so far
Vec4 x14;
Vec2 x24; // font size, 1.0 being 100% of the screen?
U8Vec4 x2C;
U8Vec4 x30;
Vec2 x34;
Vec2 x3C;
u16 x44;
u16 x46;
u8 x48;
u8 x49;
u8 x4A;
u8 x4B;
u8 x4C; // whether to test for Z depth?
u8 x4D;
u8 x4E;
u8 x4F; // which font to select from the array HSD_SisLib_804D1124
HSD_Text* x50;
HSD_GObj* x54;
void (*x58)(void*); // callback in the text renderer (HSD_SisLib_803A84BC)
SIS* x5C; // could just be a byte pointer?
M2C_UNK x60;
sislib_UnkAllocData* x64;
void* x68;
u16 x6C;
u16 x6E;
f32 x70;
f32 x74;
Vec2 x78;
Vec2 x80;
f32 x88;
U8Vec4 x8C;
u16 x90;
u16 x92;
u32 x94;
u32 x98;
u8 x9C;
u8 x9D;
u8 x9E;
u8 x9F;
};
struct sislib_UnkAlloc3 {
sislib_UnkAlloc3* x0;
HSD_GObj* x4;
u16 x8;
u16 xA;
u8 xC;
u8 xD;
u8 xE;
u8 xF;
};
extern s8 HSD_SisLib_804D6390[4];
extern SIS* HSD_SisLib_804D1124[5];
extern HSD_Archive* HSD_SisLib_804D1110[5];
extern u32 lbl_8040C8C0[144];
extern u32 HSD_SisLib_8040C680[144];
extern HSD_CObjDesc HSD_SisLib_8040C4B8;
extern u32 HSD_SisLib_804D7968;
extern sislib_UnkAllocData* HSD_SisLib_804D796C;
extern sislib_UnkAllocData* HSD_SisLib_804D7970;
extern sislib_UnkAllocData* HSD_SisLib_804D7974;
extern HSD_Text* HSD_SisLib_804D7978;
extern sislib_UnkAlloc3* HSD_SisLib_804D797C;
extern sislib_UnknownType001 HSD_SisLib_8040C4A4;
extern sislib_UnknownType001 HSD_SisLib_8040C490;
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*, HSD_Text*);
s32 HSD_SisLib_803A7F0C(HSD_Text*, s32);
void HSD_SisLib_803A8134(void*, HSD_Text*, f32*, f32*);
void HSD_SisLib_803A7684(M2C_UNK, u8, u8);
void HSD_SisLib_803A7664(M2C_UNK);
void HSD_SisLib_803A75E0(M2C_UNK, s32);
void HSD_SisLib_803A7548(M2C_UNK, f32, f32);
void HSD_SisLib_803A74F0(HSD_Text*, s32 arg1, u8* arg2);
void HSD_SisLib_803A746C(HSD_Text*, s32, f32, f32);
s32 HSD_SisLib_803A70A0(s32, M2C_UNK, M2C_UNK);
u32 lbl_803A6FEC(s32, s32, bool);
void HSD_SisLib_803A6B98(HSD_Text* arg0, void* arg1, ...);
s32 HSD_SisLib_803A67EC(u8*, u8*);
HSD_Text* HSD_SisLib_803A6754(s8 arg0, s32 arg1);
void HSD_SisLib_803A660C(s32, s32, s32);
void HSD_SisLib_803A6530(s32, s32, s32);
void HSD_SisLib_803A6478(u8*, u8*);
void HSD_SisLib_803A6368(HSD_Text*, s32);
void HSD_SisLib_803A62A0(s32, char*, char*);
s32 HSD_SisLib_803A611C(u16, u32, u16, u8, u8, u8, u8, u32);
void lbl_803A60EC(void);
HSD_Text* HSD_SisLib_803A5ACC(s8, s32, f32, f32, f32, f32, f32);
void* HSD_SisLib_803A5798(s32);
void HSD_SisLib_803A594C(void*);
void HSD_SisLib_803A5CC4(HSD_Text*);
void HSD_SisLib_803A5A2C(HSD_Text*);
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 *, s32);
typedef struct {
u8 cursor; // @todo are these arbitrary variables the menus can use in any
// way?
u8 unk1;
u8 unk2;
u8 unk3;
HSD_Text* text;
} Menu;
// size 0x8
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;
};
struct PlayerInitData {
/*0x00*/ u8 character_kind;
/*0x01*/ u8 slot_type;
/*0x02*/ u8 stocks;
/*0x03*/ u8 color;
/*0x04*/ u8 port;
/*0x05*/ s8 spawnpos32;
/*0x06*/ u8 spawn_direction;
/*0x07*/ u8 subcolor;
/*0x08*/ u8 handicap;
/*0x09*/ u8 team;
/*0x0A*/ u8 nametag;
/*0x0B*/ u8 unk_0xb;
/*0x0C*/ u8 unk_0xc;
/*0x0D*/ u8 unk_0xd;
/*0x0E*/ u8 unk_0xe;
/*0x0F*/ u8 cpu_level;
/*0x10*/ u8 unk_0x10;
/*0x11*/ u8 unk_0x11;
/*0x12*/ u16 unk_0x12;
/*0x14*/ u8 unk_0x14;
/*0x15*/ u8 unk_0x15;
/*0x16*/ u8 unk_0x16;
/*0x17*/ u8 unk_0x17;
/*0x18*/ f32 offense_ratio;
/*0x1C*/ f32 defense_ratio;
/*0x20*/ u8 unk_0x20;
/*0x21*/ u8 unk_0x21;
/*0x22*/ u8 unk_0x22;
/*0x23*/ u8 unk_0x23;
};
struct StartMeleeRules {
u8 flags1;
u8 flags2;
u8 flags3;
u8 flags4;
u8 flags5;
u8 flags6;
u8 unk_0x6;
u8 unk_0x7;
u8 is_teams;
u8 unk_0x9;
u8 unk_0xa;
s8 item_frequency;
s8 sd_penalty;
u8 unk_0xd;
u32 stage_id;
s32 time_limit;
u8 unk_0x14;
u8 unk_0x15;
u8 unk_0x16;
u8 unk_0x17;
u8 unk_0x18;
u8 unk_0x19;
u8 unk_0x1a;
u8 unk_0x1b;
u8 unk_0x1c;
u8 unk_0x1d;
u8 unk_0x1e;
u8 unk_0x1f;
u64 item_mask;
u8 unk_0x28;
u8 unk_0x29;
u8 unk_0x2a;
u8 unk_0x2b;
u8 unk_0x2c;
u8 unk_0x2d;
u8 unk_0x2e;
u8 unk_0x2f;
f32 damage_ratio;
f32 game_speed;
u8 unk_0x38;
u8 unk_0x39;
u8 unk_0x3a;
u8 unk_0x3b;
u8 unk_0x3c;
u8 unk_0x3d;
u8 unk_0x3e;
u8 unk_0x3f;
void* pause_check_callback;
u8 unk_0x44;
u8 unk_0x45;
u8 unk_0x46;
u8 unk_0x47;
u8 unk_0x48;
u8 unk_0x49;
u8 unk_0x4a;
u8 unk_0x4b;
u8 unk_0x4c;
u8 unk_0x4d;
u8 unk_0x4e;
u8 unk_0x4f;
void* match_end_callback;
s32 unk_0x54;
u8 unk_0x58;
u8 unk_0x59;
u8 unk_0x5a;
u8 unk_0x5b;
u8 unk_0x5c;
u8 unk_0x5d;
u8 unk_0x5e;
u8 unk_0x5f;
};
struct StartMeleeData {
StartMeleeRules rules;
PlayerInitData players[6];
};
struct VsModeData {
s8 loser;
u32 ordered_stage_index;
s8 winner;
u8 unk_0x3;
u8 unk_0x4;
u8 unk_0x5;
u8 unk_0x6;
u8 unk_0x7;
StartMeleeData data;
};
struct CSSData {
u8 unk_0x0;
u8 unk_0x1;
u8 match_type;
u8 pending_scene_change;
u8* ko_star_counts;
VsModeData data;
};
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
};
// 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 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;
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
CSSIcon icons[25 + 1]; // 0xDC
};
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 {
TextGlyphTexture* text; // 0x00
TextGlyphTexture* 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 {
TextGlyphTexture* text; // 0x00
float x4; // 0x04
u8 joint; // 0x08
int xc; // 0x0C
int x10; // 0x10
int x14; // 0x14
int x18; // 0x18
int x1c; // 0x1C
};
struct CSSDoorsData {
CSSDoor doors[4]; // 0x00
CSSTag tags[4]; // 0x90
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 xcd;
u8 xce;
int xcf;
int xd3;
float xd7;
float xdb;
float xdf;
float xe3;
float xe7;
float xeb;
u8 xf1[5];
float xf8;
float xfc;
float x100;
float x104;
float x108;
float x10c;
CSSKOStar ko_stars[4]; // 0x110
u8 x190[64]; // 0x190
};
struct mnGallery_804A0B90_t {
char pad_0[0x96000];
};
struct { int x[1 - 2 * !(sizeof(struct mnGallery_804A0B90_t) == 0x96000)]; };;
#define _memory_h_
void HSD_Free(void* ptr);
void* HSD_MemAlloc(ssize_t size);
typedef enum _MenuEvent {
MenuEvent_Up = 1 << 0,
MenuEvent_Down = 1 << 1,
MenuEvent_Left = 1 << 2,
MenuEvent_Right = 1 << 3,
MenuEvent_Forward = 1 << 4,
MenuEvent_Back = 1 << 5,
MenuEvent_unk = 1 << 6,
MenuEvent_unk2 = 1 << 7,
MenuEvent_unk3 = 1 << 8,
MenuEvent_unk4 = 1 << 9,
MenuEvent_unk5 = 1 << 10,
MenuEvent_unk6 = 1 << 11,
} MenuEvent;
#define GET_MENU(gobj) ((Menu*) HSD_GObjGetUserData(gobj))
static inline void Menu_DecrementAnimTimer(void)
{
mn_804D6BC8.x0--;
mn_804D6BC8.x2 = 0;
mn_804D6BC8.x4 = 0;
}
static inline u64 Menu_GetEvents(void)
{
return mn_804A04F0.x8 = mn_80229624(4);
}
// @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, u8 val)
{
HSD_Text* text =
HSD_SisLib_803A5ACC(0, 1, -9.5F, 9.1F, 17.0F, 364.68332F, 38.38772F);
menu->text = text;
text->x24.x = 0.0521F;
text->x24.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 */ TextKerning* mnCharSel_8025BC20(TextKerning* arg0, u32 arg1);
/* 25BD30 */ void mnCharSel_8025BD30(void);
/* 25C020 */ M2C_UNK mnCharSel_8025C020();
/* 25D1C4 */ M2C_UNK mnCharSel_8025D1C4();
/* 25D5AC */ M2C_UNK mnCharSel_8025D5AC();
/* 25DAA0 */ M2C_UNK mnCharSel_8025DAA0();
/* 25DB34 */ M2C_UNK mnCharSel_8025DB34();
/* 25EE8C */ M2C_UNK mnCharSel_8025EE8C();
/* 25F0E0 */ M2C_UNK fn_8025F0E0();
/* 25FAC0 */ M2C_UNK fn_8025FAC0();
/* 25FB2C */ M2C_UNK fn_8025FB2C();
/* 25FB50 */ M2C_UNK mnCharSel_8025FB50();
/* 25FDEC */ M2C_UNK mnCharSel_8025FDEC();
/* 260094 */ M2C_UNK mnCharSel_CostumeChange();
/* 2602A0 */ M2C_UNK mnCharSel_CursorThink();
/* 262648 */ M2C_UNK fn_80262648();
/* 262F44 */ M2C_UNK fn_80262F44();
/* 263354 */ M2C_UNK fn_80263354();
/* 2633B0 */ M2C_UNK fn_802633B0();
/* 264070 */ M2C_UNK mnCharSel_80264070();
/* 26407C */ M2C_UNK fn_8026407C();
/* 2640A0 */ M2C_UNK mnCharSel_802640A0();
/* 26688C */ M2C_UNK mnCharSel_8026688C();
/* 2669F4 */ M2C_UNK mnCharSel_802669F4();
/* 266D70 */ M2C_UNK mnCharSel_80266D70();
#define GALE01_24A168
#define GALE01_23EA2C
/* 23EA2C */ u8 mnDiagram_8023EA2C(s32 arg0);
/* 23EA40 */ u8 mnDiagram_8023EA40(s32 arg0);
/* 23EA54 */ M2C_UNK mnDiagram_8023EA54();
/* 23EAC4 */ M2C_UNK mnDiagram_8023EAC4();
/* 23EB84 */ M2C_UNK mnDiagram_8023EB84();
/* 23ECC4 */ M2C_UNK mnDiagram_8023ECC4();
/* 23EE38 */ M2C_UNK mnDiagram_8023EE38();
/* 23EF70 */ M2C_UNK mnDiagram_8023EF70();
/* 23EFE4 */ M2C_UNK mnDiagram_8023EFE4();
/* 23F068 */ M2C_UNK mnDiagram_8023F068();
/* 23F0DC */ M2C_UNK mnDiagram_8023F0DC();
/* 23F14C */ M2C_UNK mnDiagram_8023F14C();
/* 23F238 */ M2C_UNK mnDiagram_8023F238();
/* 23F334 */ M2C_UNK mnDiagram_8023F334();
/* 23F3A8 */ M2C_UNK mnDiagram_8023F3A8();
/* 23F400 */ M2C_UNK mnDiagram_8023F400();
/* 23F45C */ M2C_UNK mnDiagram_8023F45C();
/* 23F4CC */ M2C_UNK mnDiagram_8023F4CC();
/* 23F540 */ M2C_UNK mnDiagram_8023F540();
/* 23F578 */ M2C_UNK mnDiagram_8023F578();
/* 23F8CC */ M2C_UNK mnDiagram_8023F8CC();
/* 23FA6C */ M2C_UNK mnDiagram_8023FA6C();
/* 23FC28 */ M2C_UNK mnDiagram_8023FC28();
/* 23FDD8 */ M2C_UNK mnDiagram_8023FDD8();
/* 23FE30 */ M2C_UNK fn_8023FE30();
/* 23FED4 */ M2C_UNK fn_8023FED4();
/* 240B18 */ M2C_UNK fn_80240B18();
/* 240B98 */ M2C_UNK fn_80240B98();
/* 240D94 */ M2C_UNK mnDiagram_80240D94();
/* 241310 */ M2C_UNK mnDiagram_80241310();
/* 241668 */ M2C_UNK mnDiagram_80241668();
/* 241730 */ M2C_UNK mnDiagram_80241730();
/* 2417D0 */ M2C_UNK mnDiagram_802417D0();
/* 241AE8 */ M2C_UNK fn_80241AE8();
/* 241B4C */ M2C_UNK mnDiagram_80241B4C();
/* 241BF8 */ M2C_UNK fn_80241BF8();
/* 241E78 */ M2C_UNK mnDiagram_80241E78();
/* 24227C */ M2C_UNK mnDiagram_8024227C();
/* 2427B4 */ M2C_UNK mnDiagram_802427B4();
/* 242B38 */ M2C_UNK mnDiagram_80242B38();
/* 242C0C */ M2C_UNK mnDiagram_80242C0C();
/* 243038 */ M2C_UNK fn_80243038();
/* 2433AC */ M2C_UNK mnDiagram_802433AC();
/* 243434 */ M2C_UNK mnDiagram_80243434();
/* 2437E8 */ M2C_UNK mnDiagram_802437E8();
#define __GALE01_23EA2C
struct mnDiagram_804A0750_t {
char pad_0[0x1C];
};
struct { int x[1 - 2 * !(sizeof(struct mnDiagram_804A0750_t) == 0x1C)]; };;
struct mnDiagram_804A076C_t {
char pad_0[0x78];
};
struct { int x[1 - 2 * !(sizeof(struct mnDiagram_804A076C_t) == 0x78)]; };;
/* 4A0750 */ struct mnDiagram_804A0750_t mnDiagram_804A0750;
/* 4A076C */ struct mnDiagram_804A076C_t mnDiagram_804A076C;
#define GALE01_258940
/* 258940 */ void mnGallery_80258940(void);
/* 25896C */ M2C_UNK mnGallery_8025896C();
/* 258A08 */ M2C_UNK mnGallery_80258A08();
/* 258BC4 */ M2C_UNK mnGallery_80258BC4();
/* 258D50 */ M2C_UNK mnGallery_80258D50();
/* 258DBC */ M2C_UNK mnGallery_80258DBC();
/* 258ED0 */ M2C_UNK fn_80258ED0();
/* 2590C4 */ M2C_UNK fn_802590C4();
/* 2591BC */ M2C_UNK mnGallery_802591BC();
/* 259604 */ M2C_UNK mnGallery_80259604();
/* 25963C */ M2C_UNK mnGallery_8025963C();
/* 259868 */ M2C_UNK mnGallery_80259868();
/* 4A0B90 */ extern struct mnGallery_804A0B90_t* mnGallery_804A0B90[4];
#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);
#define SYSDOLPHIN_BASELIB_GOBJPLINK_H
void HSD_GObjPLink_80390228(HSD_GObj*);
void HSD_GObjPLink_8039032C(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 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;
/* 0x10 */ HSD_GObj* gobj; // owner
/* 0x14 */ HSD_GObjEvent on_invoke;
};
/* 38FAA8 */ void HSD_GObjProc_8038FAA8(HSD_GObjProc* gproc);
/* 38FC18 */ void HSD_GObjProc_8038FC18(HSD_GObjProc* gproc);
/* 38FCE4 */ void HSD_GObjProc_8038FCE4(HSD_GObjProc* gproc);
/* 38FD54 */ HSD_GObjProc* HSD_GObjProc_8038FD54(HSD_GObj*, HSD_GObjEvent, u8);
/* 38FE24 */ void HSD_GObjProc_8038FE24(HSD_GObjProc* gproc);
/* 38FED4 */ void HSD_GObjProc_8038FED4(HSD_GObj* gobj);
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 GALE01_23749C
/* 23749C */ M2C_UNK mnName_8023749C();
/* 23754C */ HSD_Text* mnName_8023754C(int slot);
/* 237594 */ M2C_UNK mnName_80237594();
/* 2375EC */ M2C_UNK mnName_802375EC();
/* 237654 */ M2C_UNK mnName_80237654();
/* 2377A4 */ M2C_UNK fn_802377A4();
/* 2377A8 */ M2C_UNK mnName_802377A8();
/* 237834 */ M2C_UNK mnName_80237834();
/* 2379BC */ M2C_UNK mnName_802379BC();
/* 237A04 */ M2C_UNK mnName_80237A04();
/* 237A68 */ M2C_UNK mnName_80237A68();
/* 237D94 */ M2C_UNK mnName_80237D94();
/* 237F78 */ M2C_UNK mnName_80237F78();
/* 23817C */ M2C_UNK mnName_8023817C();
/* 238540 */ M2C_UNK fn_80238540();
/* 2385A0 */ M2C_UNK mnName_802385A0();
/* 2385D4 */ M2C_UNK mnName_802385D4();
/* 238698 */ M2C_UNK mnName_80238698();
/* 238754 */ M2C_UNK mnName_80238754();
/* 2388D4 */ M2C_UNK mnName_802388D4();
/* 238964 */ M2C_UNK mnName_80238964();
/* 238A04 */ M2C_UNK mnName_80238A04();
/* 238AE0 */ M2C_UNK mnName_80238AE0();
/* 238C34 */ M2C_UNK mnName_80238C34();
/* 239574 */ M2C_UNK fn_80239574();
/* 239878 */ M2C_UNK mnName_80239878();
/* 239A24 */ M2C_UNK mnName_80239A24();
/* 239EBC */ M2C_UNK mnName_80239EBC();
/* 239F5C */ M2C_UNK mnName_80239F5C();
/* 239FFC */ M2C_UNK mnName_80239FFC();
/* 23A058 */ M2C_UNK mnName_8023A058();
/* 23A0BC */ M2C_UNK fn_8023A0BC();
/* 23A290 */ M2C_UNK mnName_8023A290();
/* 23A59C */ M2C_UNK mnName_8023A59C();
/* 23A9B4 */ M2C_UNK mnName_8023A9B4();
/* 23AC40 */ M2C_UNK mnName_8023AC40();
/* 23B084 */ M2C_UNK mnName_8023B084();
extern HSD_PadStatus HSD_PadCopyStatus[4];
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u16 unk4;
f32 unk8;
f32 unkC;
M2C_UNK unk10;
HSD_Text* unk14;
HSD_Text* unk18;
HSD_Text* unk1C;
} soundtest_user_data;
typedef struct {
/* +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;
} Soundtest_GObj;
void mnSoundTest_8024A790(HSD_GObj*);
void mnSoundTest_8024A958(Soundtest_GObj*);
void mnSoundTest_8024AA70(HSD_GObj* arg0, u8 arg1);
void mnSoundTest_8024ABF8(HSD_GObj* arg0, u8 arg1);
void mnSoundTest_8024AD58(HSD_GObj* arg0, s8 arg1);
void fn_8024AED0(HSD_GObj* arg0);
#define GALE01_2599EC
/* 2599EC */ M2C_UNK mnStageSel_802599EC();
/* 259C28 */ M2C_UNK mnStageSel_80259C28();
/* 259D84 */ M2C_UNK fn_80259D84();
/* 259ED8 */ M2C_UNK mnStageSel_80259ED8();
/* 25A090 */ M2C_UNK fn_8025A090();
/* 25A310 */ M2C_UNK fn_8025A310();
/* 25A560 */ M2C_UNK fn_8025A560();
/* 25A91C */ M2C_UNK fn_8025A91C();
/* 25A974 */ M2C_UNK fn_8025A974();
/* 25A998 */ M2C_UNK mnStageSel_8025A998();
/* 25B850 */ M2C_UNK mnStageSel_8025B850();
/* 25BB5C */ M2C_UNK mnStageSel_8025BB5C();
/* 25BBD4 */ M2C_UNK mnStageSel_8025BBD4();
/* 25BC08 */ M2C_UNK mnStageSel_8025BC08();
#define GALE01_041C78
/* 041C78 */ void mpColl_80041C78(void);
/* 041C8C */ void mpColl_80041C8C(CollData* cd);
/* 041DD0 */ void mpColl_80041DD0(CollData* cd, u32 flags);
/* 041EE4 */ void mpColl_80041EE4(CollData*);
/* 042078 */ void mpColl_80042078(CollData* cd, HSD_GObj* gobj, HSD_JObj*,
HSD_JObj*, HSD_JObj*, HSD_JObj*, HSD_JObj*,
HSD_JObj*, HSD_JObj*, float);
/* 04220C */ void mpColl_8004220C(CollData* cd, HSD_GObj* gobj, float, float,
float, float);
/* 042374 */ void mpColl_80042374(CollData*, float, float, float);
/* 042384 */ void mpColl_80042384(CollData* cd);
/* 0424DC */ void mpColl_800424DC(CollData* cd, u32 flags);
/* 04293C */ void mpColl_8004293C(CollData* cd);
/* 042C58 */ void mpColl_80042C58(CollData*, ftCollisionBox*);
/* 042D24 */ void mpColl_80042D24(CollData* cd);
/* 042DB0 */ void mpColl_80042DB0(CollData* ecb, float time);
/* 043268 */ void mpColl_80043268(CollData*, s32, s32, float);
/* 043324 */ void mpColl_80043324(CollData*, s32, s32);
/* 043558 */ void mpColl_80043558(CollData*, s32);
/* 043670 */ void mpColl_80043670(CollData*);
/* 043680 */ void mpColl_80043680(CollData*, Vec3*);
/* 0436D8 */ void mpColl_800436D8(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*, s32*);
/* 043C6C */ void mpColl_80043C6C(CollData*, s32, s32);
/* 043E90 */ s32 mpColl_80043E90(CollData*, s32*);
/* 043F40 */ void mpColl_80043F40(CollData*, s32, s32);
/* 044164 */ bool mpColl_80044164(CollData* cd, int* p_ledge_id);
/* 0443C4 */ bool mpColl_800443C4(CollData* cd, int* p_ledge_id);
/* 044628 */ s32 mpColl_80044628(CollData*, Event, void*, s32);
/* 044838 */ s32 mpColl_80044838(CollData*, s32);
/* 044948 */ s32 mpColl_80044948(CollData*);
/* 044AD8 */ s32 mpColl_80044AD8(CollData*, s32);
/* 044C74 */ s32 mpColl_80044C74(CollData*);
/* 044E10 */ s32 mpColl_80044E10(CollData*);
/* 0454A4 */ s32 mpColl_800454A4(CollData*);
/* 045B74 */ s32 mpColl_80045B74(CollData*);
/* 046224 */ s32 mpColl_80046224(CollData*);
/* 046904 */ bool mpColl_80046904(CollData* cd, u32 flags);
/* 046F78 */ M2C_UNK fn_80046F78();
/* 0471F8 */ bool mpColl_800471F8(CollData*);
/* 04730C */ bool mpColl_8004730C(CollData* cdata, ftCollisionBox* arg1);
/* 0473CC */ void mpColl_800473CC(CollData*);
/* 0474E0 */ void mpColl_800474E0(CollData*);
/* 0475F4 */ void mpColl_800475F4(CollData*);
/* 0476B4 */ void mpColl_800476B4(CollData*);
/* 0477E0 */ bool mpColl_800477E0(CollData*);
/* 0478F4 */ void mpColl_800478F4(CollData*);
/* 047A08 */ void mpColl_80047A08(CollData*);
/* 047AC8 */ void mpColl_80047AC8(CollData*);
/* 047BF4 */ void mpColl_80047BF4(CollData*);
/* 047D20 */ void mpColl_80047D20(CollData*);
/* 047E14 */ void mpColl_80047E14(CollData*);
/* 047F40 */ void mpColl_80047F40(CollData*);
/* 04806C */ void mpColl_8004806C(CollData*);
/* 048160 */ void mpColl_80048160(CollData*);
/* 048274 */ void mpColl_80048274(CollData*);
/* 048388 */ void mpColl_80048388(CollData*);
/* 048464 */ void mpColl_80048464(CollData*);
/* 048578 */ void mpColl_80048578(CollData*);
/* 048654 */ void mpColl_80048654(CollData*);
/* 048768 */ void mpColl_80048768(CollData*);
/* 048844 */ bool mpColl_80048844(CollData*, f32);
/* 0488F4 */ M2C_UNK mpColl_800488F4();
/* 048AB0 */ M2C_UNK mpColl_80048AB0();
/* 0491C8 */ M2C_UNK mpColl_800491C8();
/* 049778 */ M2C_UNK mpColl_80049778();
/* 049EAC */ M2C_UNK mpColl_80049EAC();
/* 04A45C */ M2C_UNK mpColl_8004A45C();
/* 04A678 */ M2C_UNK mpColl_8004A678();
/* 04A908 */ M2C_UNK mpColl_8004A908();
/* 04AB80 */ M2C_UNK mpColl_8004AB80();
/* 04ACE4 */ M2C_UNK fn_8004ACE4();
/* 04B108 */ bool mpColl_8004B108(CollData*);
/* 04B21C */ void mpColl_8004B21C(CollData*);
/* 04B2DC */ bool mpColl_8004B2DC(CollData*);
/* 04B3F0 */ void mpColl_8004B3F0(CollData*);
/* 04B4B0 */ M2C_UNK mpColl_8004B4B0();
/* 04B5C4 */ void mpColl_8004B5C4(CollData*);
/* 04B6D8 */ M2C_UNK mpColl_8004B6D8();
/* 04B894 */ M2C_UNK mpColl_8004B894();
/* 04BDD4 */ M2C_UNK mpColl_8004BDD4();
/* 04C328 */ M2C_UNK mpColl_8004C328();
/* 04C534 */ M2C_UNK fn_8004C534();
/* 04C750 */ M2C_UNK mpColl_8004C750();
/* 04C864 */ void mpColl_8004C864(CollData*, s32, float, float);
/* 04C91C */ void mpColl_8004C91C(CollData*, s32, float, float);
/* 04CA6C */ void mpColl_8004CA6C(CollData*);
/* 04CAA0 */ bool mpColl_8004CAA0(CollData*, Vec3*);
/* 04CAE8 */ bool mpColl_8004CAE8(CollData*, Vec3*);
/* 04CB30 */ bool mpColl_8004CB30(CollData*, Vec3*);
/* 04CB78 */ bool mpColl_8004CB78(CollData*, Vec3*);
/* 04CBC0 */ bool mpColl_8004CBC0(CollData*);
/* 04CBE8 */ void mpColl_8004CBE8(CollData*);
/* 04CBF4 */ void mpColl_8004CBF4(CollData*);
/* 04CC00 */ void mpColl_8004CC00(CollData*);
/* 04D024 */ M2C_UNK mpColl_8004D024(Vec3*);
/* 0528CC */ s32 mpColl_800528CC(s32);
/* 052A98 */ s32 mpColl_80052A98(s32);
/* 4D64AC */ extern u32 mpColl_804D64AC;
#define GALE01_05A6F8
/* 05AC14 */ mp_UnkStruct0* mpIsland_8005AC14(Vec3*, float);
/* 05AB54 */ mp_UnkStruct0* mpIsland_8005AB54(int surface_idx);
/* 05AC8C */ bool mpIsland_8005AC8C(mp_UnkStruct0* arg0);
/* 05ACE8 */ void mpIsland_8005ACE8(mp_UnkStruct5*, Vec3*, Vec3*);
/* 458E88 */ extern mp_UnkStruct0 mpIsland_80458E88;
#define GALE01_04D164
/* 04D164 */ int mpLib_8004D164(void);
/* 04D16C */ mpLib_804D64B8_t* mpLib_8004D16C(void);
/* 04D174 */ mp_UnkStruct2* mpLib_8004D174(void);
/* 04D17C */ mpLib_804D64C0_t* mpLib_8004D17C(void);
/* 04D184 */ M2C_UNK mpLib_8004D184();
/* 04D288 */ void mpLib_8004D288(M2C_UNK);
/* 04DB78 */ s32 mpLib_8004DB78(s32 gr_idx);
/* 04DC04 */ s32 mpLib_8004DC04(s32 gr_idx);
/* 04DD90 */ bool mpLib_8004DD90(int idx, float*, float*, M2C_UNK, Vec3* normal);
/* 04E090 */ enum_t mpLib_8004E090(int idx, Vec3*, float*, u32*, Vec3* normal);
/* 04E398 */ bool mpLib_8004E398(int, float*, int, int, int, float);
/* 04E684 */ M2C_UNK mpLib_8004E684();
/* 04EBF8 */ M2C_UNK mpLib_8004EBF8();
/* 04ED5C */ M2C_UNK mpLib_8004ED5C();
/* 04F008 */ bool mpLib_8004F008(Vec3*, int*, int, int, int, int, int, int,
float, float, float, float, float);
/* 04F400 */ M2C_UNK mpLib_8004F400();
/* 04F8A4 */ M2C_UNK mpLib_8004F8A4();
/* 04FC2C */ M2C_UNK mpLib_8004FC2C();
/* 050068 */ M2C_UNK mpLib_80050068();
/* 0501CC */ bool mpLib_800501CC(float surface_normal_y,
float surface_normal_x, float right_x,
float right_y, Vec3* coll_vec, M2C_UNK, M2C_UNK,
M2C_UNK, u32, u32);
/* 05057C */ M2C_UNK mpLib_8005057C();
/* 0509B8 */ bool mpLib_800509B8(float surface_normal_y,
float surface_normal_x, float left_x,
float left_y, Vec3* coll_vec, M2C_UNK, M2C_UNK,
M2C_UNK, u32, u32);
/* 050D68 */ M2C_UNK mpLib_80050D68();
/* 0511A4 */ M2C_UNK mpLib_800511A4();
/* 0515A0 */ M2C_UNK mpLib_800515A0();
/* 05199C */ s32 mpLib_8005199C(Vec3*, s32, s32);
/* 051BA8 */ M2C_UNK mpLib_80051BA8();
/* 051EC8 */ s32 mpLib_80051EC8(Vec3*, s32*, s32*, Vec3*, s32, s32, s32, float,
float, float, float);
/* 0524DC */ bool mpLib_800524DC(Vec3*, int, Vec3*, Vec3*, int, int, float x,
float y, float z, float);
/* 052508 */ M2C_UNK mpLib_80052508();
/* 052534 */ M2C_UNK mpLib_80052534();
/* 052700 */ s32 mpLib_80052700(int idx);
/* 0528CC */ M2C_UNK mpLib_800528CC();
/* 052A98 */ M2C_UNK mpLib_80052A98();
/* 052C64 */ M2C_UNK mpLib_80052C64();
/* 052E30 */ M2C_UNK mpLib_80052E30();
/* 052FFC */ M2C_UNK mpLib_80052FFC();
/* 0531C8 */ M2C_UNK mpLib_800531C8();
/* 053394 */ M2C_UNK mpLib_80053394();
/* 053448 */ M2C_UNK mpLib_80053448();
/* 0534FC */ M2C_UNK mpLib_800534FC();
/* 0536CC */ M2C_UNK mpLib_800536CC();
/* 05389C */ M2C_UNK mpLib_8005389C();
/* 053950 */ M2C_UNK mpLib_80053950();
/* 053A04 */ M2C_UNK mpLib_80053A04();
/* 053BD4 */ M2C_UNK mpLib_80053BD4();
/* 053DA4 */ void mpLib_80053DA4(int ledge_id, Vec3*);
/* 053ECC */ void mpLib_80053ECC(int ledge_id, Vec3*);
/* 053FF4 */ void mpLib_80053FF4(s32, Vec3*);
/* 054158 */ void mpLib_80054158(s32, Vec3*);
/* 0542BC */ M2C_UNK mpLib_800542BC();
/* 054420 */ M2C_UNK mpLib_80054420();
/* 054584 */ s32 mpLib_80054584(int, float*);
/* 0546E8 */ M2C_UNK mpLib_800546E8();
/* 05484C */ M2C_UNK mpLib_8005484C();
/* 0549B0 */ M2C_UNK mpLib_800549B0();
/* 054B14 */ M2C_UNK mpLib_80054B14();
/* 054BC0 */ M2C_UNK mpLib_80054BC0();
/* 054C6C */ enum_t mpLib_80054C6C(int);
/* 054CEC */ u32 mpLib_80054CEC(enum_t);
/* 054D68 */ M2C_UNK mpLib_80054D68();
/* 054DFC */ void mpLib_80054DFC(enum_t, Vec3*);
/* 054ED8 */ bool mpLib_80054ED8(int);
/* 054F68 */ bool mpLib_80054F68(s32, s32);
/* 0552B0 */ void mpLib_800552B0(s16 x, HSD_JObj*, s16 z);
/* 05541C */ M2C_UNK mpLib_8005541C();
/* 0557D0 */ M2C_UNK mpLib_800557D0();
/* 055C5C */ M2C_UNK mpLib_80055C5C();
/* 055E24 */ M2C_UNK mpLib_80055E24();
/* 055E9C */ void mpLib_80055E9C(s16 x);
/* 0565DC */ M2C_UNK mpLib_800565DC();
/* 05667C */ void mpLib_8005667C(s16);
/* 0566D8 */ M2C_UNK mpLib_800566D8();
/* 0566F8 */ void mpLib_800566F8(ssize_t, f32, f32);
/* 056710 */ M2C_UNK mpLib_80056710();
/* 056758 */ M2C_UNK mpLib_80056758();
/* 0567C0 */ bool mpLib_800567C0(s32 wall_id, Vec3* ecb_side_vtx,
Vec3* result);
/* 0569EC */ void mpLib_800569EC(void);
/* 056A1C */ M2C_UNK mpLib_80056A1C(void);
/* 056A54 */ M2C_UNK mpLib_80056A54(void);
/* 056A8C */ M2C_UNK mpLib_80056A8C(void);
/* 056AC4 */ M2C_UNK mpLib_80056AC4(void);
/* 056AFC */ M2C_UNK mpLib_80056AFC(void);
/* 056B34 */ M2C_UNK mpLib_80056B34(void);
/* 056B6C */ enum_t mpLib_80056B6C(enum_t);
/* 056C54 */ bool mpLib_80056C54(s32 idx, Vec3* pos, bool, Vec3*, bool, bool,
float, float, float, float);
/* 057424 */ void mpLib_80057424(s32);
/* 057528 */ M2C_UNK mpLib_80057528();
/* 0575B0 */ M2C_UNK mpLib_800575B0();
/* 057638 */ void mpLib_80057638(s32);
/* 057B4C */ M2C_UNK mpLib_80057B4C();
/* 057BC0 */ void mpLib_80057BC0(s32);
/* 057FDC */ M2C_UNK mpLib_80057FDC();
/* 058044 */ M2C_UNK mpLib_80058044();
/* 0580AC */ void mpLib_800580AC(s32);
/* 0580C8 */ void mpLib_800580C8(int, Ground*, mpLib_GroundCallback);
/* 0580E0 */ void mpLib_800580E0(s32);
/* 0580FC */ void mpLib_800580FC(int, mpLib_Callback*, M2C_UNK);
/* 05811C */ void mpLib_8005811C(CollData*, s32 ledge_id);
/* 0581A4 */ void mpLib_800581A4(int arg0, int arg1, int arg2);
/* 0581BC */ void mpLib_800581BC(int, mpLib_Callback*, M2C_UNK);
/* 0581DC */ M2C_UNK mpLib_800581DC();
/* 058560 */ M2C_UNK mpLib_80058560();
/* 058614 */ M2C_UNK mpLib_80058614();
/* 0587FC */ M2C_UNK fn_800587FC();
/* 058820 */ void mpLib_80058820(void);
/* 0588C8 */ int mpLib_800588C8(void);
/* 0588D0 */ void mpLib_800588D0(float left, float bottom, float right,
float top);
/* 058970 */ void mpLib_80058970(f32 arg8, f32 arg9, f32 argA, f32 argB);
/* 0589D0 */ void mpLib_800589D0(f32 arg8, f32 arg9, f32 argA, f32 argB,
f32 argC, f32 argD, f32 argE, f32 argF);
/* 058AA0 */ void mpLib_80058AA0(void);
/* 058ACC */ M2C_UNK mpLib_80058ACC();
/* 058B5C */ M2C_UNK mpLib_80058B5C();
/* 0590F4 */ M2C_UNK mpLib_800590F4();
/* 059404 */ M2C_UNK mpLib_80059404();
/* 059554 */ M2C_UNK mpLib_80059554();
/* 059E60 */ float mpLib_80059E60();
/* 059FE0 */ M2C_UNK mpLib_80059FE0();
/* 05A220 */ M2C_UNK mpLib_8005A220();
/* 05A2DC */ M2C_UNK mpLib_8005A2DC();
/* 05A340 */ M2C_UNK mpLib_8005A340();
#define __GALE01_04D164
/* 4D64B0 */ static int mpLib_804D64B0;
/* 4D64B4 */ static int mpLib_804D64B4;
/* 4D64B8 */ static mpLib_804D64B8_t* mpLib_804D64B8;
/* 4D64BC */ static mp_UnkStruct2* mpLib_804D64BC;
/* 4D64C0 */ static mpLib_804D64C0_t* mpLib_804D64C0;
/* 4D64C4 */ static mp_UnkStruct7* mpLib_804D64C4;
/* 4D64C8 */ static s32 mpLib_804D64C8;
/* 4D64CC */ static s32 mpLib_804D64CC;
/* 4D64D0 */ static s32 mpLib_804D64D0;
/* 4D64D4 */ static s32 mpLib_804D64D4;
/* 4D64D8 */ static s32 mpLib_804D64D8;
/* 4D64DC */ static s32 mpLib_804D64DC;
/* 4D64E0 */ static s32 mpLib_804D64E0;
/* 4D64E4 */ static s32 mpLib_804D64E4;
#define MELEE_MP_TYPES_H
struct mp_UnkStruct0 {
/* +0 */ mp_UnkStruct0* next;
/* +4 */ int x4;
/* +8 */ float x8;
/* +C */ float xC;
/* +10 */ int x10;
/* +14 */ float x14;
/* +18 */ float x18;
/* +1C */ int x1C;
/* +20 */ int x20;
/* +24 */ short x24;
/* +26 */ short x26;
/* +28 */ short x28;
/* +2A */ short x2A;
/* +2C */ mp_UnkStruct3* ptr;
};
struct mp_UnkStruct1 {
/* +0 */ int x0;
/* +4 */ short x4;
/* +6 */ short x6;
};
struct mp_UnkStruct2 {
/* +0 */ mp_UnkStruct1* x0;
/* +4 */ int x4;
};
struct mpisland {
/* +0 */ int x0[8];
/* +20 */ int x20[8];
};
struct mp_UnkStruct3 {
int x0;
int x4;
int xC;
};
struct mp_UnkStruct5 {
/* +0 */ u8 x0[0x4];
/* +4 */ ushort x4;
/* +6 */ ushort x6;
/* +8 */ int x8;
/* +C */ int xC;
/* +10 */ int x10;
/* +14 */ int x14;
/* +18 */ int x18;
/* +1C */ int x1C;
/* +20 */ u8 x20[0x28 - 0x20];
/* +28 */ short x28;
/* +2A */ short x2A;
/* +2C */ ushort x2C;
/* +30 */ int x30;
/* +34 */ int x34;
/* +38 */ int x38;
/* +3C */ int x3C;
};
struct mp_UnkStruct6 {
/* +0 */ short x0;
/* +2 */ short x2;
/* +4 */ short* x4;
};
struct mpLib_804D64B8_t {
/* 0x00 */ char pad_0[8];
/* 0x08 */ f32 unk_8; /* inferred */
/* 0x0C */ f32 unk_C; /* inferred */
/* 0x10 */ char pad_10[8]; /* maybe part of unk_C[3]? */
}; /* size = 0x18 */
struct { int x[1 - 2 * !(sizeof(struct mpLib_804D64B8_t) == 0x18)]; };;
struct mpLib_804D64C0_t {
/* 0x00 */ char pad_0[0x24];
/* 0x24 */ mpLib_GroundCallback x24;
/* 0x28 */ Ground* x28;
/* 0x2C */ int unk_2C; /* inferred */
/* 0x30 */ int unk_30; /* inferred */
}; /* size = 0x34 */
struct { int x[1 - 2 * !(sizeof(struct mpLib_804D64C0_t) == 0x34)]; };;
struct mp_UnkStruct7 {
/* +0 */ struct mp_UnkStruct7* next;
/* +4 */ s32 x4;
/* +8 */ s32 x8;
/* +C */ u8 xC[0x10 - 0xC];
/* +10 */ float x10;
/* +14 */ float x14;
/* +18 */ float x18;
/* +1C */ float x1C;
};
#define GALE01_03715C
/* 037C60 */ void pl_80037C60(HSD_GObj*, s32);
/* 037ECC */ void pl_80037ECC(void);
/* 038144 */ void pl_80038144(void);
/* 03D60C */ void pl_8003D60C(void);
/* 03E058 */ void pl_8003E058(s32, s32, s32, s32);
/* 03E0E8 */ void pl_8003E0E8(u8, int);
/* 03E114 */ void pl_8003E114(u8, int, float);
/* 03E150 */ void pl_8003E150(int slot, bool);
/* 03E17C */ void pl_8003E17C(u8, int, Item_GObj*);
/* 03E4A4 */ void pl_8003E4A4(u8 slot, bool, void*, s32);
/* 03E854 */ void pl_8003E854(u8, int, Item_GObj*);
/* 03E978 */ void pl_8003E978(u8 slot, bool fp_x221F_b4, Item_GObj* item_gobj,
float y0, float, float, float, float x1,
float y1, float frame_speed_mul);
/* 03EA08 */ void pl_8003EA08(u8 slot, bool);
/* 03EB30 */ void pl_8003EB30(f32, u16, s32, s32, s32, u8);
/* 03EC9C */ void pl_8003EC9C(s32, s32, f32, f32);
/* 03FAA8 */ void pl_8003FAA8(s32 slot, s32 index, Vec3* pos, Vec3* prevPos);
/* 03FC44 */ void pl_8003FC44(u8 slot, bool);
/* 03FE1C */ void pl_8003FE1C(u8 slot, bool);
/* 03FFDC */ void pl_8003FFDC(u8, s32, u8, s32, s32);
/* 040048 */ void pl_80040048(u8, s32);
/* 040120 */ void pl_80040120(u8, s32);
/* 0401F0 */ void pl_800401F0(u8, int, float, float);
/* 040270 */ void pl_80040270(u8, u8, float);
/* 040330 */ void pl_80040330(u8 slot, bool, f32);
/* 040460 */ void pl_80040460(u8 slot, bool);
/* 040B8C */ void pl_80040B8C(u8 slot, bool, s32);
/* 0411C4 */ void pl_800411C4(u8 slot, bool);
/* 041280 */ void pl_80041280(u8 slot, bool);
/* 041B08 */ void pl_80041B08(void);
#define _plattack_h_
void plAttack_80037590(void);
u16 plAttack_80037B08(void);
#define _player_h_
#define MELEE_PL_TYPES_H
/// @todo Probably the same struct as #plAllocInfo, figure out how to make them
/// work as one.
struct plAllocInfo2 {
s32 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 pl_800386D8_t {
/* +0 */ u8 _0[0x3E8];
/* +3E8 */ M2C_UNK x3E8 [0];
};
typedef struct StaleMoveTable {
/* +0 */ int current_index;
/* +4 */ struct {
u16 move_id;
u16 attack_instance;
} StaleMoves[10];
/// @todo #pl_800386D8_t starts at +2C
/* +2C */ int total_attack_count;
/* +30 */ u8 x30[0x5EC - 0x30];
/* +5EC */ int x5EC;
/* +5F0 */ u8 x5F0[0xCEC - 0x5F0];
/* +CEC */ int xCEC;
/* +CF0 */ int xCF0;
} StaleMoveTable;
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 */
typedef struct _StaticPlayer {
/// @at{0} @sz{4}
/// @todo 0x02 In-Game (includes dead). 0x00 Otherwise.
enum_t player_state;
/// @at{4} @sz{4}
/// @todo External ID.
CharacterKind player_character;
/// @at{8} @sz{4}
/// @todo 0 is HMN, 1 is CPU, 2 is Demo, 3 n/a
enum_t slot_type;
/*0x0C*/ u8 transformed[2]; // 0x0001 for normal, 0x0100 for transformed
// (Probably Zelda/Sheik only)
/*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; // 00 = normal, 01 = red, 02 = blue, 03 = green
// (reflected in icon immediately)
/*0x45*/ s8 unk45;
/*0x46*/ s8 controller_index;
/*0x47*/ u8 team; /// 00 = red, 01 = blue, 02 = green
/*0x48*/ s8 player_id;
/*0x49*/ u8 cpu_level;
/*0x4A*/ u8 cpu_type;
/*0x4B*/ s8 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]; /// other index for nana falls
/*0x70-0x84*/ uint kos_by_player[6];
/// @at{88} @sz{4}
/// @remarks If -1 in zz_0035184, then it's set to MatchInfo->frame_count
uint match_frame_count;
/*0x8C*/ u16 suicide_count;
/*0x8E*/ s8 stocks;
/*0x8F*/ s8 unk8F;
/*0x90*/ int current_coins;
/*0x94*/ s32 total_coins;
/*0x98*/ s32 unk98;
/*0x9C*/ s32 unk9C;
/*0xA0-A4*/ s32
joystick_direction_input_count[2]; // Incremented every time you move
// the joystick a different
// direction from neutral.
/*0xA8*/ int nametag_slot_id;
/*0xAC*/ 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;
} 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(enum_t id, int slot);
void Player_80031D2C(enum_t id, int slot);
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);
void Player_8003219C(int slot);
bool Player_8003221C(int slot);
s32 Player_GetPlayerState(s32 slot);
CharacterKind Player_GetPlayerCharacter(int slot);
void Player_SetPlayerCharacter(s32 slot, s32 value);
enum_t Player_GetPlayerSlotType(s32 slot);
enum_t Player_8003248C(s32 slot, bool arg1);
void Player_SetSlottype(s32 slot, enum_t value);
s8 Player_800325C8(s32 slot, 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, s8 costume_id);
u8 Player_GetControllerIndex(int slot);
void Player_SetControllerIndex(int slot, s8 controller_index);
s8 Player_GetTeam(int slot);
void Player_SetTeam(int slot, s8 unk_color);
s8 Player_GetPlayerId(int slot);
void Player_SetPlayerId(int slot, s8 player_id);
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);
s16 Player_GetOtherStamina(s32 slot);
u32 Player_GetRemainingHP(s32 slot);
u8 Player_GetMoreFlagsBit2(s32 slot);
void Player_SetMoreFlagsBit2(s32 slot, u8 bit2);
s32 Player_GetMoreFlagsBit3(s32 slot);
void Player_SetMoreFlagsBit3(s32 slot, u8 bit3);
void Player_SetMoreFlagsBit4(s32 slot, u8 bit4);
s32 Player_GetMoreFlagsBit4(s32 slot);
int Player_GetMoreFlagsBit5(s32 slot);
void Player_SetMoreFlagsBit5(s32 slot, u8 bit5);
u8 Player_GetMoreFlagsBit6(s32 slot);
void Player_SetMoreFlagsBit6(s32 slot, u8 bit6);
u8 Player_GetFlagsAEBit0(s32 slot);
u32 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);
uint Player_GetMatchFrameCount(int slot);
void Player_UpdateMatchFrameCount(int slot, bool condition);
uint Player_GetSuicideCount(int slot);
void Player_SetSuicideCount(s32 slot, u32 suicide_count);
void Player_IncSuicideCount(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);
void Player_SetFlagsBit5(s32 slot, u8 bit5);
u8 Player_GetFlagsBit6(s32 slot);
void Player_SetFlagsBit6(s32 slot, u8 bit6);
u8 Player_GetFlagsBit7(s32 slot);
void Player_SetFlagsBit7(s32 slot, u8 bit7);
u8 Player_GetMoreFlagsBit0(s32 slot);
u8 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);
u8 Player_GetUnk4C(s32 slot);
void Player_SetUnk4C(s32 slot, u8 unk4C);
void Player_80036058(s32 slot);
void Player_800360D8(s32 slot);
void Player_SetStructFunc(s32 slot, void* arg_func);
pl_800386D8_t* Player_GetTotalAttackCountPtr(int slot);
StaleMoveTable* Player_GetStaleMoveTableIndexPtr(s32 slot);
int* Player_GetUnk6A8Ptr(int slot);
StaleMoveTable* Player_GetStaleMoveTableIndexPtr2(s32 slot);
s32 Player_80036394(s32 slot);
s32 Player_80036428(s32 slot);
void Player_SetUnk45(s32 slot, s8 unk45);
u8 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);
void Player_800368F8(s32 slot);
void Player_80036978(s32 slot, s32 arg1);
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);
s32 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 void* pl_804D6470;
#define GALE01_0386D8
/* 0386D8 */ M2C_UNK pl_800386D8(pl_800386D8_t*, ssize_t);
/* 0386E8 */ int pl_800386E8(pl_800386E8_arg0_t*);
/* 038700 */ M2C_UNK fn_80038700();
/* 038788 */ M2C_UNK pl_80038788();
/* 038824 */ M2C_UNK pl_80038824();
/* 038898 */ M2C_UNK pl_80038898();
/* 038914 */ M2C_UNK pl_80038914();
/* 03891C */ void pl_8003891C(int slot);
/* 038F10 */ void pl_80038F10(int slot);
/* 038FB8 */ M2C_UNK fn_80038FB8();
/* 03906C */ M2C_UNK pl_8003906C();
/* 039238 */ M2C_UNK pl_80039238();
/* 039418 */ unsigned int pl_80039418(int, int);
/* 039450 */ void pl_80039450(int);
/* 039618 */ M2C_UNK fn_80039618();
/* 03B044 */ M2C_UNK fn_8003B044();
/* 03B9A4 */ M2C_UNK fn_8003B9A4();
/* 03BD60 */ M2C_UNK fn_8003BD60();
/* 03C340 */ M2C_UNK fn_8003C340();
/* 03CC84 */ M2C_UNK fn_8003CC84();
/* 03D2EC */ M2C_UNK fn_8003D2EC();
#define GALE01_03D514
/* 03D644 */ void pl_8003D644(int, int, int, int);
/* 03DF44 */ void pl_8003DF44(int, int);
/* 03E70C */ void pl_8003E70C(Item_GObj*);
/* 03EA74 */ void pl_8003EA74(int, int);
/* 03EC30 */ void pl_8003EC30(u8, int, int, float);
/* 03FDF4 */ void pl_8003FDF4(u8, int);
/* 0402D0 */ void pl_800402D0(int slot, bool, bool);
/* 0403C0 */ void pl_800403C0(u8, int);
/* 04049C */ void pl_8004049C(s32, ItemKind);
/* 04065C */ void pl_8004065C(int, int);
#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);
/* 037DF4 */ void pl_80037DF4(HSD_GObj*, union Struct2070*);
/* 0384DC */ void pl_800384DC(HSD_GObj*, u8, void*);
#define MELEE_TY_FORWARD_H
typedef struct Toy Toy;
#define MELEE_TY_INLINES_H
#define GET_TOY(gobj) ((Toy*) HSD_GObjGetUserData((HSD_GObj*) gobj))
#define GALE01_305058
/* 305058 */ M2C_UNK un_80305058();
/* 3053C4 */ M2C_UNK un_803053C4();
/* 30562C */ void Trophy_SetUnlockState(enum_t, bool);
/* 305918 */ void un_80305918(s32, s32, s32);
/* 305B88 */ M2C_UNK un_80305B88();
/* 305C44 */ M2C_UNK un_80305C44();
/* 305D00 */ M2C_UNK un_80305D00();
/* 305DB0 */ M2C_UNK un_80305DB0();
/* 305EB4 */ M2C_UNK un_80305EB4();
/* 305FB8 */ M2C_UNK un_80305FB8();
/* 3060BC */ M2C_UNK un_803060BC();
/* 3062BC */ M2C_UNK un_803062BC();
/* 3062EC */ M2C_UNK un_803062EC();
/* 3063D4 */ M2C_UNK un_803063D4();
/* 3064B8 */ M2C_UNK un_803064B8();
/* 30663C */ M2C_UNK un_8030663C();
/* 3067BC */ M2C_UNK un_803067BC();
/* 3068E0 */ M2C_UNK un_803068E0();
/* 306930 */ M2C_UNK un_80306930();
/* 306954 */ M2C_UNK un_80306954();
/* 306A0C */ M2C_UNK un_80306A0C();
/* 306A48 */ M2C_UNK un_80306A48();
/* 306B18 */ M2C_UNK un_80306B18();
/* 306BB8 */ M2C_UNK un_80306BB8();
/* 306C5C */ M2C_UNK un_80306C5C();
/* 306CF4 */ void Toy_RemoveUserData(void*);
/* 306D14 */ M2C_UNK un_80306D14();
/* 306D70 */ M2C_UNK un_80306D70();
/* 306EEC */ M2C_UNK un_80306EEC();
/* 307018 */ M2C_UNK un_80307018();
/* 30715C */ M2C_UNK un_8030715C();
/* 307470 */ M2C_UNK un_80307470();
/* 3075E8 */ M2C_UNK un_803075E8();
/* 307828 */ M2C_UNK un_80307828();
/* 3078E4 */ M2C_UNK un_803078E4();
/* 307BA0 */ M2C_UNK un_80307BA0();
/* 307E84 */ M2C_UNK fn_80307E84();
/* 307F64 */ M2C_UNK un_80307F64();
/* 30813C */ M2C_UNK un_8030813C();
/* 308250 */ M2C_UNK un_80308250();
/* 3082F8 */ M2C_UNK un_803082F8();
/* 308328 */ M2C_UNK un_80308328();
/* 308354 */ M2C_UNK un_80308354();
/* 3083D8 */ M2C_UNK un_803083D8();
/* 3084A0 */ M2C_UNK un_803084A0();
/* 3087F4 */ M2C_UNK un_803087F4();
/* 308DC8 */ M2C_UNK un_80308DC8();
/* 308F04 */ M2C_UNK un_80308F04();
/* 309338 */ M2C_UNK un_80309338();
/* 309404 */ M2C_UNK fn_80309404();
/* 30B530 */ M2C_UNK fn_8030B530();
/* 30E110 */ M2C_UNK fn_8030E110();
/* 30FA50 */ M2C_UNK un_8030FA50();
/* 30FE48 */ M2C_UNK un_8030FE48();
/* 3102C4 */ void un_803102C4(s8 arg0);
/* 3102D0 */ M2C_UNK un_803102D0();
/* 310324 */ M2C_UNK un_80310324();
/* 310660 */ M2C_UNK un_80310660();
/* 3109A0 */ M2C_UNK un_803109A0();
/* 310B48 */ M2C_UNK un_80310B48();
/* 3114E8 */ M2C_UNK un_803114E8();
/* 311680 */ M2C_UNK un_80311680();
/* 311788 */ M2C_UNK un_80311788();
/* 311960 */ M2C_UNK un_80311960();
/* 311AB0 */ M2C_UNK un_80311AB0();
/* 311F5C */ M2C_UNK un_80311F5C();
/* 312018 */ M2C_UNK un_80312018();
/* 312050 */ M2C_UNK un_80312050();
/* 3122D0 */ M2C_UNK un_803122D0();
/* 31234C */ void un_8031234C(s32);
#define __TYDISPLAY_H
s32 un_8031C354(s32, s32 (*)[], s32, s32);
void* un_8031C5E4(s32);
#define GALE01_314AA8
/* 314AA8 */ M2C_UNK un_80314AA8();
/* 314B54 */ M2C_UNK un_80314B54();
/* 314BE4 */ M2C_UNK fn_80314BE4();
/* 314C5C */ void un_80314C5C(HSD_GObj* gobj);
/* 3152BC */ M2C_UNK fn_803152BC();
/* 3153EC */ M2C_UNK un_803153EC();
/* 315574 */ M2C_UNK fn_80315574();
/* 3155C8 */ M2C_UNK fn_803155C8();
/* 315C44 */ M2C_UNK fn_80315C44();
/* 316170 */ M2C_UNK fn_80316170();
/* 31638C */ M2C_UNK fn_8031638C();
/* 316420 */ M2C_UNK un_80316420();
/* 3168DC */ M2C_UNK fn_803168DC();
/* 316BF8 */ M2C_UNK fn_80316BF8();
/* 316C24 */ M2C_UNK fn_80316C24();
/* 31753C */ M2C_UNK un_8031753C();
/* 317A60 */ M2C_UNK un_80317A60();
/* 317D80 */ M2C_UNK un_80317D80();
/* 3181BC */ M2C_UNK un_803181BC();
#define MELEE_TY_TYPES_H
struct Toy {
/* +0 */ char pad_0[0x8];
/* +8 */ int x8;
/* +C */ char pad_C[0x40 - 0xC];
/* +40 */ Vec3 translate;
/* +4C */ Vec3 offset;
};
struct { int x[1 - 2 * !(sizeof(struct Toy) == 0x58)]; };;
#define MELEE_UN_TYPES_H
#define DEVTEXT_FLAG_HIDETEXT (0x80)
#define DEVTEXT_FLAG_HIDEBACKGROUND (0x40)
#define DEVTEXT_FLAG_NOWRAP (0x20)
#define DEVTEXT_FLAG_SHOWCURSOR (0x10)
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 */ char* buf;
/* +2C */ struct DevText* prev;
/* +30 */ struct DevText* next;
};
struct un_80302DF8_t {
/* +0 */ char pad_0[0xC];
/* +C */ int xC;
};
struct un_80304334_t {
/* +0 */ char pad_0[1];
/* +1 */ u8 x1;
};
struct un_804D6EF4_t {
/* +0 */ char pad_0[0x18];
/* +14 */ HSD_JObj* x14;
/* +18 */ HSD_JObj* x18;
/* +1C */ char pad_1C[0x54 - 0x20];
/* +54 */ short x54;
/* +56 */ short x56;
};
#define GALE01_2FC9B4
#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;
}
/* 2FC9B4 */ float un_802FC9B4(int idx, s8 team, int, int);
/* 2FCAC4 */ M2C_UNK fn_802FCAC4();
/* 2FCBA0 */ M2C_UNK un_802FCBA0();
/* 2FCC44 */ void fn_802FCC44(HSD_GObj* gobj);
/* 2FCF38 */ void un_802FCF38(int idx);
/* 2FD28C */ M2C_UNK un_802FD28C();
/* 2FD404 */ M2C_UNK un_802FD404();
/* 2FD428 */ M2C_UNK un_802FD428();
/* 2FD450 */ M2C_UNK un_802FD450();
/* 2FD45C */ M2C_UNK un_802FD45C();
/* 2FD468 */ M2C_UNK un_802FD468();
/* 2FD4C8 */ M2C_UNK un_802FD4C8();
/* 2FD604 */ M2C_UNK un_802FD604();
/* 2FD65C */ M2C_UNK un_802FD65C();
/* 2FD668 */ M2C_UNK un_802FD668();
/* 2FD674 */ M2C_UNK un_802FD674();
/* 2FD680 */ M2C_UNK fn_802FD680();
/* 2FD6CC */ M2C_UNK fn_802FD6CC();
/* 2FD704 */ M2C_UNK un_802FD704();
/* 2FD708 */ M2C_UNK un_802FD708();
/* 2FD8A0 */ M2C_UNK un_802FD8A0();
/* 2FD8C4 */ M2C_UNK un_802FD8C4();
/* 2FD8E8 */ M2C_UNK un_802FD8E8();
/* 2FD90C */ M2C_UNK un_802FD90C();
/* 2FD910 */ M2C_UNK un_802FD910();
/* 2FD91C */ M2C_UNK un_802FD91C();
/* 2FD928 */ M2C_UNK un_802FD928();
/* 2FD9D8 */ M2C_UNK un_802FD9D8();
/* 2FDA4C */ M2C_UNK fn_802FDA4C();
/* 2FDA78 */ M2C_UNK fn_802FDA78();
/* 2FE260 */ M2C_UNK un_802FE260();
/* 2FE390 */ M2C_UNK un_802FE390();
/* 2FE3F8 */ M2C_UNK un_802FE3F8();
/* 2FE470 */ M2C_UNK fn_802FE470();
/* 2FE6A8 */ M2C_UNK un_802FE6A8();
/* 2FE8CC */ M2C_UNK un_802FE8CC();
/* 2FE918 */ M2C_UNK un_802FE918();
/* 2FEBE0 */ M2C_UNK un_802FEBE0();
/* 2FED10 */ M2C_UNK un_802FED10();
/* 2FED14 */ M2C_UNK fn_802FED14();
/* 2FEFAC */ M2C_UNK un_802FEFAC();
/* 2FF128 */ M2C_UNK un_802FF128();
/* 2FF190 */ M2C_UNK un_802FF190();
/* 2FF1B4 */ M2C_UNK un_802FF1B4();
/* 2FF218 */ M2C_UNK fn_802FF218();
/* 2FF360 */ M2C_UNK fn_802FF360();
/* 2FF364 */ void un_802FF364(void);
/* 2FF498 */ M2C_UNK un_802FF498();
/* 2FF4FC */ M2C_UNK un_802FF4FC();
/* 2FF570 */ M2C_UNK un_802FF570();
/* 2FF620 */ M2C_UNK un_802FF620();
/* 2FF6A0 */ M2C_UNK un_802FF6A0();
/* 2FF710 */ M2C_UNK un_802FF710();
/* 2FF78C */ M2C_UNK un_802FF78C();
/* 2FF7DC */ M2C_UNK un_802FF7DC();
/* 2FF884 */ bool un_802FF884(void);
/* 2FF88C */ M2C_UNK un_802FF88C();
/* 2FF934 */ M2C_UNK un_802FF934();
/* 2FF958 */ M2C_UNK un_802FF958();
/* 2FF99C */ M2C_UNK un_802FF99C();
/* 2FF9DC */ M2C_UNK un_802FF9DC();
/* 2FFB58 */ M2C_UNK un_802FFB58();
/* 2FFBAC */ M2C_UNK un_802FFBAC();
/* 2FFC30 */ M2C_UNK un_802FFC30();
/* 2FFC6C */ M2C_UNK un_802FFC6C();
/* 2FFCC8 */ bool fn_802FFCC8(void);
/* 2FFCD0 */ M2C_UNK un_802FFCD0();
/* 2FFD94 */ M2C_UNK un_802FFD94();
/* 2FFE0C */ M2C_UNK fn_802FFE0C();
/* 2FFE6C */ M2C_UNK fn_802FFE6C();
/* 2FFEA4 */ M2C_UNK un_802FFEA4();
/* 2FFEE0 */ M2C_UNK un_802FFEE0();
/* 2FFF2C */ M2C_UNK un_802FFF2C();
/* 3001DC */ M2C_UNK un_803001DC();
/* 300218 */ M2C_UNK un_80300218();
/* 300248 */ M2C_UNK un_80300248();
/* 300290 */ M2C_UNK un_80300290();
/* 3002FC */ M2C_UNK un_803002FC();
/* 300338 */ M2C_UNK un_80300338();
/* 300378 */ M2C_UNK un_80300378();
/* 3003C4 */ M2C_UNK un_803003C4();
/* 300410 */ M2C_UNK un_80300410();
/* 300480 */ M2C_UNK un_80300480();
/* 3004B4 */ M2C_UNK un_803004B4();
/* 3004E8 */ M2C_UNK un_803004E8();
/* 30051C */ M2C_UNK un_8030051C();
/* 300550 */ M2C_UNK un_80300550();
/* 300584 */ M2C_UNK un_80300584();
/* 3005B8 */ M2C_UNK un_803005B8();
/* 3005EC */ M2C_UNK un_803005EC();
/* 300620 */ M2C_UNK un_80300620();
/* 300654 */ M2C_UNK un_80300654();
/* 300688 */ M2C_UNK un_80300688();
/* 3006BC */ M2C_UNK un_803006BC();
/* 3006F0 */ M2C_UNK un_803006F0();
/* 300724 */ M2C_UNK un_80300724();
/* 300758 */ M2C_UNK un_80300758();
/* 300790 */ M2C_UNK un_80300790();
/* 3007C8 */ M2C_UNK un_803007C8();
/* 3007FC */ M2C_UNK un_803007FC();
/* 300830 */ M2C_UNK un_80300830();
/* 300864 */ M2C_UNK un_80300864();
/* 300898 */ M2C_UNK un_80300898();
/* 3008CC */ M2C_UNK un_803008CC();
/* 300900 */ M2C_UNK un_80300900();
/* 300934 */ M2C_UNK un_80300934();
/* 300968 */ M2C_UNK un_80300968();
/* 3009A4 */ M2C_UNK un_803009A4();
/* 3009E0 */ M2C_UNK un_803009E0();
/* 300A88 */ M2C_UNK un_80300A88();
/* 300AB8 */ M2C_UNK un_80300AB8();
/* 300AF4 */ M2C_UNK un_80300AF4();
/* 300B58 */ M2C_UNK un_80300B58();
/* 300BBC */ M2C_UNK un_80300BBC();
/* 300BF8 */ M2C_UNK un_80300BF8();
/* 300C3C */ M2C_UNK un_80300C3C();
/* 300C80 */ M2C_UNK un_80300C80();
/* 300CC8 */ M2C_UNK fn_80300CC8();
/* 300D78 */ M2C_UNK un_80300D78();
/* 300DE0 */ M2C_UNK fn_80300DE0();
/* 300E74 */ M2C_UNK un_80300E74();
/* 300ED0 */ M2C_UNK fn_80300ED0();
/* 300F3C */ M2C_UNK un_80300F3C();
/* 300F98 */ M2C_UNK un_80300F98();
/* 300FEC */ M2C_UNK un_80300FEC();
/* 301028 */ M2C_UNK un_80301028();
/* 301074 */ M2C_UNK un_80301074();
/* 3010C0 */ M2C_UNK un_803010C0();
/* 30110C */ M2C_UNK fn_8030110C();
/* 3011EC */ M2C_UNK fn_803011EC();
/* 301280 */ M2C_UNK un_80301280();
/* 3012D4 */ M2C_UNK un_803012D4();
/* 301328 */ M2C_UNK un_80301328();
/* 30136C */ M2C_UNK un_8030136C();
/* 3013B0 */ M2C_UNK un_803013B0();
/* 3013EC */ M2C_UNK un_803013EC();
/* 301420 */ M2C_UNK un_80301420();
/* 301454 */ M2C_UNK un_80301454();
/* 301490 */ M2C_UNK un_80301490();
/* 3014CC */ M2C_UNK un_803014CC();
/* 301508 */ M2C_UNK un_80301508();
/* 301544 */ M2C_UNK un_80301544();
/* 301580 */ M2C_UNK un_80301580();
/* 3015BC */ M2C_UNK un_803015BC();
/* 3015F8 */ M2C_UNK un_803015F8();
/* 301634 */ M2C_UNK un_80301634();
/* 3016D8 */ M2C_UNK un_803016D8();
/* 301734 */ M2C_UNK un_80301734();
/* 30178C */ M2C_UNK un_8030178C();
/* 301800 */ M2C_UNK un_80301800();
/* 301840 */ M2C_UNK un_80301840();
/* 3018BC */ M2C_UNK un_803018BC();
/* 30191C */ M2C_UNK un_8030191C();
/* 301964 */ M2C_UNK un_80301964();
/* 301A64 */ M2C_UNK un_80301A64();
/* 301AD4 */ M2C_UNK un_80301AD4();
/* 301B48 */ M2C_UNK un_80301B48();
/* 301BA8 */ M2C_UNK un_80301BA8();
/* 301C64 */ M2C_UNK un_80301C64();
/* 301C80 */ M2C_UNK un_80301C80();
/* 301CE0 */ M2C_UNK un_80301CE0();
/* 301D40 */ M2C_UNK un_80301D40();
/* 301D7C */ M2C_UNK un_80301D7C();
/* 301DCC */ M2C_UNK un_80301DCC();
/* 301E08 */ M2C_UNK un_80301E08();
/* 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, int 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);
/* 302834 */ DevText* DevText_Create(int, int, int, int, int, char*);
/* 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 */ M2C_UNK un_80302DF0(void);
/* 302DF8 */ void un_80302DF8(un_80302DF8_t* arg0, int arg1);
/* 302E00 */ M2C_UNK un_80302E00();
/* 302EA4 */ M2C_UNK un_80302EA4();
/* 302FFC */ M2C_UNK un_80302FFC();
/* 303444 */ M2C_UNK un_80303444();
/* 303720 */ M2C_UNK un_80303720();
/* 3039A4 */ M2C_UNK un_803039A4();
/* 303AC4 */ M2C_UNK un_80303AC4();
/* 303EF4 */ M2C_UNK fn_80303EF4();
/* 303FD4 */ M2C_UNK un_80303FD4();
/* 304138 */ M2C_UNK un_80304138();
/* 304168 */ M2C_UNK un_80304168();
/* 304210 */ M2C_UNK un_80304210();
/* 304334 */ void un_80304334(un_80304334_t* arg0);
/* 304344 */ M2C_UNK un_80304344();
/* 304470 */ M2C_UNK un_80304470();
/* 304510 */ M2C_UNK un_80304510();
/* 3045A0 */ M2C_UNK un_803045A0();
/* 304690 */ M2C_UNK un_80304690();
/* 304780 */ M2C_UNK un_80304780();
/* 304870 */ M2C_UNK un_80304870();
/* 3048C0 */ bool un_803048C0(s32);
/* 304924 */ M2C_UNK un_80304924();
/* 304988 */ M2C_UNK un_80304988();
/* 3049F4 */ M2C_UNK un_803049F4();
/* 304A58 */ void un_80304A58(s32);
/* 304B0C */ M2C_UNK un_80304B0C();
/* 304B94 */ M2C_UNK un_80304B94();
/* 304CC8 */ M2C_UNK un_80304CC8();
/* 304D30 */ M2C_UNK un_80304D30();
/* 3124BC */ M2C_UNK un_803124BC();
/* 31C2CC */ M2C_UNK un_8031C2CC();
/* 31C2EC */ int un_8031C2EC(void);
/* 31C454 */ M2C_UNK un_8031C454();
/* 322258 */ bool un_80322258(f32 x);
/* 3222EC */ float un_803222EC(float mag, float angle);
/* 322314 */ void un_80322314(void);
/* 32233C */ void un_8032233C(int, int);
/* 3224DC */ bool un_803224DC(s32 spawn_id, f32 pos_x, f32 kb_mag);
/* 322598 */ void un_80322598(int, float);
/* 4D6E6C */ extern void* un_804D6E6C;
/* 4D6EF4 */ extern struct un_804D6EF4_t* un_804D6EF4;
#define __GALE01_2FC9B4
struct un_80304138_objalloc_t {
char pad_0[0x20];
};
struct { int x[1 - 2 * !(sizeof(struct un_80304138_objalloc_t) == 0x20)]; };;
/* 2FCAA4 */ static void fn_802FCAA4(HSD_GObj* gobj, int code);
/* 3FDC48 */ static HSD_CObjDesc devtext_CObjDesc;
/* 4A1ED0 */ static StaticModelDesc un_804A1ED0;
/* 4A1FD8 */ static DevText devtext_pool[32];
/* 4A2688 */ static HSD_ObjAllocData un_804A2688;
/* 4D6D6C */ static s8 un_804D6D6C;
/* 4D6D78 */ static HSD_Text* un_804D6D78;
/* 4D6D88 */ static s32 un_804D6D88;
/* 4D6D8C */ static s32 un_804D6D8C;
/* 4D6D90 */ static IntVec2 un_804D6D90;
/* 4D6E18 */ static DevText* devtext_drawlist;
/* 4D6E1C */ static HSD_GObj* devtext_gobj;
/* 4D6E20 */ static HSD_CObj* devtext_cobj;
/* 4D6E24 */ static int devtext_setup_classifier;
/* 4D6E28 */ static int devtext_setup_p_link;
/* 4D6E2C */ static int devtext_setup_priority;
/* 4D6E30 */ static int devtext_setup_gx_link;
/* 4D6E34 */ static int devtext_setup_render_priority;
/* 4D6E38 */ static DevText* devtext_poolhead;
/* 4D6E44 */ static M2C_UNK un_804D6E44;
#define MELEE_VI_FORWARD_H
/// @todo When accessing, neither struct with s8 fields, nor s8 array,
/// seem to match. Also tried volatile struct and volatile fields.
/// Size is 0xC.
typedef M2C_UNK un_804D7004_t;
#define MELEE_VI_TYPES_H
struct un_804D7004_t {
char pad_0[0xC];
}; /* size = 0xC */
struct { int x[1 - 2 * !(sizeof(struct un_804D7004_t) == 0xC)]; };;
#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);
inline void vi_RunCamera(HSD_GObj* gobj, u8 erase_colors[4], u64 prio)
{
if (HSD_CObjSetCurrent(((HSD_CObj*) HSD_GObjGetHSDObj(gobj)))) {
HSD_SetEraseColor(erase_colors[0], erase_colors[1], erase_colors[2],
erase_colors[3]);
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
typedef struct un_804D6F60_t {
/* 0x0 */ s8 unk_0; /* inferred */
/* 0x1 */ s8 unk_1; /* inferred */
/* 0x2 */ s8 unk_2; /* inferred */
/* 0x3 */ s8 unk_3; /* inferred */
/* 0x4 */ char pad_2[4];
} un_804D6F60_t; /* size = 0x8 */
struct { int x[1 - 2 * !(sizeof(un_804D6F60_t) == 0x8)]; };;
/* 31CB00 */ void vi0102_8031CB00(s8, s8);
/* 31CC68 */ void vi0102_JObjCallback(HSD_GObj*);
/* 31CC8C */ void vi0102_CameraCallback(HSD_GObj*, int);
/* 31CD20 */ void vi0102_8031CD20(HSD_GObj*);
/* 31CD94 */ void vi0102_Initialize(un_804D6F60_t*);
/* 31D000 */ void vi0102_8031D000(void);
/* 31D020 */ void vi0102_8031D020(s8, s8);
#define GALE01_31D6E4
/* 31D6E4 */ void un_8031D6E4(HSD_GObj*);
/* 31D708 */ M2C_UNK un_8031D708();
/* 31D80C */ void vi_8031D80C(HSD_GObj* gobj);
/* 31D858 */ M2C_UNK un_8031D858();
/* 31D9C4 */ void vi_8031D9C4(void);
/* 31D9E4 */ void un_8031D9E4(s8 arg0, s8 arg1, s8 arg2);
/* 4D6F84 */ extern un_804D7004_t un_804D6F84;
#define GALE01_31D9F8
/* 31D9F8 */ M2C_UNK un_8031D9F8();
/* 31DC80 */ void vi_8031DC80(HSD_GObj*, int);
/* 31DD14 */ M2C_UNK fn_8031DD14();
/* 31DE58 */ M2C_UNK un_8031DE58();
/* 31E0F0 */ void vi_8031E0F0(void);
/* 31E110 */ void un_8031E110(s8 arg0, s8 arg1, s8 arg2);
/* 4D7004 */ extern un_804D7004_t un_804D6FA8;
#define _VI0502_H_
void vi0502_8031E124(CharacterKind, s8, s8);
void vi0502_8031E304(HSD_GObj*);
void vi0502_8031E328(HSD_GObj*);
void vi0502_RunFrame(HSD_GObj*);
#define GALE01_31E6CC
/* 31E6CC */ void vi_8031E6CC(void);
/* 31E6EC */ void vi_8031E6EC(HSD_GObj*);
void vi0601_RunFrame(HSD_GObj*);
void vi_8031ED50(void);
#define GALE01_31F294
/* 31F294 */ M2C_UNK un_8031F294();
/* 31F548 */ M2C_UNK fn_8031F548();
/* 31F56C */ M2C_UNK fn_8031F56C();
/* 31F600 */ M2C_UNK fn_8031F600();
/* 31F714 */ M2C_UNK un_8031F714();
/* 31F960 */ M2C_UNK un_8031F960();
/* 31F980 */ void un_8031F980(s8 arg0, s8 arg1);
#define __GALE01_31F294
/* 4D7004 */ static un_804D7004_t un_804D7004;
#define GALE01_31F990
/* 31F990 */ void un_8031F990(HSD_GObj*);
/* 31F9B4 */ void un_8031F9B4(HSD_GObj*);
/* 31F9D8 */ M2C_UNK un_8031F9D8();
/* 31FAA8 */ M2C_UNK fn_8031FAA8();
/* 31FB90 */ M2C_UNK fn_8031FB90();
/* 31FC30 */ M2C_UNK fn_8031FC30();
/* 31FCBC */ M2C_UNK fn_8031FCBC();
/* 31FD18 */ M2C_UNK un_8031FD18();
/* 320490 */ M2C_UNK un_80320490();
/* 3204B0 */ void un_803204B0(s8 arg0, s8 arg1);
#define __GALE01_31F990
/* 4D7038 */ static un_804D7004_t un_804D7038;
#define GALE01_3204C0
/* 3204C0 */ void un_803204C0(HSD_GObj*);
/* 3204E4 */ void un_803204E4(HSD_GObj*);
#define GALE01_32110C
/* 32110C */ void un_8032110C(HSD_GObj*);
/* 321130 */ void un_80321130(HSD_GObj*);
/* 321154 */ void un_80321154(HSD_GObj*);
#define _METROTRK_H
#define _AXDRIVER_H_
#define SMSTATE_MASK 0xC0000000
#define SMSTATE_ACTIVE 0x40000000
#define SMSTATE_SLEEP 0x80000000
struct HSD_SM {
HSD_SM* prev;
HSD_SM* next;
u32 flags;
int vid;
int pid;
int fid;
u8 track;
u8 pri;
u8 pri0[2];
u8 volumeType[2];
s16 volume[2];
u16 fadetime;
u8 pan[2];
s16 round;
u8 dp12flag;
u8 itdflag;
u8 span[2];
u8 maxfid;
s16 pitch[2];
u8 mix[2];
u8 mixscale[2];
u8 filter;
u8 group;
u16 loopcount;
u32* curScore;
long clock;
};
u8* AXDriverAlloc(s32 size);
void AXDriverFree(void* ptr);
void AXDriverUnlink(HSD_SM* v, HSD_SM** head);
void AXDriverKeyOff(int v);
void HSD_AudioSFXKeyOffAll(void);
void HSD_AudioSFXKeyOffTrack(int track);
s32 AXDriver_8038D4E4(int, s16);
#define ___AXDRIVER_H_
/* 408140 */ extern char AXDriver_80408140[];
/* 40814C */ extern char AXDriver_8040814C[];
/* 408168 */ extern char AXDriver_80408168[];
/* 4D77D4 */ extern u8* AXDriver_804D77D4;
/* 4D77D8 */ extern u32 axfxallocsize;
/* 4D77DC */ extern u32 axfxmaxsize;
/* 4D77EC */ static s32 AXDriver_804D77EC;
#define SYSDOLPHIN_BASELIB_DEVCOM_H
typedef struct HSD_DevCom HSD_DevCom;
struct HSD_DevCom {
HSD_DevCom* next;
int dcReq;
int file;
u32 src;
u32 dest;
u32 size;
u16 type;
u16 cancelflag;
HSD_DevComCallback callback;
void* args;
};
s32 HSD_DevComIsBusy(s32 idx);
void HSD_DevComUnlink(HSD_DevCom* dc, int link, HSD_DevCom* adc);
void HSD_DevComRequest(int file, unsigned long src, unsigned long dest,
unsigned long size, int type, int pri,
HSD_DevComCallback callback, void* args);
#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**);
HSD_HashClassInfo* HSD_HashSearch(HSD_Hash*, void*, int*);
#define GALE01_3A949C
typedef struct {
u8 x0[0x80 * 0x24];
} __baselib_UnkType002;
typedef struct {
u8 x0[0x300];
} __baselib_UnkType003;
/* 4D0B50 */ extern u8 hsd_804D0B50[0x104];
/* 4D0C54 */ extern u8 hsd_804D0C54[0x104];
/* 4D1138 */ extern u8 hsd_804D1138[0x10];
/* 4D1148 */ extern u32 hsd_804D1148[0x80][0x9];
/* 4D2348 */ extern __baselib_UnkType003 hsd_804D2348;
/* 4D2648 */ extern __jmp_buf hsd_804D2648;
/* 4D2E70 */ extern u8 hsd_804D2E70[2084];
/* 4D79A0 */ extern M2C_UNK hsd_804D79A0;
/* 4D79A4 */ extern M2C_UNK hsd_804D79A4;
/* 4D79A8 */ extern M2C_UNK hsd_804D79A8;
#define GALE01_3AA790
struct hsd_803AC3E0_arg0_t {
/* +0 */ char pad_0[0x28];
/* +28 */ int x28[9];
/* +4C */ int x4C[9];
/* +70 */ int x70[9];
};
/* 3AA790 */ M2C_UNK fn_803AA790();
/* 3AAA48 */ M2C_UNK hsd_803AAA48();
/* 3AC168 */ M2C_UNK fn_803AC168();
/* 3AC258 */ M2C_UNK fn_803AC258();
/* 3AC2A4 */ M2C_UNK fn_803AC2A4();
/* 3AC2D4 */ M2C_UNK fn_803AC2D4();
/* 3AC2E0 */ M2C_UNK fn_803AC2E0();
/* 3AC334 */ M2C_UNK fn_803AC334();
/* 3AC340 */ M2C_UNK hsd_803AC340();
/* 3AC3E0 */ void hsd_803AC3E0(struct hsd_803AC3E0_arg0_t* arg0, int arg1,
int arg2, int arg3, int arg4);
/* 3AC3F8 */ M2C_UNK fn_803AC3F8();
/* 3AC558 */ M2C_UNK hsd_803AC558();
/* 3AC634 */ M2C_UNK fn_803AC634();
/* 3AC6B8 */ M2C_UNK fn_803AC6B8();
/* 3AC7DC */ M2C_UNK fn_803AC7DC();
/* 3ACB74 */ M2C_UNK fn_803ACB74();
/* 3ACBE8 */ M2C_UNK fn_803ACBE8();
/* 3ACC0C */ M2C_UNK fn_803ACC0C();
/* 3ACD58 */ M2C_UNK fn_803ACD58();
/* 3ACF30 */ M2C_UNK fn_803ACF30();
/* 3ACFC0 */ M2C_UNK fn_803ACFC0();
/* 3AD16C */ M2C_UNK fn_803AD16C();
/* 3ADE4C */ M2C_UNK fn_803ADE4C();
/* 3ADF90 */ M2C_UNK fn_803ADF90();
/* 3AE7F8 */ M2C_UNK fn_803AE7F8();
/* 3AF3F0 */ M2C_UNK fn_803AF3F0();
/* 3B0120 */ M2C_UNK fn_803B0120();
/* 3B0E9C */ M2C_UNK fn_803B0E9C();
/* 3B1338 */ M2C_UNK fn_803B1338();
/* 3B1F78 */ M2C_UNK fn_803B1F78();
/* 3B21E8 */ M2C_UNK fn_803B21E8();
/* 3B2374 */ M2C_UNK hsd_803B2374();
/* 3B24E4 */ M2C_UNK hsd_803B24E4();
/* 3B2550 */ M2C_UNK hsd_803B2550();
/* 3B2674 */ M2C_UNK hsd_803B2674();
/* 3B26CC */ M2C_UNK fn_803B26CC();
#define SYSDOLPHIN_BASELIB_BASELIB_UNKNOWN_008_H
void hsd_803B3344(u8 byte);
void hsd_803B3398(void* src, size_t size);
#define GALE01_3B3408
int hsd_803B51C8(int, int, int, char*, int);
void hsd_803B5C2C(int);
int hsd_803B6BE4(char*, int, void*);
#define _id_h_
typedef struct _IDEntry {
struct _IDEntry* next;
u32 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, u32 id, void* data);
void HSD_IDRemoveByIDFromTable(HSD_IDTable* table, u32 id);
void* HSD_IDGetDataFromTable(HSD_IDTable* table, u32 id, s32* success);
void _HSD_IDForgetMemory(void* low, void* high);
static inline void* HSD_IDGetData(u32 id, s32* success)
{
return HSD_IDGetDataFromTable(((void*) 0), id, success);
}
#define _initialize_h_
#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);
static void HSD_DVDInit(void);
void** HSD_AllocateXFB(s32 nbuffer, GXRenderModeObj* rm);
GXFifoObj* HSD_AllocateFifo(u32 size);
static void HSD_GXInit(void);
static void HSD_OSInit(void);
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);
static void HSD_ObjInit(void);
void HSD_ObjDumpStat(void);
bool HSD_SetInitParameter(HSD_InitParam param, ...);
#define _leak_h_
#define GALE01_391580
/* 391580 */ void DrawRectangle(float x, float y, float w, float h,
GXColor* color);
/* 391664 */ void DrawASCII(int chr, float x, float y, GXColor* color);
/* 391A04 */ void hsd_80391A04(float scale_x, float scale_y, int line_width);
/* 391AC8 */ M2C_UNK hsd_80391AC8();
/* 391E18 */ M2C_UNK hsd_80391E18();
/* 391F28 */ M2C_UNK hsd_80391F28();
/* 392194 */ M2C_UNK hsd_80392194();
/* 3921B8 */ M2C_UNK hsd_803921B8();
/* 3922FC */ M2C_UNK hsd_803922FC();
/* 392474 */ M2C_UNK hsd_80392474();
/* 392480 */ M2C_UNK fn_80392480();
/* 392528 */ M2C_UNK hsd_80392528();
/* 39254C */ M2C_UNK hsd_8039254C();
/* 392934 */ M2C_UNK fn_80392934();
/* 392A08 */ M2C_UNK fn_80392A08();
/* 392A3C */ M2C_UNK fn_80392A3C();
/* 392CCC */ s32 fn_80392CCC(s32);
/* 392CD8 */ M2C_UNK fn_80392CD8();
/* 392E2C */ M2C_UNK fn_80392E2C();
/* 392E80 */ void hsd_80392E80(void);
/* 3931A4 */ bool hsd_803931A4(s32);
/* 3932D0 */ M2C_UNK fn_803932D0();
/* 393328 */ M2C_UNK hsd_80393328();
/* 393440 */ M2C_UNK hsd_80393440();
/* 393840 */ M2C_UNK hsd_80393840();
/* 393844 */ M2C_UNK hsd_80393844();
/* 393A04 */ bool hsd_80393A04(void);
/* 393A54 */ void hsd_80393A54(int);
/* 393A5C */ int hsd_80393A5C(char*, int, int);
/* 393C14 */ M2C_UNK fn_80393C14();
/* 393D2C */ M2C_UNK hsd_80393D2C();
/* 393DA0 */ void hsd_80393DA0(void*, int);
/* 393E34 */ M2C_UNK hsd_80393E34();
/* 393E68 */ M2C_UNK hsd_80393E68();
/* 393EF4 */ M2C_UNK hsd_80393EF4();
/* 394068 */ M2C_UNK hsd_80394068();
/* 394128 */ M2C_UNK hsd_80394128();
/* 3941E8 */ M2C_UNK hsd_803941E8();
/* 394314 */ M2C_UNK hsd_80394314();
/* 394434 */ M2C_UNK hsd_80394434();
/* 394544 */ M2C_UNK hsd_80394544();
/* 394668 */ M2C_UNK hsd_80394668();
/* 394950 */ M2C_UNK hsd_80394950();
/* 394A48 */ void Exception_ReportStackTrace(OSContext*, int);
/* 394B18 */ void Exception_ReportCodeline(u16, int, int, OSContext*);
/* 394DF4 */ M2C_UNK fn_80394DF4();
/* 394E8C */ M2C_UNK hsd_80394E8C();
/* 394F48 */ M2C_UNK hsd_80394F48();
/* 395550 */ M2C_UNK hsd_80395550();
/* 395644 */ M2C_UNK hsd_80395644();
/* 3956D8 */ M2C_UNK hsd_803956D8();
/* 3957C0 */ M2C_UNK hsd_803957C0();
/* 395970 */ M2C_UNK hsd_80395970();
/* 395A78 */ M2C_UNK hsd_80395A78();
/* 395D88 */ M2C_UNK hsd_80395D88();
/* 396130 */ M2C_UNK hsd_80396130();
/* 396188 */ M2C_UNK hsd_80396188();
/* 3962A8 */ M2C_UNK hsd_803962A8();
/* 3966A0 */ M2C_UNK hsd_803966A0();
/* 396868 */ M2C_UNK hsd_80396868();
/* 396884 */ M2C_UNK hsd_80396884();
/* 396A20 */ M2C_UNK hsd_80396A20();
/* 396C78 */ M2C_UNK hsd_80396C78();
/* 396E40 */ M2C_UNK hsd_80396E40();
/* 3970D8 */ M2C_UNK fn_803970D8();
/* 3970DC */ M2C_UNK fn_803970DC();
/* 3970E0 */ M2C_UNK fn_803970E0();
/* 3970E4 */ M2C_UNK fn_803970E4();
/* 3970E8 */ M2C_UNK fn_803970E8();
/* 3970EC */ M2C_UNK fn_803970EC();
/* 3970F0 */ M2C_UNK fn_803970F0();
/* 3970F4 */ M2C_UNK fn_803970F4();
/* 3970F8 */ M2C_UNK fn_803970F8();
/* 3970FC */ M2C_UNK fn_803970FC();
/* 397100 */ M2C_UNK fn_80397100();
/* 397104 */ M2C_UNK fn_80397104();
/* 397108 */ M2C_UNK fn_80397108();
/* 39710C */ M2C_UNK fn_8039710C();
/* 397110 */ M2C_UNK hsd_80397110();
/* 397374 */ M2C_UNK fn_80397374();
/* 397520 */ M2C_UNK hsd_80397520();
/* 3975D4 */ M2C_UNK hsd_803975D4();
/* 397814 */ M2C_UNK fn_80397814();
/* 397DA4 */ void hsd_80397DA4(OSContext*);
/* 397DF4 */ void Exception_StoreDebugLevel(int);
/* 397DFC */ void hsd_80397DFC(u32 arg0);
/* 397E0C */ M2C_UNK baselib_mfspr();
/* 3982E4 */ M2C_UNK fn_803982E4();
/* 398310 */ M2C_UNK hsd_80398310();
/* 3983A4 */ M2C_UNK hsd_803983A4();
/* 3984F4 */ void psInitDataBankLoad(int bank, int* cmdBank, int* texBank,
u32* ref, 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 */ M2C_UNK hsd_80398A08();
/* 398C04 */ M2C_UNK hsd_80398C04();
/* 398F0C */ M2C_UNK hsd_80398F0C();
/* 398F8C */ M2C_UNK hsd_80398F8C();
/* 3991D8 */ M2C_UNK hsd_803991D8();
/* 39930C */ M2C_UNK hsd_8039930C();
/* 39CEAC */ M2C_UNK hsd_8039CEAC();
/* 39CF4C */ M2C_UNK hsd_8039CF4C();
/* 39D048 */ M2C_UNK hsd_8039D048();
/* 39D0A0 */ M2C_UNK hsd_8039D0A0();
/* 39D1E4 */ void hsd_8039D1E4(M2C_UNK arg0, int arg1);
/* 39D1EC */ M2C_UNK hsd_8039D1EC();
/* 39D214 */ M2C_UNK hsd_8039D214();
/* 39D354 */ M2C_UNK hsd_8039D354();
/* 39D3AC */ M2C_UNK hsd_8039D3AC();
/* 39D4DC */ void hsd_8039D4DC(UnkGeneratorStruct*);
/* 39D580 */ M2C_UNK hsd_8039D580();
/* 39D5DC */ void hsd_8039D5DC(s32);
/* 39D688 */ M2C_UNK hsd_8039D688();
/* 39D71C */ M2C_UNK hsd_8039D71C();
/* 39D9C8 */ M2C_UNK hsd_8039D9C8();
/* 39DAD4 */ M2C_UNK hsd_8039DAD4();
/* 39EE24 */ M2C_UNK hsd_8039EE24();
/* 39EFAC */ UnkGeneratorStruct* hsd_8039EFAC(s32, s32, s32, HSD_JObj*);
/* 39F05C */ UnkGeneratorStruct* hsd_8039F05C(s8, s8, s32);
/* 39F6CC */ void hsd_8039F6CC(s32, s32, s32, HSD_JObj*);
/* 4D0F60 */ extern HSD_ObjAllocData hsd_804D0F60;
/* 4D0F90 */ extern HSD_ObjAllocData hsd_804D0F90;
/* 4D78D0 */ extern u32 hsd_804D78D0;
/* 4D78D4 */ extern u32 hsd_804D78D4;
/* 4D78D8 */ extern u16 hsd_804D78D8;
/* 4D78DE */ extern u16 hsd_804D78DE;
/* 4D78E0 */ extern u16 hsd_804D78E0;
/* 4D78E8 */ extern u32 hsd_804D78E8;
/* 4D78F0 */ extern u32 hsd_804D78F0;
#define __GALE01_391580
/* 4D7850 */ static int hsd_804D7850;
/* 4D7894 */ static int hsd_804D7894;
/* 4D78C0 */ static int hsd_804D78C0;
/* 4D78C8 */ static int hsd_804D78C8;
/* 4D78CC */ static u32 hsd_804D78CC;
#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;
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)
/// MexTK: GeneratorAppSRT
struct UnkGeneratorMember {
M2C_UNK x0;
UnkGeneratorStruct* x4;
S32Vec3 x8;
u8 x14_fill[0x10];
f32 x24;
f32 x28;
f32 x2C;
u8 x30_fill[0x72];
s8 xA2;
};
/// @remarks MexTK: Particle
struct UnkGeneratorStruct {
UnkGeneratorStruct* next;
u8 x4_fill[0xC];
HSD_JObj* x10_jobj;
u16 x14_fill;
u16 x16_flags;
u8 x18_fill[0x24 - 0x18];
f32 x24, x28, x2C;
u8 x30_fill[0x54 - 0x30];
UnkGeneratorMember* x54;
};
/* 003A0D18 */ bool psInitAppSRT(int, int);
/* 003A0D58 */ s32 psAddGeneratorAppSRT(s32, u16);
/* 003A0E3C */ void HSD_PSAppSrt_803A425C(M2C_UNK, s32);
u16 psRemoveGeneratorSRT(M2C_UNK);
u16 psRemoveParticleAppSRT(M2C_UNK);
UnkGeneratorMember* psAddGeneratorAppSRT_begin(UnkGeneratorStruct*, s32);
u16 psAttachParticleAppSRT(M2C_UNK, M2C_UNK);
extern HSD_ObjAllocData HSD_PSAppSrt_804D10B0;
#define SYSDOLPHIN_BASELIB_PSDISP_H
#define SYSDOLPHIN_BASELIB_PSSTRUCTS_H
struct _psAppSRT;
struct HSD_Fog;
typedef struct _psAppSRT HSD_psAppSRT;
struct _particle;
typedef struct _particle HSD_Particle;
struct _generator;
typedef struct _generator HSD_Generator;
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;
struct _particle;
struct _psAppSRT {
struct _psAppSRT* next; /* 0x0 */
struct _generator* gp; /* 0x4 */
Vec3 tra; /* 0x8 */
Quaternion rot; /* 0x14 */
Vec3 sca; /* 0x24 */
u8 status; /* 0x30 */
u8 frameNum; /* 0x31 */
u16 usedCount; /* 0x32 */
Mtx mmtx; /* 0x34 */
float ssx; /* 0x64 */
float ssy; /* 0x68 */
void (*freefunc)(struct _psAppSRT* appSrt); /* 0x6C */
u16 idnum; /* 0x70 */
u8 billboard; /* 0x72 */
u8 dummy; /* 0x73 */
};
/* size: 0x94 */
struct _particle {
HSD_Particle* next; /* 0x0 */
u32 kind; /* 0x4 */
u8 bank; /* 0x8 */
u8 texGroup; /* 0x9 */
u8 poseNum; /* 0xA */
u8 palNum; /* 0xB */
u16 sizeCount;
u16 primColCount; /* 0xE */
u16 envColCount; /* 0x10 */
GXColor primCol; /* 0x12 */
GXColor envCol; /* 0x16 */
u16 cmdWait;
u8 loopCount;
u8 linkNo; /* 0x1D */
u16 idnum;
u8* cmdList;
u16 cmdPtr;
u16 cmdMarkPtr;
u16 cmdLoopPtr;
u16 life;
float vx; /* 0x2C */
float vy; /* 0x30 */
float vz; /* 0x34 */
float grav; /* 0x38 */
float fric; /* 0x3C */
float x; /* 0x40 */
float y; /* 0x44 */
float z; /* 0x48 */
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;
float sizeTarget;
float rotateTarget;
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 _generator* gen; /* 0x88 */
struct _psAppSRT* appsrt;
float* userdata;
int (*callback)(HSD_Particle* part);
};
/* 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;
typedef struct _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
f32 x; // 0x24
f32 y; // 0x28
f32 z; // 0x2C
f32 vx; // 0x30
f32 vy; // 0x34
f32 vz; // 0x38
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; // 0z60
} _generator;
extern u32* ptclref[64];
extern int psNumTexGroup[64];
extern HSD_PSTexGroup** psTexGroupArray[64];
extern HSD_PSFormGroup** psFormGroupArray[64];
extern int psNumCmdList[64];
extern HSD_PSCmdList** psCmdListArray[64];
extern u16 numActiveParticles;
extern u16 numPeakParticles;
extern int (**psCallback)(HSD_Particle* part);
#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(struct _particle* pp);
static inline void setupChanReg(struct _particle* pp);
static inline void getClrTrail(struct _particle* pp, GXColor* col);
static inline void setupTevReg(struct _particle* pp);
static inline void psSetCurrentMtx(GXPosNrmMtx idx);
static inline struct _particle* psDispSubPoint(struct _particle* pp);
static inline struct _particle* psDispSubPointTrail(struct _particle* pp);
static inline void psDispSubMakePolygon(struct _particle* pp, u8* texform,
float x, float y, float z, float ppvx,
float ppvy, float ppvz, float x0,
float y0, float z0, float x1, float y1,
float z1);
static inline void psDispSub(struct _particle* pp, u8* texform);
void psInitDataBank(int bank, int* cmdBank, int* texBank, u32* ref,
int* formBank);
void psInitParticle(int num);
void psRemoveParticle(void);
HSD_Particle* psGenerateParticle0(HSD_Particle* p, 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,
struct _generator* gp, int flgInterpret);
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,
struct _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(struct _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(struct _generator* gp, HSD_PSUserFunc* userfunc);
static inline void psRemoveBillboardCamera(void);
void psDispParticles(s32, u32);
M2C_UNK particleSort(s32, u8, M2C_UNK*, M2C_UNK*);
void setVtxDesc(s32);
#define GALE01_3A3920
/* 3A3920 */ void psSetupTevCommon(void);
/* 3A3A50 */ void psSetupTevInvalidState(void);
/* 3A3A5C */ void psSetupTev(M2C_UNK);
#define INCLUDE_SYSDOLPHIN_BASELIB_QUATLIB_H
void EulerToQuat(Vec3*, Quaternion*);
void 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)
{
bool has_flags;
u32 flags = (robj->flags & 0x70000000);
if (flags == 0x20000000) {
has_flags = 1;
} else {
has_flags = 0;
}
return has_flags;
}
#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 SYSDOLPHIN_BASELIB_SOBJLIB_H
#define SYSDOLPHIN_BASELIB_SPLINE_H
struct HSD_Spline {
u8 x0 [0];
};
f32 splGetHelmite(f32, f32, f32, f32, f32, f32);
void splArcLengthPoint(Vec3*, HSD_Spline*, f32);
void splGetSplinePoint(s32, s32);
#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;
u8 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 GALE01_388330
/* 388330 */ M2C_UNK HSD_AudioMalloc();
/* 38838C */ M2C_UNK HSD_AudioFree();
/* 3883B4 */ M2C_UNK HSD_SynthSFXSampleLoadCallback();
/* 3887DC */ M2C_UNK HSD_SynthSFXHeaderLoadCallback();
/* 38893C */ M2C_UNK HSD_SynthSFXLoadNewProc();
/* 3889B8 */ M2C_UNK HSD_SynthSFXLoad();
/* 388B0C */ M2C_UNK HSD_Synth_80388B0C();
/* 388B50 */ s32 HSD_Synth_80388B50(void);
/* 388B60 */ M2C_UNK HSD_Synth_80388B60();
/* 388CB0 */ M2C_UNK HSD_Synth_80388CB0();
/* 388D30 */ M2C_UNK HSD_Synth_80388D30();
/* 388DC8 */ M2C_UNK HSD_Synth_80388DC8();
/* 388E08 */ M2C_UNK HSD_Synth_80388E08();
/* 388EB4 */ M2C_UNK HSD_SynthSFXGroupDataReaddressCallback();
/* 388EFC */ M2C_UNK HSD_SynthSFXGroupDataReaddress();
/* 388FF0 */ M2C_UNK HSD_SynthSFXBankDeflag();
/* 389084 */ M2C_UNK HSD_SynthSFXBankDeflagSync();
/* 389094 */ M2C_UNK HSD_Synth_80389094();
/* 3890B4 */ M2C_UNK HSD_Synth_803890B4();
/* 38912C */ M2C_UNK HSD_Synth_8038912C();
/* 3891D0 */ M2C_UNK dropcallback();
/* 389334 */ M2C_UNK HSD_Synth_80389334();
/* 3896F0 */ M2C_UNK HSD_Synth_803896F0();
/* 38987C */ M2C_UNK HSD_SynthSFXKeyOff();
/* 3899B0 */ M2C_UNK HSD_SynthSFXStopRange();
/* 389A50 */ M2C_UNK HSD_SynthSFXPause();
/* 389AD0 */ M2C_UNK HSD_SynthSFXResume();
/* 389B50 */ M2C_UNK HSD_SynthSFXCheck();
/* 389BD8 */ M2C_UNK HSD_SynthSFXSetVolumeFade();
/* 389CC4 */ M2C_UNK HSD_Synth_80389CC4();
/* 389D24 */ M2C_UNK HSD_SynthSFXSetMix();
/* 389D8C */ M2C_UNK HSD_SynthSFXUpdatePitch();
/* 389E2C */ M2C_UNK HSD_Synth_80389E2C();
/* 389F4C */ M2C_UNK HSD_Synth_80389F4C();
/* 38A000 */ M2C_UNK HSD_Synth_8038A000();
/* 38A5A4 */ M2C_UNK HSD_SynthSFXUpdateVolume();
/* 38A600 */ M2C_UNK HSD_SynthSFXUpdateMix();
/* 38AAB0 */ M2C_UNK HSD_SynthSFXUpdateAllVolume();
/* 38ABBC */ void HSD_SynthSFXSetDriverInactivatedCallback(M2C_UNK arg0);
/* 38ABC4 */ void HSD_SynthSFXSetDriverMasterClockCallback(M2C_UNK arg0);
/* 38ABCC */ void HSD_SynthSFXSetDriverPauseCallback(M2C_UNK arg0);
/* 38ABD4 */ M2C_UNK HSD_SynthCallback();
/* 38AD60 */ M2C_UNK fn_8038AD60();
/* 38AD74 */ M2C_UNK HSD_Synth_8038AD74();
/* 38ADD0 */ M2C_UNK HSD_Synth_8038ADD0();
/* 38B120 */ M2C_UNK HSD_Synth_8038B120();
/* 38B380 */ M2C_UNK HSD_SynthPStreamFirstHakoHeaderCallback();
/* 38B3E0 */ M2C_UNK HSD_SynthPStreamHeaderCallback();
/* 38B5AC */ M2C_UNK HSD_Synth_8038B5AC();
/* 38B81C */ M2C_UNK HSD_SynthStreamSetVolume();
/* 38B938 */ M2C_UNK HSD_SynthInit();
#define __GALE01_388330
/* 4D772C */ static s32 HSD_Synth_804D772C;
/* 4D7738 */ static s32 HSD_Synth_804D7738;
/* 4D773C */ static volatile int HSD_Synth_804D773C;
/* 4D7740 */ static M2C_UNK driverInactivatedCallback;
/* 4D7744 */ static M2C_UNK driverMasterClockCallback;
/* 4D7748 */ static M2C_UNK driverPauseCallback;
/* 4D7768 */ static s32 HSD_Synth_804D7768;
/* 4D776C */ static s32 HSD_Synth_804D776C;
/* 4D7778 */ static s8 HSD_Synth_804D7778;
#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, 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 */ M2C_UNK assign_reg();
/* 385944 */ M2C_UNK order_dag();
/* 385B8C */ M2C_UNK CalcDistance();
/* 385C60 */ int HSD_TExpMakeDag(HSD_TExp* root, HSD_TExpDag* list);
/* 386100 */ M2C_UNK make_full_dependancy_mtx();
/* 386230 */ M2C_UNK fn_80386230();
/* 386234 */ void HSD_TExpSchedule(int num, HSD_TExpDag* list,
HSD_TExp** result, HSD_TExpRes* resource);
/* 386470 */ M2C_UNK SimplifySrc();
/* 38687C */ M2C_UNK SimplifyThis();
/* 3870E4 */ M2C_UNK SimplifyByMerge();
/* 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 float HSD_identityMtx[];
#define FLT_MIN 1.17549435e-38f
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);
}
}