Skip to content

Commit

Permalink
[Decompilation] [th04/th05] Stage tiles: Renderer activation
Browse files Browse the repository at this point in the history
Part of P0258, funded by [Anonymous] and Blue Bolt.
  • Loading branch information
nmlgc committed Oct 31, 2023
1 parent 0a8a3d9 commit 974136a
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 120 deletions.
4 changes: 2 additions & 2 deletions Makefile.mak
Expand Up @@ -152,7 +152,7 @@ bin\th04\op.exe: bin\th04\op.obj th04\m_char.cpp bin\th01\vplanset.obj bin\th02\
$**
|

bin\th04\main.exe: bin\th04\main.obj bin\th04\slowdown.obj th04\demo.cpp th04\ems.cpp th04\tile_set.cpp th04\std.cpp th04\playfld.cpp th04\midboss4.cpp th04\f_dialog.cpp bin\th04\dialog_f.obj th04\dialog.cpp th04\boss_exp.cpp th04\stages.cpp th04\player_m.cpp bin\th04\player_p.obj bin\th04\scoreupd.obj th04\hud_ovrl.cpp bin\th04\cfg_lres.obj bin\th04\checkerb.obj bin\th04\mb_inv.obj bin\th04\boss_bd.obj bin\th01\vplanset.obj bin\th03\vector.obj bin\th02\frmdely1.obj bin\th03\hfliplut.obj th04\mpn_free.cpp bin\th04\input_w.obj th04\mpn_l_i.cpp bin\th04\vector.obj bin\th04\snd_pmdr.obj bin\th04\snd_mmdr.obj bin\th04\snd_kaja.obj bin\th04\snd_mode.obj bin\th04\snd_load.obj bin\th04\cdg_put.obj bin\th04\exit.obj bin\th04\initmain.obj bin\th04\cdg_p_na.obj bin\th04\cdg_p_pr.obj bin\th04\input_s.obj bin\th04\snd_se_r.obj bin\th04\snd_se.obj bin\th04\cdg_load.obj th04\gather.cpp bin\th04\scrolly3.obj bin\th04\motion_3.obj th04\midboss.cpp bin\th04\hud_hp.obj th04\mb_dft.cpp bin\th04\vector2n.obj bin\th04\spark_a.obj bin\th04\grcg_3.obj bin\th04\it_spl_u.obj th04\boss_4m.cpp th04\bullet_u.cpp th04\bullet_a.cpp th04\boss.cpp th04\boss_4r.cpp th04\boss_x2.cpp
bin\th04\main.exe: bin\th04\main.obj bin\th04\slowdown.obj th04\demo.cpp th04\ems.cpp th04\tile_set.cpp th04\std.cpp bin\th04\tile.obj th04\playfld.cpp th04\midboss4.cpp th04\f_dialog.cpp bin\th04\dialog_f.obj th04\dialog.cpp th04\boss_exp.cpp th04\stages.cpp th04\player_m.cpp bin\th04\player_p.obj bin\th04\scoreupd.obj th04\hud_ovrl.cpp bin\th04\cfg_lres.obj bin\th04\checkerb.obj bin\th04\mb_inv.obj bin\th04\boss_bd.obj bin\th01\vplanset.obj bin\th03\vector.obj bin\th02\frmdely1.obj bin\th03\hfliplut.obj th04\mpn_free.cpp bin\th04\input_w.obj th04\mpn_l_i.cpp bin\th04\vector.obj bin\th04\snd_pmdr.obj bin\th04\snd_mmdr.obj bin\th04\snd_kaja.obj bin\th04\snd_mode.obj bin\th04\snd_load.obj bin\th04\cdg_put.obj bin\th04\exit.obj bin\th04\initmain.obj bin\th04\cdg_p_na.obj bin\th04\cdg_p_pr.obj bin\th04\input_s.obj bin\th04\snd_se_r.obj bin\th04\snd_se.obj bin\th04\cdg_load.obj th04\gather.cpp bin\th04\scrolly3.obj bin\th04\motion_3.obj th04\midboss.cpp bin\th04\hud_hp.obj th04\mb_dft.cpp bin\th04\vector2n.obj bin\th04\spark_a.obj bin\th04\grcg_3.obj bin\th04\it_spl_u.obj th04\boss_4m.cpp th04\bullet_u.cpp th04\bullet_a.cpp th04\boss.cpp th04\boss_4r.cpp th04\boss_x2.cpp
$(CC) $(CFLAGS) $(LARGE_LFLAGS) -DGAME=4 -DBINARY='M' -3 -Z -nbin\th04\ -eMAIN.EXE @&&|
$**
|
Expand All @@ -175,7 +175,7 @@ bin\th05\op.exe: th05\op010.cpp bin\th05\op.obj th05\op011.cpp th05\m_char.cpp b
$**
|

