mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-07 03:04:19 -05:00
425 lines
15 KiB
C
425 lines
15 KiB
C
#ifndef POKEDIAMOND_UNK_02016B94_H
|
|
#define POKEDIAMOND_UNK_02016B94_H
|
|
|
|
#include "NNS_g2d.h"
|
|
#include "global.h"
|
|
#include "GX_layers.h"
|
|
#include "MI_uncompress.h"
|
|
#include "OS_cache.h"
|
|
#include "gx.h"
|
|
#include "heap.h"
|
|
#include "math_util.h"
|
|
|
|
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 unk17; // probably paddding
|
|
u32 mosaic;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
struct BgConfig
|
|
{
|
|
u32 heap_id;
|
|
u16 scrollScheduled;
|
|
u16 bufferTransferScheduled;
|
|
struct Bg bgs[8];
|
|
};
|
|
|
|
struct Bitmap
|
|
{
|
|
const u8 *pixels;
|
|
u16 width;
|
|
u16 height;
|
|
};
|
|
|
|
struct WindowTemplate
|
|
{
|
|
u8 bgId;
|
|
u8 tilemapLeft;
|
|
u8 tilemapTop;
|
|
u8 width;
|
|
u8 height;
|
|
u8 paletteNum;
|
|
u16 baseTile;
|
|
};
|
|
|
|
struct Window
|
|
{
|
|
struct BgConfig *bgConfig;
|
|
u8 bgId;
|
|
u8 tilemapLeft;
|
|
u8 tilemapTop;
|
|
u8 width;
|
|
u8 height;
|
|
u8 paletteNum;
|
|
u16 baseTile : 15;
|
|
u16 colorMode : 1;
|
|
void *pixelBuffer;
|
|
};
|
|
|
|
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,
|
|
};
|
|
|
|
struct BgConfig *BgConfig_Alloc(u32 heap_id);
|
|
u32 BgConfig_GetHeapId(struct BgConfig *bgConfig);
|
|
void SetBothScreensModesAndDisable(const struct GraphicsModes *modes);
|
|
void SetScreenModeAndDisable(const struct GraphicsModes *gfxModes, u32 whichScreen);
|
|
void InitBgFromTemplate(
|
|
struct BgConfig *bgConfig, u8 bgId, const struct BgTemplate *template, u8 bgMode);
|
|
void SetBgControlParam(struct BgConfig *config, u8 bgId, u32 attr, u8 value);
|
|
u8 TranslateGFBgModePairToGXScreenSize(u8 size, u32 bgMode);
|
|
void GetBgScreenDimensions(u32 screenSize, u8 *width_p, u8 *height_p);
|
|
void FreeBgTilemapBuffer(struct BgConfig *bgConfig, u32 bgId);
|
|
void SetBgPriority(u32 bgId, u16 priority);
|
|
void ToggleBgLayer(u32 bgId, GX_LayerToggle toggle);
|
|
void BgSetPosTextAndCommit(struct BgConfig *bgConfig, u32 bgId, u32 op, fx32 val);
|
|
fx32 Bg_GetXpos(struct BgConfig *bgConfig, u32 bgId);
|
|
fx32 Bg_GetYpos(struct BgConfig *bgConfig, u32 bgId);
|
|
void Bg_SetTextDimAndAffineParams(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
u32 txOp,
|
|
fx32 txVal,
|
|
struct Mtx22 *mtx,
|
|
fx32 centerX,
|
|
fx32 centerY);
|
|
void Bg_SetPosText(struct Bg *bg, u32 op, fx32 val);
|
|
void SetBgAffine(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
struct Mtx22 *mtx,
|
|
fx32 centerX,
|
|
fx32 centerY);
|
|
void BgAffineReset(struct BgConfig *bgConfig, u32 bgId);
|
|
void CopyOrUncompressTilemapData(const void *src, void *dest, u32 size);
|
|
void BgCommitTilemapBufferToVram(struct BgConfig *bgConfig, u32 bgId);
|
|
void BgCopyOrUncompressTilemapBufferRangeToVram(
|
|
struct BgConfig *bgConfig, u32 bgId, u32 *src, u32 size, u32 tileOffset);
|
|
void LoadBgVramScr(u32 bgId, void *buffer_p, u32 offset, u32 size);
|
|
void BG_LoadScreenTilemapData(struct BgConfig *bgConfig, u32 bgId, void *src, u32 numTiles);
|
|
void BG_LoadCharTilesData(
|
|
struct BgConfig *bgConfig, u32 bgId, u32 *charData, u32 offset, u32 numTiles);
|
|
void BG_LoadCharPixelData(
|
|
struct BgConfig *bgConfig, u32 bgId, u32 *charData, u32 size, u32 offset);
|
|
void LoadBgVramChar(u32 bgId, void *buffer_p, u32 offset, u32 size);
|
|
void BG_ClearCharDataRange(u32 bgId, u32 size, u32 offset, u32 heap_id);
|
|
void BG_FillCharDataRange(
|
|
struct BgConfig *param0, u32 bgId, u32 fillValue, u32 count, u32 offset);
|
|
void BG_LoadPlttData(u32 bgId, void *plttData, u32 size, u32 offset);
|
|
void BG_SetMaskColor(u32 bgId, u32 value);
|
|
u16 GetTileMapIndexFromCoords(u8 x, u8 y, u8 screenSize);
|
|
u16 GetSrcTileMapIndexFromCoords(u8 x, u8 y, u8 width, u8 height);
|
|
void LoadRectToBgTilemapRect(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
void *src,
|
|
u8 dstX,
|
|
u8 dstY,
|
|
u8 width,
|
|
u8 height);
|
|
void CopyToBgTilemapRect(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
u8 dstX,
|
|
u8 dstY,
|
|
u8 dstWidth,
|
|
u8 dstHeight,
|
|
void *src,
|
|
u8 srcX,
|
|
u8 srcY,
|
|
u8 srcWidth,
|
|
u8 srcHeight);
|
|
void CopyRectToBgTilemapRect(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
u8 dstX,
|
|
u8 dstY,
|
|
u8 dstWidth,
|
|
u8 dstHeight,
|
|
void *src,
|
|
u8 srcX,
|
|
u8 srcY,
|
|
u8 srcWidth,
|
|
u8 srcHeight);
|
|
void CopyBgTilemapRectText(struct Bg *bg,
|
|
u8 dstX,
|
|
u8 dstY,
|
|
u8 dstWidth,
|
|
u8 dstHeight,
|
|
u16 *src,
|
|
u8 srcX,
|
|
u8 srcY,
|
|
u8 srcWidth,
|
|
u8 srcHeight,
|
|
u8 adjustForSrcDims);
|
|
void CopyBgTilemapRectAffine(struct Bg *bg,
|
|
u8 dstX,
|
|
u8 dstY,
|
|
u8 dstWidth,
|
|
u8 dstHeight,
|
|
u8 *src,
|
|
u8 srcX,
|
|
u8 srcY,
|
|
u8 srcWidth,
|
|
u8 srcHeight,
|
|
u8 adjustForSrcDims);
|
|
void FillBgTilemapRect(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
u16 fillValue,
|
|
u8 x,
|
|
u8 y,
|
|
u8 width,
|
|
u8 height,
|
|
u8 paletteNum);
|
|
void FillBgTilemapRectText(struct Bg *bg,
|
|
u16 fillValue,
|
|
u8 x,
|
|
u8 y,
|
|
u8 width,
|
|
u8 height,
|
|
u8 paletteNum);
|
|
void FillBgTilemapRectAffine(
|
|
struct Bg *bg, u8 fillValue, u8 x, u8 y, u8 width, u8 height);
|
|
void BgTilemapRectChangePalette(struct BgConfig *bgConfig,
|
|
u32 bgId,
|
|
u8 x,
|
|
u8 y,
|
|
u8 width,
|
|
u8 height,
|
|
u8 paletteNum);
|
|
void BgClearTilemapBufferAndCommit(struct BgConfig *bgConfig, u32 bgId);
|
|
void BgFillTilemapBufferAndCommit(struct BgConfig *bgConfig, u32 bgId, u16 fillValue);
|
|
void BgFillTilemapBufferAndSchedule(struct BgConfig *bgConfig, u32 bgId, u16 fillValue);
|
|
void *BgGetCharPtr(u32 bgId);
|
|
void Convert4bppTo8bppInternal(u8 *src4bpp, u32 size, u8 (*dest8bpp), u8 paletteNum);
|
|
u8 *Convert4bppTo8bpp(u8 *src4Bpp, u32 size, u8 paletteNum, u32 heap_id);
|
|
void *GetBgTilemapBuffer(struct BgConfig *bgConfig, u8 bgId);
|
|
u16 GetBgAffineRotation(struct BgConfig *bgConfig, u32 bgId);
|
|
u8 GetBgPriority(struct BgConfig *bgConfig, u32 bgId);
|
|
void BlitBitmapRect4Bit(const struct Bitmap *src,
|
|
const struct Bitmap *dst,
|
|
u16 srcX,
|
|
u16 srcY,
|
|
u16 dstX,
|
|
u16 dstY,
|
|
u16 width,
|
|
u16 height,
|
|
u16 colorKey);
|
|
void BlitBitmapRect8Bit(const struct Bitmap *src,
|
|
const struct Bitmap *dst,
|
|
u16 srcX,
|
|
u16 srcY,
|
|
u16 dstX,
|
|
u16 dstY,
|
|
u16 width,
|
|
u16 height,
|
|
u16 colorKey);
|
|
void FillBitmapRect4Bit(
|
|
struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
|
|
void FillBitmapRect8Bit(
|
|
struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
|
|
struct Window *AllocWindows(u32 heap_id, s32 size);
|
|
void InitWindow(struct Window *window);
|
|
BOOL WindowIsInUse(struct Window *window);
|
|
void AddWindowParameterized(struct BgConfig *param0,
|
|
struct Window *window,
|
|
u8 bgId,
|
|
u8 tilemapLeft,
|
|
u8 tilemapTop,
|
|
u8 width,
|
|
u8 height,
|
|
u8 paletteNum,
|
|
u16 baseTile);
|
|
void AddTextWindowTopLeftCorner(struct BgConfig *param0,
|
|
struct Window *window,
|
|
u8 width,
|
|
u8 height,
|
|
u16 baseTile,
|
|
u8 paletteNum);
|
|
void AddWindow(struct BgConfig *bgConfig,
|
|
struct Window *window,
|
|
const struct WindowTemplate *template);
|
|
void RemoveWindow(struct Window *window);
|
|
void WindowArray_dtor(struct Window *windows, int count);
|
|
void CopyWindowToVram(struct Window *window);
|
|
void ScheduleWindowCopyToVram(struct Window *window);
|
|
void PutWindowTilemap(struct Window *window);
|
|
void PutWindowTilemapRectAnchoredTopLeft(struct Window *window, u8 width, u8 height);
|
|
void ClearWindowTilemap(struct Window *window);
|
|
void PutWindowTilemap_TextMode(struct Window *param0);
|
|
void PutWindowTilemap_AffineMode(struct Window *window);
|
|
void ClearWindowTilemapText(struct Window *window);
|
|
void ClearWindowTilemapAffine(struct Window *window);
|
|
void CopyWindowToVram_TextMode(struct Window *window);
|
|
void ScheduleWindowCopyToVram_TextMode(struct Window *window);
|
|
void CopyWindowToVram_AffineMode(struct Window *window);
|
|
void ScheduleWindowCopyToVram_AffineMode(struct Window *window);
|
|
void CopyWindowPixelsToVram_TextMode(struct Window *window);
|
|
void ClearWindowTilemapAndCopyToVram(struct Window *window);
|
|
void ClearWindowTilemapAndScheduleTransfer(struct Window *window);
|
|
void ClearWindowTilemapAndCopyToVram_TextMode(struct Window *window);
|
|
void ClearWindowTilemapAndScheduleTransfer_TextMode(struct Window *window);
|
|
void ClearWindowTilemapAndCopyToVram_AffineMode(struct Window *window);
|
|
void ClearWindowTilemapAndScheduleTransfer_AffineMode(struct Window *window);
|
|
void FillWindowPixelBuffer(struct Window *window, u8 param1);
|
|
void BlitBitmapRectToWindow(struct Window *window,
|
|
const void *src,
|
|
u16 srcX,
|
|
u16 srcY,
|
|
u16 srcWidth,
|
|
u16 srcHeight,
|
|
u16 dstX,
|
|
u16 dstY,
|
|
u16 dstWidth,
|
|
u16 dstHeight);
|
|
void BlitBitmapRect(struct Window *window,
|
|
void *param1,
|
|
u16 param2,
|
|
u16 param3,
|
|
u16 param4,
|
|
u16 param5,
|
|
u16 param6,
|
|
u16 param7,
|
|
u16 param8,
|
|
u16 param9,
|
|
u16 param10);
|
|
void FillWindowPixelRect(struct Window *window, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
|
|
void CopyGlyphToWindow(
|
|
struct Window * window,
|
|
const char * src,
|
|
u16 srcWidth,
|
|
u16 srcHeight,
|
|
u16 width,
|
|
u16 height,
|
|
u16 glyph
|
|
);
|
|
void ScrollWindow(struct Window *window, u32 param1, u8 param2, u8 param3);
|
|
void ScrollWindow4bpp(struct Window *window, u32 param1, u8 param2, u8 fillValue);
|
|
void ScrollWindow8bpp(struct Window *window, u32 param1, u8 param2, u8 fillValue);
|
|
u8 GetWindowBgId(struct Window *window);
|
|
u8 GetWindowWidth(struct Window *window);
|
|
u8 GetWindowHeight(struct Window *window);
|
|
u8 GetWindowX(struct Window *window);
|
|
u8 GetWindowY(struct Window *window);
|
|
void MoveWindowX(struct Window *window, u8 x);
|
|
void MoveWindowY(struct Window *window, u8 y);
|
|
void SetWindowPaletteNum(struct Window *window, u8 paletteNum);
|
|
NNSG2dCharacterData * LoadCharacterDataFromFile(void **char_ret, u32 heap_id, const char *path);
|
|
NNSG2dPaletteData * LoadPaletteDataFromFile(void **pltt_ret, u32 heap_id, const char *path);
|
|
void DoScheduledBgGpuUpdates(struct BgConfig *bgConfig);
|
|
void DoScheduledBgTilemapBufferTransfers(struct BgConfig *bgConfig);
|
|
void ScheduleBgTilemapBufferTransfer(struct BgConfig *bgConfig, u32 bgId);
|
|
void ApplyScheduledBgPosUpdate(struct BgConfig *bgConfig);
|
|
void ScheduleSetBgPosText(struct BgConfig *bgConfig, u32 bgId, u32 op, fx32 value);
|
|
void ScheduleSetBgAffineRotation(struct BgConfig *bgConfig, u32 bgId, u32 op, u16 value);
|
|
void Bg_SetAffineRotation(struct Bg *bg, u32 op, u16 val);
|
|
void ScheduleSetBgAffinePos(struct BgConfig *bgConfig, u32 bgId, u32 op, fx32 value);
|
|
void Bg_SetAffinePos(struct Bg *bg, u32 op, fx32 val);
|
|
u32 DoesPixelAtScreenXYMatchPtrVal(struct BgConfig *bgConfig, u8 bgId, u8 x, u8 y, u16 *src);
|
|
void ApplyFlipFlagsToTile(struct BgConfig *bgConfig, u8 flag, u8 *src);
|
|
|
|
#endif // POKEDIAMOND_UNK_02016B94_H
|