mirror of
https://github.com/HarbourMasters/Starship
synced 2026-05-24 07:11:29 -04:00
145 lines
2.6 KiB
C
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
|