December 03, 2020, 07:41:37 PM

Author Topic: [bb] c e l l u l a r by Techlord [ 1+ years ago ]  (Read 478 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] c e l l u l a r by Techlord [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
Title : c e l l u l a r
Author : Techlord
Posted : 1+ years ago

Description : Written for the <a href="http://www.blitzbasic.co.nz/Community/posts.php?topic=53659" target="_blank">Write A Game in 24x7 hours Contest[/url]. In this action game use D-Bot to protect your cells and   destroy attacking virsuses.

Controls: W,A,S,D,MouseLook,LMB


Code :
Code: BlitzBasic
  1. ;c e l l u l a r
  2. ;by frankie 'techlord' taylor
  3. Const LEVEL_COLLISIONTYPE_NONE=0
  4. Const LEVEL_COLLISIONTYPE_LEVEL=1
  5. Const LEVEL_COLLISIONTYPE_PLAYER=2
  6. Const LEVEL_COLLISIONTYPE_BLAST=3
  7. Const LEVEL_COLLISIONTYPE_POW=4
  8. Const LEVEL_COLLISIONTYPE_CELL=5
  9. Const LEVEL_COLLISIONTYPE_VIRUS=6
  10. Const LEVEL_COLLISIONMETHOD_ELLIPSOID=1
  11. Const LEVEL_COLLISIONMETHOD_POLYGON=2
  12. Const LEVEL_COLLISIONMETHOD_BOX=3
  13. Const LEVEL_COLLISIONRESPONSE_STOP=1
  14. Const LEVEL_COLLISIONRESPONSE_SLIDE=2
  15. Const LEVEL_COLLISIONRESPONSE_SLIDENOSLOPE=3
  16. Const BLAST_STATE_ALIVE=1
  17. Const BLAST_STATE_DETONATE=2
  18. Const CELL_STATE_DEAD=0
  19. Const CELL_STATE_HEALTHY=1
  20. Const CELL_STATE_REPLICATE=2
  21. Const CELL_STATE_REPLICATING=3
  22. Const CELL_STATE_INFECTED=4
  23. Const CELL_STATE_INFECTION=5
  24. Const CELL_STATE_HEALING=6
  25. Const CELL_STATE_DYING=7       
  26. Const VIRUS_STATE_ALIVE=1
  27. Const VIRUS_STATE_TARGETING=2
  28. Const VIRUS_STATE_PENETRATE=3
  29. Const VIRUS_STATE_REPLICATE=4
  30. Const VIRUS_STATE_REPLICATING=5
  31. Const VIRUS_STATE_DYING=6
  32. Const VIRUS_STATE_DEAD=7
  33. Const PARTICLE_STATE_DEAD=0
  34. Const PARTICLE_STATE_ALIVE=1
  35. Const POW_STATE_SPAWNED=1
  36. Const POW_STATE_PICKEDUP=2
  37.  
  38. Global player.player
  39. Global player_WobbleViewScreen
  40. Global underw_a
  41. Global blaster_ID.blaster[4]
  42. Global cellular_ID.cellular[4]
  43. Global viral_ID.viral[4]
  44. Global powerup_ID.powerup[4]
  45. Global reactor_ID.reactor[4]
  46. Global levelcells
  47.  
  48. Dim blasterentity(16)
  49. Dim cellularentity(16)
  50. Dim viralentity(16)
  51.  
  52. Type player
  53.         Field id
  54.         Field typeid
  55.         Field entity%
  56.         Field ship[3]  
  57.         Field blaster1
  58.         Field blaster2
  59.         Field r,g,b
  60.         Field x#,y#,z#
  61.         Field xv#,yv#,zv#
  62.         Field xa#,ya#,za#      
  63.         Field pitch#
  64.         Field yaw#
  65.         Field speed#    ; Current
  66.         Field destx#
  67.         Field destz#
  68.         Field destpitch#
  69.         Field destyaw#  ; Destination
  70.         Field keymap%[10]
  71.         Field health
  72.         Field booster
  73.         Field score
  74.         Field xradius#
  75.         Field yradius#
  76.         Field state
  77. End Type
  78.  
  79. Type blaster
  80.         Field id
  81.         Field entity
  82.         Field range#
  83.         Field speed#
  84.         Field xradius#
  85.         Field yradius# 
  86.         Field power    
  87.         Field count
  88. End Type
  89.  
  90. Type blast
  91.         Field blasterid
  92.         Field entity
  93.         Field range#
  94.         Field speed#
  95.         Field power
  96.         Field state
  97. End Type
  98.  
  99. Type reactor
  100.         Field id
  101.         Field entity%
  102.         Field r,g,b
  103.         Field life#
  104.         Field fade#
  105.         Field size#
  106.         Field weight#
  107. End Type
  108.        
  109. Type particle
  110.         Field reactorid
  111.         Field entity%
  112.         Field x#,y#,z#
  113.         Field vx#,vy#,vz#
  114.         Field r,g,b,a#
  115.         Field life#
  116.         Field fade#
  117.         Field size#
  118.         Field weight#
  119.         Field state
  120. End Type
  121.  
  122. Type powerup
  123.         Field id
  124.         Field entity
  125.         Field effect
  126.         Field xradius#
  127.         Field yradius#
  128.         Field r,g,b,a#
  129.         Field life
  130. End Type
  131.  
  132. Type pow
  133.         Field powerupid
  134.         Field entity
  135.         Field effect
  136.         Field r,g,b,a#
  137.         Field life
  138.         Field state
  139. End Type
  140.  
  141. Type cellular
  142.         Field id
  143.         Field entity
  144.         Field health
  145.         Field point
  146.         Field r,g,b
  147.         Field replicatespeed%
  148.         Field replicacount%
  149.         Field replicaincubation%
  150.         Field replicatebehavior
  151.         Field healspeed#
  152.         Field xradius#
  153.         Field yradius# 
  154. End Type
  155.  
  156. Type cell
  157.         Field cellularid
  158.         Field entity
  159.         Field health
  160.         Field r,g,b,a#
  161.         Field replicatespeed%
  162.         Field replicacount%
  163.         Field replicaincubation%
  164.         Field replicatebehavior
  165.         Field healspeed#
  166.         Field state                    
  167. End Type
  168.  
  169. Type viral
  170.         Field id
  171.         Field entity
  172.         Field point
  173.         Field health
  174.         Field speed#
  175.         Field vmax#
  176.         Field amax#
  177.         Field xradius#
  178.         Field yradius#         
  179.         Field replicatespeed%
  180.         Field replicacount%
  181.         Field replicaincubation%
  182.         Field replicatebehavior
  183.         Field replicatehealth% 
  184.         Field r,g,b
  185. End Type
  186.  
  187. Type virus
  188.         Field viralid
  189.         Field entity
  190.         Field health
  191.         Field speed#
  192.         Field x#,y#,z#
  193.         Field vx#,vy#,vz#
  194.         Field ax#,ay#,az#
  195.         Field vmax#
  196.         Field amax#    
  197.         Field replicatespeed%
  198.         Field replicacount%
  199.         Field replicaincubation%
  200.         Field replicatebehavior        
  201.         Field replicatehealth%         
  202.         Field target
  203.         Field r,g,b
  204.         Field state
  205. End Type
  206.  
  207. Type wave
  208.         Field id
  209.         Field title$
  210.         Field virustype
  211.         Field viruses
  212.         Field celltype                 
  213. End Type       
  214.  
  215. Function levelStart()
  216.         levellight=CreateLight()
  217.         RotateEntity(levellight,90,0,0)
  218.         Collisions(LEVEL_COLLISIONTYPE_PLAYER,LEVEL_COLLISIONTYPE_VIRUS,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  219.         Collisions(LEVEL_COLLISIONTYPE_CELL,LEVEL_COLLISIONTYPE_VIRUS,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  220.         Collisions(LEVEL_COLLISIONTYPE_PLAYER,LEVEL_COLLISIONTYPE_POW,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  221.         Collisions(LEVEL_COLLISIONTYPE_BLAST,LEVEL_COLLISIONTYPE_CELL,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  222.         Collisions(LEVEL_COLLISIONTYPE_BLAST,LEVEL_COLLISIONTYPE_VIRUS,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  223.         Collisions(LEVEL_COLLISIONTYPE_VIRUS,LEVEL_COLLISIONTYPE_BLAST,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  224.         Collisions(LEVEL_COLLISIONTYPE_VIRUS,LEVEL_COLLISIONTYPE_CELL,LEVEL_COLLISIONMETHOD_ELLIPSOID,LEVEL_COLLISIONRESPONSE_STOP)
  225. End Function
  226.  
  227. Function waveStart()
  228.         ;wave 1
  229.         this.wave=New wave
  230.         this    itle$="Protect the Red Blood Cells"
  231.         thisvirustype=1
  232.         thisviruses=100
  233.         thiscelltype=1
  234. End Function
  235.  
  236. Function playerStart()
  237.         HidePointer()
  238.         this.player=New player
  239.         this
  240. =130
  241.         thisspeed#=1   
  242.         thishealth=100
  243.         thislaster1=1
  244.         thislaster2=3
  245.         thisooster=50         
  246.         thisentity=CreateCamera()
  247.         EntityType(thisentity,LEVEL_COLLISIONTYPE_PLAYER)
  248.         EntityRadius(thisentity,1)     
  249.         CreateListener(thisentity%)
  250.         playerkeymap(this,6)
  251.         playertargetpivot=CreatePivot(thisentity)
  252.         TranslateEntity(playertargetpivot,0,0,50)
  253.         thisship[1]=CreateCone(4,False,thisentity)
  254.         ScaleMesh(thisship[1],.50,1,.75)
  255.         RotateMesh(thisship[1],90,0,0)
  256.         PositionEntity(thisship[1],-1,-1,.5)
  257.         PointEntity(thisship[1],playertargetpivot)     
  258.         thisship[2]=CreateCone(4,False,thisentity)
  259.         ScaleMesh(thisship[2],.50,1,.75)
  260.         RotateMesh(thisship[2],90,0,0)
  261.         PositionEntity(thisship[2],1,-1,.5)
  262.         PointEntity(thisship[2],playertargetpivot)     
  263.         PositionEntity(thisentity%,0,0,-35)
  264.         player=this
  265. End Function
  266.  
  267. Function playerUpdate()
  268.         For this.player = Each player
  269.                 playercontrol(this)
  270.                 powentity=EntityCollided(thisentity,LEVEL_COLLISIONTYPE_POW)
  271.                 For pow.pow = Each pow
  272.                         If powentity=powentity
  273.                                 powstate=POW_STATE_PICKEDUP
  274.                                 this
  275. =pow
  276.  
  277.                                 thisg=powg
  278.                                 this=pow
  279.                                 thisscore=thisscore+100
  280.                         EndIf  
  281.                 Next
  282.         Next
  283. End Function
  284.  
  285. Function playerControl(this.player)
  286.         ;Enhanced Player control by jfk EO-11110
  287.         this
  288. #=this
  289. +(Sgn(130-this
  290. )*5)
  291.         thisg#=thisg+(Sgn(0-thisg)*5)
  292.         this#=this+(Sgn(0-this)*5)
  293.         CameraClsColor(thisentity%,this
  294. ,thisg,this)
  295.        
  296.         ; Mouse x and y speed
  297.         mxs#=-MouseXSpeed()/4.0
  298.         mys#=MouseYSpeed()/4.0
  299.         ; Mouse shake (total mouse movement)
  300.         mouse_shake=Abs(((mxs#+mys#)/2)/1000.0)
  301.         ; Destination camera angle x and y values
  302.         thisdestyaw#=thisdestyaw#-mxs#
  303.         thisdestpitch#=thisdestpitch#+mys#
  304.         ; Current camera angle x and y values
  305.         thisyaw#=thisyaw#+((thisdestyaw#-thisyaw#)/2.5)
  306.         thispitch#=thispitch#+((thisdestpitch#-thispitch#)/2.5)
  307.         RotateEntity thisentity%,thispitch#,thisyaw#,1
  308.         ; Rest mouse position to centre of screen
  309.         MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
  310.         ;z#=.3
  311.         If KeyDown(thiskeymap[1]) x#=thisspeed#*-1.
  312.         If KeyDown(thiskeymap[2]) x#=thisspeed#
  313.         If KeyDown(thiskeymap[3]) z#=thisspeed#*-1.
  314.         If KeyDown(thiskeymap[4]) z#=thisspeed#
  315.         If KeyDown(thiskeymap[5]) TurnEntity(thisentity%,0,0,-1.)
  316.         If KeyDown(thiskeymap[6]) TurnEntity(thisentity%,0,0,1.)
  317.         ; Move camera using movement values
  318.         MoveEntity thisentity%,x#,y#,z#
  319.  
  320.         If MouseHit(1) blastSpawn(thislaster1)
  321.         If MouseHit(2)
  322.                 If thislaster2
  323.                         playersmartbomb(this);super weapon
  324.                         this
  325. =255
  326.                         thisg=130
  327.                         this=60
  328.                         thislaster2=thislaster2-1
  329.                 EndIf
  330.         EndIf
  331. End Function
  332.  
  333. Function playersmartbomb(this.player)
  334.         For virus.virus = Each virus
  335.                 If virusstate=VIRUS_STATE_ACTIVE
  336.                         For virusloop = 1 To 16
  337.                                 particleSpawn(1,virusentity)
  338.                         Next
  339.                         virusstate=VIRUS_STATE_DEAD
  340.                 EndIf                  
  341.         Next
  342. End Function
  343.  
  344. Function playerkeymap(this.player,keys%)
  345.         Restore playerkeymapdata
  346.         For loop = 1 To keys%
  347.                 Read key%
  348.                 thiskeymap[loop]=key%
  349.         Next   
  350. End Function
  351.  
  352. Function playerCursor()
  353.         ;Rect(GraphicsWidth()/2-4,GraphicsHeight()/2-4,8,8,0)
  354.         width=GraphicsWidth()/2
  355.         height=GraphicsHeight()/2
  356.         ;Line(width-4,height-4,width+4,height+4)
  357.         ;Line(width+4,height-4,width-4,height+4)
  358. Oval(width-8,height-8,16,16,False)
  359.        
  360. End Function
  361.  
  362. Function playerWobbleView()
  363.         ;by jfk
  364.         gw#=GraphicsWidth()
  365.         gh#=GraphicsHeight()
  366.         CopyRect(0,0,gw,gh,0,0,BackBuffer(),ImageBuffer(player_WobbleViewScreen))
  367.         underw_a=(underw_a+4)
  368.         steph#=gh/32
  369.         mu8#=gh/60
  370.         If underw_a>359 Then underw_a=0
  371.         For iif#=0 To gh-4  Step .001
  372.                 wsin#=(Sin((underw_a+iif)Mod 360.0)*mu8#)
  373.                 CopyRect(0,iif,gw,steph+4, 0,iif+wsin#, ImageBuffer(player_WobbleViewScreen),BackBuffer())
  374.                 iif=iif+steph
  375.         Next
  376. End Function
  377.  
  378. Function blastStart()
  379.         ;standard burst
  380.         blaster.blaster = New blaster
  381.         blasterid=1
  382.         blaster_ID[blasterid]=blaster
  383.         blasterspeed=2
  384.         blaster
  385. ange=25
  386.         blasterentity=CreateCone(4,True)
  387.         blasterpower=1
  388.         blasterxradius#=.5
  389.         blasteryradius#=1
  390.         ScaleMesh(blasterentity,.1,.75,.1)
  391.         RotateMesh(blasterentity,270,0,0)
  392.         EntityFX(blasterentity,13)
  393.         EntityBlend(blasterentity,3)
  394.         HideEntity(blasterentity)
  395. End Function
  396.  
  397. Function blastSpawn.blast(blasterid)
  398.         ;blaster ship 1
  399.         this.blast=New blast
  400.         thislasterid=blasterid
  401.         blaster.blaster=blaster_ID[thislasterid]
  402.         thisentity=CopyEntity(blasterentity)
  403.         thisspeed=blasterspeed
  404.         this
  405. ange=blaster
  406. ange
  407.         thispower=blasterpower
  408.         thisstate=BLAST_STATE_ALIVE
  409.         EntityType(thisentity,LEVEL_COLLISIONTYPE_BLAST)
  410.         EntityRadius(thisentity,blasterxradius#,blasteryradius#)               
  411.         PositionEntity(thisentity,EntityX(playership[1],True),EntityY(playership[1],True),EntityZ(playership[1],True))
  412.         RotateEntity(thisentity,EntityPitch(playership[1],True),EntityYaw(playership[1],True),EntityRoll(playership[1],True))
  413.         ;blaster ship 2
  414.         this.blast=New blast
  415.         thislasterid=blasterid
  416.         blaster.blaster=blaster_ID[thislasterid]
  417.         thisentity=CopyEntity(blasterentity)
  418.         thisspeed=blasterspeed
  419.         this
  420. ange=blaster
  421. ange
  422.         thispower=blasterpower
  423.         thisstate=BLAST_STATE_ALIVE
  424.         EntityType(thisentity,LEVEL_COLLISIONTYPE_BLAST)
  425.         EntityRadius(thisentity,blasterxradius#,blasteryradius#)               
  426.         PositionEntity(thisentity,EntityX(playership[2],True),EntityY(playership[2],True),EntityZ(playership[2],True))
  427.         RotateEntity(thisentity,EntityPitch(playership[2],True),EntityYaw(playership[2],True),EntityRoll(playership[2],True))
  428.        
  429.         ;aligntovector
  430.         Return this
  431. End Function
  432.  
  433. Function blastUpdate()
  434.         For this.blast = Each blast
  435.                 Select thisstate
  436.                         Case BLAST_STATE_ALIVE
  437.                                 MoveEntity(thisentity,0,0,thisspeed#)
  438.                                 TurnEntity(thisentity,0,0,2)
  439.                                 If EntityCollided(thisentity,LEVEL_COLLISIONTYPE_VIRUS) thisstate=BLAST_STATE_DETONATE
  440.                                 this
  441. ange=this
  442. ange-1
  443.                                 If this
  444. ange<0 thisstate=BLAST_STATE_DETONATE
  445.                         Case BLAST_STATE_DETONATE
  446.                                 FreeEntity(thisentity)
  447.                                 Delete this
  448.                 End Select
  449.         Next
  450. End Function
  451.  
  452. Function particleStart()
  453.         ;particle bits
  454.         reactor.reactor=New reactor
  455.         reactorid=1
  456.         reactor
  457. =255
  458.         reactorg=255
  459.         reactor=0
  460.         reactorlife=32
  461.         reactorfade#=1
  462.         reactorsize#=1 
  463.         reactor_ID[reactorid]=reactor
  464.         reactorentity=CreateCone(3,True);
  465.         ScaleMesh(reactorentity,.1,.2,.1)
  466.         EntityBlend(reactorentity,3)
  467.         EntityColor(reactorentity,0,255,0)
  468.         HideEntity(reactorentity)      
  469. End Function
  470.  
  471. Function particleSpawn.particle(reactorid,particleparent)
  472.         this.particle=New particle
  473.         this
  474. eactorid=reactorid
  475.         reactor.reactor=reactor_ID[this
  476. eactorid]
  477.         thisentity=CopyEntity(reactorentity)
  478.         thislife=reactorlife
  479.         thisa#=1
  480.         thisstate=PARTICLE_STATE_ALIVE
  481.         PositionEntity(thisentity,EntityX(particleparent,True),EntityY(particleparent,True),EntityZ(particleparent,True))
  482.         RotateEntity(thisentity,Rand(360),Rand(360),Rand(360))
  483.         Return this
  484. End Function
  485.  
  486. Function particleUpdate()
  487.         For this.particle = Each particle
  488.                 Select thisstate
  489.                         Case PARTICLE_STATE_ALIVE
  490.                                 thislife=thislife-1
  491.                                 If Not thislife thisstate=PARTICLE_STATE_DEAD
  492.                                 MoveEntity(thisentity,0,0,.3)
  493.                                 thisa#=thisa#-(1/thislife)
  494.                                 EntityAlpha(thisentity,thisa#)
  495.                                 ;TurnEntity(thisentity,5,0,0)
  496.                         Case PARTICLE_STATE_DEAD
  497.                                 FreeEntity(thisentity)
  498.                                 Delete this
  499.                 End Select
  500.         Next
  501. End Function
  502.  
  503. Function powStart()
  504.         ;blaster upgrade 1
  505.         powerup.powerup=New powerup
  506.         powerupid=1
  507.         powerup_ID[powerupid]=powerup
  508.         powerupeffect=1
  509.         poweruplife=500
  510.         powerupg=255
  511.         powerup=255
  512.         powerupa#=1    
  513.         powerupentity=CreateCube()
  514.         ScaleEntity(powerupentity,.5,.5,.5)
  515.         EntityColor(powerupentity,powerup
  516. ,powerupg,powerup)
  517.         EntityBlend(powerupentity,3)   
  518.         powerupxradius#=.5
  519.         powerupyradius#=.5
  520.         HideEntity(powerupentity)
  521.        
  522.         ;blaster upgrade 2
  523.         powerup.powerup=New powerup
  524.         powerupid=2
  525.         powerup_ID[powerupid]=powerup
  526.         powerupeffect=2
  527.         poweruplife=500
  528.         powerup
  529. =255
  530.         powerupg=255
  531.         powerupa#=1    
  532.         powerupentity=CreateCube()
  533.         ScaleEntity(powerupentity,.5,.5,.5)
  534.         EntityColor(powerupentity,powerup
  535. ,powerupg,powerup)
  536.         EntityBlend(powerupentity,3)
  537.         powerupxradius#=.5
  538.         powerupyradius#=.5
  539.         HideEntity(powerupentity)      
  540.  
  541.         ;blaster upgrade 3
  542.         powerup.powerup=New powerup
  543.         powerupid=3
  544.         powerup_ID[powerupid]=powerup
  545.         powerupeffect=3
  546.         poweruplife=500
  547.         powerup=255
  548.         powerupa#=1    
  549.         powerupentity=CreateCube()
  550.         ScaleEntity(powerupentity,.5,.5,.5)
  551.         EntityColor(powerupentity,powerup
  552. ,powerupg,powerup)
  553.         EntityBlend(powerupentity,3)   
  554.         powerupxradius#=.5
  555.         powerupyradius#=.5
  556.         HideEntity(powerupentity)
  557.                
  558.         ;blaster upgrade 4
  559.         powerup.powerup=New powerup
  560.         powerupid=4
  561.         powerup_ID[powerupid]=powerup
  562.         powerupeffect=4
  563.         poweruplife=500
  564.         powerup
  565. =255
  566.         powerupg=0
  567.         powerup=255
  568.         powerupa#=1    
  569.         powerupentity=CreateCube()
  570.         ScaleEntity(powerupentity,.5,.5,.5)
  571.         EntityColor(powerupentity,powerup
  572. ,powerupg,powerup)
  573.         EntityBlend(powerupentity,3)   
  574.         powerupxradius#=.5
  575.         powerupyradius#=.5
  576.         HideEntity(powerupentity)      
  577.                                
  578. End Function
  579.  
  580. Function powUpdate()
  581.         If Rand(1000)=True powSpawn(Rand(4))
  582.         For this.pow = Each pow
  583.                 powerup.powerup=powerup_ID[thispowerupid]
  584.                 Select thisstate
  585.                         Case POW_STATE_SPAWNED
  586.                                 TurnEntity(thisentity,4,8,16)
  587.                                 thislife=thislife-1
  588.                                 If Not thislife thisstate=POW_STATE_DEAD       
  589.                         Case POW_STATE_PICKEDUP
  590.                                 EntityType(thisentity,LEVEL_COLLISIONTYPE_NONE)
  591.                                 Select thiseffect
  592.                                         Case 1 playerSmartBomb(player)
  593.                                         Case 2 playerlaster2=playerlaster2+1
  594.                                         Case 3 playerscore=playerscore+5000
  595.                                         Case 4 For powloop = 1 To 3 cellSpawn(1) Next
  596.                                 End Select
  597.                                 thisstate=POW_STATE_DEAD
  598.                         Case POW_STATE_DEAD
  599.                                 FreeEntity(thisentity)
  600.                                 Delete this
  601.                 End Select
  602.         Next
  603. End Function
  604.  
  605. Function powSpawn.pow(powerupid,powerupparent=0)
  606.         this.pow = New pow
  607.         thispowerupid=powerupid
  608.         powerup.powerup=powerup_ID[powerupid]
  609.         thiseffect=powerupeffect
  610.         thisentity=CopyEntity(powerupentity)
  611.         EntityType(thisentity,LEVEL_COLLISIONTYPE_POW)
  612.         EntityRadius(thisentity,powerupxradius,powerupyradius) 
  613.         this
  614. =powerup
  615.  
  616.         thisg=powerupg
  617.         this=powerup
  618.         thisa=powerupa
  619.         thislife=poweruplife   
  620.         EntityColor(thisentity,this
  621. ,thisg,this)
  622.         EntityShininess(thisentity,.9)
  623.         thisstate=POW_STATE_SPAWNED
  624.         If Not powerupparent
  625.                 PositionEntity(thisentity,Rand(-25,25),Rand(-25,25),Rand(-25,25))      
  626.                 RotateEntity(thisentity,Rand(359),Rand(359),Rand(359))
  627.         Else
  628.                 PositionEntity(thisentity,EntityX(powerupparent),EntityY(powerupparent),EntityZ(powerupparent))
  629.                 RotateEntity(thisentity,EntityX(powerupparent),EntityY(powerupparent),EntityZ(powerupparent))          
  630.         EndIf
  631.         Return this    
  632. End Function
  633.  
  634. Function cellStart()
  635.         ;blood cell
  636.         cellular.cellular=New cellular
  637.         cellularid=1
  638.         cellular_ID[cellularid]=cellular
  639.         cellularhealth=400
  640.         cellularpoint=100
  641.         cellular
  642. eplicatespeed#=2000
  643.         cellular
  644. eplicacount%=1
  645.         cellular
  646. eplicaincubation#=0
  647.         cellular
  648. eplicatebehavior=1     
  649.         cellularentity=cellTorusCreate(1,1,32,32,0);blood cell
  650.         ScaleMesh(cellularentity,1,1,.5)
  651.         cellularxradius=1
  652.         cellularyradius=.25
  653.         cellular
  654. =127
  655.         EntityColor(cellularentity,cellular
  656. ,cellularg,cellular)
  657.         HideEntity(cellularentity)
  658.  
  659.         ;white cell
  660.         cellular.cellular=New cellular
  661.         cellularid=2
  662.         cellular_ID[cellularid]=cellular
  663.         cellularentity=cellTorusCreate(1,1,32,32,0);blood cell
  664.         ScaleMesh(cellularentity,1,1,.5)
  665.         cellularxradius=1
  666.         cellularyradius=.25    
  667.         cellular
  668. =234
  669.         cellularg=255
  670.         cellular=154  
  671.         EntityColor(cellularentity,cellular
  672. ,cellularg,cellular)
  673.         HideEntity(cellularentity)
  674.  
  675.         ;brain cell    
  676. End Function
  677.  
  678. Function cellSpawn.cell(cellularid,cellularparent=0)
  679.         this.cell = New cell
  680.         thiscellularid=cellularid
  681.         cellular.cellular=cellular_ID[cellularid]
  682.         thishealth=cellularhealth
  683.         this
  684. eplicatespeed=cellular
  685. eplicatespeed#
  686.         this
  687. eplicaincubation=cellular
  688. eplicaincubation#
  689.         this
  690. eplicatebehavior=cellular
  691. eplicatebehavior       
  692.         thisentity=CopyEntity(cellularentity)
  693.         this
  694. =cellular
  695.  
  696.         thisg=cellularg
  697.         this=cellular
  698.         thisa#=1       
  699.         EntityColor(thisentity,this
  700. ,thisg,this)
  701.         EntityShininess(thisentity,.9)
  702.         EntityType(thisentity,LEVEL_COLLISIONTYPE_CELL)
  703.         EntityRadius(thisentity,cellularxradius,cellularyradius)       
  704.         thisstate=CELL_STATE_HEALTHY
  705.         If Not cellularparent
  706.                 PositionEntity(thisentity,Rand(-25,25),Rand(-25,25),Rand(-25,25))      
  707.                 RotateEntity(thisentity,Rand(359),Rand(359),Rand(359))
  708.         Else
  709.                 PositionEntity(thisentity,EntityX(cellularparent),EntityY(cellularparent),EntityZ(cellularparent))     
  710.                 RotateEntity(thisentity,EntityX(cellularparent),EntityY(cellularparent),EntityZ(cellularparent))               
  711.         EndIf
  712.         Return this    
  713. End Function
  714.  
  715. Function cellUpdate()
  716.         levelcells=0
  717.         For this.cell = Each cell
  718.                 cellular.cellular=cellular_ID[thiscellularid]
  719.                 Select thisstate
  720.                         Case CELL_STATE_HEALTHY
  721.                                 TurnEntity(thisentity,1,2,3)
  722.                                 MoveEntity(thisentity,.01,.01,.01)
  723.                                 If EntityCollided(thisentity,LEVEL_COLLISIONTYPE_VIRUS)
  724.                                         thisstate=CELL_STATE_INFECTED
  725.                                         EntityShininess(thisentity,0)
  726.                                 EndIf  
  727.                                 this
  728. eplicatespeed=this
  729. eplicatespeed-1
  730.                                 If Not this
  731. eplicatespeed thisstate=CELL_STATE_REPLICATE
  732.                                 levelcells=levelcells+1
  733.                         Case CELL_STATE_HEALING
  734.                                 levelcells=levelcells+1
  735.                         Case CELL_STATE_REPLICATE
  736.                                 thisstate=CELL_STATE_REPLICATING       
  737.                                 levelcells=levelcells+1
  738.                         Case CELL_STATE_REPLICATING
  739.                                 cellSpawn(thiscellularid)
  740.                                 playerscore=playerscore+cellularpoint
  741.                                 this
  742. eplicatespeed=cellular
  743. eplicatespeed
  744.                                 thisstate=CELL_STATE_HEALTHY   
  745.                                 player
  746. =255                   
  747.                                 levelcells=levelcells+1
  748.                         Case CELL_STATE_INFECTED
  749.                                 EntityType(thisentity,LEVEL_COLLISIONTYPE_NONE)
  750.                                 this
  751. #=this
  752. +(Sgn(0-this
  753. )*7)
  754.                                 thisg#=thisg+(Sgn(255-thisg)*7)
  755.                                 this#=this+(Sgn(0-this)*7)
  756.                                 EntityColor(thisentity,this
  757. ,thisg,this)
  758.                                 thishealth=thishealth-1
  759.                                 If Not thishealth thisstate=CELL_STATE_INFECTION
  760.                         Case CELL_STATE_INFECTION              
  761.                                 thishealth=thishealth-1
  762.                                 If thishealth=-10 thisstate=CELL_STATE_DYING
  763.                                 thisa#=thisa#-.1
  764.                                 EntityAlpha(thisentity,thisa#)
  765.                         Case CELL_STATE_DYING
  766.                                 EntityType(thisentity,LEVEL_COLLISIONTYPE_NONE)
  767.                                 this
  768. #=this
  769. +(Sgn(0-this
  770. )*15)
  771.                                 thisg#=thisg+(Sgn(0-thisg)*15)
  772.                                 this#=this+(Sgn(0-this)*15)
  773.                                 EntityColor(thisentity,this
  774. ,thisg,this)
  775.                                 If this
  776. +thisg+this<10 thisstate=CELL_STATE_DEAD                              
  777.                         Case CELL_STATE_DEAD
  778.                                 FreeEntity(thisentity)
  779.                                 Delete this                            
  780.                 End Select
  781.         Next
  782. End Function
  783.  
  784. Function cellTorusCreate(torrad#,torwidth#,segments,sides,parent=0)
  785.         ;by Philip Merwarth
  786.         torusmesh=CreateMesh(parent)
  787.         surf=CreateSurface(torusmesh)
  788.         FATSTEP#=360.0/sides
  789.         DEGSTEP#=360.0/segments
  790.         radius#=0
  791.         x#=0
  792.         y#=0
  793.         z#=0
  794.         fat#=0
  795.         Repeat
  796.                 radius = torrad + (torwidth)*Sin(fat)
  797.                 deg#=0
  798.                 z=torwidth*Cos(fat)
  799.                 Repeat
  800.                         x=radius*Cos(deg)
  801.                         y=radius*Sin(deg)
  802.                         AddVertex surf,x,y,z,x,y,z                     
  803.                         deg=deg+DEGSTEP
  804.                 Until deg>=360
  805.                 fat=fat+FATSTEP
  806.         Until fat>=360
  807.         For vert=0 To segments*sides-1
  808.                 v0=vert
  809.                 v1=vert+segments
  810.                 v2=vert+1
  811.                 v3=vert+1+segments
  812.                
  813.                 If v1>=(segments*sides) Then v1=v1-(segments*sides)
  814.                 If v2>=(segments*sides) Then v2=v2-(segments*sides)
  815.                 If v3>=(segments*sides) Then v3=v3-(segments*sides)
  816.                
  817.                 AddTriangle surf,v0,v1,v2
  818.                 AddTriangle surf,v1,v3,v2      
  819.         Next
  820.         UpdateNormals torusmesh
  821.         Return torusmesh
  822. End Function
  823.  
  824. Function virusStart()
  825.         ;andromeda minor
  826.         viral.viral=New viral
  827.         viralid=1
  828.         viral_ID[viralid]=viral
  829.         viralg=255
  830.         viralhealth=1
  831.         viralpoint=50
  832.         viralvmax=.2
  833.         viralamax=.8           
  834.         viral
  835. eplicatespeed%=16
  836.         viral
  837. eplicacount%=3
  838.         viral
  839. eplicaincubation%=256
  840.         viral
  841. eplicatebehavior=1
  842.         viralentityres=2
  843.         viralentityxscale#=.25
  844.         viralentityyscale#=1
  845.         viralentityzscale#=.25         
  846.         viralentity=CreateSphere(viralentityres)
  847.         ScaleMesh(viralentity,viralentityxscale,viralentityyscale,viralentityzscale)
  848.         viruscopy1=CreateSphere(viralentityres)
  849.         ScaleMesh(viruscopy1,viralentityxscale,viralentityyscale,viralentityzscale)
  850.         RotateMesh(viruscopy1,90,0,0)
  851.         viruscopy2=CreateSphere(viralentityres)
  852.         ScaleMesh(viruscopy2,viralentityxscale,viralentityyscale,viralentityzscale)
  853.         RotateMesh(viruscopy2,0,0,90)  
  854.         AddMesh(viruscopy1,viralentity)
  855.         AddMesh(viruscopy2,viralentity)
  856.         viralxradius=.75
  857.         EntityColor(viralentity,viral
  858. ,viralg,viral)
  859.         HideEntity(viralentity)
  860.         FreeEntity(viruscopy1)
  861.         FreeEntity(viruscopy2)
  862.  
  863.         ;andromeda major       
  864.                
  865.         ;nemisis
  866.        
  867.         ;t-strain
  868.        
  869. End Function
  870.  
  871. Function virusSpawn(viralid,virusparententity=0)
  872.         this.virus=New virus
  873.         thisviralid=viralid
  874.         viral.viral=viral_ID[thisviralid]
  875.         thisentity=CopyEntity(viralentity)
  876.         EntityType(thisentity,LEVEL_COLLISIONTYPE_VIRUS)
  877.         EntityRadius(thisentity,viralxradius)  
  878.         thishealth=viralhealth
  879.         thisvmax=viralvmax
  880.         thisamax=viralamax
  881.         this
  882. eplicatespeed=viral
  883. eplicatespeed%
  884.         this
  885. eplicaincubation=viral
  886. eplicaincubation%
  887.         this
  888. eplicatebehavior=viral
  889. eplicatebehavior       
  890.         thisstate=VIRUS_STATE_TARGETING
  891.         If Not virusparententity
  892.                 thisx=Rand(40,50)* (Rand(-1,1)Or 1)  
  893.                 thisy=Rand(40,50)* (Rand(-1,1)Or 1)
  894.                 thisz=Rand(40,50)* (Rand(-1,1)Or 1)
  895.         Else
  896.                 thisx=EntityX(virusparententity)
  897.                 thisy=EntityY(virusparententity)
  898.                 thisz=EntityZ(virusparententity)       
  899.         EndIf  
  900.         PositionEntity(thisentity,thisx,thisy,thisz)
  901. End Function
  902.  
  903. Function virusUpdate()
  904.  
  905.         If Rand(200)=True virusSpawn(1)
  906.        
  907.         For this.virus = Each virus
  908.                 viral.viral=viral_ID[thisviralid]
  909.                 Select thisstate
  910.                         Case VIRUS_STATE_TARGETING
  911.                                 For cell.cell =  Each cell
  912.                                         If Rand(10)=True And cellstate=CELL_STATE_HEALTHY
  913.                                                 this    arget=cellentity
  914.                                                 thisstate=VIRUS_STATE_ACTIVE
  915.                                         EndIf
  916.                                 Next
  917.                                
  918.                                 ;vibrate
  919.                                 virusvibe#=.05
  920.                                 PositionEntity(thisentity,thisx+Rnd(-virusvibe,virusvibe),thisy+Rnd(-virusvibe,virusvibe),thisz+Rnd(-virusvibe,virusvibe))                                             
  921.                        
  922.                         Case VIRUS_STATE_ACTIVE
  923.                                 ;reacquire target based on ai skill
  924.                                 For cell.cell =  Each cell
  925.                                         If this arget=cellentity And cellstate<>CELL_STATE_HEALTHY  
  926.                                                 thisstate=VIRUS_STATE_TARGETING
  927.                                                 Exit
  928.                                         EndIf
  929.                                 Next
  930.                                                        
  931.                                 ;Homing example, by Jeppe Nielsen 2003
  932.                                 dx#=(EntityX(this       arget)-thisx)
  933.                                 dy#=(EntityY(this       arget)-thisy)
  934.                                 dz#=(EntityZ(this       arget)-thisz)
  935.                                        
  936.                                 l#=Sqr(dx#^2+dy#^2+dz#^2)
  937.                                
  938.                                 dx#=(dx#/l#)*thisamax#
  939.                                 dy#=(dy#/l#)*thisamax#
  940.                                 dz#=(dz#/l#)*thisamax#
  941.                                
  942.                                 ;if close enough escape target
  943.                                 If l#<=1;distance#
  944.                                         dx#=-dx#
  945.                                         dy#=-dy#
  946.                                         dz#=-dz#
  947.                                 EndIf
  948.                                
  949.                                 ;check against all other enemies, to avoid them
  950.                                 ;For virus.virus = Each virus
  951.                                 ;       If virus<>this
  952.                                 ;              
  953.                                 ;               dex#=(thisx-virusx)
  954.                                 ;               dey#=(thisy-virusy)
  955.                                 ;               dez#=(thisz-virusz)
  956.                                 ;              
  957.                                 ;               l#=Sqr(dex#^2+dey#^2+dez#^2)
  958.                                 ;              
  959.                                 ;               dxx#=dxx#+(dex#/l#)*thisamax#
  960.                                 ;               dyy#=dyy#+(dey#/l#)*thisamax#
  961.                                 ;               dzz#=dzz#+(dez#/l#)*thisamax#
  962.                                 ;              
  963.                                 ;               co=co+1
  964.                                 ;       EndIf
  965.                                 ;Next
  966.                                
  967.                                 If co
  968.                                
  969.                                 dxx#=dxx#/Float(co)
  970.                                 dyy#=dyy#/Float(co)
  971.                                 dyz#=dyz#/Float(co)
  972.                                
  973.                                 EndIf
  974.                                
  975.                                 dx#=(dx#+dxx#)/2
  976.                                 dy#=(dy#+dyy#)/2
  977.                                 dz#=(dz#+dzz#)/2
  978.                                
  979.                                 thisax#=thisax#+dx#
  980.                                 thisay#=thisay#+dy#
  981.                                 thisaz#=thisaz#+dz#
  982.                                
  983.                                 acc#=Sqr(thisax#^2+thisay#^2+thisaz#^2)
  984.                                
  985.                                 ;Check if current acceleration is more than allowed
  986.                                 If acc#>thisamax#
  987.                                         thisax#=(thisax#/acc#)*thisamax
  988.                                         thisay#=(thisay#/acc#)*thisamax
  989.                                         thisaz#=(thisaz#/acc#)*thisamax
  990.                                 EndIf
  991.                                
  992.                                 thisvx#=thisvx#+thisax#
  993.                                 thisvy#=thisvy#+thisay#
  994.                                 thisvz#=thisvz#+thisaz#
  995.                                
  996.                                 vel#=Sqr(thisvx#^2+thisvy#^2+thisvz#^2)
  997.                                
  998.                                 ;Check if current velocity is more than allowed
  999.                                 If vel#>thisvmax#
  1000.                                         thisvx#=(thisvx#/vel#)*thisvmax
  1001.                                         thisvy#=(thisvy#/vel#)*thisvmax
  1002.                                         thisvz#=(thisvz#/vel#)*thisvmax
  1003.                                 EndIf
  1004.                                
  1005.                                 ; add velocity to position
  1006.                                 thisx#=thisx#+thisvx#
  1007.                                 thisy#=thisy#+thisvy#                  
  1008.                                 thisz#=thisz#+thisvz#
  1009.                                
  1010.                                 PositionEntity(thisentity,thisx,thisy,thisz)
  1011.                                 TurnEntity(thisentity,4,8,16)
  1012.                                
  1013.                                 blastentity=EntityCollided(thisentity,LEVEL_COLLISIONTYPE_BLAST)
  1014.                                 If blastentity thishealth=thishealth-1
  1015.                                
  1016.                                 If Not thishealth
  1017.                                         For virusloop = 1 To 16
  1018.                                                 particleSpawn(1,thisentity)
  1019.                                         Next
  1020.                                         thisstate=VIRUS_STATE_DEAD
  1021.                                 EndIf
  1022.                                
  1023.                                 cellentity=EntityCollided(thisentity,LEVEL_COLLISIONTYPE_CELL)
  1024.                                 If cellentity
  1025.                                         EntityType(thisentity,LEVEL_COLLISIONTYPE_NONE)
  1026.                                         this    arget=cellentity
  1027.                                         thisstate=VIRUS_STATE_PENETRATE
  1028.                                 EndIf  
  1029.        
  1030.                         Case VIRUS_STATE_PENETRATE
  1031.                                 thisx#=EntityX(this     arget);thisx+(Sgn(EntityX(this  arget)-thisx)*.01);
  1032.                                 thisy#=EntityY(this     arget);thisy+(Sgn(EntityY(this  arget)-thisy)*.01);
  1033.                                 thisz#=EntityZ(this     arget);thisz+(Sgn(EntityZ(this  arget)-thisz)*.01);
  1034.                                 PositionEntity(thisentity,thisx,thisy,thisz)
  1035.                                 ;If thisx+thisy#+thisz#<.10
  1036.                                         thisstate=VIRUS_STATE_REPLICATE
  1037.                                 ;EndIf
  1038.                         Case VIRUS_STATE_REPLICATE
  1039.                                 ;vibrate
  1040.                                 virusvibe#=.05
  1041.                                 PositionEntity(thisentity,thisx+Rnd(-virusvibe,virusvibe),thisy+Rnd(-virusvibe,virusvibe),thisz+Rnd(-virusvibe,virusvibe))                                             
  1042.                                 this
  1043. eplicaincubation=this
  1044. eplicaincubation-1
  1045.                                 If Not this
  1046. eplicaincubation
  1047.                                         this
  1048. eplicaincubation=viral
  1049. eplicaincubation
  1050.                                         ;EntityColor(thisentity,255,0,0)
  1051.                                         thisstate=VIRUS_STATE_REPLICATING
  1052.                                 EndIf  
  1053.                                
  1054.                         Case VIRUS_STATE_REPLICATING
  1055.                                 Select this
  1056. eplicatebehavior
  1057.                                         Case 1; replicate once
  1058.                                                 this
  1059. eplicatespeed=this
  1060. eplicatespeed-1
  1061.                                                 If Not this
  1062. eplicatespeed
  1063.                                                         this
  1064. eplicacount=this
  1065. eplicacount+1
  1066.                                                         virusspawn(thisviralid,thisentity)
  1067.                                                         If this
  1068. eplicacount=viral
  1069. eplicacount
  1070.                                                                 this
  1071. eplicacount=0
  1072.                                                                 thisstate=VIRUS_STATE_DYING
  1073.                                                         EndIf  
  1074.                                                         this
  1075. eplicatespeed=viral
  1076. eplicatespeed;reset speed
  1077.                                                 EndIf
  1078.  
  1079.                                 End Select
  1080.                                  
  1081.                         Case VIRUS_STATE_DYING
  1082.                                 this
  1083. #=this
  1084. +(Sgn(0-this
  1085. )*1)
  1086.                                 thisg#=thisg+(Sgn(0-thisg)*1)
  1087.                                 this#=this+(Sgn(0-this)*1)
  1088.                                 EntityColor(thisentity,this
  1089. ,thisg,this)
  1090.                                 If this
  1091. +thisg+this<1 thisstate=VIRUS_STATE_DEAD
  1092.                                                                
  1093.                         Case VIRUS_STATE_DEAD
  1094.                                 playerscore=playerscore+viralpoint
  1095.                                 FreeEntity(thisentity)
  1096.                                 Delete this
  1097.                                                        
  1098.                 End Select
  1099.         Next
  1100. End Function
  1101.  
  1102. .GAME_START
  1103.         AppTitle("c e l l u l a r")
  1104.         Graphics3D(800,600,32,2)
  1105.         SetBuffer(BackBuffer())
  1106.        
  1107.         Repeat
  1108.                 Text(GraphicsWidth()/2,0,"c e l l u l a r",1)
  1109.                 Text(GraphicsWidth()/2,24,"protect living cells",1)
  1110.                 Text(GraphicsWidth()/2,36,"destroy attacking viruses",1)
  1111.                 Text(GraphicsWidth()/2,48,"collect protein blocks",1)
  1112.                 Text(GraphicsWidth()/2,60,"W,A,S,D,Mouse,LMB,RMB",1)
  1113.                 Text(GraphicsWidth()/2,GraphicsHeight()/2,"press <space> to start",1)
  1114.                 Flip()
  1115.         Until KeyDown(57)
  1116.  
  1117.         player_WobbleViewScreen=CreateImage(GraphicsWidth(),GraphicsHeight())
  1118.        
  1119.         SeedRnd (MilliSecs())
  1120.  
  1121.        
  1122.         levelStart()
  1123.         leveltimer=CreateTimer(30)
  1124.         playerStart()
  1125.         blastStart()
  1126.         powStart()
  1127.         particleStart()
  1128.         cellStart()
  1129.         virusStart()
  1130.        
  1131.         ;initial start
  1132.         For cellloop = 1 To 12 cellSpawn(1)     Next   
  1133.         virusSpawn(1)
  1134.        
  1135.         audioCD=PlayCDTrack(1,3)
  1136.  
  1137.         FlushKeys()
  1138.         FlushMouse()
  1139.  
  1140. .GAME_UPDATE
  1141.         While Not KeyDown(1)
  1142.                 WaitTimer(leveltimer)
  1143.                        
  1144.                         UpdateWorld()
  1145.                         RenderWorld()
  1146.                         playerUpdate()
  1147.                         blastUpdate()
  1148.                         powUpdate()
  1149.                         particleUpdate()
  1150.                         cellUpdate()
  1151.                         virusUpdate()
  1152.  
  1153.                         playerWobbleView()
  1154.  
  1155.                         If KeyHit(63) Delay(2000) ;debug
  1156.                         If KeyHit(67) SaveBuffer(FrontBuffer(),"screenshot.bmp")
  1157.  
  1158.                         playerCursor()
  1159.                        
  1160.                         Color(255,255,255)
  1161.                         Text(GraphicsWidth()/2,0,"score:"+playerscore,1)
  1162.                         Text(GraphicsWidth()/2,12,"cells:"+levelcells,1)
  1163.                         Text(GraphicsWidth()/2,24,"bombs:"+playerlaster2,1)
  1164.                         If Not levelcells Text(GraphicsWidth()/2,GraphicsHeight()/2-64,"GAME OVER",1)
  1165.  
  1166.                         VWait                  
  1167.                 Flip()
  1168.                 If Not levelcells Exit
  1169.         Wend
  1170.  
  1171. .GAME_STOP
  1172.         FlushKeys()
  1173.         WaitKey()
  1174.  
  1175.         FreeTimer(leveltimer)
  1176.         Delete Each player
  1177.         Delete Each blaster
  1178.         Delete Each blast
  1179.         Delete Each powerup
  1180.         Delete Each pow
  1181.         Delete Each reactor
  1182.         Delete Each particle
  1183.         Delete Each cellular
  1184.         Delete Each cell
  1185.         Delete Each viral
  1186.         Delete Each virus
  1187.         ClearWorld()
  1188.        
  1189.         Goto GAME_START        
  1190.         End
  1191.  
  1192.  
  1193. .playerkeymapdata
  1194. ;    lft rgt rwd fwd lr rr        
  1195. ;    a   d   s   w  q  e
  1196. Data 30,32,31,17,44,18


Comments :


Ross C(Posted 1+ years ago)

 Hehe, looks cool, but the graphics screen is wayyyyyyy to small and i think the left and right mouse look is inverted. :S


degac(Posted 1+ years ago)

 funny...and don't require a DVD full with animation & sounds!


Techlord(Posted 1+ years ago)

 I'm going to continue development on c e l l u l a r but my official entry stands.


jfk EO-11110(Posted 1+ years ago)

 This is really great Frank, I'm impressed. THe player controls where way to sluggish IMHo, so I tuned it a bit:
Code: [Select]
Function playerControl(this.player)
this#=this+(Sgn(130-this)*5)
thisg#=thisg+(Sgn(0-thisg)*5)
this#=this+(Sgn(0-this)*5)
CameraClsColor(thisentity%,this,thisg,this)

; Mouse x and y speed
mxs#=-MouseXSpeed()/4.0
mys#=MouseYSpeed()/4.0
; Mouse shake (total mouse movement)
mouse_shake=Abs(((mxs#+mys#)/2)/1000.0)
; Destination camera angle x and y values
thisdestyaw#=thisdestyaw#-mxs#
thisdestpitch#=thisdestpitch#+mys#
; Current camera angle x and y values
thisyaw#=thisyaw#+((thisdestyaw#-thisyaw#)/2.5)
thispitch#=thispitch#+((thisdestpitch#-thispitch#)/2.5)
RotateEntity thisentity%,thispitch#,thisyaw#,1
; Rest mouse position to centre of screen
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
;z#=.3
If KeyDown(thiskeymap[1]) x#=thisspeed#*-1.
If KeyDown(thiskeymap[2]) x#=thisspeed#
If KeyDown(thiskeymap[3]) z#=thisspeed#*-1.
If KeyDown(thiskeymap[4]) z#=thisspeed#
If KeyDown(thiskeymap[5]) TurnEntity(thisentity%,0,0,-1.)
If KeyDown(thiskeymap[6]) TurnEntity(thisentity%,0,0,1.)
; Move camera using movement values
MoveEntity thisentity%,x#,y#,z#

; input
;If KeyDown(thiskeymap[4])
;; accellerate in the direction the player is facing (use Y axis because cones point in that direction)
;TFormVector(0,0,PLAYER_ACCEL,thisentity,PLAYER_GLOBAL_SPACE)
;thisxv = thisxv + TFormedX()
;thisyv = thisyv + TFormedY()
;thiszv = thiszv + TFormedZ()
;; measure current speed
;current_speed# = Sqr(thisxv*thisxv + thisyv*thisyv + thiszv*thiszv)
;If current_speed > PLAYER_MAX_SPEED
;; limit current speed to MAX_SPEED
;ratio_of_speed_to_keep#=PLAYER_MAX_SPEED/current_speed
;thisxv = thisxv * ratio_of_speed_to_keep
;thisyv = thisyv * ratio_of_speed_to_keep
;thiszv = thiszv * ratio_of_speed_to_keep
;EndIf
;EndIf
;
;If  KeyDown(thiskeymap[3])
;thisxv = thisxv - TFormedX()
;thisyv = thisyv - TFormedY()
;thiszv = thiszv - TFormedZ()
;current_speed# = Sqr(thisxv*thisxv + thisyv*thisyv + thiszv*thiszv)
;If current_speed < 0
;; limit current speed to MAX_SPEED
;ratio_of_speed_to_keep#=PLAYER_MAX_SPEED/current_speed
;thisxv = thisxv * ratio_of_speed_to_keep
;thisyv = thisyv * ratio_of_speed_to_keep
;thiszv = thiszv * ratio_of_speed_to_keep
;EndIf
;EndIf
;
;; move the player
;thisx=thisx+thisxv
;thisy=thisy+thisyv
;thisz=thisz+thiszv

If MouseHit(1) blastSpawn(thislaster1)
If MouseHit(2)
If thislaster2
playersmartbomb(this);super weapon
this=255
thisg=130
this=60
thislaster2=thislaster2-1
EndIf
EndIf
End Function
While it's fun to play, it also reminds me of I should check my health frequently. If you add some cool enviroments/backgrounds and Menus etc, this could be a popular game.


5t@nKy(Posted 1+ years ago)

 download doesnt work, could you upload it, pls?


chwaga(Posted 1+ years ago)

 its hard with the invert mouse to even navigate the game...


Canardian(Posted 1+ years ago)

 This LMB should have autofire!


Darkseid2.0(Posted 1+ years ago)

 Awesome game. Some Menus with options for game controls, graphics sound options would make this a super game. Great work. Keep it up.


Rick Nasher(Posted 1+ years ago)

 Very nice! Had a similar idea ever since I've seen Packman. [/i]

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal