mirror of https://github.com/nmlgc/ReC98.git
[Decompilation] [th01] High score menu: Initial table rendering
With ternary operator expressions straight out of Jigoku. (TL note: Jigoku means hell.) Nice to see that Turbo C++ apparently has no nesting limit on function call inlining in general, though! Part of P0092, funded by Yanga.
This commit is contained in:
parent
8473dc2048
commit
57be510056
|
@ -79,6 +79,29 @@ certain local variables as `word`s when they aren't.
|
|||
|
||||
## Flags
|
||||
|
||||
### `-3` (80386 Instructions) + `-Z` (Suppress register reloads)
|
||||
|
||||
Bundles two consecutive 16-bit function parameters into a single 32-bit one,
|
||||
passed via a single 32-bit `PUSH`. Currently confirmed to happen for literals
|
||||
and structure members whose memory layout matches the parameter list and
|
||||
calling convention. Signedness doesn't matter.
|
||||
|
||||
```c
|
||||
// Works for all storage durations
|
||||
struct { int x, y; } p;
|
||||
struct { unsigned int x, y; } q;
|
||||
|
||||
void __cdecl foo_s(int x, int y);
|
||||
void __cdecl foo_u(unsigned int x, unsigned int y);
|
||||
|
||||
foo_s(640, 400); // PUSH LARGE 1900280h
|
||||
foo_u(640, 400); // PUSH LARGE 1900280h
|
||||
foo_s(p.x, p.y); // PUSH LARGE [p]
|
||||
foo_u(p.x, p.y); // PUSH LARGE [p]
|
||||
foo_s(q.x, q.y); // PUSH LARGE [p]
|
||||
foo_u(q.x, q.y); // PUSH LARGE [p]
|
||||
```
|
||||
|
||||
### `-O` (Optimize jumps)
|
||||
|
||||
Also merges multiple `ADD SP, imm8` stack-clearing instructions after
|
||||
|
|
|
@ -82,6 +82,10 @@ extern const char FOPEN_WB[];
|
|||
ALPHABET_KANJI_FMT_##fmt_instance, kanji >> 8, kanji & 0xFF \
|
||||
)
|
||||
|
||||
#include "th01/hiscore/alph_p_i.cpp"
|
||||
#define regist_route_put(left, top, fx, char_1, char_2) \
|
||||
extern const char REGIST_ROUTE_FMT[]; \
|
||||
graph_printf_fx(left, top, fx, REGIST_ROUTE_FMT, char_1, char_2);
|
||||
|
||||
#include "th01/hiscore/regist.cpp"
|
||||
|
||||
}
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
#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
|
||||
|
||||
#define KANJI_PADDED_W (GLYPH_FULL_W + KANJI_PADDING_X)
|
||||
#define KANJI_PADDED_H (GLYPH_H + KANJI_PADDING_Y)
|
||||
|
||||
#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 left_for(int kanji_id)
|
||||
{
|
||||
return (((kanji_id % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W);
|
||||
}
|
||||
|
||||
#define alphabet_putca_fx(top_for_0, i, fx, fmt_instance, kanji) \
|
||||
graph_putkanji_fx( \
|
||||
left_for(i), (top_for_0 + relative_top_for(i)), fx, fmt_instance, kanji \
|
||||
);
|
||||
|
||||
#define alphabet_putsa_fx(top_for_0, i, fx, str) \
|
||||
extern const char 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);
|
||||
}
|
||||
|
||||
void alphabet_put_initial()
|
||||
{
|
||||
int fx = FX(COL_REGULAR, 2, 0);
|
||||
uint16_t kanji;
|
||||
int i;
|
||||
#if (BINARY == 'M')
|
||||
char kanji_str[3];
|
||||
#endif
|
||||
|
||||
kanji = kanji_swap('‚‚');
|
||||
for(i = 1; i < A_TO_Z_COUNT; i++) {
|
||||
alphabet_putca_fx(LOWER_TOP, i, fx, 0, kanji);
|
||||
kanji++;
|
||||
}
|
||||
extern const char 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(UPPER_TOP, i, fx, 1, kanji);
|
||||
kanji++;
|
||||
}
|
||||
|
||||
for(i = 0; i < SYM_COUNT; i++) {
|
||||
kanji = ALPHABET_SYMS[i];
|
||||
alphabet_putca_fx(SYM_TOP, i, fx, 2, kanji);
|
||||
}
|
||||
|
||||
kanji = kanji_swap('‚O');
|
||||
for(i = 0; i < NUM_COUNT; i++) {
|
||||
alphabet_putca_fx(NUM_TOP, i, fx, 3, kanji);
|
||||
kanji++;
|
||||
}
|
||||
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++;
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
public _ALPHABET_A
|
||||
public _ALPHABET_SPACE, _ALPHABET_LEFT, _ALPHABET_RIGHT, _ALPHABET_ENTER
|
||||
|
||||
if BINARY eq 'E'
|
||||
public _ALPHABET_KANJI_FMT_0, _ALPHABET_KANJI_FMT_1
|
||||
public _ALPHABET_KANJI_FMT_2, _ALPHABET_KANJI_FMT_3
|
||||
_ALPHABET_KANJI_FMT_0 db '%c%c',0
|
||||
_ALPHABET_A db '‚<>',0
|
||||
_ALPHABET_KANJI_FMT_1 db '%c%c',0
|
||||
_ALPHABET_KANJI_FMT_2 db '%c%c',0
|
||||
_ALPHABET_KANJI_FMT_3 db '%c%c',0
|
||||
else
|
||||
_ALPHABET_A db '‚<>',0
|
||||
endif
|
||||
_ALPHABET_SPACE db 'SP',0
|
||||
_ALPHABET_LEFT db '<27>©',0
|
||||
_ALPHABET_RIGHT db '<27>¨',0
|
||||
_ALPHABET_ENTER db '<27>I',0
|
|
@ -25,10 +25,10 @@ scoredat_routes_t struc
|
|||
scoredat_routes_t ends
|
||||
|
||||
public _scoredat_names, _scoredat_routes, _scoredat_stages, _scoredat_points
|
||||
public _name_entered_left, _name_entered_top
|
||||
public _entered_name_left, _entered_name_top
|
||||
_scoredat_names dd ?
|
||||
_scoredat_routes dd ?
|
||||
_scoredat_stages dd ?
|
||||
_name_entered_left dw ?
|
||||
_name_entered_top dw ?
|
||||
_entered_name_left dw ?
|
||||
_entered_name_top dw ?
|
||||
_scoredat_points dd ?
|
||||
|
|
|
@ -0,0 +1,272 @@
|
|||
#define COL_SELECTED 3
|
||||
#define COL_REGULAR 7
|
||||
|
||||
/// Table
|
||||
/// -----
|
||||
#define POINT_DIGITS 7
|
||||
|
||||
#define TABLE_TOP 48
|
||||
#define TABLE_ROW_H GLYPH_H
|
||||
#define TABLE_BODY_TOP (TABLE_TOP + TABLE_ROW_H)
|
||||
|
||||
#define table_row_top(place) (TABLE_BODY_TOP + (place * TABLE_ROW_H))
|
||||
|
||||
// Recursively defining column positions \o/
|
||||
inline int table_left(int x_kanji) {
|
||||
return 32 + (x_kanji * GLYPH_FULL_W);
|
||||
}
|
||||
|
||||
inline int table_place_left(int x_kanji) {
|
||||
return table_left(x_kanji);
|
||||
}
|
||||
|
||||
inline int table_name_left(int x_kanji) {
|
||||
return table_place_left(7 + x_kanji);
|
||||
}
|
||||
|
||||
inline int table_points_left(int x_kanji) {
|
||||
return table_name_left(SCOREDAT_NAME_KANJI + 5 + x_kanji);
|
||||
}
|
||||
|
||||
inline int table_stage_route_left(int x_kanji) {
|
||||
return table_points_left(POINT_DIGITS + 3 + x_kanji);
|
||||
}
|
||||
|
||||
inline int table_stage_left(int x_kanji) {
|
||||
return table_stage_route_left(1 + x_kanji);
|
||||
}
|
||||
|
||||
// Code generation actually prohibits this from being a Point!
|
||||
extern int entered_name_left;
|
||||
extern int entered_name_top;
|
||||
/// -----
|
||||
|
||||
/// Alphabet
|
||||
/// --------
|
||||
#define ALPHABET_TOP 240
|
||||
#define MARGIN_W 32
|
||||
#define KANJI_PADDING_X 16
|
||||
#define KANJI_PADDING_Y 8
|
||||
|
||||
#define KANJI_PADDED_W (GLYPH_FULL_W + KANJI_PADDING_X)
|
||||
#define KANJI_PADDED_H (GLYPH_H + KANJI_PADDING_Y)
|
||||
|
||||
#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 left_for(int kanji_id)
|
||||
{
|
||||
return (((kanji_id % KANJI_PER_ROW) * KANJI_PADDED_W) + MARGIN_W);
|
||||
}
|
||||
|
||||
#define alphabet_putca_fx(top_for_0, i, fx, fmt_instance, kanji) \
|
||||
graph_putkanji_fx( \
|
||||
left_for(i), (top_for_0 + relative_top_for(i)), fx, fmt_instance, kanji \
|
||||
);
|
||||
|
||||
#define alphabet_putsa_fx(top_for_0, i, fx, str) \
|
||||
extern const char 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);
|
||||
}
|
||||
/// --------
|
||||
|
||||
void alphabet_put_initial()
|
||||
{
|
||||
int fx = FX(COL_REGULAR, 2, 0);
|
||||
uint16_t kanji;
|
||||
int i;
|
||||
#if (BINARY == 'M')
|
||||
char kanji_str[3];
|
||||
#endif
|
||||
|
||||
kanji = kanji_swap('‚‚');
|
||||
for(i = 1; i < A_TO_Z_COUNT; i++) {
|
||||
alphabet_putca_fx(LOWER_TOP, i, fx, 0, kanji);
|
||||
kanji++;
|
||||
}
|
||||
extern const char 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(UPPER_TOP, i, fx, 1, kanji);
|
||||
kanji++;
|
||||
}
|
||||
|
||||
for(i = 0; i < SYM_COUNT; i++) {
|
||||
kanji = ALPHABET_SYMS[i];
|
||||
alphabet_putca_fx(SYM_TOP, i, fx, 2, kanji);
|
||||
}
|
||||
|
||||
kanji = kanji_swap('‚O');
|
||||
for(i = 0; i < NUM_COUNT; i++) {
|
||||
alphabet_putca_fx(NUM_TOP, i, fx, 3, kanji);
|
||||
kanji++;
|
||||
}
|
||||
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++;
|
||||
}
|
||||
|
||||
inline void header_cell_put(int left, const char str[])
|
||||
{
|
||||
graph_putsa_fx(left, TABLE_TOP, FX(COL_SELECTED, 3, 0), str);
|
||||
}
|
||||
|
||||
#define place_cell_put(top, fx, str) \
|
||||
graph_putsa_fx(table_place_left(0), top, fx, str)
|
||||
|
||||
void regist_put_initial(
|
||||
int entered_place,
|
||||
long entered_points,
|
||||
int entered_stage,
|
||||
const char entered_route[SCOREDAT_ROUTE_LEN + 1],
|
||||
const scoredat_name_z_t names_z[SCOREDAT_PLACES]
|
||||
)
|
||||
{
|
||||
struct hack {
|
||||
unsigned char byte[SCOREDAT_NAME_BYTES + 1];
|
||||
};
|
||||
extern const hack REGIST_NAME_BLANK;
|
||||
extern const char REGIST_HEADER_PLACE[];
|
||||
extern const char REGIST_HEADER_NAME[];
|
||||
extern const char REGIST_HEADER_POINTS[];
|
||||
extern const char REGIST_HEADER_STAGE_ROUTE[];
|
||||
extern const char REGIST_PLACE_0[];
|
||||
extern const char REGIST_PLACE_1[];
|
||||
extern const char REGIST_PLACE_2[];
|
||||
extern const char REGIST_PLACE_3[];
|
||||
extern const char REGIST_PLACE_4[];
|
||||
extern const char REGIST_PLACE_5[];
|
||||
extern const char REGIST_PLACE_6[];
|
||||
extern const char REGIST_PLACE_7[];
|
||||
extern const char REGIST_PLACE_8[];
|
||||
extern const char REGIST_PLACE_9[];
|
||||
extern const char REGIST_STAGE_MAKAI[];
|
||||
extern const char REGIST_STAGE_JIGOKU[];
|
||||
extern const char REGIST_STAGE_ROUTE_DASH[];
|
||||
|
||||
hack name = REGIST_NAME_BLANK;
|
||||
|
||||
graph_accesspage_func(0);
|
||||
|
||||
header_cell_put(table_place_left(0), REGIST_HEADER_PLACE);
|
||||
header_cell_put(table_name_left(0), REGIST_HEADER_NAME);
|
||||
header_cell_put(table_points_left(0), REGIST_HEADER_POINTS);
|
||||
header_cell_put(table_stage_route_left(0), REGIST_HEADER_STAGE_ROUTE);
|
||||
|
||||
for(int i = 0; i < SCOREDAT_PLACES; i++) {
|
||||
#define stage_expr(i, entered_place, expr) \
|
||||
(i != entered_place && scoredat_stages[i] expr) || \
|
||||
(i == entered_place && entered_stage expr)
|
||||
|
||||
#define fx_text FX(place_col, 2, 0)
|
||||
|
||||
#if (BINARY == 'E')
|
||||
# define place_col ((i == entered_place) ? COL_SELECTED : COL_REGULAR)
|
||||
# define top table_row_top(i)
|
||||
#else
|
||||
int place_col = (i == entered_place) ? COL_SELECTED : COL_REGULAR;
|
||||
int top = table_row_top(i);
|
||||
#endif
|
||||
|
||||
switch(i) {
|
||||
case 0: place_cell_put(top, fx_text, REGIST_PLACE_0); break;
|
||||
case 1: place_cell_put(top, fx_text, REGIST_PLACE_1); break;
|
||||
case 2: place_cell_put(top, fx_text, REGIST_PLACE_2); break;
|
||||
case 3: place_cell_put(top, fx_text, REGIST_PLACE_3); break;
|
||||
case 4: place_cell_put(top, fx_text, REGIST_PLACE_4); break;
|
||||
case 5: place_cell_put(top, fx_text, REGIST_PLACE_5); break;
|
||||
case 6: place_cell_put(top, fx_text, REGIST_PLACE_6); break;
|
||||
case 7: place_cell_put(top, fx_text, REGIST_PLACE_7); break;
|
||||
case 8: place_cell_put(top, fx_text, REGIST_PLACE_8); break;
|
||||
case 9: place_cell_put(top, fx_text, REGIST_PLACE_9); break;
|
||||
}
|
||||
graph_putsa_fx(
|
||||
table_name_left(0),
|
||||
top,
|
||||
fx_text,
|
||||
(i == entered_place) ? name.byte : names_z[i].byte
|
||||
);
|
||||
graph_putfwnum_fx(
|
||||
table_points_left(0),
|
||||
top,
|
||||
FX(place_col, 3, 0),
|
||||
POINT_DIGITS,
|
||||
(entered_place == i) ? entered_points : scoredat_points[i],
|
||||
0,
|
||||
false
|
||||
);
|
||||
if(stage_expr(i, entered_place, < SCOREDAT_CLEARED)) {
|
||||
graph_putfwnum_fx(
|
||||
table_stage_left(0),
|
||||
top,
|
||||
fx_text,
|
||||
2,
|
||||
(i == entered_place) ? entered_stage : scoredat_stages[i],
|
||||
0,
|
||||
false
|
||||
);
|
||||
} else if(stage_expr(i, entered_place, == SCOREDAT_CLEARED_MAKAI)) {
|
||||
graph_putsa_fx(
|
||||
table_stage_left(0), top, fx_text, REGIST_STAGE_MAKAI
|
||||
);
|
||||
} else if(stage_expr(i, entered_place, == SCOREDAT_CLEARED_JIGOKU)) {
|
||||
graph_putsa_fx(
|
||||
table_stage_left(0), top, fx_text, REGIST_STAGE_JIGOKU
|
||||
);
|
||||
}
|
||||
graph_putsa_fx(
|
||||
table_stage_left(2), top, fx_text, REGIST_STAGE_ROUTE_DASH
|
||||
);
|
||||
regist_route_put(
|
||||
table_stage_left(3),
|
||||
top,
|
||||
fx_text,
|
||||
(i == entered_place)
|
||||
? entered_route[0] : scoredat_routes[i].byte.lo,
|
||||
(i == entered_place)
|
||||
? entered_route[1] : scoredat_route_byte(i, 1)
|
||||
);
|
||||
if(entered_place == i) {
|
||||
entered_name_left = table_name_left(0);
|
||||
entered_name_top = table_row_top(i);
|
||||
}
|
||||
#undef top
|
||||
#undef place_col
|
||||
#undef fx_text
|
||||
#undef stage_expr
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
public _ALPHABET_A
|
||||
public _ALPHABET_SPACE, _ALPHABET_LEFT, _ALPHABET_RIGHT, _ALPHABET_ENTER
|
||||
|
||||
if BINARY eq 'E'
|
||||
public _ALPHABET_KANJI_FMT_0, _ALPHABET_KANJI_FMT_1
|
||||
public _ALPHABET_KANJI_FMT_2, _ALPHABET_KANJI_FMT_3
|
||||
_ALPHABET_KANJI_FMT_0 db '%c%c',0
|
||||
_ALPHABET_A db 'a',0
|
||||
_ALPHABET_KANJI_FMT_1 db '%c%c',0
|
||||
_ALPHABET_KANJI_FMT_2 db '%c%c',0
|
||||
_ALPHABET_KANJI_FMT_3 db '%c%c',0
|
||||
else
|
||||
_ALPHABET_A db 'a',0
|
||||
endif
|
||||
_ALPHABET_SPACE db 'SP',0
|
||||
_ALPHABET_LEFT db '←',0
|
||||
_ALPHABET_RIGHT db '→',0
|
||||
_ALPHABET_ENTER db '終',0
|
||||
|
||||
public _REGIST_HEADER_PLACE, _REGIST_HEADER_NAME
|
||||
public _REGIST_HEADER_POINTS, _REGIST_HEADER_STAGE_ROUTE
|
||||
public _REGIST_PLACE_0, _REGIST_PLACE_1, _REGIST_PLACE_2, _REGIST_PLACE_3
|
||||
public _REGIST_PLACE_4, _REGIST_PLACE_5, _REGIST_PLACE_6, _REGIST_PLACE_7
|
||||
public _REGIST_PLACE_8, _REGIST_PLACE_9
|
||||
public _REGIST_STAGE_MAKAI, _REGIST_STAGE_JIGOKU, _REGIST_STAGE_ROUTE_DASH
|
||||
_REGIST_HEADER_PLACE db ' 霊 位 ',0
|
||||
_REGIST_HEADER_NAME db ' 名 前 ',0
|
||||
_REGIST_HEADER_POINTS db ' 得 点 ',0
|
||||
_REGIST_HEADER_STAGE_ROUTE db 'ステージ・ルート',0
|
||||
_REGIST_PLACE_0 db ' 靈 神 ',0
|
||||
_REGIST_PLACE_1 db '太元帥明王',0
|
||||
_REGIST_PLACE_2 db ' 天 仙 ',0
|
||||
_REGIST_PLACE_3 db ' 神 仙 ',0
|
||||
_REGIST_PLACE_4 db ' 地 仙 ',0
|
||||
_REGIST_PLACE_5 db ' 人 仙 ',0
|
||||
_REGIST_PLACE_6 db ' 仙 女 ',0
|
||||
_REGIST_PLACE_7 db '陰 陽 師',0
|
||||
_REGIST_PLACE_8 db '靈 媒 師',0
|
||||
_REGIST_PLACE_9 db '修 業 者',0
|
||||
_REGIST_STAGE_MAKAI db '魔界',0
|
||||
_REGIST_STAGE_JIGOKU db '地獄',0
|
||||
_REGIST_STAGE_ROUTE_DASH db '-',0
|
||||
if BINARY eq 'E'
|
||||
public _REGIST_ROUTE_FMT
|
||||
_REGIST_ROUTE_FMT db '%c%c',0
|
||||
endif
|
|
@ -4,6 +4,7 @@
|
|||
// Actually creates slightly different assembly compared to sizeof() on a
|
||||
// int8_t array!
|
||||
#define SCOREDAT_NAME_BYTES (SCOREDAT_NAME_KANJI * 2)
|
||||
#define SCOREDAT_ROUTE_LEN 2
|
||||
|
||||
#define SCOREDAT_CLEARED 40
|
||||
#define SCOREDAT_CLEARED_MAKAI (SCOREDAT_CLEARED + 10)
|
||||
|
@ -44,6 +45,20 @@ inline int8_t& scoredat_name_byte(size_t byte)
|
|||
return reinterpret_cast<char *>(scoredat_names)[byte];
|
||||
}
|
||||
|
||||
// Byte-wise access to [scoredat_routes].
|
||||
inline int8_t& scoredat_route_byte(int place, int byte)
|
||||
{
|
||||
return reinterpret_cast<int8_t *>(scoredat_routes)[
|
||||
(place * SCOREDAT_ROUTE_LEN) + byte
|
||||
];
|
||||
}
|
||||
|
||||
// Null-terminated version of scoredat_name_t, used internally.
|
||||
union scoredat_name_z_t {
|
||||
int16_t codepoint[SCOREDAT_NAME_KANJI + 1];
|
||||
int8_t byte[SCOREDAT_NAME_BYTES + 1];
|
||||
};
|
||||
|
||||
// Loads the score file for the current [rank], recreating it if necessary.
|
||||
// Returns 0 on success, 1 on failure.
|
||||
int scoredat_load();
|
||||
|
|
|
@ -46,6 +46,13 @@ void pascal near str_from_kanji(char str[3], uint16_t kanji)
|
|||
graph_putsa_fx(left, top, fx, kanji_str);
|
||||
#define graph_printf_fx graph_putsa_fx
|
||||
|
||||
#include "th01/hiscore/alph_p_i.cpp"
|
||||
#define regist_route_put(left, top, fx, char_1, char_2) \
|
||||
unsigned char route[sizeof(twobyte_t) + 1]; \
|
||||
route[2] = '\0'; \
|
||||
route[0] = char_1; \
|
||||
route[1] = char_2; \
|
||||
graph_putsa_fx(left, top, fx, route); \
|
||||
|
||||
#include "th01/hiscore/regist.cpp"
|
||||
|
||||
}
|
||||
|
|
604
th01_fuuin.asm
604
th01_fuuin.asm
|
@ -371,13 +371,13 @@ fuuin_01_TEXT ends
|
|||
|
||||
; Segment type: Pure code
|
||||
fuuin_02_TEXT segment byte public 'CODE' use16
|
||||
extern _graph_putfwnum_fx:proc
|
||||
extern _input_sense:proc
|
||||
extern _input_reset_sense:proc
|
||||
extern _scoredat_name_byte_encode:proc
|
||||
extern _scoredat_load:proc
|
||||
extern _scoredat_name_get:proc
|
||||
extern _alphabet_put_initial:proc
|
||||
extern _regist_put_initial:proc
|
||||
fuuin_02_TEXT ends
|
||||
|
||||
fuuin_02__TEXT segment byte public 'CODE' use16
|
||||
|
@ -385,551 +385,6 @@ fuuin_02__TEXT segment byte public 'CODE' use16
|
|||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
sub_A9FF proc far
|
||||
|
||||
var_12 = byte ptr -12h
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = word ptr 8
|
||||
arg_4 = word ptr 0Ah
|
||||
arg_6 = word ptr 0Ch
|
||||
arg_8 = dword ptr 0Eh
|
||||
arg_C = word ptr 12h
|
||||
arg_E = word ptr 14h
|
||||
|
||||
enter 12h, 0
|
||||
push si
|
||||
push di
|
||||
mov di, [bp+arg_0]
|
||||
lea ax, [bp+var_12]
|
||||
push ss
|
||||
push ax
|
||||
push ds
|
||||
push offset aBqbqbqbqbqbqbq ; "________"
|
||||
mov cx, 11h
|
||||
call SCOPY@
|
||||
push 0
|
||||
call _graph_accesspage_func
|
||||
pop cx
|
||||
call _graph_putsa_fx c, 32, 48, 33h, offset aB@cB@iB@, ds ; " 霊 位 "
|
||||
call _graph_putsa_fx c, 144, 48, 33h, offset aB@b@cB@b@sob@b, ds ; " 名 前 "
|
||||
call _graph_putsa_fx c, 352, 48, 33h, offset aB@b@uB@b@u_b@b, ds ; " 得 点 "
|
||||
call _graph_putsa_fx c, 512, 48, 33h, offset aGxgebGwbeglbGg, ds ; "ステージ・ルート"
|
||||
xor si, si
|
||||
jmp loc_AD66
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AA71:
|
||||
mov bx, si
|
||||
cmp bx, 9
|
||||
jbe short loc_AA7B
|
||||
jmp loc_AB4F
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AA7B:
|
||||
add bx, bx
|
||||
jmp cs:off_AD72[bx]
|
||||
|
||||
loc_AA82:
|
||||
push ds
|
||||
push offset aB@sB@r_b@ ; " 靈 神 "
|
||||
cmp si, di
|
||||
jnz short loc_AA8F
|
||||
mov ax, 3
|
||||
jmp short loc_AA92
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AA8F:
|
||||
mov ax, 7
|
||||
|
||||
loc_AA92:
|
||||
jmp loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AA95:
|
||||
push ds
|
||||
push offset aSMRgcId ; "太元帥明王"
|
||||
cmp si, di
|
||||
jnz short loc_AAA2
|
||||
mov ax, 3
|
||||
jmp short loc_AAA5
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAA2:
|
||||
mov ax, 7
|
||||
|
||||
loc_AAA5:
|
||||
jmp loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAA8:
|
||||
push ds
|
||||
push offset aB@uvb@rxb@ ; " 天 仙 "
|
||||
cmp si, di
|
||||
jnz short loc_AAB5
|
||||
mov ax, 3
|
||||
jmp short loc_AAB8
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAB5:
|
||||
mov ax, 7
|
||||
|
||||
loc_AAB8:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AABA:
|
||||
push ds
|
||||
push offset aB@r_b@rxb@ ; " 神 仙 "
|
||||
cmp si, di
|
||||
jnz short loc_AAC7
|
||||
mov ax, 3
|
||||
jmp short loc_AACA
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAC7:
|
||||
mov ax, 7
|
||||
|
||||
loc_AACA:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AACC:
|
||||
push ds
|
||||
push offset aB@tnb@rxb@ ; " 地 仙 "
|
||||
cmp si, di
|
||||
jnz short loc_AAD9
|
||||
mov ax, 3
|
||||
jmp short loc_AADC
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAD9:
|
||||
mov ax, 7
|
||||
|
||||
loc_AADC:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AADE:
|
||||
push ds
|
||||
push offset aB@rlb@rxb@ ; " 人 仙 "
|
||||
cmp si, di
|
||||
jnz short loc_AAEB
|
||||
mov ax, 3
|
||||
jmp short loc_AAEE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAEB:
|
||||
mov ax, 7
|
||||
|
||||
loc_AAEE:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAF0:
|
||||
push ds
|
||||
push offset aB@rxb@pcb@ ; " 仙 女 "
|
||||
cmp si, di
|
||||
jnz short loc_AAFD
|
||||
mov ax, 3
|
||||
jmp short loc_AB00
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AAFD:
|
||||
mov ax, 7
|
||||
|
||||
loc_AB00:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB02:
|
||||
push ds
|
||||
push offset aIab@czb@ot ; "陰 陽 師"
|
||||
cmp si, di
|
||||
jnz short loc_AB0F
|
||||
mov ax, 3
|
||||
jmp short loc_AB12
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB0F:
|
||||
mov ax, 7
|
||||
|
||||
loc_AB12:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB14:
|
||||
push ds
|
||||
push offset aSB@fB@ot ; "靈 媒 師"
|
||||
cmp si, di
|
||||
jnz short loc_AB21
|
||||
mov ax, 3
|
||||
jmp short loc_AB24
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB21:
|
||||
mov ax, 7
|
||||
|
||||
loc_AB24:
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB26:
|
||||
push ds
|
||||
push offset aPcb@lB@o ; "修 業 者"
|
||||
cmp si, di
|
||||
jnz short loc_AB33
|
||||
mov ax, 3
|
||||
jmp short loc_AB36
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB33:
|
||||
mov ax, 7
|
||||
|
||||
loc_AB36:
|
||||
or ax, 20h
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax
|
||||
push 32
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
jmp short $+2
|
||||
|
||||
loc_AB4F:
|
||||
cmp si, di
|
||||
jnz short loc_AB5A
|
||||
mov dx, ss
|
||||
lea ax, [bp+var_12]
|
||||
jmp short loc_AB69
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB5A:
|
||||
mov ax, si
|
||||
imul ax, 12h
|
||||
mov dx, [bp+arg_E]
|
||||
push ax
|
||||
mov ax, [bp+arg_C]
|
||||
pop bx
|
||||
add ax, bx
|
||||
|
||||
loc_AB69:
|
||||
push dx
|
||||
push ax
|
||||
cmp si, di
|
||||
jnz short loc_AB74
|
||||
mov ax, 3
|
||||
jmp short loc_AB77
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AB74:
|
||||
mov ax, 7
|
||||
|
||||
loc_AB77:
|
||||
or ax, 20h
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax
|
||||
push 144
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
push 0 ; put_leading_zeroes
|
||||
push 0 ; num_prev (high)
|
||||
push 0 ; num_prev (low)
|
||||
cmp di, si
|
||||
jnz short loc_ABA1
|
||||
mov dx, [bp+arg_4]
|
||||
mov ax, [bp+arg_2]
|
||||
jmp short loc_ABB3
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_ABA1:
|
||||
mov ax, si
|
||||
shl ax, 2
|
||||
les bx, _scoredat_points
|
||||
add bx, ax
|
||||
mov dx, es:[bx+2]
|
||||
mov ax, es:[bx]
|
||||
|
||||
loc_ABB3:
|
||||
push dx ; num (high)
|
||||
push ax ; num (low)
|
||||
push 7 ; digits
|
||||
cmp si, di
|
||||
jnz short loc_ABC0
|
||||
mov ax, 3
|
||||
jmp short loc_ABC3
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_ABC0:
|
||||
mov ax, 7
|
||||
|
||||
loc_ABC3:
|
||||
or ax, 30h
|
||||
push ax ; fx
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax ; top
|
||||
push 352 ; left
|
||||
call fuuin_02:_graph_putfwnum_fx
|
||||
add sp, 12h
|
||||
cmp si, di
|
||||
jz short loc_ABEE
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED
|
||||
jl short loc_ABF8
|
||||
|
||||
loc_ABEE:
|
||||
cmp si, di
|
||||
jnz short loc_AC3F
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED
|
||||
jge short loc_AC3F
|
||||
|
||||
loc_ABF8:
|
||||
push 0 ; put_leading_zeroes
|
||||
push 0 ; num_prev (high)
|
||||
push 0 ; num_prev (low)
|
||||
cmp si, di
|
||||
jnz short loc_AC07
|
||||
mov ax, [bp+arg_6]
|
||||
jmp short loc_AC14
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AC07:
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
mov ax, es:[bx]
|
||||
|
||||
loc_AC14:
|
||||
cwd
|
||||
push dx ; num (high)
|
||||
push ax ; num (low)
|
||||
push 2 ; digits
|
||||
cmp si, di
|
||||
jnz short loc_AC22
|
||||
mov ax, 3
|
||||
jmp short loc_AC25
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AC22:
|
||||
mov ax, 7
|
||||
|
||||
loc_AC25:
|
||||
or ax, 20h
|
||||
push ax ; fx
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax ; top
|
||||
push 528 ; left
|
||||
call fuuin_02:_graph_putfwnum_fx
|
||||
add sp, 12h
|
||||
jmp loc_ACCD
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AC3F:
|
||||
cmp si, di
|
||||
jz short loc_AC53
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED_MAKAI
|
||||
jz short loc_AC5D
|
||||
|
||||
loc_AC53:
|
||||
cmp si, di
|
||||
jnz short loc_AC87
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED_MAKAI
|
||||
jnz short loc_AC87
|
||||
|
||||
loc_AC5D:
|
||||
push ds
|
||||
push offset aCvke ; "魔界"
|
||||
cmp si, di
|
||||
jnz short loc_AC6A
|
||||
mov ax, 3
|
||||
jmp short loc_AC6D
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AC6A:
|
||||
mov ax, 7
|
||||
|
||||
loc_AC6D:
|
||||
or ax, 20h
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax
|
||||
push 528
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
jmp short loc_ACCD
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AC87:
|
||||
cmp si, di
|
||||
jz short loc_AC9B
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED_JIGOKU
|
||||
jz short loc_ACA5
|
||||
|
||||
loc_AC9B:
|
||||
cmp si, di
|
||||
jnz short loc_ACCD
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED_JIGOKU
|
||||
jnz short loc_ACCD
|
||||
|
||||
loc_ACA5:
|
||||
push ds
|
||||
push offset aTnnc ; "地獄"
|
||||
cmp si, di
|
||||
jnz short loc_ACB2
|
||||
mov ax, 3
|
||||
jmp short loc_ACB5
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_ACB2:
|
||||
mov ax, 7
|
||||
|
||||
loc_ACB5:
|
||||
or ax, 20h
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax
|
||||
push 528
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
|
||||
loc_ACCD:
|
||||
push ds
|
||||
push offset aB ; "-"
|
||||
cmp si, di
|
||||
jnz short loc_ACDA
|
||||
mov ax, 3
|
||||
jmp short loc_ACDD
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_ACDA:
|
||||
mov ax, 7
|
||||
|
||||
loc_ACDD:
|
||||
or ax, 20h
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
push ax
|
||||
push 560
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
cmp si, di
|
||||
jnz short loc_ACFE
|
||||
les bx, [bp+arg_8]
|
||||
jmp short loc_AD0A
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_ACFE:
|
||||
mov bx, si
|
||||
add bx, bx
|
||||
mov es, word ptr _scoredat_routes+2
|
||||
add bx, word ptr _scoredat_routes
|
||||
|
||||
loc_AD0A:
|
||||
mov al, es:[bx+1]
|
||||
cbw
|
||||
push ax
|
||||
cmp si, di
|
||||
jnz short loc_AD19
|
||||
les bx, [bp+arg_8]
|
||||
jmp short loc_AD23
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AD19:
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_routes
|
||||
add bx, ax
|
||||
|
||||
loc_AD23:
|
||||
mov al, es:[bx]
|
||||
cbw
|
||||
push ax ; arglist
|
||||
push ds
|
||||
push offset aCC_3 ; "%c%c"
|
||||
cmp si, di
|
||||
jnz short loc_AD35
|
||||
mov ax, 3
|
||||
jmp short loc_AD38
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AD35:
|
||||
mov ax, 7
|
||||
|
||||
loc_AD38:
|
||||
or ax, 20h
|
||||
push ax ; int
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 40h
|
||||
push ax ; int
|
||||
push 240h ; int
|
||||
call _graph_printf_fx
|
||||
add sp, 0Eh
|
||||
cmp di, si
|
||||
jnz short loc_AD65
|
||||
mov _name_entered_left, 144
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
mov _name_entered_top, ax
|
||||
|
||||
loc_AD65:
|
||||
inc si
|
||||
|
||||
loc_AD66:
|
||||
cmp si, SCOREDAT_PLACES
|
||||
jge short loc_AD6E
|
||||
jmp loc_AA71
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_AD6E:
|
||||
pop di
|
||||
pop si
|
||||
leave
|
||||
retf
|
||||
sub_A9FF endp
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
off_AD72 dw offset loc_AA82
|
||||
dw offset loc_AA95
|
||||
dw offset loc_AAA8
|
||||
dw offset loc_AABA
|
||||
dw offset loc_AACC
|
||||
dw offset loc_AADE
|
||||
dw offset loc_AAF0
|
||||
dw offset loc_AB02
|
||||
dw offset loc_AB14
|
||||
dw offset loc_AB26
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_AD86 proc far
|
||||
|
@ -1298,14 +753,14 @@ loc_B021:
|
|||
inc word ptr es:[bx]
|
||||
|
||||
loc_B063:
|
||||
call _egc_copy_rect_1_to_0 c, _name_entered_left, _name_entered_top, 128, 16
|
||||
call _egc_copy_rect_1_to_0 c, _entered_name_left, _entered_name_top, 128, 16
|
||||
push word ptr [bp+0Ch]
|
||||
push word ptr [bp+_arglist] ; arglist
|
||||
push ds
|
||||
push offset aS ; "%s"
|
||||
push 23h ; '#' ; int
|
||||
push _name_entered_top ; int
|
||||
push _name_entered_left ; int
|
||||
push _entered_name_top ; int
|
||||
push _entered_name_left ; int
|
||||
call _graph_printf_fx
|
||||
add sp, 0Eh
|
||||
les bx, [bp+arg_8]
|
||||
|
@ -1326,8 +781,8 @@ loc_B063:
|
|||
push ds
|
||||
push offset aS_0 ; "%s"
|
||||
push 3 ; int
|
||||
push _name_entered_top ; int
|
||||
push _name_entered_left ; int
|
||||
push _entered_name_top ; int
|
||||
push _entered_name_left ; int
|
||||
call _graph_printf_fx
|
||||
add sp, 0Eh
|
||||
xor ax, ax
|
||||
|
@ -1949,8 +1404,7 @@ var_8 = word ptr -8
|
|||
var_6 = word ptr -6
|
||||
@@place = word ptr -4
|
||||
var_2 = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = word ptr 8
|
||||
@@points = dword ptr 6
|
||||
arg_4 = word ptr 0Ah
|
||||
@@route = dword ptr 0Ch
|
||||
|
||||
|
@ -2052,10 +1506,10 @@ loc_B6CC:
|
|||
add bx, ax
|
||||
mov dx, es:[bx+2]
|
||||
mov ax, es:[bx]
|
||||
cmp dx, [bp+arg_2]
|
||||
cmp dx, word ptr [bp+@@points+2]
|
||||
jg short loc_B6ED
|
||||
jnz short loc_B6EB
|
||||
cmp ax, [bp+arg_0]
|
||||
cmp ax, word ptr [bp+@@points]
|
||||
ja short loc_B6ED
|
||||
|
||||
loc_B6EB:
|
||||
|
@ -2207,18 +1661,18 @@ loc_B83D:
|
|||
push word ptr [bp+@@route+2]
|
||||
push word ptr [bp+@@route]
|
||||
push di
|
||||
push [bp+arg_2]
|
||||
push [bp+arg_0]
|
||||
push word ptr [bp+@@points+2]
|
||||
push word ptr [bp+@@points]
|
||||
push [bp+@@place]
|
||||
call sub_A9FF
|
||||
call _regist_put_initial
|
||||
add sp, 10h
|
||||
call _alphabet_put_initial
|
||||
mov ax, [bp+@@place]
|
||||
shl ax, 2
|
||||
les bx, _scoredat_points
|
||||
add bx, ax
|
||||
mov dx, [bp+arg_2]
|
||||
mov ax, [bp+arg_0]
|
||||
mov dx, word ptr [bp+@@points+2]
|
||||
mov ax, word ptr [bp+@@points]
|
||||
mov es:[bx+2], dx
|
||||
mov es:[bx], ax
|
||||
mov ax, [bp+@@place]
|
||||
|
@ -2255,10 +1709,10 @@ loc_B8BD:
|
|||
push word ptr [bp+@@route+2]
|
||||
push word ptr [bp+@@route]
|
||||
push di
|
||||
push [bp+arg_2]
|
||||
push [bp+arg_0]
|
||||
push word ptr [bp+@@points+2]
|
||||
push word ptr [bp+@@points]
|
||||
push 1Eh
|
||||
call sub_A9FF
|
||||
call _regist_put_initial
|
||||
add sp, 10h
|
||||
mov _input_ok, 1
|
||||
mov _input_shot, 1
|
||||
|
@ -3992,7 +3446,8 @@ include th01/hardware/input_main_end[data].asm
|
|||
dd 0
|
||||
include th01/hiscore/alphabet_syms[data].asm
|
||||
include th01/hardware/grppfnfx_ptrs[data].asm
|
||||
aBqbqbqbqbqbqbq db '________',0
|
||||
public _REGIST_NAME_BLANK
|
||||
_REGIST_NAME_BLANK db '<27>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q',0
|
||||
aB@b@b@b@b@b@b@ db ' ',0
|
||||
aHiscore_0 db 'HISCORE',0
|
||||
off_12C1E dd aB@gcbGwbB@
|
||||
|
@ -4002,26 +3457,7 @@ off_12C1E dd aB@gcbGwbB@
|
|||
dd aGlgigegbgbgn ; "ルナティック"
|
||||
include th01/hardware/grppfnfx[data].asm
|
||||
include th01/hiscore/scorelod[data].asm
|
||||
include th01/hiscore/alphabet_initial[data].asm
|
||||
aB@cB@iB@ db ' 霊 位 ',0
|
||||
aB@b@cB@b@sob@b db ' 名 前 ',0
|
||||
aB@b@uB@b@u_b@b db ' 得 点 ',0
|
||||
aGxgebGwbeglbGg db 'ステージ・ルート',0
|
||||
aB@sB@r_b@ db ' 靈 神 ',0
|
||||
aSMRgcId db '太元帥明王',0
|
||||
aB@uvb@rxb@ db ' 天 仙 ',0
|
||||
aB@r_b@rxb@ db ' 神 仙 ',0
|
||||
aB@tnb@rxb@ db ' 地 仙 ',0
|
||||
aB@rlb@rxb@ db ' 人 仙 ',0
|
||||
aB@rxb@pcb@ db ' 仙 女 ',0
|
||||
aIab@czb@ot db '陰 陽 師',0
|
||||
aSB@fB@ot db '靈 媒 師',0
|
||||
aPcb@lB@o db '修 業 者',0
|
||||
aCvke db '魔界',0
|
||||
aTnnc db '地獄',0
|
||||
aB db '-',0
|
||||
; char aCC_3[]
|
||||
aCC_3 db '%c%c',0
|
||||
include th01/hiscore/regist[data].asm
|
||||
; char aSp_0[]
|
||||
aSp_0 db 'SP',0
|
||||
; char aBi_1[]
|
||||
|
|
394
th01_reiiden.asm
394
th01_reiiden.asm
|
@ -8424,365 +8424,7 @@ main_19__TEXT segment byte public 'CODE' use16
|
|||
assume cs:main_19
|
||||
STR_FROM_KANJI procdesc near
|
||||
extern _alphabet_put_initial:proc
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_13DF5 proc far
|
||||
|
||||
var_18 = byte ptr -18h
|
||||
var_6 = byte ptr -6
|
||||
var_5 = byte ptr -5
|
||||
var_4 = byte ptr -4
|
||||
@@top = word ptr -2
|
||||
arg_0 = word ptr 6
|
||||
arg_2 = dword ptr 8
|
||||
arg_6 = word ptr 0Ch
|
||||
arg_8 = dword ptr 0Eh
|
||||
arg_C = word ptr 12h
|
||||
arg_E = word ptr 14h
|
||||
|
||||
enter 18h, 0
|
||||
push si
|
||||
push di
|
||||
lea ax, [bp+var_18]
|
||||
push ss
|
||||
push ax
|
||||
push ds
|
||||
push offset aBqbqbqbqbqbqbq ; "________"
|
||||
mov cx, 11h
|
||||
call SCOPY@
|
||||
push 0
|
||||
call _graph_accesspage_func
|
||||
pop cx
|
||||
call _graph_putsa_fx c, 32, large (33h shl 16) or 48, offset aB@cB@iB@, ds ; " 霊 位 "
|
||||
call _graph_putsa_fx c, 144, large (33h shl 16) or 48, offset aB@b@cB@b@sob@b, ds ; " 名 前 "
|
||||
call _graph_putsa_fx c, 352, large (33h shl 16) or 48, offset aB@b@uB@b@u_b@b, ds ; " 得 点 "
|
||||
call _graph_putsa_fx c, 512, large (33h shl 16) or 48, offset aGxgebGwbeglbGg, ds ; "ステージ・ルート"
|
||||
xor si, si
|
||||
jmp loc_14082
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13E6C:
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13E76
|
||||
mov ax, 3
|
||||
jmp short loc_13E79
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13E76:
|
||||
mov ax, 7
|
||||
|
||||
loc_13E79:
|
||||
mov di, ax
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 40h
|
||||
mov [bp+@@top], ax
|
||||
mov bx, si
|
||||
cmp bx, 9
|
||||
ja short loc_13EE1
|
||||
add bx, bx
|
||||
jmp cs:off_1408D[bx]
|
||||
|
||||
loc_13E94:
|
||||
push ds
|
||||
push offset aB@sB@r_b@ ; " 靈 神 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13E9A:
|
||||
push ds
|
||||
push offset aSMRgcId ; "太元帥明王"
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EA0:
|
||||
push ds
|
||||
push offset aB@uvb@rxb@ ; " 天 仙 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EA6:
|
||||
push ds
|
||||
push offset aB@r_b@rxb@ ; " 神 仙 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EAC:
|
||||
push ds
|
||||
push offset aB@tnb@rxb@ ; " 地 仙 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EB2:
|
||||
push ds
|
||||
push offset aB@rlb@rxb@ ; " 人 仙 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EB8:
|
||||
push ds
|
||||
push offset aB@rxb@pcb@ ; " 仙 女 "
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EBE:
|
||||
push ds
|
||||
push offset aIab@czb@ot ; "陰 陽 師"
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EC4:
|
||||
push ds
|
||||
push offset aSB@fB@ot ; "靈 媒 師"
|
||||
jmp short loc_13ECE
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13ECA:
|
||||
push ds
|
||||
push offset aPcb@lB@o ; "修 業 者"
|
||||
|
||||
loc_13ECE:
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax
|
||||
push [bp+@@top]
|
||||
push 32
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
|
||||
loc_13EE1:
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13EED
|
||||
mov dx, ss
|
||||
lea ax, [bp+var_18]
|
||||
jmp short loc_13EFC
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13EED:
|
||||
mov ax, si
|
||||
imul ax, 12h
|
||||
mov dx, [bp+arg_E]
|
||||
push ax
|
||||
mov ax, [bp+arg_C]
|
||||
pop bx
|
||||
add ax, bx
|
||||
|
||||
loc_13EFC:
|
||||
push dx
|
||||
push ax
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax
|
||||
push [bp+@@top]
|
||||
push 144
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
push 0 ; put_leading_zeroes
|
||||
pushd 0 ; num_prev
|
||||
cmp [bp+arg_0], si
|
||||
jnz short loc_13F22
|
||||
mov eax, [bp+arg_2]
|
||||
jmp short loc_13F31
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13F22:
|
||||
mov ax, si
|
||||
shl ax, 2
|
||||
les bx, _scoredat_points
|
||||
add bx, ax
|
||||
mov eax, es:[bx]
|
||||
|
||||
loc_13F31:
|
||||
push eax ; num
|
||||
push 7 ; digits
|
||||
mov ax, di
|
||||
or ax, 30h
|
||||
push ax ; fx
|
||||
push [bp+@@top] ; top
|
||||
push 352 ; left
|
||||
call _graph_putfwnum_fx
|
||||
add sp, 12h
|
||||
cmp si, [bp+arg_0]
|
||||
jz short loc_13F5E
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED
|
||||
jl short loc_13F69
|
||||
|
||||
loc_13F5E:
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13FA1
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED
|
||||
jge short loc_13FA1
|
||||
|
||||
loc_13F69:
|
||||
push 0 ; put_leading_zeroes
|
||||
pushd 0 ; num_prev
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13F78
|
||||
mov ax, [bp+arg_6]
|
||||
jmp short loc_13F85
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13F78:
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
mov ax, es:[bx]
|
||||
|
||||
loc_13F85:
|
||||
cwde
|
||||
push eax ; num
|
||||
push 2 ; digits
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax ; fx
|
||||
push [bp+@@top] ; top
|
||||
push 528 ; left
|
||||
call _graph_putfwnum_fx
|
||||
add sp, 12h
|
||||
jmp short loc_13FFF
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13FA1:
|
||||
cmp si, [bp+arg_0]
|
||||
jz short loc_13FB6
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED_MAKAI
|
||||
jz short loc_13FC1
|
||||
|
||||
loc_13FB6:
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13FC7
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED_MAKAI
|
||||
jnz short loc_13FC7
|
||||
|
||||
loc_13FC1:
|
||||
push ds
|
||||
push offset aCvke ; "魔界"
|
||||
jmp short loc_13FEB
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_13FC7:
|
||||
cmp si, [bp+arg_0]
|
||||
jz short loc_13FDC
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_stages
|
||||
add bx, ax
|
||||
cmp word ptr es:[bx], SCOREDAT_CLEARED_JIGOKU
|
||||
jz short loc_13FE7
|
||||
|
||||
loc_13FDC:
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_13FFF
|
||||
cmp [bp+arg_6], SCOREDAT_CLEARED_JIGOKU
|
||||
jnz short loc_13FFF
|
||||
|
||||
loc_13FE7:
|
||||
push ds
|
||||
push offset aTnnc ; "地獄"
|
||||
|
||||
loc_13FEB:
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax
|
||||
push [bp+@@top]
|
||||
push 528
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
|
||||
loc_13FFF:
|
||||
push ds
|
||||
push offset aB_0 ; "-"
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax
|
||||
push [bp+@@top]
|
||||
push 560
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
mov [bp+var_4], 0
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_14025
|
||||
les bx, [bp+arg_8]
|
||||
jmp short loc_1402F
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_14025:
|
||||
mov ax, si
|
||||
add ax, ax
|
||||
les bx, _scoredat_routes
|
||||
add bx, ax
|
||||
|
||||
loc_1402F:
|
||||
mov al, es:[bx]
|
||||
mov [bp+var_6], al
|
||||
cmp si, [bp+arg_0]
|
||||
jnz short loc_1403F
|
||||
les bx, [bp+arg_8]
|
||||
jmp short loc_1404B
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_1403F:
|
||||
mov bx, si
|
||||
add bx, bx
|
||||
mov es, word ptr _scoredat_routes+2
|
||||
add bx, word ptr _scoredat_routes
|
||||
|
||||
loc_1404B:
|
||||
mov al, es:[bx+1]
|
||||
mov [bp+var_5], al
|
||||
push ss
|
||||
lea ax, [bp+var_6]
|
||||
push ax
|
||||
mov ax, di
|
||||
or ax, 20h
|
||||
push ax
|
||||
push [bp+@@top]
|
||||
push 576
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
cmp [bp+arg_0], si
|
||||
jnz short loc_14081
|
||||
mov _name_entered_left, 144
|
||||
mov ax, si
|
||||
shl ax, 4
|
||||
add ax, 64
|
||||
mov _name_entered_top, ax
|
||||
|
||||
loc_14081:
|
||||
inc si
|
||||
|
||||
loc_14082:
|
||||
cmp si, 0Ah
|
||||
jl loc_13E6C
|
||||
pop di
|
||||
pop si
|
||||
leave
|
||||
retf
|
||||
sub_13DF5 endp
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
off_1408D dw offset loc_13E94
|
||||
dw offset loc_13E9A
|
||||
dw offset loc_13EA0
|
||||
dw offset loc_13EA6
|
||||
dw offset loc_13EAC
|
||||
dw offset loc_13EB2
|
||||
dw offset loc_13EB8
|
||||
dw offset loc_13EBE
|
||||
dw offset loc_13EC4
|
||||
dw offset loc_13ECA
|
||||
extern _regist_put_initial:proc
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -9132,8 +8774,8 @@ loc_14322:
|
|||
inc word ptr es:[bx]
|
||||
|
||||
loc_1432E:
|
||||
call _egc_copy_rect_1_to_0 c, _name_entered_left, _name_entered_top, large (16 shl 16) or 128
|
||||
call _graph_putsa_fx c, _name_entered_left, _name_entered_top, 23h, large [bp+arg_4]
|
||||
call _egc_copy_rect_1_to_0 c, _entered_name_left, _entered_name_top, large (16 shl 16) or 128
|
||||
call _graph_putsa_fx c, _entered_name_left, _entered_name_top, 23h, large [bp+arg_4]
|
||||
les bx, [bp+arg_8]
|
||||
mov bx, es:[bx]
|
||||
add bx, bx
|
||||
|
@ -9150,8 +8792,8 @@ loc_1432E:
|
|||
lea ax, [bp+var_14]
|
||||
push ax
|
||||
push 3
|
||||
push _name_entered_top
|
||||
push _name_entered_left
|
||||
push _entered_name_top
|
||||
push _entered_name_left
|
||||
call _graph_putsa_fx
|
||||
add sp, 0Ah
|
||||
xor ax, ax
|
||||
|
@ -9946,7 +9588,7 @@ loc_14B04:
|
|||
push di
|
||||
pushd [bp+@@points]
|
||||
push word ptr [bp+@@place]
|
||||
call sub_13DF5
|
||||
call _regist_put_initial
|
||||
add sp, 10h
|
||||
call _alphabet_put_initial
|
||||
mov ax, word ptr [bp+@@place]
|
||||
|
@ -9990,7 +9632,7 @@ loc_14B8D:
|
|||
push di
|
||||
pushd [bp+@@points]
|
||||
push 1Eh
|
||||
call sub_13DF5
|
||||
call _regist_put_initial
|
||||
add sp, 10h
|
||||
mov _input_ok, 1
|
||||
mov _input_shot, 1
|
||||
|
@ -60769,7 +60411,8 @@ aVavnvmvtvrb@vo db '
|
|||
aVgvivfb@vyb@vj db 'Hit Z Key',0
|
||||
db 0
|
||||
include th01/hiscore/alphabet_syms[data].asm
|
||||
aBqbqbqbqbqbqbq db '________',0
|
||||
public _REGIST_NAME_BLANK
|
||||
_REGIST_NAME_BLANK db '<27>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q<EFBFBD>Q',0
|
||||
byte_35889 db 0
|
||||
aB@b@b@b@b@b@b@ db ' ',0
|
||||
aHiscore_0 db 'HISCORE',0
|
||||
|
@ -60779,24 +60422,7 @@ off_358A3 dd aB@gcbGwbB@
|
|||
dd aB@gnbGhb@b@ ; " ハード "
|
||||
dd aGlgigegbgbgn ; "ルナティック"
|
||||
include th01/hiscore/scorelod[data].asm
|
||||
include th01/hiscore/alphabet_initial[data].asm
|
||||
aB@cB@iB@ db ' 霊 位 ',0
|
||||
aB@b@cB@b@sob@b db ' 名 前 ',0
|
||||
aB@b@uB@b@u_b@b db ' 得 点 ',0
|
||||
aGxgebGwbeglbGg db 'ステージ・ルート',0
|
||||
aB@sB@r_b@ db ' 靈 神 ',0
|
||||
aSMRgcId db '太元帥明王',0
|
||||
aB@uvb@rxb@ db ' 天 仙 ',0
|
||||
aB@r_b@rxb@ db ' 神 仙 ',0
|
||||
aB@tnb@rxb@ db ' 地 仙 ',0
|
||||
aB@rlb@rxb@ db ' 人 仙 ',0
|
||||
aB@rxb@pcb@ db ' 仙 女 ',0
|
||||
aIab@czb@ot db '陰 陽 師',0
|
||||
aSB@fB@ot db '靈 媒 師',0
|
||||
aPcb@lB@o db '修 業 者',0
|
||||
aCvke db '魔界',0
|
||||
aTnnc db '地獄',0
|
||||
aB_0 db '-',0
|
||||
include th01/hiscore/regist[data].asm
|
||||
aWB db 'wb',0
|
||||
aB@gcbGwbB@ db ' イージー ',0
|
||||
aB@gmbGGlb@ db ' ノーマル ',0
|
||||
|
|
Loading…
Reference in New Issue