Subversion Repositories Kolibri OS

Rev

Rev 1522 | Rev 1677 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1522 Rev 1566
1
;;===HEADER====================================================================================================================
1
;;===HEADER====================================================================================================================
2
 
2
 
3
use32
3
use32
4
    org 0x0
4
    org 0x0
5
    db  'MENUET01'
5
    db  'MENUET01'
6
    dd  0x1,start,i_end,d_end,stacktop,0x0,cur_dir_path
6
    dd  0x01,start,i_end,d_end,stacktop,0x0,cur_dir_path
7
 
7
 
8
;;---HEADER--------------------------------------------------------------------------------------------------------------------
8
;;---HEADER--------------------------------------------------------------------------------------------------------------------
9
 
9
 
10
include '../../../proc32.inc'
10
include '../../../proc32.inc'
11
include '../../../macros.inc'
11
include '../../../macros.inc'
12
include '../../../system/launch/trunk/mem.inc'
12
include '../../../system/launch/trunk/mem.inc'
13
include '../../../develop/libraries/libs-dev/.test/dll.inc'
13
include '../../../develop/libraries/libs-dev/.test/dll.inc'
14
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
14
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
15
;include '../../../system/board/trunk/debug.inc'
15
;include '../../../system/board/trunk/debug.inc'
16
 
16
 
17
;;===Define_chapter============================================================================================================
17
;;===Define_chapter============================================================================================================
-
 
18
 
-
 
19
GRID_WIDTH                  equ     28
-
 
20
GRID_HEIGHT                 equ     14
-
 
21
 
-
 
22
MIN_SQUARE_SIDE_LENGTH      equ     9
18
 
23
 
19
SCORE_EAT                   equ     100
24
SCORE_EAT                   equ     100
20
 
25
 
21
LEFT                        equ     0
26
LEFT                        equ     0
22
DOWN                        equ     1
27
DOWN                        equ     1
23
UP                          equ     2
28
UP                          equ     2
24
RIGHT                       equ     3
29
RIGHT                       equ     3
-
 
30
 
-
 
31
struct  LEVEL
-
 
32
    field                   db      GRID_WIDTH*GRID_HEIGHT  dup (?)
-
 
33
    snake_dots              db      6   dup (?)
-
 
34
    snake_direction         dd      ?
-
 
35
    snake_direction_next    dd      ?
-
 
36
    number_of_stones        dd      ?
-
 
37
ends
-
 
38
 
-
 
39
CLASSIC_MODE                equ     0
-
 
40
LEVELS_MODE                 equ     1
-
 
41
 
-
 
42
CLASSIC_MODE_FIRST_LEVEL    equ     0
-
 
43
LEVELS_MODE_FIRST_LEVEL     equ     1
-
 
44
 
-
 
45
EAT_TO_END_LEVEL            equ     12
-
 
46
PAUSE_BETWEEN_LEVELS        equ     250
-
 
47
PAUSE_WHILE_DRAWING_SPLASH  equ     4
-
 
48
 
-
 
49
CHAMPION_NAME_LENGTH        equ     15
-
 
50
LAST_LEVEL_NUMBER           equ     12
25
 
51
 
26
;;---Define_chapter------------------------------------------------------------------------------------------------------------
52
;;---Define_chapter------------------------------------------------------------------------------------------------------------
27
 
53
 
28
start:
54
start:
29
 
55
 
30
stdcall dll.Load,@IMPORT
56
stdcall dll.Load,@IMPORT
31
    or   eax, eax
57
    or   eax, eax
32
    jnz  Exit
58
    jnz  Exit
33
    
59
    
34
align 4
60
align 4
35
 
61
 
36
    mov  eax, cur_dir_path
62
    mov  eax, cur_dir_path
37
  @@:
63
  @@:
38
    cmp  byte[eax], 0
64
    cmp  byte[eax], 0
39
     jz  @f
65
     jz  @f
40
    inc  eax
66
    inc  eax
41
     jmp @b
67
     jmp @b
42
  @@:
68
  @@:
43
    mov  dword[eax],    '.ini'
69
    mov  dword[eax],    '.ini'
44
 
70
 
45
      invoke  ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
71
      invoke  ini.get_int, cur_dir_path, aPreferences, aSpeed, 80
46
    neg  eax
72
    neg  eax
47
    add  [time_wait_limit],    eax
73
    add  [time_wait_limit],    eax
48
      invoke  ini.get_int, cur_dir_path, aPreferences, aSquare_side_length, 19
-
 
49
    mov  [square_side_length],  eax
-
 
50
      invoke  ini.get_int, cur_dir_path, aPreferences, aSpace_between_squares, 1
-
 
51
    mov  [space_between_squares],   eax
-
 
52
      invoke  ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
74
      invoke  ini.get_str, cur_dir_path, aPreferences, aTheme, aTheme_name, 31, aTheme_name
53
 
75
 
54
      invoke  ini.get_int, cur_dir_path, aTheme_name, aDecorations, 2
76
      invoke  ini.get_int, cur_dir_path, aTheme_name, aDecorations, 2
55
    mov  [decorations], al
77
    mov  [decorations], eax
56
      invoke  ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
78
      invoke  ini.get_color, cur_dir_path, aTheme_name, aBackground_color, 0x000000
57
    or   [background_color],    eax
79
    or   [background_color],    eax
58
    or   [window_style],    eax
80
    or   [window_style],    eax
59
      invoke  ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0x00aaaa00
81
      invoke  ini.get_color, cur_dir_path, aTheme_name, aDecorations_color, 0xAAAA00
60
    or   [decorations_color],  eax
82
    or   [decorations_color],  eax
61
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff
83
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_color, 0x1111ff
62
    or   [snake_color], eax
84
    or   [snake_color], eax
63
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x1111ff
85
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_head_color, 0x6B6Bff
64
    or   [snake_head_color], eax
86
    or   [snake_head_color], eax
65
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff
87
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSnake_picture_color, 0x4488ff
66
    or   [snake_picture_color], eax
88
    or   [snake_picture_color], eax
67
      invoke  ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55
89
      invoke  ini.get_color, cur_dir_path, aTheme_name, aVersion_picture_color, 0x55ff55
68
    or   [version_picture_color],   eax
90
    or   [version_picture_color],   eax
69
      invoke  ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11
91
      invoke  ini.get_color, cur_dir_path, aTheme_name, aPause_picture_color, 0x11ff11
70
    or   [pause_picture_color], eax
92
    or   [pause_picture_color], eax
71
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111
93
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_picture_color, 0xff1111
72
    or   [game_over_picture_color], eax
94
    or   [game_over_picture_color], eax
-
 
95
      invoke  ini.get_color, cur_dir_path, aTheme_name, aYou_win_picture_color, 0xffff11
-
 
96
    or   [you_win_picture_color],   eax
73
      invoke  ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11
97
      invoke  ini.get_color, cur_dir_path, aTheme_name, aEat_color, 0xffff11
74
    or   [eat_color],   eax
98
    or   [eat_color],   eax
75
      invoke  ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777
99
      invoke  ini.get_color, cur_dir_path, aTheme_name, aNavigation_strings_color, 0x80ff7777
76
    or   [navigation_strings_color], eax
100
    or   [navigation_strings_color], eax
77
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900
101
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_strings_color, 0x80ff9900
78
    or   [game_over_strings_color],  eax
102
    or   [game_over_strings_color],  eax
79
      invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff
103
      invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_string_color, 0x80ffffff
80
    or   [score_string_color],   eax
104
    or   [score_string_color],   eax
-
 
105
      invoke  ini.get_color, cur_dir_path, aTheme_name, aLevel_string_color, 0xffffff
-
 
106
    or   [level_string_color],  eax
81
      invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff
107
      invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_string_color, 0x80ffffff
82
    or   [hiscore_string_color],   eax
108
    or   [hiscore_string_color],   eax
83
      invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff
109
      invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_string_color, 0x80ffffff
84
    or   [champion_string_color],   eax
110
    or   [champion_string_color],   eax
85
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44
111
      invoke  ini.get_color, cur_dir_path, aTheme_name, aGame_over_hiscore_color, 0x80ffdd44
86
    or   [game_over_hiscore_color], eax
112
    or   [game_over_hiscore_color], eax
87
      invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff
113
      invoke  ini.get_color, cur_dir_path, aTheme_name, aScore_number_color, 0xffffff
88
    or   [score_number_color],   eax
114
    or   [score_number_color],   eax
-
 
115
      invoke  ini.get_color, cur_dir_path, aTheme_name, aLevel_number_color, 0xffffff
-
 
116
    or   [level_number_color],  eax
89
      invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff
117
      invoke  ini.get_color, cur_dir_path, aTheme_name, aHiscore_number_color, 0x00ffffff
90
    or   [hiscore_number_color],   eax
118
    or   [hiscore_number_color],   eax
91
      invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff
119
      invoke  ini.get_color, cur_dir_path, aTheme_name, aChampion_name_color, 0x80ffffff
92
    or   [champion_name_color],   eax
120
    or   [champion_name_color],   eax
93
      invoke  ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00
121
      invoke  ini.get_color, cur_dir_path, aTheme_name, aEdit_box_selection_color, 0x00aa00
94
    or   [edit1+0x10],  eax
122
    or   [edit1.shift_color],   eax
-
 
123
      invoke  ini.get_color, cur_dir_path, aTheme_name, aButton_color, 0xDDDDDD
-
 
124
    or   [button_color],    eax
-
 
125
      invoke  ini.get_color, cur_dir_path, aTheme_name, aButton_text_color, 0x000000
-
 
126
    or   [button_text_color],   eax
-
 
127
      invoke  ini.get_color, cur_dir_path, aTheme_name, aStone_color, 0x5f8700
-
 
128
    or   [stone_color], eax
-
 
129
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_background_color, 0xAAAA00
-
 
130
    or   [splash_background_color],    eax
-
 
131
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_level_number_color, 0x000000
-
 
132
    or   [splash_level_number_color],   eax
-
 
133
      invoke  ini.get_color, cur_dir_path, aTheme_name, aSplash_level_string_color, 0x000000
-
 
134
    or   [splash_level_string_color],   eax
-
 
135
 
-
 
136
      invoke  ini.get_int, cur_dir_path, aReserved, aSquare_side_length, 19
-
 
137
    mov  [square_side_length],  eax
-
 
138
      invoke  ini.get_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, CHAMPION_NAME_LENGTH, champion_name_classic
-
 
139
      invoke  ini.get_int, cur_dir_path, aReserved, aHiscore_classic, 777
-
 
140
    or   [hi_score_classic],    eax
-
 
141
      invoke  ini.get_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, CHAMPION_NAME_LENGTH, champion_name_levels
