View Single Post
need help editing thefarm.scr
Old
  (#1)
stungun02278 is Offline
Member
 
Posts: 58
Join Date: Apr 2002
   
Default need help editing thefarm.scr - 08-23-2002, 06:53 PM

yeah i was just trying to turn respawn off.. and well this file is different then all the rest and i didnt want to go playing wit stuff and screw things up.. all i want to do is turn respawn off.. please help dont know scripting..

i mean i see this line and figured all i had to do was put it to 0 but then i saw alot of other things sayin respawn so i got scared

level.respawnon = 0 ?? that it??



// THEFARM
// ARCHITECTURE: Duncan
// SCRIPTING: Duncan
// April 2002
//
// Based on the script for 'The Bridge' by POWZER

main:

println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~"
println " THE FARM ! "
println "************************************************* **********"

println "THREAD main"

setcvar "g_obj_alliedtext1" "4 Objectives:"
setcvar "g_obj_alliedtext2" "Tank, Ammo Room"
setcvar "g_obj_alliedtext3" "Radio and Antena"

setcvar "g_obj_axistext1" "Defend La Campagne"
setcvar "g_obj_axistext2" "It's vital to save"
setcvar "g_obj_axistext3" "the farm !"

setcvar "g_scoreboardpic" "thefarm"

// ************************************************** ****************************
// ************************************* VARS THAT CONTROL THE GAME *************
// setup default vars

level.introsounds = 0
level.introhints = 1

level.attack = "allies"

level.bomb_ticktime = 36
level.bomb_fastticktime = 10
level.bomb_armtime = 4
level.bomb_defusetime = 6

level.respawnon = 1
level.maptime = 10

// get server vars for config of the game

level.introsounds = getcvar ("g_thefarm_introsounds")
if (level.introsounds != "1" && level.introsounds != "0")
level.introsounds = "0"

level.introhints = getcvar ("g_thefarm_introhints")
if (level.introhints != "1" && level.introhints != "0")
level.introhints = "1"

level.barnladders = getcvar ("g_thefarm_barnladders")
if (level.barnladders != "1" && level.barnladders != "0")
level.barnladders = "0"

level.village = getcvar ("g_thefarm_village")
if (level.village != "1" && level.village != "0")
level.village = "0"

level.showvillagetrees = getcvar ("g_thefarm_villagetrees")
if (level.showvillagetrees != "1" && level.showvillagetrees != "0")
level.showvillagetrees = "0"

level.showhqtrees = getcvar ("g_thefarm_hqtrees")
if (level.showhqtrees != "1" && level.showhqtrees != "0")
level.showhqtrees = "0"

level.respawn = getcvar ("g_thefarm_respawn")
level.maptime = getcvar ("g_thefarm_maptime")

if (level.respawn != "1" && level.respawn != "0")
level.respawn = "1"

if (level.maptime != "1" && level.maptime != "2" && level.maptime != "3" && level.maptime != "4" && level.maptime != "5" && level.maptime != "6" && level.maptime != "7" && level.maptime != "8" && level.maptime != "9" && level.maptime != "10")
level.maptime = 10

if (level.respawn == "1")
level.respawnon = 1
else
level.respawnon = 0

// check which bombs are going to be active
level.radiobomb = getcvar ("g_thefarm_radiobomb")
level.antenabomb = getcvar ("g_thefarm_antenabomb")
level.tankbomb = getcvar ("g_thefarm_tankbomb")
level.ammobomb = getcvar ("g_thefarm_ammobomb")

level.carbomb = getcvar ("g_thefarm_carbomb")
level.bikebomb = getcvar ("g_thefarm_bikebomb")
level.truckbomb = getcvar ("g_thefarm_truckbomb")

if (level.radiobomb!="0" && level.radiobomb != "1")
level.radiobomb = 1
if (level.antenabomb!="0" && level.antenabomb != "1")
level.antenabomb = 1
if (level.tankbomb!="0" && level.tankbomb!="1")
level.tankbomb = 1
if (level.ammobomb!="0" && level.ammobomb!="1")
level.ammobomb = 1

if (level.carbomb!="0" && level.carbomb!="1")
level.carbomb = 1
if (level.bikebomb!="0" && level.bikebomb!="1")
level.bikebomb = 1
if (level.truckbomb!="0" && level.truckbomb!="1")
level.truckbomb = 1

// ************************************************** ****************************
// ************************************************** ****************************

// exec maps/obj/thefarm_spotlight.scr

level waittill prespawn
println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~"
println " PRESPAWN ! "
println "************************************************* **********"

level.debug = 1

//*** Precache Dm Stuff
exec global/DMprecache.scr

println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~"
println " PLANES ! "
println "Loading script: airstike bombers"
exec maps/obj/thefarm_bomber.scr::main
println "************************************************* **********"

level.script = maps/obj/thefarm.scr

//println "Loading script: weather.scr"
//level.farplane = 3500
//level.farplanecolor = (0.333 0.333 0.359)
//exec global/weather.scr 3500 (0.333 0.333 0.359)
//exec global/shutter.scr // dont know what this is

println "Loading script: ambient.scr"
exec global/ambient.scr thefarm

// turn on the elevator
thread elevator_preparation //Setup the elevator

println "Loading script: thefarm_exploder"
thread maps/obj/thefarm_exploder.scr::main

println "Loading script: thefarm_minefield"
thread maps/obj/thefarm_minefield.scr::minefield_setup

//exec global/door_locked.scr::lock

// thread setup_spawnpoints

// local.temp = level.spawn light
// local.temp.light = 30000
// local.temp.origin = (0 -5000 1000)

thread setup_simple_fog 1200

level.targets_to_destroy = 1
local.targets_to_destroy = 0
local.targets_to_destroy2 = 0

level waittill spawn

println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~"
println " SPAWN ! "
println "************************************************* **********"

if (level.attack == "allies")
{
level.defusing_team = "axis"
level.planting_team = "allies"
}
else
{
level.defusing_team = "axis"
level.planting_team = "allies"
}

// this is for allies = use bomb_thinker
// bombs with number 0 - 19
level.targets_destroyed = 0 // nothing blown up yet
local.targetstodestroy = 0 // don't count fun bombs i.e bombs with id 10 or higher

// this is for axis = use bomb_thinker2
// bombs with number 20 - 40
level.targets_destroyed2 = 0 // nothing blown up yet
local.targetstodestroy2 = 0 // don't count fun bombs i.e bombs with id 30 or higher

level.bomb_damage = 300
level.bomb_explosion_radius = 1024

// set the parameters for this round/wave based match
level.dmrespawning = level.respawnon // 1 **wave based** or 0 **round based**
level.dmroundlimit = level.maptime // round time limit in minutes
level.clockside = axis // set to axis, allies, kills, or draw

thread ladder_control

thread village_control

// thread farmradioused

// THIS LOT REALLY SHOULD GO AFTER "level waittill roundstart"

// turn on the bombs
if (level.radiobomb==1)
{
$radio_bomb thread bomb_thinker 1 // radio
local.targetstodestroy=local.targetstodestroy+1
}

if (level.antenabomb==1)
{
$antena_bomb thread bomb_thinker 2 // antena
local.targetstodestroy=local.targetstodestroy+1
}

if (level.ammobomb==1)
{
$ammo_bomb thread bomb_thinker 3 // one of these
local.targetstodestroy=local.targetstodestroy+1
}

//$tank_bomb thread bomb_thinker 4
if (level.tankbomb==1)
{
$tank_bomb2 thread bomb_thinker 5
local.targetstodestroy=local.targetstodestroy+1
}
//$tank_bomb3 thread bomb_thinker 6

if (level.truckbomb==1)
$fun_bomb thread bomb_thinker 10 // 3 of these , truck

if (level.bikebomb==1)
$fun_bomb2 thread bomb_thinker 11 // 3 of these , bike

if (level.carbomb==1)
$fun_bomb3 thread bomb_thinker 12 // 3 of these , car

level.targets_to_destroy = local.targetstodestroy
level.targets_to_destroy2 = local.targetstodestroy2

println " @@@@@@@@@@@@ OBJECTIVES @@@@@@@@@@@@@@@@"
println ("Allied targets = " + level.targets_to_destroy)
println ("Axis targets = " + level.targets_to_destroy2)
println " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

// end of THIS LOT

$ammo_bomb thread allies_win_bomb
$ammo_bomb thread axis_win_timer

println " @@@@@@@@@@@@ SERVER VARS @@@@@@@@@@@@@@@@"
println " [0 = off, 1 = on]"
println ("Intro sounds = " + level.introsounds)
println ("Intro Hints = " + level.introhints)
println ("Access Allied village = " + level.village)
println ("Village surrounded by trees = " + level.showvillagetrees)
println ("Allied HQ surrounded by trees = " + level.showhqtrees)
println ("Use Barnladders = " + level.barnladders)
println ("Respawn = " + level.respawn)
println ("Respawnon = " + level.respawnon)
println ("Maptime = " + level.maptime + " minutes")
println ("Radio Bomb = " + level.radiobomb)
println ("Antena Bomb = " + level.antenabomb)
println ("Tank Bomb = " + level.tankbomb)
println ("Ammo Bomb = " + level.ammobomb)
println ("Car Bomb = " + level.carbomb)
println ("Bike Bomb = " + level.bikebomb)
println ("Truck Bomb = " + level.truckbomb)
println " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

// start the airstrikes
thread flyby

level waittill roundstart

println "************************************************* **********"
println " ROUNDSTART ! "
println "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~"

// do the intro speech sounds
thread intro_sounds

// show the intro hints
thread intro_hints

// show the current objectives
thread showmenu

// start the dissipating fog thread
thread morning_fog_dissipate 1200 4500 200 0

// thread night_to_day

// thread objectives_setup

// turn off bomb animation
thread bomb_noanimation

println "END THREAD main"
end

intro_hints:
println "THREAD: intro_hints"

if (level.introhints == 0)
{
println "END THREAD: intro_hints bypassed"
end
}

//called by BSP
local.player = parm.other

if (local.player.dmteam == "allies")
{
thread maps/obj/thefarm_message_print.scr::message "Welcome Allied soldier, complete your mission" NIL 15
thread maps/obj/thefarm_message_print.scr::message "You have 4 objectives:" HINT 3
thread maps/obj/thefarm_message_print.scr::message "1 = Ammo Room" HINT 3
thread maps/obj/thefarm_message_print.scr::message "2 = Tiger Tank" HINT 3
thread maps/obj/thefarm_message_print.scr::message "3 = Communications room" HINT 3
thread maps/obj/thefarm_message_print.scr::message "4 = Radio Antena" HINT 3
}
else
{
thread maps/obj/thefarm_message_print.scr::message "Welcome Axis soldier, defend the farm at all costs" NIL 15
thread maps/obj/thefarm_message_print.scr::message "Protect these items:" HINT 3
thread maps/obj/thefarm_message_print.scr::message "1 = Ammo Room" HINT 3
thread maps/obj/thefarm_message_print.scr::message "2 = Tiger Tank" HINT 3
thread maps/obj/thefarm_message_print.scr::message "3 = Communications room" HINT 3
thread maps/obj/thefarm_message_print.scr::message "4 = Radio Antena" HINT 3
}

println "END THREAD: intro_hints"
end

intro_sounds:
println "THREAD: intro_sounds"

if (level.introsounds == 0)
{
println "END THREAD: intro_sounds bypassed"
end
}

//called by BSP
local.player = parm.other

// prevent the player from trying to move around
//$player physics_off
//thread freezeplayerview

if (local.player.dmteam == "allies")
{
$player playsound thefarm_allied_intro1
println "seen any rocket"
wait 4

$player playsound thefarm_allied_intro2
println "yes we have"
wait 3.5

// let him move again
//$player physics_on
//level.frozen = 0

$player playsound thefarm_allied_intro3
println "what's your name soldier"
wait 2

$player playsound thefarm_allied_intro4
println "this is powel"
wait 1

$player playsound thefarm_allied_intro5
println "what do weapons look like"
wait 2.5

$player playsound thefarm_allied_intro6
println "well sir"
wait 7

$player playsound thefarm_allied_intro7
println "never heard anything like em"
wait 2

$player playsound thefarm_allied_intro8
println "that'd be great"
wait 3

$player playsound thefarm_allied_intro9
println "yes sir"
wait 2

$player playsound thefarm_allied_intro10
println "i'm not going anywhere"
wait 4

$player playsound thefarm_allied_intro11
println "moving out"
}
else
{
thread maps/obj/thefarm_message_print.scr::message "Welcome Axis soldier, defend the farm at all costs" NIL 2
thread maps/obj/thefarm_message_print.scr::message "Protect these items:" HINT 2
thread maps/obj/thefarm_message_print.scr::message "1 = Ammo Room" HINT 2
thread maps/obj/thefarm_message_print.scr::message "2 = Tiger Tank" HINT 2
thread maps/obj/thefarm_message_print.scr::message "3 = Communications room" HINT 2
thread maps/obj/thefarm_message_print.scr::message "4 = Radio Antena" HINT 2

//wait 9.5

// let him move again
//$player physics_on
//level.frozen = 0
}

// let him move again
//$player physics_on
//level.frozen = 0

println "END THREAD: intro_sounds"
end

countdown local.time:
thread maps/obj/thefarm_message_print.scr::message ("Countdown for " + local.time + " seconds")

wait local.time
end

setup_simple_fog local.density:
println ("THREAD: setup_simple_fog = " + local.density)

$world farplane local.density // fog thickness, 300 very dense, 2500 mist
$world farplane_color (.333 .333 .329)
$world farplane_cull "no"

//$world suncolor (20 20 20)

//$biglight light 300

println "END THREAD: setup_simple_fog"
end

morning_fog_dissipate local.start local.end local.timespan local.showdebug:
println ("THREAD: morning_fog_dissipate = " + local.start + ", to " + local.end + ", over " + local.timespan + " seconds")

local.difference = local.end - local.start // 2500 is mild fog, smaller the number denser the fog

local.fogtimeunit = local.difference / local.timespan // amount fog increases in 1 second

local.fogvalue = local.start // start value

local.start_time = level.time

$world farplane local.fogvalue
$world farplane_color (.333 .333 .329)
$world farplane_cull "no"

while (local.fogvalue<local.end)
{
// wait for 1 second
while (level.time < (local.start_time + 1) )
{
wait .1
}

local.start_time = level.time

local.fogvalue = local.fogvalue + local.fogtimeunit

if (local.showdebug==1)
println (" new fog value = " + local.fogvalue)

$world farplane local.fogvalue

waitframe
}

println "END THREAD: moring_fog_dissipate"
end

night_to_day:
println "THREAD: night_to_day"

if ($thesun == NULL)
level.thesun = 0
else
level.thesun = $thesun.size

println ("Level thesun = " + level.thesun)

if (level.thesun < 1)
{
println " no sun, so terminating early"
//println "END THREAD: night_to_day"
//end
}

local.daylight = 30000.0
local.night = 500.0

local.lightdifference = local.daylight - local.night // 70 is daylight, 20 is night

local.timespan = 30.0 // seconds

local.suntimeunit = local.lightdifference / local.timespan

local.lighttimeunit = 30000.0 / local.timespan

local.sunvalue = local.night // start at night

println (" daylight = " + local.daylight)
println (" night = " + local.night)
println (" time taken from night to day = " + local.timespan)
println (" suntimeunit = " + local.suntimeunit)
println (" thesun.light = " + $thesun.light)
// println (" level.suncolor = " + level.suncolor )

/*
local.suncolor[0] = local.sunvalue
local.suncolor[1] = local.sunvalue
local.suncolor[2] = local.sunvalue

local.suncolor = (local.sunvalue local.sunvalue local.sunvalue)
*/

local.start_time = level.time

$thesun.light = local.sunvalue

while (local.sunvalue<local.daylight)
{
// wait for 1 second
while (level.time < (local.start_time + 1) )
{
wait .1
}

local.start_time = level.time

local.sunvalue = local.sunvalue + local.suntimeunit

local.lightvalue = local.lightvalue + local.lightimeunit

println (" new sun value = " + local.sunvalue)
println (" new light value = " + local.lightvalue)

$biglight light local.lightvalue

// $world suncolor (local.sunvalue local.sunvalue local.sunvalue)
// $thesun.light = local.sunvalue
//local.suncolor = (local.sunvalue local.sunvalue local.sunvalue)

waitframe
}

println "END THREAD: night_to_day"
end

//*** --------------------------------------------
//*** "Allies breach permimeter
//*** --------------------------------------------

almost_there1:

//called by BSP
local.player = parm.other

println ("Almost there 1 Local player = " + local.player.dmteam)

if ( (local.player.dmteam != "allies") || (level.perimeter_breached == 1) )
end

iprintlnbold "The Allies have breached the perimeter!"
level.perimeter_breached = 1
end

//*** --------------------------------------------
//*** "Axis make a counter attack
//*** --------------------------------------------

almost_there2:

//called by BSP
local.player = parm.other

println ("Almost there 2 Local player = " + local.player.dmteam)

if ( (local.player.dmteam != "axis") || (level.counter_attack == 1) )
end

iprintlnbold_noloc "The Axis are making a counter attack!"
level.counter_attack = 1
end

//*** --------------------------------------------
//*** "Allies Victory"
//*** --------------------------------------------

allies_win_bomb:

println "THREAD allies_win_bomb"

if (level.targets_to_destroy < 1)
{
level waittill allieswin
$player playsound thefarm_allied_win2 // victory is ours
thread maps/obj/thefarm_message_print.scr::message "Victory is ours" NIL 2
wait 2
}
else
{
while(level.targets_destroyed < level.targets_to_destroy)
waitframe

thread maps/obj/thefarm_message_print.scr::message "We've completed our mission" NIL 2
$player playsound thefarm_allied_win1 // we've completed our mission
wait 2

$player playsound thefarm_allied_win2 // victory is ours
thread maps/obj/thefarm_message_print.scr::message "Victory is ours" NIL 2
wait 2

$player playsound thefarm_allied_win3// see you in berlin
thread maps/obj/thefarm_message_print.scr::message "See YOU in Berlin" NIL 2
wait 2

teamwin allies
}

println "END THREAD allies_win_bomb"

end

//*** --------------------------------------------
//*** "Axis Victory"
//*** --------------------------------------------

axis_win_timer:
println "THREAD axis_win_timer"

if (level.targets_to_destroy2 < 1)
{
level waittill axiswin
$player playsound thefarm_axis_win1 // victory is ours
thread maps/obj/thefarm_message_print.scr::message "Victory is ours" NIL 2
wait 2
}
else
{
while(level.targets_destroyed2 < level.targets_to_destroy2)
waitframe

$player playsound thefarm_axis_win1 // victory is ours
thread maps/obj/thefarm_message_print.scr::message "Victory is ours" NIL 2
wait 2

teamwin axis
}

println "END THREAD axis_win_timer"
end

//THIS PORTION OF SCRIPT NOT READY TO IMPLEMENT
//objectives_setup:
//
// waitthread global/objectives.scr::blank_objectives
// waitthread global/objectives.scr::add_objectives 1 2 "Allied forces must destroy the radio dish" $dish.origin
// wait 2
// waitthread global/objectives.scr::current_objectives 1
//end

//
//
// LOGIC FOR OBJECTIVE BASED DEATHMATCH ENTITIES
//
//

//***********************************************
// BOMB THINKER
//***********************************************

//***********************************************
// initialization thread...
//***********************************************

bomb_thinker local.triggernum:

println "THREAD bomb_thinker"

// Steve says planting time = 6 seconds
// defusing time = 12 second
// tick time = 36 seconds

level.bomb_set = 0
level.bomb_set2 = 0

level.bomb_defuse_time = level.bomb_defusetime * 10 //tenths of a second = 6
level.bomb_set_time = level.bomb_armtime * 10 //tenths of a second = 4
level.bomb_tick_time = level.bomb_ticktime //seconds (was 60 seconds, then 30 seconds, now 36)
// level.wait_after_explode = 2 //seconds time after target is destroyed before the level ends (no longer used, done in code now)
level.bomb_explosion_radius = 1054 //quake units
level.bomb_use_distance = 200 //quake units
level.bombusefov = 360
level.bomb_damage = 90

level.subtitleX = 100
level.subtitleY = 50

self.exploded = 0
self.exploder_set = local.triggernum
self.trigger_name = "trigger" + local.triggernum
// self.target.destroyed_model = "explodersmashed"

//self.target.collisionent = self.target.target // DUNNO !
// self.target notsolid // make the target non solid
self.live = 0 // 0 not live (safe) , 1 live (can expode)

//self.target anim start

println "----------------------Z-----------------------"
println "self = " self
println "level.bomb_defusetime " level.bomb_defusetime
println "level.bomb_defust_time " level.bomb_defusetime
println "level.bomb_armtime " level.bomb_armtime
println "level.bomb_set_time " level.bomb_set_time
println "level.bomb_ticktime " level.bomb_ticktime
println "level.bomb_tick_time " level.bomb_tick_time
println "self.trigger_name = " self.trigger_name // the trigger that trigger's the bomb !
println "self.exploded = " self.exploded
println "self.exploder_set = " self.exploder_set // the #set no of the models that are part of the objective
println "self.target (flak 88 or other) = " self.target // the object that is going to be destroyed (and removed when hit)
//println "self.target.destroyed_model = " self.target.destroyed_model // new model that appears after bomb has gone off
//println "self.target.target (collision entity) = " self.target.target // DUNNO !
println "self.explosion_fx = " self.explosion_fx // fx that appears if bomb goes off
println "self.explosion_sound = " self.explosion_sound // sound made when bomb goes off
println "self.killarea = " self.killarea // area where things get killed outright
println "----------------------Z-----------------------"

thread bomb_waittill_set

println "END THREAD bomb_thinker"

end

//***********************************************
// first thread... controls allies using the trigger
//***********************************************

bomb_waittill_set:

local.player = parm.other

//println ("Almost there 1 Local player = " + local.player.dmteam)

println "THREAD bomb_waittill_set"

self model items/pulse_explosive.tik

println " self.trigger_name = " self.trigger_name

if ( $(self.trigger_name) )
println " there is a trigger"
else
println " there is NOT a trigger, so bomb can't be set"

while ( $(self.trigger_name) )
{
println (" waittill trigger " + self.trigger_name)

self.trigger_name waittill trigger

println " triggered"

local.player = parm.other

//"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'

if (local.player.dmteam != level.planting_team) // check if the right team is setting the bomb
{
thread maps/obj/thefarm_message_print.scr::message "You can't set this bomb" NIL 2
goto bomb_waittill_set // wrong team so go back and start waiting again

println " FAILED dmteam check" local.player.dmteam
}
else
println " dmteam check passed OK" // correct team let's get on with it

if (self.live == 1)
{
thread maps/obj/thefarm_message_print.scr::message "Bomb is already set" NIL 2
end
}

local.counter = 0 // reset counter to start stopwatch

// check the following:
// player is alive ! , player can see the bomb, player has the use key held down

if (Isalive local.player)
println " player is alive OK"
else
println " player is dead FAILED"

//if (self cansee local.player level.bombusefov level.bomb_use_distance)
// println " bomb can see player OK"
//else
// println " bomb can't see player FAILED"

if (local.player.useheld == 1)
println " held key active OK = " local.player.useheld
else
println " held key inactive FAILED"

//while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
while ( (Isalive local.player) && (local.player.useheld == 1) )
{
if (local.counter == 0) // if the counter is 0 display the stopwatch
local.player stopwatch (level.bomb_set_time * .1)

local.counter++

// if ((local.counter % 5) == 0)
// locprint level.subtitleX level.subtitleY("set "+ local.counter)

wait .1

if (local.counter >= level.bomb_set_time) // check how long use key has been held down
{
iprintlnbold_noloc("A bomb has been planted!, by " + local.player.dmteam )

if (level.planting_team == "allies")
self playsound dfr_objective_o // make a sound
else
self playsound den_objective_o // make a sound

local.player stopwatch (level.bomb_tick_time)

self.player_set = local.player

thread bomb_waittill_defuse // start thread to look for someone defusing the bomb (unless detonated)
thread bomb_waittill_explode // start thread to detonate the bomb after a preset time (unless diffused)

self.live = 1 // make the bomb live
level.bomb_set ++

println " waiting for bomb to detonate or be defussed"
println "END THREAD bomb_waittill_set"

end
}
}

if (local.counter > 0)
local.player stopwatch 0 // turn off the stopwatch

println " trigger used but failed check"

//if ! (self cansee local.player level.bombusefov level.bomb_use_distance)
// println " failed bomb can see player check"

if ! (local.player.useheld == 1)
println " failed use key held check" local.player.useheld
}

println "END THREAD bomb_waittill_set"
end

//***********************************************
// second thread... controls axis using the trigger
//***********************************************
bomb_waittill_defuse:
while ( $(self.trigger_name) )
{
self.trigger_name waittill trigger

local.player = parm.other

//"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
if (local.player.dmteam != level.defusing_team)
{
thread maps/obj/thefarm_message_print.scr::message "You can't diffuse this bomb" NIL 2

println " failed dmteam check" local.player.dmteam
goto bomb_waittill_defuse
}
else
println " diffuse dmteam check ok" local.player.dmteam

if (self.live == 0)
{
thread maps/obj/thefarm_message_print.scr::message "Bomb is already disarmed" NIL 2
end
}

local.counter = 0

//while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
while ( (Isalive local.player) && (local.player.useheld == 1) )
{
if (local.counter == 0)
local.player stopwatch (level.bomb_defuse_time * .1)

local.counter++
// if ((local.counter % 5) == 0)
// locprint level.subtitleX level.subtitleY ("defuse "+local.counter)

wait .1
if (local.counter >= level.bomb_defuse_time)
{
iprintlnbold_noloc("A bomb has been defused!, by " + local.player.dmteam )

if (level.defusing_team == "allies")
self playsound dfr_diffused_d
else
self playsound den_diffused_d

thread bomb_waittill_set //start first thread again

self.live = 0
level.bomb_set --

self.player_set stopwatch 0

end
}
}

if (local.counter > 0)
local.player stopwatch 0
}
end

//***********************************************
// third thread... times the bomb and makes it explode at the right time
//***********************************************
bomb_waittill_explode:

println "THREAD: bomb_waittill_explode"

self model items/explosive.tik

self playsound plantbomb

self loopsound thefarm_bombtick

local.start_time = level.time

while (level.time < (local.start_time + level.bomb_tick_time) )
{
wait .1

if (self.live != 1)
{
self stoploopsound

println " bomb not live, exiting"
println "END THREAD: bomb_waittill_explode"

end
}

if (level.time == (local.start_time + level.bomb_tick_time - level.bomb_fastticktime) )
{
self stoploopsound

self loopsound thefarm_finalcountdown
}

if (level.time == (local.start_time + level.bomb_tick_time - level.bomb_defusetime) )
{
self stoploopsound

self loopsound thefarm_finalcountdownquick
}
}

self stoploopsound

self.player_set stopwatch 0

thread bomb_explode

println "END THREAD: bomb_waittill_explode"

end

//***********************************************
// fourth thread... controls the explosion
//***********************************************
bomb_explode:

println "THREAD: bomb_explode"

self.trigger_name remove // remove the trigger so it can't go off again

thread jitter_large 0 // do a large screen shake

$player playsound "sounds/Multiplayer/a/AMdfr_o_02.wav" // we've completed our objective

if (self.exploder_set != NIL)
{
println (" executing exploder script " + self.exploder_set)
exec maps/obj/thefarm_exploder.scr::explode self.exploder_set // execute the exploder routine where #set = exploder_set
}
else
println " bypassing exploder script"

if (self.explosion_fx != NIL)
{
println " executing eplosion fx"
self thread spawn_fx self.explosion_fx // show an explosion
}
else
println " bypassing explosion fx"

if (self.explosion_sound != NIL)
{
println " executing explosion sound"
self playsound self.explosion_sound // make a noise
}
else
println " bypassing explosion sound"

if (self.target != NIL) // the object that's going to be blown up
{
if (self.target.destroyed_model != NIL) // the new object that will be show after bomb detonates
local.damaged = self.target thread spawn_damaged self.target.destroyed_model

self.target remove // remove the original object

waitframe
}

radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius // do some damage in the local area

if (self.killarea != NIL)
self.killarea volumedamage 1000 // kill in this area

if (self.exploder_set > 0 && self.exploder_set < 10 )
{
if (self.message != NIL)
local.message = " have destroyed OBJECTIVE " + self.message + "."
else
local.message = " have destroyed an OBJECTIVE."
}
else
{
if (self.message != NIL)
local.message = " have destroyed target " + self.message + "."
else
local.message = " have destroyed a target."
}

iprintlnbold_noloc("The " + level.planting_team + local.message )

self hide // remove the bomb

self.exploded = 1 // this bomb has exploded

// we delay the decrementing of level.bomb_set so that the script has
// time to determin the winner before the timelimit gets checked and hit
wait 0.5

if (self.exploder_set > 0 && self.exploder_set < 10 ) // don't count fun_bombs
level.targets_destroyed ++

level.bomb_set --

thread showmenu

println "END THREAD: bomb_explode"
end

//***********************************************
// BOMB THINKER 2 (planting / defussing teams switched
//***********************************************

//***********************************************
// initialization thread...
//***********************************************

bomb_thinker2 local.triggernum:

println "THREAD bomb_thinker"

// Steve says planting time = 6 seconds
// defusing time = 12 second
// tick time = 36 seconds

level.bomb_set2 = 0

level.bomb_defuse_time = level.bomb_defusetime * 10 //tenths of a second = 6
level.bomb_set_time = level.bomb_armtime * 10 //tenths of a second = 4
level.bomb_tick_time = level.bomb_ticktime //seconds (was 60 seconds, then 30 seconds, now 36)
// level.wait_after_explode = 2 //seconds time after target is destroyed before the level ends (no longer used, done in code now)
level.bomb_explosion_radius = 1054 //quake units
level.bomb_use_distance = 200 //quake units
level.bombusefov = 360
level.bomb_damage = 90

level.subtitleX = 100
level.subtitleY = 50

self.exploded = 0
self.exploder_set = local.triggernum
self.trigger_name = "trigger" + local.triggernum
self.target.destroyed_model = "explodersmashed"

//self.target.collisionent = self.target.target // DUNNO !
// self.target notsolid // make the target non solid
self.live = 0 // 0 not live (safe) , 1 live (can expode)

//self.target anim start

println "----------------------Z-----------------------"
println "self = " self
println "level.bomb_defusetime " level.bomb_defusetime
println "level.bomb_defust_time " level.bomb_defusetime
println "level.bomb_armtime " level.bomb_armtime
println "level.bomb_set_time " level.bomb_set_time
println "level.bomb_ticktime " level.bomb_ticktime
println "level.bomb_tick_time " level.bomb_tick_time
println "self.trigger_name = " self.trigger_name // the trigger that trigger's the bomb !
println "self.exploded = " self.exploded
println "self.exploder_set = " self.exploder_set // the #set no of the models that are part of the objective
println "self.target (flak 88 or other) = " self.target // the object that is going to be destroyed (and removed when hit)
//println "self.target.destroyed_model = " self.target.destroyed_model // new model that appears after bomb has gone off
//println "self.target.target (collision entity) = " self.target.target // DUNNO !
println "self.explosion_fx = " self.explosion_fx // fx that appears if bomb goes off
println "self.explosion_sound = " self.explosion_sound // sound made when bomb goes off
println "self.killarea = " self.killarea // area where things get killed outright
println "----------------------Z-----------------------"

thread bomb_waittill_set2

println "END THREAD bomb_thinker2"

end

//***********************************************
// first thread... controls allies using the trigger
//***********************************************

bomb_waittill_set2:

local.player = parm.other

//println ("Almost there 1 Local player = " + local.player.dmteam)

println "THREAD bomb_waittill_set"

self model items/pulse_explosive.tik

println " self.trigger_name = " self.trigger_name

if ( $(self.trigger_name) )
println " there is a trigger"
else
println " there is NOT a trigger, so bomb can't be set"

while ( $(self.trigger_name) )
{
println (" waittill trigger " + self.trigger_name)

self.trigger_name waittill trigger

println " triggered"

local.player = parm.other

//"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'

if (local.player.dmteam == level.planting_team) // check if the right team is setting the bomb
{
thread maps/obj/thefarm_message_print.scr::message "You can't set this bomb" NIL 2
goto bomb_waittill_set // wrong team so go back and start waiting again

println " FAILED dmteam check" local.player.dmteam
}
else
println " dmteam check passed OK" // correct team let's get on with it

if (self.live == 1)
{
thread maps/obj/thefarm_message_print.scr::message "Bomb is already set" NIL 2
end
}

local.counter = 0 // reset counter to start stopwatch

// check the following:
// player is alive ! , player can see the bomb, player has the use key held down

if (Isalive local.player)
println " player is alive OK"
else
println " player is dead FAILED"

//if (self cansee local.player level.bombusefov level.bomb_use_distance)
// println " bomb can see player OK"
//else
// println " bomb can't see player FAILED"

if (local.player.useheld == 1)
println " held key active OK = " local.player.useheld
else
println " held key inactive FAILED"

//while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
while ( (Isalive local.player) && (local.player.useheld == 1) )
{
if (local.counter == 0) // if the counter is 0 display the stopwatch
local.player stopwatch (level.bomb_set_time * .1)

local.counter++

// if ((local.counter % 5) == 0)
// locprint level.subtitleX level.subtitleY("set "+ local.counter)

wait .1

if (local.counter >= level.bomb_set_time) // check how long use key has been held down
{
iprintlnbold_noloc("A bomb has been planted!, by " + local.player.dmteam )

if (level.planting_team == "allies")
self playsound dfr_objective_o // make a sound
else
self playsound den_objective_o // make a sound

local.player stopwatch (level.bomb_tick_time)

self.player_set = local.player

thread bomb_waittill_defuse2 // start thread to look for someone defusing the bomb (unless detonated)
thread bomb_waittill_explode2 // start thread to detonate the bomb after a preset time (unless diffused)

self.live = 1 // make the bomb live
level.bomb_set2 ++

println " waiting for bomb to detonate or be defussed"
println "END THREAD bomb_waittill_set"

end
}
}

if (local.counter > 0)
local.player stopwatch 0 // turn off the stopwatch

println " trigger used but failed check"

//if ! (self cansee local.player level.bombusefov level.bomb_use_distance)
// println " failed bomb can see player check"

if ! (local.player.useheld == 1)
println " failed use key held check" local.player.useheld
}

println "END THREAD bomb_waittill_set2"
end

//***********************************************
// second thread... controls axis using the trigger
//***********************************************
bomb_waittill_defuse2:
while ( $(self.trigger_name) )
{
self.trigger_name waittill trigger

local.player = parm.other

//"local.player.dmteam", can be 'spectator', 'freeforall', 'allies' or 'axis'
if (local.player.dmteam == level.defusing_team)
{
thread maps/obj/thefarm_message_print.scr::message "You can't diffuse this bomb" NIL 2

println " failed dmteam check" local.player.dmteam
goto bomb_waittill_defuse2
}
else
println " diffuse dmteam check ok" local.player.dmteam

if (self.live == 0)
{
thread maps/obj/thefarm_message_print.scr::message "Bomb is already disarmed" NIL 2
end
}

local.counter = 0

//while ( (Isalive local.player) && (local.player cansee self level.bombusefov level.bomb_use_distance) && (local.player.useheld == 1) )
while ( (Isalive local.player) && (local.player.useheld == 1) )
{
if (local.counter == 0)
local.player stopwatch (level.bomb_defuse_time * .1)

local.counter++
// if ((local.counter % 5) == 0)
// locprint level.subtitleX level.subtitleY ("defuse "+local.counter)

wait .1
if (local.counter >= level.bomb_defuse_time)
{
iprintlnbold_noloc("A bomb has been defused!, by " + local.player.dmteam )

if (level.defusing_team == "allies")
self playsound dfr_diffused_d
else
self playsound den_diffused_d

thread bomb_waittill_set //start first thread again

self.live = 0
level.bomb_set2 --

self.player_set stopwatch 0

end
}
}

if (local.counter > 0)
local.player stopwatch 0
}
end

//***********************************************
// third thread... times the bomb and makes it explode at the right time
//***********************************************
bomb_waittill_explode2:

println "THREAD: bomb_waittill_explode2"

self model items/explosive.tik

self playsound plantbomb

self loopsound thefarm_bombtick

local.start_time = level.time

while (level.time < (local.start_time + level.bomb_tick_time) )
{
wait .1

if (self.live != 1)
{
self stoploopsound

println " bomb not live, exiting"
println "END THREAD: bomb_waittill_explode2"

end
}

if (level.time == (local.start_time + level.bomb_tick_time - level.bomb_fastticktime) )
{
self stoploopsound

self loopsound thefarm_finalcountdown
}

if (level.time == (local.start_time + level.bomb_tick_time - level.bomb_defusetime) )
{
self stoploopsound

self loopsound thefarm_finalcountdownquick
}
}

self stoploopsound

self.player_set stopwatch 0

thread bomb_explode2

println "END THREAD: bomb_waittill_explode2"

end

//***********************************************
// fourth thread... controls the explosion
//***********************************************
bomb_explode2:

println "THREAD: bomb_explode2"

self.trigger_name remove // remove the trigger so it can't go off again

thread jitter_large 0 // do a large screen shake

$player playsound "sounds/Multiplayer/a/AMdfr_o_02.wav" // we've completed our objective

if (self.exploder_set != NIL)
{
println (" executing exploder script " + self.exploder_set)
exec maps/obj/thefarm_exploder.scr::explode self.exploder_set // execute the exploder routine where #set = exploder_set
}
else
println " bypassing exploder script"

if (self.explosion_fx != NIL)
{
println " executing eplosion fx"
self thread spawn_fx self.explosion_fx // show an explosion
}
else
println " bypassing explosion fx"

if (self.explosion_sound != NIL)
{
println " executing explosion sound"
self playsound self.explosion_sound // make a noise
}
else
println " bypassing explosion sound"

if (self.target != NIL) // the object that's going to be blown up
{
if (self.target.destroyed_model != NIL) // the new object that will be show after bomb detonates
local.damaged = self.target thread spawn_damaged self.target.destroyed_model

self.target remove // remove the original object

waitframe
}

radiusdamage self.origin level.bomb_damage level.bomb_explosion_radius // do some damage in the local area

if (self.killarea != NIL)
self.killarea volumedamage 1000 // kill in this area

if (self.exploder_set > 19 && self.exploder_set < 30 ) // don't count fun_bombs
{
if (self.message != NIL)
local.message = " have destroyed OBJECTIVE " + self.message + "."
else
local.message = " have destroyed an OBJECTIVE."
}
else
{
if (self.message != NIL)
local.message = " have destroyed target " + self.message + "."
else
local.message = " have destroyed a target."
}

iprintlnbold_noloc("The " + level.defuse_team + local.message )

self hide // remove the bomb

self.exploded = 1 // this bomb has exploded

// we delay the decrementing of level.bomb_set so that the script has
// time to determin the winner before the timelimit gets checked and hit
wait 0.5

if (self.exploder_set > 19 && self.exploder_set < 30 ) // don't count fun_bombs
level.targets_destroyed2 ++

level.bomb_set2 --

thread showmenu

println "END THREAD: bomb_explode2"
end

//----------------------------------
spawn_fx local.fx:
println ("THREAD: spawn_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

println ("END THREAD: spawn_fx " + local.fx)
end

spawn_damaged local.model:
println ("THREAD: spawn_damaged " + local.model)

local.damaged = spawn script_model model local.model
local.damaged.origin = self.origin
local.damaged.angles = self.angles

println ("END THREAD: spawn_damaged " + local.model)
end local.damaged

//******************************
// jitter large effect
// jitter_large [delay]
//******************************
jitter_large local.time:
println ("THREAD: jitter_large " + 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

println ("END THREAD: jitter_large " + local.time)
end

freezeplayerview:
println "THREAD: freezeplayerview"

continuefreeze:

level.frozen = 1

$player.viewangles = (0 0 0)

wait 0.01

if (level.frozen == 1)
goto continuefreeze

println "END THREAD: freezeplayerview"
end

farmradioused:
println "THREAD: radio used"

if (level.radio_on == NIL)
level.radio_on = 1

if (level.radio_on == 1)
{
level.radio_on = 0
self stoploopsound
}
else
{
level.radio_on = 1
self loopsound thefarm_radioloop
}

println "END THREAD: radio used"
end

barnnoise:
println "THREAD: barnnoise"

self loopsound machiner_loop

println "END THREAD: barnnoise"
end

//----------------------------------------------------------->
// Prepares the elvator by assigning the basic settings to it
//----------------------------------------------------------->

elevator_preparation:
println "THREAD: elevator_preperation"

$elevator moveto $waypoint_down // Moves elevator to waypoint_down.
// $elevator_button bind $elevator // Attaches the elevator_button into the elevator, this making it move same time as the elevator.
$elevator time 5 // sets the elevator move time, 4 seconds in this case, could also use the command "speed".
local.elepos = 0 // Defines the position of the elevator. "0 - lift down" "1 - lift up" Default - lift down
goto elevator_standby // standing by and waiting player to activate the trigger

//----------------------------------------------------------->
// Elevator is idle, and waiting user to activate the trigger
//----------------------------------------------------------->

elevator_standby:

println " SUB THREAD: elevator_standby"

//$elevator playsound thefarm_elevator_stop

if (local.elepos == 0)
thread maps/obj/thefarm_message_print.scr::message "Elevator waiting at ground floor" NIL 2
else
thread maps/obj/thefarm_message_print.scr::message "Elevator waiting at 1st floor" NIL 2

$elevator_button waittill trigger

thread maps/obj/thefarm_message_print.scr::message "Elevator activated" NIL 2
println " elevator triggered"

wait 2 // wait 2 seconds

if (local.elepos == 0) // If lift state is down, its better get up.
{
println "elevator down - moving up" //prints this text to console if the developer mode is set.
goto lift_move_up // jumps straight to the "lift_move_up" part in the script
}
else
{
if (local.elepos == 1) // Or maybe lift state is up, and you need to get down?
{
println "elevator up - moving down" //prints this text to console if the developer mode is set.
goto lift_move_down // jumps straight to the "lift_move_down" part in the script
}
}

goto elevator_standby

//----------------------------------------------------------->

lift_move_up:

println " SUB THREAD: lift_move_up"

thread maps/obj/thefarm_message_print.scr::message "Elevator raising to 1st floor" NIL 2

$elevator moveto $waypoint_up //moves the lift to info_waypoint with targetname waypoint_up
//$elevator playsound thefarm_elevator_start
$elevator playsound thefarm_elevator_run
$elevator waitmove //wait till the elevator has completed the move before doing anything else

local.elepos = 1 // it seems the elevator is up now, so we set the local.elepos to 1
goto elevator_standby // Jumps back to the standby part of the script waiting user to activate the trigger

//----------------------------------------------------------->

lift_move_down:

println " SUB THREAD: lift_move_down"

thread maps/obj/thefarm_message_print.scr::message "Elevator dropping to ground floor" NIL 2

$elevator moveto $waypoint_down //moves the lift to info_waypoint with targetname waypoint_down
//$elevator playsound thefarm_elevator_start
$elevator playsound thefarm_elevator_run
$elevator waitmove //wait till the elevator has completed the move before doing anything else

local.elepos = 0 // it seems the elevator is down now, so we set the local.elepos to 1
goto elevator_standby // Jumps back to the standby part of the script waiting user to activate the trigger

//----------------------------------------------------------->

println "END THREAD: elevator_preperation"

end //the end.

bomb_noanimation:
println "THREAD: bomb_noanimation"

if (level.exploders > 0)
{
println (" Level exploders = " + level.exploders)

for (local.i=1;local.i<level.exploders+1;local.i++)
{
if (local.exploder[local.i] != NIL)
{
local.exploder[local.i] anim stop
// println (" Exploder " + local.i + " has had animation turned off")
}
// else
// println (" WARNING -> Exploder " + local.i + " =NIL, can't have animation turned off")
}
}
else
println (" WARNING -> Level exploders = " + level.exploders)

println "END THREAD: bomb_noanimation"
end

setup_spawnpoints:
println "THREAD: setup_spawnpoints"

if (level.planting_team == "allies") // check if the right team is setting the bomb
{
// ok spawn the allies at the bottom, and axis at the top
thread spawn_alliedplayer 1 -1000 -5400 0 1000 6800 0

thread spawn_axisplayer 1 0 -550 0 1800 -1250 0
}
else
{
// ok spawn the axis at the bottom and the allies at the top
thread spawn_axisplayer 1 -1000 -5400 0 1000 6800 0

thread spawn_alliedplayer 1 0 -550 0 1800 -1250 0
}

println "END THREAD: setup_spawnpoints"
end

spawn_alliedplayer local.num local.x1 local.y1 local.z1 local.x2 local.y2 local.z2:
println ("THREAD: spawn_alliedplayer(s) " + local.num + "of @ " + local.x1 + "," + local.y1 + "," + local.z1 + "," + local.x2 + "," + local.y2 + "," + local.z2)

local.x = local.x1
local.y = local.y1
local.z = local.z1

local.xgap = 128
local.ygap = 128
local.zgap = 128

for (local.i=1;local.i<local.num+1;local.i++)
{
local.origin = (local.x local.y local.z)
local.alliedplayer = spawn info_player_allied
local.alliedplayer.origin = self.origin
local.alliedplayer.angles = self.angles

local.x = local.x + local.xgap

if (local.x>local.x2)
{
local.x=local.x1
local.z=local.z+local.zgap
}

local.alliedplayer[i] = spawn info_player_allied
local.alliedplayer[i].origin = (local.x local.y local.z)

if (local.z>local.z2)
local.i=local.num+1;
}

println ("END THREAD: spawn_alliedplayer " + local.num)
end local.alliedplayer

spawn_axisplayer local.num local.x1 local.y1 local.z1 local.x2 local.y2 local.z2:
println ("THREAD: spawn_axisplayer(s) " + local.num + "of @ " + local.x1 + "," + local.y1 + "," + local.z1 + "," + local.x2 + "," + local.y2 + "," + local.z2)

local.x = local.x1
local.y = local.y1
local.z = local.z1

local.xgap = 128
local.ygap = 128
local.zgap = 128

for (local.i=1;local.i<local.num+1;local.i++)
{
local.origin = (local.x local.y local.z)
local.axisplayer = spawn info_player_axis local.model
local.axisdplayer.origin = local.origin
local.axisplayer.angles = (0 90 0)

local.x = local.x + local.xgap

if (local.x>local.x2)
{
local.x=local.x1
local.z=local.z+local.zgap
}

local.alliedplayer[i] = spawn info_player_allied
local.alliedplayer[i].origin = (local.x local.y local.z)

if (local.z>local.z2)
local.i=local.num+1
}

println ("END THREAD: spawn_axisplayer " + local.num)
end local.axisplayer

//************************************************** **********************************
//*** displays text in the center of the screen
//*** mainly used for hint text (default), but can be for anything
//*** syntax --------------------------------
//*** message <string> [no hint text | non-NIL - will display, NIL - won't display] [time to leave message up, default 5 | 0 - means default]
//************************************************** **********************************
objmessage local.string local.hint local.time:

println ("Obj message: " + local.string)

//*** check to make sure a valid string was passed
if (local.string == NIL)
{
println "^~^~^ A non-valid string was passed for a hint-message!!"
goto message_false_end
}

//*** check to see if they want default time
if (local.time == 0 || local.time == NIL)
{
local.time = 5
}

// dont do this, replace immediate
//*** check to see if a message is already up, if so, wait till you get the goahead
//while (level.objmessage_onscreen == 1)
//{
// level.objmessage_waiting = 1
// wait .2
//}

//*** set the waiting variables for when another message is waiting
level.objmessage_onscreen = 1
level.objmessage_waiting = 0

//*** turn off the indexes incase theres a message up there
huddraw_alpha 28 0
huddraw_alpha 29 0

//*** assign huddraw elements
huddraw_string 28 "HINT:"
huddraw_align 28 center center
huddraw_rect 28 -150 50 0 0

//*** format the string
local.formatted_string = waitthread global/string_format.scr::str_format local.string 47

huddraw_string 29 local.formatted_string
huddraw_align 29 center center
huddraw_rect 29 -100 50 0 0

//*** check to see if they want HINT to appear
//*** fade the text onto the screen
if (local.hint != NIL)
{
for (local.j = 0 ; local.j <= 1 ; local.j += .2)
{
huddraw_alpha 28 local.j
huddraw_alpha 29 local.j
waitframe
}
}
else
{
for (local.k = 0 ; local.k <= 1 ; local.k += .2)
{
huddraw_alpha 28 0
huddraw_alpha 29 local.k
waitframe
}
}

//*** wait cycle, takes into account if another message is put up, to reset the time
for (local.i = 1 ; local.i <= local.time ; local.i ++)
{
wait 1

//*** check to see if another message is waiting to get on the screen
if (level.objmessage_waiting == 1)
{
goto message_abort
}
}

//*** fade the text off the screen
if (local.hint != NIL)
{
for (local.m = 1 ; local.m >= 0 ; local.m -= .2)
{
huddraw_alpha 28 local.m
huddraw_alpha 29 local.m
waitframe
}
}
else
{
for (local.n = 1 ; local.n >= 0 ; local.n -= .2)
{
huddraw_alpha 28 0
huddraw_alpha 29 local.n
waitframe
}
}

message_abort:
level.objmessage_onscreen = 0

end

showmenu:

if (level.targets_to_destroy>0)
{
level.objectivesleft = level.targets_to_destroy - level.targets_destroyed

if (level.objectivesleft <1)
level.objectivesleft = "Targets:None"
else
level.objectivesleft = ("ALLIED Targets left: " + level.objectivesleft)

thread objmessage level.objectivesleft
}

if (level.targets_to_destroy2 > 0)
{
level.objectivesleft = level.targets_to_destroy2 - level.targets_destroyed2

if (level.objectivesleft2 <1)
level.objectivesleft = "Targets:None"
else
level.objectivesleft = ("AXIS Targets left: " + level.objectivesleft2)

thread objmessage level.objectivesleft
}
end

ladder_control:

if (level.barnladders == 0)
{
$barnladder1 hide
$barnladder1 remove

$barnladder2 hide
$barnladder2 remove
}

end

village_control:

// ROAD BLOCK
if ($villagestop == NULL)
level.villagestops = 0
else
level.villagestops = $villagestop.size

println ("Level villagestops = " + level.villagestops)

if (level.villagestops > 0)
{
level.villagestop = exec global/makearray.scr $villagestop

for (local.i=1;local.i<level.villagestops+1;local.i++)
{
if (level.village == "1")
{
level.villagestop[local.i] hide
level.villagestop[local.i] remove

println ("Removed villagestop " + local.i)
}
else
{
level.villagestop[local.i] show
level.villagestop[local.i] solid

println ("Spawned villagestop " + local.i)
}
}
}

// TREES
if ($villagetrees == NULL)
level.hqtrees = 0
else
level.hqtrees = $villagetrees.size

println ("Level hqtrees = " + level.hqtrees)

if (level.hqtrees > 0)
{
level.hqtree = exec global/makearray.scr $villagetrees

for (local.i=1;local.i<level.hqtrees+1;local.i++)
{
if (level.showhqtrees == "0")
{
level.hqtree[local.i] hide
level.hqtree[local.i] remove

println ("Removed hqtree " + local.i)
}
else
{
level.hqtree[local.i] show
level.hqtree[local.i] solid

println ("Spawned hqtree " + local.i)
}
}
}

end

solidify:
println "THREAD: solidify"

level waittill spawn
self solid
self disconnect_paths

println "END THREAD: solidify = " // + self.targetname)
end

//***********************************************
// fourth thread... controls the explosion
//***********************************************
planebomb:

println "THREAD: planebomb"

thread jitter_large 0 // do a large screen shake

self playsound ("stonecrash0" + (randomint(3) + 1))
wait 0.1
self playsound ("stonecrash0" + (randomint(3) + 1))
wait 0.1
self playsound ("stonecrash0" + (randomint(3) + 1))

//local.explosion_fx =
//local.explosion_sound =
local.bomb_damage = 90
local.bomb_explosion_radius = 500

if (local.explosion_fx != NIL)
{
println " executing explosion fx"
self thread spawn_fx local.explosion_fx // show an explosion
}
else
println " bypassing explosion fx"

if (local.explosion_sound != NIL)
{
println " executing explosion sound"
self playsound local.explosion_sound // make a noise
}
else
println " bypassing explosion sound"

radiusdamage self.origin local.bomb_damage local.bomb_explosion_radius // do some damage in the local area

//if (self.killarea != NIL)
// self.killarea volumedamage 1000 // kill in this area

self hide // remove the bomb

println "END THREAD: planebomb"
end

flyby:

//***random flyby of plane
wait 30.0

flybystart:

thread maps/obj/thefarm_bomber.scr::bomb 1 1
// thread global/bomber.scr::bomb 6
// thread global/bomber.scr::bomb 7
// thread global/bomber.scr::bomb 8

wait (randomint(60) + 45)

goto flybystart // infinate loop

end

// centerprint
  
Reply With Quote