Page 1 of 3
Help! My alarm crashes the game!
Posted: Tue Feb 25, 2003 11:32 pm
by matt_moh

I tried to put an alarm in my map. The AI goes to it, pulls the alarm, and then the level crashes and goes back to the main menu. Could it have anything to do with the
setthread/alarm_player_reset key/value for my trigger use or the fact that I am running my level with spearhead

Also, the switch on the alarm moves when the AI pulls it, but when the player pulls it nothing happens. I took a look at the global/alarmer.scr file and read the new tutorial on this site but still, I had the same problems. Help would be greatly appreciated.

Posted: Wed Feb 26, 2003 7:16 am
by jv_map
I'm sure the console gives you an error.
"Command overflow. Possible infinite loop in thread" ?
Posted: Wed Feb 26, 2003 11:41 am
by mohaa_rox
BTW, I wrote it. I had this prob too then, but you can take a look at the example map.
Posted: Wed Feb 26, 2003 11:14 pm
by matt_moh

Thanks, jv_map. The console does give me the "ERROR Command Overflow. Possibe infintite loop in thread." Does anyone know how to fix that?

Posted: Thu Feb 27, 2003 11:12 am
by mohaa_rox
Did you follow everything? The targetname of the alarm? The targetname of the spawners (ai spawners).
Posted: Thu Feb 27, 2003 8:23 pm
by matt_moh
I don't have any alarm spawners. Once an alarm is pulled, a cinema scene starts and the level ends. Because of this, I have no need for alarm spawners. Could that be the problem?
I have 2 alarms, each with a targetname and $targetname of alarm.
Each has a trigger_use around it with setthread/alarm_player_reset.
There are also 3 enemies with all the default settings except for a typeattack of alarm and a targetname of enemy.
In my script I have:
//Nijmegen Bridge Part 1//
main:
$cutwire1 hide
$cutwire4 hide
exec global/loadout.scr maps/test_Nijmegen_Bridge_Part_1.scr
exec global/ai.scr
exec global/alarmer.scr
exec global/turret.scr
level waittill prespawn
exec global/exploder.scr
exec global/spotlight.scr
exec global/ambient.scr test_Nijmegen_Bridge_Part_1
$player stufftext "tmstartloop sound/music/mus_04a_suspense.mp3"
level waittill spawn
end
Further down in the script I have:
alarmer:
end
alarm_player_reset:
thread global/alarmer.scr::alarm_player_reset
end
I tried it without these two threads and still had problems. I only put them in because I saw them in the script for m4l3.
Hopefuly this info will help you guys find the problem.
Posted: Fri Feb 28, 2003 2:00 am
by mohaa_rox
No wonder it doesn't work. You must add alarmspawners.
Posted: Fri Feb 28, 2003 3:32 am
by matt_moh
Thanks mohaa_rox. I'll try adding an alarm spawner. Mabe I can put him in the cinema scene.

Posted: Thu Mar 06, 2003 9:21 am
by bdbodger
I had the same problem with the global/alarmer.scr . I compliled it for spearhead and crashes exactly as above even with everything by the book . then I compiled it with the mohaa compilers worked good it's a spearhead thing . looks like a job for jv , rox or inkeeper maybe .
Posted: Thu Mar 06, 2003 10:55 am
by bdbodger
ok after haveing a look and some experementing I have the answer .
change this in alarmer.scr
level waittill prespawn
while ($alarmspawner)
{
local.ent = waitthread global/spawner.scr::spawner_create $alarmspawner[1]
local.ent.targetname = "alarmspawned"
}
to this
level waittill prespawn
for(local.i=1;local.i< $alarmspawner.size+1;local.i++)
{
local.ent = waitthread global/spawner.scr::spawner_create $alarmspawner[local.i]
local.ent.targetname = "alarmspawned"
}
then save it as alarmer2.scr and put it in the global directory or your .pk3
then in your script before waittill prespawn put
exec global/alarmer2.scr
The problem was the original script kept spawning script origins until the game crashed with a no free edict error syntax different in spearhead
Posted: Sat Dec 13, 2003 12:45 am
by Gold
ok hope ya guys can help on this one hehehe,,ok 1st i did as bdbodger suggested and changed the alamer.scr to keep it from crashing in spearhead,,,ok next i loaded a existing map which i knew had all the required triggers etc,,for the alarms,,,ok now the thing is the map i am loading into multiplayer is m6l2a,,,which was originally single player of course,,,even with the original script loaded along side the original bsp,,,i still cant turn the alarms off or on,,,now the ai guys turn them on ,,,but i cant hehehe,,,any ideas why this isnt working in multiplayer would be greatly apprieciated
<TWZ>Gold<<mohha freak
Posted: Sat Dec 13, 2003 11:48 am
by bdbodger
The problem with the global/alarmer.scr is it was ment for single player where there is only one $player . I have adapted it for you for multeplayer mohaa and speearhead just copy this and name it alarmer_MP.scr and run it instead of the global/alarmer.scr
Code: Select all
// Alarm system used in m4l3 and m6l2a. Created by Mackey McCandlish and calibrated with Steve Fukuda.
//
// Before level waittill prespawn: "exec global/alarmer.scr"
// Anybody with targetname "enemy" will try to ring the alarm.
// Alarms are animate_equipment_alarmswitch with targetname "alarm" and they point away from the surface they're placed against.
// The alarm spawners are AI placed in the level with targetname "alarmspawner".
// The Alarm triggers are "trigger_use"s with setthread "alarm_player_reset". They encompass the actual alarm.
// You can set level.alarm_always_on to 1 and the alarm will come back on after 14-20 seconds.
//
//
// *********************************************************************************************
//
// remodded for mohaa/spearhead multiplayer by Bdbodger
//**********************************************************************************************
main:
level.alarm_always_on = 0
level.alarm_always_on_base = 14
level.alarm_always_on_random = 7
level.alarm_time = 0
level.alarm_time_base = 14
level.alarm_time_random = 5
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] notsolid
level waittill prespawn
for(local.i=1;local.i< $alarmspawner.size+1;local.i++)
{
local.ent = waitthread global/spawner.scr::spawner_create $alarmspawner[local.i]
local.ent.targetname = "alarmspawned"
}
level waittill spawn
thread alarmprep_MP
//thread alarmgenner
//$player.alarmoff = level.time + 1
//thread alarmer
/*
$endgate_left time 1
$endgate_right time 1
$endgate_right rotateyup 80
$endgate_right move
$endgate_left rotateydown 100
$endgate_left waitmove
$endgate_left connect_paths
$endgate_right connect_paths
*/
end
alarmprep_MP:
while(1)
{
for(local.i=1;local.i <= $player.size;local.i++)
{
if($player[local.1].alarmprep != 1)
{
$player[local.1].alarmprep = 1
thread alarmgenner $player[local.1]
$player[local.i].alarmoff = level.time + 1
thread alarmer $player[local.1]
}
}
}
end
doalarm local.player:
level.alarmers++
println "doing alarm"
local.range = 5000
local.alarm = -1
println ("Enemy " + (vector_length (self.origin - local.player.origin)) + " distance away is doing alarm and is in thinkstate " + self.thinkstate)
for (local.i=1;local.i<$alarm.size+1;local.i++)
{
local.temprange = vector_length (self.origin - $alarm[local.i].origin)
if ((local.temprange < local.range) && (vector_length (local.player.origin - $alarm[local.i].origin) > local.temprange))
{
local.range = local.temprange
local.alarm = local.i
}
}
if (local.alarm != -1)
{
local.break = 0
local.timer = level.time + 12
thread de-alarmer
local.org = angles_toforward ($alarm[local.alarm].angles)
// local.org = ((local.org * 30) + ($alarm[local.alarm].origin)) + ( 0 0 -25 )
local.org = ((local.org * 35) + ($alarm[local.alarm].origin)) + ( 0 0 -30 )
local.ent = spawn script_origin
local.ent.origin = local.org
local.ent droptofloor
local.org = local.ent.origin
local.ent delete
wait (randomfloat(2.3))
self exec global/disable_ai.scr
// self type_attack "alarm"
// local.ent = spawn script_origin
// local.ent.origin = local.org
// self alarmnode local.ent
// self alarmthread "alarmreg"
// println "should be running for alarm"
// waitframe
self.movedoneradius = 15
while ((isalive self) && (local.break == 0) && (level.time < local.timer))
{
self runto local.org
self waittill movedone
if (level.alarm_on == 0)
{
if (vector_length (self.origin - $alarm[local.alarm].origin) < 90)
{
self.turndoneerror = 10
self turnto $alarm[local.alarm]
self waittill turndone
self anim alarm_switchon
self playsound alarm_switch
local.break = 1
wait 0.2
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
wait 0.5
level.alarm_on = 1
}
}
else
local.break = 1
wait 1
}
}
else
level.alarmers--
if (isalive self)
self exec global/enable_ai.scr
end
de-alarmer:
wait 12
level.alarmers--
end
alarmreg:
end
/*
alarmreg local.player:
// self runto local.org // $alarm[local.alarm]
self waittill movedone
if (parm.movefail == 1)
{
local.break = 1
level.alarmers--
self.targetname = "enemy_noalarm"
local.oldalarm = $alarm[local.alarm]
local.oldalarm.targetname = "alarm_noalarm"
wait 5
self runto local.player
self.targetname = "enemy"
local.oldalarm.targetname = "alarm"
end
}
else
wait 1
}
}
self exec global/enable_ai.scr
end
*/
alarm_player_reset:
local.player=parm.other
if (level.time > local.player.alarmoff)
{
local.player.alarmoff = level.time + 1
if (level.alarm_on == 1)
{
level.alarm_on = 0
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnoff
self playsound alarm_switch
if (level.alarm_time - level.time < 5)
level.alarm_time = level.time + (level.alarm_time_base + randomint(alarm_time_random))
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] stoploopsound
level.alarm_sound stoploopsound
if (level.alarm_always_on == 1)
wait (level.alarm_always_on_base + randomint(level.alarm_always_on_random))
if (level.alarm_always_on == 1)
{
if (level.alarm_on == 0)
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
}
}
else
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
}
// local.alarmbell thread global/loopsound.scr::main alarmbell // Ring the alarm bell
end
turn_alarm_on:
if (level.alarm_on == 0)
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
end
alarmsounder local.player:
level.alarm_sound = spawn script_model
// level.alarm_sound thread playersoundorg
level.alarm_sound model "fx/dummy.tik"
level.alarm_sound notsolid
while (1)
{
if (level.alarm_on == 1)
{
local.range = 1400
for (local.i=1;local.i<$alarm.size+1;local.i++)
{
local.newrange = vector_length ( local.player.origin - $alarm[local.i].origin)
if (local.newrange < local.range)
{
// $alarm[local.i] loopsound alarmbell
local.range = local.newrange
}
// waitframe
}
/*
1400 50 1400
0.2 1.5 0.2
1.7 0.2 1.7
1.5
*/
local.vol = (1.5 / 1350) * (local.range)
local.vol = 1.5 - local.vol
if (local.vol < 0.2)
local.vol = 0.2
else
if (local.vol > 1.5)
local.vol = 1.5
// println ("range is " + local.range + " and vol is " + local.vol)
level.alarm_sound loopsound alarmbell local.vol "levelwide"
}
waitframe
}
end
alarmgenner local.player:
if (level.alarm_nosound == NIL)
thread alarmsounder
local.timer = level.time
while (((local.player.dmteam == "axis")||(local.player.dmteam == "allies")) && (isalive local.player ))
{
if (level.alarm_on == 1)
{
if (level.time > local.timer)
{
//local.key = getboundkey1 "+use"
//iprintlnbold_noloc (loc_convert_string "Approach alarms and press the USE key ( ") local.key (loc_convert_string " ) to toggle them off or on.")
local.timer = level.time + 12
}
while (level.totalspawnies < 2)
{
waitthread create_alarmguy local.player
wait randomint (3)
}
}
else
local.timer = level.time + 45
wait 1
}
self.alarmprep = 0
end
create_alarmguy local.player:
local.range = 5000
local.entnum = -1
local.num = 0
// local.spawner = -1
for (local.i=1;local.i<$alarmspawned.size+1;local.i++)
{
if !(sighttrace (local.player.origin + (0 0 50)) ($alarmspawned[local.i].origin + (0 0 50)) 1)
{
local.num++
local.spawner[local.num] = $alarmspawned[local.i]
println ("prepped a spawner at " + local.spawner[local.num].origin + " with num " + local.num)
}
wait 0.1
}
if (local.spawner == NIL)
end
local.lastnum = -1
for (local.i=1;local.i<local.num+1;local.i++)
{
local.temprange = vector_length (local.player.origin - local.spawner[local.i].origin)
println ("checking local spawner " + local.i + " and local num is " + local.num + " at range " + local.temprange)
if (local.temprange < local.range)
{
local.range = local.temprange
local.lastnum = local.entnum
local.entnum = local.i
}
}
if (local.lastnum != -1)
local.entnum = local.lastnum
if (local.entnum != -1)
{
local.ent = waitthread global/spawner.scr::spawner_activate local.spawner[local.entnum]
local.ent.targetname = "alarm_spawned_guy"
local.ent thread spawnerthink local.player
}
else
{
println "-------------------"
println local.range
println local.lastnum
println local.entnum
println "-------------------"
}
end
runcheck:
if (level.runcheck)
level.runcheck delete
level.runcheck = local
while (isalive self)
{
if (getcvar(debug) == "1")
println ("A spawned guy is at " + self.origin + " with thinkstate " + self.thinkstate)
wait 1
}
end
spawnerthink local.player:
if (game.skill == "hard")
if (randomint(100) > 60)
self item items/item_25_healthbox.tik 25
self ammo_grenade (randomint(4) + 1)
self mindist 128
self leash 8000
self maxdist 400
self fixedleash 0
self.movedoneradius = 450
wait randomfloat(3)
level.totalspawnies++
thread baddeath
self.nosurprise = 1
local.origin = self.origin
self thread level.script::alarmer local.player
self forceactivate
wait 1
if (self.thinkstate == "idle")
{
println ("spawned guy is running to the player from " + self.origin)
self thread runcheck
self runto local.player
self waittill movedone
self attackplayer
// println ("movefail is " + parm.movefail)
if ((parm.movefail == 1) && !(sighttrace (local.player.origin + (0 0 50)) (self.origin + (0 0 50)) 1) && (vector_length (self.origin - local.origin) < 100))
self damage $world 15000 $world (0 0 0) (0 0 0) (0 0 0) 0 9 0 0
}
while (isalive self)
{
println ("spawned guy is running to the player from " + self.origin)
self runto local.player
self waittill movedone
self attackplayer
wait 2
}
end
baddeath:
self waittill death
println "I die!"
level.totalspawnies--
end
debugprint:
while (1)
{
println ("alarmers = " + level.alarmers + " baddies " + level.totalspawnies)
wait 1
}
end
alarmer local.player:
level.alarmers = 0
level.totalspawnies = 0
level.alarm_on = 0
if (getcvar(skill) == "0")
local.alarmcount = 0
else
local.alarmcount = 1
if (getcvar(debug) == "1")
thread debugprint
while (1)
{
while ((level.alarmers > local.alarmcount) || (level.alarm_on == 1) || (level.time < level.alarm_time))
wait 1
wait randomfloat(2)
local.ent = -1
local.lastent = -1
local.range = 1500
for (local.i=1;local.i<$enemy.size+1;local.i++)
{
if ((isalive $enemy[local.i]) && ($enemy[local.i].thinkstate != "idle")) // ($enemy[local.i] cansee $player))
{
local.newrange = vector_length ($enemy[local.i].origin - local.player.origin)
if (local.newrange < local.range)
{
local.range = local.newrange
local.ent = local.i
/*
if (local.lastent == -1)
{
local.ent = local.lastent
local.lastent = local.i
}
else
{
local.lastent = local.i
local.ent = local.i
}
*/
}
}
// else
// println ("thinkstate is " + $enemy[local.i].thinkstate)
}
if (local.ent != -1)
{
if (game.skill == "hard")
$enemy[local.ent] thread doalarm local.player
else
if (sighttrace ($enemy[local.ent].origin + (0 0 50)) (local.player + (0 0 50)) 1)
$enemy[local.ent] thread doalarm local.player
}
/*
else
if (local.lastent != -1)
if (level.enemy[local.lastent] cansee local.player)
level.enemy[local.lastent] thread bridgeblownow (randomint(3))
*/
wait 2
}
end
alarms
Posted: Sat Dec 13, 2003 6:43 pm
by Gold
thanx so much for the time ya must have put into scripting that,,,thing is i still dont understand why i cant get it to work lol,,,i have the piano working and the cello,,also all sounds ,,but no matter what i seem to try i cant get the alarms moving or sounding off,,,heres the lines i changed in the script
exec global/alarmer_MP.scr
and then i added this to the end of the script
//working alarms
alarm_player_reset:
thread global/alarmer_MP.scr::alarm_player_reset
end
what am i missing?lol
<TWZ>Gold<<mohha freak
p.s. tried it in mohha and spearhead both ,,same results
Posted: Sat Dec 13, 2003 7:19 pm
by bdbodger
I didn't test it myself but it should work of course I could have made a typo too .
Did you put it in the right place and did you get any errors in the console ?
Code: Select all
main:
exec global/alarmer_MP.scr // put before level waittill prespawn
level waittill prespawn
...
...
end
alarm_player_reset:
thread global/alarmer_MP.scr::alarm_player_reset
end
and I guess you should change this too or you will get a infinate thread in script error , this could be what is stopping it from working .
Code: Select all
while(1)
{
for(local.i=1;local.i <= $player.size;local.i++)
{
if($player[local.1].alarmprep != 1)
{
$player[local.1].alarmprep = 1
thread alarmgenner $player[local.1]
$player[local.i].alarmoff = level.time + 1
thread alarmer $player[local.1]
}
}
//*********************************************
// add this to the script
//*********************************************
waitframe
//**********************************************
// before the last } bracket
//**********************************************
}
end
alarms
Posted: Sat Dec 13, 2003 10:09 pm
by Gold
ok did as ya suggested and still no work,,,heres what the console is saying
if($player[local.1].alarmprep != 1) (global/alarmer_mp.scr, 65)
if($player[local^
^~^~^ Script file compile error: Couldn't parse 'global/alarmer_mp.scr'
ScriptMaster::GetScript: Script 'global//alarmer_mp.scr' was not properly loaded
ok when i walked over to a alarm and hit the e key to activate it i got the following error in console,,which tells me at least its trying to work hehehehe
thread global/alarmer_MP.scr::alarm_player_reset (maps/m6l2a.scr, 279)
^
^~^~^ Script Error: Script 'global/alarmer_MP.scr' was not properly loaded
thread global/alarmer_MP.scr::alarm_player_reset (maps/m6l2a.scr, 279)
^
^~^~^ Script Error: Script 'global/alarmer_MP.scr' was not properly loaded
which that got me excited believe it or not,,lol,,,man i would really have got excited if alarm would have soundecd off
ok just to make sure i have the alarm script correct now,,i will post it once more
main:
level.alarm_always_on = 0
level.alarm_always_on_base = 14
level.alarm_always_on_random = 7
level.alarm_time = 0
level.alarm_time_base = 14
level.alarm_time_random = 5
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] notsolid
level waittill prespawn
for(local.i=1;local.i< $alarmspawner.size+1;local.i++)
{
local.ent = waitthread global/spawner.scr::spawner_create $alarmspawner[local.i]
local.ent.targetname = "alarmspawned"
}
level waittill spawn
thread alarmprep_MP
//thread alarmgenner
//$player.alarmoff = level.time + 1
//thread alarmer
/*
$endgate_left time 1
$endgate_right time 1
$endgate_right rotateyup 80
$endgate_right move
$endgate_left rotateydown 100
$endgate_left waitmove
$endgate_left connect_paths
$endgate_right connect_paths
*/
end
alarmprep_MP:
while(1)
{
for(local.i=1;local.i <= $player.size;local.i++)
{
if($player[local.1].alarmprep != 1)
{
$player[local.1].alarmprep = 1
thread alarmgenner $player[local.1]
$player[local.i].alarmoff = level.time + 1
thread alarmer $player[local.1]
}
}
//*********************************************
// add this to the script
//*********************************************
waitframe
//**********************************************
// before the last } bracket
//**********************************************
}
end
doalarm local.player:
level.alarmers++
println "doing alarm"
local.range = 5000
local.alarm = -1
println ("Enemy " + (vector_length (self.origin - local.player.origin)) + " distance away is doing alarm and is in thinkstate " + self.thinkstate)
for (local.i=1;local.i<$alarm.size+1;local.i++)
{
local.temprange = vector_length (self.origin - $alarm[local.i].origin)
if ((local.temprange < local.range) && (vector_length (local.player.origin - $alarm[local.i].origin) > local.temprange))
{
local.range = local.temprange
local.alarm = local.i
}
}
if (local.alarm != -1)
{
local.break = 0
local.timer = level.time + 12
thread de-alarmer
local.org = angles_toforward ($alarm[local.alarm].angles)
// local.org = ((local.org * 30) + ($alarm[local.alarm].origin)) + ( 0 0 -25 )
local.org = ((local.org * 35) + ($alarm[local.alarm].origin)) + ( 0 0 -30 )
local.ent = spawn script_origin
local.ent.origin = local.org
local.ent droptofloor
local.org = local.ent.origin
local.ent delete
wait (randomfloat(2.3))
self exec global/disable_ai.scr
// self type_attack "alarm"
// local.ent = spawn script_origin
// local.ent.origin = local.org
// self alarmnode local.ent
// self alarmthread "alarmreg"
// println "should be running for alarm"
// waitframe
self.movedoneradius = 15
while ((isalive self) && (local.break == 0) && (level.time < local.timer))
{
self runto local.org
self waittill movedone
if (level.alarm_on == 0)
{
if (vector_length (self.origin - $alarm[local.alarm].origin) < 90)
{
self.turndoneerror = 10
self turnto $alarm[local.alarm]
self waittill turndone
self anim alarm_switchon
self playsound alarm_switch
local.break = 1
wait 0.2
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
wait 0.5
level.alarm_on = 1
}
}
else
local.break = 1
wait 1
}
}
else
level.alarmers--
if (isalive self)
self exec global/enable_ai.scr
end
de-alarmer:
wait 12
level.alarmers--
end
alarmreg:
end
/*
alarmreg local.player:
// self runto local.org // $alarm[local.alarm]
self waittill movedone
if (parm.movefail == 1)
{
local.break = 1
level.alarmers--
self.targetname = "enemy_noalarm"
local.oldalarm = $alarm[local.alarm]
local.oldalarm.targetname = "alarm_noalarm"
wait 5
self runto local.player
self.targetname = "enemy"
local.oldalarm.targetname = "alarm"
end
}
else
wait 1
}
}
self exec global/enable_ai.scr
end
*/
alarm_player_reset:
local.player=parm.other
if (level.time > local.player.alarmoff)
{
local.player.alarmoff = level.time + 1
if (level.alarm_on == 1)
{
level.alarm_on = 0
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnoff
self playsound alarm_switch
if (level.alarm_time - level.time < 5)
level.alarm_time = level.time + (level.alarm_time_base + randomint(alarm_time_random))
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] stoploopsound
level.alarm_sound stoploopsound
if (level.alarm_always_on == 1)
wait (level.alarm_always_on_base + randomint(level.alarm_always_on_random))
if (level.alarm_always_on == 1)
{
if (level.alarm_on == 0)
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
}
}
else
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
}
// local.alarmbell thread global/loopsound.scr::main alarmbell // Ring the alarm bell
end
turn_alarm_on:
if (level.alarm_on == 0)
{
level.alarm_on = 1
for (local.i=1;local.i<$alarm.size+1;local.i++)
$alarm[local.i] anim turnon
self playsound alarm_switch
wait 0.5
// for (local.i=1;local.i<$alarm.size+1;local.i++)
// $alarm[local.i] loopsound alarmbell
}
end
alarmsounder local.player:
level.alarm_sound = spawn script_model
// level.alarm_sound thread playersoundorg
level.alarm_sound model "fx/dummy.tik"
level.alarm_sound notsolid
while (1)
{
if (level.alarm_on == 1)
{
local.range = 1400
for (local.i=1;local.i<$alarm.size+1;local.i++)
{
local.newrange = vector_length ( local.player.origin - $alarm[local.i].origin)
if (local.newrange < local.range)
{
// $alarm[local.i] loopsound alarmbell
local.range = local.newrange
}
// waitframe
}
/*
1400 50 1400
0.2 1.5 0.2
1.7 0.2 1.7
1.5
*/
local.vol = (1.5 / 1350) * (local.range)
local.vol = 1.5 - local.vol
if (local.vol < 0.2)
local.vol = 0.2
else
if (local.vol > 1.5)
local.vol = 1.5
// println ("range is " + local.range + " and vol is " + local.vol)
level.alarm_sound loopsound alarmbell local.vol "levelwide"
}
waitframe
}
end
alarmgenner local.player:
if (level.alarm_nosound == NIL)
thread alarmsounder
local.timer = level.time
while (((local.player.dmteam == "axis")||(local.player.dmteam == "allies")) && (isalive local.player ))
{
if (level.alarm_on == 1)
{
if (level.time > local.timer)
{
//local.key = getboundkey1 "+use"
//iprintlnbold_noloc (loc_convert_string "Approach alarms and press the USE key ( ") local.key (loc_convert_string " ) to toggle them off or on.")
local.timer = level.time + 12
}
while (level.totalspawnies < 2)
{
waitthread create_alarmguy local.player
wait randomint (3)
}
}
else
local.timer = level.time + 45
wait 1
}
self.alarmprep = 0
end
create_alarmguy local.player:
local.range = 5000
local.entnum = -1
local.num = 0
// local.spawner = -1
for (local.i=1;local.i<$alarmspawned.size+1;local.i++)
{
if !(sighttrace (local.player.origin + (0 0 50)) ($alarmspawned[local.i].origin + (0 0 50)) 1)
{
local.num++
local.spawner[local.num] = $alarmspawned[local.i]
println ("prepped a spawner at " + local.spawner[local.num].origin + " with num " + local.num)
}
wait 0.1
}
if (local.spawner == NIL)
end
local.lastnum = -1
for (local.i=1;local.i<local.num+1;local.i++)
{
local.temprange = vector_length (local.player.origin - local.spawner[local.i].origin)
println ("checking local spawner " + local.i + " and local num is " + local.num + " at range " + local.temprange)
if (local.temprange < local.range)
{
local.range = local.temprange
local.lastnum = local.entnum
local.entnum = local.i
}
}
if (local.lastnum != -1)
local.entnum = local.lastnum
if (local.entnum != -1)
{
local.ent = waitthread global/spawner.scr::spawner_activate local.spawner[local.entnum]
local.ent.targetname = "alarm_spawned_guy"
local.ent thread spawnerthink local.player
}
else
{
println "-------------------"
println local.range
println local.lastnum
println local.entnum
println "-------------------"
}
end
runcheck:
if (level.runcheck)
level.runcheck delete
level.runcheck = local
while (isalive self)
{
if (getcvar(debug) == "1")
println ("A spawned guy is at " + self.origin + " with thinkstate " + self.thinkstate)
wait 1
}
end
spawnerthink local.player:
if (game.skill == "hard")
if (randomint(100) > 60)
self item items/item_25_healthbox.tik 25
self ammo_grenade (randomint(4) + 1)
self mindist 128
self leash 8000
self maxdist 400
self fixedleash 0
self.movedoneradius = 450
wait randomfloat(3)
level.totalspawnies++
thread baddeath
self.nosurprise = 1
local.origin = self.origin
self thread level.script::alarmer local.player
self forceactivate
wait 1
if (self.thinkstate == "idle")
{
println ("spawned guy is running to the player from " + self.origin)
self thread runcheck
self runto local.player
self waittill movedone
self attackplayer
// println ("movefail is " + parm.movefail)
if ((parm.movefail == 1) && !(sighttrace (local.player.origin + (0 0 50)) (self.origin + (0 0 50)) 1) && (vector_length (self.origin - local.origin) < 100))
self damage $world 15000 $world (0 0 0) (0 0 0) (0 0 0) 0 9 0 0
}
while (isalive self)
{
println ("spawned guy is running to the player from " + self.origin)
self runto local.player
self waittill movedone
self attackplayer
wait 2
}
end
baddeath:
self waittill death
println "I die!"
level.totalspawnies--
end
debugprint:
while (1)
{
println ("alarmers = " + level.alarmers + " baddies " + level.totalspawnies)
wait 1
}
end
alarmer local.player:
level.alarmers = 0
level.totalspawnies = 0
level.alarm_on = 0
if (getcvar(skill) == "0")
local.alarmcount = 0
else
local.alarmcount = 1
if (getcvar(debug) == "1")
thread debugprint
while (1)
{
while ((level.alarmers > local.alarmcount) || (level.alarm_on == 1) || (level.time < level.alarm_time))
wait 1
wait randomfloat(2)
local.ent = -1
local.lastent = -1
local.range = 1500
for (local.i=1;local.i<$enemy.size+1;local.i++)
{
if ((isalive $enemy[local.i]) && ($enemy[local.i].thinkstate != "idle")) // ($enemy[local.i] cansee $player))
{
local.newrange = vector_length ($enemy[local.i].origin - local.player.origin)
if (local.newrange < local.range)
{
local.range = local.newrange
local.ent = local.i
/*
if (local.lastent == -1)
{
local.ent = local.lastent
local.lastent = local.i
}
else
{
local.lastent = local.i
local.ent = local.i
}
*/
}
}
// else
// println ("thinkstate is " + $enemy[local.i].thinkstate)
}
if (local.ent != -1)
{
if (game.skill == "hard")
$enemy[local.ent] thread doalarm local.player
else
if (sighttrace ($enemy[local.ent].origin + (0 0 50)) (local.player + (0 0 50)) 1)
$enemy[local.ent] thread doalarm local.player
}
/*
else
if (local.lastent != -1)
if (level.enemy[local.lastent] cansee local.player)
level.enemy[local.lastent] thread bridgeblownow (randomint(3))
*/
wait 2
}
end