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