From ba6cbb267b65c8e7f5630561b5cb13caefbb60d9 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Fri, 14 Feb 2025 22:26:57 +0100 Subject: [PATCH] sync sprite.c/h --- include/sprite.h | 40 +++++---- src/item_menu.c | 5 +- src/sprite.c | 211 ++++++++++++++++++++++------------------------- 3 files changed, 128 insertions(+), 128 deletions(-) diff --git a/include/sprite.h b/include/sprite.h index c132554b0..138c2ea50 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -1,6 +1,7 @@ #ifndef GUARD_SPRITE_H #define GUARD_SPRITE_H +#define OAM_MATRIX_COUNT 32 #define MAX_SPRITES 64 #define SPRITE_NONE 0xFF #define TAG_NONE 0xFFFF @@ -30,6 +31,7 @@ struct SpriteFrameImage }; #define obj_frame_tiles(ptr) {.data = (u8 *)ptr, .size = sizeof ptr} + #define overworld_frame(ptr, width, height, frame) {.data = (u8 *)ptr + (width * height * frame * 64)/2, .size = (width * height * 64)/2} #define overworld_ascending_frames(ptr, width, height) {.data = (u8 *)ptr, .size = (width * height * 64)/2, .relativeFrames=TRUE} @@ -120,7 +122,7 @@ union AffineAnimCmd struct AffineAnimFrameCmd frame; struct AffineAnimLoopCmd loop; struct AffineAnimJumpCmd jump; - struct AffineAnimEndCmdAlt end; + struct AffineAnimEndCmdAlt end; // unused in code }; #define AFFINEANIMCMDTYPE_LOOP 0x7FFD @@ -187,6 +189,10 @@ struct SpriteTemplate SpriteCallback callback; }; +// UB: template pointer is often used to point to temporary storage, +// then later dereferenced after being freed. Usually this won't +// be visible in-game, but this is (part of) what causes the item +// icon palette to flicker when changing items in the bag. struct Sprite { /*0x00*/ struct OamData oam; @@ -252,24 +258,26 @@ struct OamMatrix extern const struct OamData gDummyOamData; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; +extern const struct SpriteTemplate gDummySpriteTemplate; + +extern u8 gReservedSpritePaletteCount; +extern struct Sprite gSprites[MAX_SPRITES + 1]; +extern u8 gOamLimit; +extern u16 gReservedSpriteTileCount; extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; -extern const struct SpriteTemplate gDummySpriteTemplate; -extern struct Sprite gSprites[]; -extern u8 gOamLimit; -extern struct OamMatrix gOamMatrices[]; +extern struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT]; extern bool8 gAffineAnimsDisabled; -extern u16 gReservedSpriteTileCount; void ResetSpriteData(void); void AnimateSprites(void); void BuildOamBuffer(void); -u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); -u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); -u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)); +u32 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); +u32 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); +u32 CreateInvisibleSprite(void (*callback)(struct Sprite *)); u32 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); void DestroySprite(struct Sprite *sprite); -void ResetOamRange(u32 a, u32 b); +void ResetOamRange(u32 start, u32 end); void LoadOam(void); void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d); void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode); @@ -281,6 +289,7 @@ void FreeSpritePalette(struct Sprite *sprite); void FreeSpriteOamMatrix(struct Sprite *sprite); void DestroySpriteAndFreeResources(struct Sprite *sprite); void AnimateSprite(struct Sprite *sprite); +void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y); void StartSpriteAnim(struct Sprite *sprite, u8 animNum); void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum); void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex); @@ -299,6 +308,8 @@ void LoadSpriteSheets(const struct SpriteSheet *sheets); s16 AllocSpriteTiles(u16 tileCount); u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet); void AllocTilesForSpriteSheets(struct SpriteSheet *sheets); +void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet); +void LoadTilesForSpriteSheets(struct SpriteSheet *sheets); void FreeSpriteTilesByTag(u16 tag); void FreeSpriteTileRanges(void); u16 GetSpriteTileStartByTag(u16 tag); @@ -306,10 +317,10 @@ u16 GetSpriteTileTagByTileStart(u16 start); void RequestSpriteSheetCopy(const struct SpriteSheet *sheet); u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet); void FreeAllSpritePalettes(void); -u8 LoadSpritePalette(const struct SpritePalette *palette); +u32 LoadSpritePalette(const struct SpritePalette *palette); void LoadSpritePalettes(const struct SpritePalette *palettes); -u8 AllocSpritePalette(u16 tag); -u8 IndexOfSpritePaletteTag(u16 tag); +u32 AllocSpritePalette(u16 tag); +u32 IndexOfSpritePaletteTag(u16 tag); u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum); void FreeSpritePaletteByTag(u16 tag); void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables); @@ -320,7 +331,8 @@ void CopyFromSprites(u8 *dest); u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); void ClearSpriteCopyRequests(void); void ResetAffineAnimData(void); -void SetSpriteMatrixAnchor(struct Sprite* sprite, s16 xmod, s16 ymod); u32 GetSpanPerImage(u32 shape, u32 size); +void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); +void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); #endif //GUARD_SPRITE_H diff --git a/src/item_menu.c b/src/item_menu.c index 7c566ba28..e0177d368 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -669,11 +669,14 @@ static void Bag_BuildListMenuTemplate(u8 pocket) static void BagListMenuGetItemNameColored(u8 *dest, u16 itemId) { + u8* end; if (itemId == ITEM_TM_CASE || itemId == ITEM_BERRY_POUCH) StringCopy(dest, sListItemTextColor_TmCase_BerryPouch); else StringCopy(dest, sListItemTextColor_RegularItem); - StringAppend(dest, ItemId_GetName(itemId)); + + end = StringAppend(dest, ItemId_GetName(itemId)); + PrependFontIdToFit(dest, end, FONT_NARROW, 61); } static void BagListMenuMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) diff --git a/src/sprite.c b/src/sprite.c index 9a1bffe5d..eb458cb61 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -5,8 +5,6 @@ #define MAX_SPRITE_COPY_REQUESTS 64 -#define OAM_MATRIX_COUNT 32 - #define sAnchorX data[6] #define sAnchorY data[7] @@ -16,17 +14,17 @@ (sSpriteTileRanges + 1)[index * 2] = count; \ } -#define ALLOC_SPRITE_TILE(n) \ +#define ALLOC_SPRITE_TILE(n) \ +{ \ + sSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \ +} + +#define FREE_SPRITE_TILE(n) \ { \ - gSpriteTileAllocBitmap[(n) >> 3] |= (1 << ((n) & 7)); \ + sSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \ } -#define FREE_SPRITE_TILE(n) \ -{ \ - gSpriteTileAllocBitmap[(n) >> 3] &= ~(1 << ((n) & 7)); \ -} - -#define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) >> 3] >> ((n) & 7)) & 1) +#define SPRITE_TILE_IS_ALLOCATED(n) ((sSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) struct SpriteCopyRequest @@ -52,7 +50,6 @@ static void SortSprites(u32 *spritePriorities, s32 n); static u32 CreateSpriteAt(u32 index, const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); static void ResetOamMatrices(void); static void ResetSprite(struct Sprite *sprite); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); static void ResetAllSprites(void); static void BeginAnim(struct Sprite *sprite); static void ContinueAnim(struct Sprite *sprite); @@ -75,7 +72,6 @@ static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); static void AffineAnimStateRestartAnim(u8 matrixNum); static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); static void AffineAnimStateReset(u8 matrixNum); @@ -89,7 +85,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC static u8 IndexOfSpriteTileTag(u16 tag); static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); -static void UpdateSpriteMatrixAnchorPos(struct Sprite* sprite, s32 a1, s32 a2); +static void UpdateSpriteMatrixAnchorPos(struct Sprite *, s32, s32); typedef void (*AnimFunc)(struct Sprite *); typedef void (*AnimCmdFunc)(struct Sprite *); @@ -228,71 +224,54 @@ static const struct OamDimensions32 sOamDimensions32[3][4] = }, }; -static const s32 sOamDimensionsCopy[3][4][2] = -{ - [ST_OAM_SQUARE] = { - [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 - [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 - [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 - [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 - }, - [ST_OAM_H_RECTANGLE] = { - [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 - [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 - [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 - [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 - }, - [ST_OAM_V_RECTANGLE] = { - [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 - [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 - [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 - [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 - }, -}; - static const struct OamDimensions sOamDimensions[3][4] = { - [ST_OAM_SQUARE] = { - [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 - [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 - [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 - [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 + [ST_OAM_SQUARE] = + { + [SPRITE_SIZE(8x8)] = { 8, 8 }, + [SPRITE_SIZE(16x16)] = { 16, 16 }, + [SPRITE_SIZE(32x32)] = { 32, 32 }, + [SPRITE_SIZE(64x64)] = { 64, 64 }, }, - [ST_OAM_H_RECTANGLE] = { - [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 - [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 - [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 - [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 + [ST_OAM_H_RECTANGLE] = + { + [SPRITE_SIZE(16x8)] = { 16, 8 }, + [SPRITE_SIZE(32x8)] = { 32, 8 }, + [SPRITE_SIZE(32x16)] = { 32, 16 }, + [SPRITE_SIZE(64x32)] = { 64, 32 }, }, - [ST_OAM_V_RECTANGLE] = { - [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 - [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 - [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 - [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 + [ST_OAM_V_RECTANGLE] = + { + [SPRITE_SIZE(8x16)] = { 8, 16 }, + [SPRITE_SIZE(8x32)] = { 8, 32 }, + [SPRITE_SIZE(16x32)] = { 16, 32 }, + [SPRITE_SIZE(32x64)] = { 32, 64 }, }, }; +// iwram bss static u16 sSpriteTileRangeTags[MAX_SPRITES]; static u16 sSpriteTileRanges[MAX_SPRITES * 2]; static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; static u16 sSpritePaletteTags[16]; +// iwram common COMMON_DATA u32 gOamMatrixAllocBitmap = 0; COMMON_DATA u8 gReservedSpritePaletteCount = 0; EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; EWRAM_DATA static u8 sSpriteOrder[MAX_SPRITES] = {0}; -EWRAM_DATA bool8 gShouldProcessSpriteCopyRequests = 0; -EWRAM_DATA u8 gSpriteCopyRequestCount = 0; -EWRAM_DATA struct SpriteCopyRequest gSpriteCopyRequests[MAX_SPRITES] = {0}; +EWRAM_DATA static bool8 sShouldProcessSpriteCopyRequests = 0; +EWRAM_DATA static u8 sSpriteCopyRequestCount = 0; +EWRAM_DATA static struct SpriteCopyRequest sSpriteCopyRequests[MAX_SPRITES] = {0}; EWRAM_DATA u8 gOamLimit = 0; static EWRAM_DATA u8 sOamDummyIndex = 0; EWRAM_DATA u16 gReservedSpriteTileCount = 0; -EWRAM_DATA u8 gSpriteTileAllocBitmap[128] = {0}; +EWRAM_DATA static u8 sSpriteTileAllocBitmap[128] = {0}; EWRAM_DATA s16 gSpriteCoordOffsetX = 0; EWRAM_DATA s16 gSpriteCoordOffsetY = 0; EWRAM_DATA struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT] = {0}; -EWRAM_DATA bool8 gAffineAnimsDisabled = 0; +EWRAM_DATA bool8 gAffineAnimsDisabled = FALSE; void ResetSpriteData(void) { @@ -427,7 +406,7 @@ void BuildOamBuffer(void) } gMain.oamLoadDisabled = oamLoadDisabled; - gShouldProcessSpriteCopyRequests = TRUE; + sShouldProcessSpriteCopyRequests = TRUE; } static inline void InsertionSort(u32 *spritePriorities, s32 n) @@ -452,7 +431,7 @@ static void SortSprites(u32 *spritePriorities, s32 n) InsertionSort(spritePriorities, n); } -u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +u32 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority) { u32 i; @@ -463,7 +442,7 @@ u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subprior return MAX_SPRITES; } -u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) +u32 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority) { s32 i; @@ -474,7 +453,7 @@ u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 sub return MAX_SPRITES; } -u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)) +u32 CreateInvisibleSprite(void (*callback)(struct Sprite *)) { u32 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31); @@ -600,14 +579,14 @@ void ClearSpriteCopyRequests(void) { u32 i; - gShouldProcessSpriteCopyRequests = FALSE; - gSpriteCopyRequestCount = 0; + sShouldProcessSpriteCopyRequests = FALSE; + sSpriteCopyRequestCount = 0; for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++) { - gSpriteCopyRequests[i].src = 0; - gSpriteCopyRequests[i].dest = 0; - gSpriteCopyRequests[i].size = 0; + sSpriteCopyRequests[i].src = 0; + sSpriteCopyRequests[i].dest = 0; + sSpriteCopyRequests[i].size = 0; } } @@ -712,20 +691,20 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op) u8 val = bit % 8; u8 retVal = 0; - if (op == 0) // clear + if (op == 0) { val = ~(1 << val); - gSpriteTileAllocBitmap[index] &= val; + sSpriteTileAllocBitmap[index] &= val; } - else if (op == 1) // set + else if (op == 1) { val = (1 << val); - gSpriteTileAllocBitmap[index] |= val; + sSpriteTileAllocBitmap[index] |= val; } - else // check + else { retVal = 1 << shift; - retVal &= gSpriteTileAllocBitmap[index]; + retVal &= sSpriteTileAllocBitmap[index]; } return retVal; @@ -737,48 +716,48 @@ void SpriteCallbackDummy(struct Sprite *sprite) void ProcessSpriteCopyRequests(void) { - if (gShouldProcessSpriteCopyRequests) + if (sShouldProcessSpriteCopyRequests) { u8 i = 0; - while (gSpriteCopyRequestCount > 0) + while (sSpriteCopyRequestCount > 0) { - CpuCopy16(gSpriteCopyRequests[i].src, gSpriteCopyRequests[i].dest, gSpriteCopyRequests[i].size); - gSpriteCopyRequestCount--; + CpuCopy16(sSpriteCopyRequests[i].src, sSpriteCopyRequests[i].dest, sSpriteCopyRequests[i].size); + sSpriteCopyRequestCount--; i++; } - gShouldProcessSpriteCopyRequests = FALSE; + sShouldProcessSpriteCopyRequests = FALSE; } } void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) { - if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) + if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { if (!images[0].relativeFrames) { - gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data; - gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; + sSpriteCopyRequests[sSpriteCopyRequestCount].src = images[index].data; + sSpriteCopyRequests[sSpriteCopyRequestCount].size = images[index].size; } else { - gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[0].data + images[0].size * index; - gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[0].size; + sSpriteCopyRequests[sSpriteCopyRequestCount].src = images[0].data + images[0].size * index; + sSpriteCopyRequests[sSpriteCopyRequestCount].size = images[0].size; } - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; - gSpriteCopyRequestCount++; + sSpriteCopyRequests[sSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; + sSpriteCopyRequestCount++; } } void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) { - if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) + if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { - gSpriteCopyRequests[gSpriteCopyRequestCount].src = src; - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = dest; - gSpriteCopyRequests[gSpriteCopyRequestCount].size = size; - gSpriteCopyRequestCount++; + sSpriteCopyRequests[sSpriteCopyRequestCount].src = src; + sSpriteCopyRequests[sSpriteCopyRequestCount].dest = dest; + sSpriteCopyRequests[sSpriteCopyRequestCount].size = size; + sSpriteCopyRequestCount++; } } @@ -808,7 +787,7 @@ void CopyToSprites(u8 *src) void ResetAllSprites(void) { - u8 i; + u32 i; for (i = 0; i < MAX_SPRITES; i++) { @@ -1067,9 +1046,13 @@ void ContinueAffineAnim(struct Sprite *sprite) u8 matrixNum = GetSpriteMatrixNum(sprite); if (sAffineAnimStates[matrixNum].delayCounter) + { AffineAnimDelay(matrixNum, sprite); + } else if (sprite->affineAnimPaused) + { return; + } else { s16 type; @@ -1176,23 +1159,25 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite) return matrixNum; } -void SetSpriteMatrixAnchor(struct Sprite* sprite, s16 x, s16 y) +// Used to shift a sprite's position as it scales. +// Only used by the minigame countdown, so that for instance the numbers don't slide up as they squish down before jumping. +void SetSpriteMatrixAnchor(struct Sprite *sprite, s16 x, s16 y) { sprite->sAnchorX = x; sprite->sAnchorY = y; sprite->anchored = TRUE; } -static s32 GetAnchorCoord(s32 baseDim, s32 xformed, s32 modifier) +static s32 GetAnchorCoord(s32 a0, s32 a1, s32 coord) { - s32 subResult, shiftResult; + s32 subResult, var1; - subResult = xformed - baseDim; + subResult = a1 - a0; if (subResult < 0) - shiftResult = -(subResult) >> 9; + var1 = -(subResult) >> 9; else - shiftResult = -(subResult >> 9); - return modifier - ((u32)(modifier * xformed) / (u32)(baseDim) + shiftResult); + var1 = -(subResult >> 9); + return coord - ((u32)(coord * a1) / (u32)(a0) + var1); } static void UpdateSpriteMatrixAnchorPos(struct Sprite *sprite, s32 x, s32 y) @@ -1388,9 +1373,9 @@ void SetSpriteSheetFrameTileNum(struct Sprite *sprite) void ResetAffineAnimData(void) { - u8 i; + u32 i; - gAffineAnimsDisabled = 0; + gAffineAnimsDisabled = FALSE; gOamMatrixAllocBitmap = 0; ResetOamMatrices(); @@ -1497,7 +1482,7 @@ u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u32 frame, void LoadSpriteSheets(const struct SpriteSheet *sheets) { - u8 i; + u32 i; for (i = 0; sheets[i].data != NULL; i++) LoadSpriteSheet(&sheets[i]); } @@ -1526,7 +1511,7 @@ void FreeSpriteTilesByTag(u16 tag) void FreeSpriteTileRanges(void) { - u8 i; + u32 i; for (i = 0; i < MAX_SPRITES; i++) { @@ -1539,13 +1524,13 @@ u16 GetSpriteTileStartByTag(u16 tag) { u8 index = IndexOfSpriteTileTag(tag); if (index == 0xFF) - return TAG_NONE; + return 0xFFFF; return sSpriteTileRanges[index * 2]; } u8 IndexOfSpriteTileTag(u16 tag) { - u8 i; + u32 i; for (i = 0; i < MAX_SPRITES; i++) if (sSpriteTileRangeTags[i] == tag) @@ -1556,7 +1541,7 @@ u8 IndexOfSpriteTileTag(u16 tag) u16 GetSpriteTileTagByTileStart(u16 start) { - u8 i; + u32 i; for (i = 0; i < MAX_SPRITES; i++) { @@ -1576,15 +1561,15 @@ void AllocSpriteTileRange(u16 tag, u16 start, u16 count) void FreeAllSpritePalettes(void) { - u8 i; + u32 i; gReservedSpritePaletteCount = 0; - for (i = 0; i < ARRAY_COUNT(sSpritePaletteTags); i++) + for (i = 0; i < 16; i++) sSpritePaletteTags[i] = TAG_NONE; } -u8 LoadSpritePalette(const struct SpritePalette *palette) +u32 LoadSpritePalette(const struct SpritePalette *palette) { - u8 index = IndexOfSpritePaletteTag(palette->tag); + u32 index = IndexOfSpritePaletteTag(palette->tag); if (index != 0xFF) return index; @@ -1605,20 +1590,20 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) void LoadSpritePalettes(const struct SpritePalette *palettes) { - u8 i; + u32 i; for (i = 0; palettes[i].data != NULL; i++) if (LoadSpritePalette(&palettes[i]) == 0xFF) break; } -static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) +void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) { - LoadPalette(src, paletteOffset + OBJ_PLTT_OFFSET, PLTT_SIZE_4BPP); + LoadPalette(src, OBJ_PLTT_OFFSET + paletteOffset, PLTT_SIZE_4BPP); } -u8 AllocSpritePalette(u16 tag) +u32 AllocSpritePalette(u16 tag) { - u8 index = IndexOfSpritePaletteTag(TAG_NONE); + u32 index = IndexOfSpritePaletteTag(TAG_NONE); if (index == 0xFF) { return 0xFF; @@ -1630,9 +1615,9 @@ u8 AllocSpritePalette(u16 tag) } } -u8 IndexOfSpritePaletteTag(u16 tag) +u32 IndexOfSpritePaletteTag(u16 tag) { - u8 i; + u32 i; for (i = gReservedSpritePaletteCount; i < 16; i++) if (sSpritePaletteTags[i] == tag) return i;