Shooter

Blitz3D Forums/Blitz3D Programming/Shooter

I still have that problem. It still says Mem access violation. In the blitz debugger it says that thisEnemy.EnemyType (Null)
Graphics3D 1024,768,32

AppTitle "Gun Shooter"

Collisions 1,2,2,2
Collisions 3,4,2,1

SetBuffer BackBuffer()

Type BulletType
	Field mesh
End Type

Type EnemyType
	Field mesh
End Type

Global player = CreatePivot()
PositionEntity player,0,1,1
EntityRadius player,.6
EntityType player,1

camera = CreateCamera( player )
CameraRange camera,.1,200

light = CreateLight()
LightColor light,32,32,32
TurnEntity light,45,45,0

Global Sight = LoadImage("Sight.bmp")
Global GunFire = LoadSound("gunfire.wav")
Global Gun = LoadMesh("Weapons\SWATRifle.3ds",player)
Global EnemyMesh = CreateCube()
Global BulletMesh = LoadMesh("Weapons\Bullet.3ds")

If Sight = 0 Then RuntimeError "File: 'Sight.bmp' not found"
If GunFire = 0 Then RuntimeError "File: 'gunfire.wav' not found"
If Gun = 0 Then RuntimeError "File: 'SwatRifle.3ds' not found"
If BulletMesh = 0 Then RuntimeError "File: 'Bullet.3ds' not found"

Dim Trees(5)

;Trees(0) = CreateTree("Levels\Leyland Cypress.jpg",130,317)

;RotateEntity Trees(0),90,90,90

;PositionEntity(Trees(0),10,1,10)

EntityType BulletMesh,3

HideEntity BulletMesh

Levels = OpenFile("Levels.dat")

ReadLine(Levels)

leveloc$ = ReadLine$(Levels)

Levelfile = OpenFile("Levels" + leveloc)

LevelType$ = ReadLine$(Levelfile)

If LevelType$ = "Terrain" Then
	Pos = FilePos(Levelfile)
	Level = LoadTerrain("Levels" + ReadLine(Levelfile))
	SeekFile(Levelfile,pos)
	terrain = LoadImage("Levels" + ReadLine(Levelfile))
	tex = LoadTexture("Levels" + ReadLine(LevelFile))
	EntityTexture Level,tex
ElseIf LevelType$ = "Maplet" Then
	Level = LoadMesh("Levels" + ReadLine(LevelFile))
Else
	RuntimeError "Invalid Level Type Code: L295"
EndIf

For i = 1 To 10 
	EnemyType.EnemyType = New EnemyType
	EnemyType\mesh = CopyMesh(EnemyMesh)
	EntityType EnemyType\mesh,4
Next

;CameraFogMode camera,1

;CameraFogColor camera,255,255,255

;CameraFogRange camera,1,10

If Level = 0 RuntimeError "File: 'L1Field.jpg' not found"

If GunFire = 0 Then
	RuntimeError "File: '9mm.wav' not found"
EndIf

ScaleEntity Gun,0.9999,0.9999,0.9999

MaskImage Sight,255,255,255
MidHandle Sight

For EnemyType.EnemyType = Each EnemyType
	If LevelType$ = "Terrain" Then
		PositionEntity EnemyType\mesh,Rand(0,ImageWidth(terrain)),0,Rand(0,ImageHeight(terrain))
	ElseIf LevelType$ = "Maplet
		PositionEntity EnemyType\mesh,Rand(0,MeshWidth(Level)),0,Rand(0,MeshHeight(Level))
	EndIf
	EntityType EnemyType\mesh,4
Next

FreeImage terrain

LoadSkyBox("World")

MoveEntity Gun,.1,-.1,0

EntityFX Level,1
EntityType Level,2

sp# = .05
ey# = EntityY(player)

PositionEntity Gun,EntityX(player) + .3,EntityY(player) - 1,EntityZ(player) - 1

;WireFrame True

