Subversion Repositories Kolibri OS

Rev

Rev 1566 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1518 dunkaist 1
;;===Level_mode================================================================================================================
2
 
3
Level_begin:
4
 
1566 dunkaist 5
      call      Load_level
1522 dunkaist 6
      call      Get_eat
1677 dunkaist 7
        mcall     66,1,1                          ; set scan codes mode for keyboard
1522 dunkaist 8
 
1518 dunkaist 9
Level_body:
10
    ;;===Level_body========================================================================================================
11
 
1566 dunkaist 12
      call      Hide_cursor
1518 dunkaist 13
mcall     26, 9
14
    mov  [time_before_waiting], eax
15
    mov  eax, [time_wait_limit]
16
    mov  [time_to_wait],    eax
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
1518 dunkaist 22
 
23
      call      Draw_decorations
1566 dunkaist 24
      call      Draw_stones
1518 dunkaist 25
      call      Draw_snake
26
      call      Draw_eat
27
      call      Draw_level_strings
28
 
29
      mcall     12,2
30
 
1522 dunkaist 31
  .still:
1518 dunkaist 32
      mcall     26, 9
33
    push eax
34
    sub  eax, [time_before_waiting]
35
    pop  [time_before_waiting]
36
    cmp  [time_to_wait],    eax
37
     jg  @f
38
    cmp  [action],  0
39
     jne Game_step
40
  @@:
41
    sub  [time_to_wait],    eax
42
      mcall     23, [time_to_wait]              ;
43
 
44
    test al,  al
45
     jnz  @f
46
    cmp  [action],  0
47
     jne Game_step
48
      mcall     26, 9
49
    mov  [time_before_waiting], eax
50
    mov  eax, [time_wait_limit]
51
    mov  [time_to_wait],    eax
1522 dunkaist 52
     jmp .still
1518 dunkaist 53
  @@:
54
 
1522 dunkaist 55
      .message:                                 ; ok, what an event?
1518 dunkaist 56
        dec  al                                 ; has the window been moved or resized?
1522 dunkaist 57
         jz  .redraw                            ;
1518 dunkaist 58
        dec  al                                 ; was a key pressed?
1522 dunkaist 59
         jz  .key                               ;
1518 dunkaist 60
        dec  al                                 ; was a button pressed?
1522 dunkaist 61
         jz  .button                            ;
1518 dunkaist 62
 
63
 
1566 dunkaist 64
  .button:                                      ; процедура обрабоки кнопок в программе
65
      mcall     17                              ; функция 17: получить номер нажатой кнопки
66
 
67
    shr  eax, 8                                 ; сдвигаем регистр eax на 8 бит вправо, чтобы получить номер нажатой кнопки
68
    cmp  eax, 1
1677 dunkaist 69
     je  Save_do_smth_else_and_exit
1566 dunkaist 70
 
71
     jmp .still
72
 
73
 
1522 dunkaist 74
  .key:
1518 dunkaist 75
      mcall     2                               ; get keycode
1677 dunkaist 76
 
77
;pushf
78
;pusha
79
;movzx eax, ah
80
;dph eax
81
;newline
82
;popa
83
;popf
84
 
85
    cmp  ah,  0x01                              ; Escape
1518 dunkaist 86
     je  First_menu
1677 dunkaist 87
    cmp  ah,  0x39                              ; Space
1518 dunkaist 88
     je  Pause_mode
1677 dunkaist 89
    cmp  ah,  0x4B                              ; Left
1522 dunkaist 90
     je  .key.left
1677 dunkaist 91
    cmp  ah,  [shortcut_move_left]              ; Left
92
     je  .key.left
93
    cmp  ah,  0x50                              ; Down
1522 dunkaist 94
     je  .key.down
1677 dunkaist 95
    cmp  ah,  [shortcut_move_down]              ; Down
96
     je  .key.down
97
    cmp  ah,  0x48                              ; Up
1522 dunkaist 98
     je  .key.up
1677 dunkaist 99
    cmp  ah,  [shortcut_move_up]                ; Up
100
     je  .key.up
101
    cmp  ah,  0x4D                              ; Right
1522 dunkaist 102
     je  .key.right
1677 dunkaist 103
    cmp  ah,  [shortcut_move_right]             ; Right
104
     je  .key.right
105
 
106
    cmp  ah,  0x4B+0x80                         ; Left released
107
     je  .key.released.left
108
    mov  al,  [shortcut_move_left]
109
    add  al,  0x80
110
    cmp  ah,  al                                ; Left released
111
     je  .key.released.left
112
    cmp  ah,  0x50+0x80                         ; Down released
113
     je  .key.released.down
114
    mov  al,  [shortcut_move_down]
115
    add  al,  0x80
116
    cmp  ah,  al                                ; Down released
117
     je  .key.released.down
118
    cmp  ah,  0x48+0x80                         ; Up released
119
     je  .key.released.up
120
    mov  al,  [shortcut_move_up]
121
    add  al,  0x80
122
    cmp  ah,  al                                ; Up released
123
     je  .key.released.up
124
    cmp  ah,  0x4D+0x80                         ; Right released
125
     je  .key.released.right
126
    mov  al,  [shortcut_move_right]
127
    add  al,  0x80
128
    cmp  ah,  al                                ; Right released
129
     je  .key.released.right
130
 
131
    cmp  ah, [shortcut_reverse]
132
     jne @f
133
      call      Reverse_snake
134
     jmp .still
135
  @@:
136
    cmp  ah, [shortcut_increase]
137
     jne @f
138
      call      Increase_geometry
139
     jmp .redraw
140
  @@:
141
    cmp  ah, [shortcut_decrease]
142
     jne @f
143
      call      Decrease_geometry
144
     jmp .redraw
145
  @@:
1518 dunkaist 146
 
1522 dunkaist 147
     jmp .still                                 ; jump to wait for another event
148
 
149
 
150
  .key.left:
1566 dunkaist 151
    bts  [action],  0
1522 dunkaist 152
     jc  @f
1518 dunkaist 153
    mov  [time_to_wait],    0
154
  @@:
1677 dunkaist 155
    cmp  [smart_reverse],   1
156
     jne @f
157
    cmp  [snake_direction], RIGHT
158
     je  .still
159
  @@:
1566 dunkaist 160
    mov  [snake_direction_next],    LEFT
1677 dunkaist 161
    bts  [acceleration_mask],   LEFT
162
     jc  Game_step
1522 dunkaist 163
     jmp .still
1518 dunkaist 164
 
1522 dunkaist 165
  .key.down:
1566 dunkaist 166
    bts  [action],  0
1522 dunkaist 167
     jc  @f
1518 dunkaist 168
    mov  [time_to_wait],    0
169
  @@:
1677 dunkaist 170
    cmp  [smart_reverse],   1
171
     jne @f
172
    cmp  [snake_direction], UP
173
     je  .still
174
  @@:
1566 dunkaist 175
    mov  [snake_direction_next],    DOWN
1677 dunkaist 176
    bts  [acceleration_mask],   DOWN
177
     jc  Game_step
1522 dunkaist 178
     jmp .still
1518 dunkaist 179
 
1522 dunkaist 180
  .key.up:
1566 dunkaist 181
    bts  [action],  0
1522 dunkaist 182
     jc  @f
1518 dunkaist 183
    mov  [time_to_wait],    0
184
  @@:
1677 dunkaist 185
    cmp  [smart_reverse],   1
186
     jne @f
187
    cmp  [snake_direction], DOWN
188
     je  .still
189
  @@:
1566 dunkaist 190
    mov  [snake_direction_next],    UP
1677 dunkaist 191
    bts  [acceleration_mask],   UP
192
     jc  Game_step
1522 dunkaist 193
     jmp .still
1518 dunkaist 194
 
1522 dunkaist 195
  .key.right:
