Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;
2
;   Arcanoid Gaem 4Ver Mini Sample by Pavlushin Evgeni for ASCL
3
;   www.waptap@mail.ru   www.cyberdeck.fatal.ru www.deck4.narod.ru
4
;   Play again and exit button added
5
;
6
;   3Ver Play again, Exit button.
7
;   4Ver Next level function.
8
;
9
;******************************************************************************
10
    use32
11
    org    0x0
12
    db     'MENUET01'              ; 8 byte id
13
    dd     0x01                    ; header version
14
    dd     START                   ; start of code
15
    dd     IM_END                  ; size of image
16
    dd     0x300000                ; memory for app
17
    dd     0x300000                ; esp
18
    dd     0x0 , 0x0         ; I_Param , I_Icon
19
 
20
;******************************************************************************
21
 
22
include 'lang.inc'
485 heavyiron 23
include '..\..\..\macros.inc'
31 halyavin 24
include 'ascl.inc'
25
include 'ascgl.inc'
26
include 'ascgml.inc'
27
 
28
 
29
START:                          ; start of execution
30
    bmptoimg arc_file,pong
31
    getimg pong,0,0,80,4,img
32
    getimg pong,0,4,80,4,img2
33
    getimg pong,5,38,15,15,img3
34
    getimg pong,0,8,80,20,img5
35
    fullimg img4 , 80 ,20 ,0x00000000   ;black for rocket
36
    fullimg img6 , 15 ,15 ,0x00000000   ;black for ball
37
    fullimg img7a , 60,20,0x0000cf00
38
    fullimg img7b , 60,20,0x00af0000
39
    fullimg img7c , 60,20,0x000000cf
40
    fullimg img8 , 60,20,0x00000000
41
 
42
    call draw_window
43
 
44
still:
45
 
46
    scevent red,key,button
47
 
48
    cmp [againbut],1
49
    je  stl2
50
 
51
    outcount dword [scoreb],256,8,cl_Blue,5*65536
52
    outcount dword [scorea],332,8,cl_Red,5*65536
53
    outcount dword [level],368,8,cl_White,2*65536
54
 
55
del_images:
56
    setimg dword [ply1x],dword [ply1y],img4
57
    setimg dword [ballx],dword [bally],img6
58
    setimg dword [gravx],dword [gravy],img4
59
 
60
del_blocks:
61
    mov ecx,0
62
xxx:
63
    pushad
64
    mov esi,dword [mass+ecx]
65
    mov edi,dword [mass+ecx+4]
66
    mov ebp,dword [mass+ecx+8]
67
    cmp ebp,0
68
    jne notptx
69
    setimg esi,edi,img8
70
notptx:
71
    popad
72
    add ecx,12
73
    cmp ecx,[blocks_max]
74
    jne xxx
75
 
76
 
77
 
78
move_ply1:
79
 
80
    correct [ply1x],[ply1rx],2
81
    correct [ply1y],[ply1ry],2
82
 
83
;automove ball
84
    mov eax,dword [ballxv]
85
    add dword [ballx],eax
86
    mov eax,dword [ballyv]
87
    add dword [bally],eax
88
 
89
;autoslow ball for rocket gravitation (Space key)
90
    cmp dword [ballxv],0
91
    jl ballb
92
balla:
93
    cmp dword [ballxv],2
94
    jng balln
95
    dec dword [ballxv]
96
    jmp balln
97
ballb:
98
    cmp dword [ballxv],-2
99
    jnl balln
100
    inc dword [ballxv]
101
    jmp balln
102
balln:
103
    cmp dword [ballyv],2
104
    jng by_n
105
    dec dword [ballyv]
106
by_n:
107
 
108
;ball collusion of screen
109
    cmp dword [ballx],400-12
110
    jna xa_ok
111
    neg dword [ballxv]
112
xa_ok:
113
    cmp dword [ballx],6
114
    jnb xb_ok
115
    neg dword [ballxv]
116
xb_ok:
117
 
118
    cmp dword [bally],30
119
    jnb yb_ok
120
    neg dword [ballyv]
121
yb_ok:
122
 
