Duncan Weir made this script, from the minefield script, a long time ago. It is a seperate script from your map's main script and goes in the global folder in main.
//***************************************************************
//*** death_water script
//*** modifed version of the MOHAA minefield
//*** modifed by Duncan Weir May 2002
//*** The player enters the water, and within 10 secs
//*** if he's still in the water he'll start to drown.
//
//*** The main thread is called by this script and should not be called by the
//*** level script itsself. Use "exec global/death_water.scr::deathwater_setup"
//*** in your level script and place this script in global.
//
//*** syntax ------------------------------------
//
// trigger_multiple settings
// targetname = deathwater<index number for the array of deathwater triggers>
// #startdrowntime = set to number of seconds a player can be in the water
// before drowning starts // default 10
// #timetodrown = set to number of seconds a player takes to
// drown // default 10
//***************************************************************
deathwater local.index:
thread debugtext ("THREAD: deathwater = " + local.index)
if ($deathwater[local.index].startdrowntime == NIL)
local.startdrowntime = 10
else
local.startdrowntime = $deathwater[local.index].startdrowntime
if ($deathwater[local.index].timetodrown == NIL)
local.timetodrown = 10
else
local.timetodrown = $deathwater[local.index].timetodrown
local.radius = 40 // radius of the damage - only in local player area
thread debugtext (" Radius = " + local.radius)
local.damage = 100 / local.timetodrown // calculate damage per second
thread debugtext (" Damage = " + local.damage)
deathwater_loop:
thread debugtext "THREAD: deathwater_loop"
$deathwater[local.index] waittill trigger
local.sucker = parm.other // gets the player info
thread debugtext " deathwater triggered"
thread debugtext (" local.sucker = " + local.sucker)
wait ( local.startdrowntime )
deathwater_drown_loop:
if (local.sucker istouching $deathwater[local.index] == 1)
{
thread debugtext " Player is drowning"
radiusdamage local.sucker.origin local.damage local.radius
wait 1 // wait 1 second
goto deathwater_drown_loop
}
goto deathwater_loop
thread debugtext ("END THREAD: deathwater = " + local.index)
end
//*************************************************
//*** setup the deathwater(s)
//*** the level scripts should call this thread
//*************************************************
deathwater_setup:
thread debugtext "THREAD: deathwater_setup"
if ($deathwater == NULL)
{
thread debugtext " There is no deathwater in the map!!!"
local.deathwaters = 0
goto deathwater_setup_end
}
else
local.deathwaters = $deathwater.size
thread debugtext (" There are " + local.deathwaters + " deathwaters in this map")
for (local.i = 1 ; local.i <= $deathwater.size ; local.i ++)
{
thread deathwater local.i
}
deathwater_setup_end:
thread debugtext "END THREAD: deathwater_setup"
end
// text only output if debug mode is turned on
debugtext local.text:
if (level.debug == 1)
println local.text
end
Even if you don't use it, there should be things in it you can study. The trigger goes where the player can only trip it, if his head is under water. The script has to be named "death_water.scr".