This commit is contained in:
cawtds 2026-03-22 02:44:02 +01:00
parent 86429796b2
commit a43a49a927
5 changed files with 413 additions and 721 deletions

View File

@ -1,266 +0,0 @@
.macro loadsprite id
.byte 0x00
.2byte \id
.endm
.macro unloadsprite id
.byte 0x01
.2byte \id
.endm
.macro sprite template, priority, argv:vararg
.byte 0x02
.4byte \template
.byte \priority
.byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2
.Lsprite_\@_1:
.2byte \argv
.Lsprite_\@_2:
.endm
.macro createtask addr, priority, argv:vararg
.byte 0x03
.4byte \addr
.byte \priority
.byte (.Lcreatetask_\@_2 - .Lcreatetask_\@_1) / 2
.Lcreatetask_\@_1:
.2byte \argv
.Lcreatetask_\@_2:
.endm
.macro pause delay
.byte 0x04
.byte \delay
.endm
.macro wait
.byte 0x05
.endm
.macro hang1
.byte 0x06
.endm
.macro hang2
.byte 0x07
.endm
.macro end
.byte 0x08
.endm
.macro playse id
.byte 0x09
.2byte \id
.endm
.macro monbg which
.byte 0x0A
.byte \which
.endm
.macro clearmonbg which
.byte 0x0B
.byte \which
.endm
.macro setalpha eva, evb
.byte 0x0C
.2byte ((\evb) << 8) | (\eva)
.endm
.macro blendoff
.byte 0x0D
.endm
.macro call addr
.byte 0x0E
.4byte \addr
.endm
.macro ret
.byte 0x0F
.endm
.macro setvar var_num, value
.byte 0x10
.byte \var_num
.2byte \value
.endm
.macro ifelse addr1, addr2
.byte 0x11
.4byte \addr1
.4byte \addr2
.endm
.macro jumpif cond, addr
.byte 0x12
.byte \cond
.4byte \addr
.endm
.macro jump addr
.byte 0x13
.4byte \addr
.endm
.macro fadetobg id
.byte 0x14
.byte \id
.endm
.macro restorebg
.byte 0x15
.endm
.macro waitbgfadeout
.byte 0x16
.endm
.macro waitbgfadein
.byte 0x17
.endm
.macro changebg id
.byte 0x18
.byte \id
.endm
.macro panse_19 id, pan
.byte 0x19
.2byte \id
.byte \pan
.endm
.macro setpan pan
.byte 0x1A
.byte \pan
.endm
.macro panse_1B id, pan_start, pan_end, step, delay
.byte 0x1B
.2byte \id
.byte \pan_start
.byte \pan_end
.byte \step
.byte \delay
.endm
.macro panse_1C id, pan, delay, count
.byte 0x1C
.2byte \id
.byte \pan
.byte \delay
.byte \count
.endm
.macro panse_1D id, pan, count
.byte 0x1D
.2byte \id
.byte \pan
.byte \count
.endm
.macro setbldcnt bldcnt
.byte 0x1E
.2byte \bldcnt
.endm
.macro createtask_1F addr, argv:vararg
.byte 0x1F
.4byte \addr
.byte (.Lcreatetask_1F_\@_2 - .Lcreatetask_1F_\@_1) / 2
.Lcreatetask_1F_\@_1:
.2byte \argv
.Lcreatetask_1F_\@_2:
.endm
.macro waitsound
.byte 0x20
.endm
.macro jumpvareq var_num, value, addr
.byte 0x21
.byte \var_num
.2byte \value
.4byte \addr
.endm
.macro monbg_22 unk
.byte 0x22
.byte \unk
.endm
.macro clearmonbg_23 unk
.byte 0x23
.byte \unk
.endm
.macro jumpunkcond addr
.byte 0x24
.4byte \addr
.endm
.macro fadetobg_25 a, b, c
.byte 0x25
.byte \a
.byte \b
.byte \c
.endm
.macro panse_26 id, pan_start, pan_end, step, delay
.byte 0x26
.2byte \id
.byte \pan_start
.byte \pan_end
.byte \step
.byte \delay
.endm
.macro panse_27 id, pan_start, pan_end, step, delay
.byte 0x27
.2byte \id
.byte \pan_start
.byte \pan_end
.byte \step
.byte \delay
.endm
.macro monbgprio_28 unk
.byte 0x28
.byte \unk
.endm
.macro monbgprio_29
.byte 0x29
.endm
.macro monbgprio_2A unk
.byte 0x2A
.byte \unk
.endm
.macro invisible side
.byte 0x2B
.byte \side
.endm
.macro visible side
.byte 0x2C
.byte \side
.endm
.macro doublebattle_2D unk
.byte 0x2D
.byte \unk
.endm
.macro doublebattle_2E unk
.byte 0x2E
.byte \unk
.endm
.macro stopsound
.byte 0x2F
.endm

View File

@ -11,18 +11,6 @@ struct BGCntrlBitfield // for the I/O registers
volatile u16 screenSize:2;
};
enum
{
BG_CTRL_ATTR_VISIBLE = 1,
BG_CTRL_ATTR_CHARBASEINDEX = 2,
BG_CTRL_ATTR_MAPBASEINDEX = 3,
BG_CTRL_ATTR_SCREENSIZE = 4,
BG_CTRL_ATTR_PALETTEMODE = 5,
BG_CTRL_ATTR_PRIORITY = 6,
BG_CTRL_ATTR_MOSAIC = 7,
BG_CTRL_ATTR_WRAPAROUND = 8,
};
enum
{
BG_ATTR_CHARBASEINDEX = 1,
@ -73,52 +61,48 @@ struct BgTemplate
};
void ResetBgs(void);
u8 GetBgMode(void);
u32 GetBgMode(void);
void ResetBgControlStructs(void);
void Unused_ResetBgControlStruct(u8 bg);
void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound);
u16 GetBgControlAttribute(u8 bg, u8 attributeId);
u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode);
u8 LoadBgVram(u32 bg, const void *src, u16 size, u16 destOffset, u32 mode);
void SetTextModeAndHideBgs(void);
bool8 IsInvalidBg(u8 bg);
bool32 IsInvalidBg(u32 bg);
int BgTileAllocOp(int bg, int offset, int count, int mode);
void ResetBgsAndClearDma3BusyFlags(bool32 enableWindowTileAutoAlloc);
void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates);
void InitBgsFromTemplates(u32 bgMode, const struct BgTemplate *templates, u8 numTemplates);
void InitBgFromTemplate(const struct BgTemplate *template);
void SetBgMode(u8 bgMode);
u16 LoadBgTiles(u8 bg, const void *src, u16 size, u16 destOffset);
u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset);
u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset);
bool8 IsDma3ManagerBusyWithBgCopy(void);
void ShowBg(u8 bg);
void HideBg(u8 bg);
void SetBgAttribute(u8 bg, u8 attributeId, u8 value);
u16 GetBgAttribute(u8 bg, u8 attributeId);
u32 ChangeBgX(u8 bg, u32 value, u8 op);
u32 GetBgX(u8 bg);
u32 ChangeBgY(u8 bg, u32 value, u8 op);
void SetBgMode(u32);
u16 LoadBgTiles(u32 bg, const void *src, u16 size, u16 destOffset);
u16 LoadBgTilemap(u32 bg, const void *src, u16 size, u16 destOffset);
u16 Unused_LoadBgPalette(u32 bg, const void *src, u16 size, u16 destOffset);
bool32 IsDma3ManagerBusyWithBgCopy(void);
void ShowBg(u32 bg);
void HideBg(u32 bg);
void SetBgAttribute(u32 bg, u32 attributeId, u8 value);
u16 GetBgAttribute(u32 bg, u32 attributeId);
s32 ChangeBgX(u32 bg, s32 value, u8 op);
s32 GetBgX(u32 bg);
s32 ChangeBgY(u32 bg, s32 value, u8 op);
s32 ChangeBgY_ScreenOff(u32 bg, s32 value, u8 op);
u32 GetBgY(u8 bg);
void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle);
s32 GetBgY(u32 bg);
void SetBgAffine(u32 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle);
u8 AdjustBgMosaic(u8 value, u8 mode);
void SetBgTilemapBuffer(u8 bg, void *tilemap);
void UnsetBgTilemapBuffer(u8 bg);
void *GetBgTilemapBuffer(u8 bg);
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset);
void SetBgTilemapBuffer(u32 bg, void *tilemap);
void UnsetBgTilemapBuffer(u32 bg);
void *GetBgTilemapBuffer(u32 bg);
void CopyToBgTilemapBuffer(u32 bg, const void *src, u32 mode, u32 destOffset);
void DecompressAndCopyToBgTilemapBuffer(u32 bg, const u32 *src, u32 mode, u32 destOffset);
void CopyBgTilemapBufferToVram(u8 bg);
void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height);
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2);
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta);
u16 GetBgMetricTextMode(u8 bg, u8 whichMetric);
u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric);
void CopyBgTilemapBufferToVram(u32 bg);
void CopyToBgTilemapBufferRect(u32 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height);
void CopyToBgTilemapBufferRect_ChangePalette(u32 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
void CopyRectToBgTilemapBufferRect(u32 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2);
void FillBgTilemapBufferRect_Palette0(u32 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
void FillBgTilemapBufferRect(u32 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
void WriteSequenceToBgTilemapBuffer(u32 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta);
u16 GetBgMetricTextMode(u32 bg, u32 whichMetric);
u32 GetBgMetricAffineMode(u32 bg, u32 whichMetric);
u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight);
void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2);
u32 GetBgType(u8 bg);
bool32 IsInvalidBg32(u8 bg);
bool32 IsTileMapOutsideWram(u8 bg);
bool32 IsInvalidBg32(u32 bg);
bool32 IsTileMapOutsideWram(u32 bg);
#endif // GUARD_BG_H

View File

@ -1092,12 +1092,12 @@ void MoveBattlerSpriteToBG(enum BattlerId battler, bool8 toBG_2, bool8 setSprite
else
{
RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(8)), 0x2000, DMA3_32BIT);
RequestDma3Fill(0, (void *)(BG_SCREEN_ADDR(28)), 0x1000, DMA3_32BIT);
RequestDma3Fill(0xFF, (void *)(BG_SCREEN_ADDR(28)), 0x1000, DMA3_16BIT);
}
GetBattleAnimBg1Data(&animBg);
CpuFill16(toBG_2, animBg.bgTiles, 0x1000);
CpuFill16(toBG_2, animBg.bgTilemap, 0x800);
CpuFill16(0, animBg.bgTiles, 0x1000);
CpuFill16(0, animBg.bgTilemap, 0x800);
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 2);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);

778
src/bg.c

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
#include "decompress.h"
COMMON_DATA void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS] = {0};
extern u32 gWindowTileAutoAllocEnabled;
extern bool32 gWindowTileAutoAllocEnabled;
EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};