Drivable Vehicles script help

Post your scripting questions / solutions here

Moderator: Moderators

Post Reply
kjmarket
Private
Posts: 3
Joined: Sat May 01, 2004 1:20 am

Drivable Vehicles script help

Post by kjmarket »

Ok, over at TMT Forums, someone posted in a thread called "For those whow anted drivable vehicles and usuable flak88" a scriptt hatw orks..sort of. Heres the script.

Code: Select all

// Vehicle script for mohaa
// SCRIPTING + VEHICLES: Duncan Weir (Scorpio)
// August 2002
// (c) 2002 Duncan Weir
//
// Please give credit to myself if you use this script :-)
//

spawnvehicles:	
	thread debugtext "THREAD spawntanks"

$alliedtank waitthread global/vehicles.scr::prepvehicle "tank" "allies" 1 1
$axistank waitthread global/vehicles.scr::prepvehicle "tank" "axis" 1 1
$alliedhtruck waitthread global/vehicles.scr::prepvehicle "halftrack" "allies" 1 1
	thread debugtext "END THREAD spawntanks"
end


prepvehicle local.type local.team local.bomb local.capture:
	thread debugtext ("THREAD prepvehicle = " + self + ", is a " + local.type + ", Team that owns this vehicle = " + local.team)

	if (local.type!="tank" && local.type!="jeep" && local.type!="truck" && local.type !="halftrack")
	{
		thread debugtext ("ERROR: vehicle type is not valid")
		end
	}
	else
		self.type = local.type // store the vehicle type

	if (local.team!="allies" && local.team!="axis")
	{
		thread debugtext ("ERROR: team is not valid")
		end
	}
	else
		self.team = local.team // store the team who owns this vehicle

	

	if (self.team == "allies")
		self.enemy = "axis"
	else
		self.enemy = "allies" // store the team that is this vehicle's enemy




	self.gun = self queryturretslotentity 0 // has it got a gun ?
	if (self.gun)
	{
		self.gun rendereffects "-shadow" // turn off shadows, coz it slows down the fps
		self.gun.targetname = self + "_gun"
	}

	self.gun2 = self queryturretslotentity 1 // has it got a 2nd gun ?
	if (self.gun2)
	{
		self.gun2 rendereffects "-shadow" // turn off shadows, coz it slows down the fps
		self.gun.targetname = self + "_gun2"
	}

	// do vehicle type specific setup
	if (self.type == "tank")
	{
		self.speed = 250   // set the start speed
		self.starthealth = 2000 // give it some health

		self.damage3 = ( -40 0 130)
		self.damage2 = ( 140 50 60)
		self.damage1 = ( -230 -50 60)

		

		self.damagedmodel = "vehicles/kingtank_d.tik"

	//	self vehicleanim remove_surfaces
	}
	else if (self.type == "jeep")
	{
		self.speed = 400   // set the start speed
		self.starthealth = 1000 // give it some health

		self.damage3 = ( -20 0 20)
		self.damage2 = ( 70 -20 20)
		self.damage1 = ( -70 20 20)

		

		self.damagedmodel = "vehicles/allied_jeep.tik"

		self unlock
		self unlockmovement
		self setPlayerUsable 1

		self.gun unlock
		self.gun SetPlayerUsable 1
	}
	else if (self.type == "truck")
	{
		self.speed = 700  // set the start speed
		self.starthealth = 10000 // give it some health

		self.damage3 = ( -40 0 80)
		self.damage2 = ( 120 -30 60)
		self.damage1 = ( -190 30 60)

		

		self.damagedmodel = "vehicles/opeltruck_d.tik"

		self anim idenolights // turn off the headlights
		self anim stop_wheels // stop the wheels rotating
	}
	else if (self.type == "halftrack")
	{
		self.speed = 400   // set the start speed
		self.starthealth = 1500 // give it some health

		self.damage3 = ( -20 0 80)
		self.damage2 = ( 120 40 60)
		self.damage1 = ( -120 -40 60)

		

		self.damagedmodel = "vehicles/axis_m3.tik"

		self unlock
		self unlockmovement
		self setPlayerUsable 1

		self.gun unlock
		self.gun SetPlayerUsable 1
	}

	self.health = self.starthealth // set the health

	self.maxspeed = self.speed // set the current maximum speed
	self vehiclespeed self.speed // update the vehicle model

	self removeondeath 0 // if the vehicle dies, do NOT remove the model automatically

	self.inuse = 0 // set the vehicle to unused	
	self.guninuse = 0 // set the vehicle gun to unused

	self rendereffects "-shadow" // we dont want shadows, coz it slows down the fps

	self takedamage // make the vehicle takedamage :)
	
	self notsolid

	if (self.target) // has it got a target ?
	{
		self.target notsolid
		self.target hide
		self.collisionent = self.target // use the target as the collision entity
		self.collisionent hide
	}

	self removeimmune bash // remove immunity to weapons
	self removeimmune bullet
	self removeimmune fast_bullet
	self removeimmune shotgun
	self removeimmune grenade
	self removeimmune rocket
	self removeimmune explosion
	self removeimmune crush
	self removeimmune falling
	self removeimmune vehicle

	// setup params for player using the vehicle
	self.usefov = 120
	self.usedistance = 170

	

	while (1) // wait for a player
	{
		thread debugtext ("prepvehicle: " + self + ", wait for a player to arrive")

		local.player = parm.other
		if (local.player!=NULL)
			break

		wait 1
	}

	thread debugtext ("prepvehicle: " + self + ", player has arrived")

	

	thread vehiclepain // start up the pain monitoring thread

	thread waitfordeath // start up the death monitoring thread

	thread waitforplayertogetin // start up the player wait thread
