Subversion Repositories Kolibri OS

Rev

Rev 1760 | Rev 2061 | 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  0x01,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. WINDOW_MODE_WINDOWED        equ     0
  20. WINDOW_MODE_FULLSCREEN      equ     1
  21.  
  22. GRID_WIDTH                  equ     28
  23. GRID_HEIGHT                 equ     14
  24.  
  25. MIN_SQUARE_SIDE_LENGTH      equ     9
  26.  
  27. SCORE_EAT                   equ     100
  28.  
  29. LEFT                        equ     0
  30. DOWN                        equ     1
  31. UP                          equ     2
  32. RIGHT                       equ     3
  33.  
  34. struct  LEVEL
  35.     field                   db      4*GRID_HEIGHT  dup (?)
  36.     snake_dots              db      6   dup (?)
  37.     snake_direction         dd      ?
  38.     snake_direction_next    dd      ?
  39.     number_of_stones        dd      ?
  40.     name                    dd      ?
  41. ends
  42.  
  43. CLASSIC_MODE                equ     0
  44. LEVELS_MODE                 equ     1
  45.  
  46. CLASSIC_MODE_FIRST_LEVEL    equ     0
  47. LEVELS_MODE_FIRST_LEVEL     equ     1
  48.  
  49. EAT_TO_END_LEVEL            equ     7
  50. PAUSE_BETWEEN_LEVELS        equ     200
  51. PAUSE_WHILE_DRAWING_SPLASH  equ     3
  52.  
  53. CHAMPION_NAME_LENGTH        equ     15
  54. LAST_LEVEL_NUMBER           equ     36
  55.  
  56. START_LIVES                 equ     3
  57.  
  58. ;;---Define_chapter------------------------------------------------------------------------------------------------------------
  59.  
  60. start:
  61.  
  62. stdcall dll.Load,@IMPORT
  63.     or   eax, eax
  64.     jnz  Exit
  65.    
  66. align 4
  67.  
  68.     mov  edi, cur_dir_path
  69.     mov  al,  0
  70.     mov  ecx, 4096
  71.     repne scasb
  72.     mov  dword[edi-1],    '.ini'
  73.  
  74.       invoke  ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
  75.     neg  eax
  76.     add  [time_wait_limit],    eax
  77.     mov  ebx, [time_wait_limit]
  78.     mov  [time_wait_limit_const],  ebx
  79.     sub  ebx, 4
  80.     mov  eax, 200
  81.     div  bl
  82.     mov  byte[speed_up_counter],    al
  83.     mov  byte[speed_up_counter+1],  al
  84.       invoke  ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
  85.       invoke  ini.get_int, cur_dir_path, aPreferences, aSmart_reverse, 0
  86.     mov  [smart_reverse],   eax
  87.       invoke  ini.get_int, cur_dir_path, aPreferences, aShow_lives_style, 2
  88.     mov  [show_lives_style],    eax
  89.       invoke  ini.get_int, cur_dir_path, aPreferences, aDraw_level_name_in_window_title, 1
  90.     mov  [draw_level_name_in_window_title], eax
  91.       invoke  ini.get_str, cur_dir_path, aPreferences, aSeparating_symbol, separating_symbol, 3, default_separating_symbol
  92.  
  93.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aMove_left, 0x23, 0
  94.     mov  [shortcut_move_left],  al
  95.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aMove_down, 0x24, 0
  96.     mov  [shortcut_move_down],  al
  97.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aMove_up, 0x25, 0
  98.     mov  [shortcut_move_up],    al
  99.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aMove_right, 0x26, 0
  100.     mov  [shortcut_move_right], al
  101.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aReverse, 0x0F, 0
  102.     mov  [shortcut_reverse], al
  103.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aIncrease, 0x16, 0
  104.     mov  [shortcut_increase],   al
  105.       invoke  ini.get_shortcut, cur_dir_path, aShortcuts, aDecrease, 0x17, 0
  106.     mov  [shortcut_decrease],   al
  107.  
  108.       invoke  ini.get_int, cur_dir_path, aTheme_name, aDecorations, 3
  109.     mov  [decorations], eax
  110.       invoke  ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
  111.     or   [background_color],    eax
  112.     or   [window_style_windowed],   eax
  113.       invoke  ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0xAAAA00
  114.     or   [decorations_color],  eax
  115.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff
  116.     or   [snake_color], eax
  117.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff
  118.     or   [snake_head_color], eax
  119.       invoke  ini.get_color, cur_dir_path, aTheme_name, aLives_in_head_number_color, 0xff8800
  120.     or   [lives_in_head_number_color],  eax
  121.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff
  122.     or   [snake_picture_color], eax
  123.       invoke  ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55
  124.     or   [version_picture_color],   eax
  125.       invoke  ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11
  126.     or   [pause_picture_color], eax
  127.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111
  128.     or   [game_over_picture_color], eax
  129.       invoke  ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11
  130.     or   [you_win_picture_color],   eax
  131.       invoke  ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11
  132.     or   [eat_color],   eax
  133.       invoke  ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777
  134.     or   [navigation_strings_color], eax
  135.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900
  136.     or   [game_over_strings_color],  eax
  137.       invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff
  138.     or   [score_string_color],   eax
  139.       invoke  ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff
  140.     or   [level_string_color],  eax
  141.       invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff
  142.     or   [hiscore_string_color],   eax
  143.       invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff
  144.     or   [champion_string_color],   eax
  145.       invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44
  146.     or   [game_over_hiscore_color], eax
  147.       invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff
  148.     or   [score_number_color],   eax
  149.       invoke  ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff
  150.     or   [level_number_color],  eax
  151.       invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff
  152.     or   [hiscore_number_color],   eax
  153.       invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff
  154.     or   [champion_name_color],   eax
  155.       invoke  ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00
  156.     or   [edit1.shift_color],   eax
  157.       invoke  ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD
  158.     or   [button_color],    eax
  159.       invoke  ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000
  160.     or   [button_text_color],   eax
  161.       invoke  ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700
  162.     or   [stone_color], eax
  163.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00
  164.     or   [splash_background_color],    eax
  165.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000
  166.     or   [splash_level_number_color],   eax
  167.       invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000
  168.     or   [splash_level_string_color],   eax
  169.  
  170.       invoke  ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19
  171.     mov  [square_side_length],  eax
  172.       invoke  ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic
  173.       invoke  ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777
  174.     or   [hi_score_classic],    eax
  175.       invoke  ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels
  176.       invoke  ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777
  177.     or   [hi_score_levels], eax
  178.  
  179.     mov  eax, [background_color]
  180.     mov  [edit1.color], eax
  181.     mov  [edit1.focus_border_color],    eax
  182.     mov  [edit1.blur_border_color], eax
  183.     mov  eax, [game_over_hiscore_color]
  184.     mov  [edit1.text_color],    eax
  185.  
  186.       mcall     37,4,cursor_data,2                  ; load empty cursor (for "hiding" cursor while level_mode)
  187.     mov  [cursor_handle],   eax
  188.  
  189.     mov  eax, WINDOW_MODE_WINDOWED
  190.       call      Set_window_mode
  191.       mcall     0,0,0,0x51000000                    ; create empty window. Set_geometry will set all parameters
  192.       call      Set_geometry.by_hotkey
  193.       mcall     71,1,window_title
  194.  
  195. include 'first_menu.asm'            ; First menu body and functions
  196. include 'level.asm'                 ; Level body and functions (game process)
  197. include 'pause.asm'                 ; Pause body and functions
  198. include 'game_over.asm'             ; Game_over body and functions
  199.  
  200. ;;===Some_functions============================================================================================================
  201.  
  202.  
  203. Save_do_smth_else_and_exit:
  204.     ;;===Save_do_smth_else_and_exit============================================================================================
  205.  
  206.       mcall     37,6,[cursor_handle]                ; delete cursor
  207.  
  208.       invoke    ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length]
  209.  
  210.     mov  edi, champion_name_classic
  211.     xor  al,  al
  212.     mov  ecx, CHAMPION_NAME_LENGTH+1
  213.     cld
  214.     repne scasb
  215.     neg  ecx
  216.     add  ecx, CHAMPION_NAME_LENGTH
  217.       invoke    ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx
  218.       invoke    ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic]
  219.  
  220.     mov  edi, champion_name_levels
  221.     xor  al,  al
  222.     mov  ecx, CHAMPION_NAME_LENGTH+1
  223.     cld
  224.     repne scasb
  225.     neg  ecx
  226.     add  ecx, CHAMPION_NAME_LENGTH
  227.       invoke    ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx
  228.       invoke    ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels]
  229.  
  230.     ;;---Save_do_smth_else_and_exit--------------------------------------------------------------------------------------------
  231.  
  232.  
  233. Exit:
  234.     ;;===Exit==================================================================================================================
  235.  
  236.     or  eax,    -1
  237.     int 0x40
  238.    
  239.     ;;---Exit------------------------------------------------------------------------------------------------------------------
  240.  
  241.  
  242. Set_geometry:
  243.     ;;===Set_geometry==========================================================================================================
  244.  
  245.     cmp  [resized_by_hotkey],   1
  246.      je  .by_hotkey
  247.  
  248.     test [proc_info.wnd_state], 0x01
  249.      jnz .by_hotkey
  250.  
  251.       mcall     9,proc_info,-1
  252.     mov  eax, [proc_info.box.width]
  253.     cmp  eax, [window_width]
  254.      jne @f
  255.     mov  eax, [proc_info.box.height]
  256.     cmp  eax, [window_height]
  257.      jne @f
  258.      jmp .quit
  259.   @@:
  260.     mov  eax, [proc_info.box.width]
  261.     mov  [window_width],    eax
  262.     mov  eax, [proc_info.box.height]
  263.     mov  [window_height],   eax
  264.  
  265.   .by_mouse:                                    ; or any other kind of resizing. for example, double click on window title
  266.  
  267.     test [proc_info.wnd_state], 0x01
  268.      jnz .by_hotkey
  269.    
  270.  
  271.     cmp  [window_width],    250
  272.      jnl @f
  273.     mov  [window_width],    250
  274.   @@:
  275.     cmp  [window_height],   150
  276.      jnl @f
  277.     mov  [window_height],   150
  278.   @@:
  279.  
  280.       mcall     48,4
  281.     mov  ecx, [window_height]
  282.     sub  ecx, eax
  283.     sub  ecx, 5
  284.     sub  ecx, [g_e]
  285.     sub  ecx, [g_e]
  286.     sub  ecx, 25+30
  287.     mov  esi, ecx
  288.  
  289.     mov  eax, [window_width]
  290.     sub  eax, 5+5
  291.     sub  eax, [g_e]
  292.     sub  eax, [g_e]
  293.     sub  eax, [g_s]
  294.     sub  eax, [g_s]
  295.     mov  edi, eax
  296.  
  297.     mov  dx,  0
  298.     div  cx
  299.     cmp  ax,  2
  300.      jl  .fit_to_width
  301.  
  302.   .fit_to_height:
  303.     mov  eax, esi
  304.     mov  ebx, GRID_HEIGHT
  305.     div  bl
  306.     cmp  al,  MIN_SQUARE_SIDE_LENGTH
  307.      jnl @f
  308.     mov  al,  MIN_SQUARE_SIDE_LENGTH
  309.   @@:
  310.     dec al
  311.     mov byte[square_side_length],   al
  312.      jmp .by_hotkey
  313.  
  314.   .fit_to_width:
  315.     mov  eax, edi
  316.     mov  ebx, GRID_WIDTH
  317.     div  bl
  318.     cmp  al,  MIN_SQUARE_SIDE_LENGTH
  319.      jnl @f
  320.     mov  al,  MIN_SQUARE_SIDE_LENGTH
  321.   @@:
  322.     dec al
  323.     mov byte[square_side_length],   al
  324.      jmp .by_hotkey
  325.  
  326. ;     jmp .done
  327.  
  328.   .by_hotkey:
  329.       mcall     9,proc_info,-1
  330.     mov  [resized_by_hotkey],   0
  331.  
  332.     mov  eax, [square_side_length]
  333.     inc  eax                                            ; space between squares
  334.     mov  [g_s],   eax
  335.  
  336.     mov  eax, [g_s]
  337.     shr  eax, 1
  338.     mov  ebx, eax
  339.     shr  ebx, 1
  340.     add  eax, ebx
  341.     mov  [g_e], eax
  342.  
  343.     mov  edx, GRID_WIDTH
  344.     mov  eax, [g_s]
  345.     mul  dx
  346.     mov  [gw_mul_gs],   eax
  347.  
  348.     mov  edx, GRID_HEIGHT
  349.     mov  eax, [g_s]
  350.     mul  dx
  351.     mov  [gh_mul_gs],   eax
  352.  
  353.     mov  eax, [gw_mul_gs]
  354.     add  eax, [g_s]
  355.     add  eax, [g_s]
  356.     add  eax, [g_e]
  357.     add  eax, [g_e]
  358.     add  eax, 5*2                                   ; skin width
  359.     mov  esi, eax
  360.     test [proc_info.wnd_state], 0x01
  361.      jz  @f
  362.     mov  eax, [proc_info.box.width]
  363.   @@:
  364.     mov  [window_width],    eax
  365.  
  366.     sub  eax, [gw_mul_gs]
  367.     sub  eax, 5*2
  368.     shr  eax, 1
  369.     mov  [gbxm1],   eax
  370.  
  371.       mcall     48,4                                ; get skin header height
  372.     mov  ebx, eax
  373.     add  eax, [gh_mul_gs]
  374.     add  eax, [g_e]
  375.     add  eax, 25
  376.     add  eax, [g_e]
  377.     add  eax, 30
  378.     add  eax, 5                                      ; skin height (bottom part)
  379.     mov  edi, eax
  380.     test [proc_info.wnd_state], 0x01
  381.      jz  @f
  382.     mov  eax, [proc_info.box.height]
  383.   @@:
  384.     mov  [window_height],   eax
  385.  
  386.     sub  eax, [gh_mul_gs]
  387.     sub  eax, ebx
  388.     sub  eax, 5
  389.     sub  eax, 5
  390.    
  391.     shr  eax, 1
  392.     mov  [gbym1],   eax
  393.  
  394.     mov  eax, [g_s]
  395.     shl  eax, 16
  396.     add  eax, [g_s]
  397.     mov  [gs_shl16_gs], eax
  398.  
  399.     mov  eax, [gbxm1]
  400.     shl  eax, 16
  401.     add  eax, [gbxm1]
  402.     mov  [gbxm1_shl16_gbxm1],   eax
  403.  
  404.     mov  eax, [gbym1]
  405.     shl  eax, 16
  406.     add  eax, [gbym1]
  407.     mov  [gbym1_shl16_gbym1],   eax
  408.  
  409.     mov  eax, [gbxm1]
  410.     add  eax, [gw_mul_gs]
  411.     mov  [gbxm1_plus_gw_mul_gs],    eax
  412.  
  413.     mov  eax, [gbym1]
  414.     add  eax, [gh_mul_gs]
  415.     mov  [gbym1_plus_gh_mul_gs],    eax
  416.  
  417.       mcall     48, 5
  418.     mov  dx,  ax
  419.     shr  eax, 16
  420.     sub  dx,  ax
  421.     cmp  dx,  si                                    ; does window fit to work area width?
  422.      jnl @f
  423.     dec  [square_side_length]
  424.      jmp Set_geometry.by_hotkey
  425.   @@:
  426.  
  427.     mov  cx,  bx
  428.     shr  ebx, 16
  429.     sub  cx,  bx
  430.     cmp  cx,  di                                    ; does window fit to work area height?
  431.      jnl @f
  432.     dec  [square_side_length]
  433.      jmp Set_geometry.by_hotkey
  434.   @@:
  435.  
  436.     sub  dx,  si
  437.     shr  dx,  1
  438.     mov  word[wp_x],    dx
  439.     sub  cx,  word[window_height]
  440.     shr  cx,  1
  441.     mov  dx,  cx
  442.     shr  cx,  1
  443.     add  cx,  dx
  444.     mov  word[wp_y],    cx
  445.  
  446.     mov  [top_strings], 8
  447.     mov  eax, [window_height]
  448.     sub  eax, 50
  449.     mov  [bottom_top_strings],  eax
  450.     add  eax, 6
  451.     mov  [bottom_middle_strings],  eax
  452.     add  eax, 6
  453.     mov  [bottom_bottom_strings],  eax
  454.  
  455.     sub  eax, 4
  456.     mov  [edit1.top],   eax
  457.  
  458.  
  459.     mov  eax, [g_s]
  460.     shl  eax, 2
  461.     sub  eax, 2
  462.     mov  [button_width_short],  eax
  463.     mov  eax, [g_s]
  464.     shl  eax, 3
  465.     add  eax, [g_s]
  466.     sub  eax, 2
  467.     mov  [button_width_long],   eax
  468.     mov  eax, [g_s]
  469.     sub  eax, 2
  470.     mov  [button_height],   eax
  471.  
  472.     mov  bl,  0x10
  473.     mov  cl,  0x08
  474.  
  475.     mov  al,  byte[g_s]
  476.     mul  bl
  477.     mov  bx,  ax
  478.     add  bx,  word[gbxm1]
  479.     inc  bx
  480.  
  481.     mov  al,  byte[g_s]
  482.     mul  cl
  483.     mov  cx,  ax
  484.     add  cx,  word[gbym1]
  485.     inc  cx
  486.    
  487.     mov  [button_x_left],   ebx
  488.     mov  [button_y_top],    ecx
  489.    
  490.     add  ebx, [g_s]
  491.     add  ebx, [g_s]
  492.     add  ebx, [g_s]
  493.     add  ebx, [g_s]
  494.     add  ebx, [g_s]
  495.    
  496.     mov  [button_x_right],  ebx
  497.    
  498.     add  ecx,  [g_s]
  499.     add  ecx,  [g_s]
  500.    
  501.     mov  [button_y_middle], ecx
  502.    
  503.     add  ecx,  [g_s]
  504.     add  ecx,  [g_s]
  505.    
  506.     mov  [button_y_bottom], ecx
  507.  
  508.   .done:
  509.       mcall     67,[wp_x],[wp_y],[window_width],[window_height]
  510.  
  511.   .quit:
  512.     ret
  513.  
  514.     ;;---Set_geometry------------------------------------------------------------------------------------------------------
  515.  
  516.  
  517. Increase_geometry:
  518.     ;;===Increase_geometry=================================================================================================
  519.  
  520.     inc  [square_side_length]
  521.     mov  [resized_by_hotkey],   1
  522.  
  523.     ret
  524.  
  525.     ;;---Increase_geometry-------------------------------------------------------------------------------------------------
  526.  
  527.  
  528. Decrease_geometry:
  529.     ;;===Decrease_geometry=================================================================================================
  530.  
  531.     cmp  [square_side_length],  MIN_SQUARE_SIDE_LENGTH
  532.      je  @f
  533.     dec  [square_side_length]
  534.     mov  [resized_by_hotkey],   1
  535.  
  536.   @@:
  537.     ret
  538.  
  539.     ;;---Decrease_geometry-------------------------------------------------------------------------------------------------
  540.  
  541.  
  542. Draw_decorations:
  543.     ;;===Draw_decorations==================================================================================================
  544.  
  545.     mov  al, byte[decorations]
  546.     dec  al
  547.      jz  grid_lines
  548.     dec  al
  549.      jz  grid_lines_with_ends
  550.     dec  al
  551.      jz  grid_lines_with_corners
  552.     dec  al
  553.      jz  grid_dots
  554.     dec  al
  555.      jz  borders_lines
  556.     dec  al
  557.      jz  borders_lines_with_corners
  558.     dec  al
  559.      jz  borders_dots
  560.     dec  al
  561.      jz  corners_dots
  562.     dec  al
  563.      jz  corners_inner
  564.     dec  al
  565.      jz  corners_outer
  566.     dec  al
  567.      jz  corners_crosses
  568.     ret
  569.  
  570.  
  571.   grid_lines:
  572.  
  573.     mov  eax, 38
  574. ;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
  575.     mov  ebx, [gbxm1_shl16_gbxm1]
  576. ;mov  ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
  577.     mov  ecx, [gbym1_shl16_gbym1]
  578.     add  ecx, [gh_mul_gs]
  579.     mov  edx, [decorations_color]
  580.     mov  esi, GRID_WIDTH
  581.     add  esi, 1
  582.  
  583.   @@:
  584.       mcall
  585.     add  ebx, [gs_shl16_gs]
  586.     dec  esi
  587.      jnz @b
  588.  
  589. ;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
  590.     mov  ebx, [gbxm1_shl16_gbxm1]
  591.     add  ebx, [gw_mul_gs]
  592.     mov  ecx, [gbym1_shl16_gbym1]
  593.     mov  esi, GRID_HEIGHT
  594.     add  esi, 1
  595.    
  596.   @@:
  597.       mcall
  598.     add  ecx, [gs_shl16_gs]
  599.     dec  esi
  600.      jnz @b
  601.  
  602.     ret
  603.  
  604.  
  605.   grid_lines_with_ends:
  606.  
  607.     mov  eax, 38
  608.     mov  ebx, [gbxm1_shl16_gbxm1]
  609.     mov  ecx, [gbym1]
  610.     sub  ecx, [g_e]
  611.     shl  ecx, 16
  612.     add  ecx, [gbym1_plus_gh_mul_gs]
  613.     add  ecx, [g_e]
  614.     mov  edx, [decorations_color]
  615.     mov  esi, GRID_WIDTH
  616.     add  esi, 1
  617.  
  618.   @@:
  619.       mcall
  620.     add  ebx, [gs_shl16_gs]
  621.     dec  esi
  622.      jnz @b
  623.  
  624.     mov  ebx, [gbxm1]
  625.     sub  ebx, [g_e]
  626.     shl  ebx, 16
  627.     add  ebx, [gbxm1_plus_gw_mul_gs]
  628.     add  ebx, [g_e]
  629.     mov  ecx, [gbym1_shl16_gbym1]
  630.     mov  esi, GRID_HEIGHT
  631.     add  esi, 1
  632.    
  633.   @@:
  634.       mcall
  635.     add  ecx, [gs_shl16_gs]
  636.     dec  esi
  637.      jnz @b
  638.  
  639.     ret
  640.  
  641.  
  642.   grid_lines_with_corners:
  643.  
  644.       call      grid_lines
  645.       call      corners_outer
  646.  
  647.     ret
  648.  
  649.  
  650.   grid_dots:
  651.  
  652.     mov  eax, 1
  653.     mov  ebx, [gbxm1]
  654.     mov  ecx, [gbym1]
  655.     mov  edx, [decorations_color]
  656.  
  657.   @@:
  658.       mcall
  659.     add  ebx, [g_s]
  660.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  661.      jng @b
  662.     add  ecx, [g_s]
  663.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  664.      jg  @f
  665.     mov  ebx, [gbxm1]
  666.      jmp @b
  667.  
  668.   @@:
  669.     ret
  670.  
  671.  
  672.   borders_lines:
  673.  
  674.     mov  eax, 38
  675.     mov  ebx, [gbxm1_shl16_gbxm1]
  676.     mov  ecx, [gbym1_shl16_gbym1]
  677.     add  ecx, [gh_mul_gs]
  678.     mov  edx, [decorations_color]
  679.       mcall
  680.  
  681.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  682.     shl  ebx, 16
  683.     add  ebx, [gbxm1_plus_gw_mul_gs]
  684.       mcall
  685.  
  686.     mov  ebx, [gbxm1_shl16_gbxm1]
  687.     add  ebx, [gw_mul_gs]
  688.     mov  ecx, [gbym1_shl16_gbym1]
  689.       mcall
  690.  
  691.     mov  ecx, [gbym1_plus_gh_mul_gs]
  692.     shl  ecx, 16
  693.     add  ecx, [gbym1_plus_gh_mul_gs]
  694.       mcall
  695.  
  696.     ret
  697.  
  698.  
  699.   borders_lines_with_corners:
  700.  
  701.       call      borders_lines
  702.       call      corners_outer
  703.  
  704.     ret
  705.  
  706.  
  707.   borders_dots:
  708.  
  709.     mov  eax, 1
  710.     mov  ebx, [gbxm1]
  711.     mov  ecx, [gbym1]
  712.     mov  edx, [decorations_color]
  713.   @@:
  714.       mcall
  715.     add  ebx, [g_s]
  716.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  717.      jng @b
  718.  
  719.     mov  ebx, [gbxm1]
  720.     mov  ecx, [gbym1_plus_gh_mul_gs]
  721.   @@:
  722.       mcall
  723.     add  ebx, [g_s]
  724.     cmp  ebx, [gbxm1_plus_gw_mul_gs]
  725.      jng @b
  726.  
  727.     mov  ebx, [gbxm1]
  728.     mov  ecx, [gbym1]
  729.   @@:
  730.       mcall
  731.     add  ecx, [g_s]
  732.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  733.      jng @b
  734.  
  735.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  736.     mov  ecx, [gbym1]
  737.   @@:
  738.       mcall
  739.     add  ecx, [g_s]
  740.     cmp  ecx, [gbym1_plus_gh_mul_gs]
  741.      jng @b
  742.  
  743.     ret
  744.  
  745.  
  746.   corners_dots:
  747.  
  748.     mov  eax, 13
  749.     mov  ebx, [gbxm1]
  750.     dec  ebx
  751.     shl  ebx, 16
  752.     add  ebx, 2
  753.     mov  ecx, [gbym1]
  754.     dec  ecx
  755.     shl  ecx, 16
  756.     add  ecx, 2
  757.     mov  edx, [decorations_color]
  758.       mcall
  759.  
  760.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  761.     shl  ebx, 16
  762.     add  ebx, 2
  763.       mcall
  764.  
  765.     mov  ebx, [gbxm1]
  766.     dec  ebx
  767.     shl  ebx, 16
  768.     add  ebx, 2
  769.     mov  ecx, [gbym1_plus_gh_mul_gs]
  770.     shl  ecx, 16
  771.     add  ecx, 2
  772.       mcall
  773.  
  774.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  775.     shl  ebx, 16
  776.     add  ebx, 2
  777.       mcall
  778.  
  779.     ret
  780.  
  781.  
  782.   corners_inner:
  783.  
  784.     mov  eax, 38
  785.     mov  ebx, [gbxm1_shl16_gbxm1]
  786.     add  ebx, [g_e]
  787.     mov  ecx, [gbym1_shl16_gbym1]
  788.     mov  edx, [decorations_color]
  789.       mcall
  790.  
  791.     mov  ecx, [gbym1_plus_gh_mul_gs]
  792.     shl  ecx, 16
  793.     add  ecx, [gbym1_plus_gh_mul_gs]
  794.       mcall
  795.  
  796.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  797.     sub  ebx, [g_e]
  798.     shl  ebx, 16
  799.     add  ebx, [gbxm1_plus_gw_mul_gs]
  800.       mcall
  801.  
  802.     mov  ecx, [gbym1_shl16_gbym1]
  803.       mcall
  804.  
  805.     mov  ebx, [gbxm1_shl16_gbxm1]
  806.     mov  ecx, [gbym1_shl16_gbym1]
  807.     add  ecx, [g_e]
  808.       mcall
  809.  
  810.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  811.     shl  ebx, 16
  812.     add  ebx, [gbxm1_plus_gw_mul_gs]
  813.       mcall
  814.  
  815.     mov  ecx, [gbym1_plus_gh_mul_gs]
  816.     sub  ecx, [g_e]
  817.     shl  ecx, 16
  818.     add  ecx, [gbym1_plus_gh_mul_gs]
  819.       mcall
  820.  
  821.     mov  ebx, [gbxm1_shl16_gbxm1]
  822.       mcall
  823.  
  824.     ret
  825.  
  826.  
  827.   corners_outer:
  828.  
  829.     mov  eax, 38
  830.     mov  ebx, [gbxm1_shl16_gbxm1]
  831.     sub  ebx, [g_e]
  832.     mov  ecx, [gbym1_shl16_gbym1]
  833.     mov  edx, [decorations_color]
  834.       mcall
  835.  
  836.     mov  ecx, [gbym1_plus_gh_mul_gs]
  837.     shl  ecx, 16
  838.     add  ecx, [gbym1_plus_gh_mul_gs]
  839.       mcall
  840.  
  841.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  842.     shl  ebx, 16
  843.     add  ebx, [gbxm1_plus_gw_mul_gs]
  844.     add  ebx, [g_e]
  845.       mcall
  846.  
  847.     mov  ecx, [gbym1_shl16_gbym1]
  848.       mcall
  849.  
  850.     mov  ebx, [gbxm1_shl16_gbxm1]
  851.     mov  ecx, [gbym1_shl16_gbym1]
  852.     sub  ecx, [g_e]
  853.       mcall
  854.  
  855.     mov  ebx, [gbxm1_plus_gw_mul_gs]
  856.     shl  ebx, 16
  857.     add  ebx, [gbxm1_plus_gw_mul_gs]
  858.       mcall
  859.  
  860.     mov  ecx, [gbym1_plus_gh_mul_gs]
  861.     shl  ecx, 16
  862.     add  ecx, [gbym1_plus_gh_mul_gs]
  863.     add  ecx, [g_e]
  864.       mcall
  865.  
  866.     mov  ebx, [gbxm1_shl16_gbxm1]
  867.       mcall
  868.  
  869.     ret
  870.  
  871.  
  872.   corners_crosses:
  873.  
  874.       call      corners_inner
  875.       call      corners_outer
  876.  
  877.     ret
  878.  
  879.  
  880.     ;;---Draw_decorations--------------------------------------------------------------------------------------------------
  881.  
  882.  
  883. Draw_square:
  884.     ;;===Draw_square=======================================================================================================
  885.     ;; bl   -   x_coord
  886.     ;; bh   -   y_coord
  887.     ;; edx  -   color
  888.  
  889.     push eax ebx ecx edx
  890.  
  891.     mov  cl,  bh
  892.  
  893.     mov  al,  byte[g_s]
  894.     mul  bl
  895.     mov  bx,  ax
  896.     add  bx,  word[gbxm1]
  897.     inc  bx
  898.     shl  ebx, 16
  899.     add  ebx, [g_s]
  900.     dec  ebx
  901.  
  902.     mov  al,  byte[g_s]
  903.     mul  cl
  904.     mov  cx,  ax
  905.     add  cx,  word[gbym1]
  906.     inc  cx
  907.     shl  ecx, 16
  908.     add  ecx, [g_s]
  909.     dec  ecx
  910.  
  911.       mcall     13
  912.  
  913.     pop  edx ecx ebx eax
  914.  
  915.     ret
  916.  
  917.     ;;---Draw_square-------------------------------------------------------------------------------------------------------
  918.    
  919.    
  920. Draw_menu_esc:
  921.     ;;===Draw_menu_esc=====================================================================================================
  922.  
  923.     mov  ebx, [window_width]
  924.     shr  ebx, 1
  925.     sub  ebx, string_menu_esc.size*3+6
  926.     shl  ebx, 16
  927.     add  ebx, dword[top_strings]
  928.       mcall     4, ,[navigation_strings_color],string_menu_esc
  929.    
  930.     ret
  931.    
  932.     ;;---Draw_menu_esc-----------------------------------------------------------------------------------------------------
  933.  
  934.  
  935. Draw_score_string:
  936.     ;;===Draw_score_string=================================================================================================
  937.  
  938.     mov  ebx, [window_width]
  939.     shr  ebx, 3
  940.     sub  ebx, 5
  941.     shl  ebx, 16
  942.     add  ebx, dword[bottom_top_strings]
  943.       mcall     4, ,[score_string_color],string_score
  944.  
  945.     ret
  946.  
  947.     ;;---Draw_score_string-------------------------------------------------------------------------------------------------
  948.    
  949.    
  950. Draw_score_number:
  951.     ;;===Draw_score_number=================================================================================================
  952.  
  953.     mov  edx, [window_width]
  954.     shr  edx, 3
  955.     sub  edx, 5+1
  956.     add  edx, string_score.size*6
  957.     shl  edx, 16
  958.     add  edx, dword[bottom_top_strings]
  959.       mcall     47,0x00070000,[score], ,[score_number_color],[background_color]
  960.  
  961.     ret
  962.  
  963.     ;;---Draw_score_number-------------------------------------------------------------------------------------------------
  964.  
  965.  
  966. Draw_hiscore_string:
  967.     ;;===Draw_hiscore_string===============================================================================================
  968.  
  969.     mov  ebx, [window_width]
  970.     shr  ebx, 3
  971.     neg  ebx
  972.     add  ebx, [window_width]
  973.     sub  ebx, string_hi_score.size*6+7*6+5
  974.     shl  ebx, 16
  975.     add  ebx, dword[bottom_top_strings]
  976.       mcall     4, ,[hiscore_string_color],string_hi_score
  977.    
  978.     ret
  979.    
  980.     ;;---Draw_hiscore_string-----------------------------------------------------------------------------------------------
  981.  
  982.  
  983. Draw_hiscore_number:
  984.     ;;===Draw_hiscore_number===================================================================================================
  985.  
  986.     mov  edx, [window_width]
  987.     shr  edx, 3
  988.     neg  edx
  989.     add  edx, [window_width]
  990.     sub  edx, 7*6+6
  991.     shl  edx, 16
  992.     add  edx, dword[bottom_top_strings]
  993.    
  994.     cmp  [play_mode],   CLASSIC_MODE
  995.      jne @f
  996.     mov  ecx, [hi_score_classic]
  997.      jmp .done
  998.   @@:
  999.     mov  ecx, [hi_score_levels]
  1000.  
  1001.   .done:
  1002.       mcall     47,0x00070000, , ,[hiscore_number_color]
  1003.    
  1004.     ret
  1005.    
  1006.     ;;---Draw_hiscore_number---------------------------------------------------------------------------------------------------
  1007.  
  1008.  
  1009. Draw_champion_string:
  1010.     ;;===Draw_champion_string==================================================================================================
  1011.  
  1012.     mov  ebx, [window_width]
  1013.     shr  ebx, 3
  1014.     neg  ebx
  1015.     add  ebx, [window_width]
  1016.     sub  ebx, string_champion.size*6+7*6+5
  1017.     shl  ebx, 16
  1018.     add  ebx, dword[bottom_bottom_strings]
  1019.       mcall     4, ,[champion_string_color],string_champion
  1020.  
  1021.     ret
  1022.  
  1023.     ;;---Draw_champion_string----------------------------------------------------------------------------------------------
  1024.  
  1025.  
  1026. Draw_champion_name:
  1027.     ;;===Draw_champion_name================================================================================================
  1028.  
  1029.     mov  ebx, [window_width]
  1030.     shr  ebx, 3
  1031.     neg  ebx
  1032.     add  ebx, [window_width]
  1033.     sub  ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6                ; there is no difference between length of champion names for other play_modes
  1034.     add  ebx, CHAMPION_NAME_LENGTH/2*6
  1035.     shl  ebx, 16
  1036.     add  ebx, dword[bottom_bottom_strings]
  1037.  
  1038.     cmp  [play_mode],   CLASSIC_MODE
  1039.      jne @f
  1040.     mov  edx, champion_name_classic
  1041.      jmp .done
  1042.   @@:
  1043.     mov  edx, champion_name_levels
  1044.  
  1045.   .done:
  1046.       mcall     4, ,[champion_name_color],
  1047.  
  1048.     ret
  1049.  
  1050.     ;;---Draw_champion_name------------------------------------------------------------------------------------------------
  1051.  
  1052.  
  1053. Draw_picture:
  1054.     ;;===Draw_picture======================================================================================================
  1055.     ;;  in  :
  1056.     ;;           ax =   number of left square *0x100+ picture width (in squares)
  1057.     ;;           cx =   number of top square *0x100+ picture height (in squares)
  1058.     ;;          edx =   picture color
  1059.     ;;          esi =   pointer to picture data
  1060.     ;;
  1061.  
  1062.     add  al,  ah
  1063.     add  cl,  ch
  1064.     mov  bh,  ch
  1065.  
  1066.   .draw:
  1067.     mov  bl,  ah
  1068.     mov  di,  7
  1069.    
  1070.   .loop:
  1071.     bt  word[esi],  di
  1072.      jnc @f
  1073.     push eax ebx ecx esi edi
  1074.       call      Draw_square
  1075.     pop  edi esi ecx ebx eax
  1076.    
  1077.   @@:
  1078.     dec  di
  1079.      jns @f
  1080.     mov  di,  7
  1081.     inc  esi
  1082.   @@:
  1083.     inc  bl
  1084.     cmp  bl,  al
  1085.      jne .loop
  1086.    
  1087.     inc  bh
  1088.     cmp  di,  7
  1089.      jz  @f
  1090.     inc  esi
  1091.   @@:
  1092.     cmp  bh,  cl
  1093.      jne .draw
  1094.  
  1095.     ret
  1096.  
  1097.     ;;---Draw_picture------------------------------------------------------------------------------------------------------
  1098.  
  1099.  
  1100. Draw_on_map:
  1101.     ;;===Draw_on_map=======================================================================================================
  1102.     ;;  in  :
  1103.     ;;           al =   x coord
  1104.     ;;           ah =   y coord
  1105.     ;;           cl =   value to draw
  1106.     ;;
  1107.  
  1108.     and  eax, 0x0000ffff
  1109.     xor  bx,  bx
  1110.     mov  bl,  al
  1111.     shr  ax,  8
  1112.     mov  dx,  GRID_WIDTH
  1113.     mul  dx
  1114.     add  ax,  bx
  1115.     mov  edi, field_map
  1116.     add  edi, eax
  1117.     mov  [edi], cl
  1118.  
  1119.     ret
  1120.  
  1121.     ;;---Draw_on_map-------------------------------------------------------------------------------------------------------
  1122.  
  1123.  
  1124. Get_from_map:
  1125.     ;;===Get_from_map======================================================================================================
  1126.     ;;  in  :
  1127.     ;;           al =   x coord
  1128.     ;;           ah =   y coord
  1129.     ;;  out :
  1130.     ;;           bl =   value on map
  1131.     ;;
  1132.  
  1133.     push eax
  1134.    
  1135.     and  eax, 0x0000ffff
  1136.     xor  bx,  bx
  1137.     mov  bl,  al
  1138.     shr  ax,  8
  1139.     mov  dx,  GRID_WIDTH
  1140.     mul  dx
  1141.     add  ax,  bx
  1142.     mov  edi, field_map
  1143.     add  edi, eax
  1144.     mov  bl,  [edi]
  1145.  
  1146.     pop  eax
  1147.  
  1148.     ret
  1149.  
  1150.     ;;---Get_from_map-----------------------------------------------------------------------------------------------------------
  1151.  
  1152.  
  1153. Load_level:
  1154.     ;;===Load_level=============================================================================================================
  1155.     ;;  in  :
  1156.     ;;          cur_level_number    =   level number to load
  1157.     ;;
  1158.  
  1159.     mov  eax, [cur_level_number]
  1160.     mov  edx, stage_00
  1161.   @@:
  1162.     test al,  al
  1163.      jz  @f
  1164.     add  edx, stage_01-stage_00
  1165.     dec  al
  1166.      jmp @b
  1167.   @@:
  1168.  
  1169.     mov  esi, window_title_with_lives
  1170.     mov  edi, window_title+5
  1171.  
  1172.   .lives_in_title:
  1173.     cmp  [play_mode],   LEVELS_MODE
  1174.      jne .level_name_in_title
  1175.     test [show_lives_style],    1
  1176.      jz  .level_name_in_title
  1177.     mov  [edi], byte ' '
  1178.     mov  al,  byte[separating_symbol]
  1179.     mov  [edi+1], byte al
  1180.     mov  [edi+2], byte ' '
  1181.     add  edi, 3
  1182.     mov  eax, [lives]
  1183.     add  al,  0x30
  1184.     mov  [window_title_with_lives],   al
  1185.     mov  ecx, 10
  1186.     rep  movsb
  1187.     dec  edi
  1188.  
  1189.   .level_name_in_title:
  1190.     cmp  [draw_level_name_in_window_title], 1
  1191.      jne @f
  1192.     mov  [edi], byte ' '
  1193.     mov  al,  byte[separating_symbol]
  1194.     mov  [edi+1], byte al
  1195.     mov  [edi+2], byte ' '
  1196.     add  edi, 3
  1197.     mov  esi, edx
  1198.     add  esi, LEVEL.name
  1199.     mov  esi, [esi]
  1200.     mov  ecx, 16
  1201.     rep  movsd
  1202.  
  1203.   @@:
  1204.       mcall     71,1,window_title
  1205.  
  1206.     mov  [cur_level],   edx
  1207.  
  1208.     mov  esi, edx
  1209.     add  esi, LEVEL.field
  1210.     mov  edi, field_map
  1211.     mov  ecx, 2
  1212.     mov  ah,  GRID_HEIGHT
  1213.   .begin:
  1214.     mov  ebx, 7
  1215.     mov  al,  GRID_WIDTH
  1216.   .loop:
  1217.     bt   [esi], ebx
  1218.      jnc @f
  1219.     mov  byte[edi], cl
  1220.      jmp .skip
  1221.   @@:
  1222.     mov  byte[edi], 0
  1223.   .skip:
  1224.     dec  ebx
  1225.      jns @f
  1226.     mov  ebx, 7
  1227.     inc  esi
  1228.   @@:
  1229.     inc  edi
  1230.     dec  al
  1231.      jnz .loop
  1232.     inc  esi
  1233.     dec  ah
  1234.      jnz .begin
  1235.  
  1236.  
  1237.     mov  esi, edx
  1238.     add  esi, LEVEL.snake_dots
  1239.     mov  edi, snake_dots
  1240.     mov  ecx, 3
  1241.     rep  movsw
  1242.    
  1243.     mov  esi, edx
  1244.     add  esi, LEVEL.snake_direction
  1245.     mov  eax, [esi]
  1246.     mov  [snake_direction], eax
  1247.    
  1248.     mov  esi, edx
  1249.     add  esi, LEVEL.snake_direction_next
  1250.     mov  eax, [esi]
  1251.     mov  [snake_direction_next],    eax
  1252.  
  1253.     mov  esi, edx
  1254.     add  esi, LEVEL.number_of_stones
  1255.     mov  eax, [esi]
  1256.     mov  [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3
  1257.     sub  [number_of_free_dots], eax
  1258.    
  1259.     mov  ax,  word[snake_dots]
  1260.     mov  cl,  1
  1261.       call      Draw_on_map
  1262.     mov  ax,  word[snake_dots+2]
  1263.     mov  cl,  1
  1264.       call      Draw_on_map
  1265.     mov  ax,  word[snake_dots+4]
  1266.     mov  cl,  1
  1267.       call      Draw_on_map
  1268.  
  1269.     mov  [action],  0
  1270.     mov  [snake_length_x2], 6
  1271.  
  1272.     ret
  1273.  
  1274.     ;;---Load_level-------------------------------------------------------------------------------------------------------------
  1275.  
  1276.  
  1277. Draw_stones:
  1278.     ;;===Draw_stones============================================================================================================
  1279.  
  1280.     mov  ax,  0*0x100+GRID_WIDTH
  1281.     mov  cx,  0*0x100+GRID_HEIGHT
  1282.     mov  edx, [stone_color]
  1283.     mov  esi, [cur_level]
  1284.     add  esi, LEVEL.field
  1285.       call      Draw_picture
  1286.  
  1287.     ret
  1288.  
  1289.     ;;---Draw_stones------------------------------------------------------------------------------------------------------------
  1290.  
  1291.  
  1292. Hide_cursor:
  1293.     ;;===Hide_cursor===========================================================================================================
  1294.  
  1295.       mcall     37,5,[cursor_handle]
  1296.  
  1297.     ret
  1298.  
  1299.     ;;---Show_cursor-----------------------------------------------------------------------------------------------------------
  1300.  
  1301.  
  1302. Show_cursor:
  1303.     ;;===Hide_cursor===========================================================================================================
  1304.  
  1305.       mcall     37,5,0
  1306.  
  1307.     ret
  1308.  
  1309.     ;;---Show_cursor-----------------------------------------------------------------------------------------------------------
  1310.  
  1311.  
  1312. Set_window_mode:
  1313.     ;;===Set_window_mode=======================================================================================================
  1314.  
  1315.     test al,  al
  1316.      jnz .fullscreen
  1317.     mov  eax, [window_style_windowed]
  1318.      jmp .quit
  1319.  
  1320.   .fullscreen:
  1321.     mov  eax, [window_style_fullscreen]
  1322.  
  1323.   .quit:
  1324.     mov [window_style], eax
  1325.     ret
  1326.  
  1327. ;;---Some_functions------------------------------------------------------------------------------------------------------------
  1328.  
  1329.  
  1330. Reverse_snake:
  1331.     ;;===Reverse_snake=========================================================================================================
  1332.  
  1333.     cmp  [snake_direction], LEFT
  1334.      jne @f
  1335.     mov  [snake_direction_next],    RIGHT
  1336.      jmp .quit
  1337.   @@:
  1338.     cmp  [snake_direction], RIGHT
  1339.      jne @f
  1340.     mov  [snake_direction_next],    LEFT
  1341.      jmp .quit
  1342.   @@:
  1343.     cmp  [snake_direction], UP
  1344.      jne @f
  1345.     mov  [snake_direction_next],    DOWN
  1346.      jmp .quit
  1347.   @@:
  1348.    cmp  [snake_direction], DOWN
  1349.      jne @f
  1350.     mov  [snake_direction_next],    UP
  1351. ;     jmp .quit
  1352.   @@:
  1353.  
  1354.   .quit:
  1355.     ret
  1356.  
  1357.     ;;---Reverse_snake---------------------------------------------------------------------------------------------------------
  1358.  
  1359.  
  1360. ;;===Variables==================================================================================================================
  1361.  
  1362. window_title                db      'Snake',64+15 dup (0)
  1363. window_title_with_lives     db      '_ live(s)',0
  1364. default_separating_symbol   db      '|',0
  1365. window_style_windowed       dd      0x33000000              ; scalable skinned window
  1366. window_style_fullscreen     dd      0x00000000
  1367. time_before_waiting         dd      0x0
  1368. time_to_wait                dd      0x0
  1369. time_wait_limit             dd      101
  1370. time_wait_limit_const       dd      0x0
  1371.  
  1372. play_mode                   dd      0x0
  1373. lives                       dd      START_LIVES
  1374. acceleration_mask           dd      0x0
  1375.  
  1376. resized_by_hotkey           dd      0x0
  1377. fullscreen                  dd      0x0
  1378.  
  1379. szZ string_score            ,'SCORE : '
  1380. szZ string_hi_score         ,'HI-SCORE : '
  1381. szZ string_champion         ,'CHAMPION : '
  1382. szZ string_level            ,'LEVEL : '
  1383. szZ string_pause_space      ,'PAUSE - ',0x27,'SPACE',0x27
  1384. szZ string_resume_space     ,'RESUME - ',0x27,'SPACE',0x27
  1385. szZ string_menu_esc         ,'MENU - ',0x27,'ESC',0x27
  1386. szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27
  1387. szZ press_to_start          ,'PRESS ',0x27,'ENTER',0x27,' TO START'
  1388. szZ press_esc_to_exit       ,'PRESS ',0x27,'ESC',0x27,' TO EXIT'
  1389. ;press_F2_to_options         db      'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0
  1390.  
  1391. szZ string_congratulations  ,'   Congratulations!!! New hi-score is : '
  1392. szZ string_enter_your_name  ,'You are the champion! Enter your name : '
  1393.  
  1394. szZ string_button_play      ,'PLAY'
  1395. szZ string_button_exit      ,'EXIT'
  1396. szZ string_button_inc       ,'+INC+'
  1397. szZ string_button_dec       ,'-dec-'
  1398. szZ string_button_pm_classic,'CLASSIC mode'
  1399. szZ string_button_pm_levels ,'LEVELS mode'
  1400.  
  1401. is_new_record               dd      0
  1402.  
  1403. action                      dd      0
  1404.  
  1405. picture_first_menu_snake    db      0xf4,0x99,0x2f,\
  1406.                                     0x86,0xa5,0x49,\
  1407.                                     0xf5,0xa5,0x8f,\
  1408.                                     0x15,0xbd,0x48,\
  1409.                                     0xf4,0xa5,0x2f
  1410.  
  1411. picture_first_menu_version  db      0xf1,0xe0,\
  1412.                                     0x90,0x20,\
  1413.                                     0x90,0x20,\
  1414.                                     0x90,0x20,\
  1415.                                     0xf4,0x20
  1416.  
  1417. picture_pause               db      11100011b,00100101b,11101111b,\
  1418.                                     10010100b,10100101b,00001000b,\
  1419.                                     10010100b,10100101b,00001000b,\
  1420.                                     11100111b,10100101b,11101111b,\
  1421.                                     10000100b,10100100b,00101000b,\
  1422.                                     10000100b,10011001b,11101111b
  1423.  
  1424. picture_game_over           db      00110000b,00000000b,00000000b,00000000b,\
  1425.                                     01001001b,11001000b,10111100b,00000000b,\
  1426.                                     10000010b,00101101b,10100000b,00000000b,\
  1427.                                     10011010b,00101010b,10111000b,00000000b,\
  1428.                                     10001011b,11101000b,10100000b,00000000b,\
  1429.                                     01110010b,00101000b,10111100b,00000000b,\
  1430.                                     00000000b,00000000b,00000000b,00000000b,\
  1431.                                     00000111b,00000000b,00000000b,00000000b,\
  1432.                                     00001000b,10100010b,11110111b,10000000b,\
  1433.                                     00001000b,10100010b,10000100b,01000000b,\
  1434.                                     00001000b,10100010b,11100100b,01000000b,\
  1435.                                     00001000b,10010100b,10000111b,10000000b,\
  1436.                                     00000111b,00001000b,11110100b,01000000b
  1437.  
  1438. ;picture_you_win             db      10001001b,11001000b,10000000b,\
  1439. ;                                    10001010b,00101000b,10000000b,\
  1440. ;                                    01010010b,00101000b,10000000b,\
  1441. ;                                    00100010b,00101000b,10000000b,\
  1442. ;                                    00100001b,11000111b,00000000b,\
  1443. ;                                    00000000b,00000000b,00000000b,\
  1444. ;                                    00000000b,00000000b,00000000b,\
  1445. ;                                    01000100b,10010001b,00000000b,\
  1446. ;                                    01010100b,10011001b,00000000b,\
  1447. ;                                    01010100b,10010101b,00000000b,\
  1448. ;                                    01010100b,10010011b,00000000b,\
  1449. ;                                    00101000b,10010001b,00000000b
  1450.  
  1451. picture_you_win             db      01000100b,01000011b,10001000b,10000000b,\
  1452.                                     01000100b,01000100b,01001000b,10000000b,\
  1453.                                     01000100b,01000100b,00001000b,10000000b,\
  1454.                                     01111100b,01000100b,11001111b,10000000b,\
  1455.                                     01000100b,01000100b,01001000b,10000000b,\
  1456.                                     01000100b,01000011b,10001000b,10000000b,\
  1457.                                     00000000b,00000000b,00000000b,00000000b,\
  1458.                                     11110011b,10011100b,11110011b,11000000b,\
  1459.                                     10000100b,00100010b,10001010b,00000000b,\
  1460.                                     11110100b,00100010b,10001011b,10000000b,\
  1461.                                     00010100b,00100010b,11110010b,00000000b,\
  1462.                                     11110011b,10011100b,10001011b,11000000b
  1463.  
  1464. picture_level               db      10000111b,10100101b,11101000b,\
  1465.                                     10000100b,00100101b,00001000b,\
  1466.                                     10000111b,00100101b,11001000b,\
  1467.                                     10000100b,00101001b,00001000b,\
  1468.                                     11110111b,10110001b,11101111b
  1469.  
  1470. digits_font                 db      0xf0,0x90,0x90,0x90,0xf0,\
  1471.                                     0x20,0x60,0x20,0x20,0x20,\
  1472.                                     0xf0,0x10,0xf0,0x80,0xf0,\
  1473.                                     0xf0,0x10,0x70,0x10,0xf0,\
  1474.                                     0x90,0x90,0xf0,0x10,0x10,\
  1475.                                     0xf0,0x80,0xf0,0x10,0xf0,\
  1476.                                     0xf0,0x80,0xf0,0x90,0xf0,\
  1477.                                     0xf0,0x10,0x10,0x10,0x10,\
  1478.                                     0xf0,0x90,0xf0,0x90,0xf0,\
  1479.                                     0xf0,0x90,0xf0,0x10,0xf0
  1480.  
  1481. stage_00:
  1482. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1483.                                     00000000b,00000000b,00000000b,00000000b,\
  1484.                                     00000000b,00000000b,00000000b,00000000b,\
  1485.                                     00000000b,00000000b,00000000b,00000000b,\
  1486.                                     00000000b,00000000b,00000000b,00000000b,\
  1487.                                     00000000b,00000000b,00000000b,00000000b,\
  1488.                                     00000000b,00000000b,00000000b,00000000b,\
  1489.                                     00000000b,00000000b,00000000b,00000000b,\
  1490.                                     00000000b,00000000b,00000000b,00000000b,\
  1491.                                     00000000b,00000000b,00000000b,00000000b,\
  1492.                                     00000000b,00000000b,00000000b,00000000b,\
  1493.                                     00000000b,00000000b,00000000b,00000000b,\
  1494.                                     00000000b,00000000b,00000000b,00000000b,\
  1495.                                     00000000b,00000000b,00000000b,00000000b
  1496.  
  1497. .snake_dots                 db      3,3, 4,3, 5,3
  1498. .snake_direction            dd      RIGHT
  1499. .snake_direction_next       dd      RIGHT
  1500. .number_of_stones           dd      0
  1501. .name                       dd      stage_00_name
  1502.  
  1503. stage_01:
  1504. .field                      db      11111000b,00000000b,00000001b,11110000b,\
  1505.                                     10000000b,00000000b,00000000b,00010000b,\
  1506.                                     10000000b,00000000b,00000000b,00010000b,\
  1507.                                     10000000b,00000000b,00000000b,00010000b,\
  1508.                                     10000000b,00000000b,00000000b,00010000b,\
  1509.                                     00000000b,00000000b,00000000b,00000000b,\
  1510.                                     00000000b,00000000b,00000000b,00000000b,\
  1511.                                     00000000b,00000000b,00000000b,00000000b,\
  1512.                                     00000000b,00000000b,00000000b,00000000b,\
  1513.                                     10000000b,00000000b,00000000b,00010000b,\
  1514.                                     10000000b,00000000b,00000000b,00010000b,\
  1515.                                     10000000b,00000000b,00000000b,00010000b,\
  1516.                                     10000000b,00000000b,00000000b,00010000b,\
  1517.                                     11111000b,00000000b,00000001b,11110000b
  1518.  
  1519. .snake_dots                 db      3,3, 4,3, 5,3
  1520. .snake_direction            dd      RIGHT
  1521. .snake_direction_next       dd      RIGHT
  1522. .number_of_stones           dd      36
  1523. .name                       dd      stage_01_name
  1524.  
  1525. stage_02:
  1526. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1527.                                     00000000b,00000000b,00000000b,00000000b,\
  1528.                                     00011111b,11000000b,00111111b,10000000b,\
  1529.                                     00010000b,00000000b,00000000b,10000000b,\
  1530.                                     00010000b,00000000b,00000000b,10000000b,\
  1531.                                     00010000b,00000000b,00000000b,10000000b,\
  1532.                                     00000000b,00000000b,00000000b,00000000b,\
  1533.                                     00000000b,00000000b,00000000b,00000000b,\
  1534.                                     00010000b,00000000b,00000000b,10000000b,\
  1535.                                     00010000b,00000000b,00000000b,10000000b,\
  1536.                                     00010000b,00000000b,00000000b,10000000b,\
  1537.                                     00011111b,11000000b,00111111b,10000000b,\
  1538.                                     00000000b,00000000b,00000000b,00000000b,\
  1539.                                     00000000b,00000000b,00000000b,00000000b
  1540.  
  1541. .snake_dots                 db      7,5, 8,5, 9,5
  1542. .snake_direction            dd      RIGHT
  1543. .snake_direction_next       dd      RIGHT
  1544. .number_of_stones           dd      40
  1545. .name                       dd      stage_02_name
  1546.  
  1547. stage_03:
  1548. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1549.                                     00000000b,00000000b,00000000b,00000000b,\
  1550.                                     00000000b,00001001b,00000000b,00000000b,\
  1551.                                     00000000b,00001001b,00000000b,00000000b,\
  1552.                                     00000000b,00001001b,00000000b,00000000b,\
  1553.                                     00001111b,11111001b,11111111b,00000000b,\
  1554.                                     00000000b,00000000b,00000000b,00000000b,\
  1555.                                     00000000b,00000000b,00000000b,00000000b,\
  1556.                                     00001111b,11111001b,11111111b,00000000b,\
  1557.                                     00000000b,00001001b,00000000b,00000000b,\
  1558.                                     00000000b,00001001b,00000000b,00000000b,\
  1559.                                     00000000b,00001001b,00000000b,00000000b,\
  1560.                                     00000000b,00000000b,00000000b,00000000b,\
  1561.                                     00000000b,00000000b,00000000b,00000000b
  1562.  
  1563. .snake_dots                 db      23,0, 22,0, 21,0
  1564. .snake_direction            dd      LEFT
  1565. .snake_direction_next       dd      LEFT
  1566. .number_of_stones           dd      48
  1567. .name                       dd      stage_03_name
  1568.  
  1569. stage_04:
  1570. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1571.                                     00000000b,00100000b,01000000b,00000000b,\
  1572.                                     00000010b,00100000b,01000100b,00000000b,\
  1573.                                     00000010b,00000000b,00000100b,00000000b,\
  1574.                                     00010000b,00100000b,01000000b,10000000b,\
  1575.                                     00000010b,00100000b,01000100b,00000000b,\
  1576.                                     00010010b,00000000b,00000100b,10000000b,\
  1577.                                     00010010b,00000000b,00000100b,10000000b,\
  1578.                                     00000010b,00100000b,01000000b,00000000b,\
  1579.                                     00010000b,00100000b,01000000b,10000000b,\
  1580.                                     00000010b,00000000b,00000100b,00000000b,\
  1581.                                     00000010b,00100000b,01000100b,00000000b,\
  1582.                                     00000000b,00100000b,01000000b,00000000b,\
  1583.                                     00000000b,00000000b,00000000b,00000000b
  1584.  
  1585. .snake_dots                 db      19,6, 19,7, 19,8
  1586. .snake_napravlenie          dd      DOWN
  1587. .snake_napravlenie_next     dd      DOWN
  1588. .number_of_stones           dd      39
  1589. .name                       dd      stage_04_name
  1590.  
  1591. stage_05:
  1592. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1593.                                     00000000b,00000000b,00000000b,00000000b,\
  1594.                                     00000001b,11111111b,11111000b,00000000b,\
  1595.                                     00000001b,11111111b,11111000b,00000000b,\
  1596.                                     00000000b,00000000b,00000000b,00000000b,\
  1597.                                     00000000b,00000000b,00000000b,00000000b,\
  1598.                                     00000111b,11111111b,11111110b,00000000b,\
  1599.                                     00000111b,11111111b,11111110b,00000000b,\
  1600.                                     00000000b,00000000b,00000000b,00000000b,\
  1601.                                     00000000b,00000000b,00000000b,00000000b,\
  1602.                                     00111111b,11111111b,11111111b,11000000b,\
  1603.                                     00111111b,11111111b,11111111b,11000000b,\
  1604.                                     00000000b,00000000b,00000000b,00000000b,\
  1605.                                     00000000b,00000000b,00000000b,00000000b
  1606.  
  1607. .snake_dots                 db      0,0, 0,1, 1,1
  1608. .snake_direction            dd      RIGHT
  1609. .snake_direction_next       dd      RIGHT
  1610. .number_of_stones           dd      112
  1611. .name                       dd      stage_05_name
  1612.  
  1613. stage_06:
  1614. .field                      db      00000001b,10000000b,00000000b,00000000b,\
  1615.                                     00000001b,11111111b,11111000b,00000000b,\
  1616.                                     00000001b,11111111b,11111000b,00000000b,\
  1617.                                     00000000b,00000000b,00011000b,00000000b,\
  1618.                                     00000000b,00000000b,00011000b,00000000b,\
  1619.                                     00011111b,11111111b,11111000b,00000000b,\
  1620.                                     00011111b,11111111b,11111000b,00000000b,\
  1621.                                     00011000b,00000000b,00000000b,00000000b,\
  1622.                                     00011000b,00000000b,00000000b,00000000b,\
  1623.                                     00011111b,11111111b,11111111b,11100000b,\
  1624.                                     00011111b,11111111b,11111111b,11100000b,\
  1625.                                     00000000b,00000000b,00000000b,01100000b,\
  1626.                                     00000000b,00000000b,00000000b,01100000b,\
  1627.                                     00000000b,00000000b,00000000b,01100000b
  1628.  
  1629. .snake_dots                 db      0,0, 0,1, 1,1
  1630. .snake_direction            dd      RIGHT
  1631. .snake_direction_next       dd      RIGHT
  1632. .number_of_stones           dd      128
  1633. .name                       dd      stage_06_name
  1634.  
  1635. stage_07:
  1636. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1637.                                     00000000b,00000000b,00000000b,00000000b,\
  1638.                                     00000000b,00000000b,00000000b,00000000b,\
  1639.                                     00000011b,11111111b,11111100b,00000000b,\
  1640.                                     00000000b,00000000b,00000100b,00000000b,\
  1641.                                     00000011b,11111111b,11110100b,00000000b,\
  1642.                                     00000010b,00000000b,00010100b,00000000b,\
  1643.                                     00000010b,11111111b,11010100b,00000000b,\
  1644.                                     00000010b,00000000b,00010100b,00000000b,\
  1645.                                     00000010b,11111111b,11110100b,00000000b,\
  1646.                                     00000010b,00000000b,00000100b,00000000b,\
  1647.                                     00000011b,11111111b,11111100b,00000000b,\
  1648.                                     00000000b,00000000b,00000000b,00000000b,\
  1649.                                     00000000b,00000000b,00000000b,00000000b
  1650.  
  1651. .snake_dots                 db      8,1, 9,1, 10,1
  1652. .snake_direction            dd      RIGHT
  1653. .snake_direction_next       dd      RIGHT
  1654. .number_of_stones           dd      83
  1655. .name                       dd      stage_07_name
  1656.  
  1657. stage_08:
  1658. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1659.                                     00000000b,00000000b,00000000b,00000000b,\
  1660.                                     00000000b,00000000b,00010000b,00000000b,\
  1661.                                     00001001b,00000001b,00000000b,00000000b,\
  1662.                                     00000001b,01001001b,00000101b,00000000b,\
  1663.                                     00000000b,01000000b,00000100b,00000000b,\
  1664.                                     00001111b,00000000b,11100000b,00000000b,\
  1665.                                     00000000b,00000000b,00001000b,10000000b,\
  1666.                                     00000111b,00100000b,10000010b,10000000b,\
  1667.                                     00010000b,00000000b,00000010b,00000000b,\
  1668.                                     00010000b,11000000b,01110010b,00000000b,\
  1669.                                     00010010b,00000000b,00000010b,00000000b,\
  1670.                                     00000000b,00000000b,00000000b,00000000b,\
  1671.                                     00000000b,00000000b,00000000b,00000000b
  1672.  
  1673. .snake_dots                 db      0,0, 1,0, 2,0
  1674. .snake_direction            dd      RIGHT
  1675. .snake_direction_next       dd      RIGHT
  1676. .number_of_stones           dd      40
  1677. .name                       dd      stage_08_name
  1678.  
  1679. stage_09:
  1680. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1681.                                     00000000b,00000000b,00000000b,00000000b,\
  1682.                                     00000000b,00000000b,00000000b,00000000b,\
  1683.                                     00000000b,00000000b,00000000b,00000000b,\
  1684.                                     00111101b,00100110b,01001011b,11000000b,\
  1685.                                     00100001b,10101001b,01010010b,00000000b,\
  1686.                                     00111101b,01100001b,01100011b,10000000b,\
  1687.                                     00000101b,01100111b,01010010b,00000000b,\
  1688.                                     00111101b,00100001b,01001011b,11000000b,\
  1689.                                     00000000b,00000000b,00000000b,00000000b,\
  1690.                                     00000000b,00000000b,00000000b,00000000b,\
  1691.                                     00000000b,00000000b,00000000b,00000000b,\
  1692.                                     00000000b,00000000b,00000000b,00000000b,\
  1693.                                     00000000b,00000000b,00000000b,00000000b
  1694.  
  1695. .snake_dots                 db      12,6, 12,7, 12,8
  1696. .snake_direction            dd      DOWN
  1697. .snake_direction_next       dd      DOWN
  1698. .number_of_stones           dd      59
  1699. .name                       dd      stage_09_name
  1700.  
  1701. stage_10:
  1702. .field                      db      11101110b,11101110b,11101110b,11100000b,\
  1703.                                     11101110b,11101110b,11101110b,11100000b,\
  1704.                                     11101110b,11101110b,11101110b,11100000b,\
  1705.                                     00000000b,00000000b,00000000b,00000000b,\
  1706.                                     11101110b,11101110b,11101110b,11100000b,\
  1707.                                     11101110b,11101110b,11101110b,11100000b,\
  1708.                                     11101110b,11101110b,11101110b,11100000b,\
  1709.                                     00000000b,00000000b,00000000b,00000000b,\
  1710.                                     11101110b,11101110b,11101110b,11100000b,\
  1711.                                     11101110b,11101110b,11101110b,11100000b,\
  1712.                                     11101110b,11101110b,11101110b,11100000b,\
  1713.                                     00000000b,00000000b,00000000b,00000000b,\
  1714.                                     11101110b,11101110b,11101110b,11100000b,\
  1715.                                     11101110b,11101110b,11101110b,11100000b
  1716.  
  1717. .snake_dots                 db      3,2, 3,3, 4,3
  1718. .snake_direction            dd      RIGHT
  1719. .snake_direction_next       dd      RIGHT
  1720. .number_of_stones           dd      231
  1721. .name                       dd      stage_10_name
  1722.  
  1723. stage_11:
  1724. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1725.                                     00000000b,00000000b,00000000b,00000000b,\
  1726.                                     00000000b,00000000b,00000000b,00000000b,\
  1727.                                     00000111b,00000111b,00000111b,00000000b,\
  1728.                                     00001101b,10001101b,10001101b,10000000b,\
  1729.                                     00011000b,11011000b,11011000b,11000000b,\
  1730.                                     00000000b,01000000b,01000000b,01000000b,\
  1731.                                     00011000b,11011000b,11011000b,11000000b,\
  1732.                                     00001101b,10001101b,10001101b,10000000b,\
  1733.                                     00000111b,00000111b,00000111b,00000000b,\
  1734.                                     00000000b,00000000b,00000000b,00000000b,\
  1735.                                     00000000b,00000000b,00000000b,00000000b,\
  1736.                                     00000000b,00000000b,00000000b,00000000b,\
  1737.                                     00000000b,00000000b,00000000b,00000000b
  1738.  
  1739. .snake_dots                 db      3,12, 4,12, 5,12
  1740. .snake_direction            dd      RIGHT
  1741. .snake_direction_next       dd      RIGHT
  1742. .number_of_stones           dd      69
  1743. .name                       dd      stage_11_name
  1744.  
  1745. stage_12:
  1746. .field                      db      00000000b,00011000b,00001110b,00000000b,\
  1747.                                     01101110b,00010000b,00001010b,01010000b,\
  1748.                                     01001011b,11011001b,11000000b,01110000b,\
  1749.                                     01100001b,01000001b,01000000b,00000000b,\
  1750.                                     00000000b,00000000b,00000011b,10000000b,\
  1751.                                     00000000b,00000000b,00000010b,10000000b,\
  1752.                                     01010011b,00001100b,10100110b,00110000b,\
  1753.                                     01110010b,00001000b,11100100b,00010000b,\
  1754.                                     00000011b,00001100b,00000110b,00110000b,\
  1755.                                     00000000b,11100000b,00000000b,00000000b,\
  1756.                                     00010100b,10100000b,00000110b,00000000b,\
  1757.                                     11011100b,00000110b,10100100b,00000000b,\
  1758.                                     01000011b,10000010b,11100110b,10100000b,\
  1759.                                     11000010b,10000110b,00000000b,11100000b
  1760.  
  1761. .snake_dots                 db      27,0, 26,0, 25,0
  1762. .snake_direction            dd      LEFT
  1763. .snake_direction_next       dd      LEFT
  1764. .number_of_stones           dd      110
  1765. .name                       dd      stage_12_name
  1766.  
  1767. stage_13:
  1768. .field                      db      00111000b,00100000b,00000000b,00000000b,\
  1769.                                     01111100b,11110011b,11000011b,10000000b,\
  1770.                                     11111100b,01110011b,10000001b,11000000b,\
  1771.                                     11110000b,00000011b,11000000b,00000000b,\
  1772.                                     00000000b,00000010b,00000000b,00000000b,\
  1773.                                     00000000b,00000010b,00000001b,00000000b,\
  1774.                                     00011110b,00000111b,00000111b,00000000b,\
  1775.                                     00000111b,10001111b,11111110b,00000000b,\
  1776.                                     00000011b,11111111b,11111100b,00000000b,\
  1777.                                     00110001b,11111111b,11111001b,01100000b,\
  1778.                                     00001110b,11101011b,00100111b,10000000b,\
  1779.                                     01111000b,10000011b,10000010b,00000000b,\
  1780.                                     00000011b,11100110b,00011010b,11000000b,\
  1781.                                     00000000b,00000000b,00000000b,00000000b
  1782.  
  1783. .snake_dots                 db      0,5, 0,6, 0,7
  1784. .snake_direction            dd      DOWN
  1785. .snake_direction_next       dd      DOWN
  1786. .number_of_stones           dd      141
  1787. .name                       dd      stage_13_name
  1788.  
  1789. stage_14:
  1790. .field                      db      00000110b,00000000b,00000000b,00000000b,\
  1791.                                     00001000b,00000000b,00011000b,00000000b,\
  1792.                                     00010000b,00000000b,00000100b,00000000b,\
  1793.                                     00100001b,10000000b,11000010b,00000000b,\
  1794.                                     01000010b,01000001b,00100001b,00000000b,\
  1795.                                     10000100b,00000010b,00010000b,10000000b,\
  1796.                                     10001000b,00000100b,00001000b,01000000b,\
  1797.                                     10010000b,00001000b,00000100b,01000000b,\
  1798.                                     01001000b,00010000b,00001000b,10000000b,\
  1799.                                     00100100b,00100000b,00010001b,00000000b,\
  1800.                                     00010010b,01000001b,00100010b,00000000b,\
  1801.                                     00001001b,10000000b,11000100b,00000000b,\
  1802.                                     00000100b,00000000b,00001000b,00000000b,\
  1803.                                     00000000b,00000000b,00110000b,00000000b
  1804.  
  1805. .snake_dots                 db      8,0, 9,0, 10,0
  1806. .snake_direction            dd      RIGHT
  1807. .snake_direction_next       dd      RIGHT
  1808. .number_of_stones           dd      60
  1809. .name                       dd      stage_14_name
  1810.  
  1811. stage_15:
  1812. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1813.                                     00000000b,01110000b,00110000b,00000000b,\
  1814.                                     00000000b,10000000b,00001010b,00000000b,\
  1815.                                     00100001b,00000000b,00110010b,00000000b,\
  1816.                                     00010001b,00111111b,10011100b,00000000b,\
  1817.                                     00001001b,00100000b,11000000b,00000000b,\
  1818.                                     00010000b,00000010b,01000000b,00000000b,\
  1819.                                     00100000b,00000010b,00100001b,10000000b,\
  1820.                                     00010000b,00000010b,00110010b,01000000b,\
  1821.                                     00001000b,01000100b,00011100b,01000000b,\
  1822.                                     00010000b,00111000b,00010000b,01000000b,\
  1823.                                     00100000b,00000000b,00010000b,01000000b,\
  1824.                                     00000000b,00000000b,00000000b,00000000b,\
  1825.                                     00000000b,00000000b,00000000b,00000000b
  1826.  
  1827. .snake_dots                 db      13,3, 13,2, 14,2
  1828. .snake_direction            dd      RIGHT
  1829. .snake_direction_next       dd      RIGHT
  1830. .number_of_stones           dd      60
  1831. .name                       dd      stage_15_name
  1832.  
  1833. stage_16:
  1834. .field                      db      00000000b,10000010b,00000000b,00000000b,\
  1835.                                     00000000b,01001010b,10000010b,10100000b,\
  1836.                                     01111111b,11100111b,00000001b,11000000b,\
  1837.                                     00000000b,01000010b,00000000b,10000000b,\
  1838.                                     00000100b,10000000b,01000000b,00000001b,\
  1839.                                     00000100b,00100000b,10000000b,00000010b,\
  1840.                                     11000100b,00010001b,11111000b,00000111b,\
  1841.                                     00010101b,00001000b,10000000b,00000010b,\
  1842.                                     00001110b,00010000b,01000000b,00000001b,\
  1843.                                     00000100b,00100010b,00000000b,10000000b,\
  1844.                                     00000000b,00000010b,00000000b,01000000b,\
  1845.                                     00111111b,11111111b,11111111b,11100000b,\
  1846.                                     00000000b,00000010b,00000000b,01000000b,\
  1847.                                     00000000b,00000010b,00000000b,10000000b
  1848.  
  1849. .snake_dots                 db      11,7, 10,7, 9,7
  1850. .snake_direction            dd      LEFT
  1851. .snake_direction_next       dd      LEFT
  1852. .number_of_stones           dd      96
  1853. .name                       dd      stage_16_name
  1854.  
  1855. stage_17:
  1856. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1857.                                     00000000b,00000000b,00000000b,00000000b,\
  1858.                                     00000000b,00000000b,00000000b,00000000b,\
  1859.                                     00000111b,10000001b,11100000b,00000000b,\
  1860.                                     00001000b,01000010b,00010000b,00000000b,\
  1861.                                     00010001b,00100100b,01001000b,00000000b,\
  1862.                                     00010001b,00000000b,01001000b,00000000b,\
  1863.                                     00001000b,01000010b,00010000b,00000000b,\
  1864.                                     00000111b,10000001b,11100000b,00000000b,\
  1865.                                     00000000b,00000000b,00000000b,00000000b,\
  1866.                                     00000000b,01000000b,00000000b,00000000b,\
  1867.                                     00000000b,00111110b,00000000b,00000000b,\
  1868.                                     00000000b,00000000b,00000000b,00000000b,\
  1869.                                     00000000b,00000000b,00000000b,00000000b
  1870.  
  1871. .snake_dots                 db      11,7, 11,8, 12,8
  1872. .snake_direction            dd      RIGHT
  1873. .snake_direction_next       dd      RIGHT
  1874. .number_of_stones           dd      40
  1875. .name                       dd      stage_17_name
  1876.  
  1877. stage_18:
  1878. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1879.                                     01000100b,01000100b,01000100b,01000000b,\
  1880.                                     00101010b,10101010b,10101010b,10100000b,\
  1881.                                     00010001b,00010001b,00010001b,00000000b,\
  1882.                                     00000000b,00000000b,00000000b,00000000b,\
  1883.                                     00000000b,00000000b,00000000b,00000000b,\
  1884.                                     01000100b,01000100b,01000100b,01000000b,\
  1885.                                     00101010b,10101010b,10101010b,10100000b,\
  1886.                                     00010001b,00010001b,00010001b,00000000b,\
  1887.                                     00000000b,00000000b,00000000b,00000000b,\
  1888.                                     00000000b,00000000b,00000000b,00000000b,\
  1889.                                     01000100b,01000100b,01000100b,01000000b,\
  1890.                                     00101010b,10101010b,10101010b,10100000b,\
  1891.                                     00010001b,00010001b,00010001b,00000000b
  1892.  
  1893. .snake_dots                 db      2,5, 3,5, 4,5
  1894. .snake_direction            dd      RIGHT
  1895. .snake_direction_next       dd      RIGHT
  1896. .number_of_stones           dd      78
  1897. .name                       dd      stage_18_name
  1898.  
  1899. stage_19:
  1900. .field                      db      01000010b,00100100b,10000101b,00000000b,\
  1901.                                     00010000b,00010000b,00100000b,10000000b,\
  1902.                                     00111001b,00000010b,00010000b,00100000b,\
  1903.                                     01000100b,00001000b,00000010b,00000000b,\
  1904.                                     01010101b,01000000b,01000000b,01000000b,\
  1905.                                     01010100b,00010000b,00001000b,11100000b,\
  1906.                                     00000100b,10001001b,00100001b,00000000b,\
  1907.                                     01111100b,00100000b,00000001b,01010000b,\
  1908.                                     00111001b,00000100b,00010001b,01010000b,\
  1909.                                     00010000b,00000000b,10000001b,00010000b,\
  1910.                                     11010111b,11100000b,00011101b,11110000b,\
  1911.                                     00010000b,01000000b,00100000b,11100000b,\
  1912.                                     00010000b,10000000b,00100000b,01000000b,\
  1913.                                     00000001b,00000000b,00010000b,01000000b
  1914.  
  1915. .snake_dots                 db      27,6, 0,6, 1,6
  1916. .snake_direction            dd      RIGHT
  1917. .snake_direction_next       dd      RIGHT
  1918. .number_of_stones           dd      95
  1919. .name                       dd      stage_19_name
  1920.  
  1921. stage_20:
  1922. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1923.                                     00000000b,00000000b,10001000b,00000000b,\
  1924.                                     00000000b,00011100b,10000100b,00000000b,\
  1925.                                     00000000b,01100100b,10000010b,00000000b,\
  1926.                                     00000011b,10000100b,10000100b,00000000b,\
  1927.                                     00000010b,00000100b,10001000b,00000000b,\
  1928.                                     00000010b,00000100b,10000100b,00000000b,\
  1929.                                     00000010b,00000100b,10000010b,00000000b,\
  1930.                                     00000010b,00111100b,10010010b,00000000b,\
  1931.                                     00011110b,00111100b,10010100b,00000000b,\
  1932.                                     00011110b,00111100b,10001000b,00000000b,\
  1933.                                     00011110b,00000000b,10000000b,00000000b,\
  1934.                                     00000000b,00000000b,10000000b,00000000b,\
  1935.                                     00000000b,00000000b,00000000b,00000000b
  1936.  
  1937. .snake_dots                 db      17,2, 17,3, 17,4
  1938. .snake_direction            dd      DOWN
  1939. .snake_direction_next       dd      DOWN
  1940. .number_of_stones           dd      65
  1941. .name                       dd      stage_20_name
  1942.  
  1943. stage_21:
  1944. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1945.                                     00000000b,00000000b,00000000b,00000000b,\
  1946.                                     00000011b,11111111b,11111110b,00000000b,\
  1947.                                     00000001b,01000100b,01000100b,00000000b,\
  1948.                                     00000010b,01000100b,01000100b,00000000b,\
  1949.                                     00001100b,01000100b,01000100b,00000000b,\
  1950.                                     01110000b,01000100b,01000100b,00000000b,\
  1951.                                     01110000b,01000100b,01000100b,00000000b,\
  1952.                                     01110000b,11101110b,11101110b,00000000b,\
  1953.                                     00000000b,11101110b,11101110b,00000000b,\
  1954.                                     00000000b,11101110b,11101110b,00000000b,\
  1955.                                     00000000b,00000000b,00000000b,00000000b,\
  1956.                                     00000000b,00000000b,00000000b,00000000b,\
  1957.                                     00000000b,00000000b,00000000b,00000000b
  1958.  
  1959. .snake_dots                 db      10,1, 11,1, 12,1
  1960. .snake_direction            dd      RIGHT
  1961. .snake_direction_next       dd      RIGHT
  1962. .number_of_stones           dd      86
  1963. .name                       dd      stage_21_name
  1964.  
  1965. stage_22:
  1966. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1967.                                     00000011b,10000000b,00000000b,00000000b,\
  1968.                                     00000111b,11100000b,00000000b,00000000b,\
  1969.                                     00001111b,11110000b,00000000b,00000000b,\
  1970.                                     00011111b,11100000b,00000000b,00000000b,\
  1971.                                     00011111b,11000011b,00001100b,00110000b,\
  1972.                                     00011111b,10000111b,10011110b,01110000b,\
  1973.                                     00011111b,11000111b,10011110b,01110000b,\
  1974.                                     00011111b,11100011b,00001100b,00110000b,\
  1975.                                     00001111b,11110000b,00000000b,00000000b,\
  1976.                                     00000111b,11100000b,00000000b,00000000b,\
  1977.                                     00000011b,10000000b,00000000b,00000000b,\
  1978.                                     00000000b,00000000b,00000000b,00000000b,\
  1979.                                     00000000b,00000000b,00000000b,00000000b
  1980.  
  1981. .snake_dots                 db      1,7, 1,6, 1,5
  1982. .snake_direction            dd      UP
  1983. .snake_direction_next       dd      UP
  1984. .number_of_stones           dd      104
  1985. .name                       dd      stage_22_name
  1986.  
  1987. stage_23:
  1988. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  1989.                                     00100000b,01000101b,00010000b,00100000b,\
  1990.                                     00011010b,00100101b,00100010b,11000000b,\
  1991.                                     00000100b,10101000b,10101001b,00000000b,\
  1992.                                     00000100b,10010010b,01001001b,00000000b,\
  1993.                                     00001011b,00110000b,01100110b,10000000b,\
  1994.                                     00000000b,11001010b,10011000b,00000000b,\
  1995.                                     00000001b,00000111b,00000100b,00000000b,\
  1996.                                     00001110b,01001010b,10010011b,10000000b,\
  1997.                                     00000010b,00110000b,01100010b,00000000b,\
  1998.                                     00000101b,00010010b,01000101b,00000000b,\
  1999.                                     00001001b,00001000b,10000100b,10000000b,\
  2000.                                     00000000b,00001000b,10000000b,00000000b,\
  2001.                                     00000000b,00000000b,00000000b,00000000b
  2002.  
  2003. .snake_dots                 db      15,0, 14,0, 13,0
  2004. .snake_direction            dd      LEFT
  2005. .snake_direction_next       dd      LEFT
  2006. .number_of_stones           dd      85
  2007. .name                       dd      stage_23_name
  2008.  
  2009. stage_24:
  2010. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  2011.                                     00111111b,11111111b,11111111b,10000000b,\
  2012.                                     00100000b,00000000b,00000000b,10000000b,\
  2013.                                     00100011b,11111111b,11111000b,10000000b,\
  2014.                                     00100010b,00000000b,00001000b,10000000b,\
  2015.                                     00100010b,00111111b,10001000b,10000000b,\
  2016.                                     00100010b,00100000b,10001000b,10000000b,\
  2017.                                     00101010b,10101010b,10101010b,10000000b,\
  2018.                                     00001000b,10001110b,00100010b,00000000b,\
  2019.                                     00001000b,10000000b,00100010b,00000000b,\
  2020.                                     00001000b,11111111b,11100010b,00000000b,\
  2021.                                     00001000b,00000000b,00000010b,00000000b,\
  2022.                                     00001111b,11111111b,11111110b,00000000b,\
  2023.                                     00000000b,00000000b,00000000b,00000000b
  2024.  
  2025. .snake_dots                 db      1,0, 0,0, 0,1
  2026. .snake_direction            dd      DOWN
  2027. .snake_direction_next       dd      DOWN
  2028. .number_of_stones           dd      120
  2029. .name                       dd      stage_24_name
  2030.  
  2031. stage_25:
  2032. .field                      db      00000100b,11000000b,00000000b,00000000b,\
  2033.                                     00000011b,10000000b,00110010b,00000000b,\
  2034.                                     10011010b,10000000b,00011100b,00000000b,\
  2035.                                     01110000b,00000000b,00010101b,10010000b,\
  2036.                                     01010000b,00000111b,00000000b,11100000b,\
  2037.                                     00000100b,00000101b,00000000b,10100000b,\
  2038.                                     00000100b,00000100b,00000000b,00000000b,\
  2039.                                     00000011b,11111100b,00011001b,00000000b,\
  2040.                                     00000010b,10010100b,00001110b,00000000b,\
  2041.                                     00000010b,10010100b,00001010b,00000000b,\
  2042.                                     00000000b,00000000b,00000000b,00000000b,\
  2043.                                     00000011b,00100001b,10010011b,00100000b,\
  2044.                                     00000001b,11000000b,11100001b,11000000b,\
  2045.                                     00000001b,01000000b,10100001b,01000000b
  2046.  
  2047. .snake_dots                 db      11,2, 12,2, 13,2
  2048. .snake_direction            dd      RIGHT
  2049. .snake_direction_next       dd      RIGHT
  2050. .number_of_stones           dd      88
  2051. .name                       dd      stage_25_name
  2052.  
  2053. stage_26:
  2054. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  2055.                                     00111100b,01001111b,01111010b,01000000b,\
  2056.                                     00100000b,01000001b,00001010b,01000000b,\
  2057.                                     00100100b,01001111b,01111011b,11000000b,\
  2058.                                     00000100b,01001000b,00001000b,01000000b,\
  2059.                                     00111100b,01001111b,01111000b,01000000b,\
  2060.                                     00000000b,00000000b,00000000b,00000000b,\
  2061.                                     00000000b,00000000b,00000000b,00000000b,\
  2062.                                     00111101b,11101111b,01111011b,11000000b,\
  2063.                                     00100001b,00000001b,00000000b,00000000b,\
  2064.                                     00111101b,11100001b,01111011b,11000000b,\
  2065.                                     00000100b,00000001b,00000000b,01000000b,\
  2066.                                     00111101b,11100001b,01111011b,11000000b,\
  2067.                                     00000000b,00000000b,00000000b,00000000b
  2068.  
  2069. .snake_dots                 db      1,5, 0,5, 0,6
  2070. .snake_direction            dd      DOWN
  2071. .snake_direction_next       dd      DOWN
  2072. .number_of_stones           dd      115
  2073. .name                       dd      stage_26_name
  2074.  
  2075. stage_27:
  2076. .field                      db      00000000b,10000000b,00000000b,01000000b,\
  2077.                                     00000000b,10000000b,01000000b,11100000b,\
  2078.                                     00100011b,11100000b,01000000b,01000000b,\
  2079.                                     01110000b,10000001b,11110000b,00000000b,\
  2080.                                     00100000b,10000000b,01000000b,00000000b,\
  2081.                                     00000000b,00000000b,01000010b,00000000b,\
  2082.                                     00000000b,00000000b,00000000b,00000000b,\
  2083.                                     00000010b,00000000b,00000000b,00000000b,\
  2084.                                     00000111b,00000000b,00000000b,10000000b,\
  2085.                                     00000010b,00001000b,00000001b,11000000b,\
  2086.                                     00000000b,00000000b,10000000b,10000000b,\
  2087.                                     00000000b,01000001b,11000000b,00000000b,\
  2088.                                     01000000b,11100000b,10000000b,00000000b,\
  2089.                                     00000000b,01000000b,00000000b,00000000b
  2090.  
  2091. .snake_dots                 db      12,8, 12,7, 12,6
  2092. .snake_direction            dd      UP
  2093. .snake_direction_next       dd      UP
  2094. .number_of_stones           dd      51
  2095. .name                       dd      stage_27_name
  2096.  
  2097. stage_28:
  2098. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  2099.                                     00000000b,00000000b,00000000b,00000000b,\
  2100.                                     00000000b,00000000b,00000000b,00000000b,\
  2101.                                     00000000b,00000000b,00000000b,00000000b,\
  2102.                                     00000100b,00000000b,00000010b,00000000b,\
  2103.                                     00010100b,00000000b,00000010b,10000000b,\
  2104.                                     01010100b,00000000b,00000010b,10100000b,\
  2105.                                     01010101b,11111111b,11111010b,10100000b,\
  2106.                                     01010100b,00000000b,00000010b,10100000b,\
  2107.                                     00010100b,00000000b,00000010b,10000000b,\
  2108.                                     00000100b,00000000b,00000010b,00000000b,\
  2109.                                     00000000b,00000000b,00000000b,00000000b,\
  2110.                                     00000000b,00000000b,00000000b,00000000b,\
  2111.                                     00000000b,00000000b,00000000b,00000000b
  2112.  
  2113. .snake_dots                 db      13,8, 12,8, 11,8
  2114. .snake_direction            dd      LEFT
  2115. .snake_direction_next       dd      LEFT
  2116. .number_of_stones           dd      44
  2117. .name                       dd      stage_28_name
  2118.  
  2119. stage_29:
  2120. .field                      db      00000000b,01110000b,00000000b,00000000b,\
  2121.                                     00000100b,01000110b,00000001b,10000000b,\
  2122.                                     01001110b,00001100b,01100000b,11000000b,\
  2123.                                     01000000b,00000000b,01100000b,00000000b,\
  2124.                                     01100000b,01111000b,00000001b,10010000b,\
  2125.                                     00000000b,00000010b,10000101b,10110000b,\
  2126.                                     00110000b,00110010b,10001100b,00100000b,\
  2127.                                     00011011b,00110110b,10000100b,00000000b,\
  2128.                                     00000001b,00000000b,10010000b,10000000b,\
  2129.                                     00100001b,00000000b,00111000b,10000000b,\
  2130.                                     00111001b,00110011b,00000011b,10000000b,\
  2131.                                     01111111b,11111111b,00011011b,11010000b,\
  2132.                                     11111111b,11111111b,00011111b,11110000b,\
  2133.                                     11111111b,11111111b,00111111b,11110000b
  2134.  
  2135. .snake_dots                 db      0,0, 1,0, 2,0
  2136. .snake_direction            dd      RIGHT
  2137. .snake_direction_next       dd      RIGHT
  2138. .number_of_stones           dd      151
  2139. .name                       dd      stage_29_name
  2140.  
  2141. stage_30:
  2142. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  2143.                                     00000000b,00000001b,01011100b,00000000b,\
  2144.                                     00000000b,00000001b,11001000b,00000000b,\
  2145.                                     00000100b,00000001b,01001000b,00000000b,\
  2146.                                     00000100b,00000100b,00000000b,00000000b,\
  2147.                                     00000100b,00000100b,00000100b,00000000b,\
  2148.                                     00000100b,00000100b,00000100b,00000000b,\
  2149.                                     00000100b,00000100b,00000100b,00000000b,\
  2150.                                     01111111b,11000100b,11111111b,11100000b,\
  2151.                                     00000100b,00000100b,00000100b,00000000b,\
  2152.                                     00011111b,00111111b,10001110b,00000000b,\
  2153.                                     00000100b,00000100b,00000100b,00000000b,\
  2154.                                     00011111b,00011111b,00011111b,00000000b,\
  2155.                                     11111111b,11111111b,11111111b,11110000b
  2156.  
  2157. .snake_dots                 db      8,2, 9,2, 10,2
  2158. .snake_direction            dd      RIGHT
  2159. .snake_direction_next       dd      RIGHT
  2160. .number_of_stones           dd      109
  2161. .name                       dd      stage_30_name
  2162.  
  2163. stage_31:
  2164. .field                      db      00000101b,00010000b,00000100b,01000000b,\
  2165.                                     01000100b,01010101b,00010100b,01000000b,\
  2166.                                     01000101b,01010101b,01000101b,00010000b,\
  2167.                                     01010000b,00010100b,01000000b,01010000b,\
  2168.                                     00010101b,01000101b,01010100b,01000000b,\
  2169.                                     01000001b,00010000b,01010101b,01000000b,\
  2170.                                     01010101b,00010100b,00000101b,00010000b,\
  2171.                                     00000101b,01010000b,01000101b,01010000b,\
  2172.                                     01010000b,01000100b,00000000b,01010000b,\
  2173.                                     00010101b,00000101b,00010100b,00010000b,\
  2174.                                     01010001b,00010001b,01000001b,01000000b,\
  2175.                                     01000100b,00000101b,01010100b,01010000b,\
  2176.                                     00010001b,01010100b,00010001b,00010000b,\
  2177.                                     00000100b,01000001b,00010001b,00000000b
  2178.  
  2179. .snake_dots                 db      18,8, 17,8, 16,8
  2180. .snake_direction            dd      LEFT
  2181. .snake_direction_next       dd      LEFT
  2182. .number_of_stones           dd      112
  2183. .name                       dd      stage_31_name
  2184.  
  2185. stage_32:
  2186. .field                      db      11111111b,11111111b,11111111b,11110000b,\
  2187.                                     10010010b,01001001b,00100100b,10010000b,\
  2188.                                     10010000b,01000001b,00000100b,00010000b,\
  2189.                                     10010010b,01001001b,00100100b,10010000b,\
  2190.                                     10010010b,01001001b,00100100b,10010000b,\
  2191.                                     10010010b,01001001b,00100100b,10010000b,\
  2192.                                     10010010b,01001001b,00100100b,10010000b,\
  2193.                                     10010010b,01001001b,00100100b,10010000b,\
  2194.                                     10010010b,01001001b,00100100b,10010000b,\
  2195.                                     10010010b,01001001b,00100100b,10010000b,\
  2196.                                     10010010b,01001001b,00100100b,10010000b,\
  2197.                                     10000010b,00001000b,00100000b,10010000b,\
  2198.                                     10010010b,01001001b,00100100b,10010000b,\
  2199.                                     11111111b,11111111b,11111111b,11110000b
  2200.  
  2201. .snake_dots                 db      1,1, 1,2, 1,3
  2202. .snake_direction            dd      DOWN
  2203. .snake_direction_next       dd      DOWN
  2204. .number_of_stones           dd      168
  2205. .name                       dd      stage_32_name
  2206.  
  2207. stage_33:
  2208. .field                      db      00000000b,00000000b,00000000b,00000000b,\
  2209.                                     00000000b,00000000b,00000000b,00000000b,\
  2210.                                     01111111b,11001111b,11111111b,11100000b,\
  2211.                                     01000100b,01001000b,01000000b,00100000b,\
  2212.                                     01000100b,01001000b,01000001b,10100000b,\
  2213.                                     01000100b,01001000b,01001101b,10100000b,\
  2214.                                     00000000b,00000000b,00000110b,00000000b,\
  2215.                                     01000100b,01001000b,01000010b,00100000b,\
  2216.                                     01000100b,01001000b,01001111b,00100000b,\
  2217.                                     01000100b,01001000b,01001111b,00100000b,\
  2218.                                     01000100b,01001000b,01000110b,00100000b,\
  2219.                                     01111111b,11001111b,11111111b,11100000b,\
  2220.                                     00000000b,00000000b,00000000b,00000000b,\
  2221.                                     00000000b,00000000b,00000000b,00000000b
  2222.  
  2223. .snake_dots                 db      6,6, 7,6, 8,6
  2224. .snake_direction            dd      RIGHT
  2225. .snake_direction_next       dd      RIGHT
  2226. .number_of_stones           dd      109
  2227. .name                       dd      stage_33_name
  2228.  
  2229. stage_34:
  2230. .field                      db      01110000b,00000000b,00000011b,10000000b,\
  2231.                                     00010010b,00010000b,01111100b,00000000b,\
  2232.                                     00011110b,00010000b,00100100b,00000000b,\
  2233.                                     00000100b,00011001b,00100111b,00000000b,\
  2234.                                     00001111b,10001001b,00100000b,00110000b,\
  2235.                                     00000001b,00001011b,00101000b,00100000b,\
  2236.                                     00000001b,00011110b,01111000b,00100000b,\
  2237.                                     00111000b,00000010b,00001100b,10100000b,\
  2238.                                     00001110b,00100010b,00000000b,10100000b,\
  2239.                                     01100011b,11111110b,01000011b,11100000b,\
  2240.                                     00111110b,00100010b,01000000b,10000000b,\
  2241.                                     00000000b,01100011b,11000010b,10000000b,\
  2242.                                     00000000b,01000000b,01100111b,10000000b,\
  2243.                                     00000000b,00000000b,00000010b,00000000b
  2244.  
  2245. .snake_dots                 db      7,0, 8,0, 9,0
  2246. .snake_direction            dd      RIGHT
  2247. .snake_direction_next       dd      RIGHT
  2248. .number_of_stones           dd      113
  2249. .name                       dd      stage_34_name
  2250.  
  2251. stage_35:
  2252. .field                      db      00000100b,00000000b,00001010b,00000000b,\
  2253.                                     00010100b,01000000b,00101010b,00000000b,\
  2254.                                     00010100b,10000010b,00010010b,10000000b,\
  2255.                                     00010001b,00000000b,00010010b,10000000b,\
  2256.                                     00010001b,00000010b,00001010b,10000000b,\
  2257.                                     01010010b,00000010b,00001000b,10100000b,\
  2258.                                     01000100b,00000000b,00001000b,10100000b,\
  2259.                                     01000100b,00000010b,00000100b,10100000b,\
  2260.                                     01001000b,00000010b,00000100b,00100000b,\
  2261.                                     01001000b,00000000b,00000010b,00100000b,\
  2262.                                     00010000b,00000010b,00000010b,00100000b,\
  2263.                                     00110000b,00000010b,00000010b,00100000b,\
  2264.                                     00100000b,00000010b,00000001b,00000000b,\
  2265.                                     00000000b,00000000b,00000000b,00000000b
  2266.  
  2267. .snake_dots                 db      13,11, 13,10, 13,9
  2268. .snake_direction            dd      UP
  2269. .snake_direction_next       dd      UP
  2270. .number_of_stones           dd      66
  2271. .name                       dd      stage_35_name
  2272.  
  2273. stage_36:
  2274. .field                      db      10101110b,10001110b,00110100b,11100000b,\
  2275.                                     11101000b,10001110b,00101010b,10000000b,\
  2276.                                     10101110b,11101000b,00101010b,11100000b,\
  2277.                                     00000000b,00000000b,00000000b,00000000b,\
  2278.                                     00000000b,00000000b,00000000b,00000000b,\
  2279.                                     00000000b,10110010b,01000100b,00000000b,\
  2280.                                     00000001b,10100101b,01010100b,00000000b,\
  2281.                                     00000001b,10100101b,00101000b,00000000b,\
  2282.                                     00000000b,00000000b,00000000b,00000000b,\
  2283.                                     00010001b,11010101b,11010001b,11000000b,\
  2284.                                     00010001b,11010101b,11010001b,00000000b,\
  2285.                                     00010001b,00010101b,00010000b,10000000b,\
  2286.                                     00011101b,11001001b,11011100b,01000000b,\
  2287.                                     00000000b,00000000b,00000001b,11010000b
  2288.  
  2289. .snake_dots                 db      27,11, 27,10, 27,9
  2290. .snake_direction            dd      UP
  2291. .snake_direction_next       dd      UP
  2292. .number_of_stones           dd      112
  2293. .name                       dd      stage_36_name
  2294.  
  2295.  
  2296. stage_00_name               db      'Classic mode',0
  2297. stage_01_name               db      'Begin',0
  2298. stage_02_name               db      'Frame',0
  2299. stage_03_name               db      'Sight',0
  2300. stage_04_name               db      'Dashed',0
  2301. stage_05_name               db      'Beams',0
  2302. stage_06_name               db      'Pipe',0
  2303. stage_07_name               db      'Labyrinth',0
  2304. stage_08_name               db      'Sea battle',0
  2305. stage_09_name               db      'Recursion',0
  2306. stage_10_name               db      'Narrow corridors',0
  2307. stage_11_name               db      'CCC',0
  2308. stage_12_name               db      'Deadlocks',0
  2309. stage_13_name               db      'Boat',0
  2310. stage_14_name               db      'Pattern',0
  2311. stage_15_name               db      'Guernica',0
  2312. stage_16_name               db      'Goto',0
  2313. stage_17_name               db      'Smiling face',0
  2314. stage_18_name               db      'Waves',0
  2315. stage_19_name               db      'First snow',0
  2316. stage_20_name               db      'Music and silence',0
  2317. stage_21_name               db      'Experiment',0
  2318. stage_22_name               db      'Pacman',0
  2319. stage_23_name               db      'Intricate pattern',0
  2320. stage_24_name               db      'Square arcs',0
  2321. stage_25_name               db      'In the animal world',0
  2322. stage_26_name               db      'Digits',0
  2323. stage_27_name               db      'Pluses',0
  2324. stage_28_name               db      'Rod',0
  2325. stage_29_name               db      'Tetris',0
  2326. stage_30_name               db      'Towers of Hanoi',0
  2327. stage_31_name               db      'Ruins',0
  2328. stage_32_name               db      'Walls of Akendora',0
  2329. stage_33_name               db      'Geranium in the window',0
  2330. stage_34_name               db      'Algae',0
  2331. stage_35_name               db      'The road ahead',0
  2332. stage_36_name               db      'Help me draw levels!',0
  2333.  
  2334.  
  2335. background_color            dd      0x000000
  2336. decorations_color           dd      0x00000000
  2337. snake_color                 dd      0x000000
  2338. snake_head_color            dd      0x000000
  2339. lives_in_head_number_color  dd      0x000000
  2340. snake_picture_color         dd      0x000000
  2341. version_picture_color       dd      0x000000
  2342. pause_picture_color         dd      0x000000
  2343. game_over_picture_color     dd      0x000000
  2344. you_win_picture_color       dd      0x000000
  2345. eat_color                   dd      0x000000
  2346. navigation_strings_color    dd      0x80000000
  2347. game_over_strings_color     dd      0x80000000
  2348. score_string_color          dd      0x80000000
  2349. hiscore_string_color        dd      0x80000000
  2350. champion_string_color       dd      0x80000000
  2351. game_over_hiscore_color     dd      0x80000000
  2352. score_number_color          dd      0x40000000
  2353. hiscore_number_color        dd      0x00000000
  2354. champion_name_color         dd      0x80000000
  2355. button_color                dd      0x000000
  2356. button_text_color           dd      0x80000000
  2357. stone_color                 dd      0x000000
  2358. splash_background_color     dd      0x000000
  2359. splash_level_string_color   dd      0x000000
  2360. splash_level_number_color   dd      0x000000
  2361. level_string_color          dd      0x80000000
  2362. level_number_color          dd      0x00000000
  2363.  
  2364.  
  2365. align 4
  2366. @IMPORT:
  2367.  
  2368. library \
  2369.         libini      ,   'libini.obj'        ,\
  2370.         box_lib     ,   'box_lib.obj'
  2371.  
  2372. import  libini,\
  2373.     ini.get_str     ,   'ini_get_str'       ,\
  2374.     ini.get_int     ,   'ini_get_int'       ,\
  2375.     ini.set_str     ,   'ini_set_str'       ,\
  2376.     ini.set_int     ,   'ini_set_int'       ,\
  2377.     ini.get_color   ,   'ini_get_color'     ,\
  2378.     ini.get_shortcut,   'ini_get_shortcut'
  2379.  
  2380. import  box_lib,\
  2381.     edit_box.draw   ,   'edit_box'          ,\
  2382.     edit_box.key    ,   'edit_box_key'      ,\
  2383.     edit_box.mouse  ,   'edit_box_mouse'
  2384.  
  2385. bFirstDraw  db  0
  2386.  
  2387. aPreferences                db      'Preferences',0
  2388. aSpeed                      db      'Speed',0
  2389. aTheme                      db      'Theme',0
  2390. aSmart_reverse              db      'Smart_reverse',0
  2391. aShow_lives_style           db      'Show_lives_style',0
  2392. aDraw_level_name_in_window_title db 'Draw_level_name_in_window_title',0
  2393. aSeparating_symbol          db      'Separating_symbol',0
  2394.  
  2395. aShortcuts                  db      'Shortcuts',0
  2396. aMove_left                  db      'Move_left',0
  2397. aMove_down                  db      'Move_down',0
  2398. aMove_up                    db      'Move_up',0
  2399. aMove_right                 db      'Move_right',0
  2400. aReverse                    db      'Reverse',0
  2401. aIncrease                   db      'Increase',0
  2402. aDecrease                   db      'Decrease',0
  2403.  
  2404. aTheme_name                 db      32  dup (0)
  2405. aDecorations                db      'Decorations',0
  2406. aBackground_color           db      'Background_color',0
  2407. aDecorations_color          db      'Decorations_color',0
  2408. aSnake_color                db      'Snake_color',0
  2409. aSnake_head_color           db      'Snake_head_color',0
  2410. aLives_in_head_number_color db      'Lives_in_head_number_color',0
  2411. aSnake_picture_color        db      'Snake_picture_color',0
  2412. aVersion_picture_color      db      'Version_picture_color',0
  2413. aPause_picture_color        db      'Pause_picture_color',0
  2414. aGame_over_picture_color    db      'Game_over_picture_color',0
  2415. aYou_win_picture_color      db      'You_win_picture_color',0
  2416. aEat_color                  db      'Eat_color',0
  2417. aNavigation_strings_color   db      'Navigation_string_color',0
  2418. aGame_over_strings_color    db      'Game_over_string_color',0
  2419. aScore_string_color         db      'Score_string_color',0
  2420. aHiscore_string_color       db      'Hiscore_string_color',0
  2421. aChampion_string_color      db      'Champion_string_color',0
  2422. aGame_over_hiscore_color    db      'Game_over_hiscore_color',0
  2423. aScore_number_color         db      'Score_number_color',0
  2424. aHiscore_number_color       db      'Hiscore_number_color',0
  2425. aChampion_name_color        db      'Champion_name_color',0
  2426. aEdit_box_selection_color   db      'Edit_box_selection_color',0
  2427. aButton_color               db      'Button_color',0
  2428. aButton_text_color          db      'Button_text_color',0
  2429. aStone_color                db      'Stone_color',0
  2430. aSplash_background_color    db      'Splash_background_color',0
  2431. aSplash_level_string_color  db      'Splash_level_string_color',0
  2432. aSplash_level_number_color  db      'Splash_level_number_color',0
  2433. aLevel_string_color         db      'Level_string_color',0
  2434. aLevel_number_color         db      'Level_number_color',0
  2435.  
  2436. aReserved                   db      'Reserved',0
  2437. aSquare_side_length         db      'Square_side_length',0
  2438. aHiscore_classic            db      'Hiscore_classic',0
  2439. aChampion_name_classic      db      'Champion_name_classic',0
  2440. aHiscore_levels             db      'Hiscore_levels',0
  2441. aChampion_name_levels       db      'Champion_name_levels',0
  2442.  
  2443. 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
  2444.  
  2445. hed                         db      '',0
  2446. ;;---Variables-------------------------------------------------------------------------------------------------------------
  2447. i_end:
  2448. hed_end:
  2449. rb  256
  2450. mouse_dd                    rd      1
  2451.  
  2452. window_style                rd      1
  2453.  
  2454. cur_level                   rd      1
  2455. cur_level_number            rd      1
  2456. hi_level                    rd      1
  2457.  
  2458. score                       rd      1
  2459. hi_score_classic            rd      1
  2460. hi_score_levels             rd      1
  2461.  
  2462. champion_name_classic       rb      CHAMPION_NAME_LENGTH
  2463. champion_name_levels        rb      CHAMPION_NAME_LENGTH
  2464.  
  2465. snake_dots                  rb      GRID_WIDTH*GRID_HEIGHT*2+3          ; +3 bytes for faster dword copying
  2466. snake_direction             rd      1
  2467. snake_direction_next        rd      1
  2468. snake_length_x2             rd      1
  2469.  
  2470. decorations                 rd      1
  2471. number_of_free_dots         rd      1
  2472.  
  2473. eat                         rw      1
  2474.  
  2475. g_s                         rd      1
  2476. g_e                         rd      1
  2477.  
  2478. window_width                rd      1
  2479. window_height               rd      1
  2480. wp_x                        rd      1
  2481. wp_y                        rd      1
  2482.  
  2483. gw_mul_gs                   rd      1
  2484. gh_mul_gs                   rd      1
  2485. gbxm1_plus_gw_mul_gs        rd      1
  2486. gbym1_plus_gh_mul_gs        rd      1
  2487. gs_shl16_gs                 rd      1
  2488. gbxm1_shl16_gbxm1           rd      1
  2489. gbym1_shl16_gbym1           rd      1
  2490.  
  2491. bottom_top_strings          rd      1
  2492. bottom_middle_strings       rd      1
  2493. bottom_bottom_strings       rd      1
  2494. top_strings                 rd      1
  2495.  
  2496. button_x_left               rd      1
  2497. button_x_right              rd      1
  2498. button_y_top                rd      1
  2499. button_y_middle             rd      1
  2500. button_y_bottom             rd      1
  2501. button_width_short          rd      1
  2502. button_width_long           rd      1
  2503. button_height               rd      1
  2504.  
  2505. cursor_data                 rb      32*32*4
  2506. cursor_handle               rd      1
  2507.  
  2508. cur_dir_path                rb      4096
  2509. @PARAMS                     rb      4096
  2510.  
  2511. field_map                   rb      GRID_WIDTH*GRID_HEIGHT*2
  2512.  
  2513. proc_info                   process_information
  2514.  
  2515. smart_reverse               rd      1
  2516. show_lives_style            rd      1
  2517. draw_level_name_in_window_title rd  1
  2518. separating_symbol           rd      1
  2519.  
  2520. shortcut_move_left          rb      1
  2521. shortcut_move_down          rb      1
  2522. shortcut_move_up            rb      1
  2523. shortcut_move_right         rb      1
  2524. shortcut_reverse            rb      1
  2525. shortcut_increase           rb      1
  2526. shortcut_decrease           rb      1
  2527.  
  2528. square_side_length          rd      1
  2529.  
  2530. gbxm1                       rd      1
  2531. gbym1                       rd      1
  2532. speed_up_counter            rw      1
  2533.  
  2534. rb 4096
  2535. stacktop:
  2536. d_end:
  2537.