Subversion Repositories Kolibri OS

Rev

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

  1. ;---------------------------------------------------------------------
  2. key:
  3.         mcall   2
  4.         cmp     [extended_key],1
  5.         je      .extended_key
  6.  
  7.         test    al,al
  8.         jnz     still
  9.  
  10.         cmp     ah,0xE0
  11.         jne     @f
  12.  
  13.         mov     [extended_key],1
  14.         jmp     still
  15. ;--------------------------------------
  16. @@:
  17.         cmp     ah,72   ; arrow up
  18.         je      .arrow_up
  19.  
  20.         cmp     ah,80   ; arrow down
  21.         je      .arrow_down
  22.  
  23.         cmp     ah,75   ; arrow left
  24.         je      .arrow_left
  25.  
  26.         cmp     ah,77   ; arrow right
  27.         je      .arrow_right
  28.  
  29.         cmp     ah,17   ; w - arrow up
  30.         je      .arrow_up
  31.  
  32.         cmp     ah,31   ; s - arrow down
  33.         je      .arrow_down
  34.  
  35.         cmp     ah,30   ; a - arrow left
  36.         je      .arrow_left
  37.  
  38.         cmp     ah,32   ; d - arrow right
  39.         je      .arrow_right
  40.  
  41.         cmp     ah,57   ; space - kick
  42.         je      .kick  
  43.  
  44.         jmp     still
  45. ;---------------------------------------------------------------------
  46. .extended_key:
  47.         mov     [extended_key],0
  48.         cmp     ah,72   ; arrow up
  49.         je      .arrow_up
  50.  
  51.         cmp     ah,80   ; arrow down
  52.         je      .arrow_down
  53.  
  54.         cmp     ah,75   ; arrow left
  55.         je      .arrow_left
  56.  
  57.         cmp     ah,77   ; arrow right
  58.         je      .arrow_right
  59.  
  60.         jmp     still
  61. ;---------------------------------------------------------------------
  62. .arrow_up:
  63.         mov     [protagonist_route],ROUTE_UP
  64.         mov     cx,0x0100+ROUTE_UP
  65.         jmp     .save_motion
  66. ;---------------------------------------------------------------------
  67. .arrow_down:
  68.         mov     [protagonist_route],ROUTE_DOWN
  69.         mov     cx,0x0100+ROUTE_DOWN
  70.         jmp     .save_motion
  71. ;---------------------------------------------------------------------
  72. .arrow_left:
  73.         mov     [protagonist_route],ROUTE_LEFT
  74.         mov     cx,0x0100+ROUTE_LEFT
  75.         jmp     .save_motion
  76. ;---------------------------------------------------------------------
  77. .arrow_right:
  78.         mov     [protagonist_route],ROUTE_RIGHT
  79.         mov     cx,0x0100+ROUTE_RIGHT
  80. ;---------------------------------------------------------------------
  81. .save_motion:
  82.         call    calculate_offset
  83.         shl     ebx,2
  84.         add     eax,ebx
  85.         add     eax,plan_level
  86.         mov     ebx,[eax]
  87.         ror     ebx,16
  88.         mov     bx,cx
  89.         rol     ebx,16
  90.         mov     [eax],ebx
  91. ;       jmp     still
  92.         jmp     calculate_action_for_all.2
  93. ;---------------------------------------------------------------------
  94. .kick:
  95.         mov     eax,[protagonist_route]
  96.         cmp     al,ROUTE_UP
  97.         jne     @f
  98.        
  99.         cmp     [protagonist_position.y],0
  100.         je      calculate_action_for_all.1      ;still
  101.        
  102.         call    protagonist_kick_action
  103.         mov     eax,[protagonist_position.y]
  104.         dec     eax
  105.         call    calculate_offset.1
  106.         jmp     .calculate_protagonist_kick_brick
  107. ;--------------------------------------
  108. @@:
  109.         cmp     al,ROUTE_DOWN
  110.         jne     @f
  111.  
  112.         cmp     [protagonist_position.y],LEVEL_MAP_SIZE_Y-1
  113.         je      calculate_action_for_all.1      ;still
  114.  
  115.         call    protagonist_kick_action
  116.         mov     eax,[protagonist_position.y]
  117.         inc     eax
  118.         call    calculate_offset.1
  119.         jmp     .calculate_protagonist_kick_brick
  120. ;--------------------------------------
  121. @@:
  122.         cmp     al,ROUTE_LEFT
  123.         jne     @f
  124.  
  125.         cmp     [protagonist_position.x],0
  126.         je      calculate_action_for_all.1      ;still
  127.  
  128.         call    protagonist_kick_action
  129.         call    calculate_offset
  130.         dec     ebx
  131.         jmp     .calculate_protagonist_kick_brick
  132. ;--------------------------------------
  133. @@:
  134.         cmp     al,ROUTE_RIGHT
  135.         jne     still
  136.        
  137.         cmp     [protagonist_position.x],LEVEL_MAP_SIZE_X-1
  138.         je      calculate_action_for_all.1      ;still 
  139.        
  140.         call    protagonist_kick_action
  141.         call    calculate_offset
  142.         inc     ebx
  143. ;--------------------------------------
  144. .calculate_protagonist_kick_brick:
  145.         shl     ebx,2
  146.         add     eax,ebx
  147.         add     eax,plan_level
  148.         mov     ebx,[eax]
  149.        
  150. ;       cmp     bh,OBJECT_FINAL_MONSTER ;OBJECT_PROTAGONIST
  151. ;       jbe     .kill
  152.  
  153.         cmp     bh,OBJECT_WHITE_BRICK
  154.         je      .white_brick
  155.  
  156.         cmp     bh,OBJECT_RED_BRICK ; red brick?
  157.         jne     still
  158.  
  159.         and     ebx,0x00ff00ff
  160.         add     ebx,0x01000000 + RED_BRICK_CRASH_1 shl 8        ;  reb brick crash 1
  161.         mov     [eax],ebx
  162.         push    eax ebx
  163. ;        DEBUGF  1, "80 - reb brick crash 10\n"
  164.         call    show_tiles_one_iteration
  165.         mcall   5,5
  166.         pop     ebx eax
  167.  
  168.         and     ebx,0x00ff00ff
  169.         add     ebx,0x01000000 + RED_BRICK_CRASH_2 shl 8        ; reb brick crash 2
  170.         mov     [eax],ebx
  171.         push    eax ebx
  172. ;        DEBUGF  1, "81 - reb brick crash 20\n"
  173.         call    show_tiles_one_iteration
  174.         mcall   5,5
  175.         pop     ebx eax
  176.  
  177.         and     ebx,0x00ff00ff 
  178.         add     ebx,0x01000000
  179.         mov     [eax],ebx
  180. ;        DEBUGF  1, "81 - reb brick crash 30\n"
  181. ;       call    show_tiles_one_iteration
  182.         jmp     calculate_action_for_all.2      ;still
  183. ;--------------------------------------
  184. ;.kill:
  185. ;       and     ebx,0x000000ff
  186. ;       add     ebx,0x01000000
  187. ;       mov     [eax],ebx
  188. ;;      call    show_tiles_one_iteration
  189. ;       jmp     calculate_action_for_all.2
  190. ;--------------------------------------
  191. .white_brick:
  192.         ror     ebx,16
  193.         xor     bl,bl
  194.         mov     bh,1
  195.         add     ebx,[protagonist_route]
  196.         rol     ebx,16
  197.         mov     [eax],ebx
  198.         jmp     calculate_action_for_all.2
  199. ;---------------------------------------------------------------------
  200. calculate_action_for_all:
  201.         call    show_tiles_one_iteration
  202. ;--------------------------------------
  203. .1:
  204.         call    actions_for_all_cell
  205. ;--------------------------------------
  206. .2:
  207.         call    show_tiles_one_iteration
  208.         jmp     still
  209. ;---------------------------------------------------------------------
  210. calculate_offset:
  211.         mov     eax,[protagonist_position.y]
  212. ;--------------------------------------
  213. .1:
  214.         imul    eax,LEVEL_MAP_SIZE_X*4
  215.         mov     ebx,[protagonist_position.x]
  216.         ret
  217. ;---------------------------------------------------------------------
  218. protagonist_kick_action:
  219.         call    snd_kick_action
  220.         add     [protagonist_route],4
  221.         call    show_protagonist_1
  222.         sub     [protagonist_route],4
  223.         call    show_protagonist_1
  224.         ret
  225. ;---------------------------------------------------------------------
  226. calculate_protagonist_vs_brick:
  227.         shl     ebx,2
  228.         add     eax,ebx
  229.         add     eax,plan_level
  230.         mov     ebx,[eax]
  231. ;       cmp     bh,4 ; brick?
  232.         test    bh,bh ; empty?
  233.         jnz     @f
  234.        
  235.         ret
  236. ;--------------------------------------
  237. @@:
  238.         add     esp,4
  239.         jmp     still
  240. ;---------------------------------------------------------------------
  241. show_protagonist_1:
  242.         mov     ecx,0x01000000 + OBJECT_PROTAGONIST shl 8
  243.         call    calculate_protagonist_position
  244. ;       call    show_tiles_one_iteration
  245. ;       call    actions_for_all_cell
  246.         call    show_tiles_one_iteration        ;show_tiles
  247.         mcall   5,10
  248.         ret
  249. ;---------------------------------------------------------------------
  250. calculate_protagonist_position:
  251.         call    calculate_offset
  252.         shl     ebx,2
  253.         add     eax,ebx
  254.         add     eax,plan_level
  255.         mov     ebx,[eax]
  256.         and     ebx,0x00ff00ff
  257.         add     ebx,ecx
  258.         mov     [eax],ebx
  259.         ret
  260. ;---------------------------------------------------------------------
  261.