diff --git a/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc b/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc index f5a13ed..ea198a4 100644 --- a/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc +++ b/patch_zm/maps/mp/zombies/_zm_ai_basic.gsc @@ -6,7 +6,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -find_flesh() +find_flesh() //checked partially changed to match cerberus output { self endon( "death" ); level endon( "intermission" ); @@ -46,66 +46,62 @@ find_flesh() { self.ignore_player = []; } - else + if ( !isDefined( level._should_skip_ignore_player_logic ) || !( [[ level._should_skip_ignore_player_logic ]]() ) ) { - while ( !isDefined( level._should_skip_ignore_player_logic ) || !( [[ level._should_skip_ignore_player_logic ]]() ) ) + i = 0; + while ( i < self.ignore_player.size ) { - i = 0; - while ( i < self.ignore_player.size ) + if ( isDefined( self.ignore_player[ i ] ) && isDefined( self.ignore_player[ i ].ignore_counter ) && self.ignore_player[ i ].ignore_counter > 3 ) { - while ( isDefined( self.ignore_player[ i ] ) && isDefined( self.ignore_player[ i ].ignore_counter ) && self.ignore_player[ i ].ignore_counter > 3 ) + self.ignore_player[ i ].ignore_counter = 0; + self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[ i ] ); + if ( !isDefined( self.ignore_player ) ) { - self.ignore_player[ i ].ignore_counter = 0; - self.ignore_player = arrayremovevalue( self.ignore_player, self.ignore_player[ i ] ); - if ( !isDefined( self.ignore_player ) ) - { - self.ignore_player = []; - } - i = 0; + self.ignore_player = []; } - i++; + i = 0; + continue; } + i++; } } player = get_closest_valid_player( self.origin, self.ignore_player ); - while ( !isDefined( player ) && !isDefined( zombie_poi ) ) + if ( !isDefined( player ) && !isDefined( zombie_poi ) ) { self maps/mp/zombies/_zm_spawner::zombie_history( "find flesh -> can't find player, continue" ); if ( isDefined( self.ignore_player ) ) { - while ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) + if ( isDefined( level._should_skip_ignore_player_logic ) && [[ level._should_skip_ignore_player_logic ]]() ) { wait 1; + continue; } self.ignore_player = []; } wait 1; + continue; } - if ( !isDefined( level.check_for_alternate_poi ) || !( [[ level.check_for_alternate_poi ]]() ) ) + if ( !isDefined( level.check_for_alternate_poi ) || ![[ level.check_for_alternate_poi ]]() ) { self.enemyoverride = zombie_poi; self.favoriteenemy = player; } self thread zombie_pathing(); - while ( players.size > 1 ) + if ( players.size > 1 ) { - i = 0; - while ( i < self.ignore_player.size ) + for ( i = 0; i < self.ignore_player.size; i++ ) { if ( isDefined( self.ignore_player[ i ] ) ) { if ( !isDefined( self.ignore_player[ i ].ignore_counter ) ) { self.ignore_player[ i ].ignore_counter = 0; - i++; - continue; } - else + else { self.ignore_player[ i ].ignore_counter += 1; } } - i++; } } self thread attractors_generated_listener(); @@ -128,12 +124,12 @@ find_flesh() } } -init_inert_zombies() +init_inert_zombies() //checked matches cerberus output { level init_inert_substates(); } -init_inert_substates() +init_inert_substates() //checked matches cerberus output { level.inert_substates = []; level.inert_substates[ level.inert_substates.size ] = "inert1"; @@ -176,7 +172,7 @@ init_inert_substates() level.inert_crawl_substate_index = 0; } -get_inert_substate() +get_inert_substate() //checked matches cerberus output { substate = level.inert_substates[ level.inert_substate_index ]; level.inert_substate_index++; @@ -188,7 +184,7 @@ get_inert_substate() return substate; } -get_inert_crawl_substate() +get_inert_crawl_substate() //checked matches cerberus output { substate = level.inert_crawl_substates[ level.inert_crawl_substate_index ]; level.inert_crawl_substate_index++; @@ -200,7 +196,7 @@ get_inert_crawl_substate() return substate; } -start_inert( in_place ) +start_inert( in_place ) //checked changed to match cerberus output { self endon( "death" ); if ( isDefined( self.is_inert ) && self.is_inert ) @@ -247,11 +243,11 @@ start_inert( in_place ) self notify( "zombie_acquire_enemy" ); } } - while ( isDefined( self.is_traversing ) && self.is_traversing ) + if ( isDefined( self.is_traversing ) && self.is_traversing ) { while ( self isinscriptedstate() ) { - wait 0,1; + wait 0.1; } } if ( isDefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) @@ -266,7 +262,7 @@ start_inert( in_place ) self inert_think( in_place ); } -inert_think( in_place ) +inert_think( in_place ) //checked changed to match cerberus output { self endon( "death" ); self.ignoreall = 1; @@ -297,7 +293,7 @@ inert_think( in_place ) } self setanimstatefromasd( "zm_inert", substate ); self maps/mp/zombies/_zm_spawner::zombie_history( "zm_inert ASD " + getTime() ); - if ( substate != "inert3" && substate != "inert4" || substate == "inert5" && substate == "inert6" ) + if ( substate == "inert3" && substate == "inert4" || substate == "inert5" && substate == "inert6" ) { self thread inert_watch_goal(); } @@ -326,15 +322,12 @@ inert_think( in_place ) { self [[ self.inert_wakeup_override ]](); } - else + else if ( isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) { - if ( isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) + self.ignoreall = 0; + if ( isDefined( level.ignore_find_flesh ) && !self [[ level.ignore_find_flesh ]]() ) { - self.ignoreall = 0; - if ( isDefined( level.ignore_find_flesh ) && !( self [[ level.ignore_find_flesh ]]() ) ) - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); } } self.becoming_inert = undefined; @@ -344,7 +337,7 @@ inert_think( in_place ) self maps/mp/zombies/_zm_spawner::zombie_history( "is_inert cleared " + getTime() ); } -inert_watch_goal() +inert_watch_goal() //checked changed to match cerberus output { self endon( "death" ); self endon( "stop_zombie_inert" ); @@ -352,18 +345,17 @@ inert_watch_goal() { self waittill( "goal" ); locs = array_randomize( level.enemy_dog_locations ); - _a481 = locs; - _k481 = getFirstArrayKey( _a481 ); - while ( isDefined( _k481 ) ) + i = 0; + while ( i < locs.size ) { - loc = _a481[ _k481 ]; - dist_sq = distancesquared( self.origin, loc.origin ); + dist_sq = distancesquared( self.origin, locs[ i ].origin ); if ( dist_sq > 90000 ) { - self setgoalpos( loc.origin ); - break; + self setgoalpos( locs[ i ].origin ); + i++; + continue; } - _k481 = getNextArrayKey( _a481, _k481 ); + i++; } if ( locs.size > 0 ) { @@ -372,7 +364,7 @@ inert_watch_goal() } } -inert_wakeup() +inert_wakeup() //checked changed at own discretion parity in behavior to cerberus output { self endon( "death" ); self endon( "stop_zombie_inert" ); @@ -383,11 +375,8 @@ inert_wakeup() { current_time = getTime(); players = get_players(); - _a522 = players; - _k522 = getFirstArrayKey( _a522 ); - while ( isDefined( _k522 ) ) + foreach ( player in players ) { - player = _a522[ _k522 ]; dist_sq = distancesquared( self.origin, player.origin ); if ( dist_sq < 4096 ) { @@ -410,64 +399,60 @@ inert_wakeup() return; } } - _k522 = getNextArrayKey( _a522, _k522 ); } wait 0.1; } } -inert_bump() +inert_bump() //checked changed at own discretion parity in behavior to cerberus output { self endon( "death" ); self endon( "stop_zombie_inert" ); while ( 1 ) { zombies = getaiarray( level.zombie_team ); - _a562 = zombies; - _k562 = getFirstArrayKey( _a562 ); - while ( isDefined( _k562 ) ) + i = 0; + while ( i < zombies.size ) { - zombie = _a562[ _k562 ]; - if ( zombie == self ) + if ( zombies[ i ] == self ) { + i++; + continue; } - else if ( isDefined( zombie.is_inert ) && zombie.is_inert ) + if ( isDefined( zombies[ i ].is_inert ) && zombies[ i ].is_inert ) { + i++; + continue; } - else + if ( isDefined( zombies[ i ].becoming_inert ) && zombies[ i ].becoming_inert ) { - if ( isDefined( zombie.becoming_inert ) && zombie.becoming_inert ) - { - break; - } - else - { - dist_sq = distancesquared( self.origin, zombie.origin ); - if ( dist_sq < 1296 ) - { - self stop_inert(); - return; - } - } + i++; + continue; } - _k562 = getNextArrayKey( _a562, _k562 ); + dist_sq = distancesquared( self.origin, zombies[ i ].origin ); + if ( dist_sq < 1296 ) + { + self stop_inert(); + return; + } + i++; } wait 0.2; } } -inert_damage() +inert_damage() //checked changed to match cerberus output { self endon( "death" ); self endon( "stop_zombie_inert" ); while ( 1 ) { self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - while ( weaponname == "emp_grenade_zm" ) + if ( weaponname == "emp_grenade_zm" ) { continue; } - while ( isDefined( inflictor ) ) + if ( isDefined( inflictor ) ) { if ( isDefined( inflictor._trap_type ) && inflictor._trap_type == "fire" ) { @@ -478,7 +463,7 @@ inert_damage() self stop_inert(); } -grenade_watcher( grenade ) +grenade_watcher( grenade ) //checked changed to match cerberus output { grenade waittill( "explode", grenade_origin ); zombies = get_array_of_closest( grenade_origin, get_round_enemy_array(), undefined, undefined, 2400 ); @@ -486,22 +471,18 @@ grenade_watcher( grenade ) { return; } - _a633 = zombies; - _k633 = getFirstArrayKey( _a633 ); - while ( isDefined( _k633 ) ) + foreach ( zombie in zombies ) { - zombie = _a633[ _k633 ]; zombie stop_inert(); - _k633 = getNextArrayKey( _a633, _k633 ); } } -stop_inert() +stop_inert() //checked matches cerberus output { self notify( "stop_zombie_inert" ); } -inert_transition() +inert_transition() //checked changed to match cerberus output { self endon( "death" ); self endon( "stop_zombie_inert_transition" ); @@ -526,20 +507,17 @@ inert_transition() } trans_num = 2; } - else + else if ( self.zombie_move_speed == "sprint" ) { - if ( self.zombie_move_speed == "sprint" ) + if ( self.has_legs ) { - if ( self.has_legs ) - { - trans_set = level.inert_trans_sprint; - } - else - { - trans_set = level.inert_crawl_trans_sprint; - } - trans_num = 2; + trans_set = level.inert_trans_sprint; } + else + { + trans_set = level.inert_crawl_trans_sprint; + } + trans_num = 2; } self thread inert_eye_glow(); self setanimstatefromasd( animstate, trans_set[ randomint( trans_num ) ] ); @@ -547,7 +525,7 @@ inert_transition() maps/mp/animscripts/zm_shared::donotetracks( "inert_trans_anim" ); } -inert_eye_glow() +inert_eye_glow() //checked changed to match cerberus output { self endon( "death" ); while ( 1 ) @@ -556,16 +534,13 @@ inert_eye_glow() if ( note == "end" ) { return; - continue; } - else + else if ( note == "zmb_awaken" ) { - if ( note == "zmb_awaken" ) - { - self maps/mp/zombies/_zm_spawner::zombie_eye_glow(); - return; - } + self maps/mp/zombies/_zm_spawner::zombie_eye_glow(); + return; } } } + diff --git a/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc b/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc index 8a3191f..5e86ee5 100644 --- a/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc +++ b/patch_zm/maps/mp/zombies/_zm_ai_faller.gsc @@ -5,7 +5,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -zombie_faller_delete() +zombie_faller_delete() //checked matches cerberus output { level.zombie_total++; self maps/mp/zombies/_zm_spawner::reset_attack_spot(); @@ -17,15 +17,14 @@ zombie_faller_delete() self delete(); } -faller_script_parameters() +faller_script_parameters() //checked changed to match cerberus output { - while ( isDefined( self.script_parameters ) ) + if ( isDefined( self.script_parameters ) ) { parms = strtok( self.script_parameters, ";" ); - while ( isDefined( parms ) && parms.size > 0 ) + if ( isDefined( parms ) && parms.size > 0 ) { - i = 0; - while ( i < parms.size ) + for ( i = 0; i < parms.size; i++ ) { if ( parms[ i ] == "drop_now" ) { @@ -43,13 +42,12 @@ faller_script_parameters() { self.emerge_bottom = 1; } - i++; } } } } -setup_deathfunc( func_name ) +setup_deathfunc( func_name ) //checked matches cerberus output { self endon( "death" ); while ( isDefined( self.zombie_init_done ) && !self.zombie_init_done ) @@ -70,13 +68,13 @@ setup_deathfunc( func_name ) } } -do_zombie_fall( spot ) +do_zombie_fall( spot ) //checked changed to match cerberus output { self endon( "death" ); self.zombie_faller_location = spot; self.zombie_faller_location.is_enabled = 0; self.zombie_faller_location faller_script_parameters(); - if ( isDefined( self.zombie_faller_location.emerge_bottom ) || self.zombie_faller_location.emerge_bottom && isDefined( self.zombie_faller_location.emerge_top ) && self.zombie_faller_location.emerge_top ) + if ( isDefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom || isDefined( self.zombie_faller_location.emerge_top ) && self.zombie_faller_location.emerge_top ) { self do_zombie_emerge( spot ); return; @@ -89,18 +87,18 @@ do_zombie_fall( spot ) self linkto( self.anchor ); if ( !isDefined( spot.angles ) ) { - spot.angles = ( 0, 0, -1 ); + spot.angles = ( 0, 0, 0 ); } anim_org = spot.origin; anim_ang = spot.angles; self ghost(); - self.anchor moveto( anim_org, 0,05 ); + self.anchor moveto( anim_org, 0.05 ); self.anchor waittill( "movedone" ); target_org = get_desired_origin(); if ( isDefined( target_org ) ) { anim_ang = vectorToAngles( target_org - self.origin ); - self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0,05 ); + self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 ); self.anchor waittill( "rotatedone" ); } self unlink(); @@ -114,10 +112,10 @@ do_zombie_fall( spot ) self thread zombie_faller_death_wait(); self thread zombie_faller_do_fall(); self.no_powerups = 0; - self notify( "risen" ); + self notify( "risen", spot.script_string ); } -zombie_faller_do_fall() +zombie_faller_do_fall() //checked changed to match cerberus output { self endon( "death" ); self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_emerge" ); @@ -136,7 +134,6 @@ zombie_faller_do_fall() { self.zombie_faller_should_drop = 1; } - continue; } else if ( self zombie_faller_always_drop() ) { @@ -153,21 +150,24 @@ zombie_faller_do_fall() self.zombie_faller_should_drop = 1; break; } - else self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); - self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + else + { + self animscripted( self.origin, self.zombie_faller_location.angles, "zm_faller_attack" ); + self maps/mp/animscripts/zm_shared::donotetracks( "attack_anim", ::handle_fall_notetracks, self.zombie_faller_location ); + } } self notify( "falling" ); spot = self.zombie_faller_location; self zombie_faller_enable_location(); self animscripted( self.origin, spot.angles, "zm_faller_fall" ); self maps/mp/animscripts/zm_shared::donotetracks( "fall_anim", ::handle_fall_notetracks, spot ); - self.deathfunction = ::zombie_death_animscript; + self.deathfunction = maps/mp/zombies/_zm_spawner::zombie_death_animscript; self notify( "fall_anim_finished" ); spot notify( "stop_zombie_fall_fx" ); self stopanimscripted(); landanimdelta = 15; ground_pos = groundpos_ignore_water_new( self.origin ); - physdist = ( self.origin[ 2 ] - ground_pos[ 2 ] ) + landanimdelta; + physdist = self.origin[ 2 ] - ground_pos[ 2 ] + landanimdelta; if ( physdist > 0 ) { self animcustom( ::zombie_fall_loop ); @@ -180,33 +180,30 @@ zombie_faller_do_fall() self.no_powerups = 0; } -zombie_fall_loop() +zombie_fall_loop() //checked changed to match cerberus output { self endon( "death" ); self setanimstatefromasd( "zm_faller_fall_loop" ); while ( 1 ) { ground_pos = groundpos_ignore_water_new( self.origin ); - if ( ( self.origin[ 2 ] - ground_pos[ 2 ] ) < 20 ) + if ( self.origin[ 2 ] - ground_pos[ 2 ] < 20 ) { self notify( "faller_on_ground" ); - return; - } - else - { - wait 0.05; + break; } + wait 0.05; } } -zombie_land() +zombie_land() //checked matches cerberus output { self setanimstatefromasd( "zm_faller_land" ); maps/mp/animscripts/zm_shared::donotetracks( "land_anim" ); self notify( "zombie_land_done" ); } -zombie_faller_always_drop() +zombie_faller_always_drop() //checked matches cerberus output { if ( isDefined( self.zombie_faller_location.drop_now ) && self.zombie_faller_location.drop_now ) { @@ -215,7 +212,7 @@ zombie_faller_always_drop() return 0; } -zombie_faller_drop_not_occupied() +zombie_faller_drop_not_occupied() //checked matches cerberus output { if ( isDefined( self.zombie_faller_location.drop_not_occupied ) && self.zombie_faller_location.drop_not_occupied ) { @@ -227,18 +224,16 @@ zombie_faller_drop_not_occupied() return 0; } -zombie_faller_watch_all_players() +zombie_faller_watch_all_players() //checked changed to match cerberus output { players = get_players(); - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { self thread zombie_faller_watch_player( players[ i ] ); - i++; } } -zombie_faller_watch_player( player ) +zombie_faller_watch_player( player ) //checked changed to match cerberus output { self endon( "falling" ); self endon( "death" ); @@ -250,7 +245,7 @@ zombie_faller_watch_player( player ) inrangetime = 0; closerange = 60; closerangesqr = closerange * closerange; - dirtoplayerenter = ( 0, 0, -1 ); + dirtoplayerenter = ( 0, 0, 0 ); incloserange = 0; while ( 1 ) { @@ -262,7 +257,7 @@ zombie_faller_watch_player( player ) if ( ( inrangetime + timer ) < getTime() ) { self.zombie_faller_should_drop = 1; - return; + break; } } else @@ -285,35 +280,29 @@ zombie_faller_watch_player( player ) } incloserange = 1; } - else + else if ( incloserange ) { - if ( incloserange ) + dirtoplayerexit = player.origin - self.origin; + dirtoplayerexit = ( dirtoplayerexit[ 0 ], dirtoplayerexit[ 1 ], 0 ); + dirtoplayerexit = vectornormalize( dirtoplayerexit ); + if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) { - dirtoplayerexit = player.origin - self.origin; - dirtoplayerexit = ( dirtoplayerexit[ 0 ], dirtoplayerexit[ 1 ], 0 ); - dirtoplayerexit = vectornormalize( dirtoplayerexit ); - if ( vectordot( dirtoplayerenter, dirtoplayerexit ) < 0 ) - { - self.zombie_faller_should_drop = 1; - return; - } + self.zombie_faller_should_drop = 1; + break; } - else - { - incloserange = 0; - } - wait 0.1; } + incloserange = 0; + wait 0.1; } } -zombie_fall_wait() +zombie_fall_wait() //checked changed to match cerberus output { self endon( "falling" ); self endon( "death" ); - while ( isDefined( self.zone_name ) ) + if ( isDefined( self.zone_name ) ) { - while ( isDefined( level.zones ) && isDefined( level.zones[ self.zone_name ] ) ) + if ( isDefined( level.zones ) && isDefined( level.zones[ self.zone_name ] ) ) { zone = level.zones[ self.zone_name ]; while ( 1 ) @@ -325,10 +314,13 @@ zombie_fall_wait() if ( self.health != level.zombie_health ) { self.zombie_faller_should_drop = 1; + break; + } + else + { + self zombie_faller_delete(); return; } - else self zombie_faller_delete(); - return; } } wait 0.5; @@ -343,7 +335,7 @@ zombie_fall_should_attack( spot ) return victims.size > 0; } -zombie_fall_get_vicitims( spot ) +zombie_fall_get_vicitims( spot ) //checked partially changed to match cerberus output //continues in for loops bad { ret = []; players = getplayers(); @@ -358,40 +350,34 @@ zombie_fall_get_vicitims( spot ) i++; continue; } - else stance = player getstance(); + stance = player getstance(); if ( stance == "crouch" || stance == "prone" ) { i++; continue; } - else + zcheck = self.origin[ 2 ] - player.origin[ 2 ]; + if ( zcheck < 0 || zcheck > 120 ) { - zcheck = self.origin[ 2 ] - player.origin[ 2 ]; - if ( zcheck < 0 || zcheck > 120 ) - { - i++; - continue; - } - else - { - dist2 = distance2dsquared( player.origin, self.origin ); - if ( dist2 < checkdist2 ) - { - ret[ ret.size ] = player; - } - } + i++; + continue; + } + dist2 = distance2dsquared( player.origin, self.origin ); + if ( dist2 < checkdist2 ) + { + ret[ ret.size ] = player; } i++; } return ret; } -get_fall_anim( spot ) +get_fall_anim( spot ) //checked matches cerberus output { return level._zombie_fall_anims[ self.animname ][ "fall" ]; } -zombie_faller_enable_location() +zombie_faller_enable_location() //checked matches cerberus output { if ( isDefined( self.zombie_faller_location ) ) { @@ -400,7 +386,7 @@ zombie_faller_enable_location() } } -zombie_faller_death_wait( endon_notify ) +zombie_faller_death_wait( endon_notify ) //checked matches cerberus output { self endon( "falling" ); if ( isDefined( endon_notify ) ) @@ -411,14 +397,14 @@ zombie_faller_death_wait( endon_notify ) self zombie_faller_enable_location(); } -zombie_fall_death_func() +zombie_fall_death_func() //checked matches cerberus output { self animmode( "noclip" ); self.deathanim = "zm_faller_emerge_death"; return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); } -zombie_fall_death( spot ) +zombie_fall_death( spot ) //checked matches cerberus output { self endon( "fall_anim_finished" ); while ( self.health > 1 ) @@ -429,7 +415,7 @@ zombie_fall_death( spot ) spot notify( "stop_zombie_fall_fx" ); } -_damage_mod_to_damage_type( type ) +_damage_mod_to_damage_type( type ) //checked changed to match cerberus output { toks = strtok( type, "_" ); if ( toks.size < 2 ) @@ -437,17 +423,15 @@ _damage_mod_to_damage_type( type ) return type; } returnstr = toks[ 1 ]; - i = 2; - while ( i < toks.size ) + for ( i = 2; i < toks.size; i++ ) { returnstr += toks[ i ]; - i++; } returnstr = tolower( returnstr ); return returnstr; } -zombie_fall_fx( spot ) +zombie_fall_fx( spot ) //checked matches cerberus output { spot thread zombie_fall_dust_fx( self ); spot thread zombie_fall_burst_fx(); @@ -461,7 +445,7 @@ zombie_fall_fx( spot ) } } -zombie_fall_burst_fx() +zombie_fall_burst_fx() //checked matches cerberus output { self endon( "stop_zombie_fall_fx" ); self endon( "fall_anim_finished" ); @@ -470,7 +454,7 @@ zombie_fall_burst_fx() playfx( level._effect[ "rise_billow" ], self.origin + ( randomintrange( -10, 10 ), randomintrange( -10, 10 ), randomintrange( 5, 10 ) ) ); } -zombie_fall_dust_fx( zombie ) +zombie_fall_dust_fx( zombie ) //checked does not match cerberus output did not change { dust_tag = "J_SpineUpper"; self endon( "stop_zombie_fall_dust_fx" ); @@ -486,42 +470,37 @@ zombie_fall_dust_fx( zombie ) } } -stop_zombie_fall_dust_fx( zombie ) +stop_zombie_fall_dust_fx( zombie ) //checked matches cerberus output { zombie waittill( "death" ); self notify( "stop_zombie_fall_dust_fx" ); } -handle_fall_notetracks( note, spot ) +handle_fall_notetracks( note, spot ) //checked changed to match cerberus output { if ( note == "deathout" ) { self.deathfunction = ::faller_death_ragdoll; } - else + if ( note == "fire" ) { - while ( note == "fire" ) + victims = zombie_fall_get_vicitims( spot ); + for ( i = 0; i < victims.size; i++) { - victims = zombie_fall_get_vicitims( spot ); - i = 0; - while ( i < victims.size ) - { - victims[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); - self.zombie_faller_should_drop = 1; - i++; - } + victims[ i ] dodamage( self.meleedamage, self.origin, self, self, "none", "MOD_MELEE" ); + self.zombie_faller_should_drop = 1; } } } -faller_death_ragdoll() +faller_death_ragdoll() //checked matches cerberus output { self startragdoll(); self launchragdoll( ( 0, 0, -1 ) ); return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); } -in_player_fov( player ) +in_player_fov( player ) //checked does not match cerberus output did not change { playerangles = player getplayerangles(); playerforwardvec = anglesToForward( playerangles ); @@ -538,11 +517,11 @@ in_player_fov( player ) { banzaivsplayerfovbuffer = 0.2; } - inplayerfov = anglefromcenter <= ( ( playerfov * 0.5 ) * ( 1 - banzaivsplayerfovbuffer ) ); + inplayerfov = anglefromcenter <= ( playerfov * 0.5 ) * ( 1 - banzaivsplayerfovbuffer ); return inplayerfov; } -potentially_visible( how_close ) +potentially_visible( how_close ) //checked changed to match cerberus output { if ( !isDefined( how_close ) ) { @@ -550,8 +529,7 @@ potentially_visible( how_close ) } potentiallyvisible = 0; players = getplayers(); - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { dist = distancesquared( self.origin, players[ i ].origin ); if ( dist < how_close ) @@ -563,15 +541,11 @@ potentially_visible( how_close ) break; } } - else - { - i++; - } } return potentiallyvisible; } -do_zombie_emerge( spot ) +do_zombie_emerge( spot ) //checked changed to match cerberus output { self endon( "death" ); self thread setup_deathfunc( ::faller_death_ragdoll ); @@ -588,11 +562,11 @@ do_zombie_emerge( spot ) self zombie_faller_emerge( spot ); self.create_eyes = 1; wait 0.1; - self notify( "risen" ); + self notify( "risen", spot.script_string ); self zombie_faller_enable_location(); } -zombie_faller_emerge( spot ) +zombie_faller_emerge( spot ) //checked matches cerberus output { self endon( "death" ); if ( isDefined( self.zombie_faller_location.emerge_bottom ) && self.zombie_faller_location.emerge_bottom ) @@ -604,12 +578,12 @@ zombie_faller_emerge( spot ) self animscripted( self.zombie_faller_location.origin, self.zombie_faller_location.angles, "zombie_riser_elevator_from_ceiling" ); } self maps/mp/animscripts/zm_shared::donotetracks( "rise_anim" ); - self.deathfunction = ::zombie_death_animscript; + self.deathfunction = maps/mp/zombies/_zm_spawner::zombie_death_animscript; self.in_the_ceiling = 0; self.no_powerups = 0; } -zombie_emerge_fx( spot ) +zombie_emerge_fx( spot ) //checked matches cerberus output { spot thread zombie_emerge_dust_fx( self ); playsoundatposition( "zmb_zombie_spawn", spot.origin ); @@ -618,7 +592,7 @@ zombie_emerge_fx( spot ) wait 1; } -zombie_emerge_dust_fx( zombie ) +zombie_emerge_dust_fx( zombie ) //checked does not match cerberus output did not change { dust_tag = "J_SpineUpper"; self endon( "stop_zombie_fall_dust_fx" ); @@ -634,9 +608,10 @@ zombie_emerge_dust_fx( zombie ) } } -stop_zombie_emerge_dust_fx( zombie ) +stop_zombie_emerge_dust_fx( zombie ) //checked matches cerberus output { zombie waittill( "death" ); self notify( "stop_zombie_fall_dust_fx" ); } + diff --git a/patch_zm/maps/mp/zombies/_zm_clone.gsc b/patch_zm/maps/mp/zombies/_zm_clone.gsc index d9417c9..6a4806a 100644 --- a/patch_zm/maps/mp/zombies/_zm_clone.gsc +++ b/patch_zm/maps/mp/zombies/_zm_clone.gsc @@ -2,14 +2,14 @@ #include maps/mp/_utility; #include common_scripts/utility; -//#using_animtree( "zm_ally" ); +//#using_animtree( "zm_ally" ); //cannot use this in gsc -init() +init() //checked matches cerberus output { init_mover_tree(); } -spawn_player_clone( player, origin, forceweapon, forcemodel ) +spawn_player_clone( player, origin, forceweapon, forcemodel ) //checked matches cerberus output { if ( !isDefined( origin ) ) { @@ -66,17 +66,17 @@ spawn_player_clone( player, origin, forceweapon, forcemodel ) return clone; } -clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +clone_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output { idamage = 0; - if ( sweapon != "knife_ballistic_upgraded_zm" && sweapon != "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" && sweapon == "knife_ballistic_sickle_upgraded_zm" ) + if ( sweapon == "knife_ballistic_upgraded_zm" && sweapon == "knife_ballistic_bowie_upgraded_zm" || sweapon == "knife_ballistic_no_melee_upgraded_zm" && sweapon == "knife_ballistic_sickle_upgraded_zm" ) { self notify( "player_revived" ); } return idamage; } -clone_give_weapon( weapon ) +clone_give_weapon( weapon ) //checked matches cerberus output { weaponmodel = getweaponmodel( weapon ); if ( weaponmodel != "" && weaponmodel != "none" ) @@ -85,7 +85,7 @@ clone_give_weapon( weapon ) } } -clone_animate( animtype ) +clone_animate( animtype ) //checked matches cerberus output { if ( self.isactor ) { @@ -97,7 +97,7 @@ clone_animate( animtype ) } } -clone_actor_animate( animtype ) +clone_actor_animate( animtype ) //checked matches cerberus output { wait 0.1; switch( animtype ) @@ -112,12 +112,12 @@ clone_actor_animate( animtype ) } } -init_mover_tree() +init_mover_tree() //checked matches cerberus output { scriptmodelsuseanimtree( -1 ); } -clone_mover_animate( animtype ) +clone_mover_animate( animtype ) //checked matches cerberus output { self useanimtree( -1 ); switch( animtype ) diff --git a/patch_zm/maps/mp/zombies/_zm_ffotd.gsc b/patch_zm/maps/mp/zombies/_zm_ffotd.gsc index 5aa98ca..a44bfe9 100644 --- a/patch_zm/maps/mp/zombies/_zm_ffotd.gsc +++ b/patch_zm/maps/mp/zombies/_zm_ffotd.gsc @@ -3,7 +3,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -main_start() +main_start() //checked matches cerberus output { mapname = tolower( getDvar( "mapname" ) ); gametype = getDvar( "ui_gametype" ); @@ -25,24 +25,21 @@ main_start() } } -main_end() +main_end() //checked matches cerberus output { onfinalizeinitialization_callback( ::force_navcomputer_trigger_think ); level.original_melee_miss_func = level.melee_miss_func; level.melee_miss_func = ::ffotd_melee_miss_func; } -force_navcomputer_trigger_think() +force_navcomputer_trigger_think() //checked changed to match cerberus output { if ( !isDefined( level.zombie_include_buildables ) || !level.zombie_include_buildables.size ) { return; } - _a52 = level.zombie_include_buildables; - _k52 = getFirstArrayKey( _a52 ); - while ( isDefined( _k52 ) ) + foreach ( buildable in level.zombie_include_buildables ) { - buildable = _a52[ _k52 ]; if ( buildable.name == "sq_common" ) { if ( isDefined( buildable.triggerthink ) ) @@ -55,22 +52,18 @@ force_navcomputer_trigger_think() return; } } - _k52 = getNextArrayKey( _a52, _k52 ); } } -transit_navcomputer_remove_card_on_success() +transit_navcomputer_remove_card_on_success() //checked changed to match cerberus output { wait_for_buildable( "sq_common" ); wait_network_frame(); trig_pos = getstruct( "sq_common_key", "targetname" ); trigs = getentarray( "trigger_radius_use", "classname" ); nav_trig = undefined; - _a81 = trigs; - _k81 = getFirstArrayKey( _a81 ); - while ( isDefined( _k81 ) ) + foreach ( trig in trigs ) { - trig = _a81[ _k81 ]; if ( trig.origin == trig_pos.origin ) { nav_trig = trig; @@ -88,33 +81,25 @@ transit_navcomputer_remove_card_on_success() } } players = get_players(); - _a101 = players; - _k101 = getFirstArrayKey( _a101 ); - while ( isDefined( _k101 ) ) + foreach ( player in players ) { - player = _a101[ _k101 ]; player maps/mp/zombies/_zm_stats::set_global_stat( level.navcard_needed, 0 ); - _k101 = getNextArrayKey( _a101, _k101 ); } level thread sq_refresh_player_navcard_hud(); } } -sq_refresh_player_navcard_hud() +sq_refresh_player_navcard_hud() //checked changed to match cerberus output { if ( !isDefined( level.navcards ) ) { return; } players = get_players(); - _a116 = players; - _k116 = getFirstArrayKey( _a116 ); - while ( isDefined( _k116 ) ) + foreach ( player in players ) { - player = _a116[ _k116 ]; navcard_bits = 0; - i = 0; - while ( i < level.navcards.size ) + for ( i = 0; i < level.navcards.size; i++ ) { hasit = player maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); if ( isDefined( player.navcard_grabbed ) && player.navcard_grabbed == level.navcards[ i ] ) @@ -125,7 +110,6 @@ sq_refresh_player_navcard_hud() { navcard_bits = navcard_bits + 1; } - i++; } wait_network_frame(); player setclientfield( "navcard_held", 0 ); @@ -134,17 +118,16 @@ sq_refresh_player_navcard_hud() wait_network_frame(); player setclientfield( "navcard_held", navcard_bits ); } - _k116 = getNextArrayKey( _a116, _k116 ); } } player_in_exploit_area( player_trigger_origin, player_trigger_radius ) { - if ( distancesquared( player_trigger_origin, self.origin ) < ( player_trigger_radius * player_trigger_radius ) ) + if ( distancesquared( player_trigger_origin, self.origin ) < player_trigger_radius * player_trigger_radius ) { /* /# - iprintlnbold( "player exploit detectect" ); + iprintlnbold( "player exploit detected" ); #/ */ return 1; @@ -152,7 +135,7 @@ player_in_exploit_area( player_trigger_origin, player_trigger_radius ) return 0; } -path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ) //checked matches cerberus output { spawnflags = 9; zombie_trigger = spawn( "trigger_radius", zombie_trigger_origin, spawnflags, zombie_trigger_radius, zombie_trigger_height ); @@ -172,7 +155,7 @@ path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_h } } -exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) +exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, zombie_goto_point ) //checked matches cerberus output { self endon( "death" ); self.reroute = 1; @@ -199,7 +182,7 @@ exploit_reroute( zombie_trigger, player_trigger_origin, player_trigger_radius, z self.reroute = 0; } -debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) +debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_goto_point ) //dev call commented out { /* /# @@ -215,7 +198,7 @@ debug_exploit( player_origin, player_radius, enemy_origin, enemy_radius, zombie_ */ } -ffotd_melee_miss_func() +ffotd_melee_miss_func() //checked matches cerberus output { if ( isDefined( self.enemy ) ) { diff --git a/patch_zm/maps/mp/zombies/_zm_net.gsc b/patch_zm/maps/mp/zombies/_zm_net.gsc index 4081f4a..32f06cb 100644 --- a/patch_zm/maps/mp/zombies/_zm_net.gsc +++ b/patch_zm/maps/mp/zombies/_zm_net.gsc @@ -2,7 +2,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -network_choke_init( id, max ) +network_choke_init( id, max ) //checked matches cerberus output { if ( !isDefined( level.zombie_network_choke_ids_max ) ) { @@ -14,7 +14,7 @@ network_choke_init( id, max ) level thread network_choke_thread( id ); } -network_choke_thread( id ) +network_choke_thread( id ) //checked matches cerberus output { while ( 1 ) { @@ -24,12 +24,12 @@ network_choke_thread( id ) } } -network_choke_safe( id ) +network_choke_safe( id ) //checked matches cerberus output { return level.zombie_network_choke_ids_count[ id ] < level.zombie_network_choke_ids_max[ id ]; } -network_choke_action( id, choke_action, arg1, arg2, arg3 ) +network_choke_action( id, choke_action, arg1, arg2, arg3 ) //checked matches cerberus output { /* /# @@ -56,7 +56,7 @@ network_choke_action( id, choke_action, arg1, arg2, arg3 ) return [[ choke_action ]]( arg1, arg2, arg3 ); } -network_entity_valid( entity ) +network_entity_valid( entity ) //checked matches cerberus output { if ( !isDefined( entity ) ) { @@ -65,7 +65,7 @@ network_entity_valid( entity ) return 1; } -network_safe_init( id, max ) +network_safe_init( id, max ) //checked matches cerberus output { if ( !isDefined( level.zombie_network_choke_ids_max ) || !isDefined( level.zombie_network_choke_ids_max[ id ] ) ) { @@ -78,18 +78,18 @@ network_safe_init( id, max ) */ } -_network_safe_spawn( classname, origin ) +_network_safe_spawn( classname, origin ) //checked matches cerberus output { return spawn( classname, origin ); } -network_safe_spawn( id, max, classname, origin ) +network_safe_spawn( id, max, classname, origin ) //checked matches cerberus output { network_safe_init( id, max ); return network_choke_action( id, ::_network_safe_spawn, classname, origin ); } -_network_safe_play_fx_on_tag( fx, entity, tag ) +_network_safe_play_fx_on_tag( fx, entity, tag ) //checked matches cerberus output { if ( network_entity_valid( entity ) ) { @@ -97,7 +97,7 @@ _network_safe_play_fx_on_tag( fx, entity, tag ) } } -network_safe_play_fx_on_tag( id, max, fx, entity, tag ) +network_safe_play_fx_on_tag( id, max, fx, entity, tag ) //checked matches cerberus output { network_safe_init( id, max ); network_choke_action( id, ::_network_safe_play_fx_on_tag, fx, entity, tag ); diff --git a/patch_zm/maps/mp/zombies/_zm_timer.gsc b/patch_zm/maps/mp/zombies/_zm_timer.gsc index 4dfc9b7..dba9537 100644 --- a/patch_zm/maps/mp/zombies/_zm_timer.gsc +++ b/patch_zm/maps/mp/zombies/_zm_timer.gsc @@ -2,7 +2,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -init() +init() //checked matches cerberus output { precacheshader( "zombie_stopwatchneedle" ); precacheshader( "zombie_stopwatch" ); @@ -13,7 +13,7 @@ init() } } -start_timer( time, stop_notify ) +start_timer( time, stop_notify ) //checked matches cerberus output { self notify( "stop_prev_timer" ); self endon( "stop_prev_timer" ); @@ -56,7 +56,7 @@ start_timer( time, stop_notify ) self.stopwatch_elem_glass.alpha = 0; } -wait_for_stop_notify( stop_notify ) +wait_for_stop_notify( stop_notify ) //checked matches cerberus output { self endon( "stop_prev_timer" ); self endon( "countdown_finished" ); @@ -65,7 +65,7 @@ wait_for_stop_notify( stop_notify ) self.stopwatch_elem_glass.alpha = 0; } -update_hud_position() +update_hud_position() //checked matches cerberus output { self endon( "disconnect" ); self endon( "stop_prev_timer" ); diff --git a/patch_zm/readme.md b/patch_zm/readme.md index 59aa682..a240b3b 100644 --- a/patch_zm/readme.md +++ b/patch_zm/readme.md @@ -5,10 +5,14 @@ patch_zm/maps/mp/gametypes_zm/_globalentities.gsc patch_zm/maps/mp/gametypes_zm/_scoreboard.gsc patch_zm/maps/mp/gametypes_zm/_shellshock.gsc patch_zm/maps/mp/gametypes_zm/zclassic.gsc +patch_zm/maps/mp/zombies/_zm_ai_basic.gsc patch_zm/maps/mp/zombies/_zm_ai_dogs.gsc +patch_zm/maps/mp/zombies/_zm_ai_faller.gsc patch_zm/maps/mp/zombies/_zm_audio.gsc patch_zm/maps/mp/zombies/_zm_audio_announcer.gsc patch_zm/maps/mp/zombies/_zm_bot.gsc +patch_zm/maps/mp/zombies/_zm_clone.gsc +patch_zm/maps/mp/zombies/_zm_ffotd.gsc patch_zm/maps/mp/zombies/_zm_magicbox.gsc patch_zm/maps/mp/zombies/_zm_net.gsc patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc @@ -64,12 +68,8 @@ patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc ### The following scripts have not been checked using the proper debugging methods: ``` -patch_zm/maps/mp/zombies/_zm_ai_basic.gsc -patch_zm/maps/mp/zombies/_zm_ai_faller.gsc -patch_zm/maps/mp/zombies/_zm_clone.gsc patch_zm/maps/mp/zombies/_zm_equip_hacker.gsc patch_zm/maps/mp/zombies/_zm_equip_gasmask.gsc -patch_zm/maps/mp/zombies/_zm_ffotd.gsc patch_zm/maps/mp/zombies/_zm_hackables_boards.gsc patch_zm/maps/mp/zombies/_zm_hackables_box.gsc patch_zm/maps/mp/zombies/_zm_hackables_doors.gsc