[Naming] [th04/th05] Verdict screen: Number rendering

One of which also has the convenient responsibility of adding or
subtracting a number from the skill metric…

Part of P0244, funded by Blue Bolt and [Anonymous].
This commit is contained in:
nmlgc 2023-06-10 03:14:03 +02:00
parent 8b338353f8
commit 64495ca98a
4 changed files with 341 additions and 332 deletions

33
th04/end/verdict.cpp Normal file
View File

@ -0,0 +1,33 @@
#include "platform.h"
#include "pc98.h"
// If `true`, skill_apply_and_graph_percentage_put() will subtract the
// calculated fraction from [skill] rather than add it.
extern bool skill_subtract;
extern uint32_t skill;
// ZUN bloat: Turn into a parameter of graph_3_digit_put().
extern bool graph_3_digit_put_as_fixed_2_digit;
// Assumes that [num] is a 3-digit number and renders it right-aligned to the
// given VRAM position.
void pascal near graph_3_digit_put(
screen_x_t left, screen_y_t top, uint16_t num
)
;
// Calculates ([share] / [total]), applies the result × 1,000,000 to [skill],
// and renders it as a right-aligned 3.2-digit percentage to the given VRAM
// position.
void pascal near skill_apply_and_graph_percentage_put(
screen_x_t left, screen_y_t top, uint16_t total, uint16_t share
)
;
// Calculates ([num] / 1,000,000) and renders the result as a right-aligned
// 3.2-digit fraction to the given VRAM position.
void pascal near graph_fraction_of_million_put(
screen_x_t left, screen_y_t top, uint32_t num
)
;

View File

@ -1,5 +1,11 @@
public _skill_subtract
_skill_subtract db 0
grEASY db 2, 2, 2, 0AEh, 0AAh, 0BCh, 0C2h, 0
grNORMAL db 2, 0B7h, 0B8h, 0BBh, 0B6h, 0AAh, 0B5h, 0
grHARD db 2, 2, 2, 0B1h, 0AAh, 0BBh, 0ADh, 0
grLUNATIC db 0B5h, 0BEh, 0B7h, 0AAh, 0BDh, 0B2h, 0ACh, 0
grEXTRA db 2, 2, 0AEh, 0C1h, 0BDh, 0BBh, 0AAh, 0
public _graph_3_digit_put_as_fixed_2_dig
_graph_3_digit_put_as_fixed_2_dig db 0

View File

