mirror of https://github.com/nmlgc/ReC98.git
[Reverse-engineering] [th05] Number display using the bold gaiji font
Many thanks to http://bytepointer.com/tasm/index.htm for providing a better searchable resource for TASM's default `LEA imm16` → `MOV imm16` optimization, which we initially had to hack around here. Funded by -Tom-.
This commit is contained in:
parent
ba3a6f7158
commit
fac879f8e6
|
@ -63,6 +63,8 @@ twobyte_t ends
|
|||
RES_X = 640
|
||||
RES_Y = 400
|
||||
|
||||
GAIJI_TRAM_W = 2
|
||||
|
||||
PLAYFIELD_X = 32
|
||||
PLAYFIELD_Y = 16
|
||||
PLAYFIELD_W = 384
|
||||
|
@ -70,6 +72,9 @@ PLAYFIELD_H = 368
|
|||
PLAYFIELD_VRAM_X = PLAYFIELD_X / 8
|
||||
PLAYFIELD_VRAM_W = PLAYFIELD_W / 8
|
||||
|
||||
PLAYFIELD_TRAM_X = PLAYFIELD_X / 8
|
||||
PLAYFIELD_TRAM_W = PLAYFIELD_W / 8
|
||||
|
||||
ROW_SIZE = (RES_X / 8)
|
||||
|
||||
TILE_W = 16
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
; Bold font
|
||||
GB_DIGITS = 0A0h
|
||||
gb_0_ = GB_DIGITS + 0
|
||||
gb_1_ = GB_DIGITS + 1
|
||||
gb_2_ = GB_DIGITS + 2
|
||||
gb_3_ = GB_DIGITS + 3
|
||||
gb_4_ = GB_DIGITS + 4
|
||||
gb_5_ = GB_DIGITS + 5
|
||||
gb_6_ = GB_DIGITS + 6
|
||||
gb_7_ = GB_DIGITS + 7
|
||||
gb_8_ = GB_DIGITS + 8
|
||||
gb_9_ = GB_DIGITS + 9
|
|
@ -0,0 +1,9 @@
|
|||
public _POWERS_OF_10_LONG
|
||||
_POWERS_OF_10_LONG label dword
|
||||
dd 1000000
|
||||
dd 100000
|
||||
dd 10000
|
||||
dd 1000
|
||||
dd 100
|
||||
dd 10
|
||||
dd 1
|
|
@ -2,6 +2,7 @@ GAME = 2
|
|||
include defconv_c.inc
|
||||
include th02/hardware/input.inc
|
||||
include th02/math/randring_next.inc
|
||||
include th02/gaiji_boldfont.inc
|
||||
|
||||
kajacall macro func, param := <0>
|
||||
call _snd_kaja_interrupt pascal, (func shl 8) or (param and 0ffh)
|
||||
|
|
|
@ -6711,7 +6711,7 @@ arg_4 = word ptr 8
|
|||
sub sp, 4
|
||||
push si
|
||||
push di
|
||||
mov si, 0B4Ch
|
||||
mov si, offset _POWERS_OF_10_LONG
|
||||
mov di, 38h ; '8'
|
||||
jmp short loc_DC9A
|
||||
; ---------------------------------------------------------------------------
|
||||
|
@ -6726,13 +6726,9 @@ loc_DC65:
|
|||
sub [bp+arg_0], eax
|
||||
add si, 4
|
||||
mov ax, [bp+var_4]
|
||||
add ax, 0A0h
|
||||
add ax, GB_DIGITS
|
||||
mov [bp+var_2], ax
|
||||
push di
|
||||
push [bp+arg_4]
|
||||
push ax
|
||||
push 0E1h
|
||||
call gaiji_putca
|
||||
call gaiji_putca pascal, di, [bp+arg_4], ax, TX_WHITE
|
||||
add di, 2
|
||||
|
||||
loc_DC9A:
|
||||
|
@ -34561,34 +34557,7 @@ bombs db 3
|
|||
db 5
|
||||
word_1E5B6 dw 0
|
||||
dword_1E5B8 dd 9C40h
|
||||
db 40h
|
||||
db 42h ; B
|
||||
db 0Fh
|
||||
db 0
|
||||
db 0A0h
|
||||
db 86h
|
||||
db 1
|
||||
db 0
|
||||
db 10h
|
||||
db 27h ; '
|
||||
db 0
|
||||
db 0
|
||||
db 0E8h
|
||||
db 3
|
||||
db 0
|
||||
db 0
|
||||
db 64h ; d
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
db 0Ah
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
db 1
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
include th02/hud/number_put[data].asm
|
||||
word_1E5D8 dw 4140h
|
||||
word_1E5DA dw 4342h
|
||||
word_1E5DC dw 44h
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
g_EMPTY = 2
|
|
@ -0,0 +1,82 @@
|
|||
; Prints [val] using the bold gaiji font, right-aligned at ([x+5], [y]), with
|
||||
; the given attribute.
|
||||
; void pascal far hud_int_put(unsigned int x, unsigned int y, unsigned int val, unsigned int atrb);
|
||||
public hud_int_put
|
||||
hud_int_put proc far
|
||||
|
||||
@@atrb = word ptr 6
|
||||
@@val = word ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
push di
|
||||
; Avoid LEA being turned into MOV for immediate addresses
|
||||
pushstate
|
||||
nosmart
|
||||
lea di, _hud_gaiji_row + (SCORE_DIGITS - 5)
|
||||
movzx edx, [bp+@@val]
|
||||
lea bx, _POWERS_OF_10_LONG + (2 * 4)
|
||||
popstate
|
||||
mov ax, [bp+@@atrb]
|
||||
mov cx, 4
|
||||
jmp short hud_digits_put
|
||||
hud_int_put endp
|
||||
nop
|
||||
|
||||
|
||||
; Prints [points] using the bold gaiji font, right-aligned at ([x+8], [y]),
|
||||
; in white, using up to 7 digits (8 if the "continue" digit is included).
|
||||
; Larger numbers will overflow the most significant digit into the A-Z range.
|
||||
|
||||
; void pascal far hud_points_put(unsigned int x, unsigned int y, unsigned long points);
|
||||
public hud_points_put
|
||||
hud_points_put proc far
|
||||
|
||||
@@points = dword ptr 6
|
||||
@@y = word ptr 0Ah
|
||||
@@x = word ptr 0Ch
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
push di
|
||||
mov edx, [bp+@@points]
|
||||
mov di, offset _hud_gaiji_row
|
||||
mov ax, TX_WHITE
|
||||
mov _hud_gaiji_row[SCORE_DIGITS - 1], gb_0_ ; ("continues used" digit)
|
||||
mov bx, offset _POWERS_OF_10_LONG
|
||||
mov cx, SCORE_DIGITS - 2
|
||||
|
||||
hud_digits_put:
|
||||
push [bp+@@x]
|
||||
push [bp+@@y]
|
||||
push ds
|
||||
push di
|
||||
push ax
|
||||
mov ax, ds
|
||||
mov es, ax
|
||||
|
||||
@@digit_loop:
|
||||
mov eax, edx
|
||||
xor edx, edx
|
||||
div dword ptr [bx]
|
||||
or ch, al
|
||||
jz short @@omit_leading_zeroes
|
||||
add al, GB_DIGITS
|
||||
jmp short @@digit_next
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
@@omit_leading_zeroes:
|
||||
mov al, g_EMPTY
|
||||
|
||||
@@digit_next:
|
||||
stosb
|
||||
add bx, 4
|
||||
dec cl
|
||||
jnz short @@digit_loop
|
||||
add dl, gb_0_ ; (ones)
|
||||
mov [di], dl
|
||||
call gaiji_putsa
|
||||
pop di
|
||||
pop bp
|
||||
retf 8
|
||||
hud_points_put endp
|
|
@ -8,3 +8,5 @@ include th04/hardware/input.inc
|
|||
include th04/math/randring_next.inc
|
||||
include th04/math/motion.inc
|
||||
include th05/shot_types.inc
|
||||
include th02/gaiji_boldfont.inc
|
||||
include th04/gaiji.inc
|
||||
|
|
215
th05_main.asm
215
th05_main.asm
|
@ -9697,14 +9697,8 @@ sub_104BB endp
|
|||
sub_10574 proc far
|
||||
push bp
|
||||
mov bp, sp
|
||||
push 3E0010h
|
||||
push word_2CEC6
|
||||
push 0E1h
|
||||
call sub_1F9F4
|
||||
push 3E000Fh
|
||||
push word_22648
|
||||
push 0A1h
|
||||
call sub_1F9F4
|
||||
call hud_int_put pascal, (62 shl 16) + 16, word_2CEC6, TX_WHITE
|
||||
call hud_int_put pascal, (62 shl 16) + 15, word_22648, TX_CYAN
|
||||
pop bp
|
||||
retf
|
||||
sub_10574 endp
|
||||
|
@ -9775,10 +9769,7 @@ sub_1059D endp
|
|||
sub_1060E proc far
|
||||
push bp
|
||||
mov bp, sp
|
||||
push 3E0012h
|
||||
push word_2C97A
|
||||
push 0E1h
|
||||
call sub_1F9F4
|
||||
call hud_int_put pascal, (62 shl 16) + 18, word_2C97A, TX_WHITE
|
||||
pop bp
|
||||
retf
|
||||
sub_1060E endp
|
||||
|
@ -12981,9 +12972,7 @@ loc_11FA5:
|
|||
call gaiji_putsa
|
||||
cmp byte_2CE72, 2
|
||||
jnz short loc_11FD9
|
||||
push 1C0002h
|
||||
pushd [dword_2CE8E]
|
||||
call sub_1FA0E
|
||||
call hud_points_put pascal, ((PLAYFIELD_TRAM_X + (PLAYFIELD_TRAM_W / 2)) shl 16) + 2, large [dword_2CE8E]
|
||||
|
||||
loc_11FD9:
|
||||
inc byte_2288C
|
||||
|
@ -20876,55 +20865,55 @@ loc_165F8:
|
|||
mov si, ax
|
||||
movzx eax, si
|
||||
mov [bp+var_4], eax
|
||||
push 220008h
|
||||
push (34 shl 16) + 8
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov al, dream
|
||||
mov ah, 0
|
||||
imul ax, 0Ah
|
||||
mov si, ax
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 22000Ah
|
||||
push (34 shl 16) + 10
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov ax, word_2C97A
|
||||
imul ax, 5
|
||||
mov si, ax
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 22000Ch
|
||||
push (34 shl 16) + 12
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov si, word_2CEC6
|
||||
movzx eax, si
|
||||
imul eax, [bp+var_4]
|
||||
mov [bp+var_4], eax
|
||||
push 28000Eh
|
||||
push (40 shl 16) + 14
|
||||
push si
|
||||
push 0E1h
|
||||
nopcall sub_1F9F4
|
||||
push TX_WHITE
|
||||
nopcall hud_int_put
|
||||
mov al, stage_id
|
||||
mov ah, 0
|
||||
imul ax, 1388h
|
||||
add ax, 2710h
|
||||
imul ax, 5000
|
||||
add ax, 10000
|
||||
mov si, ax
|
||||
cmp [bp+var_5], 0
|
||||
jz short loc_166B2
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 220010h
|
||||
push (34 shl 16) + 16
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
|
||||
loc_166B2:
|
||||
cmp [bp+var_6], 0
|
||||
jz short loc_166CD
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 220011h
|
||||
push (34 shl 16) + 17
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
|
||||
loc_166CD:
|
||||
cmp [bp+var_4], 124F80h
|
||||
|
@ -20970,9 +20959,9 @@ loc_1671B:
|
|||
lea ax, [bp+var_4]
|
||||
push ax
|
||||
call sub_16438
|
||||
push 220015h
|
||||
push (34 shl 16) + 21
|
||||
pushd [bp+var_4]
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov eax, [bp+var_4]
|
||||
add _score_delta, eax
|
||||
pop si
|
||||
|
@ -21051,77 +21040,77 @@ loc_1683E:
|
|||
mov si, 3E8h
|
||||
movzx eax, si
|
||||
mov [bp+var_4], eax
|
||||
push 220006h
|
||||
push (34 shl 16) + 6
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov al, dream
|
||||
mov ah, 0
|
||||
imul ax, 0Ah
|
||||
mov si, ax
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 220008h
|
||||
push (34 shl 16) + 8
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov ax, word_2C97A
|
||||
imul ax, 5
|
||||
mov si, ax
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 22000Ah
|
||||
push (34 shl 16) + 10
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov al, lives
|
||||
mov ah, 0
|
||||
imul ax, 3E8h
|
||||
add ax, 0FC18h
|
||||
imul ax, 1000
|
||||
add ax, 64536
|
||||
mov si, ax
|
||||
movzx eax, si
|
||||
add [bp+var_4], eax
|
||||
push 22000Ch
|
||||
push (34 shl 16) + 12
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov si, word_2CEC6
|
||||
movzx eax, si
|
||||
imul eax, [bp+var_4]
|
||||
mov [bp+var_4], eax
|
||||
push 28000Eh
|
||||
push (40 shl 16) + 14
|
||||
push si
|
||||
push 0E1h
|
||||
nopcall sub_1F9F4
|
||||
mov [bp+var_8], 0C350h
|
||||
push TX_WHITE
|
||||
nopcall hud_int_put
|
||||
mov [bp+var_8], 50000
|
||||
cmp [bp+var_9], 0
|
||||
jz short loc_1691E
|
||||
mov eax, [bp+var_8]
|
||||
add [bp+var_4], eax
|
||||
push 220010h
|
||||
push (34 shl 16) + 16
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
|
||||
loc_1691E:
|
||||
cmp [bp+var_A], 0
|
||||
jz short loc_16939
|
||||
mov eax, [bp+var_8]
|
||||
add [bp+var_4], eax
|
||||
push 220011h
|
||||
push (34 shl 16) + 17
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
|
||||
loc_16939:
|
||||
movzx eax, word_22648
|
||||
imul eax, 0FAh
|
||||
imul eax, 250
|
||||
mov [bp+var_8], eax
|
||||
add [bp+var_4], eax
|
||||
push 220012h
|
||||
push (34 shl 16) + 18
|
||||
push eax
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
push ss
|
||||
lea ax, [bp+var_4]
|
||||
push ax
|
||||
call sub_16438
|
||||
push 220015h
|
||||
push (34 shl 16) + 21
|
||||
pushd [bp+var_4]
|
||||
nopcall sub_1FA0E
|
||||
nopcall hud_points_put
|
||||
mov eax, [bp+var_4]
|
||||
add _score_delta, eax
|
||||
pop si
|
||||
|
@ -37483,92 +37472,7 @@ sub_1F9BA endp
|
|||
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_1F9F4 proc far
|
||||
|
||||
arg_2 = word ptr 6
|
||||
arg_4 = word ptr 8
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
push di
|
||||
; Hack?!? What is this I don't even
|
||||
db 08dh
|
||||
db 03eh
|
||||
db 0c9h
|
||||
db 01fh
|
||||
movzx edx, [bp+arg_4]
|
||||
db 08dh
|
||||
db 01eh
|
||||
db 0a8h
|
||||
db 01fh
|
||||
mov ax, [bp+arg_2]
|
||||
mov cx, 4
|
||||
jmp short loc_1FA27
|
||||
sub_1F9F4 endp
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
nop
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
; Attributes: bp-based frame
|
||||
|
||||
sub_1FA0E proc far
|
||||
|
||||
arg_0 = dword ptr 6
|
||||
arg_4 = word ptr 0Ah
|
||||
arg_6 = word ptr 0Ch
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
push di
|
||||
mov edx, [bp+arg_0]
|
||||
mov di, offset _hud_gaiji_row
|
||||
mov ax, TX_WHITE
|
||||
mov _hud_gaiji_row[HUD_TRAM_W - 1], 0A0h
|
||||
mov bx, 1FA0h
|
||||
mov cx, 6
|
||||
|
||||
loc_1FA27:
|
||||
push [bp+arg_6]
|
||||
push [bp+arg_4]
|
||||
push ds
|
||||
push di
|
||||
push ax
|
||||
mov ax, ds
|
||||
mov es, ax
|
||||
|
||||
loc_1FA34:
|
||||
mov eax, edx
|
||||
xor edx, edx
|
||||
div dword ptr [bx]
|
||||
or ch, al
|
||||
jz short loc_1FA45
|
||||
add al, 0A0h
|
||||
jmp short loc_1FA47
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_1FA45:
|
||||
mov al, 2
|
||||
|
||||
loc_1FA47:
|
||||
stosb
|
||||
add bx, 4
|
||||
dec cl
|
||||
jnz short loc_1FA34
|
||||
add dl, 0A0h
|
||||
mov [di], dl
|
||||
call gaiji_putsa
|
||||
pop di
|
||||
pop bp
|
||||
retf 8
|
||||
sub_1FA0E endp
|
||||
|
||||
include th05/hud/number_put.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -38903,34 +38807,7 @@ SHOT_FUNCS label word
|
|||
dw shot_yuuka_l9
|
||||
byte_2297E db 0
|
||||
db 0
|
||||
db 40h
|
||||
db 42h ; B
|
||||
db 0Fh
|
||||
db 0
|
||||
db 0A0h
|
||||
db 86h
|
||||
db 1
|
||||
db 0
|
||||
unk_22988 db 10h
|
||||
db 27h ; '
|
||||
db 0
|
||||
db 0
|
||||
db 0E8h
|
||||
db 3
|
||||
db 0
|
||||
db 0
|
||||
db 64h ; d
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
db 0Ah
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
db 1
|
||||
db 0
|
||||
db 0
|
||||
db 0
|
||||
include th02/hud/number_put[data].asm
|
||||
db 10h
|
||||
db 27h ; '
|
||||
db 0E8h
|
||||
|
|
Loading…
Reference in New Issue