shooting wrong direction

Blitz3D Forums/Blitz3D Beginners Area/shooting wrong direction

I would like to say that FIRST Ross C, Ross, and eBusiness have been a fantastic help. Neuromancer and Wolron as well!!! Muchos Kudos to all...

I have integrated Ross C's aroow fire routine into my game... But there is a slight problem. The arrows fire true... but they fire directly down. not out!
; Gnash v1.alpha
; Ralph Dunn
; June 10, 2004
; starting to come together
; -------------------

Graphics3D 800,600
SetBuffer BackBuffer()
SeedRnd (MilliSecs())

campiv = CreatePivot()
camera = CreateCamera(campiv)
floorpivot=CreatePivot()
PositionEntity camera,600,440,2000
CameraRange camera,.1,1500
CameraFogRange camera,10,1300
EntityRadius camera,6,49
EntityType camera,1
Global windnoise
; --------------

HidePointer

;setup lighting
light=CreateLight()
RotateEntity light,45,45,0
AmbientLight 48,48,48    ; was 32,32,32

; Load Sound for backmusic
windnoise=LoadSound("media/windlow.ogg")
LoopSound windnoise
wind=LoadSound("media/windy1.ogg")
LoopSound wind

terr=LoadTerrain("textures\hmap_1024.bmp")
ScaleEntity terr,25,400,25
PositionEntity terr,-20*512,0,-20*512
EntityFX terr,1
EntityType terr,2	;Load terrain

;apply textures To terrain	
tex1=LoadTexture( "textures\coolgrass1.bmp",1 )
ScaleTexture tex1,10,10
tex2=LoadTexture( "textures\lmap_256.bmp" ) ; i like a nice set of colors
ScaleTexture tex2,TerrainSize(terr),TerrainSize(terr)
EntityTexture terr,tex1,0,0
EntityTexture terr,tex2,0,1

; Draw the Aimpoint where the TEXT goes or you never see it
aim=LoadImage("textures\aimpoint2.png")
health=LoadImage("textures\healthbar.png")

;create cloud planes
cloud=LoadTexture( "textures\cloud_2.bmp",3)
ScaleTexture cloud,1000,1000
p=CreatePlane()
EntityTexture p,cloud
EntityFX p,1
PositionEntity p,0,900,0
p=CopyEntity( p )
RotateEntity p,0,0,180

;create water plane
tex=LoadTexture( "textures\wawa1.bmp",3 )
ScaleTexture tex,128,128
p=CreatePlane()
EntityTexture p,tex
EntityBlend p,1
EntityAlpha p,.75
PositionEntity p,0,41,0
EntityFX p,1
;EntityType p,2

;create ground plane in case someone goes off map
tex=LoadTexture( "textures\mossyground1.jpg",3 )
ScaleTexture tex,128,128
p2=CreatePlane()
EntityTexture p2,tex
EntityBlend p2,1
EntityAlpha p2,.75
PositionEntity p2,0,1,0
EntityFX p2,1
EntityType p2,2

;cool castle
castle=LoadMesh( "textures\tower1.b3d" )
PositionEntity castle,418,125,809
EntityFX castle,0
EntityType castle,2
UpdateNormals castle
TurnEntity castle,0,164,0
ScaleEntity castle,18,30,18

; PORTAL
portal=LoadMesh( "textures\0portal.b3d" )
PositionEntity portal,725,250,1957
EntityFX portal,0
EntityType portal,2
UpdateNormals portal
TurnEntity portal,0,0,0
ScaleEntity portal,25,25,25
EntityPickMode portal,1

;lil dingy
boat=LoadMesh( "textures\smallboat.b3d" )
PositionEntity boat,74,3,-267
EntityFX boat,0
EntityType boat,2
UpdateNormals boat
TurnEntity boat,0,0,0
ScaleEntity boat,2,2,2

;ladder
ladder=LoadMesh( "textures\ladder_1.b3d" )
PositionEntity ladder,570,251,2022
EntityFX ladder,0
EntityType ladder,2	
EntityPickMode ladder,3
UpdateNormals ladder
TurnEntity ladder,0,180,0
ScaleEntity ladder,7,7,7

;DOOR animated
Adoor=LoadAnimMesh( "textures\adoor1.b3d" )
PositionEntity Adoor,857,252,2194
EntityFX Adoor,0
EntityType Adoor,2	
EntityPickMode Adoor,2
UpdateNormals Adoor
TurnEntity Adoor,0,0,0
RotateEntity Adoor,90,0,0
ScaleEntity Adoor,6,8,7

; Load Xbow

Global gun=LoadAnimMesh("textures\xbow1.b3d",camera)
ScaleEntity gun,.8,.8,.8
RotateEntity gun,90,0,180
PositionEntity gun,-.25,-4,7

; load xbow ammo
Global bolt=LoadMesh("textures\bolt1.b3d",gun)
PositionEntity bolt,.15,-4.75,9
HideEntity bolt

; create a type
Type bullet
	Field entity
	Field speed#
	Field range
	Field pivot
End Type

; HEALTHwidget
health=LoadMesh("textures\healthbar2.b3d",camera)
ScaleEntity health,.5,.5,.5
PositionEntity health,-4,-2,4


CameraFogColor camera, 2, 2, 2
CameraFogMode camera,1
Collisions 1,2,2,3
Collisions 1,3,2,3
Collisions 3,2,2,2

jumpflag=False

j#=1
PlaySound windnoise
healthy#=1
current = MilliSecs()

