Subversion Repositories Kolibri OS

Rev

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

  1. ;v. 0.4:  20.10.2009 staper@inbox.ru
  2.  
  3. use32
  4.         org     0x0
  5.         db      'MENUET01'
  6.         dd      0x1
  7.         dd      START
  8.         dd      I_END
  9.         dd      (I_END+600) and not 3
  10.         dd      (I_END+600) and not 3
  11.         dd      0x0,0x0
  12.  
  13. DEBUG equ 0
  14.  
  15. use_new_logic equ 1     ;äîáàâëÿåò ïðîâåðêó êëåòêè íà "îêðóæ¸ííîñòü", ïðîãðàììà âûáèðàåò íàèáîëåå ñâîáîäíóþ
  16. use_ext_logic equ 1     ;ê use_new_logic, äîïîëíèòåëüíàÿ ïðîâåðêà ÿ÷ååê âîêðóã çàäàííîé êëåòêè
  17.  
  18. include '../../../macros.inc'
  19. include 'lang.inc'
  20.  
  21. ;include 'debug.inc'
  22.  
  23. macro dbg_dec num
  24. {pushad
  25. newline
  26. debug_print_dec num
  27. popad}
  28.  
  29.  
  30. START:
  31.  
  32.         mcall   40,100111b
  33.         mcall   3
  34.         mov     [rsx1],ax
  35.         shr     eax,16
  36.         mov     [rsx2],ax
  37.         jmp     new_game
  38.  
  39. redraw_all:
  40.         mcall   12,1
  41.         mcall   0,100*65536+432,100*65536+260,0x34FFFFFF,,title
  42.         mcall   38,1*65536+421,27*65536+27,0x00b0b0b0
  43.         mov     edi,10
  44.   @@:   add     ecx,20*65536+20
  45.         mcall
  46.         dec     edi
  47.         jnz     @b
  48.         mcall   ,1*65536+1,27*65536+226,;000000
  49.         mov     edi,21
  50.   @@:   add     ebx,20*65536+20
  51.         mcall
  52.         dec     edi
  53.         jnz     @b
  54.         mcall   13,202*65536+19,27*65536+202,0xFFFFFF
  55.         mcall   4,40*65536+12,0x80000000,text_user
  56.         mcall   ,350*65536+12,,text_cpu
  57.         mcall   8,120*65536+70,7*65536+15,2,0xFFFFFF
  58.         mcall   ,230*65536+70,,3,
  59.         mcall   4,135*65536+12,0x80000000,but_new
  60.         mcall   ,240*65536+12,,but_auto
  61.         mcall   12,2
  62. ret
  63.  
  64. draw_pole:
  65. ;       mcall   0,100*65536+432,100*65536+260,0x74FFFFFF,,title
  66.         if DEBUG
  67.         call    SysMsgBoardNum  ;show esp
  68.         mcall   8,200*65536+10,7*65536+15,4,0xFFFFFF
  69.         endf
  70.  
  71.  
  72.  
  73.         mov     esi,table1
  74.         mov     edi,90
  75.         mov     ebp,10
  76.         mov     ebx,1*65536+21
  77.         mov     ecx,27*65536+47
  78.         call    draw_bots
  79.  
  80.         mov     esi,table5
  81.         mov     edi,90
  82.         mov     ebp,10
  83.         mov     ebx,221*65536+241
  84.         mov     ecx,27*65536+47
  85.         call    draw_bots
  86.         cmp     [u_kill],10
  87.         jne     @f
  88.         mcall   4,69*65536+12,0x80ff0000,text_win
  89.         bts     [flags],5
  90.   @@:   cmp     [c_kill],10
  91.         jne     @f
  92.         mcall   4,372*65536+12,0x80ff0000,text_win
  93.         bts     [flags],5
  94.   @@:   mcall   12,2
  95.         cmp     [number_bots],10
  96.         jne     still
  97.         bts     [flags],0
  98. still:
  99.         mcall   10
  100.  
  101.         cmp     eax,6
  102.         je      mouse
  103.         dec     eax
  104.         jnz     @f
  105.         call    redraw_all
  106.         jmp     draw_pole
  107. @@:     dec     eax
  108.         jz      key
  109.         dec     eax
  110.         jz      button
  111.         jmp     still
  112.  
  113. key:
  114.         mcall   2
  115.         jmp     still
  116.  
  117. button:
  118.         mcall   17
  119.         dec     ah
  120.         jnz     @f
  121.         mcall   -1
  122.  
  123.   @@:   mov     ecx,(344)/4
  124.         mov     esi,table1
  125.     .3: mov     dword [esi],0
  126.         add     esi,4
  127.         loop    .3
  128.  
  129.         dec     ah
  130.         jz      @f
  131.  
  132.         mov     [flags],1001b   ;auto fill
  133.         mov     [number_bots],0
  134.  
  135.         call    set_bots
  136.         mov     [number_bots],0
  137.         bts     [flags],2
  138.         call    set_bots
  139.         call    redraw_all
  140.         btc     [flags2],0
  141.         jc      second_pole.comp
  142.         jmp     draw_pole
  143.  
  144.   @@:                           ;new game
  145.         mov     [number_bots],0
  146. new_game:
  147.         mov     [flags],1100b
  148.         call    set_bots
  149.         btr     [flags],0
  150.         btr     [flags],3
  151.         btr     [flags],2
  152.         mov     [number_bots],0
  153.         call    redraw_all
  154.         jmp     draw_pole
  155.  
  156. draw_bots:
  157.         cmp     byte [esi],1
  158.         je      .one
  159.         cmp     byte [esi],2
  160.         je      .two
  161.         cmp     byte [esi],3
  162.         je      .three
  163.         cmp     byte [esi],4
  164.         jne     .null
  165.         bts     [flags],4
  166.         jmp     .three
  167.  
  168. .end:
  169.         inc     esi
  170.         dec     ebp
  171.         jnz     draw_bots
  172.         test    edi,edi
  173.         jz      @f
  174.         sub     edi,10
  175.         mov     ebp,10
  176.         add     ebx,-200*65536-200
  177.         add     ecx,20*65536+20
  178.         jmp     draw_bots
  179.   @@:
  180. ret
  181.  
  182. .one:
  183.         push    ebx ecx
  184.         call    .0
  185.         mov     edx,0x00aa66
  186.         mcall   13
  187.         pop     ecx ebx
  188. .null:
  189.         add     ebx,20*65536+20
  190.         jmp     .end
  191. .two:
  192.         push    ebx ecx
  193.         add     ebx,8*65536-6
  194.         add     ecx,12*65536-12
  195.         mcall   38,,,0x508cec
  196.         add     ecx,-6*65536+6
  197.         mcall
  198.         pop     ecx ebx
  199.         jmp     .null
  200. .three:
  201.         push    ebx ecx
  202.         call    .0
  203.         mov     edx,0x00FF0000
  204.         bt      [flags],4
  205.         jnc     @f
  206.         mov     edx,0x00555555
  207.         btr     [flags],4
  208.   @@:   mcall   13
  209.         pop     ecx ebx
  210.         xor     edx,edx
  211.         mcall   38
  212.         add     ecx,20*65536-20
  213.         mcall
  214.         add     ecx,-20*65536+20
  215.         jmp     .null
  216.  
  217. .0:
  218.         shr     ebx,16
  219.         inc     bx
  220.         shl     ebx,16
  221.         add     ebx,19
  222.         shr     ecx,16
  223.         inc     cx
  224.         shl     ecx,16
  225.         add     ecx,19
  226. ret
  227.  
  228. mouse:
  229.         bt      [flags],5
  230.         jc      still
  231.         mcall   37,2
  232.         test    eax,eax
  233.         jz      still
  234.         cmp     al,2
  235.         jg      still
  236.         ;1 - «¥¢ ï ª­®¯ª , 2 - ¯à ¢ ï
  237.         dec     al
  238.         jnz     .mouse_1
  239.         btr     [flags],1
  240.         jmp     @f
  241.   .mouse_1:
  242.         bts     [flags],1
  243.   @@:
  244.         mcall   37,1
  245.         mov     dx,ax
  246.         shr     eax,16
  247.         cmp     dx,27
  248.         jbe     still
  249.         cmp     dx,227
  250.         jge     still
  251.         cmp     ax,1
  252.         jbe     still
  253.         cmp     ax,201
  254.         jge     second_pole
  255.                         ;¯¥à¢®¥ ¯®«¥
  256.         bt      [flags],0
  257.         jc      still
  258.         sub     ax,1
  259.         push    dx
  260.         xor     edx,edx
  261.         mov     cx,20
  262.         div     cx
  263.         pop     dx
  264.         mov     [oX],al
  265.         push    ax
  266.         sub     dx,27
  267.         mov     ax,dx
  268.         xor     dx,dx
  269.         div     cx
  270.         mov     [oY],al
  271.         xor     dx,dx
  272.         mov     cx,10
  273.         mul     cx
  274.         pop     dx
  275.         add     ax,dx
  276.         cmp     ax,100
  277.         jg      still
  278.  
  279. set_bot:
  280.         mov     esi,table1
  281.         bt      [flags],2
  282.         jnc     @f
  283.         mov     esi,table2
  284.   @@:   mov     edi,esi
  285.         add     edi,100
  286.         cmp     [number_bots],6
  287.         jnb     .1paluba
  288.         cmp     [number_bots],3
  289.         jnb     .2paluba
  290.         cmp     [number_bots],0
  291.         je      .4paluba
  292.         jmp     .3paluba
  293.  
  294. .4paluba:
  295.         bt      [flags],1       ;ç¥âëàñ寠«ã¡­ë©
  296.         jnc     @f
  297.         cmp     [oX],6
  298.         jg      _still
  299.         jmp     .41
  300.   @@:   cmp     [oY],6
  301.         jg      _still
  302.   .41:  inc     [number_bots]
  303.         mov     [edi],al
  304.         bt      [flags],1
  305.         jc      @f
  306.         add     al,10
  307.         mov     [edi+1],al
  308.         add     al,10
  309.         mov     [edi+2],al
  310.         add     al,10
  311.         mov     [edi+3],al
  312.         jmp     init_table
  313.   @@:   inc     al
  314.         mov     [edi+1],al
  315.         inc     al
  316.         mov     [edi+2],al
  317.         inc     al
  318.         mov     [edi+3],al
  319.         jmp     init_table
  320.  
  321.  
  322. .3paluba:                               ;âàñ寠«ã¡­ë©
  323.         bt      [flags],1
  324.         jnc     @f
  325.         cmp     [oX],7
  326.         jg      _still
  327.         jmp     .31
  328.   @@:   cmp     [oY],7
  329.         jg      _still
  330.   .31:
  331.         call    find_near
  332.  
  333.         bt      [flags],1
  334.         jc      @f
  335.         add     al,10
  336.         call    find_near
  337.         add     al,10
  338.         call    find_near
  339.         sub     al,20
  340.         jmp     .32
  341.   @@:   inc     al
  342.         call    find_near
  343.         inc     al
  344.         call    find_near
  345.         sub     al,2
  346.   .32:
  347.         inc     [number_bots]
  348.         mov     ecx,4
  349.         mov     dl,[number_bots]
  350.         sub     dl,2
  351.         jz      @f
  352.         add     ecx,3
  353.   @@:
  354.         mov     [edi+ecx],al
  355.         bt      [flags],1
  356.         jc      @f
  357.         add     al,10
  358.         mov     [edi+ecx+1],al
  359.         add     al,10
  360.         mov     [edi+ecx+2],al
  361. jmp     init_table
  362.   @@:   inc     al
  363.         mov     [edi+ecx+1],al
  364.         inc     al
  365.         mov     [edi+ecx+2],al
  366. jmp     init_table
  367.  
  368.  
  369.  
  370. .2paluba:                               ;¤¢ã寠«ã¡­ë©
  371.         bt      [flags],1
  372.         jnc     @f
  373.         cmp     [oX],8
  374.         jg      _still
  375.         jmp     .21
  376.   @@:   cmp     [oY],8
  377.         jg      _still
  378.   .21:
  379.         call    find_near
  380.         bt      [flags],1
  381.         jc      @f
  382.         add     al,10
  383.         call    find_near
  384.         sub     al,10
  385.         jmp     .22
  386.   @@:   inc     al
  387.         call    find_near
  388.         dec     al
  389.   .22:
  390.         inc     [number_bots]
  391.         mov     ecx,8
  392.         mov     dl,[number_bots]
  393.         sub     dl,4
  394.         jz      @f
  395.         add     ecx,2
  396.         dec     dl
  397.         jz      @f
  398.         add     ecx,2
  399.   @@:   add     ecx,2
  400.         mov     [edi+ecx],al
  401.         bt      [flags],1
  402.         jc      @f
  403.         add     al,10
  404.         mov     [edi+ecx+1],al
  405. jmp     init_table
  406.   @@:   inc     al
  407.         mov     [edi+ecx+1],al
  408. jmp     init_table
  409.  
  410.  
  411. .1paluba:                               ;®¤­®¯ «ã¡­ë©
  412.         call    find_near
  413.         inc     [number_bots]
  414.         xor     edx,edx
  415.         movzx   ecx,[number_bots]
  416.         add     ecx,9
  417.         mov     [edi+ecx],al
  418. jmp     init_table
  419.  
  420. find_near:
  421.         push    ax
  422.         call    f_near  ;0
  423.  
  424.         cmp     al,10
  425.         jb      @f
  426.         sub     al,10   ;-10
  427.         call    f_near
  428.  
  429. @@:     cmp     al,11
  430.         jb      @f
  431.  
  432.         xor     edx,edx
  433.         mov     ecx,10
  434.         div     cx
  435.         mov     ax,[esp]
  436.         cmp     dx,0
  437.         je      @f
  438.  
  439.         sub     al,11   ;-11
  440.         call    f_near
  441.  
  442. @@:     cmp     al,9
  443.         jb      @f
  444.  
  445.         xor     edx,edx
  446.         mov     ecx,10
  447.         div     cx
  448.         mov     ax,[esp]
  449.         cmp     dx,9
  450.         je      @f
  451.  
  452.         sub     al,9    ;-9
  453.         call    f_near
  454.  
  455. @@:     cmp     al,1
  456.         jb      @f
  457.  
  458.         xor     edx,edx
  459.         mov     ecx,10
  460.         div     cx
  461.         mov     ax,[esp]
  462.         cmp     dx,0
  463.         je      @f
  464.  
  465.         dec     al      ;-1
  466.         call    f_near
  467.  
  468. @@:     cmp     al,99
  469.         jg      @f
  470.  
  471.         xor     edx,edx
  472.         mov     ecx,10
  473.         div     cx
  474.         mov     ax,[esp]
  475.         cmp     dx,9
  476.         je      @f
  477.  
  478.         inc     al      ;+1
  479.         call    f_near
  480.  
  481. @@:     cmp     al,90
  482.         jge     @f
  483.         add     al,10   ;+10
  484.         call    f_near
  485.  
  486. @@:     cmp     al,91
  487.         jge     @f
  488.  
  489.         xor     edx,edx
  490.         mov     ecx,10
  491.         div     cx
  492.         mov     ax,[esp]
  493.         cmp     dx,0
  494.         je      @f
  495.  
  496.         add     al,9    ;+9
  497.         call    f_near
  498.  
  499. @@:     cmp     al,89
  500.         jge     @f
  501.  
  502.         xor     edx,edx
  503.         mov     ecx,10
  504.         div     cx
  505.         mov     ax,[esp]
  506.         cmp     dx,9
  507.         je      @f
  508.         add     al,11   ;+11
  509.         call    f_near
  510.  
  511. @@:     pop     ax
  512. ;       xor     bl,bl
  513. ;       bt      [flags],6
  514. ;       jnc     @f
  515. ;       bt      [flags],9
  516. ;       jnc     @f
  517. ;       inc     [p_pov]
  518. ;       cmp     [p_pov],20
  519. ;       jb      @f
  520. ;       bts     [flags],9
  521. ;  @@:
  522.         btr     [flags],6
  523.         clc
  524. ret
  525.  
  526. f_near:
  527.         bt      [flags],6
  528.         jnc     .2
  529. ;       bt      [flags],9
  530. ;       jc      @f
  531. ;       cmp     byte [esi+eax],2
  532. ;       jge     @f
  533. ;  @@:
  534.         cmp     byte [esi+eax],4
  535.         je      @f
  536.         mov     ax,[esp+4]
  537.         ret
  538.   @@:;  add     esp,4
  539. ;       jmp     second_pole.cpu
  540.         mov     ax,[esp+4]
  541.         mov     cx,ax
  542.         add     esp,6
  543.         btr     [flags],6
  544.         stc
  545. ;       mov     bl,1
  546.         ret
  547.  
  548.  .2:    movzx   edx, byte [smeshenie]
  549.   @@:   cmp     al,[edi+edx]
  550.         je      .end
  551.         dec     dl
  552.         jnz     @b
  553.         cmp     al,[edi]
  554.         je      .end
  555.         mov     ax,[esp+4]
  556.         ret
  557.   .end: add     esp,10
  558.         jmp     _still
  559.  
  560.  
  561.  
  562. init_table:
  563. ;       xor     eax,eax
  564.         movzx   ecx, byte [number_bots]
  565.         mov     edx,3
  566.         dec     cl
  567.         jz      .i_t
  568.  
  569.         mov     al,2
  570. .2:     add     dl,3
  571.         dec     cl
  572.         jz      .i_t
  573.         dec     al
  574.         jnz     .2
  575.  
  576.         mov     al,3
  577. .3:     add     dl,2
  578.         dec     cl
  579.         jz      .i_t
  580.         dec     al
  581.         jnz     .3
  582.  
  583.         mov     al,4
  584. .4:     inc     dl
  585.         dec     cl
  586.         jz      .i_t
  587.         dec     al
  588.         jnz     .4
  589.  
  590. .i_t:   mov     [smeshenie],dl
  591. @@:     movzx   eax, byte [edi+edx]
  592.         mov     byte [esi+eax],1
  593.         dec     dl
  594.         jnz     @b
  595.         movzx   eax, byte [edi]
  596.         mov     byte [esi+eax],1
  597.         bt      [flags],3
  598.         jc      set_bots
  599. ;       mcall   12,1
  600.         jmp     draw_pole
  601.  
  602.  
  603. second_pole:
  604.         cmp     ax,221
  605.         jbe     still
  606.         cmp     ax,421
  607.         jge     still
  608.                         ;¢â®à®¥ ¯®«¥
  609.         bt      [flags],0
  610.         jnc     still
  611.         sub     ax,221
  612.         push    dx
  613.         xor     edx,edx
  614.         mov     cx,20
  615.         div     cx
  616.         pop     dx
  617.         push    ax
  618.         sub     dx,27
  619.         mov     ax,dx
  620.         xor     dx,dx
  621.         div     cx
  622.         xor     dx,dx
  623.         mov     cx,10
  624.         mul     cx
  625.         pop     dx
  626.         add     ax,dx
  627.         cmp     ax,100
  628.         jg      still
  629.  
  630.         mov     edi,table2
  631.         mov     esi,table5
  632.         cmp     byte [esi+eax],2
  633.         jge     still
  634.         mov     bl, byte [edi+eax]
  635.         add     bl,2
  636.         mov     ecx,table5
  637.         call    if_bot_killed
  638.         mov     [esi+eax],bl
  639.         cmp     bl,3
  640.         jge     .m_end
  641. .comp:  mov     esi,table1
  642.  
  643.  
  644.  
  645.  .cpu:
  646. ;        jmp     .rndm
  647.         xor     eax,eax
  648. ;       mov     edi,4
  649.         btr     [flags],8
  650.         xor     ecx,ecx
  651.         mov     edx,tbl_ranen
  652.         mov     dword [edx],0
  653.     @@: mov     al,[esi+ecx]    ;¯®¨áª "¯®¤à ­¥­­®£® ª®à ¡«ï"
  654.         cmp     al,3
  655.         je      .0
  656.         cmp     cl,99
  657.         jge     .1
  658.         inc     cl
  659.         jmp     @b
  660.     .0: mov     [edx],cl
  661. if DEBUG
  662. dbg_dec ecx
  663. endf
  664.         inc     edx
  665.         inc     cl
  666.         jmp     @b
  667.  
  668.     .1:
  669.         dec     edx
  670.         mov     cl,[edx]
  671.         cmp     edx,tbl_ranen
  672.         jb      .rndm
  673.         je      @f
  674.         sub     cl,[edx-1]
  675.         cmp     cl,1
  676.         jne     .2
  677.         add     cl,[edx-1]
  678.         jmp     .12
  679.        .2:
  680.         add     cl,[edx-1]
  681.         jmp     .13
  682.  
  683.     @@: bts     [flags],8
  684.         mov     eax,4
  685.         call    random
  686.         dec     al
  687.         jz      .11
  688.         dec     al
  689.         jz      .12
  690.         dec     al
  691.         jz      .13
  692.         jmp     .14
  693.     .11:
  694. if DEBUG
  695. dbg_dec 100
  696. endf
  697.         cmp     cl,10
  698.         jge     @f
  699.         bts     [flags],8
  700.         jmp     .12
  701.     @@: sub     cl,10
  702.         cmp     byte [esi+ecx],2
  703.         jge     @f
  704.         mov     eax,ecx
  705.         bts     [flags],6
  706.         call    find_near
  707. ;       test    bl,bl
  708. ;       jz      .20
  709.         jnc     .20
  710.     @@: bts     [flags],8
  711.         add     cl,10
  712.         bts     [flags],8
  713.     .12:
  714. if DEBUG
  715. dbg_dec 200
  716. endf
  717.         movzx   eax,cl
  718.         push    cx
  719.         mov     ch,10
  720.         div     ch
  721.         pop     cx
  722.         cmp     ah,9
  723.         jb      @f
  724.         .121:
  725.         bt      [flags],8
  726.         jc      .13
  727.         bts     [flags],8
  728.         mov     edx,tbl_ranen
  729.         mov     cl,[edx]
  730.         jmp     .14
  731.     @@: inc     cl
  732.         cmp     byte [esi+ecx],2
  733.         jge     @f
  734.         mov     eax,ecx
  735.         bts     [flags],6
  736.         call    find_near
  737. ;       test    bl,bl
  738. ;       jz      .20
  739.         jnc     .20
  740.     @@: dec     cl
  741.         jmp     .121
  742.  
  743.     .13:
  744. if DEBUG
  745. dbg_dec 300
  746. endf
  747.         cmp     cl,90
  748.         jb      @f
  749.         .131:
  750.         bt      [flags],8
  751.         jc      .14
  752.         bts     [flags],8
  753.         mov     edx,tbl_ranen
  754.         mov     cl,[edx]
  755.         jmp     .11
  756.     @@: add     cl,10
  757.         cmp     byte [esi+ecx],2
  758.         jge     @f
  759.         mov     eax,ecx
  760.         bts     [flags],6
  761.         call    find_near
  762. ;       test    bl,bl
  763. ;       jz      .20
  764.         jnc     .20
  765.     @@: sub     cl,10
  766.         jmp     .131
  767.  
  768.     .14:
  769. if DEBUG
  770. dbg_dec 400
  771. endf
  772.         movzx   eax,cl
  773.         push    cx
  774.         mov     ch,10
  775.         div     ch
  776.         pop     cx
  777.         cmp     ah,0
  778.         jne     @f
  779.         .141:
  780.         bts     [flags],8
  781.         jmp     .11;cpu;rndm
  782.     @@: dec     cl
  783.         cmp     byte [esi+ecx],2
  784.         jge     @f
  785.         mov     eax,ecx
  786.         bts     [flags],6
  787.         call    find_near
  788. ;       test    bl,bl
  789. ;       jz      .20
  790.         jnc     .20
  791.     @@: inc     cl
  792.         jmp     .141
  793.  
  794. .rndm:
  795.  
  796.         mov     eax,100
  797.         call    random
  798.         cmp     eax,100
  799.         jb      @f
  800.         shr     eax,1
  801. @@:
  802.  
  803. if use_new_logic
  804.         btc     [flags],10
  805.         jnc     @f
  806.         btc     [flags],9
  807.         jnc     @f
  808.         call    check_freedom
  809. endf
  810.  
  811. @@:     cmp     byte [esi+eax],2
  812.         jb      @f;    .rndm
  813.         ;¯®¨áª ᢮¡®¤­®© ª«¥â®çª¨ ¯¥à¥¤/¯®á«¥ ¢ë¡à ­­®©,
  814.         ;¨­ ç¥ random ¨­®£¤  ¢å®¤¨â ¢ ¡¥áª®­¥ç­ë© 横«
  815.         bt      ax,0
  816.         jnc      .r_1
  817.     .r_0:
  818.         cmp     al,0
  819.         je      .r_1
  820.         dec     al
  821.  
  822.         cmp     byte [esi+eax],2
  823.         jb      @f
  824.         jmp     .r_0
  825.     .r_1:
  826.         cmp     al,99
  827.         je      .r_0
  828.         inc     al
  829.  
  830.         cmp     byte [esi+eax],2
  831.         jb      @f
  832.         jmp     .r_1
  833. @@:
  834.         bts     [flags],6
  835.         call    find_near
  836. ;       test    bl,bl
  837. ;       jnz     .cpu   
  838.         jc      .cpu;20
  839.  
  840. .20:
  841.         mov     bl,[esi+eax]
  842.         add     bl,2
  843.         mov     ecx,esi
  844.         mov     edi,esi
  845.         call    if_bot_killed
  846.         mov     [esi+eax],bl
  847. ;       cmp     [u_kill],10
  848. ;       je      .m_end
  849.         cmp     [c_kill],10
  850.         je      .m_end
  851.         cmp     bl,3
  852.         jge     .cpu
  853.  
  854. .m_end:;        mcall   12,1
  855. jmp     draw_pole
  856.  
  857. if_bot_killed:
  858.         push    ebx
  859.         add     edi,100
  860.         mov     ebx,19
  861.   @@:   cmp     al,[edi+ebx]
  862.         je      @f
  863.         dec     ebx
  864.         jnz     @b
  865.         cmp     al,[edi+ebx]
  866.         jne     .end
  867.   @@:
  868.         cmp     ebx,16
  869.         jnb     .end_i
  870.  
  871.   @@:   cmp     bl,10
  872.         jb      .2
  873.         btc     bx,0
  874.         mov     bl, [edi+ebx]
  875.         cmp     byte [ecx+ebx],3
  876.         jne     .end
  877.         inc     byte [ecx+ebx]
  878.         jmp     .end_i
  879.  
  880.   .2:   cmp     bl,4
  881.         jb      .3
  882.         add     edi,4
  883.         cmp     bl,7
  884.         jb      .3
  885.         add     edi,3
  886.   .3:   movzx   edx, byte [edi]
  887.         cmp     dl,al
  888.         je      @f
  889.         cmp     byte [ecx+edx],3
  890.         jne     .end
  891.   @@:   mov     dl,[edi+1]
  892.         cmp     dl,al
  893.         je      @f
  894.         cmp     byte [ecx+edx],3
  895.         jne     .end
  896.   @@:   mov     dl,[edi+2]
  897.         cmp     dl,al
  898.         je      @f
  899.         cmp     byte [ecx+edx],3
  900.         jne     .end
  901.  
  902.   @@:   cmp     bl,4
  903.         jnb     @f
  904.         mov     dl,[edi+3]
  905.         cmp     dl,al
  906.         je      @f
  907.         cmp     byte [ecx+edx],3
  908.         jne     .end
  909.  
  910.  
  911.   @@:   mov     dl,[edi]
  912.         cmp     dl,al
  913.         je      @f
  914.         inc     byte [ecx+edx]
  915.   @@:   mov     dl,[edi+1]
  916.         cmp     dl,al
  917.         je      @f
  918.         inc     byte [ecx+edx]
  919.   @@:   mov     dl,[edi+2]
  920.  
  921.         cmp     bl,4
  922.         jnb     .9;@f
  923.  
  924. ;       cmp     dl,al
  925. ;       je      .end_i
  926. ;       inc     byte [ecx+edx]
  927. ;       jmp     .end_i
  928.  
  929.  
  930.   @@:   cmp     dl,al
  931.         je      @f
  932.         inc     byte [ecx+edx]
  933.   @@:   mov     dl,[edi+3]
  934. .9:     cmp     dl,al
  935.         je      .end_i
  936.         inc     byte [ecx+edx]
  937.   .end_i:
  938.         pop     ebx
  939.         inc     ebx
  940.         cmp     ecx,table5
  941.         jne     @f
  942.         inc     [u_kill]
  943.         ret
  944.   @@:   inc     [c_kill]
  945.         ret
  946.   .end: pop     ebx
  947. ret
  948.  
  949.  
  950.  
  951.  
  952. _still:
  953.         bt      [flags],3
  954.         jnc     still
  955.  
  956. set_bots:
  957.         cmp     [number_bots],10
  958.         jne     @f
  959.         ret
  960.   @@:   xor     edx,edx
  961.         mov     ecx,10
  962.         cmp     [number_bots],6
  963.         jb      @f
  964.         push    dword 10
  965.         jmp     .1
  966.   @@:   cmp     [number_bots],3
  967.         jb      @f
  968.         push    dword 9
  969.         jmp     .1
  970.   @@:   cmp     [number_bots],2
  971.         jb      @f
  972.         push    dword 8
  973.         jmp     .1
  974.   @@:   push    dword 7
  975.   .1:
  976.         mov     eax,[esp]
  977.         call    random
  978.         mov     [oX],al
  979.         mul     cl
  980.         mov     cl,al
  981.         mov     eax,[esp]
  982.         call    random
  983.         mov     [oY],al
  984.         add     cl,al
  985.  
  986.         cmp     cl,100
  987.         jge     .1
  988.  
  989.         add     esp,4
  990.         mov     eax,2
  991.         call    random
  992.         cmp     al,1
  993.         jne     @f
  994.         bts     [flags],1
  995.         mov     al,cl
  996.         jmp     set_bot
  997.   @@:   btr     [flags],1
  998.         mov     al,cl
  999.         jmp     set_bot
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006. ;¯à®æ¥¤ãà  ®â« ¢«¨¢ ¥â "­ ¨¡®«¥¥ ᢮¡®¤­ãî" ¨§ ª«¥â®ª ¤«ï  â ª¨
  1007.  
  1008. if use_new_logic
  1009. check_freedom:
  1010. ;       mov     esi,table1
  1011.         push    ax
  1012.         push    word 100
  1013.         xor     eax,eax
  1014.         mov     ebx,0x900
  1015.  
  1016. .1:     bts     [flags],6
  1017.         call    find_near
  1018.         jc      .11
  1019.         cmp     byte [esi+eax],2        ;0
  1020.         jb      @f
  1021. .11:    inc     bl
  1022.  
  1023. @@:     cmp     al,10                   ;-10
  1024.         jb      @f
  1025.         push    ax
  1026.  
  1027.         sub     al,10
  1028.          if use_ext_logic
  1029.                 bts     [flags],6
  1030.                 call    find_near
  1031.                 jc      .21
  1032.          endf
  1033.         cmp     byte [esi+eax],2
  1034.         jb      .22
  1035. .21:    inc     bl
  1036. .22:    pop     ax
  1037.  
  1038. @@:     cmp     al,11
  1039.         jb      @f
  1040.         push    ax
  1041.  
  1042.         xor     edx,edx
  1043.         mov     ecx,10
  1044.         push    ax
  1045.         div     cx
  1046.         pop     ax
  1047.  
  1048.         cmp     dx,0
  1049.         je      .32
  1050.  
  1051.         sub     al,11
  1052.          if use_ext_logic
  1053.                 bts     [flags],6
  1054.                 call    find_near
  1055.                 jc      .31
  1056.          endf
  1057.         cmp     byte [esi+eax],2        ;-11
  1058.         jb      .32
  1059. .31:    inc     bl
  1060. .32:    pop     ax
  1061.  
  1062. @@:     cmp     al,9
  1063.         jb      @f
  1064.         push    ax
  1065.  
  1066.         xor     edx,edx
  1067.         mov     ecx,10
  1068.         push    ax
  1069.         div     cx
  1070.         pop     ax
  1071.         cmp     dx,9
  1072.         je      .42
  1073.  
  1074.         sub     eax,9
  1075.          if use_ext_logic
  1076.                 bts     [flags],6
  1077.                 call    find_near
  1078.                 jc      .41
  1079.          endf
  1080.         cmp     byte [esi+eax],2        ;-9
  1081.         jb      .42
  1082. .41:    inc     bl
  1083. .42:    pop     ax
  1084.  
  1085. @@:     cmp     al,1
  1086.         jb      @f
  1087.         push    ax
  1088.  
  1089.         xor     edx,edx
  1090.         mov     ecx,10
  1091.         push    ax
  1092.         div     cx
  1093.         pop     ax
  1094.         cmp     dx,0
  1095.         je      .52
  1096.  
  1097.         dec     al
  1098.          if use_ext_logic
  1099.                 bts     [flags],6
  1100.                 call    find_near
  1101.                 jc      .51
  1102.          endf
  1103.         cmp     byte [esi+eax],2        ;-1
  1104.         jb      .52
  1105. .51:    inc     bl
  1106. .52:    pop     ax
  1107.  
  1108. @@:     cmp     al,99
  1109.         jg      @f
  1110.         push    ax
  1111.  
  1112.         xor     edx,edx
  1113.         mov     ecx,10
  1114.         push    ax
  1115.         div     cx
  1116.         pop     ax
  1117.         cmp     dx,9
  1118.         je      .62
  1119.  
  1120.         inc     al
  1121.          if use_ext_logic
  1122.                 bts     [flags],6
  1123.                 call    find_near
  1124.                 jc      .61
  1125.          endf
  1126.         cmp     byte [esi+eax],2        ;+1
  1127.         jb      .62
  1128. .61:    inc     bl
  1129. .62:    pop     ax
  1130.  
  1131. @@:     cmp     al,90
  1132.         jge     @f
  1133.         push    ax
  1134.         add     al,10
  1135.          if use_ext_logic
  1136.                 bts     [flags],6
  1137.                 call    find_near
  1138.                 jc      .71
  1139.          endf
  1140.         cmp     byte [esi+eax],2        ;+10
  1141.         jb      .72
  1142. .71:    inc     bl
  1143. .72:    pop     ax
  1144.  
  1145. @@:     cmp     al,91
  1146.         jge     @f
  1147.         push    ax
  1148.         xor     edx,edx
  1149.         mov     ecx,10
  1150.         push    ax
  1151.         div     cx
  1152.         pop     ax
  1153.         cmp     dx,0
  1154.         je      .82
  1155.  
  1156.         add     al,9
  1157.          if use_ext_logic
  1158.                 bts     [flags],6
  1159.                 call    find_near
  1160.                 jc      .81
  1161.          endf
  1162.         cmp     byte [esi+eax],2        ;+9
  1163.         jb      .82
  1164. .81:    inc     bl
  1165. .82:    pop     ax
  1166.  
  1167. @@:     cmp     al,89
  1168.         jge     @f
  1169.         push    ax
  1170.  
  1171.         xor     edx,edx
  1172.         mov     ecx,10
  1173.         push    ax
  1174.         div     cx
  1175.         pop     ax
  1176.  
  1177.         cmp     dx,9
  1178.         je      .92
  1179.  
  1180.         add     al,11
  1181.          if use_ext_logic
  1182.                 bts     [flags],6
  1183.                 call    find_near
  1184.                 jc      .91
  1185.          endf
  1186.         cmp     byte [esi+eax],2        ;+11
  1187.         jb      .92
  1188. .91:    inc     bl
  1189. .92:    pop     ax
  1190.  
  1191. @@:     bt      [flags],7
  1192.         jc      .ret
  1193.         cmp     byte [esi+eax],1
  1194.         jg      @f
  1195.         cmp     bl,bh
  1196.         jg      @f
  1197.  
  1198. ;       shl     ebx,8
  1199.         bts     [flags],6
  1200.         call    find_near
  1201. ;       xchg    cl,bl
  1202. ;       shr     ebx,8
  1203. ;       test    cl,cl
  1204. ;       jnz     @f
  1205.         jc      @f
  1206.  
  1207.         shl     bx,8
  1208.         pop     dx      ;dh - ¡«¨¦ ©è ï á«¥¢  ᢮¡®¤­¥©è ï ª«¥âª , dl - á¯à ¢ 
  1209.         pop     cx      ;cl - à ­¤®¬­® ¢ë¡à ­­ ï ª«¥âª 
  1210. ;       cmp     al,dl
  1211. ;       jg      .5
  1212. ;       cmp     al,cl
  1213. ;       jb      .4
  1214. ;       mov     dl,al
  1215. ;       jmp     .5
  1216. ;.4:    cmp     al,dh
  1217. ;       jb      .5
  1218. ;       mov     dh,al
  1219.         cmp     al,dh
  1220.         jb      .5
  1221.         cmp     al,cl
  1222.         jg      .4
  1223.         mov     dh,al
  1224.         jmp     .5
  1225. .4:     cmp     al,dl
  1226.         jg      .5
  1227.         mov     dl,al
  1228. .5:     push    cx dx
  1229. @@:     xor     bl,bl
  1230.         inc     al
  1231.         cmp     al,100
  1232.         jb      .1
  1233.         pop     dx ax
  1234.  
  1235. if DEBUG
  1236. dbg_dec eax
  1237. dbg_dec edx
  1238. endf
  1239.         cmp     dl,100
  1240.         jb      @f
  1241.         mov     al,dh
  1242.         ret
  1243. @@:     mov     al,dh
  1244.         push    dx
  1245.         bts     [flags],7
  1246.         call    .1
  1247.         shl     bx,8
  1248.         mov     al,[esp]
  1249.         call    .1
  1250.         pop     dx
  1251.         btr     [flags],7
  1252.         mov     al,dl
  1253.         test    bl,bh
  1254.         jbe     .ret
  1255.         mov     al,dh
  1256. .ret:
  1257. ret
  1258.  
  1259. endf
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267. align 4
  1268. rsx1 dw ?;0x4321
  1269. rsx2 dw ?;0x1234
  1270. random:         ; ¨§ ASCL
  1271.         push ecx edx esi
  1272.         mov cx,ax
  1273.         mov ax,[rsx1]
  1274.         mov bx,[rsx2]
  1275.         mov si,ax
  1276.         mov di,bx
  1277.         mov dl,ah
  1278.         mov ah,al
  1279.         mov al,bh
  1280.         mov bh,bl
  1281.         xor bl,bl
  1282.         rcr dl,1
  1283.         rcr ax,1
  1284.         rcr bx,1
  1285.         add bx,di
  1286.         adc ax,si
  1287.         add bx,0x62e9
  1288.         adc ax,0x3619
  1289.         mov [rsx1],bx
  1290.         mov [rsx2],ax
  1291.         xor dx,dx
  1292.         cmp ax,0
  1293.         je nodiv
  1294.         cmp cx,0
  1295.         je nodiv
  1296.         div cx
  1297. nodiv:
  1298.         mov ax,dx
  1299.         pop esi edx ecx
  1300.         and eax,0000ffffh
  1301. ret
  1302.  
  1303.  
  1304. if DEBUG
  1305. SysMsgBoardNum: ;warning: destroys eax,ebx,ecx,esi
  1306.         mov     ebx,esp
  1307.         mov     ecx,8
  1308.         mov     esi,(number_to_out+1)
  1309. .1:
  1310.         mov     eax,ebx
  1311.         and     eax,0xF
  1312.         cmp     al,10
  1313.         sbb     al,69h
  1314.         das
  1315.         mov     [esi+ecx],al
  1316.         shr     ebx,4
  1317.         loop    .1
  1318.         dec     esi
  1319.         mcall   71,1,number_to_out
  1320. ret
  1321.  
  1322. number_to_out   db '0x00000000',13,10,0
  1323. endf
  1324.  
  1325.  
  1326.  
  1327.  
  1328. text_cpu db 'CPU',0
  1329. text_user db 'USER',0
  1330. if lang eq ru
  1331. title db 'Œ®à᪮© ¡®© 0.4',0
  1332. but_auto db ' ááâ ¢¨âì',0
  1333. but_new db '®¢ ï',0
  1334. text_win db '‚먣ࠫ!',0
  1335. else
  1336. title db 'Sea war 0.4',0
  1337. but_auto db 'Auto fill',0
  1338. but_new db 'New',0
  1339. text_win db 'Won!',0
  1340. endf
  1341.  
  1342. I_END:
  1343. ; t1,t3,t5: 0-­¥¯®¬¥ç¥­­ ï ª«¥â®çª , 1-§ ­ïâ ï, 2-"¯à®¬ å", 3-"£®à¨â", 4-"¯®â®¯«¥­"
  1344. ; t2,t4: â ¡«¨æë à á¯®«®¦¥­¨ï í«¥¬¥­â®¢, 1 í«¥¬¥­â ¯® 4 ª«¥âª¨, 2x3, 3x2, 4x1
  1345. align 16
  1346. table1  rb 100  ;«¥¢®¥ ¯®«¥
  1347. table3  rb 20
  1348. table2  rb 100  ;¯à ¢®¥
  1349. table4  rb 20
  1350. table5  rb 100
  1351. u_kill  rb 1
  1352. c_kill  rb 1
  1353. p_pov   rb 1
  1354. smeshenie rb 1
  1355. number_bots rb 1
  1356. oX rb 1
  1357. oY rb 1
  1358. tbl_ranen rb 4
  1359.  
  1360. flags rw 1
  1361. flags2 rw 1
  1362. ;¡¨â 0: 0/1 - § ¯®«­¥­¨¥ â ¡«¨æ /¨£à 
  1363. ;1: ­ ¦ â  «¥¢ ï ª­®¯ª  ¬ëè¨ (¢¥à⨪ «ì) /¯à ¢ ï (£®à¨§®­â «ì)
  1364. ;2: § ¯®«­ï¥âáï «¥¢®¥ ¯®«¥ /¯à ¢®¥
  1365. ;3: àãç­®¥ § ¯®«­¥­¨¥ / ¢â®§ ¯®«­¥­¨¥
  1366. ;4: ¢ .three - ¯®â®¯«¥­­ë© ª®à ¡«ì
  1367. ;5: ¨£à  ®ª®­ç¥­ 
  1368. ;6: ¢ second_pole - ¢ë§®¢ find_near
  1369. ;7: ¢ check_freedom
  1370. ;8: § à¥§¥à¢¨à®¢ ­®
  1371. ;9: § à¥§¥à¢¨à®¢ ­®
  1372. ;10: § à¥§¥à¢¨à®¢ ­®