[Reverse-engineering] [th02/th04/th05] .map file loading

Funded by -Tom-.
This commit is contained in:
nmlgc 2018-03-16 07:43:20 +01:00
parent 13a6a1d64c
commit f98fba3c9d
7 changed files with 77 additions and 845 deletions

View File

@ -36,3 +36,5 @@ mikoconfig_t struc
mikoconfig_t ends
END_LINE_LEN = 46
MAP_SIZE = 0C00h

View File

@ -986,28 +986,27 @@ sub_42F8 endp
; Attributes: bp-based frame
sub_4314 proc near
MAP_SIG_SIZE = 10
arg_2 = word ptr 6
arg_4 = word ptr 8
map_load proc pascal
arg @@fn:dword
local @@ms:byte:MAP_SIG_SIZE
enter 0Ah, 0
push [bp+arg_4]
push [bp+arg_2]
push word ptr @@fn+2
push word ptr @@fn
nopcall file_ropen
push ss
lea ax, [bp-0Ah]
lea ax, @@ms
push ax
push 0Ah
push MAP_SIG_SIZE
nopcall file_read
push ds
push offset unk_21A56
push 0C00h
push offset map
push MAP_SIZE
nopcall file_read
nopcall file_close
leave
retf 4
sub_4314 endp
ret
map_load endp
; =============== S U B R O U T I N E =======================================
@ -1259,7 +1258,7 @@ loc_449C:
loc_44BF:
mov bx, di
add bx, cx
mov al, [bx+3FE6h]
mov al, map[bx]
mov [si+4DF6h], al
mov bx, [bp+var_2]
mov [bx+si+4E0Fh], al
@ -1359,7 +1358,7 @@ loc_455C:
and ax, 7
imul ax, 18h
add bx, ax
mov al, [bx+si+3FE6h]
mov al, map[bx+si]
mov ah, 0
mov [bp-2], ax
mov ax, si
@ -1425,7 +1424,7 @@ loc_45CB:
and ax, 7
imul ax, 18h
add bx, ax
mov al, [bx+si+3FE6h]
mov al, map[bx+si]
mov bx, 17h
sub bx, di
imul bx, 18h
@ -2331,7 +2330,7 @@ loc_B4D7:
push ss
lea ax, [bp+var_C]
push ax
call far ptr sub_4314
call map_load
call sub_42F8
push ss
lea ax, [bp+var_C]
@ -38737,19 +38736,13 @@ byte_21A52 db ?
byte_21A53 db ?
byte_21A54 db ?
byte_21A55 db ?
unk_21A56 db ? ;
map db MAP_SIZE dup (?)
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
db ? ;
word_21A70 dw ?
word_21A72 dw ?
dword_21A74 dd ?
word_21A78 dw ?
word_21A7A dw ?
dd ? ;
dd ? ;
dd ? ;
@ -38814,12 +38807,6 @@ word_21A7A dw ?
dd ? ;
dd ? ;
dd ? ;
byte_21B7C db ?
db ?
word_21B7E dw ?
word_21B80 dw ?
byte_21B82 db ?
byte_21B83 db ?
dd ? ;
dd ? ;
dd ? ;
@ -38830,770 +38817,6 @@ byte_21B83 db ?
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
dd ? ;
db ? ;
db ? ;
word_22796 dw ?
byte_22798 db ?
dd ? ;

6
th04/formats/map.inc Normal file
View File

@ -0,0 +1,6 @@
; .map file header.
map_header_t struc
map_size dw ?
map_unk dw 3 dup (?)
map_header_t ends

View File

@ -1,2 +1,4 @@
GAME = 4
include defconv_pascal.inc
include th04/formats/map.inc

View File

