forked from KolibriOS/kolibrios
198 lines
3.6 KiB
PHP
198 lines
3.6 KiB
PHP
FH_levelp:
|
||
mcall 40,100111b
|
||
call get_xy_sf
|
||
call erase_field
|
||
sub esi,2
|
||
mov [levptr],esi
|
||
movzx ecx,byte[esi-2]
|
||
sub ecx,2
|
||
xor eax,eax
|
||
.lp:
|
||
lodsb
|
||
mov byte[field+eax],-1
|
||
loop .lp
|
||
mov dword[player],-1
|
||
mov [win_flag],3
|
||
ret
|
||
|
||
FH_key:
|
||
cmp eax,-1
|
||
je FH_mouse
|
||
cmp eax,8
|
||
jne .nobsp
|
||
cmp [stepptr],0
|
||
jne .no1st
|
||
mov [jump],run.game
|
||
ret
|
||
.no1st:
|
||
mov [win_flag],0
|
||
sub [cur_step],2
|
||
mov esi,[cur_step]
|
||
mov edi,[finish]
|
||
mov eax,3
|
||
movzx ebx,byte[esi]
|
||
sub eax,ebx
|
||
movzx ecx,byte[esi+1]
|
||
.lp0:
|
||
and byte[field+edi],0
|
||
add edi,[dirs+eax*4]
|
||
loop .lp0
|
||
mov [finish],edi
|
||
dec [stepptr]
|
||
ret
|
||
.nobsp:
|
||
cmp eax,176
|
||
jb .ex
|
||
cmp eax,179
|
||
ja .ex
|
||
sub eax,176
|
||
jmp FH_mouse.fromkey
|
||
.ex:
|
||
ret
|
||
|
||
FH_drawm:
|
||
mov ecx,[cell_count]
|
||
.lp:
|
||
push ecx
|
||
movzx ebx,byte[field+ecx-1]
|
||
test ebx,ebx
|
||
jz .no
|
||
lea eax,[ecx-1]
|
||
call get_xy
|
||
mov edx,0
|
||
cmp ebx,0xf
|
||
jne .stable
|
||
mov edx,0x909090
|
||
.stable:
|
||
mcall 13,[lx],[ly]
|
||
.no:
|
||
pop ecx
|
||
loop .lp
|
||
|
||
mov eax,[player]
|
||
cmp eax,-1
|
||
je .ex
|
||
call get_xy
|
||
mcall 13,[lx],[ly],0xff00
|
||
mov eax,[finish]
|
||
call get_xy
|
||
mcall 13,[lx],[ly],0xff0000
|
||
|
||
mov ecx,[stepptr]
|
||
jecxz .ex
|
||
mov ebx,area
|
||
mov edi,[player]
|
||
mov edx,0xffffff
|
||
.lp3:
|
||
push ecx
|
||
mov esi,edi
|
||
movzx eax,byte[ebx]
|
||
movzx ecx,byte[ebx+1]
|
||
add ebx,2
|
||
.lp2:
|
||
add edi,[dirs+eax*4]
|
||
loop .lp2
|
||
call getline
|
||
pop ecx
|
||
loop .lp3
|
||
.ex:
|
||
ret
|
||
|
||
FH_mouse:
|
||
mov [jump],drw;red
|
||
call get_last_mclick
|
||
cmp byte[field+ebx],0
|
||
jne .ex
|
||
cmp dword[player],-1
|
||
jne .nostart
|
||
mov dword[player],ebx
|
||
mov byte[field+ebx],0xf
|
||
mov [finish],ebx
|
||
and [win_flag],0
|
||
mov [cur_step],area
|
||
and [stepptr],0
|
||
ret
|
||
.nostart:
|
||
mov eax,[finish]
|
||
call get_offset
|
||
cmp eax,-1
|
||
je .ex
|
||
.fromkey:
|
||
xor ecx,ecx
|
||
mov edx,eax
|
||
mov esi,[finish]
|
||
.lp:
|
||
add esi,[dirs+edx*4]
|
||
cmp byte[field+esi],0
|
||
jnz .exlp
|
||
mov eax,[finish]
|
||
mov ebx,esi
|
||
call get_offset
|
||
cmp eax,edx
|
||
jne .exlp
|
||
mov byte[field+esi],0xf
|
||
inc ecx
|
||
mov [finish],esi
|
||
jmp .lp
|
||
|
||
.exlp:
|
||
jecxz .ex
|
||
mov eax,edx
|
||
mov edi,[cur_step]
|
||
stosb
|
||
mov [edi],cl
|
||
inc edi
|
||
mov [cur_step],edi
|
||
inc [stepptr]
|
||
mov edi,field
|
||
mov ecx,[cell_count]
|
||
xor eax,eax
|
||
repne scasb
|
||
je .ch_deadend
|
||
mov [win_flag],1
|
||
.ex:
|
||
ret
|
||
.ch_deadend:
|
||
mov ecx,4
|
||
mov edx,dirs
|
||
.lpp:
|
||
mov eax,[finish]
|
||
mov ebx,[edx]
|
||
add ebx,eax
|
||
push ebx
|
||
call get_offset
|
||
pop ebx
|
||
cmp eax,-1
|
||
je .nxtlp
|
||
cmp byte[field+ebx],0
|
||
jz .ex
|
||
.nxtlp:
|
||
add edx,4
|
||
loop .lpp
|
||
mov [win_flag],4
|
||
ret
|
||
|
||
FH_level:
|
||
file 'fhouse.bin'
|
||
|
||
if lang eq ru_RU
|
||
FH_help mstr \
|
||
'<27> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>砫<EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD>',\
|
||
'<27><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>室<EFBFBD><E5AEA4> <20><>१ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⪨ <20><>',\
|
||
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<>.',\
|
||
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>אַ,',\
|
||
'<27><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20> <20><><EFBFBD><EFBFBD>, <20><>। <20><><EFBFBD><EFBFBD>묨',\
|
||
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠬<EFBFBD> <20><><EFBFBD> 㦥 <20><><EFBFBD><EFBFBD>饭<EFBFBD>묨 <20><><EFBFBD>⪠<EFBFBD><E2AAA0>.','',\
|
||
'http://www.clickmazes.com'
|
||
else
|
||
FH_help mstr \
|
||
'For each puzzle find the starting square and draw',\
|
||
'a path moving horizontally and vertically that',\
|
||
'passes through each open square exactly once.','',\
|
||
'At each move the red runner will always run',\
|
||
'straight, as far as possible, stopping only when',\
|
||
"blocked by the grid's edge, a black square, or a",\
|
||
'square already visited.','',\
|
||
'http://www.clickmazes.com'
|
||
end if
|