Page 1 of 1

tanks looping forever

Posted: Tue Apr 26, 2005 2:13 pm
by LtNeil
I have two enemy tanks which i would like to see going round and round forever(well until i shoot them with my tank).

I have put down my info_vehiclepoint (tank1_path) which links to t1 info_vehiclepoint t2 ...etc etc but when it reaches the start again(tank1_path) my tanks stop.How do i get them to keep on going round and round?

heres my tank script

thread go_tanks

level waitTill prespawn

level.fastspeed = 300
level.slowspeed = 160

$playertank waitthread global/vehicles_thinkers.scr::players_tank
$playertank vehiclespeed level.slowspeed
level.currently_fast = 0

exec global/ambient.scr m5l2a

level waitTill spawn

speedup:
if (level.currently_fast == 1)
end

for (local.speed = level.slowspeed; local.speed <= level.fastspeed; local.speed += 1)
{
$playertank vehiclespeed local.speed
waitframe
}

level.currently_fast = 1
end

slowdown:
if (level.currently_fast != 1)
end

for (local.speed = level.fastspeed; local.speed >= level.slowspeed; local.speed -= 1)
{
$playertank vehiclespeed local.speed
waitframe
}

level.currently_fast = 0
end

drive_path local.path local.speed local.remove:
self.driving = 1
self drive local.path local.speed 30 200 level.lookahead
self waitTill drive
if (self)
{
self stop
self.driving = 0
if (local.remove == "remove")
self remove
}
end

cant_go_that_way:
//called by the BSP
if( level.drive == NIL || level.drive.size == 0)
{
level.drive[0] = dfr_drive_01h_2
level.drive[1] = dfr_drive_02h_1
level.drive[2] = dfr_drive_04h_1
level.drive[3] = dfr_drive_05h_1
level.drive[4] = dfr_drive_07h_2
level.drive[5] = dfr_drive_08h_1
level.drive[6] = dfr_drive_09h_1
level.drive[7] = dfr_drive_10h_2

if (level.prev_drive != NIL)
{
for (local.i = 0; local.i < level.drive.size; local.i++)
{
if (level.drive[local.i] == level.prev_drive)
{
println "before1: " level.drive.size
level.drive[local.i] = NIL
println "after1: " level.drive.size
break
}
}
}
}

level.prev_drive = thread get_random_entry level.drive
//level.playertank playsound level.prev_drive
$player playsound level.prev_drive
end

get_random_entry local.entries:
local.n = randomint (local.entries.size)
//println "XXX:" local.n
local.entry = 0
get_random_entry_loop:
local.result = local.entries[local.entry]
if (local.result == NIL)
{
local.entry++
goto get_random_entry_loop
}
if (local.n)
{
local.n--
local.entry++
goto get_random_entry_loop
}

println "result: " local.result

local.entries[local.entry] = NIL
end local.result

go_tanks:
level.lookahead = 256
level.enemytankspeed = 200
level.sightdistance = 2048
level.playertank=playertank

$tank1 thread TankGo $tank1_path level.enemytankspeed empty_panzer_desert
$tank2 thread TankGo $tank2_path level.enemytankspeed empty_panzer_desert

TankGo local.path local.speed local.type:
self immune aagun
self thread global/vehicles_thinkers.scr::enemy_tank_think 0 local.type
self thread drive_path local.path local.speed

(ps.) ive copied most of it from a breathrough script and chopped and changed bits but it all works ok(for me that is,lol)

Posted: Tue Apr 26, 2005 5:46 pm
by Rookie One.pl
Make sure the last node of the path targets the first one.

Posted: Wed Apr 27, 2005 11:33 am
by bdbodger
once you get this part done properly with a thread name for example for the thread then you can loop it as long as the tank has not been destroyed
after the self waittill drive line
level.currently_fast = 0
end

drive_path local.path local.speed local.remove:
self.driving = 1
self drive local.path local.speed 30 200 level.lookahead
self waitTill drive
if (self)
{
self stop
self.driving = 0
if (local.remove == "remove")
self remove
}
end