123
 
124
;if ball far out of screen come back
125
    cmp dword [bally],466
126
    jng yax_ok
127
    call draw_window
128
    dec dword [scoreb]
129
    mov eax,[ply1ry]
130
    sub eax,6
131
    mov dword [bally],eax ;240
132
    mov eax,[ply1rx]
133
    add eax,30
134
    mov dword [ballx],eax ;200
135
    mov dword [ballyv],2
136
    random 3,dword [ballxv]
137
    sub dword [ballxv],1
138
yax_ok:
139
 
140
xorx:
141
    cmp dword [ballxv],0
142
    jne norx
143
    random 3,dword [ballxv]
144
    sub dword [ballxv],1
145
    cmp dword [ballxv],0
146
    je  xorx
147
norx:
148
 
149
;test on collusion ply1 of ball
150
collusion_test:
151
    collimg img,[ply1x],[ply1y],img3,[ballx],[bally],eax
152
    cmp eax,1
153
    jne not_coll
154
    neg dword [ballyv]
155
    sub dword [bally],4
156
;    neg dword [ballxv]
157
not_coll:
158
 
159
;test on collusion gravity of ball
160
collusion_grav:
161
    collimg img,[gravx],[gravy],img3,[ballx],[bally],eax
162
    cmp eax,1
163
    jne not_collg
164
    sub dword [bally],30
165
    neg dword [ballyv]
166
    cmp dword [ballyv],0
167
    jl  ab
168
    jg  bf
169
    jmp not_collgx
170
ab:
171
    sub dword [ballyv],10
172
    jmp not_collgx
173
bf:
174
    add dword [ballyv],10
175
not_collgx:
176
    cmp dword [ballxv],0
177
    jl  abx
178
    jg  bfx
179
    jmp not_collg
180
abx:
181
    sub dword [ballxv],0 ;8 ;15
182
    jmp not_collg
183
bfx:
184
    add dword [ballxv],0 ;8
185
 
186
 
187
;    mov dword [ballyv],20
188
not_collg:
189
 
190
;ply contorl
191
    control 12,316,[ply1rx]
192
    control 380,470,[ply1ry]
193
 
194
;garvity
195
gravity:
196
    cmp dword [gravtime],0
197
    je no_dg
198
    dec dword [gravtime]
199
no_dg:
200
 
201
draw_gravity:
202
    cmp dword [gravtime],0
203
    je  nograv
204
    mov eax,dword [ply1x]
205
    mov ebx,dword [ply1y]
206
    sub ebx,30
207
    mov dword [gravx],eax
208
    mov dword [gravy],ebx
209
    jmp endgrav
210
nograv:
211
    mov dword [gravx],1000
212
    mov dword [gravy],1000
213
endgrav:
214
 
215
redraw_images:
216
    setimg dword [ply1x],dword [ply1y],img2
217
    setimg dword [ballx],dword [bally],img3
218
    setimg dword [gravx],dword [gravy],img5
219
 
220
draw_blocks:
221
    mov ecx,0
222
xxx2:
223
    pushad
224
    mov esi,dword [mass+ecx]
225
    mov edi,dword [mass+ecx+4]
226
    mov ebp,dword [mass+ecx+8]
227
    cmp ebp,0
228
    je  notpt
229
    cmp ebp,1
230
    jne no_a
231
    setimg esi,edi,img7a
232
    jmp notpt
233
no_a:
234
    cmp ebp,2
235
    jne no_b
236
    setimg esi,edi,img7b
237
    jmp notpt
238
no_b:
239
    cmp ebp,3
240
    jne no_c
241
    setimg esi,edi,img7c
242
    jmp notpt
243
no_c:
244
 
245
notpt:
246
    popad
247
    add ecx,12
248
    cmp ecx,[blocks_max]
249
    jne xxx2
250
 
251
;collusion ball of blocks
252
coll_blocks:
253
    mov [temp3],0
254
    mov ecx,0
255
testloop:
256
    pushad
257
    mov ebp,dword [mass+ecx+8]
258
    cmp ebp,0
259
    jne testcol
260
    jmp notest
261
testcol:
262
    mov [temp3],1
263
    mov esi,dword [mass+ecx]
264
    mov edi,dword [mass+ecx+4]
265
    mov [temp1],esi
266
    mov [temp2],edi
267
    push ecx
268
    collimg img8,[temp1],[temp2],img3,[ballx],[bally],eax
269
    pop ecx
270
    cmp eax,1
271
    jne notest
272
    mov dword [mass+ecx+8],0
273
;    neg [ballxv]
274
    neg [ballyv]
275
    add [scorea],30
276
    call draw_window
277
    jmp end_col
278
notest:
279
    popad
280
    add ecx,12
281
    cmp ecx,[blocks_max]
282
    jne testloop
283
end_col:
284
 
285
    cmp [delay_cnt],0
286
    jne no_delay
287
    mov [delay_cnt],1
288
    delay 1             ;don't generate delay for fast speed programm
289
no_delay:
290
    dec [delay_cnt]
291
 
292
win_test:
293
    cmp [temp3],1
294
    je stl
295
;    inc [level]
296
    mov [nextlev],1
297
    mov [againbut],1
298
    call draw_window
299
;    label 160,200,'You Win!',cl_Green+font_Big
300
;    label 130,220,'Youre Score:',cl_Green+font_Big
301
;    outcount dword [scorea],230,220,cl_Green,5*65536
302
;    label 130,234,'Youre Lives:',cl_Green+font_Big
303
;    outcount dword [scoreb],230,234,cl_Green,5*65536
304
;    delay 600  ;wait 2sec
305
;    close      ;exit from program
306
stl:
307
 
308
lose_test:
309
    cmp [scoreb],0
310
    jne stl2
311
;    call draw_window
312
;    label 160,200,'You Lose!',cl_Red+font_Big
313
;    label 130,220,'Youre Score:',cl_Red+font_Big
314
;    outcount dword [scorea],230,220,cl_Red,5*65536
315
;    delay 300  ;wait 2sec
316
;    close      ;exit from program
317
;    mov ebx,10*65536+40
318
;    mov ebx,10*65536+20
319
;    mov edx,2
320
;    mov esi,0x0000ff00
321
;    mov eax,8
485 heavyiron 322
;    mcall
31 halyavin 323
    mov [level],0
324
    mov [nextlev],0
325
    mov [againbut],1
326
    call draw_window
327
 
328
stl2:
329
 
330
    jmp  still
331
 
332
  red:
333
    call draw_window
334
    jmp  still
335
 
336
  key:                          ; key
337
    mov eax,2
485 heavyiron 338
    mcall
31 halyavin 339
    cmp ah,key_Left
340
    jne no_l
341
    sub dword [ply1rx],50 ;24 ;16
342
no_l:
343
    cmp ah,key_Right
344
    jne no_r
345
    add dword [ply1rx],50 ;24 ;16
346
no_r:
347
    cmp ah,key_Up
348
    jne no_u
349
    sub dword [ply1ry],20
350
no_u:
351
    cmp ah,key_Down
352
    jne no_d
353
    add dword [ply1ry],20
354
no_d:
355
    cmp ah,key_Space
356
    jne no_sp
357
    mov dword [gravtime],100
358
no_sp:
359
    jmp  still
360
 
361
  button:                       ; button
362
    mov  eax,17                 ; get id
485 heavyiron 363
    mcall
31 halyavin 364
    cmp  ah,1                   ; button id=1 ?
365
    jne  noclose
366
    mov  eax,-1                 ; close this program
485 heavyiron 367
    mcall
31 halyavin 368
noclose:
369
    cmp ah,2
370
    jne  noplayagain
371
    mov [xt],100
372
    mov [yt],100
373
    mov [gravtime],10
374
    mov [gravx],1000
375
    mov [gravy],1000
376
    mov [ply1rx],160
377
    mov [ply1ry],460
378
    mov [ply1x],160
379
    mov [ply1y],400
380
    mov [ballx],200
381
    mov [bally],300
382
    mov [ballyv],2
383
    mov [ballxv],1
384
 
385
    cmp [nextlev],1
