5,6 → 5,8 |
; Not use bmpfile! |
|
;****************************************************************************** |
format binary as "" |
|
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
13,7 → 15,7 |
dd IM_END ; size of image |
dd 0x300000 ; memory for app |
dd 0x300000 ; esp |
dd temp_area , 0x0 ; I_Param , I_Icon |
dd temp_area, 0x0 ; I_Param , I_Path |
|
;****************************************************************************** |
|
24,341 → 26,324 |
|
|
START: ; start of execution |
call draw_window |
call draw_window |
|
; loadbmp '/RD/1/PONG.BMP',temp_area,I_END,tsoi |
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 |
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 |
|
|
|
still: |
scevent red,key,button |
|
scevent red,key,button |
;mcall 48, 4 ;get skin width |
;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 |
|
;mcall 48, 4 ;get skin width |
;sub [skin_h], 16 |
;div eax, 2 |
;mov [skin_h], eax |
|
outcount dword [scoreb],300,8,cl_Blue,5*65536 |
outcount dword [scorea],350,8,cl_Red,5*65536 |
|
del_images: |
setimg dword [ply1x],dword [ply1y],img4 |
setimg dword [ply2x],dword [ply2y],img4 |
setimg dword [ballx],dword [bally],img6 |
setimg dword [gravx],dword [gravy],img4 |
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 |
|
correct [ply1x],[ply1rx],4 |
correct [ply1y],[ply1ry],2 |
; automove ball |
mov eax, [ballxv] |
add [ballx], eax |
mov eax, [ballyv] |
add [bally], eax |
|
;automove ball |
mov eax,dword [ballxv] |
add dword [ballx],eax |
mov eax,dword [ballyv] |
add dword [bally],eax |
|
|
;autoslow ball |
cmp dword [ballxv],0 |
jl ballb |
cmp [ballxv], 0 |
jl ballb |
balla: |
cmp dword [ballxv],2 |
jng balln |
dec dword [ballxv] |
jmp balln |
cmp [ballxv], 2 |
jng balln |
dec [ballxv] |
jmp balln |
ballb: |
cmp dword [ballxv],-2 |
jnl balln |
inc dword [ballxv] |
jmp balln |
cmp [ballxv], -2 |
jnl balln |
inc [ballxv] |
jmp balln |
balln: |
cmp dword [ballyv],2 |
jng by_n |
dec dword [ballyv] |
cmp [ballyv], 2 |
jng by_n |
dec [ballyv] |
by_n: |
|
;ball collusion of screen |
cmp dword [ballx],640-32 |
jna xa_ok |
neg dword [ballxv] |
cmp [ballx], 640-32 |
jna xa_ok |
neg [ballxv] |
xa_ok: |
cmp dword [ballx],6 |
jnb xb_ok |
neg dword [ballxv] |
cmp [ballx], 6 |
jnb xb_ok |
neg [ballxv] |
xb_ok: |
|
;if ball far out of screen come back |
; is not work already |
cmp dword [bally],466 |
jng yax_ok |
call draw_window |
inc dword [scoreb] |
mov dword [bally],240 |
mov dword [ballx],310 |
mov dword [ballyv],2 |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
cmp [bally], 466 |
jng yax_ok |
call draw_window |
inc [scoreb] |
mov [bally], 240 |
mov [ballx], 310 |
mov [ballyv], 2 |
random 5, [ballxv] |
sub [ballxv], 2 |
yax_ok: |
cmp dword [bally],30 |
jnl yax_ok2 |
call draw_window |
inc dword [scorea] |
mov dword [bally],240 |
mov dword [ballx],310 |
mov dword [ballyv],2 |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
cmp [bally], 30 |
jnl yax_ok2 |
call draw_window |
inc [scorea] |
mov [bally], 240 |
mov [ballx], 310 |
mov [ballyv], 2 |
random 5, [ballxv] |
sub [ballxv], 2 |
yax_ok2: |
|
xorx: |
cmp dword [ballxv],0 |
jne norx |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
cmp dword [ballxv],0 |
je xorx |
cmp [ballxv], 0 |
jne norx |
random 5, [ballxv] |
sub [ballxv], 2 |
cmp [ballxv], 0 |
je xorx |
norx: |
|
;test on collusion ply1 of ball |
collusion_test: |
collimg img,[ply1x],[ply1y],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_coll |
neg dword [ballyv] |
add dword [bally],4 |
; neg dword [ballxv] |
collimg img, [ply1x], [ply1y], img3, [ballx], [bally], eax |
cmp eax, 1 |
jne not_coll |
neg [ballyv] |
add [bally], 4 |
; neg [ballxv] |
not_coll: |
|
;test on collusion com of ball |
collusion_com: |
collimg img,[ply2x],[ply2y],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_collcom |
neg dword [ballyv] |
sub dword [bally],4 |
; neg dword [ballxv] |
collimg img, [ply2x], [ply2y], img3, [ballx], [bally], eax |
cmp eax, 1 |
jne not_collcom |
neg [ballyv] |
sub [bally], 4 |
; neg dword [ballxv] |
not_collcom: |
|
;test on collusion gravity of ball |
collusion_grav: |
collimg img,[gravx],[gravy],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_collg |
neg dword [ballyv] |
collimg img, [gravx], [gravy], img3, [ballx], [bally], eax |
cmp eax, 1 |
jne not_collg |
neg [ballyv] |
|
; mov dword [ballxv],-20 |
; mov [ballxv], -20 |
|
cmp dword [ballyv],0 |
jl ab |
jg bf |
jmp not_collgx |
cmp [ballyv], 0 |
jl ab |
jg bf |
jmp not_collgx |
ab: |
sub dword [ballyv],25 |
jmp not_collgx |
sub [ballyv], 25 |
jmp not_collgx |
bf: |
add dword [ballyv],25 |
add [ballyv], 25 |
not_collgx: |
cmp dword [ballxv],0 |
jl abx |
jg bfx |
jmp not_collg |
cmp [ballxv], 0 |
jl abx |
jg bfx |
jmp not_collg |
abx: |
sub dword [ballxv],8 ;15 |
jmp not_collg |
sub [ballxv], 8 ;15 |
jmp not_collg |
bfx: |
add dword [ballxv],8 |
add [ballxv], 8 |
|
|
; mov dword [ballyv],20 |
; mov [ballyv], 20 |
not_collg: |
|
;ply contorl |
cmp dword [ply1rx],560 |
jna plyok |
cmp dword [ply1rx],12000 |
jna paa |
mov dword [ply1rx],4 |
jmp plyok |
cmp [ply1rx], 560 |
jna plyok |
cmp [ply1rx], 12000 |
jna paa |
mov [ply1rx], 4 |
jmp plyok |
paa: |
mov dword [ply1rx],560 |
mov [ply1rx], 560 |
plyok: |
|
|
;com contorl |
cmp dword [ply2x],560 |
jna cplyok |
cmp dword [ply2x],12000 |
jna cpaa |
mov dword [ply2x],4 |
jmp cplyok |
cmp [ply2x], 560 |
jna cplyok |
cmp [ply2x], 12000 |
jna cpaa |
mov [ply2x], 4 |
jmp cplyok |
cpaa: |
mov dword [ply2x],560 |
mov [ply2x], 560 |
cplyok: |
|
|
;com move |
cx_move: |
cmp dword [bally],160 |
jna cno_m |
mov eax,dword [ballx] |
sub eax,30 |
cmp dword [ply2x],eax |
je cno_m |
cmp dword [ply2x],eax |
ja cm_m |
cmp [bally], 160 |
jna cno_m |
mov eax, [ballx] |
sub eax, 30 |
cmp [ply2x], eax |
je cno_m |
cmp [ply2x], eax |
ja cm_m |
cm_p: |
add dword [ply2x],3 |
jmp cno_m |
add [ply2x], 3 |
jmp cno_m |
cm_m: |
sub dword [ply2x],3 |
sub [ply2x], 3 |
cno_m: |
|
;garvity |
gravity: |
cmp dword [gravtime],0 |
je no_dg |
dec dword [gravtime] |
cmp [gravtime], 0 |
je no_dg |
dec [gravtime] |
no_dg: |
|
draw_gravity: |
cmp dword [gravtime],0 |
je nograv |
mov eax,dword [ply1x] |
mov ebx,dword [ply1y] |
add ebx,10 |
mov dword [gravx],eax |
mov dword [gravy],ebx |
jmp endgrav |
cmp [gravtime], 0 |
je nograv |
mov eax, [ply1x] |
mov ebx, [ply1y] |
add ebx, 10 |
mov [gravx], eax |
mov [gravy], ebx |
jmp endgrav |
nograv: |
mov dword [gravx],1000 |
mov dword [gravy],1000 |
mov [gravx], 1000 |
mov [gravy], 1000 |
endgrav: |
|
redraw_images: |
setimg dword [ply1x],dword [ply1y],img |
setimg dword [ply2x],dword [ply2y],img2 ;2 |
setimg dword [ballx],dword [bally],img3 |
setimg dword [gravx],dword [gravy],img5 |
setimg [ply1x], [ply1y], img |
setimg [ply2x], [ply2y], img2 |
setimg [ballx], [bally], img3 |
setimg [gravx], [gravy], img5 |
|
delay 1 ;don't generate delay for fast speed programm |
|
delay 1 ;don't generate delay for fast speed programm |
jmp still |
|
jmp still |
|
red: |
call draw_window |
jmp still |
call draw_window |
jmp still |
|
key: ; key |
mov eax,2 |
mcall |
cmp ah,key_Left |
jne no_l |
sub dword [ply1rx],32 ;16 |
mov eax, 2 |
mcall |
cmp ah, key_Left |
jne no_l |
sub [ply1rx], 32 ;16 |
no_l: |
cmp ah,key_Right |
jne no_r |
add dword [ply1rx],32 ;16 |
cmp ah, key_Right |
jne no_r |
add [ply1rx], 32 ;16 |
no_r: |
cmp ah,key_Up |
jne no_u |
sub dword [ply1ry],16 |
cmp ah, key_Up |
jne no_u |
sub [ply1ry], 16 |
no_u: |
cmp ah,key_Down |
jne no_d |
add dword [ply1ry],16 |
cmp ah, key_Down |
jne no_d |
add [ply1ry], 16 |
no_d: |
cmp ah,key_Space |
jne no_sp |
mov dword [gravtime],100 |
cmp ah, key_Space |
jne no_sp |
mov [gravtime], 100 |
no_sp: |
|
jmp still |
jmp still |
|
button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne noclose |
mov eax,-1 ; close this program |
mcall |
mov eax, 17 ; get id |
mcall |
cmp ah, 1 ; button id=1 ? |
jne noclose |
mov eax, -1 ; close this program |
mcall |
noclose: |
jmp still |
jmp still |
|
|
draw_window: |
mcall 12,1 ;start window redraw |
mcall 0, <10, 640+8>, <10, 480+24>, 0x14000000,, wtitle |
mcall 12,2 ;end window redraw |
ret |
mcall 12,1 ;start window redraw |
mcall 0, <10, 640+8>, <10, 480+24>, 0x14000000,, wtitle |
mcall 12,2 ;end window redraw |
ret |
|
|
; DATA AREA |
wtitle db 'PONG: USE ARROW KEYS SCORE:',0 |
wtitle db 'PONG: USE ARROW KEYS SCORE:',0 |
;skin_h dd 25 |
|
xt dd 100 |
yt dd 100 |
xt dd 100 |
yt dd 100 |
|
gravtime dd 10 |
gravx dd 1000 |
gravy dd 1000 |
gravtime dd 10 |
gravx dd 1000 |
gravy dd 1000 |
|
ply1rx dd 200 |
ply1ry dd 50 |
ply1rx dd 200 |
ply1ry dd 50 |
|
ply1x dd 200 |
ply1y dd 50 |
ply1x dd 200 |
ply1y dd 50 |
|
ply2x dd 200 |
ply2y dd 400 |
ply2x dd 200 |
ply2y dd 400 |
|
ballx dd 200 |
bally dd 200 |
ballx dd 200 |
bally dd 200 |
|
ballyv dd 3 |
ballxv dd 3 |
ballyv dd 3 |
ballxv dd 3 |
|
scorea dd 0 |
scoreb dd 0 |
scorea dd 0 |
scoreb dd 0 |
|
counter dd 0 |
tsoi dd 0 |
counter dd 0 |
tsoi dd 0 |
|
pongfile: |
file 'pong.bmp' |
pongfile file 'pong.bmp' |
|
IM_END: |
|
temp: |
rb 20000 |
temp rb 20000 |
|
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 |
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 |
temp_area rb 0x15000 |
|
I_END: |