@ -1091,34 +1091,34 @@ sub_B44D endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public @GRAPH_3_DIGIT_PUT$QIIU
@graph_3_digit_put$qiiu proc near
sub_B787 proc near
var_6 = word ptr -6
@@g_str = byte ptr -4
arg_0 = word ptr 4
@@y = word ptr 6
@@x = word ptr 8
@@digit = word ptr -6
@@g_str = byte ptr -4
@@val = word ptr 4
@@top = word ptr 6
@@left = word ptr 8
enter 6, 0
push si
xor si, si
mov [bp+@@g_str], g_EMPTY
mov ax, [bp+arg_0]
mov ax, [bp+@@val]
mov bx, 100
xor dx, dx
div bx
mov [bp+var_6], ax
mov ax, [bp+arg_0]
mov [bp+@@digit], ax
mov ax, [bp+@@val]
xor dx, dx
div bx
mov [bp+arg_0], dx
cmp byte_EC73, 0
mov [bp+@@val], dx
cmp _graph_3_digit_put_as_fixed_2_dig, 0
jnz short loc_B7C5
or si, [bp+var_6]
or si, [bp+@@digit]
or si, si
jz short loc_B7C1
mov al, byte ptr [bp+var_6]
mov al, byte ptr [bp+@@digit]
add al, gb_0_
mov [bp+@@g_str], al
jmp short loc_B7C5
@ -1128,22 +1128,22 @@ loc_B7C1:
mov [bp+@@g_str], g_EMPTY
loc_B7C5:
mov ax, [bp+arg_0]
mov ax, [bp+@@val]
mov bx, 10
xor dx, dx
div bx
mov [bp+var_6], ax
mov ax, [bp+arg_0]
mov [bp+@@digit], ax
mov ax, [bp+@@val]
xor dx, dx
div bx
mov [bp+arg_0], dx
or si, [bp+var_6]
mov al, byte_EC73
mov [bp+@@val], dx
or si, [bp+@@digit]
mov al, _graph_3_digit_put_as_fixed_2_dig
mov ah, 0
or si, ax
or si, si
jz short loc_B7F4
mov al, byte ptr [bp+var_6]
mov al, byte ptr [bp+@@digit]
add al, gb_0_
mov [bp+@@g_str+1], al
jmp short loc_B7F8
@ -1153,12 +1153,12 @@ loc_B7F4:
mov [bp+@@g_str+1], g_EMPTY
loc_B7F8:
mov al, byte ptr [bp+arg_0]
mov al, byte ptr [bp+@@val]
add al, gb_0_
mov [bp+@@g_str+2], al
mov [bp+@@g_str+3], 0
push [bp+@@x]
push [bp+@@y]
push [bp+@@left]
push [bp+@@top]
push GAIJI_W
push ss
lea ax, [bp+@@g_str]
@ -1168,7 +1168,7 @@ loc_B7F8:
pop si
leave
retn 6
sub_B787 endp
@graph_3_digit_put$qiiu endp
; =============== S U B R O U T I N E =======================================
@ -1231,92 +1231,86 @@ sub_B81D endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public @SKILL_APPLY_AND_GRAPH_PERCENTAGE$QIIUIUI
@skill_apply_and_graph_percentage$qiiuiui proc near
sub_B886 proc near
var_6 = dword ptr -6
var_2 = word ptr -2
arg_0 = word ptr 4
arg_2 = word ptr 6
arg_4 = word ptr 8
arg_6 = word ptr 0Ah
@@fraction = dword ptr -6
@@digits = word ptr -2
@@share = word ptr 4
@@total = word ptr 6
@@top = word ptr 8
@@left = word ptr 0Ah
enter 6, 0
push si
push di
mov si, [bp+arg_6]
mov di, [bp+arg_4]
cmp [bp+arg_2], 0
mov si, [bp+@@left]
mov di, [bp+@@top]
cmp [bp+@@total], 0
jz short loc_B8A2
mov [bp+var_6], 1000000
mov [bp+@@fraction], 1000000
jmp short loc_B8AA
; ---------------------------------------------------------------------------
loc_B8A2:
mov [bp+var_6], 0
mov [bp+@@fraction], 0
loc_B8AA:
mov ax, [bp+arg_2]
cmp ax, [bp+arg_0]
mov ax, [bp+@@total]
cmp ax, [bp+@@share]
jz short loc_B8E3
cmp [bp+arg_2], 0
cmp [bp+@@total], 0
jz short loc_B8CD
movzx ebx, [bp+arg_2]
mov eax, [bp+var_6]
movzx ebx, [bp+@@total]
mov eax, [bp+@@fraction]
xor edx, edx
div ebx
mov [bp+var_6], eax
mov [bp+@@fraction], eax
jmp short loc_B8D5
; ---------------------------------------------------------------------------
loc_B8CD:
mov [bp+var_6], 0
mov [bp+@@fraction], 0
loc_B8D5:
movzx eax, [bp+arg_0]
imul eax, [bp+var_6]
mov [bp+var_6], eax
movzx eax, [bp+@@share]
imul eax, [bp+@@fraction]
mov [bp+@@fraction], eax
loc_B8E3:
cmp byte_EC4A, 0
cmp _skill_subtract, 0
jnz short loc_B8F4
mov eax, dword_124CE
add eax, [bp+var_6]
mov eax, _skill
add eax, [bp+@@fraction]
jmp short loc_B8FC
; ---------------------------------------------------------------------------
loc_B8F4:
mov eax, dword_124CE
sub eax, [bp+var_6]
mov eax, _skill
sub eax, [bp+@@fraction]
loc_B8FC:
mov dword_124CE, eax
mov eax, [bp+var_6]
mov _skill, eax
mov eax, [bp+@@fraction]
mov ebx, 10000
xor edx, edx
div ebx
mov [bp+var_2], ax
push si
push di
push ax
call sub_B787
mov [bp+@@digits], ax
call @graph_3_digit_put$qiiu pascal, si, di, ax
mov ebx, 10000
mov eax, [bp+var_6]
mov eax, [bp+@@fraction]
xor edx, edx
div ebx
mov [bp+var_6], edx
mov eax, [bp+var_6]
mov [bp+@@fraction], edx
mov eax, [bp+@@fraction]
mov ebx, 100
xor edx, edx
div ebx
mov [bp+var_2], ax
mov byte_EC73, 1
mov [bp+@@digits], ax
mov _graph_3_digit_put_as_fixed_2_dig, 1
lea ax, [si+48]
push ax
push di
push [bp+var_2]
call sub_B787
mov byte_EC73, 0
call @graph_3_digit_put$qiiu pascal, ax, di, [bp+@@digits]
mov _graph_3_digit_put_as_fixed_2_dig, 0
lea ax, [si+48]
call graph_putsa_fx pascal, ax, di, 14, ds, offset aBd ; "<22>D"
lea ax, [si+96]
@ -1325,58 +1319,52 @@ loc_B8FC:
pop si
leave
retn 8
sub_B886 endp
@skill_apply_and_graph_percentage$qiiuiui endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public @GRAPH_FRACTION_OF_MILLION_PUT$QIIUL
@graph_fraction_of_million_put$qiiul proc near
sub_B97B proc near
var_2 = word ptr -2
arg_0 = dword ptr 4
arg_4 = word ptr 8
arg_6 = word ptr 0Ah
@@digits = word ptr -2
@@val = dword ptr 4
@@top = word ptr 8
@@left = word ptr 0Ah
enter 2, 0
push si
push di
mov si, [bp+arg_6]
mov di, [bp+arg_4]
mov eax, [bp+arg_0]
mov si, [bp+@@left]
mov di, [bp+@@top]
mov eax, [bp+@@val]
mov ebx, 10000
xor edx, edx
div ebx
mov [bp+var_2], ax
push si
push di
push ax
call sub_B787
mov [bp+@@digits], ax
call @graph_3_digit_put$qiiu pascal, si, di, ax
mov ebx, 10000
mov eax, [bp+arg_0]
mov eax, [bp+@@val]
xor edx, edx
div ebx
mov [bp+arg_0], edx
mov eax, [bp+arg_0]
mov [bp+@@val], edx
mov eax, [bp+@@val]
mov ebx, 100
xor edx, edx
div ebx
mov [bp+var_2], ax
mov byte_EC73, 1
mov [bp+@@digits], ax
mov _graph_3_digit_put_as_fixed_2_dig, 1
lea ax, [si+48]
push ax
push di
push [bp+var_2]
call sub_B787
mov byte_EC73, 0
call @graph_3_digit_put$qiiu pascal, ax, di, [bp+@@digits]
mov _graph_3_digit_put_as_fixed_2_dig, 0
lea ax, [si+48]
call graph_putsa_fx pascal, ax, di, 14, ds, offset aBd_0 ; "<22>D"
pop di
pop si
leave
retn 8
sub_B97B endp
@graph_fraction_of_million_put$qiiul endp
; =============== S U B R O U T I N E =======================================
@ -1513,12 +1501,10 @@ loc_BB2A:
mov [bp+var_4], 1000000
loc_BB48:
mov eax, dword_124CE
mov eax, _skill
add eax, [bp+var_4]
mov dword_124CE, eax
push 0C00108h
pushd [bp+var_4]
call sub_B97B
mov _skill, eax
call @graph_fraction_of_million_put$qiiul pascal, (192 shl 16) or 264, [bp+var_4]
call graph_putsa_fx pascal, (288 shl 16) or 264, 14, ds, offset aBu_0 ; "<22>“"
leave
retn
@ -1581,18 +1567,18 @@ loc_BC79:
push 14
call graph_gaiji_puts
call sub_B81D
push 0F00078h
push (240 shl 16) or 120 ; (left shl 16) or top
les bx, _resident
mov al, es:[bx+resident_t.miss_count]
mov ah, 0
push ax
call sub_B787
push 0F00090h
push ax ; num
call @graph_3_digit_put$qiiu
push (240 shl 16) or 144 ; (left shl 16) or top
les bx, _resident
mov al, es:[bx+resident_t.bombs_used]
mov ah, 0
push ax
call sub_B787
push ax ; num
call @graph_3_digit_put$qiiu
call graph_putsa_fx pascal, (288 shl 16) or 120, 14, ds, offset aTimes ; "‰ñ"
call graph_putsa_fx pascal, (288 shl 16) or 144, 14, ds, offset aTimes_0 ; "‰ñ"
mov byte_124CC, 1
@ -1604,7 +1590,7 @@ loc_BC79:
mov es:[bx+resident_t.std_frames], 44000
loc_BCFF:
push 0C000A8h
push (192 shl 16) or 168
push 44000
jmp short loc_BD24
; ---------------------------------------------------------------------------
@ -1616,53 +1602,53 @@ loc_BD0A:
mov es:[bx+resident_t.std_frames], 12000
loc_BD1B:
push 0C000A8h
push 12000
push (192 shl 16) or 168 ; (left shl 16) or top
push 12000 ; total
loc_BD24:
les bx, _resident
push es:[bx+resident_t.std_frames]
call sub_B886
push es:[bx+resident_t.std_frames] ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov byte_124CC, 0
push 0C000C0h
push (192 shl 16) or 192 ; (left shl 16) or top
les bx, _resident
push es:[bx+resident_t.enemies_gone]
push es:[bx+resident_t.enemies_killed]
call sub_B886
push 0C000D8h
push es:[bx+resident_t.enemies_gone] ; total
push es:[bx+resident_t.enemies_killed] ; share
call @skill_apply_and_graph_percentage$qiiuiui
push (192 shl 16) or 216 ; (left shl 16) or top
les bx, _resident
push es:[bx+resident_t.items_spawned]
push es:[bx+resident_t.items_collected]
call sub_B886
push 0C000F0h
push es:[bx+resident_t.items_spawned] ; total
push es:[bx+resident_t.items_collected] ; share
call @skill_apply_and_graph_percentage$qiiuiui
push (192 shl 16) or 240 ; (left shl 16) or top
les bx, _resident
push es:[bx+resident_t.point_items_collected]
push es:[bx+resident_t.max_valued_point_items_collected]
call sub_B886
push es:[bx+resident_t.point_items_collected] ; total
push es:[bx+resident_t.max_valued_point_items_collected] ; share
call @skill_apply_and_graph_percentage$qiiuiui
call sub_B9F2
push 0C00120h
push (192 shl 16) or 288 ; (left shl 16) or top
les bx, _resident
mov eax, es:[bx+resident_t.frames]
mov ebx, 10
xor edx, edx
div ebx
push ax
push ax ; total
mov bx, word ptr _resident
mov eax, es:[bx+resident_t.slow_frames]
mov ebx, 10
xor edx, edx
div ebx
push ax
call sub_B886
push ax ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov ebx, 5
mov eax, dword_124CE
mov eax, _skill
cdq
idiv ebx
mov dword_124CE, eax
mov _skill, eax
les bx, _resident
cmp es:[bx+resident_t.score_last][7], 9
jb short loc_BDD4
add dword_124CE, 600000
add _skill, 600000
jmp short loc_BE08
; ---------------------------------------------------------------------------
@ -1670,7 +1656,7 @@ loc_BDD4:
les bx, _resident
movzx eax, es:[bx+resident_t.score_last][6]
imul eax, 10000
add dword_124CE, eax
add _skill, eax
cmp es:[bx+resident_t.score_last][7], 3
jbe short loc_BE08
mov al, es:[bx+resident_t.score_last][7]
@ -1678,7 +1664,7 @@ loc_BDD4:
add ax, -3
cwde
imul eax, 100000
add dword_124CE, eax
add _skill, eax
loc_BE08:
mov al, _verdict_rank
@ -1690,7 +1676,7 @@ loc_BE08:
jmp cs:off_C0EE[bx]
loc_BE1B:
sub dword_124CE, 50000
sub _skill, 50000
mov [bp+var_4], 800000
jmp short loc_BE6F
; ---------------------------------------------------------------------------
@ -1701,19 +1687,19 @@ loc_BE2E:
; ---------------------------------------------------------------------------
loc_BE38:
add dword_124CE, 150000
add _skill, 150000
mov [bp+var_4], 1200000
jmp short loc_BE6F
; ---------------------------------------------------------------------------
loc_BE4B:
add dword_124CE, 300000
add _skill, 300000
mov [bp+var_4], 1400000
jmp short loc_BE6F
; ---------------------------------------------------------------------------
loc_BE5E:
add dword_124CE, 450000
add _skill, 450000
mov [bp+var_4], 1500000
loc_BE6F:
@ -1728,13 +1714,13 @@ loc_BE6F:
jmp cs:off_C0E2[bx]
loc_BE88:
add dword_124CE, 50000
add _skill, 50000
add [bp+var_4], 100000
jmp short loc_BECA
; ---------------------------------------------------------------------------
loc_BE9B:
add dword_124CE, 25000
add _skill, 25000
add [bp+var_4], 50000
jmp short loc_BECA
; ---------------------------------------------------------------------------
@ -1764,26 +1750,26 @@ loc_BECA:
; ---------------------------------------------------------------------------
loc_BEDF:
add dword_124CE, 50000
add _skill, 50000
add [bp+var_4], 100000
jmp short loc_BF03
; ---------------------------------------------------------------------------
loc_BEF2:
add dword_124CE, 20000
add _skill, 20000
add [bp+var_4], 50000
loc_BF03:
les bx, _resident
cmp es:[bx+resident_t.turbo_mode], 0
jnz short loc_BF17
sub dword_124CE, 100000
sub _skill, 100000
loc_BF17:
les bx, _resident
cmp es:[bx+resident_t.miss_count], 15
jb short loc_BF2D
sub dword_124CE, 300000
sub _skill, 300000
jmp short loc_BF43
; ---------------------------------------------------------------------------
@ -1791,13 +1777,13 @@ loc_BF2D:
les bx, _resident
movzx eax, es:[bx+resident_t.miss_count]
imul eax, 20000
sub dword_124CE, eax
sub _skill, eax
loc_BF43:
les bx, _resident
cmp es:[bx+resident_t.bombs_used], 30
jb short loc_BF59
sub dword_124CE, 90000
sub _skill, 90000
jmp short loc_BF6F
; ---------------------------------------------------------------------------
@ -1805,7 +1791,7 @@ loc_BF59:
les bx, _resident
movzx eax, es:[bx+resident_t.bombs_used]
imul eax, 3000
sub dword_124CE, eax
sub _skill, eax
loc_BF6F:
les bx, _resident
@ -1814,15 +1800,15 @@ loc_BF6F:
cmp _verdict_rank, RANK_EXTRA
jz short loc_BF96
mov ebx, 2
mov eax, dword_124CE
mov eax, _skill
cdq
idiv ebx
mov dword_124CE, eax
mov _skill, eax
jmp short loc_BFB4
; ---------------------------------------------------------------------------
loc_BF96:
sub dword_124CE, 200000
sub _skill, 200000
jmp short loc_BFB4
; ---------------------------------------------------------------------------
@ -1833,18 +1819,18 @@ loc_BFA1:
sub [bp+var_4], 100000
loc_BFB4:
cmp dword_124CE, 0
cmp _skill, 0
jge short loc_BFC7
mov dword_124CE, 0
mov _skill, 0
jmp short loc_BFD9
; ---------------------------------------------------------------------------
loc_BFC7:
mov eax, dword_124CE
mov eax, _skill
cmp eax, [bp+var_4]
jbe short loc_BFD9
mov eax, [bp+var_4]
mov dword_124CE, eax
mov _skill, eax
loc_BFD9:
les bx, _resident
@ -1852,25 +1838,23 @@ loc_BFD9:
shr eax, 1
cmp eax, es:[bx+resident_t.slow_frames]
jbe loc_C0AE
push 0C00150h
pushd [dword_124CE]
call sub_B97B
call @graph_fraction_of_million_put$qiiul pascal, (192 shl 16) or 336, [_skill]
call graph_putsa_fx pascal, (288 shl 16) or 336, 14, ds, offset aPoint ; "“_"
push ds
push offset a_ude_txt ; "_ude.txt"
call file_ropen
cmp dword_124CE, 1500000
cmp _skill, 1500000
jge short loc_C084
cmp dword_124CE, 0
cmp _skill, 0
jnz short loc_C02E
mov si, 19h
jmp short loc_C074
; ---------------------------------------------------------------------------
loc_C02E:
cmp dword_124CE, 1050000
cmp _skill, 1050000
jge short loc_C051
mov eax, dword_124CE
mov eax, _skill
mov ebx, 50000
cdq
idiv ebx
@ -1881,14 +1865,14 @@ loc_C02E:
; ---------------------------------------------------------------------------
loc_C051:
cmp dword_124CE, 1200000
cmp _skill, 1200000
jge short loc_C061
mov si, 3
jmp short loc_C074
; ---------------------------------------------------------------------------
loc_C061:
cmp dword_124CE, 1350000
cmp _skill, 1350000
jge short loc_C071
mov si, 2
jmp short loc_C074
@ -3309,9 +3293,7 @@ aSff6b_cdg db 'sff6b.cdg',0
aSff7_cdg db 'sff7.cdg',0
aSff7b_cdg db 'sff7b.cdg',0
db 0
byte_EC4A db 0
include th04/gaiji/verdict[data].asm
byte_EC73 db 0
aU_ db '“_',0
aBd db '<27>D',0
aBu db '<27>“',0
@ -3381,7 +3363,8 @@ _dissolve_put_func dw ?
db 2 dup(?)
byte_124CC db ?
db ? ;
dword_124CE dd ?
public _skill
_skill dd ?
_verdict_rank db ?
unk_124D3 db ? ;
db 27 dup(?)

