Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1522 → Rev 1521

/programs/games/snake/trunk/snake.asm
16,6 → 16,20
 
;;===Define_chapter============================================================================================================
 
WINDOW_WIDTH equ 550
WINDOW_HEIGHT equ 320
GRID_STEP equ 20
GRID_BEGIN_X equ 31
GRID_BEGIN_Y equ 31
GRID_WIDTH equ 24
GRID_HEIGHT equ 11
GRID_ENDS_WIDTH equ 13
 
BOTTOM_TOP_STRINGS equ 270
BOTTOM_MIDDLE_STRINGS equ 276
BOTTOM_BOTTOM_STRINGS equ 282
TOP_STRINGS equ 5
 
SCORE_EAT equ 100
 
LEFT equ 0
45,52 → 59,47
invoke ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
neg eax
add [time_wait_limit], eax
invoke ini.get_int, cur_dir_path, aPreferences, aSquare_side_length, 19
mov [square_side_length], eax
invoke ini.get_int, cur_dir_path, aPreferences, aSpace_between_squares, 1
mov [space_between_squares], eax
invoke ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
invoke ini.get_int, cur_dir_path, aPreferences, aDecorations, 2
mov [decorations], al
 
invoke ini.get_int, cur_dir_path, aTheme_name, aDecorations, 2
mov [decorations], al
invoke ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
invoke ini.get_color, cur_dir_path, aColors, aBackground_color, 0x000000
or [background_color], eax
or [window_style], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x00aaaa00
invoke ini.get_color, cur_dir_path, aColors, aDecorations_color, 0x00aaaa00
or [decorations_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff
invoke ini.get_color, cur_dir_path, aColors, aSnake_color, 0x1111ff
or [snake_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x1111ff
invoke ini.get_color, cur_dir_path, aColors, aSnake_head_color, 0x1111ff
or [snake_head_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff
invoke ini.get_color, cur_dir_path, aColors, aSnake_picture_color, 0x4488ff
or [snake_picture_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55
invoke ini.get_color, cur_dir_path, aColors, aVersion_picture_color, 0x55ff55
or [version_picture_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11
invoke ini.get_color, cur_dir_path, aColors, aPause_picture_color, 0x11ff11
or [pause_picture_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111
invoke ini.get_color, cur_dir_path, aColors, aGame_over_picture_color, 0xff1111
or [game_over_picture_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11
invoke ini.get_color, cur_dir_path, aColors, aEat_color, 0xffff11
or [eat_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777
invoke ini.get_color, cur_dir_path, aColors, aNavigation_strings_color, 0x80ff7777
or [navigation_strings_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900
invoke ini.get_color, cur_dir_path, aColors, aGame_over_strings_color, 0x80ff9900
or [game_over_strings_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff
invoke ini.get_color, cur_dir_path, aColors, aScore_string_color, 0x80ffffff
or [score_string_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff
invoke ini.get_color, cur_dir_path, aColors, aHiscore_string_color, 0x80ffffff
or [hiscore_string_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff
invoke ini.get_color, cur_dir_path, aColors, aChampion_string_color, 0x80ffffff
or [champion_string_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44
invoke ini.get_color, cur_dir_path, aColors, aGame_over_hiscore_color, 0x80ffdd44
or [game_over_hiscore_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff
invoke ini.get_color, cur_dir_path, aColors, aScore_number_color, 0xffffff
or [score_number_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff
invoke ini.get_color, cur_dir_path, aColors, aHiscore_number_color, 0x00ffffff
or [hiscore_number_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff
invoke ini.get_color, cur_dir_path, aColors, aChampion_name_color, 0x80ffffff
or [champion_name_color], eax
invoke ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00
invoke ini.get_color, cur_dir_path, aColors, aEdit_box_selection_color, 0x00aa00
or [edit1+0x10], eax
 
mov eax, [background_color]
100,8 → 109,6
mov eax, [game_over_hiscore_color]
mov [edit1+0x1C], 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
110,171 → 117,39
;;===Some_functions============================================================================================================
 
Exit:
;;===Exit==================================================================================================================
;;===Exit==============================================================================================================
 
or eax, -1
int 0x40
;;---Exit------------------------------------------------------------------------------------------------------------------
;;---Exit--------------------------------------------------------------------------------------------------------------
 
 
Set_geometry:
;;===Set_geometry==========================================================================================================
 
mov eax, [space_between_squares]
add eax, [square_side_length]
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 eax, [g_w]
mul word[g_h]
mov [gw_mul_gh], eax
 
mov edx, [g_w]
mov eax, [g_s]
mul dx
mov [gw_mul_gs], eax
 
mov edx, [g_h]
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
 
mov eax, [gh_mul_gs]
add eax, [gbym1]
add eax, [g_e]
add eax, 30
add eax, 22+5 ; skin height
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]
; dps 'snake: Window does not fit to screen.'
; newline
; dps 'Square_side_length was decreased.'
; newline
; dps 'Check you config file! (snake.ini)'
; newline
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]
; dps 'snake: Window does not fit to screen.'
; newline
; dps 'Square_side_length was decreased.'
; newline
; dps 'Check you config file! (snake.ini)'
; newline
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+0x08], eax
 
ret
 
;;---Set_geometry------------------------------------------------------------------------------------------------------
 
 
Draw_decorations:
;;===Draw_decorations==================================================================================================
 
mov al, [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
cmp [decorations], 1
je grid_lines
cmp [decorations], 2
je grid_lines_with_ends
cmp [decorations], 3
je grid_lines_with_corners
cmp [decorations], 4
je grid_dots
cmp [decorations], 5
je borders_lines
cmp [decorations], 6
je borders_lines_with_ends
cmp [decorations], 7
je borders_dots
cmp [decorations], 8
je corners_dots
cmp [decorations], 9
je corners_inner
cmp [decorations], 10
je corners_outer
cmp [decorations], 11
je corners_crosses
ret
 
 
281,33 → 156,24
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 ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
mov edx, [decorations_color]
mov esi, [g_w]
add esi, 1
 
@@:
mcall
add ebx, [gs_shl16_gs]
dec esi
jnz @b
add ebx, GRID_STEP*65536+GRID_STEP
cmp ebx, (GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
jng @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, [g_h]
add esi, 1
mov ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1)
@@:
mcall
add ecx, [gs_shl16_gs]
dec esi
jnz @b
add ecx, GRID_STEP*65536+GRID_STEP
cmp ecx, (GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
jng @b
 
ret
 
315,36 → 181,24
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 ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
mov ecx, (GRID_BEGIN_Y-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP+GRID_ENDS_WIDTH)
mov edx, [decorations_color]
mov esi, [g_w]
add esi, 1
 
@@:
mcall
add ebx, [gs_shl16_gs]
dec esi
jnz @b
add ebx, GRID_STEP*65536+GRID_STEP
cmp ebx, (GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
jng @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, [g_h]
add esi, 1
mov ebx, (GRID_BEGIN_X-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP+GRID_ENDS_WIDTH)
mov ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1)
@@:
mcall
add ecx, [gs_shl16_gs]
dec esi
jnz @b
add ecx, GRID_STEP*65536+GRID_STEP
cmp ecx, (GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
jng @b
 
ret
 
360,19 → 214,19
grid_dots:
 
mov eax, 1
mov ebx, [gbxm1]
mov ecx, [gbym1]
mov ebx, GRID_BEGIN_X-1
mov ecx, GRID_BEGIN_Y-1
mov edx, [decorations_color]
 
@@:
mcall
add ebx, [g_s]
cmp ebx, [gbxm1_plus_gw_mul_gs]
add ebx, GRID_STEP
cmp ebx, GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1
jng @b
add ecx, [g_s]
cmp ecx, [gbym1_plus_gh_mul_gs]
add ecx, GRID_STEP
cmp ecx, GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1
jg @f
mov ebx, [gbxm1]
mov ebx, GRID_BEGIN_X-1
jmp @b
 
@@:
381,32 → 235,15
 
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
mcall 38,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1),17*65536+263,[decorations_color]
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1), ,
mcall ,17*65536+523,(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1)
mcall ,17*65536+523,(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)
 
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:
borders_lines_with_ends:
 
call borders_lines
call corners_outer
417,37 → 254,37
borders_dots:
 
mov eax, 1
mov ebx, [gbxm1]
mov ecx, [gbym1]
mov ebx, GRID_BEGIN_X-1
mov ecx, GRID_BEGIN_Y-1
mov edx, [decorations_color]
@@:
mcall
add ebx, [g_s]
cmp ebx, [gbxm1_plus_gw_mul_gs]
add ebx, GRID_STEP
cmp ebx, GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP
jng @b
 
mov ebx, [gbxm1]
mov ecx, [gbym1_plus_gh_mul_gs]
mov ebx, GRID_BEGIN_X-1
mov ecx, GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP
@@:
mcall
add ebx, [g_s]
cmp ebx, [gbxm1_plus_gw_mul_gs]
add ebx, GRID_STEP
cmp ebx, GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP
jng @b
 
mov ebx, [gbxm1]
mov ecx, [gbym1]
mov ebx, GRID_BEGIN_X-1
mov ecx, GRID_BEGIN_Y-1
@@:
mcall
add ecx, [g_s]
cmp ecx, [gbym1_plus_gh_mul_gs]
add ecx, GRID_STEP
cmp ecx, GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP
jng @b
 
mov ebx, [gbxm1_plus_gw_mul_gs]
mov ecx, [gbym1]
mov ebx, GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP
mov ecx, GRID_BEGIN_Y-1
@@:
mcall
add ecx, [g_s]
cmp ecx, [gbym1_plus_gh_mul_gs]
add ecx, GRID_STEP
cmp ecx, GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP
jng @b
 
ret
455,127 → 292,39
 
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
mcall 13,(GRID_BEGIN_X-2)*65536+2,(GRID_BEGIN_Y-2)*65536+2,[decorations_color]
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+2,(GRID_BEGIN_Y-2)*65536+2,
mcall 13,(GRID_BEGIN_X-2)*65536+2,(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+2,
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+2,(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+2,
 
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
mcall 38,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_ENDS_WIDTH),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1),[decorations_color]
mcall ,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_ENDS_WIDTH),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-GRID_ENDS_WIDTH-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-GRID_ENDS_WIDTH-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
mcall ,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_ENDS_WIDTH),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_ENDS_WIDTH),
mcall ,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-GRID_ENDS_WIDTH-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-GRID_ENDS_WIDTH-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
 
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
mcall 38,(GRID_BEGIN_X-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1),[decorations_color]
mcall ,(GRID_BEGIN_X-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1+GRID_ENDS_WIDTH),(GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1+GRID_ENDS_WIDTH),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1),
mcall ,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_Y-1),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y-1-GRID_ENDS_WIDTH)*65536+(GRID_BEGIN_Y-1),
mcall ,(GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1+GRID_ENDS_WIDTH),
mcall ,(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1)*65536+(GRID_BEGIN_X+GRID_WIDTH*GRID_STEP-1),(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1)*65536+(GRID_BEGIN_Y+GRID_HEIGHT*GRID_STEP-1+GRID_ENDS_WIDTH),
 
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
 
 
598,23 → 347,19
 
mov cl, bh
 
mov al, byte[g_s]
mov al, 20
mul bl
mov bx, ax
add bx, word[gbxm1]
inc bx
add bx, 31
shl ebx, 16
add ebx, [g_s]
dec ebx
add ebx, 19
 
mov al, byte[g_s]
mov al, 20
mul cl
mov cx, ax
add cx, word[gbym1]
inc cx
add cx, 31
shl ecx, 16
add ecx, [g_s]
dec ecx
add ecx, 19
mcall 13
 
626,12 → 371,7
Draw_menu_esc:
;;===Draw_menu_esc=====================================================================================================
 
mov ebx, [window_width]
shr ebx, 1
sub ebx, (string_apply_name_enter-string_menu_esc-1)*3+6
shl ebx, 16
add ebx, dword[top_strings]
mcall 4, ,[navigation_strings_color],string_menu_esc
mcall 4,234*65536+TOP_STRINGS,[navigation_strings_color],string_menu_esc
ret
641,12 → 381,7
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
mcall 4,56*65536+BOTTOM_TOP_STRINGS,[score_string_color],string_score
ret
656,13 → 391,7
Draw_score_number:
;;===Draw_score_number=================================================================================================
 
mov edx, [window_width]
shr edx, 3
sub edx, 6
add edx, (string_hi_score-string_score)*6
shl edx, 16
add edx, dword[bottom_top_strings]
mcall 47,0x00070000,[score], ,[score_number_color],[background_color]
mcall 47,0x00070000,[score],104*65536+BOTTOM_TOP_STRINGS,[score_number_color],[background_color]
ret
672,14 → 401,7
Draw_hiscore_string:
;;===Draw_hiscore_string===============================================================================================
 
mov ebx, [window_width]
shr ebx, 3
neg ebx
add ebx, [window_width]
sub ebx, (string_player-string_hi_score)*6+7*6+5
shl ebx, 16
add ebx, dword[bottom_top_strings]
mcall 4, ,[hiscore_string_color],string_hi_score
mcall 4,376*65536+BOTTOM_TOP_STRINGS,[hiscore_string_color],string_hi_score
ret
689,14 → 411,7
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]
mcall 47,0x00070000,[hi_score], ,[hiscore_number_color]
mcall 47,0x00070000,[hi_score],442*65536+BOTTOM_TOP_STRINGS,[hiscore_number_color]
ret
706,14 → 421,7
Draw_champion_string:
;;===Draw_champion_string==============================================================================================
 
mov ebx, [window_width]
shr ebx, 3
neg ebx
add ebx, [window_width]
sub ebx, (string_level-string_champion)*6+7*6+5
shl ebx, 16
add ebx, dword[bottom_bottom_strings]
mcall 4, ,[champion_string_color],string_champion
mcall 4,376*65536+BOTTOM_BOTTOM_STRINGS,[champion_string_color],string_champion
 
ret
 
723,15 → 431,7
Draw_champion_name:
;;===Draw_champion_name================================================================================================
 
mov ebx, [window_width]
shr ebx, 3
neg ebx
add ebx, [window_width]
sub ebx, (press_to_start-champion_name)*6+7*6+6
add ebx, (press_to_start-champion_name)*6
shl ebx, 16
add ebx, dword[bottom_bottom_strings]
mcall 4, ,[champion_name_color],champion_name
mcall 4,442*65536+BOTTOM_BOTTOM_STRINGS,[champion_name_color],champion_name
 
ret
 
741,37 → 441,37
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)
;; al = picture height (in squares)
;; bh = number of top square
;; ecx = pointer to picture data
;; edx = picture color
;; esi = pointer to picture data
;;
 
add al, ah
add cl, ch
mov bh, ch
 
.draw:
mov bl, ah
xor bl, bl
.loop:
cmp byte[esi], 0
cmp byte[ecx], 0
jz @f
push eax ebx ecx esi
push eax ebx ecx
call Draw_square
pop esi ecx ebx eax
pop ecx ebx eax
@@:
inc esi
inc ecx
inc bl
cmp bl, al
cmp bl, GRID_WIDTH
jne .loop
dec al
test al, al
jnz @f
ret
@@:
inc bh
cmp bh, cl
jne .draw
ret
jmp .draw
 
 
;;---Draw_picture------------------------------------------------------------------------------------------------------
 
 
787,7 → 487,7
xor bx, bx
mov bl, al
shr ax, 8
mov dx, word[g_w]
mov dx, 24
mul dx
add ax, bx
mov edi, field_map
805,7 → 505,7
;; al = x coord
;; ah = y coord
;; out :
;; bl = value on map
;; al = value on map
;;
 
push eax
814,7 → 514,7
xor bx, bx
mov bl, al
shr ax, 8
mov dx, word[g_w]
mov dx, 24
mul dx
add ax, bx
mov edi, field_map
838,30 → 538,21
time_before_waiting dd 0x0
time_to_wait dd 0x0
time_wait_limit dd 101
decorations db 0x0
number_of_free_dots dw 0x0
 
field_map db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
gbxm1 dd 30
gbym1 dd 30
g_w dd 29
g_h dd 15
g_e dd 13
 
field_map db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,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,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
string_score db 'SCORE :',0
string_hi_score db 'HI-SCORE :',0
string_player db 'PLAYER :',0
871,19 → 562,20
string_resume_space db 'RESUME - ',0x27,'SPACE',0x27,0
string_menu_esc db 'MENU - ',0x27,'ESC',0x27,0
string_apply_name_enter db 'APPLY NAME - ',0x27,'ENTER',0x27,0
press_to_start db 'PRESS ',0x27,'SPACE',0x27,' OR ',0x27,'ENTER',0x27,' TO START',0
 
champion_name db 'dunkaist',0x20,0x20,0x20,0x20,0x20,0x20,0x20,0
 
press_to_start db '...PRESS ',0x27,'SPACE',0x27,' OR ',0x27,'ENTER',0x27,' TO START...',0
press_esc_to_exit db 'PRESS ',0x27,'ESC',0x27,' TO EXIT',0
;press_F2_to_options db 'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0
 
string_congratulations db ' Congratulations!!! New hi-score is :',0
string_enter_your_name db 'You are the champion! Enter your name :',0
strings_end:
 
snake_dots db 3,3, 4,3, 5,3, 865 dup (0)
snake_dots db 3,3, 4,3, 5,3, 522 dup (0) ; 264 dots
snake_napravlenie db 3
snake_napravlenie_next db 3
snake_length_x2 dd 6
 
eat db 0,0
 
score dd 0
hi_score dd 777
is_new_record db 0
890,56 → 582,51
 
action db 0
 
picture_first_menu_snake db 1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,\
1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,\
0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1
string_congratulations db 'Congratulations!!! You are the champion!! New hi-score is :',0
string_enter_your_name db 'Enter your name, please :',0
 
picture_first_menu_version db 1,1,1,1,0,0,0,1,1,1,1,\
1,0,0,1,0,0,0,0,0,0,1,\
1,0,0,1,0,0,0,0,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_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_pause db 0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,1,1,0,0,\
0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,\
0,0,1,1,1,1,0,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,0,\
0,0,1,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,\
0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0
picture_first_menu_version db 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0
 
picture_game_over db 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,1,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,\
1,0,0,0,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,\
1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,\
1,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,\
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,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,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,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,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,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,0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,0,1,0
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,0,\
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
 
start_map db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,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,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
picture_game_over db 0,0,1,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1,1,0,\
0,1,0,0,1,0,0,1,0,1,0,0,1,1,0,1,1,0,1,0,0,0,0,0,\
1,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,0,0,\
1,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,1,0,1,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,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,1,1,1,0,0,1,0,0,0,1,0,1,1,1,1,1,0,1,1,1,1,0,\
0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,\
0,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,1,\
0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,\
0,0,1,1,1,0,0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1
 
start_map db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
background_color dd 0x000000
decorations_color dd 0x00000000
snake_color dd 0x000000
980,14 → 667,15
 
bFirstDraw db 0
 
aScore db 'Score',0
aHiscore db 'Hiscore',0
aChampion_name db 'Champion_name',0
 
aPreferences db 'Preferences',0
aSpeed db 'Speed',0
aSquare_side_length db 'Square_side_length',0
aSpace_between_squares db 'Space_between_squares',0
aTheme db 'Theme',0
aDecorations db 'Decorations',0
 
aTheme_name db 32 dup (0)
aDecorations db 'Decorations',0
aColors db 'Colors',0
aBackground_color db 'Background_color',0
aDecorations_color db 'Decorations_color',0
aSnake_color db 'Snake_color',0
1008,51 → 696,18
aChampion_name_color db 'Champion_name_color',0
aEdit_box_selection_color db 'Edit_box_selection_color',0
 
aScore db 'Score',0
aHiscore db 'Hiscore',0
aChampion_name db 'Champion_name',0
edit1 edit_box 100,397,278,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1
 
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
 
decorations rb 1
number_of_free_dots rw 1
 
eat rb 1
 
square_side_length rd 1
space_between_squares rd 1
g_s rd 1
 
window_width rd 1
window_height rd 1
wp_x rd 1
wp_y rd 1
 
gw_mul_gh 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
 
champion_name rb 16
 
i_end:
cur_dir_path rb 4096
@PARAMS rb 4096
;;---Variables-------------------------------------------------------------------------------------------------------------
 
rb 4096
stacktop:
/programs/games/snake/trunk/snake.ini
1,20 → 1,6
;;===Common_preferences=================================================
[Preferences]
Speed=80
; SLOW == 0 <= Speed <= 100 == FAST
Square_side_length=19
; in pixels
; recommended minimum is 8 (strings don't overlap)
; for nice look at low Square_side_length try Theme_ultra_black
Theme=Theme_standard
; Theme name to use
; See [Theme_*] below for available themes
; Name of any theme must be shorter than 30 chars
;;---Common_preferences-------------------------------------------------
 
;;===Visual_themes======================================================
[Theme_standard]
; all these keys are optional
Decorations = 2
; 0 = nothing
; 1 = grid_lines
22,28 → 8,27
; 3 = grid_lines_with_corners
; 4 = grid_dots
; 5 = borders_lines
; 6 = borders_lines_with_corners
; 6 = borders_lines_with_ends
; 7 = borders_dots
; 8 = corners_dots
; 9 = corners_inner
; 10 = corners_outer
; 11 = corners_crosses
 
[Colors]
 
; Standard color scheme
Background_color = 0,0,0
Decorations_color = 170,170,0
Snake_color = 17,17,255
Snake_head_color = 17,17,255
; by default Snake_head_color is equal to Snake_color, so the snake has no head
Snake_picture_color = 68,136,255
; color of big 'SNAKE' label at start menu
Version_picture_color = 85,255,85
Pause_picture_color = 17,255,17
Game_over_picture_color = 255,17,17
Navigation_string_color = 255,119,119
; color of 'PRESS * to *' and like this strings
Game_over_string_color = 255,153,0
; color of strings on game_over screen
Game_over_hiscore_color = 255,221,68
; color of new hiscore and champion name on game_over screen
Eat_color = 255,255,17
Score_number_color = 255,255,255
Score_string_color = 255,255,255
53,79 → 38,69
Champion_name_color = 255,255,255
Edit_box_selection_color= 0,176,0
 
[Theme_light]
Decorations = 2
Background_color = 245,245,245
Decorations_color = 55,55,55
Snake_color = 215,115,215
Snake_head_color = 215,115,215
Snake_picture_color = 105,155,205
Version_picture_color = 155,255,0
Pause_picture_color = 75,255,75
Game_over_picture_color = 225,125,105
Navigation_string_color = 205,105,105
Game_over_string_color = 205,105,105
Game_over_hiscore_color = 205,85,85
Eat_color = 255,255,55
Score_number_color = 100,100,255
Score_string_color = 100,100,255
Hiscore_number_color = 100,100,255
Hiscore_string_color = 100,100,255
Champion_string_color = 100,100,255
Champion_name_color = 100,100,255
Edit_box_selection_color= 0,176,0
; Light scheme
;Background_color = 245,245,245
;Decorations_color = 55,55,55
;Snake_color = 215,115,215
;Snake_head_color = 215,115,215
;Snake_picture_color = 105,155,205
;Version_picture_color = 155,255,0
;Pause_picture_color = 75,255,75
;Game_over_picture_color = 225,125,105
;Navigation_string_color = 205,105,105
;Game_over_string_color = 205,105,105
;Game_over_hiscore_color = 205,85,85
;Eat_color = 255,255,55
;Score_number_color = 100,100,255
;Score_string_color = 100,100,255
;Hiscore_number_color = 100,100,255
;Hiscore_string_color = 100,100,255
;Champion_string_color = 100,100,255
;Champion_name_color = 100,100,255
;Edit_box_selection_color= 0,176,0
 
[Theme_ultra_white]
Decorations = 10
Background_color = 255,255,255
Decorations_color = 0,0,0
Snake_color = 30,30,30
Snake_head_color = 30,30,30
Snake_picture_color = 30,30,30
Version_picture_color = 70,70,70
Pause_picture_color = 30,30,30
Game_over_picture_color = 30,30,30
Navigation_string_color = 255,255,255
Game_over_string_color = 30,30,30
Game_over_hiscore_color = 0,0,0
Eat_color = 0,255,0
Score_number_color = 0,0,0
Score_string_color = 255,255,255
Hiscore_number_color = 0,0,0
Hiscore_string_color = 255,255,255
Champion_string_color = 255,255,255
Champion_name_color = 255,255,255
Edit_box_selection_color= 176,176,176
; Ultra white scheme
;Background_color = 255,255,255
;Decorations_color = 0,0,0
;Snake_color = 30,30,30
;Snake_head_color = 30,30,30
;Snake_picture_color = 30,30,30
;Version_picture_color = 70,70,70
;Pause_picture_color = 30,30,30
;Game_over_picture_color = 30,30,30
;Navigation_string_color = 255,255,255
;Game_over_string_color = 30,30,30
;Game_over_hiscore_color = 0,0,0
;Eat_color = 0,255,0
;Score_number_color = 0,0,0
;Score_string_color = 255,255,255
;Hiscore_number_color = 0,0,0
;Hiscore_string_color = 255,255,255
;Champion_string_color = 255,255,255
;Champion_name_color = 255,255,255
;Edit_box_selection_color= 176,176,176
 
[Theme_ultra_black]
Decorations = 6
Background_color = 0,0,0
Decorations_color = 255,255,255
Snake_color = 255,255,255
Snake_head_color = 255,255,255
Snake_picture_color = 255,255,255
Version_picture_color = 225,225,225
Pause_picture_color = 225,225,225
Game_over_picture_color = 225,225,225
Navigation_string_color = 0,0,0
Game_over_string_color = 225,225,225
Game_over_hiscore_color = 225,225,225
Eat_color = 255,0,0
Score_number_color = 255,255,255
Score_string_color = 255,255,255
Hiscore_number_color = 255,255,255
Hiscore_string_color = 255,255,255
Champion_string_color = 0,0,0
Champion_name_color = 0,0,0
Edit_box_selection_color= 100,100,100
; Ultra black scheme
;Background_color = 0,0,0
;Decorations_color = 255,255,255
;Snake_color = 255,255,255
;Snake_head_color = 255,255,255
;Snake_picture_color = 255,255,255
;Version_picture_color = 225,225,225
;Pause_picture_color = 225,225,225
;Game_over_picture_color = 225,225,225
;Navigation_string_color = 0,0,0
;Game_over_string_color = 225,225,225
;Game_over_hiscore_color = 225,225,225
;Eat_color = 255,0,0
;Score_number_color = 255,255,255
;Score_string_color = 255,255,255
;Hiscore_number_color = 255,255,255
;Hiscore_string_color = 255,255,255
;Champion_string_color = 0,0,0
;Champion_name_color = 0,0,0
;Edit_box_selection_color= 100,100,100
 
[Theme_your_theme_here]
 
;;---Visual_themes------------------------------------------------------
 
; !!! DON'T WRITE ANYTHING AFTER THIS LINE: 'Score' SECTION IS WRITABLE AND YOU WILL LOST THIS DATA !!!
 
;;===Section_of_results=================================================
[Score]
Hiscore=777
Champion_name=
/programs/games/snake/trunk/first_menu.asm
8,15 → 8,9
mov [snake_napravlenie], 3
mov [snake_napravlenie_next], 3
 
.redraw:
Redraw_window:
mcall 12,1
mov ebx, [wp_x]
shl ebx, 16
add ebx, dword[window_width]
mov ecx, [wp_y]
shl ecx, 16
add ecx, dword[window_height]
mcall 0, , ,[window_style], ,window_title
mcall 0,200*65536+WINDOW_WIDTH,326*65536+WINDOW_HEIGHT,[window_style], ,window_title
 
call Draw_decorations
call Draw_first_menu_picture
24,16 → 18,16
 
mcall 12,2
 
.still:
Wait_for_event:
mcall 10 ; wait for event
; ok, what an event?
dec al ; has the window been moved or resized?
jz .redraw ;
jz Redraw_window ;
dec al ; was a key pressed?
jz .key ;
jz Is_key ;
 
 
.button: ; a button was pressed
Is_button: ; a button was pressed
mcall 17 ; get button number
shr eax, 8 ; we should do it to get the real button code
 
40,10 → 34,10
cmp eax, 1 ; is it close button?
je Exit ; if so, jump to quit...
 
jmp .still ; jump to wait for another event
jmp Wait_for_event ; jump to wait for another event
 
 
.key: ; a key was pressed
Is_key: ; a key was pressed
mcall 2 ; get keycode
 
cmp ah, 0x1B ; Escape
53,7 → 47,7
cmp ah, 0x20 ; Space
je Level_begin
 
jmp .still ; jump to wait for another event
jmp Wait_for_event ; jump to wait for another event
 
;;---First_menu_mode-----------------------------------------------------------------------------------------------------------
 
63,16 → 57,16
Draw_first_menu_picture:
;;===Draw_first_menu_picture================================================================================================
 
mov ax, 0*0x100+29
mov cx, 1*0x100+6
mov al, 5
mov bh, 0
mov ecx, picture_first_menu_snake
mov edx, [snake_picture_color]
mov esi, picture_first_menu_snake
call Draw_picture
 
mov ax, 9*0x100+11
mov cx, 9*0x100+5
mov al, 4
mov bh, 7
mov ecx, picture_first_menu_version
mov edx, [version_picture_color]
mov esi, picture_first_menu_version
call Draw_picture
 
ret
83,18 → 77,8
Draw_menu_strings:
;;===Make_menu_strings=========================================================================================
 
mov ebx, [window_width]
shr ebx, 1
sub ebx, (press_esc_to_exit-press_to_start-1)*3+6
shl ebx, 16
add ebx, dword[bottom_middle_strings]
mcall 4, ,[navigation_strings_color],press_to_start
mov ebx, [window_width]
shr ebx, 1
sub ebx, (string_congratulations-press_esc_to_exit-1)*3+6
shl ebx, 16
add ebx, [top_strings]
mcall , ,[navigation_strings_color],press_esc_to_exit
mcall 4,153*65536+BOTTOM_MIDDLE_STRINGS,[navigation_strings_color],press_to_start
mcall ,213*65536+TOP_STRINGS,[navigation_strings_color],press_esc_to_exit
; mcall ,406*65536+TOP_STRINGS,[navigation_strings_color],press_F2_to_options
 
ret
/programs/games/snake/trunk/game_over.asm
4,51 → 4,51
 
mov ebx, [score]
cmp ebx, [hi_score]
jng .redraw
jng Game_over_Redraw
mov [is_new_record], 1
 
mcall 40,100111b ; set events: standart + mouse
 
.redraw:
Game_over_Redraw:
mcall 12,1
mov ebx, [wp_x]
shl ebx, 16
add ebx, dword[window_width]
mov ecx, [wp_y]
shl ecx, 16
add ecx, dword[window_height]
mcall 0, , ,[window_style], ,window_title
mcall 0,200*65536+WINDOW_WIDTH,326*65536+WINDOW_HEIGHT,[window_style], ,window_title
 
cmp [is_new_record], 1
jnz @f
push dword edit1
call [edit_box.draw]
@@:
 
call Draw_decorations
call Draw_game_over_picture
call Draw_game_over_strings ; edit_box is here
call Draw_game_over_strings
 
mcall 12,2
 
.still:
Game_over_Wait_for_event:
mcall 10 ; wait for event
; ok, what an event?
dec al ; has the window been moved or resized?
jz .redraw
jz Game_over_Redraw
dec al ; was a key pressed?
jz .key
jz Game_over_key
dec al ; was a button pressed?
jz .button
jz Game_over_button
 
 
.mouse: ; mouse event received
Game_over_mouse: ; mouse event received
push dword edit1
call [edit_box.mouse]
jmp .still
jmp Game_over_Wait_for_event
 
 
.key: ; a key was pressed
Game_over_key: ; a key was pressed
mcall 2 ; get keycode
 
cmp [is_new_record], 1
jnz .key.skip
jnz .skip
cmp ah, 0x0D ; Enter
jnz @f
61,17 → 61,17
push dword edit1
call [edit_box.key]
jmp .still
.key.skip:
jmp Game_over_Wait_for_event
.skip:
 
cmp ah, 0x1B ; Escape - go to menu
jne .still
jne Game_over_Wait_for_event
 
mcall 40,111b ; set events: standart
jmp First_menu
 
 
.button: ; a button was pressed
Game_over_button: ; a button was pressed
mcall 17 ; get button number
shr eax, 8 ; we should do it to get the real button code
 
78,7 → 78,7
cmp eax, 1
je Exit
 
jmp .still
jmp Game_over_Wait_for_event
 
;;---Game_over_mode------------------------------------------------------------------------------------------------------------
 
88,10 → 88,10
Draw_game_over_picture:
;;===Draw_game_over_picture================================================================================================
 
mov ax, 0*0x100+29
mov cx, 1*0x100+13
mov al, 11
mov bh, 0
mov ecx, picture_game_over
mov edx, [game_over_picture_color]
mov esi, picture_game_over
call Draw_picture
 
ret
102,42 → 102,15
Draw_game_over_strings:
;;===Draw_game_over_strings================================================================================================
 
cmp [is_new_record], 1
jnz @f
 
mov ebx, [window_width]
shr ebx, 1
sub ebx, (string_enter_your_name-string_congratulations-1+8)*3+6
shl ebx, 16
add ebx, [bottom_top_strings]
mcall 4, ,[game_over_strings_color],string_congratulations
mov ebx, [window_width]
shr ebx, 1
sub ebx, (strings_end-string_enter_your_name-1+8)*3+6
; add ebx, (strings_end-string_enter_your_name)*6
shl ebx, 16
add ebx, [bottom_bottom_strings]
mcall , , ,string_enter_your_name
mov ebx, [window_width]
shr ebx, 1
sub ebx, (press_to_start-string_apply_name_enter-1)*3+6
shl ebx, 16
add ebx, [top_strings]
mcall , ,[navigation_strings_color],string_apply_name_enter
mov edx, [window_width]
shr edx, 1
sub edx, (string_enter_your_name-string_congratulations-1+8)*3+7
add edx, (string_enter_your_name-string_congratulations)*6
shl edx, 16
add edx, dword[bottom_top_strings]
mcall 47,0x00070000,[score], ,[game_over_hiscore_color]
mov ebx, [window_width]
shr ebx, 1
sub ebx, (strings_end-string_enter_your_name-1+8)*3+9
add ebx, (strings_end-string_enter_your_name)*6
mov [edit1+0x04], ebx
push dword edit1
call [edit_box.draw]
mcall 4,40*65536+BOTTOM_TOP_STRINGS,[game_over_strings_color],string_congratulations
mcall ,244*65536+BOTTOM_BOTTOM_STRINGS, ,string_enter_your_name
mcall ,210*65536+TOP_STRINGS,[navigation_strings_color],string_apply_name_enter
mcall 47,0x00070000,[score],(399)*65536+BOTTOM_TOP_STRINGS,[game_over_hiscore_color]
 
ret
 
153,6 → 126,7
Score_and_name_store:
;;===Name_store============================================================================================================
 
 
invoke ini.set_str, cur_dir_path, aScore, aChampion_name, hed, 15
invoke ini.set_int, cur_dir_path, aScore, aHiscore, [score]
 
/programs/games/snake/trunk/level.asm
4,9 → 4,7
 
mov [score], 0
mov [action], 0
mov eax, [gw_mul_gh]
sub eax, 3
mov [number_of_free_dots], ax
mov [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3
 
invoke ini.get_str, cur_dir_path, aScore, aChampion_name, champion_name, 15, champion_name
invoke ini.get_int, cur_dir_path, aScore, aHiscore, 0
18,12 → 16,9
 
mov esi, start_map
mov edi, field_map
mov ecx, [gw_mul_gh]
shr ecx, 2
mov ecx, GRID_WIDTH*GRID_HEIGHT/4
rep movsd
 
call Get_eat
 
Level_body:
;;===Level_body========================================================================================================
 
32,15 → 27,9
mov eax, [time_wait_limit]
mov [time_to_wait], eax
 
.redraw:
Redraw:
mcall 12,1
mov ebx, [wp_x]
shl ebx, 16
add ebx, dword[window_width]
mov ecx, [wp_y]
shl ecx, 16
add ecx, dword[window_height]
mcall 0, , ,[window_style], ,window_title
mcall 0,200*65536+WINDOW_WIDTH,326*65536+WINDOW_HEIGHT,[window_style], ,window_title
call Draw_decorations
call Draw_snake
49,7 → 38,7
 
mcall 12,2
.still:
Waiting:
mcall 26, 9
push eax
sub eax, [time_before_waiting]
70,19 → 59,19
mov [time_before_waiting], eax
mov eax, [time_wait_limit]
mov [time_to_wait], eax
jmp .still
jmp Waiting
@@:
 
.message: ; ok, what an event?
Message: ; ok, what an event?
dec al ; has the window been moved or resized?
jz .redraw ;
jz Redraw ;
dec al ; was a key pressed?
jz .key ;
jz Key ;
dec al ; was a button pressed?
jz .button ;
jz Button ;
 
 
.key:
Key:
mcall 2 ; get keycode
cmp ah, 0x1B ; Escape
90,60 → 79,64
cmp ah, 0x20 ; Space
je Pause_mode
cmp ah, 0xB0 ; Left
je .key.left
je .left
cmp ah, 0xB1 ; Down
je .key.down
je .down
cmp ah, 0xB2 ; Up
je .key.up
je .up
cmp ah, 0xB3 ; Right
je .key.right
je .right
jmp .still ; jump to wait for another event
jmp Waiting ; jump to wait for another event
 
 
.button: ; ¯à®æ¥¤ãà  ®¡à ¡®ª¨ ª­®¯®ª ¢ ¯à®£à ¬¬¥
mcall 17 ; äã­ªæ¨ï 17: ¯®«ãç¨âì ­®¬¥à ­ ¦ â®© ª­®¯ª¨
 
shr eax, 8 ; ᤢ¨£ ¥¬ ॣ¨áâà eax ­  8 ¡¨â ¢¯à ¢®, çâ®¡ë ¯®«ãç¨âì ­®¬¥à ­ ¦ â®© ª­®¯ª¨
cmp eax, 1
je Exit ; ¥á«¨ íâ® ­¥ ª­®¯ª  1 (§ à¥§¥à¢¨à®¢ ­  á¨á⥬®© ª ª ª­®¯ª  § ªàëâ¨ï ¯à®£à ¬¬ë), ¯à®¯ã᪠¥¬ 2 á«¥¤ãî騥 áâà®çª¨ ª®¤ 
 
jmp .still
 
 
.key.left:
bts dword[action], 0
jc @f
.left:
cmp [action], 0
jne @f
mov [time_to_wait], 0
@@:
mov [snake_napravlenie_next], LEFT
jmp .still
mov [action], 1
mov [snake_napravlenie_next], 0
jmp Waiting
.key.down:
bts dword[action], 0
jc @f
.down:
cmp [action], 0
jne @f
mov [time_to_wait], 0
@@:
mov [snake_napravlenie_next], DOWN
jmp .still
mov [action], 1
mov [snake_napravlenie_next], 1
jmp Waiting
.key.up:
bts dword[action], 0
jc @f
.up:
cmp [action], 0
jne @f
mov [time_to_wait], 0
@@:
mov [snake_napravlenie_next], UP
jmp .still
mov [action], 1
mov [snake_napravlenie_next], 2
jmp Waiting
.key.right:
bts dword[action], 0
jc @f
.right:
cmp [action], 0
jne @f
mov [time_to_wait], 0
@@:
mov [snake_napravlenie_next], RIGHT
jmp .still
mov [action], 1
mov [snake_napravlenie_next], 3
jmp Waiting
 
 
Button: ; ¯à®æ¥¤ãà  ®¡à ¡®ª¨ ª­®¯®ª ¢ ¯à®£à ¬¬¥
mcall 17 ; äã­ªæ¨ï 17: ¯®«ãç¨âì ­®¬¥à ­ ¦ â®© ª­®¯ª¨
 
shr eax, 8 ; ᤢ¨£ ¥¬ ॣ¨áâà eax ­  8 ¡¨â ¢¯à ¢®, çâ®¡ë ¯®«ãç¨âì ­®¬¥à ­ ¦ â®© ª­®¯ª¨
cmp eax, 1
je Exit ; ¥á«¨ íâ® ­¥ ª­®¯ª  1 (§ à¥§¥à¢¨à®¢ ­  á¨á⥬®© ª ª ª­®¯ª  § ªàëâ¨ï ¯à®£à ¬¬ë), ¯à®¯ã᪠¥¬ 2 á«¥¤ãî騥 áâà®çª¨ ª®¤ 
 
jmp Waiting
Game_step:
 
cmp [snake_napravlenie], LEFT ; are we moving to left?
199,8 → 192,7
dec al
cmp al, -1
jne @f
mov al, byte[g_w]
dec al
mov al, GRID_WIDTH-1
@@:
jmp Snake_move
 
208,7 → 200,7
mov [snake_napravlenie], DOWN
mov ax, [edx]
inc ah
cmp ah, byte[g_h]
cmp ah, GRID_HEIGHT
jne @f
mov ah, 0
@@:
220,8 → 212,7
dec ah
cmp ah, -1
jne @f
mov ah, byte[g_h]
dec ah
mov ah, GRID_HEIGHT-1
@@:
jmp Snake_move
229,7 → 220,7
mov [snake_napravlenie], RIGHT
mov ax, [edx]
inc al
cmp al, byte[g_w]
cmp al, GRID_WIDTH
jne @f
mov al, 0
@@:
283,21 → 274,16
Draw_level_strings:
;;===Draw_level_strings================================================================================================
 
mov ebx, [window_width]
shr ebx, 1
sub ebx, (string_resume_space-string_pause_space-1)*3+6
shl ebx, 16
add ebx, [top_strings]
mcall 4, ,[navigation_strings_color],string_pause_space ; Draw 'PAUSE - SPACE' string
 
; call Draw_menu_esc
call Draw_menu_esc
call Draw_score_string
call Draw_score_number ; Draw score (number)
call Draw_hiscore_string
call Draw_hiscore_number
call Draw_champion_string
call Draw_champion_name
call Draw_hiscore_string
call Draw_hiscore_number
 
mcall 4,225*65536+BOTTOM_MIDDLE_STRINGS,[navigation_strings_color],string_pause_space ; Draw 'PAUSE - SPACE' string
ret
 
;;---Draw_level_strings------------------------------------------------------------------------------------------------
313,13 → 299,16
add edi, [snake_length_x2]
 
@@:
 
mov ax, [edi]
xchg ax, [esi]
mov [edi], ax
 
dec cx
add esi, 2
sub edi, 2
dec cx
 
test cx, cx
jnz @b
 
ret
368,7 → 357,7
.place_found:
sub ebx, field_map
mov eax, ebx
mov bl, byte[g_w]
mov bl, GRID_WIDTH
div bl
xchg al, ah
402,40 → 391,36
mov ebx, snake_dots+2
 
mov cl, [eax] ; The last dot x_coord
mov ch, [ebx] ; The pre_last dot x_coord
mov dl, [ebx] ; The pre_last dot x_coord
 
cmp cl, ch
cmp cl, dl
je .X_ravny
cmp cl, 0
jne .skip2
mov dl, byte[g_w]
dec dl
cmp ch, dl
cmp dl, 23
jne .Normal_y_ravny
mov [snake_napravlenie_next], RIGHT
mov [snake_napravlenie_next], 3
ret
.skip2:
mov dl, byte[g_w]
dec dl
cmp cl, dl
cmp cl, 23
jne .Normal_y_ravny
cmp ch, 0
cmp dl, 0
jne .Normal_y_ravny
mov [snake_napravlenie_next], LEFT
mov [snake_napravlenie_next], 0
ret
.Normal_y_ravny:
 
cmp cl, ch
cmp cl, dl
jg .Napravlenie_to_right
mov [snake_napravlenie_next], LEFT
mov [snake_napravlenie_next], 0
ret
 
.Napravlenie_to_right:
mov [snake_napravlenie_next], RIGHT
mov [snake_napravlenie_next], 3
ret
 
.X_ravny:
442,37 → 427,33
inc eax
inc ebx
mov cl, [eax]
mov ch, [ebx]
mov dl, [ebx]
cmp cl, 0
jne .skip3
mov dl, byte[g_h]
dec dl
cmp ch, dl
cmp dl, 10
jne .Normal_x_ravny
mov [snake_napravlenie_next], DOWN
mov [snake_napravlenie_next], 1
ret
.skip3:
mov dl, byte[g_h]
dec dl
cmp ch, dl
cmp cl, 10
jne .Normal_x_ravny
cmp ch, 0
cmp dl, 0
jne .Normal_x_ravny
mov [snake_napravlenie_next], UP
mov [snake_napravlenie_next], 2
ret
.Normal_x_ravny:
 
cmp cl, ch ; !!!
cmp cl, dl ; !!!
jg .Napravlenie_to_down ; 0 1 2 ...
mov [snake_napravlenie_next], UP ; 1
mov [snake_napravlenie_next], 2 ; 1
ret ; 2
; .
.Napravlenie_to_down: ; .
mov [snake_napravlenie_next], DOWN ; .
mov [snake_napravlenie_next], 1 ; .
 
ret
 
508,14 → 489,9
 
.eat_and_new_head_are_different:
 
push ax
mov ecx, snake_dots-4
add ecx, [snake_length_x2]
mov ax, word[snake_dots]
mov cl, 0
call Draw_on_map
 
pop ax
 
call Get_from_map
test bl, bl
jnz Game_over
527,6 → 503,9
mov edx, [background_color]
call Draw_square
mov ax, word[snake_dots]
mov cl, 0
call Draw_on_map
call Sdvig
call Draw_head_prehead
543,8 → 522,8
mov [time_before_waiting], eax
mov eax, [time_wait_limit]
mov [time_to_wait], eax
jmp Level_body.still
jmp Waiting
 
;;---Snake_move------------------------------------------------------------------------------------------------------------
;;---Snake_move--------------------------------------------------------------------------------------------------------
 
;;---Some_functions------------------------------------------------------------------------------------------------------------
/programs/games/snake/trunk/pause.asm
6,15 → 6,9
mov eax, [time_wait_limit]
mov [time_to_wait], eax
 
.redraw:
Pause_Redraw_window:
mcall 12,1
mov ebx, [wp_x]
shl ebx, 16
add ebx, dword[window_width]
mov ecx, [wp_y]
shl ecx, 16
add ecx, dword[window_height]
mcall 0, , ,[window_style], ,window_title
mcall 0,200*65536+WINDOW_WIDTH,326*65536+WINDOW_HEIGHT,[window_style], ,window_title
 
call Draw_decorations
call Draw_pause_picture
23,16 → 17,16
mcall 12,2
.still:
Pause_Wait_for_event:
mcall 10 ; wait for event
; ok, what an event?
dec al ; has the window been moved or resized?
jz .redraw
jz Pause_Redraw_window
dec al ; was a key pressed?
jz .key
jz Pause_Is_key
 
 
.button: ; a button was pressed
Pause_Is_button: ; a button was pressed
mcall 17 ; get button number
shr eax, 8 ; we should do it to get the real button code
 
39,10 → 33,10
cmp eax, 1
je Exit
 
jmp .still
jmp Pause_Wait_for_event
 
 
.key: ; a key was pressed
Pause_Is_key: ; a key was pressed
mcall 2 ; get keycode
cmp ah, 0x1B ; Escape - go to menu
50,7 → 44,7
cmp ah, 0x20 ; Space - resume game
je Level_body
jmp .still
jmp Pause_Wait_for_event
 
;;---Pause_mode----------------------------------------------------------------------------------------------------------------
 
60,10 → 54,10
Draw_pause_picture:
;;===Draw_pause_picture========================================================================================================
 
mov ax, 0*0x100+29
mov cx, 4*0x100+6
mov al, 6
mov bh, 2
mov ecx, picture_pause
mov edx, [pause_picture_color]
mov esi, picture_pause
call Draw_picture
 
ret
74,12 → 68,7
Draw_pause_strings:
;;===Draw_pause_strings================================================================================================
 
mov ebx, [window_width]
shr ebx, 1
sub ebx, (string_menu_esc-string_resume_space-1)*3+6
shl ebx, 16
add ebx, dword[bottom_middle_strings]
mcall 4, ,[navigation_strings_color],string_resume_space ; Show 'RESUME - SPACE' string
mcall 4,219*65536+BOTTOM_MIDDLE_STRINGS,[navigation_strings_color],string_resume_space ; Show 'RESUME - SPACE' string
call Draw_menu_esc ; Show 'MENU - ESC' string