From 3ba536a2d894dc3836b8e510d678aac7325e960d Mon Sep 17 00:00:00 2001 From: nmlgc Date: Wed, 6 Mar 2019 19:57:23 +0100 Subject: [PATCH] [Reverse-engineering] [th04/th05] Text popups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As in, "HiScore Entry!!", "Extend!!", "Full PowerUp!!", etc. Class CFloatingText in uth05win… but I decided against naming it like that because of some stage/BGM title-related variables in the middle. Funded by -Tom-. --- th04/hud/popup.asm | 245 +++++++++++++++ th04/hud/popup[bss].asm | 27 ++ th04/{strings => hud}/popup[data].asm | 22 ++ th04/th04.asm | 2 + th04_main.asm | 437 +++++--------------------- th05_main.asm | 369 +++++----------------- 6 files changed, 467 insertions(+), 635 deletions(-) create mode 100644 th04/hud/popup.asm create mode 100644 th04/hud/popup[bss].asm rename th04/{strings => hud}/popup[data].asm (50%) diff --git a/th04/hud/popup.asm b/th04/hud/popup.asm new file mode 100644 index 00000000..79b9f7d7 --- /dev/null +++ b/th04/hud/popup.asm @@ -0,0 +1,245 @@ +; void popup_update_and_render(void); +public popup_update_and_render +popup_update_and_render proc near + +@@i = byte ptr -1 + + enter 2, 0 + mov al, _popup_id_new + cmp al, _popup_id_cur + jz short @@needs_init? + cmp _popup_frame, 64 + jb short @@needs_init? + call text_putsa pascal, (PLAYFIELD_TRAM_X shl 16) + POPUP_TRAM_Y, _PLAYFIELD_BLANK_ROW, TX_WHITE + call text_putsa pascal, (PLAYFIELD_TRAM_X shl 16) + 23, _PLAYFIELD_BLANK_ROW, TX_WHITE + mov _popup_frame, 0 + +@@needs_init?: + cmp _popup_frame, 0 + jnz short @@done? + mov al, _popup_id_new + mov _popup_id_cur, al + mov [bp+@@i], 0 + jmp short @@shiftbuf_init_more? +; --------------------------------------------------------------------------- + +@@shiftbuf_init_loop: + mov al, [bp+@@i] + mov ah, 0 + mov bx, ax + mov _popup_shiftbuf[bx], g_EMPTY + inc [bp+@@i] + +@@shiftbuf_init_more?: + cmp [bp+@@i], POPUP_LEN + jb short @@shiftbuf_init_loop + mov al, _popup_id_cur + mov ah, 0 + shl ax, 2 + mov bx, ax + pushd _POPUP_STRINGS[bx] + call _strlen + add sp, 4 + mov _popup_gaiji_len, ax + mov bx, _popup_gaiji_len + mov _popup_shiftbuf[bx], 0 + add ax, ax + mov dx, PLAYFIELD_TRAM_X + PLAYFIELD_TRAM_W + sub dx, ax + mov _popup_cur_tram_x, dx + cmp _popup_id_new, POPUP_ID_BONUS + jz short @@enforce_bonus_text_width + mov ax, PLAYFIELD_TRAM_X + (PLAYFIELD_TRAM_W / 2) + sub ax, _popup_gaiji_len + mov _popup_dest_tram_x, ax + jmp short @@finish_init +; --------------------------------------------------------------------------- + +; Since we print the number of points separately... +@@enforce_bonus_text_width: + mov _popup_dest_tram_x, 16 + +@@finish_init: + mov _popup_dest_reached, 0 + +@@done?: + cmp _popup_frame, POPUP_DURATION + jb short @@shift_needed? + call text_putsa pascal, (PLAYFIELD_TRAM_X shl 16) + POPUP_TRAM_Y, _PLAYFIELD_BLANK_ROW, TX_WHITE + mov _popup_frame, 0 + mov _popup_fp, offset nullfunc_near + leave + retn +; --------------------------------------------------------------------------- + +@@shift_needed?: + mov al, _popup_frame + mov ah, 0 + mov dx, _popup_gaiji_len + dec dx + cmp ax, dx + jge short @@use_unshifted_string + mov [bp+@@i], 0 + jmp short @@shift_more? +; --------------------------------------------------------------------------- + +@@shift_loop: + mov al, [bp+@@i] + mov ah, 0 + mov bx, ax + mov al, _popup_shiftbuf[bx+1] + mov dl, [bp+@@i] + mov dh, 0 + mov bx, dx + mov _popup_shiftbuf[bx], al + inc [bp+@@i] + +@@shift_more?: + mov al, [bp+@@i] + mov ah, 0 + mov dx, _popup_gaiji_len + dec dx + cmp ax, dx + jl short @@shift_loop + mov al, _popup_id_cur + mov ah, 0 + shl ax, 2 + mov bx, ax + les bx, _POPUP_STRINGS[bx] + assume es:nothing + mov al, _popup_frame + mov ah, 0 + add bx, ax + mov al, es:[bx] + mov bx, offset _popup_shiftbuf + dec bx + add bx, _popup_gaiji_len + mov [bx], al + call gaiji_putsa pascal, _popup_cur_tram_x, POPUP_TRAM_Y, ds, offset _popup_shiftbuf, TX_WHITE + jmp @@ret +; --------------------------------------------------------------------------- + +@@use_unshifted_string: + mov ax, _popup_cur_tram_x + cmp ax, _popup_dest_tram_x + jle short @@dest_reached + push ax + push 2 + mov al, _popup_id_cur + mov ah, 0 + shl ax, 2 + mov bx, ax + pushd _POPUP_STRINGS[bx] + push TX_WHITE + call gaiji_putsa + mov ax, _popup_gaiji_len + add ax, ax + add ax, _popup_cur_tram_x + cmp ax, PLAYFIELD_TRAM_X + PLAYFIELD_TRAM_W - GAIJI_TRAM_W + jg short @@still_shifting + mov ax, _popup_gaiji_len + add ax, ax + add ax, _popup_cur_tram_x + call text_putca pascal, ax, (POPUP_TRAM_Y shl 16) or ' ', TX_WHITE + +@@still_shifting: + sub _popup_cur_tram_x, GAIJI_TRAM_W + jmp short @@ret +; --------------------------------------------------------------------------- + +@@dest_reached: + cmp _popup_dest_reached, 0 + jnz short @@put_regular + mov _popup_dest_reached, 1 + call text_putsa pascal, (PLAYFIELD_TRAM_X shl 16) + POPUP_TRAM_Y, _PLAYFIELD_BLANK_ROW, TX_WHITE + +@@put_regular: + push _popup_dest_tram_x + push POPUP_TRAM_Y + mov al, _popup_id_cur + mov ah, 0 + shl ax, 2 + mov bx, ax + pushd _POPUP_STRINGS[bx] + push TX_WHITE + call gaiji_putsa + cmp _popup_id_cur, POPUP_ID_BONUS + jnz short @@ret +if GAME eq 5 + call hud_points_put pascal, ((PLAYFIELD_TRAM_X + (PLAYFIELD_TRAM_W / 2)) shl 16) + 2, large [_popup_bonus] +else + call popup_points_put pascal, large [_popup_bonus] +endif + +@@ret: + inc _popup_frame + leave + retn +popup_update_and_render endp + + +if GAME eq 4 +; Yes, specific to the bonus popup, due to the hardcoded position. + +; void pascal near popup_points_put(unsigned long points); +public popup_points_put +popup_points_put proc pascal near + arg @@points:dword + local @@digit:dword, @@divisor:dword, @@buf:byte:SCORE_DIGITS + 2 ; padding... + + push si + push di + mov @@divisor, 1000000 + xor si, si + xor di, di + jmp short @@more_digits? +; --------------------------------------------------------------------------- + +@@digit_loop: + mov eax, @@points + xor edx, edx + div @@divisor + mov @@digit, eax + mov eax, @@points + xor edx, edx + div @@divisor + mov @@points, edx + or di, word ptr @@digit + or di, di + jz short @@omit_leading_zeroes + mov al, byte ptr @@digit + add al, GB_DIGITS + mov @@buf[si], al + jmp short @@divisor_next +; --------------------------------------------------------------------------- + +@@omit_leading_zeroes: + mov @@buf[si], g_EMPTY + +@@divisor_next: + mov ebx, 10 + mov eax, @@divisor + xor edx, edx + div ebx + mov @@divisor, eax + inc si + +@@more_digits?: + cmp @@divisor, 1 + ja short @@digit_loop + mov al, byte ptr @@points + add al, gb_0_ + mov @@buf[SCORE_DIGITS - 2], al ; (ones) + mov @@buf[SCORE_DIGITS - 1], gb_0_ ; ("continues used" digit) + mov @@buf[SCORE_DIGITS - 0], 0 ; (null terminator) + push ((PLAYFIELD_TRAM_X + (PLAYFIELD_TRAM_W / 2)) shl 16) + POPUP_TRAM_Y + push ss + lea ax, @@buf + push ax + push TX_WHITE + call gaiji_putsa + pop di + pop si + ret +popup_points_put endp +endif diff --git a/th04/hud/popup[bss].asm b/th04/hud/popup[bss].asm new file mode 100644 index 00000000..aec45fb0 --- /dev/null +++ b/th04/hud/popup[bss].asm @@ -0,0 +1,27 @@ +POPUP_TRAM_Y = 2 +POPUP_LEN = 8 +POPUP_DURATION = 128 + +public _popup_gaiji_len, _popup_id_cur, _popup_dest_reached, _popup_shiftbuf +public _popup_cur_tram_x, _popup_dest_tram_x, _bgm_title_id, _popup_id_new +public _overlay_text_fp, _popup_fp, _popup_byte_unknown, _popup_bonus +_popup_gaiji_len dw ? +_popup_id_cur db ? +_popup_dest_reached db ? + +; Buffer used for shifting in the popup text from the right of the playfield. +; Only used while the text isn't fully visible. +_popup_shiftbuf db (POPUP_LEN + 1) dup(?) + db ? ; (word alignment) +if GAME eq 5 + dd ? ; +endif +_popup_cur_tram_x dw ? +_popup_dest_tram_x dw ? +_bgm_title_id db ? +_popup_id_new db ? +_overlay_text_fp dw ? +_popup_fp dw ? +_popup_byte_unknown db ? + db ? +_popup_bonus dd ? diff --git a/th04/strings/popup[data].asm b/th04/hud/popup[data].asm similarity index 50% rename from th04/strings/popup[data].asm rename to th04/hud/popup[data].asm index d55773d4..48dc900f 100644 --- a/th04/strings/popup[data].asm +++ b/th04/hud/popup[data].asm @@ -1,3 +1,11 @@ +POPUP_ID_HISCORE_ENTRY = 0 +POPUP_ID_EXTEND = 1 +POPUP_ID_BONUS = 2 +POPUP_ID_FULL_POWERUP = 3 +if GAME eq 5 +POPUP_ID_DREAMBONUS_MAX = 4 +endif + gStage_1 db 0BCh, 0BDh, 0AAh, 0B0h, 0AEh, 2, 0A1h, 0 gFINAL_STAGE db 0AFh, 0B2h, 0B7h, 0AAh, 0B5h, 2, 0BCh, 0BDh, 0AAh, 0B0h, 0AEh, 0 gEXTRA_STAGE db 0AEh, 0C1h, 0BDh, 0BBh, 0AAh, 2, 0BCh, 0BDh, 0AAh, 0B0h, 0AEh, 0 @@ -5,3 +13,17 @@ gpHISCORE_ENTRY db 40h, 41h, 42h, 43h, 44h, 45h, 46h, 47h, 0 gpEXTEND db 48h, 49h, 4Ah, 4Bh, 4Ch, 0 gpBONUS db 58h, 59h, 5Ah, 5Bh, 0 gpFULL_POWERUP db 50h, 51h, 52h, 53h, 54h, 55h, 56h, 57h, 0 +if GAME eq 5 +gpDREAMBONUS_MAX db 65h, 66h, 67h, 68h, 69h, 6Ah, 6Bh, 6Ch, 6Dh, 6Eh, 0 +endif + align 2 + +public _POPUP_STRINGS +_POPUP_STRINGS label dword + dd gpHISCORE_ENTRY + dd gpEXTEND + dd gpBONUS + dd gpFULL_POWERUP +if GAME eq 5 + dd gpDREAMBONUS_MAX +endif diff --git a/th04/th04.asm b/th04/th04.asm index 01068b60..444469ab 100644 --- a/th04/th04.asm +++ b/th04/th04.asm @@ -7,3 +7,5 @@ include th04/hardware/grcg.inc include th04/hardware/input.inc include th04/math/randring_next.inc include th04/math/motion.inc +include th02/gaiji_boldfont.inc +include th04/gaiji.inc diff --git a/th04_main.asm b/th04_main.asm index c9df34e9..845a4bda 100644 --- a/th04_main.asm +++ b/th04_main.asm @@ -394,8 +394,8 @@ loc_ABD8: call sub_12CE5 call _circles_render GRCG_OFF_CLOBBERING dx - call fp_259DC - call fp_259DE + call _overlay_text_fp + call _popup_fp call sub_CD36 call far ptr _input_reset_sense mov ax, vsync_Count1 @@ -677,7 +677,7 @@ sub_AED0 proc near loc_AEF9: mov word_213DE, 1 call text_fillca pascal, (' ' shl 16) + TX_BLACK + TX_REVERSE - mov fp_23D90, offset nullsub_1 + mov fp_23D90, offset nullfunc_near call sub_AD03 les bx, _humaconfig cmp byte ptr es:[bx+3Eh], 0 @@ -906,8 +906,8 @@ loc_B156: loc_B1AE: nopcall sub_CB99 - mov fp_259DC, offset sub_10DA3 - mov fp_259DE, offset nullsub_1 + mov _overlay_text_fp, offset sub_10DA3 + mov _popup_fp, offset nullfunc_near pop si pop bp retn @@ -1835,10 +1835,10 @@ RANDRING_NEXT_DEF 1 ; =============== S U B R O U T I N E ======================================= - -nullsub_1 proc near +public nullfunc_near +nullfunc_near proc near retn -nullsub_1 endp +nullfunc_near endp ; --------------------------------------------------------------------------- nop @@ -4012,15 +4012,15 @@ loc_CF70: mov al, stage_id add al, al add al, 2 - mov bgm_title_id, al + mov _bgm_title_id, al cmp stage_id, 3 jnz short loc_CFAC cmp playchar, 0 jz short loc_CFAC - mov bgm_title_id, 10h + mov _bgm_title_id, 10h loc_CFAC: - mov fp_259DC, offset sub_11195 + mov _overlay_text_fp, offset sub_11195 mov al, 1 pop bp retn @@ -6602,7 +6602,7 @@ var_1 = byte ptr -1 cmp byte_25660, 24h ; '$' jb short loc_E47B call sub_10D4B - mov fp_259DC, offset nullsub_1 + mov _overlay_text_fp, offset nullfunc_near mov al, 1 jmp short loc_E4CD ; --------------------------------------------------------------------------- @@ -6678,7 +6678,7 @@ var_1 = byte ptr -1 cmp byte_25660, 0 jnz short loc_E4EB call sub_10D77 - mov fp_259DC, offset nullsub_1 + mov _overlay_text_fp, offset nullfunc_near mov al, 1 jmp short loc_E53D ; --------------------------------------------------------------------------- @@ -7493,7 +7493,7 @@ loc_EBD8: ; --------------------------------------------------------------------------- loc_EBE4: - mov _stage_render, offset nullsub_1 + mov _stage_render, offset nullfunc_near loc_EBEA: pop di @@ -7865,8 +7865,8 @@ loc_EE60: loc_EE8C: nopcall sub_EEE8 - mov byte_259DB, 1 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_EXTEND + mov _popup_fp, offset popup_update_and_render call snd_se_play pascal, 7 locret_EEA3: @@ -10161,7 +10161,7 @@ sub_FFA4 proc near push bp mov bp, sp mov byte_256A8, 0 - mov fp_255AA, offset nullsub_1 + mov fp_255AA, offset nullfunc_near pop bp retn sub_FFA4 endp @@ -10461,7 +10461,7 @@ loc_10245: jnz short loc_10281 mov _scroll_active, 0 call graph_scrollup pascal, 0 - mov fp_255AA, offset nullsub_1 + mov fp_255AA, offset nullfunc_near mov al, Palettes+42 mov byte_257D6, al mov al, Palettes+43 @@ -11887,16 +11887,16 @@ var_1 = byte ptr -1 les bx, _humaconfig cmp byte ptr es:[bx+3Eh], 0 jnz short loc_10DC6 - mov fp_259DC, offset sub_10F36 + mov _overlay_text_fp, offset sub_10F36 jmp short loc_10DDE ; --------------------------------------------------------------------------- loc_10DC6: - mov fp_259DC, offset nullsub_1 + mov _overlay_text_fp, offset nullfunc_near call gaiji_putsa pascal, (18 shl 16) + 12, ds, offset gDEMO_PLAY, TX_YELLOW + TX_BLINK loc_10DDE: - mov byte_259E0, 0 + mov _popup_byte_unknown, 0 jmp short loc_10E35 ; --------------------------------------------------------------------------- @@ -11970,7 +11970,7 @@ var_1 = byte ptr -1 cmp byte_22EA2, 0 jnz short loc_10E51 call sub_10D77 - mov fp_259DC, offset nullsub_1 + mov _overlay_text_fp, offset nullfunc_near jmp short loc_10EA1 ; --------------------------------------------------------------------------- @@ -12088,7 +12088,7 @@ sub_10EED proc near var_1 = byte ptr -1 enter 2, 0 - mov al, byte_259E0 + mov al, _popup_byte_unknown add al, byte_22EA3 mov [bp+var_1], al cmp [bp+var_1], 0 @@ -12118,9 +12118,9 @@ sub_10EED endp sub_10F36 proc near push bp mov bp, sp - cmp byte_259E0, 0C0h + cmp _popup_byte_unknown, 0C0h jb loc_10FED - cmp byte_259E0, 0C0h + cmp _popup_byte_unknown, 0C0h jnz short loc_10F53 call sub_10D4B mov byte_22EF6, 0 @@ -12128,17 +12128,17 @@ sub_10F36 proc near ; --------------------------------------------------------------------------- loc_10F53: - test byte_259E0, 1 + test _popup_byte_unknown, 1 jnz short loc_10F5E inc byte_22EF6 loc_10F5E: cmp byte_22EF6, 10h jb short loc_10F80 - test byte_259E0, 1 + test _popup_byte_unknown, 1 jz loc_1118F - mov fp_259DC, offset nullsub_1 - mov byte_259E0, 0 + mov _overlay_text_fp, offset nullfunc_near + mov _popup_byte_unknown, 0 mov byte_22EF6, 0 pop bp retn @@ -12189,7 +12189,7 @@ loc_10FA1: ; --------------------------------------------------------------------------- loc_10FED: - cmp byte_259E0, 0 + cmp _popup_byte_unknown, 0 jnz short loc_11057 mov byte_22EF6, 10h mov al, stage_id @@ -12198,13 +12198,13 @@ loc_10FED: mov al, stage_id add al, al inc al - mov bgm_title_id, al + mov _bgm_title_id, al cmp stage_id, 0 jnz short loc_11023 cmp playchar, 0 jnz short loc_11023 mov stage_title_id, 0 - mov bgm_title_id, 0 + mov _bgm_title_id, 0 loc_11023: mov al, stage_title_id @@ -12215,7 +12215,7 @@ loc_11023: call _strlen add sp, 4 mov stage_title_len, ax - mov al, bgm_title_id + mov al, _bgm_title_id mov ah, 0 shl ax, 2 mov bx, ax @@ -12279,7 +12279,7 @@ loc_110A1: sub ax, bgm_title_len push ax push 23 - mov al, bgm_title_id + mov al, _bgm_title_id mov ah, 0 shl ax, 2 mov bx, ax @@ -12328,9 +12328,9 @@ loc_11128: push stage_title_len call sub_10EA5 GRCG_OFF_CLOBBERING dx - test byte_259E0, 3 + test _popup_byte_unknown, 3 jnz short loc_1118F - cmp byte_259E0, 0 + cmp _popup_byte_unknown, 0 jz short loc_1118F inc byte_22EF6 cmp byte_22EF6, 18h @@ -12338,7 +12338,7 @@ loc_11128: mov byte_22EF6, 0 loc_1118F: - inc byte_259E0 + inc _popup_byte_unknown pop bp retn sub_10F36 endp @@ -12370,7 +12370,7 @@ loc_111BB: jb short loc_111D8 test byte_22EA3, 1 jz loc_112D2 - mov fp_259DC, offset nullsub_1 + mov _overlay_text_fp, offset nullfunc_near mov byte_22EA3, 0 pop bp retn @@ -12401,7 +12401,7 @@ loc_11211: cmp byte_22EA3, 0 jnz short loc_11237 mov byte_22EF6, 10h - mov al, bgm_title_id + mov al, _bgm_title_id mov ah, 0 shl ax, 2 mov bx, ax @@ -12422,7 +12422,7 @@ loc_11237: sub ax, word_259C6 push ax push 23 - mov al, bgm_title_id + mov al, _bgm_title_id mov ah, 0 shl ax, 2 mov bx, ax @@ -12463,257 +12463,7 @@ loc_112D2: retn sub_11195 endp - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_112D8 proc near - -var_1 = byte ptr -1 - - enter 2, 0 - mov al, byte_259DB - cmp al, byte_259CA - jz short loc_11317 - cmp byte_22EA4, 40h - jb short loc_11317 - call text_putsa pascal, (4 shl 16) + 2, off_22EF8, TX_WHITE - call text_putsa pascal, (4 shl 16) + 23, off_22EF8, TX_WHITE - mov byte_22EA4, 0 - -loc_11317: - cmp byte_22EA4, 0 - jnz short loc_1138B - mov al, byte_259DB - mov byte_259CA, al - mov [bp+var_1], 0 - jmp short loc_11339 -; --------------------------------------------------------------------------- - -loc_1132A: - mov al, [bp+var_1] - mov ah, 0 - mov bx, ax - mov byte ptr [bx+468Ch], 2 - inc [bp+var_1] - -loc_11339: - cmp [bp+var_1], 8 - jb short loc_1132A - mov al, byte_259CA - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd dword ptr [bx+1BA6h] - call _strlen - add sp, 4 - mov word_259C8, ax - mov bx, word_259C8 - mov byte ptr [bx+468Ch], 0 - add ax, ax - mov dx, 34h ; '4' - sub dx, ax - mov word_259D6, dx - cmp byte_259DB, 2 - jz short loc_11380 - mov ax, 1Ch - sub ax, word_259C8 - mov word_259D8, ax - jmp short loc_11386 -; --------------------------------------------------------------------------- - -loc_11380: - mov word_259D8, 10h - -loc_11386: - mov byte_259CB, 0 - -loc_1138B: - cmp byte_22EA4, 80h - jb short loc_113B2 - call text_putsa pascal, (4 shl 16) + 2, off_22EF8, TX_WHITE - mov byte_22EA4, 0 - mov fp_259DE, offset nullsub_1 - leave - retn -; --------------------------------------------------------------------------- - -loc_113B2: - mov al, byte_22EA4 - mov ah, 0 - mov dx, word_259C8 - dec dx - cmp ax, dx - jge short loc_11424 - mov [bp+var_1], 0 - jmp short loc_113DF -; --------------------------------------------------------------------------- - -loc_113C6: - mov al, [bp+var_1] - mov ah, 0 - mov bx, ax - mov al, [bx+468Dh] - mov dl, [bp+var_1] - mov dh, 0 - mov bx, dx - mov [bx+468Ch], al - inc [bp+var_1] - -loc_113DF: - mov al, [bp+var_1] - mov ah, 0 - mov dx, word_259C8 - dec dx - cmp ax, dx - jl short loc_113C6 - mov al, byte_259CA - mov ah, 0 - shl ax, 2 - mov bx, ax - les bx, off_22EE6[bx] - assume es:nothing - mov al, byte_22EA4 - mov ah, 0 - add bx, ax - mov al, es:[bx] - mov bx, 468Ch - dec bx - add bx, word_259C8 - mov [bx], al - call gaiji_putsa pascal, word_259D6, 2, ds, offset unk_259CC, TX_WHITE - jmp loc_114BF -; --------------------------------------------------------------------------- - -loc_11424: - mov ax, word_259D6 - cmp ax, word_259D8 - jle short loc_11474 - push ax - push 2 - mov al, byte_259CA - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd off_22EE6[bx] ; strp - push TX_WHITE - call gaiji_putsa - mov ax, word_259C8 - add ax, ax - add ax, word_259D6 - cmp ax, 32h ; '2' - jg short loc_1146D - mov ax, word_259C8 - add ax, ax - add ax, word_259D6 - call text_putca pascal, ax, (2 shl 16) + ' ', TX_WHITE - -loc_1146D: - sub word_259D6, 2 - jmp short loc_114BF -; --------------------------------------------------------------------------- - -loc_11474: - cmp byte_259CB, 0 - jnz short loc_11493 - mov byte_259CB, 1 - call text_putsa pascal, (4 shl 16) + 2, off_22EF8, TX_WHITE - -loc_11493: - push word_259D8 - push 2 - mov al, byte_259CA - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd off_22EE6[bx] ; strp - push TX_WHITE - call gaiji_putsa - cmp byte_259CA, 2 - jnz short loc_114BF - pushd [dword_259E2] - call sub_114C5 - -loc_114BF: - inc byte_22EA4 - leave - retn -sub_112D8 endp - - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_114C5 proc near - -var_12 = dword ptr -12h -var_E = dword ptr -0Eh -var_A = byte ptr -0Ah -var_4 = byte ptr -4 -var_3 = byte ptr -3 -var_2 = byte ptr -2 -arg_0 = dword ptr 4 - - enter 12h, 0 - push si - push di - mov [bp+var_E], 0F4240h - xor si, si - xor di, di - jmp short loc_11521 -; --------------------------------------------------------------------------- - -loc_114D9: - mov eax, [bp+arg_0] - xor edx, edx - div [bp+var_E] - mov [bp+var_12], eax - mov eax, [bp+arg_0] - xor edx, edx - div [bp+var_E] - mov [bp+arg_0], edx - or di, word ptr [bp+var_12] - or di, di - jz short loc_11508 - mov al, byte ptr [bp+var_12] - add al, 0A0h - mov [bp+si+var_A], al - jmp short loc_1150C -; --------------------------------------------------------------------------- - -loc_11508: - mov [bp+si+var_A], 2 - -loc_1150C: - mov ebx, 0Ah - mov eax, [bp+var_E] - xor edx, edx - div ebx - mov [bp+var_E], eax - inc si - -loc_11521: - cmp [bp+var_E], 1 - ja short loc_114D9 - mov al, byte ptr [bp+arg_0] - add al, 0A0h - mov [bp+var_4], al - mov [bp+var_3], 0A0h - mov [bp+var_2], 0 - push (28 shl 16) + 2 - push ss - lea ax, [bp+var_A] - push ax - push TX_WHITE - call gaiji_putsa - pop di - pop si - leave - retn 4 -sub_114C5 endp - +include th04/hud/popup.asm include th04/formats/bb_txt_load.asm ; =============== S U B R O U T I N E ======================================= @@ -12908,8 +12658,8 @@ loc_116FD: or al, al jz short loc_11718 mov _is_hiscore, 1 - mov byte_259DB, 0 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_HISCORE_ENTRY + mov _popup_fp, offset popup_update_and_render loc_11718: mov eax, _score_delta_frame @@ -15234,7 +14984,7 @@ var_1 = byte ptr -1 jnz short loc_12996 cmp word_2671A, 2 jg short loc_12A05 - mov _stage_render, offset nullsub_1 + mov _stage_render, offset nullfunc_near loc_12991: call tiles_render_all @@ -27865,8 +27615,8 @@ off_19EB0 dw offset loc_19AC8 sub_19EBC proc far push bp mov bp, sp - mov _midboss_invalidate?, offset nullsub_1 - mov _midboss_render, offset nullsub_1 + mov _midboss_invalidate?, offset nullfunc_near + mov _midboss_render, offset nullfunc_near setfarfp _midboss_update, nullsub_2 mov _midboss_active, 0 mov _midboss_hp, 0 @@ -33329,7 +33079,7 @@ loc_1CB7F: mov [bp+var_8], 7D0h loc_1CB84: - mov dword_259E2, 0 + mov _popup_bonus, 0 xor di, di jmp short loc_1CBF1 ; --------------------------------------------------------------------------- @@ -33352,7 +33102,7 @@ loc_1CB91: loc_1CBB7: movzx eax, [bp+var_4] - add dword_259E2, eax + add _popup_bonus, eax add _score_delta, eax push word ptr [si+2] push word ptr [si+4] @@ -33377,10 +33127,10 @@ loc_1CBED: loc_1CBF1: cmp di, 1B8h jl short loc_1CB91 - cmp dword_259E2, 0 + cmp _popup_bonus, 0 jz short loc_1CC0A - mov byte_259DB, 2 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_BONUS + mov _popup_fp, offset popup_update_and_render loc_1CC0A: inc _bullet_clear_trigger @@ -35511,8 +35261,8 @@ loc_1DBD0: jnb short loc_1DC04 cmp power, 127 jnz short loc_1DBF5 - mov byte_259DB, 3 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render cmp _bullet_clear_time, 20 jnb short loc_1DBF5 mov _bullet_clear_time, 20 @@ -35615,8 +35365,8 @@ loc_1DCCC: cmp power, 128 jb short loc_1DCFE mov power, 128 - mov byte_259DB, 3 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render cmp _bullet_clear_time, 20 jnb short loc_1DCFE mov _bullet_clear_time, 20 @@ -35658,8 +35408,8 @@ loc_1DD47: inc byte ptr es:[bx+0Bh] call sub_EEE8 call snd_se_play pascal, 7 - mov byte_259DB, 1 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_EXTEND + mov _popup_fp, offset popup_update_and_render jmp short loc_1DD90 ; jumptable 0001CCD9 case 696 ; --------------------------------------------------------------------------- @@ -35669,8 +35419,8 @@ loc_1DD6F: mov _bullet_clear_time, 20 loc_1DD7B: - mov byte_259DB, 3 - mov fp_259DE, offset sub_112D8 + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render mov power, 128 call sub_11DE6 @@ -35941,7 +35691,7 @@ sub_1DF61 proc near push bp mov bp, sp setfarfp _boss_update, nullsub_2 - mov _boss_fg_render, offset nullsub_1 + mov _boss_fg_render, offset nullfunc_near mov byte_26719, 0 mov byte_2671D, 0 mov byte_2671F, 0 @@ -35993,8 +35743,8 @@ sub_1DFEF proc far call bb_stage_load pascal, ds, offset aSt00_bb mov Palettes, 0FFh mov Palettes+1, 0FFh - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retf sub_1DFEF endp @@ -36039,8 +35789,8 @@ sub_1E0B3 proc far push ( 32 shl 16) or 8 call select_for_rank mov byte_2D01E, al - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retf sub_1E0B3 endp @@ -36081,8 +35831,8 @@ sub_1E186 proc far call super_entry_bfnt call _cdg_load_single_noalpha pascal, 16, ds, offset aSt02bk_cdg, 0 call bb_stage_load pascal, ds, offset aSt02_bb - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retf sub_1E186 endp @@ -36177,8 +35927,8 @@ loc_1E3A6: push 0 call _cdg_load_single_noalpha call bb_stage_load pascal, ds, offset aSt03_bb - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retf sub_1E245 endp @@ -36192,7 +35942,7 @@ sub_1E3C2 proc far push bp mov bp, sp setfarfp _midboss_update_func, nullsub_2 - mov _midboss_render_func, offset nullsub_1 + mov _midboss_render_func, offset nullfunc_near mov frames_until_midboss, 60000 call sub_1DF61 mov _boss_pos.cur.x, (192 shl 4) @@ -36231,7 +35981,7 @@ sub_1E47C proc far push bp mov bp, sp setfarfp _midboss_update_func, nullsub_2 - mov _midboss_render_func, offset nullsub_1 + mov _midboss_render_func, offset nullfunc_near mov frames_until_midboss, 60000 call sub_1DF61 mov _boss_pos.cur.x, (192 shl 4) @@ -36245,8 +35995,8 @@ sub_1E47C proc far mov _boss_hitbox_radius.x, (24 shl 4) mov _boss_hitbox_radius.y, (48 shl 4) call bb_stage_load pascal, ds, offset aSt05_bb - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near push (48 shl 16) or 64 push (80 shl 16) or 96 call select_for_rank @@ -36294,8 +36044,8 @@ sub_1E518 proc far mov byte_2D01E, 0 call _cdg_load_single_noalpha pascal, 16, ds, offset aSt06bk_cdg, 0 call bb_stage_load pascal, ds, offset aSt06_bb - mov _stage_render, offset nullsub_1 - mov _stage_invalidate, offset nullsub_1 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retf sub_1E518 endp @@ -36616,8 +36366,8 @@ loc_1E801: mov _boss_sprite_cur, 128 mov _boss_hitbox_radius.x, (24 shl 4) mov _boss_hitbox_radius.y, (48 shl 4) - mov bgm_title_id, 0Fh - mov fp_259DC, offset sub_11195 + mov _bgm_title_id, 0Fh + mov _overlay_text_fp, offset sub_11195 call _cdg_free pascal, 16 call bb_stage_free call _cdg_load_single_noalpha pascal, 16, ds, offset aSt06bk2_cdg, 0 @@ -36660,7 +36410,7 @@ loc_1E8C9: call sub_B80F loc_1E8D5: - mov fp_259DC, offset sub_10E39 + mov _overlay_text_fp, offset sub_10E39 kajacall KAJA_SONG_FADE, 10 jmp short loc_1E905 ; --------------------------------------------------------------------------- @@ -41093,19 +40843,15 @@ word_22E9E dw 0 word_22EA0 dw 0 byte_22EA2 db 0 byte_22EA3 db 0 -byte_22EA4 db 0 +public _popup_frame +_popup_frame db 0 db 0 include th04/formats/bb_txt[data].asm -include th04/strings/popup[data].asm - db 0 -off_22EE6 dd gpHISCORE_ENTRY - dd gpEXTEND - dd gpBONUS - dd gpFULL_POWERUP +include th04/hud/popup[data].asm byte_22EF6 db 0 db 0 -off_22EF8 dd asc_22F6A - ; " "... +public _PLAYFIELD_BLANK_ROW +_PLAYFIELD_BLANK_ROW dd aPLAYFIELD_BLANK_ROW STAGE_TITLE dd aMCB@bPhantomLa ; "ŒΆ–μ@` Phantom Land " dd aMCsb@bPhantomN ; "ŒΆ–ι@` Phantom Night" dd aMKib@bLakeOfBl ; "ŒΝŠ‰@` Lake of Blood" @@ -41132,7 +40878,7 @@ BGM_TITLE dd aWitchingDream ; "Witching Dream" dd aVivavvvvilcvb@ ; "‚©‚ν‚’‚’ˆ«–‚@` Innocence" dd aPnpcuyszlB@bCa ; "­—γY‘z‹Θ@` Capriccio " include th04/strings/demoplay[data].asm -asc_22F6A db ' ',0 +aPLAYFIELD_BLANK_ROW db ' ',0 aMCB@bPhantomLa db 'ŒΆ–μ@` Phantom Land ',0 aMCsb@bPhantomN db 'ŒΆ–ι@` Phantom Night',0 aMKib@bLakeOfBl db 'ŒΝŠ‰@` Lake of Blood',0 @@ -42114,22 +41860,7 @@ bgm_title_len dw ? stage_title_id db ? db ? word_259C6 dw ? -word_259C8 dw ? -byte_259CA db ? -byte_259CB db ? -unk_259CC db ? ; - dd ? ; - dd ? ; - db ? ; -word_259D6 dw ? -word_259D8 dw ? -bgm_title_id db ? -byte_259DB db ? -fp_259DC dw ? -fp_259DE dw ? -byte_259E0 db ? - db ? -dword_259E2 dd ? +include th04/hud/popup[bss].asm byte_259E6 db ? db ? fp_259E8 dw ? diff --git a/th05_main.asm b/th05_main.asm index 91e4ca59..a8ba5da2 100644 --- a/th05_main.asm +++ b/th05_main.asm @@ -444,8 +444,8 @@ loc_AF2D: call sub_100C6 call _circles_render GRCG_OFF_CLOBBERING dx - call fp_2CE88 - call fp_2CE8A + call _overlay_text_fp + call _popup_fp call sub_10287 call far ptr _input_reset_sense mov al, byte_25FF8 @@ -752,7 +752,7 @@ sub_B237 proc near loc_B260: mov word_20A84, 1 call text_fillca pascal, (' ' shl 16) + TX_BLACK + TX_REVERSE - mov fp_2300E, offset nullsub_2 + mov fp_2300E, offset nullfunc_near call sub_B063 les bx, _ksoconfig cmp byte ptr es:[bx+17h], 0 @@ -1051,8 +1051,8 @@ loc_B506: kajacall KAJA_SONG_PLAY loc_B52C: - mov fp_2CE88, offset sub_11914 - mov fp_2CE8A, offset nullsub_2 + mov _overlay_text_fp, offset sub_11914 + mov _popup_fp, offset nullfunc_near pop si pop bp retn @@ -2095,10 +2095,10 @@ RANDRING_NEXT_DEF 1 ; =============== S U B R O U T I N E ======================================= - -nullsub_2 proc near +public nullfunc_near +nullfunc_near proc near retn -nullsub_2 endp +nullfunc_near endp ; --------------------------------------------------------------------------- nop @@ -2606,7 +2606,7 @@ sub_C473 proc near push bp mov bp, sp mov byte_2429A, 0 - mov fp_23F58, offset nullsub_2 + mov fp_23F58, offset nullfunc_near pop bp retn sub_C473 endp @@ -2986,7 +2986,7 @@ loc_C7AE: jnz short loc_C7C9 mov _scroll_active, 0 call graph_scrollup pascal, 0 - mov fp_23F58, offset nullsub_2 + mov fp_23F58, offset nullfunc_near jmp short loc_C7D0 ; --------------------------------------------------------------------------- @@ -3244,7 +3244,7 @@ sub_C9DA proc near jnz short loc_C9FD mov _scroll_active, 0 call graph_scrollup pascal, 0 - mov fp_23F58, offset nullsub_2 + mov fp_23F58, offset nullfunc_near loc_C9FD: call sub_C99E @@ -3473,7 +3473,7 @@ sub_CBFD proc near jnz short loc_CC20 mov _scroll_active, 0 call graph_scrollup pascal, 0 - mov fp_23F58, offset nullsub_2 + mov fp_23F58, offset nullfunc_near loc_CC20: call sub_CB30 @@ -3673,7 +3673,7 @@ loc_CDB4: jnz short loc_CDCF mov _scroll_active, 0 call graph_scrollup pascal, 0 - mov fp_23F58, offset nullsub_2 + mov fp_23F58, offset nullfunc_near jmp short loc_CDD6 ; --------------------------------------------------------------------------- @@ -7483,7 +7483,7 @@ sub_EE58 proc near mov _boss_update, eax mov ax, _boss_fg_render_func mov _boss_fg_render, ax - mov fp_2CE88, offset sub_11CBB + mov _overlay_text_fp, offset sub_11CBB mov al, 1 pop bp retn @@ -8553,7 +8553,7 @@ var_1 = byte ptr -1 cmp byte_2C99C, 24h ; '$' jb short loc_F8B0 call sub_118D1 - mov fp_2CE88, offset nullsub_2 + mov _overlay_text_fp, offset nullfunc_near mov al, 1 jmp short loc_F902 ; --------------------------------------------------------------------------- @@ -8629,7 +8629,7 @@ var_1 = byte ptr -1 cmp byte_2C99C, 0 jnz short loc_F920 call sub_118F3 - mov fp_2CE88, offset nullsub_2 + mov _overlay_text_fp, offset nullfunc_near mov al, 1 jmp short loc_F972 ; --------------------------------------------------------------------------- @@ -9733,8 +9733,8 @@ var_2 = byte ptr -2 ja short loc_105E6 cmp dream, 128 jb short loc_105E6 - mov byte_2CE87, 4 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_DREAMBONUS_MAX + mov _popup_fp, offset popup_update_and_render cmp _bullet_clear_time, 20 jnb short loc_105E6 mov _bullet_clear_time, 20 @@ -12219,7 +12219,7 @@ sub_118D1 proc near ; --------------------------------------------------------------------------- loc_118DA: - call text_putsa pascal, 4, si, off_228EE, TX_WHITE + call text_putsa pascal, 4, si, _PLAYFIELD_BLANK_ROW, TX_WHITE inc si loc_118EB: @@ -12244,7 +12244,7 @@ sub_118F3 proc near ; --------------------------------------------------------------------------- loc_118FC: - call text_putsa pascal, 4, si, off_228EE, TX_BLACK + TX_REVERSE + call text_putsa pascal, 4, si, _PLAYFIELD_BLANK_ROW, TX_BLACK + TX_REVERSE inc si loc_1190C: @@ -12278,16 +12278,16 @@ var_1 = byte ptr -1 jnz short loc_1193E loc_11936: - mov fp_2CE88, offset sub_11AAE + mov _overlay_text_fp, offset sub_11AAE jmp short loc_11956 ; --------------------------------------------------------------------------- loc_1193E: - mov fp_2CE88, offset nullsub_2 + mov _overlay_text_fp, offset nullfunc_near call gaiji_putsa pascal, (18 shl 16) + 12, ds, offset gDEMO_PLAY, TX_YELLOW + TX_BLINK loc_11956: - mov byte_2CE8C, 0 + mov _popup_byte_unknown, 0 jmp short loc_119AD ; --------------------------------------------------------------------------- @@ -12361,7 +12361,7 @@ var_1 = byte ptr -1 cmp byte_2288A, 0 jnz short loc_119C9 call sub_118F3 - mov fp_2CE88, offset nullsub_2 + mov _overlay_text_fp, offset nullfunc_near jmp short loc_11A19 ; --------------------------------------------------------------------------- @@ -12479,7 +12479,7 @@ sub_11A65 proc near var_1 = byte ptr -1 enter 2, 0 - mov al, byte_2CE8C + mov al, _popup_byte_unknown add al, byte_2288B mov [bp+var_1], al cmp [bp+var_1], 0 @@ -12509,9 +12509,9 @@ sub_11A65 endp sub_11AAE proc near push bp mov bp, sp - cmp byte_2CE8C, 0C0h + cmp _popup_byte_unknown, 0C0h jb loc_11B65 - cmp byte_2CE8C, 0C0h + cmp _popup_byte_unknown, 0C0h jnz short loc_11ACB call sub_118D1 mov byte_228EC, 0 @@ -12519,17 +12519,17 @@ sub_11AAE proc near ; --------------------------------------------------------------------------- loc_11ACB: - test byte_2CE8C, 1 + test _popup_byte_unknown, 1 jnz short loc_11AD6 inc byte_228EC loc_11AD6: cmp byte_228EC, 10h jb short loc_11AF8 - test byte_2CE8C, 1 + test _popup_byte_unknown, 1 jz loc_11CB5 - mov fp_2CE88, offset nullsub_2 - mov byte_2CE8C, 0 + mov _overlay_text_fp, offset nullfunc_near + mov _popup_byte_unknown, 0 mov byte_228EC, 0 pop bp retn @@ -12580,7 +12580,7 @@ loc_11B19: ; --------------------------------------------------------------------------- loc_11B65: - cmp byte_2CE8C, 0 + cmp _popup_byte_unknown, 0 jnz short loc_11B91 mov byte_228EC, 10h pushd [_stage_title] @@ -12680,9 +12680,9 @@ loc_11C4E: push word_2CE6A call sub_11A1D GRCG_OFF_CLOBBERING dx - test byte_2CE8C, 3 + test _popup_byte_unknown, 3 jnz short loc_11CB5 - cmp byte_2CE8C, 0 + cmp _popup_byte_unknown, 0 jz short loc_11CB5 inc byte_228EC cmp byte_228EC, 18h @@ -12690,7 +12690,7 @@ loc_11C4E: mov byte_228EC, 0 loc_11CB5: - inc byte_2CE8C + inc _popup_byte_unknown pop bp retn sub_11AAE endp @@ -12722,7 +12722,7 @@ loc_11CE1: jb short loc_11CFE test byte_2288B, 1 jz loc_11DE4 - mov fp_2CE88, offset nullsub_2 + mov _overlay_text_fp, offset nullfunc_near mov byte_2288B, 0 pop bp retn @@ -12803,183 +12803,7 @@ loc_11DE4: retn sub_11CBB endp - -; =============== S U B R O U T I N E ======================================= - -; Attributes: bp-based frame - -sub_11DEA proc near - -var_1 = byte ptr -1 - - enter 2, 0 - mov al, byte_2CE87 - cmp al, byte_2CE72 - jz short loc_11E29 - cmp byte_2288C, 40h - jb short loc_11E29 - call text_putsa pascal, (4 shl 16) + 2, off_228EE, TX_WHITE - call text_putsa pascal, (4 shl 16) + 23, off_228EE, TX_WHITE - mov byte_2288C, 0 - -loc_11E29: - cmp byte_2288C, 0 - jnz short loc_11E9D - mov al, byte_2CE87 - mov byte_2CE72, al - mov [bp+var_1], 0 - jmp short loc_11E4B -; --------------------------------------------------------------------------- - -loc_11E3C: - mov al, [bp+var_1] - mov ah, 0 - mov bx, ax - mov byte ptr [bx-3B6Ch], 2 - inc [bp+var_1] - -loc_11E4B: - cmp [bp+var_1], 8 - jb short loc_11E3C - mov al, byte_2CE72 - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd dword ptr [bx+1EF8h] - call _strlen - add sp, 4 - mov word_2CE70, ax - mov bx, word_2CE70 - mov byte ptr [bx-3B6Ch], 0 - add ax, ax - mov dx, 34h ; '4' - sub dx, ax - mov word_2CE82, dx - cmp byte_2CE87, 2 - jz short loc_11E92 - mov ax, 1Ch - sub ax, word_2CE70 - mov word_2CE84, ax - jmp short loc_11E98 -; --------------------------------------------------------------------------- - -loc_11E92: - mov word_2CE84, 10h - -loc_11E98: - mov byte_2CE73, 0 - -loc_11E9D: - cmp byte_2288C, 80h - jb short loc_11EC4 - call text_putsa pascal, (4 shl 16) + 2, off_228EE, TX_WHITE - mov byte_2288C, 0 - mov fp_2CE8A, offset nullsub_2 - leave - retn -; --------------------------------------------------------------------------- - -loc_11EC4: - mov al, byte_2288C - mov ah, 0 - mov dx, word_2CE70 - dec dx - cmp ax, dx - jge short loc_11F36 - mov [bp+var_1], 0 - jmp short loc_11EF1 -; --------------------------------------------------------------------------- - -loc_11ED8: - mov al, [bp+var_1] - mov ah, 0 - mov bx, ax - mov al, [bx-3B6Bh] - mov dl, [bp+var_1] - mov dh, 0 - mov bx, dx - mov [bx-3B6Ch], al - inc [bp+var_1] - -loc_11EF1: - mov al, [bp+var_1] - mov ah, 0 - mov dx, word_2CE70 - dec dx - cmp ax, dx - jl short loc_11ED8 - mov al, byte_2CE72 - mov ah, 0 - shl ax, 2 - mov bx, ax - les bx, [bx+1EF8h] - assume es:nothing - mov al, byte_2288C - mov ah, 0 - add bx, ax - mov al, es:[bx] - mov bx, 0C494h - dec bx - add bx, word_2CE70 - mov [bx], al - call gaiji_putsa pascal, word_2CE82, 2, ds, offset unk_2CE74, TX_WHITE - jmp loc_11FD9 -; --------------------------------------------------------------------------- - -loc_11F36: - mov ax, word_2CE82 - cmp ax, word_2CE84 - jle short loc_11F86 - push ax - push 2 - mov al, byte_2CE72 - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd off_228D8[bx] - push TX_WHITE - call gaiji_putsa - mov ax, word_2CE70 - add ax, ax - add ax, word_2CE82 - cmp ax, 32h ; '2' - jg short loc_11F7F - mov ax, word_2CE70 - add ax, ax - add ax, word_2CE82 - call text_putca pascal, ax, 22020h, TX_WHITE - -loc_11F7F: - sub word_2CE82, 2 - jmp short loc_11FD9 -; --------------------------------------------------------------------------- - -loc_11F86: - cmp byte_2CE73, 0 - jnz short loc_11FA5 - mov byte_2CE73, 1 - call text_putsa pascal, (4 shl 16) + 2, off_228EE, TX_WHITE - -loc_11FA5: - push word_2CE84 - push 2 - mov al, byte_2CE72 - mov ah, 0 - shl ax, 2 - mov bx, ax - pushd off_228D8[bx] - push TX_WHITE - call gaiji_putsa - cmp byte_2CE72, 2 - jnz short loc_11FD9 - call hud_points_put pascal, ((PLAYFIELD_TRAM_X + (PLAYFIELD_TRAM_W / 2)) shl 16) + 2, large [dword_2CE8E] - -loc_11FD9: - inc byte_2288C - leave - retn -sub_11DEA endp - +include th04/hud/popup.asm ; =============== S U B R O U T I N E ======================================= @@ -17980,8 +17804,8 @@ loc_14435: or al, al jz short loc_14450 mov _is_hiscore, 1 - mov byte_2CE87, 0 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_HISCORE_ENTRY + mov _popup_fp, offset popup_update_and_render loc_14450: mov eax, _score_delta_frame @@ -18067,8 +17891,8 @@ sub_144CB proc near push bp mov bp, sp setfarfp _boss_update, nullsub_1 - mov _boss_fg_render, offset nullsub_2 - mov _boss_custombullets_render, offset nullsub_2 + mov _boss_fg_render, offset nullfunc_near + mov _boss_custombullets_render, offset nullfunc_near mov boss_phase, 0 mov byte_26349, 0 mov byte ptr word_2634A+1, 0 @@ -18122,8 +17946,8 @@ sub_14544 proc near call super_entry_bfnt call _cdg_load_all_noalpha pascal, 16, ds, offset aSt00bk_cdg call bb_stage_load pascal, ds, offset aSt00_bb - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_14544 endp @@ -18209,8 +18033,8 @@ sub_146D0 proc near call super_entry_bfnt call _cdg_load_all_noalpha pascal, 16, ds, offset aSt02bk_cdg call bb_stage_load pascal, ds, offset aSt02_bb - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_146D0 endp @@ -18256,8 +18080,8 @@ sub_1479F proc near call super_entry_bfnt call _cdg_load_all_noalpha pascal, 16, ds, offset aSt03bk_cdg call bb_stage_load pascal, ds, offset aSt03_bb - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_1479F endp @@ -18310,8 +18134,8 @@ sub_14879 proc near push (24 shl 16) or 24 nopcall select_for_rank mov _yumeko_interval_phase7, al - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_14879 endp @@ -18325,7 +18149,7 @@ sub_14976 proc near push bp mov bp, sp setfarfp _midboss_update_func, nullsub_1 - mov _midboss_render_func, offset nullsub_2 + mov _midboss_render_func, offset nullfunc_near mov frames_until_midboss, 30000 call sub_144CB mov _boss_pos.cur.x, (192 shl 4) @@ -18342,8 +18166,8 @@ sub_14976 proc near call _cdg_load_all_noalpha pascal, 16, ds, offset aSt05bk_cdg call _cdg_load_all_noalpha pascal, 17, ds, offset aSt05bk2_cdg call bb_stage_load pascal, ds, offset aSt05_bb - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_14976 endp @@ -18382,8 +18206,8 @@ sub_14A06 proc near push offset aSt06_bmt ; "st06.bmt" call super_entry_bfnt call bb_stage_load pascal, ds, offset aSt03_bb_0 - mov _stage_render, offset nullsub_2 - mov _stage_invalidate, offset nullsub_2 + mov _stage_render, offset nullfunc_near + mov _stage_invalidate, offset nullfunc_near pop bp retn sub_14A06 endp @@ -22011,8 +21835,8 @@ sub_16F05 proc near loc_16F3B: call sub_10407 - mov byte_2CE87, 1 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_EXTEND + mov _popup_fp, offset popup_update_and_render call snd_se_play pascal, 7 loc_16F52: @@ -22049,8 +21873,8 @@ loc_16F76: jnb short loc_16FAA cmp power, 127 jnz short loc_16F9B - mov byte_2CE87, 3 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render cmp _bullet_clear_time, 20 jnb short loc_16F9B mov _bullet_clear_time, 20 @@ -22183,8 +22007,8 @@ loc_170B5: cmp power, 128 jb short loc_170E7 mov power, 128 - mov byte_2CE87, 3 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render cmp _bullet_clear_time, 20 jnb short loc_170E7 mov _bullet_clear_time, 20 @@ -22225,8 +22049,8 @@ loc_1712C: inc lives call sub_10407 call snd_se_play pascal, 7 - mov byte_2CE87, 1 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_EXTEND + mov _popup_fp, offset popup_update_and_render jmp short loc_17171 ; --------------------------------------------------------------------------- @@ -22236,8 +22060,8 @@ loc_17150: mov _bullet_clear_time, 20 loc_1715C: - mov byte_2CE87, 3 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_FULL_POWERUP + mov _popup_fp, offset popup_update_and_render mov power, 128 call sub_E4FC @@ -22466,8 +22290,8 @@ sub_1720E endp sub_172FF proc far push bp mov bp, sp - mov _midboss_invalidate?, offset nullsub_2 - mov _midboss_render, offset nullsub_2 + mov _midboss_invalidate?, offset nullfunc_near + mov _midboss_render, offset nullfunc_near setfarfp _midboss_update, nullsub_1 mov _midboss_hp, 0 pop bp @@ -23841,7 +23665,7 @@ loc_17EE9: loc_17EFA: mov [bp+var_8], ax - mov dword_2CE8E, 0 + mov _popup_bonus, 0 xor di, di jmp loc_17F8D ; --------------------------------------------------------------------------- @@ -23864,7 +23688,7 @@ loc_17F0B: loc_17F31: movzx eax, [bp+var_4] - add dword_2CE8E, eax + add _popup_bonus, eax add _score_delta, eax push word ptr [si+2] push word ptr [si+4] @@ -23904,10 +23728,10 @@ loc_17F89: loc_17F8D: cmp di, 190h jl loc_17F0B - cmp dword_2CE8E, 0 + cmp _popup_bonus, 0 jz short loc_17FA8 - mov byte_2CE87, 2 - mov fp_2CE8A, offset sub_11DEA + mov _popup_id_new, POPUP_ID_BONUS + mov _popup_fp, offset popup_update_and_render loc_17FA8: inc _bullet_clear_trigger @@ -29305,7 +29129,7 @@ loc_1AF66: loc_1AF85: call sub_F2B4 - mov fp_2CE88, offset sub_11CBB + mov _overlay_text_fp, offset sub_11CBB mov boss_phase, 0 mov boss_phase_frame, 0 mov _boss_fg_render, offset sub_10F12 @@ -30806,7 +30630,7 @@ loc_1BCE7: mov boss_phase_frame, 0 mov boss_phase, 0FDh call sub_1B3C2 - mov _boss_custombullets_render, offset nullsub_2 + mov _boss_custombullets_render, offset nullfunc_near jmp short loc_1BD09 ; --------------------------------------------------------------------------- @@ -32013,7 +31837,7 @@ loc_1C7E3: mov boss_phase_frame, 0 mov boss_phase, 0FDh call sub_1B3C2 - mov _boss_custombullets_render, offset nullsub_2 + mov _boss_custombullets_render, offset nullfunc_near jmp short loc_1C805 ; --------------------------------------------------------------------------- @@ -33354,7 +33178,7 @@ loc_1D4F4: call boss_explode_small pascal, 4 mov boss_phase_frame, 0 mov boss_phase, 0FDh - mov _boss_custombullets_render, offset nullsub_2 + mov _boss_custombullets_render, offset nullfunc_near jmp short loc_1D513 ; --------------------------------------------------------------------------- @@ -37024,7 +36848,7 @@ loc_1F643: call boss_explode_small pascal, 4 mov boss_phase_frame, 0 mov boss_phase, 0FDh - mov _boss_custombullets_render, offset nullsub_2 + mov _boss_custombullets_render, offset nullfunc_near mov byte_226C0, 0 jmp short loc_1F666 ; --------------------------------------------------------------------------- @@ -37771,7 +37595,7 @@ loc_1FC55: inc boss_phase mov boss_phase_frame, 0 mov byte_2C96C, 1 - mov _boss_fg_render, offset nullsub_2 + mov _boss_fg_render, offset nullfunc_near jmp loc_1FD5D ; --------------------------------------------------------------------------- @@ -37840,7 +37664,7 @@ loc_1FD19: call sub_E480 loc_1FD25: - mov fp_2CE88, offset sub_119B1 + mov _overlay_text_fp, offset sub_119B1 kajacall KAJA_SONG_FADE, 10 jmp short loc_1FD51 ; --------------------------------------------------------------------------- @@ -38743,22 +38567,17 @@ off_22884 dw offset sub_1F776 dw offset sub_1F823 byte_2288A db 0 byte_2288B db 0 -byte_2288C db 0 +public _popup_frame +_popup_frame db 0 db 0 include th04/formats/bb_txt[data].asm -include th04/strings/popup[data].asm -gpDREAMBONUS_MAX db 65h, 66h, 67h, 68h, 69h, 6Ah, 6Bh, 6Ch, 6Dh, 6Eh, 0 -off_228D8 dd gpHISCORE_ENTRY - dd gpEXTEND - dd gpBONUS - dd gpFULL_POWERUP - dd gpDREAMBONUS_MAX +include th04/hud/popup[data].asm byte_228EC db 0 db 0 -off_228EE dd asc_228FC - ; " "... +public _PLAYFIELD_BLANK_ROW +_PLAYFIELD_BLANK_ROW dd aPLAYFIELD_BLANK_ROW include th04/strings/demoplay[data].asm -asc_228FC db ' ',0 +aPLAYFIELD_BLANK_ROW db ' ',0 db 0 SHOT_FUNCS label word ; Reimu @@ -45914,23 +45733,9 @@ fp_2CE68 dw ? word_2CE6A dw ? word_2CE6C dw ? word_2CE6E dw ? -word_2CE70 dw ? -byte_2CE72 db ? -byte_2CE73 db ? -unk_2CE74 db ? ; - dd ? ; - dd ? ; - dd ? ; - db ? ; -word_2CE82 dw ? -word_2CE84 dw ? - db ? ; -byte_2CE87 db ? -fp_2CE88 dw ? -fp_2CE8A dw ? -byte_2CE8C db ? - db ? -dword_2CE8E dd ? + +include th04/hud/popup[bss].asm + public _stage_title, _stage_bgm_title, _boss_bgm_title _stage_title dd ? _stage_bgm_title dd ?