Subversion Repositories Kolibri OS

Rev

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

  1. ;;===HEADER====================================================================================================================
  2.  
  3. use32
  4.     org 0x0
  5.     db  'MENUET01'
  6.     dd  0x1,start,i_end,d_end,stacktop,0x0,cur_dir_path
  7.  
  8. ;;---HEADER--------------------------------------------------------------------------------------------------------------------
  9.  
  10. include '../../../proc32.inc'
  11. include '../../../macros.inc'
  12. include '../../../system/launch/trunk/mem.inc'
  13. include '../../../develop/libraries/libs-dev/.test/dll.inc'
  14. include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
  15. ;include '../../../system/board/trunk/debug.inc'
  16.  
  17. ;;===Define_chapter============================================================================================================
  18.  
  19. SCORE_EAT                   equ     100
  20.  
  21. LEFT                        equ     0
  22. DOWN                        equ     1
  23. UP                          equ     2
  24. RIGHT                       equ     3
  25.  
  26. ;;---Define_chapter------------------------------------------------------------------------------------------------------------
  27.  
  28. start:
  29.  
  30. stdcall dll.Load,@IMPORT
  31.     or   eax, eax
  32.     jnz  Exit
  33.    
  34. align 4
  35.  
  36.     mov  eax, cur_dir_path
  37.   @@:
  38.     cmp  byte[eax], 0
  39.      jz  @f
  40.     inc  eax
  41.      jmp @b
  42.   @@:
  43.     mov  dword[eax],    '.ini'
  44.  
  45.       invoke  ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
  46.     neg  eax
  47.     add  [time_wait_limit],    eax
  48.       invoke  ini.get_int, cur_dir_path, aPreferences, aSquare_side_length, 19
  49.     mov  [square_side_length],  eax
  50.       invoke  ini.get_int, cur_dir_path, aPreferences, aSpace_between_squares, 1
  51.     mov  [space_between_squares],   eax
  52.       invoke  ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
  53.  
  54.       invoke  ini.get_int, cur_dir_path, aTheme_name, aDecorations, 2
  55.     mov  [decorations], al
  56.       invoke  ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
  57.     or   [background_color],    eax
  58.     or   [window_style],    eax
  59.       invoke  ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x00aaaa00
  60.     or   [decorations_color],  eax
  61.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff
  62.     or   [snake_color], eax
  63.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x1111ff
  64.     or   [snake_head_color], eax
  65.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff
  66.     or   [snake_picture_color], eax
  67.       invoke  ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55
  68.     or   [version_picture_color],   eax
  69.       invoke  ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11
  70.     or   [pause_picture_color], eax
  71.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111
  72.     or   [game_over_picture_color], eax
  73.       invoke  ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11
  74.     or   [eat_color],   eax
  75.       invoke  ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777
  76.     or   [navigation_strings_color], eax
  77.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900
  78.     or   [game_over_strings_color],  eax
  79.       invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff
  80.     or   [score_string_color],   eax
  81.       invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff
  82.     or   [hiscore_string_color],   eax
  83.       invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff
  84.     or   [champion_string_color],   eax
  85.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44
  86.     or   [game_over_hiscore_color], eax
  87.       invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff
  88.     or   [score_number_color],   eax
  89.       invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff
  90.     or   [hiscore_number_color],   eax
  91.       invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff
  92.     or   [champion_name_color],   eax
  93.       invoke  ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00
  94.     or   [edit1+0x10],  eax
  95.  
  96.     mov  eax, [background_color]
  97.     mov  [edit1+0x0C],  eax
  98.     mov  [edit1+0x14],  eax
  99.     mov  [edit1+0x18],  eax
  100.     mov  eax, [game_over_hiscore_color]
  101.     mov  [edit1+0x1C],  eax
  102.  
  103.       call      Set_geometry
  104.  
  105. include 'first_menu.asm'            ; First menu body and functions
  106. include 'level.asm'                 ; Level body and functions (game process)
  107. include 'pause.asm'                 ; Pause body and functions
  108. include 'game_over.asm'             ; Game_over body and functions
  109.  
  110. ;;===Some_functions============================================================================================================
  111.  
  112. Exit:
  113.     ;;===Exit==================================================================================================================
  114.  
  115.     or  eax,    -1
  116.     int 0x40
  117.    
  118.     ;;---Exit------------------------------------------------------------------------------------------------------------------
  119.  
  120.  
  121. Set_geometry:
  122.     ;;===Set_geometry==========================================================================================================
  123.  
  124.     mov  eax, [space_between_squares]
  125.     add  eax, [square_side_length]
  126.     mov  [g_s],   eax
  127.  
  128.     mov  eax, [g_s]
  129.     shr  eax, 1
  130.     mov  ebx, eax
  131.     shr  ebx, 1
  132.     add  eax, ebx
  133.     mov  [g_e], eax
  134.  
  135.     mov  eax, [g_s]
  136.     add  eax, [g_e]
  137.     mov  [gbxm1],   eax
  138.  
  139.     mov  eax, [g_e]
  140.     add  eax, 25
  141.     mov  [gbym1],   eax
  142.  
  143.     mov  eax, [g_w]
  144.     mul  word[g_h]
  145.     mov  [gw_mul_gh],   eax
  146.  
  147.     mov  edx, [g_w]
  148.     mov  eax, [g_s]
  149.     mul  dx
  150.     mov  [gw_mul_gs],   eax
  151.  
  152.     mov  edx, [g_h]
  153.     mov  eax, [g_s]
  154.     mul  dx
  155.     mov  [gh_mul_gs],   eax
  156.  
  157.     mov  eax, [gbxm1]
  158.     add  eax, [gw_mul_gs]
  159.     mov  [gbxm1_plus_gw_mul_gs],    eax
  160.  
  161.     mov  eax, [gbym1]
  162.     add  eax, [gh_mul_gs]
  163.     mov  [gbym1_plus_gh_mul_gs],    eax
  164.  
  165.     mov  eax, [g_s]
  166.     shl  eax, 16
  167.     add  eax, [g_s]
  168.     mov  [gs_shl16_gs], eax
  169.  
  170.     mov  eax, [gbxm1]
  171.     shl  eax, 16
  172.     add  eax, [gbxm1]
  173.     mov  [gbxm1_shl16_gbxm1],   eax
  174.  
  175.     mov  eax, [gbym1]
  176.     shl  eax, 16
  177.     add  eax, [gbym1]
  178.     mov  [gbym1_shl16_gbym1],   eax
  179.  
  180.  
  181.     mov  eax, [gw_mul_gs]
  182.     add  eax, [gbxm1]
  183.     add  eax, [gbxm1]
  184.     add  eax, 5*2                                   ; skin width
  185.     mov  [window_width],    eax
  186.  
  187.     mov  eax, [gh_mul_gs]
  188.     add  eax, [gbym1]
  189.     add  eax, [g_e]
  190.     add  eax, 30
  191.     add  eax, 22+5                                  ; skin height
  192.     mov  [window_height],   eax
  193.  
  194.       mcall     48, 5
  195.     mov  dx,  ax
  196.     shr  eax, 16
  197.     sub  dx,  ax
  198.     cmp  dx, word[window_width]                     ; does window fit to work area width?
  199.      jnl @f
  200.     dec  [square_side_length]
  201. ;    dps  'snake: Window does not fit to screen.'
  202. ;    newline
  203. ;    dps  'Square_side_length was decreased.'
  204. ;    newline
  205. ;    dps  'Check you config file! (snake.ini)'
  206. ;    newline
  207.      jmp Set_geometry
  208.   @@:
  209.  
  210.     mov  cx,  bx
  211.     shr  ebx, 16
  212.     sub  cx,  bx
  213.     cmp  cx, word[window_height]                     ; does window fit to work area height?
  214.      jnl @f
  215.     dec  [square_side_length]
  216. ;    dps  'snake: Window does not fit to screen.'
  217. ;    newline
  218. ;    dps  'Square_side_length was decreased.'
  219. ;    newline
  220. ;    dps  'Check you config file! (snake.ini)'
  221. ;    newline
  222.      jmp Set_geometry
  223.   @@:
  224.  
  225.     sub  dx,  word[window_width]
  226.     shr  dx,  1
  227.     mov  word[wp_x],    dx
  228.     sub  cx,  word[window_height]
  229.     shr  cx,  1
  230.     mov  dx,  cx
  231.     shr  cx,  1
  232.     add  cx,  dx
  233.     mov  word[wp_y],    cx
  234.  
  235.     mov  [top_strings], 8
  236.     mov  eax, [window_height]
  237.     sub  eax, 50
  238.     mov  [bottom_top_strings],  eax
  239.     add  eax, 6
  240.     mov  [bottom_middle_strings],  eax
  241.     add  eax, 6
  242.     mov  [bottom_bottom_strings],  eax
  243.  
  244.     sub  eax, 4
  245.     mov  [edit1+0x08],  eax
  246.  
  247.     ret
  248.  
  249.     ;;---Set_geometry------------------------------------------------------------------------------------------------------
  250.  
  251.  
  252. Draw_decorations:
  253.     ;;===Draw_decorations==================================================================================================
  254.  
  255.     mov  al, [decorations]
  256.     dec  al
  257.      jz  grid_lines
  258.     dec  al
  259.      jz  grid_lines_with_ends
  260.     dec  al
  261.      jz  grid_lines_with_corners
  262.     dec  al
  263.      jz  grid_dots
  264.     dec  al
  265.      jz  borders_lines
  266.     dec  al
  267.      jz  borders_lines_with_corners
  268.     dec  al
  269.      jz  borders_dots
  270.     dec  al
  271.      jz  corners_dots
  272.     dec  al
  273.      jz  corners_inner
  274.     dec  al
  275.      jz  corners_outer
  276.     dec  al
  277.      jz  corners_crosses
  278.     ret
  279.  
  280.  
  281.   grid_lines:
  282.  
  283.     mov  eax, 38
  284. ;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
  285.     mov  ebx, [gbxm1_shl16_gbxm1]
  286. ;mov  ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
  287.     mov  ecx, [gbym1_shl16_gbym1]
  288.     add  ecx, [gh_mul_gs]
  289.     mov  edx, [decorations_color]
  290.     mov  esi, [g_w]
  291.     add  esi, 1
  292.  
  293.   @@:
  294.       mcall
  295.     add  ebx, [gs_shl16_gs]
  296.     dec  esi
  297.      jnz @b
  298.  
  299. ;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
  300.     mov  ebx, [gbxm1_shl16_gbxm1]
  301.     add  ebx, [gw_mul_gs]
  302.     mov  ecx, [gbym1_shl16_gbym1]
  303.     mov  esi, [g_h]
  304.     add  esi, 1
  305.    
  306.   @@:
  307.       mcall
  308.     add  ecx, [gs_shl16_gs]
  309.     dec  esi
  310.      jnz @b
  311.  
  312.     ret
  313.  
  314.  
  315.   grid_lines_with_ends:
  316.  
  317.     mov  eax, 38
  318.     mov  ebx, [gbxm1_shl16_gbxm1]
  319.     mov  ecx, [gbym1]
  320.     sub  ecx, [g_e]
  321.     shl  ecx, 16
  322.     add  ecx, [gbym1_plus_gh_mul_gs]
  323.     add  ecx, [g_e]
  324.     mov  edx, [decorations_color]
  325.     mov  esi, [g_w]
  326.     add  esi, 1
  327.  
  328.   @@:
  329.       mcall
  330.     add  ebx, [gs_shl16_gs]
  331.     dec  esi
  332.      jnz @b
  333.  
  334.     mov  ebx, [gbxm1]
  335.     sub  ebx, [g_e]
  336.     shl  ebx, 16
  337.     add  ebx, [gbxm1_plus_gw_mul_gs]
  338.     add  ebx, [g_e]
  339.     mov  ecx, [gbym1_shl16_gbym1]
  340.     mov  esi, [g_h]
  341.     add  esi, 1
  342.    
  343.   @@:
  344.       mcall
  345.     add  ecx, [gs_shl16_gs]
  346.     dec  esi
  347.      jnz @b
  348.  
  349.     ret
  350.  
  351.  
  352.   grid_lines_with_corners:
  353.  
  354.       call      grid_lines
  355.       call      corners_outer
  356.  
  357.     ret
  358.  
  359.  
  360.   grid_dots:
  361.  
  362.     mov  eax, 1
  363.     mov  ebx, [gbxm1]
  364.     mov  ecx, [gbym1]
  365.     mov  edx, [decorations_color]
  366.  
  367.   @@:
  368.       mcall
  369.     add  ebx, [g_s]
  370.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  371.      jng @b
  372.     add  ecx, [g_s]
  373.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  374.      jg  @f
  375.     mov  ebx, [gbxm1]
  376.      jmp @b
  377.  
  378.   @@:
  379.     ret
  380.  
  381.  
  382.   borders_lines:
  383.  
  384.     mov  eax, 38
  385.     mov  ebx, [gbxm1_shl16_gbxm1]
  386.     mov  ecx, [gbym1_shl16_gbym1]
  387.     add  ecx, [gh_mul_gs]
  388.     mov  edx, [decorations_color]
  389.       mcall
  390.  
  391.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  392.     shl  ebx, 16
  393.     add  ebx, [gbxm1_plus_gw_mul_gs]
  394.       mcall
  395.  
  396.     mov  ebx, [gbxm1_shl16_gbxm1]
  397.     add  ebx, [gw_mul_gs]
  398.     mov  ecx, [gbym1_shl16_gbym1]
  399.       mcall
  400.  
  401.     mov  ecx, [gbym1_plus_gh_mul_gs]
  402.     shl  ecx, 16
  403.     add  ecx, [gbym1_plus_gh_mul_gs]
  404.       mcall
  405.  
  406.     ret
  407.  
  408.  
  409.   borders_lines_with_corners:
  410.  
  411.       call      borders_lines
  412.       call      corners_outer
  413.  
  414.     ret
  415.  
  416.  
  417.   borders_dots:
  418.  
  419.     mov  eax, 1
  420.     mov  ebx, [gbxm1]
  421.     mov  ecx, [gbym1]
  422.     mov  edx, [decorations_color]
  423.   @@:
  424.       mcall
  425.     add  ebx, [g_s]
  426.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  427.      jng @b
  428.  
  429.     mov  ebx, [gbxm1]
  430.     mov  ecx, [gbym1_plus_gh_mul_gs]
  431.   @@:
  432.       mcall
  433.     add  ebx, [g_s]
  434.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  435.      jng @b
  436.  
  437.     mov  ebx, [gbxm1]
  438.     mov  ecx, [gbym1]
  439.   @@:
  440.       mcall
  441.     add  ecx, [g_s]
  442.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  443.      jng @b
  444.  
  445.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  446.     mov  ecx, [gbym1]
  447.   @@:
  448.       mcall
  449.     add  ecx, [g_s]
  450.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  451.      jng @b
  452.  
  453.     ret
  454.  
  455.  
  456.   corners_dots:
  457.  
  458.     mov  eax, 13
  459.     mov  ebx, [gbxm1]
  460.     dec  ebx
  461.     shl  ebx, 16
  462.     add  ebx, 2
  463.     mov  ecx, [gbym1]
  464.     dec  ecx
  465.     shl  ecx, 16
  466.     add  ecx, 2
  467.     mov  edx, [decorations_color]
  468.       mcall
  469.  
  470.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  471.     shl  ebx, 16
  472.     add  ebx, 2
  473.       mcall
  474.  
  475.     mov  ebx, [gbxm1]
  476.     dec  ebx
  477.     shl  ebx, 16
  478.     add  ebx, 2
  479.     mov  ecx, [gbym1_plus_gh_mul_gs]
  480.     shl  ecx, 16
  481.     add  ecx, 2
  482.       mcall
  483.  
  484.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  485.     shl  ebx, 16
  486.     add  ebx, 2
  487.       mcall
  488.  
  489.     ret
  490.  
  491.  
  492.   corners_inner:
  493.  
  494.     mov  eax, 38
  495.     mov  ebx, [gbxm1_shl16_gbxm1]
  496.     add  ebx, [g_e]
  497.     mov  ecx, [gbym1_shl16_gbym1]
  498.     mov  edx, [decorations_color]
  499.       mcall
  500.  
  501.     mov  ecx, [gbym1_plus_gh_mul_gs]
  502.     shl  ecx, 16
  503.     add  ecx, [gbym1_plus_gh_mul_gs]
  504.       mcall
  505.  
  506.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  507.     sub  ebx, [g_e]
  508.     shl  ebx, 16
  509.     add  ebx, [gbxm1_plus_gw_mul_gs]
  510.       mcall
  511.  
  512.     mov  ecx, [gbym1_shl16_gbym1]
  513.       mcall
  514.  
  515.     mov  ebx, [gbxm1_shl16_gbxm1]
  516.     mov  ecx, [gbym1_shl16_gbym1]
  517.     add  ecx, [g_e]
  518.       mcall
  519.  
  520.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  521.     shl  ebx, 16
  522.     add  ebx, [gbxm1_plus_gw_mul_gs]
  523.       mcall
  524.  
  525.     mov  ecx, [gbym1_plus_gh_mul_gs]
  526.     sub  ecx, [g_e]
  527.     shl  ecx, 16
  528.     add  ecx, [gbym1_plus_gh_mul_gs]
  529.       mcall
  530.  
  531.     mov  ebx, [gbxm1_shl16_gbxm1]
  532.       mcall
  533.  
  534.     ret
  535.  
  536.  
  537.   corners_outer:
  538.  
  539.     mov  eax, 38
  540.     mov  ebx, [gbxm1_shl16_gbxm1]
  541.     sub  ebx, [g_e]
  542.     mov  ecx, [gbym1_shl16_gbym1]
  543.     mov  edx, [decorations_color]
  544.       mcall
  545.  
  546.     mov  ecx, [gbym1_plus_gh_mul_gs]
  547.     shl  ecx, 16
  548.     add  ecx, [gbym1_plus_gh_mul_gs]
  549.       mcall
  550.  
  551.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  552.     shl  ebx, 16
  553.     add  ebx, [gbxm1_plus_gw_mul_gs]
  554.     add  ebx, [g_e]
  555.       mcall
  556.  
  557.     mov  ecx, [gbym1_shl16_gbym1]
  558.       mcall
  559.  
  560.     mov  ebx, [gbxm1_shl16_gbxm1]
  561.     mov  ecx, [gbym1_shl16_gbym1]
  562.     sub  ecx, [g_e]
  563.       mcall
  564.  
  565.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  566.     shl  ebx, 16
  567.     add  ebx, [gbxm1_plus_gw_mul_gs]
  568.       mcall
  569.  
  570.     mov  ecx, [gbym1_plus_gh_mul_gs]
  571.     shl  ecx, 16
  572.     add  ecx, [gbym1_plus_gh_mul_gs]
  573.     add  ecx, [g_e]
  574.       mcall
  575.  
  576.     mov  ebx, [gbxm1_shl16_gbxm1]
  577.       mcall
  578.  
  579.     ret
  580.  
  581.  
  582.   corners_crosses:
  583.  
  584.       call      corners_inner
  585.       call      corners_outer
  586.  
  587.     ret
  588.  
  589.  
  590.     ;;---Draw_decorations--------------------------------------------------------------------------------------------------
  591.  
  592.  
  593. Draw_square:
  594.     ;;===Draw_square=======================================================================================================
  595.     ;; bl   -   x_coord
  596.     ;; bh   -   y_coord
  597.     ;; edx  -   color
  598.  
  599.     mov  cl,  bh
  600.  
  601.     mov  al,  byte[g_s]
  602.     mul  bl
  603.     mov  bx,  ax
  604.     add  bx,  word[gbxm1]
  605.     inc  bx
  606.     shl  ebx, 16
  607.     add  ebx, [g_s]
  608.     dec  ebx
  609.  
  610.     mov  al,  byte[g_s]
  611.     mul  cl
  612.     mov  cx,  ax
  613.     add  cx,  word[gbym1]
  614.     inc  cx
  615.     shl  ecx, 16
  616.     add  ecx, [g_s]
  617.     dec  ecx
  618.        
  619.       mcall     13
  620.  
  621.     ret
  622.  
  623.     ;;---Draw_square-------------------------------------------------------------------------------------------------------
  624.    
  625.    
  626. Draw_menu_esc:
  627.     ;;===Draw_menu_esc=====================================================================================================
  628.  
  629.     mov  ebx, [window_width]
  630.     shr  ebx, 1
  631.     sub  ebx, (string_apply_name_enter-string_menu_esc-1)*3+6
  632.     shl  ebx, 16
  633.     add  ebx, dword[top_strings]
  634.       mcall     4, ,[navigation_strings_color],string_menu_esc
  635.    
  636.     ret
  637.    
  638.     ;;---Draw_menu_esc-----------------------------------------------------------------------------------------------------
  639.  
  640.  
  641. Draw_score_string:
  642.     ;;===Draw_score_string=================================================================================================
  643.  
  644.     mov  ebx, [window_width]
  645.     shr  ebx, 3
  646.     sub  ebx, 5
  647.     shl  ebx, 16
  648.     add  ebx, dword[bottom_top_strings]
  649.       mcall     4, ,[score_string_color],string_score
  650.      
  651.     ret
  652.    
  653.     ;;---Draw_score_string-------------------------------------------------------------------------------------------------
  654.    
  655.    
  656. Draw_score_number:
  657.     ;;===Draw_score_number=================================================================================================
  658.  
  659.     mov  edx, [window_width]
  660.     shr  edx, 3
  661.     sub  edx, 6
  662.     add  edx, (string_hi_score-string_score)*6
  663.     shl  edx, 16
  664.     add  edx, dword[bottom_top_strings]
  665.       mcall     47,0x00070000,[score], ,[score_number_color],[background_color]
  666.        
  667.     ret
  668.        
  669.     ;;---Draw_score_number-------------------------------------------------------------------------------------------------
  670.  
  671.  
  672. Draw_hiscore_string:
  673.     ;;===Draw_hiscore_string===============================================================================================
  674.  
  675.     mov  ebx, [window_width]
  676.     shr  ebx, 3
  677.     neg  ebx
  678.     add  ebx, [window_width]
  679.     sub  ebx, (string_player-string_hi_score)*6+7*6+5
  680.     shl  ebx, 16
  681.     add  ebx, dword[bottom_top_strings]
  682.       mcall     4, ,[hiscore_string_color],string_hi_score
  683.    
  684.     ret
  685.    
  686.     ;;---Draw_hiscore_string-----------------------------------------------------------------------------------------------
  687.  
  688.    
  689. Draw_hiscore_number:
  690.     ;;===Draw_hiscore_number===============================================================================================
  691.  
  692.     mov  edx, [window_width]
  693.     shr  edx, 3
  694.     neg  edx
  695.     add  edx, [window_width]
  696.     sub  edx, 7*6+6
  697.     shl  edx, 16
  698.     add  edx, dword[bottom_top_strings]
  699.       mcall     47,0x00070000,[hi_score], ,[hiscore_number_color]
  700.    
  701.     ret
  702.    
  703.     ;;---Draw_hiscore_number-----------------------------------------------------------------------------------------------
  704.    
  705.    
  706. Draw_champion_string:
  707.     ;;===Draw_champion_string==============================================================================================
  708.  
  709.     mov  ebx, [window_width]
  710.     shr  ebx, 3
  711.     neg  ebx
  712.     add  ebx, [window_width]
  713.     sub  ebx, (string_level-string_champion)*6+7*6+5
  714.     shl  ebx, 16
  715.     add  ebx, dword[bottom_bottom_strings]
  716.       mcall     4, ,[champion_string_color],string_champion
  717.  
  718.     ret
  719.  
  720.     ;;---Draw_champion_string----------------------------------------------------------------------------------------------
  721.  
  722.  
  723. Draw_champion_name:
  724.     ;;===Draw_champion_name================================================================================================
  725.  
  726.     mov  ebx, [window_width]
  727.     shr  ebx, 3
  728.     neg  ebx
  729.     add  ebx, [window_width]
  730.     sub  ebx, (press_to_start-champion_name)*6+7*6+6
  731.     add  ebx, (press_to_start-champion_name)*6
  732.     shl  ebx, 16
  733.     add  ebx, dword[bottom_bottom_strings]
  734.       mcall     4, ,[champion_name_color],champion_name
  735.  
  736.     ret
  737.  
  738.     ;;---Draw_champion_name------------------------------------------------------------------------------------------------
  739.  
  740.  
  741. Draw_picture:
  742.     ;;===Draw_picture======================================================================================================
  743.     ;;  in  :
  744.     ;;           ax =   number of left square *0x100+ picture width (in squares)
  745.     ;;           cx =   number of top square *0x100+ picture height (in squares)
  746.     ;;          edx =   picture color
  747.     ;;          esi =   pointer to picture data
  748.     ;;
  749.  
  750.     add  al,  ah
  751.     add  cl,  ch
  752.     mov  bh,  ch
  753.  
  754.   .draw:
  755.     mov  bl,  ah
  756.    
  757.   .loop:
  758.     cmp  byte[esi], 0
  759.      jz  @f
  760.     push eax ebx ecx esi
  761.       call      Draw_square
  762.     pop  esi ecx ebx eax
  763.    
  764.   @@:
  765.     inc  esi
  766.     inc  bl
  767.     cmp  bl,  al
  768.      jne .loop
  769.    
  770.     inc  bh
  771.     cmp  bh,  cl
  772.      jne .draw
  773.     ret
  774.  
  775.     ;;---Draw_picture------------------------------------------------------------------------------------------------------
  776.  
  777.  
  778. Draw_on_map:
  779.     ;;===Draw_on_map=======================================================================================================
  780.     ;;  in  :
  781.     ;;           al =   x coord
  782.     ;;           ah =   y coord
  783.     ;;           cl =   value to draw
  784.     ;;
  785.  
  786.     and  eax, 0x0000ffff
  787.     xor  bx,  bx
  788.     mov  bl,  al
  789.     shr  ax,  8
  790.     mov  dx,  word[g_w]
  791.     mul  dx
  792.     add  ax,  bx
  793.     mov  edi, field_map
  794.     add  edi, eax
  795.     mov  [edi], cl
  796.  
  797.     ret
  798.  
  799.     ;;---Draw_on_map-------------------------------------------------------------------------------------------------------
  800.  
  801.  
  802. Get_from_map:
  803.     ;;===Get_from_map======================================================================================================
  804.     ;;  in  :
  805.     ;;           al =   x coord
  806.     ;;           ah =   y coord
  807.     ;;  out :
  808.     ;;           bl =   value on map
  809.     ;;
  810.  
  811.     push eax
  812.    
  813.     and  eax, 0x0000ffff
  814.     xor  bx,  bx
  815.     mov  bl,  al
  816.     shr  ax,  8
  817.     mov  dx,  word[g_w]
  818.     mul  dx
  819.     add  ax,  bx
  820.     mov  edi, field_map
  821.     add  edi, eax
  822.     mov  bl,  [edi]
  823.  
  824.     pop  eax
  825.  
  826.     ret
  827.  
  828.     ;;---Get_from_map------------------------------------------------------------------------------------------------------
  829.  
  830.  
  831. ;;---Some_functions--------------------------------------------------------------------------------------------------------
  832.  
  833.  
  834. ;;===Variables=============================================================================================================
  835.  
  836. window_title                db      'Snake',0
  837. window_style                dd      0x34000000
  838. time_before_waiting         dd      0x0
  839. time_to_wait                dd      0x0
  840. time_wait_limit             dd      101
  841.  
  842.  
  843. gbxm1                       dd      30
  844. gbym1                       dd      30
  845. g_w                         dd      29
  846. g_h                         dd      15
  847. g_e                         dd      13
  848.  
  849. field_map                   db      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  850.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  851.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  852.                                     0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  853.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  854.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  855.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  856.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  857.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  858.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  859.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  860.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  861.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  862.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  863.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  864.  
  865. string_score                db      'SCORE :',0
  866. string_hi_score             db      'HI-SCORE :',0
  867. string_player               db      'PLAYER :',0
  868. string_champion             db      'CHAMPION :',0
  869. string_level                db      'LEVEL :',0
  870. string_pause_space          db      'PAUSE - ',0x27,'SPACE',0x27,0
  871. string_resume_space         db      'RESUME - ',0x27,'SPACE',0x27,0
  872. string_menu_esc             db      'MENU - ',0x27,'ESC',0x27,0
  873. string_apply_name_enter     db      'APPLY NAME - ',0x27,'ENTER',0x27,0
  874. press_to_start              db      'PRESS ',0x27,'SPACE',0x27,' OR ',0x27,'ENTER',0x27,' TO START',0
  875. press_esc_to_exit           db      'PRESS ',0x27,'ESC',0x27,' TO EXIT',0
  876. ;press_F2_to_options         db      'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0
  877.  
  878. string_congratulations      db      '   Congratulations!!! New hi-score is :',0
  879. string_enter_your_name      db      'You are the champion! Enter your name :',0
  880. strings_end:
  881.  
  882. snake_dots                  db      3,3, 4,3, 5,3,  865    dup (0)
  883. snake_napravlenie           db      3
  884. snake_napravlenie_next      db      3
  885. snake_length_x2             dd      6
  886.  
  887. score                       dd      0
  888. hi_score                    dd      777
  889. is_new_record               db      0
  890.  
  891. action                      db      0
  892.  
  893. picture_first_menu_snake    db      1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,\
  894.                                     1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
  895.                                     1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
  896.                                     1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,\
  897.                                     0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
  898.                                     1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1
  899.  
  900. picture_first_menu_version  db      1,1,1,1,0,0,0,1,1,1,1,\
  901.                                     1,0,0,1,0,0,0,0,0,0,1,\
  902.                                     1,0,0,1,0,0,0,0,1,1,1,\
  903.                                     1,0,0,1,0,0,0,0,0,0,1,\
  904.                                     1,1,1,1,0,1,0,1,1,1,1
  905.  
  906. picture_pause               db      0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  907.                                     0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,\
  908.                                     0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,\
  909.                                     0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,\
  910.                                     0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,\
  911.                                     0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0
  912.  
  913. picture_game_over           db      0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  914.                                     0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,\
  915.                                     1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,\
  916.                                     1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,\
  917.                                     1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,\
  918.                                     0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,\
  919.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  920.                                     0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  921.                                     0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,\
  922.                                     0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,\
  923.                                     0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,0,\
  924.                                     0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,0,\
  925.                                     0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0
  926.  
  927. start_map                   db      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  928.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  929.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  930.                                     0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  931.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  932.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  933.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  934.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  935.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  936.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  937.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  938.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  939.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  940.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
  941.                                     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  942.  
  943. background_color            dd      0x000000
  944. decorations_color           dd      0x00000000
  945. snake_color                 dd      0x000000
  946. snake_head_color            dd      0x000000
  947. snake_picture_color         dd      0x000000
  948. version_picture_color       dd      0x000000
  949. pause_picture_color         dd      0x000000
  950. game_over_picture_color     dd      0x000000
  951. eat_color                   dd      0x000000
  952. navigation_strings_color    dd      0x80000000
  953. game_over_strings_color     dd      0x80000000
  954. score_string_color          dd      0x80000000
  955. hiscore_string_color        dd      0x80000000
  956. champion_string_color       dd      0x80000000
  957. game_over_hiscore_color     dd      0x80000000
  958. score_number_color          dd      0x40000000
  959. hiscore_number_color        dd      0x00000000
  960. champion_name_color         dd      0x80000000
  961.  
  962. align 4
  963. @IMPORT:
  964.  
  965. library \
  966.         libini      ,   'libini.obj'        ,\
  967.         box_lib     ,   'box_lib.obj'
  968.  
  969. import  libini,\
  970.     ini.get_str     ,   'ini_get_str'       ,\
  971.     ini.get_int     ,   'ini_get_int'       ,\
  972.     ini.set_str     ,   'ini_set_str'       ,\
  973.     ini.set_int     ,   'ini_set_int'       ,\
  974.     ini.get_color   ,   'ini_get_color'
  975.  
  976. import  box_lib,\
  977.     edit_box.draw   ,   'edit_box'          ,\
  978.     edit_box.key    ,   'edit_box_key'      ,\
  979.     edit_box.mouse  ,   'edit_box_mouse'
  980.  
  981. bFirstDraw  db  0
  982.  
  983. aPreferences                db      'Preferences',0
  984. aSpeed                      db      'Speed',0
  985. aSquare_side_length         db      'Square_side_length',0
  986. aSpace_between_squares      db      'Space_between_squares',0
  987. aTheme                      db      'Theme',0
  988.  
  989. aTheme_name                 db      32  dup (0)
  990. aDecorations                db      'Decorations',0
  991. aBackground_color           db      'Background_color',0
  992. aDecorations_color          db      'Decorations_color',0
  993. aSnake_color                db      'Snake_color',0
  994. aSnake_head_color           db      'Snake_head_color',0
  995. aSnake_picture_color        db      'Snake_picture_color',0
  996. aVersion_picture_color      db      'Version_picture_color',0
  997. aPause_picture_color        db      'Pause_picture_color',0
  998. aGame_over_picture_color    db      'Game_over_picture_color',0
  999. aEat_color                  db      'Eat_color',0
  1000. aNavigation_strings_color   db      'Navigation_string_color',0
  1001. aGame_over_strings_color    db      'Game_over_string_color',0
  1002. aScore_string_color         db      'Score_string_color',0
  1003. aHiscore_string_color       db      'Hiscore_string_color',0
  1004. aChampion_string_color      db      'Champion_string_color',0
  1005. aGame_over_hiscore_color    db      'Game_over_hiscore_color',0
  1006. aScore_number_color         db      'Score_number_color',0
  1007. aHiscore_number_color       db      'Hiscore_number_color',0
  1008. aChampion_name_color        db      'Champion_name_color',0
  1009. aEdit_box_selection_color   db      'Edit_box_selection_color',0
  1010.  
  1011. aScore                      db      'Score',0
  1012. aHiscore                    db      'Hiscore',0
  1013. aChampion_name              db      'Champion_name',0
  1014.  
  1015. edit1 edit_box 65,397,0x0,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1
  1016.  
  1017. hed                         db      '',0
  1018. ;;---Variables-------------------------------------------------------------------------------------------------------------
  1019. i_end:
  1020. hed_end:
  1021. rb  256
  1022. mouse_dd                    rd      1
  1023.  
  1024. decorations                 rb      1
  1025. number_of_free_dots         rw      1
  1026.  
  1027. eat                         rb      1
  1028.  
  1029. square_side_length          rd      1
  1030. space_between_squares       rd      1
  1031. g_s                         rd      1
  1032.  
  1033. window_width                rd      1
  1034. window_height               rd      1
  1035. wp_x                        rd      1
  1036. wp_y                        rd      1
  1037.  
  1038. gw_mul_gh                   rd      1
  1039. gw_mul_gs                   rd      1
  1040. gh_mul_gs                   rd      1
  1041. gbxm1_plus_gw_mul_gs        rd      1
  1042. gbym1_plus_gh_mul_gs        rd      1
  1043. gs_shl16_gs                 rd      1
  1044. gbxm1_shl16_gbxm1           rd      1
  1045. gbym1_shl16_gbym1           rd      1
  1046.  
  1047. bottom_top_strings          rd      1
  1048. bottom_middle_strings       rd      1
  1049. bottom_bottom_strings       rd      1
  1050. top_strings                 rd      1
  1051.  
  1052. champion_name               rb      16
  1053.  
  1054. cur_dir_path                rb      4096
  1055. @PARAMS                     rb      4096
  1056.  
  1057. rb 4096
  1058. stacktop:
  1059. d_end: