Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. LP_levelp:
  2.                 mcall 40,100111b
  3.                 inc  [drag_flag]
  4.                 lodsb
  5.                 lodsw
  6.     mov  byte[fx],al
  7.     mov  byte[fy],ah
  8.                 and  dword[player],0
  9.                 and  dword[finish],0
  10.     call get_xy_sf.count
  11.     call erase_field
  12. ;    mov  [levptr],esi
  13.         .bit2:
  14.     mov  edx,8/2
  15.     mov  edi,field
  16.     lodsb
  17.     mov  ecx,[cell_count]
  18.   .lp:
  19.         mov  bl,al
  20.         rol  al,2
  21.         and  bl,11000000b
  22.         mov  [edi],bl
  23.         inc  edi
  24.         dec  edx
  25.         test edx,edx
  26.         jnz  .nxt
  27.     mov  edx,8/2
  28.                 lodsb
  29.         .nxt:
  30.                 loop .lp
  31.     ret
  32.  
  33. LP_key:
  34.                 cmp  eax,0
  35.                 jl   LP_mouse
  36.                 cmp  eax,8
  37.                 jne  .nobsp
  38.                 cmp  [stepptr],0
  39.                 jne  .no1st
  40.                 mov  [jump],run.game
  41.                 ret
  42.         .no1st:
  43.                 mov  [win_flag],0
  44.                 sub  [cur_step],2
  45.                 mov  esi,[cur_step]
  46.                 mov  edi,[finish]
  47.                 mov  eax,3
  48.                 movzx ebx,byte[esi]
  49.                 sub  eax,ebx
  50.                 movzx ecx,byte[esi+1]
  51.         .lp0:
  52.                 and  byte[field+edi],0
  53.                 add  edi,[dirs+eax*4]
  54.                 loop .lp0
  55.                 mov  [finish],edi
  56.                 dec  [stepptr]
  57.                 ret
  58.         .nobsp:
  59.     cmp  eax,176
  60.     jb   .ex
  61.     cmp  eax,179
  62.     ja   .ex
  63.     sub  eax,176
  64.   .ex:
  65.     ret
  66.  
  67. LP_drawm:
  68.                 and  [pause_time],0
  69.     mov  ecx,[cell_count]
  70.   .lp:
  71.     push ecx
  72.     mov  bl,byte[field+ecx-1]
  73.     push ebx
  74.     lea  eax,[ecx-1]
  75.     mov  ecx,eax
  76.     call get_xy
  77.  
  78.     mov  al,bl
  79.     and  al,0xf
  80.     test bl,11000000b
  81.     jnz  .noempty
  82.     mov  esi,LP_aw
  83.     mov  ecx,11
  84.     call LP_draw_alert
  85.     jmp  .no
  86.   .noempty:
  87.     mov  edx,0
  88.     test bl,10000000b
  89.     je   .stable
  90.     mov  edx,0xffffff
  91.     mov  esi,LP_aw
  92.     mov  ecx,7
  93.     jmp  .d13
  94.   .stable:
  95.     mov  esi,LP_em
  96.     mov  ecx,9
  97.         .d13:
  98.     call LP_draw_alert
  99.     mcall 13,[lx],[ly]
  100.   .no:
  101.         mov  esi,[esp+4]
  102.         dec  esi
  103.         mov  edi,esi
  104.         mov  edx,0x0000FF
  105.   ; ecx - cell #
  106.         test byte[esp],10b
  107.         je   .no_dn
  108.         add  edi,[dirs+4*1]
  109.         call getline
  110.   .no_dn:
  111.         test byte[esp],1000b
  112.         je   .no_right
  113.         mov  edi,esi
  114.         add  edi,[dirs+4*3]
  115.         call getline
  116.         .no_right:
  117.         pop  ebx
  118.     pop  ecx
  119.   .valid:
  120.     loop .lp2
  121.     jmp  .exlp
  122.   .lp2:
  123.         jmp  .lp
  124.   .exlp:
  125.  
  126.     mov  esi,[player]
  127.     mov  edi,[finish]
  128.     cmp  esi,edi
  129.     je   .ex
  130.     mov  edx,0x7777FF
  131.     call getline
  132.   .ex:
  133.         cmp  [pause_time],0
  134.         jne   .ex2
  135.         xor  ecx,ecx
  136.         xor  ebx,ebx
  137.         mov  edx,5
  138. ; eax - cur cell content, ebx - cell #, ecx - cell counter, edx - dir
  139.         .chwin:
  140.         movzx eax,byte[field+ebx]
  141.         and  eax,0xf
  142.         btr  eax,edx
  143.         bsf  edx,eax
  144.         je   .ex3
  145.         inc  ecx
  146.         add  ebx,[dirs+edx*4]
  147.         jz   .ex3
  148.         xor  edx,11b
  149.         jmp  .chwin
  150.   .ex3:
  151.         cmp  ecx,[cell_count]
  152.         jne  .ex2
  153.         mov  [win_flag],1
  154.   .ex2:
  155.     ret
  156.  
  157. LP_mouse:
  158.                 cmp  [win_flag],1
  159.                 je   .ex
  160.     mov  [jump],still
  161.     mov  edx,eax
  162.                 call get_last_mclick
  163.     cmp  edx,-2
  164.     jne  .no1st
  165.                 test eax,eax
  166.                 jnz  .noempty
  167.                 mov  eax,[player]
  168.                 mov  ebx,[finish]
  169.                 call get_offset
  170.                 mov  ecx,eax
  171.                 mov  edx,0x101
  172.                 shl  dl,cl
  173.                 xor  ecx,11b
  174.                 shl  dh,cl
  175.                 mov  ecx,ebx
  176.                 jecxz LP_drawm.ex2
  177.                 mov  esi,[player]
  178.         .lp:
  179.                 xor  [field+esi],dl
  180.                 add  esi,[dirs+eax*4]
  181.                 xor  [field+esi],dh
  182.                 loop .lp
  183.                 xor  ebx,ebx
  184.         .noempty:
  185.                 mov  [player],ebx
  186.     jmp  .exx
  187.   .no1st:
  188.                 test eax,eax
  189.                 jz   .ex
  190.                 mov  eax,[player]
  191.                 push ebx
  192.                 call get_offset
  193.                 pop  ebx
  194.                 cmp  eax,-1
  195.                 je   .ex
  196.         .exx:
  197.                 mov  [finish],ebx
  198.     mov  [jump],drw
  199. ;               ud2
  200.         .ex:
  201.                 ret
  202.  
  203.  
  204. LP_aw db 1001b,0110b
  205. LP_em db 0000b,0001b,0010b,0100b,1000b
  206. LP_ab   db 0011b,0101b,1100b,1010b,1001b,0110b
  207.  
  208. LP_draw_alert:
  209. ; al-cell, esi - ptr,ecx - len
  210.         .lp:
  211.                 cmp  al,[esi]
  212.                 je   .ex
  213.                 inc  esi
  214.                 loop .lp
  215.                 pusha
  216.                 mov  ebx,[lx]
  217.                 mov  ecx,[ly]
  218.                 add  ebx,4-2 shl 16
  219.                 add  ecx,4-2 shl 16
  220.                 mcall 13,,,0xFFAAAA
  221.                 mov  [pause_time],eax
  222.                 popa
  223.         .ex:
  224.                 ret
  225.  
  226. LP_level:
  227. file 'loops.bin'
  228.  
  229. if lang eq ru
  230.         LP_help mstr \
  231.         '—¥à¥§ ¢á¥ ª«¥âª¨ ¯àאַ㣮«ì­¨ª  ­¥®¡å®¤¨¬®',\
  232.         '¯à®¢¥á⨠§ ¬ª­ãâãî «®¬ ­ãî. à®å®¤ï ç¥à¥§ ç¥à­ë©',\
  233.         'ªà㦮ª, «®¬ ­ ï ®¡ï§ ­  ¯®¢¥à­ãâì,   ¯à®å®¤ï',\
  234.         'ç¥à¥§ ¡¥«ë© ªà㦮ª, «®¬ ­ ï ¯®¢®à ç¨¢ âì ­¥',\
  235.         '¬®¦¥â. ‚ ¯ãáâëå ¦¥ ª«¥âª å «®¬ ­ ï ¢¥¤¥â á¥¡ï ª ª',\
  236.         '§ å®ç¥â.','',\
  237.         'http://puzzleprograms.narod.ru'
  238. else
  239.         LP_help mstr \
  240.         'You have to draw closed line over every grid',\
  241.         'cell. On black square line must turn, and it must',\
  242.         'go straight when over white square. The line may',\
  243.         'behave anyhow elsewhere.','',\
  244.         'http://puzzleprograms.narod.ru'
  245. end if
  246.