-
 
142
      invoke  ini.get_int, cur_dir_path, aReserved, aHiscore_levels, 777
-
 
143
    or   [hi_score_levels], eax
95
 
144
 
96
    mov  eax, [background_color]
145
    mov  eax, [background_color]
97
    mov  [edit1+0x0C],  eax
146
    mov  [edit1.color], eax
98
    mov  [edit1+0x14],  eax
147
    mov  [edit1.focus_border_color],    eax
99
    mov  [edit1+0x18],  eax
148
    mov  [edit1.blur_border_color], eax
100
    mov  eax, [game_over_hiscore_color]
149
    mov  eax, [game_over_hiscore_color]
-
 
150
    mov  [edit1.text_color],    eax
-
 
151
 
-
 
152
      mcall     37,4,cursor_data,2                  ; load empty cursor (for "hiding" cursor while level_mode)
101
    mov  [edit1+0x1C],  eax
153
    mov  [cursor_handle],   eax
102
 
154
 
103
      call      Set_geometry
155
      call      Set_geometry
104
 
156
 
105
include 'first_menu.asm'            ; First menu body and functions
157
include 'first_menu.asm'            ; First menu body and functions
106
include 'level.asm'                 ; Level body and functions (game process)
158
include 'level.asm'                 ; Level body and functions (game process)
107
include 'pause.asm'                 ; Pause body and functions
159
include 'pause.asm'                 ; Pause body and functions
108
include 'game_over.asm'             ; Game_over body and functions
160
include 'game_over.asm'             ; Game_over body and functions
109
 
161
 
110
;;===Some_functions============================================================================================================
162
;;===Some_functions============================================================================================================
-
 
163
 
-
 
164
 
-
 
165
Save_do_smth_else_and_exit:
-
 
166
    ;;===Save_do_smth_else_and_exit============================================================================================
-
 
167
 
-
 
168
      mcall     37,6,[cursor_handle]                ; delete cursor
-
 
169
 
-
 
170
      invoke    ini.set_int, cur_dir_path, aReserved, aSquare_side_length, [square_side_length]
-
 
171
 
-
 
172
    mov  edi, champion_name_classic
-
 
173
    xor  al,  al
-
 
174
    mov  ecx, CHAMPION_NAME_LENGTH+1
-
 
175
    cld
-
 
176
    repne scasb
-
 
177
    neg  ecx
-
 
178
    add  ecx, CHAMPION_NAME_LENGTH
-
 
179
      invoke    ini.set_str, cur_dir_path, aReserved, aChampion_name_classic, champion_name_classic, ecx
-
 
180
      invoke    ini.set_int, cur_dir_path, aReserved, aHiscore_classic, [hi_score_classic]
-
 
181
 
-
 
182
    mov  edi, champion_name_levels
-
 
183
    xor  al,  al
-
 
184
    mov  ecx, CHAMPION_NAME_LENGTH+1
-
 
185
    cld
-
 
186
    repne scasb
-
 
187
    neg  ecx
-
 
188
    add  ecx, CHAMPION_NAME_LENGTH
-
 
189
      invoke    ini.set_str, cur_dir_path, aReserved, aChampion_name_levels, champion_name_levels, ecx
-
 
190
      invoke    ini.set_int, cur_dir_path, aReserved, aHiscore_levels, [hi_score_levels]
-
 
191
 
-
 
192
    ;;---Save_do_smth_else_and_exit--------------------------------------------------------------------------------------------
-
 
193
 
111
 
194
 
112
Exit:
195
Exit:
113
    ;;===Exit==================================================================================================================
196
    ;;===Exit==================================================================================================================
114
 
197
 
115
    or  eax,    -1
198
    or  eax,    -1
116
    int 0x40
199
    int 0x40
117
    
200
    
118
    ;;---Exit------------------------------------------------------------------------------------------------------------------
201
    ;;---Exit------------------------------------------------------------------------------------------------------------------
119
 
202
 
120
 
203
 
121
Set_geometry:
204
Set_geometry:
122
    ;;===Set_geometry==========================================================================================================
205
    ;;===Set_geometry==========================================================================================================
123
 
206
 
124
    mov  eax, [space_between_squares]
207
    mov  eax, [square_side_length]
125
    add  eax, [square_side_length]
208
    inc  eax                                            ; space between squares
126
    mov  [g_s],   eax
209
    mov  [g_s],   eax
127
 
210
 
128
    mov  eax, [g_s]
211
    mov  eax, [g_s]
129
    shr  eax, 1
212
    shr  eax, 1
130
    mov  ebx, eax
213
    mov  ebx, eax
131
    shr  ebx, 1
214
    shr  ebx, 1
132
    add  eax, ebx
215
    add  eax, ebx
133
    mov  [g_e], eax
216
    mov  [g_e], eax
134
 
217
 
135
    mov  eax, [g_s]
218
    mov  eax, [g_s]
136
    add  eax, [g_e]
219
    add  eax, [g_e]
137
    mov  [gbxm1],   eax
220
    mov  [gbxm1],   eax
138
 
221
 
139
    mov  eax, [g_e]
222
    mov  eax, [g_e]
140
    add  eax, 25
223
    add  eax, 25
141
    mov  [gbym1],   eax
224
    mov  [gbym1],   eax
142
 
-
 
143
    mov  eax, [g_w]
-
 
144
    mul  word[g_h]
-
 
145
    mov  [gw_mul_gh],   eax
-
 
146
 
225
 
147
    mov  edx, [g_w]
226
    mov  edx, GRID_WIDTH
148
    mov  eax, [g_s]
227
    mov  eax, [g_s]
149
    mul  dx
228
    mul  dx
150
    mov  [gw_mul_gs],   eax
229
    mov  [gw_mul_gs],   eax
151
 
230
 
152
    mov  edx, [g_h]
231
    mov  edx, GRID_HEIGHT
153
    mov  eax, [g_s]
232
    mov  eax, [g_s]
154
    mul  dx
233
    mul  dx
155
    mov  [gh_mul_gs],   eax
234
    mov  [gh_mul_gs],   eax
156
 
235
 
157
    mov  eax, [gbxm1]
236
    mov  eax, [gbxm1]
158
    add  eax, [gw_mul_gs]
237
    add  eax, [gw_mul_gs]
159
    mov  [gbxm1_plus_gw_mul_gs],    eax
238
    mov  [gbxm1_plus_gw_mul_gs],    eax
160
 
239
 
161
    mov  eax, [gbym1]
240
    mov  eax, [gbym1]
162
    add  eax, [gh_mul_gs]
241
    add  eax, [gh_mul_gs]
163
    mov  [gbym1_plus_gh_mul_gs],    eax
242
    mov  [gbym1_plus_gh_mul_gs],    eax
164
 
243
 
165
    mov  eax, [g_s]
244
    mov  eax, [g_s]
166
    shl  eax, 16
245
    shl  eax, 16
167
    add  eax, [g_s]
246
    add  eax, [g_s]
168
    mov  [gs_shl16_gs], eax
247
    mov  [gs_shl16_gs], eax
169
 
248
 
170
    mov  eax, [gbxm1]
249
    mov  eax, [gbxm1]
171
    shl  eax, 16
250
    shl  eax, 16
172
    add  eax, [gbxm1]
251
    add  eax, [gbxm1]
173
    mov  [gbxm1_shl16_gbxm1],   eax
252
    mov  [gbxm1_shl16_gbxm1],   eax
174
 
253
 
175
    mov  eax, [gbym1]
254
    mov  eax, [gbym1]
176
    shl  eax, 16
255
    shl  eax, 16
177
    add  eax, [gbym1]
256
    add  eax, [gbym1]
178
    mov  [gbym1_shl16_gbym1],   eax
257
    mov  [gbym1_shl16_gbym1],   eax
179
 
258
 
180
 
259
 
181
    mov  eax, [gw_mul_gs]
260
    mov  eax, [gw_mul_gs]
182
    add  eax, [gbxm1]
261
    add  eax, [gbxm1]
183
    add  eax, [gbxm1]
262
    add  eax, [gbxm1]
184
    add  eax, 5*2                                   ; skin width
263
    add  eax, 5*2                                   ; skin width
185
    mov  [window_width],    eax
264
    mov  [window_width],    eax
-
 
265
 
186
 
266
      mcall     48,4                                ; get skin header height
187
    mov  eax, [gh_mul_gs]
267
    add  eax, [gh_mul_gs]
188
    add  eax, [gbym1]
268
    add  eax, [gbym1]
189
    add  eax, [g_e]
269
    add  eax, [g_e]
190
    add  eax, 30
270
    add  eax, 30
191
    add  eax, 22+5                                  ; skin height
271
    add  eax, 5                                      ; skin height (bottom part)
192
    mov  [window_height],   eax
272
    mov  [window_height],   eax
193
 
273
 
194
      mcall     48, 5
274
      mcall     48, 5
195
    mov  dx,  ax
275
    mov  dx,  ax
196
    shr  eax, 16
276
    shr  eax, 16
197
    sub  dx,  ax
277
    sub  dx,  ax
198
    cmp  dx, word[window_width]                     ; does window fit to work area width?
278
    cmp  dx, word[window_width]                     ; does window fit to work area width?
199
     jnl @f
279
     jnl @f
200
    dec  [square_side_length]
280
    dec  [square_side_length]
201
;    dps  'snake: Window does not fit to screen.'
-
 
202
;    newline
-
 
203
;    dps  'Square_side_length was decreased.'
-
 
204
;    newline
-
 
205
;    dps  'Check you config file! (snake.ini)'
-
 
206
;    newline
-
 
207
     jmp Set_geometry
281
     jmp Set_geometry
208
  @@:
282
  @@:
209
 
283
 
210
    mov  cx,  bx
284
    mov  cx,  bx
211
    shr  ebx, 16
285
    shr  ebx, 16
212
    sub  cx,  bx
286
    sub  cx,  bx
213
    cmp  cx, word[window_height]                     ; does window fit to work area height?
287
    cmp  cx, word[window_height]                     ; does window fit to work area height?
214
     jnl @f
288
     jnl @f
215
    dec  [square_side_length]
289
    dec  [square_side_length]
216
;    dps  'snake: Window does not fit to screen.'
-
 
217
;    newline
-
 
218
;    dps  'Square_side_length was decreased.'
-
 
219
;    newline
-
 
220
;    dps  'Check you config file! (snake.ini)'
-
 
221
;    newline
-
 
222
     jmp Set_geometry
290
     jmp Set_geometry
223
  @@:
291
  @@:
224
 
292
 
225
    sub  dx,  word[window_width]
293
    sub  dx,  word[window_width]
226
    shr  dx,  1
294
    shr  dx,  1
227
    mov  word[wp_x],    dx
295
    mov  word[wp_x],    dx
228
    sub  cx,  word[window_height]
296
    sub  cx,  word[window_height]
229
    shr  cx,  1
297
    shr  cx,  1
230
    mov  dx,  cx
298
    mov  dx,  cx
231
    shr  cx,  1
299
    shr  cx,  1
232
    add  cx,  dx
300
    add  cx,  dx
233
    mov  word[wp_y],    cx
301
    mov  word[wp_y],    cx
234
 
302
 
235
    mov  [top_strings], 8
303
    mov  [top_strings], 8
236
    mov  eax, [window_height]
304
    mov  eax, [window_height]
237
    sub  eax, 50
305
    sub  eax, 50
238
    mov  [bottom_top_strings],  eax
306
    mov  [bottom_top_strings],  eax
239
    add  eax, 6
307
    add  eax, 6
240
    mov  [bottom_middle_strings],  eax
308
    mov  [bottom_middle_strings],  eax
241
    add  eax, 6
309
    add  eax, 6
242
    mov  [bottom_bottom_strings],  eax
310
    mov  [bottom_bottom_strings],  eax
243
 
311
 
244
    sub  eax, 4
312
    sub  eax, 4
245
    mov  [edit1+0x08],  eax
313
    mov  [edit1.top],   eax
-
 
314
 
-
 
315
 
-
 
316
    mov  eax, [g_s]
-
 
317
    shl  eax, 2
-
 
318
    sub  eax, 2
-
 
319
    mov  [button_width_short],  eax
-
 
320
    mov  eax, [g_s]
-
 
321
    shl  eax, 3
-
 
322
    add  eax, [g_s]
-
 
323
    sub  eax, 2
-
 
324
    mov  [button_width_long],   eax
-
 
325
    mov  eax, [g_s]
-
 
326
    sub  eax, 2
-
 
327
    mov  [button_height],   eax
-
 
328
 
-
 
329
    mov  bl,  0x10
-
 
330
    mov  cl,  0x08
-
 
331
 
-
 
332
    mov  al,  byte[g_s]
-
 
333
    mul  bl
-
 
334
    mov  bx,  ax
-
 
335
    add  bx,  word[gbxm1]
-
 
336
    inc  bx
-
 
337
 
-
 
338
    mov  al,  byte[g_s]
-
 
339
    mul  cl
-
 
340
    mov  cx,  ax
-
 
341
    add  cx,  word[gbym1]
-
 
342
    inc  cx
-
 
343
    
-
 
344
    mov  [button_x_left],   ebx
-
 
345
    mov  [button_y_top],    ecx
-
 
346
    
-
 
347
    add  ebx, [g_s]
-
 
348
    add  ebx, [g_s]
-
 
349
    add  ebx, [g_s]
-
 
350
    add  ebx, [g_s]
-
 
351
    add  ebx, [g_s]
-
 
352
    
-
 
353
    mov  [button_x_right],  ebx
-
 
354
    
-
 
355
    add  ecx,  [g_s]
-
 
356
    add  ecx,  [g_s]
-
 
357
    
-
 
358
    mov  [button_y_middle], ecx
-
 
359
    
-
 
360
    add  ecx,  [g_s]
-
 
361
    add  ecx,  [g_s]
-
 
362
    
-
 
363
    mov  [button_y_bottom], ecx
-
 
364
 
246
 
365
 
247
    ret
366
    ret
248
 
367
 
249
    ;;---Set_geometry------------------------------------------------------------------------------------------------------
368
    ;;---Set_geometry------------------------------------------------------------------------------------------------------
250
 
369
 
-
 
370
 
-
 
371
Increase_geometry:
-
 
372
    ;;===Increase_geometry=================================================================================================
-
 
373
 
-
 
374
    inc  [square_side_length]
-
 
375
      call      Set_geometry
-
 
376
      mcall     67,[wp_x],[wp_y],[window_width],[window_height]
-
 
377
 
-
 
378
    ret
-
 
379
 
-
 
380
    ;;---Increase_geometry-------------------------------------------------------------------------------------------------
-
 
381
 
-
 
382
 
-
 
383
Decrease_geometry:
-
 
384
    ;;===Decrease_geometry=================================================================================================
-
 
385
 
-
 
386
    cmp  [square_side_length],  MIN_SQUARE_SIDE_LENGTH
-
 
387
     je  @f
-
 
388
    dec  [square_side_length]
-
 
389
      call      Set_geometry
-
 
390
      mcall     67,[wp_x],[wp_y],[window_width],[window_height]
-
 
391
 
-
 
392
  @@:
-
 
393
    ret
-
 
394
 
-
 
395
    ;;---Decrease_geometry-------------------------------------------------------------------------------------------------
-
 
396
 
251
 
397
 
252
Draw_decorations:
398
Draw_decorations:
253
    ;;===Draw_decorations==================================================================================================
399
    ;;===Draw_decorations==================================================================================================
254
 
400
 
255
    mov  al, [decorations]
401
    mov  al, byte[decorations]
256
    dec  al
402
    dec  al
257
     jz  grid_lines
403
     jz  grid_lines
258
    dec  al
404
    dec  al
259
     jz  grid_lines_with_ends
405
     jz  grid_lines_with_ends
260
    dec  al
406
    dec  al
261
     jz  grid_lines_with_corners
407
     jz  grid_lines_with_corners
262
    dec  al
408
    dec  al
263
     jz  grid_dots
409
     jz  grid_dots
264
    dec  al
410
    dec  al
265
     jz  borders_lines
411
     jz  borders_lines
266
    dec  al
412
    dec  al
267
     jz  borders_lines_with_corners
413
     jz  borders_lines_with_corners
268
    dec  al
414
    dec  al
269
     jz  borders_dots
415
     jz  borders_dots
270
    dec  al
416
    dec  al
271
     jz  corners_dots
417
     jz  corners_dots
272
    dec  al
418
    dec  al
273
     jz  corners_inner
419
     jz  corners_inner
274
    dec  al
420
    dec  al
275
     jz  corners_outer
421
     jz  corners_outer
276
    dec  al
422
    dec  al
277
     jz  corners_crosses
423
     jz  corners_crosses
278
    ret
424
    ret
279
 
425
 
280
 
426
 
281
  grid_lines:
427
  grid_lines:
282
 
428
 
283
    mov  eax, 38
429
    mov  eax, 38
284
;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
430
;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1)
285
    mov  ebx, [gbxm1_shl16_gbxm1]
431
    mov  ebx, [gbxm1_shl16_gbxm1]
286
;mov  ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
432
;mov  ecx, (GRID_BEGIN_Y-1)*65536+(GRID_BEGIN_Y-1+GRID_HEIGHT*GRID_STEP)
287
    mov  ecx, [gbym1_shl16_gbym1]
433
    mov  ecx, [gbym1_shl16_gbym1]
288
    add  ecx, [gh_mul_gs]
434
    add  ecx, [gh_mul_gs]
289
    mov  edx, [decorations_color]
435
    mov  edx, [decorations_color]
290
    mov  esi, [g_w]
436
    mov  esi, GRID_WIDTH
291
    add  esi, 1
437
    add  esi, 1
292
 
438
 
293
  @@:
439
  @@:
294
      mcall
440
      mcall
295
    add  ebx, [gs_shl16_gs]
441
    add  ebx, [gs_shl16_gs]
296
    dec  esi
442
    dec  esi
297
     jnz @b
443
     jnz @b
298
 
444
 
299
;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
445
;mov  ebx, (GRID_BEGIN_X-1)*65536+(GRID_BEGIN_X-1+GRID_WIDTH*GRID_STEP)
300
    mov  ebx, [gbxm1_shl16_gbxm1]
446
    mov  ebx, [gbxm1_shl16_gbxm1]
301
    add  ebx, [gw_mul_gs]
447
    add  ebx, [gw_mul_gs]
302
    mov  ecx, [gbym1_shl16_gbym1]
448
    mov  ecx, [gbym1_shl16_gbym1]
303
    mov  esi, [g_h]
449
    mov  esi, GRID_HEIGHT
304
    add  esi, 1
450
    add  esi, 1
305
    
451
    
306
  @@:
452
  @@:
307
      mcall
453
      mcall
308
    add  ecx, [gs_shl16_gs]
454
    add  ecx, [gs_shl16_gs]
309
    dec  esi
455
    dec  esi
310
     jnz @b
456
     jnz @b
311
 
457
 
312
    ret
458
    ret
313
 
459
 
314
 
460
 
315
  grid_lines_with_ends:
461
  grid_lines_with_ends:
316
 
462
 
317
    mov  eax, 38
463
    mov  eax, 38
318
    mov  ebx, [gbxm1_shl16_gbxm1]
464
    mov  ebx, [gbxm1_shl16_gbxm1]
319
    mov  ecx, [gbym1]
465
    mov  ecx, [gbym1]
320
    sub  ecx, [g_e]
466
    sub  ecx, [g_e]
321
    shl  ecx, 16
467
    shl  ecx, 16
322
    add  ecx, [gbym1_plus_gh_mul_gs]
468
    add  ecx, [gbym1_plus_gh_mul_gs]
323
    add  ecx, [g_e]
469
    add  ecx, [g_e]
324
    mov  edx, [decorations_color]
470
    mov  edx, [decorations_color]
325
    mov  esi, [g_w]
471
    mov  esi, GRID_WIDTH
326
    add  esi, 1
472
    add  esi, 1
327
 
473
 
328
  @@:
474
  @@:
329
      mcall
475
      mcall
330
    add  ebx, [gs_shl16_gs]
476
    add  ebx, [gs_shl16_gs]
331
    dec  esi
477
    dec  esi
332
     jnz @b
478
     jnz @b
333
 
479
 
334
    mov  ebx, [gbxm1]
480
    mov  ebx, [gbxm1]
335
    sub  ebx, [g_e]
481
    sub  ebx, [g_e]
336
    shl  ebx, 16
482
    shl  ebx, 16
337
    add  ebx, [gbxm1_plus_gw_mul_gs]
483
    add  ebx, [gbxm1_plus_gw_mul_gs]
338
    add  ebx, [g_e]
484
    add  ebx, [g_e]
339
    mov  ecx, [gbym1_shl16_gbym1]
485
    mov  ecx, [gbym1_shl16_gbym1]
340
    mov  esi, [g_h]
486
    mov  esi, GRID_HEIGHT
341
    add  esi, 1
487
    add  esi, 1
342
    
488
    
343
  @@:
489
  @@:
344
      mcall
490
      mcall
345
    add  ecx, [gs_shl16_gs]
491
    add  ecx, [gs_shl16_gs]
346
    dec  esi
492
    dec  esi
347
     jnz @b
493
     jnz @b
348
 
494
 
349
    ret
495
    ret
350
 
496
 
351
 
497
 
352
  grid_lines_with_corners:
498
  grid_lines_with_corners:
353
 
499
 
354
      call      grid_lines
500
      call      grid_lines
355
      call      corners_outer
501
      call      corners_outer
356
 
502
 
357
    ret
503
    ret
358
 
504
 
359
 
505
 
360
  grid_dots:
506
  grid_dots:
361
 
507
 
362
    mov  eax, 1
508
    mov  eax, 1
363
    mov  ebx, [gbxm1]
509
    mov  ebx, [gbxm1]
364
    mov  ecx, [gbym1]
510
    mov  ecx, [gbym1]
365
    mov  edx, [decorations_color]
511
    mov  edx, [decorations_color]
366
 
512
 
367
  @@:
513
  @@:
368
      mcall
514
      mcall
369
    add  ebx, [g_s]
515
    add  ebx, [g_s]
370
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
516
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
371
     jng @b
517
     jng @b
372
    add  ecx, [g_s]
518
    add  ecx, [g_s]
373
    cmp  ecx, [gbym1_plus_gh_mul_gs]
519
    cmp  ecx, [gbym1_plus_gh_mul_gs]
374
     jg  @f
520
     jg  @f
375
    mov  ebx, [gbxm1]
521
    mov  ebx, [gbxm1]
376
     jmp @b
522
     jmp @b
377
 
523
 
378
  @@:
524
  @@:
379
    ret
525
    ret
380
 
526
 
381
 
527
 
382
  borders_lines:
528
  borders_lines:
383
 
529
 
384
    mov  eax, 38
530
    mov  eax, 38
385
    mov  ebx, [gbxm1_shl16_gbxm1]
531
    mov  ebx, [gbxm1_shl16_gbxm1]
386
    mov  ecx, [gbym1_shl16_gbym1]
532
    mov  ecx, [gbym1_shl16_gbym1]
387
    add  ecx, [gh_mul_gs]
533
    add  ecx, [gh_mul_gs]
388
    mov  edx, [decorations_color]
534
    mov  edx, [decorations_color]
389
      mcall
535
      mcall
390
 
536
 
391
    mov  ebx, [gbxm1_plus_gw_mul_gs]
537
    mov  ebx, [gbxm1_plus_gw_mul_gs]
392
    shl  ebx, 16
538
    shl  ebx, 16
393
    add  ebx, [gbxm1_plus_gw_mul_gs]
539
    add  ebx, [gbxm1_plus_gw_mul_gs]
394
      mcall
540
      mcall
395
 
541
 
396
    mov  ebx, [gbxm1_shl16_gbxm1]
542
    mov  ebx, [gbxm1_shl16_gbxm1]
397
    add  ebx, [gw_mul_gs]
543
    add  ebx, [gw_mul_gs]
398
    mov  ecx, [gbym1_shl16_gbym1]
544
    mov  ecx, [gbym1_shl16_gbym1]
399
      mcall
545
      mcall
400
 
546
 
401
    mov  ecx, [gbym1_plus_gh_mul_gs]
547
    mov  ecx, [gbym1_plus_gh_mul_gs]
402
    shl  ecx, 16
548
    shl  ecx, 16
403
    add  ecx, [gbym1_plus_gh_mul_gs]
549
    add  ecx, [gbym1_plus_gh_mul_gs]
404
      mcall
550
      mcall
405
 
551
 
406
    ret
552
    ret
407
 
553
 
408
 
554
 
409
  borders_lines_with_corners:
555
  borders_lines_with_corners:
410
 
556
 
411
      call      borders_lines
557
      call      borders_lines
412
      call      corners_outer
558
      call      corners_outer
413
 
559
 
414
    ret
560
    ret
415
 
561
 
416
 
562
 
417
  borders_dots:
563
  borders_dots:
418
 
564
 
419
    mov  eax, 1
565
    mov  eax, 1
420
    mov  ebx, [gbxm1]
566
    mov  ebx, [gbxm1]
421
    mov  ecx, [gbym1]
567
    mov  ecx, [gbym1]
422
    mov  edx, [decorations_color]
568
    mov  edx, [decorations_color]
423
  @@:
569
  @@:
424
      mcall
570
      mcall
425
    add  ebx, [g_s]
571
    add  ebx, [g_s]
426
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
572
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
427
     jng @b
573
     jng @b
428
 
574
 
429
    mov  ebx, [gbxm1]
575
    mov  ebx, [gbxm1]
430
    mov  ecx, [gbym1_plus_gh_mul_gs]
576
    mov  ecx, [gbym1_plus_gh_mul_gs]
431
  @@:
577
  @@:
432
      mcall
578
      mcall
433
    add  ebx, [g_s]
579
    add  ebx, [g_s]
434
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
580
    cmp  ebx, [gbxm1_plus_gw_mul_gs]
435
     jng @b
581
     jng @b
436
 
582
 
437
    mov  ebx, [gbxm1]
583
    mov  ebx, [gbxm1]
438
    mov  ecx, [gbym1]
584
    mov  ecx, [gbym1]
439
  @@:
585
  @@:
440
      mcall
586
      mcall
441
    add  ecx, [g_s]
587
    add  ecx, [g_s]
442
    cmp  ecx, [gbym1_plus_gh_mul_gs]
588
    cmp  ecx, [gbym1_plus_gh_mul_gs]
443
     jng @b
589
     jng @b
444
 
590
 
445
    mov  ebx, [gbxm1_plus_gw_mul_gs]
591
    mov  ebx, [gbxm1_plus_gw_mul_gs]
446
    mov  ecx, [gbym1]
592
    mov  ecx, [gbym1]
447
  @@:
593
  @@:
448
      mcall
594
      mcall
449
    add  ecx, [g_s]
595
    add  ecx, [g_s]
450
    cmp  ecx, [gbym1_plus_gh_mul_gs]
596
    cmp  ecx, [gbym1_plus_gh_mul_gs]
451
     jng @b
597
     jng @b
452
 
598
 
453
    ret
599
    ret
454
 
600
 
455
 
601
 
456
  corners_dots:
602
  corners_dots:
457
 
603
 
458
    mov  eax, 13
604
    mov  eax, 13
459
    mov  ebx, [gbxm1]
605
    mov  ebx, [gbxm1]
460
    dec  ebx
606
    dec  ebx
461
    shl  ebx, 16
607
    shl  ebx, 16
462
    add  ebx, 2
608
    add  ebx, 2
463
    mov  ecx, [gbym1]
609
    mov  ecx, [gbym1]
464
    dec  ecx
610
    dec  ecx
465
    shl  ecx, 16
611
    shl  ecx, 16
466
    add  ecx, 2
612
    add  ecx, 2
467
    mov  edx, [decorations_color]
613
    mov  edx, [decorations_color]
468
      mcall
614
      mcall
469
 
615
 
470
    mov  ebx, [gbxm1_plus_gw_mul_gs]
616
    mov  ebx, [gbxm1_plus_gw_mul_gs]
471
    shl  ebx, 16
617
    shl  ebx, 16
472
    add  ebx, 2
618
    add  ebx, 2
473
      mcall
619
      mcall
474
 
620
 
475
    mov  ebx, [gbxm1]
621
    mov  ebx, [gbxm1]
476
    dec  ebx
622
    dec  ebx
477
    shl  ebx, 16
623
    shl  ebx, 16
478
    add  ebx, 2
624
    add  ebx, 2
479
    mov  ecx, [gbym1_plus_gh_mul_gs]
625
    mov  ecx, [gbym1_plus_gh_mul_gs]
480
    shl  ecx, 16
626
    shl  ecx, 16
481
    add  ecx, 2
627
    add  ecx, 2
482
      mcall
628
      mcall
483
 
629
 
484
    mov  ebx, [gbxm1_plus_gw_mul_gs]
630
    mov  ebx, [gbxm1_plus_gw_mul_gs]
485
    shl  ebx, 16
631
    shl  ebx, 16
486
    add  ebx, 2
632
    add  ebx, 2
487
      mcall
633
      mcall
488
 
634
 
489
    ret
635
    ret
490
 
636
 
491
 
637
 
492
  corners_inner:
638
  corners_inner:
493
 
639
 
494
    mov  eax, 38
640
    mov  eax, 38
495
    mov  ebx, [gbxm1_shl16_gbxm1]
641
    mov  ebx, [gbxm1_shl16_gbxm1]
496
    add  ebx, [g_e]
642
    add  ebx, [g_e]
497
    mov  ecx, [gbym1_shl16_gbym1]
643
    mov  ecx, [gbym1_shl16_gbym1]
498
    mov  edx, [decorations_color]
644
    mov  edx, [decorations_color]
499
      mcall
645
      mcall
500
 
646
 
501
    mov  ecx, [gbym1_plus_gh_mul_gs]
647
    mov  ecx, [gbym1_plus_gh_mul_gs]
502
    shl  ecx, 16
648
    shl  ecx, 16
503
    add  ecx, [gbym1_plus_gh_mul_gs]
649
    add  ecx, [gbym1_plus_gh_mul_gs]
504
      mcall
650
      mcall
505
 
651
 
506
    mov  ebx, [gbxm1_plus_gw_mul_gs]
652
    mov  ebx, [gbxm1_plus_gw_mul_gs]
507
    sub  ebx, [g_e]
653
    sub  ebx, [g_e]
508
    shl  ebx, 16
654
    shl  ebx, 16
509
    add  ebx, [gbxm1_plus_gw_mul_gs]
655
    add  ebx, [gbxm1_plus_gw_mul_gs]
510
      mcall
656
      mcall
511
 
657
 
512
    mov  ecx, [gbym1_shl16_gbym1]
658
    mov  ecx, [gbym1_shl16_gbym1]
513
      mcall
659
      mcall
514
 
660
 
515
    mov  ebx, [gbxm1_shl16_gbxm1]
661
    mov  ebx, [gbxm1_shl16_gbxm1]
516
    mov  ecx, [gbym1_shl16_gbym1]
662
    mov  ecx, [gbym1_shl16_gbym1]
517
    add  ecx, [g_e]
663
    add  ecx, [g_e]
518
      mcall
664
      mcall
519
 
665
 
520
    mov  ebx, [gbxm1_plus_gw_mul_gs]
666
    mov  ebx, [gbxm1_plus_gw_mul_gs]
521
    shl  ebx, 16
667
    shl  ebx, 16
522
    add  ebx, [gbxm1_plus_gw_mul_gs]
668
    add  ebx, [gbxm1_plus_gw_mul_gs]
523
      mcall
669
      mcall
524
 
670
 
525
    mov  ecx, [gbym1_plus_gh_mul_gs]
671
    mov  ecx, [gbym1_plus_gh_mul_gs]
526
    sub  ecx, [g_e]
672
    sub  ecx, [g_e]
527
    shl  ecx, 16
673
    shl  ecx, 16
528
    add  ecx, [gbym1_plus_gh_mul_gs]
674
    add  ecx, [gbym1_plus_gh_mul_gs]
529
      mcall
675
      mcall
530
 
676
 
531
    mov  ebx, [gbxm1_shl16_gbxm1]
677
    mov  ebx, [gbxm1_shl16_gbxm1]
532
      mcall
678
      mcall
533
 
679
 
534
    ret
680
    ret
535
 
681
 
536
 
682
 
537
  corners_outer:
683
  corners_outer:
538
 
684
 
539
    mov  eax, 38
685
    mov  eax, 38
540
    mov  ebx, [gbxm1_shl16_gbxm1]
686
    mov  ebx, [gbxm1_shl16_gbxm1]
541
    sub  ebx, [g_e]
687
    sub  ebx, [g_e]
542
    mov  ecx, [gbym1_shl16_gbym1]
688
    mov  ecx, [gbym1_shl16_gbym1]
543
    mov  edx, [decorations_color]
689
    mov  edx, [decorations_color]
544
      mcall
690
      mcall
545
 
691
 
546
    mov  ecx, [gbym1_plus_gh_mul_gs]
692
    mov  ecx, [gbym1_plus_gh_mul_gs]
547
    shl  ecx, 16
693
    shl  ecx, 16
548
    add  ecx, [gbym1_plus_gh_mul_gs]
694
    add  ecx, [gbym1_plus_gh_mul_gs]
549
      mcall
695
      mcall
550
 
696
 
551
    mov  ebx, [gbxm1_plus_gw_mul_gs]
697
    mov  ebx, [gbxm1_plus_gw_mul_gs]
552
    shl  ebx, 16
698
    shl  ebx, 16
553
    add  ebx, [gbxm1_plus_gw_mul_gs]
699
    add  ebx, [gbxm1_plus_gw_mul_gs]
554
    add  ebx, [g_e]
700
    add  ebx, [g_e]
555
      mcall
701
      mcall
556
 
702
 
557
    mov  ecx, [gbym1_shl16_gbym1]
703
    mov  ecx, [gbym1_shl16_gbym1]
558
      mcall
704
      mcall
559
 
705
 
560
    mov  ebx, [gbxm1_shl16_gbxm1]
706
    mov  ebx, [gbxm1_shl16_gbxm1]
561
    mov  ecx, [gbym1_shl16_gbym1]
707
    mov  ecx, [gbym1_shl16_gbym1]
562
    sub  ecx, [g_e]
708
    sub  ecx, [g_e]
563
      mcall
709
      mcall
564
 
710
 
565
    mov  ebx, [gbxm1_plus_gw_mul_gs]
711
    mov  ebx, [gbxm1_plus_gw_mul_gs]
566
    shl  ebx, 16
712
    shl  ebx, 16
567
    add  ebx, [gbxm1_plus_gw_mul_gs]
713
    add  ebx, [gbxm1_plus_gw_mul_gs]
568
      mcall
714
      mcall
569
 
715
 
570
    mov  ecx, [gbym1_plus_gh_mul_gs]
716
    mov  ecx, [gbym1_plus_gh_mul_gs]
571
    shl  ecx, 16
717
    shl  ecx, 16
572
    add  ecx, [gbym1_plus_gh_mul_gs]
718
    add  ecx, [gbym1_plus_gh_mul_gs]
573
    add  ecx, [g_e]
719
    add  ecx, [g_e]
574
      mcall
720
      mcall
575
 
721
 
576
    mov  ebx, [gbxm1_shl16_gbxm1]
722
    mov  ebx, [gbxm1_shl16_gbxm1]
577
      mcall
723
      mcall
578
 
724
 
579
    ret
725
    ret
580
 
726
 
581
 
727
 
582
  corners_crosses:
728
  corners_crosses:
583
 
729
 
584
      call      corners_inner
730
      call      corners_inner
585
      call      corners_outer
731
      call      corners_outer
586
 
732
 
587
    ret
733
    ret
588
 
734
 
589
 
735
 
590
    ;;---Draw_decorations--------------------------------------------------------------------------------------------------
736
    ;;---Draw_decorations--------------------------------------------------------------------------------------------------
591
 
737
 
592
 
738
 
593
Draw_square:
739
Draw_square:
594
    ;;===Draw_square=======================================================================================================
740
    ;;===Draw_square=======================================================================================================
595
    ;; bl   -   x_coord
741
    ;; bl   -   x_coord
596
    ;; bh   -   y_coord
742
    ;; bh   -   y_coord
597
    ;; edx  -   color
743
    ;; edx  -   color
-
 
744
 
-
 
745
    push eax ebx ecx edx
598
 
746
 
599
    mov  cl,  bh
747
    mov  cl,  bh
600
 
748
 
601
    mov  al,  byte[g_s]
749
    mov  al,  byte[g_s]
602
    mul  bl
750
    mul  bl
603
    mov  bx,  ax
751
    mov  bx,  ax
604
    add  bx,  word[gbxm1]
752
    add  bx,  word[gbxm1]
605
    inc  bx
753
    inc  bx
606
    shl  ebx, 16
754
    shl  ebx, 16
607
    add  ebx, [g_s]
755
    add  ebx, [g_s]
608
    dec  ebx
756
    dec  ebx
609
 
757
 
610
    mov  al,  byte[g_s]
758
    mov  al,  byte[g_s]
611
    mul  cl
759
    mul  cl
612
    mov  cx,  ax
760
    mov  cx,  ax
613
    add  cx,  word[gbym1]
761
    add  cx,  word[gbym1]
614
    inc  cx
762
    inc  cx
615
    shl  ecx, 16
763
    shl  ecx, 16
616
    add  ecx, [g_s]
764
    add  ecx, [g_s]
617
    dec  ecx
765
    dec  ecx
618
        
766
 
619
      mcall     13
767
      mcall     13
-
 
768
 
-
 
769
    pop  edx ecx ebx eax
620
 
770
 
621
    ret
771
    ret
622
 
772
 
623
    ;;---Draw_square-------------------------------------------------------------------------------------------------------
773
    ;;---Draw_square-------------------------------------------------------------------------------------------------------
624
    
774
    
625
    
775
    
626
Draw_menu_esc:
776
Draw_menu_esc:
627
    ;;===Draw_menu_esc=====================================================================================================
777
    ;;===Draw_menu_esc=====================================================================================================
628
 
778
 
629
    mov  ebx, [window_width]
779
    mov  ebx, [window_width]
630
    shr  ebx, 1
780
    shr  ebx, 1
631
    sub  ebx, (string_apply_name_enter-string_menu_esc-1)*3+6
781
    sub  ebx, string_menu_esc.size*3+6
632
    shl  ebx, 16
782
    shl  ebx, 16
633
    add  ebx, dword[top_strings]
783
    add  ebx, dword[top_strings]
634
      mcall     4, ,[navigation_strings_color],string_menu_esc
784
      mcall     4, ,[navigation_strings_color],string_menu_esc
635
    
785
    
636
    ret
786
    ret
637
    
787
    
638
    ;;---Draw_menu_esc-----------------------------------------------------------------------------------------------------
788
    ;;---Draw_menu_esc-----------------------------------------------------------------------------------------------------
639
 
789
 
640
 
790
 
641
Draw_score_string:
791
Draw_score_string:
642
    ;;===Draw_score_string=================================================================================================
792
    ;;===Draw_score_string=================================================================================================
643
 
793
 
644
    mov  ebx, [window_width]
794
    mov  ebx, [window_width]
645
    shr  ebx, 3
795
    shr  ebx, 3
646
    sub  ebx, 5
796
    sub  ebx, 5
647
    shl  ebx, 16
797
    shl  ebx, 16
648
    add  ebx, dword[bottom_top_strings]
798
    add  ebx, dword[bottom_top_strings]
649
      mcall     4, ,[score_string_color],string_score
799
      mcall     4, ,[score_string_color],string_score
650
      
800
 
651
    ret
801
    ret
652
    
802
 
653
    ;;---Draw_score_string-------------------------------------------------------------------------------------------------
803
    ;;---Draw_score_string-------------------------------------------------------------------------------------------------
654
    
804
    
655
    
805
    
656
Draw_score_number:
806
Draw_score_number:
657
    ;;===Draw_score_number================================================================================================= 
807
    ;;===Draw_score_number================================================================================================= 
658
 
808
 
659
    mov  edx, [window_width]
809
    mov  edx, [window_width]
660
    shr  edx, 3
810
    shr  edx, 3
661
    sub  edx, 6
811
    sub  edx, 5+1
662
    add  edx, (string_hi_score-string_score)*6
812
    add  edx, string_score.size*6
663
    shl  edx, 16
813
    shl  edx, 16
664
    add  edx, dword[bottom_top_strings]
814
    add  edx, dword[bottom_top_strings]
665
      mcall     47,0x00070000,[score], ,[score_number_color],[background_color]
815
      mcall     47,0x00070000,[score], ,[score_number_color],[background_color]
666
        
816
 
667
    ret
817
    ret
668
        
818
 
669
    ;;---Draw_score_number-------------------------------------------------------------------------------------------------
819
    ;;---Draw_score_number-------------------------------------------------------------------------------------------------
670
 
820
 
671
 
821
 
672
Draw_hiscore_string:
822
Draw_hiscore_string:
673
    ;;===Draw_hiscore_string===============================================================================================
823
    ;;===Draw_hiscore_string===============================================================================================
674
 
824
 
675
    mov  ebx, [window_width]
825
    mov  ebx, [window_width]
676
    shr  ebx, 3
826
    shr  ebx, 3
677
    neg  ebx
827
    neg  ebx
678
    add  ebx, [window_width]
828
    add  ebx, [window_width]
679
    sub  ebx, (string_player-string_hi_score)*6+7*6+5
829
    sub  ebx, string_hi_score.size*6+7*6+5
680
    shl  ebx, 16
830
    shl  ebx, 16
681
    add  ebx, dword[bottom_top_strings]
831
    add  ebx, dword[bottom_top_strings]
682
      mcall     4, ,[hiscore_string_color],string_hi_score
832
      mcall     4, ,[hiscore_string_color],string_hi_score
683
    
833
    
684
    ret
834
    ret
685
    
835
    
686
    ;;---Draw_hiscore_string-----------------------------------------------------------------------------------------------
836
    ;;---Draw_hiscore_string-----------------------------------------------------------------------------------------------
687
 
837
 
688
    
838
 
689
Draw_hiscore_number:
839
Draw_hiscore_number:
690
    ;;===Draw_hiscore_number===============================================================================================
