Separate out graphics and add ability change boss

This commit is contained in:
Rickey Fehr
2025-10-13 23:36:27 -07:00
parent f885fa9164
commit ef048791c1
10 changed files with 61 additions and 32 deletions
+43 -18
View File
@@ -1,7 +1,9 @@
#include <tonc.h>
#include "blind.h"
#include "blinds_gfx.h"
#include "small_blind_gfx.h"
#include "big_blind_gfx.h"
#include "boss_blind_gfx.h"
#include "graphic_utils.h"
// +1 is added because we'll actually be indexing at 1, but if something causes you to go to ante 0, there will still be a value there.
@@ -13,13 +15,14 @@ static const u16 big_blind_token_palette[PAL_ROW_LEN] = {0x0000, 0x2527, 0x15F5,
static const u16 boss_blind_token_palette[PAL_ROW_LEN] = {0x0000, 0x2CC9, 0x3D0D, 0x5E14, 0x5171, 0x4D0F, 0x2CC8, 0x3089}; // This variable is temporary, each boss blind will have its own unique palette
static const Blind blindMap[BLIND_TYPE_MAX] =
static Blind _blind_type_map[BLIND_TYPE_MAX] =
{
#define BLIND_INFO(NAME, name, multi, _reward) \
{ \
.type = BLIND_TYPE_##NAME , \
.pal_info = \
.gfx_info = \
{ \
.tiles = name##_blind_gfxTiles, \
.palette = name##_blind_token_palette, \
.tid = NAME##_BLIND_TID, \
.pb = NAME##_BLIND_PB, \
@@ -27,48 +30,70 @@ static const Blind blindMap[BLIND_TYPE_MAX] =
.score_req_multipler = multi , \
.reward = _reward , \
},
BLIND_INFO_TABLE
BLIND_TYPE_INFO_TABLE
#undef BLIND_INFO
};
static void blind_gfx_init(enum BlindType type)
{
// TODO: Re-add grit copy. You need to decouple the blind graphics first.
// This will allow this function to change the boss graphics info
//GRIT_CPY(&tile_mem[4][_blind_type_map[type].pal_info.tid], tiles);
BlindGfxInfo* p_gfx = &_blind_type_map[type].gfx_info;
memcpy32(&tile_mem[4][p_gfx->tid], p_gfx->tiles, BLIND_SPRITE_COPY_SIZE);
memcpy16(&pal_obj_bank[p_gfx->pb], p_gfx->palette, PAL_ROW_LEN);
}
__attribute__((unused))
void blind_set_boss_graphics(const unsigned int* tiles, const u16* palette)
{
// TODO: This function is unused and not fully fleshed out.
// We need to support more boss blind graphics in the future.
// The idea here is that we can call this function to set the boss up to
// render new tiles
//
// This will eventually be in it's own map mapping graphic data to
// boss types.
_blind_type_map[BLIND_TYPE_BOSS].gfx_info.tiles = tiles;
_blind_type_map[BLIND_TYPE_BOSS].gfx_info.palette = palette;
blind_gfx_init(BLIND_TYPE_BOSS);
}
void blind_init()
{
// Blind graphics (fighting grit every step of the way as usual)
GRIT_CPY(&tile_mem[4][SMALL_BLIND_TID], blinds_gfxTiles);
for(int i = 0; i < BLIND_COUNT; i++)
for(int i = 0; i < BLIND_TYPE_MAX; i++)
{
const u16* pal = blindMap[i].pal_info.palette;
u32 pb = blindMap[i].pal_info.pb;
u32 pal_offset = PAL_ROW_LEN * pb;
memcpy16(&pal_obj_mem[pal_offset], pal, PAL_ROW_LEN);
blind_gfx_init(i);
}
return;
}
int blind_get_requirement(enum BlindType type, int ante)
{
if (ante < 0 || ante > MAX_ANTE) ante = 0; // Ensure ante is within valid range
return fx2int(blindMap[type].score_req_multipler * ante_lut[ante]);
return fx2int(_blind_type_map[type].score_req_multipler * ante_lut[ante]);
}
int blind_get_reward(enum BlindType type)
{
return blindMap[type].reward;
return _blind_type_map[type].reward;
}
u16 blind_get_color(enum BlindType type, enum BlindColorIndex index)
{
return blindMap[type].pal_info.palette[index];
return _blind_type_map[type].gfx_info.palette[index];
}
Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index)
{
u16 a0 = ATTR0_SQUARE | ATTR0_4BPP;
u16 a1 = ATTR1_SIZE_32x32;
u32 tid = blindMap[type].pal_info.tid, pb = blindMap[type].pal_info.pb;
u32 tid = _blind_type_map[type].gfx_info.tid, pb = _blind_type_map[type].gfx_info.pb;
Sprite* sprite = sprite_new(a0, a1, tid, pb, sprite_index);