mirror of https://github.com/nmlgc/ReC98.git
[Reverse-engineering] [th04/th05] Invalidating background tiles around a point
…and *now* we can tackle all those entity types that were referencing this function, with the help of uth05win. Funded by -Tom-.
This commit is contained in:
parent
c2ef9d51b6
commit
75763ccd32
|
@ -0,0 +1,113 @@
|
|||
; Marks all stage background tiles for redrawing that lie in the area covered
|
||||
; by [tile_invalidate_box] around [center] (in playfield space and 16th-pixel
|
||||
; units).
|
||||
|
||||
; void pascal tiles_invalidate_around(Point center)
|
||||
public tiles_invalidate_around
|
||||
tiles_invalidate_around proc near
|
||||
@@center = Point ptr 2
|
||||
|
||||
mov bx, sp
|
||||
mov dx, _tile_invalidate_box.x
|
||||
shr dx, 1
|
||||
mov ax, ss:[bx+@@center.x]
|
||||
sar ax, 4
|
||||
sub ax, dx
|
||||
cmp ax, PLAYFIELD_W
|
||||
jl short @@left_edge_left_of_playfield?
|
||||
|
||||
@@outside_playfield:
|
||||
retn 4
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
@@left_edge_left_of_playfield?:
|
||||
mov cx, ax
|
||||
or ax, ax
|
||||
js short @@right_edge_left_of_playfield?
|
||||
and ax, (TILE_W - 1)
|
||||
|
||||
@@right_edge_left_of_playfield?:
|
||||
add ax, _tile_invalidate_box.x
|
||||
dec ax
|
||||
js short @@outside_playfield
|
||||
sar cx, 4
|
||||
jns short @@check_y
|
||||
xor cx, cx
|
||||
|
||||
@@check_y:
|
||||
mov _invalidate_left_x_tile, cx
|
||||
shr ax, 4
|
||||
inc ax
|
||||
mov cx, ax ; CX = number of horizontal tiles to invalidate
|
||||
mov dx, _tile_invalidate_box.y
|
||||
sar dx, 1
|
||||
mov ax, ss:[bx+@@center.y]
|
||||
sar ax, 4
|
||||
add ax, TILE_H
|
||||
sub ax, dx
|
||||
jns short @@bottom_below_playfield?
|
||||
mov dx, _tile_invalidate_box.y
|
||||
add dx, ax
|
||||
or dx, dx
|
||||
jle short @@outside_playfield
|
||||
|
||||
@@bottom_below_playfield?:
|
||||
cmp ax, PLAYFIELD_H + TILE_H
|
||||
jge short @@outside_playfield
|
||||
mov bh, 0
|
||||
mov bl, _page_back
|
||||
add bx, bx
|
||||
add ax, _scroll_line_on_plane[bx]
|
||||
jns short @@scroll_wrap?
|
||||
add ax, RES_Y
|
||||
jmp short @@invalidate
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
@@scroll_wrap?:
|
||||
cmp ax, RES_Y
|
||||
jl short @@invalidate
|
||||
sub ax, RES_Y
|
||||
|
||||
@@invalidate:
|
||||
mov dx, ax
|
||||
and dx, 7
|
||||
add dx, _tile_invalidate_box.y ; DX = Invalidated height in pixels
|
||||
mov bx, dx
|
||||
add bx, ax
|
||||
shr ax, 3
|
||||
shl ax, 5 ; AX *= TILES_MEMORY_X
|
||||
push si
|
||||
push di
|
||||
push ds
|
||||
pop es
|
||||
assume es:_DATA
|
||||
mov di, ax
|
||||
add di, _invalidate_left_x_tile
|
||||
add di, offset _halftiles_dirty
|
||||
mov si, TILES_MEMORY_X
|
||||
sub si, cx ; SI = row stride
|
||||
mov ah, cl
|
||||
mov al, 1
|
||||
cmp bx, RES_Y
|
||||
jl short @@set_nowrap
|
||||
mov bx, offset _halftiles_dirty_end
|
||||
|
||||
@@set_wrap:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
sub dx, TILE_FLAG_H
|
||||
add di, si
|
||||
cmp di, bx
|
||||
jl short @@set_wrap
|
||||
sub di, size _halftiles_dirty
|
||||
|
||||
@@set_nowrap:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
add di, si
|
||||
sub dx, TILE_FLAG_H
|
||||
jg short @@set_nowrap
|
||||
pop di
|
||||
pop si
|
||||
retn 4
|
||||
tiles_invalidate_around endp
|
|
@ -0,0 +1,5 @@
|
|||
public _scroll_line_on_plane, _tile_invalidate_box
|
||||
_scroll_line_on_plane dw 2 dup(?)
|
||||
; Width and height, in screen pixels, of a box around the center passed to
|
||||
; tiles_invalidate_around(). *Not* the radius.
|
||||
_tile_invalidate_box Point <?>
|
286
th04_main.asm
286
th04_main.asm
|
@ -934,8 +934,8 @@ sub_B1D0 proc near
|
|||
mov byte_2D00A, 0
|
||||
mov _scroll_line, 0
|
||||
mov word_25100, 0
|
||||
mov word_255A0, 0
|
||||
mov word_255A2, 0
|
||||
mov _scroll_line_on_plane[0 * 2], 0
|
||||
mov _scroll_line_on_plane[1 * 2], 0
|
||||
mov _scroll_subpixel_line, 0
|
||||
mov byte_25104, 0
|
||||
mov byte_250FE, 0
|
||||
|
@ -1685,116 +1685,7 @@ loc_B9D4:
|
|||
retn
|
||||
map_free endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_B9D6 proc near
|
||||
mov bx, sp
|
||||
mov dx, word ptr dword_255A4
|
||||
shr dx, 1
|
||||
mov ax, ss:[bx+2]
|
||||
sar ax, 4
|
||||
sub ax, dx
|
||||
cmp ax, 180h
|
||||
jl short loc_B9EF
|
||||
|
||||
locret_B9EC:
|
||||
retn 4
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_B9EF:
|
||||
mov cx, ax
|
||||
or ax, ax
|
||||
js short loc_B9F8
|
||||
and ax, 0Fh
|
||||
|
||||
loc_B9F8:
|
||||
add ax, word ptr dword_255A4
|
||||
dec ax
|
||||
js short locret_B9EC
|
||||
sar cx, 4
|
||||
jns short loc_BA06
|
||||
xor cx, cx
|
||||
|
||||
loc_BA06:
|
||||
mov word_25102, cx
|
||||
shr ax, 4
|
||||
inc ax
|
||||
mov cx, ax
|
||||
mov dx, word ptr dword_255A4+2
|
||||
sar dx, 1
|
||||
mov ax, ss:[bx+4]
|
||||
sar ax, 4
|
||||
add ax, 10h
|
||||
sub ax, dx
|
||||
jns short loc_BA2E
|
||||
mov dx, word ptr dword_255A4+2
|
||||
add dx, ax
|
||||
or dx, dx
|
||||
jle short locret_B9EC
|
||||
|
||||
loc_BA2E:
|
||||
cmp ax, 180h
|
||||
jge short locret_B9EC
|
||||
mov bh, 0
|
||||
mov bl, _page_back
|
||||
add bx, bx
|
||||
add ax, [bx+4260h]
|
||||
jns short loc_BA46
|
||||
add ax, 190h
|
||||
jmp short loc_BA4E
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_BA46:
|
||||
cmp ax, 190h
|
||||
jl short loc_BA4E
|
||||
sub ax, 190h
|
||||
|
||||
loc_BA4E:
|
||||
mov dx, ax
|
||||
and dx, 7
|
||||
add dx, word ptr dword_255A4+2
|
||||
mov bx, dx
|
||||
add bx, ax
|
||||
shr ax, 3
|
||||
shl ax, 5
|
||||
push si
|
||||
push di
|
||||
push ds
|
||||
pop es
|
||||
assume es:_DATA
|
||||
mov di, ax
|
||||
add di, word_25102
|
||||
add di, offset _halftiles_dirty
|
||||
mov si, 20h ; ' '
|
||||
sub si, cx
|
||||
mov ah, cl
|
||||
mov al, 1
|
||||
cmp bx, 190h
|
||||
jl short loc_BA92
|
||||
mov bx, offset _halftiles_dirty_end
|
||||
|
||||
loc_BA81:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
sub dx, 8
|
||||
add di, si
|
||||
cmp di, bx
|
||||
jl short loc_BA81
|
||||
sub di, 640h
|
||||
|
||||
loc_BA92:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
add di, si
|
||||
sub dx, 8
|
||||
jg short loc_BA92
|
||||
pop di
|
||||
pop si
|
||||
retn 4
|
||||
sub_B9D6 endp
|
||||
|
||||
include th04/tiles_invalidate.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -1980,7 +1871,7 @@ sub_BCB2 endp
|
|||
sub_BCBE proc near
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_255A4+2, 8
|
||||
mov _tile_invalidate_box.y, 8
|
||||
mov si, 9634h
|
||||
mov di, 190h
|
||||
|
||||
|
@ -1988,16 +1879,14 @@ loc_BCCC:
|
|||
cmp byte ptr [si], 0
|
||||
jz short loc_BCEA
|
||||
mov ax, [si+0Ch]
|
||||
mov word ptr dword_255A4, ax
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov ax, [si+2]
|
||||
cmp byte ptr [si+0Eh], 0
|
||||
jz short loc_BCE3
|
||||
add ax, 80h
|
||||
add ax, (8 shl 4)
|
||||
|
||||
loc_BCE3:
|
||||
push word ptr [si+6]
|
||||
push ax
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, word ptr [si+6], ax
|
||||
|
||||
loc_BCEA:
|
||||
add si, 10h
|
||||
|
@ -2443,15 +2332,15 @@ arg_0 = word ptr 4
|
|||
|
||||
enter 6, 0
|
||||
push di
|
||||
mov dword_255A4, 20002h
|
||||
mov _tile_invalidate_box, (2 shl 16) or 2
|
||||
mov ax, word_2D02E
|
||||
mov fs, ax
|
||||
mov di, [bp+arg_0]
|
||||
shl di, 7
|
||||
mov word ptr [bp+var_6+2], 80h
|
||||
mov word ptr [bp+var_6+2], (8 shl 4)
|
||||
|
||||
loc_BFB2:
|
||||
mov word ptr [bp+var_6], 80h
|
||||
mov word ptr [bp+var_6], (8 shl 4)
|
||||
mov [bp+var_2], 18h
|
||||
|
||||
loc_BFBB:
|
||||
|
@ -2461,12 +2350,11 @@ loc_BFBB:
|
|||
loc_BFC1:
|
||||
test [bp+var_1], 80h
|
||||
jnz short loc_BFCE
|
||||
pushd [bp+var_6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large [bp+var_6]
|
||||
|
||||
loc_BFCE:
|
||||
shl [bp+var_1], 1
|
||||
add word ptr [bp+var_6], 100h
|
||||
add word ptr [bp+var_6], (16 shl 4)
|
||||
dec [bp+var_2]
|
||||
jz short loc_BFE4
|
||||
test [bp+var_2], 7
|
||||
|
@ -2477,8 +2365,8 @@ loc_BFCE:
|
|||
|
||||
loc_BFE4:
|
||||
add di, 2
|
||||
add word ptr [bp+var_6+2], 100h
|
||||
cmp word ptr [bp+var_6+2], 1700h
|
||||
add word ptr [bp+var_6+2], (16 shl 4)
|
||||
cmp word ptr [bp+var_6+2], (PLAYFIELD_H shl 4)
|
||||
jb short loc_BFB2
|
||||
pop di
|
||||
leave
|
||||
|
@ -2659,15 +2547,14 @@ sub_C09A endp
|
|||
sub_C0FC proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_255A4, 100010h
|
||||
mov _tile_invalidate_box, (16 shl 16) or 16
|
||||
mov si, 0AF34h
|
||||
mov di, 20h ; ' '
|
||||
|
||||
loc_C10D:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_C119
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_C119:
|
||||
add si, 14h
|
||||
|
@ -2682,10 +2569,9 @@ loc_C125:
|
|||
mov ax, [si+8]
|
||||
shr ax, 3
|
||||
inc ax
|
||||
mov word ptr dword_255A4, ax
|
||||
mov word ptr dword_255A4+2, ax
|
||||
pushd dword ptr [si+2]
|
||||
call sub_B9D6
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov _tile_invalidate_box.y, ax
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+2]
|
||||
|
||||
loc_C13E:
|
||||
add si, 0Ah
|
||||
|
@ -2948,15 +2834,14 @@ sub_C2B2 endp
|
|||
sub_C2EE proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_255A4, 80008h
|
||||
mov _tile_invalidate_box, (8 shl 16) or 8
|
||||
mov di, 60h
|
||||
mov si, 53E2h
|
||||
|
||||
loc_C2FF:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_C30B
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_C30B:
|
||||
add si, 10h
|
||||
|
@ -3419,7 +3304,7 @@ include th04/circles.asm
|
|||
sub_C74C proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_255A4, 200020h
|
||||
mov _tile_invalidate_box, (32 shl 16) or 32
|
||||
mov si, 8A92h
|
||||
mov di, 20h ; ' '
|
||||
|
||||
|
@ -3428,8 +3313,7 @@ loc_C75D:
|
|||
jz short loc_C76E
|
||||
cmp byte ptr [si], 3
|
||||
jz short loc_C76E
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_C76E:
|
||||
add si, 40h
|
||||
|
@ -3897,14 +3781,13 @@ sub_CA98 proc near
|
|||
jnz short loc_CACF
|
||||
cmp _bullet_clear_time, 0
|
||||
jnz short loc_CACF
|
||||
mov dword_255A4, 80008h
|
||||
mov _tile_invalidate_box, (8 shl 16) or 8
|
||||
mov di, 0F0h
|
||||
|
||||
loc_CABA:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_CAC6
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_CAC6:
|
||||
add si, 1Ah
|
||||
|
@ -3913,23 +3796,21 @@ loc_CAC6:
|
|||
mov di, 0C8h
|
||||
|
||||
loc_CACF:
|
||||
mov dword_255A4, 100010h
|
||||
mov _tile_invalidate_box, (16 shl 16) or 16
|
||||
|
||||
loc_CAD8:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_CAFD
|
||||
cmp byte ptr [si+12h], 1
|
||||
jbe short loc_CAF6
|
||||
shl dword_255A4, 1
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
shr dword_255A4, 1
|
||||
shl _tile_invalidate_box, 1
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
shr _tile_invalidate_box, 1
|
||||
jmp short loc_CAFD
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_CAF6:
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_CAFD:
|
||||
add si, 1Ah
|
||||
|
@ -3943,11 +3824,10 @@ loc_CB09:
|
|||
jz short loc_CB24
|
||||
mov ax, [si+0Eh]
|
||||
shr ax, 3
|
||||
add ax, 10h
|
||||
mov word ptr dword_255A4, ax
|
||||
mov word ptr dword_255A4+2, ax
|
||||
pushd dword ptr [si+6]
|
||||
call sub_B9D6
|
||||
add ax, 16
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov _tile_invalidate_box.y, ax
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_CB24:
|
||||
add si, 2Ah ; '*'
|
||||
|
@ -4134,7 +4014,7 @@ sub_CCD6 proc near
|
|||
add ax, ax
|
||||
mov dx, _scroll_line
|
||||
mov bx, ax
|
||||
mov [bx+4260h], dx
|
||||
mov _scroll_line_on_plane[bx], dx
|
||||
cmp byte_250FE, 0
|
||||
jz short loc_CCFE
|
||||
cmp _scroll_active, 0
|
||||
|
@ -8058,10 +7938,9 @@ var_2 = word ptr -2
|
|||
enter 2, 0
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_255A4, 180h
|
||||
mov word ptr dword_255A4+2, 2
|
||||
pushd 0C00h
|
||||
call sub_B9D6
|
||||
mov _tile_invalidate_box.x, PLAYFIELD_W
|
||||
mov _tile_invalidate_box.y, 2
|
||||
call tiles_invalidate_around pascal, large ((PLAYFIELD_W / 2) shl 4)
|
||||
mov ax, _scroll_line
|
||||
mov bx, 10h
|
||||
cwd
|
||||
|
@ -8246,8 +8125,8 @@ sub_EC59 proc near
|
|||
push bp
|
||||
mov bp, sp
|
||||
push si
|
||||
mov word ptr dword_255A4, 60h
|
||||
mov word ptr dword_255A4+2, 50h ; 'P'
|
||||
mov _tile_invalidate_box.x, 96
|
||||
mov _tile_invalidate_box.y, 80
|
||||
xor si, si
|
||||
jmp short loc_EC86
|
||||
; ---------------------------------------------------------------------------
|
||||
|
@ -8256,13 +8135,13 @@ loc_EC6D:
|
|||
mov bx, si
|
||||
add bx, bx
|
||||
mov ax, [bx-430Ch]
|
||||
add ax, 0FFC0h
|
||||
add ax, (-4 shl 4)
|
||||
push ax
|
||||
mov ax, si
|
||||
shl ax, 0Bh
|
||||
add ax, 400h
|
||||
add ax, (64 shl 4)
|
||||
push ax
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around
|
||||
inc si
|
||||
|
||||
loc_EC86:
|
||||
|
@ -11440,8 +11319,8 @@ sub_10444 proc near
|
|||
mov bp, sp
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_255A4, 10h
|
||||
mov word ptr dword_255A4+2, 10h
|
||||
mov _tile_invalidate_box.x, 16
|
||||
mov _tile_invalidate_box.y, 16
|
||||
mov si, 0B55Eh
|
||||
xor di, di
|
||||
jmp short loc_1046E
|
||||
|
@ -11450,9 +11329,7 @@ sub_10444 proc near
|
|||
loc_1045C:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_1046A
|
||||
push word ptr [si+8]
|
||||
push word ptr [si+6]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, word ptr [si+8], word ptr [si+6]
|
||||
|
||||
loc_1046A:
|
||||
inc di
|
||||
|
@ -11463,30 +11340,30 @@ loc_1046E:
|
|||
jl short loc_1045C
|
||||
cmp word_25608, 20h ; ' '
|
||||
jb short loc_104B2
|
||||
mov word ptr dword_255A4, 8
|
||||
mov _tile_invalidate_box.x, 8
|
||||
mov ax, word ptr dword_25610+2
|
||||
mov bx, 10h
|
||||
cwd
|
||||
idiv bx
|
||||
mov word ptr dword_255A4+2, ax
|
||||
mov _tile_invalidate_box.y, ax
|
||||
mov ax, word ptr dword_25610+2
|
||||
cwd
|
||||
sub ax, dx
|
||||
sar ax, 1
|
||||
push ax
|
||||
mov ax, word ptr dword_25610
|
||||
add ax, 0FE80h
|
||||
add ax, (-24 shl 4)
|
||||
push ax
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around
|
||||
mov ax, word ptr dword_25610+2
|
||||
cwd
|
||||
sub ax, dx
|
||||
sar ax, 1
|
||||
push ax
|
||||
mov ax, word ptr dword_25610
|
||||
add ax, 180h
|
||||
add ax, (24 shl 4)
|
||||
push ax
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around
|
||||
|
||||
loc_104B2:
|
||||
pop di
|
||||
|
@ -11906,10 +11783,10 @@ var_1 = byte ptr -1
|
|||
enter 2, 0
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_255A4+2, 30h ; '0'
|
||||
mov _tile_invalidate_box.y, 48
|
||||
cmp byte_259AA, 0
|
||||
jz short loc_10872
|
||||
mov word ptr dword_255A4, 30h ; '0'
|
||||
mov _tile_invalidate_box.x, 48
|
||||
mov ax, word_259BA
|
||||
add ax, 0FF90h
|
||||
mov di, ax
|
||||
|
@ -11948,9 +11825,7 @@ loc_10822:
|
|||
jl short loc_10862
|
||||
cmp _drawpoint.x, (392 shl 4)
|
||||
jge short loc_10862
|
||||
push _drawpoint.y
|
||||
push _drawpoint.x
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, _drawpoint.y, _drawpoint.x
|
||||
|
||||
loc_10862:
|
||||
inc si
|
||||
|
@ -11965,13 +11840,11 @@ loc_10868:
|
|||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_10872:
|
||||
mov word ptr dword_255A4, 20h ; ' '
|
||||
pushd [player_pos.prev]
|
||||
call sub_B9D6
|
||||
mov word ptr dword_255A4, 40h
|
||||
mov word ptr dword_255A4+2, 10h
|
||||
pushd [dword_259B0]
|
||||
call sub_B9D6
|
||||
mov _tile_invalidate_box.x, 32
|
||||
call tiles_invalidate_around pascal, large [player_pos.prev]
|
||||
mov _tile_invalidate_box.x, 64
|
||||
mov _tile_invalidate_box.y, 16
|
||||
call tiles_invalidate_around pascal, large [dword_259B0]
|
||||
|
||||
loc_10894:
|
||||
pop di
|
||||
|
@ -12835,14 +12708,11 @@ var_1 = byte ptr -1
|
|||
ja short locret_10F34
|
||||
|
||||
loc_10F0D:
|
||||
mov word ptr dword_255A4, 180h
|
||||
mov word ptr dword_255A4+2, 20h ; ' '
|
||||
push 0A800C00h
|
||||
call sub_B9D6
|
||||
push 0C800C00h
|
||||
call sub_B9D6
|
||||
push 16800C00h
|
||||
call sub_B9D6
|
||||
mov _tile_invalidate_box.x, PLAYFIELD_W
|
||||
mov _tile_invalidate_box.y, 32
|
||||
call tiles_invalidate_around pascal, large ((168 shl 4) shl 16) or (192 shl 4)
|
||||
call tiles_invalidate_around pascal, large ((200 shl 4) shl 16) or (192 shl 4)
|
||||
call tiles_invalidate_around pascal, large ((360 shl 4) shl 16) or (192 shl 4)
|
||||
|
||||
locret_10F34:
|
||||
leave
|
||||
|
@ -14967,19 +14837,19 @@ sub_12124 proc near
|
|||
mov bp, sp
|
||||
cmp byte_26705, 0FEh
|
||||
jnb short loc_12141
|
||||
mov word ptr dword_255A4, 40h
|
||||
mov word ptr dword_255A4+2, 40h
|
||||
mov _tile_invalidate_box.x, 64
|
||||
mov _tile_invalidate_box.y, 64
|
||||
pushd [_midboss_pos.prev]
|
||||
jmp short loc_12152
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_12141:
|
||||
mov word ptr dword_255A4, 80h
|
||||
mov word ptr dword_255A4+2, 80h
|
||||
mov _tile_invalidate_box.x, 128
|
||||
mov _tile_invalidate_box.y, 128
|
||||
pushd [_midboss_pos.cur]
|
||||
|
||||
loc_12152:
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around
|
||||
pop bp
|
||||
retn
|
||||
sub_12124 endp
|
||||
|
@ -15101,14 +14971,12 @@ sub_121EB endp
|
|||
sub_12247 proc near
|
||||
push bp
|
||||
mov bp, sp
|
||||
mov word ptr dword_255A4, 40h
|
||||
mov word ptr dword_255A4+2, 40h
|
||||
pushd [_boss_pos.prev]
|
||||
call sub_B9D6
|
||||
mov _tile_invalidate_box.x, 64
|
||||
mov _tile_invalidate_box.y, 64
|
||||
call tiles_invalidate_around pascal, large [_boss_pos.prev]
|
||||
cmp byte_25A27, 0
|
||||
jz short loc_1226D
|
||||
pushd [dword_25A2C]
|
||||
call sub_B9D6
|
||||
call tiles_invalidate_around pascal, large [dword_25A2C]
|
||||
|
||||
loc_1226D:
|
||||
pop bp
|
||||
|
@ -44811,7 +44679,7 @@ include th04/formats/std[bss].asm
|
|||
byte_250FE db ?
|
||||
db ?
|
||||
word_25100 dw ?
|
||||
word_25102 dw ?
|
||||
_invalidate_left_x_tile dw ?
|
||||
byte_25104 db ?
|
||||
word_25105 dw ?
|
||||
word_25107 dw ?
|
||||
|
@ -45059,9 +44927,7 @@ byte_25599 db ?
|
|||
byte_2559A db ?
|
||||
db ?
|
||||
dd ? ;
|
||||
word_255A0 dw ?
|
||||
word_255A2 dw ?
|
||||
dword_255A4 dd ?
|
||||
include th04/tiles_invalidate[bss].asm
|
||||
_boss_bg_render dw ?
|
||||
fp_255AA dw ?
|
||||
fp_255AC dw ?
|
||||
|
|
263
th05_main.asm
263
th05_main.asm
|
@ -1088,8 +1088,8 @@ sub_B55A proc near
|
|||
mov byte_2C96C, 0
|
||||
mov _scroll_line, 0
|
||||
mov word_23F06, 0
|
||||
mov word_23F4E, 0
|
||||
mov word_23F50, 0
|
||||
mov _scroll_line_on_plane[0 * 2], 0
|
||||
mov _scroll_line_on_plane[1 * 2], 0
|
||||
mov _scroll_subpixel_line, 0
|
||||
mov byte_23EFC, 0
|
||||
mov byte_23F04, 0
|
||||
|
@ -2450,15 +2450,14 @@ sub_C202 endp
|
|||
sub_C23E proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_23F52, 80008h
|
||||
mov _tile_invalidate_box, (8 shl 16) or 8
|
||||
mov di, 60h
|
||||
mov si, 5986h
|
||||
|
||||
loc_C24F:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_C25B
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_C25B:
|
||||
add si, 10h
|
||||
|
@ -2529,7 +2528,7 @@ sub_C29E endp
|
|||
sub_C2AA proc near
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_23F52+2, 8
|
||||
mov _tile_invalidate_box.y, 8
|
||||
mov si, 9DA0h
|
||||
mov di, 118h
|
||||
|
||||
|
@ -2537,11 +2536,9 @@ loc_C2B8:
|
|||
cmp byte ptr [si], 0
|
||||
jz short loc_C2CD
|
||||
mov ax, [si+8]
|
||||
mov word ptr dword_23F52, ax
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov ax, [si+2]
|
||||
push word ptr [si+6]
|
||||
push ax
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, word ptr [si+6], ax
|
||||
|
||||
loc_C2CD:
|
||||
add si, 10h
|
||||
|
@ -4258,19 +4255,19 @@ sub_D032 proc near
|
|||
mov bp, sp
|
||||
cmp byte_26331, 0FEh
|
||||
jnb short loc_D04F
|
||||
mov word ptr dword_23F52, 40h
|
||||
mov word ptr dword_23F52+2, 40h
|
||||
mov _tile_invalidate_box.x, 64
|
||||
mov _tile_invalidate_box.y, 64
|
||||
pushd [_midboss_pos.prev]
|
||||
jmp short loc_D060
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_D04F:
|
||||
mov word ptr dword_23F52, 80h
|
||||
mov word ptr dword_23F52+2, 80h
|
||||
mov _tile_invalidate_box.x, 128
|
||||
mov _tile_invalidate_box.y, 128
|
||||
pushd [_midboss_pos.cur]
|
||||
|
||||
loc_D060:
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around
|
||||
pop bp
|
||||
retn
|
||||
sub_D032 endp
|
||||
|
@ -6405,15 +6402,15 @@ arg_0 = word ptr 4
|
|||
|
||||
enter 6, 0
|
||||
push di
|
||||
mov dword_23F52, 20002h
|
||||
mov _tile_invalidate_box, (2 shl 16) or 2
|
||||
mov ax, word_2D086
|
||||
mov fs, ax
|
||||
mov di, [bp+arg_0]
|
||||
shl di, 7
|
||||
mov word ptr [bp+var_6+2], 80h
|
||||
mov word ptr [bp+var_6+2], (8 shl 4)
|
||||
|
||||
loc_DFD8:
|
||||
mov word ptr [bp+var_6], 80h
|
||||
mov word ptr [bp+var_6], (8 shl 4)
|
||||
mov [bp+var_2], 18h
|
||||
|
||||
loc_DFE1:
|
||||
|
@ -6423,12 +6420,11 @@ loc_DFE1:
|
|||
loc_DFE7:
|
||||
test [bp+var_1], 80h
|
||||
jnz short loc_DFF4
|
||||
pushd [bp+var_6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large [bp+var_6]
|
||||
|
||||
loc_DFF4:
|
||||
shl [bp+var_1], 1
|
||||
add word ptr [bp+var_6], 100h
|
||||
add word ptr [bp+var_6], (16 shl 4)
|
||||
dec [bp+var_2]
|
||||
jz short loc_E00A
|
||||
test [bp+var_2], 7
|
||||
|
@ -6439,8 +6435,8 @@ loc_DFF4:
|
|||
|
||||
loc_E00A:
|
||||
add di, 2
|
||||
add word ptr [bp+var_6+2], 100h
|
||||
cmp word ptr [bp+var_6+2], 1700h
|
||||
add word ptr [bp+var_6+2], (16 shl 4)
|
||||
cmp word ptr [bp+var_6+2], (PLAYFIELD_H shl 4)
|
||||
jb short loc_DFD8
|
||||
pop di
|
||||
leave
|
||||
|
@ -6745,116 +6741,7 @@ loc_E228:
|
|||
retn 2
|
||||
sub_E148 endp
|
||||
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
||||
sub_E24C proc near
|
||||
mov bx, sp
|
||||
mov dx, word ptr dword_23F52
|
||||
shr dx, 1
|
||||
mov ax, ss:[bx+2]
|
||||
sar ax, 4
|
||||
sub ax, dx
|
||||
cmp ax, 180h
|
||||
jl short loc_E265
|
||||
|
||||
locret_E262:
|
||||
retn 4
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E265:
|
||||
mov cx, ax
|
||||
or ax, ax
|
||||
js short loc_E26E
|
||||
and ax, 0Fh
|
||||
|
||||
loc_E26E:
|
||||
add ax, word ptr dword_23F52
|
||||
dec ax
|
||||
js short locret_E262
|
||||
sar cx, 4
|
||||
jns short loc_E27C
|
||||
xor cx, cx
|
||||
|
||||
loc_E27C:
|
||||
mov word_252DA, cx
|
||||
shr ax, 4
|
||||
inc ax
|
||||
mov cx, ax
|
||||
mov dx, word ptr dword_23F52+2
|
||||
sar dx, 1
|
||||
mov ax, ss:[bx+4]
|
||||
sar ax, 4
|
||||
add ax, 10h
|
||||
sub ax, dx
|
||||
jns short loc_E2A4
|
||||
mov dx, word ptr dword_23F52+2
|
||||
add dx, ax
|
||||
or dx, dx
|
||||
jle short locret_E262
|
||||
|
||||
loc_E2A4:
|
||||
cmp ax, 180h
|
||||
jge short locret_E262
|
||||
mov bh, 0
|
||||
mov bl, _page_back
|
||||
add bx, bx
|
||||
add ax, [bx+356Eh]
|
||||
jns short loc_E2BC
|
||||
add ax, 190h
|
||||
jmp short loc_E2C4
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E2BC:
|
||||
cmp ax, 190h
|
||||
jl short loc_E2C4
|
||||
sub ax, 190h
|
||||
|
||||
loc_E2C4:
|
||||
mov dx, ax
|
||||
and dx, 7
|
||||
add dx, word ptr dword_23F52+2
|
||||
mov bx, dx
|
||||
add bx, ax
|
||||
shr ax, 3
|
||||
shl ax, 5
|
||||
push si
|
||||
push di
|
||||
push ds
|
||||
pop es
|
||||
assume es:_DATA
|
||||
mov di, ax
|
||||
add di, word_252DA
|
||||
add di, offset _halftiles_dirty
|
||||
mov si, 20h ; ' '
|
||||
sub si, cx
|
||||
mov ah, cl
|
||||
mov al, 1
|
||||
cmp bx, 190h
|
||||
jl short loc_E308
|
||||
mov bx, offset _halftiles_dirty_end
|
||||
|
||||
loc_E2F7:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
sub dx, 8
|
||||
add di, si
|
||||
cmp di, bx
|
||||
jl short loc_E2F7
|
||||
sub di, 640h
|
||||
|
||||
loc_E308:
|
||||
mov cl, ah
|
||||
rep stosb
|
||||
add di, si
|
||||
sub dx, 8
|
||||
jg short loc_E308
|
||||
pop di
|
||||
pop si
|
||||
retn 4
|
||||
sub_E24C endp
|
||||
|
||||
include th04/tiles_invalidate.asm
|
||||
|
||||
; =============== S U B R O U T I N E =======================================
|
||||
|
||||
|
@ -7025,7 +6912,7 @@ sub_E318 endp
|
|||
sub_E41C proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_23F52, 200020h
|
||||
mov _tile_invalidate_box, (32 shl 16) or 32
|
||||
mov si, 9296h
|
||||
mov di, 20h ; ' '
|
||||
|
||||
|
@ -7034,8 +6921,7 @@ loc_E42D:
|
|||
jz short loc_E43E
|
||||
cmp byte ptr [si], 3
|
||||
jz short loc_E43E
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_E43E:
|
||||
add si, 40h
|
||||
|
@ -7315,7 +7201,7 @@ sub_E5EE proc near
|
|||
push di
|
||||
mov si, 5DC6h
|
||||
mov di, 0B4h
|
||||
mov dword_23F52, 80008h
|
||||
mov _tile_invalidate_box, (8 shl 16) or 8
|
||||
cmp _bullet_clear_trigger, 0
|
||||
jnz short loc_E638
|
||||
cmp _bullet_clear_time, 0
|
||||
|
@ -7326,16 +7212,14 @@ loc_E60D:
|
|||
jz short loc_E632
|
||||
cmp byte ptr [si+12h], 1
|
||||
jbe short loc_E62B
|
||||
shl dword_23F52, 1
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
shr dword_23F52, 1
|
||||
shl _tile_invalidate_box, 1
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
shr _tile_invalidate_box, 1
|
||||
jmp short loc_E632
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E62B:
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_E632:
|
||||
add si, 20h ; ' '
|
||||
|
@ -7344,23 +7228,21 @@ loc_E632:
|
|||
|
||||
loc_E638:
|
||||
add di, 0DCh
|
||||
shl dword_23F52, 1
|
||||
shl _tile_invalidate_box, 1
|
||||
|
||||
loc_E641:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_E666
|
||||
cmp byte ptr [si+12h], 1
|
||||
jbe short loc_E65F
|
||||
shl dword_23F52, 1
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
shr dword_23F52, 1
|
||||
shl _tile_invalidate_box, 1
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
shr _tile_invalidate_box, 1
|
||||
jmp short loc_E666
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_E65F:
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_E666:
|
||||
add si, 20h ; ' '
|
||||
|
@ -7374,11 +7256,10 @@ loc_E672:
|
|||
jz short loc_E68D
|
||||
mov ax, [si+0Eh]
|
||||
shr ax, 3
|
||||
add ax, 10h
|
||||
mov word ptr dword_23F52, ax
|
||||
mov word ptr dword_23F52+2, ax
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
add ax, 16
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov _tile_invalidate_box.y, ax
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_E68D:
|
||||
add si, 26h ; '&'
|
||||
|
@ -7396,15 +7277,14 @@ sub_E5EE endp
|
|||
sub_E696 proc near
|
||||
push si
|
||||
push di
|
||||
mov dword_23F52, 100010h
|
||||
mov _tile_invalidate_box, (16 shl 16) or 16
|
||||
mov si, 0AF20h
|
||||
mov di, 20h ; ' '
|
||||
|
||||
loc_E6A7:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_E6B3
|
||||
pushd dword ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+6]
|
||||
|
||||
loc_E6B3:
|
||||
add si, 14h
|
||||
|
@ -7419,10 +7299,9 @@ loc_E6BF:
|
|||
mov ax, [si+8]
|
||||
shr ax, 3
|
||||
inc ax
|
||||
mov word ptr dword_23F52, ax
|
||||
mov word ptr dword_23F52+2, ax
|
||||
pushd dword ptr [si+2]
|
||||
call sub_E24C
|
||||
mov _tile_invalidate_box.x, ax
|
||||
mov _tile_invalidate_box.y, ax
|
||||
call tiles_invalidate_around pascal, large dword ptr [si+2]
|
||||
|
||||
loc_E6D8:
|
||||
add si, 0Ah
|
||||
|
@ -10179,7 +10058,7 @@ loc_10223:
|
|||
add ax, ax
|
||||
mov dx, _scroll_line
|
||||
mov bx, ax
|
||||
mov [bx+356Eh], dx
|
||||
mov _scroll_line_on_plane[bx], dx
|
||||
cmp byte_23F04, 0
|
||||
jz short loc_1024F
|
||||
cmp _scroll_active, 0
|
||||
|
@ -12190,8 +12069,8 @@ sub_11184 proc near
|
|||
mov bp, sp
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_23F52, 8
|
||||
mov word ptr dword_23F52+2, 8
|
||||
mov _tile_invalidate_box.x, 8
|
||||
mov _tile_invalidate_box.y, 8
|
||||
mov si, 0B290h
|
||||
xor di, di
|
||||
jmp short loc_111AE
|
||||
|
@ -12200,9 +12079,7 @@ sub_11184 proc near
|
|||
loc_1119C:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_111AA
|
||||
push word ptr [si+8]
|
||||
push word ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, word ptr [si+8], word ptr [si+6]
|
||||
|
||||
loc_111AA:
|
||||
inc di
|
||||
|
@ -13369,14 +13246,11 @@ var_1 = byte ptr -1
|
|||
ja short locret_11AAC
|
||||
|
||||
loc_11A85:
|
||||
mov word ptr dword_23F52, 180h
|
||||
mov word ptr dword_23F52+2, 20h ; ' '
|
||||
push 0A800C00h
|
||||
call sub_E24C
|
||||
push 0C800C00h
|
||||
call sub_E24C
|
||||
push 16800C00h
|
||||
call sub_E24C
|
||||
mov _tile_invalidate_box.x, PLAYFIELD_W
|
||||
mov _tile_invalidate_box.y, 32
|
||||
call tiles_invalidate_around pascal, large ((168 shl 4) shl 16) or (192 shl 4)
|
||||
call tiles_invalidate_around pascal, large ((200 shl 4) shl 16) or (192 shl 4)
|
||||
call tiles_invalidate_around pascal, large ((360 shl 4) shl 16) or (192 shl 4)
|
||||
|
||||
locret_11AAC:
|
||||
leave
|
||||
|
@ -14309,8 +14183,8 @@ var_2 = word ptr -2
|
|||
enter 2, 0
|
||||
push si
|
||||
push di
|
||||
mov word ptr dword_23F52, 10h
|
||||
mov word ptr dword_23F52+2, 10h
|
||||
mov _tile_invalidate_box.x, 16
|
||||
mov _tile_invalidate_box.y, 16
|
||||
mov si, 0B92Ah
|
||||
mov di, 0BDF2h
|
||||
mov [bp+var_2], 0
|
||||
|
@ -14320,9 +14194,7 @@ var_2 = word ptr -2
|
|||
loc_123CC:
|
||||
cmp byte ptr [si], 0
|
||||
jz short loc_123DA
|
||||
push word ptr [si+8]
|
||||
push word ptr [si+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, word ptr [si+8], word ptr [si+6]
|
||||
|
||||
loc_123DA:
|
||||
inc [bp+var_2]
|
||||
|
@ -14338,9 +14210,7 @@ loc_123E0:
|
|||
loc_123ED:
|
||||
cmp byte ptr [di], 0
|
||||
jz short loc_123FB
|
||||
push word ptr [di+8]
|
||||
push word ptr [di+6]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, word ptr [di+8], word ptr [di+6]
|
||||
|
||||
loc_123FB:
|
||||
inc [bp+var_2]
|
||||
|
@ -18658,11 +18528,11 @@ table_1425B dw loc_14187
|
|||
|
||||
|
||||
sub_14266 proc near
|
||||
mov word ptr dword_23F52+2, 30h ; '0'
|
||||
mov _tile_invalidate_box.y, 48
|
||||
cmp byte_2CEC2, 0
|
||||
jz short loc_142D4
|
||||
push di
|
||||
mov word ptr dword_23F52, 30h ; '0'
|
||||
mov _tile_invalidate_box.x, 48
|
||||
mov di, word_2CEC4
|
||||
add di, 0FF90h
|
||||
mov al, byte_2CEC8
|
||||
|
@ -18691,8 +18561,7 @@ loc_14291:
|
|||
jl short loc_142CA
|
||||
cmp _drawpoint.x, (392 shl 4)
|
||||
jge short loc_142CA
|
||||
pushd [_drawpoint]
|
||||
call sub_E24C
|
||||
call tiles_invalidate_around pascal, large [_drawpoint]
|
||||
|
||||
loc_142CA:
|
||||
pop ax
|
||||
|
@ -18704,13 +18573,11 @@ loc_142CA:
|
|||
; ---------------------------------------------------------------------------
|
||||
|
||||
loc_142D4:
|
||||
mov word ptr dword_23F52, 20h ; ' '
|
||||
pushd [player_pos.prev]
|
||||
call sub_E24C
|
||||
mov word ptr dword_23F52, 40h
|
||||
mov word ptr dword_23F52+2, 10h
|
||||
pushd [dword_2CEB8]
|
||||
call sub_E24C
|
||||
mov _tile_invalidate_box.x, 32
|
||||
call tiles_invalidate_around pascal, large [player_pos.prev]
|
||||
mov _tile_invalidate_box.x, 64
|
||||
mov _tile_invalidate_box.y, 16
|
||||
call tiles_invalidate_around pascal, large [dword_2CEB8]
|
||||
|
||||
locret_142F6:
|
||||
retn
|
||||
|
@ -42397,9 +42264,7 @@ byte_23F04 db ?
|
|||
db ?
|
||||
word_23F06 dw ?
|
||||
include th04/formats/std[bss].asm
|
||||
word_23F4E dw ?
|
||||
word_23F50 dw ?
|
||||
dword_23F52 dd ?
|
||||
include th04/tiles_invalidate[bss].asm
|
||||
_boss_bg_render dw ?
|
||||
fp_23F58 dw ?
|
||||
fp_23F5A dw ?
|
||||
|
@ -43614,7 +43479,7 @@ byte_24F6B db ?
|
|||
dd ? ;
|
||||
dd ? ;
|
||||
word_252D8 dw ?
|
||||
word_252DA dw ?
|
||||
_invalidate_left_x_tile dw ?
|
||||
word_252DC dw ?
|
||||
include th04/drawpoint[bss].asm
|
||||
dd ? ;
|
||||
|
|
Loading…
Reference in New Issue