Drivable Vehicles script help
Posted: Sat May 01, 2004 11:04 pm
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.
In my mapname.scr file I used this..
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!
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
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