bin\th05\main.exe: bin\th05\main.obj bin\th04\slowdown.obj th05\demo.cpp th05\ems.cpp bin\th05\cfg_lres.obj th05\main010.cpp th05\f_dialog.cpp bin\th05\dialog_f.obj th05\dialog.cpp th05\boss_exp.cpp th05\playfld.cpp bin\th04\mb_inv.obj bin\th04\boss_bd.obj th05\boss_bg.cpp th05\laser_rh.cpp th05\p_common.cpp th05\p_reimu.cpp th05\p_marisa.cpp th05\p_mima.cpp th05\p_yuuka.cpp bin\th05\player.obj bin\th05\hud_bar.obj bin\th05\scoreupd.obj th05\midboss5.cpp th05\hud_ovrl.cpp bin\th04\player_p.obj bin\th04\vector2n.obj bin\th05\spark_a.obj th05\bullet_p.cpp bin\th04\grcg_3.obj th05\player_a.cpp bin\th05\bullet_1.obj th05\bullet_c.cpp bin\th03\vector.obj bin\th03\hfliplut.obj bin\th04\snd_pmdr.obj bin\th04\snd_mmdr.obj bin\th04\snd_mode.obj bin\th05\bullet.obj th05\bullet_t.cpp bin\th04\cdg_p_na.obj bin\th04\snd_se_r.obj bin\th04\snd_se.obj bin\th05\cdg_put.obj bin\th04\exit.obj bin\th05\vector.obj bin\th05\snd_load.obj bin\th05\snd_kaja.obj bin\th05\initmain.obj bin\th05\input_s.obj bin\th05\inp_h_w.obj bin\th05\frmdelay.obj bin\th04\cdg_load.obj bin\th04\scrolly3.obj bin\th04\motion_3.obj th05\gather.cpp th05\main032.cpp th05\midboss.cpp bin\th04\hud_hp.obj th05\mb_dft.cpp th05\laser.cpp th05\cheeto_u.cpp bin\th04\it_spl_u.obj th05\bullet_u.cpp th05\midboss1.cpp th05\boss_1.cpp th05\boss_4.cpp th05\boss_6.cpp th05\boss_x.cpp th05\boss.cpp th05\main014.cpp
bin\th05\main.exe: bin\th05\main.obj bin\th04\slowdown.obj th05\demo.cpp th05\ems.cpp bin\th05\cfg_lres.obj bin\th04\tile.obj th05\main010.cpp th05\f_dialog.cpp bin\th05\dialog_f.obj th05\dialog.cpp th05\boss_exp.cpp th05\playfld.cpp bin\th04\mb_inv.obj bin\th04\boss_bd.obj th05\boss_bg.cpp th05\laser_rh.cpp th05\p_common.cpp th05\p_reimu.cpp th05\p_marisa.cpp th05\p_mima.cpp th05\p_yuuka.cpp bin\th05\player.obj bin\th05\hud_bar.obj bin\th05\scoreupd.obj th05\midboss5.cpp th05\hud_ovrl.cpp bin\th04\player_p.obj bin\th04\vector2n.obj bin\th05\spark_a.obj th05\bullet_p.cpp bin\th04\grcg_3.obj th05\player_a.cpp bin\th05\bullet_1.obj th05\bullet_c.cpp bin\th03\vector.obj bin\th03\hfliplut.obj bin\th04\snd_pmdr.obj bin\th04\snd_mmdr.obj bin\th04\snd_mode.obj bin\th05\bullet.obj th05\bullet_t.cpp bin\th04\cdg_p_na.obj bin\th04\snd_se_r.obj bin\th04\snd_se.obj bin\th05\cdg_put.obj bin\th04\exit.obj bin\th05\vector.obj bin\th05\snd_load.obj bin\th05\snd_kaja.obj bin\th05\initmain.obj bin\th05\input_s.obj bin\th05\inp_h_w.obj bin\th05\frmdelay.obj bin\th04\cdg_load.obj bin\th04\scrolly3.obj bin\th04\motion_3.obj th05\gather.cpp th05\main032.cpp th05\midboss.cpp bin\th04\hud_hp.obj th05\mb_dft.cpp th05\laser.cpp th05\cheeto_u.cpp bin\th04\it_spl_u.obj th05\bullet_u.cpp th05\midboss1.cpp th05\boss_1.cpp th05\boss_4.cpp th05\boss_6.cpp th05\boss_x.cpp th05\boss.cpp th05\main014.cpp
$(CC) $(CFLAGS) $(LARGE_LFLAGS) -3 -Z -DGAME=5 -DBINARY='M' -nbin\th05\ -eMAIN.EXE @&&|
$**
|
Expand Down
4 changes: 4 additions & 0 deletions th04/main/tile/inv[bss].asm
@@ -1,7 +1,11 @@
public _scroll_line_on_page, _tile_invalidate_box
public _bg_render_not_bombing, _bg_render_bombing, _bg_render_bombing_func
public _tile_render_all_time
_scroll_line_on_page dw 2 dup(?)
_tile_invalidate_box Point <?>
_bg_render_not_bombing dw ?
_bg_render_bombing dw ?
_bg_render_bombing_func dw ?
dw ?
_tile_render_all_time db ?
evendata
29 changes: 29 additions & 0 deletions th04/main/tile/tile.cpp
@@ -0,0 +1,29 @@
#pragma option -zPmain_01

#include "platform.h"
#include "pc98.h"
#include "th04/main/bg.hpp"
#include "th04/main/tile/tile.hpp"

#define render_all_time tile_render_all_time
extern uint8_t render_all_time;

static void pascal near tiles_render_all_timed(void)
{
tiles_render_all();
render_all_time--;
if(render_all_time == 0) {
bg_render_not_bombing = tiles_render;
}
}

void tiles_activate(void)
{
bg_render_not_bombing = tiles_render;
}

void pascal tiles_activate_and_render_all_for_next_N_frames(uint8_t n)
{
render_all_time = n;
bg_render_not_bombing = tiles_render_all_timed;
}
15 changes: 15 additions & 0 deletions th04/main/tile/tile.hpp
Expand Up @@ -85,6 +85,21 @@ void pascal near tiles_redraw_invalidated(void);
// Invalidates all entity types, then redraws the invalidated tiles.
void pascal near tiles_render(void);

// Sets [bg_render_not_bombing] to [tiles_render].
void tiles_activate(void);

// Sets [bg_render_not_bombing] to a function that calls [tiles_render_all] for
// the next [n] frames, and then sets the function pointer back to
// [tiles_render]. With [n] = 2, this removes the remnants of in-game dialog
// graphics from both VRAM pages.
// This is only needed for TH04's post-boss dialog; it's also called for the
// pre-boss ones, but [bg_render_not_bombing] is immediately overwritten with
// the boss-specific background render function which does the same job via
// tiles_render_after_custom(). In TH05, the boss-specific functions remove the
// graphics of both the pre-boss and post-boss dialogs, and this function is
// unused.
void pascal tiles_activate_and_render_all_for_next_N_frames(uint8_t n);

// Used for switching back to a tiled background after rendering anything else,
// like in-game dialog, or a custom background. Makes sure to first render all
// tiles to both VRAM pages, then performs regular redrawing of only the
Expand Down
1 change: 1 addition & 0 deletions th04/tile.cpp
@@ -0,0 +1 @@
#include "th04/main/tile/tile.cpp"
66 changes: 8 additions & 58 deletions th04_main.asm
Expand Up @@ -43,7 +43,7 @@ include th04/main/enemy/enemy.inc
extern _tolower:proc
extern __ctype:byte

