2024-06-14 10:35:46 +02:00
|
|
|
|
; Language support for locales: ru_RU (CP866), en_US.
|
|
|
|
|
|
|
|
|
|
TM_levelp:
|
|
|
|
|
call get_xy_sf
|
|
|
|
|
mov [levptr],esi
|
|
|
|
|
call unpack_level
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
TM_key:
|
|
|
|
|
cmp eax,' '
|
|
|
|
|
je .mm
|
|
|
|
|
cmp eax,176
|
|
|
|
|
jb .still
|
|
|
|
|
cmp eax,179
|
|
|
|
|
ja .still
|
|
|
|
|
lea ebx,[eax-176]
|
|
|
|
|
mov eax,[teseus]
|
|
|
|
|
call check_move
|
|
|
|
|
jc .still
|
|
|
|
|
call move_teseus
|
|
|
|
|
cmp [win_flag],0
|
|
|
|
|
jne .ex
|
|
|
|
|
.nowin:
|
|
|
|
|
call drwfld
|
|
|
|
|
.mm:
|
|
|
|
|
call move_minotaur
|
|
|
|
|
cmp eax,[teseus]
|
|
|
|
|
jne .still
|
|
|
|
|
mov [win_flag],2
|
|
|
|
|
jmp .ex
|
|
|
|
|
.still:
|
|
|
|
|
mov [jump],still
|
|
|
|
|
.ex:
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
move_minotaur:
|
|
|
|
|
xor esi,esi
|
|
|
|
|
mov eax,[teseus]
|
|
|
|
|
mov ebx,[fx]
|
|
|
|
|
div bl
|
|
|
|
|
mov ecx,eax ;teseus: ch-x, cl-y
|
|
|
|
|
mov eax,[minotaur]
|
|
|
|
|
.again:
|
|
|
|
|
call mino_xy
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
cmp dh,ch
|
|
|
|
|
je .stand2
|
|
|
|
|
ja .ok1
|
|
|
|
|
add ebx,3
|
|
|
|
|
.ok1:
|
|
|
|
|
call check_move
|
|
|
|
|
jc .stand2
|
|
|
|
|
add eax,[dirs+ebx*4]
|
|
|
|
|
mov [minotaur],eax
|
|
|
|
|
inc esi
|
|
|
|
|
call delay
|
|
|
|
|
call drwfld
|
|
|
|
|
cmp esi,2
|
|
|
|
|
jb .again
|
|
|
|
|
jmp .ex
|
|
|
|
|
.stand1:
|
|
|
|
|
call mino_xy
|
|
|
|
|
.stand2:
|
|
|
|
|
mov ebx,2
|
|
|
|
|
cmp dl,cl
|
|
|
|
|
je .ex
|
|
|
|
|
ja .ok2
|
|
|
|
|
dec ebx
|
|
|
|
|
.ok2:
|
|
|
|
|
call check_move
|
|
|
|
|
jc .ex
|
|
|
|
|
add eax,[dirs+ebx*4]
|
|
|
|
|
mov [minotaur],eax
|
|
|
|
|
inc esi
|
|
|
|
|
call delay
|
|
|
|
|
call drwfld
|
|
|
|
|
cmp esi,2
|
|
|
|
|
jb .again
|
|
|
|
|
.ex:
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
mino_xy:
|
|
|
|
|
push eax
|
|
|
|
|
div byte[fx]
|
|
|
|
|
mov edx,eax ;minotaur: dh-x, dl-y
|
|
|
|
|
pop eax
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
move_teseus:
|
|
|
|
|
pusha
|
|
|
|
|
cdq
|
|
|
|
|
mov ecx,[fx]
|
|
|
|
|
div cl
|
|
|
|
|
add ax,1 shl 8+1
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jne .no0
|
|
|
|
|
cmp ah,1
|
|
|
|
|
jne .move
|
|
|
|
|
.win:
|
|
|
|
|
inc [win_flag]
|
|
|
|
|
jmp .ex
|
|
|
|
|
.no0:
|
|
|
|
|
cmp ebx,1
|
|
|
|
|
jne .no1
|
|
|
|
|
cmp al,byte[fy]
|
|
|
|
|
je .win
|
|
|
|
|
jmp .move
|
|
|
|
|
.no1:
|
|
|
|
|
cmp ebx,2
|
|
|
|
|
jne .no2
|
|
|
|
|
cmp al,1
|
|
|
|
|
je .win
|
|
|
|
|
jmp .move
|
|
|
|
|
.no2:
|
|
|
|
|
cmp ebx,3
|
|
|
|
|
jne .move
|
|
|
|
|
cmp ah,byte[fx]
|
|
|
|
|
je .win
|
|
|
|
|
.move:
|
|
|
|
|
mov eax,[esp+28]
|
|
|
|
|
add eax,[dirs+ebx*4]
|
|
|
|
|
mov [teseus],eax
|
|
|
|
|
.ex:
|
|
|
|
|
popa
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
TM_drawm:
|
|
|
|
|
mov eax,[teseus]
|
|
|
|
|
call get_xy
|
|
|
|
|
mcall 13,[lx],[ly],0xff00
|
|
|
|
|
mov eax,[minotaur]
|
|
|
|
|
call get_xy
|
|
|
|
|
mcall 13,[lx],[ly],0xff0000
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
TM_level:
|
|
|
|
|
file 'tam.bin'
|
|
|
|
|
|
|
|
|
|
if lang eq ru_RU
|
|
|
|
|
TM_help mstr \
|
|
|
|
|
' <20><>ᥩ (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㡥<><E3A1A5><EFBFBD><EFBFBD> <20><>',\
|
|
|
|
|
'<27><><EFBFBD><EFBFBD>ਭ<EFBFBD><E0A8AD>. <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>堭<EFBFBD><E5A0AD><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD>⠢<EFBFBD>',\
|
|
|
|
|
'(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 室 <20><>ᥩ <20><><EFBFBD><EFBFBD>⠢<EFBFBD>',\
|
|
|
|
|
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 室<> <20><> ⠪<><E2A0AA> <20>奬<EFBFBD>:',\
|
|
|
|
|
' <20><><EFBFBD>砫<EFBFBD> <20><> <20><>⠥<EFBFBD><E2A0A5><EFBFBD> <20>ਡ<EFBFBD><E0A8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>',\
|
|
|
|
|
'<27><>ਧ<EFBFBD><E0A8A7>⠫<EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,',\
|
|
|
|
|
'<27><> <20><>⠥<EFBFBD><E2A0A5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>⨪<EFBFBD><E2A8AA><EFBFBD> <20><> 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.',\
|
|
|
|
|
'<27> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤥ<><E1A4A5><EFBFBD><EFBFBD> <20><> ⮣<>, <20><> <20><>㣮<EFBFBD><E3A3AE>,',\
|
|
|
|
|
'<27><><EFBFBD><EFBFBD>⠢<EFBFBD> <20>ய<EFBFBD>᪠<EFBFBD><E1AAA0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 室.','',\
|
|
|
|
|
'http://puzzleprograms.narod.ru' ; FIXME: Check link works
|
|
|
|
|
else ; Default to en_US
|
|
|
|
|
TM_help mstr \
|
|
|
|
|
' Theseus (the green dot) must escape from a maze.',\
|
|
|
|
|
'There is also a mechanical Minotaur (the red',\
|
|
|
|
|
'dot) in each maze. For every turn that Theseus',\
|
|
|
|
|
'takes, the Minotaur takes two turns.',\
|
|
|
|
|
' Each turn he decides following:',\
|
|
|
|
|
'First he tests if he can move horizontally and',\
|
|
|
|
|
'get closer to Theseus. If he can, he will move',\
|
|
|
|
|
"one square horizontally. If he can't, he will",\
|
|
|
|
|
'test if he could move vertically and get closer',\
|
|
|
|
|
'to Theseus. If he can, he will move one square',\
|
|
|
|
|
"vertically. If he can't move either horizontally",\
|
|
|
|
|
'or vertically, then he just skips that turn.','',\
|
|
|
|
|
'http://puzzleprograms.narod.ru' ; FIXME: Check link works
|
|
|
|
|
end if
|