forked from KolibriOS/kolibrios
1696 lines
63 KiB
NASM
1696 lines
63 KiB
NASM
;;===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 '../../../system/launch/trunk/mem.inc'
|
|
include '../../../develop/libraries/libs-dev/.test/dll.inc'
|
|
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
|
|
;include '../../../system/board/trunk/debug.inc'
|
|
|
|
;;===Define_chapter============================================================================================================
|
|
|
|
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 GRID_WIDTH*GRID_HEIGHT dup (?)
|
|
snake_dots db 6 dup (?)
|
|
snake_direction dd ?
|
|
snake_direction_next dd ?
|
|
number_of_stones 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 12
|
|
PAUSE_BETWEEN_LEVELS equ 250
|
|
PAUSE_WHILE_DRAWING_SPLASH equ 4
|
|
|
|
CHAMPION_NAME_LENGTH equ 15
|
|
LAST_LEVEL_NUMBER equ 12
|
|
|
|
;;---Define_chapter------------------------------------------------------------------------------------------------------------
|
|
|
|
start:
|
|
|
|
stdcall dll.Load,@IMPORT
|
|
or eax, eax
|
|
jnz Exit
|
|
|
|
align 4
|
|
|
|
mov eax, cur_dir_path
|
|
@@:
|
|
cmp byte[eax], 0
|
|
jz @f
|
|
inc eax
|
|
jmp @b
|
|
@@:
|
|
mov dword[eax], '.ini'
|
|
|
|
invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
|
|
neg eax
|
|
add [time_wait_limit], eax
|
|
invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
|
|
|
|
invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 2
|
|
mov [decorations], eax
|
|
invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
|
|
or [background_color], eax
|
|
or [window_style], eax
|
|
invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0xAAAA00
|
|
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, 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
|
|
|
|
call Set_geometry
|
|
|
|
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==========================================================================================================
|
|
|
|
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 eax, [g_s]
|
|
add eax, [g_e]
|
|
mov [gbxm1], eax
|
|
|
|
mov eax, [g_e]
|
|
add eax, 25
|
|
mov [gbym1], 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, [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
|
|
|
|
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, [gw_mul_gs]
|
|
add eax, [gbxm1]
|
|
add eax, [gbxm1]
|
|
add eax, 5*2 ; skin width
|
|
mov [window_width], eax
|
|
|
|
mcall 48,4 ; get skin header height
|
|
add eax, [gh_mul_gs]
|
|
add eax, [gbym1]
|
|
add eax, [g_e]
|
|
add eax, 30
|
|
add eax, 5 ; skin height (bottom part)
|
|
mov [window_height], eax
|
|
|
|
mcall 48, 5
|
|
mov dx, ax
|
|
shr eax, 16
|
|
sub dx, ax
|
|
cmp dx, word[window_width] ; does window fit to work area width?
|
|
jnl @f
|
|
dec [square_side_length]
|
|
jmp Set_geometry
|
|
@@:
|
|
|
|
mov cx, bx
|
|
shr ebx, 16
|
|
sub cx, bx
|
|
cmp cx, word[window_height] ; does window fit to work area height?
|
|
jnl @f
|
|
dec [square_side_length]
|
|
jmp Set_geometry
|
|
@@:
|
|
|
|
sub dx, word[window_width]
|
|
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
|
|
|
|
|
|
ret
|
|
|
|
;;---Set_geometry------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
Increase_geometry:
|
|
;;===Increase_geometry=================================================================================================
|
|
|
|
inc [square_side_length]
|
|
call Set_geometry
|
|
mcall 67,[wp_x],[wp_y],[window_width],[window_height]
|
|
|
|
ret
|
|
|
|
;;---Increase_geometry-------------------------------------------------------------------------------------------------
|
|
|
|
|
|
Decrease_geometry:
|
|
;;===Decrease_geometry=================================================================================================
|
|
|
|
cmp [square_side_length], MIN_SQUARE_SIDE_LENGTH
|
|
je @f
|
|
dec [square_side_length]
|
|
call Set_geometry
|
|
mcall 67,[wp_x],[wp_y],[window_width],[window_height]
|
|
|
|
@@:
|
|
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
|
|
|
|
.loop:
|
|
cmp byte[esi], 0
|
|
jz @f
|
|
push eax ebx ecx esi
|
|
call Draw_square
|
|
pop esi ecx ebx eax
|
|
|
|
@@:
|
|
inc esi
|
|
inc bl
|
|
cmp bl, al
|
|
jne .loop
|
|
|
|
inc bh
|
|
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
|
|
;;
|
|
|
|
push eax ebx edx
|
|
|
|
and eax, 0x0000ffff
|
|
xor bx, bx
|
|
mov bl, al
|
|
shr ax, 8
|
|
mov dx, GRID_WIDTH
|
|
mul dx
|
|
add ax, bx
|
|
mov edx, field_map
|
|
add edx, eax
|
|
mov [edx], cl
|
|
|
|
pop edx ebx eax
|
|
|
|
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, 410
|
|
dec al
|
|
jmp @b
|
|
@@:
|
|
|
|
mov [cur_level], edx
|
|
|
|
mov esi, edx
|
|
add esi, LEVEL.field
|
|
mov edi, field_map
|
|
mov ecx, GRID_WIDTH*GRID_HEIGHT/4
|
|
rep movsd
|
|
|
|
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-----------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
;;---Some_functions-------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
;;===Variables==================================================================================================================
|
|
|
|
window_title db 'Snake',0
|
|
window_style dd 0x34000000
|
|
time_before_waiting dd 0x0
|
|
time_to_wait dd 0x0
|
|
time_wait_limit dd 101
|
|
|
|
play_mode dd 0x0
|
|
|
|
square_side_length dd 19
|
|
|
|
gbxm1 dd 30
|
|
gbym1 dd 30
|
|
|
|
szZ string_score ,'SCORE : '
|
|
szZ string_hi_score ,'HI-SCORE : '
|
|
;szZ string_player ,'PLAYER :'
|
|
szZ string_champion ,'CHAMPION : '
|
|
szZ string_level ,'LEVEL : '
|
|
;szZ string_hi_level ,'HI-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 1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,\
|
|
1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,\
|
|
1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,\
|
|
0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,\
|
|
1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1
|
|
|
|
|
|
picture_first_menu_version db 1,1,1,1,0,0,0,1,1,1,1,\
|
|
1,0,0,1,0,0,0,1,0,0,0,\
|
|
1,0,0,1,0,0,0,1,1,1,1,\
|
|
1,0,0,1,0,0,0,0,0,0,1,\
|
|
1,1,1,1,0,1,0,1,1,1,1
|
|
|
|
picture_pause db 1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,\
|
|
1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,\
|
|
1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,\
|
|
1,1,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,\
|
|
1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,\
|
|
1,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1
|
|
|
|
picture_game_over db 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,\
|
|
1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,\
|
|
1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,\
|
|
1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,\
|
|
0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,0,\
|
|
0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,\
|
|
0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,0,0,0,1,\
|
|
0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,1,1,1,0,\
|
|
0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,0,1
|
|
|
|
picture_you_win db 1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,\
|
|
1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,\
|
|
0,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,1,\
|
|
0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,\
|
|
0,0,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,\
|
|
0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,0,\
|
|
0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,0,\
|
|
0,1,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,\
|
|
0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0
|
|
|
|
picture_level db 1,0,0,0,0,1,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,\
|
|
1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,\
|
|
1,0,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,1,0,0,1,0,0,0,\
|
|
1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,\
|
|
1,1,1,1,0,1,1,1,1,0,1,1,0,0,0,1,1,1,1,0,1,1,1,1
|
|
|
|
digits_font db 1,1,1,1,\
|
|
1,0,0,1,\
|
|
1,0,0,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
\
|
|
0,0,1,0,\
|
|
0,1,1,0,\
|
|
0,0,1,0,\
|
|
0,0,1,0,\
|
|
0,0,1,0,\
|
|
\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
1,1,1,1,\
|
|
1,0,0,0,\
|
|
1,1,1,1,\
|
|
\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
0,1,1,1,\
|
|
0,0,0,1,\
|
|
1,1,1,1,\
|
|
\
|
|
1,0,0,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
0,0,0,1,\
|
|
\
|
|
1,1,1,1,\
|
|
1,0,0,0,\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
1,1,1,1,\
|
|
\
|
|
1,1,1,1,\
|
|
1,0,0,0,\
|
|
1,1,1,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
0,0,0,1,\
|
|
0,0,0,1,\
|
|
0,0,0,1,\
|
|
\
|
|
1,1,1,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
\
|
|
1,1,1,1,\
|
|
1,0,0,1,\
|
|
1,1,1,1,\
|
|
0,0,0,1,\
|
|
1,1,1,1
|
|
|
|
stage_00:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 3,3, 4,3, 5,3
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 0
|
|
|
|
stage_01:
|
|
.field db 2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,\
|
|
2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2
|
|
|
|
.snake_dots db 3,3, 4,3, 5,3
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 36
|
|
|
|
stage_02:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 7,5, 8,5, 9,5
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 40
|
|
|
|
stage_03:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,2,2,2,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 23,0, 22,0, 21,0
|
|
.snake_direction dd LEFT
|
|
.snake_direction_next dd LEFT
|
|
.number_of_stones dd 44
|
|
|
|
stage_04:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,\
|
|
0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 19,6, 19,7, 19,8
|
|
.snake_napravlenie dd DOWN
|
|
.snake_napravlenie_next dd DOWN
|
|
.number_of_stones dd 40
|
|
|
|
stage_05:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,\
|
|
0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,\
|
|
0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 0,0, 0,1, 1,1
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 112
|
|
|
|
stage_06:
|
|
.field db 0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,\
|
|
0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0
|
|
|
|
.snake_dots db 0,0, 0,1, 1,1
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 128
|
|
|
|
stage_07:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,0,2,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 8,1, 9,1, 10,1
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 83
|
|
|
|
stage_08:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,2,0,2,0,0,2,0,0,2,0,0,0,0,0,2,0,2,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,\
|
|
0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,\
|
|
0,0,0,0,0,2,2,2,0,0,2,0,0,0,0,0,2,0,0,0,0,0,2,0,2,0,0,0,\
|
|
0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,\
|
|
0,0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,0,2,2,2,0,0,2,0,0,0,0,0,\
|
|
0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 0,0, 1,0, 2,0
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 40
|
|
|
|
stage_09:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,0,\
|
|
0,0,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,0,\
|
|
0,0,1,1,1,1,0,1,0,1,1,0,0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,0,\
|
|
0,0,0,0,0,1,0,1,0,1,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,0,0,0,\
|
|
0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 12,6, 12,7, 12,8
|
|
.snake_direction dd DOWN
|
|
.snake_direction_next dd DOWN
|
|
.number_of_stones dd 59
|
|
|
|
stage_10:
|
|
.field db 2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,\
|
|
2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,0
|
|
|
|
.snake_dots db 3,2, 3,3, 4,3
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 231
|
|
|
|
stage_11:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,\
|
|
0,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,\
|
|
0,0,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,0,\
|
|
0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,\
|
|
0,0,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,0,\
|
|
0,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,2,2,0,2,2,0,0,0,\
|
|
0,0,0,0,0,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,0,2,2,2,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
|
.snake_dots db 3,12, 4,12, 5,12
|
|
.snake_direction dd RIGHT
|
|
.snake_direction_next dd RIGHT
|
|
.number_of_stones dd 69
|
|
|
|
stage_12:
|
|
.field db 0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,\
|
|
0,2,2,0,2,2,2,0,0,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,2,0,2,\
|
|
0,2,0,0,2,0,2,2,2,2,0,2,2,0,0,2,2,2,0,0,0,0,0,0,0,2,2,2,\
|
|
0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,\
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,\
|
|
0,2,0,2,0,0,2,2,0,0,0,0,2,2,0,0,2,0,2,0,0,2,2,0,0,0,2,2,\
|
|
0,2,2,2,0,0,2,0,0,0,0,0,2,0,0,0,2,2,2,0,0,2,0,0,0,0,0,2,\
|
|
0,0,0,0,0,0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,0,2,2,0,0,0,2,2,\
|
|
0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
|
0,0,0,2,0,2,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,\
|
|
2,2,0,2,2,2,0,0,0,0,0,0,0,2,2,0,2,0,2,0,0,2,0,0,0,0,0,0,\
|
|
0,2,0,0,0,0,2,2,2,0,0,0,0,0,2,0,2,2,2,0,0,2,2,0,2,0,2,0,\
|
|
2,2,0,0,0,0,2,0,2,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,2,2,2,0
|
|
|
|
.snake_dots db 27,0, 26,0, 25,0
|
|
.snake_direction dd LEFT
|
|
.snake_direction_next dd LEFT
|
|
.number_of_stones dd 110
|
|
|
|
background_color dd 0x000000
|
|
decorations_color dd 0x00000000
|
|
snake_color dd 0x000000
|
|
snake_head_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'
|
|
|
|
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
|
|
|
|
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
|
|
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
|
|
|
|
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
|
|
|
|
rb 4096
|
|
stacktop:
|
|
d_end: |