Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | 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 'ascl.inc'
  24. include 'ascgl.inc'
  25. include 'ascgml.inc'
  26.  
  27.  
  28. START:                          ; start of execution
  29.     bmptoimg arc_file,pong
  30.     getimg pong,0,0,80,4,img
  31.     getimg pong,0,4,80,4,img2
  32.     getimg pong,5,38,15,15,img3
  33.     getimg pong,0,8,80,20,img5
  34.     fullimg img4 , 80 ,20 ,0x00000000   ;black for rocket
  35.     fullimg img6 , 15 ,15 ,0x00000000   ;black for ball
  36.     fullimg img7a , 60,20,0x0000cf00
  37.     fullimg img7b , 60,20,0x00af0000
  38.     fullimg img7c , 60,20,0x000000cf
  39.     fullimg img8 , 60,20,0x00000000
  40.  
  41.     call draw_window
  42.  
  43. still:
  44.  
  45.     scevent red,key,button
  46.  
  47.     cmp [againbut],1
  48.     je  stl2
  49.  
  50.     outcount dword [scoreb],256,8,cl_Blue,5*65536
  51.     outcount dword [scorea],332,8,cl_Red,5*65536
  52.     outcount dword [level],368,8,cl_White,2*65536
  53.  
  54. del_images:
  55.     setimg dword [ply1x],dword [ply1y],img4
  56.     setimg dword [ballx],dword [bally],img6
  57.     setimg dword [gravx],dword [gravy],img4
  58.  
  59. del_blocks:
  60.     mov ecx,0
  61. xxx:
  62.     pushad
  63.     mov esi,dword [mass+ecx]
  64.     mov edi,dword [mass+ecx+4]
  65.     mov ebp,dword [mass+ecx+8]
  66.     cmp ebp,0
  67.     jne notptx
  68.     setimg esi,edi,img8
  69. notptx:
  70.     popad
  71.     add ecx,12
  72.     cmp ecx,[blocks_max]
  73.     jne xxx
  74.  
  75.  
  76.  
  77. move_ply1:
  78.  
  79.     correct [ply1x],[ply1rx],2
  80.     correct [ply1y],[ply1ry],2
  81.  
  82. ;automove ball
  83.     mov eax,dword [ballxv]
  84.     add dword [ballx],eax
  85.     mov eax,dword [ballyv]
  86.     add dword [bally],eax
  87.  
  88. ;autoslow ball for rocket gravitation (Space key)
  89.     cmp dword [ballxv],0
  90.     jl ballb
  91. balla:
  92.     cmp dword [ballxv],2
  93.     jng balln
  94.     dec dword [ballxv]
  95.     jmp balln
  96. ballb:
  97.     cmp dword [ballxv],-2
  98.     jnl balln
  99.     inc dword [ballxv]
  100.     jmp balln
  101. balln:
  102.     cmp dword [ballyv],2
  103.     jng by_n
  104.     dec dword [ballyv]
  105. by_n:
  106.  
  107. ;ball collusion of screen
  108.     cmp dword [ballx],400-12
  109.     jna xa_ok
  110.     neg dword [ballxv]
  111. xa_ok:
  112.     cmp dword [ballx],6
  113.     jnb xb_ok
  114.     neg dword [ballxv]
  115. xb_ok:
  116.  
  117.     cmp dword [bally],30
  118.     jnb yb_ok
  119.     neg dword [ballyv]
  120. yb_ok:
  121.  
  122.  
  123. ;if ball far out of screen come back
  124.     cmp dword [bally],466
  125.     jng yax_ok
  126.     call draw_window
  127.     dec dword [scoreb]
  128.     mov eax,[ply1ry]
  129.     sub eax,6
  130.     mov dword [bally],eax ;240
  131.     mov eax,[ply1rx]
  132.     add eax,30
  133.     mov dword [ballx],eax ;200
  134.     mov dword [ballyv],2
  135.     random 3,dword [ballxv]
  136.     sub dword [ballxv],1
  137. yax_ok:
  138.  
  139. xorx:
  140.     cmp dword [ballxv],0
  141.     jne norx
  142.     random 3,dword [ballxv]
  143.     sub dword [ballxv],1
  144.     cmp dword [ballxv],0
  145.     je  xorx
  146. norx:
  147.  
  148. ;test on collusion ply1 of ball
  149. collusion_test:
  150.     collimg img,[ply1x],[ply1y],img3,[ballx],[bally],eax
  151.     cmp eax,1
  152.     jne not_coll
  153.     neg dword [ballyv]
  154.     sub dword [bally],4
  155. ;    neg dword [ballxv]
  156. not_coll:
  157.  
  158. ;test on collusion gravity of ball
  159. collusion_grav:
  160.     collimg img,[gravx],[gravy],img3,[ballx],[bally],eax
  161.     cmp eax,1
  162.     jne not_collg
  163.     sub dword [bally],30
  164.     neg dword [ballyv]
  165.     cmp dword [ballyv],0
  166.     jl  ab
  167.     jg  bf
  168.     jmp not_collgx
  169. ab:
  170.     sub dword [ballyv],10
  171.     jmp not_collgx
  172. bf:
  173.     add dword [ballyv],10
  174. not_collgx:
  175.     cmp dword [ballxv],0
  176.     jl  abx
  177.     jg  bfx
  178.     jmp not_collg
  179. abx:
  180.     sub dword [ballxv],0 ;8 ;15
  181.     jmp not_collg
  182. bfx:
  183.     add dword [ballxv],0 ;8
  184.  
  185.  
  186. ;    mov dword [ballyv],20
  187. not_collg:
  188.  
  189. ;ply contorl
  190.     control 12,316,[ply1rx]
  191.     control 380,470,[ply1ry]
  192.  
  193. ;garvity
  194. gravity:
  195.     cmp dword [gravtime],0
  196.     je no_dg
  197.     dec dword [gravtime]
  198. no_dg:
  199.  
  200. draw_gravity:
  201.     cmp dword [gravtime],0
  202.     je  nograv
  203.     mov eax,dword [ply1x]
  204.     mov ebx,dword [ply1y]
  205.     sub ebx,30
  206.     mov dword [gravx],eax
  207.     mov dword [gravy],ebx
  208.     jmp endgrav
  209. nograv:
  210.     mov dword [gravx],1000
  211.     mov dword [gravy],1000
  212. endgrav:
  213.  
  214. redraw_images:
  215.     setimg dword [ply1x],dword [ply1y],img2
  216.     setimg dword [ballx],dword [bally],img3
  217.     setimg dword [gravx],dword [gravy],img5
  218.  
  219. draw_blocks:
  220.     mov ecx,0
  221. xxx2:
  222.     pushad
  223.     mov esi,dword [mass+ecx]
  224.     mov edi,dword [mass+ecx+4]
  225.     mov ebp,dword [mass+ecx+8]
  226.     cmp ebp,0
  227.     je  notpt
  228.     cmp ebp,1
  229.     jne no_a
  230.     setimg esi,edi,img7a
  231.     jmp notpt
  232. no_a:
  233.     cmp ebp,2
  234.     jne no_b
  235.     setimg esi,edi,img7b
  236.     jmp notpt
  237. no_b:
  238.     cmp ebp,3
  239.     jne no_c
  240.     setimg esi,edi,img7c
  241.     jmp notpt
  242. no_c:
  243.  
  244. notpt:
  245.     popad
  246.     add ecx,12
  247.     cmp ecx,[blocks_max]
  248.     jne xxx2
  249.  
  250. ;collusion ball of blocks
  251. coll_blocks:
  252.     mov [temp3],0
  253.     mov ecx,0
  254. testloop:
  255.     pushad
  256.     mov ebp,dword [mass+ecx+8]
  257.     cmp ebp,0
  258.     jne testcol
  259.     jmp notest
  260. testcol:
  261.     mov [temp3],1
  262.     mov esi,dword [mass+ecx]
  263.     mov edi,dword [mass+ecx+4]
  264.     mov [temp1],esi
  265.     mov [temp2],edi
  266.     push ecx
  267.     collimg img8,[temp1],[temp2],img3,[ballx],[bally],eax
  268.     pop ecx
  269.     cmp eax,1
  270.     jne notest
  271.     mov dword [mass+ecx+8],0
  272. ;    neg [ballxv]
  273.     neg [ballyv]
  274.     add [scorea],30
  275.     call draw_window
  276.     jmp end_col
  277. notest:
  278.     popad
  279.     add ecx,12
  280.     cmp ecx,[blocks_max]
  281.     jne testloop
  282. end_col:
  283.  
  284.     cmp [delay_cnt],0
  285.     jne no_delay
  286.     mov [delay_cnt],1
  287.     delay 1             ;don't generate delay for fast speed programm
  288. no_delay:
  289.     dec [delay_cnt]
  290.  
  291. win_test:
  292.     cmp [temp3],1
  293.     je stl
  294. ;    inc [level]
  295.     mov [nextlev],1
  296.     mov [againbut],1
  297.     call draw_window
  298. ;    label 160,200,'You Win!',cl_Green+font_Big
  299. ;    label 130,220,'Youre Score:',cl_Green+font_Big
  300. ;    outcount dword [scorea],230,220,cl_Green,5*65536
  301. ;    label 130,234,'Youre Lives:',cl_Green+font_Big
  302. ;    outcount dword [scoreb],230,234,cl_Green,5*65536
  303. ;    delay 600  ;wait 2sec
  304. ;    close      ;exit from program
  305. stl:
  306.  
  307. lose_test:
  308.     cmp [scoreb],0
  309.     jne stl2
  310. ;    call draw_window
  311. ;    label 160,200,'You Lose!',cl_Red+font_Big
  312. ;    label 130,220,'Youre Score:',cl_Red+font_Big
  313. ;    outcount dword [scorea],230,220,cl_Red,5*65536
  314. ;    delay 300  ;wait 2sec
  315. ;    close      ;exit from program
  316. ;    mov ebx,10*65536+40
  317. ;    mov ebx,10*65536+20
  318. ;    mov edx,2
  319. ;    mov esi,0x0000ff00
  320. ;    mov eax,8
  321. ;    int 0x40
  322.     mov [level],0
  323.     mov [nextlev],0
  324.     mov [againbut],1
  325.     call draw_window
  326.  
  327. stl2:
  328.  
  329.     jmp  still
  330.  
  331.   red:
  332.     call draw_window
  333.     jmp  still
  334.  
  335.   key:                          ; key
  336.     mov eax,2
  337.     int 0x40
  338.     cmp ah,key_Left
  339.     jne no_l
  340.     sub dword [ply1rx],50 ;24 ;16
  341. no_l:
  342.     cmp ah,key_Right
  343.     jne no_r
  344.     add dword [ply1rx],50 ;24 ;16
  345. no_r:
  346.     cmp ah,key_Up
  347.     jne no_u
  348.     sub dword [ply1ry],20
  349. no_u:
  350.     cmp ah,key_Down
  351.     jne no_d
  352.     add dword [ply1ry],20
  353. no_d:
  354.     cmp ah,key_Space
  355.     jne no_sp
  356.     mov dword [gravtime],100
  357. no_sp:
  358.     jmp  still
  359.  
  360.   button:                       ; button
  361.     mov  eax,17                 ; get id
  362.     int  0x40
  363.     cmp  ah,1                   ; button id=1 ?
  364.     jne  noclose
  365.     mov  eax,-1                 ; close this program
  366.     int  0x40
  367. noclose:
  368.     cmp ah,2
  369.     jne  noplayagain
  370.     mov [xt],100
  371.     mov [yt],100
  372.     mov [gravtime],10
  373.     mov [gravx],1000
  374.     mov [gravy],1000
  375.     mov [ply1rx],160
  376.     mov [ply1ry],460
  377.     mov [ply1x],160
  378.     mov [ply1y],400
  379.     mov [ballx],200
  380.     mov [bally],300
  381.     mov [ballyv],2
  382.     mov [ballxv],1
  383.  
  384.     cmp [nextlev],1
  385.     je  noch
  386.     mov [scorex],0
  387.     mov [scorea],0
  388.     mov [scoreb],3
  389.     jmp noch2
  390. noch:
  391.     inc [scoreb]
  392.     inc [level]
  393.     mov eax,[maxlev]
  394.     cmp [level],eax
  395.     jna noch2
  396.     mov [level],eax
  397. noch2:
  398.  
  399.     mov eax,18*4*5
  400.     mul [level]
  401.     mov ebp,eax
  402.     add ebp,levels
  403.     mov ecx,18*4*5   ;bytes
  404. loo:
  405.     mov eax,dword [ebp+ecx]
  406.     mov dword [mass+ecx],eax
  407.     sub ecx,4
  408.     jnz loo
  409.  
  410.     mov [againbut],0
  411.  
  412.     call draw_window
  413. noplayagain:
  414.     jmp  still
  415.  
  416.  
  417. draw_window:
  418.     startwd
  419.     window 0,0,400+8,480+24,window_Skinned
  420.     label 12,8,'ARCANOID: USE ARROW KEYS    LIVES      SCORE',cl_White+font_Big
  421.  
  422.     cmp [againbut],0
  423.     je  no_againbut
  424.  
  425.     cmp [nextlev],1
  426.     je  nlev
  427.     label 160,200,'You Lose!',cl_Red+font_Big
  428.     label 130,220,'Youre Score:',cl_Red+font_Big
  429.     outcount dword [scorea],230,220,cl_Red,5*65536
  430.     mov ebx,150*65536+80
  431.     mov ecx,240*65536+12
  432.     mov edx,2
  433.     mov esi,0x0000aa00
  434.     mov eax,8
  435.     int 0x40
  436.     mov ecx,260*65536+12
  437.     mov edx,1
  438.     int 0x40
  439.     label 152,244,'Play again?',cl_Red+font_Big
  440.     jmp elev
  441. nlev:
  442.     label 160,200,'You Win!',cl_Green+font_Big
  443.     label 130,220,'Youre Score:',cl_Green+font_Big
  444.     outcount dword [scorea],230,220,cl_Green,5*65536
  445.     mov ebx,150*65536+80
  446.     mov ecx,240*65536+12
  447.     mov edx,2
  448.     mov esi,0x0000aa00
  449.     mov eax,8
  450.     int 0x40
  451.     mov ecx,260*65536+12
  452.     mov edx,1
  453.     int 0x40
  454.     label 152,244,'Next level?',cl_Red+font_Big
  455. elev:
  456.  
  457.     label 178,264,'Exit?',cl_Red+font_Big
  458. no_againbut:
  459.  
  460.     endwd
  461.     ret
  462.  
  463.  
  464. ; DATA AREA
  465. againbut dd 0
  466.  
  467. xt dd 100
  468. yt dd 100
  469.  
  470. gravtime dd 10
  471. gravx dd 1000
  472. gravy dd 1000
  473.  
  474. ply1rx dd 160
  475. ply1ry dd 460
  476.  
  477. ply1x dd 160
  478. ply1y dd 400
  479.  
  480. ballx dd 200
  481. bally dd 300
  482.  
  483. ballyv dd 2
  484. ballxv dd 1
  485.  
  486. temp1 dd 0
  487. temp2 dd 0
  488. temp3 dd 0
  489.  
  490. scorex dd 0
  491. scorea dd 0
  492. scoreb dd 3
  493.  
  494. level dd 0
  495. nextlev dd 0
  496. maxlev dd 2
  497.  
  498. counter dd 0
  499. tsoi dd 0
  500.  
  501. delay_cnt dd 0
  502.  
  503. blocks_max dd 6*5*12 ;size in bytes 5*3 dd
  504.  
  505. mass:
  506.      dd  30,200,0 ,90,200,0 ,150,200,0 ,210,200,0 ,270,200,0 ,330,200,0
  507.      dd  30,180,0 ,90,180,0 ,150,180,0 ,210,180,0 ,270,180,0 ,330,180,0
  508.      dd  30,160,0 ,90,160,0 ,150,160,0 ,210,160,0 ,270,160,0 ,330,160,0
  509.      dd  30,140,0 ,90,140,1 ,150,140,1 ,210,140,1 ,270,140,0 ,330,140,0
  510.      dd  30,120,0 ,90,120,0 ,150,120,0 ,210,120,0 ,270,120,0 ,330,120,0
  511.  
  512. levels:
  513.      dd  30,200,0 ,90,200,0 ,150,200,0 ,210,200,2 ,270,200,0 ,330,200,0
  514.      dd  30,180,2 ,90,180,1 ,150,180,1 ,210,180,2 ,270,180,2 ,330,180,0
  515.      dd  30,160,1 ,90,160,3 ,150,160,1 ,210,160,2 ,270,160,2 ,330,160,2
  516.      dd  30,140,2 ,90,140,1 ,150,140,1 ,210,140,2 ,270,140,2 ,330,140,0
  517.      dd  30,120,0 ,90,120,0 ,150,120,0 ,210,120,2 ,270,120,0 ,330,120,0
  518. ;level2
  519.      dd  30,200,0 ,90,200,3 ,150,200,0 ,210,200,2 ,270,200,2 ,330,200,2
  520.      dd  30,180,0 ,90,180,1 ,150,180,0 ,210,180,2 ,270,180,2 ,330,180,2
  521.      dd  30,160,0 ,90,160,3 ,150,160,0 ,210,160,2 ,270,160,2 ,330,160,2
  522.      dd  30,140,0 ,90,140,1 ,150,140,0 ,210,140,2 ,270,140,2 ,330,140,2
  523.      dd  30,120,0 ,90,120,3 ,150,120,0 ,210,120,2 ,270,120,2 ,330,120,2
  524. ;level3
  525.      dd  30,200,1 ,90,200,3 ,150,200,1 ,210,200,2 ,270,200,2 ,330,200,2
  526.      dd  30,180,2 ,90,180,1 ,150,180,1 ,210,180,2 ,270,180,2 ,330,180,2
  527.      dd  30,160,1 ,90,160,3 ,150,160,1 ,210,160,2 ,270,160,2 ,330,160,2
  528.      dd  30,140,2 ,90,140,1 ,150,140,1 ,210,140,2 ,270,140,2 ,330,140,2
  529.      dd  30,120,1 ,90,120,3 ,150,120,1 ,210,120,2 ,270,120,2 ,330,120,2
  530.  
  531. arc_file:
  532. file 'arc.bmp'
  533.  
  534. rb 20000
  535.  
  536. IM_END:
  537.  
  538. pong:
  539. rb 80*60*3+8
  540. img:
  541. rb 32*32*3+8
  542. img2:
  543. rb 32*32*3+8
  544. img3:
  545. rb 32*32*3+8
  546. img4:
  547. rb 80*20*3+8
  548. img5:
  549. rb 80*20*3+8
  550. img6:
  551. rb 15*15*3+8
  552. img7a:
  553. rb 60*20*3+8
  554. img7b:
  555. rb 60*20*3+8
  556. img7c:
  557. rb 60*20*3+8
  558. img8:
  559. rb 60*40*3+8
  560.  
  561. I_END:
  562.