main_01 group SLOWDOWN_TEXT, DEMO_TEXT, EMS_TEXT, TILE_SET_TEXT, STD_TEXT, mai_TEXT, PLAYFLD_TEXT, M4_RENDER_TEXT, DIALOG_TEXT, BOSS_EXP_TEXT, main_TEXT, STAGES_TEXT, main__TEXT, PLAYER_M_TEXT, PLAYER_P_TEXT, main_0_TEXT, HUD_OVRL_TEXT, main_01_TEXT, main_012_TEXT, CFG_LRES_TEXT, main_013_TEXT, CHECKERB_TEXT, MB_INV_TEXT, BOSS_BD_TEXT, BOSS_BG_TEXT
main_01 group SLOWDOWN_TEXT, DEMO_TEXT, EMS_TEXT, TILE_SET_TEXT, STD_TEXT, TILE_TEXT, mai_TEXT, PLAYFLD_TEXT, M4_RENDER_TEXT, DIALOG_TEXT, BOSS_EXP_TEXT, main_TEXT, STAGES_TEXT, main__TEXT, PLAYER_M_TEXT, PLAYER_P_TEXT, main_0_TEXT, HUD_OVRL_TEXT, main_01_TEXT, main_012_TEXT, CFG_LRES_TEXT, main_013_TEXT, CHECKERB_TEXT, MB_INV_TEXT, BOSS_BD_TEXT, BOSS_BG_TEXT
g_SHARED group SHARED, SHARED_
main_03 group GATHER_TEXT, SCROLLY3_TEXT, MOTION_3_TEXT, main_032_TEXT, VECTOR2N_TEXT, SPARK_A_TEXT, GRCG_3_TEXT, IT_SPL_U_TEXT, B4M_UPDATE_TEXT, main_033_TEXT, MIDBOSS_TEXT, HUD_HP_TEXT, MB_DFT_TEXT, main_034_TEXT, BULLET_U_TEXT, BULLET_A_TEXT, main_035_TEXT, BOSS_TEXT, main_036_TEXT

Expand Down Expand Up @@ -884,7 +884,7 @@ loc_B156:
kajacall KAJA_SONG_PLAY

loc_B1AE:
nopcall main_01:sub_CB99
nopcall @tiles_activate$qv
mov _overlay1, offset @overlay_stage_enter_update_and_r$qv
mov _overlay2, offset nullfunc_near
pop si
Expand Down Expand Up @@ -1029,7 +1029,7 @@ STD_TEXT segment byte public 'CODE' use16
@std_load$qv procdesc near
STD_TEXT ends

mai_TEXT segment word public 'CODE' use16
TILE_TEXT segment word public 'CODE' use16
include th04/formats/std.asm

; =============== S U B R O U T I N E =======================================
Expand Down Expand Up @@ -1764,58 +1764,11 @@ public @TILES_RENDER$QV
retn
@tiles_render$qv endp

extern @tiles_activate$qv:proc
extern @TILES_ACTIVATE_AND_RENDER_ALL_FO$QUC:proc
TILE_TEXT ends

; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_CB80 proc near
push bp
mov bp, sp
call @tiles_render_all$qv
dec byte_255B0
cmp byte_255B0, 0
jnz short loc_CB97
mov _bg_render_not_bombing, offset @tiles_render$qv

loc_CB97:
pop bp
retn
sub_CB80 endp


; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_CB99 proc far
push bp
mov bp, sp
mov _bg_render_not_bombing, offset @tiles_render$qv
pop bp
retf
sub_CB99 endp


; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_CBA4 proc far

arg_0 = byte ptr 6

push bp
mov bp, sp
mov al, [bp+arg_0]
mov byte_255B0, al
mov _bg_render_not_bombing, offset sub_CB80
pop bp
retf 2
sub_CBA4 endp

; ---------------------------------------------------------------------------
db 0
mai_TEXT segment word public 'CODE' use16
include th04/main/tile/render_a.asm

; =============== S U B R O U T I N E =======================================
Expand Down Expand Up @@ -2810,7 +2763,7 @@ public @dialog_animate$qv
call main_01:sub_D016
call main_01:sub_D56C
push 2
nopcall main_01:sub_CBA4
nopcall @tiles_activate_and_render_all_fo$quc
call @dialog_exit$qv
graph_accesspage _page_back
push 1
Expand Down Expand Up @@ -31242,9 +31195,6 @@ public _midboss3_patterns_done
_midboss3_patterns_done db ?
db 5 dup(?)
include th04/main/tile/inv[bss].asm
db 2 dup(?)
byte_255B0 db ?
db ?
byte_255B2 db ?
byte_255B3 db ?
byte_255B4 db ?
Expand Down
67 changes: 7 additions & 60 deletions th05_main.asm
Expand Up @@ -37,7 +37,7 @@ include th05/main/enemy/enemy.inc
extern _execl:proc
extern _strlen:proc

