pokeheartgold/include/window.h
2022-01-09 20:54:32 -05:00

150 lines
3.0 KiB
C

#ifndef POKEHEARTGOLD_WINDOW_H
#define POKEHEARTGOLD_WINDOW_H
typedef struct BGTEMPLATE {
u32 x;
u32 y;
u32 bufferSize;
u32 baseTile;
u8 size;
u8 colorMode;
u8 screenBase;
u8 charBase;
u8 bgExtPltt;
u8 priority;
u8 areaOver;
u8 dummy;
u32 mosaic;
} BGTEMPLATE;
typedef struct BG {
void *tilemapBuffer;
u32 bufferSize;
u32 baseTile;
fx32 hOffset;
fx32 vOffset;
u8 mode;
u8 size;
u8 colorMode;
u8 tileSize;
u16 rotation;
u16 unk22; // probably padding
fx32 xScale;
fx32 yScale;
fx32 centerX;
fx32 centerY;
} BG;
typedef struct BGCONFIG {
u32 heap_id;
u16 scrollScheduled;
u16 bufferTransferScheduled;
BG bgs[8];
} BGCONFIG;
typedef struct BITMAP {
const u8 *pixels;
u16 width;
u16 height;
} BITMAP;
typedef struct WINDOWTEMPLATE {
u8 bgId;
u8 left;
u8 top;
u8 width;
u8 height;
u8 palette;
u16 baseBlock;
} WINDOWTEMPLATE;
typedef struct WINDOW {
BGCONFIG *bgConfig;
u8 bgId;
u8 tilemapLeft;
u8 tilemapTop;
u8 width;
u8 height;
u8 paletteNum;
u16 baseTile : 15;
u16 colorMode : 1;
void *pixelBuffer;
} WINDOW;
enum GFBppMode {
GF_BG_CLR_4BPP = 0,
GF_BG_CLR_8BPP,
};
enum GFBgLayer {
GF_BG_LYR_MAIN_0 = 0,
GF_BG_LYR_MAIN_1,
GF_BG_LYR_MAIN_2,
GF_BG_LYR_MAIN_3,
GF_BG_LYR_SUB_0,
GF_BG_LYR_SUB_1,
GF_BG_LYR_SUB_2,
GF_BG_LYR_SUB_3,
GF_BG_LYR_MAIN_CNT = 4,
GF_BG_LYR_SUB_CNT = 4,
GF_BG_LYR_MAIN_FIRST = GF_BG_LYR_MAIN_0,
GF_BG_LYR_SUB_FIRST = GF_BG_LYR_SUB_0,
GF_BG_LYR_MAIN_0_F = 1 << (GF_BG_LYR_MAIN_0 - GF_BG_LYR_MAIN_FIRST),
GF_BG_LYR_MAIN_1_F = 1 << (GF_BG_LYR_MAIN_1 - GF_BG_LYR_MAIN_FIRST),
GF_BG_LYR_MAIN_2_F = 1 << (GF_BG_LYR_MAIN_2 - GF_BG_LYR_MAIN_FIRST),
GF_BG_LYR_MAIN_3_F = 1 << (GF_BG_LYR_MAIN_3 - GF_BG_LYR_MAIN_FIRST),
GF_BG_LYR_SUB_0_F = 1 << (GF_BG_LYR_SUB_0 - GF_BG_LYR_SUB_FIRST),
GF_BG_LYR_SUB_1_F = 1 << (GF_BG_LYR_SUB_1 - GF_BG_LYR_SUB_FIRST),
GF_BG_LYR_SUB_2_F = 1 << (GF_BG_LYR_SUB_2 - GF_BG_LYR_SUB_FIRST),
GF_BG_LYR_SUB_3_F = 1 << (GF_BG_LYR_SUB_3 - GF_BG_LYR_SUB_FIRST),
GF_BG_LYR_UNALLOC = 0xFF,
};
enum GFBgType {
GF_BG_TYPE_TEXT = 0,
GF_BG_TYPE_AFFINE,
GF_BG_TYPE_256x16PLTT,
};
enum GFBgCntSet {
GF_BG_CNT_SET_COLOR_MODE = 0,
GF_BG_CNT_SET_SCREEN_BASE,
GF_BG_CNT_SET_CHAR_BASE,
};
enum GFBgScreenSize {
GF_BG_SCR_SIZE_128x128 = 0,
GF_BG_SCR_SIZE_256x256,
GF_BG_SCR_SIZE_256x512,
GF_BG_SCR_SIZE_512x256,
GF_BG_SCR_SIZE_512x512,
GF_BG_SCR_SIZE_1024x1024
};
enum BgPosAdjustOp {
// Text layers
BG_POS_OP_SET_X = 0,
BG_POS_OP_ADD_X,
BG_POS_OP_SUB_X,
BG_POS_OP_SET_Y,
BG_POS_OP_ADD_Y,
BG_POS_OP_SUB_Y,
// Affine layers
BG_POS_OP_SET_ROT = 0,
BG_POS_OP_ADD_ROT,
BG_POS_OP_SUB_ROT,
BG_POS_OP_SET_CENTERX = 9,
BG_POS_OP_ADD_CENTERX,
BG_POS_OP_SUB_CENTERX,
BG_POS_OP_SET_CENTERY,
BG_POS_OP_ADD_CENTERY,
BG_POS_OP_SUB_CENTERY,
};
#endif //POKEHEARTGOLD_WINDOW_H