Subversion Repositories Kolibri OS

Rev

Rev 1677 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1518 dunkaist 1
;;===First_menu_mode===========================================================================================================
2
 
3
First_menu:
1677 dunkaist 4
    mov  byte[window_title+5],  0
5
      mcall     71,1,window_title
1566 dunkaist 6
      mcall     40,111b                         ; set events: standart
1677 dunkaist 7
      mcall     66,1,1                          ; set scan codes mode for keyboard
1566 dunkaist 8
    mov  [is_new_record],   0
1677 dunkaist 9
    mov  [lives],   START_LIVES
1566 dunkaist 10
      call      Show_cursor
1518 dunkaist 11
 
1566 dunkaist 12
    mov  [score],   0
13
      call      Set_first_level_of_play_mode
1518 dunkaist 14
 
1677 dunkaist 15
    mov  ebx, [time_wait_limit_const]
16
    mov  [time_wait_limit], ebx
17
 
1522 dunkaist 18
  .redraw:
1677 dunkaist 19
      call      Set_geometry
1518 dunkaist 20
      mcall     12,1
1522 dunkaist 21
      mcall     0, , ,[window_style], ,window_title
2061 dunkaist 22
    test [proc_info.wnd_state], 0x04		; is rolled up?
23
     jnz @f
1518 dunkaist 24
 
1566 dunkaist 25
      call      Draw_decorations
26
      call      Draw_first_menu_picture
27
      call      Draw_menu_strings
28
      call      Draw_buttons
2061 dunkaist 29
  @@:
1518 dunkaist 30
      mcall     12,2
1522 dunkaist 31
  .still:
1518 dunkaist 32
      mcall     10                              ; wait for event
33
                                                ; ok, what an event?
34
    dec  al                                     ; has the window been moved or resized?
1522 dunkaist 35
     jz  .redraw                                ;
1518 dunkaist 36
    dec  al                                     ; was a key pressed?
1522 dunkaist 37
     jz  .key                                   ;
1518 dunkaist 38
 
39
 
1522 dunkaist 40
  .button:                                      ; a button was pressed
1518 dunkaist 41
      mcall     17                              ; get button number
42
    shr  eax, 8                                 ; we should do it to get the real button code
43
 
44
    cmp  eax, 1                                 ; is it close button?
1566 dunkaist 45
     je  Save_do_smth_else_and_exit             ; if so, jump to quit...
46
    cmp  eax, 0xD0                              ; 'play' button?
47
     je  Level_begin
48
    cmp  eax, 0xD1                              ; 'exit' button?
49
     je  Save_do_smth_else_and_exit
50
    cmp  eax, 0xD2                              ; change play mode button?
51
     jne @f
52
      call      Change_play_mode
53
      call      Delete_buttons
54
      call      Draw_buttons
55
     jmp .still                                 ; jump to wait for another event
56
  @@:
57
    cmp  eax, 0xD3                              ; '+INC+' button?
58
     jne @f
59
      call      Increase_geometry
60
     jmp .redraw                                ; jump to wait for another event
61
  @@:
62
    cmp  eax, 0xD4                              ; '-dec-' button?
63
     jne @f
64
      call      Decrease_geometry
65
     jmp .redraw                                ; jump to wait for another event
66
  @@:
1518 dunkaist 67
 
1522 dunkaist 68
     jmp .still                                 ; jump to wait for another event
1518 dunkaist 69
 
70
 
1522 dunkaist 71
  .key:                                         ; a key was pressed
1518 dunkaist 72
      mcall     2                               ; get keycode
73
 
1677 dunkaist 74
    cmp  ah, 0x01                               ; Escape
1566 dunkaist 75
     je  Save_do_smth_else_and_exit
1677 dunkaist 76
    cmp  ah, 0x1C                               ; Enter
1518 dunkaist 77
     je  Level_begin
1677 dunkaist 78
    cmp  ah, 0x39                               ; Space
1566 dunkaist 79
     jne @f
80
      call      Change_play_mode
81
      call      Delete_buttons
82
      call      Draw_buttons
1522 dunkaist 83
     jmp .still                                 ; jump to wait for another event
1566 dunkaist 84
  @@:
1677 dunkaist 85
    cmp  ah, [shortcut_increase]
86
     jne @f
87
      call      Increase_geometry
88
     jmp .redraw
89
  @@:
90
    cmp  ah, [shortcut_decrease]
91
     jne @f
92
      call      Decrease_geometry
93
     jmp .redraw
94
  @@:
1566 dunkaist 95
     jmp .still                                 ; jump to wait for another event
1518 dunkaist 96
 
97
;;---First_menu_mode-----------------------------------------------------------------------------------------------------------
98
 
99
 
100
;;===Some_functions============================================================================================================
101
 
102
Draw_first_menu_picture:
103
    ;;===Draw_first_menu_picture================================================================================================
104
 
1566 dunkaist 105
    mov  ax,  2*0x100+24
106
    mov  cx,  1*0x100+5
1518 dunkaist 107
    mov  edx, [snake_picture_color]
1522 dunkaist 108
    mov  esi, picture_first_menu_snake
1518 dunkaist 109
      call      Draw_picture
110
 
1566 dunkaist 111
    mov  ax,  3*0x100+11
112
    mov  cx,  8*0x100+5
1518 dunkaist 113
    mov  edx, [version_picture_color]
1522 dunkaist 114
    mov  esi, picture_first_menu_version
1518 dunkaist 115
      call      Draw_picture
116
 
117
    ret
118
 
119
    ;;---Draw_first_menu_picture------------------------------------------------------------------------------------------------
120
 
121
 
122
Draw_menu_strings:
1566 dunkaist 123
    ;;===Make_menu_strings======================================================================================================
1518 dunkaist 124
 
1522 dunkaist 125
    mov  ebx, [window_width]
126
    shr  ebx, 1
1566 dunkaist 127
    sub  ebx, press_to_start.size*3+6
1522 dunkaist 128
    shl  ebx, 16
129
    add  ebx, dword[bottom_middle_strings]
130
      mcall     4, ,[navigation_strings_color],press_to_start
131
    mov  ebx, [window_width]
132
    shr  ebx, 1
1566 dunkaist 133
    sub  ebx, press_esc_to_exit.size*3+6
1522 dunkaist 134
    shl  ebx, 16
135
    add  ebx, [top_strings]
136
      mcall     , ,[navigation_strings_color],press_esc_to_exit
1518 dunkaist 137
;      mcall     ,406*65536+TOP_STRINGS,[navigation_strings_color],press_F2_to_options
138
 
139
    ret
140
 
1566 dunkaist 141
    ;;---Make_menu_strings------------------------------------------------------------------------------------------------------
142
 
143
 
144
Draw_buttons:
145
    ;;===Draw_buttons===========================================================================================================
146
 
147
    mov  ebx, [button_x_left]
148
    shl  ebx, 16
149
    mov  bx,  word[button_width_short]
150
    mov  ecx, [button_y_top]
151
    shl  ecx, 16
152
    add  cx,  word[button_height]
153
      mcall     8, , ,0x000000D0,[button_color]                             ; top left button
154
    shr  ecx, 16
155
    mov  bx,  cx
156
    mov  edx, [button_height]
157
    shr  edx, 1
158
    sub  edx, 3                                                             ; ~half of font height
159
    add  bx,  dx
160
    ror  ebx, 16
161
    mov  edx, [button_width_short]
162
    shr  edx, 1
163
    sub  edx, string_button_play.size*3
164
    add  bx,  dx
165
    ror  ebx, 16
166
      mcall     4, ,[button_text_color],string_button_play
167
 
168
    mov  ebx, [button_x_right]
169
    shl  ebx, 16
170
    mov  bx,  word[button_width_short]
171
    mov  ecx, [button_y_top]
172
    shl  ecx, 16
173
    add  cx,  word[button_height]
174
      mcall     8, , ,0x000000D1,                                           ; top right button
175
    shr  ecx, 16
176
    mov  bx,  cx
177
    mov  edx, [button_height]
178
    shr  edx, 1
179
    sub  edx, 3                                                             ; ~half of font height
180
    add  bx,  dx
181
    ror  ebx, 16
182
    mov  edx, [button_width_short]
183
    shr  edx, 1
184
    sub  edx, string_button_exit.size*3
185
    add  bx,  dx
186
    ror  ebx, 16
187
      mcall     4, ,[button_text_color],string_button_exit
188
 
189
    mov  ebx, [button_x_left]
190
    shl  ebx, 16
191
    mov  bx,  word[button_width_long]
192
    mov  ecx, [button_y_middle]
193
    shl  ecx, 16
194
    add  cx,  word[button_height]