While Not KeyHit(1)

	yv# = EntityY(player) - ey
	ey = EntityY(player)
	
	If KeyHit(57) yv=.1
	
	If KeyDown(54) Then
		sp# = 2
	ElseIf KeyDown(42) Then
		sp# = .2
	Else
		sp# = .05
	EndIf
	
	MoveEntity player,0,yv-.005,0
	
	If KeyDown(30)
		TurnEntity camera,-2,0,0
		TurnEntity Gun,-2,0,0
	EndIf
	
	If KeyDown(44)
		TurnEntity camera,+2,0,0
		TurnEntity Gun,+2,0,0
	EndIf
	
	If KeyDown(203) TurnEntity player,0,2,0
	If KeyDown(205) TurnEntity player,0,-2,0
	
	If KeyDown(200) MoveEntity player,0,0,sp
	If KeyDown(208) MoveEntity player,0,0,-sp
	
	RotateEntity Gun,EntityPitch(player),0,0
	
	If KeyHit(156)
		PointEntity player,Gun
	EndIf
	
	If MouseDown(1)
		thisbullet.BulletType = New BulletType
		thisbullet\mesh = CopyMesh(bulletMesh)
		RotateEntity thisBullet\mesh,EntityPitch(player,1),EntityYaw(player,1),EntityRoll(player,1)
		;PlaySound GunFire
		PositionEntity thisBullet\Mesh,EntityX(player) - .1,EntityY(player) - .134,EntityZ(player) - .8
		EntityType thisbullet\Mesh,3
	EndIf 

	
	TurnEntity player,0,-MouseXSpeed(),0
	;TurnEntity player,MouseYSpeed(),0,0
	
	UpdateWorld
	RenderWorld
	
	Locate 0,0
	;Print TrisRendered()
	
	DrawImage Sight,GraphicsWidth() / 2,GraphicsHeight() / 2
	
	For biter.BulletType = Each BulletType
		MoveEntity biter\mesh,0,0,1
		If Abs(EntityX(biter\mesh,1)) > 1000
			FreeEntity biter\mesh
			Delete biter
		ElseIf Abs(EntityY(biter\mesh,1)) > 1000
			FreeEntity biter\mesh
			Delete biter
		ElseIf Abs(EntityZ(biter\mesh,1)) > 1000
			FreeEntity biter\mesh
			Delete biter
		EndIf
	Next
	
	For thisEnemy.EnemyType = Each EnemyType
		For thisBullet.BulletType = Each BulletType
			If EntityCollided(thisBullet\mesh,3) = thisEnemy\mesh Then
				FreeEntity thisEnemy\mesh
				FreeEntity thisBullet\mesh
				Delete thisEnemy
				Delete thisBullet
			EndIf
		Next
	Next
	
	Color 0,0,0
	Locate 0,0
	Print EntityDistance(player,Gun)
	
	Flip
Wend

FreeEntity Level
FreeEntity Gun
FreeEntity Camera
FreeEntity Bullet
FreeEntity player
FreeEntity light
FreeImage Sight
FreeSound GunFire
FreeTexture tex
CloseFile Levels
CloseFile Levelfile

For bulletType.BulletType = Each BulletType
	FreeEntity bulletType\mesh
	Delete bulletType
Next

For EnemyType.EnemyType = Each EnemyType
	FreeEntity EnemyType\mesh
	Delete EnemyType
Next

End

Function CreateTree(file$,width#,Height)

tree = CreateMesh()
surf1 = CreateSurface(tree)

v0 = AddVertex(surf1,0,-1.0,1.0,0,0)
v1 = AddVertex(surf1,0,-1.0,-1.0,1,0)
v2 = AddVertex(surf1,0,1.0,-1.0,1,0)
v3 = AddVertex(surf1,0,1.0,1.0,0,1)

tri0 = AddTriangle(surf1,v0,v1,v2)
tri1 = AddTriangle(surf1,v0,v2,v3)

v4 = AddVertex(surf1,-1.0,0,-1.0,0,0)
v5 = AddVertex(surf1,1.0,0,-1.0,1,0)
v6 = AddVertex(surf1,1.0,0,1.0,1,1)
v7 = AddVertex(surf1,-1.0,0,1.0,0,1) 

tri2 = AddTriangle(surf1,v4,v5,v6)
tri3 = AddTriangle(surf1,v4,v6,v7)

UpdateNormals tree

tex = LoadBrush(file$,4) ; using masked flag (4)

RotateTexture tex,180
PaintMesh tree,tex

EntityFX tree,16 ; make visible from both sides

Return tree

End Function

Function LoadSkyBox( file$ )
	m=CreateMesh()
	;front face
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
	AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;right face
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
	AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;back face
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
	AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;left face
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
	AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;top face
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
	AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;bottom face	
	b=CreateBrush(0,0,0)
	s=CreateSurface( m,b )
	AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
	AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	ScaleMesh m,100,100,100
	FlipMesh m
	EntityFX m,1
	Return m
End Function

Function Mid3dHandle(mesh)
 ux#=-100000
 uy#=-100000
 uz#=-100000
 lx#=100000
 ly#=100000
 lz#=100000
 cs=CountSurfaces(mesh)
 For s=1 To cs
  surf=GetSurface(mesh,s)
  cv=CountVertices(surf)-1
  For v=0 To cv
   vx#=VertexX#(surf,v)
   vy#=VertexY#(surf,v)
   vz#=VertexZ#(surf,v)
   If vx#<lx# Then lx#=vx#
   If vx#>ux# Then ux#=vx#
   If vy#<ly# Then ly#=vy#
   If vy#>uy# Then uy#=vy#
   If vz#<lz# Then lz#=vz#
   If vz#>uz# Then uz#=vz#
  Next
 Next
 ax#=(ux#+lx#)/2
 ay#=(uy#+ly#)/2
 az#=(uz#+lz#)/2
 PositionMesh mesh,-ax#,-ay#,-az#
End Function

The error occurs on this line:
If EntityCollided(thisBullet\mesh,3) = thisEnemy\mesh Then