386
    je  noch
387
    mov [scorex],0
388
    mov [scorea],0
389
    mov [scoreb],3
390
    jmp noch2
391
noch:
392
    inc [scoreb]
393
    inc [level]
394
    mov eax,[maxlev]
395
    cmp [level],eax
396
    jna noch2
397
    mov [level],eax
398
noch2:
399
 
400
    mov eax,18*4*5
401
    mul [level]
402
    mov ebp,eax
403
    add ebp,levels
404
    mov ecx,18*4*5   ;bytes
405
loo:
406
    mov eax,dword [ebp+ecx]
407
    mov dword [mass+ecx],eax
408
    sub ecx,4
409
    jnz loo
410
 
411
    mov [againbut],0
412
 
413
    call draw_window
414
noplayagain:
415
    jmp  still
416
 
417
 
418
draw_window:
419
    startwd
420
    window 0,0,400+8,480+24,window_Skinned
3483 fedesco 421
    if lang eq it
422
        label 12,8,'ARCANOID: Usa le freccie    Vite      Punti',cl_White+font_Big
423
    else
424
        label 12,8,'ARCANOID: USE ARROW KEYS    LIVES      SCORE',cl_White+font_Big
425
    end if
31 halyavin 426
 
3483 fedesco 427
 
31 halyavin 428
    cmp [againbut],0
429
    je  no_againbut
430
 
431
    cmp [nextlev],1
432
    je  nlev
3483 fedesco 433
    if lang eq it
434
        label 160,200,'Hai perso!',cl_Red+font_Big
435
        label 130,220,'Punteggio:',cl_Red+font_Big
436
    else
437
        label 160,200,'You Lose!',cl_Red+font_Big
438
        label 130,220,'Youre Score:',cl_Red+font_Big
439
    end if
31 halyavin 440
    outcount dword [scorea],230,220,cl_Red,5*65536
441
    mov ebx,150*65536+80
442
    mov ecx,240*65536+12
443
    mov edx,2
444
    mov esi,0x0000aa00
445
    mov eax,8
485 heavyiron 446
    mcall
31 halyavin 447
    mov ecx,260*65536+12
448
    mov edx,1
485 heavyiron 449
    mcall
3483 fedesco 450
    if lang eq it
451
        label 152,244,'Rigioca',cl_Red+font_Big
452
    else
453
        label 152,244,'Play again?',cl_Red+font_Big
454
    end if
31 halyavin 455
    jmp elev
456
nlev:
3483 fedesco 457
    if lang eq it
458
        label 160,200,'Hai vinto!',cl_Green+font_Big
459
        label 130,220,'Punteggio:',cl_Green+font_Big
460
    else
461
        label 160,200,'You Win!',cl_Green+font_Big
462
        label 130,220,'Youre Score:',cl_Green+font_Big
463
    end if
31 halyavin 464
    outcount dword [scorea],230,220,cl_Green,5*65536
3483 fedesco 465
    mov ebx,150*65536+120  ;mov ebx,150*65536+80
31 halyavin 466
    mov ecx,240*65536+12
467
    mov edx,2
468
    mov esi,0x0000aa00
469
    mov eax,8
485 heavyiron 470
    mcall
31 halyavin 471
    mov ecx,260*65536+12
472
    mov edx,1
485 heavyiron 473
    mcall
3483 fedesco 474
    if lang eq it
475
        label 152,244,'Prossimo Livello',cl_Red+font_Big
476
    else
477
        label 152,244,'Next level?',cl_Red+font_Big
478
    end if
31 halyavin 479
elev:
3483 fedesco 480
    if lang eq it
481
        label 178,264,'Esci',cl_Red+font_Big
482
    else
483
        label 178,264,'Exit?',cl_Red+font_Big
484
    end if
31 halyavin 485
 
486
no_againbut:
487
 
488
    endwd
489
    ret
490
 
491
 
492
; DATA AREA
493
againbut dd 0
494
 
495
xt dd 100
496
yt dd 100
497
 
498
gravtime dd 10
499
gravx dd 1000
500
gravy dd 1000
501
 