View File

@ -2595,8 +2595,8 @@ sub_C1DD endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_C5E7 proc near
public @GRAPH_3_DIGIT_PUT$QIIU
@graph_3_digit_put$qiiu proc near
var_6 = word ptr -6
@@g_str = byte ptr -4
@ -2617,7 +2617,7 @@ arg_0 = word ptr 4
xor dx, dx
div bx
mov [bp+arg_0], dx
cmp byte_11713, 0
cmp _graph_3_digit_put_as_fixed_2_dig, 0
jnz short loc_C625
or si, [bp+var_6]
or si, si
@ -2642,7 +2642,7 @@ loc_C625:
div bx
mov [bp+arg_0], dx
or si, [bp+var_6]
mov al, byte_11713
mov al, _graph_3_digit_put_as_fixed_2_dig
mov ah, 0
or si, ax
or si, si
@ -2672,7 +2672,7 @@ loc_C658:
pop si
leave
retn 6
sub_C5E7 endp
@graph_3_digit_put$qiiu endp
; =============== S U B R O U T I N E =======================================
@ -2771,99 +2771,93 @@ sub_C67F endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public @SKILL_APPLY_AND_GRAPH_PERCENTAGE$QIIUIUI
@skill_apply_and_graph_percentage$qiiuiui proc near
sub_C729 proc near
var_6 = dword ptr -6
var_2 = word ptr -2
arg_0 = word ptr 4
arg_2 = word ptr 6
arg_4 = word ptr 8
arg_6 = word ptr 0Ah
@@fraction = dword ptr -6
@@digits = word ptr -2
@@share = word ptr 4
@@total = word ptr 6
@@top = word ptr 8
@@left = word ptr 0Ah
enter 6, 0
push si
push di
mov si, [bp+arg_6]
mov di, [bp+arg_4]
cmp [bp+arg_2], 0
mov si, [bp+@@left]
mov di, [bp+@@top]
cmp [bp+@@total], 0
jz short loc_C745
mov [bp+var_6], 1000000
mov [bp+@@fraction], 1000000
jmp short loc_C74D
; ---------------------------------------------------------------------------
loc_C745:
mov [bp+var_6], 0
mov [bp+@@fraction], 0
loc_C74D:
mov ax, [bp+arg_2]
cmp ax, [bp+arg_0]
mov ax, [bp+@@total]
cmp ax, [bp+@@share]
jz short loc_C786
cmp [bp+arg_2], 0
cmp [bp+@@total], 0
jz short loc_C770
movzx ebx, [bp+arg_2]
mov eax, [bp+var_6]
movzx ebx, [bp+@@total]
mov eax, [bp+@@fraction]
xor edx, edx
div ebx
mov [bp+var_6], eax
mov [bp+@@fraction], eax
jmp short loc_C778
; ---------------------------------------------------------------------------
loc_C770:
mov [bp+var_6], 0
mov [bp+@@fraction], 0
loc_C778:
movzx eax, [bp+arg_0]
imul eax, [bp+var_6]
mov [bp+var_6], eax
movzx eax, [bp+@@share]
imul eax, [bp+@@fraction]
mov [bp+@@fraction], eax
loc_C786:
cmp byte_116EA, 0
cmp _skill_subtract, 0
jnz short loc_C797
mov eax, dword_1517E
add eax, [bp+var_6]
mov eax, _skill
add eax, [bp+@@fraction]
jmp short loc_C79F
; ---------------------------------------------------------------------------
loc_C797:
mov eax, dword_1517E
sub eax, [bp+var_6]
mov eax, _skill
sub eax, [bp+@@fraction]
loc_C79F:
mov dword_1517E, eax
mov _skill, eax
cmp byte_1517C, 0
jz short loc_C7B6
mov eax, [bp+var_6]
mov eax, [bp+@@fraction]
shr eax, 2
mov dword_15182, eax
loc_C7B6:
mov eax, [bp+var_6]
mov eax, [bp+@@fraction]
mov ebx, 10000
xor edx, edx
div ebx
mov [bp+var_2], ax
push si
push di
push ax
call sub_C5E7
mov [bp+@@digits], ax
call @graph_3_digit_put$qiiu pascal, si, di, ax
mov ebx, 10000
mov eax, [bp+var_6]
mov eax, [bp+@@fraction]
xor edx, edx
div ebx
mov [bp+var_6], edx
mov eax, [bp+var_6]
mov [bp+@@fraction], edx
mov eax, [bp+@@fraction]
mov ebx, 100
xor edx, edx
div ebx
mov [bp+var_2], ax
mov byte_11713, 1
mov [bp+@@digits], ax
mov _graph_3_digit_put_as_fixed_2_dig, 1
lea ax, [si+48]
push ax
push di
push [bp+var_2]
call sub_C5E7
mov byte_11713, 0
call @graph_3_digit_put$qiiu pascal, ax, di, [bp+@@digits]
mov _graph_3_digit_put_as_fixed_2_dig, 0
lea ax, [si+48]
call graph_putsa_fx pascal, ax, di, col_116E4, ds, offset aBd
lea ax, [si+96]
@ -2872,58 +2866,52 @@ loc_C7B6:
pop si
leave
retn 8
sub_C729 endp
@skill_apply_and_graph_percentage$qiiuiui endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
public @GRAPH_FRACTION_OF_MILLION_PUT$QIIUL
@graph_fraction_of_million_put$qiiul proc near
sub_C835 proc near
var_2 = word ptr -2
arg_0 = dword ptr 4
@@y = word ptr 8
arg_6 = word ptr 0Ah
@@digits = word ptr -2
@@val = dword ptr 4
@@top = word ptr 8
@@left = word ptr 0Ah
enter 2, 0
push si
push di
mov si, [bp+arg_6]
mov di, [bp+@@y]
mov eax, [bp+arg_0]
mov si, [bp+@@left]
mov di, [bp+@@top]
mov eax, [bp+@@val]
mov ebx, 10000
xor edx, edx
div ebx
mov [bp+var_2], ax
push si
push di
push ax
call sub_C5E7
mov [bp+@@digits], ax
call @graph_3_digit_put$qiiu pascal, si, di, ax
mov ebx, 10000
mov eax, [bp+arg_0]
mov eax, [bp+@@val]
xor edx, edx
div ebx
mov [bp+arg_0], edx
mov eax, [bp+arg_0]
mov [bp+@@val], edx
mov eax, [bp+@@val]
mov ebx, 100
xor edx, edx
div ebx
mov [bp+var_2], ax
mov byte_11713, 1
mov [bp+@@digits], ax
mov _graph_3_digit_put_as_fixed_2_dig, 1
lea ax, [si+48]
push ax
push di
push [bp+var_2]
call sub_C5E7
mov byte_11713, 0
call @graph_3_digit_put$qiiu pascal, ax, di, [bp+@@digits]
mov _graph_3_digit_put_as_fixed_2_dig, 0
lea ax, [si+48]
call graph_putsa_fx pascal, ax, di, col_116E4, ds, offset aBd_0
pop di
pop si
leave
retn 8
sub_C835 endp
@graph_fraction_of_million_put$qiiul endp
; =============== S U B R O U T I N E =======================================
@ -3041,15 +3029,15 @@ loc_C9B3:
mov eax, [bp+var_4]
imul eax, 100
mov [bp+var_4], eax
add dword_1517E, eax
add _skill, eax
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 216
push ax
pushd [bp+var_4]
call sub_C835
push ax ; top
pushd [bp+var_4] ; num
call @graph_fraction_of_million_put$qiiul
mov ax, x_116E2
add ax, 272
push ax
@ -3178,7 +3166,7 @@ var_4 = dword ptr -4
enter 4, 0
push si
mov dword_1517E, 0
mov _skill, 0
mov _graph_putsa_fx_func, FX_WEIGHT_BOLD
call graph_putsa_fx pascal, x_116E2, y_116E8, col_116E4, ds, offset aB@b@b@b@b@b@b@ ; "        腕前判定"
push x_116E2
@ -3310,26 +3298,26 @@ loc_CBE3:
call sub_C67F
mov ax, x_116E2
add ax, 224
push ax
push ax ; left
mov ax, y_116E8
add ax, 72
push ax
push ax ; top
les bx, _resident
mov al, es:[bx+resident_t.miss_count]
mov ah, 0
push ax
call sub_C5E7
push ax ; num
call @graph_3_digit_put$qiiu
mov ax, x_116E2
add ax, 224
push ax
push ax ; left
mov ax, y_116E8
add ax, 96
push ax
push ax ; top
les bx, _resident
mov al, es:[bx+resident_t.bombs_used]
mov ah, 0
push ax
call sub_C5E7
push ax ; num
call @graph_3_digit_put$qiiu
mov ax, x_116E2
add ax, 272
push ax
@ -3378,80 +3366,80 @@ loc_CCC6:
loc_CCD7:
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 120
push ax
push 12800
push ax ; top
push 12800 ; total
loc_CCE8:
les bx, _resident
push es:[bx+resident_t.std_frames]
call sub_C729
push es:[bx+resident_t.std_frames] ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov byte_1517C, 0
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 144
push ax
push ax ; top
les bx, _resident
push es:[bx+resident_t.enemies_gone]
push es:[bx+resident_t.enemies_killed]
call sub_C729
push es:[bx+resident_t.enemies_gone] ; total
push es:[bx+resident_t.enemies_killed] ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 168
push ax
push ax ; top
les bx, _resident
push es:[bx+resident_t.items_spawned]
push es:[bx+resident_t.items_collected]
call sub_C729
push es:[bx+resident_t.items_spawned] ; total
push es:[bx+resident_t.items_collected] ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 192
push ax
push ax ; top
les bx, _resident
push es:[bx+resident_t.point_items_collected]
push es:[bx+resident_t.max_valued_point_items_collected]
call sub_C729
push es:[bx+resident_t.point_items_collected] ; total
push es:[bx+resident_t.max_valued_point_items_collected] ; share
call @skill_apply_and_graph_percentage$qiiuiui
call sub_C8AE
mov byte_116EA, 1
mov _skill_subtract, 1
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 240
push ax
push ax ; top
les bx, _resident
mov eax, es:[bx+resident_t.frames]
mov ebx, 10
xor edx, edx
div ebx
push ax
push ax ; total
mov bx, word ptr _resident
mov eax, es:[bx+resident_t.slow_frames]
mov ebx, 10
xor edx, edx
div ebx
push ax
call sub_C729
mov byte_116EA, 0
push ax ; share
call @skill_apply_and_graph_percentage$qiiuiui
mov _skill_subtract, 0
mov ebx, 12
mov eax, dword_1517E
mov eax, _skill
cdq
idiv ebx
mov dword_1517E, eax
mov _skill, eax
mov eax, dword_15182
add dword_1517E, eax
add _skill, eax
les bx, _resident
cmp es:[bx+resident_t.score_highest][7], 10
jb short loc_CDCB
add dword_1517E, 500000
add _skill, 500000
jmp short loc_CDF3
; ---------------------------------------------------------------------------
@ -3459,10 +3447,10 @@ loc_CDCB:
les bx, _resident
movzx eax, es:[bx+resident_t.score_highest][6]
imul eax, 5000
add dword_1517E, eax
add _skill, eax
movzx eax, es:[bx+resident_t.score_highest][7]
imul eax, 50000
add dword_1517E, eax
add _skill, eax
loc_CDF3:
mov al, _verdict_rank
@ -3474,7 +3462,7 @@ loc_CDF3:
jmp cs:off_D165[bx]
loc_CE08:
sub dword_1517E, 50000
sub _skill, 50000
mov [bp+var_4], 800000
jmp loc_CEAF
; ---------------------------------------------------------------------------
@ -3485,40 +3473,40 @@ loc_CE1C:
; ---------------------------------------------------------------------------
loc_CE27:
mov eax, dword_1517E
mov eax, _skill
imul eax, 5
mov dword_1517E, eax
mov _skill, eax
mov ebx, 4
cdq
idiv ebx
mov dword_1517E, eax
add dword_1517E, 150000
mov _skill, eax
add _skill, 150000
mov [bp+var_4], 1200000
jmp short loc_CEAF
; ---------------------------------------------------------------------------
loc_CE55:
mov eax, dword_1517E
mov eax, _skill
imul eax, 3
mov dword_1517E, eax
mov _skill, eax
mov ebx, 2
cdq
idiv ebx
mov dword_1517E, eax
add dword_1517E, 300000
mov _skill, eax
add _skill, 300000
mov [bp+var_4], 1400000
jmp short loc_CEAF
; ---------------------------------------------------------------------------
loc_CE83:
mov eax, dword_1517E
mov eax, _skill
imul eax, 3
mov dword_1517E, eax
mov _skill, eax
mov ebx, 2
cdq
idiv ebx
mov dword_1517E, eax
add dword_1517E, 250000
mov _skill, eax
add _skill, 250000
mov [bp+var_4], 2000000
loc_CEAF:
@ -3533,13 +3521,13 @@ loc_CEAF:
jmp cs:off_D159[bx]
loc_CEC8:
add dword_1517E, 50000
add _skill, 50000
add [bp+var_4], 100000
jmp short loc_CF0A
; ---------------------------------------------------------------------------
loc_CEDB:
add dword_1517E, 25000
add _skill, 25000
add [bp+var_4], 50000
jmp short loc_CF0A
; ---------------------------------------------------------------------------
@ -3571,33 +3559,33 @@ loc_CF0A:
; ---------------------------------------------------------------------------
loc_CF24:
add dword_1517E, 50000
add _skill, 50000
add [bp+var_4], 100000
jmp short loc_CF5B
; ---------------------------------------------------------------------------
loc_CF37:
add dword_1517E, 30000
add _skill, 30000
add [bp+var_4], 50000
jmp short loc_CF5B
; ---------------------------------------------------------------------------
loc_CF4A:
add dword_1517E, 20000
add _skill, 20000
add [bp+var_4], 25000
loc_CF5B:
les bx, _resident
cmp es:[bx+resident_t.turbo_mode], 0
jnz short loc_CF77
sub dword_1517E, 200000
sub _skill, 200000
sub [bp+var_4], 100000
loc_CF77:
les bx, _resident
cmp es:[bx+resident_t.miss_count], 10
jb short loc_CF8D
sub dword_1517E, 300000
sub _skill, 300000
jmp short loc_CFA3
; ---------------------------------------------------------------------------
@ -3605,13 +3593,13 @@ loc_CF8D:
les bx, _resident
movzx eax, es:[bx+resident_t.miss_count]
imul eax, 30000
sub dword_1517E, eax
sub _skill, eax
loc_CFA3:
les bx, _resident
cmp es:[bx+resident_t.bombs_used], 15
jb short loc_CFB9
sub dword_1517E, 225000
sub _skill, 225000
jmp short loc_CFCF
; ---------------------------------------------------------------------------
@ -3619,33 +3607,33 @@ loc_CFB9:
les bx, _resident
movzx eax, es:[bx+resident_t.bombs_used]
imul eax, 15000
sub dword_1517E, eax
sub _skill, eax
loc_CFCF:
les bx, _resident
cmp es:[bx+resident_t.end_sequence], ES_EXTRA
jnb short loc_CFF5
mov eax, dword_1517E
mov eax, _skill
imul eax, 7
mov dword_1517E, eax
mov _skill, eax
mov ebx, 8
cdq
idiv ebx
mov dword_1517E, eax
mov _skill, eax
loc_CFF5:
cmp dword_1517E, 0
cmp _skill, 0
jge short loc_D008
mov dword_1517E, 0
mov _skill, 0
jmp short loc_D01A
; ---------------------------------------------------------------------------
loc_D008:
mov eax, dword_1517E
mov eax, _skill
cmp eax, [bp+var_4]
jbe short loc_D01A
mov eax, [bp+var_4]
mov dword_1517E, eax
mov _skill, eax
loc_D01A:
mov byte_15187, 0
@ -3657,12 +3645,12 @@ loc_D01A:
jbe loc_D120
mov ax, x_116E2
add ax, 176
push ax
push ax ; left
mov ax, y_116E8
add ax, 272
push ax
pushd [dword_1517E]
call sub_C835
push ax ; top
pushd [_skill] ; num
call @graph_fraction_of_million_put$qiiul
mov ax, x_116E2
add ax, 272
push ax
@ -3676,18 +3664,18 @@ loc_D01A:
push ds
push offset a_ude_txt ; "_ude.txt"
call file_ropen
cmp dword_1517E, 1500000
cmp _skill, 1500000
jge short loc_D0E1
cmp dword_1517E, 0
cmp _skill, 0
jnz short loc_D08B
mov si, 19h
jmp short loc_D0D1
; ---------------------------------------------------------------------------
loc_D08B:
cmp dword_1517E, 1050000
cmp _skill, 1050000
jge short loc_D0AE
mov eax, dword_1517E
mov eax, _skill
mov ebx, 50000
cdq
idiv ebx
@ -3698,14 +3686,14 @@ loc_D08B:
; ---------------------------------------------------------------------------
loc_D0AE:
cmp dword_1517E, 1200000
cmp _skill, 1200000
jge short loc_D0BE
mov si, 3
jmp short loc_D0D1
; ---------------------------------------------------------------------------
loc_D0BE:
cmp dword_1517E, 1350000
cmp _skill, 1350000
jge short loc_D0CE
mov si, 2
jmp short loc_D0D1
@ -6594,9 +6582,7 @@ x_116E2 dw 336
col_116E4 dw 2
word_116E6 dw 6
y_116E8 dw 48
byte_116EA db 0
include th04/gaiji/verdict[data].asm
byte_11713 db 0
aU__0 db '点',0
aBd db '',0
aBu db '',0
@ -6699,9 +6685,10 @@ include th03/hiscore/regist[bss].asm
_rank db ?
playchar_15178 db ?
db 3 dup(?)
public _skill
byte_1517C db ?
db ?
dword_1517E dd ?
_skill dd ?
dword_15182 dd ?
_verdict_rank db ?
byte_15187 db ?