Enemy A.I. Code???

Blitz3D Forums/Blitz3D Programming/Enemy A.I. Code???

this is a clip from the one i wrote, its messy, but they dudes wont interact with the rest of the world if i have it different

have a look, it may help you come up with something better


For e.tEnemies = Each tEnemies
	
		
		
		tx# = EntityX#(e\mass)
		ty# = EntityY#(e\mass)
		tz# = EntityZ#(e\mass)

		PositionEntity e\body, tx#, ty#, tz#
		PositionEntity e\pivot, tx#, ty#, tz#
		
		
		
		ryaw# = EntityYaw#(e\pivot, 0)
		cyaw# = EntityYaw#(e\body, 0)
		
		cr# = CurveValue#(cyaw#, ryaw#, 15)
		
		RotateEntity e\body, 0, cr#, 0
		
		
		If Not Animating(e\model) Then 
			Animate(e\model,1,.23,enemy_mode_walk)
		Else
			If e\mode = 1
				e\woddle = (e\woddle + .12) Mod AnimLength(e\model)
				at# = AnimTime(e\model)
				PositionEntity e\model, 0, -3 + (Cos(at * 110)/ 2), 0
				;TurnEntity e\model, (Cos(at * 110)/ 2),0,0
				RotateEntity e\model, (Cos(at * 110)*2),EntityYaw(e\model),-(Cos(e\woddle * 110)*3)
			EndIf
		End If
		
		If e\currentnode=0 Then  e\mode = 3
		;If e\timer>0 Then e\timer = e\timer - 1
		If e\mode = 3
		
			
			If e\direction = 0 Then	; going from 1 ... 2... 3...
				oldnode = e\currentnode
				nextnode = e\currentnode + 1
			Else; going to 3... 2... 1...
				nextnode = e\currentnode - 1
			EndIf
			
			vring = 0
			
			e\newnode = e\newnode + 1
			veld% = 1
			For n.tNodes = Each tNodes
				If e\nodegroup$ = n\nodegroup$
					vring = vring + 1
					If n\nodeid = oldnode Then
						If (n\choose$ <> "") And (e\newnode>2) ; Bot can choose
							e\newnode = 0
							If Int(Rnd(1))=1 Then
								veld% = 0	; Not to set the next node!
								
								npath$ = n\choose$
								npathid$ = n\choosepath$
								For jn.tNodes = Each tNodes
									If jn\nodegroup$ = npath$
										If jn\nodeid = Int(npathid$)
											e\targetnode = jn\pivot
											e\currentnode = jn\nodeid
											e\nodegroup$ = npath$
										End If
									End If
								Next
							End If
							
						End If
					EndIf
					If veld% = 1 Then
						If n\nodeid = nextnode Then
							e\targetnode = n\pivot
							e\currentnode = n\nodeid
						End If
					EndIf
				EndIf
			
			Next
			If veld% = 1 Then
				If (nextnode > vring)
					e\direction = 1
				ElseIf (nextnode < 1) 
					e\direction = 0
				EndIf
			EndIf
			e\mode = 1
		End If
		
		If e\mode = 1 Then
			
			If e\targetnode<>0 Then
				PointEntity e\pivot, e\targetnode
				
				
				MoveEntity e\mass,0,0,.24
				
				ryaw# = EntityYaw(e\pivot)
				RotateEntity e\mass, 0, ryaw#, 0
				d# = EntityDistance(e\targetnode,e\mass)
				If d#<4 Then ; hes reached his target
					e\mode = 3
					e\timer = 60
					
				End If
			EndIf
			
		EndIf
		
		
		
		e\y_vel#=(ty-e\PlayerY)
		e\PlayerY=ty
		e\y_vel=e\y_vel-.07
		TranslateEntity e\mass,0,e\y_vel,0
		

		
	Next