195
      mcall     8, , ,0x000000D2,                                           ; middle button
196
    shr  ecx, 16
197
    mov  bx,  cx
198
    mov  edi, [button_height]
199
    shr  edi, 1
200
    sub  edi, 3                                                             ; ~half of font height
201
    add  bx,  di
202
    ror  ebx, 16
203
    mov  edi, [button_width_long]
204
    shr  edi, 1
205
    cmp  [play_mode],   0
206
     jne @f
207
    sub  edi, string_button_pm_classic.size*3
208
    mov  edx, string_button_pm_classic
209
     jmp .skip
210
  @@:
211
    sub  edi, string_button_pm_levels.size*3
212
    mov  edx, string_button_pm_levels
213
  .skip:
214
    add  bx,  di
215
    ror  ebx, 16
216
      mcall     4, ,[button_text_color],
217
 
218
    mov  ebx, [button_x_left]
219
    shl  ebx, 16
220
    mov  bx,  word[button_width_short]
221
    mov  ecx, [button_y_bottom]
222
    shl  ecx, 16
223
    add  cx,  word[button_height]
224
      mcall     8, , ,0x000000D3,                                           ; bottom left button
225
    shr  ecx, 16
226
    mov  bx,  cx
227
    mov  edx, [button_height]
228
    shr  edx, 1
229
    sub  edx, 3                                                             ; ~half of font height
230
    add  bx,  dx
231
    ror  ebx, 16
232
    mov  edx, [button_width_short]
233
    shr  edx, 1
234
    sub  edx, string_button_inc.size*3
235
    add  bx,  dx
236
    ror  ebx, 16
237
      mcall     4, ,[button_text_color],string_button_inc
238
 
239
    mov  ebx, [button_x_right]
240
    shl  ebx, 16
241
    mov  bx,  word[button_width_short]
242
    mov  ecx, [button_y_bottom]
243
    shl  ecx, 16
244
    add  cx,  word[button_height]
245
      mcall     8, , ,0x000000D4,
246
    shr  ecx, 16
247
    mov  bx,  cx
248
    mov  edx, [button_height]
249
    shr  edx, 1
250
    sub  edx, 3                                                             ; ~half of font height
251
    add  bx,  dx
252
    ror  ebx, 16
253
    mov  edx, [button_width_short]
254
    shr  edx, 1
255
    sub  edx, string_button_dec.size*3
256
    add  bx,  dx
257
    ror  ebx, 16
258
      mcall     4, ,[button_text_color],string_button_dec
259
 
260
    ret
261
 
262
    ;;---Draw_buttons----------------------------------------------------------------------------------------------------------
263
 
264
 
265
Delete_buttons:
266
    ;;===Delete_buttons========================================================================================================
267
 
268
      mcall     8,,,0x800000D0
269
      mcall      ,,,0x800000D1
270
      mcall      ,,,0x800000D2
271
      mcall      ,,,0x800000D3
272
      mcall      ,,,0x800000D4
273
 
274
    ret
275
 
276
    ;;---Delete_buttons--------------------------------------------------------------------------------------------------------
277
 
278
 
279
Change_play_mode:
280
    ;;===Change_play_mode======================================================================================================
281
 
282
    cmp  [play_mode],   LEVELS_MODE
283
     jne @f
284
    mov  [play_mode],   CLASSIC_MODE
285
    mov  [cur_level_number],   0
286
    ret
287
  @@:
288
    inc  [play_mode]
289
 
290
      call      Set_first_level_of_play_mode
291
 
292
    ret
293
 
294
    ;;---Change_play_mode------------------------------------------------------------------------------------------------------
295
 
296
 
297
Set_first_level_of_play_mode:
298
    ;;===Set_first_level_of_play_mode==========================================================================================
299
 
300
    cmp  [play_mode],   CLASSIC_MODE
301
     jne @f
302
    mov  [cur_level_number],   CLASSIC_MODE_FIRST_LEVEL
303
  @@:
304
    cmp  [play_mode],   LEVELS_MODE
305
     jne @f
306
    mov  [cur_level_number],   LEVELS_MODE_FIRST_LEVEL
307
  @@:
308
 
309
    ret
310
 
311
    ;;---Set_first_level_of_play_mode-------------------------------------------------------------------------------------------
312
 
2061 dunkaist 313
;;---Some_functions-------------------------------------------------------------------------------------------------------------