1566 dunkaist 196
    bts  [action],  0
1522 dunkaist 197
     jc  @f
1518 dunkaist 198
    mov  [time_to_wait],    0
199
  @@:
1677 dunkaist 200
    cmp  [smart_reverse],   1
201
     jne @f
202
    cmp  [snake_direction], LEFT
203
     je  .still
204
  @@:
1566 dunkaist 205
    mov  [snake_direction_next],    RIGHT
1677 dunkaist 206
    bts  [acceleration_mask],   RIGHT
207
     jc  Game_step
1522 dunkaist 208
     jmp .still
1518 dunkaist 209
 
210
 
1677 dunkaist 211
  .key.released.left:
212
    btr  [acceleration_mask],   LEFT
213
     jmp .still
214
 
215
  .key.released.down:
216
    btr  [acceleration_mask],   DOWN
217
     jmp .still
218
 
219
  .key.released.up:
220
    btr  [acceleration_mask],   UP
221
     jmp .still
222
 
223
  .key.released.right:
224
    btr  [acceleration_mask],   RIGHT
225
     jmp .still
226
 
227
 
1518 dunkaist 228
  Game_step:
229
 
1566 dunkaist 230
    cmp  [snake_direction], LEFT                ; are we moving to left?
1518 dunkaist 231
     jz  .left
1566 dunkaist 232
    cmp  [snake_direction], DOWN                ; ... down?
1518 dunkaist 233
     jz  .down
1566 dunkaist 234
    cmp  [snake_direction], UP                  ; ... up?
1518 dunkaist 235
     jz  .up
236
     jmp .right                                 ; then right
237
 
238
  .left:
1566 dunkaist 239
    cmp  [snake_direction_next],    RIGHT       ; next step is to right?
240
     jz  .with_reverse
241
     jmp .without_reverse
1518 dunkaist 242
 
243
  .down:
1566 dunkaist 244
    cmp  [snake_direction_next],    UP          ; next step is to up?
245
     jz  .with_reverse
246
     jmp .without_reverse
1518 dunkaist 247
 
248
  .up:
1566 dunkaist 249
    cmp  [snake_direction_next],    DOWN        ; next step is to bottom?
250
     jz  .with_reverse
251
     jmp .without_reverse
1518 dunkaist 252
 
253
  .right:
1566 dunkaist 254
    cmp  [snake_direction_next],    LEFT        ; next step is to left?
255
     jz  .with_reverse
256
     jmp .without_reverse
1518 dunkaist 257
 
258
 
1566 dunkaist 259
  .with_reverse:
260
      call      Set_reverse_direction
1518 dunkaist 261
      call      Reverse
262
 
1566 dunkaist 263
  .without_reverse:
1518 dunkaist 264
    mov  edx, snake_dots-2
265
    add  edx, [snake_length_x2]
266
 
1566 dunkaist 267
    cmp  [snake_direction_next],    LEFT
1518 dunkaist 268
     je  .to_left
1566 dunkaist 269
    cmp  [snake_direction_next],    DOWN
1518 dunkaist 270
     je  .to_down
1566 dunkaist 271
    cmp  [snake_direction_next],    UP
1518 dunkaist 272
     je  .to_up
1566 dunkaist 273
    cmp  [snake_direction_next],    RIGHT
1518 dunkaist 274
     je  .to_right
275
 
276
      .to_left:
1566 dunkaist 277
        mov  [snake_direction], LEFT
1518 dunkaist 278
        mov  ax,  [edx]
279
        dec  al
280
        cmp  al,  -1
281
         jne @f
1566 dunkaist 282
        mov  al,  GRID_WIDTH
1522 dunkaist 283
        dec  al
1518 dunkaist 284
      @@:
285
         jmp Snake_move
286
 
287
      .to_down:
1566 dunkaist 288
        mov  [snake_direction], DOWN
1518 dunkaist 289
        mov  ax,  [edx]
290
        inc  ah
1566 dunkaist 291
        cmp  ah,  GRID_HEIGHT
1518 dunkaist 292
         jne @f
293
        mov  ah,  0
294
      @@:
295
         jmp Snake_move
296
 
297
      .to_up:
1566 dunkaist 298
        mov  [snake_direction], UP
1518 dunkaist 299
        mov  ax,  [edx]
300
        dec  ah
301
        cmp  ah,  -1
302
         jne @f
1566 dunkaist 303
        mov  ah,  GRID_HEIGHT
1522 dunkaist 304
        dec  ah
1518 dunkaist 305
      @@:
306
         jmp Snake_move
307
 
308
      .to_right:
1566 dunkaist 309
        mov  [snake_direction], RIGHT
1518 dunkaist 310
        mov  ax,  [edx]
311
        inc  al
1566 dunkaist 312
        cmp  al,  GRID_WIDTH
1518 dunkaist 313
         jne @f
314
        mov  al,  0
315
      @@:
316
         jmp Snake_move
317
 
318
    ;;---Level_body--------------------------------------------------------------------------------------------------------
319
 
320
;;---Level_mode----------------------------------------------------------------------------------------------------------------
321
 
322
 
323
;;===Some_functions============================================================================================================
324
 
325
Draw_snake:
326
    ;;===Draw_snake========================================================================================================
327
 
328
      call      Draw_head_prehead
329
    mov  edx, [snake_color]
330
    mov  esi, snake_dots-6
331
    add  esi, [snake_length_x2]
332
 
333
  @@:
334
    mov  bx,  [esi]
335
    sub  esi, 2
336
      call      Draw_square
337
    cmp  esi, snake_dots-2
338
     jne @b
339
 
340
    ret
341
 
342
    ;;---Draw_snake--------------------------------------------------------------------------------------------------------
343
 
344
 
345
Draw_head_prehead:
346
    ;;===Draw_head_prehead=================================================================================================
347
 
348
    mov  edx, [snake_head_color]
349
    mov  esi, snake_dots-2
350
    add  esi, [snake_length_x2]
351
    mov  bx,  [esi]
352
      call      Draw_square
353
    sub  esi, 2
354
    mov  bx,  [esi]
355
    mov  edx, [snake_color]
356
      call      Draw_square
1677 dunkaist 357
      call      Draw_lives_in_head
1518 dunkaist 358
 
359
    ret
360
 
361
    ;;---Draw_head_prehead-------------------------------------------------------------------------------------------------
362
 
363
 
364
Draw_level_strings:
365
    ;;===Draw_level_strings================================================================================================
366
 
1522 dunkaist 367
    mov  ebx, [window_width]
368
    shr  ebx, 1
1566 dunkaist 369
    sub  ebx, string_pause_space.size*3+6
1522 dunkaist 370
    shl  ebx, 16
371
    add  ebx, [top_strings]
372
      mcall     4, ,[navigation_strings_color],string_pause_space ; Draw 'PAUSE - SPACE' string
373
 
374
;    call    Draw_menu_esc
1518 dunkaist 375
    call    Draw_score_string
376
    call    Draw_score_number                   ; Draw score (number)
1522 dunkaist 377
    call    Draw_champion_string
378
    call    Draw_champion_name
1518 dunkaist 379
    call    Draw_hiscore_string
380
    call    Draw_hiscore_number
381
 
1566 dunkaist 382
    cmp  [play_mode],   LEVELS_MODE
383
     jne @f
384
 
385
    mov  ebx, [window_width]
386
    shr  ebx, 3
387
    sub  ebx, 5
388
    shl  ebx, 16
389
    add  ebx, [bottom_bottom_strings]
390
      mcall     4, ,[level_string_color],string_level
391
 
392
    mov  edx, [window_width]
393
    shr  edx, 3
394
    sub  edx, 5+1
395
    add  edx, string_level.size*6
396
    shl  edx, 16
397
    add  edx, [bottom_bottom_strings]
398
      mcall     47,0x00020000,[cur_level_number], ,[level_number_color],[background_color]
399
 
400
  @@:
401
 
1518 dunkaist 402
    ret
403
 
404
    ;;---Draw_level_strings------------------------------------------------------------------------------------------------
405
 
406
 
407
Reverse:
408
    ;;===Reverse===========================================================================================================
409
 
410
    mov  ecx, [snake_length_x2]
411
    shr  ecx, 2
412
    mov  esi, snake_dots
413
    mov  edi, snake_dots-2
414
    add  edi, [snake_length_x2]
415
 
416
  @@:
417
    mov  ax,  [edi]
418
    xchg ax,  [esi]
419
    mov  [edi], ax
420
 
421
    add  esi, 2
422
    sub  edi, 2
1522 dunkaist 423
    dec  cx
1518 dunkaist 424
     jnz @b
425
 
426
    ret
427
 
428
    ;;---Reverse-----------------------------------------------------------------------------------------------------------
429
 
430
 
431
Draw_eat:
432
    ;;===Draw_eat==========================================================================================================
433
 
434
    mov  bx,  word[eat]
435
    mov  edx, [eat_color]
436
 
437
    call    Draw_square
438
 
439
    ret
440
 
441
    ;;---Draw_eat----------------------------------------------------------------------------------------------------------
442
 
443
 
444
Get_eat:
445
    ;;===Get_eat===========================================================================================================
446
    ;;  in  :
447
    ;;
448
    ;;  out :
449
    ;;          ax  =   coord's of the eat square (al=x, ah=y)
450
    ;;
1677 dunkaist 451
 
1518 dunkaist 452
      mcall     26,9
453
;    xor  eax, esp
454
    shl  eax, 1
455
    xor  edx, edx
456
    div  word[number_of_free_dots]
457
    mov  ebx, field_map
458
 
459
  .loop:
460
    cmp  byte[ebx], 0
461
     jne @f
462
    test dx,  dx
463
     jz  .place_found
464
    dec  dx
465
  @@:
466
    inc  ebx
467
     jmp .loop
468
 
469
  .place_found:
470
    sub  ebx, field_map
471
    mov  eax, ebx
1566 dunkaist 472
    mov  bl,  GRID_WIDTH
1518 dunkaist 473
    div  bl
474
    xchg al,  ah
475
 
476
    mov  word[eat], ax
477
 
478
    ret
479
 
480
    ;;---Get_eat-----------------------------------------------------------------------------------------------------------
481
 
482
 
483
Sdvig:
484
    ;;===Sdvig=============================================================================================================
485
 
486
    mov  esi, snake_dots+2
487
    mov  edi, snake_dots
488
    mov  ecx, [snake_length_x2]
489
    shr  ecx, 1
490
 
491
    cld
492
    rep  movsw
493
 
494
    ret
495
 
496
    ;;---Sdvig-------------------------------------------------------------------------------------------------------------
497
 
498
 
1566 dunkaist 499
Set_reverse_direction:
500
    ;;===Set_reverse_direction==================================================================================================
1518 dunkaist 501
 
502
    mov  eax, snake_dots
503
    mov  ebx, snake_dots+2
504
 
505
    mov  cl,  [eax]                             ; The last dot x_coord
1522 dunkaist 506
    mov  ch,  [ebx]                             ; The pre_last dot x_coord
1518 dunkaist 507
 
1522 dunkaist 508
    cmp  cl,  ch
1518 dunkaist 509
     je  .X_ravny
510
 
511
    cmp  cl,  0
512
     jne .skip2
513
 
1566 dunkaist 514
    mov  dl,  GRID_WIDTH
1522 dunkaist 515
    dec  dl
516
    cmp  ch,  dl
1518 dunkaist 517
     jne .Normal_y_ravny
1566 dunkaist 518
    mov  [snake_direction_next],    RIGHT
1518 dunkaist 519
    ret
520
 
521
  .skip2:
1566 dunkaist 522
    mov  dl,  GRID_WIDTH
1522 dunkaist 523
    dec  dl
524
    cmp  cl,  dl
1518 dunkaist 525
     jne .Normal_y_ravny
1522 dunkaist 526
    cmp  ch,  0
1518 dunkaist 527
     jne .Normal_y_ravny
1566 dunkaist 528
    mov  [snake_direction_next],    LEFT
1518 dunkaist 529
    ret
530
 
531
  .Normal_y_ravny:
532
 
1522 dunkaist 533
    cmp  cl,  ch
1518 dunkaist 534
     jg  .Napravlenie_to_right
1566 dunkaist 535
    mov  [snake_direction_next],    LEFT
1518 dunkaist 536
    ret
537
 
538
  .Napravlenie_to_right:
1566 dunkaist 539
    mov  [snake_direction_next],    RIGHT
1518 dunkaist 540
    ret
541
 
542
  .X_ravny:
543
    inc  eax
544
    inc  ebx
545
    mov  cl,  [eax]
1522 dunkaist 546
    mov  ch,  [ebx]
1518 dunkaist 547
 
548
    cmp  cl,  0
549
     jne .skip3
550
 
1566 dunkaist 551
    mov  dl,  GRID_HEIGHT
1522 dunkaist 552
    dec  dl
553
    cmp  ch,  dl
1518 dunkaist 554
     jne .Normal_x_ravny
1566 dunkaist 555
    mov  [snake_direction_next],    DOWN
1518 dunkaist 556
    ret
557
 
558
  .skip3:
1566 dunkaist 559
    mov  dl,  GRID_HEIGHT
1522 dunkaist 560
    dec  dl
561
    cmp  ch,  dl
1518 dunkaist 562
     jne .Normal_x_ravny
1522 dunkaist 563
    cmp  ch,  0
1518 dunkaist 564
     jne .Normal_x_ravny
1566 dunkaist 565
    mov  [snake_direction_next],    UP
1518 dunkaist 566
    ret
567
 
568
  .Normal_x_ravny:
569
 
1522 dunkaist 570
    cmp  cl,  ch                                ; !!!
1518 dunkaist 571
     jg  .Napravlenie_to_down                   ; 0 1 2 ...
1566 dunkaist 572
    mov  [snake_direction_next],    UP          ; 1
1518 dunkaist 573
    ret                                         ; 2
574
                                                ; .
575
  .Napravlenie_to_down:                         ; .
1566 dunkaist 576
    mov  [snake_direction_next],    DOWN        ; .
1518 dunkaist 577
 
578
    ret
579
 
1566 dunkaist 580
    ;;---Set_reverse_direction--------------------------------------------------------------------------------------------------
1518 dunkaist 581
 
582
 
583
Snake_move:
1566 dunkaist 584
    ;;===Snake_move=============================================================================================================
1518 dunkaist 585
    ;;  in  :
586
    ;;           ax =   coord's of new head
587
    ;;          edx =   snake_dots+[snake_length_x2]-2 (snake head)
588
    ;;
589
 
590
    add  edx, 2
591
    mov  [edx], ax
592
    cmp  ax,  word[eat]
593
     jne .eat_and_new_head_are_different
594
 
595
    add  [snake_length_x2], 2
596
    add  [score],   SCORE_EAT
1566 dunkaist 597
    dec  [number_of_free_dots]
598
    cmp  [number_of_free_dots], 0
1518 dunkaist 599
     je  Game_over
600
    mov  ax,  word[eat]
601
    mov  cl,  1
602
      call      Draw_on_map
603
      call      Draw_head_prehead
1677 dunkaist 604
 
605
    cmp  [play_mode],   CLASSIC_MODE
606
     jne .is_not_classic_mode
607
    dec  byte[speed_up_counter]
608
     jns @f
609
    mov  al,  byte[speed_up_counter+1]
610
    mov  byte[speed_up_counter],    al
