From 1521f64f6f055c9fd236a9e2c72ffe3860c5eb14 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 28 May 2021 08:47:42 -0400 Subject: FInish gf_gfx_loader.c --- arm9/lib/include/GXS_ioreg.h | 64 ++++++++++++++++++++++ arm9/lib/include/NNS_g2d.h | 125 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 arm9/lib/include/GXS_ioreg.h (limited to 'arm9/lib/include') diff --git a/arm9/lib/include/GXS_ioreg.h b/arm9/lib/include/GXS_ioreg.h new file mode 100644 index 00000000..1c66c4af --- /dev/null +++ b/arm9/lib/include/GXS_ioreg.h @@ -0,0 +1,64 @@ +#ifndef POKEDIAMOND_GXS_IOREG_H +#define POKEDIAMOND_GXS_IOREG_H + +#define REG_GXS_DB_DISPCNT_O_SHIFT 31 +#define REG_GXS_DB_DISPCNT_O_SIZE 1 +#define REG_GXS_DB_DISPCNT_O_MASK 0x80000000 + +#define REG_GXS_DB_DISPCNT_BG_SHIFT 30 +#define REG_GXS_DB_DISPCNT_BG_SIZE 1 +#define REG_GXS_DB_DISPCNT_BG_MASK 0x40000000 + +#define REG_GXS_DB_DISPCNT_OH_SHIFT 23 +#define REG_GXS_DB_DISPCNT_OH_SIZE 1 +#define REG_GXS_DB_DISPCNT_OH_MASK 0x00800000 + +#define REG_GXS_DB_DISPCNT_EXOBJ_SHIFT 20 +#define REG_GXS_DB_DISPCNT_EXOBJ_SIZE 2 +#define REG_GXS_DB_DISPCNT_EXOBJ_MASK 0x00300000 + +#define REG_GXS_DB_DISPCNT_MODE_SHIFT 16 +#define REG_GXS_DB_DISPCNT_MODE_SIZE 1 +#define REG_GXS_DB_DISPCNT_MODE_MASK 0x00010000 + +#define REG_GXS_DB_DISPCNT_OW_SHIFT 15 +#define REG_GXS_DB_DISPCNT_OW_SIZE 1 +#define REG_GXS_DB_DISPCNT_OW_MASK 0x00008000 + +#define REG_GXS_DB_DISPCNT_W1_SHIFT 14 +#define REG_GXS_DB_DISPCNT_W1_SIZE 1 +#define REG_GXS_DB_DISPCNT_W1_MASK 0x00004000 + +#define REG_GXS_DB_DISPCNT_W0_SHIFT 13 +#define REG_GXS_DB_DISPCNT_W0_SIZE 1 +#define REG_GXS_DB_DISPCNT_W0_MASK 0x00002000 + +#define REG_GXS_DB_DISPCNT_DISPLAY_SHIFT 8 +#define REG_GXS_DB_DISPCNT_DISPLAY_SIZE 5 +#define REG_GXS_DB_DISPCNT_DISPLAY_MASK 0x00001f00 + +#define REG_GXS_DB_DISPCNT_BLANK_SHIFT 7 +#define REG_GXS_DB_DISPCNT_BLANK_SIZE 1 +#define REG_GXS_DB_DISPCNT_BLANK_MASK 0x00000080 + +#define REG_GXS_DB_DISPCNT_OBJMAP_SHIFT 4 +#define REG_GXS_DB_DISPCNT_OBJMAP_SIZE 3 +#define REG_GXS_DB_DISPCNT_OBJMAP_MASK 0x00000070 + +#define REG_GXS_DB_DISPCNT_BGMODE_SHIFT 0 +#define REG_GXS_DB_DISPCNT_BGMODE_SIZE 3 +#define REG_GXS_DB_DISPCNT_BGMODE_MASK 0x00000007 + +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SHIFT 4 +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_SIZE 1 +#define REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK 0x00000010 + +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SHIFT 5 +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_SIZE 2 +#define REG_GXS_DB_DISPCNT_OBJMAP_BM_MASK 0x00000060 + +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SHIFT 20 +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_SIZE 2 +#define REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK 0x00300000 + +#endif //POKEDIAMOND_GXS_IOREG_H diff --git a/arm9/lib/include/NNS_g2d.h b/arm9/lib/include/NNS_g2d.h index aa30881e..722f4767 100644 --- a/arm9/lib/include/NNS_g2d.h +++ b/arm9/lib/include/NNS_g2d.h @@ -53,6 +53,17 @@ typedef enum NNS_G2D_VRAM_TYPE } NNS_G2D_VRAM_TYPE; +typedef enum NNSG2dCharacterDataMapingType +{ + NNS_G2D_CHARACTERMAPING_1D_32, + NNS_G2D_CHARACTERMAPING_1D_64, + NNS_G2D_CHARACTERMAPING_1D_128, + NNS_G2D_CHARACTERMAPING_1D_256, + NNS_G2D_CHARACTERMAPING_2D, + NNS_G2D_CHARACTERMAPING_MAX + +} NNSG2dCharacterDataMapingType; + typedef struct NNSG2dImageAttr { GXTexSizeS sizeS; // Image size (Invalid data is set during 1D mapping.) @@ -86,7 +97,7 @@ typedef struct NNSG2dPaletteCompressInfo void* pPlttIdxTbl; // offset addr. } - NNSG2dPaletteCompressInfo; +NNSG2dPaletteCompressInfo; void NNS_G2dLoadImage1DMapping ( @@ -114,7 +125,7 @@ typedef struct NNSG2dImagePaletteProxy NNSG2dVRamLocation vramLocation; } - NNSG2dImagePaletteProxy; +NNSG2dImagePaletteProxy; void NNS_G2dLoadPalette ( @@ -133,11 +144,121 @@ void NNS_G2dLoadPaletteEx NNSG2dImagePaletteProxy* pPltProxy ); +typedef struct NNSG2dCellVramTransferData +{ + u32 srcDataOffset; + u32 szByte; + +} +NNSG2dCellVramTransferData; + +typedef struct NNSG2dVramTransferData +{ + u32 szByteMax; // Maximum byte count during all VRAM transfers + NNSG2dCellVramTransferData* pCellTransferDataArray;// This is the length of the numCells amount of the maintained NNSG2dCellDataBank. + // + +} +NNSG2dVramTransferData; + +typedef struct NNSG2dCellOAMAttrData +{ + u16 attr0; + u16 attr1; + u16 attr2; + +} +NNSG2dCellOAMAttrData; + +typedef struct NNSG2dCellData +{ + u16 numOAMAttrs; // Number of OAM attributes + u16 cellAttr; // Information related to cell type + // Information related to flips (upper 8 bits) + // Information related to bounding information + // + // Information related to rendering optimization (lower 8 bits) + // (6bit => Radius of bounding sphere >> 2 ) + + + NNSG2dCellOAMAttrData* pOamAttrArray; // Pointer to the NNSG2dCellOAMAttrData array + +} +NNSG2dCellData; + +typedef struct NNSG2dCellDataBank +{ + u16 numCells; // Total number of cells + u16 cellBankAttr; // Attribute + NNSG2dCellData* pCellDataArrayHead; // offset address + NNSG2dCharacterDataMapingType mappingMode; // Mapping mode of the referenced character + + NNSG2dVramTransferData* pVramTransferData; // Information related to Vram transfer animation + + void* pStringBank; // Character string bank + void* pExtendedData; // offset addr (if it exists) + + +} +NNSG2dCellDataBank; + +typedef enum NNSG2dAnimationPlayMode +{ + NNS_G2D_ANIMATIONPLAYMODE_INVALID = 0x0, // Disabled + NNS_G2D_ANIMATIONPLAYMODE_FORWARD, // one-time playback (forward) + NNS_G2D_ANIMATIONPLAYMODE_FORWARD_LOOP, // repeat playback (forward loop) + NNS_G2D_ANIMATIONPLAYMODE_REVERSE, // reverse playback (reverse (forward + backward)) + NNS_G2D_ANIMATIONPLAYMODE_REVERSE_LOOP, // reverse playback repeat (reverse (forward + backward) loop) + NNS_G2D_ANIMATIONPLAYMODE_MAX +} +NNSG2dAnimationPlayMode; + +typedef struct NNSG2dAnimFrameData +{ + void* pContent; // pointer to animation result + u16 frames; // animation frame continuation time (units: video frames) + u16 pad16; // padding + +} +NNSG2dAnimFrameData; + +typedef struct NNSG2dAnimSequenceData +{ + u16 numFrames; // number of animation frames forming the sequence + u16 loopStartFrameIdx; // loop start animation frame number + + u32 animType; // animation type (upper 16 bits) + // animation elements (lower 16 bits) + // (What's referenced by NNSG2dAnimFrameData.pContent is changed) + + NNSG2dAnimationPlayMode playMode; // animation sequence playback method + NNSG2dAnimFrameData* pAnmFrameArray; // offset from the head of pFrameArray. + +} +NNSG2dAnimSequenceData; + +typedef struct NNSG2dAnimBankData +{ + + u16 numSequences; // number of animation sequences + u16 numTotalFrames; // total number of animation frames + NNSG2dAnimSequenceData* pSequenceArrayHead; // pointer to animation sequence array + NNSG2dAnimFrameData* pFrameArrayHead; // pointer to animation frame array + void* pAnimContents; // pointer to animation result array + void* pStringBank; // pointer to string bank (set during execution) + void* pExtendedData; // pointer to library expansion area (not used) + +} +NNSG2dAnimBankData; + + BOOL NNS_G2dGetUnpackedBGCharacterData( void* pNcgrFile, NNSG2dCharacterData** ppCharData ); BOOL NNS_G2dGetUnpackedCharacterData( void* pNcgrFile, NNSG2dCharacterData** ppCharData ); BOOL NNS_G2dGetUnpackedScreenData( void* pNscrFile, NNSG2dScreenData** ppScrData ); BOOL NNS_G2dGetUnpackedPaletteData( void* pNclrFile, NNSG2dPaletteData** ppPltData ); BOOL NNS_G2dGetUnpackedPaletteData( void* pNclrFile, NNSG2dPaletteData** ppPltData ); BOOL NNS_G2dGetUnpackedPaletteCompressInfo( void* pNclrFile, NNSG2dPaletteCompressInfo** ppPltCmpInfo ); +BOOL NNS_G2dGetUnpackedCellBank( void* pNcerFile, NNSG2dCellDataBank** ppCellBank ); +BOOL NNS_G2dGetUnpackedAnimBank( void* pNanrFile, NNSG2dAnimBankData** ppAnimBank ); #endif //NNSYS_NNS_G2D_H -- cgit v1.2.3