Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 6023 → Rev 6024

/programs/games/pong3/trunk/ascgl.inc
89,45 → 89,45
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv
{
local bounce,exit,anot,bc,nbc
mov esi,[img1_off] ;xs1
mov edi,[img2_off] ;ys2
mov eax,x1 ;
mov ebx,x2 ;
call _1dbounce
mov edx,ecx
mov esi,[img1_off+4] ;ys1
mov edi,[img2_off+4] ;ys2
mov eax,y1 ;
mov ebx,y2 ;
call _1dbounce
add edx,ecx
cmp edx,2
je bounce
mov otv,0
jmp exit
mov esi, dword[img1_off] ;xs1
mov edi, dword[img2_off] ;ys2
mov eax, x1 ;
mov ebx, x2 ;
call _1dbounce
mov edx,ecx
mov esi, dword[img1_off+4] ;ys1
mov edi, dword[img2_off+4] ;ys2
mov eax, y1 ;
mov ebx, y2 ;
call _1dbounce
add edx, ecx
cmp edx, 2
je bounce
mov otv, 0
jmp exit
_1dbounce_count=_1dbounce_count+1
if (_1dbounce_count = 1)
_1dbounce:
cmp ebx,eax
jnae anot
add eax,esi
cmp eax,ebx
jna nbc
jmp bc
cmp ebx,eax
jnae anot
add eax,esi
cmp eax,ebx
jna nbc
jmp bc
anot:
add ebx,edi
cmp ebx,eax
jna nbc
bc:
cmp ebx,eax
jna nbc
bc:
mov ecx,1
ret
ret
nbc:
mov ecx,0
ret
mov ecx,0
ret
end if
bounce:
mov otv,1
exit:
bounce:
mov otv,1
exit:
}
 
; SETBMP - Set bmp to window
316,14 → 316,14
yespicsize:
mov eax,bmp_load_area
mov ebx,eax
add ebx, [bmp_load_area+2];file size
add ebx, dword[bmp_load_area+2];file size
inc ebx
mov dword [bmp_soi],ebx ;soi-start of image area for drawing
add eax, [bmp_load_area+10]
add eax, dword[bmp_load_area+10]
mov dword [sop],eax ;sop-start of picture in file
add eax, [bmp_load_area+34]
add eax, dword[bmp_load_area+34]
mov dword [eop],eax ;eop-end of picture in file
mov eax, [bmp_load_area+18]
mov eax, dword[bmp_load_area+18]
lea eax,[eax+2*eax] ;3x pixels in eax
 
mov edi,dword [bmp_soi] ;initializing
341,9 → 341,9
rep movsd
convert1:
pop edi
sub esi,dword [bps]
sub esi,dword [bps]
cmp esi,dword [sop]
sub esi, dword[bps]
sub esi, dword[bps]
cmp esi, dword[sop]
jb end_bmp;nomorestring
add edi,eax
jmp nextstring
353,10 → 353,10
 
convertno32:
mov ebx,bmp_load_area
add ebx, [bmp_load_area+14]
add ebx, dword[bmp_load_area+14]
add ebx,14 ;start of color table
push esi
add esi,dword [bps]
add esi, dword[bps]
mov dword [eos],esi
pop esi
nextelem:
/programs/games/pong3/trunk/pong3.asm
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: