Code archives/3D Graphics - Maths/Dropping 3 bombs

This code has been declared by its author to be Public Domain code.

Download source code

Dropping 3 bombs by Blitzplotter2016
Generated with help from RemiD and Rick Nasher (and I probably wouldn't have got there without them - thanks folks ;)

Note, the A, B and C.png were simple 32x32 graphics quickly drawn using Microsoft Paint.

All associated files included here:


http://www.wishingwellsoftware.co.uk/setup_3bombs_Blitz3D.exe
Global screen_width = 800, screen_height = 600

Graphics3D screen_width, screen_height, 32,1
SetBuffer BackBuffer() 
	
light = CreateLight()
RotateEntity light, 90, 0, 0

Global terrainscale=4
Global height#=0.0

createdTerrain = LoadTerrain( "terrain_hmap.jpg" )

tex_A = LoadTexture( "A.png" )

ScaleTexture tex_A, 1, 1

EntityTexture createdTerrain, tex_A



ScaleEntity createdTerrain, terrainscale, 25.5, terrainscale
TerrainDetail createdTerrain,2000*terrainscale,True : TerrainShading createdTerrain,True


ModifyTerrain createdTerrain, 8, 8, 1, 1 ; put in test spike
ModifyTerrain createdTerrain, 13, 8, 1, 1 ; put in test spike
ModifyTerrain createdTerrain, 18, 8, 1, 1 ; put in test spike
ModifyTerrain createdTerrain, 24, 8, 1, 1 ; put in test spike
ModifyTerrain createdTerrain, 33, 8, 1, 1 ; put in test spike

ModifyTerrain createdTerrain, 5, 10, 1, 1; put in test spike
ModifyTerrain createdTerrain, 5, 20, 1, 1; put in test spike



;Bravo's terrain------------------------------

landTerrain = CreateTerrain(4)

ScaleEntity landTerrain,3,25.5,3

MoveEntity landTerrain,190,0,-30

tex_B = LoadTexture( "B.png" )

ScaleTexture tex_B, 5, 5

EntityTexture landTerrain, tex_B


;Chariles terrain-----------------------------

ClandTerrain = CreateTerrain(4)


ScaleEntity ClandTerrain,3,25.5,3

MoveEntity ClandTerrain,390,0,-30

tex_C = LoadTexture( "C.png" )

ScaleTexture tex_C, 5, 5

EntityTexture ClandTerrain, tex_C



;---------------------------------------
;insertions;
;---------------------------------------

lit=CreateLight()
cam=CreateCamera()

CameraRange cam,.1,1000
PositionEntity cam,32,20,25
TurnEntity cam,0,90,0





Const BEAKS=9
Const PEAKS=3

riseup=0

Global raiseBy#=0.2

bomberx=20
bombery=150
bomberz=50
bombSpeed#=0.2


;Bbomberx=204
;Bbombery=100
;Bbomberz=6
;BbombSpeed#=2.2

Bbomberx=25
Bbombery=200
Bbomberz=100
BbombSpeed#=0.4


;Cbomberx=404
;Cbombery=150
;Cbomberz=9
;CbombSpeed#=2.2



Cbomberx=16
Cbombery=220
Cbomberz=350
CbombSpeed#=0.8

Global bomb_a_falling=0
Global bomb_b_falling=0
Global bomb_c_falling=0

Global bomb_a_exploding=0
Global bomb_b_exploding=0
Global bomb_c_exploding=0

xDivide=5.2
zDivide=4.2

Bsize=6


;make a bomb carrier

Blimp = CreateSphere(25)
PositionEntity Blimp,bomberx,bombery,bomberz
ScaleEntity Blimp,Bsize,Bsize,Bsize

;make a  A bomb

bomb = CreateSphere(25)
PositionEntity bomb,bomberx,bombery-5,bomberz
ScaleEntity bomb,0.9,1.5,0.9

;make a Bravo bomb carrier

BBlimp = CreateSphere(25)
PositionEntity BBlimp,Bbomberx,Bbombery,Bbomberz
ScaleEntity BBlimp,Bsize,Bsize,Bsize

;make a B bomb

Bbomb = CreateSphere(25)
PositionEntity Bbomb,Bbomberx,Bbombery-5,Bbomberz
ScaleEntity Bbomb,0.9,1.5,0.9

;make a C bomb carrier

CBlimp = CreateSphere(25)
PositionEntity CBlimp,Cbomberx,Cbombery,Cbomberz
ScaleEntity CBlimp,Bsize,Bsize,Bsize

;make a C bomb

Cbomb = CreateSphere(25)
PositionEntity Cbomb,Cbomberx,Cbombery-5,Cbomberz
ScaleEntity Cbomb,0.9,1.5,0.9

;bomb vars

bombs=0
Global bombstext=0


;Assign collision numbers to items

EntityType bomb, 1
EntityType createdTerrain, 3    ; A
EntityType Blimp, 4

;-------------------------------------

EntityType Bbomb,7
EntityType BBlimp,8
EntityType landterrain, 2       ; B

;--------------------------------------

EntityType Cbomb,5
EntityType CBlimp,6
EntityType CLandTerrain,9       ; C


;------------------------------------------------------------
;
; Collisions 1 sph to sph, 2 sph to poly, 3 sph to box
; response 1:stop,  2:full sliding collision,   
; 3:slide 2 - prevent entities from sliding down slopes?
;
;----------------------------------------------------------

Collisions 1,2,2,1

Collisions 1,3,2,1     ;makes bomb A land on the terrain



;---------------------------
; bBomb collisions
;---------------------------

Collisions 7,2,2,1

Collisions 7,3,2,1  ;lets B Bomb collide with A Terrain


;------------------------
; cBomb collisions
;------------------------

Collisions 5,9,2,1

;------------------------

MoveEntity Cam,0,90,-340


;MoveEntity createdTerrain,20,15,10



While Not KeyDown(1)
	
	If KeyDown(203) MoveEntity cam,-1,0,0
		If KeyDown(205) MoveEntity cam,1,0,0
			If KeyDown(200) MoveEntity cam,0,0,1
				If KeyDown(208) MoveEntity cam,0,0,-1
					
					
					If KeyDown(16) ;q
						
						TurnEntity cam,1,0,0
						
						Flip
						
					EndIf
					
					If KeyDown(30) ;a
						
						TurnEntity cam,-1,0,0
						
					EndIf
					
					
					If KeyDown(44) 
						
						TurnEntity cam,0,1,0
						
					EndIf
					
					
					If KeyDown(45) 
						
						TurnEntity cam,0,-1,0
						
					EndIf
					
					If KeyDown(48)   ;  B
						
						bombs=1
						
					EndIf
					
					If KeyDown(19)   ;  R  -  Rise the terrain up
						
						riseup=1
						
					Else
						
						riseup = 0
						
					EndIf
					
					
					If riseup = 1
						
						pickgrid=TerrainSize(createdTerrain)
						
						raiseTerrain(createdTerrain,pickgrid)
						
					EndIf
					
					
					
					If bombs = 1
						
						dropbombs()
						
					Else
						
						stopbombs()
						
					EndIf
					
					UpdateWorld
					RenderWorld
					
					If bombstext=1
						Text 20,20,"Dropping A, B and C bombs...."
						
						;---------- bomb A --------------------------
						
						If bomb_a_falling=1
							
							
							MoveEntity bomb,0,-bombSpeed,0
							
							bomx#=EntityX(bomb)
							bomy#=EntityY(bomb)
							bomz#=EntityZ(bomb)
							
							Text 40,100,"bomy#: "+bomy#
							
							Text 40,120,"TerrainY#:  "+TerrainY#(createdTerrain,bomx#,bomy#,bomz#)
							
							;TerrainY is 15.0
							;15.0/25.5 = 0.588
							;lets say I want to dig a 4 unit hole, this'll equate to 4x0.588
							;0.5/25.5 = 0.019607
							; 0.588 - 0.08 = 0.50 (new heightnafter hole dig)
							
							If bomy#-3<TerrainY#(createdTerrain,bomx#,bomy#,bomz#)
								
								bomb_a_exploding=1
								
								TFormPoint (x, y, z,  createdTerrain, bomb  )
							
							Else
								
								Text 40,160,"Bomb a still intact with bomy#:"+bomy#+" not less than TerrainY#: "+TerrainY#(createdTerrain,bomx#,bomy#,bomz#)
								
								
								
							EndIf
							
							
						EndIf
						
						If bomb_a_exploding=1
							
							x = EntityX(bomb)
							y = EntityY(bomb)
							z = EntityZ(bomb)
							
							ModifyTerrain createdTerrain, x/xdivide, (z/zdivide), 0.02, 1; 
							ModifyTerrain createdTerrain, (x/xdivide)+1, (z/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, (x/xdivide)+1, (z/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, x/xdivide, (z/zdivide)+1, 0.02, 1; 
							
							;if bomb is at terrain level explode and hide
							;Text 40,40,"Exploding Bomb A"
							
						EndIf
						
						
						
						;---------- bomb B --------------------------
						
						If bomb_b_falling=1
							
						
							MoveEntity Bbomb,0,-BbombSpeed,0    
							
							bombx#=EntityX(Bbomb)
							bomby#=EntityY(Bbomb)
							bombz#=EntityZ(Bbomb)
							
							If bomby#-3<TerrainY#(createdTerrain,bombx#,bomby#,bombz#); Or ; Failing to crater, commented
								
								bomb_b_exploding=1
								
								Text 40,180,"Bomb B Booming............"
								
							Else
								
								Text 40,180,"Bomb B still intact with bomby#:"+bomby#+" not less than TerrainY#: "+TerrainY#(createdTerrain,bombx#,bomby#,bombz#)
								
								
								
							EndIf
							
						EndIf
						
						;If 0
						
						If bomb_b_exploding=1
							
							
							Text 40,60,"Attempting to Crater where bomb B was"
							
							bx = EntityX(Bbomb)
							by = EntityY(Bbomb)
							bz = EntityZ(Bbomb)
							
							ModifyTerrain createdTerrain, bx/xdivide, (bz/zdivide), 0.02, 1; 
							ModifyTerrain createdTerrain, (bx/xdivide)+1, (bz/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, (bx/xdivide)+1, (bz/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, bx/xdivide, (bz/zdivide)+1, 0.02, 1; 
							
							
							;Text 40,40,"Exploding Bomb B"
							
						EndIf
						
					;EndIf
						
						
						;---------- bomb C --------------------------
						
						If bomb_c_falling=1
							
							
							MoveEntity Cbomb,0,-CbombSpeed,0    
							
							bomcx#=EntityX(Cbomb)
							bomcy#=EntityY(Cbomb)
							bomcz#=EntityZ(Cbomb)
							
							If bomcy#-3<TerrainY#(createdTerrain,bomcx#,bomcy#,bomcz#); Or ; Failing to crater, commented
								
								bomb_c_exploding=1
								
								;Text 40,220,"bomc c Booming............"
								
							Else
								
								;Text 40,220,"bomc c still intact with bomcy#:"+bomcy#+" not less than TerrainY#: "+TerrainY#(createdTerrain,bomcx#,bomcy#,bomcz#)
								
								
								
							EndIf
							
						EndIf
						
						;If 0
						
						If bomb_c_exploding=1
							
							
							Text 40,60,"Attempting to Crater where bomc B was"
							
							bx = EntityX(Cbomb)
							by = EntityY(Cbomb)
							bz = EntityZ(Cbomb)
							
							ModifyTerrain createdTerrain, bx/xdivide, (bz/zdivide), 0.02, 1; 
							ModifyTerrain createdTerrain, (bx/xdivide)+1, (bz/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, (bx/xdivide)+1, (bz/zdivide)+1, 0.02, 1; 
							ModifyTerrain createdTerrain, bx/xdivide, (bz/zdivide)+1, 0.02, 1; 
							
							
							;Text 40,40,"Exploding bomb C"
							
						EndIf
						
					Else
						Text 20,20,"Press B to drop a bomb., Press R to raise the terrain - set peaks required by PEAKS variable."
						Text 20,1,"                              Cursors, Q, A, Z, W manipulate camera"
					EndIf
					
					Text 300,40,"Raising Terrain by: "+raiseBy+" thru a grid of : "+pickgrid
					
					bombstext=0
					
					Flip
					
				Wend
				
				
				FreeEntity createdTerrain
				FreeEntity landterrain
				FreeEntity lit
				FreeEntity cam
				EndGraphics
				End
				
				
				
Function dropbombs()
	
	bombstext=1
	
	bomb_a_falling=1
	bomb_b_falling=1
	bomb_c_falling=1
	
	
End Function

Function stopbombs()
	
	bombstext=0
	
End Function


Function raiseTerrain(createdTerrain,pickgrid)
	
	raiseBy=raiseBy+0.02
	
	If raiseBy=1 Then raiseBy=0.01
	
	For x=1 To pickgrid Step PEAKS
		
		For z=1 To pickgrid Step BEAKS
	
			ModifyTerrain(createdTerrain,x,z,raiseBy,True)
	
		Next
		
	Next
	
End Function

Comments

None.

Code Archives Forum