diff --git a/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm b/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm index f7a370123..c2b2cd0f0 100644 --- a/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm +++ b/programs/develop/libraries/libs-dev/libimg/xcf/xcf.asm @@ -27,7 +27,7 @@ ;; ;; ;;================================================================================================;; include 'xcf.inc' -;include '../../../../../system/board/trunk/debug.inc' +;include '../../../../../system/board/debug.inc' MAX_LAYERS = 255 @@ -821,7 +821,7 @@ endl mov [bottom_x1], 0 mov ecx, [ebx + Image.Width] - mov [bottom_length], ecx + mov [bottom_length], ecx mov eax, [edx + Image.Extended] movsx eax, word[eax + xcf_ext.offset_x] @@ -858,7 +858,7 @@ endl mov [bottom_y1], 0 mov ecx, [ebx + Image.Height] - mov [bottom_length], ecx + mov [bottom_length], ecx mov eax, [edx + Image.Extended] movsx eax, word[eax + xcf_ext.offset_y] @@ -972,7 +972,7 @@ endl add edi, edx mov edx, [edi] jmp .composite_found - @@: + @@: add edi, 16 dec ecx jnz .still diff --git a/programs/games/snake/snake.asm b/programs/games/snake/snake.asm index bd46ce0fa..22391a140 100644 --- a/programs/games/snake/snake.asm +++ b/programs/games/snake/snake.asm @@ -1,2550 +1,2553 @@ -;;===HEADER==================================================================================================================== - -use32 - org 0x0 - db 'MENUET01' - dd 0x01,start,i_end,d_end,stacktop,0x0,cur_dir_path - -;;---HEADER-------------------------------------------------------------------------------------------------------------------- - -include '../../proc32.inc' -include '../../macros.inc' -include '../../dll.inc' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -;include '../../system/board/trunk/debug.inc' - -;;===Define_chapter============================================================================================================ - -WINDOW_MODE_WINDOWED equ 0 -WINDOW_MODE_FULLSCREEN equ 1 - -GRID_WIDTH equ 28 -GRID_HEIGHT equ 14 - -MIN_SQUARE_SIDE_LENGTH equ 9 - -SCORE_EAT equ 100 - -LEFT equ 0 -DOWN equ 1 -UP equ 2 -RIGHT equ 3 - -struct LEVEL - field db 4*GRID_HEIGHT dup (?) - snake_dots db 6 dup (?) - snake_direction dd ? - snake_direction_next dd ? - number_of_stones dd ? - name dd ? -ends - -CLASSIC_MODE equ 0 -LEVELS_MODE equ 1 - -CLASSIC_MODE_FIRST_LEVEL equ 0 -LEVELS_MODE_FIRST_LEVEL equ 1 - -EAT_TO_END_LEVEL equ 7 -PAUSE_BETWEEN_LEVELS equ 200 -PAUSE_WHILE_DRAWING_SPLASH equ 3 - -CHAMPION_NAME_LENGTH equ 15 -LAST_LEVEL_NUMBER equ 36 - -START_LIVES equ 3 - -;;---Define_chapter------------------------------------------------------------------------------------------------------------ - -start: - -stdcall dll.Load,@IMPORT - or eax, eax - jnz Exit - -align 4 - - mov edi, cur_dir_path - mov al, 0 - mov ecx, 4096 - repne scasb - mov dword[edi-1], '.ini' - - invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80 - neg eax - add [time_wait_limit], eax - mov ebx, [time_wait_limit] - mov [time_wait_limit_const], ebx - sub ebx, 4 - mov eax, 200 - div bl - mov byte[speed_up_counter], al - mov byte[speed_up_counter+1], al - invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name - invoke ini.get_int, cur_dir_path, aPreferences, aSmart_reverse, 0 - mov [smart_reverse], eax - invoke ini.get_int, cur_dir_path, aPreferences, aShow_lives_style, 2 - mov [show_lives_style], eax - invoke ini.get_int, cur_dir_path, aPreferences, aDraw_level_name_in_window_title, 1 - mov [draw_level_name_in_window_title], eax - invoke ini.get_str, cur_dir_path, aPreferences, aSeparating_symbol, separating_symbol, 3, default_separating_symbol - - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_left, 0x23, 0 - mov [shortcut_move_left], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_down, 0x24, 0 - mov [shortcut_move_down], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_up, 0x25, 0 - mov [shortcut_move_up], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_right, 0x26, 0 - mov [shortcut_move_right], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aReverse, 0x0F, 0 - mov [shortcut_reverse], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aIncrease, 0x16, 0 - mov [shortcut_increase], al - invoke ini.get_shortcut, cur_dir_path, aShortcuts, aDecrease, 0x17, 0 - mov [shortcut_decrease], al - - invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 3 - mov [decorations], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000 - or [background_color], eax - or [window_style_windowed], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x232300 - or [decorations_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff - or [snake_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff - or [snake_head_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLives_in_head_number_color, 0xff8800 - or [lives_in_head_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff - or [snake_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55 - or [version_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11 - or [pause_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111 - or [game_over_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11 - or [you_win_picture_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11 - or [eat_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777 - or [navigation_strings_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900 - or [game_over_strings_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff - or [score_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff - or [level_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff - or [hiscore_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff - or [champion_string_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44 - or [game_over_hiscore_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff - or [score_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff - or [level_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff - or [hiscore_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff - or [champion_name_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00 - or [edit1.shift_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD - or [button_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000 - or [button_text_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700 - or [stone_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00 - or [splash_background_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000 - or [splash_level_number_color], eax - invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000 - or [splash_level_string_color], eax - - invoke ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19 - mov [square_side_length], eax - invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic - invoke ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777 - or [hi_score_classic], eax - invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels - invoke ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777 - or [hi_score_levels], eax - - mov eax, [background_color] - mov [edit1.color], eax - mov [edit1.focus_border_color], eax - mov [edit1.blur_border_color], eax - mov eax, [game_over_hiscore_color] - mov [edit1.text_color], eax - - mcall 37,4,cursor_data,2 ; load empty cursor (for "hiding" cursor while level_mode) - mov [cursor_handle], eax - - mov eax, WINDOW_MODE_WINDOWED - call Set_window_mode - mcall 0,0,0,[window_style_windowed] ; create empty window. Set_geometry will set all parameters - call Set_geometry.by_hotkey - mcall 71,1,window_title - -include 'first_menu.asm' ; First menu body and functions -include 'level.asm' ; Level body and functions (game process) -include 'pause.asm' ; Pause body and functions -include 'game_over.asm' ; Game_over body and functions - -;;===Some_functions============================================================================================================ - - -Save_do_smth_else_and_exit: - ;;===Save_do_smth_else_and_exit============================================================================================ - - mcall 37,6,[cursor_handle] ; delete cursor - - invoke ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length] - - mov edi, champion_name_classic - xor al, al - mov ecx, CHAMPION_NAME_LENGTH+1 - cld - repne scasb - neg ecx - add ecx, CHAMPION_NAME_LENGTH - invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx - invoke ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic] - - mov edi, champion_name_levels - xor al, al - mov ecx, CHAMPION_NAME_LENGTH+1 - cld - repne scasb - neg ecx - add ecx, CHAMPION_NAME_LENGTH - invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx - invoke ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels] - - ;;---Save_do_smth_else_and_exit-------------------------------------------------------------------------------------------- - - -Exit: - ;;===Exit================================================================================================================== - - or eax, -1 - int 0x40 - - ;;---Exit------------------------------------------------------------------------------------------------------------------ - - -Set_geometry: - ;;===Set_geometry========================================================================================================== - - cmp [resized_by_hotkey], 1 - je .by_hotkey - - test [proc_info.wnd_state], 0x01 - jnz .by_hotkey - - mcall 9,proc_info,-1 - test [proc_info.wnd_state], 0x04 ; is rolled up? - jz @f - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - jmp .quit - @@: - mov eax, [proc_info.box.width] - cmp eax, [window_width] - jne @f - mov eax, [proc_info.box.height] - cmp eax, [window_height] - jne @f - jmp .quit - @@: - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - - .by_mouse: ; or any other kind of resizing. for example, double click on window title - - test [proc_info.wnd_state], 0x01 - jnz .by_hotkey - - - cmp [window_width], 250 - jnl @f - mov [window_width], 250 - @@: - cmp [window_height], 150 - jnl @f - mov [window_height], 150 - @@: - - mcall 48,4 - mov ecx, [window_height] - sub ecx, eax - sub ecx, 5 - sub ecx, [g_e] - sub ecx, [g_e] - sub ecx, 25+30 - mov esi, ecx - - mov eax, [window_width] - sub eax, 5+5 - sub eax, [g_e] - sub eax, [g_e] - sub eax, [g_s] - sub eax, [g_s] - mov edi, eax - - mov dx, 0 - div cx - cmp ax, 2 - jl .fit_to_width - - .fit_to_height: - mov eax, esi - mov ebx, GRID_HEIGHT - div bl - cmp al, MIN_SQUARE_SIDE_LENGTH - jnl @f - mov al, MIN_SQUARE_SIDE_LENGTH - @@: - dec al - mov byte[square_side_length], al - jmp .by_hotkey - - .fit_to_width: - mov eax, edi - mov ebx, GRID_WIDTH - div bl - cmp al, MIN_SQUARE_SIDE_LENGTH - jnl @f - mov al, MIN_SQUARE_SIDE_LENGTH - @@: - dec al - mov byte[square_side_length], al - jmp .by_hotkey - -; jmp .done - - .by_hotkey: - mcall 9,proc_info,-1 - mov [resized_by_hotkey], 0 - test [proc_info.wnd_state], 0x04 ; is rolled up? - jz @f - mov eax, [proc_info.box.width] - mov [window_width], eax - mov eax, [proc_info.box.height] - mov [window_height], eax - jmp .quit - @@: - mov eax, [square_side_length] - inc eax ; space between squares - mov [g_s], eax - - mov eax, [g_s] - shr eax, 1 - mov ebx, eax - shr ebx, 1 - add eax, ebx - mov [g_e], eax - - mov edx, GRID_WIDTH - mov eax, [g_s] - mul dx - mov [gw_mul_gs], eax - - mov edx, GRID_HEIGHT - mov eax, [g_s] - mul dx - mov [gh_mul_gs], eax - - mov eax, [gw_mul_gs] - add eax, [g_s] - add eax, [g_s] - add eax, [g_e] - add eax, [g_e] - add eax, 5*2 ; skin width - mov esi, eax - test [proc_info.wnd_state], 0x01 - jz @f - mov eax, [proc_info.box.width] - @@: - mov [window_width], eax - - sub eax, [gw_mul_gs] - sub eax, 5*2 - shr eax, 1 - mov [gbxm1], eax - - mcall 48,4 ; get skin header height - mov ebx, eax - add eax, [gh_mul_gs] - add eax, [g_e] - add eax, 25 - add eax, [g_e] - add eax, 30 - add eax, 5 ; skin height (bottom part) - mov edi, eax - test [proc_info.wnd_state], 0x01 - jz @f - mov eax, [proc_info.box.height] - @@: - mov [window_height], eax - - sub eax, [gh_mul_gs] - sub eax, ebx - sub eax, 5 - sub eax, 5 - - shr eax, 1 - mov [gbym1], eax - - mov eax, [g_s] - shl eax, 16 - add eax, [g_s] - mov [gs_shl16_gs], eax - - mov eax, [gbxm1] - shl eax, 16 - add eax, [gbxm1] - mov [gbxm1_shl16_gbxm1], eax - - mov eax, [gbym1] - shl eax, 16 - add eax, [gbym1] - mov [gbym1_shl16_gbym1], eax - - mov eax, [gbxm1] - add eax, [gw_mul_gs] - mov [gbxm1_plus_gw_mul_gs], eax - - mov eax, [gbym1] - add eax, [gh_mul_gs] - mov [gbym1_plus_gh_mul_gs], eax - - mcall 48, 5 - mov dx, ax - shr eax, 16 - sub dx, ax - cmp dx, si ; does window fit to work area width? - jnl @f - dec [square_side_length] - jmp Set_geometry.by_hotkey - @@: - - mov cx, bx - shr ebx, 16 - sub cx, bx - cmp cx, di ; does window fit to work area height? - jnl @f - dec [square_side_length] - jmp Set_geometry.by_hotkey - @@: - - sub dx, si - shr dx, 1 - mov word[wp_x], dx - sub cx, word[window_height] - shr cx, 1 - mov dx, cx - shr cx, 1 - add cx, dx - mov word[wp_y], cx - - mov [top_strings], 8 - mov eax, [window_height] - sub eax, 50 - mov [bottom_top_strings], eax - add eax, 6 - mov [bottom_middle_strings], eax - add eax, 6 - mov [bottom_bottom_strings], eax - - sub eax, 4 - mov [edit1.top], eax - - - mov eax, [g_s] - shl eax, 2 - sub eax, 2 - mov [button_width_short], eax - mov eax, [g_s] - shl eax, 3 - add eax, [g_s] - sub eax, 2 - mov [button_width_long], eax - mov eax, [g_s] - sub eax, 2 - mov [button_height], eax - - mov bl, 0x10 - mov cl, 0x08 - - mov al, byte[g_s] - mul bl - mov bx, ax - add bx, word[gbxm1] - inc bx - - mov al, byte[g_s] - mul cl - mov cx, ax - add cx, word[gbym1] - inc cx - - mov [button_x_left], ebx - mov [button_y_top], ecx - - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - add ebx, [g_s] - - mov [button_x_right], ebx - - add ecx, [g_s] - add ecx, [g_s] - - mov [button_y_middle], ecx - - add ecx, [g_s] - add ecx, [g_s] - - mov [button_y_bottom], ecx - - .done: - mcall 67,[wp_x],[wp_y],[window_width],[window_height] - - .quit: - ret - - ;;---Set_geometry------------------------------------------------------------------------------------------------------ - - -Increase_geometry: - ;;===Increase_geometry================================================================================================= - - inc [square_side_length] - mov [resized_by_hotkey], 1 - - ret - - ;;---Increase_geometry------------------------------------------------------------------------------------------------- - - -Decrease_geometry: - ;;===Decrease_geometry================================================================================================= - - cmp [square_side_length], MIN_SQUARE_SIDE_LENGTH - je @f - dec [square_side_length] - mov [resized_by_hotkey], 1 - - @@: - ret - - ;;---Decrease_geometry------------------------------------------------------------------------------------------------- - - -Draw_decorations: - ;;===Draw_decorations================================================================================================== - - mov al, byte[decorations] - dec al - jz grid_lines - dec al - jz grid_lines_with_ends - dec al - jz grid_lines_with_corners - dec al - jz grid_dots - dec al - jz borders_lines - dec al - jz borders_lines_with_corners - dec al - jz borders_dots - dec al - jz corners_dots - dec al - jz corners_inner - dec al - jz corners_outer - dec al - jz corners_crosses - ret - - - grid_lines: - - mov eax, 38 -;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1) - mov ebx, [gbxm1_shl16_gbxm1] -;mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP) - mov ecx, [gbym1_shl16_gbym1] - add ecx, [gh_mul_gs] - mov edx, [decorations_color] - mov esi, GRID_WIDTH - add esi, 1 - - @@: - mcall - add ebx, [gs_shl16_gs] - dec esi - jnz @b - -;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP) - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [gw_mul_gs] - mov ecx, [gbym1_shl16_gbym1] - mov esi, GRID_HEIGHT - add esi, 1 - - @@: - mcall - add ecx, [gs_shl16_gs] - dec esi - jnz @b - - ret - - - grid_lines_with_ends: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1] - sub ecx, [g_e] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - add ecx, [g_e] - mov edx, [decorations_color] - mov esi, GRID_WIDTH - add esi, 1 - - @@: - mcall - add ebx, [gs_shl16_gs] - dec esi - jnz @b - - mov ebx, [gbxm1] - sub ebx, [g_e] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - add ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov esi, GRID_HEIGHT - add esi, 1 - - @@: - mcall - add ecx, [gs_shl16_gs] - dec esi - jnz @b - - ret - - - grid_lines_with_corners: - - call grid_lines - call corners_outer - - ret - - - grid_dots: - - mov eax, 1 - mov ebx, [gbxm1] - mov ecx, [gbym1] - mov edx, [decorations_color] - - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jg @f - mov ebx, [gbxm1] - jmp @b - - @@: - ret - - - borders_lines: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - add ecx, [gh_mul_gs] - mov edx, [decorations_color] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [gw_mul_gs] - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - ret - - - borders_lines_with_corners: - - call borders_lines - call corners_outer - - ret - - - borders_dots: - - mov eax, 1 - mov ebx, [gbxm1] - mov ecx, [gbym1] - mov edx, [decorations_color] - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - - mov ebx, [gbxm1] - mov ecx, [gbym1_plus_gh_mul_gs] - @@: - mcall - add ebx, [g_s] - cmp ebx, [gbxm1_plus_gw_mul_gs] - jng @b - - mov ebx, [gbxm1] - mov ecx, [gbym1] - @@: - mcall - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jng @b - - mov ebx, [gbxm1_plus_gw_mul_gs] - mov ecx, [gbym1] - @@: - mcall - add ecx, [g_s] - cmp ecx, [gbym1_plus_gh_mul_gs] - jng @b - - ret - - - corners_dots: - - mov eax, 13 - mov ebx, [gbxm1] - dec ebx - shl ebx, 16 - add ebx, 2 - mov ecx, [gbym1] - dec ecx - shl ecx, 16 - add ecx, 2 - mov edx, [decorations_color] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, 2 - mcall - - mov ebx, [gbxm1] - dec ebx - shl ebx, 16 - add ebx, 2 - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, 2 - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, 2 - mcall - - ret - - - corners_inner: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - add ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov edx, [decorations_color] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - sub ebx, [g_e] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - add ecx, [g_e] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - sub ecx, [g_e] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mcall - - ret - - - corners_outer: - - mov eax, 38 - mov ebx, [gbxm1_shl16_gbxm1] - sub ebx, [g_e] - mov ecx, [gbym1_shl16_gbym1] - mov edx, [decorations_color] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - add ebx, [g_e] - mcall - - mov ecx, [gbym1_shl16_gbym1] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mov ecx, [gbym1_shl16_gbym1] - sub ecx, [g_e] - mcall - - mov ebx, [gbxm1_plus_gw_mul_gs] - shl ebx, 16 - add ebx, [gbxm1_plus_gw_mul_gs] - mcall - - mov ecx, [gbym1_plus_gh_mul_gs] - shl ecx, 16 - add ecx, [gbym1_plus_gh_mul_gs] - add ecx, [g_e] - mcall - - mov ebx, [gbxm1_shl16_gbxm1] - mcall - - ret - - - corners_crosses: - - call corners_inner - call corners_outer - - ret - - - ;;---Draw_decorations-------------------------------------------------------------------------------------------------- - - -Draw_square: - ;;===Draw_square======================================================================================================= - ;; bl - x_coord - ;; bh - y_coord - ;; edx - color - - push eax ebx ecx edx - - mov cl, bh - - mov al, byte[g_s] - mul bl - mov bx, ax - add bx, word[gbxm1] - inc bx - shl ebx, 16 - add ebx, [g_s] - dec ebx - - mov al, byte[g_s] - mul cl - mov cx, ax - add cx, word[gbym1] - inc cx - shl ecx, 16 - add ecx, [g_s] - dec ecx - - mcall 13 - - pop edx ecx ebx eax - - ret - - ;;---Draw_square------------------------------------------------------------------------------------------------------- - - -Draw_menu_esc: - ;;===Draw_menu_esc===================================================================================================== - - mov ebx, [window_width] - shr ebx, 1 - sub ebx, string_menu_esc.size*3+6 - shl ebx, 16 - add ebx, dword[top_strings] - mcall 4, ,[navigation_strings_color],string_menu_esc - - ret - - ;;---Draw_menu_esc----------------------------------------------------------------------------------------------------- - - -Draw_score_string: - ;;===Draw_score_string================================================================================================= - - mov ebx, [window_width] - shr ebx, 3 - sub ebx, 5 - shl ebx, 16 - add ebx, dword[bottom_top_strings] - mcall 4, ,[score_string_color],string_score - - ret - - ;;---Draw_score_string------------------------------------------------------------------------------------------------- - - -Draw_score_number: - ;;===Draw_score_number================================================================================================= - - mov edx, [window_width] - shr edx, 3 - sub edx, 5+1 - add edx, string_score.size*6 - shl edx, 16 - add edx, dword[bottom_top_strings] - mcall 47,0x00070000,[score], ,[score_number_color],[background_color] - - ret - - ;;---Draw_score_number------------------------------------------------------------------------------------------------- - - -Draw_hiscore_string: - ;;===Draw_hiscore_string=============================================================================================== - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, string_hi_score.size*6+7*6+5 - shl ebx, 16 - add ebx, dword[bottom_top_strings] - mcall 4, ,[hiscore_string_color],string_hi_score - - ret - - ;;---Draw_hiscore_string----------------------------------------------------------------------------------------------- - - -Draw_hiscore_number: - ;;===Draw_hiscore_number=================================================================================================== - - mov edx, [window_width] - shr edx, 3 - neg edx - add edx, [window_width] - sub edx, 7*6+6 - shl edx, 16 - add edx, dword[bottom_top_strings] - - cmp [play_mode], CLASSIC_MODE - jne @f - mov ecx, [hi_score_classic] - jmp .done - @@: - mov ecx, [hi_score_levels] - - .done: - mcall 47,0x00070000, , ,[hiscore_number_color] - - ret - - ;;---Draw_hiscore_number--------------------------------------------------------------------------------------------------- - - -Draw_champion_string: - ;;===Draw_champion_string================================================================================================== - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, string_champion.size*6+7*6+5 - shl ebx, 16 - add ebx, dword[bottom_bottom_strings] - mcall 4, ,[champion_string_color],string_champion - - ret - - ;;---Draw_champion_string---------------------------------------------------------------------------------------------- - - -Draw_champion_name: - ;;===Draw_champion_name================================================================================================ - - mov ebx, [window_width] - shr ebx, 3 - neg ebx - add ebx, [window_width] - sub ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6 ; there is no difference between length of champion names for other play_modes - add ebx, CHAMPION_NAME_LENGTH/2*6 - shl ebx, 16 - add ebx, dword[bottom_bottom_strings] - - cmp [play_mode], CLASSIC_MODE - jne @f - mov edx, champion_name_classic - jmp .done - @@: - mov edx, champion_name_levels - - .done: - mcall 4, ,[champion_name_color], - - ret - - ;;---Draw_champion_name------------------------------------------------------------------------------------------------ - - -Draw_picture: - ;;===Draw_picture====================================================================================================== - ;; in : - ;; ax = number of left square *0x100+ picture width (in squares) - ;; cx = number of top square *0x100+ picture height (in squares) - ;; edx = picture color - ;; esi = pointer to picture data - ;; - - add al, ah - add cl, ch - mov bh, ch - - .draw: - mov bl, ah - mov di, 7 - - .loop: - bt word[esi], di - jnc @f - push eax ebx ecx esi edi - call Draw_square - pop edi esi ecx ebx eax - - @@: - dec di - jns @f - mov di, 7 - inc esi - @@: - inc bl - cmp bl, al - jne .loop - - inc bh - cmp di, 7 - jz @f - inc esi - @@: - cmp bh, cl - jne .draw - - ret - - ;;---Draw_picture------------------------------------------------------------------------------------------------------ - - -Draw_on_map: - ;;===Draw_on_map======================================================================================================= - ;; in : - ;; al = x coord - ;; ah = y coord - ;; cl = value to draw - ;; - - and eax, 0x0000ffff - xor bx, bx - mov bl, al - shr ax, 8 - mov dx, GRID_WIDTH - mul dx - add ax, bx - mov edi, field_map - add edi, eax - mov [edi], cl - - ret - - ;;---Draw_on_map------------------------------------------------------------------------------------------------------- - - -Get_from_map: - ;;===Get_from_map====================================================================================================== - ;; in : - ;; al = x coord - ;; ah = y coord - ;; out : - ;; bl = value on map - ;; - - push eax - - and eax, 0x0000ffff - xor bx, bx - mov bl, al - shr ax, 8 - mov dx, GRID_WIDTH - mul dx - add ax, bx - mov edi, field_map - add edi, eax - mov bl, [edi] - - pop eax - - ret - - ;;---Get_from_map----------------------------------------------------------------------------------------------------------- - - -Load_level: - ;;===Load_level============================================================================================================= - ;; in : - ;; cur_level_number = level number to load - ;; - - mov eax, [cur_level_number] - mov edx, stage_00 - @@: - test al, al - jz @f - add edx, stage_01-stage_00 - dec al - jmp @b - @@: - - mov esi, window_title_with_lives - mov edi, window_title+5 - - .lives_in_title: - cmp [play_mode], LEVELS_MODE - jne .level_name_in_title - test [show_lives_style], 1 - jz .level_name_in_title - mov [edi], byte ' ' - mov al, byte[separating_symbol] - mov [edi+1], byte al - mov [edi+2], byte ' ' - add edi, 3 - mov eax, [lives] - add al, 0x30 - mov [window_title_with_lives], al - mov ecx, 10 - rep movsb - dec edi - - .level_name_in_title: - cmp [draw_level_name_in_window_title], 1 - jne @f - mov [edi], byte ' ' - mov al, byte[separating_symbol] - mov [edi+1], byte al - mov [edi+2], byte ' ' - add edi, 3 - mov esi, edx - add esi, LEVEL.name - mov esi, [esi] - mov ecx, 16 - rep movsd - - @@: - mcall 71,1,window_title - - mov [cur_level], edx - - mov esi, edx - add esi, LEVEL.field - mov edi, field_map - mov ecx, 2 - mov ah, GRID_HEIGHT - .begin: - mov ebx, 7 - mov al, GRID_WIDTH - .loop: - bt [esi], ebx - jnc @f - mov byte[edi], cl - jmp .skip - @@: - mov byte[edi], 0 - .skip: - dec ebx - jns @f - mov ebx, 7 - inc esi - @@: - inc edi - dec al - jnz .loop - inc esi - dec ah - jnz .begin - - - mov esi, edx - add esi, LEVEL.snake_dots - mov edi, snake_dots - mov ecx, 3 - rep movsw - - mov esi, edx - add esi, LEVEL.snake_direction - mov eax, [esi] - mov [snake_direction], eax - - mov esi, edx - add esi, LEVEL.snake_direction_next - mov eax, [esi] - mov [snake_direction_next], eax - - mov esi, edx - add esi, LEVEL.number_of_stones - mov eax, [esi] - mov [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3 - sub [number_of_free_dots], eax - - mov ax, word[snake_dots] - mov cl, 1 - call Draw_on_map - mov ax, word[snake_dots+2] - mov cl, 1 - call Draw_on_map - mov ax, word[snake_dots+4] - mov cl, 1 - call Draw_on_map - - mov [action], 0 - mov [snake_length_x2], 6 - - ret - - ;;---Load_level------------------------------------------------------------------------------------------------------------- - - -Draw_stones: - ;;===Draw_stones============================================================================================================ - - mov ax, 0*0x100+GRID_WIDTH - mov cx, 0*0x100+GRID_HEIGHT - mov edx, [stone_color] - mov esi, [cur_level] - add esi, LEVEL.field - call Draw_picture - - ret - - ;;---Draw_stones------------------------------------------------------------------------------------------------------------ - - -Hide_cursor: - ;;===Hide_cursor=========================================================================================================== - - mcall 37,5,[cursor_handle] - - ret - - ;;---Show_cursor----------------------------------------------------------------------------------------------------------- - - -Show_cursor: - ;;===Hide_cursor=========================================================================================================== - - mcall 37,5,0 - - ret - - ;;---Show_cursor----------------------------------------------------------------------------------------------------------- - - -Set_window_mode: - ;;===Set_window_mode======================================================================================================= - - test al, al - jnz .fullscreen - mov eax, [window_style_windowed] - jmp .quit - - .fullscreen: - mov eax, [window_style_fullscreen] - - .quit: - mov [window_style], eax - ret - -;;---Some_functions------------------------------------------------------------------------------------------------------------ - - -Reverse_snake: - ;;===Reverse_snake========================================================================================================= - - cmp [snake_direction], LEFT - jne @f - mov [snake_direction_next], RIGHT - jmp .quit - @@: - cmp [snake_direction], RIGHT - jne @f - mov [snake_direction_next], LEFT - jmp .quit - @@: - cmp [snake_direction], UP - jne @f - mov [snake_direction_next], DOWN - jmp .quit - @@: - cmp [snake_direction], DOWN - jne @f - mov [snake_direction_next], UP -; jmp .quit - @@: - - .quit: - ret - - ;;---Reverse_snake--------------------------------------------------------------------------------------------------------- - - -;;===Variables================================================================================================================== - -window_title db 'Snake',64+15 dup (0) -window_title_with_lives db '_ live(s)',0 -default_separating_symbol db '|',0 -window_style_windowed dd 0x33000000 ; scalable skinned window -window_style_fullscreen dd 0x00000000 -time_before_waiting dd 0x0 -time_to_wait dd 0x0 -time_wait_limit dd 101 -time_wait_limit_const dd 0x0 - -play_mode dd 0x0 -lives dd START_LIVES -acceleration_mask dd 0x0 - -resized_by_hotkey dd 0x0 -fullscreen dd 0x0 - -szZ string_score ,'SCORE : ' -szZ string_hi_score ,'HI-SCORE : ' -szZ string_champion ,'CHAMPION : ' -szZ string_level ,'LEVEL : ' -szZ string_pause_space ,'PAUSE - ',0x27,'SPACE',0x27 -szZ string_resume_space ,'RESUME - ',0x27,'SPACE',0x27 -szZ string_menu_esc ,'MENU - ',0x27,'ESC',0x27 -szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27 -szZ press_to_start ,'PRESS ',0x27,'ENTER',0x27,' TO START' -szZ press_esc_to_exit ,'PRESS ',0x27,'ESC',0x27,' TO EXIT' -;press_F2_to_options db 'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0 - -szZ string_congratulations ,' Congratulations!!! New hi-score is : ' -szZ string_enter_your_name ,'You are the champion! Enter your name : ' - -szZ string_button_play ,'PLAY' -szZ string_button_exit ,'EXIT' -szZ string_button_inc ,'+INC+' -szZ string_button_dec ,'-dec-' -szZ string_button_pm_classic,'CLASSIC mode' -szZ string_button_pm_levels ,'LEVELS mode' - -is_new_record dd 0 - -action dd 0 - -picture_first_menu_snake db 0xf4,0x99,0x2f,\ - 0x86,0xa5,0x49,\ - 0xf5,0xa5,0x8f,\ - 0x15,0xbd,0x48,\ - 0xf4,0xa5,0x2f - -picture_first_menu_version db 0xf1,0xe0,\ - 0x90,0x20,\ - 0x90,0x20,\ - 0x90,0x20,\ - 0xf4,0x20 - -picture_pause db 11100011b,00100101b,11101111b,\ - 10010100b,10100101b,00001000b,\ - 10010100b,10100101b,00001000b,\ - 11100111b,10100101b,11101111b,\ - 10000100b,10100100b,00101000b,\ - 10000100b,10011001b,11101111b - -picture_game_over db 00110000b,00000000b,00000000b,00000000b,\ - 01001001b,11001000b,10111100b,00000000b,\ - 10000010b,00101101b,10100000b,00000000b,\ - 10011010b,00101010b,10111000b,00000000b,\ - 10001011b,11101000b,10100000b,00000000b,\ - 01110010b,00101000b,10111100b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,00000000b,00000000b,00000000b,\ - 00001000b,10100010b,11110111b,10000000b,\ - 00001000b,10100010b,10000100b,01000000b,\ - 00001000b,10100010b,11100100b,01000000b,\ - 00001000b,10010100b,10000111b,10000000b,\ - 00000111b,00001000b,11110100b,01000000b - -;picture_you_win db 10001001b,11001000b,10000000b,\ -; 10001010b,00101000b,10000000b,\ -; 01010010b,00101000b,10000000b,\ -; 00100010b,00101000b,10000000b,\ -; 00100001b,11000111b,00000000b,\ -; 00000000b,00000000b,00000000b,\ -; 00000000b,00000000b,00000000b,\ -; 01000100b,10010001b,00000000b,\ -; 01010100b,10011001b,00000000b,\ -; 01010100b,10010101b,00000000b,\ -; 01010100b,10010011b,00000000b,\ -; 00101000b,10010001b,00000000b - -picture_you_win db 01000100b,01000011b,10001000b,10000000b,\ - 01000100b,01000100b,01001000b,10000000b,\ - 01000100b,01000100b,00001000b,10000000b,\ - 01111100b,01000100b,11001111b,10000000b,\ - 01000100b,01000100b,01001000b,10000000b,\ - 01000100b,01000011b,10001000b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11110011b,10011100b,11110011b,11000000b,\ - 10000100b,00100010b,10001010b,00000000b,\ - 11110100b,00100010b,10001011b,10000000b,\ - 00010100b,00100010b,11110010b,00000000b,\ - 11110011b,10011100b,10001011b,11000000b - -picture_level db 10000111b,10100101b,11101000b,\ - 10000100b,00100101b,00001000b,\ - 10000111b,00100101b,11001000b,\ - 10000100b,00101001b,00001000b,\ - 11110111b,10110001b,11101111b - -digits_font db 0xf0,0x90,0x90,0x90,0xf0,\ - 0x20,0x60,0x20,0x20,0x20,\ - 0xf0,0x10,0xf0,0x80,0xf0,\ - 0xf0,0x10,0x70,0x10,0xf0,\ - 0x90,0x90,0xf0,0x10,0x10,\ - 0xf0,0x80,0xf0,0x10,0xf0,\ - 0xf0,0x80,0xf0,0x90,0xf0,\ - 0xf0,0x10,0x10,0x10,0x10,\ - 0xf0,0x90,0xf0,0x90,0xf0,\ - 0xf0,0x90,0xf0,0x10,0xf0 - -stage_00: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 3,3, 4,3, 5,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 0 -.name dd stage_00_name - -stage_01: -.field db 11111000b,00000000b,00000001b,11110000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 10000000b,00000000b,00000000b,00010000b,\ - 11111000b,00000000b,00000001b,11110000b - -.snake_dots db 3,3, 4,3, 5,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 36 -.name dd stage_01_name - -stage_02: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00011111b,11000000b,00111111b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00010000b,00000000b,00000000b,10000000b,\ - 00011111b,11000000b,00111111b,10000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 7,5, 8,5, 9,5 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_02_name - -stage_03: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00001111b,11111001b,11111111b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00001111b,11111001b,11111111b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00001001b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 23,0, 22,0, 21,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 48 -.name dd stage_03_name - -stage_04: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00100000b,01000000b,00000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00010000b,00100000b,01000000b,10000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00010010b,00000000b,00000100b,10000000b,\ - 00010010b,00000000b,00000100b,10000000b,\ - 00000010b,00100000b,01000000b,00000000b,\ - 00010000b,00100000b,01000000b,10000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00000010b,00100000b,01000100b,00000000b,\ - 00000000b,00100000b,01000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 19,6, 19,7, 19,8 -.snake_napravlenie dd DOWN -.snake_napravlenie_next dd DOWN -.number_of_stones dd 39 -.name dd stage_04_name - -stage_05: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,11111111b,11111110b,00000000b,\ - 00000111b,11111111b,11111110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111111b,11111111b,11111111b,11000000b,\ - 00111111b,11111111b,11111111b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,0, 0,1, 1,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 112 -.name dd stage_05_name - -stage_06: -.field db 00000001b,10000000b,00000000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000001b,11111111b,11111000b,00000000b,\ - 00000000b,00000000b,00011000b,00000000b,\ - 00000000b,00000000b,00011000b,00000000b,\ - 00011111b,11111111b,11111000b,00000000b,\ - 00011111b,11111111b,11111000b,00000000b,\ - 00011000b,00000000b,00000000b,00000000b,\ - 00011000b,00000000b,00000000b,00000000b,\ - 00011111b,11111111b,11111111b,11100000b,\ - 00011111b,11111111b,11111111b,11100000b,\ - 00000000b,00000000b,00000000b,01100000b,\ - 00000000b,00000000b,00000000b,01100000b,\ - 00000000b,00000000b,00000000b,01100000b - -.snake_dots db 0,0, 0,1, 1,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 128 -.name dd stage_06_name - -stage_07: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00000000b,00000000b,00000100b,00000000b,\ - 00000011b,11111111b,11110100b,00000000b,\ - 00000010b,00000000b,00010100b,00000000b,\ - 00000010b,11111111b,11010100b,00000000b,\ - 00000010b,00000000b,00010100b,00000000b,\ - 00000010b,11111111b,11110100b,00000000b,\ - 00000010b,00000000b,00000100b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 8,1, 9,1, 10,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 83 -.name dd stage_07_name - -stage_08: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00010000b,00000000b,\ - 00001001b,00000001b,00000000b,00000000b,\ - 00000001b,01001001b,00000101b,00000000b,\ - 00000000b,01000000b,00000100b,00000000b,\ - 00001111b,00000000b,11100000b,00000000b,\ - 00000000b,00000000b,00001000b,10000000b,\ - 00000111b,00100000b,10000010b,10000000b,\ - 00010000b,00000000b,00000010b,00000000b,\ - 00010000b,11000000b,01110010b,00000000b,\ - 00010010b,00000000b,00000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,0, 1,0, 2,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_08_name - -stage_09: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111101b,00100110b,01001011b,11000000b,\ - 00100001b,10101001b,01010010b,00000000b,\ - 00111101b,01100001b,01100011b,10000000b,\ - 00000101b,01100111b,01010010b,00000000b,\ - 00111101b,00100001b,01001011b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 12,6, 12,7, 12,8 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 59 -.name dd stage_09_name - -stage_10: -.field db 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 11101110b,11101110b,11101110b,11100000b,\ - 11101110b,11101110b,11101110b,11100000b - -.snake_dots db 3,2, 3,3, 4,3 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 231 -.name dd stage_10_name - -stage_11: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,00000111b,00000111b,00000000b,\ - 00001101b,10001101b,10001101b,10000000b,\ - 00011000b,11011000b,11011000b,11000000b,\ - 00000000b,01000000b,01000000b,01000000b,\ - 00011000b,11011000b,11011000b,11000000b,\ - 00001101b,10001101b,10001101b,10000000b,\ - 00000111b,00000111b,00000111b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 3,12, 4,12, 5,12 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 69 -.name dd stage_11_name - -stage_12: -.field db 00000000b,00011000b,00001110b,00000000b,\ - 01101110b,00010000b,00001010b,01010000b,\ - 01001011b,11011001b,11000000b,01110000b,\ - 01100001b,01000001b,01000000b,00000000b,\ - 00000000b,00000000b,00000011b,10000000b,\ - 00000000b,00000000b,00000010b,10000000b,\ - 01010011b,00001100b,10100110b,00110000b,\ - 01110010b,00001000b,11100100b,00010000b,\ - 00000011b,00001100b,00000110b,00110000b,\ - 00000000b,11100000b,00000000b,00000000b,\ - 00010100b,10100000b,00000110b,00000000b,\ - 11011100b,00000110b,10100100b,00000000b,\ - 01000011b,10000010b,11100110b,10100000b,\ - 11000010b,10000110b,00000000b,11100000b - -.snake_dots db 27,0, 26,0, 25,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 110 -.name dd stage_12_name - -stage_13: -.field db 00111000b,00100000b,00000000b,00000000b,\ - 01111100b,11110011b,11000011b,10000000b,\ - 11111100b,01110011b,10000001b,11000000b,\ - 11110000b,00000011b,11000000b,00000000b,\ - 00000000b,00000010b,00000000b,00000000b,\ - 00000000b,00000010b,00000001b,00000000b,\ - 00011110b,00000111b,00000111b,00000000b,\ - 00000111b,10001111b,11111110b,00000000b,\ - 00000011b,11111111b,11111100b,00000000b,\ - 00110001b,11111111b,11111001b,01100000b,\ - 00001110b,11101011b,00100111b,10000000b,\ - 01111000b,10000011b,10000010b,00000000b,\ - 00000011b,11100110b,00011010b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 0,5, 0,6, 0,7 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 141 -.name dd stage_13_name - -stage_14: -.field db 00000110b,00000000b,00000000b,00000000b,\ - 00001000b,00000000b,00011000b,00000000b,\ - 00010000b,00000000b,00000100b,00000000b,\ - 00100001b,10000000b,11000010b,00000000b,\ - 01000010b,01000001b,00100001b,00000000b,\ - 10000100b,00000010b,00010000b,10000000b,\ - 10001000b,00000100b,00001000b,01000000b,\ - 10010000b,00001000b,00000100b,01000000b,\ - 01001000b,00010000b,00001000b,10000000b,\ - 00100100b,00100000b,00010001b,00000000b,\ - 00010010b,01000001b,00100010b,00000000b,\ - 00001001b,10000000b,11000100b,00000000b,\ - 00000100b,00000000b,00001000b,00000000b,\ - 00000000b,00000000b,00110000b,00000000b - -.snake_dots db 8,0, 9,0, 10,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 60 -.name dd stage_14_name - -stage_15: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,01110000b,00110000b,00000000b,\ - 00000000b,10000000b,00001010b,00000000b,\ - 00100001b,00000000b,00110010b,00000000b,\ - 00010001b,00111111b,10011100b,00000000b,\ - 00001001b,00100000b,11000000b,00000000b,\ - 00010000b,00000010b,01000000b,00000000b,\ - 00100000b,00000010b,00100001b,10000000b,\ - 00010000b,00000010b,00110010b,01000000b,\ - 00001000b,01000100b,00011100b,01000000b,\ - 00010000b,00111000b,00010000b,01000000b,\ - 00100000b,00000000b,00010000b,01000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,3, 13,2, 14,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 60 -.name dd stage_15_name - -stage_16: -.field db 00000000b,10000010b,00000000b,00000000b,\ - 00000000b,01001010b,10000010b,10100000b,\ - 01111111b,11100111b,00000001b,11000000b,\ - 00000000b,01000010b,00000000b,10000000b,\ - 00000100b,10000000b,01000000b,00000001b,\ - 00000100b,00100000b,10000000b,00000010b,\ - 11000100b,00010001b,11111000b,00000111b,\ - 00010101b,00001000b,10000000b,00000010b,\ - 00001110b,00010000b,01000000b,00000001b,\ - 00000100b,00100010b,00000000b,10000000b,\ - 00000000b,00000010b,00000000b,01000000b,\ - 00111111b,11111111b,11111111b,11100000b,\ - 00000000b,00000010b,00000000b,01000000b,\ - 00000000b,00000010b,00000000b,10000000b - -.snake_dots db 11,7, 10,7, 9,7 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 96 -.name dd stage_16_name - -stage_17: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000111b,10000001b,11100000b,00000000b,\ - 00001000b,01000010b,00010000b,00000000b,\ - 00010001b,00100100b,01001000b,00000000b,\ - 00010001b,00000000b,01001000b,00000000b,\ - 00001000b,01000010b,00010000b,00000000b,\ - 00000111b,10000001b,11100000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,01000000b,00000000b,00000000b,\ - 00000000b,00111110b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 11,7, 11,8, 12,8 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 40 -.name dd stage_17_name - -stage_18: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01000100b,01000100b,01000100b,01000000b,\ - 00101010b,10101010b,10101010b,10100000b,\ - 00010001b,00010001b,00010001b,00000000b - -.snake_dots db 2,5, 3,5, 4,5 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 78 -.name dd stage_18_name - -stage_19: -.field db 01000010b,00100100b,10000101b,00000000b,\ - 00010000b,00010000b,00100000b,10000000b,\ - 00111001b,00000010b,00010000b,00100000b,\ - 01000100b,00001000b,00000010b,00000000b,\ - 01010101b,01000000b,01000000b,01000000b,\ - 01010100b,00010000b,00001000b,11100000b,\ - 00000100b,10001001b,00100001b,00000000b,\ - 01111100b,00100000b,00000001b,01010000b,\ - 00111001b,00000100b,00010001b,01010000b,\ - 00010000b,00000000b,10000001b,00010000b,\ - 11010111b,11100000b,00011101b,11110000b,\ - 00010000b,01000000b,00100000b,11100000b,\ - 00010000b,10000000b,00100000b,01000000b,\ - 00000001b,00000000b,00010000b,01000000b - -.snake_dots db 27,6, 0,6, 1,6 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 95 -.name dd stage_19_name - -stage_20: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,10001000b,00000000b,\ - 00000000b,00011100b,10000100b,00000000b,\ - 00000000b,01100100b,10000010b,00000000b,\ - 00000011b,10000100b,10000100b,00000000b,\ - 00000010b,00000100b,10001000b,00000000b,\ - 00000010b,00000100b,10000100b,00000000b,\ - 00000010b,00000100b,10000010b,00000000b,\ - 00000010b,00111100b,10010010b,00000000b,\ - 00011110b,00111100b,10010100b,00000000b,\ - 00011110b,00111100b,10001000b,00000000b,\ - 00011110b,00000000b,10000000b,00000000b,\ - 00000000b,00000000b,10000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 17,2, 17,3, 17,4 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 65 -.name dd stage_20_name - -stage_21: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,11111111b,11111110b,00000000b,\ - 00000001b,01000100b,01000100b,00000000b,\ - 00000010b,01000100b,01000100b,00000000b,\ - 00001100b,01000100b,01000100b,00000000b,\ - 01110000b,01000100b,01000100b,00000000b,\ - 01110000b,01000100b,01000100b,00000000b,\ - 01110000b,11101110b,11101110b,00000000b,\ - 00000000b,11101110b,11101110b,00000000b,\ - 00000000b,11101110b,11101110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 10,1, 11,1, 12,1 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 86 -.name dd stage_21_name - -stage_22: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,10000000b,00000000b,00000000b,\ - 00000111b,11100000b,00000000b,00000000b,\ - 00001111b,11110000b,00000000b,00000000b,\ - 00011111b,11100000b,00000000b,00000000b,\ - 00011111b,11000011b,00001100b,00110000b,\ - 00011111b,10000111b,10011110b,01110000b,\ - 00011111b,11000111b,10011110b,01110000b,\ - 00011111b,11100011b,00001100b,00110000b,\ - 00001111b,11110000b,00000000b,00000000b,\ - 00000111b,11100000b,00000000b,00000000b,\ - 00000011b,10000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,7, 1,6, 1,5 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 104 -.name dd stage_22_name - -stage_23: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00100000b,01000101b,00010000b,00100000b,\ - 00011010b,00100101b,00100010b,11000000b,\ - 00000100b,10101000b,10101001b,00000000b,\ - 00000100b,10010010b,01001001b,00000000b,\ - 00001011b,00110000b,01100110b,10000000b,\ - 00000000b,11001010b,10011000b,00000000b,\ - 00000001b,00000111b,00000100b,00000000b,\ - 00001110b,01001010b,10010011b,10000000b,\ - 00000010b,00110000b,01100010b,00000000b,\ - 00000101b,00010010b,01000101b,00000000b,\ - 00001001b,00001000b,10000100b,10000000b,\ - 00000000b,00001000b,10000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 15,0, 14,0, 13,0 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 85 -.name dd stage_23_name - -stage_24: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00111111b,11111111b,11111111b,10000000b,\ - 00100000b,00000000b,00000000b,10000000b,\ - 00100011b,11111111b,11111000b,10000000b,\ - 00100010b,00000000b,00001000b,10000000b,\ - 00100010b,00111111b,10001000b,10000000b,\ - 00100010b,00100000b,10001000b,10000000b,\ - 00101010b,10101010b,10101010b,10000000b,\ - 00001000b,10001110b,00100010b,00000000b,\ - 00001000b,10000000b,00100010b,00000000b,\ - 00001000b,11111111b,11100010b,00000000b,\ - 00001000b,00000000b,00000010b,00000000b,\ - 00001111b,11111111b,11111110b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,0, 0,0, 0,1 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 120 -.name dd stage_24_name - -stage_25: -.field db 00000100b,11000000b,00000000b,00000000b,\ - 00000011b,10000000b,00110010b,00000000b,\ - 10011010b,10000000b,00011100b,00000000b,\ - 01110000b,00000000b,00010101b,10010000b,\ - 01010000b,00000111b,00000000b,11100000b,\ - 00000100b,00000101b,00000000b,10100000b,\ - 00000100b,00000100b,00000000b,00000000b,\ - 00000011b,11111100b,00011001b,00000000b,\ - 00000010b,10010100b,00001110b,00000000b,\ - 00000010b,10010100b,00001010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000011b,00100001b,10010011b,00100000b,\ - 00000001b,11000000b,11100001b,11000000b,\ - 00000001b,01000000b,10100001b,01000000b - -.snake_dots db 11,2, 12,2, 13,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 88 -.name dd stage_25_name - -stage_26: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00111100b,01001111b,01111010b,01000000b,\ - 00100000b,01000001b,00001010b,01000000b,\ - 00100100b,01001111b,01111011b,11000000b,\ - 00000100b,01001000b,00001000b,01000000b,\ - 00111100b,01001111b,01111000b,01000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00111101b,11101111b,01111011b,11000000b,\ - 00100001b,00000001b,00000000b,00000000b,\ - 00111101b,11100001b,01111011b,11000000b,\ - 00000100b,00000001b,00000000b,01000000b,\ - 00111101b,11100001b,01111011b,11000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 1,5, 0,5, 0,6 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 115 -.name dd stage_26_name - -stage_27: -.field db 00000000b,10000000b,00000000b,01000000b,\ - 00000000b,10000000b,01000000b,11100000b,\ - 00100011b,11100000b,01000000b,01000000b,\ - 01110000b,10000001b,11110000b,00000000b,\ - 00100000b,10000000b,01000000b,00000000b,\ - 00000000b,00000000b,01000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000010b,00000000b,00000000b,00000000b,\ - 00000111b,00000000b,00000000b,10000000b,\ - 00000010b,00001000b,00000001b,11000000b,\ - 00000000b,00000000b,10000000b,10000000b,\ - 00000000b,01000001b,11000000b,00000000b,\ - 01000000b,11100000b,10000000b,00000000b,\ - 00000000b,01000000b,00000000b,00000000b - -.snake_dots db 12,8, 12,7, 12,6 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 51 -.name dd stage_27_name - -stage_28: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000100b,00000000b,00000010b,00000000b,\ - 00010100b,00000000b,00000010b,10000000b,\ - 01010100b,00000000b,00000010b,10100000b,\ - 01010101b,11111111b,11111010b,10100000b,\ - 01010100b,00000000b,00000010b,10100000b,\ - 00010100b,00000000b,00000010b,10000000b,\ - 00000100b,00000000b,00000010b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,8, 12,8, 11,8 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 44 -.name dd stage_28_name - -stage_29: -.field db 00000000b,01110000b,00000000b,00000000b,\ - 00000100b,01000110b,00000001b,10000000b,\ - 01001110b,00001100b,01100000b,11000000b,\ - 01000000b,00000000b,01100000b,00000000b,\ - 01100000b,01111000b,00000001b,10010000b,\ - 00000000b,00000010b,10000101b,10110000b,\ - 00110000b,00110010b,10001100b,00100000b,\ - 00011011b,00110110b,10000100b,00000000b,\ - 00000001b,00000000b,10010000b,10000000b,\ - 00100001b,00000000b,00111000b,10000000b,\ - 00111001b,00110011b,00000011b,10000000b,\ - 01111111b,11111111b,00011011b,11010000b,\ - 11111111b,11111111b,00011111b,11110000b,\ - 11111111b,11111111b,00111111b,11110000b - -.snake_dots db 0,0, 1,0, 2,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 151 -.name dd stage_29_name - -stage_30: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000001b,01011100b,00000000b,\ - 00000000b,00000001b,11001000b,00000000b,\ - 00000100b,00000001b,01001000b,00000000b,\ - 00000100b,00000100b,00000000b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 01111111b,11000100b,11111111b,11100000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00011111b,00111111b,10001110b,00000000b,\ - 00000100b,00000100b,00000100b,00000000b,\ - 00011111b,00011111b,00011111b,00000000b,\ - 11111111b,11111111b,11111111b,11110000b - -.snake_dots db 8,2, 9,2, 10,2 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 109 -.name dd stage_30_name - -stage_31: -.field db 00000101b,00010000b,00000100b,01000000b,\ - 01000100b,01010101b,00010100b,01000000b,\ - 01000101b,01010101b,01000101b,00010000b,\ - 01010000b,00010100b,01000000b,01010000b,\ - 00010101b,01000101b,01010100b,01000000b,\ - 01000001b,00010000b,01010101b,01000000b,\ - 01010101b,00010100b,00000101b,00010000b,\ - 00000101b,01010000b,01000101b,01010000b,\ - 01010000b,01000100b,00000000b,01010000b,\ - 00010101b,00000101b,00010100b,00010000b,\ - 01010001b,00010001b,01000001b,01000000b,\ - 01000100b,00000101b,01010100b,01010000b,\ - 00010001b,01010100b,00010001b,00010000b,\ - 00000100b,01000001b,00010001b,00000000b - -.snake_dots db 18,8, 17,8, 16,8 -.snake_direction dd LEFT -.snake_direction_next dd LEFT -.number_of_stones dd 112 -.name dd stage_31_name - -stage_32: -.field db 11111111b,11111111b,11111111b,11110000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010000b,01000001b,00000100b,00010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 10000010b,00001000b,00100000b,10010000b,\ - 10010010b,01001001b,00100100b,10010000b,\ - 11111111b,11111111b,11111111b,11110000b - -.snake_dots db 1,1, 1,2, 1,3 -.snake_direction dd DOWN -.snake_direction_next dd DOWN -.number_of_stones dd 168 -.name dd stage_32_name - -stage_33: -.field db 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 01111111b,11001111b,11111111b,11100000b,\ - 01000100b,01001000b,01000000b,00100000b,\ - 01000100b,01001000b,01000001b,10100000b,\ - 01000100b,01001000b,01001101b,10100000b,\ - 00000000b,00000000b,00000110b,00000000b,\ - 01000100b,01001000b,01000010b,00100000b,\ - 01000100b,01001000b,01001111b,00100000b,\ - 01000100b,01001000b,01001111b,00100000b,\ - 01000100b,01001000b,01000110b,00100000b,\ - 01111111b,11001111b,11111111b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 6,6, 7,6, 8,6 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 109 -.name dd stage_33_name - -stage_34: -.field db 01110000b,00000000b,00000011b,10000000b,\ - 00010010b,00010000b,01111100b,00000000b,\ - 00011110b,00010000b,00100100b,00000000b,\ - 00000100b,00011001b,00100111b,00000000b,\ - 00001111b,10001001b,00100000b,00110000b,\ - 00000001b,00001011b,00101000b,00100000b,\ - 00000001b,00011110b,01111000b,00100000b,\ - 00111000b,00000010b,00001100b,10100000b,\ - 00001110b,00100010b,00000000b,10100000b,\ - 01100011b,11111110b,01000011b,11100000b,\ - 00111110b,00100010b,01000000b,10000000b,\ - 00000000b,01100011b,11000010b,10000000b,\ - 00000000b,01000000b,01100111b,10000000b,\ - 00000000b,00000000b,00000010b,00000000b - -.snake_dots db 7,0, 8,0, 9,0 -.snake_direction dd RIGHT -.snake_direction_next dd RIGHT -.number_of_stones dd 113 -.name dd stage_34_name - -stage_35: -.field db 00000100b,00000000b,00001010b,00000000b,\ - 00010100b,01000000b,00101010b,00000000b,\ - 00010100b,10000010b,00010010b,10000000b,\ - 00010001b,00000000b,00010010b,10000000b,\ - 00010001b,00000010b,00001010b,10000000b,\ - 01010010b,00000010b,00001000b,10100000b,\ - 01000100b,00000000b,00001000b,10100000b,\ - 01000100b,00000010b,00000100b,10100000b,\ - 01001000b,00000010b,00000100b,00100000b,\ - 01001000b,00000000b,00000010b,00100000b,\ - 00010000b,00000010b,00000010b,00100000b,\ - 00110000b,00000010b,00000010b,00100000b,\ - 00100000b,00000010b,00000001b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b - -.snake_dots db 13,11, 13,10, 13,9 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 66 -.name dd stage_35_name - -stage_36: -.field db 10101110b,10001110b,00110100b,11100000b,\ - 11101000b,10001110b,00101010b,10000000b,\ - 10101110b,11101000b,00101010b,11100000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00000000b,10110010b,01000100b,00000000b,\ - 00000001b,10100101b,01010100b,00000000b,\ - 00000001b,10100101b,00101000b,00000000b,\ - 00000000b,00000000b,00000000b,00000000b,\ - 00010001b,11010101b,11010001b,11000000b,\ - 00010001b,11010101b,11010001b,00000000b,\ - 00010001b,00010101b,00010000b,10000000b,\ - 00011101b,11001001b,11011100b,01000000b,\ - 00000000b,00000000b,00000001b,11010000b - -.snake_dots db 27,11, 27,10, 27,9 -.snake_direction dd UP -.snake_direction_next dd UP -.number_of_stones dd 112 -.name dd stage_36_name - - -stage_00_name db 'Classic mode',0 -stage_01_name db 'Begin',0 -stage_02_name db 'Frame',0 -stage_03_name db 'Sight',0 -stage_04_name db 'Dashed',0 -stage_05_name db 'Beams',0 -stage_06_name db 'Pipe',0 -stage_07_name db 'Labyrinth',0 -stage_08_name db 'Sea battle',0 -stage_09_name db 'Recursion',0 -stage_10_name db 'Narrow corridors',0 -stage_11_name db 'CCC',0 -stage_12_name db 'Deadlocks',0 -stage_13_name db 'Boat',0 -stage_14_name db 'Pattern',0 -stage_15_name db 'Guernica',0 -stage_16_name db 'Goto',0 -stage_17_name db 'Smiling face',0 -stage_18_name db 'Waves',0 -stage_19_name db 'First snow',0 -stage_20_name db 'Music and silence',0 -stage_21_name db 'Experiment',0 -stage_22_name db 'Pacman',0 -stage_23_name db 'Intricate pattern',0 -stage_24_name db 'Square arcs',0 -stage_25_name db 'In the animal world',0 -stage_26_name db 'Digits',0 -stage_27_name db 'Pluses',0 -stage_28_name db 'Rod',0 -stage_29_name db 'Tetris',0 -stage_30_name db 'Towers of Hanoi',0 -stage_31_name db 'Ruins',0 -stage_32_name db 'Walls of Akendora',0 -stage_33_name db 'Geranium in the window',0 -stage_34_name db 'Algae',0 -stage_35_name db 'The road ahead',0 -stage_36_name db 'Help me draw levels!',0 - - -background_color dd 0x000000 -decorations_color dd 0x00000000 -snake_color dd 0x000000 -snake_head_color dd 0x000000 -lives_in_head_number_color dd 0x000000 -snake_picture_color dd 0x000000 -version_picture_color dd 0x000000 -pause_picture_color dd 0x000000 -game_over_picture_color dd 0x000000 -you_win_picture_color dd 0x000000 -eat_color dd 0x000000 -navigation_strings_color dd 0x80000000 -game_over_strings_color dd 0x80000000 -score_string_color dd 0x80000000 -hiscore_string_color dd 0x80000000 -champion_string_color dd 0x80000000 -game_over_hiscore_color dd 0x80000000 -score_number_color dd 0x40000000 -hiscore_number_color dd 0x00000000 -champion_name_color dd 0x80000000 -button_color dd 0x000000 -button_text_color dd 0x80000000 -stone_color dd 0x000000 -splash_background_color dd 0x000000 -splash_level_string_color dd 0x000000 -splash_level_number_color dd 0x000000 -level_string_color dd 0x80000000 -level_number_color dd 0x00000000 - - -align 4 -@IMPORT: - -library \ - libini , 'libini.obj' ,\ - box_lib , 'box_lib.obj' - -import libini,\ - ini.get_str , 'ini_get_str' ,\ - ini.get_int , 'ini_get_int' ,\ - ini.set_str , 'ini_set_str' ,\ - ini.set_int , 'ini_set_int' ,\ - ini.get_color , 'ini_get_color' ,\ - ini.get_shortcut, 'ini_get_shortcut' - -import box_lib,\ - edit_box.draw , 'edit_box' ,\ - edit_box.key , 'edit_box_key' ,\ - edit_box.mouse , 'edit_box_mouse' - -bFirstDraw db 0 - -aPreferences db 'Preferences',0 -aSpeed db 'Speed',0 -aTheme db 'Theme',0 -aSmart_reverse db 'Smart_reverse',0 -aShow_lives_style db 'Show_lives_style',0 -aDraw_level_name_in_window_title db 'Draw_level_name_in_window_title',0 -aSeparating_symbol db 'Separating_symbol',0 - -aShortcuts db 'Shortcuts',0 -aMove_left db 'Move_left',0 -aMove_down db 'Move_down',0 -aMove_up db 'Move_up',0 -aMove_right db 'Move_right',0 -aReverse db 'Reverse',0 -aIncrease db 'Increase',0 -aDecrease db 'Decrease',0 - -aTheme_name db 32 dup (0) -aDecorations db 'Decorations',0 -aBackground_color db 'Background_color',0 -aDecorations_color db 'Decorations_color',0 -aSnake_color db 'Snake_color',0 -aSnake_head_color db 'Snake_head_color',0 -aLives_in_head_number_color db 'Lives_in_head_number_color',0 -aSnake_picture_color db 'Snake_picture_color',0 -aVersion_picture_color db 'Version_picture_color',0 -aPause_picture_color db 'Pause_picture_color',0 -aGame_over_picture_color db 'Game_over_picture_color',0 -aYou_win_picture_color db 'You_win_picture_color',0 -aEat_color db 'Eat_color',0 -aNavigation_strings_color db 'Navigation_string_color',0 -aGame_over_strings_color db 'Game_over_string_color',0 -aScore_string_color db 'Score_string_color',0 -aHiscore_string_color db 'Hiscore_string_color',0 -aChampion_string_color db 'Champion_string_color',0 -aGame_over_hiscore_color db 'Game_over_hiscore_color',0 -aScore_number_color db 'Score_number_color',0 -aHiscore_number_color db 'Hiscore_number_color',0 -aChampion_name_color db 'Champion_name_color',0 -aEdit_box_selection_color db 'Edit_box_selection_color',0 -aButton_color db 'Button_color',0 -aButton_text_color db 'Button_text_color',0 -aStone_color db 'Stone_color',0 -aSplash_background_color db 'Splash_background_color',0 -aSplash_level_string_color db 'Splash_level_string_color',0 -aSplash_level_number_color db 'Splash_level_number_color',0 -aLevel_string_color db 'Level_string_color',0 -aLevel_number_color db 'Level_number_color',0 - -aReserved db 'Reserved',0 -aSquare_side_length db 'Square_side_length',0 -aHiscore_classic db 'Hiscore_classic',0 -aChampion_name_classic db 'Champion_name_classic',0 -aHiscore_levels db 'Hiscore_levels',0 -aChampion_name_levels db 'Champion_name_levels',0 - -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 - -hed db '',0 -;;---Variables------------------------------------------------------------------------------------------------------------- -i_end: -hed_end: -rb 256 -mouse_dd rd 1 - -window_style rd 1 - -cur_level rd 1 -cur_level_number rd 1 -hi_level rd 1 - -score rd 1 -hi_score_classic rd 1 -hi_score_levels rd 1 - -champion_name_classic rb CHAMPION_NAME_LENGTH -champion_name_levels rb CHAMPION_NAME_LENGTH - -snake_dots rb GRID_WIDTH*GRID_HEIGHT*2+3 ; +3 bytes for faster dword copying -snake_direction rd 1 -snake_direction_next rd 1 -snake_length_x2 rd 1 - -decorations rd 1 -number_of_free_dots rd 1 - -eat rw 1 - -g_s rd 1 -g_e rd 1 - -window_width rd 1 -window_height rd 1 -wp_x rd 1 -wp_y rd 1 - -gw_mul_gs rd 1 -gh_mul_gs rd 1 -gbxm1_plus_gw_mul_gs rd 1 -gbym1_plus_gh_mul_gs rd 1 -gs_shl16_gs rd 1 -gbxm1_shl16_gbxm1 rd 1 -gbym1_shl16_gbym1 rd 1 - -bottom_top_strings rd 1 -bottom_middle_strings rd 1 -bottom_bottom_strings rd 1 -top_strings rd 1 - -button_x_left rd 1 -button_x_right rd 1 -button_y_top rd 1 -button_y_middle rd 1 -button_y_bottom rd 1 -button_width_short rd 1 -button_width_long rd 1 -button_height rd 1 - -cursor_data rb 32*32*4 -cursor_handle rd 1 - -cur_dir_path rb 4096 -@PARAMS rb 4096 - -field_map rb GRID_WIDTH*GRID_HEIGHT*2 - -proc_info process_information - -smart_reverse rd 1 -show_lives_style rd 1 -draw_level_name_in_window_title rd 1 -separating_symbol rd 1 - -shortcut_move_left rb 1 -shortcut_move_down rb 1 -shortcut_move_up rb 1 -shortcut_move_right rb 1 -shortcut_reverse rb 1 -shortcut_increase rb 1 -shortcut_decrease rb 1 - -square_side_length rd 1 - -gbxm1 rd 1 -gbym1 rd 1 -speed_up_counter rw 1 - -rb 4096 -stacktop: -d_end: +; SPDX-License-Identifier: NOASSERTION +; + +;;===HEADER==================================================================================================================== + +use32 + org 0x0 + db 'MENUET01' + dd 0x01,start,i_end,d_end,stacktop,0x0,cur_dir_path + +;;---HEADER-------------------------------------------------------------------------------------------------------------------- + +include '../../proc32.inc' +include '../../macros.inc' +include '../../dll.inc' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +;include '../../system/board/debug.inc' + +;;===Define_chapter============================================================================================================ + +WINDOW_MODE_WINDOWED equ 0 +WINDOW_MODE_FULLSCREEN equ 1 + +GRID_WIDTH equ 28 +GRID_HEIGHT equ 14 + +MIN_SQUARE_SIDE_LENGTH equ 9 + +SCORE_EAT equ 100 + +LEFT equ 0 +DOWN equ 1 +UP equ 2 +RIGHT equ 3 + +struct LEVEL + field db 4*GRID_HEIGHT dup (?) + snake_dots db 6 dup (?) + snake_direction dd ? + snake_direction_next dd ? + number_of_stones dd ? + name dd ? +ends + +CLASSIC_MODE equ 0 +LEVELS_MODE equ 1 + +CLASSIC_MODE_FIRST_LEVEL equ 0 +LEVELS_MODE_FIRST_LEVEL equ 1 + +EAT_TO_END_LEVEL equ 7 +PAUSE_BETWEEN_LEVELS equ 200 +PAUSE_WHILE_DRAWING_SPLASH equ 3 + +CHAMPION_NAME_LENGTH equ 15 +LAST_LEVEL_NUMBER equ 36 + +START_LIVES equ 3 + +;;---Define_chapter------------------------------------------------------------------------------------------------------------ + +start: + +stdcall dll.Load,@IMPORT + or eax, eax + jnz Exit + +align 4 + + mov edi, cur_dir_path + mov al, 0 + mov ecx, 4096 + repne scasb + mov dword[edi-1], '.ini' + + invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80 + neg eax + add [time_wait_limit], eax + mov ebx, [time_wait_limit] + mov [time_wait_limit_const], ebx + sub ebx, 4 + mov eax, 200 + div bl + mov byte[speed_up_counter], al + mov byte[speed_up_counter+1], al + invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name + invoke ini.get_int, cur_dir_path, aPreferences, aSmart_reverse, 0 + mov [smart_reverse], eax + invoke ini.get_int, cur_dir_path, aPreferences, aShow_lives_style, 2 + mov [show_lives_style], eax + invoke ini.get_int, cur_dir_path, aPreferences, aDraw_level_name_in_window_title, 1 + mov [draw_level_name_in_window_title], eax + invoke ini.get_str, cur_dir_path, aPreferences, aSeparating_symbol, separating_symbol, 3, default_separating_symbol + + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_left, 0x23, 0 + mov [shortcut_move_left], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_down, 0x24, 0 + mov [shortcut_move_down], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_up, 0x25, 0 + mov [shortcut_move_up], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aMove_right, 0x26, 0 + mov [shortcut_move_right], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aReverse, 0x0F, 0 + mov [shortcut_reverse], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aIncrease, 0x16, 0 + mov [shortcut_increase], al + invoke ini.get_shortcut, cur_dir_path, aShortcuts, aDecrease, 0x17, 0 + mov [shortcut_decrease], al + + invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 3 + mov [decorations], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000 + or [background_color], eax + or [window_style_windowed], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x232300 + or [decorations_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff + or [snake_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff + or [snake_head_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLives_in_head_number_color, 0xff8800 + or [lives_in_head_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff + or [snake_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55 + or [version_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11 + or [pause_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111 + or [game_over_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11 + or [you_win_picture_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11 + or [eat_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777 + or [navigation_strings_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900 + or [game_over_strings_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff + or [score_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff + or [level_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff + or [hiscore_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff + or [champion_string_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44 + or [game_over_hiscore_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff + or [score_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff + or [level_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff + or [hiscore_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff + or [champion_name_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00 + or [edit1.shift_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD + or [button_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000 + or [button_text_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700 + or [stone_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00 + or [splash_background_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000 + or [splash_level_number_color], eax + invoke ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000 + or [splash_level_string_color], eax + + invoke ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19 + mov [square_side_length], eax + invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic + invoke ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777 + or [hi_score_classic], eax + invoke ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels + invoke ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777 + or [hi_score_levels], eax + + mov eax, [background_color] + mov [edit1.color], eax + mov [edit1.focus_border_color], eax + mov [edit1.blur_border_color], eax + mov eax, [game_over_hiscore_color] + mov [edit1.text_color], eax + + mcall 37,4,cursor_data,2 ; load empty cursor (for "hiding" cursor while level_mode) + mov [cursor_handle], eax + + mov eax, WINDOW_MODE_WINDOWED + call Set_window_mode + mcall 0,0,0,[window_style_windowed] ; create empty window. Set_geometry will set all parameters + call Set_geometry.by_hotkey + mcall 71,1,window_title + +include 'first_menu.asm' ; First menu body and functions +include 'level.asm' ; Level body and functions (game process) +include 'pause.asm' ; Pause body and functions +include 'game_over.asm' ; Game_over body and functions + +;;===Some_functions============================================================================================================ + + +Save_do_smth_else_and_exit: + ;;===Save_do_smth_else_and_exit============================================================================================ + + mcall 37,6,[cursor_handle] ; delete cursor + + invoke ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length] + + mov edi, champion_name_classic + xor al, al + mov ecx, CHAMPION_NAME_LENGTH+1 + cld + repne scasb + neg ecx + add ecx, CHAMPION_NAME_LENGTH + invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx + invoke ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic] + + mov edi, champion_name_levels + xor al, al + mov ecx, CHAMPION_NAME_LENGTH+1 + cld + repne scasb + neg ecx + add ecx, CHAMPION_NAME_LENGTH + invoke ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx + invoke ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels] + + ;;---Save_do_smth_else_and_exit-------------------------------------------------------------------------------------------- + + +Exit: + ;;===Exit================================================================================================================== + + or eax, -1 + int 0x40 + + ;;---Exit------------------------------------------------------------------------------------------------------------------ + + +Set_geometry: + ;;===Set_geometry========================================================================================================== + + cmp [resized_by_hotkey], 1 + je .by_hotkey + + test [proc_info.wnd_state], 0x01 + jnz .by_hotkey + + mcall 9,proc_info,-1 + test [proc_info.wnd_state], 0x04 ; is rolled up? + jz @f + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + jmp .quit + @@: + mov eax, [proc_info.box.width] + cmp eax, [window_width] + jne @f + mov eax, [proc_info.box.height] + cmp eax, [window_height] + jne @f + jmp .quit + @@: + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + + .by_mouse: ; or any other kind of resizing. for example, double click on window title + + test [proc_info.wnd_state], 0x01 + jnz .by_hotkey + + + cmp [window_width], 250 + jnl @f + mov [window_width], 250 + @@: + cmp [window_height], 150 + jnl @f + mov [window_height], 150 + @@: + + mcall 48,4 + mov ecx, [window_height] + sub ecx, eax + sub ecx, 5 + sub ecx, [g_e] + sub ecx, [g_e] + sub ecx, 25+30 + mov esi, ecx + + mov eax, [window_width] + sub eax, 5+5 + sub eax, [g_e] + sub eax, [g_e] + sub eax, [g_s] + sub eax, [g_s] + mov edi, eax + + mov dx, 0 + div cx + cmp ax, 2 + jl .fit_to_width + + .fit_to_height: + mov eax, esi + mov ebx, GRID_HEIGHT + div bl + cmp al, MIN_SQUARE_SIDE_LENGTH + jnl @f + mov al, MIN_SQUARE_SIDE_LENGTH + @@: + dec al + mov byte[square_side_length], al + jmp .by_hotkey + + .fit_to_width: + mov eax, edi + mov ebx, GRID_WIDTH + div bl + cmp al, MIN_SQUARE_SIDE_LENGTH + jnl @f + mov al, MIN_SQUARE_SIDE_LENGTH + @@: + dec al + mov byte[square_side_length], al + jmp .by_hotkey + +; jmp .done + + .by_hotkey: + mcall 9,proc_info,-1 + mov [resized_by_hotkey], 0 + test [proc_info.wnd_state], 0x04 ; is rolled up? + jz @f + mov eax, [proc_info.box.width] + mov [window_width], eax + mov eax, [proc_info.box.height] + mov [window_height], eax + jmp .quit + @@: + mov eax, [square_side_length] + inc eax ; space between squares + mov [g_s], eax + + mov eax, [g_s] + shr eax, 1 + mov ebx, eax + shr ebx, 1 + add eax, ebx + mov [g_e], eax + + mov edx, GRID_WIDTH + mov eax, [g_s] + mul dx + mov [gw_mul_gs], eax + + mov edx, GRID_HEIGHT + mov eax, [g_s] + mul dx + mov [gh_mul_gs], eax + + mov eax, [gw_mul_gs] + add eax, [g_s] + add eax, [g_s] + add eax, [g_e] + add eax, [g_e] + add eax, 5*2 ; skin width + mov esi, eax + test [proc_info.wnd_state], 0x01 + jz @f + mov eax, [proc_info.box.width] + @@: + mov [window_width], eax + + sub eax, [gw_mul_gs] + sub eax, 5*2 + shr eax, 1 + mov [gbxm1], eax + + mcall 48,4 ; get skin header height + mov ebx, eax + add eax, [gh_mul_gs] + add eax, [g_e] + add eax, 25 + add eax, [g_e] + add eax, 30 + add eax, 5 ; skin height (bottom part) + mov edi, eax + test [proc_info.wnd_state], 0x01 + jz @f + mov eax, [proc_info.box.height] + @@: + mov [window_height], eax + + sub eax, [gh_mul_gs] + sub eax, ebx + sub eax, 5 + sub eax, 5 + + shr eax, 1 + mov [gbym1], eax + + mov eax, [g_s] + shl eax, 16 + add eax, [g_s] + mov [gs_shl16_gs], eax + + mov eax, [gbxm1] + shl eax, 16 + add eax, [gbxm1] + mov [gbxm1_shl16_gbxm1], eax + + mov eax, [gbym1] + shl eax, 16 + add eax, [gbym1] + mov [gbym1_shl16_gbym1], eax + + mov eax, [gbxm1] + add eax, [gw_mul_gs] + mov [gbxm1_plus_gw_mul_gs], eax + + mov eax, [gbym1] + add eax, [gh_mul_gs] + mov [gbym1_plus_gh_mul_gs], eax + + mcall 48, 5 + mov dx, ax + shr eax, 16 + sub dx, ax + cmp dx, si ; does window fit to work area width? + jnl @f + dec [square_side_length] + jmp Set_geometry.by_hotkey + @@: + + mov cx, bx + shr ebx, 16 + sub cx, bx + cmp cx, di ; does window fit to work area height? + jnl @f + dec [square_side_length] + jmp Set_geometry.by_hotkey + @@: + + sub dx, si + shr dx, 1 + mov word[wp_x], dx + sub cx, word[window_height] + shr cx, 1 + mov dx, cx + shr cx, 1 + add cx, dx + mov word[wp_y], cx + + mov [top_strings], 8 + mov eax, [window_height] + sub eax, 50 + mov [bottom_top_strings], eax + add eax, 6 + mov [bottom_middle_strings], eax + add eax, 6 + mov [bottom_bottom_strings], eax + + sub eax, 4 + mov [edit1.top], eax + + + mov eax, [g_s] + shl eax, 2 + sub eax, 2 + mov [button_width_short], eax + mov eax, [g_s] + shl eax, 3 + add eax, [g_s] + sub eax, 2 + mov [button_width_long], eax + mov eax, [g_s] + sub eax, 2 + mov [button_height], eax + + mov bl, 0x10 + mov cl, 0x08 + + mov al, byte[g_s] + mul bl + mov bx, ax + add bx, word[gbxm1] + inc bx + + mov al, byte[g_s] + mul cl + mov cx, ax + add cx, word[gbym1] + inc cx + + mov [button_x_left], ebx + mov [button_y_top], ecx + + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + add ebx, [g_s] + + mov [button_x_right], ebx + + add ecx, [g_s] + add ecx, [g_s] + + mov [button_y_middle], ecx + + add ecx, [g_s] + add ecx, [g_s] + + mov [button_y_bottom], ecx + + .done: + mcall 67,[wp_x],[wp_y],[window_width],[window_height] + + .quit: + ret + + ;;---Set_geometry------------------------------------------------------------------------------------------------------ + + +Increase_geometry: + ;;===Increase_geometry================================================================================================= + + inc [square_side_length] + mov [resized_by_hotkey], 1 + + ret + + ;;---Increase_geometry------------------------------------------------------------------------------------------------- + + +Decrease_geometry: + ;;===Decrease_geometry================================================================================================= + + cmp [square_side_length], MIN_SQUARE_SIDE_LENGTH + je @f + dec [square_side_length] + mov [resized_by_hotkey], 1 + + @@: + ret + + ;;---Decrease_geometry------------------------------------------------------------------------------------------------- + + +Draw_decorations: + ;;===Draw_decorations================================================================================================== + + mov al, byte[decorations] + dec al + jz grid_lines + dec al + jz grid_lines_with_ends + dec al + jz grid_lines_with_corners + dec al + jz grid_dots + dec al + jz borders_lines + dec al + jz borders_lines_with_corners + dec al + jz borders_dots + dec al + jz corners_dots + dec al + jz corners_inner + dec al + jz corners_outer + dec al + jz corners_crosses + ret + + + grid_lines: + + mov eax, 38 +;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1) + mov ebx, [gbxm1_shl16_gbxm1] +;mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP) + mov ecx, [gbym1_shl16_gbym1] + add ecx, [gh_mul_gs] + mov edx, [decorations_color] + mov esi, GRID_WIDTH + add esi, 1 + + @@: + mcall + add ebx, [gs_shl16_gs] + dec esi + jnz @b + +;mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP) + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [gw_mul_gs] + mov ecx, [gbym1_shl16_gbym1] + mov esi, GRID_HEIGHT + add esi, 1 + + @@: + mcall + add ecx, [gs_shl16_gs] + dec esi + jnz @b + + ret + + + grid_lines_with_ends: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1] + sub ecx, [g_e] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + add ecx, [g_e] + mov edx, [decorations_color] + mov esi, GRID_WIDTH + add esi, 1 + + @@: + mcall + add ebx, [gs_shl16_gs] + dec esi + jnz @b + + mov ebx, [gbxm1] + sub ebx, [g_e] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + add ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov esi, GRID_HEIGHT + add esi, 1 + + @@: + mcall + add ecx, [gs_shl16_gs] + dec esi + jnz @b + + ret + + + grid_lines_with_corners: + + call grid_lines + call corners_outer + + ret + + + grid_dots: + + mov eax, 1 + mov ebx, [gbxm1] + mov ecx, [gbym1] + mov edx, [decorations_color] + + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jg @f + mov ebx, [gbxm1] + jmp @b + + @@: + ret + + + borders_lines: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + add ecx, [gh_mul_gs] + mov edx, [decorations_color] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [gw_mul_gs] + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + ret + + + borders_lines_with_corners: + + call borders_lines + call corners_outer + + ret + + + borders_dots: + + mov eax, 1 + mov ebx, [gbxm1] + mov ecx, [gbym1] + mov edx, [decorations_color] + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + + mov ebx, [gbxm1] + mov ecx, [gbym1_plus_gh_mul_gs] + @@: + mcall + add ebx, [g_s] + cmp ebx, [gbxm1_plus_gw_mul_gs] + jng @b + + mov ebx, [gbxm1] + mov ecx, [gbym1] + @@: + mcall + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jng @b + + mov ebx, [gbxm1_plus_gw_mul_gs] + mov ecx, [gbym1] + @@: + mcall + add ecx, [g_s] + cmp ecx, [gbym1_plus_gh_mul_gs] + jng @b + + ret + + + corners_dots: + + mov eax, 13 + mov ebx, [gbxm1] + dec ebx + shl ebx, 16 + add ebx, 2 + mov ecx, [gbym1] + dec ecx + shl ecx, 16 + add ecx, 2 + mov edx, [decorations_color] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, 2 + mcall + + mov ebx, [gbxm1] + dec ebx + shl ebx, 16 + add ebx, 2 + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, 2 + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, 2 + mcall + + ret + + + corners_inner: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + add ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov edx, [decorations_color] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + sub ebx, [g_e] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + add ecx, [g_e] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + sub ecx, [g_e] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mcall + + ret + + + corners_outer: + + mov eax, 38 + mov ebx, [gbxm1_shl16_gbxm1] + sub ebx, [g_e] + mov ecx, [gbym1_shl16_gbym1] + mov edx, [decorations_color] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + add ebx, [g_e] + mcall + + mov ecx, [gbym1_shl16_gbym1] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mov ecx, [gbym1_shl16_gbym1] + sub ecx, [g_e] + mcall + + mov ebx, [gbxm1_plus_gw_mul_gs] + shl ebx, 16 + add ebx, [gbxm1_plus_gw_mul_gs] + mcall + + mov ecx, [gbym1_plus_gh_mul_gs] + shl ecx, 16 + add ecx, [gbym1_plus_gh_mul_gs] + add ecx, [g_e] + mcall + + mov ebx, [gbxm1_shl16_gbxm1] + mcall + + ret + + + corners_crosses: + + call corners_inner + call corners_outer + + ret + + + ;;---Draw_decorations-------------------------------------------------------------------------------------------------- + + +Draw_square: + ;;===Draw_square======================================================================================================= + ;; bl - x_coord + ;; bh - y_coord + ;; edx - color + + push eax ebx ecx edx + + mov cl, bh + + mov al, byte[g_s] + mul bl + mov bx, ax + add bx, word[gbxm1] + inc bx + shl ebx, 16 + add ebx, [g_s] + dec ebx + + mov al, byte[g_s] + mul cl + mov cx, ax + add cx, word[gbym1] + inc cx + shl ecx, 16 + add ecx, [g_s] + dec ecx + + mcall 13 + + pop edx ecx ebx eax + + ret + + ;;---Draw_square------------------------------------------------------------------------------------------------------- + + +Draw_menu_esc: + ;;===Draw_menu_esc===================================================================================================== + + mov ebx, [window_width] + shr ebx, 1 + sub ebx, string_menu_esc.size*3+6 + shl ebx, 16 + add ebx, dword[top_strings] + mcall 4, ,[navigation_strings_color],string_menu_esc + + ret + + ;;---Draw_menu_esc----------------------------------------------------------------------------------------------------- + + +Draw_score_string: + ;;===Draw_score_string================================================================================================= + + mov ebx, [window_width] + shr ebx, 3 + sub ebx, 5 + shl ebx, 16 + add ebx, dword[bottom_top_strings] + mcall 4, ,[score_string_color],string_score + + ret + + ;;---Draw_score_string------------------------------------------------------------------------------------------------- + + +Draw_score_number: + ;;===Draw_score_number================================================================================================= + + mov edx, [window_width] + shr edx, 3 + sub edx, 5+1 + add edx, string_score.size*6 + shl edx, 16 + add edx, dword[bottom_top_strings] + mcall 47,0x00070000,[score], ,[score_number_color],[background_color] + + ret + + ;;---Draw_score_number------------------------------------------------------------------------------------------------- + + +Draw_hiscore_string: + ;;===Draw_hiscore_string=============================================================================================== + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, string_hi_score.size*6+7*6+5 + shl ebx, 16 + add ebx, dword[bottom_top_strings] + mcall 4, ,[hiscore_string_color],string_hi_score + + ret + + ;;---Draw_hiscore_string----------------------------------------------------------------------------------------------- + + +Draw_hiscore_number: + ;;===Draw_hiscore_number=================================================================================================== + + mov edx, [window_width] + shr edx, 3 + neg edx + add edx, [window_width] + sub edx, 7*6+6 + shl edx, 16 + add edx, dword[bottom_top_strings] + + cmp [play_mode], CLASSIC_MODE + jne @f + mov ecx, [hi_score_classic] + jmp .done + @@: + mov ecx, [hi_score_levels] + + .done: + mcall 47,0x00070000, , ,[hiscore_number_color] + + ret + + ;;---Draw_hiscore_number--------------------------------------------------------------------------------------------------- + + +Draw_champion_string: + ;;===Draw_champion_string================================================================================================== + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, string_champion.size*6+7*6+5 + shl ebx, 16 + add ebx, dword[bottom_bottom_strings] + mcall 4, ,[champion_string_color],string_champion + + ret + + ;;---Draw_champion_string---------------------------------------------------------------------------------------------- + + +Draw_champion_name: + ;;===Draw_champion_name================================================================================================ + + mov ebx, [window_width] + shr ebx, 3 + neg ebx + add ebx, [window_width] + sub ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6 ; there is no difference between length of champion names for other play_modes + add ebx, CHAMPION_NAME_LENGTH/2*6 + shl ebx, 16 + add ebx, dword[bottom_bottom_strings] + + cmp [play_mode], CLASSIC_MODE + jne @f + mov edx, champion_name_classic + jmp .done + @@: + mov edx, champion_name_levels + + .done: + mcall 4, ,[champion_name_color], + + ret + + ;;---Draw_champion_name------------------------------------------------------------------------------------------------ + + +Draw_picture: + ;;===Draw_picture====================================================================================================== + ;; in : + ;; ax = number of left square *0x100+ picture width (in squares) + ;; cx = number of top square *0x100+ picture height (in squares) + ;; edx = picture color + ;; esi = pointer to picture data + ;; + + add al, ah + add cl, ch + mov bh, ch + + .draw: + mov bl, ah + mov di, 7 + + .loop: + bt word[esi], di + jnc @f + push eax ebx ecx esi edi + call Draw_square + pop edi esi ecx ebx eax + + @@: + dec di + jns @f + mov di, 7 + inc esi + @@: + inc bl + cmp bl, al + jne .loop + + inc bh + cmp di, 7 + jz @f + inc esi + @@: + cmp bh, cl + jne .draw + + ret + + ;;---Draw_picture------------------------------------------------------------------------------------------------------ + + +Draw_on_map: + ;;===Draw_on_map======================================================================================================= + ;; in : + ;; al = x coord + ;; ah = y coord + ;; cl = value to draw + ;; + + and eax, 0x0000ffff + xor bx, bx + mov bl, al + shr ax, 8 + mov dx, GRID_WIDTH + mul dx + add ax, bx + mov edi, field_map + add edi, eax + mov [edi], cl + + ret + + ;;---Draw_on_map------------------------------------------------------------------------------------------------------- + + +Get_from_map: + ;;===Get_from_map====================================================================================================== + ;; in : + ;; al = x coord + ;; ah = y coord + ;; out : + ;; bl = value on map + ;; + + push eax + + and eax, 0x0000ffff + xor bx, bx + mov bl, al + shr ax, 8 + mov dx, GRID_WIDTH + mul dx + add ax, bx + mov edi, field_map + add edi, eax + mov bl, [edi] + + pop eax + + ret + + ;;---Get_from_map----------------------------------------------------------------------------------------------------------- + + +Load_level: + ;;===Load_level============================================================================================================= + ;; in : + ;; cur_level_number = level number to load + ;; + + mov eax, [cur_level_number] + mov edx, stage_00 + @@: + test al, al + jz @f + add edx, stage_01-stage_00 + dec al + jmp @b + @@: + + mov esi, window_title_with_lives + mov edi, window_title+5 + + .lives_in_title: + cmp [play_mode], LEVELS_MODE + jne .level_name_in_title + test [show_lives_style], 1 + jz .level_name_in_title + mov [edi], byte ' ' + mov al, byte[separating_symbol] + mov [edi+1], byte al + mov [edi+2], byte ' ' + add edi, 3 + mov eax, [lives] + add al, 0x30 + mov [window_title_with_lives], al + mov ecx, 10 + rep movsb + dec edi + + .level_name_in_title: + cmp [draw_level_name_in_window_title], 1 + jne @f + mov [edi], byte ' ' + mov al, byte[separating_symbol] + mov [edi+1], byte al + mov [edi+2], byte ' ' + add edi, 3 + mov esi, edx + add esi, LEVEL.name + mov esi, [esi] + mov ecx, 16 + rep movsd + + @@: + mcall 71,1,window_title + + mov [cur_level], edx + + mov esi, edx + add esi, LEVEL.field + mov edi, field_map + mov ecx, 2 + mov ah, GRID_HEIGHT + .begin: + mov ebx, 7 + mov al, GRID_WIDTH + .loop: + bt [esi], ebx + jnc @f + mov byte[edi], cl + jmp .skip + @@: + mov byte[edi], 0 + .skip: + dec ebx + jns @f + mov ebx, 7 + inc esi + @@: + inc edi + dec al + jnz .loop + inc esi + dec ah + jnz .begin + + + mov esi, edx + add esi, LEVEL.snake_dots + mov edi, snake_dots + mov ecx, 3 + rep movsw + + mov esi, edx + add esi, LEVEL.snake_direction + mov eax, [esi] + mov [snake_direction], eax + + mov esi, edx + add esi, LEVEL.snake_direction_next + mov eax, [esi] + mov [snake_direction_next], eax + + mov esi, edx + add esi, LEVEL.number_of_stones + mov eax, [esi] + mov [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3 + sub [number_of_free_dots], eax + + mov ax, word[snake_dots] + mov cl, 1 + call Draw_on_map + mov ax, word[snake_dots+2] + mov cl, 1 + call Draw_on_map + mov ax, word[snake_dots+4] + mov cl, 1 + call Draw_on_map + + mov [action], 0 + mov [snake_length_x2], 6 + + ret + + ;;---Load_level------------------------------------------------------------------------------------------------------------- + + +Draw_stones: + ;;===Draw_stones============================================================================================================ + + mov ax, 0*0x100+GRID_WIDTH + mov cx, 0*0x100+GRID_HEIGHT + mov edx, [stone_color] + mov esi, [cur_level] + add esi, LEVEL.field + call Draw_picture + + ret + + ;;---Draw_stones------------------------------------------------------------------------------------------------------------ + + +Hide_cursor: + ;;===Hide_cursor=========================================================================================================== + + mcall 37,5,[cursor_handle] + + ret + + ;;---Show_cursor----------------------------------------------------------------------------------------------------------- + + +Show_cursor: + ;;===Hide_cursor=========================================================================================================== + + mcall 37,5,0 + + ret + + ;;---Show_cursor----------------------------------------------------------------------------------------------------------- + + +Set_window_mode: + ;;===Set_window_mode======================================================================================================= + + test al, al + jnz .fullscreen + mov eax, [window_style_windowed] + jmp .quit + + .fullscreen: + mov eax, [window_style_fullscreen] + + .quit: + mov [window_style], eax + ret + +;;---Some_functions------------------------------------------------------------------------------------------------------------ + + +Reverse_snake: + ;;===Reverse_snake========================================================================================================= + + cmp [snake_direction], LEFT + jne @f + mov [snake_direction_next], RIGHT + jmp .quit + @@: + cmp [snake_direction], RIGHT + jne @f + mov [snake_direction_next], LEFT + jmp .quit + @@: + cmp [snake_direction], UP + jne @f + mov [snake_direction_next], DOWN + jmp .quit + @@: + cmp [snake_direction], DOWN + jne @f + mov [snake_direction_next], UP +; jmp .quit + @@: + + .quit: + ret + + ;;---Reverse_snake--------------------------------------------------------------------------------------------------------- + + +;;===Variables================================================================================================================== + +window_title db 'Snake',64+15 dup (0) +window_title_with_lives db '_ live(s)',0 +default_separating_symbol db '|',0 +window_style_windowed dd 0x33000000 ; scalable skinned window +window_style_fullscreen dd 0x00000000 +time_before_waiting dd 0x0 +time_to_wait dd 0x0 +time_wait_limit dd 101 +time_wait_limit_const dd 0x0 + +play_mode dd 0x0 +lives dd START_LIVES +acceleration_mask dd 0x0 + +resized_by_hotkey dd 0x0 +fullscreen dd 0x0 + +szZ string_score ,'SCORE : ' +szZ string_hi_score ,'HI-SCORE : ' +szZ string_champion ,'CHAMPION : ' +szZ string_level ,'LEVEL : ' +szZ string_pause_space ,'PAUSE - ',0x27,'SPACE',0x27 +szZ string_resume_space ,'RESUME - ',0x27,'SPACE',0x27 +szZ string_menu_esc ,'MENU - ',0x27,'ESC',0x27 +szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27 +szZ press_to_start ,'PRESS ',0x27,'ENTER',0x27,' TO START' +szZ press_esc_to_exit ,'PRESS ',0x27,'ESC',0x27,' TO EXIT' +;press_F2_to_options db 'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0 + +szZ string_congratulations ,' Congratulations!!! New hi-score is : ' +szZ string_enter_your_name ,'You are the champion! Enter your name : ' + +szZ string_button_play ,'PLAY' +szZ string_button_exit ,'EXIT' +szZ string_button_inc ,'+INC+' +szZ string_button_dec ,'-dec-' +szZ string_button_pm_classic,'CLASSIC mode' +szZ string_button_pm_levels ,'LEVELS mode' + +is_new_record dd 0 + +action dd 0 + +picture_first_menu_snake db 0xf4,0x99,0x2f,\ + 0x86,0xa5,0x49,\ + 0xf5,0xa5,0x8f,\ + 0x15,0xbd,0x48,\ + 0xf4,0xa5,0x2f + +picture_first_menu_version db 0xf1,0xe0,\ + 0x90,0x20,\ + 0x90,0x20,\ + 0x90,0x20,\ + 0xf4,0x20 + +picture_pause db 11100011b,00100101b,11101111b,\ + 10010100b,10100101b,00001000b,\ + 10010100b,10100101b,00001000b,\ + 11100111b,10100101b,11101111b,\ + 10000100b,10100100b,00101000b,\ + 10000100b,10011001b,11101111b + +picture_game_over db 00110000b,00000000b,00000000b,00000000b,\ + 01001001b,11001000b,10111100b,00000000b,\ + 10000010b,00101101b,10100000b,00000000b,\ + 10011010b,00101010b,10111000b,00000000b,\ + 10001011b,11101000b,10100000b,00000000b,\ + 01110010b,00101000b,10111100b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,00000000b,00000000b,00000000b,\ + 00001000b,10100010b,11110111b,10000000b,\ + 00001000b,10100010b,10000100b,01000000b,\ + 00001000b,10100010b,11100100b,01000000b,\ + 00001000b,10010100b,10000111b,10000000b,\ + 00000111b,00001000b,11110100b,01000000b + +;picture_you_win db 10001001b,11001000b,10000000b,\ +; 10001010b,00101000b,10000000b,\ +; 01010010b,00101000b,10000000b,\ +; 00100010b,00101000b,10000000b,\ +; 00100001b,11000111b,00000000b,\ +; 00000000b,00000000b,00000000b,\ +; 00000000b,00000000b,00000000b,\ +; 01000100b,10010001b,00000000b,\ +; 01010100b,10011001b,00000000b,\ +; 01010100b,10010101b,00000000b,\ +; 01010100b,10010011b,00000000b,\ +; 00101000b,10010001b,00000000b + +picture_you_win db 01000100b,01000011b,10001000b,10000000b,\ + 01000100b,01000100b,01001000b,10000000b,\ + 01000100b,01000100b,00001000b,10000000b,\ + 01111100b,01000100b,11001111b,10000000b,\ + 01000100b,01000100b,01001000b,10000000b,\ + 01000100b,01000011b,10001000b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11110011b,10011100b,11110011b,11000000b,\ + 10000100b,00100010b,10001010b,00000000b,\ + 11110100b,00100010b,10001011b,10000000b,\ + 00010100b,00100010b,11110010b,00000000b,\ + 11110011b,10011100b,10001011b,11000000b + +picture_level db 10000111b,10100101b,11101000b,\ + 10000100b,00100101b,00001000b,\ + 10000111b,00100101b,11001000b,\ + 10000100b,00101001b,00001000b,\ + 11110111b,10110001b,11101111b + +digits_font db 0xf0,0x90,0x90,0x90,0xf0,\ + 0x20,0x60,0x20,0x20,0x20,\ + 0xf0,0x10,0xf0,0x80,0xf0,\ + 0xf0,0x10,0x70,0x10,0xf0,\ + 0x90,0x90,0xf0,0x10,0x10,\ + 0xf0,0x80,0xf0,0x10,0xf0,\ + 0xf0,0x80,0xf0,0x90,0xf0,\ + 0xf0,0x10,0x10,0x10,0x10,\ + 0xf0,0x90,0xf0,0x90,0xf0,\ + 0xf0,0x90,0xf0,0x10,0xf0 + +stage_00: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 3,3, 4,3, 5,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 0 +.name dd stage_00_name + +stage_01: +.field db 11111000b,00000000b,00000001b,11110000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 10000000b,00000000b,00000000b,00010000b,\ + 11111000b,00000000b,00000001b,11110000b + +.snake_dots db 3,3, 4,3, 5,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 36 +.name dd stage_01_name + +stage_02: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00011111b,11000000b,00111111b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00010000b,00000000b,00000000b,10000000b,\ + 00011111b,11000000b,00111111b,10000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 7,5, 8,5, 9,5 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_02_name + +stage_03: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00001111b,11111001b,11111111b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00001111b,11111001b,11111111b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00001001b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 23,0, 22,0, 21,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 48 +.name dd stage_03_name + +stage_04: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00100000b,01000000b,00000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00010000b,00100000b,01000000b,10000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00010010b,00000000b,00000100b,10000000b,\ + 00010010b,00000000b,00000100b,10000000b,\ + 00000010b,00100000b,01000000b,00000000b,\ + 00010000b,00100000b,01000000b,10000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00000010b,00100000b,01000100b,00000000b,\ + 00000000b,00100000b,01000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 19,6, 19,7, 19,8 +.snake_napravlenie dd DOWN +.snake_napravlenie_next dd DOWN +.number_of_stones dd 39 +.name dd stage_04_name + +stage_05: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,11111111b,11111110b,00000000b,\ + 00000111b,11111111b,11111110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111111b,11111111b,11111111b,11000000b,\ + 00111111b,11111111b,11111111b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,0, 0,1, 1,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 112 +.name dd stage_05_name + +stage_06: +.field db 00000001b,10000000b,00000000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000001b,11111111b,11111000b,00000000b,\ + 00000000b,00000000b,00011000b,00000000b,\ + 00000000b,00000000b,00011000b,00000000b,\ + 00011111b,11111111b,11111000b,00000000b,\ + 00011111b,11111111b,11111000b,00000000b,\ + 00011000b,00000000b,00000000b,00000000b,\ + 00011000b,00000000b,00000000b,00000000b,\ + 00011111b,11111111b,11111111b,11100000b,\ + 00011111b,11111111b,11111111b,11100000b,\ + 00000000b,00000000b,00000000b,01100000b,\ + 00000000b,00000000b,00000000b,01100000b,\ + 00000000b,00000000b,00000000b,01100000b + +.snake_dots db 0,0, 0,1, 1,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 128 +.name dd stage_06_name + +stage_07: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00000000b,00000000b,00000100b,00000000b,\ + 00000011b,11111111b,11110100b,00000000b,\ + 00000010b,00000000b,00010100b,00000000b,\ + 00000010b,11111111b,11010100b,00000000b,\ + 00000010b,00000000b,00010100b,00000000b,\ + 00000010b,11111111b,11110100b,00000000b,\ + 00000010b,00000000b,00000100b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 8,1, 9,1, 10,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 83 +.name dd stage_07_name + +stage_08: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00010000b,00000000b,\ + 00001001b,00000001b,00000000b,00000000b,\ + 00000001b,01001001b,00000101b,00000000b,\ + 00000000b,01000000b,00000100b,00000000b,\ + 00001111b,00000000b,11100000b,00000000b,\ + 00000000b,00000000b,00001000b,10000000b,\ + 00000111b,00100000b,10000010b,10000000b,\ + 00010000b,00000000b,00000010b,00000000b,\ + 00010000b,11000000b,01110010b,00000000b,\ + 00010010b,00000000b,00000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,0, 1,0, 2,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_08_name + +stage_09: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111101b,00100110b,01001011b,11000000b,\ + 00100001b,10101001b,01010010b,00000000b,\ + 00111101b,01100001b,01100011b,10000000b,\ + 00000101b,01100111b,01010010b,00000000b,\ + 00111101b,00100001b,01001011b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 12,6, 12,7, 12,8 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 59 +.name dd stage_09_name + +stage_10: +.field db 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 11101110b,11101110b,11101110b,11100000b,\ + 11101110b,11101110b,11101110b,11100000b + +.snake_dots db 3,2, 3,3, 4,3 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 231 +.name dd stage_10_name + +stage_11: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,00000111b,00000111b,00000000b,\ + 00001101b,10001101b,10001101b,10000000b,\ + 00011000b,11011000b,11011000b,11000000b,\ + 00000000b,01000000b,01000000b,01000000b,\ + 00011000b,11011000b,11011000b,11000000b,\ + 00001101b,10001101b,10001101b,10000000b,\ + 00000111b,00000111b,00000111b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 3,12, 4,12, 5,12 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 69 +.name dd stage_11_name + +stage_12: +.field db 00000000b,00011000b,00001110b,00000000b,\ + 01101110b,00010000b,00001010b,01010000b,\ + 01001011b,11011001b,11000000b,01110000b,\ + 01100001b,01000001b,01000000b,00000000b,\ + 00000000b,00000000b,00000011b,10000000b,\ + 00000000b,00000000b,00000010b,10000000b,\ + 01010011b,00001100b,10100110b,00110000b,\ + 01110010b,00001000b,11100100b,00010000b,\ + 00000011b,00001100b,00000110b,00110000b,\ + 00000000b,11100000b,00000000b,00000000b,\ + 00010100b,10100000b,00000110b,00000000b,\ + 11011100b,00000110b,10100100b,00000000b,\ + 01000011b,10000010b,11100110b,10100000b,\ + 11000010b,10000110b,00000000b,11100000b + +.snake_dots db 27,0, 26,0, 25,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 110 +.name dd stage_12_name + +stage_13: +.field db 00111000b,00100000b,00000000b,00000000b,\ + 01111100b,11110011b,11000011b,10000000b,\ + 11111100b,01110011b,10000001b,11000000b,\ + 11110000b,00000011b,11000000b,00000000b,\ + 00000000b,00000010b,00000000b,00000000b,\ + 00000000b,00000010b,00000001b,00000000b,\ + 00011110b,00000111b,00000111b,00000000b,\ + 00000111b,10001111b,11111110b,00000000b,\ + 00000011b,11111111b,11111100b,00000000b,\ + 00110001b,11111111b,11111001b,01100000b,\ + 00001110b,11101011b,00100111b,10000000b,\ + 01111000b,10000011b,10000010b,00000000b,\ + 00000011b,11100110b,00011010b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 0,5, 0,6, 0,7 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 141 +.name dd stage_13_name + +stage_14: +.field db 00000110b,00000000b,00000000b,00000000b,\ + 00001000b,00000000b,00011000b,00000000b,\ + 00010000b,00000000b,00000100b,00000000b,\ + 00100001b,10000000b,11000010b,00000000b,\ + 01000010b,01000001b,00100001b,00000000b,\ + 10000100b,00000010b,00010000b,10000000b,\ + 10001000b,00000100b,00001000b,01000000b,\ + 10010000b,00001000b,00000100b,01000000b,\ + 01001000b,00010000b,00001000b,10000000b,\ + 00100100b,00100000b,00010001b,00000000b,\ + 00010010b,01000001b,00100010b,00000000b,\ + 00001001b,10000000b,11000100b,00000000b,\ + 00000100b,00000000b,00001000b,00000000b,\ + 00000000b,00000000b,00110000b,00000000b + +.snake_dots db 8,0, 9,0, 10,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 60 +.name dd stage_14_name + +stage_15: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,01110000b,00110000b,00000000b,\ + 00000000b,10000000b,00001010b,00000000b,\ + 00100001b,00000000b,00110010b,00000000b,\ + 00010001b,00111111b,10011100b,00000000b,\ + 00001001b,00100000b,11000000b,00000000b,\ + 00010000b,00000010b,01000000b,00000000b,\ + 00100000b,00000010b,00100001b,10000000b,\ + 00010000b,00000010b,00110010b,01000000b,\ + 00001000b,01000100b,00011100b,01000000b,\ + 00010000b,00111000b,00010000b,01000000b,\ + 00100000b,00000000b,00010000b,01000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,3, 13,2, 14,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 60 +.name dd stage_15_name + +stage_16: +.field db 00000000b,10000010b,00000000b,00000000b,\ + 00000000b,01001010b,10000010b,10100000b,\ + 01111111b,11100111b,00000001b,11000000b,\ + 00000000b,01000010b,00000000b,10000000b,\ + 00000100b,10000000b,01000000b,00000001b,\ + 00000100b,00100000b,10000000b,00000010b,\ + 11000100b,00010001b,11111000b,00000111b,\ + 00010101b,00001000b,10000000b,00000010b,\ + 00001110b,00010000b,01000000b,00000001b,\ + 00000100b,00100010b,00000000b,10000000b,\ + 00000000b,00000010b,00000000b,01000000b,\ + 00111111b,11111111b,11111111b,11100000b,\ + 00000000b,00000010b,00000000b,01000000b,\ + 00000000b,00000010b,00000000b,10000000b + +.snake_dots db 11,7, 10,7, 9,7 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 96 +.name dd stage_16_name + +stage_17: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000111b,10000001b,11100000b,00000000b,\ + 00001000b,01000010b,00010000b,00000000b,\ + 00010001b,00100100b,01001000b,00000000b,\ + 00010001b,00000000b,01001000b,00000000b,\ + 00001000b,01000010b,00010000b,00000000b,\ + 00000111b,10000001b,11100000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,01000000b,00000000b,00000000b,\ + 00000000b,00111110b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 11,7, 11,8, 12,8 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 40 +.name dd stage_17_name + +stage_18: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01000100b,01000100b,01000100b,01000000b,\ + 00101010b,10101010b,10101010b,10100000b,\ + 00010001b,00010001b,00010001b,00000000b + +.snake_dots db 2,5, 3,5, 4,5 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 78 +.name dd stage_18_name + +stage_19: +.field db 01000010b,00100100b,10000101b,00000000b,\ + 00010000b,00010000b,00100000b,10000000b,\ + 00111001b,00000010b,00010000b,00100000b,\ + 01000100b,00001000b,00000010b,00000000b,\ + 01010101b,01000000b,01000000b,01000000b,\ + 01010100b,00010000b,00001000b,11100000b,\ + 00000100b,10001001b,00100001b,00000000b,\ + 01111100b,00100000b,00000001b,01010000b,\ + 00111001b,00000100b,00010001b,01010000b,\ + 00010000b,00000000b,10000001b,00010000b,\ + 11010111b,11100000b,00011101b,11110000b,\ + 00010000b,01000000b,00100000b,11100000b,\ + 00010000b,10000000b,00100000b,01000000b,\ + 00000001b,00000000b,00010000b,01000000b + +.snake_dots db 27,6, 0,6, 1,6 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 95 +.name dd stage_19_name + +stage_20: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,10001000b,00000000b,\ + 00000000b,00011100b,10000100b,00000000b,\ + 00000000b,01100100b,10000010b,00000000b,\ + 00000011b,10000100b,10000100b,00000000b,\ + 00000010b,00000100b,10001000b,00000000b,\ + 00000010b,00000100b,10000100b,00000000b,\ + 00000010b,00000100b,10000010b,00000000b,\ + 00000010b,00111100b,10010010b,00000000b,\ + 00011110b,00111100b,10010100b,00000000b,\ + 00011110b,00111100b,10001000b,00000000b,\ + 00011110b,00000000b,10000000b,00000000b,\ + 00000000b,00000000b,10000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 17,2, 17,3, 17,4 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 65 +.name dd stage_20_name + +stage_21: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,11111111b,11111110b,00000000b,\ + 00000001b,01000100b,01000100b,00000000b,\ + 00000010b,01000100b,01000100b,00000000b,\ + 00001100b,01000100b,01000100b,00000000b,\ + 01110000b,01000100b,01000100b,00000000b,\ + 01110000b,01000100b,01000100b,00000000b,\ + 01110000b,11101110b,11101110b,00000000b,\ + 00000000b,11101110b,11101110b,00000000b,\ + 00000000b,11101110b,11101110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 10,1, 11,1, 12,1 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 86 +.name dd stage_21_name + +stage_22: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,10000000b,00000000b,00000000b,\ + 00000111b,11100000b,00000000b,00000000b,\ + 00001111b,11110000b,00000000b,00000000b,\ + 00011111b,11100000b,00000000b,00000000b,\ + 00011111b,11000011b,00001100b,00110000b,\ + 00011111b,10000111b,10011110b,01110000b,\ + 00011111b,11000111b,10011110b,01110000b,\ + 00011111b,11100011b,00001100b,00110000b,\ + 00001111b,11110000b,00000000b,00000000b,\ + 00000111b,11100000b,00000000b,00000000b,\ + 00000011b,10000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,7, 1,6, 1,5 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 104 +.name dd stage_22_name + +stage_23: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00100000b,01000101b,00010000b,00100000b,\ + 00011010b,00100101b,00100010b,11000000b,\ + 00000100b,10101000b,10101001b,00000000b,\ + 00000100b,10010010b,01001001b,00000000b,\ + 00001011b,00110000b,01100110b,10000000b,\ + 00000000b,11001010b,10011000b,00000000b,\ + 00000001b,00000111b,00000100b,00000000b,\ + 00001110b,01001010b,10010011b,10000000b,\ + 00000010b,00110000b,01100010b,00000000b,\ + 00000101b,00010010b,01000101b,00000000b,\ + 00001001b,00001000b,10000100b,10000000b,\ + 00000000b,00001000b,10000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 15,0, 14,0, 13,0 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 85 +.name dd stage_23_name + +stage_24: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00111111b,11111111b,11111111b,10000000b,\ + 00100000b,00000000b,00000000b,10000000b,\ + 00100011b,11111111b,11111000b,10000000b,\ + 00100010b,00000000b,00001000b,10000000b,\ + 00100010b,00111111b,10001000b,10000000b,\ + 00100010b,00100000b,10001000b,10000000b,\ + 00101010b,10101010b,10101010b,10000000b,\ + 00001000b,10001110b,00100010b,00000000b,\ + 00001000b,10000000b,00100010b,00000000b,\ + 00001000b,11111111b,11100010b,00000000b,\ + 00001000b,00000000b,00000010b,00000000b,\ + 00001111b,11111111b,11111110b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,0, 0,0, 0,1 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 120 +.name dd stage_24_name + +stage_25: +.field db 00000100b,11000000b,00000000b,00000000b,\ + 00000011b,10000000b,00110010b,00000000b,\ + 10011010b,10000000b,00011100b,00000000b,\ + 01110000b,00000000b,00010101b,10010000b,\ + 01010000b,00000111b,00000000b,11100000b,\ + 00000100b,00000101b,00000000b,10100000b,\ + 00000100b,00000100b,00000000b,00000000b,\ + 00000011b,11111100b,00011001b,00000000b,\ + 00000010b,10010100b,00001110b,00000000b,\ + 00000010b,10010100b,00001010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000011b,00100001b,10010011b,00100000b,\ + 00000001b,11000000b,11100001b,11000000b,\ + 00000001b,01000000b,10100001b,01000000b + +.snake_dots db 11,2, 12,2, 13,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 88 +.name dd stage_25_name + +stage_26: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00111100b,01001111b,01111010b,01000000b,\ + 00100000b,01000001b,00001010b,01000000b,\ + 00100100b,01001111b,01111011b,11000000b,\ + 00000100b,01001000b,00001000b,01000000b,\ + 00111100b,01001111b,01111000b,01000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00111101b,11101111b,01111011b,11000000b,\ + 00100001b,00000001b,00000000b,00000000b,\ + 00111101b,11100001b,01111011b,11000000b,\ + 00000100b,00000001b,00000000b,01000000b,\ + 00111101b,11100001b,01111011b,11000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 1,5, 0,5, 0,6 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 115 +.name dd stage_26_name + +stage_27: +.field db 00000000b,10000000b,00000000b,01000000b,\ + 00000000b,10000000b,01000000b,11100000b,\ + 00100011b,11100000b,01000000b,01000000b,\ + 01110000b,10000001b,11110000b,00000000b,\ + 00100000b,10000000b,01000000b,00000000b,\ + 00000000b,00000000b,01000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000010b,00000000b,00000000b,00000000b,\ + 00000111b,00000000b,00000000b,10000000b,\ + 00000010b,00001000b,00000001b,11000000b,\ + 00000000b,00000000b,10000000b,10000000b,\ + 00000000b,01000001b,11000000b,00000000b,\ + 01000000b,11100000b,10000000b,00000000b,\ + 00000000b,01000000b,00000000b,00000000b + +.snake_dots db 12,8, 12,7, 12,6 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 51 +.name dd stage_27_name + +stage_28: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000100b,00000000b,00000010b,00000000b,\ + 00010100b,00000000b,00000010b,10000000b,\ + 01010100b,00000000b,00000010b,10100000b,\ + 01010101b,11111111b,11111010b,10100000b,\ + 01010100b,00000000b,00000010b,10100000b,\ + 00010100b,00000000b,00000010b,10000000b,\ + 00000100b,00000000b,00000010b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,8, 12,8, 11,8 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 44 +.name dd stage_28_name + +stage_29: +.field db 00000000b,01110000b,00000000b,00000000b,\ + 00000100b,01000110b,00000001b,10000000b,\ + 01001110b,00001100b,01100000b,11000000b,\ + 01000000b,00000000b,01100000b,00000000b,\ + 01100000b,01111000b,00000001b,10010000b,\ + 00000000b,00000010b,10000101b,10110000b,\ + 00110000b,00110010b,10001100b,00100000b,\ + 00011011b,00110110b,10000100b,00000000b,\ + 00000001b,00000000b,10010000b,10000000b,\ + 00100001b,00000000b,00111000b,10000000b,\ + 00111001b,00110011b,00000011b,10000000b,\ + 01111111b,11111111b,00011011b,11010000b,\ + 11111111b,11111111b,00011111b,11110000b,\ + 11111111b,11111111b,00111111b,11110000b + +.snake_dots db 0,0, 1,0, 2,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 151 +.name dd stage_29_name + +stage_30: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000001b,01011100b,00000000b,\ + 00000000b,00000001b,11001000b,00000000b,\ + 00000100b,00000001b,01001000b,00000000b,\ + 00000100b,00000100b,00000000b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 01111111b,11000100b,11111111b,11100000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00011111b,00111111b,10001110b,00000000b,\ + 00000100b,00000100b,00000100b,00000000b,\ + 00011111b,00011111b,00011111b,00000000b,\ + 11111111b,11111111b,11111111b,11110000b + +.snake_dots db 8,2, 9,2, 10,2 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 109 +.name dd stage_30_name + +stage_31: +.field db 00000101b,00010000b,00000100b,01000000b,\ + 01000100b,01010101b,00010100b,01000000b,\ + 01000101b,01010101b,01000101b,00010000b,\ + 01010000b,00010100b,01000000b,01010000b,\ + 00010101b,01000101b,01010100b,01000000b,\ + 01000001b,00010000b,01010101b,01000000b,\ + 01010101b,00010100b,00000101b,00010000b,\ + 00000101b,01010000b,01000101b,01010000b,\ + 01010000b,01000100b,00000000b,01010000b,\ + 00010101b,00000101b,00010100b,00010000b,\ + 01010001b,00010001b,01000001b,01000000b,\ + 01000100b,00000101b,01010100b,01010000b,\ + 00010001b,01010100b,00010001b,00010000b,\ + 00000100b,01000001b,00010001b,00000000b + +.snake_dots db 18,8, 17,8, 16,8 +.snake_direction dd LEFT +.snake_direction_next dd LEFT +.number_of_stones dd 112 +.name dd stage_31_name + +stage_32: +.field db 11111111b,11111111b,11111111b,11110000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010000b,01000001b,00000100b,00010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 10000010b,00001000b,00100000b,10010000b,\ + 10010010b,01001001b,00100100b,10010000b,\ + 11111111b,11111111b,11111111b,11110000b + +.snake_dots db 1,1, 1,2, 1,3 +.snake_direction dd DOWN +.snake_direction_next dd DOWN +.number_of_stones dd 168 +.name dd stage_32_name + +stage_33: +.field db 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 01111111b,11001111b,11111111b,11100000b,\ + 01000100b,01001000b,01000000b,00100000b,\ + 01000100b,01001000b,01000001b,10100000b,\ + 01000100b,01001000b,01001101b,10100000b,\ + 00000000b,00000000b,00000110b,00000000b,\ + 01000100b,01001000b,01000010b,00100000b,\ + 01000100b,01001000b,01001111b,00100000b,\ + 01000100b,01001000b,01001111b,00100000b,\ + 01000100b,01001000b,01000110b,00100000b,\ + 01111111b,11001111b,11111111b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 6,6, 7,6, 8,6 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 109 +.name dd stage_33_name + +stage_34: +.field db 01110000b,00000000b,00000011b,10000000b,\ + 00010010b,00010000b,01111100b,00000000b,\ + 00011110b,00010000b,00100100b,00000000b,\ + 00000100b,00011001b,00100111b,00000000b,\ + 00001111b,10001001b,00100000b,00110000b,\ + 00000001b,00001011b,00101000b,00100000b,\ + 00000001b,00011110b,01111000b,00100000b,\ + 00111000b,00000010b,00001100b,10100000b,\ + 00001110b,00100010b,00000000b,10100000b,\ + 01100011b,11111110b,01000011b,11100000b,\ + 00111110b,00100010b,01000000b,10000000b,\ + 00000000b,01100011b,11000010b,10000000b,\ + 00000000b,01000000b,01100111b,10000000b,\ + 00000000b,00000000b,00000010b,00000000b + +.snake_dots db 7,0, 8,0, 9,0 +.snake_direction dd RIGHT +.snake_direction_next dd RIGHT +.number_of_stones dd 113 +.name dd stage_34_name + +stage_35: +.field db 00000100b,00000000b,00001010b,00000000b,\ + 00010100b,01000000b,00101010b,00000000b,\ + 00010100b,10000010b,00010010b,10000000b,\ + 00010001b,00000000b,00010010b,10000000b,\ + 00010001b,00000010b,00001010b,10000000b,\ + 01010010b,00000010b,00001000b,10100000b,\ + 01000100b,00000000b,00001000b,10100000b,\ + 01000100b,00000010b,00000100b,10100000b,\ + 01001000b,00000010b,00000100b,00100000b,\ + 01001000b,00000000b,00000010b,00100000b,\ + 00010000b,00000010b,00000010b,00100000b,\ + 00110000b,00000010b,00000010b,00100000b,\ + 00100000b,00000010b,00000001b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b + +.snake_dots db 13,11, 13,10, 13,9 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 66 +.name dd stage_35_name + +stage_36: +.field db 10101110b,10001110b,00110100b,11100000b,\ + 11101000b,10001110b,00101010b,10000000b,\ + 10101110b,11101000b,00101010b,11100000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00000000b,10110010b,01000100b,00000000b,\ + 00000001b,10100101b,01010100b,00000000b,\ + 00000001b,10100101b,00101000b,00000000b,\ + 00000000b,00000000b,00000000b,00000000b,\ + 00010001b,11010101b,11010001b,11000000b,\ + 00010001b,11010101b,11010001b,00000000b,\ + 00010001b,00010101b,00010000b,10000000b,\ + 00011101b,11001001b,11011100b,01000000b,\ + 00000000b,00000000b,00000001b,11010000b + +.snake_dots db 27,11, 27,10, 27,9 +.snake_direction dd UP +.snake_direction_next dd UP +.number_of_stones dd 112 +.name dd stage_36_name + + +stage_00_name db 'Classic mode',0 +stage_01_name db 'Begin',0 +stage_02_name db 'Frame',0 +stage_03_name db 'Sight',0 +stage_04_name db 'Dashed',0 +stage_05_name db 'Beams',0 +stage_06_name db 'Pipe',0 +stage_07_name db 'Labyrinth',0 +stage_08_name db 'Sea battle',0 +stage_09_name db 'Recursion',0 +stage_10_name db 'Narrow corridors',0 +stage_11_name db 'CCC',0 +stage_12_name db 'Deadlocks',0 +stage_13_name db 'Boat',0 +stage_14_name db 'Pattern',0 +stage_15_name db 'Guernica',0 +stage_16_name db 'Goto',0 +stage_17_name db 'Smiling face',0 +stage_18_name db 'Waves',0 +stage_19_name db 'First snow',0 +stage_20_name db 'Music and silence',0 +stage_21_name db 'Experiment',0 +stage_22_name db 'Pacman',0 +stage_23_name db 'Intricate pattern',0 +stage_24_name db 'Square arcs',0 +stage_25_name db 'In the animal world',0 +stage_26_name db 'Digits',0 +stage_27_name db 'Pluses',0 +stage_28_name db 'Rod',0 +stage_29_name db 'Tetris',0 +stage_30_name db 'Towers of Hanoi',0 +stage_31_name db 'Ruins',0 +stage_32_name db 'Walls of Akendora',0 +stage_33_name db 'Geranium in the window',0 +stage_34_name db 'Algae',0 +stage_35_name db 'The road ahead',0 +stage_36_name db 'Help me draw levels!',0 + + +background_color dd 0x000000 +decorations_color dd 0x00000000 +snake_color dd 0x000000 +snake_head_color dd 0x000000 +lives_in_head_number_color dd 0x000000 +snake_picture_color dd 0x000000 +version_picture_color dd 0x000000 +pause_picture_color dd 0x000000 +game_over_picture_color dd 0x000000 +you_win_picture_color dd 0x000000 +eat_color dd 0x000000 +navigation_strings_color dd 0x80000000 +game_over_strings_color dd 0x80000000 +score_string_color dd 0x80000000 +hiscore_string_color dd 0x80000000 +champion_string_color dd 0x80000000 +game_over_hiscore_color dd 0x80000000 +score_number_color dd 0x40000000 +hiscore_number_color dd 0x00000000 +champion_name_color dd 0x80000000 +button_color dd 0x000000 +button_text_color dd 0x80000000 +stone_color dd 0x000000 +splash_background_color dd 0x000000 +splash_level_string_color dd 0x000000 +splash_level_number_color dd 0x000000 +level_string_color dd 0x80000000 +level_number_color dd 0x00000000 + + +align 4 +@IMPORT: + +library \ + libini , 'libini.obj' ,\ + box_lib , 'box_lib.obj' + +import libini,\ + ini.get_str , 'ini_get_str' ,\ + ini.get_int , 'ini_get_int' ,\ + ini.set_str , 'ini_set_str' ,\ + ini.set_int , 'ini_set_int' ,\ + ini.get_color , 'ini_get_color' ,\ + ini.get_shortcut, 'ini_get_shortcut' + +import box_lib,\ + edit_box.draw , 'edit_box' ,\ + edit_box.key , 'edit_box_key' ,\ + edit_box.mouse , 'edit_box_mouse' + +bFirstDraw db 0 + +aPreferences db 'Preferences',0 +aSpeed db 'Speed',0 +aTheme db 'Theme',0 +aSmart_reverse db 'Smart_reverse',0 +aShow_lives_style db 'Show_lives_style',0 +aDraw_level_name_in_window_title db 'Draw_level_name_in_window_title',0 +aSeparating_symbol db 'Separating_symbol',0 + +aShortcuts db 'Shortcuts',0 +aMove_left db 'Move_left',0 +aMove_down db 'Move_down',0 +aMove_up db 'Move_up',0 +aMove_right db 'Move_right',0 +aReverse db 'Reverse',0 +aIncrease db 'Increase',0 +aDecrease db 'Decrease',0 + +aTheme_name db 32 dup (0) +aDecorations db 'Decorations',0 +aBackground_color db 'Background_color',0 +aDecorations_color db 'Decorations_color',0 +aSnake_color db 'Snake_color',0 +aSnake_head_color db 'Snake_head_color',0 +aLives_in_head_number_color db 'Lives_in_head_number_color',0 +aSnake_picture_color db 'Snake_picture_color',0 +aVersion_picture_color db 'Version_picture_color',0 +aPause_picture_color db 'Pause_picture_color',0 +aGame_over_picture_color db 'Game_over_picture_color',0 +aYou_win_picture_color db 'You_win_picture_color',0 +aEat_color db 'Eat_color',0 +aNavigation_strings_color db 'Navigation_string_color',0 +aGame_over_strings_color db 'Game_over_string_color',0 +aScore_string_color db 'Score_string_color',0 +aHiscore_string_color db 'Hiscore_string_color',0 +aChampion_string_color db 'Champion_string_color',0 +aGame_over_hiscore_color db 'Game_over_hiscore_color',0 +aScore_number_color db 'Score_number_color',0 +aHiscore_number_color db 'Hiscore_number_color',0 +aChampion_name_color db 'Champion_name_color',0 +aEdit_box_selection_color db 'Edit_box_selection_color',0 +aButton_color db 'Button_color',0 +aButton_text_color db 'Button_text_color',0 +aStone_color db 'Stone_color',0 +aSplash_background_color db 'Splash_background_color',0 +aSplash_level_string_color db 'Splash_level_string_color',0 +aSplash_level_number_color db 'Splash_level_number_color',0 +aLevel_string_color db 'Level_string_color',0 +aLevel_number_color db 'Level_number_color',0 + +aReserved db 'Reserved',0 +aSquare_side_length db 'Square_side_length',0 +aHiscore_classic db 'Hiscore_classic',0 +aChampion_name_classic db 'Champion_name_classic',0 +aHiscore_levels db 'Hiscore_levels',0 +aChampion_name_levels db 'Champion_name_levels',0 + +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 + +hed db '',0 +;;---Variables------------------------------------------------------------------------------------------------------------- +i_end: +hed_end: +rb 256 +mouse_dd rd 1 + +window_style rd 1 + +cur_level rd 1 +cur_level_number rd 1 +hi_level rd 1 + +score rd 1 +hi_score_classic rd 1 +hi_score_levels rd 1 + +champion_name_classic rb CHAMPION_NAME_LENGTH +champion_name_levels rb CHAMPION_NAME_LENGTH + +snake_dots rb GRID_WIDTH*GRID_HEIGHT*2+3 ; +3 bytes for faster dword copying +snake_direction rd 1 +snake_direction_next rd 1 +snake_length_x2 rd 1 + +decorations rd 1 +number_of_free_dots rd 1 + +eat rw 1 + +g_s rd 1 +g_e rd 1 + +window_width rd 1 +window_height rd 1 +wp_x rd 1 +wp_y rd 1 + +gw_mul_gs rd 1 +gh_mul_gs rd 1 +gbxm1_plus_gw_mul_gs rd 1 +gbym1_plus_gh_mul_gs rd 1 +gs_shl16_gs rd 1 +gbxm1_shl16_gbxm1 rd 1 +gbym1_shl16_gbym1 rd 1 + +bottom_top_strings rd 1 +bottom_middle_strings rd 1 +bottom_bottom_strings rd 1 +top_strings rd 1 + +button_x_left rd 1 +button_x_right rd 1 +button_y_top rd 1 +button_y_middle rd 1 +button_y_bottom rd 1 +button_width_short rd 1 +button_width_long rd 1 +button_height rd 1 + +cursor_data rb 32*32*4 +cursor_handle rd 1 + +cur_dir_path rb 4096 +@PARAMS rb 4096 + +field_map rb GRID_WIDTH*GRID_HEIGHT*2 + +proc_info process_information + +smart_reverse rd 1 +show_lives_style rd 1 +draw_level_name_in_window_title rd 1 +separating_symbol rd 1 + +shortcut_move_left rb 1 +shortcut_move_down rb 1 +shortcut_move_up rb 1 +shortcut_move_right rb 1 +shortcut_reverse rb 1 +shortcut_increase rb 1 +shortcut_decrease rb 1 + +square_side_length rd 1 + +gbxm1 rd 1 +gbym1 rd 1 +speed_up_counter rw 1 + +rb 4096 +stacktop: +d_end: