mirror of https://github.com/sm64pc/sm64pc.git
92 lines
3.6 KiB
C
92 lines
3.6 KiB
C
#ifndef GD_MAIN_H
|
|
#define GD_MAIN_H
|
|
|
|
#include <ultra64.h>
|
|
|
|
// In various files of the Goddard subsystem, there are miscellaneous
|
|
// unused rodata strings. These can be generated via a printf call that
|
|
// is stubbed out, but not via define printf(...), as IDO 5.3 C
|
|
// preprocessor did not support va_arg defines. Goddard, however, did
|
|
// use gd_printf, which is distinct from this type of stubbed call, as
|
|
// gd_printf actually is called. This could be because gd_printf could
|
|
// forward to printf (currently unclear whether it might or might not,
|
|
// gd_printf is awaiting decompilation), which would indicate goddard was
|
|
// in the middle of moving these calls to the wrapper function. The unmoved
|
|
// calls result in the unused rodata strings.
|
|
#ifdef __GNUC__
|
|
#define printf(...) \
|
|
_Pragma ("GCC diagnostic push") \
|
|
_Pragma ("GCC diagnostic ignored \"-Wunused-value\"") \
|
|
(__VA_ARGS__); \
|
|
_Pragma ("GCC diagnostic pop")
|
|
#else
|
|
#define printf
|
|
#endif
|
|
|
|
// structs
|
|
struct GdControl { // gGdCtrl
|
|
/* 0x00 */ s32 unk00;
|
|
/* 0x04 */ u8 pad04[4];
|
|
/* 0x08 */ s32 dleft; // Dpad-left (mask)
|
|
/* 0x0C */ s32 dright; // Dpad-right (mask)
|
|
/* 0x10 */ s32 dup; // Dpad-up (mask)
|
|
/* 0x14 */ s32 ddown; // Dpad-down (mask)
|
|
/* 0x18 */ s32 cleft; // bool C-left
|
|
/* 0x1C */ s32 cright; // bool C-right
|
|
/* 0x20 */ s32 cup; // bool C-up
|
|
/* 0x24 */ s32 cdown; // bool C-down
|
|
/* 0x28 */ void * unk28; // null-checked ptr? symbol not deref-ed in extant code?
|
|
/* 0x2C */ void * unk2C; // some sort of old texture ptr? symbol not deref-ed in extant code?
|
|
/* 0x30 */ void * unk30; // null-checked ptr? symbol not deref-ed in extant code?
|
|
/* 0x34 */ s32 btnA; // bool A button
|
|
/* 0x38 */ s32 btnB; // bool B button
|
|
/* 0x3C */ u8 pad3C[0x44-0x3C];
|
|
/* 0x44 */ s32 trgL; // bool L trigger pressed
|
|
/* 0x48 */ s32 trgR; // bool R trigger pressed
|
|
/* 0x4C */ s32 unk4C;
|
|
/* 0x50 */ s32 unk50;
|
|
/* 0x54 */ s32 newStartPress; // toggle bit? start pressed?
|
|
/* 0x58 */ u8 pad58[0x7C-0x58];
|
|
/* 0x7C */ f32 stickXf;
|
|
/* 0x80 */ f32 stickYf;
|
|
/* 0x84 */ u8 pad84[4];
|
|
/* 0x88 */ f32 unk88;
|
|
/* 0x8C */ u8 pad8c[0xA0-0x8C];
|
|
/* 0xA0 */ f32 unkA0;
|
|
/* 0xA4 */ u8 padA4[0xAC-0xA4];
|
|
/* 0xAC */ f32 unkAC;
|
|
/* 0xB0 */ u8 padB0[0xB8-0xB0];
|
|
/* 0xB8 */ s32 csrXatApress; // cursor x position when there was a new (A) press?
|
|
/* 0xBC */ s32 csrYatApress; // cursor y position when there was a new (A) press?
|
|
/* 0xC0 */ s32 stickDeltaX;
|
|
/* 0xC4 */ s32 stickDeltaY;
|
|
/* 0xC8 */ s32 stickX;
|
|
/* 0xCC */ s32 stickY;
|
|
/* 0xD0 */ s32 csrX; // bounded by screen view
|
|
/* 0xD4 */ s32 csrY; // bounded by screen view
|
|
/* 0xD8 */ /* hand/cursor state bitfield? */
|
|
/* b80 */ u8 btnApressed : 1; // bool (A) pressed
|
|
/* b40 */ u8 unkD8b40 : 1; // set to FALSE and unused
|
|
/* b20 */ u8 unkD8b20 : 1; // set to FALSE and unused
|
|
/* b10 */ u8 btnAnewPress : 1; // bool new (A) press
|
|
/* b08 */ u8 unkD8b08 : 1;
|
|
/* b04 */ u8 unkD8b04 : 1;
|
|
/* b02 */ u8 AbtnPressWait : 1; // bool 10 frames between (A) presses (cursor cool down?)
|
|
/* 0xDC */ u32 frameAbtnPressed; // first frame of new a press
|
|
/* 0xE0 */ u8 padE0[0xE8-0xE0];
|
|
/* 0xE8 */ u32 frameCount; // frame count?
|
|
/* 0xEC */ u8 padEC[0xF0-0xEC];
|
|
/* 0xF0 */ struct GdControl *prevFrame; // previous frame data
|
|
};
|
|
|
|
// data
|
|
extern s32 gGdMoveScene;
|
|
extern f32 D_801A8058;
|
|
extern s32 gGdUseVtxNormal;
|
|
|
|
// bss
|
|
extern struct GdControl gGdCtrl;
|
|
extern struct GdControl gGdCtrlPrev;
|
|
|
|
#endif /* GD_MAIN_H */
|