Merge pull request #53 from cellos51/fixed-sprite-vram-optimizations (Re-applied sprite vram optimizations after blind sprite fix)

This commit is contained in:
MeirGavish
2025-07-24 11:27:33 +03:00
committed by GitHub
5 changed files with 26 additions and 14 deletions
+4 -3
View File
@@ -18,9 +18,10 @@ static const int ante_lut[MAX_ANTE + 1] = {100, 300, 800, 2000, 5000, 11000, 200
#define BIG_BLIND_PB 2 #define BIG_BLIND_PB 2
#define BOSS_BLIND_PB 3 #define BOSS_BLIND_PB 3
#define SMALL_BLIND_TID 832 #define BLIND_SPRITE_OFFSET 16
#define BIG_BLIND_TID (SMALL_BLIND_TID + 16) #define SMALL_BLIND_TID 960
#define BOSS_BLIND_TID (BIG_BLIND_TID + 16) #define BIG_BLIND_TID (BLIND_SPRITE_OFFSET + SMALL_BLIND_TID)
#define BOSS_BLIND_TID (BLIND_SPRITE_OFFSET + BIG_BLIND_TID)
#define BLIND_TEXT_COLOR_INDEX 1 #define BLIND_TEXT_COLOR_INDEX 1
#define BLIND_SHADOW_COLOR_INDEX 2 #define BLIND_SHADOW_COLOR_INDEX 2
+5
View File
@@ -6,6 +6,11 @@
#include "sprite.h" #include "sprite.h"
#define CARD_TID 0
#define CARD_SPRITE_OFFSET 16
#define CARD_PB 0
#define CARD_STARTING_LAYER 0
// Card suits // Card suits
#define HEARTS 0 #define HEARTS 0
#define CLUBS 1 #define CLUBS 1
+6 -5
View File
@@ -1,15 +1,16 @@
#ifndef JOKER_H #ifndef JOKER_H
#define JOKER_H #define JOKER_H
#define JOKER_TID 880 // Tile ID for the starting index in the tile memory
#define JOKER_SPRITE_OFFSET 16 // Offset for the joker sprites
#define JOKER_PB 4 // Palette bank for the default jokers
#define JOKER_STARTING_LAYER 27
#include <maxmod.h> #include <maxmod.h>
#include "sprite.h" #include "sprite.h"
#include "card.h" #include "card.h"
#include "game.h"
#define JOKER_TID (MAX_HAND_SIZE + MAX_SELECTION_SIZE) * JOKER_SPRITE_OFFSET // Tile ID for the starting index in the tile memory
#define JOKER_SPRITE_OFFSET 16 // Offset for the joker sprites
#define JOKER_PB 4 // Palette bank for the default jokers
#define JOKER_STARTING_LAYER 27
#define BASE_EDITION 0 #define BASE_EDITION 0
#define FOIL_EDITION 1 #define FOIL_EDITION 1
+5 -3
View File
@@ -4,6 +4,7 @@
#include <stdlib.h> #include <stdlib.h>
#include "deck_gfx.h" #include "deck_gfx.h"
#include "graphic_utils.h"
// Audio // Audio
#include "soundbank.h" #include "soundbank.h"
@@ -18,8 +19,7 @@ const static u16 card_sprite_lut[NUM_SUITS][NUM_RANKS] = {
void card_init() void card_init()
{ {
GRIT_CPY(&tile_mem[4], deck_gfxTiles); GRIT_CPY(&pal_obj_mem[CARD_PB], deck_gfxPal);
GRIT_CPY(pal_obj_mem, deck_gfxPal);
} }
// Card methods // Card methods
@@ -149,8 +149,10 @@ void card_object_update(CardObject *card_object)
void card_object_set_sprite(CardObject *card_object, int layer) void card_object_set_sprite(CardObject *card_object, int layer)
{ {
int tile_index = CARD_TID + (layer * CARD_SPRITE_OFFSET);
memcpy32(&tile_mem[4][tile_index], &deck_gfxTiles[card_sprite_lut[card_object->card->suit][card_object->card->rank] * TILE_SIZE], TILE_SIZE * CARD_SPRITE_OFFSET);
sprite_destroy(&card_object->sprite); // Destroy the old sprite if it exists sprite_destroy(&card_object->sprite); // Destroy the old sprite if it exists
card_object->sprite = sprite_new(ATTR0_SQUARE | ATTR0_4BPP | ATTR0_AFF, ATTR1_SIZE_32, card_sprite_lut[card_object->card->suit][card_object->card->rank], 0, layer); card_object->sprite = sprite_new(ATTR0_SQUARE | ATTR0_4BPP | ATTR0_AFF, ATTR1_SIZE_32, tile_index, 0, layer + CARD_STARTING_LAYER);
} }
void card_object_shake(CardObject *card_object, mm_word sound_id) void card_object_shake(CardObject *card_object, mm_word sound_id)
+6 -3
View File
@@ -36,8 +36,7 @@ static bool used_layers[MAX_JOKER_OBJECTS] = {false}; // Track used layers for j
void joker_init() void joker_init()
{ {
GRIT_CPY(&tile_mem[4][JOKER_TID], joker_gfxTiles); GRIT_CPY(&pal_obj_mem[PAL_ROW_LEN * JOKER_PB], joker_gfxPal);
memcpy16(&pal_obj_mem[PAL_ROW_LEN * JOKER_PB], joker_gfxPal, sizeof(joker_gfxPal) / 2);
} }
Joker *joker_new(u8 id) Joker *joker_new(u8 id)
@@ -100,14 +99,18 @@ JokerObject *joker_object_new(Joker *joker)
} }
joker_object->joker = joker; joker_object->joker = joker;
int tile_index = JOKER_TID + (layer * JOKER_SPRITE_OFFSET);
memcpy32(&tile_mem[4][tile_index], &joker_gfxTiles[joker->id * TILE_SIZE * JOKER_SPRITE_OFFSET], TILE_SIZE * JOKER_SPRITE_OFFSET);
joker_object->sprite = sprite_new joker_object->sprite = sprite_new
( (
ATTR0_SQUARE | ATTR0_4BPP | ATTR0_AFF, ATTR0_SQUARE | ATTR0_4BPP | ATTR0_AFF,
ATTR1_SIZE_32, ATTR1_SIZE_32,
JOKER_TID + (JOKER_SPRITE_OFFSET * joker->id), tile_index,
JOKER_PB, JOKER_PB,
JOKER_STARTING_LAYER + layer JOKER_STARTING_LAYER + layer
); );
joker_object->tx = 0; // Target position joker_object->tx = 0; // Target position
joker_object->ty = 0; joker_object->ty = 0;
joker_object->x = 0; joker_object->x = 0;