Subversion Repositories Kolibri OS

Rev

Rev 6024 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;   Pong Gaem 3Ver Mini Sample by Pavlushin Evgeni for ASCL
  3. ;   www.waptap@mail.ru
  4. ;
  5. ;   Not use bmpfile!
  6.  
  7. ;******************************************************************************
  8. format binary as ""
  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_Path
  19.  
  20. ;******************************************************************************
  21.  
  22. include '..\..\..\macros.inc'
  23. include 'ascl.inc'
  24. include 'ascgl.inc'
  25. include 'ascgml.inc'
  26.  
  27. AREA_W = 640
  28. AREA_H = 480
  29.  
  30.  
  31. START:                          ; start of execution
  32.         convbmp pongfile, tsoi
  33.         bmptoimg pongfile, tsoi,pong
  34.         getimg pong, 0, 0,  80, 4, img
  35.         getimg pong, 0, 4,  80, 4, img2
  36.         getimg pong, 5, 38, 15, 15, img3
  37.         getimg pong, 0, 10, 80, 20, img5
  38.         fullimg imgbr, 80, 4,  0x00000000  ;black for rocket
  39.         fullimg imgbg, 80, 20, 0x00000000  ;black for grav
  40.         fullimg imgbb, 12, 12, 0x00000000  ;black for ball
  41.  
  42. still:
  43.         scevent red,key,button
  44.  
  45.         ;mcall 48, 4 ;get skin height
  46.         ;sub [skin_h], 16
  47.         ;div eax, 2
  48.         ;mov [skin_h], eax
  49.  
  50. remember_old_coordinates:
  51.         m2m [ply1x_old], [ply1x]
  52.         m2m [ply1y_old], [ply1y]
  53.         m2m [ply2x_old], [ply2x]
  54.         m2m [ply2y_old], [ply2y]
  55.         m2m [gravx_old], [gravx]
  56.         m2m [gravy_old], [gravy]
  57.         m2m [ballx_old], [ballx]
  58.         m2m [bally_old], [bally]
  59.  
  60. move_ply1:
  61.         correct [ply1x], [ply1rx], 4
  62.         correct [ply1y], [ply1ry], 2
  63.  
  64. ; automove ball
  65.         mov     eax, [ballxv]
  66.         add     [ballx], eax
  67.         mov     eax, [ballyv]
  68.         add     [bally], eax
  69.  
  70. ;autoslow ball
  71.         cmp     [ballxv], 0
  72.         jl       ballb
  73. balla:
  74.         cmp     [ballxv], 2
  75.         jng     balln
  76.         dec     [ballxv]
  77.         jmp     balln
  78. ballb:
  79.         cmp     [ballxv], -2
  80.         jnl     balln
  81.         inc     [ballxv]
  82.         jmp     balln
  83. balln:
  84.         cmp     [ballyv], 2
  85.         jng     by_n
  86.         dec     [ballyv]
  87. by_n:
  88.  
  89. ;ball collusion of screen
  90.         cmp     [ballx], AREA_W-12
  91.         jna     xa_ok
  92.         neg     [ballxv]
  93. xa_ok:
  94.         cmp     [ballx], 6
  95.         jnb     xb_ok
  96.         neg     [ballxv]
  97. xb_ok:
  98.  
  99. ;if ball far out of screen come back
  100. ; is not work already
  101.         cmp     [bally], AREA_H-30 ;check RED fails
  102.         jng     yax_ok
  103.         inc     [scoreb]
  104.         call    draw_score
  105.         mov     [bally], 240
  106.         mov     [ballx], 310
  107.         mov     [ballyv], 2
  108.         random 5, [ballxv]
  109.         sub     [ballxv], 2
  110. yax_ok:
  111.         cmp     [bally], 0  ;check BLUE fails
  112.         jnl     yax_ok2
  113.         inc     [scorea]
  114.         call    draw_score
  115.         mov     [bally], 240
  116.         mov     [ballx], 310
  117.         mov     [ballyv], 2
  118.         random 5, [ballxv]
  119.         sub     [ballxv], 2
  120. yax_ok2:
  121.  
  122. xorx:
  123.         cmp     [ballxv], 0
  124.         jne     norx
  125.         random 5, [ballxv]
  126.         sub     [ballxv], 2
  127.         cmp     [ballxv], 0
  128.         je      xorx
  129. norx:
  130.  
  131. ;test on collusion ply1 of ball
  132. collusion_test:
  133.         collimg img, [ply1x], [ply1y], img3, [ballx], [bally], eax
  134.         cmp     eax, 1
  135.         jne     not_coll
  136.         neg     [ballyv]
  137.         add     [bally], 4
  138. ;        neg     [ballxv]
  139. not_coll:
  140.  
  141. ;test on collusion com of ball
  142. collusion_com:
  143.         collimg img, [ply2x], [ply2y], img3, [ballx], [bally], eax
  144.         cmp     eax, 1
  145.         jne     not_collcom
  146.         neg     [ballyv]
  147.         sub     [bally], 4
  148. ;        neg dword [ballxv]
  149. not_collcom:
  150.  
  151. ;test on collusion gravity of ball
  152. collusion_grav:
  153.         collimg img, [gravx], [gravy], img3, [ballx], [bally], eax
  154.         cmp     eax, 1
  155.         jne     not_collg
  156.         neg     [ballyv]
  157.  
  158. ;        mov     [ballxv], -20
  159.  
  160.         cmp     [ballyv], 0
  161.         jl      ab
  162.         jg      bf
  163.         jmp     not_collgx
  164. ab:
  165.         sub     [ballyv], 25
  166.         jmp     not_collgx
  167. bf:
  168.         add     [ballyv], 25
  169. not_collgx:
  170.         cmp     [ballxv], 0
  171.         jl      abx
  172.         jg      bfx
  173.         jmp     not_collg
  174. abx:
  175.         sub     [ballxv], 8 ;15
  176.         jmp     not_collg
  177. bfx:
  178.         add     [ballxv], 8
  179.  
  180.  
  181. ;        mov     [ballyv], 20
  182. not_collg:
  183.  
  184. ;ply contorl
  185.         cmp     [ply1rx], 560
  186.         jna     plyok
  187.         cmp     [ply1rx], 12000
  188.         jna     paa
  189.         mov     [ply1rx], 4
  190.         jmp     plyok
  191. paa:
  192.         mov     [ply1rx], 560
  193. plyok:
  194.  
  195.  
  196. ;com contorl
  197.         cmp     [ply2x], 560
  198.         jna     cplyok
  199.         cmp     [ply2x], 12000
  200.         jna     cpaa
  201.         mov     [ply2x], 4
  202.         jmp     cplyok
  203. cpaa:
  204.         mov     [ply2x], 560
  205. cplyok:
  206.  
  207.  
  208. ;com move
  209. cx_move:
  210.         cmp     [bally], 160
  211.         jna     cno_m
  212.         mov     eax, [ballx]
  213.         sub     eax, 30
  214.         cmp     [ply2x], eax
  215.         je      cno_m
  216.         cmp     [ply2x], eax
  217.         ja      cm_m
  218. cm_p:
  219.         add     [ply2x], 3
  220.         jmp     cno_m
  221. cm_m:
  222.         sub     [ply2x], 3
  223. cno_m:
  224.  
  225. ;garvity
  226. gravity:
  227.         cmp     [gravtime], 0
  228.         je      no_dg
  229.         dec     [gravtime]
  230. no_dg:
  231.  
  232. draw_gravity:
  233.         cmp     [gravtime], 0
  234.         je      nograv
  235.         mov     eax, [ply1x]
  236.         mov     ebx, [ply1y]
  237.         add     ebx, 10
  238.         mov     [gravx], eax
  239.         mov     [gravy], ebx
  240.         jmp     endgrav
  241. nograv:
  242.         mov     [gravx], 1000
  243.         mov     [gravy], 1000
  244. endgrav:
  245.  
  246. ;next code checks were coordinates of player1 and player2
  247. ;changed or not
  248. ;    if yes => fill old
  249. ;    if no  => do not fill old
  250. redraw_images:
  251.                 ;player1
  252.                 ;if (ply1x!=ply1x_old) || (ply1y!=ply1y_old) fill1
  253.                 mov    eax, [ply1x]
  254.                 cmp    [ply1x_old], eax
  255.                 jne    fill1
  256.                 mov    eax, [ply1y]
  257.                 cmp    [ply1y_old],eax
  258.                 jne    fill1
  259.                 jmp    no_fill1
  260.         fill1:
  261.         setimg [ply1x_old], [ply1y_old], imgbr
  262.         no_fill1:
  263.         setimg [ply1x], [ply1y], img
  264.                
  265.                 ;player2
  266.                 ;if (ply2x!=ply2x_old) || (ply2y!=ply2y_old) fill2
  267.                 mov    eax, [ply2x]
  268.                 cmp    [ply2x_old], eax
  269.                 jne    fill2
  270.                 mov    eax, [ply2y]
  271.                 cmp    [ply2y_old],eax
  272.                 jne    fill2
  273.                 jmp    no_fill2
  274.         fill2:
  275.         setimg [ply2x_old], [ply2y_old], imgbr
  276.         no_fill2:
  277.         setimg [ply2x], [ply2y], img2
  278.                
  279.                 ;ball
  280.         setimg [ballx_old], [bally_old], imgbb
  281.         setimg [ballx], [bally], img3
  282.                
  283.                 ;grav
  284.         setimg [gravx_old], [gravy_old], imgbg
  285.         setimg [gravx], [gravy], img5
  286.  
  287.         delay 1             ;don't generate delay for fast speed programm
  288.  
  289.         jmp     still
  290.  
  291.   red:
  292.         call    draw_window
  293.         jmp     still
  294.  
  295.   key:                          ; key
  296.         mov     eax, 2
  297.         mcall
  298.         cmp     ah, key_Left
  299.         jne     no_l
  300.         sub     [ply1rx], 32 ;16
  301. no_l:
  302.         cmp     ah, key_Right
  303.         jne     no_r
  304.         add     [ply1rx], 32 ;16
  305. no_r:
  306.         cmp     ah, key_Up
  307.         jne     no_u
  308.         sub     [ply1ry], 16
  309.                 cmp     [ply1ry], 0
  310.                 jb      no_u
  311.                 mov     [ply1ry], 0
  312. no_u:
  313.         cmp     ah, key_Down
  314.         jne     no_d
  315.         add     [ply1ry], 16
  316.                 cmp     [ply1ry], AREA_H-50
  317.                 jl      no_d
  318.                 mov     [ply1ry], AREA_H-50
  319. no_d:
  320.         cmp     ah, key_Space
  321.         jne     no_sp
  322.         mov     [gravtime], 100
  323. no_sp:
  324.  
  325.         jmp     still
  326.  
  327.   button:
  328.         mcall   17         ; get id
  329.         cmp     ah, 1      ; button id=1 ?
  330.         jne     noclose
  331.         mcall   -1         ; close this program
  332.   noclose:
  333.         jmp     still
  334.  
  335.  
  336. draw_window:
  337.         mcall 12,1 ;start window redraw
  338.         mcall 0, <10, AREA_W+5+9>, <10, 480+35>, 0x34000000,, wtitle
  339.         mcall 12,2 ;end window redraw
  340.  
  341. draw_score:
  342.                 mcall 13, <10, 100>, <AREA_H-17, 16>, 0
  343.                 outcount [scoreb], 10, AREA_H-17, 0x01000000 + cl_Blue, 3 shl 16
  344.         outcount [scorea], 50, AREA_H-17, 0x01000000 + cl_Red, 3 shl 16
  345.                 ret
  346.  
  347. ; DATA AREA
  348. wtitle db 'PONG: use Arrow Keys and Space',0
  349. ;skin_h dd 25
  350.  
  351. ply1x_old dd ?
  352. ply1y_old dd ?
  353. ply2x_old dd ?
  354. ply2y_old dd ?
  355. gravx_old dd ?
  356. gravy_old dd ?
  357. ballx_old dd ?
  358. bally_old dd ?
  359.  
  360. xt              dd 100
  361. yt              dd 100
  362.  
  363. gravtime        dd 10
  364. gravx           dd 1000
  365. gravy           dd 1000
  366.  
  367. ply1rx          dd 200
  368. ply1ry          dd 40
  369.  
  370. ply1x           dd 200
  371. ply1y           dd 40
  372.  
  373. ply2x           dd 200
  374. ply2y           dd 400
  375.  
  376. ballx           dd 200
  377. bally           dd 200
  378.  
  379. ballyv          dd 3
  380. ballxv          dd 3
  381.  
  382. scorea          dd 0
  383. scoreb          dd 0
  384.  
  385. counter         dd 0
  386. tsoi            dd 0
  387.  
  388. pongfile        file 'pong.bmp'
  389.  
  390. IM_END:
  391.  
  392. temp            rb 20000
  393.  
  394. ;real images
  395. pong            rb 80*60*3+8
  396. img             rb 32*32*3+8
  397. img2            rb 32*32*3+8
  398. img3            rb 32*32*3+8
  399. img5            rb 32*32*3+8
  400.  
  401. ;black to clean old images
  402. imgbr           rb 80*4 *3+8
  403. imgbg           rb 80*20*3+8
  404. imgbb           rb 12*12*3+8
  405.  
  406. I_END:
  407.