@ -978,7 +978,7 @@ loc_B141:
call sub_B8FC
loc_B144:
call sub_B971
call map_load
call sub_B6D1
call sub_CED4
call sub_BAA2
@ -1091,7 +1091,7 @@ sub_B29E proc near
call sub_1DFD4
call sub_CF1E
call sub_B79E
call sub_B9BB
call map_free
push 800100h
call super_clean
mov si, 8
@ -1765,7 +1765,7 @@ loc_B89D:
pop es
assume es:_DATA
push ds
mov ax, word_25A3E
mov ax, map_seg
mov ds, ax
mov cx, 18h
rep movsw
@ -1865,11 +1865,11 @@ sub_B8FC endp
; Attributes: bp-based frame
sub_B971 proc near
map_load proc near
var_8 = word ptr -8
@@mh = map_header_t ptr -(size map_header_t)
enter 8, 0
enter size map_header_t, 0
les bx, dword_2CDC6
assume es:nothing
mov al, es:[bx+13h]
@ -1879,41 +1879,41 @@ var_8 = word ptr -8
push bx
call file_ropen
push ss
lea ax, [bp+var_8]
lea ax, [bp+@@mh]
push ax
push 8
push size map_header_t
call file_read
call sub_B9BB
push [bp+var_8]
call map_free
push [bp+@@mh.map_size]
call hmem_allocbyte
mov word_25A3E, ax
mov map_seg, ax
push ax
push 0
push [bp+var_8]
push [bp+@@mh.map_size]
call file_read
call file_close
leave
retn
sub_B971 endp
map_load endp
; =============== S U B R O U T I N E =======================================
; Attributes: bp-based frame
sub_B9BB proc near
map_free proc near
push bp
mov bp, sp
cmp word_25A3E, 0
cmp map_seg, 0
jz short loc_B9D4
push word_25A3E
push map_seg
call hmem_free
mov word_25A3E, 0
mov map_seg, 0
loc_B9D4:
pop bp
retn
sub_B9BB endp
map_free endp
; =============== S U B R O U T I N E =======================================
@ -2041,7 +2041,7 @@ sub_BAA2 proc near
mov es, ax
mov ax, word_21C58
mov fs, ax
mov ax, word_25A3E
mov ax, map_seg
mov ds, ax
mov al, 5
@ -5297,7 +5297,7 @@ loc_CF63:
push 1Fh
call sub_13A58
call sub_B79E
call sub_B9BB
call map_free
loc_CF70:
nopcall sub_D6EB
@ -8547,7 +8547,7 @@ loc_E813:
call sub_CF1E
call sub_FF89
call sub_B79E
call sub_B9BB
call map_free
call super_free
call graph_hide
call text_clear
@ -47704,7 +47704,7 @@ byte_25A38 db ?
word_25A3A dw ?
byte_25A3C db ?
byte_25A3D db ?
word_25A3E dw ?
map_seg dw ?
dd ? ;
dd ? ;
dd ? ;

View File

@ -1,2 +1,4 @@
GAME = 5
include defconv_pascal.inc
include th04/formats/map.inc

View File

@ -1097,7 +1097,7 @@ loc_B4A6:
call sub_BAF8
loc_B4A9:
call sub_BB3E
call map_load
call sub_BDEC
call sub_EE17
call sub_BB9A
@ -1224,7 +1224,7 @@ sub_B609 proc near
call sub_14529
call sub_EE32
call sub_BEA4
call sub_BB82
call map_free
push 0B40100h
call super_clean
mov si, 1
@ -1825,9 +1825,9 @@ sub_BAF8 endp
; =============== S U B R O U T I N E =======================================
sub_BB3E proc near
map_load proc near
push si
call sub_BB82
call map_free
mov al, stage_id
add al, 30h ; '0'
mov aSt00_map+3, al
@ -1840,17 +1840,17 @@ sub_BB3E proc near
mov bx, ax
mov si, ax
mov ah, 3Fh ; '?'
mov dx, 3514h
mov dx, offset map_header
mov cx, 8
int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE
; BX = file handle, CX = number of bytes to read
; DS:DX -> buffer
push word_23EF4
push map_header.map_size
call hmem_allocbyte
mov word_25354, ax
mov map_seg, ax
push ds
mov bx, si
mov cx, word_23EF4
mov cx, map_header.map_size
mov ds, ax
xor dx, dx
mov ah, 3Fh
@ -1863,22 +1863,22 @@ sub_BB3E proc near
; BX = file handle
pop si
retn
sub_BB3E endp
map_load endp
; =============== S U B R O U T I N E =======================================
sub_BB82 proc near
cmp word_25354, 0
map_free proc near
cmp map_seg, 0
jz short locret_BB98
push word_25354
push map_seg
call hmem_free
mov word_25354, 0
mov map_seg, 0
locret_BB98:
retn
sub_BB82 endp
map_free endp
; ---------------------------------------------------------------------------
nop
@ -1900,7 +1900,7 @@ sub_BB9A proc near
assume es:_DATA
mov ax, word_21290
mov fs, ax
mov ax, word_25354
mov ax, map_seg
mov ds, ax
mov al, 5
@ -2165,7 +2165,7 @@ loc_BD88:
pop es
assume es:_DATA
push ds
mov ax, word_25354
mov ax, map_seg
mov ds, ax
mov cx, 18h
rep movsw
@ -10398,7 +10398,7 @@ loc_F71C:
call sub_EE32
call sub_CE68
call sub_BEA4
call sub_BB82
call map_free
call super_free
call graph_hide
call text_clear
@ -45501,10 +45501,7 @@ include libs/master.lib/pfint21[bss].asm
word_23EEC dw ?
dw ?
dword_23EF0 dd ?
word_23EF4 dw ?
dd ? ;
db ? ;
db ? ;
map_header map_header_t ?
byte_23EFC db ?
word_23EFD dw ?
word_23EFF dw ?
@ -46852,7 +46849,7 @@ byte_25350 db ?
byte_25351 db ?
byte_25352 db ?
byte_25353 db ?
word_25354 dw ?
map_seg dw ?
dd ? ;
dd ? ;
dd ? ;