Subversion Repositories Kolibri OS

Rev

Rev 6277 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. WND_COLOR equ 0x02aa00FF
  3.  
  4. use32
  5.   org    0x0
  6.   db     'MENUET01'
  7.   dd     0x01
  8.   dd     START
  9.   dd     I_END
  10.   dd     0x300000
  11.   dd     0x27fff0
  12.   dd     0x0
  13.   dd     0x0
  14.  
  15. include 'lang.inc'
  16. include '..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков!
  17.  
  18. include 'ASCL.INC'
  19. include 'ASCGL.INC'
  20.  
  21.  
  22.  
  23. gif_hash_offset = gif_hash_area
  24. COLOR_ORDER equ MENUETOS
  25.  
  26. DELAY equ  2         ; Задержка перед переходом к следующему кадру в мсек
  27.  
  28. START:
  29. ;****************
  30. ; Открываем фаил
  31. ;****************
  32. openfile:
  33. ;    and  [entered],0
  34. ;    mov ecx,499*3*4 ;at start
  35.     xor ecx,ecx
  36.     mov ecx,1
  37.  
  38.   ; Convert gif to animation format
  39.     giftoani workarea,Image,ecx
  40.     bmptoimg bullet_bmp, img_bullet
  41.     bmptoimg level_bmp, img_level
  42.     bmptoimg kirpich, img_area
  43.     bmptoimg kirpich2, img_area2
  44.     bmptoimg kirpich3, img_area3
  45.     bmptoimg lest_bmp, img_lestniza
  46.     bmptoimg water1_bmp, img_water1
  47.     bmptoimg water2_bmp, img_water2
  48.     bmptoimg door1_bmp, img_door1
  49.     bmptoimg door2_bmp, img_door2
  50.  
  51.  
  52. red:
  53.     call timer
  54.     call draw_window
  55. ;    call load_level
  56. ;    delay 200
  57.  
  58. still:
  59.     timeevent DELAY,no_event, red, key, button
  60.  
  61. no_event:
  62.     call draw_subimage
  63.     jmp  still
  64.  
  65.   key:
  66.  ; блока движения персонажа
  67.     mov  eax,2
  68.     int  0x40
  69.      cmp  ah, 179          ; право  4
  70.      je go_mov
  71.      cmp  ah, 176          ; лево  1
  72.      je go_mov
  73.      cmp  ah, 178          ; верх  3
  74.      je go_mov
  75.      cmp  ah, 177          ; низ  2
  76.      je go_mov
  77.      cmp  ah, 120          ; низ  2
  78.      je go_fire
  79.      cmp  ah, 122          ; низ  2
  80.      je go_fire
  81.      cmp  ah, 239          ; низ  2
  82.      je go_fire_left
  83.      cmp  ah, 231          ; низ  2
  84.      je go_fire
  85.  
  86.  
  87.       jmp no_mov    ; if not left, right, up, down, then go NO MOV
  88.  
  89.     go_mov:
  90.        ;mov ebx, [v_mov2]
  91.        mov [v_mov2], ah
  92.        sub word [v_mov2], 175   ; отнимаем от кода клавиши 175 и остается 1,2,3 или 4 соответственно направления движения персонажа
  93.       jmp no_mov    ; if not left, right, up, down, then go NO MOV
  94.  
  95.     go_fire_left:
  96.        xor eax,eax
  97.        mov ah, 122
  98.        call fire
  99.       jmp no_mov
  100.     go_fire:
  101.        call fire
  102.     no_mov:
  103.  ; конец блока движения персонажа
  104.     jmp  still
  105.  
  106.   button:
  107.     mov  eax, 17
  108.     int  0x40
  109.  
  110.     cmp  ah,1
  111.     jne  noclose
  112.   _close:
  113.     or   eax,-1
  114.     int  0x40
  115.   noclose:
  116.     jmp  still
  117.  
  118. ;   *********************************************
  119. ;   *******  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА *******
  120. ;   *********************************************
  121.  
  122. draw_window:
  123.     startwd
  124.  
  125.     mov  eax,0
  126.     mov  ebx,50*65536+522
  127.     mov  ecx,50*65536+536
  128.     mov  edx,WND_COLOR
  129.     mov  esi,0x8050FFd0
  130.     mov  edi,0x005080d0
  131.     int  0x40
  132.  
  133.     label 8,6,'ПОДЗЕМЕЛЬЕ для Колибри ОС <<<RU095@YANDEX.RU>>> z/x стрелять',cl_White+font_Big
  134.  
  135.     mov  eax,8
  136.     mov  ebx,(500)*65536+12
  137.     mov  ecx,5*65536+12
  138.     mov  edx,1
  139.     mov  esi,0x000000
  140.     int  0x40
  141.  
  142.     xor  ecx,ecx
  143.     call draw_subimage
  144.     cmp  [imgcount],1
  145.     je   .enddraw
  146.  
  147.     mov  ecx,[img_index]
  148.  
  149.     call draw_subimage
  150.  
  151.   .enddraw:
  152.  
  153.     endwd
  154.  
  155.  
  156. ret
  157.  
  158. ;*******************************************
  159. ; LABIRINT
  160. ;*******************************************
  161.  
  162.  labirint:
  163.  
  164.    ; вывод блоков лабиринта
  165.    cycle:
  166.  
  167.     mov     eax, [Lab]
  168.     shl     eax, 5          ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
  169.     mov     [perem1], eax
  170.     mov     eax, [Lab]
  171.     shr     eax, 4          ; сдвиг регистра в лево
  172.     shl     eax, 5          ; сдвиг обратно (все равно что целочисленное делениена 256)
  173.     mov     [perem2], eax
  174.     shl     eax, 4          ; все равно что отнимаем от координат ненужный прирост -> У-256*X
  175.     sbb  dword [perem1], eax;
  176.  
  177.   mov    ebx, [Lab]
  178.   sbb    ebx, 1
  179.   mov     eax,[Dangeon + ebx]    ; берет байт из дангеон + смещение
  180.  
  181.   cmp  ah, 1   ;
  182.   je go_block
  183.  
  184.   cmp  ah, 0   ;
  185.   je back_block
  186.  
  187.   cmp  ah, 12   ; закраска фона за алмазом
  188.   je back_block
  189.  
  190.   cmp  ah, 3   ;
  191.   je boom_block
  192.  
  193.   cmp  ah, 16   ;
  194.   je door_block
  195.  
  196.   cmp  ah, 2   ; закраска фона за алмазом
  197.   je cool_block
  198.  
  199.   jmp end_block
  200.   go_block:
  201.     imgtoimg img_area,dword [perem1],dword [perem2],canvas
  202.   jmp end_block
  203.  
  204.   cool_block:
  205.      imgtoimg img_area3,dword [perem1],dword [perem2],canvas
  206.   jmp end_block
  207.  
  208.  
  209.   back_block:
  210.     imgtoimg img_area2,dword [perem1],dword [perem2],canvas
  211.    jmp end_block
  212.  
  213.   door_block:
  214.     imgtoimg img_door1,dword [perem1],dword [perem2],canvas
  215.  
  216.     mov eax, [gold]
  217.     cmp ax, 10        ; если собрано более 10 алмазов дверь открыта
  218.     jna end_block
  219.     imgtoimg img_door2,dword [perem1],dword [perem2],canvas
  220.    jmp end_block
  221.  
  222.  
  223.   boom_block:
  224.     imgtoimg img_area,dword [perem1],dword [perem2],canvas
  225.            mov ebp,18 ; кадр
  226.            mov eax, dword [perem1]
  227.            mov dword [X_anime], eax
  228.            mov eax, dword [perem2]
  229.            mov dword [Y_anime], eax
  230.            call animashka
  231.  
  232.              mov ecx, [timer1]   ;
  233.              and ecx, 15
  234.              cmp ecx, 0
  235.              jne  end_block
  236.  
  237.                mov    ebx, [Lab]
  238.                 mov     byte [Dangeon + ebx], 0    ; берет байт из дангеон + смещение
  239.  
  240.  
  241.   end_block:
  242.  
  243.     add word [Lab],1
  244.     mov     eax, [Lab]
  245.  
  246.    cmp     eax, 256                   ;   if eax == 0
  247.    je      cycle_end                 ;   jump to cycle_end:
  248.    jmp     cycle                    ;
  249.  
  250.    cycle_end:
  251.  
  252.    mov    eax, 0
  253.    mov    [Lab],eax
  254.  
  255.  ret   ; END labirint
  256.  
  257.  
  258. ;*******************************************
  259. ; ЛЕСТНИЦА
  260. ;*******************************************
  261.  lestniza:
  262.    ; вывод блоков лабиринта
  263.    cycle2:
  264.  
  265.     mov     eax, [Lab]
  266.     shl     eax, 5          ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
  267.     mov     [perem1], eax
  268.     mov     eax, [Lab]
  269.     shr     eax, 4          ; сдвиг регистра в лево
  270.     shl     eax, 5          ; сдвиг обратно (все равно что целочисленное делениена 256)
  271.     mov     [perem2], eax
  272.     shl     eax, 4          ; все равно что отнимаем от координат ненужный прирост -> У-256*X
  273.     sbb  dword [perem1], eax;
  274.  
  275.  
  276.   mov    ebx, [Lab]
  277.   sbb    ebx, 1
  278.   mov     eax,[Dangeon + ebx]    ; берет байт из дангеон + смещение
  279.  
  280.   cmp  ah, 8   ;
  281.   je go_lestniza
  282.  
  283.   jmp end_lestniza
  284.   go_lestniza:
  285.  
  286.     imgtoimg img_lestniza,dword [perem1],dword [perem2],canvas
  287.   end_lestniza:
  288.  
  289.     add word [Lab],1
  290.     mov     eax, [Lab]
  291.  
  292.    cmp     eax, 256                   ;   if eax == 0
  293.    je      cycle2_end                 ;   jump to cycle_end:
  294.    jmp     cycle2                    ;
  295.  
  296.    cycle2_end:
  297.  
  298.    mov    eax, 0
  299.    mov    [Lab],eax
  300.  
  301.  
  302.  ret   ; END lestniza
  303.  
  304.  
  305.  
  306. ;*******************************************
  307. ; ВОДА     и  АЛМАЗЫ
  308. ;*******************************************
  309.  water:
  310.  
  311.    ; вывод воды лабиринта
  312.    cycle3:
  313.  
  314.     mov     eax, [Lab]
  315.     shl     eax, 5          ; сдвиг регистра в право на 5 позиции все равно что умножили на 32
  316.     mov     [perem1], eax
  317.     mov     eax, [Lab]
  318.     shr     eax, 4          ; сдвиг регистра в лево
  319.     shl     eax, 5          ; сдвиг обратно (все равно что целочисленное делениена 256)
  320.     mov     [perem2], eax
  321.     shl     eax, 4          ; все равно что отнимаем от координат ненужный прирост -> У-256*X
  322.     sbb  dword [perem1], eax;
  323.  
  324.  
  325.   mov    ebx, [Lab]
  326.   sbb    ebx, 1
  327.   mov     eax,[Dangeon + ebx]    ; берет байт из дангеон + смещение
  328.  
  329.   cmp  ah, 4   ;
  330.   je go_water
  331.  
  332.   cmp  ah, 12   ;  рисование алмазов
  333.   je go_almaz
  334.  
  335.   jmp end_water
  336.   go_water:
  337.   mov     eax,0    ;
  338.   mov     eax, [timer1];
  339.   and  eax, 15
  340.   cmp  eax, 7   ;
  341.   jb go_water2
  342.  
  343.     imgtoimg img_water1,dword [perem1],dword [perem2],canvas
  344.   jmp end_water
  345.  
  346.   go_water2:
  347.     imgtoimg img_water2,dword [perem1],dword [perem2],canvas
  348.  
  349.   jmp end_water
  350.   go_almaz:
  351.  
  352.   mov     eax,0    ;
  353.   mov     eax, [timer1];
  354.   and  eax, 31
  355.  
  356.    cmp eax, 10
  357.    ja almaz2
  358.  
  359.    mov ebp,14 ; кадр
  360.    mov eax, dword [perem1]
  361.    mov dword [X_anime], eax
  362.    mov eax, dword [perem2]
  363.    mov dword [Y_anime], eax
  364.    call animashka
  365.    jmp end_water
  366.  
  367.    almaz2:
  368.    cmp eax, 20
  369.    ja almaz3
  370.  
  371.    mov ebp,15 ; кадр
  372.    mov eax, dword [perem1]
  373.    mov dword [X_anime], eax
  374.    mov eax, dword [perem2]
  375.    mov dword [Y_anime], eax
  376.    call animashka
  377.    jmp end_water
  378.  
  379.    almaz3:
  380.    mov ebp,16 ; кадр
  381.    mov eax, dword [perem1]
  382.    mov dword [X_anime], eax
  383.    mov eax, dword [perem2]
  384.    mov dword [Y_anime], eax
  385.    call animashka
  386.  
  387.  
  388.   end_water:
  389.  
  390.     add word [Lab],1
  391.     mov     eax, [Lab]
  392.  
  393.    cmp     eax, 256                   ;   if eax == 0
  394.    je      cycle3_end                 ;   jump to cycle_end:
  395.    jmp     cycle3                    ;
  396.  
  397.    cycle3_end:
  398.  
  399.    mov    eax, 0
  400.    mov    [Lab],eax
  401.  
  402.  
  403.  ret   ; END water
  404.  
  405.  
  406. ;*******************************************
  407. ; Выводим следующий кадр из списка картинок
  408. ;*******************************************
  409. draw_subimage:
  410.   ;aframetoimg Image,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
  411.  
  412.   call labirint
  413.   call lestniza
  414.   call enemy_mas
  415.   call enemy_mov
  416. ;-------------------------------------------------------------------------------
  417.     mov ebx, [gold]
  418.     cmp bx, 5           ;увеличение скорости врагов если украл более 9
  419.     jna lov_velo
  420.      call enemy_mas
  421.      call enemy_mov
  422.     lov_velo:
  423. ;-------------------------------------------------------------------------------
  424. ;-------------------------------------------------------------------------------
  425.     mov ebx, [gold]
  426.     cmp bx, 9           ;увеличение скорости врагов если украл более 9
  427.     jna lov_velo2
  428.      call enemy_mas
  429.      call enemy_mov
  430.     lov_velo2:
  431. ;-------------------------------------------------------------------------------
  432. ;  call enemy_mas
  433. ;  call enemy_mov
  434.   call hiro
  435.   call hiro_mov
  436.   call water
  437.  
  438.   call bullet_mov
  439.   call bullet_mov
  440.   call bullet_mov
  441.   call bullet_mas
  442.   call bullet_mov
  443.   call bullet_mov
  444.   call bullet_mov
  445.   call bullet_mas
  446.   call proverka_gold
  447.   call potop
  448.  
  449.   setimg 6,20,canvas
  450.  
  451.   call timer
  452.   call tablo
  453. ret
  454.  
  455. ;@@@@@@@@@@@@@@@@@@
  456. animashka:
  457. ;!!!ВАЖНО перед вызовом процедуры должен быть установлен ebx[номер кадра] и x,y
  458.  
  459.   mov edi,coords
  460.   mov esi, Image ; гиф анимашка в памяти
  461. ;
  462. ;  mov ebp, dword [edi+8] ;ecx здесь конкретный номер выводимого кадра
  463. ;  inc ebp ; увеличение кадра
  464. ;  cmp ebp,3 ;  максимальное количество кадров !!!!!!!
  465. ;  jna ok_fr ; если выводимы кадр меньше максимального количества кадров
  466. ;!!!!!!!!!  mov ebp,2 ;обнуление кадра
  467.  
  468. ok_fr:
  469.   mov dword [edi+8], ebp ;номер выводимого кадра
  470. loo:
  471.   cmp ebp,0  ; если кадр нулевой то сразу на вывод ?
  472.   je  setpic
  473.   movzx eax,word [esi+4]   ; если нет то увеличиваем х у ?
  474.   movzx ebx,word [esi+6]
  475.   mul ebx ;dword [esi+4] умножает ebx на eax и результат в eax edx
  476.   mov ebx,3 ; количество кадров ???
  477.   mul ebx
  478.   add eax,8
  479.   add esi,eax
  480.   dec ebp
  481.   jmp loo
  482. setpic:
  483.  
  484.   pushad
  485. ; aframetoimg esi,dword [edi], dword [edi+4],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
  486. ;  aframetoimg esi,32, 32,canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
  487.   aframetoimg esi,dword [X_anime],dword [Y_anime],canvas,0x00ffffff ; НЕВИДИМЫЙ, прозрачный ЦВЕТ ИЛИ НЕ РИСУЕМЫЙ
  488.   ;call enemy_mas
  489.   popad
  490. ret
  491. ;@@@@@@@@@@@@@@
  492.  
  493.  
  494.  ;-------------- TIMER --------------
  495.  timer:
  496.      mov     eax,0    ;
  497.      mov     eax,[timer1]    ;
  498.      add     eax, 1;
  499.      mov     [timer1], eax
  500.  
  501.      cmp     eax, 64   ;      таймер от 0 до 64
  502.      je nul_timer
  503.      jmp timer_dalee
  504.      nul_timer :
  505.      mov    [timer1], 0
  506.      timer_dalee:
  507.  ret
  508.  ;-------------- TIMER --------------
  509.  
  510.  
  511.  
  512.  
  513.  
  514. ;*******************************************
  515. ; ENEMY
  516. ;*******************************************
  517.  
  518.  enemy_mas:       ; вывод ENEmy    ENEMYYYYYYYYYYYYYYY ENEMYYYYYYYYYYYYYY !!!
  519.  
  520.   mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
  521.  
  522.  cycle4:
  523.  
  524.   mov    ebx, 0
  525.   mov    ecx, 0
  526.   mov    edx, 0
  527.   mov    esi, 0
  528.  
  529.   mov    word bx, [Lab2]
  530.   mov    word ax,[Enemy+bx]    ; берет байт из Enemy + смещение
  531.  
  532.   cmp  ax, 1   ;   обычный враг номер 1
  533.   je go_enemy
  534.  
  535.   jmp end_enemy
  536.   go_enemy:
  537.  
  538.   add    word bx, 2 ; X кооридината данного врага
  539.   mov    word ax, [Enemy + bx]
  540.   mov    word [X_enemy], ax
  541.  
  542.   add    word bx, 2 ; Y кооридината данного врага
  543.   mov    word ax, [Enemy + ebx]
  544.   mov    word [Y_enemy], ax
  545.  
  546.   add    word bx, 2 ; положение в массиве данного врага
  547.   mov    word ax, [Enemy + ebx]
  548.   mov    word [lab_enemy], ax
  549.  
  550.   add    word bx, 2 ; направление движения данного врага
  551.   mov    word ax, [Enemy + ebx]
  552.   mov    word [mov_enemy], ax
  553.  
  554.   add    word bx, 2 ; enemy LIFE
  555.   mov    word ax, [Enemy + ebx]
  556.   mov    word [life_enemy], ax
  557.  
  558.   cmp  ax, 499;            ; замороженные враги
  559.   ja enemy_dalee
  560.    mov ebp,2 ; кадр
  561.    mov eax, dword [X_enemy]
  562.    mov dword [X_anime], eax
  563.    mov eax, dword [Y_enemy]
  564.    mov dword [Y_anime], eax
  565.    call animashka
  566.    jmp enemy_bmp_end
  567.  
  568.  
  569.  
  570.   enemy_dalee:
  571.   xor     eax,eax    ;
  572.   mov     eax, [X_enemy]    ;
  573.   and  eax, 15
  574.   cmp  ax, 7;
  575.   ja enemy_1
  576.  
  577.   jmp enemy_2
  578.  
  579.    enemy_1:
  580.  
  581.    mov ebp,0 ; кадр
  582.    mov eax, dword [X_enemy]
  583.    mov dword [X_anime], eax
  584.    mov eax, dword [Y_enemy]
  585.    mov dword [Y_anime], eax
  586.    call animashka
  587.  
  588.    jmp enemy_bmp_end
  589.  
  590.    enemy_2:
  591.    mov ebp,1 ; кадр
  592.    mov eax, dword [X_enemy]
  593.    mov dword [X_anime], eax
  594.    mov eax, dword [Y_enemy]
  595.    mov dword [Y_anime], eax
  596.    call animashka
  597.    enemy_bmp_end:
  598.  
  599.    end_enemy:
  600.  
  601.     mov     eax, 0
  602.     mov     word ax, [Lab2]
  603.  
  604.    cmp     ax, 96                   ;   if eax == 0
  605.    je      cycle4_end                 ;   jump to cycle_end:
  606.  
  607.     add     word [Lab2],12
  608.  
  609.    jmp     cycle4                    ;
  610.  
  611.    cycle4_end:
  612.  
  613.  ret   ; END eNEMYYYYYYYYYYYYYYY ENEMYYYYYYYYYYYYYY !!!
  614.  
  615. ;$$$$$$$$$$$$$$$$$$$$$$$$$$
  616. ;   ENEMY MOV
  617. ;$$$$$$$$$$$$$$$$$$$$$$$$$$
  618. enemy_mov:
  619.   mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
  620.  
  621.  cycle5:
  622.  
  623.   mov    ebx, 0
  624.   mov    ecx, 0
  625.   mov    edx, 0
  626.   mov    esi, 0
  627.  
  628.   mov    word bx, [Lab2]
  629.   mov    word ax,[Enemy+bx]    ; берет байт из Enemy + смещение
  630.  
  631.   cmp  ax, 1   ;   обычный враг номер 1
  632.   je go_mov_enemy
  633.  
  634.   jmp end_mov_enemy
  635.   go_mov_enemy:
  636.  
  637.   add    word bx, 2 ; X кооридината данного врага
  638.   mov    word ax, [Enemy + bx]
  639.   mov    word [X_enemy], ax
  640.  
  641.   add    word bx, 2 ; Y кооридината данного врага
  642.   mov    word ax, [Enemy + ebx]
  643.   mov    word [Y_enemy], ax
  644.  
  645.   add    word bx, 2 ; положение в массиве данного врага
  646.   mov    word ax, [Enemy + ebx]
  647.   mov    word [lab_enemy], ax
  648.  
  649.   add    word bx, 2 ; направление движения данного врага
  650.   mov    word ax, [Enemy + ebx]
  651.   mov    word [mov_enemy], ax
  652.  
  653.   add    word bx, 2 ; enemy LIFE
  654.   mov    word ax, [Enemy + ebx]
  655.   mov    word [life_enemy], ax
  656.  
  657.   cmp  ax, 499;            ; замороженные враги
  658.   ja  dalee_enemy_mov
  659.   add ax, 1
  660.  
  661.   mov    word [Enemy + ebx], ax
  662.  
  663.   jmp end_mov_enemy
  664.  
  665.   dalee_enemy_mov:
  666.      ; блок поедания героя
  667.       mov  ax, [Xpl]
  668.       add  ax, 23
  669.       cmp ax, [X_enemy]
  670.         jna ne_em
  671.          sbb ax, 45
  672.          cmp ax, [X_enemy]
  673.           ja ne_em
  674.             mov  ax, [Ypl]
  675.             add  ax, 23
  676.             cmp ax, [Y_enemy]
  677.              jna ne_em
  678.              sbb ax, 45
  679.              cmp ax, [Y_enemy]
  680.           ja ne_em
  681.           call load_level  ; DEAD HIRO
  682.           delay 150
  683.  
  684.        ne_em:
  685.      ;Блок попадания 1 пули
  686.  
  687.   mov    word bx, 0
  688.   mov    word ax,[Bullet + ebx]
  689.   cmp ax, 0
  690.   je no_bullet
  691.  
  692.   add    word bx, 2   ; [Xpl]
  693.   mov    word cx, [Bullet + ebx]
  694.  
  695.   add    word bx, 2   ; [Ypl]
  696.   mov    word dx, [Bullet + ebx]
  697.  
  698.     cmp dx, [Y_enemy]
  699.     jna no_bullet
  700.       sbb dx, 32
  701.       cmp dx, [Y_enemy]
  702.       ja no_bullet
  703.       cmp cx, [X_enemy]
  704.        jna no_bullet
  705.        sbb cx, 32
  706.         cmp cx, [X_enemy]
  707.         ja no_bullet
  708.         mov    word bx, [Lab2]
  709.         add    word bx, 10 ; enemy LIFE
  710.         mov    word [Enemy + ebx],0
  711.  
  712.         mov    byte [Bullet], 0    ;
  713.  
  714.     no_bullet:
  715.  
  716.  
  717.      ;БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГОВ
  718.         mov word ax, [mov_enemy]                      ;
  719.         cmp ax, 1            ; left                   ;
  720.         jne next_2                                    ;
  721.           sbb    word [X_enemy], 1                    ;
  722.           mov    word ax, [X_enemy]                   ;
  723.           mov    word bx, [Lab2]                      ;
  724.           add    word bx, 2 ; X кооридината данного врага
  725.           mov    word [Enemy + bx], ax                ;
  726.                                                       ;
  727.         next_2:                                       ;
  728.         cmp ax, 2            ; down                   ;
  729.         jne next_3                                    ;
  730.           add    word [Y_enemy], 1                    ;
  731.           mov    word ax, [Y_enemy]                   ;
  732.           mov    word bx, [Lab2]                      ;
  733.           add    word bx, 4 ; Y кооридината данного врага
  734.           mov    word [Enemy + bx], ax                ;
  735.                                                       ;
  736.         next_3:                                       ;
  737.         cmp ax, 3            ; up                     ;
  738.         jne next_4                                    ;
  739.           sbb    word [Y_enemy], 1                    ;
  740.           mov    word ax, [Y_enemy]                   ;
  741.           mov    word bx, [Lab2]                      ;
  742.           add    word bx, 4 ; Y кооридината данного врага
  743.           mov    word [Enemy + bx], ax                ;
  744.                                                       ;
  745.         next_4:                                       ;
  746.         cmp ax, 4            ; right                  ;
  747.         jne next_end
  748.  
  749.              ;Гравитационная заплатка   лечит трабл - когда враг двигается слева на право то пролетает один пустой блок
  750.               mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
  751.               and ebx, 31    ; X в позиции напротив блока
  752.               cmp bx, 0     ;
  753.               jne n4_dalee   ;
  754.                 mov    bx,[lab_enemy]
  755.                 add    bx,16
  756.                 mov    ax, [Dangeon + bx]
  757.                 and   eax,15
  758.                  cmp word ax, 0
  759.                  je next_end
  760.                  cmp word ax, 4
  761.                  je next_end
  762.               ;конец заплатки
  763.  
  764.            n4_dalee:
  765.         ;
  766.           add    word [X_enemy], 1                    ;
  767.           mov    word ax, [X_enemy]                   ;
  768.           mov    word bx, [Lab2]                      ;
  769.           add    word bx, 2 ; X кооридината данного врага
  770.           mov    word [Enemy + bx], ax                ;
  771.                                                       ;
  772.         next_end:
  773.           ;END БЛОК ПРИРОСТА ДВИЖЕНИЯ ВРАГ
  774.  
  775.           ;
  776.  
  777.      ;  Рандомный выбор на леснице
  778.         mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
  779.         and ebx, 31    ; X в позиции напротив блока
  780.         cmp bx, 0     ;
  781.         jne end_les   ;
  782.            mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
  783.            and ebx, 31    ; X в позиции напротив блока
  784.            cmp bx, 0     ;
  785.            jne end_les   ;
  786.  
  787.                 random 300, eax
  788.  
  789.                  cmp eax, 150
  790.                  ja les2
  791.                  jmp end_up_or_down
  792.                 les2:
  793.  
  794.                 mov eax, [Ypl]
  795.                 cmp eax, [Y_enemy]
  796.                 jna bolee
  797.                 mov    word [mov_enemy],2                   ; вниз
  798.                 mov    word ax, [mov_enemy]                 ;
  799.                 mov    word bx, [Lab2]                      ;
  800.                 add    word bx, 8  ; направление движения данного врага
  801.                 mov    word [Enemy + bx], ax                ;
  802.                 jmp end_les
  803.  
  804.                 bolee:
  805.                 mov    word [mov_enemy],3                   ; up
  806.                 mov    word ax, [mov_enemy]                 ;
  807.                 mov    word bx, [Lab2]                      ;
  808.                 add    word bx, 8  ; направление движения данного врага
  809.                 mov    word [Enemy + bx], ax                ;
  810.                 jmp end_les
  811.  
  812.                 end_up_or_down:
  813.  
  814.                  random 300, eax
  815.                  cmp eax, 150
  816.                  ja les22
  817.                  jmp end_les
  818.                 les22:
  819.  
  820.                 mov eax, [Xpl]
  821.                 cmp eax, [X_enemy]
  822.                 jna bolee2
  823.                 mov    word [mov_enemy],4                   ; вниз
  824.                 mov    word ax, [mov_enemy]                 ;
  825.                 mov    word bx, [Lab2]                      ;
  826.                 add    word bx, 8  ; направление движения данного врага
  827.                 mov    word [Enemy + bx], ax                ;
  828.                 jmp end_les
  829.  
  830.                 bolee2:
  831.                 mov    word [mov_enemy],1                   ; up
  832.                 mov    word ax, [mov_enemy]                 ;
  833.                 mov    word bx, [Lab2]                      ;
  834.                 add    word bx, 8  ; направление движения данного врага
  835.                 mov    word [Enemy + bx], ax                ;
  836.  
  837.         end_les:
  838.      ;  end Рандомный выбор на леснице
  839.  
  840.      ;Гравитация
  841.         mov word bx, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
  842.         and ebx, 31    ; X в позиции напротив блока
  843.         cmp bx, 0     ;
  844.         jne end_grava   ;
  845.  
  846.                 mov    bx,[lab_enemy]
  847.                 add    bx,16
  848.                 mov    ax, [Dangeon + bx]
  849.  
  850.                 and   eax,15
  851.                  cmp word ax, 0
  852.                  je grava
  853.                  cmp word ax, 4
  854.                  je grava
  855.                  jmp end_grava
  856.                 grava:
  857.                 mov    word [mov_enemy], 2                  ; padenie ВРАГА
  858.                 mov    word ax, [mov_enemy]                 ;
  859.                 mov    word bx, [Lab2]                      ;
  860.                 add    word bx, 8  ; направление движения данного врага
  861.                 mov    word [Enemy + bx], ax                ;
  862.  
  863.         end_grava:
  864.      ;конец гравитации
  865.  
  866.           ;блок расчета положения врага в лабиринте
  867.             mov eax, 0                            ;
  868.             mov eax, [Y_enemy]                        ;
  869.             shr eax, 5                            ;
  870.             shl eax, 4                            ;
  871.             mov ebx, 0                            ;
  872.             mov ebx, [X_enemy]                        ;
  873.             shr ebx, 5                            ;
  874.             add eax, ebx                          ;
  875.             mov [lab_enemy], eax                   ;
  876.                 mov    word bx, [Lab2]                      ;
  877.                 add    word bx, 6  ; направление движения данного врага
  878.                 mov    word [Enemy + bx], ax                ;
  879.           ;блок расчета положения врага в лабиринте
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.        ;БЛОК ЗПАПРЕТА ДВижения
  887.         mov word bx, [Y_enemy] ; Это условие позволяет добежать до позиции напротив блока
  888.         and bx, 31    ; Y в позиции напротив блока
  889.         cmp bx, 0     ;
  890.         jne end_zapret   ;
  891.            mov word ax, [X_enemy] ; Это условие позволяет добежать до позиции напротив блока
  892.            and ax, 31    ; X в позиции напротив блока
  893.            cmp ax, 0     ;
  894.            jne end_zapret   ;
  895.  
  896.               mov word ax, [mov_enemy] ; Это условие позволяет добежать до позиции напротив блока
  897.  
  898.               cmp ax, 0
  899.               jne duma1
  900.                     ; Рандомный выбор движения
  901.                  mov eax, [timer1]
  902.                  and eax, 3
  903.                  cmp eax, 0
  904.                  jne dalee_duma1
  905.                  add eax, 4
  906.                  dalee_duma1:
  907.  
  908.                 mov    word [mov_enemy], ax                  ;
  909.                 mov    word ax, [mov_enemy]                 ;
  910.                 mov    word bx, [Lab2]                      ;
  911.                 add    word bx, 8  ; направление движения данного врага
  912.                 mov    word [Enemy + bx], ax                ;
  913.  
  914.  
  915.  
  916.               duma1:
  917.               cmp ax, 4
  918.               jne duma2  ; прверка справа
  919.                 mov    bx,[lab_enemy]
  920.                 add    bx,1
  921.                 mov    ax, [Dangeon + bx]
  922.                 and   eax,3
  923.                  cmp ax, 0
  924.                  jne duma_stop
  925.                  jmp duma_end
  926.  
  927.               duma2:
  928.               cmp ax, 1
  929.               jne duma3  ; слева
  930.                 mov    bx,[lab_enemy]
  931.                 sbb    bx,1
  932.                 mov    ax, [Dangeon + bx]
  933.                 and   eax,3
  934.                  cmp ax, 0
  935.                  jne duma_stop
  936.                  jmp duma_end
  937.  
  938.               duma3:
  939.               cmp ax, 2
  940.               jne duma4  ; снизу
  941.                 mov    bx,[lab_enemy]
  942.                 add    bx,16
  943.                 mov    ax, [Dangeon + bx]
  944.                 and   eax,3
  945.                  cmp ax, 0
  946.                  jne duma_stop
  947.                  jmp duma_end
  948.  
  949.               duma4:
  950.               cmp ax, 3
  951.               jne duma_stop  ; сверху
  952.  
  953.                 mov    bx,[lab_enemy]     ; если кирпич над головой
  954.                 sbb    bx,16
  955.                 mov    ax, [Dangeon + bx]
  956.                 and   eax,3
  957.                  cmp ax, 0                ; если кирпич над головой
  958.                  jne duma_stop
  959.  
  960.                 mov    bx,[lab_enemy]     ; если враг не на леснице
  961.                 mov    ax, [Dangeon + bx]
  962.                 and   eax,15
  963.                 cmp ax, 8
  964.                  jne duma_stop
  965.  
  966.                  jmp duma_end
  967.  
  968.               duma_stop:
  969.  
  970.                 mov    word [mov_enemy], 0                  ; ОСТАНОВКА ВРАГА
  971.                 mov    word ax, [mov_enemy]                 ;
  972.                 mov    word bx, [Lab2]                      ;
  973.                 add    word bx, 8  ; направление движения данного врага
  974.                 mov    word [Enemy + bx], ax                ;
  975.  
  976.            duma_end:
  977.  
  978.          end_zapret:
  979.          ;конец запрета
  980.  
  981.   end_mov_enemy:
  982.  
  983.     mov     eax, 0
  984.     mov     word ax, [Lab2]
  985.  
  986.    cmp     ax, 96                   ;   if eax == 0
  987.    je      cycle5_end                 ;   jump to cycle_end:
  988.  
  989.     add     word [Lab2],12
  990.  
  991.    jmp     cycle5                    ;
  992.  
  993.    cycle5_end:
  994.  
  995.  
  996. ret
  997.  
  998. ;*****************************
  999. ;   HIRO
  1000. ;*****************************
  1001.  
  1002.  hiro:
  1003.  
  1004.   mov ecx, [v_fire]   ;стрельба
  1005.   cmp ecx, 0
  1006.   je  next_anima
  1007.       cmp ecx, 1
  1008.         je wprawo
  1009.          mov ebp,12 ; кадр
  1010.          mov eax, dword [Xpl]
  1011.          mov dword [X_anime], eax
  1012.          mov eax, dword [Ypl]
  1013.          mov dword [Y_anime], eax
  1014.          call animashka
  1015.              mov ecx, [timer1]   ;стрельба
  1016.              and ecx, 15
  1017.              cmp ecx, 0
  1018.              jne  end_hiro
  1019.               mov dword [v_fire], 0
  1020.           jmp end_hiro
  1021.  
  1022.          wprawo:
  1023.          mov ebp,11 ; кадр
  1024.          mov eax, dword [Xpl]
  1025.          mov dword [X_anime], eax
  1026.          mov eax, dword [Ypl]
  1027.          mov dword [Y_anime], eax
  1028.          call animashka
  1029.              mov ecx, [timer1]   ;стрельба
  1030.              and ecx, 15
  1031.              cmp ecx, 0
  1032.              jne  end_hiro
  1033.               mov dword [v_fire], 0
  1034.           jmp end_hiro
  1035.  
  1036.                       ;стрельба
  1037.    jmp end_hiro
  1038.  
  1039.  next_anima:
  1040.   mov eax, [v_mov]
  1041.   cmp eax, 1
  1042.   jne next_r
  1043.   mov     eax,0    ;
  1044.   mov     eax, [Xpl];
  1045.   and  eax, 15
  1046.   cmp  eax, 7   ;
  1047.   ja next_l1
  1048.  
  1049.    mov ebp,3 ; кадр
  1050.    mov eax, dword [Xpl]
  1051.    mov dword [X_anime], eax
  1052.    mov eax, dword [Ypl]
  1053.    mov dword [Y_anime], eax
  1054.    call animashka
  1055.    jmp end_hiro
  1056.  
  1057.    next_l1:
  1058.    mov ebp,5 ; кадр
  1059.    mov eax, dword [Xpl]
  1060.    mov dword [X_anime], eax
  1061.    mov eax, dword [Ypl]
  1062.    mov dword [Y_anime], eax
  1063.    call animashka
  1064.        pusha
  1065.        mcall 55, eax, , , Music_mov   ; звук выстрела
  1066.        popa
  1067.  
  1068.    jmp end_hiro
  1069.  
  1070.   next_r:
  1071.   cmp eax, 4
  1072.   jne next_d
  1073.  
  1074.   mov     eax,0    ;
  1075.   mov     eax, [Xpl];
  1076.   and  eax, 15
  1077.   cmp  eax, 7   ;
  1078.   ja next_d1
  1079.  
  1080.    mov ebp,4 ; кадр
  1081.    mov eax, dword [Xpl]
  1082.    mov dword [X_anime], eax
  1083.    mov eax, dword [Ypl]
  1084.    mov dword [Y_anime], eax
  1085.    call animashka
  1086.  
  1087.        pusha
  1088.        mcall 55, eax, , , Music_mov   ; звук выстрела
  1089.        popa
  1090.    jmp end_hiro
  1091.  
  1092.    next_d1:
  1093.    mov ebp,6 ; кадр
  1094.    mov eax, dword [Xpl]
  1095.    mov dword [X_anime], eax
  1096.    mov eax, dword [Ypl]
  1097.    mov dword [Y_anime], eax
  1098.    call animashka
  1099.  
  1100.    jmp end_hiro
  1101.  
  1102.   next_d:
  1103.   cmp eax, 2
  1104.   jne next_u
  1105.    mov ebp,13 ; кадр
  1106.     mov eax, [temp2]
  1107.     cmp eax, 8
  1108.     jne padaem
  1109.    mov ebp,10 ; кадр
  1110.     padaem:
  1111.     mov eax, [temp5]
  1112.     cmp eax, 8
  1113.     jne padaem2
  1114.    mov ebp,10 ; кадр
  1115.     padaem2:
  1116.    mov eax, dword [Xpl]
  1117.    mov dword [X_anime], eax
  1118.    mov eax, dword [Ypl]
  1119.    mov dword [Y_anime], eax
  1120.    call animashka
  1121.    jmp end_hiro
  1122.  
  1123.   next_u:
  1124.   cmp eax, 3
  1125.   jne next_s
  1126.   mov     eax,0    ;
  1127.   mov     eax, [Ypl];
  1128.   and  eax, 15
  1129.   cmp  eax, 7   ;
  1130.   ja next_u1
  1131.  
  1132.    mov ebp,10 ; кадр
  1133.    mov eax, dword [Xpl]
  1134.    mov dword [X_anime], eax
  1135.    mov eax, dword [Ypl]
  1136.    mov dword [Y_anime], eax
  1137.    call animashka
  1138.    jmp end_hiro
  1139.  
  1140.    next_u1:
  1141.    mov ebp,9 ; кадр
  1142.    mov eax, dword [Xpl]
  1143.    mov dword [X_anime], eax
  1144.    mov eax, dword [Ypl]
  1145.    mov dword [Y_anime], eax
  1146.    call animashka
  1147.  
  1148.    jmp end_hiro
  1149.  
  1150.   next_s:
  1151.   cmp eax, 0
  1152.   jne next_s
  1153.    mov ebp,17; кадр
  1154.    mov eax, dword [Xpl]
  1155.    mov dword [X_anime], eax
  1156.    mov eax, dword [Ypl]
  1157.    mov dword [Y_anime], eax
  1158.    call animashka
  1159.    jmp end_hiro
  1160.  
  1161.  end_hiro:
  1162.  
  1163.  ret   ; END Hiro
  1164. ;**************
  1165. ;  end HIRO
  1166. ;**************
  1167.  
  1168.  
  1169. ;****************
  1170. ;  Hiro MOV
  1171. ;****************
  1172. hiro_mov:
  1173.  
  1174.      ;ПРЕГРАД
  1175.  
  1176.        ; вычисление соседних блоков
  1177.        mov    ebx, [hiro_lab]
  1178.        sbb    ebx,2
  1179.        mov    eax,[Dangeon + bx]    ;                 up
  1180.        mov    [temp1], ah           ;               temp4
  1181.                                     ;
  1182.        add    ebx,1                 ;        left    hiro  right
  1183.        mov    eax,[Dangeon + bx]    ;       temp1   temp2  temp3
  1184.        mov    [temp2], ah           ;
  1185.  
  1186. ;-------------------------------------------------------------------------------
  1187. ;     Сбор алмазов
  1188. ;-------------------------------------------------------------------------------
  1189.         mov ecx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
  1190.         and ecx, 31    ; Y в позиции напротив блока
  1191.  
  1192.         mov edx, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
  1193.         and edx, 31    ; Y в позиции напротив блока
  1194.         or edx,ecx ; Мы четко спозиционированы по Х и У
  1195.         cmp edx, 0
  1196.         jne no_almaz
  1197.  
  1198.           cmp ah, 12
  1199.           jne no_almaz
  1200.           xor cx, cx
  1201.           add ebx,1  ; ЗАПЛАТКА !!!  без нее почемуто обнуляет не алмазы а соседние блоки
  1202.           mov  [Dangeon + bx], ch
  1203.           sbb ebx, 1  ; ЗАПЛАТКА !!!
  1204.           mov ecx, [gold]
  1205.           add ecx, 1
  1206.           mov [gold], ecx
  1207.        pusha
  1208.        mcall 55, eax, , , Music_almaz   ; звук Almaz
  1209.        popa
  1210.           no_almaz:
  1211. ;-------------------------------------------------------------------------------
  1212. ;     Сбор алмазов
  1213. ;-------------------------------------------------------------------------------
  1214.                                     ;                down
  1215.        add    ebx,1                 ;               temp5
  1216.        mov    eax,[Dangeon + bx]    ;
  1217.        mov    [temp3], ah
  1218.  
  1219.        sbb    ebx,16                ; !!!!!!!!!!!!
  1220.        mov    eax,[Dangeon + bx]    ; при отсутствии библиотеки  MACROS.INC   ebx=17
  1221.        mov    [temp4], ah
  1222.  
  1223.        add    ebx,32                ;
  1224.        mov    eax,[Dangeon + bx]    ;
  1225.        mov    [temp5], ah
  1226.        ; вычисление соседних блоков
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.      ;разрешение на движение
  1233.      mov     eax,0              ;
  1234.      mov     eax,[v_mov2]       ;
  1235.      and     eax,7
  1236.      and     eax,2
  1237.      cmp eax, 2
  1238.      je smena
  1239.  
  1240.         mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
  1241.         and ebx, 31    ; Y в позиции напротив блока
  1242.         cmp ebx, 0     ;
  1243.         jne end_tamgna   ;
  1244.         smena:
  1245.  
  1246.          mov     eax,0              ;
  1247.          mov     eax,[v_mov2]       ;
  1248.          and     eax,7
  1249.          and     eax,2
  1250.          cmp eax, 0
  1251.          je smena2
  1252.  
  1253.          mov ebx, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
  1254.          and ebx, 31    ; X в позиции напротив блока
  1255.          cmp ebx, 0     ;
  1256.          jne end_tamgna   ;
  1257.  
  1258.           smena2:
  1259.           mov eax, [v_mov2]
  1260.           and eax, 7
  1261.           mov [v_mov], eax
  1262.      end_tamgna:
  1263.      ;разрешение на движение
  1264.  
  1265.  
  1266.      ;УПИРАНИЕ В ПРЕГРАДУ
  1267.         mov ebx, [Ypl] ;
  1268.         and ebx, 31    ; Y в позиции напротив блока
  1269.         cmp ebx, 0     ;
  1270.         jne end_stop   ;
  1271.         mov eax, [Xpl] ; без макроса этого блока не было он был внутри блока упираний
  1272.         and eax, 31    ; X в позиции напротив блока
  1273.         cmp eax, 0     ;
  1274.         jne end_stop   ;
  1275.      mov eax, [v_mov]
  1276.  
  1277.      cmp  eax, 2
  1278.        je stop_d
  1279.        jmp stop_u
  1280.  
  1281.        stop_d:
  1282.         mov ebx, [temp5]
  1283.           ;заплатка 2 равно 1 если бетон то это как кирпич, иначе герой проходит сквозь бетон
  1284.  
  1285.           cmp ebx, 2
  1286.           jne no_zaplat1
  1287.  
  1288.            sbb ebx,1
  1289.  
  1290.           no_zaplat1:
  1291.  
  1292.         and ebx,3
  1293.         or eax, ebx
  1294.  
  1295.          cmp eax, 2
  1296.          je end_stop
  1297.           mov ebx, 0
  1298.           mov [v_mov], ebx
  1299.  
  1300.        stop_u:
  1301.        cmp  eax, 3
  1302.        jne stop_l
  1303.  
  1304.         mov ebx, [temp4]
  1305.         and ebx,3
  1306.         and eax, ebx
  1307.  
  1308.     ;    mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
  1309.     ;    and ebx, 31    ; Y в позиции напротив блока
  1310.     ;    cmp ebx, 0     ;
  1311.     ;    jne end_stop   ;
  1312.  
  1313.  
  1314.          cmp eax, 0
  1315.          je end_stop
  1316.           mov ebx, 0
  1317.           mov [v_mov], ebx
  1318.  
  1319.        stop_l:
  1320.        cmp  eax, 1
  1321.        jne stop_r
  1322.  
  1323.         mov ebx, [temp1]
  1324.         and ebx,3
  1325.  
  1326.     ;    mov eax, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
  1327.     ;    and eax, 31    ; Y в позиции напротив блока
  1328.     ;    cmp eax, 0     ;
  1329.     ;    jne end_stop   ;
  1330.  
  1331.          cmp ebx, 0
  1332.          je end_stop
  1333.           mov ebx, 0
  1334.           mov [v_mov], ebx
  1335.  
  1336.        stop_r:
  1337.        cmp  eax, 4
  1338.        jne end_stop
  1339.  
  1340.         mov ebx, [temp3]
  1341.         and ebx,3
  1342.  
  1343.          cmp ebx, 0
  1344.          je end_stop
  1345.           mov ebx, 0
  1346.           mov [v_mov], ebx
  1347.  
  1348.       end_stop:
  1349.      ;ПРЕГРАДЫ
  1350.  
  1351.  
  1352.      ;GRAVITACION
  1353.         mov ebx, [Ypl] ; Это условие позволяет добежать до позиции напротив блока
  1354.         and ebx, 31    ; Y в позиции напротив блока
  1355.  
  1356.         mov eax, [Xpl] ; Это условие позволяет добежать до позиции напротив блока
  1357.         and eax, 31    ; Y в позиции напротив блока
  1358.         or eax,ebx ; Мы четко спозиционированы по Х и У
  1359.         cmp eax, 0
  1360.         jne end_grav
  1361.  
  1362.           mov ebx, [temp2]    ;
  1363.           cmp ebx, 0          ; запрет на прыжки вверх
  1364.           jne end_grav        ;
  1365.             mov ebx, [v_mov]  ;
  1366.             cmp ebx, 3        ;
  1367.             jne dalee_gra     ;
  1368.                mov ebx, 0     ;
  1369.          mov [v_mov],ebx      ;
  1370.          mov ebx, 0           ;
  1371.          mov [v_mov2],ebx     ;
  1372.  
  1373.         dalee_gra:
  1374.         add eax, [temp5]       ;
  1375.         cmp eax, 0             ; падение в пустоту
  1376.          jne dalee_g           ;
  1377.          mov eax, 2            ;
  1378.          mov [v_mov],eax       ;
  1379.          mov eax, 0            ;
  1380.          mov [v_mov2],eax      ;
  1381.  
  1382.          dalee_g:
  1383.         cmp eax, 4             ;
  1384.          jne dalee_g2          ; падение в воду
  1385.          mov eax, 2            ;
  1386.          mov [v_mov],eax       ;
  1387.          mov eax, 0            ;
  1388.          mov [v_mov2],eax      ;
  1389.  
  1390.          dalee_g2:
  1391.         cmp eax, 12             ;
  1392.          jne end_grav          ; падение на алмаз
  1393.          mov eax, 2            ;
  1394.          mov [v_mov],eax       ;
  1395.          mov eax, 0            ;
  1396.          mov [v_mov2],eax      ;
  1397.  
  1398.        end_grav:
  1399.      ;end GRAVITACION
  1400.  
  1401.  
  1402.  
  1403.  
  1404.      ; ПРИРОСТ КООРДИНАТ ГЕРОЯ
  1405.      mov     eax,0              ;
  1406.      mov     eax,[v_mov]        ;
  1407.      cmp     eax, 2             ;
  1408.      je h_down                  ;
  1409.    jmp proverka2                ;
  1410.     jmp hiro_mov_end            ;
  1411.         h_down:                 ;
  1412.          mov ebx, [Ypl]         ;
  1413.          add ebx, 2             ;                             3
  1414.          mov [Ypl], ebx         ;                           1   4
  1415.     jmp hiro_mov_end            ;
  1416.                                 ;
  1417.    proverka2:                   ;
  1418.      cmp     eax, 3   ;         ;
  1419.      je h_up                    ;    PRIROST X Y
  1420.    jmp proverka3                ;
  1421.     jmp hiro_mov_end            ;
  1422.         h_up:                   ;
  1423.          mov ebx, [Ypl]         ;
  1424.          sbb ebx, 2             ;
  1425.          mov [Ypl], ebx         ;
  1426.     jmp hiro_mov_end            ;
  1427.                                 ;
  1428.    proverka3:                   ;
  1429.      cmp     eax, 1   ;         ;
  1430.      je h_left                  ;
  1431.    jmp proverka4                ;
  1432.     jmp hiro_mov_end            ;
  1433.         h_left:                 ;
  1434.          mov ebx, [Xpl]         ;
  1435.          sbb ebx, 2             ;
  1436.          mov [Xpl], ebx         ;
  1437.     jmp hiro_mov_end            ;
  1438.                                 ;
  1439.    proverka4:                   ;
  1440.      cmp     eax, 4             ;
  1441.      je h_right                 ;
  1442.    jmp hiro_mov_end             ;
  1443.     jmp hiro_mov_end            ;
  1444.         h_right:                ;
  1445.          mov ebx, [Xpl]         ;
  1446.          add ebx, 2             ;
  1447.          mov [Xpl], ebx         ;
  1448.     jmp hiro_mov_end           ;прирост
  1449.      ; ПРИРОСТ КООРДИНАТ ГЕРОЯ
  1450.  
  1451.     hiro_mov_end:
  1452.  
  1453.     ; вычисляем положение героя в лабиринте
  1454.     mov eax, 0                            ;
  1455.     mov dword eax, [Ypl]                        ;
  1456.     shr eax, 5                            ;
  1457.     shl eax, 4                            ;
  1458.     mov ebx, 0                            ;
  1459.     mov dword ebx, [Xpl]                        ;
  1460.     shr ebx, 5                            ;
  1461.     add eax, ebx                          ;
  1462.     mov [hiro_lab], eax                   ;
  1463.     ; вычисляем положение героя в лабиринте
  1464. ret
  1465. ;****************
  1466. ;  end Hiro mov
  1467. ;****************
  1468.  
  1469.  
  1470. ;*******************************************
  1471. ; BULLET
  1472. ;*******************************************
  1473.  bullet_mas:
  1474.   mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
  1475.  cycle7:
  1476.   mov    word bx, [Lab3]
  1477.   mov    word ax, [Bullet+bx]    ; берет байт из Enemy + смещение
  1478.  
  1479.   cmp  ax, 1   ;   bullet ok
  1480.   je go_bullet
  1481.  
  1482.   jmp end_bullet
  1483.   go_bullet:
  1484.  
  1485.   add    word bx, 2 ; X кооридината данного врага
  1486.   mov    word ax, [Bullet + bx]
  1487.   mov    word [X_bul], ax
  1488.  
  1489.   add    word bx, 2 ; X кооридината данного врага
  1490.   mov    word ax, [Bullet + bx]
  1491.   mov    word [Y_bul], ax
  1492.  
  1493.     imgtoimg img_bullet, dword [X_bul], dword [Y_bul],canvas
  1494.   end_bullet:
  1495.  
  1496.     mov     eax, 0
  1497.     mov     word ax, [Lab3]
  1498.  
  1499.    cmp     ax, 36                   ;   if eax == 0
  1500.    je      cycle7_end                 ;   jump to cycle_end:
  1501.  
  1502.     add     word [Lab3],12
  1503.  
  1504.    jmp     cycle7                    ;
  1505.  
  1506.    cycle7_end:
  1507.  ret  ; end BULLET
  1508. ;-------------------------------------------------------------------------------
  1509.  
  1510.  
  1511. ;*******************************************
  1512. ; BULLET MOV
  1513. ;*******************************************
  1514.  bullet_mov:
  1515.   mov word [Lab3], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
  1516.  
  1517.  cycle8:
  1518.   mov    word bx, [Lab3]
  1519.   mov    word ax, [Bullet+bx]    ; берет байт из Enemy + смещение
  1520.  
  1521.   cmp  ax, 1   ;   bullet ok
  1522.   je go_bullet_mov
  1523.  
  1524.   jmp end_bullet_mov
  1525.   go_bullet_mov:
  1526.  
  1527.   add    word bx, 2 ; X кооридината данного врага
  1528.   mov    word ax, [Bullet + bx]
  1529.   mov    word [X_bul], ax
  1530.  
  1531.   add    word bx, 2 ; X кооридината данного врага
  1532.   mov    word ax, [Bullet + bx]
  1533.   mov    word [Y_bul], ax
  1534.  
  1535.   add    word bx, 2 ;
  1536.   mov    word ax, [Bullet + bx]
  1537.   mov    word [mov_bullet], ax
  1538.  
  1539.     cmp  ax, 1
  1540.     jne bul_muv_left
  1541.       mov word ax, [X_bul]
  1542.       sbb ax, 2
  1543.       mov word bx, [Lab3]
  1544.       add word bx, 2
  1545.       mov word [Bullet + bx], ax
  1546.  
  1547.     jmp end_bullet_mov
  1548.     bul_muv_left:
  1549.       mov word ax, [X_bul]
  1550.       add ax, 2
  1551.       mov word bx, [Lab3]
  1552.       add word bx, 2
  1553.       mov word [Bullet + bx], ax
  1554.  
  1555.     end_bullet_mov:
  1556.  
  1557.     ; вычисляем положение BULLET в лабиринте
  1558.     mov eax, 0                            ;
  1559.     mov eax, [Y_bul]                      ;
  1560.     shr eax, 5                            ;
  1561.     shl eax, 4                            ;
  1562.     mov ebx, 0                            ;
  1563.     mov ebx, [X_bul]                      ;
  1564.     shr ebx, 5                            ;
  1565.     add eax, ebx                          ;
  1566.     mov [lab_bullet], ax                   ;
  1567.     ; вычисляем положение BULLET в лабиринте
  1568.  
  1569.                 mov    word bx,[lab_bullet]
  1570.                 mov    dx, [Dangeon + bx]
  1571.                 and   edx,3
  1572.                  cmp dx, 0
  1573.                  je letit_dalee
  1574.  
  1575.                  cmp dx, 2
  1576.                  je beton
  1577.                    mov    byte [Dangeon + bx], 3    ; РАЗРУШЕНИЕ КИРПИЧЕЙ
  1578.                   beton:
  1579.                    mov    bx, [Lab3]
  1580.                    mov    byte [Bullet + ebx], 0    ; берет байт из Enemy + смещение
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.     letit_dalee:
  1587.     mov     eax, 0
  1588.     mov     word ax, [Lab3]
  1589.  
  1590.    cmp     ax, 36                   ;   if eax == 0
  1591.    je      cycle8_end                 ;   jump to cycle_end:
  1592.  
  1593.     add     word [Lab3],12
  1594.  
  1595.    jmp     cycle8                    ;
  1596.  
  1597.    cycle8_end:
  1598.  
  1599.  
  1600. ret  ; end BULLET
  1601. ;-------------------------------------------------------------------------------
  1602.  
  1603. ;-------------------------------------------------------------------------------
  1604. ; TABLO  TABLO TABLO  TABLO TABLO TABLO
  1605. ;*****************************************
  1606.  tablo:
  1607.     ; WIWOD CIFR
  1608.    ;; mov     eax, 13
  1609.    ; mov     ebx, 140*65536 + 18
  1610.    ; mov     ecx, 10*65536 + 8
  1611.    ; mov     edx, 0x00ffffff
  1612.    ; int     0x40
  1613.    ; outcount [numer_level],140,10,0x224466,3*65536
  1614.  
  1615.     ; WIWOD CIFR
  1616.    ; mov     eax, 13
  1617.    ; mov     ebx, 160*65536 + 18
  1618.    ; mov     ecx, 10*65536 + 8
  1619.    ; mov     edx, 0x00ffffff
  1620.    ; int     0x40
  1621.    ; outcount [delta_level],160,10,0x224466,3*65536
  1622.  
  1623.     ; WIWOD CIFR
  1624.    ; mov     eax, 13
  1625.    ; mov     ebx, 180*65536 + 18
  1626.    ; mov     ecx, 10*65536 + 8
  1627.    ; mov     edx, 0x00ffffff
  1628.    ; int     0x40
  1629.    ; outcount [delta_level_end],180,10,0x224466,3*65536
  1630.  
  1631.  ret
  1632. ;-------------------------------------------------------------------------------
  1633. fire:
  1634.   sbb  ah, 121
  1635.   mov  [v_fire], ah
  1636.  
  1637.   mov    word bx, 0
  1638.   mov  cx, [Bullet + ebx]
  1639.   cmp cx, 0
  1640.    jne end_fire
  1641.        pusha
  1642.        mcall 55, eax, , , Music_bah   ; звук выстрела
  1643.        popa
  1644.  
  1645.   mov    byte [Bullet + ebx], 1
  1646.  
  1647.   add    word bx, 2 ; X кооридината данного врага
  1648.   mov    ax, [Xpl]
  1649.   add    ax, 8
  1650.   mov    word [Bullet + ebx],ax
  1651.  
  1652.   add    word bx, 2 ; X кооридината данного врага
  1653.   mov    ax, [Ypl]
  1654.   add    ax, 16
  1655.   mov    word [Bullet + ebx],ax
  1656.  
  1657.   add    word bx, 2 ;
  1658.   mov  ax,[v_fire]
  1659.   mov    word [Bullet + ebx],ax
  1660.  
  1661.   end_fire:
  1662. ret
  1663. ;-------------------------------------------------------------------------------
  1664.  
  1665.  
  1666. ;------------------------Загрузка уровней---------------------------------------
  1667. load_level:
  1668.     imgtoimg img_level,32,32,canvas
  1669.   setimg 6,20,canvas
  1670.  
  1671.     xor eax,eax
  1672.     xor ebx,ebx
  1673.     xor edx,edx
  1674.     xor ecx,ecx
  1675.     mov dword [Bullet], eax
  1676.     mov dword [Bullet+2], eax
  1677.     mov dword [Bullet+4], eax
  1678.     mov dword [Bullet+6], eax
  1679.     mov dword [Bullet+8], eax
  1680.     mov dword [Bullet+10], eax
  1681.     mov byte [Lab], 1
  1682.     mov [lab_bullet], eax
  1683.     mov [mov_bullet], eax
  1684.     mov [X_bul], eax
  1685.     mov [Y_bul], eax
  1686.     mov [gold], eax
  1687.     mov dword [Xpl], 32
  1688.     mov dword [Ypl], 448
  1689.     mov dword [hiro_lab],0 ; проекция героя в лабиринт
  1690.     mov dword [v_mov], 0
  1691.     mov dword [v_mov2], 0
  1692.     mov dword [v_fire], 0
  1693.  
  1694.     xor eax,eax
  1695.     mov eax, [numer_level]
  1696.     shl eax, 8
  1697.     mov dword [delta_level], eax
  1698.     add eax, 256
  1699.     mov dword [delta_level_end], eax
  1700.  
  1701.    cycleL:
  1702.  
  1703.      xor ebx, ebx
  1704.      mov    ebx, [Lab]
  1705.      add ebx, [delta_level]
  1706.      mov     ax,[Dangeon2 + ebx]    ; берет байт из дангеон + смещение
  1707.  
  1708.      sbb ebx, [delta_level]
  1709.      mov      [Dangeon + ebx], ax    ; берет байт из дангеон + смещение
  1710.      add word [Lab],1
  1711.      mov     eax, [Lab]
  1712.  
  1713.  
  1714.    cmp     eax, [delta_level_end]                   ;   if eax == 0
  1715.    je      cycleL_end                 ;   jump to cycle_end:
  1716.    jmp     cycleL                    ;
  1717.    cycleL_end:
  1718.  
  1719.    mov    eax, 0
  1720.    mov    [Lab],eax
  1721.  
  1722.  call enemy_plaz
  1723.  
  1724. ret
  1725. ;-------------------------------------------------------------------------------
  1726.  
  1727. ;************************************
  1728. ;GOLD
  1729. proverka_gold:
  1730. mov eax, [gold]
  1731.  cmp ax, 10
  1732.   jna net_deneg
  1733.    mov eax, [temp2] ; добежать до двери
  1734.    cmp ax, 16
  1735.     jne net_deneg
  1736.        mov ax, [numer_level]  ; увеличение левела
  1737.  
  1738.        add ax, 1
  1739.        mov [numer_level],  ax
  1740.        mov [demon_kolvo], ax   ;
  1741.  
  1742.      call load_level
  1743.      delay 100
  1744.  
  1745.   net_deneg:
  1746. ret
  1747.  
  1748. ;-------------------------------------------------------------------------------
  1749. ; УТОП
  1750. potop:
  1751.    mov eax, [temp2] ; добежать до двери
  1752.    cmp ax, 4
  1753.     jne jiwoy
  1754.        mov dword [gold], 0  ; увеличение левела
  1755.  
  1756.      call load_level
  1757.      delay 100
  1758.    jiwoy:
  1759. ret
  1760.  
  1761. ;************************************
  1762. ;положение врагов на новом уровне
  1763. enemy_plaz:
  1764.   mov word [Lab2], 0 ; все делать в WORD один элемент в массиве +2 следующий враг соотвтетственно 6*2= + 12
  1765.   mov ax, [demon_kolvo]
  1766.   mov [demon], ax
  1767.  
  1768.  cycle55:
  1769.   mov    ebx, 0
  1770.   mov    ecx, 0
  1771.   mov    edx, 0
  1772.   mov    esi, 0
  1773.  
  1774.           mov cx, [demon]
  1775.           cmp cx, 0
  1776.            je end_demon
  1777.           mov    word bx, [Lab2]                      ;
  1778.           mov    word [Enemy + bx], 1                ;
  1779.           sbb cx, 1
  1780.           mov [demon], cx
  1781.           end_demon:
  1782.  
  1783.           random 14, eax
  1784.           add eax, 1
  1785.           shl eax,5
  1786.           mov    word bx, [Lab2]                      ;
  1787.           add    word bx, 2 ; X кооридината данного врага
  1788.           mov    word [Enemy + bx], ax                ;
  1789.                                                       ;
  1790.           random 12, eax
  1791.           add eax, 1
  1792.           shl eax,5
  1793.           mov    word bx, [Lab2]                      ;
  1794.           add    word bx, 4 ; Y кооридината данного врага
  1795.           mov    word [Enemy + bx], ax                ;
  1796.  
  1797.           mov    word bx, [Lab2]                      ;
  1798.           add    word bx, 8 ; направление движения
  1799.           mov    word [Enemy + bx], 0                ;
  1800.           add    word bx, 2 ; жизнь
  1801.           mov    word [Enemy + bx], 500               ;
  1802.  
  1803.  
  1804.     mov     eax, 0
  1805.     mov     word ax, [Lab2]
  1806.  
  1807.    cmp     ax, 96                   ;   if eax == 0
  1808.    je      cycle55_end                 ;   jump to cycle_end:
  1809.  
  1810.     add     word [Lab2],12
  1811.  
  1812.    jmp     cycle55                    ;
  1813.  
  1814.    cycle55_end:
  1815.  
  1816. ret
  1817.  
  1818.  
  1819. I_END:  ; конец программы
  1820.  
  1821.  
  1822.  
  1823. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1824.   Xpl:       dd 32  ; координаты героя
  1825.   Ypl:       dd 448
  1826.   hiro_lab:  dd 0 ; проекция героя в лабиринт
  1827.   numer_level: dd 0
  1828.   delta_level: dd 0
  1829.   delta_level_end: dd 256
  1830.   demon: dd 0
  1831.   demon_kolvo: dd 1
  1832.  
  1833.   gold: dd 0
  1834.  
  1835.   X_enemy:    dd 0
  1836.   Y_enemy:    dd 0
  1837.  
  1838.  
  1839.   X_bul:    dd 0
  1840.   Y_bul:    dd 0
  1841.  
  1842.   X_anime:    dd 0
  1843.   Y_anime:    dd 0
  1844.  
  1845.   mov_bullet:    dw 0
  1846.   lab_bullet:   dw 0
  1847.   mov_enemy:    dw 0
  1848.   lab_enemy:    dw 0
  1849.   life_enemy:    dw 0
  1850.  
  1851.   anime : dd 0 ; переменная для анимации героя и пр
  1852.   anime2 : dd 0 ; переменная для анимации героя и пр
  1853.  
  1854.   temp1: dd 0
  1855.   temp2: dd 0
  1856.   temp3: dd 0
  1857.   temp4: dd 0
  1858.   temp5: dd 0
  1859.  
  1860.  
  1861.   v_mov:     dd 0  ; направления движения персонажа
  1862.   v_mov2:     dd 0  ; направления движения персонажа
  1863.   v_fire:     dd 0  ; направления движения персонажа
  1864.   Lab:       dd 0
  1865.   Lab2:      dw 0
  1866.   Lab3:      dw 0
  1867.   perem1:    dd 0
  1868.   perem2:    dd 0
  1869.  
  1870.   timer1 dd 0 ; таймер используемый для анимации воды, врагов   --- бегает от 0 до 10
  1871.  
  1872. ;-------------------------------------------------------------------------------
  1873. ;1 обычная стена, 2 непробиваемая, 4 вода, 8 лесница, 12 алмаз, 0 пустота    16 - exit
  1874. ;-------------------------------------------------------------------------------
  1875. Dangeon:
  1876.           db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
  1877.           db  2,1,1,1,1,1,1,0,12,0,0,0,0,0,0,2
  1878.           db  2,0,12,12,0,0,0,8,1,8,1,1,1,0,0,2
  1879.           db  2,8,1,1,1,1,1,8,1,8,0,0,0,0,0,2
  1880.           db  2,8,0,0,0,0,0,8,1,8,2,4,4,2,0,2
  1881.           db  2,8,2,4,4,4,2,8,1,8,2,2,2,2,0,2
  1882.           db  2,0,2,2,2,2,2,8,1,8,0,0,0,0,0,2
  1883.           db  2,0,1,0,0,0,0,8,1,1,1,1,1,1,8,2
  1884.           db  2,0,1,1,8,1,1,1,0,0,0,0,0,0,8,2
  1885.           db  2,12,1,1,8,0,12,0,1,8,1,1,8,1,1,2
  1886.           db  2,0,0,0,8,8,1,8,0,8,0,0,0,0,0,2
  1887.           db  2,12,1,8,1,8,1,1,8,1,1,1,1,1,1,2
  1888.           db  2,0,1,8,12,12,0,0,0,0,0,0,0,0,0,2
  1889.           db  2,0,1,1,1,1,1,8,1,1,1,0,0,0,0,2
  1890.           db  2,0,0,0,12,0,0,8,0,0,0,16,0,12,12,2
  1891.           db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
  1892.  
  1893. Dangeon2:
  1894.           db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
  1895.           db  2,1,1,0,1,1,1,0,12,0,0,0,0,0,0,2
  1896.           db  2,0,12,12,0,0,0,8,1,8,1,1,1,0,0,2
  1897.           db  2,8,1,1,1,1,1,8,1,8,0,0,0,0,0,2
  1898.           db  2,8,0,0,0,0,0,8,1,8,2,4,4,2,0,2                 ;0
  1899.           db  2,8,2,4,4,4,2,8,1,8,2,2,2,2,0,2
  1900.           db  2,0,2,2,2,2,2,8,1,8,0,0,0,0,0,2
  1901.           db  2,0,1,0,0,0,0,8,1,1,1,1,1,1,8,2
  1902.           db  2,0,1,1,8,1,1,1,0,0,0,0,0,0,8,2
  1903.           db  2,12,1,1,8,0,12,0,1,8,1,1,8,1,1,2
  1904.           db  2,0,0,0,8,8,1,8,0,8,0,0,0,0,0,2
  1905.           db  2,12,1,8,1,8,1,1,8,1,1,1,1,1,1,2
  1906.           db  2,0,1,8,12,12,0,0,0,0,0,0,0,0,0,2
  1907.           db  2,0,1,1,1,1,1,8,1,1,1,0,0,0,0,2
  1908.           db  2,0,0,0,12,0,0,8,0,0,0,16,0,12,12,2
  1909.           db  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
  1910.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1911.           db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
  1912.           db  2,0,0,0,0,0,0,0,0,0,0,16,0,0,0,2
  1913.           db  2,12,1,8,1,0,0,0,0,0,0,1,8,0,0,2
  1914.           db  2,0,1,8,1,0,0,0,0,0,0,1,0,8,0,2                 ;1
  1915.           db  2,12,1,8,1,1,0,0,0,0,1,1,0,8,0,2
  1916.           db  2,0,1,8,1,0,12,12,12,12,0,1,8,8,0,2
  1917.           db  2,12,1,8,1,0,1,1,1,1,0,1,8,0,0,2
  1918.           db  2,0,1,8,0,0,0,0,0,0,0,0,8,0,0,2
  1919.           db  2,0,1,1,1,1,8,1,8,1,1,1,1,1,8,2
  1920.           db  2,0,0,0,12,0,8,0,8,0,0,0,12,0,8,2
  1921.           db  2,0,1,1,1,1,1,0,1,8,1,1,8,1,1,2
  1922.           db  2,0,0,0,0,0,0,0,0,8,1,0,8,0,0,2
  1923.           db  2,0,1,1,1,1,1,8,1,1,1,1,1,1,8,2
  1924.           db  2,0,0,12,0,0,0,8,0,0,12,0,0,0,8,2
  1925.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1926.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  1927.           db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
  1928.           db  2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
  1929.           db  2,0,0,0,0,0,0,0,0,12,0,12,0,0,0,2
  1930.           db  2,0,0,0,0,0,0,8,1,1,1,1,1,1,0,2                ;2
  1931.           db  2,0,8,0,12,12,0,8,0,0,0,0,0,2,4,2
  1932.           db  2,0,8,1,1,1,1,0,0,0,0,0,0,2,2,2
  1933.           db  2,0,8,0,0,0,0,12,1,1,1,1,0,0,0,2
  1934.           db  2,0,8,1,0,1,0,12,0,0,0,0,0,0,0,2
  1935.           db  2,0,8,0,1,1,12,12,0,0,0,8,1,1,1,2
  1936.           db  2,0,8,0,12,0,0,12,0,0,0,8,0,12,0,2
  1937.           db  2,0,8,0,0,0,8,1,8,0,0,1,8,1,8,2
  1938.           db  2,0,8,0,0,8,1,1,1,8,0,0,8,0,8,2
  1939.           db  2,0,1,1,1,1,1,1,1,1,1,1,1,1,8,2
  1940.           db  2,0,0,0,0,0,0,0,16,0,0,0,0,0,8,2
  1941.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1942.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  1943.           db  2,0,0,0,0,12,0,0,0,0,0,0,16,0,0,2
  1944.           db  2,0,8,1,1,1,1,1,1,1,1,1,1,1,0,2
  1945.           db  2,0,8,0,0,0,0,0,12,0,0,0,0,0,0,2
  1946.           db  2,0,8,0,0,0,0,1,8,1,0,0,0,0,0,2
  1947.           db  2,0,8,0,0,0,1,1,8,1,1,0,0,0,0,2
  1948.           db  2,0,8,0,12,1,1,1,8,1,1,1,12,0,0,2
  1949.           db  2,0,8,0,1,1,12,1,8,1,12,1,1,0,0,2
  1950.           db  2,0,0,1,1,1,1,1,8,1,1,1,1,0,0,2                  ;3
  1951.           db  2,0,1,0,0,0,0,0,8,1,0,0,0,1,0,2
  1952.           db  2,0,1,0,1,1,1,1,8,1,1,1,0,1,0,2
  1953.           db  2,0,1,1,12,1,12,1,8,1,1,1,0,1,0,2
  1954.           db  2,0,1,1,1,1,1,1,8,1,1,1,0,1,0,2
  1955.           db  2,0,1,1,12,1,12,1,8,1,1,1,12,1,0,2
  1956.           db  2,0,0,0,0,0,0,0,8,0,0,0,0,0,0,2
  1957.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1958.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  1959.           db  2,0,12,0,0,0,0,0,0,0,0,0,16,0,0,2
  1960.           db  2,0,1,8,1,1,1,1,1,1,8,1,1,1,8,2
  1961.           db  2,0,0,8,0,0,0,0,0,0,8,0,0,0,8,2
  1962.           db  2,0,1,1,1,1,1,8,1,1,1,1,1,1,0,2
  1963.           db  2,0,0,12,0,0,12,8,0,0,12,0,0,0,0,2
  1964.           db  2,12,1,1,1,8,1,1,1,1,8,1,1,1,8,2
  1965.           db  2,0,0,0,0,8,0,0,0,0,8,0,0,0,8,2
  1966.           db  2,8,1,1,1,1,1,1,8,1,1,1,1,1,0,2                    ;4
  1967.           db  2,8,0,0,0,12,0,0,8,0,0,12,0,0,0,2
  1968.           db  2,0,1,8,1,1,1,1,1,1,1,1,8,1,0,2
  1969.           db  2,0,0,8,12,0,0,0,0,12,0,0,8,0,0,2
  1970.           db  2,8,1,1,1,1,1,1,8,1,1,1,1,1,8,2
  1971.           db  2,8,12,0,0,0,0,0,0,0,0,0,0,12,8,2
  1972.           db  2,8,2,4,4,4,4,4,4,4,4,4,4,2,8,2
  1973.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1974.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  1975.           db  2,8,1,8,12,8,1,8,1,8,1,8,1,8,1,2
  1976.           db  2,8,2,8,1,8,1,8,1,8,1,8,12,8,12,2
  1977.           db  2,8,1,8,1,8,2,8,12,8,1,8,1,8,1,2
  1978.           db  2,8,12,8,0,8,0,8,0,8,0,8,0,8,0,2
  1979.           db  2,1,8,1,1,1,1,1,8,1,1,1,1,1,8,2
  1980.           db  2,0,8,0,0,0,0,0,8,0,0,12,0,0,8,2
  1981.           db  2,0,8,12,0,2,12,0,8,1,1,1,1,1,8,2
  1982.           db  2,0,1,1,8,1,1,1,8,0,0,0,0,0,8,2                   ;5
  1983.           db  2,0,1,0,8,0,0,0,8,0,0,12,0,0,8,2
  1984.           db  2,0,1,0,8,0,0,0,8,1,1,1,1,1,8,2
  1985.           db  2,0,1,12,8,0,0,2,8,0,0,0,0,0,8,2
  1986.           db  2,8,1,1,1,1,8,1,1,1,1,8,1,1,1,2
  1987.           db  2,8,0,0,0,0,8,2,0,0,2,8,0,0,0,2
  1988.           db  2,0,8,0,12,8,8,2,4,4,2,8,0,0,16,2
  1989.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  1990.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  1991.           db  2,0,8,0,8,0,8,0,8,0,0,8,0,8,16,2
  1992.           db  2,1,8,1,8,1,8,1,8,1,1,8,1,8,1,2
  1993.           db  2,0,8,0,8,0,8,0,8,8,0,8,0,8,0,2
  1994.           db  2,1,1,8,1,1,1,1,1,8,1,1,8,1,1,2
  1995.           db  2,0,0,8,8,0,12,8,0,8,8,12,8,8,0,2
  1996.           db  2,1,1,1,8,1,1,8,1,1,8,1,1,8,1,2
  1997.           db  2,0,8,0,8,0,12,8,0,0,8,0,12,8,0,2                  ;6
  1998.           db  2,1,8,1,1,1,1,1,8,1,1,1,1,1,1,2
  1999.           db  2,0,8,0,12,8,0,0,8,12,0,8,0,0,0,2
  2000.           db  2,1,8,1,1,8,1,1,8,1,1,8,1,1,1,2
  2001.           db  2,0,0,8,0,8,8,0,8,8,0,8,8,0,0,2
  2002.           db  2,1,1,8,1,1,8,1,1,8,1,1,8,1,1,2
  2003.           db  2,0,0,8,12,0,8,0,12,8,0,12,8,12,12,2
  2004.           db  2,8,8,1,1,1,1,1,1,1,1,1,1,1,1,2
  2005.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  2006.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  2007.           db  2,0,12,0,12,0,12,0,0,12,0,12,0,0,0,2
  2008.           db  2,1,1,1,8,1,1,1,1,1,1,8,1,1,1,2
  2009.           db  2,0,0,0,8,0,0,12,0,0,0,8,0,0,0,2
  2010.           db  2,1,1,1,1,1,1,1,8,1,1,1,1,1,1,2
  2011.           db  2,0,0,0,12,0,0,0,8,12,0,0,0,0,0,2
  2012.           db  2,1,1,1,8,1,1,1,1,1,1,8,1,1,1,2
  2013.           db  2,0,0,0,8,0,0,0,0,0,0,8,0,0,0,2                    ; 7
  2014.           db  2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,2
  2015.           db  2,0,0,0,0,0,0,0,0,0,0,0,0,8,0,2
  2016.           db  2,1,1,1,1,1,1,8,1,1,1,1,1,8,1,2
  2017.           db  2,0,0,0,0,0,0,8,0,0,0,0,0,8,0,2
  2018.           db  2,1,1,8,1,8,1,1,8,1,8,1,1,1,1,2
  2019.           db  2,0,0,8,0,8,12,0,8,0,8,12,0,0,16,2
  2020.           db  2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,2
  2021.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  2022.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
  2023.           db  2,0,0,0,0,0,0,0,0,0,0,0,0,16,0,2
  2024.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2025.           db  2,0,8,0,8,0,12,0,0,8,0,8,0,0,0,2
  2026.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2027.           db  2,0,0,8,12,0,0,8,0,0,8,0,0,0,0,2
  2028.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2029.           db  2,0,0,0,0,0,0,0,0,8,0,0,0,12,0,2
  2030.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2031.           db  2,0,8,0,0,0,8,12,0,0,8,0,8,12,0,2
  2032.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2033.           db  2,0,0,8,0,0,0,0,12,8,0,12,8,0,0,2
  2034.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2035.           db  2,0,0,8,0,8,12,0,0,8,12,0,8,12,0,2
  2036.           db  2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,2
  2037.           db  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2;-------------------------------------------------------------------------------
  2038.  
  2039.  
  2040. ;-------------------------------------------------------------------------------
  2041. Bullet: dw 0,0,0,0,0,0
  2042.         dw 0,0,0,0,0,0
  2043.         dw 0,0,0,0,0,0
  2044.         dw 0,0,0,0,0,0
  2045. ;-------------------------------------------------------------------------------
  2046.  
  2047.  
  2048. Enemy:  dw  1,448,128,0,0,500   ;враги класс,Х,У,положение в лабиринте,направление движения,жизнь
  2049.         dw  0,32,32,0,0,0
  2050.         dw  0,64,32,0,0,0
  2051.         dw  0,416,32,0,0,0
  2052.         dw  0,256,256,0,0,0
  2053.         dw  0,256,224,0,0,0
  2054.         dw  0,320,192,0,0,0
  2055.         dw  0,32,256,0,0,0
  2056.         dw  0,448,448,0,0,0
  2057.  
  2058. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2059.  
  2060. bullet_bmp:
  2061. file 'bullet.bmp'
  2062. rb 1
  2063.  
  2064. level_bmp:
  2065. file 'level2.bmp'
  2066. rb 1
  2067.  
  2068. kirpich:
  2069. file 'kirpich.bmp'
  2070. rb 1
  2071.  
  2072. kirpich3:
  2073. file 'kirpich2.bmp'
  2074. rb 1
  2075.  
  2076. kirpich2:
  2077. file 'oldkirpich.bmp'
  2078. rb 1
  2079.  
  2080. lest_bmp:
  2081. file 'lestnica.bmp'
  2082. rb 1
  2083.  
  2084. water1_bmp:
  2085. file 'water1.bmp'
  2086. rb 1
  2087.  
  2088. water2_bmp:
  2089. file 'water2.bmp'
  2090. rb 1
  2091.  
  2092. door1_bmp:
  2093. file 'door1.bmp'
  2094. rb 1
  2095.  
  2096. door2_bmp:
  2097. file 'door2.bmp'
  2098. rb 1
  2099.  
  2100.  
  2101. img_level:
  2102. rb 448*448*3+8
  2103.  
  2104. ;img_ded1:
  2105. ;rb 448*448*3+8
  2106.  
  2107. img_area:
  2108. rb 32*32*3+8
  2109.  
  2110. img_area2:
  2111. rb 32*32*3+8
  2112.  
  2113. img_area3:
  2114. rb 32*32*3+8
  2115.  
  2116. img_bullet:
  2117. rb 4*8*3+8
  2118.  
  2119. img_lestniza:
  2120. rb 32*32*3+8
  2121.  
  2122. img_water1:
  2123. rb 32*32*3+8
  2124.  
  2125. img_water2:
  2126. rb 32*32*3+8
  2127.  
  2128. img_door1:
  2129. rb 32*32*3+8
  2130.  
  2131. img_door2:
  2132. rb 32*32*3+8
  2133.  
  2134. img_enemy1:
  2135. rb 32*32*3+8
  2136.  
  2137. img_enemy2:
  2138. rb 32*32*3+8
  2139.  
  2140.  
  2141. Music_bah:
  2142.   db  0x0f, 0x09, 0
  2143.  
  2144. Music_mov:
  2145.   db  0x00, 0x00, 0
  2146.  
  2147. Music_almaz:
  2148.   db  0x09, 0x03, 0
  2149.  
  2150. entered    rd 1
  2151.  
  2152. imgcount  rd 1       ; кол-во всего кадров в анимации
  2153. img_index  rd 1      ; номер текущего кадра
  2154.  
  2155. ;hashtable rd 4096    ; рабочая область для РеадГИФ процедуры
  2156. workarea:
  2157. file 'aniall.gif'
  2158.  
  2159.  
  2160. ;temp rb 0x100000 ; место для ГИФ фаила
  2161. rb 10
  2162.  
  2163. canvas:
  2164. xs dd 512
  2165. ys dd 512
  2166.    rb 512*512*3
  2167.  
  2168. gif_hash_area:
  2169. rd 4096+1
  2170.  
  2171. coords:
  2172. rd 2
  2173.  
  2174. Image:
  2175.