Subversion Repositories Kolibri OS

Rev

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

  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'
  23. include '..\..\..\macros.inc'
  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
  322. ;    mcall
  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
  338.     mcall
  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
  363.     mcall
  364.     cmp  ah,1                   ; button id=1 ?
  365.     jne  noclose
  366.     mov  eax,-1                 ; close this program
  367.     mcall
  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
  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
  426.  
  427.  
  428.     cmp [againbut],0
  429.     je  no_againbut
  430.  
  431.     cmp [nextlev],1
  432.     je  nlev
  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
  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
  446.     mcall
  447.     mov ecx,260*65536+12
  448.     mov edx,1
  449.     mcall
  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
  455.     jmp elev
  456. nlev:
  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
  464.     outcount dword [scorea],230,220,cl_Green,5*65536
  465.     mov ebx,150*65536+120  ;mov ebx,150*65536+80
  466.     mov ecx,240*65536+12
  467.     mov edx,2
  468.     mov esi,0x0000aa00
  469.     mov eax,8
  470.     mcall
  471.     mov ecx,260*65536+12
  472.     mov edx,1
  473.     mcall
  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
  479. elev:
  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
  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:
  590.