502
ply1rx dd 160
503
ply1ry dd 460
504
 
505
ply1x dd 160
506
ply1y dd 400
507
 
508
ballx dd 200
509
bally dd 300
510
 
511
ballyv dd 2
512
ballxv dd 1
513
 
514
temp1 dd 0
515
temp2 dd 0
516
temp3 dd 0
517
 
518
scorex dd 0
519
scorea dd 0
520
scoreb dd 3
521
 
522
level dd 0
523
nextlev dd 0
524
maxlev dd 2
525
 
526
counter dd 0
527
tsoi dd 0
528
 
529
delay_cnt dd 0
530
 
531
blocks_max dd 6*5*12 ;size in bytes 5*3 dd
532
 
533
mass:
534
     dd  30,200,0 ,90,200,0 ,150,200,0 ,210,200,0 ,270,200,0 ,330,200,0
535
     dd  30,180,0 ,90,180,0 ,150,180,0 ,210,180,0 ,270,180,0 ,330,180,0
536
     dd  30,160,0 ,90,160,0 ,150,160,0 ,210,160,0 ,270,160,0 ,330,160,0
537
     dd  30,140,0 ,90,140,1 ,150,140,1 ,210,140,1 ,270,140,0 ,330,140,0
538
     dd  30,120,0 ,90,120,0 ,150,120,0 ,210,120,0 ,270,120,0 ,330,120,0
539
 
540
levels:
541
     dd  30,200,0 ,90,200,0 ,150,200,0 ,210,200,2 ,270,200,0 ,330,200,0
542
     dd  30,180,2 ,90,180,1 ,150,180,1 ,210,180,2 ,270,180,2 ,330,180,0
543
     dd  30,160,1 ,90,160,3 ,150,160,1 ,210,160,2 ,270,160,2 ,330,160,2
544
     dd  30,140,2 ,90,140,1 ,150,140,1 ,210,140,2 ,270,140,2 ,330,140,0
545
     dd  30,120,0 ,90,120,0 ,150,120,0 ,210,120,2 ,270,120,0 ,330,120,0
546
;level2
547
     dd  30,200,0 ,90,200,3 ,150,200,0 ,210,200,2 ,270,200,2 ,330,200,2
548
     dd  30,180,0 ,90,180,1 ,150,180,0 ,210,180,2 ,270,180,2 ,330,180,2
549
     dd  30,160,0 ,90,160,3 ,150,160,0 ,210,160,2 ,270,160,2 ,330,160,2
550
     dd  30,140,0 ,90,140,1 ,150,140,0 ,210,140,2 ,270,140,2 ,330,140,2
551
     dd  30,120,0 ,90,120,3 ,150,120,0 ,210,120,2 ,270,120,2 ,330,120,2
552
;level3
553
     dd  30,200,1 ,90,200,3 ,150,200,1 ,210,200,2 ,270,200,2 ,330,200,2
554
     dd  30,180,2 ,90,180,1 ,150,180,1 ,210,180,2 ,270,180,2 ,330,180,2
555
     dd  30,160,1 ,90,160,3 ,150,160,1 ,210,160,2 ,270,160,2 ,330,160,2
556
     dd  30,140,2 ,90,140,1 ,150,140,1 ,210,140,2 ,270,140,2 ,330,140,2
557
     dd  30,120,1 ,90,120,3 ,150,120,1 ,210,120,2 ,270,120,2 ,330,120,2
558
 
559
arc_file:
560
file 'arc.bmp'
561
 
562
rb 20000
563
 
564
IM_END:
565
 
566
pong:
567
rb 80*60*3+8
568
img:
569
rb 32*32*3+8
570
img2:
571
rb 32*32*3+8
572
img3:
573
rb 32*32*3+8
574
img4:
575
rb 80*20*3+8
576
img5:
577
rb 80*20*3+8
578
img6:
579
rb 15*15*3+8
580
img7a:
581
rb 60*20*3+8
582
img7b:
583
rb 60*20*3+8
584
img7c:
585
rb 60*20*3+8
586
img8:
587
rb 60*40*3+8
588
 
589
I_END: