15,7 → 15,7 |
dd IM_END ; size of image |
dd 0x300000 ; memory for app |
dd 0x300000 ; esp |
dd temp_area, 0x0 ; I_Param , I_Path |
dd 0x0, 0x0 ; I_Param , I_Path |
|
;****************************************************************************** |
|
24,36 → 24,39 |
include 'ascgl.inc' |
include 'ascgml.inc' |
|
AREA_W = 640 |
AREA_H = 480 |
|
|
START: ; start of execution |
call draw_window |
|
convbmp pongfile, tsoi |
bmptoimg pongfile, tsoi,pong |
getimg pong, 0, 0, 80, 4, img |
getimg pong, 0, 4, 80, 4, img2 |
getimg pong, 5, 38, 15, 15, img3 |
getimg pong, 0, 8, 80, 20, img5 |
fullimg img4, 80 ,20 ,0x00000000 ;black for rocket |
fullimg img6, 15 ,15 ,0x00000000 ;black for ball |
getimg pong, 0, 10, 80, 20, img5 |
fullimg imgbr, 80, 4, 0x00000000 ;black for rocket |
fullimg imgbg, 80, 20, 0x00000000 ;black for grav |
fullimg imgbb, 12, 12, 0x00000000 ;black for ball |
|
still: |
scevent red,key,button |
|
;mcall 48, 4 ;get skin width |
;mcall 48, 4 ;get skin height |
;sub [skin_h], 16 |
;div eax, 2 |
;mov [skin_h], eax |
|
outcount [scoreb], 300, 4, 0x10000000 + cl_Blue, 5 shl 16 |
outcount [scorea], 350, 4, 0x10000000 + cl_Red, 5 shl 16 |
remember_old_coordinates: |
m2m [ply1x_old], [ply1x] |
m2m [ply1y_old], [ply1y] |
m2m [ply2x_old], [ply2x] |
m2m [ply2y_old], [ply2y] |
m2m [gravx_old], [gravx] |
m2m [gravy_old], [gravy] |
m2m [ballx_old], [ballx] |
m2m [bally_old], [bally] |
|
del_images: |
setimg [ply1x], [ply1y], img4 |
setimg [ply2x], [ply2y], img4 |
setimg [ballx], [bally], img6 |
setimg [gravx], [gravy], img4 |
|
move_ply1: |
correct [ply1x], [ply1rx], 4 |
correct [ply1y], [ply1ry], 2 |
84,7 → 87,7 |
by_n: |
|
;ball collusion of screen |
cmp [ballx], 640-32 |
cmp [ballx], AREA_W-12 |
jna xa_ok |
neg [ballxv] |
xa_ok: |
95,10 → 98,10 |
|
;if ball far out of screen come back |
; is not work already |
cmp [bally], 466 |
cmp [bally], AREA_H-30 ;check RED fails |
jng yax_ok |
call draw_window |
inc [scoreb] |
call draw_score |
mov [bally], 240 |
mov [ballx], 310 |
mov [ballyv], 2 |
105,10 → 108,10 |
random 5, [ballxv] |
sub [ballxv], 2 |
yax_ok: |
cmp [bally], 30 |
cmp [bally], 0 ;check BLUE fails |
jnl yax_ok2 |
call draw_window |
inc [scorea] |
call draw_score |
mov [bally], 240 |
mov [ballx], 310 |
mov [ballyv], 2 |
240,10 → 243,45 |
mov [gravy], 1000 |
endgrav: |
|
;next code checks were coordinates of player1 and player2 |
;changed or not |
; if yes => fill old |
; if no => do not fill old |
redraw_images: |
;player1 |
;if (ply1x!=ply1x_old) || (ply1y!=ply1y_old) fill1 |
mov eax, [ply1x] |
cmp [ply1x_old], eax |
jne fill1 |
mov eax, [ply1y] |
cmp [ply1y_old],eax |
jne fill1 |
jmp no_fill1 |
fill1: |
setimg [ply1x_old], [ply1y_old], imgbr |
no_fill1: |
setimg [ply1x], [ply1y], img |
|
;player2 |
;if (ply2x!=ply2x_old) || (ply2y!=ply2y_old) fill2 |
mov eax, [ply2x] |
cmp [ply2x_old], eax |
jne fill2 |
mov eax, [ply2y] |
cmp [ply2y_old],eax |
jne fill2 |
jmp no_fill2 |
fill2: |
setimg [ply2x_old], [ply2y_old], imgbr |
no_fill2: |
setimg [ply2x], [ply2y], img2 |
|
;ball |
setimg [ballx_old], [bally_old], imgbb |
setimg [ballx], [bally], img3 |
|
;grav |
setimg [gravx_old], [gravy_old], imgbg |
setimg [gravx], [gravy], img5 |
|
delay 1 ;don't generate delay for fast speed programm |
268,10 → 306,16 |
cmp ah, key_Up |
jne no_u |
sub [ply1ry], 16 |
cmp [ply1ry], 0 |
jb no_u |
mov [ply1ry], 0 |
no_u: |
cmp ah, key_Down |
jne no_d |
add [ply1ry], 16 |
cmp [ply1ry], AREA_H-50 |
jl no_d |
mov [ply1ry], AREA_H-50 |
no_d: |
cmp ah, key_Space |
jne no_sp |
280,13 → 324,11 |
|
jmp still |
|
button: ; button |
mov eax, 17 ; get id |
mcall |
button: |
mcall 17 ; get id |
cmp ah, 1 ; button id=1 ? |
jne noclose |
mov eax, -1 ; close this program |
mcall |
mcall -1 ; close this program |
noclose: |
jmp still |
|
293,15 → 335,28 |
|
draw_window: |
mcall 12,1 ;start window redraw |
mcall 0, <10, 640+8>, <10, 480+24>, 0x14000000,, wtitle |
mcall 0, <10, AREA_W+5+9>, <10, 480+35>, 0x34000000,, wtitle |
mcall 12,2 ;end window redraw |
|
draw_score: |
mcall 13, <10, 100>, <AREA_H-17, 16>, 0 |
outcount [scoreb], 10, AREA_H-17, 0x01000000 + cl_Blue, 3 shl 16 |
outcount [scorea], 50, AREA_H-17, 0x01000000 + cl_Red, 3 shl 16 |
ret |
|
|
; DATA AREA |
wtitle db 'PONG: USE ARROW KEYS SCORE:',0 |
wtitle db 'PONG: use Arrow Keys and Space',0 |
;skin_h dd 25 |
|
ply1x_old dd ? |
ply1y_old dd ? |
ply2x_old dd ? |
ply2y_old dd ? |
gravx_old dd ? |
gravy_old dd ? |
ballx_old dd ? |
bally_old dd ? |
|
xt dd 100 |
yt dd 100 |
|
310,10 → 365,10 |
gravy dd 1000 |
|
ply1rx dd 200 |
ply1ry dd 50 |
ply1ry dd 40 |
|
ply1x dd 200 |
ply1y dd 50 |
ply1y dd 40 |
|
ply2x dd 200 |
ply2y dd 400 |
336,14 → 391,16 |
|
temp rb 20000 |
|
;real images |
pong rb 80*60*3+8 |
img rb 32*32*3+8 |
img2 rb 32*32*3+8 |
img3 rb 32*32*3+8 |
img4 rb 80*20*3+8 |
img5 rb 32*32*3+8 |
img6 rb 15*15*3+8 |
|
temp_area rb 0x15000 |
;black to clean old images |
imgbr rb 80*4 *3+8 |
imgbg rb 80*20*3+8 |
imgbb rb 12*12*3+8 |
|
I_END: |