840
    ;;===Draw_hiscore_number===================================================================================================
691
 
841
 
692
    mov  edx, [window_width]
842
    mov  edx, [window_width]
693
    shr  edx, 3
843
    shr  edx, 3
694
    neg  edx
844
    neg  edx
695
    add  edx, [window_width]
845
    add  edx, [window_width]
696
    sub  edx, 7*6+6
846
    sub  edx, 7*6+6
697
    shl  edx, 16
847
    shl  edx, 16
698
    add  edx, dword[bottom_top_strings]
848
    add  edx, dword[bottom_top_strings]
-
 
849
    
-
 
850
    cmp  [play_mode],   CLASSIC_MODE
-
 
851
     jne @f
-
 
852
    mov  ecx, [hi_score_classic]
-
 
853
     jmp .done
-
 
854
  @@:
-
 
855
    mov  ecx, [hi_score_levels]
-
 
856
 
-
 
857
  .done:
699
      mcall     47,0x00070000,[hi_score], ,[hiscore_number_color]
858
      mcall     47,0x00070000, , ,[hiscore_number_color]
700
    
859
    
701
    ret
860
    ret
702
    
861
    
703
    ;;---Draw_hiscore_number-----------------------------------------------------------------------------------------------
862
    ;;---Draw_hiscore_number---------------------------------------------------------------------------------------------------
704
    
863
 
705
    
864
 
706
Draw_champion_string:
865
Draw_champion_string:
707
    ;;===Draw_champion_string==============================================================================================
866
    ;;===Draw_champion_string==================================================================================================
708
 
867
 
709
    mov  ebx, [window_width]
868
    mov  ebx, [window_width]
710
    shr  ebx, 3
869
    shr  ebx, 3
711
    neg  ebx
870
    neg  ebx
712
    add  ebx, [window_width]
871
    add  ebx, [window_width]
713
    sub  ebx, (string_level-string_champion)*6+7*6+5
872
    sub  ebx, string_champion.size*6+7*6+5
714
    shl  ebx, 16
873
    shl  ebx, 16
715
    add  ebx, dword[bottom_bottom_strings]
874
    add  ebx, dword[bottom_bottom_strings]
716
      mcall     4, ,[champion_string_color],string_champion
875
      mcall     4, ,[champion_string_color],string_champion
717
 
876
 
718
    ret
877
    ret
719
 
878
 
720
    ;;---Draw_champion_string----------------------------------------------------------------------------------------------
879
    ;;---Draw_champion_string----------------------------------------------------------------------------------------------
721
 
880
 
722
 
881
 
723
Draw_champion_name:
882
Draw_champion_name:
724
    ;;===Draw_champion_name================================================================================================
883
    ;;===Draw_champion_name================================================================================================
725
 
884
 
726
    mov  ebx, [window_width]
885
    mov  ebx, [window_width]
727
    shr  ebx, 3
886
    shr  ebx, 3
728
    neg  ebx
887
    neg  ebx
729
    add  ebx, [window_width]
888
    add  ebx, [window_width]
730
    sub  ebx, (press_to_start-champion_name)*6+7*6+6
889
    sub  ebx, CHAMPION_NAME_LENGTH/2*6+7*6+6                ; there is no difference between length of champion names for other play_modes
731
    add  ebx, (press_to_start-champion_name)*6
890
    add  ebx, CHAMPION_NAME_LENGTH/2*6
732
    shl  ebx, 16
891
    shl  ebx, 16
733
    add  ebx, dword[bottom_bottom_strings]
892
    add  ebx, dword[bottom_bottom_strings]
-
 
893
 
-
 
894
    cmp  [play_mode],   CLASSIC_MODE
-
 
895
     jne @f
-
 
896
    mov  edx, champion_name_classic
-
 
897
     jmp .done
-
 
898
  @@:
-
 
899
    mov  edx, champion_name_levels
-
 
900
 
-
 
901
  .done:
734
      mcall     4, ,[champion_name_color],champion_name
902
      mcall     4, ,[champion_name_color],
735
 
903
 
736
    ret
904
    ret
737
 
905
 
738
    ;;---Draw_champion_name------------------------------------------------------------------------------------------------
906
    ;;---Draw_champion_name------------------------------------------------------------------------------------------------
739
 
907
 
740
 
908
 
741
Draw_picture:
909
Draw_picture:
742
    ;;===Draw_picture======================================================================================================
910
    ;;===Draw_picture======================================================================================================
743
    ;;  in  :
911
    ;;  in  :
744
    ;;           ax =   number of left square *0x100+ picture width (in squares)
912
    ;;           ax =   number of left square *0x100+ picture width (in squares)
745
    ;;           cx =   number of top square *0x100+ picture height (in squares)
913
    ;;           cx =   number of top square *0x100+ picture height (in squares)
746
    ;;          edx =   picture color
914
    ;;          edx =   picture color
747
    ;;          esi =   pointer to picture data
915
    ;;          esi =   pointer to picture data
748
    ;;
916
    ;;
749
 
917
 
750
    add  al,  ah
918
    add  al,  ah
751
    add  cl,  ch
919
    add  cl,  ch
752
    mov  bh,  ch
920
    mov  bh,  ch
753
 
921
 
754
  .draw:
922
  .draw:
755
    mov  bl,  ah
923
    mov  bl,  ah
756
    
924
    
757
  .loop:
925
  .loop:
758
    cmp  byte[esi], 0
926
    cmp  byte[esi], 0
759
     jz  @f
927
     jz  @f
760
    push eax ebx ecx esi
928
    push eax ebx ecx esi
761
      call      Draw_square
929
      call      Draw_square
762
    pop  esi ecx ebx eax
930
    pop  esi ecx ebx eax
763
    
931
    
764
  @@:
932
  @@:
765
    inc  esi
933
    inc  esi
766
    inc  bl
934
    inc  bl
767
    cmp  bl,  al
935
    cmp  bl,  al
768
     jne .loop
936
     jne .loop
769
    
937
    
770
    inc  bh
938
    inc  bh
771
    cmp  bh,  cl
939
    cmp  bh,  cl
772
     jne .draw
940
     jne .draw
773
    ret
941
    ret
774
 
942
 
775
    ;;---Draw_picture------------------------------------------------------------------------------------------------------
943
    ;;---Draw_picture------------------------------------------------------------------------------------------------------
776
 
944
 
777
 
945
 
778
Draw_on_map:
946
Draw_on_map:
779
    ;;===Draw_on_map=======================================================================================================
947
    ;;===Draw_on_map=======================================================================================================
780
    ;;  in  :
948
    ;;  in  :
781
    ;;           al =   x coord
949
    ;;           al =   x coord
782
    ;;           ah =   y coord
950
    ;;           ah =   y coord
783
    ;;           cl =   value to draw
951
    ;;           cl =   value to draw
784
    ;;
952
    ;;
-
 
953
 
-
 
954
    push eax ebx edx
785
 
955
 
786
    and  eax, 0x0000ffff
956
    and  eax, 0x0000ffff
787
    xor  bx,  bx
957
    xor  bx,  bx
788
    mov  bl,  al
958
    mov  bl,  al
789
    shr  ax,  8
959
    shr  ax,  8
790
    mov  dx,  word[g_w]
960
    mov  dx,  GRID_WIDTH
791
    mul  dx
961
    mul  dx
792
    add  ax,  bx
962
    add  ax,  bx
793
    mov  edi, field_map
963
    mov  edx, field_map
794
    add  edi, eax
964
    add  edx, eax
795
    mov  [edi], cl
965
    mov  [edx], cl
-
 
966
    
-
 
967
    pop edx ebx eax
796
 
968
 
797
    ret
969
    ret
798
 
970
 
799
    ;;---Draw_on_map-------------------------------------------------------------------------------------------------------
971
    ;;---Draw_on_map-----------------------------------------------------------------------------------------------------------
800
 
972
 
801
 
973
 
802
Get_from_map:
974
Get_from_map:
803
    ;;===Get_from_map======================================================================================================
975
    ;;===Get_from_map==========================================================================================================
804
    ;;  in  :
976
    ;;  in  :
805
    ;;           al =   x coord
977
    ;;           al =   x coord
806
    ;;           ah =   y coord
978
    ;;           ah =   y coord
807
    ;;  out :
979
    ;;  out :
808
    ;;           bl =   value on map
980
    ;;           bl =   value on map
809
    ;;
981
    ;;
810
 
982
 
811
    push eax
983
    push eax
812
    
984
    
813
    and  eax, 0x0000ffff
985
    and  eax, 0x0000ffff
814
    xor  bx,  bx
986
    xor  bx,  bx
815
    mov  bl,  al
987
    mov  bl,  al
816
    shr  ax,  8
988
    shr  ax,  8
817
    mov  dx,  word[g_w]
989
    mov  dx,  GRID_WIDTH
818
    mul  dx
990
    mul  dx
819
    add  ax,  bx
991
    add  ax,  bx
820
    mov  edi, field_map
992
    mov  edi, field_map
821
    add  edi, eax
993
    add  edi, eax
822
    mov  bl,  [edi]
994
    mov  bl,  [edi]
823
 
995
 
824
    pop  eax
996
    pop  eax
825
 
997
 
826
    ret
998
    ret
827
 
999
 
-
 
1000
    ;;---Get_from_map-----------------------------------------------------------------------------------------------------------
-
 
1001
 
-
 
1002
 
-
 
1003
Load_level:
-
 
1004
    ;;===Load_level=============================================================================================================
-
 
1005
    ;;  in  :
-
 
1006
    ;;          cur_level_number    =   level number to load
-
 
1007
    ;;
-
 
1008
 
-
 
1009
    mov  eax, [cur_level_number]
-
 
1010
    mov  edx, stage_00
-
 
1011
  @@:
-
 
1012
    test al,  al
-
 
1013
     jz  @f
-
 
1014
    add  edx, 410
-
 
1015
    dec  al
-
 
1016
     jmp @b
-
 
1017
  @@:
-
 
1018
  
-
 
1019
    mov  [cur_level],   edx
-
 
1020
 
-
 
1021
    mov  esi, edx
-
 
1022
    add  esi, LEVEL.field
-
 
1023
    mov  edi, field_map
-
 
1024
    mov  ecx, GRID_WIDTH*GRID_HEIGHT/4
-
 
1025
    rep  movsd
-
 
1026
 
-
 
1027
    mov  esi, edx
-
 
1028
    add  esi, LEVEL.snake_dots
-
 
1029
    mov  edi, snake_dots
-
 
1030
    mov  ecx, 3
-
 
1031
    rep  movsw
-
 
1032
    
-
 
1033
    mov  esi, edx
-
 
