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

View File

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

View File

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

View File

@ -214,6 +214,12 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus
self.badplaceawareness = 0; self.badplaceawareness = 0;
self.chatinitialized = 0; self.chatinitialized = 0;
self.a.disablepain = 1; 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(); self disable_react();
if ( isDefined( level.zombie_health ) ) if ( isDefined( level.zombie_health ) )
{ {
@ -382,6 +388,11 @@ zombie_think() //checked changed to match cerberus output
} }
else 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 thread do_zombie_spawn();
} }
self waittill( "risen", find_flesh_struct_string ); 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; 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( "death" );
self endon( "goal" ); self endon( "goal" );
level endon( "intermission" ); level endon( "intermission" );
start_pos = self.origin; 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 ) ) 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() ) 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" ); level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
self.first_node = self.entrance_nodes[ i ]; self.first_node = self.entrance_nodes[ i ];
self setgoalpos( self.entrance_nodes[ i ].origin ); self setgoalpos( self.entrance_nodes[ i ].origin );
i++;
continue; continue;
} }
return; return;
@ -611,7 +632,8 @@ zombie_assure_node() //checked changed to match cerberus output
if ( isDefined( nodes ) ) if ( isDefined( nodes ) )
{ {
self.entrance_nodes = 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() ) 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" ); level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
self.first_node = self.entrance_nodes[ i ]; self.first_node = self.entrance_nodes[ i ];
self setgoalpos( self.entrance_nodes[ i ].origin ); self setgoalpos( self.entrance_nodes[ i ].origin );
i++;
continue; continue;
} }
i++;
return; return;
} }
} }
@ -668,6 +692,11 @@ zombie_bad_path_timeout() //checked matches cerberus output
tear_into_building() //checked changed to match 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( "death" );
self endon( "teleporting" ); self endon( "teleporting" );
self zombie_history( "tear_into_building -> start" ); 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; self.first_node.attack_spots_taken[ i ] = 0;
i++; i++;
} }
level notify( "last_board_torn" ); level notify( "last_board_torn", self.first_node.zbarrier.origin );
return; return;
} }
} }
@ -1656,17 +1685,20 @@ derive_damage_refs( point ) //checked changed to match cerberus output
init_gib_tags(); init_gib_tags();
} }
closesttag = undefined; closesttag = undefined;
for ( i = 0; i < level.gib_tags.size; i++ ) i = 0;
while ( i < level.gib_tags.size )
{ {
if ( !isDefined( closesttag ) ) if ( !isDefined( closesttag ) )
{ {
closesttag = level.gib_tags[ i ]; closesttag = level.gib_tags[ i ];
i++;
continue; continue;
} }
if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) ) if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) )
{ {
closesttag = level.gib_tags[ i ]; closesttag = level.gib_tags[ i ];
} }
i++;
} }
refs = []; refs = [];
if ( closesttag != "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" ) 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" ) if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{ {
level notify( "zombie_grenade_death" ); level notify( "zombie_grenade_death", self.origin );
} }
return 0; 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 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; damageloc = zombie.damagelocation;
damagemod = zombie.damagemod; damagemod = zombie.damagemod;
attacker = zombie.attacker; 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 ) 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 ) ) if ( crumb_is_bad( crumb_index, bad_crumbs ) )
{ {
i++;
continue; continue;
} }
i++;
return breadcrumbs[ crumb_index ]; return breadcrumbs[ crumb_index ];
} }
return undefined; return undefined;
@ -2805,30 +2840,54 @@ do_zombie_spawn() //checked changed to match cerberus output
spots = []; spots = [];
if ( isDefined( self._rise_spot ) ) 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; spot = self._rise_spot;
self thread do_zombie_rise( spot ); self thread do_zombie_rise( spot );
return; 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 ) ) 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.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 ) ) ) 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; continue;
} }
if ( isDefined( level.zombie_spawn_locations[ i ].script_int ) && level.zombie_spawn_locations[ i ].script_int != self.script_int ) if ( isDefined( level.zombie_spawn_locations[ i ].script_int ) && level.zombie_spawn_locations[ i ].script_int != self.script_int )
{ {
i++;
continue; 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 ) 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; 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; self.script_parameters = spot.script_parameters;
} }
tokens = strtok( spot.script_noteworthy, " " ); 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 ) ) if ( isdefined( self.spawn_point_override ) )
{ {
spot = 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[ i ] ) )
if ( isdefined( tokens[ next_token ] ) )
{ {
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 ] ) ) if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[ str_spawn_entry ] ) )
{ {
self thread [[ level.custom_spawner_entry[ str_spawn_entry ] ]](spot); self thread [[ level.custom_spawner_entry[ str_spawn_entry ] ]](spot);
i++;
continue; continue;
} }
} }
} }
if ( token == "riser_location" ) if ( tokens[ i ] == "riser_location" )
{ {
self thread do_zombie_rise( spot ); self thread do_zombie_rise( spot );
i++;
continue; continue;
} }
if ( token == "faller_location" ) if ( tokens[ i ] == "faller_location" )
{ {
self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot ); self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot );
i++;
continue; continue;
} }
if ( token == "dog_location" ) if ( tokens[ i ] == "dog_location" )
{ {
i++;
continue; continue;
} }
if ( token == "screecher_location" ) if ( tokens[ i ] == "screecher_location" )
{ {
i++;
continue; continue;
} }
if ( token == "leaper_location" ) if ( tokens[ i ] == "leaper_location" )
{ {
i++;
continue; continue;
} }
if ( isdefined(self.anchor ) ) 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; return;
} }
self.anchor = spawn( "script_origin", self.origin ); self.anchor = spawn( "script_origin", self.origin );
@ -2965,7 +3050,13 @@ do_zombie_spawn() //checked changed to match cerberus output
self.anchor delete(); self.anchor delete();
} }
self show(); 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" ); spot notify( "stop_zombie_rise_fx" );
self.in_the_ground = 0; self.in_the_ground = 0;
self notify( "risen", spot.script_string ); 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 hide_pop() //checked matches cerberus output
@ -3269,3 +3365,4 @@ zombie_free_cam_allowed() //checked matches cerberus output
self setfreecameralockonallowed( 1 ); self setfreecameralockonallowed( 1 );
} }

View File

@ -7,7 +7,7 @@
#include maps/mp/_utility; #include maps/mp/_utility;
#include common_scripts/utility; #include common_scripts/utility;
init() init() //checked matches cerberus output
{ {
level.turnedmeleeweapon = "zombiemelee_zm"; level.turnedmeleeweapon = "zombiemelee_zm";
level.turnedmeleeweapon_dw = "zombiemelee_dw"; level.turnedmeleeweapon_dw = "zombiemelee_dw";
@ -31,24 +31,24 @@ init()
thread setup_zombie_exerts(); 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 ][ "burp" ] = "null";
level.exert_sounds[ 1 ][ "hitmed" ] = "null"; level.exert_sounds[ 1 ][ "hitmed" ] = "null";
level.exert_sounds[ 1 ][ "hitlrg" ] = "null"; level.exert_sounds[ 1 ][ "hitlrg" ] = "null";
} }
delay_turning_on_eyes() delay_turning_on_eyes() //checked matches cerberus output
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
wait_network_frame(); wait_network_frame();
wait 0,1; wait 0.1;
self setclientfield( "player_has_eyes", 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 ) 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 ) while ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify )
{ {
wait 0,1; wait 0.1;
} }
if ( !flag( "pregame" ) ) if ( !flag( "pregame" ) )
{ {
@ -150,17 +150,14 @@ turn_to_zombie()
{ {
self freezecontrols( level.player_movement_suppressed ); 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; 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 ) 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 ) 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 ); self playsoundtoplayer( "evt_spawn", self );
playsoundatposition( "evt_disappear_3d", self.origin ); playsoundatposition( "evt_disappear_3d", self.origin );
@ -233,27 +230,21 @@ turn_to_human()
{ {
self freezecontrols( level.player_movement_suppressed ); 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(); self show();
playsoundatposition( "evt_appear_3d", self.origin ); playsoundatposition( "evt_appear_3d", self.origin );
self.is_in_process_of_humanify = 0; self.is_in_process_of_humanify = 0;
} }
deletezombiesinradius( origin ) deletezombiesinradius( origin ) //checked changed to match cerberus output
{ {
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
maxradius = 128; maxradius = 128;
_a328 = zombies; foreach ( zombie in zombies )
_k328 = getFirstArrayKey( _a328 );
while ( isDefined( _k328 ) )
{ {
zombie = _a328[ _k328 ];
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.is_being_used_as_spawner ) && !zombie.is_being_used_as_spawner ) 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 ) ) if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) )
@ -261,20 +252,21 @@ deletezombiesinradius( origin )
playfx( level._effect[ "wood_chunk_destory" ], zombie.origin ); playfx( level._effect[ "wood_chunk_destory" ], zombie.origin );
zombie thread silentlyremovezombie(); 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( isDefined( self.turnedmeleeweapon ) );
#/ #/
/# /#
assert( self.turnedmeleeweapon != "none" ); assert( self.turnedmeleeweapon != "none" );
#/ #/
*/
self.turned_had_knife = self hasweapon( "knife_zm" ); self.turned_had_knife = self hasweapon( "knife_zm" );
if ( isDefined( self.turned_had_knife ) && self.turned_had_knife ) if ( isDefined( self.turned_had_knife ) && self.turned_had_knife )
{ {
@ -288,45 +280,45 @@ turned_give_melee_weapon()
self switchtoweapon( self.turnedmeleeweapon ); self switchtoweapon( self.turnedmeleeweapon );
} }
turned_player_buttons() turned_player_buttons() //checked changed to match cerberus output
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "humanify" ); self endon( "humanify" );
level endon( "end_game" ); level endon( "end_game" );
while ( isDefined( self.is_zombie ) && self.is_zombie ) while ( isDefined( self.is_zombie ) && self.is_zombie )
{ {
while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() ) if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
{ {
if ( cointoss() ) if ( cointoss() )
{ {
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined ); 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 ); self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined );
while ( self usebuttonpressed() ) while ( self usebuttonpressed() )
{ {
wait 0,05; wait 0.05;
} }
} }
while ( self issprinting() ) if ( self issprinting() )
{ {
while ( self issprinting() ) while ( self issprinting() )
{ {
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined ); 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 ) if ( isDefined( self.is_zombie ) && self.is_zombie )
{ {
@ -349,7 +341,7 @@ turned_disable_player_weapons()
self disableweaponcycling(); self disableweaponcycling();
} }
turned_enable_player_weapons() turned_enable_player_weapons() //checked changed to match cerberus output
{ {
self takeallweapons(); self takeallweapons();
self enableweaponcycling(); self enableweaponcycling();
@ -360,13 +352,10 @@ turned_enable_player_weapons()
self thread [[ level.humanify_custom_loadout ]](); self thread [[ level.humanify_custom_loadout ]]();
return; 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 ) ) 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 ); 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 ) while ( 1 )
{ {
zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) ); zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) );
x = 0; for ( x = 0; x < zombies.size; x++ )
while ( x < zombies.size )
{ {
zombie = zombies[ 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() ) 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; zombie.is_being_used_as_spawnpoint = 1;
return zombie; return zombie;
} }
x++;
} }
wait 0,05; wait 0.05;
} }
} }
get_available_human() get_available_human() //checked changed to match cerberus output
{ {
players = get_players(); players = get_players();
_a539 = players; foreach ( player in players )
_k539 = getFirstArrayKey( _a539 );
while ( isDefined( _k539 ) )
{ {
player = _a539[ _k539 ];
if ( isDefined( player.is_zombie ) && !player.is_zombie ) if ( isDefined( player.is_zombie ) && !player.is_zombie )
{ {
return player; return player;
} }
_k539 = getNextArrayKey( _a539, _k539 );
} }
} }
silentlyremovezombie() silentlyremovezombie() //checked matches cerberus output
{ {
self.skip_death_notetracks = 1; self.skip_death_notetracks = 1;
self.nodeathragdoll = 1; self.nodeathragdoll = 1;
@ -440,8 +423,9 @@ silentlyremovezombie()
self self_delete(); self self_delete();
} }
getspawnpoint() getspawnpoint() //checked matches cerberus output
{ {
spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints ); spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints );
return spawnpoint; 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 ### 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_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_traps.gsc
patch_zm/maps/mp/zombies/_zm_turned.gsc
patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
``` ```
### The following scripts are not checked yet, uploaded to setup a baseline: ### 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_buildables.gsc
patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc
patch_zm/maps/mp/zombies/_zm_laststand.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_sidequests.gsc
patch_zm/maps/mp/zombies/_zm_stats.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_unitrigger.gsc
patch_zm/maps/mp/zombies/_zm_utility.gsc patch_zm/maps/mp/zombies/_zm_utility.gsc
``` ```