611
    cmp  [time_wait_limit], 4
612
     jl  @f
613
    dec  [time_wait_limit]
614
  @@:
615
 
616
  .is_not_classic_mode:
617
    cmp  [play_mode],   LEVELS_MODE
618
     jne .is_not_levels_mode
619
    cmp  [snake_length_x2], (EAT_TO_END_LEVEL+3)*2
620
     je  .skip
621
 
622
  .is_not_levels_mode:
1518 dunkaist 623
      call      Get_eat
624
      call      Draw_eat
1677 dunkaist 625
  .skip:
1518 dunkaist 626
 
627
     jmp Keys_done
628
 
629
 
630
  .eat_and_new_head_are_different:
631
 
1522 dunkaist 632
    push ax
633
 
634
    mov  ax,  word[snake_dots]
635
    mov  cl,  0
636
      call      Draw_on_map
1518 dunkaist 637
 
1522 dunkaist 638
    pop ax
639
 
1518 dunkaist 640
      call      Get_from_map
1677 dunkaist 641
 
1518 dunkaist 642
    test bl,  bl
643
     jnz Game_over
644
 
645
    mov  cl,  1
646
      call      Draw_on_map
647
 
648
    mov  bx,  word[snake_dots]
649
    mov  edx, [background_color]
650
      call      Draw_square
1522 dunkaist 651
 
1518 dunkaist 652
      call      Sdvig
653
 
654
      call      Draw_head_prehead
655
 
656
 
657
  Keys_done:
658
 
659
    cmp  [score],   0
660
     je  @f
661
    dec  [score]
662
      call      Draw_score_number
663
  @@:
1566 dunkaist 664
 
665
    cmp  [play_mode],   LEVELS_MODE
666
     jne @f
667
    cmp  [snake_length_x2], (EAT_TO_END_LEVEL+3)*2
668
     je  Do_smth_between_levels
669
  @@:
670
 
1518 dunkaist 671
      mcall     26, 9
672
    mov  [time_before_waiting], eax
673
    mov  eax, [time_wait_limit]
674
    mov  [time_to_wait],    eax
1522 dunkaist 675
     jmp Level_body.still
1518 dunkaist 676
 
1522 dunkaist 677
    ;;---Snake_move------------------------------------------------------------------------------------------------------------
1518 dunkaist 678
 
1566 dunkaist 679
 
680
Do_smth_between_levels:
681
    ;;===Do_smth_between_levels================================================================================================
682
 
683
    inc  [cur_level_number]
684
    cmp  [cur_level_number],    LAST_LEVEL_NUMBER+1
685
     jne @f
686
    mov  [cur_level_number],    LEVELS_MODE_FIRST_LEVEL
687
  @@:
688
 
689
      call      Draw_splash
690
 
691
  @@:
692
      mcall     2
693
    cmp  eax, 1
694
     jne @b
695
 
696
     jmp Level_begin
697
 
698
    ;;---Do_smth_between_levels------------------------------------------------------------------------------------------------
699
 
700
 
701
Draw_splash:
702
    ;;===Draw_splash===========================================================================================================
703
 
704
    mov  al,  0
705
    mov  cl,  GRID_WIDTH-1
706
    mov  edx, [splash_background_color]
707
 
708
  .draw:
709
    mov  bh,  GRID_HEIGHT-1
710
    mov  bl,  al
711
  @@:
712
      call      Draw_square
713
    sub  bh,  2
714
    cmp  bh,  0
715
     jg  @b
716
 
717
    inc  al
718
 
719
    mov  bh,  GRID_HEIGHT-2
720
    mov  bl,  cl
721
  @@:
722
      call      Draw_square
723
    sub  bh,  2
724
    cmp  bh,  0
725
     jnl @b
726
 
727
    dec  cl
728
    cmp  cl,  0
1677 dunkaist 729
     jl  .picture
1566 dunkaist 730
 
731
    push eax ebx