main_01 group SLOWDOWN_TEXT, DEMO_TEXT, EMS_TEXT, mai_TEXT, CFG_LRES_TEXT, MB_INV_TEXT, BOSS_BD_TEXT, BOSS_BG_TEXT, LASER_RH_TEXT, main_TEXT, main__TEXT, PLAYFLD_TEXT, main_0_TEXT, HUD_OVRL_TEXT, DIALOG_TEXT, BOSS_EXP_TEXT, PLAYER_P_TEXT, main_01_TEXT
main_01 group SLOWDOWN_TEXT, DEMO_TEXT, EMS_TEXT, TILE_TEXT, mai_TEXT, CFG_LRES_TEXT, MB_INV_TEXT, BOSS_BD_TEXT, BOSS_BG_TEXT, LASER_RH_TEXT, main_TEXT, main__TEXT, PLAYFLD_TEXT, main_0_TEXT, HUD_OVRL_TEXT, DIALOG_TEXT, BOSS_EXP_TEXT, PLAYER_P_TEXT, main_01_TEXT
g_SHARED group SHARED, SHARED_
main_03 group SCROLLY3_TEXT, MOTION_3_TEXT, main_031_TEXT, VECTOR2N_TEXT, SPARK_A_TEXT, BULLET_P_TEXT, GRCG_3_TEXT, PLAYER_A_TEXT, BULLET_A_TEXT, main_032_TEXT, main_033_TEXT, MIDBOSS_TEXT, HUD_HP_TEXT, MB_DFT_TEXT, LASER_SC_TEXT, CHEETO_U_TEXT, IT_SPL_U_TEXT, BULLET_U_TEXT, MIDBOSS1_TEXT, B1_UPDATE_TEXT, B4_UPDATE_TEXT, main_035_TEXT, B6_UPDATE_TEXT, BX_UPDATE_TEXT, main_036_TEXT, BOSS_TEXT

Expand Down Expand Up @@ -900,7 +900,7 @@ loc_B3C5:
call super_entry_bfnt

loc_B3CA:
nopcall sub_BF27
nopcall @tiles_activate$qv
mov _pellet_bottom_col, GC_RG
mov al, _stage_id
mov ah, 0
Expand Down Expand Up @@ -1174,7 +1174,7 @@ CFG_LRES_TEXT segment byte public 'CODE' use16
_cfg_load_resident_ptr procdesc near
CFG_LRES_TEXT ends

mai_TEXT segment word public 'CODE' use16
TILE_TEXT segment word public 'CODE' use16

; =============== S U B R O U T I N E =======================================

Expand Down Expand Up @@ -1496,61 +1496,11 @@ public @TILES_RENDER$QV
retn
@tiles_render$qv endp

extern @tiles_activate$qv:proc
extern @TILES_ACTIVATE_AND_RENDER_ALL_FO$QUC:proc
TILE_TEXT ends

; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_BF0E proc near
push bp
mov bp, sp
call @tiles_render_all$qv
dec byte_23F5E
cmp byte_23F5E, 0
jnz short loc_BF25
mov _bg_render_not_bombing, offset @tiles_render$qv

loc_BF25:
pop bp
retn
sub_BF0E endp


; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_BF27 proc far
push bp
mov bp, sp
mov _bg_render_not_bombing, offset @tiles_render$qv
pop bp
retf
sub_BF27 endp


; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

sub_BF32 proc far

arg_0 = byte ptr 6

push bp
mov bp, sp
mov al, [bp+arg_0]
mov byte_23F5E, al
mov _bg_render_not_bombing, offset sub_BF0E
pop bp
retf 2
sub_BF32 endp

; ---------------------------------------------------------------------------
db 0

; =============== S U B R O U T I N E =======================================

mai_TEXT segment word public 'CODE' use16
include th04/main/tile/redraw.asm
include th04/main/scroll_y_1.asm
MOTION_UPDATE_DEF 1
Expand Down Expand Up @@ -20701,9 +20651,6 @@ byte_23F04 db ?
word_23F06 dw ?
include th04/formats/std[bss].asm
include th04/main/tile/inv[bss].asm
db 2 dup(?)
byte_23F5E db ?
db ? ;
word_23F60 dw ?
include th02/math/randring[bss].asm
include th04/main/pointnum/render[bss].asm
Expand Down

0 comments on commit 974136a

Please sign in to comment.