Global gun_timer=MilliSecs() ; timer to track the difference in millisecs
Global gun_time=750; time in milliseconds that the gun will fire

While Not KeyDown( 1 )
x#=EntityX(camera)
y#=EntityY(camera)
z#=EntityZ(camera)
; ---- HOW TO USE GRAVITY

y#=y#-8

PositionEntity camera,x#,y#,z#

  mxs#=MouseXSpeed()/4
  mys#=MouseYSpeed()/4
  xa#=(xa#-mxs#)Mod 360
  ya#=(ya#+mys#)Mod 360 
;limit up and down looking
	If ya#>=90 Then ya#=90 
    If ya#<= -89 Then ya#= -89

  MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
  RotateEntity camera,ya#,xa#,0
    
; -------------------------------------------------------------------------------------

If KeyDown (209)=True Then healthy#=healthy#-.1: ScaleEntity health,healthy#,.5,.5
If KeyDown (201)=True Then healthy#=healthy#+.1: ScaleEntity health,healthy#,.5,.5
If KeyDown( 205 )=True Then RotateEntity camera,0,-5,0
If KeyDown( 203 )=True Then RotateEntity camera,0,+5,0
If KeyDown( 208 )=True Then MoveEntity camera,0,0,-5
If KeyDown( 200 )=True Then MoveEntity camera,0,0,+5

; =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Bullet code by Ross C

If MouseDown(1) And MilliSecs()>gun_time+gun_timer Then
		Animate gun,3
		gun_timer=MilliSecs() ; reset the timer
		create_bullet(gun); call function to create a bullet. Pass across the gun entity to the function
						  ; so the bullet can come from the guns position
	End If
update_bullet()
	
; =--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-==-=-=-=-=-=-=

If MouseDown(2) = True Then entity = EntityPick(camera,190)
Select entity
			Case Adoor Animate Adoor,3 : EntityType Adoor,0
			Default hh=0
			End Select
			EntityType Adoor,2
FlushMouse

If KeyHit( 57 )=True And jumpflag = False
	jumpflag=True
	oldtime=MilliSecs()
EndIf
		If jumpflag = True Then TranslateEntity camera,+0,+9,+0
		 	If MilliSecs()>oldtime+1250 Then jumpflag=False

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


UpdateWorld()

RenderWorld()

Text 0,0,"Use cursor keys to move about the terrain [ESC] to quit"
Text 0,10,"Jumpflag:"+jumpflag
Text 0,30,"X: "+x#
Text 100,30,"Y: "+y#
Text 200,30,"Z: "+z#

Text 0,50,"Entity: "+PickedEntity()
Text 0,60,"M1"+ MouseHit(1)
Text 0,70,"M2"+MouseHit(2)
DrawImage aim,384,294
Text 0,90,"showme:"+current
heal#=healthy#*100
Text 0,530,"Health: "+heal#


Flip


Wend

End

Function create_bullet(gun_entity)
	b.bullet=New bullet
	
		temp_x=EntityX(gun_entity,True)
		temp_y=EntityY(gun_entity,True)
		temp_z=EntityZ(gun_entity,True)
		
		b\entity=CopyEntity(bolt) ; copy the main bullet entity , into the type object
		b\pivot=CreatePivot()
		
		PositionEntity b\entity,temp_x,temp_y,temp_z
		RotateEntity b\entity,EntityPitch(gun_entity,True),EntityYaw(gun_entity,True),0
		PositionEntity b\pivot,temp_x,temp_y,temp_z
		
		b\range=40 ; the range of the bullets
		b\speed=1 ; the speed of the bullets
End Function

Function update_bullet()
	For b.bullet = Each bullet
		MoveEntity b\entity,0,0,b\speed
		If EntityDistance#(b\entity,b\pivot) > b\range Then
			FreeEntity b\entity
			FreeEntity b\pivot
			Delete b.bullet
		End If
	Next
End Function
So I am a bit confused... the only thing I can think of is that somehow I am reading this wrong. Z should be OUT right??? Y is up/down and X is left/right???

Thanks, it's nice to know that my effort in helping people works (at least some of it does). About your problem, when you load the gun entity you point it at the ground, afterwards you don't touch it, I guess it should move around and rotate with the camera.

Oh, and one more thing, the gravity, for true gravity, you need a speed variable that you increase by a certain amount every loop, then if the player hit the floor, reset the variable to 0.

I've viewed the model. It is actually upside down in the modelling program ;)

If your rotating something so it's facing the right way, use RotateMesh. This will move all the vertices in the model. Then use RotateEntity to turn it when needed :)

First thing is to check to see if the bolt is rotated the correct way also.

What i think is happening is this. You load in the gun, then rotate it. You load in the bolt. Now, because there parented, the bolt will rotate also, cause it's Z axis to be facing down. That's probably why it's shooting downwards.

If you do:

Global gun=LoadAnimMesh("textures\xbow1.b3d",camera)
ScaleEntity gun,.8,.8,.8
RotateMesh gun,90,0,180 ; USED ROTATE MESH INSTEAD <<
PositionEntity gun,-.25,-4,7


It should work fine. Children take on their parents attributes i'm sure, that's why you bolts are being fired downwards ;)

You are right... I loaded it in to milkshape and the gun was facing DOWN from the mesh plane that Milkshape has... I reoriented it and all works well... rotatemesh... that is a new one one me... I am gonna spend a week just reading the command lists I suppose.

Wish there was a book.

Thanks for pointing out my silliness!

-RZ