[Reverse-engineering] [th04/th05] .BB tile animation: Cel rendering

Not exclusively used for the boss entrance animations, even though its
data is declared in that general vicinity. It's also used for all bombs
in TH04, and Reimu's and Yuuka's bomb in TH05.

Part of P0147, funded by -Tom- and Ember2528.
This commit is contained in:
nmlgc 2021-06-14 09:32:13 +02:00
parent f3afd37e8f
commit 8691b23716
9 changed files with 189 additions and 256 deletions

View File

@ -1,5 +1,8 @@
#define BB_SIZE 2048
// Bitmap format, storing 1-bit values for 8 tiles in one byte.
typedef uint8_t bb_tiles8_t;
void pascal near bb_stage_load(const char far* fn);
/// Text dissolve circles

View File

@ -1,4 +1,4 @@
extern dots8_t __seg *bb_stage_seg;
extern bb_tiles8_t __seg *bb_stage_seg;
void pascal near bb_stage_load(const char *fn)
{
@ -6,7 +6,7 @@ void pascal near bb_stage_load(const char *fn)
bb_stage_seg = bb_load(fn);
#else
file_ropen(fn);
bb_stage_seg = HMem<dots8_t>::allocbyte(BB_SIZE);
bb_stage_seg = HMem<bb_tiles8_t>::allocbyte(BB_SIZE);
file_read(bb_stage_seg, BB_SIZE);
file_close(fn);
#endif
@ -19,7 +19,7 @@ void pascal far bb_stage_free(void)
#endif
{
if(bb_stage_seg) {
HMem<dots8_t>::free(bb_stage_seg);
HMem<bb_tiles8_t>::free(bb_stage_seg);
bb_stage_seg = 0;
}
}

View File

@ -1,5 +1,8 @@
public _tiles_bb_col, _boss_backdrop_colorfill, _tiles_bb_seg
_tiles_bb_col db ?
evendata
; Called with the GRCG set to the [color] parameter to boss_bg_render(), this
; function is supposed to fill the entire playfield area around the background
; image with the given color.
public _boss_backdrop_colorfill
_boss_backdrop_colorfill dw ?
_tiles_bb_seg dw ?

View File

@ -1,3 +1,21 @@
// The monochrome animations loaded from the ST*.BB and BB*.BB files, shown as
// one colored 16×16 tile per bit. Used for the flashy transitions from regular
// stage backgrounds to the bomb and boss backgrounds.
extern unsigned char tiles_bb_col;
extern bb_tiles8_t __seg *tiles_bb_seg;
// Fills the playfield tile starting at (⌊left/8⌋*8, top) with the current
// GRCG tile. Assumes that the GRCG is set to TDW mode.
void fastcall near grcg_tile_bb_put_8(screen_x_t left, vram_y_t top);
void __fastcall near grcg_tile_bb_put_8(screen_x_t left, vram_y_t top);
// Renders the given animation [cel] in [tiles_bb_seg] to the playfield area
// in VRAM. All tiles with a corresponding 1 bit are filled with the
// [tiles_bb_col].
inline void tiles_bb_put(bb_tiles8_t __seg *&seg, unsigned char &cel) {
void pascal near tiles_bb_put_raw(int cel);
tiles_bb_seg = seg;
tiles_bb_put_raw(cel);
}

View File

@ -0,0 +1,73 @@
public TILES_BB_PUT_RAW
tiles_bb_put_raw proc near
@@top = word ptr -6
@@left = word ptr -4
@@row_tiles_left = byte ptr -2
@@bb_shiftreg = byte ptr -1
@@cel = word ptr 4
@@bb_seg equ <fs>
@@bb_off equ <di>
enter 6, 0
push di
push GC_TDW
mov al, _tiles_bb_col
mov ah, 0
call grcg_setcolor pascal, ax
mov ax, _tiles_bb_seg
mov @@bb_seg, ax
mov @@bb_off, [bp+@@cel]
shl @@bb_off, 7
mov [bp+@@top], PLAYFIELD_TOP
@@row_loop:
mov [bp+@@left], PLAYFIELD_LEFT
mov [bp+@@row_tiles_left], TILES_X
@@bb_byte_loop:
mov al, @@bb_seg:[@@bb_off]
mov [bp+@@bb_shiftreg], al
@@next_tile_in_row:
test [bp+@@bb_shiftreg], 80h
jz short @@skip_tile
mov ax, [bp+@@left]
mov dx, [bp+@@top]
if (GAME eq 5)
cmp _scroll_active, 0
jz short @@roll?
endif
add dx, _scroll_line
@@roll?:
cmp dx, RES_Y
jl short @@put
sub dx, RES_Y
@@put:
call @grcg_tile_bb_put_8
@@skip_tile:
shl [bp+@@bb_shiftreg], 1
add [bp+@@left], TILE_W
dec [bp+@@row_tiles_left]
jz short @@row_next
test [bp+@@row_tiles_left], 7
jnz short @@next_tile_in_row
inc @@bb_off
jmp short @@bb_byte_loop
; ---------------------------------------------------------------------------
@@row_next:
add @@bb_off, 2 ; 1 since we skipped the INC, 1 to skip the 8 unused tiles
add [bp+@@top], TILE_H
cmp [bp+@@top], PLAYFIELD_BOTTOM
jb short @@row_loop
GRCG_OFF_CLOBBERING dx
pop di
leave
retn 2
tiles_bb_put_raw endp
even

View File

@ -1695,77 +1695,7 @@ playfield_fillm_0_0_384_112 proc near
playfield_fillm_0_0_384_112 endp
include th04/hardware/fillm64-56_256-256.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_BF16 proc near
@@top = word ptr -6
@@left = word ptr -4
var_2 = byte ptr -2
var_1 = byte ptr -1
arg_0 = word ptr 4
enter 6, 0
push di
push GC_TDW
mov al, byte_2CDCA
mov ah, 0
push ax
call grcg_setcolor
mov ax, word_2CDCE
mov fs, ax
mov di, [bp+arg_0]
shl di, 7
mov [bp+@@top], PLAYFIELD_TOP
loc_BF39:
mov [bp+@@left], PLAYFIELD_LEFT
mov [bp+var_2], TILES_X
loc_BF42:
mov al, fs:[di]
mov [bp+var_1], al
loc_BF48:
test [bp+var_1], 80h
jz short loc_BF65
mov ax, [bp+@@left]
mov dx, [bp+@@top]
add dx, _scroll_line
cmp dx, RES_Y
jl short loc_BF62
sub dx, RES_Y
loc_BF62:
call @grcg_tile_bb_put_8
loc_BF65:
shl [bp+var_1], 1
add [bp+@@left], TILE_W
dec [bp+var_2]
jz short loc_BF7A
test [bp+var_2], 7
jnz short loc_BF48
inc di
jmp short loc_BF42
; ---------------------------------------------------------------------------
loc_BF7A:
add di, 2
add [bp+@@top], TILE_H
cmp [bp+@@top], PLAYFIELD_BOTTOM
jb short loc_BF39
GRCG_OFF_CLOBBERING dx
pop di
leave
retn 2
sub_BF16 endp
; ---------------------------------------------------------------------------
nop
include th04/main/tile/bb_put_a.asm
; =============== S U B R O U T I N E =======================================
@ -8630,7 +8560,7 @@ player_bomb endp
sub_1002A proc near
arg_0 = word ptr 4
@@cel = word ptr 4
push bp
mov bp, sp
@ -8644,11 +8574,10 @@ loc_10038:
mov al, 2
loc_1003A:
mov byte_2CDCA, al
mov _tiles_bb_col, al
mov ax, _bb_playchar_seg
mov word_2CDCE, ax
push [bp+arg_0]
call main_01:sub_BF16
mov _tiles_bb_seg, ax
call tiles_bb_put_raw pascal, [bp+@@cel]
pop bp
retn 2
sub_1002A endp
@ -8857,8 +8786,7 @@ loc_1022A:
add ax, -8
loc_1023E:
push ax
call main_01:sub_1002A
call sub_1002A pascal, ax
loc_10242:
jmp loc_10307
@ -11080,7 +11008,7 @@ loc_12199:
jnz short loc_121BF
call main_01:boss_backdrop_render pascal, (32 shl 16) or 136, 1
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov _tiles_bb_seg, ax
mov ax, _boss_phase_frame
sar ax, 1
push ax
@ -11130,7 +11058,7 @@ kurumi_bg_render proc near
jnz short loc_1221B
call main_01:boss_backdrop_render pascal, (32 shl 16) or 96, 0
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov _tiles_bb_seg, ax
mov ax, _boss_phase_frame
sar ax, 1
push ax
@ -11207,7 +11135,7 @@ loc_12285:
jnz short loc_122AB
call main_01:boss_backdrop_render pascal, (32 shl 16) or 16, 0
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov _tiles_bb_seg, ax
mov ax, _boss_phase_frame
sar ax, 1
push ax
@ -11250,7 +11178,7 @@ elly_bg_render endp
reimu_marisa_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -11267,8 +11195,8 @@ loc_122EB:
mov bx, 8
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_12309
call main_01:tiles_render_all
jmp short loc_12327
@ -11284,11 +11212,10 @@ loc_12309:
loc_12327:
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call main_01:sub_BF16
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -11326,7 +11253,7 @@ reimu_marisa_bg_render endp
yuuka5_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -11343,8 +11270,8 @@ loc_12378:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_12396
call main_01:tiles_render_all
jmp short loc_123B4
@ -11360,11 +11287,10 @@ loc_12396:
loc_123B4:
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call main_01:sub_BF16
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -12010,7 +11936,7 @@ table_1289F dw loc_12484
yuuka6_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
push si
@ -12058,10 +11984,10 @@ loc_12921:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
mov [bp+@@entrance_cel], al
mov ah, GC_RGI
call _grcg_setcolor_direct_seg1_raw
cmp [bp+var_1], 8
cmp [bp+@@entrance_cel], 8
jnb short loc_12944
call main_01:playfield_fill
jmp short loc_12947
@ -12072,11 +11998,10 @@ loc_12944:
loc_12947:
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call main_01:sub_BF16
call tiles_bb_put_raw pascal, ax
jmp short loc_12975
; ---------------------------------------------------------------------------
@ -12110,7 +12035,7 @@ yuuka6_bg_render endp
mugetsu_gengetsu_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -12132,8 +12057,8 @@ loc_12996:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_129B4
call main_01:tiles_render_all
jmp short loc_129D2
@ -12149,11 +12074,10 @@ loc_129B4:
loc_129D2:
mov ax, _bb_stage_seg
mov word_2CDCE, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call main_01:sub_BF16
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -17167,7 +17091,7 @@ loc_16651:
mov _boss_phase_frame, 0
call snd_se_play pascal, 13
mov byte_25667, 0
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
mov fp_255AC, offset yuuka5_bg_render
jmp loc_169B8
; ---------------------------------------------------------------------------
@ -19458,7 +19382,7 @@ loc_17A31:
mov _boss_phase_frame, 0
call snd_se_play pascal, 13
mov fp_255AC, offset reimu_marisa_bg_render
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
mov byte_25670, 0
jmp loc_17CA4
; ---------------------------------------------------------------------------
@ -21029,7 +20953,7 @@ loc_1876B:
inc _boss_phase
mov _boss_phase_frame, 0
call snd_se_play pascal, 13
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
mov fp_255AC, offset mugetsu_gengetsu_bg_render
jmp loc_189A1
; ---------------------------------------------------------------------------
@ -22224,7 +22148,7 @@ loc_191FB:
call snd_se_play pascal, 13
mov byte_259F1, 0
mov fp_255AC, offset kurumi_bg_render
mov byte_2CDCA, 0
mov _tiles_bb_col, 0
jmp short loc_19235
; ---------------------------------------------------------------------------
@ -23236,7 +23160,7 @@ loc_19B56:
mov byte_2D02D, 0
mov byte_2D02C, -1
mov fp_255AC, offset orange_bg_render
mov byte_2CDCA, 0
mov _tiles_bb_col, 0
jmp short loc_19C02
; ---------------------------------------------------------------------------
@ -25682,7 +25606,7 @@ loc_1B4BA:
call snd_se_play pascal, 13
mov byte_25A02, 0
mov fp_255AC, offset yuuka6_bg_render
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
jmp loc_1B8EA
; ---------------------------------------------------------------------------
@ -27349,7 +27273,7 @@ loc_1C39E:
call snd_se_play pascal, 13
mov _boss_pos.velocity.y, 8
mov fp_255AC, offset elly_bg_render
mov byte_2CDCA, 0
mov _tiles_bb_col, 0
jmp loc_1C67A
; ---------------------------------------------------------------------------
@ -32112,7 +32036,7 @@ loc_1F3E2:
mov _boss_phase_frame, 0
call snd_se_play pascal, 13
mov fp_255AC, offset reimu_marisa_bg_render
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
jmp loc_1F8A5
; ---------------------------------------------------------------------------
@ -33826,7 +33750,7 @@ loc_202B0:
inc _boss_phase
mov _boss_phase_frame, 0
call snd_se_play pascal, 13
mov byte_2CDCA, 0Fh
mov _tiles_bb_col, 15
mov fp_255AC, offset mugetsu_gengetsu_bg_render
jmp loc_206B6
; ---------------------------------------------------------------------------
@ -35214,10 +35138,7 @@ include th04/main/player/shots[bss].asm
db 96 dup(?)
public _resident
_resident dd ?
byte_2CDCA db ?
db ?
include th04/main/boss/backdrop[bss].asm
word_2CDCE dw ?
include th04/main/boss/bg[bss].asm
byte_2CDD0 db ?
byte_2CDD1 db ?
db 342 dup(?)

View File

@ -1,4 +1,3 @@
; void* pascal near bb_load(const char far *fn);
public BB_LOAD
bb_load proc near
push si

View File

@ -10,7 +10,7 @@
/// Formats
/// -------
dots8_t __seg* pascal near bb_load(const char far *fn);
bb_tiles8_t __seg* pascal near bb_load(const char far *fn);
/// -------
/// Stages

View File

@ -2023,14 +2023,13 @@ player_bomb endp
sub_C51A proc near
arg_0 = word ptr 4
@@cel = word ptr 4
push bp
mov bp, sp
mov ax, _bb_playchar_seg
mov word_2449C, ax
push [bp+arg_0]
call sub_DF36
mov _tiles_bb_seg, ax
call tiles_bb_put_raw pascal, [bp+@@cel]
pop bp
retn 2
sub_C51A endp
@ -2124,14 +2123,13 @@ bomb_reimu proc near
mov bp, sp
cmp _bomb_frame, 32
jnb short loc_C7AE
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov al, _bomb_frame
mov ah, 0
cwd
sub ax, dx
sar ax, 1
push ax
call sub_C51A
call sub_C51A pascal, ax
loc_C7AB:
jmp loc_C849
@ -2784,14 +2782,13 @@ bomb_yuuka proc near
mov bp, sp
cmp _bomb_frame, 32
jnb short loc_CDB4
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov al, _bomb_frame
mov ah, 0
cwd
sub ax, dx
sar ax, 1
push ax
call sub_C51A
call sub_C51A pascal, ax
loc_CDB1:
jmp loc_CE4F
@ -3150,7 +3147,7 @@ loc_D09F:
jnz short loc_D0C8
call boss_backdrop_render pascal, (64 shl 16) or 16, 0
mov ax, _bb_stage_seg
mov word_2449C, ax
mov _tiles_bb_seg, ax
mov ax, _boss_phase_frame
cwd
sub ax, dx
@ -3228,11 +3225,10 @@ loc_D124:
call cdg_put_noalpha_8 pascal, large (32 shl 16) or 16, 16
loc_D142:
mov byte_24498, 0
mov _tiles_bb_col, 0
mov ax, _bb_stage_seg
mov word_2449C, ax
push si
call sub_DF36
mov _tiles_bb_seg, ax
call tiles_bb_put_raw pascal, si
jmp short loc_D17D
; ---------------------------------------------------------------------------
@ -3303,11 +3299,10 @@ loc_D1B0:
call cdg_put_noalpha_8 pascal, large (32 shl 16) or 221, 16
loc_D1CE:
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov ax, _bb_stage_seg
mov word_2449C, ax
push si
call sub_DF36
mov _tiles_bb_seg, ax
call tiles_bb_put_raw pascal, si
jmp short loc_D209
; ---------------------------------------------------------------------------
@ -3346,7 +3341,7 @@ alice_bg_render endp
public MAI_YUKI_BG_RENDER
mai_yuki_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -3363,8 +3358,8 @@ loc_D220:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_D23E
call tiles_render_all
jmp short loc_D25C
@ -3379,13 +3374,12 @@ loc_D23E:
call cdg_put_noalpha_8 pascal, large (96 shl 16) or 72, 16
loc_D25C:
mov byte_24498, 9
mov _tiles_bb_col, 9
mov ax, _bb_stage_seg
mov word_2449C, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call sub_DF36
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -3424,7 +3418,7 @@ mai_yuki_bg_render endp
public YUMEKO_BG_RENDER
yumeko_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -3435,8 +3429,8 @@ var_1 = byte ptr -1
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_D2C7
call tiles_render_all
jmp short loc_D2E5
@ -3451,13 +3445,12 @@ loc_D2C7:
call cdg_put_noalpha_8 pascal, large (32 shl 16) or 16, 16
loc_D2E5:
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov ax, _bb_stage_seg
mov word_2449C, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call sub_DF36
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -3504,7 +3497,7 @@ main_0_TEXT segment word public 'CODE' use16
public SHINKI_BG_RENDER
shinki_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -3521,8 +3514,8 @@ loc_DA9E:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
cmp [bp+var_1], 8
mov [bp+@@entrance_cel], al
cmp [bp+@@entrance_cel], 8
jnb short loc_DAC4
call boss_backdrop_render pascal, (32 shl 16) or 120, 1
jmp short loc_DAC7
@ -3532,13 +3525,12 @@ loc_DAC4:
call sub_E92E
loc_DAC7:
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov ax, _bb_stage_seg
mov word_2449C, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call sub_DF36
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -3754,7 +3746,7 @@ sub_DBFF endp
public EXALICE_BG_RENDER
exalice_bg_render proc near
var_1 = byte ptr -1
@@entrance_cel = byte ptr -1
enter 2, 0
cmp _boss_phase, 0
@ -3771,15 +3763,14 @@ loc_DCEF:
mov bx, 4
cwd
idiv bx
mov [bp+var_1], al
mov [bp+@@entrance_cel], al
call sub_E92E
mov byte_24498, 0Fh
mov _tiles_bb_col, 15
mov ax, _bb_stage_seg
mov word_2449C, ax
mov al, [bp+var_1]
mov _tiles_bb_seg, ax
mov al, [bp+@@entrance_cel]
mov ah, 0
push ax
call sub_DF36
call tiles_bb_put_raw pascal, ax
leave
retn
; ---------------------------------------------------------------------------
@ -3869,79 +3860,7 @@ playfield_fillm_0_205_384_163 endp
include th04/hardware/fillm64-56_256-256.asm
include th05/formats/bb_load.asm
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_DF36 proc near
@@top = word ptr -6
@@left = word ptr -4
var_2 = byte ptr -2
var_1 = byte ptr -1
arg_0 = word ptr 4
enter 6, 0
push di
push GC_TDW
mov al, byte_24498
mov ah, 0
push ax
call grcg_setcolor
mov ax, word_2449C
mov fs, ax
mov di, [bp+arg_0]
shl di, 7
mov [bp+@@top], PLAYFIELD_TOP
loc_DF59:
mov [bp+@@left], PLAYFIELD_LEFT
mov [bp+var_2], TILES_X
loc_DF62:
mov al, fs:[di]
mov [bp+var_1], al
loc_DF68:
test [bp+var_1], 80h
jz short loc_DF8C
mov ax, [bp+@@left]
mov dx, [bp+@@top]
cmp _scroll_active, 0
jz short loc_DF7F
add dx, _scroll_line
loc_DF7F:
cmp dx, RES_Y
jl short loc_DF89
sub dx, RES_Y
loc_DF89:
call @grcg_tile_bb_put_8
loc_DF8C:
shl [bp+var_1], 1
add [bp+@@left], TILE_W
dec [bp+var_2]
jz short loc_DFA1
test [bp+var_2], 7
jnz short loc_DF68
inc di
jmp short loc_DF62
; ---------------------------------------------------------------------------
loc_DFA1:
add di, 2
add [bp+@@top], TILE_H
cmp [bp+@@top], PLAYFIELD_BOTTOM
jb short loc_DF59
GRCG_OFF_CLOBBERING dx
pop di
leave
retn 2
sub_DF36 endp
include th04/main/tile/bb_put_a.asm
; =============== S U B R O U T I N E =======================================
@ -26891,10 +26810,7 @@ include th04/formats/bb_playchar[bss].asm
include th05/main/player/bombanim[bss].asm
point_24490 Point <?>
point_24494 Point <?>
byte_24498 db ?
db ?
include th04/main/boss/backdrop[bss].asm
word_2449C dw ?
include th04/main/boss/bg[bss].asm
dw ?
include th05/main/boss/render[bss].asm
include th05/formats/bb_curvebullet[bss].asm