[Fixed] Joker shop price not properly erased on purchase (#286)
This commit is contained in:
+11
-3
@@ -4,9 +4,11 @@
|
|||||||
#include <maxmod.h>
|
#include <maxmod.h>
|
||||||
#include <tonc.h>
|
#include <tonc.h>
|
||||||
|
|
||||||
#define CARD_SPRITE_SIZE 32
|
#define CARD_SPRITE_SIZE 32
|
||||||
#define MAX_SPRITES 128
|
#define MAX_AFFINES 32
|
||||||
#define MAX_SPRITE_OBJECTS 16
|
#define MAX_SPRITES 128
|
||||||
|
#define MAX_SPRITE_OBJECTS 16
|
||||||
|
#define SPRITE_FOCUS_RAISE_PX 10
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -39,6 +41,9 @@ Sprite* sprite_new(u16 a0, u16 a1, u32 tid, u32 pb, int sprite_index);
|
|||||||
Sprite* affine_sprite_new(u16 a0, u16 a1, u32 tid, u32 pb);
|
Sprite* affine_sprite_new(u16 a0, u16 a1, u32 tid, u32 pb);
|
||||||
void sprite_destroy(Sprite** sprite);
|
void sprite_destroy(Sprite** sprite);
|
||||||
int sprite_get_layer(Sprite* sprite);
|
int sprite_get_layer(Sprite* sprite);
|
||||||
|
bool sprite_get_dimensions(Sprite* sprite, int* width, int* height);
|
||||||
|
bool sprite_get_height(Sprite* sprite, int* height);
|
||||||
|
bool sprite_get_width(Sprite* sprite, int* width);
|
||||||
|
|
||||||
// Sprite functions
|
// Sprite functions
|
||||||
void sprite_init();
|
void sprite_init();
|
||||||
@@ -57,6 +62,9 @@ void sprite_object_set_selected(SpriteObject* sprite_object, bool selected);
|
|||||||
bool sprite_object_is_selected(SpriteObject* sprite_object);
|
bool sprite_object_is_selected(SpriteObject* sprite_object);
|
||||||
Sprite* sprite_object_get_sprite(SpriteObject* sprite_object);
|
Sprite* sprite_object_get_sprite(SpriteObject* sprite_object);
|
||||||
void sprite_object_set_focus(SpriteObject* sprite_object, bool focus);
|
void sprite_object_set_focus(SpriteObject* sprite_object, bool focus);
|
||||||
|
bool sprite_object_get_dimensions(SpriteObject* sprite_object, int* width, int* height);
|
||||||
|
bool sprite_object_get_height(SpriteObject* sprite_object, int* height);
|
||||||
|
bool sprite_object_get_width(SpriteObject* sprite_object, int* width);
|
||||||
bool sprite_object_is_focused(SpriteObject* sprite_object);
|
bool sprite_object_is_focused(SpriteObject* sprite_object);
|
||||||
|
|
||||||
INLINE void sprite_position(Sprite* sprite, int x, int y)
|
INLINE void sprite_position(Sprite* sprite, int x, int y)
|
||||||
|
|||||||
+23
-7
@@ -3517,22 +3517,38 @@ static void game_round_end_dismiss_round_end_panel()
|
|||||||
|
|
||||||
static void print_price_under_sprite_object(SpriteObject* sprite_object, int price)
|
static void print_price_under_sprite_object(SpriteObject* sprite_object, int price)
|
||||||
{
|
{
|
||||||
|
int height = 0;
|
||||||
|
|
||||||
|
if (sprite_object_get_height(sprite_object, &height) == false)
|
||||||
|
{
|
||||||
|
// fallback
|
||||||
|
height = CARD_SPRITE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
int x = fx2int(sprite_object->tx) + TILE_SIZE - (get_digits_even(price) - 1) * TILE_SIZE;
|
int x = fx2int(sprite_object->tx) + TILE_SIZE - (get_digits_even(price) - 1) * TILE_SIZE;
|
||||||
// TODO: Should probably extract the sprite size
|
int y = fx2int(sprite_object->ty) + height + TILE_SIZE;
|
||||||
int y = fx2int(sprite_object->ty) + CARD_SPRITE_SIZE + TILE_SIZE;
|
|
||||||
tte_printf("#{P:%d,%d; cx:0x%X000}$%d", x, y, TTE_YELLOW_PB, price);
|
tte_printf("#{P:%d,%d; cx:0x%X000}$%d", x, y, TTE_YELLOW_PB, price);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void erase_price_under_sprite_object(SpriteObject* sprite_object)
|
static void erase_price_under_sprite_object(SpriteObject* sprite_object)
|
||||||
{
|
{
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
|
||||||
|
if (sprite_object_get_dimensions(sprite_object, &width, &height) == false)
|
||||||
|
{
|
||||||
|
// fallback
|
||||||
|
height = CARD_SPRITE_SIZE;
|
||||||
|
width = CARD_SPRITE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
Rect price_rect;
|
Rect price_rect;
|
||||||
price_rect.left = fx2int(sprite_object->tx);
|
price_rect.left = fx2int(sprite_object->tx);
|
||||||
price_rect.top = fx2int(sprite_object->ty) + CARD_SPRITE_SIZE + TILE_SIZE;
|
price_rect.top = fx2int(sprite_object->ty) + height + TILE_SIZE;
|
||||||
// TODO: Should probably extract the size from the sprite
|
price_rect.right = price_rect.left + width;
|
||||||
|
price_rect.bottom = price_rect.top + TILE_SIZE + SPRITE_FOCUS_RAISE_PX;
|
||||||
|
|
||||||
price_rect.right = price_rect.left + TILE_SIZE * 3;
|
|
||||||
// Taking 2 tiles down so the highlighted case is also covered
|
|
||||||
price_rect.bottom = price_rect.top + 2 * TILE_SIZE;
|
|
||||||
tte_erase_rect_wrapper(price_rect);
|
tte_erase_rect_wrapper(price_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+66
-4
@@ -9,10 +9,7 @@
|
|||||||
#include <maxmod.h>
|
#include <maxmod.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <tonc.h>
|
#include <tonc.h>
|
||||||
|
#include <tonc_oam.h>
|
||||||
#define MAX_SPRITES 128
|
|
||||||
#define MAX_AFFINES 32
|
|
||||||
#define SPRITE_FOCUS_RAISE_PX 10
|
|
||||||
|
|
||||||
OBJ_ATTR obj_buffer[MAX_SPRITES];
|
OBJ_ATTR obj_buffer[MAX_SPRITES];
|
||||||
OBJ_AFFINE* obj_aff_buffer = (OBJ_AFFINE*)obj_buffer;
|
OBJ_AFFINE* obj_aff_buffer = (OBJ_AFFINE*)obj_buffer;
|
||||||
@@ -102,6 +99,41 @@ int sprite_get_layer(Sprite* sprite)
|
|||||||
return sprite->obj - obj_buffer;
|
return sprite->obj - obj_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sprite_get_width(Sprite* sprite, int* width)
|
||||||
|
{
|
||||||
|
if (sprite == NULL || sprite->obj == NULL || width == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*width = obj_get_width(sprite->obj);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sprite_get_height(Sprite* sprite, int* height)
|
||||||
|
{
|
||||||
|
if (sprite == NULL || sprite->obj == NULL || height == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*height = obj_get_height(sprite->obj);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sprite_get_dimensions(Sprite* sprite, int* width, int* height)
|
||||||
|
{
|
||||||
|
if (sprite == NULL || sprite->obj == NULL || width == NULL || height == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const u8* size = obj_get_size(sprite->obj);
|
||||||
|
*width = size[0];
|
||||||
|
*height = size[1];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Sprite functions
|
// Sprite functions
|
||||||
void sprite_init()
|
void sprite_init()
|
||||||
{
|
{
|
||||||
@@ -278,6 +310,36 @@ void sprite_object_set_focus(SpriteObject* sprite_object, bool focus)
|
|||||||
sprite_object->ty = sprite_object->ty + int2fx((focus ? -1 : 1) * SPRITE_FOCUS_RAISE_PX);
|
sprite_object->ty = sprite_object->ty + int2fx((focus ? -1 : 1) * SPRITE_FOCUS_RAISE_PX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sprite_object_get_width(SpriteObject* sprite_object, int* width)
|
||||||
|
{
|
||||||
|
if (sprite_object == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprite_get_width(sprite_object->sprite, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sprite_object_get_height(SpriteObject* sprite_object, int* height)
|
||||||
|
{
|
||||||
|
if (sprite_object == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprite_get_height(sprite_object->sprite, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sprite_object_get_dimensions(SpriteObject* sprite_object, int* width, int* height)
|
||||||
|
{
|
||||||
|
if (sprite_object == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprite_get_dimensions(sprite_object->sprite, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
bool sprite_object_is_focused(SpriteObject* sprite_object)
|
bool sprite_object_is_focused(SpriteObject* sprite_object)
|
||||||
{
|
{
|
||||||
return sprite_object->focused;
|
return sprite_object->focused;
|
||||||
|
|||||||
Reference in New Issue
Block a user