//	thread waitforplayertogetingun // start up the player gun wait thread

	thread debugtext ("END THREAD prepvehicle = " + self + ", is a " + local.type + ", Team that owns this vehicle = " + self.team)
end


waitfordeath:
	thread debugtext ("THREAD waitfordeath: for vehicle = " + self)

	self waittill death

	self.inuse = 1 // set the vehicle so it can't be used

	thread vehicleexplode

	thread debugtext ("ENDTHREAD waitfordeath: for vehicle = " + self)
end

vehicleexplode:
	thread debugtext ("THREAD vehicleexplode: for vehicle = " + self + ", type = " + self.type)

	self stop
	self.destroyed = 1

	local.origin = self.origin
	local.angles = self.angles

	thread debugtext ("  Vehicle location @ " + local.origin)
	thread debugtext ("  Vehicle angles = " + local.angles)

	self.gun2 = self QueryTurretSlotEntity 1
	if (self.gun2)
	{
		local.po = self.gun2.origin
		local.po[2] = local.po[2] + 50

		local.t2exp = spawn script_origin
		local.t2exp.origin = local.po
		local.t2exp.angles = local.angles

		thread debugtext ("  Add a turret2 explosion @ " + local.t2exp.origin)

		local.t2exp thread spawn_fx "fx/fx_tank_explosion.tik" 3
		local.t2exp playsound explode_tank
		radiusdamage local.t2exp.origin 200 200

		self.gun2 unlock
		self DetachTurretSlot 1 self.gun2.origin

		local.po = self.gun2.origin
		local.po[2] = local.po[2] + 0

		thread debugtext "  Add some fire to turret 2"

		local.fire2 = spawn script_origin
		local.fire2.origin = local.po
		local.fire2.angles = local.angles

		thread debugtext ("  Add some fire @ " + local.fire2.origin)

		local.fire2 thread spawn_fx "models/emitters/fire.tik"

		wait 1
		thread debugtext ("  remove turret 2 @ " + self.gun2.origin)
		self.gun2 remove
	
		wait 0.5
	}

	self.gun = self QueryTurretSlotEntity 0
	if (self.gun)
	{
		local.po = self.gun.origin
		local.po[2] = local.po[2] + 100

		local.exp = spawn script_origin
		local.exp.origin = local.po
		local.exp.angles = local.angles

		thread debugtext ("  Add a turret explosion @ " + local.exp.origin)

		local.exp thread spawn_fx "fx/fx_tank_explosion.tik" 5
		local.exp playsound explode_tank
		radiusdamage local.exp.origin 500 200

		self.gun unlock

		self DetachTurretSlot 0 self.gun.origin

		local.po = self.gun.origin
		local.po[2] = local.po[2] + 0

		thread debugtext "  Add some fire to turret 1"

		local.fire = spawn script_origin
		local.fire.origin = local.po
		local.fire.angles = local.angles

		thread debugtext ("  Add some fire @ " + local.fire.origin)

		local.fire thread spawn_fx "models/emitters/fire.tik"

		wait 1
		thread debugtext ("remove turret 1 @ " + self.gun.origin)
		self.gun remove
	}

	local.po = local.origin
	local.po[2] = local.po[2] + 250

	local.exp2 = spawn script_origin
	local.exp2.origin = local.origin
	local.exp2.angles = local.angles

	thread debugtext ("Add a main model explosion @ " + local.exp2.origin)

	local.exp2 thread spawn_fx "fx/wall_exploder.tik" 5

	local.exp2 playsound explode_tank
	radiusdamage local.exp2.origin 1000 200

	iprintlnbold (self + " has been destroyed.")

	local.damagedmodel = self.damagedmodel

	thread debugtext ("remove the model @ " + self.origin)
	self remove
	self.tankinuse = 1

	thread debugtext ("do a large screen jitter")
	thread jitter_large 0

	local.dam = spawn script_origin
	local.dam.origin = local.origin
	local.dam.angles = local.angles

	thread debugtext ("Spawn damaged model @ " + local.dam.origin)
	local.dam thread spawn_damaged local.damagedmodel

	wait 5

	local.po = local.origin
	local.po[2] = local.po[2] + 200

	local.col = spawn script_origin
	local.col.origin = local.po
	local.col.angles = local.angles

	thread debugtext ("Add a mushroom column and big bang @ " + local.col.origin)

	local.col thread spawn_fx "fx/gas_mushroom_column.tik" 10

	local.col playsound explode_tank
	radiusdamage local.col.origin 500 200

	wait 5
	thread debugtext "Add a mushroom cloud"

	local.po = local.origin
	local.po[2] = local.po[2] + 750

	local.mush = spawn script_origin
	local.mush.origin = local.po
	local.mush.angles = local.angles

	thread debugtext ("Add a mushroom cloud @ " + local.mush.origin)

	local.mush thread spawn_fx "fx/gas_mushroom_cloud.tik" 20 5

	thread debugtext ("ENDTHREAD vehicleexplode: for vehicle = " + self + ", type = " + self.type)
end

waitforplayertogetin:
	thread debugtext ("THREAD waitforplayertogetin: for vehicle = " + self + ", team that owns this vehicle = " + self.team)
	
	while (IsAlive self && self.inuse == 1) // wait till vehicle not being used
	{
		if (self.health <= 0)
			end // stop this thread, vehicle is dead

		waitframe
	}

	local.player = parm.other

	while (IsAlive local.player && IsAlive self && self.health>0 && self.inuse == 0)
	{
		local.player = parm.other

		// find out how far player is from vehicle
		local.distance = vector_length (local.player.origin - self.origin)

		local.ok = 1		

		if (local.player.useheld == 1 && self.gun)
		{
			// find out how far player is from vehicle's gun
			local.gundistance = vector_length (local.player.origin - self.gun.origin)

			local.distance = vector_length(self.gun.origin - local.player.origin)
			
			if (local.gundistance < 80)
			{
				thread debugtext ("getin: player can't use vehicle, only " + local.distance + " units away from " + self.gun + " on vehicle " + self)
				local.ok = 0
			}
		}

		if ( local.ok == 1 && local.player.useheld == 1) // has player pressed the use key ?
		{
			thread debugtext (self + ", waitforplayertogetin: player held down use key")

			if ( local.distance < self.usedistance ) // is player near enough
			{
				thread debugtext (self + ", waitforplayertogetin: Player within use distance of " + self + "'s gun = " + self.gun + " :), distance = " + local.distance + ", needs to be <= " + self.usedistance)

				self.inuse = 1 // set vehicle so it's inuse, this stops other players getting control of it
	
				while (local.player.useheld == 1) // wait for player to release the use key
					waitframe

				self attachdriverslot 0 local.player // attach the player to the driver position

				if (self.type == "tank")
					local.player hide // hide the player, he don't look good in a tank
				else if (self.type == "jeep")
					local.player anim jeep_idle_drive

				thread vehicle_health_hud

				if (self.capture == 1 && local.player.dmteam == self.enemy) // is he an enemy ?
					thread capturevehicle local.player.dmteam // yes, so lets start the capture thread

				thread vehicle_view
				waitthread waitforplayertogetout // start the thread to wait for player getout

				goto waitforplayertogetin // go back to start, coz player has left tank
			}
			else
				thread debugtext (self + " waitforplayergetin: Player not near enough to " + self + " !, distance = " + local.distance + ", needs to be <= " + self.usedistance)
		}

		waitframe
	}

	if (Isalive local.player && self!=NULL && IsAlive self) // if player is alive and self is alive go wait for player
		goto waitforplayertogetin

	thread debugtext ("ENDTHREAD waitforplayertogetin: for vehicle = " + self + ", team that owns this vehicle = " + self.team)
end

waitforplayertogetingun:
	thread debugtext ("THREAD waitforplayertogetingun: for vehicle = " + self + ", team that owns this vehicle = " + self.team)

	if (self.gun==NULL)
	{
		thread debugtext ("vehicle " + self + " does not have a gun !")
		thread debugtext ("ENDTHREAD waitforplayertogetingun: for vehicle = " + self + ", team that owns this vehicle = " + self.team)
		end
	}
	
	while (IsAlive self && self.guninuse == 1) // wait till vehicle not being used
	{
		if (self.health <= 0)
			end // stop this thread, vehicle is dead

		waitframe
	}

	local.player = parm.other

	while (IsAlive local.player && IsAlive self && self.health>0 && self.guninuse == 0)
	{
		local.player = parm.other

		// find out how far player is from vehicle's gun
		local.distance = vector_length (local.player.origin - self.gun.origin)

		if ( local.player.useheld == 1) // has player pressed the use key ?
		{
			thread debugtext (self + ", waitforplayertogetingun: player held down use key")

			if ( local.distance < self.usedistance ) // is player near enough
			{
				thread debugtext (self + ", waitforplayertogetingun: Player within use distance of " + self + "'s gun = " + self.gun + " :), distance = " + local.distance + ", needs to be <= " + self.usedistance)

				self.guninuse = 1 // set vehicle so it's inuse, this stops other players getting control of it
	
				while (local.player.useheld == 1) // wait for player to release the use key
					waitframe

				self.gun unlock	
				self attachturretslot 0 local.player // attach the player to the gun turret position
				self.gun lock

				waitthread waitforplayertogetoutgun // start the thread to wait for player getoutofgun

				goto waitforplayertogetingun // go back to start, coz player has left tank
			}
			else
				thread debugtext (self + " waitforplayergetin: Player not near enough to " + self + " !, distance = " + local.distance + ", needs to be <= " + self.usedistance)
		}

		waitframe
	}

	if (Isalive local.player && self!=NULL && IsAlive self) // if player is alive and self is alive go wait for player
		goto waitforplayertogetingun

	thread debugtext ("ENDTHREAD waitforplayertogetingun: for vehicle = " + self + ", team that owns this vehicle = " + self.team)
end

vehicle_view:
	thread debugtext ("THREAD: vehicle_view: self = " + self)

	if (self.type=="tank")
	{
		thread debugtext ("Don't need to lock view for tanks !")
		thread debugtext ("ENDTHREAD: vehicle_view: self = " + self)
		end
	}

	local.player = parm.other

	while (isAlive local.player && isAlive self && self.inuse == 1)
	{
		local.player.viewangles = self.angles
		waitframe
	}

	thread debugtext ("ENDTHREAD: vehicle_view: self = " + self)
end

vehicle_health_hud:
	thread debugtext ("THREAD: vehicle_health_hud: = " + self + " for team = " + self.team)

	level.subtitleX = 100
	level.subtitleY1 = 90
	level.subtitleY2 = 70
	level.subtitleY3 = 50

	local.oldhealth = self.health + 1
	local.oldspeed = self.maxspeed + 1

	while (IsAlive self)
	{
		local.player = parm.other

		if (local.player.dmteam == self.team)
		{
			local.string = ""

			/*
			if (local.player.useheld == 1) // check if player pressed use, then display vehicle stats
			{
				thread debugtext ("hud: player has pressed use, while i'm processing " + self)

				local.distance = vector_length(self.origin - local.player.origin)
				thread debugtext ("hud: player is " + local.distance + " units away from " + self)

				local.distance = vector_length(self.gun.origin - local.player.origin)
				thread debugtext ("hud: player is " + local.distance + " units away from " + self.gun)

				if (local.distance < 10)
				{
					local.oldhealth = self.health + 1
					local.oldspeed = self.maxspeed + 1

					locprint level.subtitleX level.subtitleY1 ( "Commander asked for report on " + self)
					local.string = local.string + ( "Commander asked for report on " + self)
					local.string = local.string + "\n"
				}
			}
			*/

			if (local.oldhealth != self.health)
			{
				thread debugtext ("hud: team should be = " + self.team + ", and is = " + local.player.dmteam + " health is " + self.health)
	
				if (self.health>0)
					local.damage = 100.0 - ( (self.health/self.starthealth) * 100.0 )
				else
					local.damage = 100.0

				locprint level.subtitleX level.subtitleY2 ( self + " Health = " + self.health + ", Bodywork sustained " + int (local.damage) + " percent damage")
				local.string = local.string + ( self + " Health = " + self.health + ", Bodywork sustained " + int (local.damage) + " percent damage")
				local.string = local.string + "\n"

				local.oldhealth = self.health
			}

			if (local.oldspeed != self.maxspeed)
			{
				thread debugtext ("hud: team should be = " + self.team + ", and is = " + local.player.dmteam + " speed is " + self.maxspeed)
	
				if (self.maxspeed>0)
					local.damage = 100.0 - ( (self.maxspeed/self.speed) * 100.0 )
				else
					local.damage = 100.0

				locprint level.subtitleX level.subtitleY3 ( self + " Max. speed = " + self.maxspeed + ", Engine sustained " + int (local.damage) + " percent damage")
				local.string = local.string + ( self + " Max. speed = " + self.maxspeed + ", Engine sustained " + int (local.damage)  + " percent damage")
				local.string = local.string + "\n"

				local.oldspeed = self.maxspeed
			}

			if (local.string != "")
				locprint level.subtitleX level.subtitleY1 local.string
		}

		waitframe
	}

	thread debugtext ("THREAD: vehicle_health_hud: = " + self + " for team = " + self.team)
end


waitforplayertogetout:
	thread debugtext ("THREAD waitforplayertogetout = " + self)

	local.player = parm.other

	while (IsAlive self && self.health > 0 && self.inuse == 1)
	{
		if (local.player.useheld == 1)
		{
			while (local.player.useheld==1) // wait for player to release use key
				waitframe

			thread getoutofvehicle

			end
		}

		waitframe
	}

	thread debugtext ("ENDTHREAD waitforplayertogetout = " + self)
end

waitforplayertogetoutgun:
	thread debugtext ("THREAD waitforplayertogetoutgun = " + self)

	local.player = parm.other

	while (IsAlive self && self.health > 0 && self.guninuse == 1)
	{
		if (local.player.useheld == 1)
		{
			while (local.player.useheld==1) // wait for player to release use key
				waitframe

			local.distance = vector_length(self.gun.origin - local.player.origin)
			thread debugtext ("getoutgun: player is " + local.distance + " units away from " + self.gun + " on vehicle " + self)

			if (local.distance < 10)
				waitthread getoutofvehiclegun

			end
		}

		waitframe
	}

	thread debugtext ("ENDTHREAD waitforplayertogetoutgun = " + self)
end

getoutofvehicle:
	thread debugtext ("THREAD getoutofvehicle: " + self + ", type = " + self.type)
	
	if (self.type=="tank")
		thread getoutoftank
	else if (self.type=="jeep")
		thread getoutofjeep
	else if (self.type=="truck")
		thread getoutoftruck
	else if (self.type=="halftrack")
		thread getoutofhalftrack

	thread debugtext ("ENDTHREAD getoutofvehicle: " + self + ", type = " + self.type)
end

getoutofvehiclegun:
	thread debugtext ("THREAD getoutofvehiclegun: " + self + ", type = " + self.type + ", gun = " + self.gun)
	
	// tank doesn't have a seperate gun, coz the driver controls it.
	// truck doesn't have a gun

	if (self.type=="jeep")
		waitthread getoutofjeepgun
	else if (self.type=="halftrack")
		waitthread getoutofhalftrackgun

	wait 2

	thread debugtext ("ENDTHREAD getoutofvehiclegun: " + self + ", type = " + self.type + ", gun = " + self.gun)
end

getoutofjeep:
	thread debugtext ("THREAD getoutofjeep = " + self)

	local.player = parm.other

	self fullstop

	self notsolid
//	self.collisionent notsolid

	thread debugtext ("Self origin = " + self.origin)
	thread debugtext ("Player origin = " + local.player.origin)

	local.origin = local.player.origin + (20 20 20)
	local.player.origin = local.origin

	thread debugtext ("after move New Player origin = " + local.player.origin)

	self detachdriverslot 0 local.player

	thread debugtext ("after driver New Player origin = " + local.player.origin)
	
	local.player physics_on

	local.player show

	releaseplayer
	cueplayer

	thread debugtext ("New Player origin = " + local.player.origin)

	self.inuse = 0

	thread debugtext ("ENDTHREAD getoutofjeep = " + self)
end

getoutofjeepgun:
	thread debugtext ("THREAD getoutofjeepgun = " + self)

	local.player = parm.other

	local.origin = local.player.origin + (200 200 200)
	local.player.origin = local.origin

	self DetachTurretSlot 0 local.player
	self.gun remove

	local.player show
//	local.player rendereffects "-dontdraw"
//	local.player rendereffects "+shadow"
//	local.player physics_on

	releaseplayer
	cueplayer

	self spawnturret 0 "vehicles/jeep_30cal.tik"
	self.gun = self queryturretslotentity 0
	if (self.gun)
	{
		self.gun solid
		self.gun rendereffects "-shadow"
		self.gun.targetname = self + "_gun"
	}

	self.guninuse = 0

	thread debugtext ("ENDTHREAD getoutofjeepgun = " + self)
end

getoutofhalftrackgun:
	thread debugtext ("THREAD getoutofhalftrackgun = " + self)

	local.player = parm.other

	local.origin = local.player.origin + (200 200 200)
	local.player.origin = local.origin

	self.gun = self QueryTurretSlotEntity 0
	if (self.gun)
	{
//		self.gun lock
		self DetachTurretSlot 0 self.gun.origin
		self.gun remove
	}

	local.player show
	local.player rendereffects "-dontdraw"
	local.player rendereffects "+shadow"
	local.player physics_on

	cueplayer
	releaseplayer

	self spawnturret 0 "vehicles/axis_m3_mg42.tik"
	self.gun = self queryturretslotentity 0
	if (self.gun)
	{
		self.gun solid
		self.gun rendereffects "-shadow"
		self.gun.targetname = self + "_gun"
	}

	self.guninuse = 0

	thread debugtext ("ENDTHREAD getoutofhalftrackgun = " + self)
end

getoutoftruck:
	thread debugtext ("THREAD getoutoftruck = " + self)

	local.player = parm.other

	self fullstop

	self notsolid
//	self.collisionent notsolid

	thread debugtext ("Self origin = " + self.origin)
	thread debugtext ("Player origin = " + local.player.origin)

	local.origin = local.player.origin + (20 20 20)
	local.player.origin = local.origin

	thread debugtext ("after move New Player origin = " + local.player.origin)

	self detachdriverslot 0 local.player

	thread debugtext ("after driver New Player origin = " + local.player.origin)
	
	local.player physics_on

	local.player show

	releaseplayer
	cueplayer

	thread debugtext ("New Player origin = " + local.player.origin)

	self.inuse = 0

	thread debugtext ("ENDTHREAD getoutoftruck = " + self)
end

getoutofhalftrack:
	thread debugtext ("THREAD getoutofhalftrack = " + self)

	local.player = parm.other

	self fullstop

	self notsolid
//	self.collisionent notsolid

	thread debugtext ("Self origin = " + self.origin)
	thread debugtext ("Player origin = " + local.player.origin)

	local.origin = local.player.origin + (30 30 20)
	local.player.origin = local.origin

	thread debugtext ("after move New Player origin = " + local.player.origin)

	self detachdriverslot 0 local.player

	thread debugtext ("after driver New Player origin = " + local.player.origin)
	
	local.player physics_on

	local.player show

	releaseplayer
	cueplayer

	thread debugtext ("New Player origin = " + local.player.origin)

	self.inuse = 0

	thread debugtext ("ENDTHREAD getoutofhalftrack = " + self)
end

getoutoftank:
	thread debugtext ("THREAD getoutoftank = " + self)

	local.player = parm.other

	self fullstop

	self notsolid
//	self.collisionent notsolid

	thread debugtext ("Self origin = " + self.origin)
	thread debugtext ("Turret origin = " + self.gun.origin)
	thread debugtext ("Player origin = " + local.player.origin)

	local.origin = local.player.origin + (20 20 20)
	local.player.origin = local.origin

	thread debugtext ("after move New Player origin = " + local.player.origin)

	self detachdriverslot 0 local.player

	thread debugtext ("after driver New Player origin = " + local.player.origin)

	if (self.gun)
	{
		self detachturretslot 0 self.gun.origin

		thread debugtext ("after turret New Player origin = " + local.player.origin)
		self.gun remove	
	}
	
//	local.player physics_on

	local.player show

	releaseplayer
	cueplayer

	thread debugtext ("New Player origin = " + local.player.origin)

	self.inuse = 0

	self spawnturret 0 "vehicles/kingcannon.tik"
	self.gun = self queryturretslotentity 0
	if (self.gun)
	{
		self.gun solid
		self.gun rendereffects "-shadow"
	}

	thread debugtext ("END THREAD getoutoftank = " + self)
end

vehiclepain:
	thread debugtext ("THREAD vehiclepain for = " + self)

	local.original_health = self.health
	local.previoushealth = self.health
	local.paintime = level.time

	local.player = parm.other
	
	while (IsAlive self)
	{
		if (self.health < local.previoushealth)
		{
			self playsound damage_tank
			exec global/earthquake.scr .2 4 0 0	
		
			if ( (self.health < (local.previoushealth - 150)) && (level.time > (local.paintime + 5) ) )
			{
				local.paintime = level.time
				local.health_fraction = (self.health / local.original_health)

				thread debugtext ("  TankPain: local.health_fraction: " + local.health_fraction)

				local.newspeed = self.speed * local.health_fraction
				if (local.newspeed<0)
					local.newspeed = 0

				self.maxspeed = local.newspeed
				self vehiclespeed self.maxspeed
				
				if (local.health_fraction >= 0.666)
				{
					self playsound tank_hurt1

					waitthread vehicledamage 1
				}
				else if (local.health_fraction >= 0.333)
				{
					self playsound tank_hurt2

					waitthread vehicledamage 2
				}
				else
				{					
					self playsound tank_hurt3

					waitthread vehicledamage 3
				}
			}
			
			local.previoushealth = self.health
		}

		wait .1
	}

	thread debugtext ("END THREAD vehiclepain for = " + self)
end


end

hudprint local.string local.r local.g local.b:
	thread debugtext ("THREAD hudprint = " + local.string)

	if ((level.hudprint != -1) && (level.hudprint != NULL) && (level.hudprint != NIL) )
		level.hudprint delete

	level.hudprint = local
	local.hudelement = 187

	if (local.r == NIL)
		local.r = 1

	if (local.g == NIL)
		local.g = 1

	if (local.b == NIL)
		local.b = 1

	local.distance = local.string.size / -2
//	huddraw_rect local.hudelement (local.distance * 13) 100 0 0
	huddraw_rect local.hudelement (local.distance * 10) 200 0 0
	huddraw_color local.hudelement local.r local.g local.b

	huddraw_font local.hudelement "facfont-20"
	huddraw_string local.hudelement local.string
	huddraw_align local.hudelement center top
	local.strength = 1
	huddraw_alpha local.hudelement local.strength

	//wait (2 * level.newtimescale)
	wait 2

	while (local.strength > 0)
	{
		local.strength = local.strength - 0.02
		huddraw_alpha local.hudelement local.strength
		wait 0.02
	}

	thread debugtext ("ENDTHREAD hudprint = " + local.string)
end

vehicledamage local.smoke:
	thread debugtext ("THREAD: vehicledamage: self = " + self + ", local.smoke = " + local.smoke)

	self thread spawn_fx "fx/fx_tank_explosion.tik"
	self playsound explode_tank

	thread jitter_large 0 // make the screen shake

	if (local.smoke == 3) // middle
	{
		self.smoke3o = spawn script_origin
		self.smoke3o.origin = self.origin

		self.smoke3 = spawn "models/emitters/linger_smoke.tik"
		self.smoke3 notsolid
		self.smoke3 anim start
		self.smoke3.origin = (self.origin + self.damage3 )
		self.smoke3 bind self.smoke3o

		self.smoke3o glue self
	}
	else if (local.smoke == 2) // front
	{
		self.smoke2o = spawn script_origin
		self.smoke2o.origin = self.origin

		self.smoke2 = spawn "models/emitters/linger_smoke.tik"
		self.smoke2 notsolid
		self.smoke2 anim start
		self.smoke2.origin = (self.origin + self.damage2 )
		self.smoke2 bind self.smoke2o

		self.smoke2o glue self
	}
	else // back
	{
		self.smoke1o = spawn script_origin
		self.smoke1o.origin = self.origin

		self.smoke1 = spawn "models/emitters/linger_smoke.tik"
		self.smoke1 notsolid
		self.smoke1 anim start
		self.smoke1.origin = (self.origin + self.damage1 )
		self.smoke1 bind self.smoke1o

		self.smoke1o glue self
	}

	thread debugtext ("END THREAD: vehicledamage: self = " + self + ", local.smoke = " + local.smoke)
end

spawn_fx local.fx:
	thread debugtext ("THREAD: spawn_fx: self = " + self + ",local.fx = " + local.fx)
	local.temp = spawn script_model model local.fx
	local.temp.origin = self.origin
	local.temp anim start
	wait 5
	local.temp remove
end

spawn_damaged local.model:
	thread debugtext ("THREAD: jitter_large: self = " + self + ",local.model = " + local.model)
	local.damaged = spawn script_model model local.model
	local.damaged.origin = self.origin
	local.damaged.angles = self.angles

	self.smoke = spawn "models/emitters/linger_smoke.tik"
	self.smoke notsolid
	self.smoke anim start
	self.smoke.origin = (self.origin + (0 0 80))
	self.smoke glue self
end local.damaged

//******************************
// jitter large effect
// jitter_large [delay]
//******************************
jitter_large local.time:
	thread debugtext ("THREAD: jitter_large: self = " + self + ",local.time = " + local.time)

	if (local.time)
		wait local.time

	waitexec global/earthquake.scr .35 10 0 0
	waitexec global/earthquake.scr .23 6 0 0
	waitexec global/earthquake.scr 1 1 0 0
	waitexec global/earthquake.scr 1.25 .3 0 1
end

// text only output if debug mode is turned on
debugtext local.text:
	if (level.debug == 1)
		println ("DEBUG vehicles: " + local.text)
end
In my mapname.scr file I used this..

Code: Select all

spawn vehicles/halftrack_driveable.tik "targetname" "alliedhtruck"
$alliedhtruck.origin = ( -646 -1834 -105 )
$alliedhtruck.angles = ( 0 90 0 )
exec global/vehicles.scr
end
It works...what iw ant spawn,a nd I can ge tina nd drive, but if you try to turn, its so bad you cant drive. You turn so fast its just undrivable. Please help!
Post Reply