Files
2024-05-20 11:28:13 -03:00

145 lines
2.6 KiB
C

#ifndef OBJECT_RAM_H
#define OBJECT_RAM_H
#include "global.h"
#define ORAM_ENTRY(struct, index, field, format) \
{ ORAM_##struct, index, offsetof(struct, field), NULL, 0, FMT_##format, WIDTH_##format, 0, 0 }
#define ORAM_OFF \
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }
#define WRAP_MODE(val, max) ((u8) ((val) + (max)) % (max))
#define OBJ_ARRAY_INFO(objarr, name) \
{ objarr, sizeof(*objarr), ARRAY_COUNT(objarr), name }
typedef struct ObjArrayInfo {
void* ptr;
size_t size;
s32 count;
char* name;
} ObjArrayInfo;
typedef struct RamEntry {
s16 type;
s16 index;
s16 offset;
Object* objPtr;
void* dataPtr;
s16 fmt;
u8 width;
u16 x;
u16 y;
} RamEntry;
typedef enum RamModMode {
RAMMOD_OFF,
RAMMOD_CHEAT,
RAMMOD_OBJECT,
RAMMOD_MAX,
} RamModMode;
typedef enum CheatMode {
CHEAT_SHIELDS,
CHEAT_LASERS,
CHEAT_BOMBS,
CHEAT_BOOST,
CHEAT_LIVES,
CHEAT_TEAMMATES,
CHEAT_SPEED,
CHEAT_HITS,
CHEAT_CHECKPOINT,
CHEAT_COMPLETE,
CHEAT_MAX,
} CheatMode;
typedef struct CheatRamEntry {
union {
fu* addr;
void (*func)(void);
};
s32 size;
fu data;
} CheatRamEntry;
#define SET_CHEAT_RAM(ram, address, value) \
{ \
(ram)->addr = (void*)(address); \
(ram)->size = sizeof(*(address)); \
(ram)->data.i = (value); \
}
typedef struct CheatEntry {
CheatMode mode;
CheatRamEntry ram[4];
s32 option;
s32 optionMax;
s32 action;
bool hold;
} CheatEntry;
typedef enum ObjectRamType {
ORAM_NONE,
ORAM_Player,
ORAM_Scenery360,
ORAM_Scenery,
ORAM_Sprite,
ORAM_Actor,
ORAM_Boss,
ORAM_Item,
ORAM_Effect,
ORAM_PlayerShot,
ORAM_TexturedLine,
ORAM_RadarMark,
ORAM_BonusText,
ORAM_MAX,
} ObjectRamType;
typedef enum FormatType {
FMT_HEX,
FMT_SIGN,
FMT_UNSIGN,
FMT_FLOAT,
FMT_MAX,
} FormatType;
typedef enum EditMode {
EDM_TYPE,
EDM_INDEX,
EDM_OFFSET,
EDM_FORMAT,
EDM_WIDTH,
EDM_VALUE,
// EDM_POS,
EDM_MAX,
} EditMode;
#define FMT_f32 FMT_FLOAT
#define WIDTH_f32 2
#define FMT_s32 FMT_SIGN
#define WIDTH_s32 2
#define FMT_u32 FMT_UNSIGN
#define WIDTH_u32 2
#define FMT_x32 FMT_HEX
#define WIDTH_x32 2
#define FMT_s16 FMT_SIGN
#define WIDTH_s16 1
#define FMT_u16 FMT_UNSIGN
#define WIDTH_u16 1
#define FMT_x16 FMT_HEX
#define WIDTH_x16 1
#define FMT_s8 FMT_SIGN
#define WIDTH_s8 0
#define FMT_u8 FMT_UNSIGN
#define WIDTH_u8 0
#define FMT_x8 FMT_HEX
#define WIDTH_x8 0
u32 ObjectRam_GetData(RamEntry* entry);
#endif