Subversion Repositories Kolibri OS

Rev

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

  1. ;;===First_menu_mode===========================================================================================================
  2.  
  3. First_menu:
  4.     mov  byte[window_title+5],  0
  5.       mcall     71,1,window_title
  6.       mcall     40,111b                         ; set events: standart
  7.       mcall     66,1,1                          ; set scan codes mode for keyboard
  8.     mov  [is_new_record],   0
  9.     mov  [lives],   START_LIVES
  10.       call      Show_cursor
  11.  
  12.     mov  [score],   0
  13.       call      Set_first_level_of_play_mode
  14.  
  15.     mov  ebx, [time_wait_limit_const]
  16.     mov  [time_wait_limit], ebx
  17.  
  18.   .redraw:
  19.       call      Set_geometry
  20.       mcall     12,1
  21.       mcall     0, , ,[window_style], ,window_title
  22.  
  23.       call      Draw_decorations
  24.       call      Draw_first_menu_picture
  25.       call      Draw_menu_strings
  26.       call      Draw_buttons
  27.  
  28.       mcall     12,2
  29.  
  30.   .still:
  31.       mcall     10                              ; wait for event
  32.                                                 ; ok, what an event?
  33.     dec  al                                     ; has the window been moved or resized?
  34.      jz  .redraw                                ;
  35.     dec  al                                     ; was a key pressed?
  36.      jz  .key                                   ;
  37.  
  38.  
  39.   .button:                                      ; a button was pressed
  40.       mcall     17                              ; get button number
  41.     shr  eax, 8                                 ; we should do it to get the real button code
  42.  
  43.     cmp  eax, 1                                 ; is it close button?
  44.      je  Save_do_smth_else_and_exit             ; if so, jump to quit...
  45.     cmp  eax, 0xD0                              ; 'play' button?
  46.      je  Level_begin
  47.     cmp  eax, 0xD1                              ; 'exit' button?
  48.      je  Save_do_smth_else_and_exit
  49.     cmp  eax, 0xD2                              ; change play mode button?
  50.      jne @f
  51.       call      Change_play_mode
  52.       call      Delete_buttons
  53.       call      Draw_buttons
  54.      jmp .still                                 ; jump to wait for another event
  55.   @@:
  56.     cmp  eax, 0xD3                              ; '+INC+' button?
  57.      jne @f
  58.       call      Increase_geometry
  59.      jmp .redraw                                ; jump to wait for another event
  60.   @@:
  61.     cmp  eax, 0xD4                              ; '-dec-' button?
  62.      jne @f
  63.       call      Decrease_geometry
  64.      jmp .redraw                                ; jump to wait for another event
  65.   @@:
  66.  
  67.      jmp .still                                 ; jump to wait for another event
  68.  
  69.  
  70.   .key:                                         ; a key was pressed
  71.       mcall     2                               ; get keycode
  72.  
  73.     cmp  ah, 0x01                               ; Escape
  74.      je  Save_do_smth_else_and_exit
  75.     cmp  ah, 0x1C                               ; Enter
  76.      je  Level_begin
  77.     cmp  ah, 0x39                               ; Space
  78.      jne @f
  79.       call      Change_play_mode
  80.       call      Delete_buttons
  81.       call      Draw_buttons
  82.      jmp .still                                 ; jump to wait for another event
  83.   @@:
  84.     cmp  ah, [shortcut_increase]
  85.      jne @f
  86.       call      Increase_geometry
  87.      jmp .redraw
  88.   @@:
  89.     cmp  ah, [shortcut_decrease]
  90.      jne @f
  91.       call      Decrease_geometry
  92.      jmp .redraw
  93.   @@:
  94.      jmp .still                                 ; jump to wait for another event
  95.  
  96. ;;---First_menu_mode-----------------------------------------------------------------------------------------------------------
  97.  
  98.  
  99. ;;===Some_functions============================================================================================================
  100.  
  101. Draw_first_menu_picture:
  102.     ;;===Draw_first_menu_picture================================================================================================
  103.  
  104.     mov  ax,  2*0x100+24
  105.     mov  cx,  1*0x100+5
  106.     mov  edx, [snake_picture_color]
  107.     mov  esi, picture_first_menu_snake
  108.       call      Draw_picture
  109.  
  110.     mov  ax,  3*0x100+11
  111.     mov  cx,  8*0x100+5
  112.     mov  edx, [version_picture_color]
  113.     mov  esi, picture_first_menu_version
  114.       call      Draw_picture
  115.  
  116.     ret
  117.            
  118.     ;;---Draw_first_menu_picture------------------------------------------------------------------------------------------------
  119.  
  120.  
  121. Draw_menu_strings:
  122.     ;;===Make_menu_strings======================================================================================================
  123.  
  124.     mov  ebx, [window_width]
  125.     shr  ebx, 1
  126.     sub  ebx, press_to_start.size*3+6
  127.     shl  ebx, 16
  128.     add  ebx, dword[bottom_middle_strings]
  129.       mcall     4, ,[navigation_strings_color],press_to_start
  130.     mov  ebx, [window_width]
  131.     shr  ebx, 1
  132.     sub  ebx, press_esc_to_exit.size*3+6
  133.     shl  ebx, 16
  134.     add  ebx, [top_strings]
  135.       mcall     , ,[navigation_strings_color],press_esc_to_exit
  136. ;      mcall     ,406*65536+TOP_STRINGS,[navigation_strings_color],press_F2_to_options
  137.  
  138.     ret
  139.  
  140.     ;;---Make_menu_strings------------------------------------------------------------------------------------------------------
  141.  
  142.  
  143. Draw_buttons:
  144.     ;;===Draw_buttons===========================================================================================================
  145.  
  146.     mov  ebx, [button_x_left]
  147.     shl  ebx, 16
  148.     mov  bx,  word[button_width_short]
  149.     mov  ecx, [button_y_top]
  150.     shl  ecx, 16
  151.     add  cx,  word[button_height]
  152.       mcall     8, , ,0x000000D0,[button_color]                             ; top left button
  153.     shr  ecx, 16
  154.     mov  bx,  cx
  155.     mov  edx, [button_height]
  156.     shr  edx, 1
  157.     sub  edx, 3                                                             ; ~half of font height
  158.     add  bx,  dx
  159.     ror  ebx, 16
  160.     mov  edx, [button_width_short]
  161.     shr  edx, 1
  162.     sub  edx, string_button_play.size*3
  163.     add  bx,  dx
  164.     ror  ebx, 16
  165.       mcall     4, ,[button_text_color],string_button_play
  166.  
  167.     mov  ebx, [button_x_right]
  168.     shl  ebx, 16
  169.     mov  bx,  word[button_width_short]
  170.     mov  ecx, [button_y_top]
  171.     shl  ecx, 16
  172.     add  cx,  word[button_height]
  173.       mcall     8, , ,0x000000D1,                                           ; top right button
  174.     shr  ecx, 16
  175.     mov  bx,  cx
  176.     mov  edx, [button_height]
  177.     shr  edx, 1
  178.     sub  edx, 3                                                             ; ~half of font height
  179.     add  bx,  dx
  180.     ror  ebx, 16
  181.     mov  edx, [button_width_short]
  182.     shr  edx, 1
  183.     sub  edx, string_button_exit.size*3
  184.     add  bx,  dx
  185.     ror  ebx, 16
  186.       mcall     4, ,[button_text_color],string_button_exit
  187.  
  188.     mov  ebx, [button_x_left]
  189.     shl  ebx, 16
  190.     mov  bx,  word[button_width_long]
  191.     mov  ecx, [button_y_middle]
  192.     shl  ecx, 16
  193.     add  cx,  word[button_height]
  194.       mcall     8, , ,0x000000D2,                                           ; middle button
  195.     shr  ecx, 16
  196.     mov  bx,  cx
  197.     mov  edi, [button_height]
  198.     shr  edi, 1
  199.     sub  edi, 3                                                             ; ~half of font height
  200.     add  bx,  di
  201.     ror  ebx, 16
  202.     mov  edi, [button_width_long]
  203.     shr  edi, 1
  204.     cmp  [play_mode],   0
  205.      jne @f
  206.     sub  edi, string_button_pm_classic.size*3
  207.     mov  edx, string_button_pm_classic
  208.      jmp .skip
  209.   @@:
  210.     sub  edi, string_button_pm_levels.size*3
  211.     mov  edx, string_button_pm_levels
  212.   .skip:
  213.     add  bx,  di
  214.     ror  ebx, 16
  215.       mcall     4, ,[button_text_color],
  216.  
  217.     mov  ebx, [button_x_left]
  218.     shl  ebx, 16
  219.     mov  bx,  word[button_width_short]
  220.     mov  ecx, [button_y_bottom]
  221.     shl  ecx, 16
  222.     add  cx,  word[button_height]
  223.       mcall     8, , ,0x000000D3,                                           ; bottom left button
  224.     shr  ecx, 16
  225.     mov  bx,  cx
  226.     mov  edx, [button_height]
  227.     shr  edx, 1
  228.     sub  edx, 3                                                             ; ~half of font height
  229.     add  bx,  dx
  230.     ror  ebx, 16
  231.     mov  edx, [button_width_short]
  232.     shr  edx, 1
  233.     sub  edx, string_button_inc.size*3
  234.     add  bx,  dx
  235.     ror  ebx, 16
  236.       mcall     4, ,[button_text_color],string_button_inc
  237.  
  238.     mov  ebx, [button_x_right]
  239.     shl  ebx, 16
  240.     mov  bx,  word[button_width_short]
  241.     mov  ecx, [button_y_bottom]
  242.     shl  ecx, 16
  243.     add  cx,  word[button_height]
  244.       mcall     8, , ,0x000000D4,
  245.     shr  ecx, 16
  246.     mov  bx,  cx
  247.     mov  edx, [button_height]
  248.     shr  edx, 1
  249.     sub  edx, 3                                                             ; ~half of font height
  250.     add  bx,  dx
  251.     ror  ebx, 16
  252.     mov  edx, [button_width_short]
  253.     shr  edx, 1
  254.     sub  edx, string_button_dec.size*3
  255.     add  bx,  dx
  256.     ror  ebx, 16
  257.       mcall     4, ,[button_text_color],string_button_dec
  258.  
  259.     ret
  260.  
  261.     ;;---Draw_buttons----------------------------------------------------------------------------------------------------------
  262.  
  263.  
  264. Delete_buttons:
  265.     ;;===Delete_buttons========================================================================================================
  266.  
  267.       mcall     8,,,0x800000D0
  268.       mcall      ,,,0x800000D1
  269.       mcall      ,,,0x800000D2
  270.       mcall      ,,,0x800000D3
  271.       mcall      ,,,0x800000D4
  272.  
  273.     ret
  274.  
  275.     ;;---Delete_buttons--------------------------------------------------------------------------------------------------------
  276.  
  277.  
  278. Change_play_mode:
  279.     ;;===Change_play_mode======================================================================================================
  280.  
  281.     cmp  [play_mode],   LEVELS_MODE
  282.      jne @f
  283.     mov  [play_mode],   CLASSIC_MODE
  284.     mov  [cur_level_number],   0
  285.     ret
  286.   @@:
  287.     inc  [play_mode]
  288.  
  289.       call      Set_first_level_of_play_mode
  290.  
  291.     ret
  292.  
  293.     ;;---Change_play_mode------------------------------------------------------------------------------------------------------
  294.  
  295.  
  296. Set_first_level_of_play_mode:
  297.     ;;===Set_first_level_of_play_mode==========================================================================================
  298.  
  299.     cmp  [play_mode],   CLASSIC_MODE
  300.      jne @f
  301.     mov  [cur_level_number],   CLASSIC_MODE_FIRST_LEVEL
  302.   @@:
  303.     cmp  [play_mode],   LEVELS_MODE
  304.      jne @f
  305.     mov  [cur_level_number],   LEVELS_MODE_FIRST_LEVEL
  306.   @@:
  307.  
  308.     ret
  309.  
  310.     ;;---Set_first_level_of_play_mode-------------------------------------------------------------------------------------------
  311.  
  312. ;;---Some_functions-------------------------------------------------------------------------------------------------------------