1034
    add  esi, LEVEL.snake_direction
-
 
1035
    mov  eax, [esi]
-
 
1036
    mov  [snake_direction], eax
-
 
1037
    
-
 
1038
    mov  esi, edx
-
 
1039
    add  esi, LEVEL.snake_direction_next
-
 
1040
    mov  eax, [esi]
-
 
1041
    mov  [snake_direction_next],    eax
-
 
1042
 
-
 
1043
    mov  esi, edx
-
 
1044
    add  esi, LEVEL.number_of_stones
-
 
1045
    mov  eax, [esi]
-
 
1046
    mov  [number_of_free_dots], GRID_WIDTH*GRID_HEIGHT-3
-
 
1047
    sub  [number_of_free_dots], eax
-
 
1048
    
-
 
1049
    mov  ax,  word[snake_dots]
-
 
1050
    mov  cl,  1
-
 
1051
      call      Draw_on_map
-
 
1052
    mov  ax,  word[snake_dots+2]
-
 
1053
    mov  cl,  1
-
 
1054
      call      Draw_on_map
-
 
1055
    mov  ax,  word[snake_dots+4]
-
 
1056
    mov  cl,  1
-
 
1057
      call      Draw_on_map
-
 
1058
 
-
 
1059
    mov  [action],  0
-
 
1060
    mov  [snake_length_x2], 6
-
 
1061
 
-
 
1062
    ret
-
 
1063
 
-
 
1064
    ;;---Load_level-------------------------------------------------------------------------------------------------------------
-
 
1065
 
-
 
1066
 
-
 
1067
Draw_stones:
-
 
1068
    ;;===Draw_stones============================================================================================================
-
 
1069
 
-
 
1070
    mov  ax,  0*0x100+GRID_WIDTH
-
 
1071
    mov  cx,  0*0x100+GRID_HEIGHT
-
 
1072
    mov  edx, [stone_color]
-
 
1073
    mov  esi, [cur_level]
-
 
1074
    add  esi, LEVEL.field
-
 
1075
      call      Draw_picture
-
 
1076
 
-
 
1077
    ret
828
    ;;---Get_from_map------------------------------------------------------------------------------------------------------
-
 
-
 
1078
 
-
 
1079
    ;;---Draw_stones------------------------------------------------------------------------------------------------------------
-
 
1080
 
-
 
1081
 
-
 
1082
Hide_cursor:
-
 
1083
    ;;===Hide_cursor===========================================================================================================
-
 
1084
 
-
 
1085
      mcall     37,5,[cursor_handle]
-
 
1086
 
-
 
1087
    ret
-
 
1088
 
-
 
1089
    ;;---Show_cursor-----------------------------------------------------------------------------------------------------------
-
 
1090
 
-
 
1091
 
-
 
1092
Show_cursor:
-
 
1093
    ;;===Hide_cursor===========================================================================================================
-
 
1094
 
-
 
1095
      mcall     37,5,0
-
 
1096
 
-
 
1097
    ret
-
 
1098
 
-
 
1099
    ;;---Show_cursor-----------------------------------------------------------------------------------------------------------
829
 
1100
 
830
 
1101
 
831
;;---Some_functions--------------------------------------------------------------------------------------------------------
1102
;;---Some_functions-------------------------------------------------------------------------------------------------------------
832
 
1103
 
833
 
1104
 
834
;;===Variables=============================================================================================================
1105
;;===Variables==================================================================================================================
835
 
1106
 
836
window_title                db      'Snake',0
1107
window_title                db      'Snake',0
837
window_style                dd      0x34000000
1108
window_style                dd      0x34000000
838
time_before_waiting         dd      0x0
1109
time_before_waiting         dd      0x0
839
time_to_wait                dd      0x0
1110
time_to_wait                dd      0x0
840
time_wait_limit             dd      101
1111
time_wait_limit             dd      101
-
 
1112
 
-
 
1113
play_mode                   dd      0x0
-
 
1114
 
841
 
1115
square_side_length          dd      19
842
 
1116
 
843
gbxm1                       dd      30
1117
gbxm1                       dd      30
844
gbym1                       dd      30
1118
gbym1                       dd      30
845
g_w                         dd      29
-
 
846
g_h                         dd      15
-
 
847
g_e                         dd      13
-
 
848
 
1119
 
849
field_map                   db      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
850
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
851
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
852
                                    0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
853
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
854
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
855
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
856
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
857
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
858
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
859
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
860
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
861
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
862
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
-
 
863
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
 
864
 
-
 
865
string_score                db      'SCORE :',0
1120
szZ string_score            ,'SCORE : '
866
string_hi_score             db      'HI-SCORE :',0
1121
szZ string_hi_score         ,'HI-SCORE : '
867
string_player               db      'PLAYER :',0
1122
;szZ string_player           ,'PLAYER :'
868
string_champion             db      'CHAMPION :',0
1123
szZ string_champion         ,'CHAMPION : '
869
string_level                db      'LEVEL :',0
1124
szZ string_level            ,'LEVEL : '
-
 
1125
;szZ string_hi_level         ,'HI-LEVEL :'
870
string_pause_space          db      'PAUSE - ',0x27,'SPACE',0x27,0
1126
szZ string_pause_space      ,'PAUSE - ',0x27,'SPACE',0x27
871
string_resume_space         db      'RESUME - ',0x27,'SPACE',0x27,0
1127
szZ string_resume_space     ,'RESUME - ',0x27,'SPACE',0x27
872
string_menu_esc             db      'MENU - ',0x27,'ESC',0x27,0
1128
szZ string_menu_esc         ,'MENU - ',0x27,'ESC',0x27
873
string_apply_name_enter     db      'APPLY NAME - ',0x27,'ENTER',0x27,0
1129
szZ string_apply_name_enter ,'APPLY NAME - ',0x27,'ENTER',0x27
874
press_to_start              db      'PRESS ',0x27,'SPACE',0x27,' OR ',0x27,'ENTER',0x27,' TO START',0
1130
szZ press_to_start          ,'PRESS ',0x27,'ENTER',0x27,' TO START'
875
press_esc_to_exit           db      'PRESS ',0x27,'ESC',0x27,' TO EXIT',0
1131
szZ press_esc_to_exit       ,'PRESS ',0x27,'ESC',0x27,' TO EXIT'
876
;press_F2_to_options         db      'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0
1132
;press_F2_to_options         db      'PRESS ',0x27,'F2',0x27,' TO OPTIONS',0
877
 
1133
 
878
string_congratulations      db      '   Congratulations!!! New hi-score is :',0
1134
szZ string_congratulations  ,'   Congratulations!!! New hi-score is : '
879
string_enter_your_name      db      'You are the champion! Enter your name :',0
-
 
880
strings_end:
1135
szZ string_enter_your_name  ,'You are the champion! Enter your name : '
881
 
1136
 
882
snake_dots                  db      3,3, 4,3, 5,3,  865    dup (0)
1137
szZ string_button_play      ,'PLAY'
883
snake_napravlenie           db      3
1138
szZ string_button_exit      ,'EXIT'
884
snake_napravlenie_next      db      3
1139
szZ string_button_inc       ,'+INC+'
-
 
1140
szZ string_button_dec       ,'-dec-'
-
 
1141
szZ string_button_pm_classic,'CLASSIC mode'
885
snake_length_x2             dd      6
1142
szZ string_button_pm_levels ,'LEVELS mode'
886
 
-
 
887
score                       dd      0
-
 
888
hi_score                    dd      777
1143
 
889
is_new_record               db      0
1144
is_new_record               dd      0
890
 
1145
 
891
action                      db      0
1146
action                      dd      0
892
 
1147
 
893
picture_first_menu_snake    db      1,1,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0,1,1,1,1,1,\
-
 
894
                                    1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1148
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,\
895
                                    1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1149
                                    1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,1,\
896
                                    1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,0,\
1150
                                    1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,\
897
                                    0,0,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,\
1151
                                    0,0,0,1,0,1,0,1,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,0,\
-
 
1152
                                    1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,1,1
898
                                    1,1,1,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1
1153
                                    
899
 
1154
 
900
picture_first_menu_version  db      1,1,1,1,0,0,0,1,1,1,1,\
1155
picture_first_menu_version  db      1,1,1,1,0,0,0,1,1,1,1,\
901
                                    1,0,0,1,0,0,0,0,0,0,1,\
1156
                                    1,0,0,1,0,0,0,1,0,0,0,\
902
                                    1,0,0,1,0,0,0,0,1,1,1,\
1157
                                    1,0,0,1,0,0,0,1,1,1,1,\
903
                                    1,0,0,1,0,0,0,0,0,0,1,\
1158
                                    1,0,0,1,0,0,0,0,0,0,1,\
904
                                    1,1,1,1,0,1,0,1,1,1,1
1159
                                    1,1,1,1,0,1,0,1,1,1,1
941
                                    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1532
.number_of_stones           dd      110
942
 
1533
 
943
background_color            dd      0x000000
1534
background_color            dd      0x000000
944
decorations_color           dd      0x00000000
1535
decorations_color           dd      0x00000000
945
snake_color                 dd      0x000000
1536
snake_color                 dd      0x000000
946
snake_head_color            dd      0x000000
1537
snake_head_color            dd      0x000000
947
snake_picture_color         dd      0x000000
1538
snake_picture_color         dd      0x000000
948
version_picture_color       dd      0x000000
1539
version_picture_color       dd      0x000000
949
pause_picture_color         dd      0x000000
1540
pause_picture_color         dd      0x000000
950
game_over_picture_color     dd      0x000000
1541
game_over_picture_color     dd      0x000000
-
 
1542
you_win_picture_color       dd      0x000000
951
eat_color                   dd      0x000000
1543
eat_color                   dd      0x000000
952
navigation_strings_color    dd      0x80000000
1544
navigation_strings_color    dd      0x80000000
953
game_over_strings_color     dd      0x80000000
1545
game_over_strings_color     dd      0x80000000
954
score_string_color          dd      0x80000000
1546
score_string_color          dd      0x80000000
955
hiscore_string_color        dd      0x80000000
1547
hiscore_string_color        dd      0x80000000
956
champion_string_color       dd      0x80000000
1548
champion_string_color       dd      0x80000000
957
game_over_hiscore_color     dd      0x80000000
1549
game_over_hiscore_color     dd      0x80000000
958
score_number_color          dd      0x40000000
1550
score_number_color          dd      0x40000000
959
hiscore_number_color        dd      0x00000000
1551
hiscore_number_color        dd      0x00000000
960
champion_name_color         dd      0x80000000
1552
champion_name_color         dd      0x80000000
-
 
1553
button_color                dd      0x000000
-
 
1554
button_text_color           dd      0x80000000
-
 
