Merge branch 'main' into graphic_changes

This commit is contained in:
MeirGavish
2025-06-30 13:26:44 +03:00
11 changed files with 99 additions and 19 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+1 -1
View File
@@ -1 +1 @@
-gB8 -mR8 -mRtf -p!
-gB4 -Mw4 -Mh4 -p!
Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 B

After

Width:  |  Height:  |  Size: 597 B

+1 -1
View File
@@ -1 +1 @@
-gB4 -Mw4 -Mh4
-gB4 -Mw4 -Mh4 -m!
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

+17
View File
@@ -0,0 +1,17 @@
#ifndef BLIND_H
#define BLIND_H
#include "sprite.h"
enum BlindType
{
SMALL_BLIND,
BIG_BLIND,
BOSS_BLIND
};
void blinds_init();
Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index);
#endif // BLIND_H
+39
View File
@@ -0,0 +1,39 @@
#include <tonc.h>
#include "blind.h"
#include "blinds_gfx.h"
void blinds_init()
{
// Blind graphics
// Small Blind (fighting grit every step of the way as usual)
//memcpy(&tile_mem[4][832], blinds_gfxTiles, blinds_gfxTilesLen);
GRIT_CPY(&tile_mem[4][832], blinds_gfxTiles);
const u16 small_blind_token_palette[4] = {0x7FFF, 0x34A1, 0x5DCB, 0x5104};
memcpy16(&pal_obj_mem[17], &small_blind_token_palette, sizeof(small_blind_token_palette) / 2);
}
Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index)
{
Sprite *sprite = NULL;
switch (type)
{
case SMALL_BLIND:
sprite = sprite_new(ATTR0_SQUARE | ATTR0_4BPP, ATTR1_SIZE_32x32, 832, 1, sprite_index);
break;
case BIG_BLIND:
// Use the big blind sprite
break;
case BOSS_BLIND:
// Use the boss blind sprite
break;
default:
return NULL;
}
sprite_position(sprite, x, y);
return sprite;
}
+1 -1
View File
@@ -7,7 +7,7 @@
#include "soundbank.h"
// Card sprites lookup table. First index is the suit, second index is the rank. The value is the tile index.
const static u16 card_sprite_lut[4][13] = {
const static u16 card_sprite_lut[NUM_SUITS][NUM_RANKS] = {
{0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192},
{208, 224, 240, 256, 272, 288, 304, 320, 336, 352, 368, 384, 400},
{416, 432, 448, 464, 480, 496, 512, 528, 544, 560, 576, 592, 608},
+22 -1
View File
@@ -7,6 +7,7 @@
#include "sprite.h"
#include "card.h"
#include "blind.h"
#include "background_gfx.h"
#include "background_play_gfx.h"
@@ -18,12 +19,15 @@ static int timer = 1; // This might already exist in libtonc but idk so i'm just
static int game_speed = 1;
static int background = 0;
static enum GameState game_state = GAME_PLAYING;
static enum GameState game_state = GAME_ROUND_END;
static enum HandState hand_state = HAND_DRAW;
static enum PlayState play_state = PLAY_PLAYING;
static enum HandType hand_type = NONE;
static Sprite *playing_blind_token = NULL; // The sprite that displays the blind when in "GAME_PLAYING/GAME_ROUND_END" state
static Sprite *round_end_blind_token = NULL; // The sprite that displays the blind when in "GAME_ROUND_END" state
static int hands = 4;
static int discards = 4;
@@ -549,6 +553,10 @@ void deck_shuffle()
// Game functions
void game_init()
{
playing_blind_token = blind_token_new(SMALL_BLIND, 8, 18, 33); // Create the blind token sprite at the top left corner
round_end_blind_token = blind_token_new(SMALL_BLIND, 82, 78, 34); // Create the blind token sprite for round end
obj_hide(round_end_blind_token->obj); // Hide the blind token sprite for now
// Fill the deck with all the cards. Later on this can be replaced with a more dynamic system that allows for different decks and card types.
for (int suit = 0; suit < NUM_SUITS; suit++)
{
@@ -1304,6 +1312,19 @@ void game_round_end()
const unsigned short tile_map5[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0401};
memcpy(&se_mem[31][8 + 32 * y], tile_map5, sizeof(tile_map5));
}
else if (timer_offset == 30)
{
obj_unhide(round_end_blind_token->obj, 0);
tte_printf("#{P:112,88; cx:0xE000}%d", blind_requirement);
int y = 12;
unsigned short tile_map3[17] = {se_mem[31][8 + 32 * (y - 1)], 0x0001, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0401};
memcpy(&se_mem[31][8 + 32 * (y - 1)], tile_map3, sizeof(tile_map3));
const unsigned short tile_map4[17] = {se_mem[31][8 + 32 * y], 0x0001, 0x0054, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0454, 0x0401};
memcpy(&se_mem[31][8 + 32 * y], tile_map4, sizeof(tile_map4));
}
}
}
+18 -15
View File
@@ -5,12 +5,13 @@
#include "sprite.h"
#include "card.h"
#include "game.h"
#include "blind.h"
// Graphics
#include "deck_gfx.h"
#include "background_gfx.h"
#include "background_play_gfx.h"
#include "nums.h"
#include "affine_background_gfx.h"
// Audio
#include "soundbank.h"
@@ -25,16 +26,16 @@ void init_map() // Temp function ripped from libtonc example
{
// Grit is fucking garbage and doesn't allow you to have a palette offset, they all get loaded at 0x0000. I have no manually change each tile's palette bank
unsigned int correctedTiles[numsTilesLen / 4];
for (int i = 0; i < numsTilesLen / 4; i++)
unsigned int correctedTiles[affine_background_gfxTilesLen / 4];
for (int i = 0; i < affine_background_gfxTilesLen / 4; i++)
{
correctedTiles[i] = numsTiles[i] | 0xF0F0F0F0; // I brute forced this. I have no idea how this would and does work, but it does. We'll just leave this here for now.
correctedTiles[i] = affine_background_gfxTiles[i] | 0xF0F0F0F0; // I brute forced this. I have no idea how this would and does work, but it does. We'll just leave this here for now.
// Actually for future reference, each number seems to equate to an XY on the palette, so 0xF0F0F0F0 would just push everything down 15 colors, since the second number isn't set.
}
memcpy(&tile8_mem[2], correctedTiles, numsTilesLen);
GRIT_CPY(&se_mem[2], numsMap);
memcpy16(&pal_bg_mem[16 * 15], numsPal, 5);
memcpy(&tile8_mem[2], correctedTiles, affine_background_gfxTilesLen);
GRIT_CPY(&se_mem[2], affine_background_gfxMap);
memcpy16(&pal_bg_mem[16 * 15], affine_background_gfxPal, 5);
bgaff = bg_aff_default;
}
@@ -62,12 +63,12 @@ void init()
// Load the tiles and palette
// Background
memcpy(pal_bg_mem, background_gfxPal, 64); // This '64" isn't a specific number, I'm just using it to prevent the text colors from being overridden
memcpy(&tile8_mem[1], background_gfxTiles, background_gfxTilesLen); // Deadass i have no clue how any of these memory things work but I just messed with them until stuff worked
memcpy(&se_mem[31], background_gfxMap, background_gfxMapLen);
GRIT_CPY(&tile8_mem[1], background_gfxTiles); // Deadass i have no clue how any of these memory things work but I just messed with them until stuff worked
GRIT_CPY(&se_mem[31], background_gfxMap);
// Deck graphics
memcpy(&tile_mem[4], deck_gfxTiles, deck_gfxTilesLen);
memcpy(pal_obj_mem, deck_gfxPal, deck_gfxPalLen);
GRIT_CPY(&tile_mem[4], deck_gfxTiles);
GRIT_CPY(pal_obj_mem, deck_gfxPal);
// Set up the video mode
REG_BG0CNT = BG_PRIO(0) | BG_CBB(0) | BG_SBB(30) | BG_4BPP;
@@ -103,6 +104,7 @@ void init()
// Initialize subsystems
sprite_init();
blinds_init();
game_init();
}
@@ -110,12 +112,13 @@ void background_update() // This needs to be called before update() and draw() b
{
static uint timer = 0;
timer++;
asx.alpha += 30;
asx.tex_x += 78;
// These values are not permament, just the current configuration for the affine background
asx.tex_x += 5;
asx.tex_y += 12;
asx.sx = (lu_sin(timer * 100) * 4 ) >> 8; // Scale the sine value to fit in a s16
asx.sx = (lu_sin(timer * 100)) >> 8; // Scale the sine value to fit in a s16
asx.sx += 256; // Add 256 to the sine value to make it positive
asx.sy = (lu_sin(timer * 100 + 0x4000) * 4 ) >> 8; // Scale the sine value to fit in a s16
asx.sy = (lu_sin(timer * 100 + 0x4000)) >> 8; // Scale the sine value to fit in a s16
asx.sy += 256; // Add 256 to the sine value to make it positive
bg_rotscale_ex(&bgaff, &asx);
REG_BG_AFFINE[2]= bgaff;