[Maintenance] [th01] Rethink high score menu constants

The one thing where I didn't think ahead…

Part of P0092, funded by Yanga.
This commit is contained in:
nmlgc 2020-05-13 21:07:27 +02:00
parent 29c5a7365f
commit 8473dc2048
1 changed files with 38 additions and 30 deletions

View File

@ -1,4 +1,7 @@
#define ALPHABET_Y 240
#define COL_SELECTED 3
#define COL_REGULAR 7
#define ALPHABET_TOP 240
#define MARGIN_W 32
#define KANJI_PADDING_X 16
#define KANJI_PADDING_Y 8
@ -9,35 +12,45 @@
#define KANJI_PER_ROW \
((RES_X - (MARGIN_W * 2)) / KANJI_PADDED_W)
#define relative_top(row) \
((row) * KANJI_PADDED_H)
inline int relative_top_for(int kanji_id)
{
return relative_top(kanji_id / KANJI_PER_ROW);
}
inline int row_ceil(int count)
{
return ((count + (KANJI_PER_ROW - 1)) / KANJI_PER_ROW);
}
inline int alphabet_x(int i)
inline int left_for(int kanji_id)
{
return (((i % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W);
return (((kanji_id % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W);
}
inline int alphabet_y(int start_row, int i)
{
return (((i / KANJI_PER_ROW) * KANJI_PADDED_H) +
(ALPHABET_Y + ((start_row) * KANJI_PADDED_H)));
}
#define alphabet_putca_fx(start_row, i, fx, fmt_instance, kanji) \
#define alphabet_putca_fx(top_for_0, i, fx, fmt_instance, kanji) \
graph_putkanji_fx( \
alphabet_x(i), alphabet_y(start_row, i), fx, fmt_instance, kanji \
left_for(i), (top_for_0 + relative_top_for(i)), fx, fmt_instance, kanji \
);
#define alphabet_putsa_fx(start_row, i, fx, str) \
#define alphabet_putsa_fx(top_for_0, i, fx, str) \
extern const char str[]; \
graph_printf_fx(alphabet_x(i), alphabet_y(start_row, i), fx, str);
graph_printf_fx(left_for(i), (top_for_0 + relative_top_for(i)), fx, str);
#define A_TO_Z_COUNT 26
#define NUM_COUNT 10
// TODO: Should be derived via `sizeof()` once the array is declared here.
#define SYM_COUNT 18
extern const uint16_t ALPHABET_SYMS[];
// Rows
#define LOWER_TOP (ALPHABET_TOP)
#define UPPER_TOP (LOWER_TOP + relative_top(row_ceil(A_TO_Z_COUNT)))
#define SYM_TOP (UPPER_TOP + relative_top(row_ceil(A_TO_Z_COUNT)))
#define NUM_TOP (SYM_TOP + relative_top(row_ceil(SYM_COUNT)))
inline uint16_t kanji_swap(uint16_t kanji)
{
return (kanji << 8) | (kanji >> 8);
@ -45,14 +58,7 @@ inline uint16_t kanji_swap(uint16_t kanji)
void alphabet_put_initial()
{
#define A_TO_Z_COUNT 26
#define NUM_COUNT 10
#define CAPITAL_ROW (row_ceil(A_TO_Z_COUNT))
#define SYM_ROW (CAPITAL_ROW + row_ceil(A_TO_Z_COUNT))
#define NUM_ROW (SYM_ROW + row_ceil(SYM_COUNT))
int fx = FX(7, 2, 0);
int fx = FX(COL_REGULAR, 2, 0);
uint16_t kanji;
int i;
#if (BINARY == 'M')
@ -61,30 +67,32 @@ void alphabet_put_initial()
kanji = kanji_swap('');
for(i = 1; i < A_TO_Z_COUNT; i++) {
alphabet_putca_fx(0, i, fx, 0, kanji);
alphabet_putca_fx(LOWER_TOP, i, fx, 0, kanji);
kanji++;
}
extern const char ALPHABET_A[];
graph_putsa_fx(MARGIN_W, ALPHABET_Y, FX_REVERSE | FX(3, 2, 0), ALPHABET_A);
graph_putsa_fx(
MARGIN_W, LOWER_TOP, FX_REVERSE | FX(COL_SELECTED, 2, 0), ALPHABET_A
);
kanji = kanji_swap('`');
for(i = 0; i < A_TO_Z_COUNT; i++) {
alphabet_putca_fx(CAPITAL_ROW, i, fx, 1, kanji);
alphabet_putca_fx(UPPER_TOP, i, fx, 1, kanji);
kanji++;
}
for(i = 0; i < SYM_COUNT; i++) {
kanji = ALPHABET_SYMS[i];
alphabet_putca_fx(SYM_ROW, i, fx, 2, kanji);
alphabet_putca_fx(SYM_TOP, i, fx, 2, kanji);
}
kanji = kanji_swap('O');
for(i = 0; i < NUM_COUNT; i++) {
alphabet_putca_fx(NUM_ROW, i, fx, 3, kanji);
alphabet_putca_fx(NUM_TOP, i, fx, 3, kanji);
kanji++;
}
alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_SPACE); i = (KANJI_PER_ROW - 3);
alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_LEFT); i++;
alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_RIGHT); i++;
alphabet_putsa_fx(NUM_ROW, i, fx, ALPHABET_ENTER); i++;
alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_SPACE); i = (KANJI_PER_ROW - 3);
alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_LEFT); i++;
alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_RIGHT); i++;
alphabet_putsa_fx(NUM_TOP, i, fx, ALPHABET_ENTER); i++;
}