1555
stone_color                 dd      0x000000
-
 
1556
splash_background_color     dd      0x000000
-
 
1557
splash_level_string_color   dd      0x000000
-
 
1558
splash_level_number_color   dd      0x000000
-
 
1559
level_string_color          dd      0x80000000
-
 
1560
level_number_color          dd      0x00000000
-
 
1561
 
961
 
1562
 
962
align 4
1563
align 4
963
@IMPORT:
1564
@IMPORT:
964
 
1565
 
965
library \
1566
library \
966
        libini      ,   'libini.obj'        ,\
1567
        libini      ,   'libini.obj'        ,\
967
        box_lib     ,   'box_lib.obj'
1568
        box_lib     ,   'box_lib.obj'
968
 
1569
 
969
import  libini,\
1570
import  libini,\
970
    ini.get_str     ,   'ini_get_str'       ,\
1571
    ini.get_str     ,   'ini_get_str'       ,\
971
    ini.get_int     ,   'ini_get_int'       ,\
1572
    ini.get_int     ,   'ini_get_int'       ,\
972
    ini.set_str     ,   'ini_set_str'       ,\
1573
    ini.set_str     ,   'ini_set_str'       ,\
973
    ini.set_int     ,   'ini_set_int'       ,\
1574
    ini.set_int     ,   'ini_set_int'       ,\
974
    ini.get_color   ,   'ini_get_color'
1575
    ini.get_color   ,   'ini_get_color'
975
 
1576
 
976
import  box_lib,\
1577
import  box_lib,\
977
    edit_box.draw   ,   'edit_box'          ,\
1578
    edit_box.draw   ,   'edit_box'          ,\
978
    edit_box.key    ,   'edit_box_key'      ,\
1579
    edit_box.key    ,   'edit_box_key'      ,\
979
    edit_box.mouse  ,   'edit_box_mouse'
1580
    edit_box.mouse  ,   'edit_box_mouse'
980
 
1581
 
981
bFirstDraw  db  0
1582
bFirstDraw  db  0
982
 
1583
 
983
aPreferences                db      'Preferences',0
1584
aPreferences                db      'Preferences',0
984
aSpeed                      db      'Speed',0
1585
aSpeed                      db      'Speed',0
985
aSquare_side_length         db      'Square_side_length',0
-
 
986
aSpace_between_squares      db      'Space_between_squares',0
-
 
987
aTheme                      db      'Theme',0
1586
aTheme                      db      'Theme',0
988
 
1587
 
989
aTheme_name                 db      32  dup (0)
1588
aTheme_name                 db      32  dup (0)
990
aDecorations                db      'Decorations',0
1589
aDecorations                db      'Decorations',0
991
aBackground_color           db      'Background_color',0
1590
aBackground_color           db      'Background_color',0
992
aDecorations_color          db      'Decorations_color',0
1591
aDecorations_color          db      'Decorations_color',0
993
aSnake_color                db      'Snake_color',0
1592
aSnake_color                db      'Snake_color',0
994
aSnake_head_color           db      'Snake_head_color',0
1593
aSnake_head_color           db      'Snake_head_color',0
995
aSnake_picture_color        db      'Snake_picture_color',0
1594
aSnake_picture_color        db      'Snake_picture_color',0
996
aVersion_picture_color      db      'Version_picture_color',0
1595
aVersion_picture_color      db      'Version_picture_color',0
997
aPause_picture_color        db      'Pause_picture_color',0
1596
aPause_picture_color        db      'Pause_picture_color',0
998
aGame_over_picture_color    db      'Game_over_picture_color',0
1597
aGame_over_picture_color    db      'Game_over_picture_color',0
-
 
1598
aYou_win_picture_color      db      'You_win_picture_color',0
999
aEat_color                  db      'Eat_color',0
1599
aEat_color                  db      'Eat_color',0
1000
aNavigation_strings_color   db      'Navigation_string_color',0
1600
aNavigation_strings_color   db      'Navigation_string_color',0
1001
aGame_over_strings_color    db      'Game_over_string_color',0
1601
aGame_over_strings_color    db      'Game_over_string_color',0
1002
aScore_string_color         db      'Score_string_color',0
1602
aScore_string_color         db      'Score_string_color',0
1003
aHiscore_string_color       db      'Hiscore_string_color',0
1603
aHiscore_string_color       db      'Hiscore_string_color',0
1004
aChampion_string_color      db      'Champion_string_color',0
1604
aChampion_string_color      db      'Champion_string_color',0
1005
aGame_over_hiscore_color    db      'Game_over_hiscore_color',0
1605
aGame_over_hiscore_color    db      'Game_over_hiscore_color',0
1006
aScore_number_color         db      'Score_number_color',0
1606
aScore_number_color         db      'Score_number_color',0
1007
aHiscore_number_color       db      'Hiscore_number_color',0
1607
aHiscore_number_color       db      'Hiscore_number_color',0
1008
aChampion_name_color        db      'Champion_name_color',0
1608
aChampion_name_color        db      'Champion_name_color',0
1009
aEdit_box_selection_color   db      'Edit_box_selection_color',0
1609
aEdit_box_selection_color   db      'Edit_box_selection_color',0
-
 
1610
aButton_color               db      'Button_color',0
-
 
1611
aButton_text_color          db      'Button_text_color',0
-
 
1612
aStone_color                db      'Stone_color',0
-
 
1613
aSplash_background_color    db      'Splash_background_color',0
-
 
1614
aSplash_level_string_color  db      'Splash_level_string_color',0
-
 
1615
aSplash_level_number_color  db      'Splash_level_number_color',0
-
 
1616
aLevel_string_color         db      'Level_string_color',0
-
 
1617
aLevel_number_color         db      'Level_number_color',0
1010
 
1618
 
-
 
1619
aReserved                   db      'Reserved',0
-
 
1620
aSquare_side_length         db      'Square_side_length',0
-
 
1621
aHiscore_classic            db      'Hiscore_classic',0
1011
aScore                      db      'Score',0
1622
aChampion_name_classic      db      'Champion_name_classic',0
1012
aHiscore                    db      'Hiscore',0
1623
aHiscore_levels             db      'Hiscore_levels',0
1013
aChampion_name              db      'Champion_name',0
1624
aChampion_name_levels       db      'Champion_name_levels',0
1014
 
1625
 
1015
edit1 edit_box 65,397,0x0,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1
1626
edit1 edit_box 65,397,0x0,0x000000,0x000000,0x000000,0x000000,0x80000000,15,hed,mouse_dd,ed_focus,hed_end-hed-1,hed_end-hed-1
1016
 
1627
 
1017
hed                         db      '',0
1628
hed                         db      '',0
1018
;;---Variables-------------------------------------------------------------------------------------------------------------
1629
;;---Variables-------------------------------------------------------------------------------------------------------------
1019
i_end:
1630
i_end:
1020
hed_end:
1631
hed_end:
1021
rb  256
1632
rb  256
1022
mouse_dd                    rd      1
1633
mouse_dd                    rd      1
-
 
1634
 
-
 
1635
cur_level                   rd      1
-
 
1636
cur_level_number            rd      1
-
 
1637
hi_level                    rd      1
-
 
1638
 
-
 
1639
score                       rd      1
-
 
1640
hi_score_classic            rd      1
-
 
1641
hi_score_levels             rd      1
-
 
1642
 
-
 
1643
champion_name_classic       rb      CHAMPION_NAME_LENGTH
-
 
1644
champion_name_levels        rb      CHAMPION_NAME_LENGTH
-
 
1645
 
-
 
1646
snake_dots                  rb      GRID_WIDTH*GRID_HEIGHT*2+3          ; +3 bytes for faster dword copying
-
 
1647
snake_direction             rd      1
-
 
1648
snake_direction_next        rd      1
-
 
1649
snake_length_x2             rd      1
1023
 
1650
 
1024
decorations                 rb      1
1651
decorations                 rd      1
1025
number_of_free_dots         rw      1
1652
number_of_free_dots         rd      1
1026
 
-
 
1027
eat                         rb      1
-
 
1028
 
1653
 
-
 
1654
eat                         rw      1
1029
square_side_length          rd      1
1655
 
1030
space_between_squares       rd      1
1656
g_s                         rd      1
1031
g_s                         rd      1
1657
g_e                         rd      1
1032
 
1658
 
1033
window_width                rd      1
1659
window_width                rd      1
1034
window_height               rd      1
1660
window_height               rd      1
1035
wp_x                        rd      1
1661
wp_x                        rd      1
1036
wp_y                        rd      1
1662
wp_y                        rd      1
1037
 
-
 
1038
gw_mul_gh                   rd      1
1663
 
1039
gw_mul_gs                   rd      1
1664
gw_mul_gs                   rd      1
1040
gh_mul_gs                   rd      1
1665
gh_mul_gs                   rd      1
1041
gbxm1_plus_gw_mul_gs        rd      1
1666
gbxm1_plus_gw_mul_gs        rd      1
1042
gbym1_plus_gh_mul_gs        rd      1
1667
gbym1_plus_gh_mul_gs        rd      1
1043
gs_shl16_gs                 rd      1
1668
gs_shl16_gs                 rd      1
1044
gbxm1_shl16_gbxm1           rd      1
1669
gbxm1_shl16_gbxm1           rd      1
1045
gbym1_shl16_gbym1           rd      1
1670
gbym1_shl16_gbym1           rd      1
1046
 
1671
 
1047
bottom_top_strings          rd      1
1672
bottom_top_strings          rd      1
1048
bottom_middle_strings       rd      1
1673
bottom_middle_strings       rd      1
1049
bottom_bottom_strings       rd      1
1674
bottom_bottom_strings       rd      1
1050
top_strings                 rd      1
1675
top_strings                 rd      1
-
 
1676
 
-
 
1677
button_x_left               rd      1
-
 
1678
button_x_right              rd      1
-
 
1679
button_y_top                rd      1
-
 
1680
button_y_middle             rd      1
-
 
1681
button_y_bottom             rd      1
-
 
1682
button_width_short          rd      1
-
 
1683
button_width_long           rd      1
-
 
1684
button_height               rd      1
-
 
1685
 
1051
 
1686
cursor_data                 rb      32*32*4
1052
champion_name               rb      16
1687
cursor_handle               rd      1
1053
 
1688
 
1054
cur_dir_path                rb      4096
1689
cur_dir_path                rb      4096
1055
@PARAMS                     rb      4096
1690
@PARAMS                     rb      4096
-
 
1691
 
-
 
1692
field_map                   rb      GRID_WIDTH*GRID_HEIGHT*2
1056
 
1693
 
1057
rb 4096
1694
rb 4096
1058
stacktop:
1695
stacktop:
1059
d_end:
1696
d_end: