checked 4 more scripts started debugging _zm_spawner

The 4 following scripts have been checked but not tested: _zm_magicbox_lock, _zm_playerhealth, _zm_power, and _zm_turned.

_zm_spawner has 2 known bugs:
zombies cannot break barriers, and they have no glowing eyes.
This commit is contained in:
JezuzLizard
2020-04-27 11:04:48 -07:00
parent 48c1d8219d
commit 698d211403
6 changed files with 430 additions and 374 deletions

View File

@ -5,7 +5,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
init()
init() //checked matches cerberus output
{
precachemodel( "p6_anim_zm_al_magic_box_lock_red" );
level.locked_magic_box_cost = 2000;
@ -13,7 +13,7 @@ init()
add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_COST_2000" );
}
watch_for_lock()
watch_for_lock() //checked matches cerberus output
{
self endon( "user_grabbed_weapon" );
self endon( "chest_accessed" );
@ -21,13 +21,13 @@ watch_for_lock()
self notify( "kill_chest_think" );
self.grab_weapon_hint = 0;
self.chest_user = undefined;
wait 0,1;
wait 0.1;
self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
self.unitrigger_stub run_visibility_function_for_all_triggers();
self thread treasure_chest_think();
}
clean_up_locked_box()
clean_up_locked_box() //checked matches cerberus output
{
self endon( "box_spin_done" );
self.owner waittill( "box_locked" );
@ -47,7 +47,7 @@ clean_up_locked_box()
self setzbarrierpiecestate( 4, "closed" );
}
magic_box_locks()
magic_box_locks() //checked matches cerberus output
{
self.owner.is_locked = 1;
self.owner notify( "box_locked" );
@ -57,19 +57,19 @@ magic_box_locks()
self setzbarrierpiecestate( 5, "closing" );
while ( self getzbarrierpiecestate( 5 ) == "closing" )
{
wait 0,5;
wait 0.5;
}
self notify( "locked" );
}
magic_box_unlocks()
magic_box_unlocks() //checked matches cerberus output
{
maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.owner.unitrigger_stub );
self playsound( "zmb_hellbox_unlock" );
self setzbarrierpiecestate( 5, "opening" );
while ( self getzbarrierpiecestate( 5 ) == "opening" )
{
wait 0,5;
wait 0.5;
}
self setzbarrierpiecestate( 2, "closed" );
self showzbarrierpiece( 2 );
@ -80,7 +80,7 @@ magic_box_unlocks()
self setclientfield( "magicbox_amb_fx", 1 );
}
set_locked_magicbox_state( state )
set_locked_magicbox_state( state ) //checked matches cerberus output
{
switch( state )
{
@ -96,3 +96,4 @@ set_locked_magicbox_state( state )
break;
}
}

View File

@ -3,7 +3,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
init()
init() //checked matches cerberus output
{
if ( !isDefined( level.script ) )
{
@ -20,9 +20,11 @@ init()
level.difficultystring[ "normal" ] = &"GAMESKILL_NORMAL";
level.difficultystring[ "hardened" ] = &"GAMESKILL_HARDENED";
level.difficultystring[ "veteran" ] = &"GAMESKILL_VETERAN";
/*
/#
thread playerhealthdebug();
#/
*/
level.gameskill = 1;
switch( level.gameskill )
{
@ -42,22 +44,22 @@ init()
logstring( "difficulty: " + level.gameskill );
level.player_deathinvulnerabletime = 1700;
level.longregentime = 5000;
level.healthoverlaycutoff = 0,2;
level.invultime_preshield = 0,35;
level.invultime_onshield = 0,5;
level.invultime_postshield = 0,3;
level.healthoverlaycutoff = 0.2;
level.invultime_preshield = 0.35;
level.invultime_onshield = 0.5;
level.invultime_postshield = 0.3;
level.playerhealth_regularregendelay = 2400;
level.worthydamageratio = 0,1;
setdvar( "player_meleeDamageMultiplier", 0,4 );
level.worthydamageratio = 0.1;
setdvar( "player_meleeDamageMultiplier", 0.4 );
onplayerconnect_callback( ::onplayerconnect );
}
onplayerconnect()
onplayerconnect() //checked matches cerberus output
{
self thread onplayerspawned();
}
onplayerspawned()
onplayerspawned() //checked changed to match cerberus output
{
for ( ;; )
{
@ -67,15 +69,12 @@ onplayerspawned()
{
continue;
}
else
{
self notify( "noHealthOverlay" );
self thread playerhealthregen();
}
self notify( "noHealthOverlay" );
self thread playerhealthregen();
}
}
playerhurtcheck()
playerhurtcheck() //checked changed to match cerberus output
{
self endon( "noHealthOverlay" );
self.hurtagain = 0;
@ -86,16 +85,13 @@ playerhurtcheck()
{
continue;
}
else
{
self.hurtagain = 1;
self.damagepoint = point;
self.damageattacker = attacker;
}
self.hurtagain = 1;
self.damagepoint = point;
self.damageattacker = attacker;
}
}
playerhealthregen()
playerhealthregen() //checked changed to match cerberus output
{
self notify( "playerHealthRegen" );
self endon( "playerHealthRegen" );
@ -116,7 +112,7 @@ playerhealthregen()
self thread healthoverlay();
oldratio = 1;
health_add = 0;
regenrate = 0,1;
regenrate = 0.1;
veryhurt = 0;
playerjustgotredflashing = 0;
invultime = 0;
@ -136,7 +132,7 @@ playerhealthregen()
playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" );
for ( ;; )
{
wait 0,05;
wait 0.05;
waittillframeend;
if ( self.health == self.maxhealth )
{
@ -149,11 +145,13 @@ playerhealthregen()
veryhurt = 0;
continue;
}
else if ( self.health <= 0 )
if ( self.health <= 0 )
{
/*
/#
showhitlog();
#/
*/
return;
}
wasveryhurt = veryhurt;
@ -164,7 +162,7 @@ playerhealthregen()
if ( !wasveryhurt )
{
hurttime = getTime();
self startfadingblur( 3,6, 2 );
self startfadingblur( 3.6, 2 );
self player_flag_set( "player_has_red_flashing_overlay" );
playerjustgotredflashing = 1;
}
@ -176,11 +174,11 @@ playerhealthregen()
}
if ( health_ratio >= oldratio )
{
if ( ( getTime() - hurttime ) < level.playerhealth_regularregendelay )
if ( getTime() - hurttime < level.playerhealth_regularregendelay )
{
continue;
}
else if ( veryhurt )
if ( veryhurt )
{
self.veryhurt = 1;
newhealth = health_ratio;
@ -202,21 +200,24 @@ playerhealthregen()
{
return;
}
/*
/#
if ( newhealth > health_ratio )
{
logregen( newhealth );
#/
}
*/
self setnormalhealth( newhealth );
oldratio = self.health / self.maxhealth;
continue;
}
else invulworthyhealthdrop = ( lastinvulratio - health_ratio ) > level.worthydamageratio;
invulworthyhealthdrop = lastinvulratio - health_ratio > level.worthydamageratio;
if ( self.health <= 1 )
{
self setnormalhealth( 2 / self.maxhealth );
invulworthyhealthdrop = 1;
/*
/#
if ( !isDefined( level.player_deathinvulnerabletimeout ) )
{
@ -227,68 +228,69 @@ playerhealthregen()
level.player_deathinvulnerabletimeout = getTime() + getDvarInt( "player_deathInvulnerableTime" );
#/
}
*/
}
oldratio = self.health / self.maxhealth;
level notify( "hit_again" );
health_add = 0;
hurttime = getTime();
self startfadingblur( 3, 0,8 );
self startfadingblur( 3, 0.8 );
if ( !invulworthyhealthdrop || playerinvultimescale <= 0 )
{
/*
/#
loghit( self.health, 0 );
#/
*/
continue;
}
if ( self player_flag( "player_is_invulnerable" ) )
{
continue;
}
self player_flag_set( "player_is_invulnerable" );
level notify( "player_becoming_invulnerable" );
if ( playerjustgotredflashing )
{
invultime = level.invultime_onshield;
playerjustgotredflashing = 0;
}
else if ( veryhurt )
{
invultime = level.invultime_postshield;
}
else
{
if ( self player_flag( "player_is_invulnerable" ) )
{
break;
}
else
{
self player_flag_set( "player_is_invulnerable" );
level notify( "player_becoming_invulnerable" );
if ( playerjustgotredflashing )
{
invultime = level.invultime_onshield;
playerjustgotredflashing = 0;
}
else if ( veryhurt )
{
invultime = level.invultime_postshield;
}
else
{
invultime = level.invultime_preshield;
}
invultime *= playerinvultimescale;
/#
loghit( self.health, invultime );
#/
lastinvulratio = self.health / self.maxhealth;
self thread playerinvul( invultime );
}
invultime = level.invultime_preshield;
}
invultime *= playerinvultimescale;
/*
/#
loghit( self.health, invultime );
#/
*/
lastinvulratio = self.health / self.maxhealth;
self thread playerinvul( invultime );
}
}
playerinvul( timer )
playerinvul( timer ) //checked matches cerberus output
{
self endon( "death" );
self endon( "disconnect" );
if ( timer > 0 )
{
/*
/#
level.playerinvultimeend = getTime() + ( timer * 1000 );
#/
#/
*/
wait timer;
}
self player_flag_clear( "player_is_invulnerable" );
}
healthoverlay()
healthoverlay() //checked changed to match cerberus output
{
self endon( "disconnect" );
self endon( "noHealthOverlay" );
@ -307,37 +309,36 @@ healthoverlay()
overlay = self._health_overlay;
self thread healthoverlay_remove( overlay );
self thread watchhideredflashingoverlay( overlay );
pulsetime = 0,8;
for ( ;; )
pulsetime = 0.8;
while ( overlay.alpha > 0 )
{
if ( overlay.alpha > 0 )
{
overlay fadeovertime( 0,5 );
}
overlay fadeovertime( 0.5 );
overlay.alpha = 0;
self player_flag_wait( "player_has_red_flashing_overlay" );
self redflashingoverlay( overlay );
}
}
fadefunc( overlay, severity, mult, hud_scaleonly )
fadefunc( overlay, severity, mult, hud_scaleonly ) //checkec matches cerberus output
{
pulsetime = 0,8;
scalemin = 0,5;
fadeintime = pulsetime * 0,1;
stayfulltime = pulsetime * ( 0,1 + ( severity * 0,2 ) );
fadeouthalftime = pulsetime * ( 0,1 + ( severity * 0,1 ) );
fadeoutfulltime = pulsetime * 0,3;
pulsetime = 0.8;
scalemin = 0.5;
fadeintime = pulsetime * 0.1;
stayfulltime = pulsetime * ( 0.1 + severity * 0.2 );
fadeouthalftime = pulsetime * ( 0.1 + severity * 0.1 );
fadeoutfulltime = pulsetime * 0.3;
remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime;
/*
/#
assert( remainingtime >= -0,001 );
assert( remainingtime >= -0.001 );
#/
*/
if ( remainingtime < 0 )
{
remainingtime = 0;
}
halfalpha = 0,8 + ( severity * 0,1 );
leastalpha = 0,5 + ( severity * 0,3 );
halfalpha = 0.8 + severity * 0.1;
leastalpha = 0.5 + severity * 0.3;
overlay fadeovertime( fadeintime );
overlay.alpha = mult * 1;
wait ( fadeintime + stayfulltime );
@ -350,21 +351,21 @@ fadefunc( overlay, severity, mult, hud_scaleonly )
wait remainingtime;
}
watchhideredflashingoverlay( overlay )
watchhideredflashingoverlay( overlay ) //checked matches cerberus output
{
self endon( "death_or_disconnect" );
while ( isDefined( overlay ) )
{
self waittill( "clear_red_flashing_overlay" );
self player_flag_clear( "player_has_red_flashing_overlay" );
overlay fadeovertime( 0,05 );
overlay fadeovertime( 0.05 );
overlay.alpha = 0;
setclientsysstate( "levelNotify", "rfo3", self );
self notify( "hit_again" );
}
}
redflashingoverlay( overlay )
redflashingoverlay( overlay ) //checked matches cerberus output
{
self endon( "hit_again" );
self endon( "damage" );
@ -377,57 +378,64 @@ redflashingoverlay( overlay )
fadefunc( overlay, 1, 1, 0 );
while ( getTime() < self.stopflashingbadlytime && isalive( self ) && isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie )
{
fadefunc( overlay, 0,9, 1, 0 );
fadefunc( overlay, 0.9, 1, 0 );
}
if ( isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie )
{
if ( isalive( self ) )
{
fadefunc( overlay, 0,65, 0,8, 0 );
fadefunc( overlay, 0.65, 0.8, 0 );
}
fadefunc( overlay, 0, 0,6, 1 );
fadefunc( overlay, 0, 0.6, 1 );
}
}
overlay fadeovertime( 0,5 );
overlay fadeovertime( 0.5 );
overlay.alpha = 0;
self player_flag_clear( "player_has_red_flashing_overlay" );
setclientsysstate( "levelNotify", "rfo3", self );
wait 0,5;
wait 0.5;
self notify( "hit_again" );
}
healthoverlay_remove( overlay )
healthoverlay_remove( overlay ) //checked matches cerberus output
{
self endon( "disconnect" );
self waittill_any( "noHealthOverlay", "death" );
overlay fadeovertime( 3,5 );
overlay fadeovertime( 3.5 );
overlay.alpha = 0;
}
empty_kill_func( type, loc, point, attacker, amount )
empty_kill_func( type, loc, point, attacker, amount ) //checked matches cerberus output
{
}
loghit( newhealth, invultime )
loghit( newhealth, invultime ) //checked matches cerberus output
{
/*
/#
#/
*/
}
logregen( newhealth )
logregen( newhealth ) //checked matches cerberus output
{
/*
/#
#/
*/
}
showhitlog()
showhitlog() //checked matches cerberus output
{
/*
/#
#/
*/
}
playerhealthdebug()
playerhealthdebug() //checked changed to match cerberus output
{
/*
/#
if ( getDvar( "scr_health_debug" ) == "" )
{
@ -442,10 +450,7 @@ playerhealthdebug()
{
break;
}
else
{
wait 0,5;
}
wait 0.5;
}
thread printhealthdebug();
while ( 1 )
@ -454,19 +459,18 @@ playerhealthdebug()
{
break;
}
else
{
wait 0,5;
}
wait 0.5;
}
level notify( "stop_printing_grenade_timers" );
destroyhealthdebug();
#/
}
*/
}
printhealthdebug()
printhealthdebug() //checked changed to match cerberus output
{
/*
/#
level notify( "stop_printing_health_bars" );
level endon( "stop_printing_health_bars" );
@ -484,8 +488,7 @@ printhealthdebug()
{
level.player_deathinvulnerabletimeout = 0;
}
i = 0;
while ( i < level.healthbarkeys.size )
for ( i = 0; i < level.healthbarkeys.size; i++ )
{
key = level.healthbarkeys[ i ];
textelem = newhudelem();
@ -505,7 +508,7 @@ printhealthdebug()
bgbar.vertalign = "fullscreen";
bgbar.maxwidth = 3;
bgbar setshader( "white", bgbar.maxwidth, 10 );
bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 );
bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 );
bar = newhudelem();
bar.x = x + 80;
bar.y = y + 2;
@ -519,15 +522,13 @@ printhealthdebug()
textelem.key = key;
y += 10;
level.healthbarhudelems[ key ] = textelem;
i++;
}
flag_wait( "start_zombie_round_logic" );
while ( 1 )
{
wait 0,05;
wait 0.05;
players = get_players();
i = 0;
while ( i < level.healthbarkeys.size && players.size > 0 )
for ( i = 0; i < level.healthbarkeys.size && players.size > 0; i++ )
{
key = level.healthbarkeys[ i ];
player = players[ 0 ];
@ -540,12 +541,9 @@ printhealthdebug()
{
width = ( ( level.playerinvultimeend - getTime() ) / 1000 ) * 40;
}
else
else if ( i == 2 )
{
if ( i == 2 )
{
width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40;
}
width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40;
}
width = int( max( width, 1 ) );
width = int( min( width, 300 ) );
@ -556,28 +554,29 @@ printhealthdebug()
{
bgbar.maxwidth = width + 2;
bgbar setshader( "white", bgbar.maxwidth, 10 );
bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 );
bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 );
}
i++;
}
#/
}
*/
}
destroyhealthdebug()
destroyhealthdebug() //checked changed to match cerberus output
{
/*
/#
if ( !isDefined( level.healthbarhudelems ) )
{
return;
}
i = 0;
while ( i < level.healthbarkeys.size )
while ( i = 0; i < level.healthbarkeys.size; i++ )
{
level.healthbarhudelems[ level.healthbarkeys[ i ] ].bgbar destroy();
level.healthbarhudelems[ level.healthbarkeys[ i ] ].bar destroy();
level.healthbarhudelems[ level.healthbarkeys[ i ] ] destroy();
i++;
#/
}
*/
}

View File

@ -5,7 +5,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
init()
init() //checked matches cerberus output
{
if ( !isDefined( level.powered_items ) )
{
@ -16,36 +16,36 @@ init()
level.local_power = [];
}
thread standard_powered_items();
/*
/#
thread debug_powered_items();
#/
*/
}
debug_powered_items()
debug_powered_items() //checked changed to match cerberus output
{
/*
/#
while ( 1 )
{
while ( getDvarInt( #"EB512CB7" ) )
if ( getDvarInt( #"EB512CB7" ) )
{
while ( isDefined( level.local_power ) )
if ( isDefined( level.local_power ) )
{
_a32 = level.local_power;
_k32 = getFirstArrayKey( _a32 );
while ( isDefined( _k32 ) )
foreach(localpower in level.local_power)
{
localpower = _a32[ _k32 ];
circle( localpower.origin, localpower.radius, ( 0, 0, 1 ), 0, 1, 1 );
_k32 = getNextArrayKey( _a32, _k32 );
circle( localpower.origin, localpower.radius, ( 1, 0, 0 ), 0, 1, 1 );
}
}
}
wait 0,05;
wait 0.05;
#/
}
*/
}
watch_global_power()
watch_global_power() //checked matches cerberus output
{
while ( 1 )
{
@ -56,63 +56,49 @@ watch_global_power()
}
}
standard_powered_items()
standard_powered_items() //checked partially changed to match cerberus output //did not use foreach with continue to prevent infinite loop bug
{
flag_wait( "start_zombie_round_logic" );
vending_triggers = getentarray( "zombie_vending", "targetname" );
_a67 = vending_triggers;
_k67 = getFirstArrayKey( _a67 );
while ( isDefined( _k67 ) )
i = 0;
while ( i < vending_triggers.size)
{
trigger = _a67[ _k67 ];
if ( trigger.script_noteworthy == "specialty_weapupgrade" )
if ( vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" )
{
i++;
continue;
}
else
{
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy );
add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, trigger );
}
_k67 = getNextArrayKey( _a67, _k67 );
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( vending_triggers[ i ].script_noteworthy );
add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, vending_triggers[ i ] );
i++;
}
pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" );
_a77 = pack_a_punch;
_k77 = getFirstArrayKey( _a77 );
while ( isDefined( _k77 ) )
foreach ( trigger in pack_a_punch )
{
trigger = _a77[ _k77 ];
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy );
trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger );
_k77 = getNextArrayKey( _a77, _k77 );
}
zombie_doors = getentarray( "zombie_door", "targetname" );
_a86 = zombie_doors;
_k86 = getFirstArrayKey( _a86 );
while ( isDefined( _k86 ) )
foreach ( door in zombie_doors )
{
door = _a86[ _k86 ];
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" )
{
add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door );
}
else
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )
{
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )
power_sources = 0;
if ( isDefined( level.power_local_doors_globally ) && !level.power_local_doors_globally )
{
power_sources = 0;
if ( isDefined( level.power_local_doors_globally ) && !level.power_local_doors_globally )
{
power_sources = 1;
}
add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door );
power_sources = 1;
}
add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door );
}
_k86 = getNextArrayKey( _a86, _k86 );
}
thread watch_global_power();
}
add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target )
add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked matches cerberus output
{
powered = spawnstruct();
powered.power_on_func = power_on_func;
@ -133,21 +119,18 @@ add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_so
return powered;
}
remove_powered_item( powered )
remove_powered_item( powered ) //checked matches cerberus output
{
arrayremovevalue( level.powered_items, powered, 0 );
}
add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target )
add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked changed to match cerberus output
{
powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target );
while ( isDefined( level.local_power ) )
if ( isDefined( level.local_power ) )
{
_a140 = level.local_power;
_k140 = getFirstArrayKey( _a140 );
while ( isDefined( _k140 ) )
foreach ( localpower in level.local_power )
{
localpower = _a140[ _k140 ];
if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) )
{
powered change_power( 1, localpower.origin, localpower.radius );
@ -157,24 +140,20 @@ add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, pow
}
localpower.added_list[ localpower.added_list.size ] = powered;
}
_k140 = getNextArrayKey( _a140, _k140 );
}
}
thread watch_temp_powered_item( powered );
return powered;
}
watch_temp_powered_item( powered )
watch_temp_powered_item( powered ) //checked changed to match cerberus output
{
powered.target waittill( "death" );
remove_powered_item( powered );
while ( isDefined( level.local_power ) )
if ( isDefined( level.local_power ) )
{
_a161 = level.local_power;
_k161 = getFirstArrayKey( _a161 );
while ( isDefined( _k161 ) )
foreach ( localpower in level.local_power )
{
localpower = _a161[ _k161 ];
if ( isDefined( localpower.added_list ) )
{
arrayremovevalue( localpower.added_list, powered, 0 );
@ -183,16 +162,14 @@ watch_temp_powered_item( powered )
{
arrayremovevalue( localpower.enabled_list, powered, 0 );
}
_k161 = getNextArrayKey( _a161, _k161 );
}
}
}
change_power_in_radius( delta, origin, radius )
change_power_in_radius( delta, origin, radius ) //checked changed to match cerberus output
{
changed_list = [];
i = 0;
while ( i < level.powered_items.size )
for ( i = 0; i < level.powered_items.size; i++ )
{
powered = level.powered_items[ i ];
if ( powered.power_sources != 2 )
@ -203,12 +180,11 @@ change_power_in_radius( delta, origin, radius )
changed_list[ changed_list.size ] = powered;
}
}
i++;
}
return changed_list;
}
change_power( delta, origin, radius )
change_power( delta, origin, radius ) //checked changed to match cerberus output
{
if ( delta > 0 )
{
@ -219,70 +195,66 @@ change_power( delta, origin, radius )
}
self.powered_count++;
}
else
else if ( delta < 0 )
{
if ( delta < 0 )
if ( self.power )
{
if ( self.power )
{
self.power = 0;
self [[ self.power_off_func ]]( origin, radius );
}
self.depowered_count++;
self.power = 0;
self [[ self.power_off_func ]]( origin, radius );
}
self.depowered_count++;
}
}
revert_power_to_list( delta, origin, radius, powered_list )
revert_power_to_list( delta, origin, radius, powered_list ) //checked changed to match cerberus output
{
i = 0;
while ( i < powered_list.size )
for ( i = 0; i < powered_list.size; i++ )
{
powered = powered_list[ i ];
powered revert_power( delta, origin, radius );
i++;
}
}
revert_power( delta, origin, radius, powered_list )
revert_power( delta, origin, radius, powered_list ) //checked changed to match cerberus output
{
if ( delta > 0 )
{
self.depowered_count--;
/*
/#
assert( self.depowered_count >= 0, "Depower underflow in power system" );
#/
*/
if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power )
{
self.power = 1;
self [[ self.power_on_func ]]( origin, radius );
}
}
else
if ( delta < 0 )
{
if ( delta < 0 )
{
self.powered_count--;
self.powered_count--;
/*
/#
assert( self.powered_count >= 0, "Repower underflow in power system" );
assert( self.powered_count >= 0, "Repower underflow in power system" );
#/
if ( self.powered_count == 0 && self.power )
{
self.power = 0;
self [[ self.power_off_func ]]( origin, radius );
}
*/
if ( self.powered_count == 0 && self.power )
{
self.power = 0;
self [[ self.power_off_func ]]( origin, radius );
}
}
}
add_local_power( origin, radius )
add_local_power( origin, radius ) //checked matches cerberus output
{
localpower = spawnstruct();
/*
/#
println( "ZM POWER: local power on at " + origin + " radius " + radius + "\n" );
#/
*/
localpower.origin = origin;
localpower.radius = radius;
localpower.enabled_list = change_power_in_radius( 1, origin, radius );
@ -294,7 +266,7 @@ add_local_power( origin, radius )
return localpower;
}
move_local_power( localpower, origin )
move_local_power( localpower, origin ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite continue loop bug
{
changed_list = [];
i = 0;
@ -306,7 +278,7 @@ move_local_power( localpower, origin )
i++;
continue;
}
else waspowered = isinarray( localpower.enabled_list, powered );
waspowered = isinarray( localpower.enabled_list, powered );
ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius );
if ( ispowered && !waspowered )
{
@ -315,13 +287,10 @@ move_local_power( localpower, origin )
i++;
continue;
}
else
if ( !ispowered && waspowered )
{
if ( !ispowered && waspowered )
{
powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list );
arrayremovevalue( localpower.enabled_list, powered, 0 );
}
powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list );
arrayremovevalue( localpower.enabled_list, powered, 0 );
}
i++;
}
@ -329,11 +298,13 @@ move_local_power( localpower, origin )
return localpower;
}
end_local_power( localpower )
end_local_power( localpower ) //checked matches cerberus output
{
/*
/#
println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\n" );
#/
*/
if ( isDefined( localpower.enabled_list ) )
{
revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list );
@ -347,26 +318,22 @@ end_local_power( localpower )
arrayremovevalue( level.local_power, localpower, 0 );
}
has_local_power( origin )
has_local_power( origin ) //checked changed to match cerberus output
{
while ( isDefined( level.local_power ) )
if ( isDefined( level.local_power ) )
{
_a309 = level.local_power;
_k309 = getFirstArrayKey( _a309 );
while ( isDefined( _k309 ) )
foreach ( localpower in level.local_power )
{
localpower = _a309[ _k309 ];
if ( distancesquared( localpower.origin, origin ) < ( localpower.radius * localpower.radius ) )
{
return 1;
}
_k309 = getNextArrayKey( _a309, _k309 );
}
}
return 0;
}
get_powered_item_cost()
get_powered_item_cost() //checked matches cerberus output
{
if ( isDefined( self.power ) && !self.power )
{
@ -385,40 +352,31 @@ get_powered_item_cost()
return cost / power_sources;
}
get_local_power_cost( localpower )
get_local_power_cost( localpower ) //checked changed to match cerberus output
{
cost = 0;
while ( isDefined( localpower ) && isDefined( localpower.enabled_list ) )
if ( isDefined( localpower ) && isDefined( localpower.enabled_list ) )
{
_a340 = localpower.enabled_list;
_k340 = getFirstArrayKey( _a340 );
while ( isDefined( _k340 ) )
foreach ( powered in localpower.enabled_list )
{
powered = _a340[ _k340 ];
cost += powered get_powered_item_cost();
_k340 = getNextArrayKey( _a340, _k340 );
}
}
while ( isDefined( localpower ) && isDefined( localpower.added_list ) )
else if ( isDefined( localpower ) && isDefined( localpower.added_list ) )
{
_a345 = localpower.added_list;
_k345 = getFirstArrayKey( _a345 );
while ( isDefined( _k345 ) )
foreach ( powered in localpower.added_list )
{
powered = _a345[ _k345 ];
cost += powered get_powered_item_cost();
_k345 = getNextArrayKey( _a345, _k345 );
}
}
return cost;
}
set_global_power( on_off )
set_global_power( on_off ) //checked changed to match cerberus output
{
maps/mp/_demo::bookmark( "zm_power", getTime(), undefined, undefined, 1 );
level._power_global = on_off;
i = 0;
while ( i < level.powered_items.size )
for ( i = 0; i < level.powered_items.size; i++ )
{
powered = level.powered_items[ i ];
if ( isDefined( powered.target ) && powered.power_sources != 1 )
@ -426,17 +384,18 @@ set_global_power( on_off )
powered global_power( on_off );
wait_network_frame();
}
i++;
}
}
global_power( on_off )
global_power( on_off ) //checked matches cerberus output
{
if ( on_off )
{
/*
/#
println( "ZM POWER: global power on\n" );
#/
*/
if ( !self.power )
{
self.power = 1;
@ -446,14 +405,17 @@ global_power( on_off )
}
else
{
/*
/#
println( "ZM POWER: global power off\n" );
#/
*/
self.powered_count--;
/*
/#
assert( self.powered_count >= 0, "Repower underflow in power system" );
#/
*/
if ( self.powered_count == 0 && self.power )
{
self.power = 0;
@ -462,15 +424,15 @@ global_power( on_off )
}
}
never_power_on( origin, radius )
never_power_on( origin, radius ) //checked matches cerberus output
{
}
never_power_off( origin, radius )
never_power_off( origin, radius ) //checked matches cerberus output
{
}
cost_negligible()
cost_negligible() //checked matches cerberus output
{
if ( isDefined( self.one_time_cost ) )
{
@ -481,7 +443,7 @@ cost_negligible()
return 0;
}
cost_low_if_local()
cost_low_if_local() //checked matches cerberus output
{
if ( isDefined( self.one_time_cost ) )
{
@ -500,7 +462,7 @@ cost_low_if_local()
return 1;
}
cost_high()
cost_high() //checked matches cerberus output
{
if ( isDefined( self.one_time_cost ) )
{
@ -511,56 +473,64 @@ cost_high()
return 10;
}
door_range( delta, origin, radius )
door_range( delta, origin, radius ) //checked matches cerberus output
{
if ( delta < 0 )
{
return 0;
}
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
if ( distancesquared( self.target.origin, origin ) < radius * radius )
{
return 1;
}
return 0;
}
door_power_on( origin, radius )
door_power_on( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: door on\n" );
#/
#/
*/
self.target.power_on = 1;
self.target notify( "power_on" );
}
door_power_off( origin, radius )
door_power_off( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: door off\n" );
#/
*/
self.target notify( "power_off" );
self.target.power_on = 0;
}
door_local_power_on( origin, radius )
door_local_power_on( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: door on (local)\n" );
#/
*/
self.target.local_power_on = 1;
self.target notify( "local_power_on" );
}
door_local_power_off( origin, radius )
door_local_power_off( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: door off (local)\n" );
#/
*/
self.target notify( "local_power_off" );
self.target.local_power_on = 0;
}
cost_door()
cost_door() //checked matches cerberus output
{
if ( isDefined( self.target.power_cost ) )
{
@ -580,7 +550,7 @@ cost_door()
return 0;
}
zombie_range( delta, origin, radius )
zombie_range( delta, origin, radius ) //checked matches cerberus output
{
if ( delta > 0 )
{
@ -595,30 +565,32 @@ zombie_range( delta, origin, radius )
return 1;
}
zombie_power_off( origin, radius )
zombie_power_off( origin, radius ) //checked changed to match cerberus output
{
/*
/#
println( "^1ZM POWER: zombies off\n" );
#/
i = 0;
while ( i < self.zombies.size )
*/
for ( i = 0; i < self.zombies.size; i++ )
{
self.zombies[ i ] thread stun_zombie();
wait 0,05;
i++;
wait 0.05;
}
}
stun_zombie()
stun_zombie() //checked matches cerberus output
{
self endon( "death" );
self notify( "stun_zombie" );
self endon( "stun_zombie" );
if ( self.health <= 0 )
{
/*
/#
iprintln( "trying to stun a dead zombie" );
#/
*/
return;
}
if ( isDefined( self.ignore_inert ) && self.ignore_inert )
@ -633,7 +605,7 @@ stun_zombie()
self thread maps/mp/zombies/_zm_ai_basic::start_inert();
}
perk_range( delta, origin, radius )
perk_range( delta, origin, radius ) //checked changed to match cerberus output
{
if ( isDefined( self.target ) )
{
@ -642,14 +614,11 @@ perk_range( delta, origin, radius )
{
perkorigin = self.target.realorigin;
}
else
else if ( isDefined( self.target.disabled ) && self.target.disabled )
{
if ( isDefined( self.target.disabled ) && self.target.disabled )
{
perkorigin += vectorScale( ( 0, 0, 1 ), 10000 );
}
perkorigin += vectorScale( ( 0, 0, 1 ), 10000 );
}
if ( distancesquared( perkorigin, origin ) < ( radius * radius ) )
if ( distancesquared( perkorigin, origin ) < radius * radius )
{
return 1;
}
@ -657,16 +626,18 @@ perk_range( delta, origin, radius )
return 0;
}
perk_power_on( origin, radius )
perk_power_on( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: perk " + self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + " on\n" );
#/
*/
level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_on" );
maps/mp/zombies/_zm_perks::perk_unpause( self.target.script_noteworthy );
}
perk_power_off( origin, radius )
perk_power_off( origin, radius ) //checked matches cerberus output
{
notify_name = self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify();
if ( isDefined( notify_name ) && notify_name == "revive" )
@ -676,9 +647,11 @@ perk_power_off( origin, radius )
return;
}
}
/*
/#
println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\n" );
#/
*/
self.target notify( "death" );
self.target thread maps/mp/zombies/_zm_perks::vending_trigger_think();
if ( isDefined( self.target.perk_hum ) )
@ -689,7 +662,7 @@ perk_power_off( origin, radius )
level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_off" );
}
pap_range( delta, origin, radius )
pap_range( delta, origin, radius ) //checked changed to match cerberus output
{
if ( isDefined( self.target ) )
{
@ -698,12 +671,9 @@ pap_range( delta, origin, radius )
{
paporigin = self.target.realorigin;
}
else
else if ( isDefined( self.target.disabled ) && self.target.disabled )
{
if ( isDefined( self.target.disabled ) && self.target.disabled )
{
paporigin += vectorScale( ( 0, 0, 1 ), 10000 );
}
paporigin += vectorScale( ( 0, 0, 1 ), 10000 );
}
if ( distancesquared( paporigin, origin ) < ( radius * radius ) )
{
@ -713,25 +683,29 @@ pap_range( delta, origin, radius )
return 0;
}
pap_power_on( origin, radius )
pap_power_on( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: PaP on\n" );
#/
*/
level notify( "Pack_A_Punch_on" );
}
pap_power_off( origin, radius )
pap_power_off( origin, radius ) //checked matches cerberus output
{
/*
/#
println( "^1ZM POWER: PaP off\n" );
#/
*/
level notify( "Pack_A_Punch_off" );
self.target notify( "death" );
self.target thread maps/mp/zombies/_zm_perks::vending_weapon_upgrade();
}
pap_is_on()
pap_is_on() //checked matches cerberus output
{
if ( isDefined( self.powered ) )
{
@ -739,3 +713,4 @@ pap_is_on()
}
return 0;
}

View File

@ -214,6 +214,12 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus
self.badplaceawareness = 0;
self.chatinitialized = 0;
self.a.disablepain = 1;
self.no_damage_points = 0; //wasn't defined anywhere defining here
self.no_eye_glow = 0; //wasn't defined anywhere defining here
self.create_eyes = 1; //wasn't defined anywhere defining here
self.is_inert = 0; //wasn't defined anywhere defining here
self disable_react();
if ( isDefined( level.zombie_health ) )
{
@ -382,6 +388,11 @@ zombie_think() //checked changed to match cerberus output
}
else
{
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline1 = "INFO: _zm_spawner.gsc zombie_think() calls do_zombie_spawn()" + "\n";
logprint( logline1 );
}
self thread do_zombie_spawn();
}
self waittill( "risen", find_flesh_struct_string );
@ -580,15 +591,24 @@ zombie_goto_entrance( node, endon_bad_path ) //checked matches cerberus output
self.barricade_enter = 0;
}
zombie_assure_node() //checked changed to match cerberus output
zombie_assure_node() //checked changed to match cerberus output //changed for loops to while loops to prevent infinite loops with continues
{
self endon( "death" );
self endon( "goal" );
level endon( "intermission" );
start_pos = self.origin;
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
{
if ( !isDefined( self.entrance_nodes ) )
{
logline12 = "ERROR: _zm_spawner.gsc zombie_assure_node() self.entrance_nodes is undefined! " + "\n";
logprint( logline12 );
}
}
if ( isDefined( self.entrance_nodes ) )
{
for ( i = 0; i < self.entrance_nodes.size; i++ )
i = 0;
while ( i < self.entrance_nodes.size )
{
if ( self zombie_bad_path() )
{
@ -601,6 +621,7 @@ zombie_assure_node() //checked changed to match cerberus output
level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
self.first_node = self.entrance_nodes[ i ];
self setgoalpos( self.entrance_nodes[ i ].origin );
i++;
continue;
}
return;
@ -611,7 +632,8 @@ zombie_assure_node() //checked changed to match cerberus output
if ( isDefined( nodes ) )
{
self.entrance_nodes = nodes;
for ( i = 0; i < self.entrance_nodes.size; i++ )
i = 0;
while ( i < self.entrance_nodes.size)
{
if ( self zombie_bad_path() )
{
@ -624,8 +646,10 @@ zombie_assure_node() //checked changed to match cerberus output
level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
self.first_node = self.entrance_nodes[ i ];
self setgoalpos( self.entrance_nodes[ i ].origin );
i++;
continue;
}
i++;
return;
}
}
@ -668,6 +692,11 @@ zombie_bad_path_timeout() //checked matches cerberus output
tear_into_building() //checked changed to match cerberus output
{
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline13 = "INFO: _zm_spawner.gsc tear_into_building() is called " + "\n";
logprint( logline13 );
}
self endon( "death" );
self endon( "teleporting" );
self zombie_history( "tear_into_building -> start" );
@ -791,7 +820,7 @@ tear_into_building() //checked changed to match cerberus output
self.first_node.attack_spots_taken[ i ] = 0;
i++;
}
level notify( "last_board_torn" );
level notify( "last_board_torn", self.first_node.zbarrier.origin );
return;
}
}
@ -1656,17 +1685,20 @@ derive_damage_refs( point ) //checked changed to match cerberus output
init_gib_tags();
}
closesttag = undefined;
for ( i = 0; i < level.gib_tags.size; i++ )
i = 0;
while ( i < level.gib_tags.size )
{
if ( !isDefined( closesttag ) )
{
closesttag = level.gib_tags[ i ];
i++;
continue;
}
if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) )
{
closesttag = level.gib_tags[ i ];
}
i++;
}
refs = [];
if ( closesttag != "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" )
@ -1924,7 +1956,7 @@ zombie_death_animscript() //checked changed to match cerberus output
}
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{
level notify( "zombie_grenade_death" );
level notify( "zombie_grenade_death", self.origin );
}
return 0;
}
@ -2383,7 +2415,7 @@ zombie_death_event( zombie ) //checked changed to match cerberus output
zombie.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "damage" );
}
}
zombie.attacker notify( "zom_kill" );
zombie.attacker notify( "zom_kill", zombie );
damageloc = zombie.damagelocation;
damagemod = zombie.damagemod;
attacker = zombie.attacker;
@ -2606,7 +2638,8 @@ zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) //
#/
}
*/
for ( i = 0; i < breadcrumbs.size; i++ )
i = 0;
while ( i < breadcrumbs.size )
{
if ( pick_random )
{
@ -2618,8 +2651,10 @@ zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) //
}
if ( crumb_is_bad( crumb_index, bad_crumbs ) )
{
i++;
continue;
}
i++;
return breadcrumbs[ crumb_index ];
}
return undefined;
@ -2805,30 +2840,54 @@ do_zombie_spawn() //checked changed to match cerberus output
spots = [];
if ( isDefined( self._rise_spot ) )
{
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline2 = "INFO: _zm_spawner.gsc do_zombie_spawn() self._rise_spot is defined calling do_zombie_rise(); returning" + "\n";
logprint( logline2 );
}
spot = self._rise_spot;
self thread do_zombie_rise( spot );
return;
}
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
{
if ( !isDefined( level.zombie_spawn_locations ) )
{
logline3 = "ERROR: _zm_spawner.gsc do_zombie_spawn() level.zombie_spawn_locations is not defined!" + "\n";
logprint( logline3 );
return;
}
}
if ( isDefined( level.zombie_spawn_locations ) )
{
for ( i = 0; i < level.zombie_spawn_locations.size; i++ )
i = 0;
while ( i < level.zombie_spawn_locations.size )
{
if ( isDefined( level.use_multiple_spawns ) && level.use_multiple_spawns && isDefined( self.script_int ) )
{
if ( isDefined( level.spawner_int ) && self.script_int == level.spawner_int && ( !isDefined( level.zombie_spawn_locations[ i ].script_int ) || !isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) ) )
{
i++;
continue;
}
if ( isDefined( level.zombie_spawn_locations[ i ].script_int ) && level.zombie_spawn_locations[ i ].script_int != self.script_int )
{
i++;
continue;
}
else if ( isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) && level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int != self.script_int )
{
i++;
continue;
}
spots[ spots.size ] = level.zombie_spawn_locations[ i ];
}
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline11 = "INFO: _zm_spawner.gsc do_zombie_spawn() setting spot: " + spots.size + " to level.zombie_spawn_locations: " + i + "\n";
logprint( logline11 );
}
spots[ spots.size ] = level.zombie_spawn_locations[ i ];
i++;
}
}
/*
@ -2892,50 +2951,76 @@ do_zombie_spawn() //checked changed to match cerberus output
self.script_parameters = spot.script_parameters;
}
tokens = strtok( spot.script_noteworthy, " " );
foreach ( token in tokens )
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
{
if ( !isDefined( tokens ) )
{
logline9 = "ERROR: _zm_spawner.gsc do_zombie_spawn() tokens is not defined! " + "\n";
logprint( logline9 );
return;
}
else
{
logline10 = "INFO: _zm_spawner.gsc do_zombie_spawn() has this many tokens: " + tokens.size + "\n";
logprint( logline10 );
}
}
i = 0;
while ( i < tokens.size )
{
if ( isdefined( self.spawn_point_override ) )
{
spot = self.spawn_point_override;
token = spot.script_noteworthy;
tokens[ i ] = spot.script_noteworthy;
}
if ( token == "custom_spawner_entry" )
if ( tokens[ i ] == "custom_spawner_entry" )
{
next_token = index + 1;
if ( isdefined( tokens[ next_token ] ) )
if ( isdefined( tokens[ i ] ) )
{
str_spawn_entry = tokens[ next_token ];
str_spawn_entry = tokens[ i ];
if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[ str_spawn_entry ] ) )
{
self thread [[ level.custom_spawner_entry[ str_spawn_entry ] ]](spot);
i++;
continue;
}
}
}
if ( token == "riser_location" )
if ( tokens[ i ] == "riser_location" )
{
self thread do_zombie_rise( spot );
i++;
continue;
}
if ( token == "faller_location" )
if ( tokens[ i ] == "faller_location" )
{
self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot );
i++;
continue;
}
if ( token == "dog_location" )
if ( tokens[ i ] == "dog_location" )
{
i++;
continue;
}
if ( token == "screecher_location" )
if ( tokens[ i ] == "screecher_location" )
{
i++;
continue;
}
if ( token == "leaper_location" )
if ( tokens[ i ] == "leaper_location" )
{
i++;
continue;
}
if ( isdefined(self.anchor ) )
{
i++;
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline4 = "INFO: _zm_spawner.gsc do_zombie_spawn() self.anchor is defined; returning" + "\n";
logprint( logline4 );
}
return;
}
self.anchor = spawn( "script_origin", self.origin );
@ -2965,7 +3050,13 @@ do_zombie_spawn() //checked changed to match cerberus output
self.anchor delete();
}
self show();
self notify( "risen" );
self notify( "risen", spot.script_string );
i++;
}
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline4 = "INFO: _zm_spawner.gsc do_zombie_spawn() has completed its operation" + "\n";
logprint( logline4 );
}
}
@ -3025,6 +3116,11 @@ do_zombie_rise( spot ) //checked changed to match cerberus output
spot notify( "stop_zombie_rise_fx" );
self.in_the_ground = 0;
self notify( "risen", spot.script_string );
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
{
logline5 = "INFO: _zm_spawner.gsc do_zombie_rise() has completed its operation" + "\n";
logprint( logline5 );
}
}
hide_pop() //checked matches cerberus output
@ -3269,3 +3365,4 @@ zombie_free_cam_allowed() //checked matches cerberus output
self setfreecameralockonallowed( 1 );
}

View File

@ -7,7 +7,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
init()
init() //checked matches cerberus output
{
level.turnedmeleeweapon = "zombiemelee_zm";
level.turnedmeleeweapon_dw = "zombiemelee_dw";
@ -31,24 +31,24 @@ init()
thread setup_zombie_exerts();
}
setup_zombie_exerts()
setup_zombie_exerts() //checked matches cerberus output
{
wait 0,05;
wait 0.05;
level.exert_sounds[ 1 ][ "burp" ] = "null";
level.exert_sounds[ 1 ][ "hitmed" ] = "null";
level.exert_sounds[ 1 ][ "hitlrg" ] = "null";
}
delay_turning_on_eyes()
delay_turning_on_eyes() //checked matches cerberus output
{
self endon( "death" );
self endon( "disconnect" );
wait_network_frame();
wait 0,1;
wait 0.1;
self setclientfield( "player_has_eyes", 1 );
}
turn_to_zombie()
turn_to_zombie() //checked changed to match cerberus output
{
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && self.is_zombie && isDefined( self.laststand ) && !self.laststand )
{
@ -60,7 +60,7 @@ turn_to_zombie()
}
while ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify )
{
wait 0,1;
wait 0.1;
}
if ( !flag( "pregame" ) )
{
@ -150,17 +150,14 @@ turn_to_zombie()
{
self freezecontrols( level.player_movement_suppressed );
}
else
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
{
if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
{
self freezecontrols( 0 );
}
self freezecontrols( 0 );
}
self.is_in_process_of_zombify = 0;
}
turn_to_human()
turn_to_human() //checked changed to match cerberus output
{
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && !self.is_zombie && isDefined( self.laststand ) && !self.laststand )
{
@ -172,7 +169,7 @@ turn_to_human()
}
while ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify )
{
wait 0,1;
wait 0.1;
}
self playsoundtoplayer( "evt_spawn", self );
playsoundatposition( "evt_disappear_3d", self.origin );
@ -233,27 +230,21 @@ turn_to_human()
{
self freezecontrols( level.player_movement_suppressed );
}
else
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
{
if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
{
self freezecontrols( 0 );
}
self freezecontrols( 0 );
}
self show();
playsoundatposition( "evt_appear_3d", self.origin );
self.is_in_process_of_humanify = 0;
}
deletezombiesinradius( origin )
deletezombiesinradius( origin ) //checked changed to match cerberus output
{
zombies = get_round_enemy_array();
maxradius = 128;
_a328 = zombies;
_k328 = getFirstArrayKey( _a328 );
while ( isDefined( _k328 ) )
foreach ( zombie in zombies )
{
zombie = _a328[ _k328 ];
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.is_being_used_as_spawner ) && !zombie.is_being_used_as_spawner )
{
if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) )
@ -261,20 +252,21 @@ deletezombiesinradius( origin )
playfx( level._effect[ "wood_chunk_destory" ], zombie.origin );
zombie thread silentlyremovezombie();
}
wait 0,05;
wait 0.05;
}
_k328 = getNextArrayKey( _a328, _k328 );
}
}
turned_give_melee_weapon()
turned_give_melee_weapon() //checked matches cerberus output
{
/*
/#
assert( isDefined( self.turnedmeleeweapon ) );
#/
/#
assert( self.turnedmeleeweapon != "none" );
#/
*/
self.turned_had_knife = self hasweapon( "knife_zm" );
if ( isDefined( self.turned_had_knife ) && self.turned_had_knife )
{
@ -288,45 +280,45 @@ turned_give_melee_weapon()
self switchtoweapon( self.turnedmeleeweapon );
}
turned_player_buttons()
turned_player_buttons() //checked changed to match cerberus output
{
self endon( "disconnect" );
self endon( "humanify" );
level endon( "end_game" );
while ( isDefined( self.is_zombie ) && self.is_zombie )
{
while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() )
if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
{
if ( cointoss() )
{
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined );
}
while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() )
while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
{
wait 0,05;
wait 0.05;
}
}
while ( self usebuttonpressed() )
if ( self usebuttonpressed() )
{
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined );
while ( self usebuttonpressed() )
{
wait 0,05;
wait 0.05;
}
}
while ( self issprinting() )
if ( self issprinting() )
{
while ( self issprinting() )
{
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined );
wait 0,05;
wait 0.05;
}
}
wait 0,05;
wait 0.05;
}
}
turned_disable_player_weapons()
turned_disable_player_weapons() //checked matches cerberus output
{
if ( isDefined( self.is_zombie ) && self.is_zombie )
{
@ -349,7 +341,7 @@ turned_disable_player_weapons()
self disableweaponcycling();
}
turned_enable_player_weapons()
turned_enable_player_weapons() //checked changed to match cerberus output
{
self takeallweapons();
self enableweaponcycling();
@ -360,13 +352,10 @@ turned_enable_player_weapons()
self thread [[ level.humanify_custom_loadout ]]();
return;
}
else
else if ( !self hasweapon( "rottweil72_zm" ) )
{
if ( !self hasweapon( "rottweil72_zm" ) )
{
self giveweapon( "rottweil72_zm" );
self switchtoweapon( "rottweil72_zm" );
}
self giveweapon( "rottweil72_zm" );
self switchtoweapon( "rottweil72_zm" );
}
if ( isDefined( self.is_zombie ) && !self.is_zombie && !self hasweapon( level.start_weapon ) )
{
@ -396,13 +385,12 @@ turned_enable_player_weapons()
self setweaponammoclip( self get_player_lethal_grenade(), 2 );
}
get_farthest_available_zombie( player )
get_farthest_available_zombie( player ) //checked changed to match cerberus output
{
while ( 1 )
{
zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) );
x = 0;
while ( x < zombies.size )
for ( x = 0; x < zombies.size; x++ )
{
zombie = zombies[ x ];
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.in_the_ground ) && !zombie.in_the_ground && isDefined( zombie.gibbed ) && !zombie.gibbed && isDefined( zombie.head_gibbed ) && !zombie.head_gibbed && isDefined( zombie.is_being_used_as_spawnpoint ) && !zombie.is_being_used_as_spawnpoint && zombie in_playable_area() )
@ -410,29 +398,24 @@ get_farthest_available_zombie( player )
zombie.is_being_used_as_spawnpoint = 1;
return zombie;
}
x++;
}
wait 0,05;
wait 0.05;
}
}
get_available_human()
get_available_human() //checked changed to match cerberus output
{
players = get_players();
_a539 = players;
_k539 = getFirstArrayKey( _a539 );
while ( isDefined( _k539 ) )
foreach ( player in players )
{
player = _a539[ _k539 ];
if ( isDefined( player.is_zombie ) && !player.is_zombie )
{
return player;
}
_k539 = getNextArrayKey( _a539, _k539 );
}
}
silentlyremovezombie()
silentlyremovezombie() //checked matches cerberus output
{
self.skip_death_notetracks = 1;
self.nodeathragdoll = 1;
@ -440,8 +423,9 @@ silentlyremovezombie()
self self_delete();
}
getspawnpoint()
getspawnpoint() //checked matches cerberus output
{
spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints );
return spawnpoint;
}

View File

@ -50,7 +50,11 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
### The following scripts have been checked, but they have not been tested yet
```
patch_zm/maps/mp/zombies/_zm_game_module.gsc
patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc
patch_zm/maps/mp/zombies/_zm_playerhealth.gsc
patch_zm/maps/mp/zombies/_zm_power.gsc
patch_zm/maps/mp/zombies/_zm_traps.gsc
patch_zm/maps/mp/zombies/_zm_turned.gsc
patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
```
### The following scripts are not checked yet, uploaded to setup a baseline:
@ -59,12 +63,8 @@ patch_zm/maps/mp/zombies/_zm_blockers.gsc
patch_zm/maps/mp/zombies/_zm_buildables.gsc
patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc
patch_zm/maps/mp/zombies/_zm_laststand.gsc
patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc
patch_zm/maps/mp/zombies/_zm_playerhealth.gsc
patch_zm/maps/mp/zombies/_zm_power.gsc
patch_zm/maps/mp/zombies/_zm_sidequests.gsc
patch_zm/maps/mp/zombies/_zm_stats.gsc
patch_zm/maps/mp/zombies/_zm_turned.gsc
patch_zm/maps/mp/zombies/_zm_unitrigger.gsc
patch_zm/maps/mp/zombies/_zm_utility.gsc
```