732
      mcall     5,PAUSE_WHILE_DRAWING_SPLASH
1677 dunkaist 733
      mcall     2
734
    cmp  ah,  0x39                              ; Space
735
     jne @f
1566 dunkaist 736
    pop  ebx eax
1677 dunkaist 737
     jmp .quit
738
  @@:
739
    cmp  ah,  0x1C                              ; Enter
740
     jne @f
741
    pop  ebx eax
742
     jmp .quit
743
  @@:
744
    pop  ebx eax
1566 dunkaist 745
     jmp .draw
746
 
747
 
1677 dunkaist 748
  .picture:
1566 dunkaist 749
    mov  ax,  2*0x100+24
750
    mov  cx,  1*0x100+5
751
    mov  edx, [splash_level_string_color]
752
    mov  esi, picture_level
753
      call      Draw_picture
754
 
755
    mov  eax, [cur_level_number]
756
    mov  dl,  10
757
    div  dl
758
    push ax
759
 
760
    mov  esi, digits_font
761
  @@:
762
    test al,  al
763
     jz  @f
1677 dunkaist 764
    add  esi, 5
1566 dunkaist 765
    dec  al
766
     jmp @b
767
  @@:
768
 
769
    mov  ax,  9*0x100+4
770
    mov  cx,  8*0x100+5
771
    mov  edx, [splash_level_number_color]
772
      call      Draw_picture
773
 
774
    pop  ax
775
    mov  esi, digits_font
776
  @@:
777
    test ah,  ah
778
     jz  @f
1677 dunkaist 779
    add  esi, 5
1566 dunkaist 780
    dec  ah
781
     jmp @b
782
  @@:
783
 
784
    mov  ax,  15*0x100+4
785
    mov  cx,  8*0x100+5
786
    mov  edx, [splash_level_number_color]
787
      call      Draw_picture
788
 
1677 dunkaist 789
      mcall     26,9
790
    mov  [time_before_waiting], eax
791
    mov  [time_to_wait],    PAUSE_BETWEEN_LEVELS
792
  @@:
793
      mcall     23,[time_to_wait]
794
      mcall     2
795
    cmp  ah,  0x39                              ; Space
796
     je  .quit
797
    cmp  ah,  0x1C                              ; Enter
798
     je  .quit
799
      mcall     26,9
800
    push eax
801
    sub  eax, [time_before_waiting]
802
    pop  [time_before_waiting]
803
    sub  [time_to_wait],  eax
804
     jns @b
805
  .quit:
1566 dunkaist 806
    ret
807
 
808
    ;;---Draw_splash-----------------------------------------------------------------------------------------------------------
809
 
810
 
1677 dunkaist 811
Draw_lives_in_head:
812
    ;;===Draw_lives_in_head====================================================================================================
813
 
814
    cmp  [play_mode],   LEVELS_MODE
815
     jne .quit
816
    test [show_lives_style],    2
817
     jz  .quit
818
    mov  eax, snake_dots-2
819
    add  eax, [snake_length_x2]
820
    mov  ax,  word[eax]
821
 
822
    mov  bl,  ah
823
    mul  byte[g_s]
824
    mov  edx, [gbxm1]
825
    add  dx,  ax
826
    shl  edx, 16
827
    mov  al,  bl
828
    mul  byte[g_s]
829
    mov  dx,  word[gbym1]
830
    add  dx,  ax
831
 
832
    mov  eax, [g_s]
833
    shl  eax, 16
834
    add  eax, [g_s]
835
    and  eax, 0xfffefffe
836
    shr  eax, 1
837
    add  edx, eax
838
    sub  edx, 0x00020003
839
      mcall     47,0x80010001,lives,,[lives_in_head_number_color]
840
 
841
  .quit:
842
    ret
843
 
844
    ;;---Draw_lives_in_head----------------------------------------------------------------------------------------------------
845
 
846
 
1518 dunkaist 847
;;---Some_functions------------------------------------------------------------------------------------------------------------