diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/_sticky_grenade.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/_sticky_grenade.gsc deleted file mode 100644 index 5ba50e7..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/_sticky_grenade.gsc +++ /dev/null @@ -1,13 +0,0 @@ -//checked includes match cerberus output -#include common_scripts/utility; -#include maps/mp/_utility; - -init() //checked matches cerberus output -{ - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); -} - -watch_bolt_detonation( owner ) //checked matches cerberus output -{ -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc index 5f568a1..796e36b 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_first_floor_climb.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "baseball_to_first_floor_climb" ); + dosimpletraverse( "baseball_to_first_floor_climb" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc index 316b10e..e40d4aa 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_roof_climb.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "baseball_to_roof_climb" ); + dosimpletraverse( "baseball_to_roof_climb" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc index c7fd03a..50c9874 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_base_to_second_floor.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "baseball_to_second_floor_climb" ); + dosimpletraverse( "baseball_to_second_floor_climb" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc index 3e7ce3b..791fbf6 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_down_cellblock" ); + dosimpletraverse( "jump_down_cellblock" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc index ae94b67..44145a4 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbdown_norail.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_down_cellblock_norailing" ); + dosimpletraverse( "jump_down_cellblock_norailing" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc index b46d8f7..db2d91e 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_cellblock_climbup.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_up_cellblock" ); + dosimpletraverse( "jump_up_cellblock" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc index 33e7010..c9d0a64 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_fence_climb.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "climb_over_dock_fence", 1 ); + dosimpletraverse( "climb_over_dock_fence", 1 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc index 83b1288..8577338 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_mid_climb_up.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "dock_mid_way_jump_up_climb", 1 ); + dosimpletraverse( "dock_mid_way_jump_up_climb", 1 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc index c339460..5a3ac46 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_tommygun_drop.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "dock_tommygun_dropdown", 1 ); + dosimpletraverse( "dock_tommygun_dropdown", 1 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc index ad92329..2fbf6b4 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_dock_water_jump_up.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "dock_water_climb_up" ); + dosimpletraverse( "dock_water_climb_up" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc index 71d7344..6872ace 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_golden_gate_jump.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "golden_gate_jump_up" ); + dosimpletraverse( "golden_gate_jump_up" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc index 2edc9ea..472287e 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_alcatraz_gondola_climb.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "prison_gondola_traversal", 1 ); + dosimpletraverse( "prison_gondola_traversal", 1 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc index 8bd9a0e..5b1c8da 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_127.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_down_127" ); + dosimpletraverse( "jump_down_127" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc index ff54012..e56cb57 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_222.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_down_222" ); + dosimpletraverse( "jump_down_222" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc index 1b54907..e5a5753 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_286.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_down_286" ); + dosimpletraverse( "jump_down_286" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc index eb80121..4c6130b 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_72.gsc @@ -1,14 +1,12 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 72, 7 ); - } - else - { - dosimpletraverse( "jump_down_72" ); - } + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 72, 7 ); + else + dosimpletraverse( "jump_down_72" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc index e32a251..a051331 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_down_96.gsc @@ -1,14 +1,12 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - if ( isDefined( self.isdog ) && self.isdog ) - { - dog_jump_down( 96, 7 ); - } - else - { - dosimpletraverse( "jump_down_96" ); - } + if ( isdefined( self.isdog ) && self.isdog ) + dog_jump_down( 96, 7 ); + else + dosimpletraverse( "jump_down_96" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc index 06cec96..30fbdd3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_127.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_up_127" ); + dosimpletraverse( "jump_up_127" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc index 793683d..9041804 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_jump_up_222.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "jump_up_222" ); + dosimpletraverse( "jump_up_222" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc index f3e27f8..492a3f2 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/animscripts/traverse/zm_prison_jump_up_to_climb.gsc @@ -1,7 +1,9 @@ -#include maps/mp/animscripts/traverse/zm_shared; -#include maps/mp/animscripts/traverse/shared; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\animscripts\traverse\shared; +#include maps\mp\animscripts\traverse\zm_shared; main() { - dosimpletraverse( "cellblock_jump_up_climb" ); + dosimpletraverse( "cellblock_jump_up_climb" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc index 93ea418..b8f877f 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/createfx/zm_prison_fx.gsc @@ -1,3653 +1,3655 @@ -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; main() { - ent = maps/mp/_utility::createexploder( "fx_alcatraz_dryer_on" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1580,06, 10596,5, 1144,13 ); - ent.v[ "angles" ] = ( 358,936, 90,89, -3,42846 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_storm_start" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -7158,76, 9486,71, 4645,13 ); - ent.v[ "angles" ] = ( 0,992545, 7,00395, 0,121882 ); - ent.v[ "delay" ] = 0,5; - ent.v[ "exploder" ] = 10000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_generator_smk" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -451,134, 6294,92, 106,892 ); - ent.v[ "angles" ] = ( 275,029, 43,3103, 145,18 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3100; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_generator_sparks" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -426,856, 6309,19, 100,792 ); - ent.v[ "angles" ] = ( 271,545, 320,377, -131,117 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3200; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_generator_exp" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -447,409, 6309,94, 95,7917 ); - ent.v[ "angles" ] = ( 275,029, 43,311, 144,179 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3300; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 7342,27, -1239,57, -56,32 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1529,65, -74,6753, -103,128 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3162,48, 906,901, -112,39 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -7767,62, 1896,04, 535,771 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -11390,9, 6036,43, 622,107 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -11845,1, 8759,95, 713,719 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -10196,1, 10963,3, 769,695 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -8544,78, 12775,9, 643,932 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -5994,11, 14521,9, 1173,7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3605,93, 15594,1, -185,955 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -566,058, 16321,3, 22,028 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2782,79, 16558,4, -7,81899 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9763,82, 17188,9, 209,793 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 16226,4, 13493,6, 288,663 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 20353,1, 11057,8, 785,277 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 16048, 7489,45, 609,427 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 15934,5, 3775,54, -0,382989 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 11907,4, 2073,58, 60,092 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_door_blocker" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2132,35, 9208,9, 1335,59 ); - ent.v[ "angles" ] = ( 271,285, 159,957, 109,776 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_door_blocker" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1229,51, 9982,55, 1128,13 ); - ent.v[ "angles" ] = ( 271,285, 159,954, 20,7791 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 419,924, 8645,09, 804,025 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 421,137, 8654,28, 431,025 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 734,791, 8593,32, 670,626 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 502,015, 8078,21, 784,399 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 78,4272, 8369,79, 926,833 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 157,648, 8673,2, 996,251 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 577,807, 8743,26, 1010,39 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 491,398, 8767,96, 618,174 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 91,1186, 8503,61, 522,555 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 186,705, 8232,87, 440,658 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 317,003, 8752,82, 582,406 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_elec_fence" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -869,315, 9523,63, 1364,03 ); - ent.v[ "angles" ] = ( 359,8, 181,381, 89,7941 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 2000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2011,81, 9915,29, 1140,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1702,67, 10247,5, 1143,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1766,91, 9971,22, 1147,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1713,95, 9675,05, 1143,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1995,66, 9568,79, 1143,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1871,99, 9190,41, 1143,63 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2559,22, 9361,3, 1532,03 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2542,36, 9429,4, 1683,78 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2561,98, 9453,56, 1683,78 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2632,91, 9260,28, 1624,77 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2889,04, 9354,63, 1542,03 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3181,12, 9358,07, 1543,03 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2661,32, 9346,76, 1532,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2582,52, 9353,85, 1556,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2872,79, 9310,92, 1594,21 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2810, 9317,82, 1582,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2874,26, 9299,27, 1567,94 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2872,85, 9271,97, 1560,94 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2807,44, 9291,96, 1567,91 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2023,55, 10274, 1165,72 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_shower_steam" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1697,86, 9283,56, 1154,13 ); - ent.v[ "angles" ] = ( 1,66691, 260,366, 0,770388 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_steam_pipe" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1670,47, 10334,7, 1265,27 ); - ent.v[ "angles" ] = ( 13,6657, 260,532, 0,792235 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2935,96, 9719, 1405,23 ); - ent.v[ "angles" ] = ( 331,623, 263,046, 8,24825 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_md" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2916,12, 9526,54, 1392,61 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1915,56, 9714,44, 1199,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1914,03, 9847,78, 1208,69 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2011,07, 9938,63, 1178,54 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2157,54, 9939,59, 1193,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2123,86, 9938,14, 1199,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1989,11, 9696,68, 1210,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1963,54, 9246,12, 1199,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1802,51, 9209,58, 1199,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1823,18, 9354,43, 1189,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1827,13, 9516,26, 1189,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1707,84, 9687,23, 1180,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2758,3, 9477,92, 1353,49 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2707,26, 9807,33, 1360,06 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3144,32, 9922,52, 1351,16 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3203,34, 9553,01, 1366,27 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2699,66, 9648,03, 1346,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3005,26, 9948,82, 1336,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3248,53, 9657,68, 1336,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3058,11, 9375,84, 1336,44 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3197,03, 9461,74, 1366,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 360 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2946,12, 9431,4, 1336,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3234,88, 9767,94, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 356 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2878,35, 9841,63, 1384,4 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 357 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2846,04, 9498,34, 1372,82 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3194,97, 9997,61, 1344,34 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3071,89, 9564,52, 1347,22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2664,43, 9491,19, 1346,75 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2682,34, 9889,09, 1358,41 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 589,654, 10405,2, 1336,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 414,931, 10676,5, 1336,13 ); - ent.v[ "angles" ] = ( 0, 269,001, 2 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -933,041, 9060,05, 1339,15 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -961,581, 8588,5, 1336,13 ); - ent.v[ "angles" ] = ( 358,015, 352,996, 0,243711 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3640,25, 9570,16, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3414,1, 9593,14, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3997,47, 9513,13, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3829,13, 9767,36, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2015,94, 9680,29, 1164,09 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1910,75, 9914,85, 1160,69 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2106,76, 10213,8, 1172,64 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2132,49, 10212,1, 1174,46 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2157,22, 10212,1, 1182,06 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2180,24, 10213,1, 1170,42 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1911,83, 9628,21, 1163,8 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1913,69, 9654,86, 1164,09 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1619,93, 9436,56, 1165,91 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1590,47, 9438,35, 1181,94 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1641,2, 9443,34, 1185,35 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1831,03, 9853,19, 1164,39 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1830,3, 9878,42, 1167,11 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2958,64, 9446,22, 1528,13 ); - ent.v[ "angles" ] = ( 1,81247, 205,015, 0,845933 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3073,71, 9354,23, 1528,13 ); - ent.v[ "angles" ] = ( 1,81247, 205,015, 0,845933 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3478,99, 9643,84, 1542,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3855,27, 9655,09, 1534,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4099,19, 9564,1, 1534,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3204,61, 9286,51, 1552,19 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3686,24, 9647,25, 1538,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2428,39, 9657,28, 1348,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1973,75, 9654,84, 1359,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1994,6, 9213,62, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1726,04, 10538,2, 1348,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -54; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1191,13, 10599, 1349,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 565,169, 10514, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 639,384, 10193,1, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1084,87, 10162,2, 1357,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1562,32, 9678,89, 1353,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 896,835, 8860,77, 1563,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -396,579, 6435,79, 79,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5,05365, 6470,85, 77,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -254,544, 6784,77, 80,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 41,6386, 6679,69, 82,025 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -498,575, 6674,52, 77,325 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -465,948, 7001,1, 74,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -91,6424, 7089,39, 70,325 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -81,3869, 7364,98, 83,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -803,928, 8631,35, 1345,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -919,681, 9057,68, 1346,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -899,236, 9368,42, 1342,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -942,955, 9004,09, 1352,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -201,07, 9183,46, 1346,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 361,177, 9165,03, 1346,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 914,905, 9145,19, 1348,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 413,012, 9016,36, 1144,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 708,841, 9100,86, 1142,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 712,28, 9497,85, 1120,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 725,952, 9940,24, 1134,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 428,394, 9599,1, 1114,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 224,739, 8627,48, 1240,13 ); - ent.v[ "angles" ] = ( 0, 266,004, 0,997717 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 152,409, 8741,8, 1223,43 ); - ent.v[ "angles" ] = ( 1, 181,004, 0 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 83,4124, 8835,14, 1242,89 ); - ent.v[ "angles" ] = ( 0, 266,004, 0,997717 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1039,41, 10002,4, 1137,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_lightning_bridge" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -1958,8, -3583,98, -8405,5 ); - ent.v[ "angles" ] = ( 1, 0, 0 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 666; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1406,16, 10570,3, 1587,88 ); - ent.v[ "angles" ] = ( 358,18, 97,0161, -31,0387 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 552,727, 10588,9, 1544,88 ); - ent.v[ "angles" ] = ( 273,313, 328,899, 20,1914 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 576,783, 10701,1, 1422,29 ); - ent.v[ "angles" ] = ( 7,13962, 259,258, -88,0948 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1902,57, 10308,3, 1416,78 ); - ent.v[ "angles" ] = ( 352,701, 73,2123, -91,1448 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 980,162, 10569,7, 1586,88 ); - ent.v[ "angles" ] = ( 281,024, 211,769, -113,592 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1580,32, 10664,4, 1331,44 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1595,53, 10624,9, 1337,92 ); - ent.v[ "angles" ] = ( 320,949, 270,139, -2,32201 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1850,35, 10320,3, 1336,28 ); - ent.v[ "angles" ] = ( 320,949, 270,139, -2,32201 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1468,07, 10699,1, 1381,26 ); - ent.v[ "angles" ] = ( 5,74593, 283,373, -85,3484 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1634,21, 10597,7, 1341,35 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1536,05, 10666,6, 1335,57 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 681,37, 10678, 1337,33 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 12,495, 9146,95, 1344,95 ); - ent.v[ "angles" ] = ( 275,158, 259,127, 100,714 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -11,2735, 9169,99, 1344,17 ); - ent.v[ "angles" ] = ( 279,097, 129,863, -130,867 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 702,221, 10653,1, 1336,92 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 667,163, 10648,3, 1338,47 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1903,45, 10308,9, 1337,48 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1860,95, 10381,7, 1339,46 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1484,69, 10644,9, 1336,13 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1046,82, 10585,9, 1345,35 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1256,08, 10560,4, 1449,38 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 895,989, 10614,1, 1446,71 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 904,043, 10580,5, 1484,06 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 860,018, 10589,1, 1492,01 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1655,19, 10617,5, 1344,35 ); - ent.v[ "angles" ] = ( 274,044, 358,933, 0,939596 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1079,73, 10573,1, 1341,46 ); - ent.v[ "angles" ] = ( 280,512, 286,527, 73,0785 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 482,028, 10246,4, 1342,25 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 928,138, 10215,3, 1341,89 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 514,69, 9128,72, 1352 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 681,726, 9137,38, 1340,85 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 26,7562, 9154,91, 1341,87 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -130,213, 9097,76, 1342,75 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 233,662, 9181,73, 1343,22 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1605,16, 10656,5, 1388,85 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1640,42, 10701,1, 1444,2 ); - ent.v[ "angles" ] = ( 5,74593, 283,373, -85,3484 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2975,03, 9641,5, 1369,12 ); - ent.v[ "angles" ] = ( 331,623, 263,046, 8,24825 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3588,77, 9707,04, 1679,88 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2735,51, 9363,67, 1502,88 ); - ent.v[ "angles" ] = ( 25,1188, 92,9962, -11,1595 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3273,48, 9653,32, 1501,88 ); - ent.v[ "angles" ] = ( 27,2793, 154,424, 10,9775 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1783,09, 9810,6, 1336,58 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2004,37, 9633,44, 1343,92 ); - ent.v[ "angles" ] = ( 279,88, 246,962, 113,635 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2042,02, 9435,18, 1343,15 ); - ent.v[ "angles" ] = ( 274,044, 358,933, 0,939596 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1780,21, 9840,95, 1340,57 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1835,35, 9888,03, 1341,15 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1020,62, 10582,3, 1343,5 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1592,96, 10542, 1345,7 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1822,83, 10510, 1336,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1942,09, 10485,8, 1342,32 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1975,43, 9649,22, 1343,19 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1969,21, 9446,75, 1341,05 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1832,03, 9142,47, 1343,12 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2196,72, 9073,62, 1434,12 ); - ent.v[ "angles" ] = ( 1,46616, 180,068, 89,0883 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1830,24, 9018,15, 1399,62 ); - ent.v[ "angles" ] = ( 0,104001, 92,0835, 89,5545 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1609,71, 10565,4, 1344,41 ); - ent.v[ "angles" ] = ( 270,926, 86,7671, -87,6804 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1602,95, 10655,1, 1388,71 ); - ent.v[ "angles" ] = ( 284,235, 101,132, -102,043 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ceiling_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2858,47, 9827,81, 1382,29 ); - ent.v[ "angles" ] = ( 270, 360, 0 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2781,71, 9859,82, 1341,99 ); - ent.v[ "angles" ] = ( 278,618, 290,413, 69,246 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2850,44, 9830,63, 1345,14 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2847,19, 9834,98, 1345,3 ); - ent.v[ "angles" ] = ( 298,018, 194,866, 162,645 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3070,15, 9414,14, 1344,35 ); - ent.v[ "angles" ] = ( 286,153, 249,458, 111,819 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ceiling_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2868,19, 9623,34, 1384,03 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 285 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2822,36, 9542,62, 1336,13 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3018,92, 9566,49, 1359,21 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3062,11, 9786,73, 1374,04 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3345,83, 9965,6, 1338,47 ); - ent.v[ "angles" ] = ( 331,623, 263,046, 8,24825 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3162,6, 9567,16, 1342,08 ); - ent.v[ "angles" ] = ( 286,106, 78,5502, -80,145 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3202,2, 9655,18, 1337,82 ); - ent.v[ "angles" ] = ( 295,277, 9,20946, -11,4485 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3311,53, 9892,21, 1336,82 ); - ent.v[ "angles" ] = ( 274,255, 24,6379, -26,0689 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2917,54, 9319,16, 1336,52 ); - ent.v[ "angles" ] = ( 274,255, 24,6379, -26,0689 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1489,89, 9732,73, 1338,13 ); - ent.v[ "angles" ] = ( 274,255, 24,6379, -26,0689 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1753,47, 9663,77, 1342,99 ); - ent.v[ "angles" ] = ( 283,969, 43,8212, -44,8058 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2581,19, 9538,97, 1342,65 ); - ent.v[ "angles" ] = ( 274,384, 116,502, -116,352 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2655,73, 9872,91, 1358,54 ); - ent.v[ "angles" ] = ( 297,212, 286,003, 72,1875 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2631,43, 9974,47, 1377,77 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1646,15, 10592,2, 1344,21 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1736,19, 9658,28, 1342,31 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2595,91, 9550,02, 1344,56 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2808,63, 9863,33, 1340,55 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3259,13, 9974,1, 1345,95 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2015,33, 9436,95, 1343,48 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 683,494, 10667,8, 1336,23 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1901,4, 10494,8, 1343,4 ); - ent.v[ "angles" ] = ( 281,123, 169,791, -170,119 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 617,367, 10387,4, 1336,33 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 473,008, 10595,1, 1338,98 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 394,892, 10644,7, 1338,22 ); - ent.v[ "angles" ] = ( 271,046, 356,238, 3,63297 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 486,078, 10235,4, 1343,48 ); - ent.v[ "angles" ] = ( 287,957, 92,9286, -92,9109 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 741,183, 10395,7, 1343,71 ); - ent.v[ "angles" ] = ( 274,956, 180,635, 179,233 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 947,43, 10230,7, 1342,46 ); - ent.v[ "angles" ] = ( 282,885, 112,727, -111,945 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 971,453, 10199,9, 1344,91 ); - ent.v[ "angles" ] = ( 276,307, 234,116, 127,128 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2028,97, 10420,7, 1493,81 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2003,66, 10400,3, 1493,06 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 481,194, 10390,6, 1442,77 ); - ent.v[ "angles" ] = ( 87,2665, 19,9036, -157,009 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2827,94, 9642,21, 1362,9 ); - ent.v[ "angles" ] = ( 284,235, 101,132, -102,043 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2728,7, 9932,34, 1502,88 ); - ent.v[ "angles" ] = ( 27,2793, 154,424, 10,9775 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1139,74, 9183,71, 1342,29 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1538,25, 9161,64, 1341,92 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1122,66, 9163,84, 1348,97 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1502,71, 9167,7, 1345,38 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -548,867, 9285,93, 1336,32 ); - ent.v[ "angles" ] = ( 274,058, 74,8172, -75,2586 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -928,928, 9350,51, 1339,62 ); - ent.v[ "angles" ] = ( 271,49, 313,346, 46,1678 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -531,364, 8540,54, 1336,13 ); - ent.v[ "angles" ] = ( 359,861, 86,0029, -1,99545 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -992,053, 8980,17, 1336,13 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -959,544, 9129,57, 1336,13 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -936,053, 9354,49, 1336,13 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -757,838, 9350,15, 1342,69 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -523,02, 9309,18, 1336,13 ); - ent.v[ "angles" ] = ( 0,174242, 265,004, 1,9927 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -925,949, 9028,78, 1338,12 ); - ent.v[ "angles" ] = ( 294,943, 91,5663, -92,2952 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -938,21, 8989,24, 1352,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -562,519, 9300,83, 1351,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_steam_pipe" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1572,54, 10595,4, 1237,1 ); - ent.v[ "angles" ] = ( 307,948, 269,133, 8,52223 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_steam_pipe" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1573,97, 10598,6, 1241,04 ); - ent.v[ "angles" ] = ( 336,914, 77,4272, -177,593 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 1000; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_generator_sparks" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -468,935, 6306,68, 101,568 ); - ent.v[ "angles" ] = ( 271,545, 320,377, -131,117 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3200; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_3floor" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 883,113, 9289,07, 1650,48 ); - ent.v[ "angles" ] = ( 88,959, 101,532, -169,894 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2822,56, 9797,21, 1336,6 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_flight_clouds" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -933,391, 9419,79, 3750,13 ); - ent.v[ "angles" ] = ( 6, 359,842, -1,00489 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 10001; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2407,47, 9685,8, 1338,13 ); - ent.v[ "angles" ] = ( 274,384, 116,502, -116,352 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2917,66, 10054,5, 1336,13 ); - ent.v[ "angles" ] = ( 360, 270, 2 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2729,4, 9970,44, 1352,2 ); - ent.v[ "angles" ] = ( 360, 270, 2 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2766,99, 9770,14, 1336,13 ); - ent.v[ "angles" ] = ( 1,4864, 222,017, 1,33874 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3069,43, 9323,92, 1342,13 ); - ent.v[ "angles" ] = ( 359,86, 86,0019, -1,99543 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3168,04, 9666,45, 1336,13 ); - ent.v[ "angles" ] = ( 358,076, 343,99, 0,551883 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3211,15, 10005,5, 1347,43 ); - ent.v[ "angles" ] = ( 359,756, 276,995, 1,98541 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2473,83, 10017,2, 1432,13 ); - ent.v[ "angles" ] = ( 2, 178,999, 0 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2410,57, 9621,92, 1528,13 ); - ent.v[ "angles" ] = ( 358,188, 334,987, 0,845598 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3012,87, 9888,56, 1560,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3256,54, 9554,08, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3444,37, 9584,08, 1528,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 358 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3802,17, 9725,26, 1528,13 ); - ent.v[ "angles" ] = ( 358,234, 331,986, 0,939384 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4140,56, 9454,87, 1530,96 ); - ent.v[ "angles" ] = ( 359,55, 77,0076, -1,94882 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3754,67, 9891,84, 1708,09 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3654,77, 9856,02, 1710,58 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3928,71, 9648,46, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3897,87, 9418,06, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3611,64, 9448,36, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3622,4, 9305,04, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3436,25, 9586,12, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3438,73, 9736,43, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3006,05, 9764,95, 1705,55 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -47; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2836,07, 9345,84, 1706,26 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3045,95, 9551,25, 1706,07 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2593,02, 10007,5, 1704,13 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2655,16, 9921,61, 1710,92 ); - ent.v[ "angles" ] = ( 358,98, 187,99, 0,278593 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3309,09, 9847,24, 1713,41 ); - ent.v[ "angles" ] = ( 275,284, 158,67, -123,854 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3281,38, 9649,85, 1709,98 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3717,82, 9891,55, 1712,31 ); - ent.v[ "angles" ] = ( 276,373, 252,521, 107,799 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3381,98, 9860,42, 1336,65 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3261,28, 9256,64, 1336,13 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3358,42, 9339,63, 1337,02 ); - ent.v[ "angles" ] = ( 273,685, 148,196, -149,513 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3309,19, 9269,22, 1339,56 ); - ent.v[ "angles" ] = ( 295,355, 101,008, 173,07 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -731,236, 9331,66, 1345,52 ); - ent.v[ "angles" ] = ( 274,058, 74,8172, -75,2586 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4219,6, 9883,97, 1686,2 ); - ent.v[ "angles" ] = ( 358,469, 266,4, 89,3724 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,62, 8581,17, 1336,32 ); - ent.v[ "angles" ] = ( 271,409, 178,413, -176,397 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -466,08, 8807,48, 1333,03 ); - ent.v[ "angles" ] = ( 331,623, 263,046, 8,24825 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -447,483, 8689,35, 1444,46 ); - ent.v[ "angles" ] = ( 59,3735, 233,096, -33,8609 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 317,273, 8749,42, 1216,65 ); - ent.v[ "angles" ] = ( 1, 181,004, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 129,882, 8738,25, 1144,46 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 652,458, 8984,75, 1128,13 ); - ent.v[ "angles" ] = ( 359,187, 66,0123, -1,82752 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 336,022, 9042,62, 1134,27 ); - ent.v[ "angles" ] = ( 358,044, 347,993, 0,415989 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -73,4138, 8022,48, 276,125 ); - ent.v[ "angles" ] = ( 359,187, 66,0123, -1,82752 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 42,2798, 7573,77, 64,125 ); - ent.v[ "angles" ] = ( 1,69702, 212,016, 1,06081 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -62,7467, 7542,91, 72,0493 ); - ent.v[ "angles" ] = ( 0,650964, 251,012, 1,89219 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -94,2778, 7318,94, 64,125 ); - ent.v[ "angles" ] = ( 0, 269,002, 2 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -215,374, 7130,16, 64,125 ); - ent.v[ "angles" ] = ( 0, 269,001, 2 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -606,146, 7051,41, 64,125 ); - ent.v[ "angles" ] = ( 0, 269,002, 2 ); - ent.v[ "delay" ] = -89; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9,43524, 6826,6, 64,625 ); - ent.v[ "angles" ] = ( 1,98077, 188,006, 0,278867 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -305,732, 6748,36, 176,125 ); - ent.v[ "angles" ] = ( 1, 283, 0 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -9,75635, 6804,97, 173,885 ); - ent.v[ "angles" ] = ( 1, 283, 0 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -379,102, 6417,79, 174,021 ); - ent.v[ "angles" ] = ( 1, 283, 0 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 32,8236, 6494,58, 174,947 ); - ent.v[ "angles" ] = ( 0,998629, 280, 0 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -467,596, 6715,43, 173,671 ); - ent.v[ "angles" ] = ( 1, 283, 0 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -580,039, 6488,17, 120,733 ); - ent.v[ "angles" ] = ( 36,4703, 294,217, 6,72309 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -635,867, 6795,17, 104,186 ); - ent.v[ "angles" ] = ( 25,1853, 334,388, 28,0504 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 79,6997, 6709,9, 174,997 ); - ent.v[ "angles" ] = ( 53, 103, 135 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2,77522, 6900,08, 69,025 ); - ent.v[ "angles" ] = ( 272,1, 174,225, 15,0277 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 52,7936, 6880,71, 67,025 ); - ent.v[ "angles" ] = ( 272,1, 174,225, 15,0277 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -96,7265, 7553,39, 85,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 159,787, 6616,82, 121,652 ); - ent.v[ "angles" ] = ( 15, 180, -180 ); - ent.v[ "delay" ] = 5; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -159,776, 9118,96, 1343,61 ); - ent.v[ "angles" ] = ( 279,097, 129,863, -130,867 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 335,58, 6121,61, 51,208 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 29,3548, 6071,81, 17,1162 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -176,858, 6020,8, -1,46361 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -621,387, 5743,81, -47,875 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -707, 6024,22, -48,0669 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1073,87, 5808,45, -72 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1079,21, 5648,27, -72 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1204,23, 5428,41, -64,3255 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -760,422, 5419,79, -70,7786 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -490,389, 5350,47, -72 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -269,186, 5390,14, -72 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 408,443, 6180,08, 52,4562 ); - ent.v[ "angles" ] = ( 0,34777, 99,9951, -1,97077 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 261,556, 6151,54, 64,4823 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -29,8913, 6132,18, 37,7886 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -442,86, 5996,47, 5,62947 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -699,945, 5915,38, -22,2505 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1182,38, 5843,2, -47 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -898,028, 5474,64, -45 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -503,838, 5463,26, -51 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_portal_amb" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 893,493, 9676,43, 1300,5 ); - ent.v[ "angles" ] = ( 270,361, 146,301, -146,301 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_elec_key" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 2112,86, 9546,15, 1491,17 ); - ent.v[ "angles" ] = ( 0, 1,61288, 0,493361 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 100; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_elec_key" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -340,17, 9085,09, 1489,84 ); - ent.v[ "angles" ] = ( 359,931, 173,613, -0,488561 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 101; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_flight_clouds" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 1368,04, 9589,45, 2246,13 ); - ent.v[ "angles" ] = ( 6, 359,842, -1,00489 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 10001; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_works" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -14011,5, -10415,8, 15941,6 ); - ent.v[ "angles" ] = ( 357,253, 305,018, 8,18714 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3299,46, 9686,36, 1707,03 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3264,68, 9867,13, 1748,01 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2506,14, 9780,6, 1704,13 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2411,6, 9614,65, 1704,33 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2340,37, 9352,26, 1711,15 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3697,81, 9868,33, 1717,09 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3715,53, 9376,47, 1720,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3452,16, 9536,83, 1725,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3467,93, 9756,3, 1719,13 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3759,16, 9586,4, 1704,23 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2758,36, 9459,87, 1708,03 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2017,64, 9666,53, 1344,04 ); - ent.v[ "angles" ] = ( 274,297, 331,58, 26,2103 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_flies" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3871,12, 9589,39, 1537,08 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 2 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -850,724, 6678,8, 80,6406 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1041,45, 6361,84, 73,125 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 270 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -853,933, 6697,45, 70,8289 ); - ent.v[ "angles" ] = ( 1,98077, 188,006, 0,278867 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_papers" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1162,83, 6626,91, 79,364 ); - ent.v[ "angles" ] = ( 359,687, 278,996, 1,97567 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -514,717, 8742,86, 1336,92 ); - ent.v[ "angles" ] = ( 276,248, 104,973, -103,03 ); - ent.v[ "delay" ] = -32; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_docks_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 437,647, 4164,58, -179,558 ); - ent.v[ "angles" ] = ( 273,066, 140,006, -40,0394 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -762,183, 9510,43, 1336,63 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -70; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -754,294, 9582,81, 1340,43 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -746,487, 9544,06, 1338,76 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -781,124, 8884,93, 1337,66 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -526,294, 8788,21, 1336,13 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -121,706, 8859,73, 1137,45 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -89,6046, 8871,91, 1138,16 ); - ent.v[ "angles" ] = ( 326,678, 262,19, 8,68818 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 407,075, 8917,91, 1128,42 ); - ent.v[ "angles" ] = ( 277,38, 187,745, 79,3305 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 346,021, 8906,26, 1128,72 ); - ent.v[ "angles" ] = ( 277,38, 187,745, 79,3305 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 239,79, 8611,99, 1194,45 ); - ent.v[ "angles" ] = ( 359,629, 87,0357, 172,749 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 627,908, 9466,32, 1214,44 ); - ent.v[ "angles" ] = ( 1, 181,004, 0 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1493,18, 9859,98, 1236,3 ); - ent.v[ "angles" ] = ( 359,629, 87,0357, 172,749 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3505,03, 10071, 1836,5 ); - ent.v[ "angles" ] = ( 359,374, 256,997, -0,852405 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3140,49, 10071,3, 1838,29 ); - ent.v[ "angles" ] = ( 359,549, 267,997, -0,956077 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3512,07, 9240,68, 1837,86 ); - ent.v[ "angles" ] = ( 359,549, 267,997, -0,956077 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2567,41, 9239,09, 1836,79 ); - ent.v[ "angles" ] = ( 359,549, 267,997, -0,956077 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3245,83, 9356,68, 1809,87 ); - ent.v[ "angles" ] = ( 88,2621, 234,619, -33,3817 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2504,11, 9653,06, 1495,16 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3013,48, 9369,17, 1494,78 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3013,42, 9945,22, 1495,16 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3283,65, 9362,79, 1494,53 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1927,86, 9672,2, 1559,09 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 423,669, 10589,5, 1553,63 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 713,441, 10407,4, 1555,28 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1196,23, 10671,9, 1355,82 ); - ent.v[ "angles" ] = ( 3, 180, -179 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 890,943, 9922,62, 1678,88 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 890,761, 9416,6, 1670,78 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 891,356, 10209,5, 1679,53 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2363,55, 9957,42, 1675,41 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2400,18, 9568,7, 1673,89 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2830,29, 9567,95, 1673,89 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3155,6, 9400,79, 1670,76 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -564,353, 6131,82, 173,804 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 147,474, 6266,18, 174,089 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1134,02, 6026,12, 173,672 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -569,979, 5833,6, 124,43 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -547,544, 5691,97, 125,33 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 440,405, 5737,47, 437,449 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1023,9, 5737,35, 436,58 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 890,853, 8930,39, 1670,88 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 816,006, 8448,9, 1690,6 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 980,761, 8449,74, 1690,95 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1451, 9679,38, 1555,67 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2043,35, 9792,53, 1555,77 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3550,27, 9700,23, 1356,74 ); - ent.v[ "angles" ] = ( 350,776, 209,184, 175,996 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 785,455, 9056,21, 1251,57 ); - ent.v[ "angles" ] = ( 44,9397, 190,891, 170,592 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 447,928, 8762,6, 1147,03 ); - ent.v[ "angles" ] = ( 337,384, 199,53, 171,258 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 316,692, 10522,5, 1617,96 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,625, 10657,6, 1622,49 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,625, 10402,8, 1616,14 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,625, 10400,4, 1505,41 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,625, 10531,2, 1508,28 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 320,625, 10654,7, 1493,38 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 311,423, 10426,9, 1417,13 ); - ent.v[ "angles" ] = ( 26,96, 356,634, -1,52751 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1569,88, 10462,9, 1382,04 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1723,7, 10471,2, 1381,03 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1323,79, 10466,9, 1388,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 448,142, 10076,1, 1382,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 611,63, 10057,6, 1378,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1091,71, 10079,4, 1393,28 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1244,25, 10070,9, 1381,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -30,9473, 9019,22, 1387,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 132,446, 9021,45, 1389,42 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,723, 9012,43, 1389,46 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 767,811, 9013,37, 1391,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1007,32, 9014,39, 1402,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1492,93, 9266,77, 1391,13 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1170,08, 9252,34, 1391,48 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1006,98, 9267,06, 1392,13 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 688,911, 9262,78, 1389,75 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 206,046, 9274,31, 1391,13 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1010,31, 9543,9, 1497,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 770,992, 9552,95, 1498,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1720,47, 9270,14, 1491,67 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1568,39, 9267,45, 1494,86 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1245,01, 9268,15, 1493,94 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1088,69, 9272,64, 1492,86 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 765,737, 9265,8, 1489,91 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 607,758, 9271,79, 1491,13 ); - ent.v[ "angles" ] = ( 9,92145, 269,658, 2,39977 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1015,94, 9027,97, 1494,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 765,951, 9030, 1496,65 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 527,6, 9028,08, 1494,85 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 287,869, 9023, 1491,85 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 50,6901, 9027,66, 1496,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -110,165, 9024,2, 1491,85 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1569,11, 9557,99, 1390,47 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1486,33, 9546,5, 1392,86 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1415,67, 9783,88, 1389,09 ); - ent.v[ "angles" ] = ( 13,8118, 270,389, 2,80952 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1649,48, 9800,45, 1391,13 ); - ent.v[ "angles" ] = ( 13,8118, 270,389, 1,80952 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1486,94, 9797,82, 1393,13 ); - ent.v[ "angles" ] = ( 13,8118, 270,389, 1,80952 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1889,64, 9554,51, 1494,2 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1650,77, 9554, 1494,7 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1407,12, 9549,6, 1495,13 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2680,41, 9241,74, 1607,55 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2559,16, 9251,56, 1606,23 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2815,99, 9241,74, 1607,39 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2941,83, 9241,74, 1610,52 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3073,12, 9243,77, 1605,54 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3198,28, 9241,74, 1604,28 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3327,58, 9241,74, 1604,89 ); - ent.v[ "angles" ] = ( 39, 90, -90 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 406,69, 10711,4, 1485,18 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 407,744, 10705,4, 1596,58 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 728,378, 10702,6, 1597,54 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 726,087, 10711,4, 1484,7 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 885,363, 10711,4, 1483,53 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 886,745, 10711,4, 1605,65 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1046,04, 10711,4, 1604,41 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1046,56, 10711,4, 1487,01 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1369,93, 10711,4, 1487,85 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1365,1, 10711,4, 1605,1 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1524,45, 10711,4, 1604,6 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1524,79, 10711,4, 1495,05 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1690,26, 10711,4, 1484,78 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -83; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1690,75, 10711,4, 1604,31 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3312,84, 10052,6, 1434,41 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -60; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3189,64, 10063,6, 1434,34 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3064,33, 10063,9, 1436,83 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2809,5, 10063,8, 1434,68 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2692,33, 10070,1, 1435,34 ); - ent.v[ "angles" ] = ( 32,5749, 270,764, 90,509 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3315,4, 9248,5, 1425,71 ); - ent.v[ "angles" ] = ( 23,4234, 90,3041, 96,5324 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3189,54, 9247,91, 1436,81 ); - ent.v[ "angles" ] = ( 23,4234, 90,3041, 96,5324 ); - ent.v[ "delay" ] = -42; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2935,97, 9248,13, 1434,52 ); - ent.v[ "angles" ] = ( 23,4234, 90,3041, 96,5324 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2808,35, 9247,4, 1434,97 ); - ent.v[ "angles" ] = ( 23,4234, 90,3041, 96,5324 ); - ent.v[ "delay" ] = -48; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2684,48, 9251,12, 1432,67 ); - ent.v[ "angles" ] = ( 23,4234, 90,3041, 96,5324 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1851,76, 9666,95, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1689,81, 9672,34, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1528,3, 9666,39, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1377,93, 9668, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1216,79, 9667,93, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1056,31, 9667,57, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 731,424, 9670,17, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 565,92, 9668,89, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 407,767, 9667,76, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 256,685, 9668,92, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 96,9389, 9668,97, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -58,1716, 9667,61, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1206,34, 9145,07, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1050,18, 9141,42, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 733,914, 9141,55, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 568,491, 9139,29, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 414,404, 9140,03, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 253,372, 9139,45, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 88,891, 9142,25, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -57,3577, 9139,38, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1042,91, 10210, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1213,28, 10210,5, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1364,23, 10212,7, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1532,33, 10210,3, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1689,03, 10214,1, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1848,9, 10211,3, 1696,68 ); - ent.v[ "angles" ] = vectorScale( ( 1, 0, 0 ), 72 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_skinny" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2578,89, 9342,72, 1615,18 ); - ent.v[ "angles" ] = ( 39, 90, 4 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 401,419, 6214,84, 236,176 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1291,9, 5262,93, 85,1909 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -507,892, 5356,69, 85,4086 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -194,699, 5414,74, 85,7782 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -774,753, 4920,69, 85,2359 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -460,783, 4960,4, 85,2728 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -46,4178, 5919,75, 308,628 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 317,223, 6463,84, 463,01 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -33; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 786,301, 6457,22, 225,263 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 991,071, 6495,34, 242,168 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 582,236, 6419,38, 201,504 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 89,8474, 6226,05, 436,7 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -352,84, 6141,79, 436,856 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 486,265, 6571,19, 307,796 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1158,42, 6607,94, 405,51 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -818,707, 5297,98, 85,7438 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1142,86, 5237,31, 84,9536 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 104,214, 6475,26, 168,218 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -197,748, 6437,94, 168,111 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -459,679, 6417,96, 170,195 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -528,85, 6721,84, 167,801 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -253,095, 6775,98, 168,278 ); - ent.v[ "angles" ] = ( 87,7649, 206,476, -168,354 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( 89,038, 6849,09, 75,057 ); - ent.v[ "angles" ] = ( 316,948, 121,676, 9,58068 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 10,2684, 6655,25, 159,499 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 138,161, 6724,55, 157,718 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -553,939, 6543,81, 156,55 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -435,901, 6817,92, 137,947 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -316,12, 6866,29, 157,493 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -84,2072, 6535,8, 138,646 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -103,272, 7239,8, 183,45 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -86,1894, 8081,85, 388,829 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 157,288, 8184,97, 421,462 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 352,994, 8441,6, 1022,28 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 478,062, 8437,4, 1022,53 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 412,855, 8939,26, 959,914 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 414,777, 9560,82, 1239,88 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -67; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 819,513, 9903,79, 1147,69 ); - ent.v[ "angles" ] = ( 352,607, 137,27, -179,538 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1699,24, 10590,7, 1275,52 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1872,09, 10311,2, 1275,57 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1872,27, 9136,04, 1274,87 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1661,05, 9510,7, 1276,91 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1710,07, 10452,4, 1170,78 ); - ent.v[ "angles" ] = ( 320,227, 252,198, -64,0511 ); - ent.v[ "delay" ] = -86; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2162,05, 10094,1, 1166,03 ); - ent.v[ "angles" ] = ( 3,09201, 249,964, -92,2163 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1779,21, 9973,23, 1279,9 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -955,011, 9653,45, 1470,93 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,354, 9006,9, 1474,53 ); - ent.v[ "angles" ] = ( 68,8801, 19,8961, 18,3607 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -773,216, 8671,79, 1474,97 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -525,033, 9302,02, 1472,5 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -521,188, 9532,77, 1471,4 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -517,18, 9885,99, 1620,33 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5,61688, 9138,99, 1555,76 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1122,61, 9138,22, 1556 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1539,18, 9134,92, 1556,23 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1771,89, 9132,89, 1554,68 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3494,65, 9802,49, 1448,48 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3356,18, 9388,43, 1448,11 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2648,33, 9468,2, 1448,38 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,27, 9172,78, 1430,96 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,59, 9074,75, 1532,77 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,47, 9485,15, 1540,64 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,65, 9773,38, 1531,11 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2190,64, 10147,1, 1531,75 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2043,31, 9269,78, 1555,28 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 782,629, 10562,3, 1428,92 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,61, 9803,98, 1432,3 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3755,64, 9803,88, 1622,18 ); - ent.v[ "angles" ] = ( 3,74498, 208,282, 176,039 ); - ent.v[ "delay" ] = -30; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3559,12, 9576,33, 1858,36 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1355,83, 5603,76, 85,6469 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 332,569, 7221,49, 781,074 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 886,704, 7413,74, 837,356 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -23; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 827,948, 6935,94, 757,722 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 655,77, 8112,22, 1349,92 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1077,13, 6734,67, 243,379 ); - ent.v[ "angles" ] = ( 357, 360, -1 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1446,42, 8786,81, 1336,13 ); - ent.v[ "angles" ] = ( 357, 360, -1 ); - ent.v[ "delay" ] = -64; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -301,037, 9758,66, 1336,13 ); - ent.v[ "angles" ] = ( 357, 360, -1 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -296,616, 10024,6, 1561,02 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -381,96, 9359,96, 1421,61 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -26; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -294,089, 9137,74, 1555,6 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1038,56, 8307,04, 1470,39 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -76; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 58,6422, 5028,87, 85,5442 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1077,74, 4880,22, 85,3633 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -52; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -148,397, 6691,36, 156,587 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -102,925, 7167,09, 204,785 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 255,812, 7238,75, 183,851 ); - ent.v[ "angles" ] = ( 0,786996, 93,9423, 3,06272 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 481,194, 6705,34, 228,47 ); - ent.v[ "angles" ] = ( 1,18527, 77,9467, 0,769855 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2038,86, 10591, 1275,2 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_works" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -16163,6, -24902,8, 5721,57 ); - ent.v[ "angles" ] = ( 357,253, 305,018, 8,18714 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1364,11, 10473,7, 1458,77 ); - ent.v[ "angles" ] = ( 1,5043, 99,9372, 177,218 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1160,21, 9657,1, 1667,77 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 533,91, 9563,95, 1595,92 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 371,03, 9556, 1599,39 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 768,419, 9791,94, 1496,75 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 606,036, 9784,37, 1494,09 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 989,424, 9782,96, 1491,41 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1240,71, 9790,43, 1596,71 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -100; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1165,63, 9255,2, 1600,83 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 529,666, 9253, 1600,59 ); - ent.v[ "angles" ] = ( 8,84569, 270,125, 1,15222 ); - ent.v[ "delay" ] = -69; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 1076,08, 9049,83, 1594,92 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -87; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 449,965, 9034, 1601,22 ); - ent.v[ "angles" ] = ( 15,1496, 89,6387, -5,17936 ); - ent.v[ "delay" ] = -21; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 147,805, 8736,36, 471,843 ); - ent.v[ "angles" ] = ( 1,8203, 325,493, -174,863 ); - ent.v[ "delay" ] = -29; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 708,688, 8697,52, 594,988 ); - ent.v[ "angles" ] = ( 5,42363, 249,387, 179,472 ); - ent.v[ "delay" ] = -24; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 399,19, 8036,93, 757,379 ); - ent.v[ "angles" ] = ( 1,03643, 99,2729, 177,746 ); - ent.v[ "delay" ] = -56; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 9,83607, 8457,23, 866,271 ); - ent.v[ "angles" ] = ( 358,734, 358,353, -174,7 ); - ent.v[ "delay" ] = -75; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 352,342, 8854,08, 933,438 ); - ent.v[ "angles" ] = ( 4,10524, 275,464, -178,093 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 665,592, 8621,58, 927,116 ); - ent.v[ "angles" ] = ( 358,897, 146,438, 175,61 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1161,57, 6548,38, 157,284 ); - ent.v[ "angles" ] = ( 356,243, 104,479, 177,474 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -812,679, 6550,35, 156,07 ); - ent.v[ "angles" ] = ( 356,381, 107,482, 177,281 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -828,262, 6643,1, 177,801 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1050,98, 6344,51, 178,115 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -99; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1155,38, 6436,78, 127,459 ); - ent.v[ "angles" ] = ( 325,572, 103,717, -118,254 ); - ent.v[ "delay" ] = -34; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -899,01, 9249,23, 1470,88 ); - ent.v[ "angles" ] = ( 86,2212, 270,779, 107,648 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -668,878, 8115,17, 1524,9 ); - ent.v[ "angles" ] = ( 86,2212, 270,779, 107,648 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -969,349, 9031,18, 1464,88 ); - ent.v[ "angles" ] = ( 86,2212, 270,779, 107,648 ); - ent.v[ "delay" ] = -63; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3405,9, 9339,15, 1529,66 ); - ent.v[ "angles" ] = ( 331,623, 263,046, 8,24825 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3917,37, 9634,78, 1684,65 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -53; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3497,73, 9900,04, 1558,98 ); - ent.v[ "angles" ] = ( 353,244, 296,4, 11,1766 ); - ent.v[ "delay" ] = -88; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2557,04, 9721,06, 1674,06 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -40; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 3312,89, 9721,35, 1674,23 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2829,98, 9601,53, 1365,18 ); - ent.v[ "angles" ] = ( 284,235, 101,132, -102,043 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -430,366, 6320,19, 74,1536 ); - ent.v[ "angles" ] = ( 321,026, 8,30788, -178,503 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3200; - ent = maps/mp/_utility::createexploder( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "exploder"; - ent.v[ "origin" ] = ( -424,851, 6295,92, 74,5358 ); - ent.v[ "angles" ] = ( 321,026, 8,30788, -178,503 ); - ent.v[ "delay" ] = 0; - ent.v[ "exploder" ] = 3200; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -292,577, 6932,69, 164,028 ); - ent.v[ "angles" ] = ( 16,7863, 57,6032, -25,3165 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1712,46, -3882,27, -8427,66 ); - ent.v[ "angles" ] = ( 357,654, 131,461, 173,437 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1195,31, -3185,81, -8403,06 ); - ent.v[ "angles" ] = ( 357,938, 271,364, 5,80023 ); - ent.v[ "delay" ] = -17; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1737,05, -3361,13, -8427,08 ); - ent.v[ "angles" ] = ( 0,264099, 220,383, 6,29505 ); - ent.v[ "delay" ] = -90; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2260,25, -3424,57, -8394,88 ); - ent.v[ "angles" ] = ( 5,21218, 0,72745, 3,53907 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2186,54, -3850,05, -8392,88 ); - ent.v[ "angles" ] = ( 5,21218, 0,72745, 3,53907 ); - ent.v[ "delay" ] = -49; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2183,18, -3608,02, -8358,08 ); - ent.v[ "angles" ] = ( 5,21218, 0,72745, 3,53907 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2381,42, -3229,07, -8381,88 ); - ent.v[ "angles" ] = ( 5,21218, 0,72745, 3,53907 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -2176,15, -4051,01, -8404,34 ); - ent.v[ "angles" ] = ( 5,21218, 0,72745, 3,53907 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -3844,63, 2669,63, -8906,04 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1347,37, 5991,52, -9034,89 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -82; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -6841,27, 772,29, -8673,81 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -51; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 6565,82, 2870,47, -9193,91 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 4953,08, -2793,47, -8690,6 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 5966,02, -7924,01, -8993,2 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -84; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -264,355, -9708,51, -9199,76 ); - ent.v[ "angles" ] = ( 274,434, 58,5957, -148,678 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 727,317, 9515,69, 1112,52 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -92; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 692,964, 9527,48, 1109,83 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 697,939, 9555,2, 1104,42 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -27; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 742,295, 9561,95, 1107,22 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 755,3, 9531,58, 1113,22 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -747,307, 9189,86, 1377,64 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -96; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -964,739, 8862,04, 1390 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -25; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -978,462, 8866,31, 1370 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -41; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -948,451, 9032,78, 1337,62 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -38; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -972,437, 9025,12, 1337,92 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -914,71, 8989,99, 1337,52 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -666,12, 9215,17, 1342,02 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -97; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2166,32, 9398,12, 1384,02 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 450,04, 10295,1, 1374,01 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -91; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 429,026, 10302,1, 1379,21 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -61; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -756,418, 8668,83, 1376,01 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -780,913, 8650,59, 1375,71 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -978,15, 8827,38, 1376,74 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -85; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -994,333, 8796,53, 1344,73 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -45; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -255,782, 7773,52, 149,925 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -129,488, 7791,41, 89,125 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -35; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -289,519, 7808,43, 180,625 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -219,39, 7881,49, 177,025 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -58; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 123,975, 7569,75, 64,625 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -36; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2610,22, 9258,08, 1532,32 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -93; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2598,16, 9259,59, 1534,13 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -37; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1873,77, -3732,44, -8446,28 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1884,71, -3434,8, -8441,69 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -46; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,09, -3419,79, -8446,28 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -66; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,97, -3429,18, -8438,87 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -98; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1887,88, -3731,23, -8439,17 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -43; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1947,66, -3727,37, -8399,39 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -80; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2476,05, 9441,09, 1564 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -95; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2471,93, 9438,04, 1567 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -74; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2606,03, 9261,8, 1534,13 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2144,01, 9384,09, 1379,32 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -71; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2146,25, 9356,15, 1382,53 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -679,561, 9218,32, 1337,02 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -62; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -716,517, 9205,81, 1338,62 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -55; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -900,584, 9035,59, 1341,63 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -44; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 719,208, 9557,13, 1110,73 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -16; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 871,139, 9593,56, 1144,54 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -94; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -194,315, 7711,4, 84,225 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -226,304, 7756,25, 121,325 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -65; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -148,564, 7805,71, 108,625 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -59; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 432,151, 7878,44, 71,125 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -50; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 332,167, 8255,32, 65,425 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -77; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 384,185, 8125,68, 183,399 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -20; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 112,608, 6949,11, 121,618 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -68; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1877,71, -3746,33, -8443,78 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -39; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1907,92, -3737,14, -8423,5 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -57; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1881,17, -3416,76, -8443,88 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1913,68, -3429,53, -8423,3 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -18; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1939,52, -3436,6, -8409,8 ); - ent.v[ "angles" ] = ( 356,385, 310,775, 6,57062 ); - ent.v[ "delay" ] = -73; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 417,981, 10292,2, 1374,12 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -81; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 445,107, 10299,9, 1377,22 ); - ent.v[ "angles" ] = ( 0,319972, 280,816, 1,58965 ); - ent.v[ "delay" ] = -79; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -796,584, 9192,11, 1378,24 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -22; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -1024,91, 8778,35, 1336,92 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -28; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -726,891, 9213,39, 1342,03 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -72; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -978,093, 8981,14, 1337,72 ); - ent.v[ "angles" ] = ( 0,32829, 280,516, 1,58795 ); - ent.v[ "delay" ] = -19; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -422,865, 9127,95, 1526,2 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -31; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( -422,036, 9822,33, 1526,47 ); - ent.v[ "angles" ] = ( 87,765, 206,475, -153,455 ); - ent.v[ "delay" ] = -78; - ent = maps/mp/_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); - ent.v[ "type" ] = "oneshotfx"; - ent.v[ "origin" ] = ( 2192,36, 9573,53, 1556,93 ); - ent.v[ "angles" ] = ( 321,739, 261,228, 9,25082 ); - ent.v[ "delay" ] = -70; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_dryer_on" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1580.06, 10596.5, 1144.13 ); + ent.v["angles"] = ( 358.936, 90.89, -3.42846 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_storm_start" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -7158.76, 9486.71, 4645.13 ); + ent.v["angles"] = ( 0.992545, 7.00395, 0.121882 ); + ent.v["delay"] = 0.5; + ent.v["exploder"] = 10000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_generator_smk" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -451.134, 6294.92, 106.892 ); + ent.v["angles"] = ( 275.029, 43.3103, 145.18 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3100; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_generator_sparks" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -426.856, 6309.19, 100.792 ); + ent.v["angles"] = ( 271.545, 320.377, -131.117 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3200; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_generator_exp" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -447.409, 6309.94, 95.7917 ); + ent.v["angles"] = ( 275.029, 43.311, 144.179 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3300; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 7342.27, -1239.57, -56.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1529.65, -74.6753, -103.128 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3162.48, 906.901, -112.39 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -7767.62, 1896.04, 535.771 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -11390.9, 6036.43, 622.107 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -11845.1, 8759.95, 713.719 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -10196.1, 10963.3, 769.695 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -8544.78, 12775.9, 643.932 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -5994.11, 14521.9, 1173.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3605.93, 15594.1, -185.955 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -566.058, 16321.3, 22.028 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2782.79, 16558.4, -7.81899 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9763.82, 17188.9, 209.793 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 16226.4, 13493.6, 288.663 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 20353.1, 11057.8, 785.277 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 16048, 7489.45, 609.427 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 15934.5, 3775.54, -0.382989 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 11907.4, 2073.58, 60.092 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_door_blocker" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2132.35, 9208.9, 1335.59 ); + ent.v["angles"] = ( 271.285, 159.957, 109.776 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_door_blocker" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1229.51, 9982.55, 1128.13 ); + ent.v["angles"] = ( 271.285, 159.954, 20.7791 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 419.924, 8645.09, 804.025 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 421.137, 8654.28, 431.025 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 734.791, 8593.32, 670.626 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 502.015, 8078.21, 784.399 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 78.4272, 8369.79, 926.833 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 157.648, 8673.2, 996.251 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 577.807, 8743.26, 1010.39 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 491.398, 8767.96, 618.174 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 91.1186, 8503.61, 522.555 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 186.705, 8232.87, 440.658 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_tunnel_dust_fall" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.003, 8752.82, 582.406 ); + ent.v["angles"] = ( 0, 0, 0 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_elec_fence" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -869.315, 9523.63, 1364.03 ); + ent.v["angles"] = ( 359.8, 181.381, 89.7941 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 2000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2011.81, 9915.29, 1140.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1702.67, 10247.5, 1143.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1766.91, 9971.22, 1147.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1713.95, 9675.05, 1143.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1995.66, 9568.79, 1143.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1871.99, 9190.41, 1143.63 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2559.22, 9361.3, 1532.03 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2542.36, 9429.4, 1683.78 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2561.98, 9453.56, 1683.78 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2632.91, 9260.28, 1624.77 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2889.04, 9354.63, 1542.03 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3181.12, 9358.07, 1543.03 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2661.32, 9346.76, 1532.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2582.52, 9353.85, 1556.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2872.79, 9310.92, 1594.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2810, 9317.82, 1582.55 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2874.26, 9299.27, 1567.94 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2872.85, 9271.97, 1560.94 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2807.44, 9291.96, 1567.91 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2023.55, 10274, 1165.72 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_shower_steam" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1697.86, 9283.56, 1154.13 ); + ent.v["angles"] = ( 1.66691, 260.366, 0.770388 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_steam_pipe" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1670.47, 10334.7, 1265.27 ); + ent.v["angles"] = ( 13.6657, 260.532, 0.792235 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2935.96, 9719, 1405.23 ); + ent.v["angles"] = ( 331.623, 263.046, 8.24825 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_md" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2916.12, 9526.54, 1392.61 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1915.56, 9714.44, 1199.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1914.03, 9847.78, 1208.69 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2011.07, 9938.63, 1178.54 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2157.54, 9939.59, 1193.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2123.86, 9938.14, 1199.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1989.11, 9696.68, 1210.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1963.54, 9246.12, 1199.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1802.51, 9209.58, 1199.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1823.18, 9354.43, 1189.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1827.13, 9516.26, 1189.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1707.84, 9687.23, 1180.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2758.3, 9477.92, 1353.49 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2707.26, 9807.33, 1360.06 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3144.32, 9922.52, 1351.16 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3203.34, 9553.01, 1366.27 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2699.66, 9648.03, 1346.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3005.26, 9948.82, 1336.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3248.53, 9657.68, 1336.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_smk_linger" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3058.11, 9375.84, 1336.44 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3197.03, 9461.74, 1366.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 360.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2946.12, 9431.4, 1336.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3234.88, 9767.94, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 356.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2878.35, 9841.63, 1384.4 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 357.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_indoor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2846.04, 9498.34, 1372.82 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3194.97, 9997.61, 1344.34 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3071.89, 9564.52, 1347.22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2664.43, 9491.19, 1346.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2682.34, 9889.09, 1358.41 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 589.654, 10405.2, 1336.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.931, 10676.5, 1336.13 ); + ent.v["angles"] = ( 0, 269.001, 2 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -933.041, 9060.05, 1339.15 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -961.581, 8588.5, 1336.13 ); + ent.v["angles"] = ( 358.015, 352.996, 0.243711 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3640.25, 9570.16, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3414.1, 9593.14, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3997.47, 9513.13, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3829.13, 9767.36, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2015.94, 9680.29, 1164.09 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1910.75, 9914.85, 1160.69 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2106.76, 10213.8, 1172.64 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2132.49, 10212.1, 1174.46 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2157.22, 10212.1, 1182.06 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2180.24, 10213.1, 1170.42 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1911.83, 9628.21, 1163.8 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1913.69, 9654.86, 1164.09 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1619.93, 9436.56, 1165.91 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1590.47, 9438.35, 1181.94 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1641.2, 9443.34, 1185.35 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1831.03, 9853.19, 1164.39 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1830.3, 9878.42, 1167.11 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2958.64, 9446.22, 1528.13 ); + ent.v["angles"] = ( 1.81247, 205.015, 0.845933 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3073.71, 9354.23, 1528.13 ); + ent.v["angles"] = ( 1.81247, 205.015, 0.845933 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3478.99, 9643.84, 1542.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3855.27, 9655.09, 1534.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4099.19, 9564.1, 1534.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3204.61, 9286.51, 1552.19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3686.24, 9647.25, 1538.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2428.39, 9657.28, 1348.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1973.75, 9654.84, 1359.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1994.6, 9213.62, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1726.04, 10538.2, 1348.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -54; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1191.13, 10599, 1349.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 565.169, 10514, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 639.384, 10193.1, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1084.87, 10162.2, 1357.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1562.32, 9678.89, 1353.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 896.835, 8860.77, 1563.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -396.579, 6435.79, 79.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5.05365, 6470.85, 77.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -254.544, 6784.77, 80.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 41.6386, 6679.69, 82.025 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -498.575, 6674.52, 77.325 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -465.948, 7001.1, 74.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -91.6424, 7089.39, 70.325 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -81.3869, 7364.98, 83.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -803.928, 8631.35, 1345.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -919.681, 9057.68, 1346.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -899.236, 9368.42, 1342.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -942.955, 9004.09, 1352.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -201.07, 9183.46, 1346.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 361.177, 9165.03, 1346.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 914.905, 9145.19, 1348.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 413.012, 9016.36, 1144.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 708.841, 9100.86, 1142.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 712.28, 9497.85, 1120.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 725.952, 9940.24, 1134.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 428.394, 9599.1, 1114.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 224.739, 8627.48, 1240.13 ); + ent.v["angles"] = ( 0, 266.004, 0.997717 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 152.409, 8741.8, 1223.43 ); + ent.v["angles"] = ( 1, 181.004, 0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 83.4124, 8835.14, 1242.89 ); + ent.v["angles"] = ( 0, 266.004, 0.997717 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1039.41, 10002.4, 1137.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_lightning_bridge" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -1958.8, -3583.98, -8405.5 ); + ent.v["angles"] = ( 1, 0, 0 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 666; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1406.16, 10570.3, 1587.88 ); + ent.v["angles"] = ( 358.18, 97.0161, -31.0387 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 552.727, 10588.9, 1544.88 ); + ent.v["angles"] = ( 273.313, 328.899, 20.1914 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 576.783, 10701.1, 1422.29 ); + ent.v["angles"] = ( 7.13962, 259.258, -88.0948 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1902.57, 10308.3, 1416.78 ); + ent.v["angles"] = ( 352.701, 73.2123, -91.1448 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.162, 10569.7, 1586.88 ); + ent.v["angles"] = ( 281.024, 211.769, -113.592 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1580.32, 10664.4, 1331.44 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1595.53, 10624.9, 1337.92 ); + ent.v["angles"] = ( 320.949, 270.139, -2.32201 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1850.35, 10320.3, 1336.28 ); + ent.v["angles"] = ( 320.949, 270.139, -2.32201 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1468.07, 10699.1, 1381.26 ); + ent.v["angles"] = ( 5.74593, 283.373, -85.3484 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1634.21, 10597.7, 1341.35 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1536.05, 10666.6, 1335.57 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 681.37, 10678, 1337.33 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 12.495, 9146.95, 1344.95 ); + ent.v["angles"] = ( 275.158, 259.127, 100.714 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -11.2735, 9169.99, 1344.17 ); + ent.v["angles"] = ( 279.097, 129.863, -130.867 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 702.221, 10653.1, 1336.92 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 667.163, 10648.3, 1338.47 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1903.45, 10308.9, 1337.48 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1860.95, 10381.7, 1339.46 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1484.69, 10644.9, 1336.13 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1046.82, 10585.9, 1345.35 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1256.08, 10560.4, 1449.38 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 895.989, 10614.1, 1446.71 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 904.043, 10580.5, 1484.06 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 860.018, 10589.1, 1492.01 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1655.19, 10617.5, 1344.35 ); + ent.v["angles"] = ( 274.044, 358.933, 0.939596 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1079.73, 10573.1, 1341.46 ); + ent.v["angles"] = ( 280.512, 286.527, 73.0785 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 482.028, 10246.4, 1342.25 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 928.138, 10215.3, 1341.89 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 514.69, 9128.72, 1352 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 681.726, 9137.38, 1340.85 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 26.7562, 9154.91, 1341.87 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -130.213, 9097.76, 1342.75 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 233.662, 9181.73, 1343.22 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1605.16, 10656.5, 1388.85 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1640.42, 10701.1, 1444.2 ); + ent.v["angles"] = ( 5.74593, 283.373, -85.3484 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2975.03, 9641.5, 1369.12 ); + ent.v["angles"] = ( 331.623, 263.046, 8.24825 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3588.77, 9707.04, 1679.88 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2735.51, 9363.67, 1502.88 ); + ent.v["angles"] = ( 25.1188, 92.9962, -11.1595 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3273.48, 9653.32, 1501.88 ); + ent.v["angles"] = ( 27.2793, 154.424, 10.9775 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1783.09, 9810.6, 1336.58 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2004.37, 9633.44, 1343.92 ); + ent.v["angles"] = ( 279.88, 246.962, 113.635 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2042.02, 9435.18, 1343.15 ); + ent.v["angles"] = ( 274.044, 358.933, 0.939596 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1780.21, 9840.95, 1340.57 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1835.35, 9888.03, 1341.15 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1020.62, 10582.3, 1343.5 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1592.96, 10542, 1345.7 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1822.83, 10510, 1336.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1942.09, 10485.8, 1342.32 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1975.43, 9649.22, 1343.19 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1969.21, 9446.75, 1341.05 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1832.03, 9142.47, 1343.12 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2196.72, 9073.62, 1434.12 ); + ent.v["angles"] = ( 1.46616, 180.068, 89.0883 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1830.24, 9018.15, 1399.62 ); + ent.v["angles"] = ( 0.104001, 92.0835, 89.5545 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1609.71, 10565.4, 1344.41 ); + ent.v["angles"] = ( 270.926, 86.7671, -87.6804 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1602.95, 10655.1, 1388.71 ); + ent.v["angles"] = ( 284.235, 101.132, -102.043 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ceiling_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2858.47, 9827.81, 1382.29 ); + ent.v["angles"] = ( 270, 360, 0 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2781.71, 9859.82, 1341.99 ); + ent.v["angles"] = ( 278.618, 290.413, 69.246 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2850.44, 9830.63, 1345.14 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2847.19, 9834.98, 1345.3 ); + ent.v["angles"] = ( 298.018, 194.866, 162.645 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3070.15, 9414.14, 1344.35 ); + ent.v["angles"] = ( 286.153, 249.458, 111.819 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ceiling_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2868.19, 9623.34, 1384.03 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 285.0 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2822.36, 9542.62, 1336.13 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3018.92, 9566.49, 1359.21 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3062.11, 9786.73, 1374.04 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3345.83, 9965.6, 1338.47 ); + ent.v["angles"] = ( 331.623, 263.046, 8.24825 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3162.6, 9567.16, 1342.08 ); + ent.v["angles"] = ( 286.106, 78.5502, -80.145 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3202.2, 9655.18, 1337.82 ); + ent.v["angles"] = ( 295.277, 9.20946, -11.4485 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3311.53, 9892.21, 1336.82 ); + ent.v["angles"] = ( 274.255, 24.6379, -26.0689 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2917.54, 9319.16, 1336.52 ); + ent.v["angles"] = ( 274.255, 24.6379, -26.0689 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1489.89, 9732.73, 1338.13 ); + ent.v["angles"] = ( 274.255, 24.6379, -26.0689 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1753.47, 9663.77, 1342.99 ); + ent.v["angles"] = ( 283.969, 43.8212, -44.8058 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2581.19, 9538.97, 1342.65 ); + ent.v["angles"] = ( 274.384, 116.502, -116.352 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2655.73, 9872.91, 1358.54 ); + ent.v["angles"] = ( 297.212, 286.003, 72.1875 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2631.43, 9974.47, 1377.77 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1646.15, 10592.2, 1344.21 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1736.19, 9658.28, 1342.31 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2595.91, 9550.02, 1344.56 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2808.63, 9863.33, 1340.55 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3259.13, 9974.1, 1345.95 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2015.33, 9436.95, 1343.48 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_ash" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 683.494, 10667.8, 1336.23 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1901.4, 10494.8, 1343.4 ); + ent.v["angles"] = ( 281.123, 169.791, -170.119 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 617.367, 10387.4, 1336.33 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 473.008, 10595.1, 1338.98 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 394.892, 10644.7, 1338.22 ); + ent.v["angles"] = ( 271.046, 356.238, 3.63297 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 486.078, 10235.4, 1343.48 ); + ent.v["angles"] = ( 287.957, 92.9286, -92.9109 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 741.183, 10395.7, 1343.71 ); + ent.v["angles"] = ( 274.956, 180.635, 179.233 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 947.43, 10230.7, 1342.46 ); + ent.v["angles"] = ( 282.885, 112.727, -111.945 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 971.453, 10199.9, 1344.91 ); + ent.v["angles"] = ( 276.307, 234.116, 127.128 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2028.97, 10420.7, 1493.81 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2003.66, 10400.3, 1493.06 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_blood_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.194, 10390.6, 1442.77 ); + ent.v["angles"] = ( 87.2665, 19.9036, -157.009 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2827.94, 9642.21, 1362.9 ); + ent.v["angles"] = ( 284.235, 101.132, -102.043 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2728.7, 9932.34, 1502.88 ); + ent.v["angles"] = ( 27.2793, 154.424, 10.9775 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1139.74, 9183.71, 1342.29 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1538.25, 9161.64, 1341.92 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1122.66, 9163.84, 1348.97 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1502.71, 9167.7, 1345.38 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -548.867, 9285.93, 1336.32 ); + ent.v["angles"] = ( 274.058, 74.8172, -75.2586 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -928.928, 9350.51, 1339.62 ); + ent.v["angles"] = ( 271.49, 313.346, 46.1678 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -531.364, 8540.54, 1336.13 ); + ent.v["angles"] = ( 359.861, 86.0029, -1.99545 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -992.053, 8980.17, 1336.13 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -959.544, 9129.57, 1336.13 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -936.053, 9354.49, 1336.13 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -757.838, 9350.15, 1342.69 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -523.02, 9309.18, 1336.13 ); + ent.v["angles"] = ( 0.174242, 265.004, 1.9927 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -925.949, 9028.78, 1338.12 ); + ent.v["angles"] = ( 294.943, 91.5663, -92.2952 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -938.21, 8989.24, 1352.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -562.519, 9300.83, 1351.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_steam_pipe" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1572.54, 10595.4, 1237.1 ); + ent.v["angles"] = ( 307.948, 269.133, 8.52223 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_steam_pipe" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1573.97, 10598.6, 1241.04 ); + ent.v["angles"] = ( 336.914, 77.4272, -177.593 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 1000; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_generator_sparks" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -468.935, 6306.68, 101.568 ); + ent.v["angles"] = ( 271.545, 320.377, -131.117 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3200; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_3floor" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 883.113, 9289.07, 1650.48 ); + ent.v["angles"] = ( 88.959, 101.532, -169.894 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2822.56, 9797.21, 1336.6 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_flight_clouds" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -933.391, 9419.79, 3750.13 ); + ent.v["angles"] = ( 6, 359.842, -1.00489 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 10001; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2407.47, 9685.8, 1338.13 ); + ent.v["angles"] = ( 274.384, 116.502, -116.352 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2917.66, 10054.5, 1336.13 ); + ent.v["angles"] = ( 360, 270, 2 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2729.4, 9970.44, 1352.2 ); + ent.v["angles"] = ( 360, 270, 2 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2766.99, 9770.14, 1336.13 ); + ent.v["angles"] = ( 1.4864, 222.017, 1.33874 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3069.43, 9323.92, 1342.13 ); + ent.v["angles"] = ( 359.86, 86.0019, -1.99543 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3168.04, 9666.45, 1336.13 ); + ent.v["angles"] = ( 358.076, 343.99, 0.551883 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3211.15, 10005.5, 1347.43 ); + ent.v["angles"] = ( 359.756, 276.995, 1.98541 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2473.83, 10017.2, 1432.13 ); + ent.v["angles"] = ( 2, 178.999, 0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2410.57, 9621.92, 1528.13 ); + ent.v["angles"] = ( 358.188, 334.987, 0.845598 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3012.87, 9888.56, 1560.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3256.54, 9554.08, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3444.37, 9584.08, 1528.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 358.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3802.17, 9725.26, 1528.13 ); + ent.v["angles"] = ( 358.234, 331.986, 0.939384 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4140.56, 9454.87, 1530.96 ); + ent.v["angles"] = ( 359.55, 77.0076, -1.94882 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3754.67, 9891.84, 1708.09 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3654.77, 9856.02, 1710.58 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3928.71, 9648.46, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3897.87, 9418.06, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3611.64, 9448.36, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3622.4, 9305.04, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3436.25, 9586.12, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3438.73, 9736.43, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3006.05, 9764.95, 1705.55 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -47; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2836.07, 9345.84, 1706.26 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3045.95, 9551.25, 1706.07 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2593.02, 10007.5, 1704.13 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2655.16, 9921.61, 1710.92 ); + ent.v["angles"] = ( 358.98, 187.99, 0.278593 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3309.09, 9847.24, 1713.41 ); + ent.v["angles"] = ( 275.284, 158.67, -123.854 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3281.38, 9649.85, 1709.98 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3717.82, 9891.55, 1712.31 ); + ent.v["angles"] = ( 276.373, 252.521, 107.799 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3381.98, 9860.42, 1336.65 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3261.28, 9256.64, 1336.13 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3358.42, 9339.63, 1337.02 ); + ent.v["angles"] = ( 273.685, 148.196, -149.513 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3309.19, 9269.22, 1339.56 ); + ent.v["angles"] = ( 295.355, 101.008, 173.07 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -731.236, 9331.66, 1345.52 ); + ent.v["angles"] = ( 274.058, 74.8172, -75.2586 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4219.6, 9883.97, 1686.2 ); + ent.v["angles"] = ( 358.469, 266.4, 89.3724 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.62, 8581.17, 1336.32 ); + ent.v["angles"] = ( 271.409, 178.413, -176.397 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -466.08, 8807.48, 1333.03 ); + ent.v["angles"] = ( 331.623, 263.046, 8.24825 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -447.483, 8689.35, 1444.46 ); + ent.v["angles"] = ( 59.3735, 233.096, -33.8609 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.273, 8749.42, 1216.65 ); + ent.v["angles"] = ( 1, 181.004, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 129.882, 8738.25, 1144.46 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 652.458, 8984.75, 1128.13 ); + ent.v["angles"] = ( 359.187, 66.0123, -1.82752 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 336.022, 9042.62, 1134.27 ); + ent.v["angles"] = ( 358.044, 347.993, 0.415989 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -73.4138, 8022.48, 276.125 ); + ent.v["angles"] = ( 359.187, 66.0123, -1.82752 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 42.2798, 7573.77, 64.125 ); + ent.v["angles"] = ( 1.69702, 212.016, 1.06081 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -62.7467, 7542.91, 72.0493 ); + ent.v["angles"] = ( 0.650964, 251.012, 1.89219 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -94.2778, 7318.94, 64.125 ); + ent.v["angles"] = ( 0, 269.002, 2 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -215.374, 7130.16, 64.125 ); + ent.v["angles"] = ( 0, 269.001, 2 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -606.146, 7051.41, 64.125 ); + ent.v["angles"] = ( 0, 269.002, 2 ); + ent.v["delay"] = -89; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.43524, 6826.6, 64.625 ); + ent.v["angles"] = ( 1.98077, 188.006, 0.278867 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -305.732, 6748.36, 176.125 ); + ent.v["angles"] = ( 1, 283, 0 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -9.75635, 6804.97, 173.885 ); + ent.v["angles"] = ( 1, 283, 0 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -379.102, 6417.79, 174.021 ); + ent.v["angles"] = ( 1, 283, 0 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 32.8236, 6494.58, 174.947 ); + ent.v["angles"] = ( 0.998629, 280, 0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -467.596, 6715.43, 173.671 ); + ent.v["angles"] = ( 1, 283, 0 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -580.039, 6488.17, 120.733 ); + ent.v["angles"] = ( 36.4703, 294.217, 6.72309 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -635.867, 6795.17, 104.186 ); + ent.v["angles"] = ( 25.1853, 334.388, 28.0504 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 79.6997, 6709.9, 174.997 ); + ent.v["angles"] = ( 53, 103, 135 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2.77522, 6900.08, 69.025 ); + ent.v["angles"] = ( 272.1, 174.225, 15.0277 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 52.7936, 6880.71, 67.025 ); + ent.v["angles"] = ( 272.1, 174.225, 15.0277 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -96.7265, 7553.39, 85.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 159.787, 6616.82, 121.652 ); + ent.v["angles"] = ( 15, 180, -180 ); + ent.v["delay"] = 5; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -159.776, 9118.96, 1343.61 ); + ent.v["angles"] = ( 279.097, 129.863, -130.867 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 335.58, 6121.61, 51.208 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 29.3548, 6071.81, 17.1162 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -176.858, 6020.8, -1.46361 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -621.387, 5743.81, -47.875 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -707, 6024.22, -48.0669 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1073.87, 5808.45, -72 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1079.21, 5648.27, -72 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1204.23, 5428.41, -64.3255 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -760.422, 5419.79, -70.7786 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -490.389, 5350.47, -72 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -269.186, 5390.14, -72 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 408.443, 6180.08, 52.4562 ); + ent.v["angles"] = ( 0.34777, 99.9951, -1.97077 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 261.556, 6151.54, 64.4823 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -29.8913, 6132.18, 37.7886 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -442.86, 5996.47, 5.62947 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -699.945, 5915.38, -22.2505 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1182.38, 5843.2, -47 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -898.028, 5474.64, -45 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -503.838, 5463.26, -51 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_portal_amb" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 893.493, 9676.43, 1300.5 ); + ent.v["angles"] = ( 270.361, 146.301, -146.301 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_elec_key" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 2112.86, 9546.15, 1491.17 ); + ent.v["angles"] = ( 0, 1.61288, 0.493361 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 100; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_elec_key" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -340.17, 9085.09, 1489.84 ); + ent.v["angles"] = ( 359.931, 173.613, -0.488561 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 101; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_flight_clouds" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 1368.04, 9589.45, 2246.13 ); + ent.v["angles"] = ( 6, 359.842, -1.00489 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 10001; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_works" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -14011.5, -10415.8, 15941.6 ); + ent.v["angles"] = ( 357.253, 305.018, 8.18714 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3299.46, 9686.36, 1707.03 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3264.68, 9867.13, 1748.01 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2506.14, 9780.6, 1704.13 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2411.6, 9614.65, 1704.33 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_sm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2340.37, 9352.26, 1711.15 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3697.81, 9868.33, 1717.09 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3715.53, 9376.47, 1720.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3452.16, 9536.83, 1725.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3467.93, 9756.3, 1719.13 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3759.16, 9586.4, 1704.23 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2758.36, 9459.87, 1708.03 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2017.64, 9666.53, 1344.04 ); + ent.v["angles"] = ( 274.297, 331.58, 26.2103 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_flies" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3871.12, 9589.39, 1537.08 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 2.0 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -850.724, 6678.8, 80.6406 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_ground_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1041.45, 6361.84, 73.125 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 270.0 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -853.933, 6697.45, 70.8289 ); + ent.v["angles"] = ( 1.98077, 188.006, 0.278867 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_papers" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1162.83, 6626.91, 79.364 ); + ent.v["angles"] = ( 359.687, 278.996, 1.97567 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -514.717, 8742.86, 1336.92 ); + ent.v["angles"] = ( 276.248, 104.973, -103.03 ); + ent.v["delay"] = -32; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_docks_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 437.647, 4164.58, -179.558 ); + ent.v["angles"] = ( 273.066, 140.006, -40.0394 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -762.183, 9510.43, 1336.63 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -70; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -754.294, 9582.81, 1340.43 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -746.487, 9544.06, 1338.76 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -781.124, 8884.93, 1337.66 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -526.294, 8788.21, 1336.13 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -121.706, 8859.73, 1137.45 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -89.6046, 8871.91, 1138.16 ); + ent.v["angles"] = ( 326.678, 262.19, 8.68818 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 407.075, 8917.91, 1128.42 ); + ent.v["angles"] = ( 277.38, 187.745, 79.3305 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_embers_flat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 346.021, 8906.26, 1128.72 ); + ent.v["angles"] = ( 277.38, 187.745, 79.3305 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 239.79, 8611.99, 1194.45 ); + ent.v["angles"] = ( 359.629, 87.0357, 172.749 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_water_drip" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 627.908, 9466.32, 1214.44 ); + ent.v["angles"] = ( 1, 181.004, 0 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1493.18, 9859.98, 1236.3 ); + ent.v["angles"] = ( 359.629, 87.0357, 172.749 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3505.03, 10071, 1836.5 ); + ent.v["angles"] = ( 359.374, 256.997, -0.852405 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3140.49, 10071.3, 1838.29 ); + ent.v["angles"] = ( 359.549, 267.997, -0.956077 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3512.07, 9240.68, 1837.86 ); + ent.v["angles"] = ( 359.549, 267.997, -0.956077 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2567.41, 9239.09, 1836.79 ); + ent.v["angles"] = ( 359.549, 267.997, -0.956077 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3245.83, 9356.68, 1809.87 ); + ent.v["angles"] = ( 88.2621, 234.619, -33.3817 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2504.11, 9653.06, 1495.16 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3013.48, 9369.17, 1494.78 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3013.42, 9945.22, 1495.16 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3283.65, 9362.79, 1494.53 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1927.86, 9672.2, 1559.09 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 423.669, 10589.5, 1553.63 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 713.441, 10407.4, 1555.28 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1196.23, 10671.9, 1355.82 ); + ent.v["angles"] = ( 3, 180, -179 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 890.943, 9922.62, 1678.88 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 890.761, 9416.6, 1670.78 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 891.356, 10209.5, 1679.53 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2363.55, 9957.42, 1675.41 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2400.18, 9568.7, 1673.89 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2830.29, 9567.95, 1673.89 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3155.6, 9400.79, 1670.76 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -564.353, 6131.82, 173.804 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.474, 6266.18, 174.089 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1134.02, 6026.12, 173.672 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -569.979, 5833.6, 124.43 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -547.544, 5691.97, 125.33 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 440.405, 5737.47, 437.449 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1023.9, 5737.35, 436.58 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 890.853, 8930.39, 1670.88 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 816.006, 8448.9, 1690.6 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 980.761, 8449.74, 1690.95 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1451, 9679.38, 1555.67 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2043.35, 9792.53, 1555.77 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3550.27, 9700.23, 1356.74 ); + ent.v["angles"] = ( 350.776, 209.184, 175.996 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 785.455, 9056.21, 1251.57 ); + ent.v["angles"] = ( 44.9397, 190.891, 170.592 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 447.928, 8762.6, 1147.03 ); + ent.v["angles"] = ( 337.384, 199.53, 171.258 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 316.692, 10522.5, 1617.96 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.625, 10657.6, 1622.49 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.625, 10402.8, 1616.14 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.625, 10400.4, 1505.41 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.625, 10531.2, 1508.28 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 320.625, 10654.7, 1493.38 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 311.423, 10426.9, 1417.13 ); + ent.v["angles"] = ( 26.96, 356.634, -1.52751 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1569.88, 10462.9, 1382.04 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1723.7, 10471.2, 1381.03 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1323.79, 10466.9, 1388.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 448.142, 10076.1, 1382.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 611.63, 10057.6, 1378.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1091.71, 10079.4, 1393.28 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1244.25, 10070.9, 1381.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -30.9473, 9019.22, 1387.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 132.446, 9021.45, 1389.42 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.723, 9012.43, 1389.46 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 767.811, 9013.37, 1391.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1007.32, 9014.39, 1402.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1492.93, 9266.77, 1391.13 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1170.08, 9252.34, 1391.48 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1006.98, 9267.06, 1392.13 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 688.911, 9262.78, 1389.75 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 206.046, 9274.31, 1391.13 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1010.31, 9543.9, 1497.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 770.992, 9552.95, 1498.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1720.47, 9270.14, 1491.67 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1568.39, 9267.45, 1494.86 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1245.01, 9268.15, 1493.94 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1088.69, 9272.64, 1492.86 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.737, 9265.8, 1489.91 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 607.758, 9271.79, 1491.13 ); + ent.v["angles"] = ( 9.92145, 269.658, 2.39977 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1015.94, 9027.97, 1494.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 765.951, 9030, 1496.65 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 527.6, 9028.08, 1494.85 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 287.869, 9023, 1491.85 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 50.6901, 9027.66, 1496.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -110.165, 9024.2, 1491.85 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1569.11, 9557.99, 1390.47 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1486.33, 9546.5, 1392.86 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1415.67, 9783.88, 1389.09 ); + ent.v["angles"] = ( 13.8118, 270.389, 2.80952 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1649.48, 9800.45, 1391.13 ); + ent.v["angles"] = ( 13.8118, 270.389, 1.80952 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1486.94, 9797.82, 1393.13 ); + ent.v["angles"] = ( 13.8118, 270.389, 1.80952 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1889.64, 9554.51, 1494.2 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1650.77, 9554, 1494.7 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1407.12, 9549.6, 1495.13 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2680.41, 9241.74, 1607.55 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2559.16, 9251.56, 1606.23 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2815.99, 9241.74, 1607.39 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2941.83, 9241.74, 1610.52 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3073.12, 9243.77, 1605.54 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3198.28, 9241.74, 1604.28 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3327.58, 9241.74, 1604.89 ); + ent.v["angles"] = ( 39, 90, -90 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 406.69, 10711.4, 1485.18 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 407.744, 10705.4, 1596.58 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 728.378, 10702.6, 1597.54 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 726.087, 10711.4, 1484.7 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 885.363, 10711.4, 1483.53 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 886.745, 10711.4, 1605.65 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1046.04, 10711.4, 1604.41 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1046.56, 10711.4, 1487.01 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1369.93, 10711.4, 1487.85 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1365.1, 10711.4, 1605.1 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1524.45, 10711.4, 1604.6 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1524.79, 10711.4, 1495.05 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1690.26, 10711.4, 1484.78 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -83; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1690.75, 10711.4, 1604.31 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3312.84, 10052.6, 1434.41 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -60; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3189.64, 10063.6, 1434.34 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3064.33, 10063.9, 1436.83 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2809.5, 10063.8, 1434.68 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2692.33, 10070.1, 1435.34 ); + ent.v["angles"] = ( 32.5749, 270.764, 90.509 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3315.4, 9248.5, 1425.71 ); + ent.v["angles"] = ( 23.4234, 90.3041, 96.5324 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3189.54, 9247.91, 1436.81 ); + ent.v["angles"] = ( 23.4234, 90.3041, 96.5324 ); + ent.v["delay"] = -42; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2935.97, 9248.13, 1434.52 ); + ent.v["angles"] = ( 23.4234, 90.3041, 96.5324 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2808.35, 9247.4, 1434.97 ); + ent.v["angles"] = ( 23.4234, 90.3041, 96.5324 ); + ent.v["delay"] = -48; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2684.48, 9251.12, 1432.67 ); + ent.v["angles"] = ( 23.4234, 90.3041, 96.5324 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1851.76, 9666.95, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1689.81, 9672.34, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1528.3, 9666.39, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1377.93, 9668, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1216.79, 9667.93, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1056.31, 9667.57, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 731.424, 9670.17, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 565.92, 9668.89, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 407.767, 9667.76, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 256.685, 9668.92, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 96.9389, 9668.97, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -58.1716, 9667.61, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1206.34, 9145.07, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1050.18, 9141.42, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 733.914, 9141.55, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 568.491, 9139.29, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.404, 9140.03, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 253.372, 9139.45, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 88.891, 9142.25, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -57.3577, 9139.38, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1042.91, 10210, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1213.28, 10210.5, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.23, 10212.7, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1532.33, 10210.3, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1689.03, 10214.1, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_grill_lg" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1848.9, 10211.3, 1696.68 ); + ent.v["angles"] = vectorscale( ( 1, 0, 0 ), 72.0 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_skinny" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2578.89, 9342.72, 1615.18 ); + ent.v["angles"] = ( 39, 90, 4 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 401.419, 6214.84, 236.176 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1291.9, 5262.93, 85.1909 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -507.892, 5356.69, 85.4086 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -194.699, 5414.74, 85.7782 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -774.753, 4920.69, 85.2359 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -460.783, 4960.4, 85.2728 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -46.4178, 5919.75, 308.628 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 317.223, 6463.84, 463.01 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -33; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 786.301, 6457.22, 225.263 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 991.071, 6495.34, 242.168 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 582.236, 6419.38, 201.504 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 89.8474, 6226.05, 436.7 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -352.84, 6141.79, 436.856 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 486.265, 6571.19, 307.796 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1158.42, 6607.94, 405.51 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -818.707, 5297.98, 85.7438 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1142.86, 5237.31, 84.9536 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 104.214, 6475.26, 168.218 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -197.748, 6437.94, 168.111 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -459.679, 6417.96, 170.195 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -528.85, 6721.84, 167.801 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -253.095, 6775.98, 168.278 ); + ent.v["angles"] = ( 87.7649, 206.476, -168.354 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( 89.038, 6849.09, 75.057 ); + ent.v["angles"] = ( 316.948, 121.676, 9.58068 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 10.2684, 6655.25, 159.499 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 138.161, 6724.55, 157.718 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -553.939, 6543.81, 156.55 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -435.901, 6817.92, 137.947 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -316.12, 6866.29, 157.493 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -84.2072, 6535.8, 138.646 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -103.272, 7239.8, 183.45 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -86.1894, 8081.85, 388.829 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 157.288, 8184.97, 421.462 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.994, 8441.6, 1022.28 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 478.062, 8437.4, 1022.53 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 412.855, 8939.26, 959.914 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 414.777, 9560.82, 1239.88 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -67; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 819.513, 9903.79, 1147.69 ); + ent.v["angles"] = ( 352.607, 137.27, -179.538 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1699.24, 10590.7, 1275.52 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1872.09, 10311.2, 1275.57 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1872.27, 9136.04, 1274.87 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1661.05, 9510.7, 1276.91 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1710.07, 10452.4, 1170.78 ); + ent.v["angles"] = ( 320.227, 252.198, -64.0511 ); + ent.v["delay"] = -86; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2162.05, 10094.1, 1166.03 ); + ent.v["angles"] = ( 3.09201, 249.964, -92.2163 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1779.21, 9973.23, 1279.9 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -955.011, 9653.45, 1470.93 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.354, 9006.9, 1474.53 ); + ent.v["angles"] = ( 68.8801, 19.8961, 18.3607 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -773.216, 8671.79, 1474.97 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -525.033, 9302.02, 1472.5 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -521.188, 9532.77, 1471.4 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -517.18, 9885.99, 1620.33 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5.61688, 9138.99, 1555.76 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1122.61, 9138.22, 1556 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1539.18, 9134.92, 1556.23 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1771.89, 9132.89, 1554.68 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3494.65, 9802.49, 1448.48 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3356.18, 9388.43, 1448.11 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2648.33, 9468.2, 1448.38 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.27, 9172.78, 1430.96 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.59, 9074.75, 1532.77 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2192.47, 9485.15, 1540.64 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.65, 9773.38, 1531.11 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2190.64, 10147.1, 1531.75 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2043.31, 9269.78, 1555.28 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 782.629, 10562.3, 1428.92 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2192.61, 9803.98, 1432.3 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3755.64, 9803.88, 1622.18 ); + ent.v["angles"] = ( 3.74498, 208.282, 176.039 ); + ent.v["delay"] = -30; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3559.12, 9576.33, 1858.36 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1355.83, 5603.76, 85.6469 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.569, 7221.49, 781.074 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 886.704, 7413.74, 837.356 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -23; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 827.948, 6935.94, 757.722 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 655.77, 8112.22, 1349.92 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1077.13, 6734.67, 243.379 ); + ent.v["angles"] = ( 357, 360, -1 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1446.42, 8786.81, 1336.13 ); + ent.v["angles"] = ( 357, 360, -1 ); + ent.v["delay"] = -64; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -301.037, 9758.66, 1336.13 ); + ent.v["angles"] = ( 357, 360, -1 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -296.616, 10024.6, 1561.02 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -381.96, 9359.96, 1421.61 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -26; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -294.089, 9137.74, 1555.6 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1038.56, 8307.04, 1470.39 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -76; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 58.6422, 5028.87, 85.5442 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1077.74, 4880.22, 85.3633 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -52; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.397, 6691.36, 156.587 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -102.925, 7167.09, 204.785 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 255.812, 7238.75, 183.851 ); + ent.v["angles"] = ( 0.786996, 93.9423, 3.06272 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 481.194, 6705.34, 228.47 ); + ent.v["angles"] = ( 1.18527, 77.9467, 0.769855 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2038.86, 10591, 1275.2 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_works" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -16163.6, -24902.8, 5721.57 ); + ent.v["angles"] = ( 357.253, 305.018, 8.18714 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1364.11, 10473.7, 1458.77 ); + ent.v["angles"] = ( 1.5043, 99.9372, 177.218 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1160.21, 9657.1, 1667.77 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 533.91, 9563.95, 1595.92 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 371.03, 9556, 1599.39 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 768.419, 9791.94, 1496.75 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 606.036, 9784.37, 1494.09 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 989.424, 9782.96, 1491.41 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1240.71, 9790.43, 1596.71 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -100; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1165.63, 9255.2, 1600.83 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 529.666, 9253, 1600.59 ); + ent.v["angles"] = ( 8.84569, 270.125, 1.15222 ); + ent.v["delay"] = -69; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 1076.08, 9049.83, 1594.92 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -87; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_godray_jail" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 449.965, 9034, 1601.22 ); + ent.v["angles"] = ( 15.1496, 89.6387, -5.17936 ); + ent.v["delay"] = -21; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 147.805, 8736.36, 471.843 ); + ent.v["angles"] = ( 1.8203, 325.493, -174.863 ); + ent.v["delay"] = -29; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 708.688, 8697.52, 594.988 ); + ent.v["angles"] = ( 5.42363, 249.387, 179.472 ); + ent.v["delay"] = -24; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 399.19, 8036.93, 757.379 ); + ent.v["angles"] = ( 1.03643, 99.2729, 177.746 ); + ent.v["delay"] = -56; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 9.83607, 8457.23, 866.271 ); + ent.v["angles"] = ( 358.734, 358.353, -174.7 ); + ent.v["delay"] = -75; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 352.342, 8854.08, 933.438 ); + ent.v["angles"] = ( 4.10524, 275.464, -178.093 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 665.592, 8621.58, 927.116 ); + ent.v["angles"] = ( 358.897, 146.438, 175.61 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1161.57, 6548.38, 157.284 ); + ent.v["angles"] = ( 356.243, 104.479, 177.474 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -812.679, 6550.35, 156.07 ); + ent.v["angles"] = ( 356.381, 107.482, 177.281 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -828.262, 6643.1, 177.801 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1050.98, 6344.51, 178.115 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -99; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_steam_pipe_2" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1155.38, 6436.78, 127.459 ); + ent.v["angles"] = ( 325.572, 103.717, -118.254 ); + ent.v["delay"] = -34; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -899.01, 9249.23, 1470.88 ); + ent.v["angles"] = ( 86.2212, 270.779, 107.648 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_ceiling" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -668.878, 8115.17, 1524.9 ); + ent.v["angles"] = ( 86.2212, 270.779, 107.648 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -969.349, 9031.18, 1464.88 ); + ent.v["angles"] = ( 86.2212, 270.779, 107.648 ); + ent.v["delay"] = -63; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3405.9, 9339.15, 1529.66 ); + ent.v["angles"] = ( 331.623, 263.046, 8.24825 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3917.37, 9634.78, 1684.65 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -53; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3497.73, 9900.04, 1558.98 ); + ent.v["angles"] = ( 353.244, 296.4, 11.1766 ); + ent.v["delay"] = -88; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2557.04, 9721.06, 1674.06 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -40; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 3312.89, 9721.35, 1674.23 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_falling_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2829.98, 9601.53, 1365.18 ); + ent.v["angles"] = ( 284.235, 101.132, -102.043 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -430.366, 6320.19, 74.1536 ); + ent.v["angles"] = ( 321.026, 8.30788, -178.503 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3200; + ent = maps\mp\_utility::createexploder( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "exploder"; + ent.v["origin"] = ( -424.851, 6295.92, 74.5358 ); + ent.v["angles"] = ( 321.026, 8.30788, -178.503 ); + ent.v["delay"] = 0; + ent.v["exploder"] = 3200; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_sparks_panel" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -292.577, 6932.69, 164.028 ); + ent.v["angles"] = ( 16.7863, 57.6032, -25.3165 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1712.46, -3882.27, -8427.66 ); + ent.v["angles"] = ( 357.654, 131.461, 173.437 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1195.31, -3185.81, -8403.06 ); + ent.v["angles"] = ( 357.938, 271.364, 5.80023 ); + ent.v["delay"] = -17; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1737.05, -3361.13, -8427.08 ); + ent.v["angles"] = ( 0.264099, 220.383, 6.29505 ); + ent.v["delay"] = -90; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2260.25, -3424.57, -8394.88 ); + ent.v["angles"] = ( 5.21218, 0.72745, 3.53907 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2186.54, -3850.05, -8392.88 ); + ent.v["angles"] = ( 5.21218, 0.72745, 3.53907 ); + ent.v["delay"] = -49; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2183.18, -3608.02, -8358.08 ); + ent.v["angles"] = ( 5.21218, 0.72745, 3.53907 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2381.42, -3229.07, -8381.88 ); + ent.v["angles"] = ( 5.21218, 0.72745, 3.53907 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fog_closet" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -2176.15, -4051.01, -8404.34 ); + ent.v["angles"] = ( 5.21218, 0.72745, 3.53907 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -3844.63, 2669.63, -8906.04 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1347.37, 5991.52, -9034.89 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -82; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -6841.27, 772.29, -8673.81 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -51; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 6565.82, 2870.47, -9193.91 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 4953.08, -2793.47, -8690.6 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 5966.02, -7924.01, -8993.2 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -84; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_vista_fog" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -264.355, -9708.51, -9199.76 ); + ent.v["angles"] = ( 274.434, 58.5957, -148.678 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 727.317, 9515.69, 1112.52 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -92; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 692.964, 9527.48, 1109.83 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 697.939, 9555.2, 1104.42 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -27; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 742.295, 9561.95, 1107.22 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 755.3, 9531.58, 1113.22 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -747.307, 9189.86, 1377.64 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -96; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -964.739, 8862.04, 1390 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -25; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -978.462, 8866.31, 1370 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -41; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -948.451, 9032.78, 1337.62 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -38; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -972.437, 9025.12, 1337.92 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -914.71, 8989.99, 1337.52 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -666.12, 9215.17, 1342.02 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -97; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2166.32, 9398.12, 1384.02 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 450.04, 10295.1, 1374.01 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -91; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 429.026, 10302.1, 1379.21 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -61; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -756.418, 8668.83, 1376.01 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -780.913, 8650.59, 1375.71 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -978.15, 8827.38, 1376.74 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -85; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -994.333, 8796.53, 1344.73 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -45; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -255.782, 7773.52, 149.925 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -129.488, 7791.41, 89.125 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -35; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -289.519, 7808.43, 180.625 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -219.39, 7881.49, 177.025 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -58; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 123.975, 7569.75, 64.625 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -36; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2610.22, 9258.08, 1532.32 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -93; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2598.16, 9259.59, 1534.13 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -37; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1873.77, -3732.44, -8446.28 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1884.71, -3434.8, -8441.69 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -46; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.09, -3419.79, -8446.28 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -66; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.97, -3429.18, -8438.87 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -98; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1887.88, -3731.23, -8439.17 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -43; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1947.66, -3727.37, -8399.39 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -80; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2476.05, 9441.09, 1564 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -95; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2471.93, 9438.04, 1567 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -74; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2606.03, 9261.8, 1534.13 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2144.01, 9384.09, 1379.32 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -71; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2146.25, 9356.15, 1382.53 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -679.561, 9218.32, 1337.02 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -62; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -716.517, 9205.81, 1338.62 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -55; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -900.584, 9035.59, 1341.63 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -44; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 719.208, 9557.13, 1110.73 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -16; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 871.139, 9593.56, 1144.54 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -94; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -194.315, 7711.4, 84.225 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -226.304, 7756.25, 121.325 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -65; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -148.564, 7805.71, 108.625 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -59; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 432.151, 7878.44, 71.125 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -50; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 332.167, 8255.32, 65.425 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -77; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_tinhat_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 384.185, 8125.68, 183.399 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -20; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 112.608, 6949.11, 121.618 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -68; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1877.71, -3746.33, -8443.78 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -39; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1907.92, -3737.14, -8423.5 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -57; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1881.17, -3416.76, -8443.88 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1913.68, -3429.53, -8423.3 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -18; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1939.52, -3436.6, -8409.8 ); + ent.v["angles"] = ( 356.385, 310.775, 6.57062 ); + ent.v["delay"] = -73; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 417.981, 10292.2, 1374.12 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -81; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 445.107, 10299.9, 1377.22 ); + ent.v["angles"] = ( 0.319972, 280.816, 1.58965 ); + ent.v["delay"] = -79; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -796.584, 9192.11, 1378.24 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -22; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -1024.91, 8778.35, 1336.92 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -28; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -726.891, 9213.39, 1342.03 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -72; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_candle_fire" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -978.093, 8981.14, 1337.72 ); + ent.v["angles"] = ( 0.32829, 280.516, 1.58795 ); + ent.v["delay"] = -19; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -422.865, 9127.95, 1526.2 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -31; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_light_round_oo" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( -422.036, 9822.33, 1526.47 ); + ent.v["angles"] = ( 87.765, 206.475, -153.455 ); + ent.v["delay"] = -78; + ent = maps\mp\_utility::createoneshoteffect( "fx_alcatraz_fire_xsm" ); + ent.v["type"] = "oneshotfx"; + ent.v["origin"] = ( 2192.36, 9573.53, 1556.93 ); + ent.v["angles"] = ( 321.739, 261.228, 9.25082 ); + ent.v["delay"] = -70; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc index 2ddf6e4..b06e3b4 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zgrief.gsc @@ -1,814 +1,815 @@ -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\_demo; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; main() { - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level.custom_spectate_permissions = ::setspectatepermissionsgrief; - level._game_module_custom_spawn_init_func = ::maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = ::maps/mp/zombies/_zm_stats::grief_custom_stat_update; - level._game_module_player_damage_callback = ::maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback; - level.custom_end_screen = ::custom_end_screen; - level.gamemode_map_postinit[ "zgrief" ] = ::postinit_func; - level._supress_survived_screen = 1; - level.game_module_team_name_override_og_x = 155; - level.prevent_player_damage = ::player_prevent_damage; - level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; - level._grief_reset_message = ::grief_reset_message; - level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; - level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; - level.game_module_onplayerconnect = ::grief_onplayerconnect; - level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; - level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zgrief" ); + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level.custom_spectate_permissions = ::setspectatepermissionsgrief; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::grief_custom_stat_update; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level.custom_end_screen = ::custom_end_screen; + level.gamemode_map_postinit["zgrief"] = ::postinit_func; + level._supress_survived_screen = 1; + level.game_module_team_name_override_og_x = 155; + level.prevent_player_damage = ::player_prevent_damage; + level._game_module_player_damage_grief_callback = ::game_module_player_damage_grief_callback; + level._grief_reset_message = ::grief_reset_message; + level._game_module_player_laststand_callback = ::grief_laststand_weapon_save; + level.onplayerspawned_restore_previous_weapons = ::grief_laststand_weapons_return; + level.game_module_onplayerconnect = ::grief_onplayerconnect; + level.game_mode_spawn_player_logic = ::game_mode_spawn_player_logic; + level.game_mode_custom_onplayerdisconnect = ::grief_onplayerdisconnect; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zgrief" ); } grief_onplayerconnect() { - self thread move_team_icons(); - self thread maps/mp/gametypes_zm/zmeat::create_item_meat_watcher(); - self thread zgrief_player_bled_out_msg(); + self thread move_team_icons(); + self thread maps\mp\gametypes_zm\zmeat::create_item_meat_watcher(); + self thread zgrief_player_bled_out_msg(); } grief_onplayerdisconnect( disconnecting_player ) { - level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); + level thread update_players_on_bleedout_or_disconnect( disconnecting_player ); } setspectatepermissionsgrief() { - self allowspectateteam( "allies", 1 ); - self allowspectateteam( "axis", 1 ); - self allowspectateteam( "freelook", 0 ); - self allowspectateteam( "none", 1 ); + self allowspectateteam( "allies", 1 ); + self allowspectateteam( "axis", 1 ); + self allowspectateteam( "freelook", 0 ); + self allowspectateteam( "none", 1 ); } custom_end_screen() { - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ].game_over_hud = newclienthudelem( players[ i ] ); - players[ i ].game_over_hud.alignx = "center"; - players[ i ].game_over_hud.aligny = "middle"; - players[ i ].game_over_hud.horzalign = "center"; - players[ i ].game_over_hud.vertalign = "middle"; - players[ i ].game_over_hud.y -= 130; - players[ i ].game_over_hud.foreground = 1; - players[ i ].game_over_hud.fontscale = 3; - players[ i ].game_over_hud.alpha = 0; - players[ i ].game_over_hud.color = ( 1, 1, 1 ); - players[ i ].game_over_hud.hidewheninmenu = 1; - players[ i ].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); - players[ i ].game_over_hud fadeovertime( 1 ); - players[ i ].game_over_hud.alpha = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].game_over_hud.fontscale = 2; - players[ i ].game_over_hud.y += 40; - } - players[ i ].survived_hud = newclienthudelem( players[ i ] ); - players[ i ].survived_hud.alignx = "center"; - players[ i ].survived_hud.aligny = "middle"; - players[ i ].survived_hud.horzalign = "center"; - players[ i ].survived_hud.vertalign = "middle"; - players[ i ].survived_hud.y -= 100; - players[ i ].survived_hud.foreground = 1; - players[ i ].survived_hud.fontscale = 2; - players[ i ].survived_hud.alpha = 0; - players[ i ].survived_hud.color = ( 1, 1, 1 ); - players[ i ].survived_hud.hidewheninmenu = 1; - if ( players[ i ] issplitscreen() ) - { - players[ i ].survived_hud.fontscale = 1,5; - players[ i ].survived_hud.y += 40; - } - winner_text = &"ZOMBIE_GRIEF_WIN"; - loser_text = &"ZOMBIE_GRIEF_LOSE"; - if ( level.round_number < 2 ) - { - winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; - loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; - } - if ( isDefined( level.host_ended_game ) && level.host_ended_game ) - { - players[ i ].survived_hud settext( &"MP_HOST_ENDED_GAME" ); - } - else - { - if ( isDefined( level.gamemodulewinningteam ) && players[ i ]._encounters_team == level.gamemodulewinningteam ) - { - players[ i ].survived_hud settext( winner_text, level.round_number ); - break; - } - else - { - players[ i ].survived_hud settext( loser_text, level.round_number ); - } - } - players[ i ].survived_hud fadeovertime( 1 ); - players[ i ].survived_hud.alpha = 1; - i++; - } + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + players[i].game_over_hud = newclienthudelem( players[i] ); + players[i].game_over_hud.alignx = "center"; + players[i].game_over_hud.aligny = "middle"; + players[i].game_over_hud.horzalign = "center"; + players[i].game_over_hud.vertalign = "middle"; + players[i].game_over_hud.y -= 130; + players[i].game_over_hud.foreground = 1; + players[i].game_over_hud.fontscale = 3; + players[i].game_over_hud.alpha = 0; + players[i].game_over_hud.color = ( 1, 1, 1 ); + players[i].game_over_hud.hidewheninmenu = 1; + players[i].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); + players[i].game_over_hud fadeovertime( 1 ); + players[i].game_over_hud.alpha = 1; + + if ( players[i] issplitscreen() ) + { + players[i].game_over_hud.fontscale = 2; + players[i].game_over_hud.y += 40; + } + + players[i].survived_hud = newclienthudelem( players[i] ); + players[i].survived_hud.alignx = "center"; + players[i].survived_hud.aligny = "middle"; + players[i].survived_hud.horzalign = "center"; + players[i].survived_hud.vertalign = "middle"; + players[i].survived_hud.y -= 100; + players[i].survived_hud.foreground = 1; + players[i].survived_hud.fontscale = 2; + players[i].survived_hud.alpha = 0; + players[i].survived_hud.color = ( 1, 1, 1 ); + players[i].survived_hud.hidewheninmenu = 1; + + if ( players[i] issplitscreen() ) + { + players[i].survived_hud.fontscale = 1.5; + players[i].survived_hud.y += 40; + } + + winner_text = &"ZOMBIE_GRIEF_WIN"; + loser_text = &"ZOMBIE_GRIEF_LOSE"; + + if ( level.round_number < 2 ) + { + winner_text = &"ZOMBIE_GRIEF_WIN_SINGLE"; + loser_text = &"ZOMBIE_GRIEF_LOSE_SINGLE"; + } + + if ( isdefined( level.host_ended_game ) && level.host_ended_game ) + players[i].survived_hud settext( &"MP_HOST_ENDED_GAME" ); + else if ( isdefined( level.gamemodulewinningteam ) && players[i]._encounters_team == level.gamemodulewinningteam ) + players[i].survived_hud settext( winner_text, level.round_number ); + else + players[i].survived_hud settext( loser_text, level.round_number ); + + players[i].survived_hud fadeovertime( 1 ); + players[i].survived_hud.alpha = 1; + } } postinit_func() { - level.min_humans = 1; - level.zombie_ai_limit = 24; - level.prevent_player_damage = ::player_prevent_damage; - level.lock_player_on_team_score = 1; - level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; - level.meat_bounce_override = ::meat_bounce_override; - level._zombie_spawning = 0; - level._get_game_module_players = undefined; - level.powerup_drop_count = 0; - level.is_zombie_level = 1; - level._effect[ "meat_impact" ] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect[ "meat_stink_camera" ] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); - level._effect[ "meat_stink_torso" ] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); - include_powerup( "meat_stink" ); - maps/mp/zombies/_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + level.min_humans = 1; + level.zombie_ai_limit = 24; + level.prevent_player_damage = ::player_prevent_damage; + level.lock_player_on_team_score = 1; + level._zombiemode_powerup_grab = ::meat_stink_powerup_grab; + level.meat_bounce_override = ::meat_bounce_override; + level._zombie_spawning = 0; + level._get_game_module_players = undefined; + level.powerup_drop_count = 0; + level.is_zombie_level = 1; + level._effect["meat_impact"] = loadfx( "maps/zombie/fx_zmb_meat_impact" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["meat_stink_camera"] = loadfx( "maps/zombie/fx_zmb_meat_stink_camera" ); + level._effect["meat_stink_torso"] = loadfx( "maps/zombie/fx_zmb_meat_stink_torso" ); + include_powerup( "meat_stink" ); + maps\mp\zombies\_zm_powerups::add_zombie_powerup( "meat_stink", "t6_wpn_zmb_meat_world", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_meat, 0, 0, 0 ); + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); } func_should_drop_meat() { - if ( minigun_no_drop() ) - { - return 0; - } - return 1; + if ( minigun_no_drop() ) + return false; + + return true; } minigun_no_drop() { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].ignoreme == 1 ) - { - return 1; - } - i++; - } - if ( isDefined( level.meat_on_ground ) && level.meat_on_ground ) - { - return 1; - } - return 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].ignoreme == 1 ) + return true; + } + + if ( isdefined( level.meat_on_ground ) && level.meat_on_ground ) + return true; + + return false; } grief_game_end_check_func() { - return 0; + return 0; } player_prevent_damage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) { - if ( isDefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie ) - { - return 1; - } - return 0; + if ( isdefined( eattacker ) && isplayer( eattacker ) && self != eattacker && !eattacker hasperk( "specialty_noname" ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + return true; + + return false; } game_module_player_damage_grief_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) { - penalty = 10; - if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) - { - self applyknockback( idamage, vdir ); - } + penalty = 10; + + if ( isdefined( eattacker ) && isplayer( eattacker ) && eattacker != self && eattacker.team != self.team && smeansofdeath == "MOD_MELEE" ) + self applyknockback( idamage, vdir ); } onprecachegametype() { - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - precacheshellshock( "grief_stab_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precacheshader( "waypoint_revive_cdc_zm" ); - precacheshader( "waypoint_revive_cia_zm" ); - level._effect[ "butterflies" ] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level thread maps/mp/zombies/_zm_game_module_meat_utility::init_item_meat( "zgrief" ); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zgrief" ); + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + precacheshellshock( "grief_stab_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precacheshader( "waypoint_revive_cdc_zm" ); + precacheshader( "waypoint_revive_cia_zm" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zgrief" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zgrief" ); } onstartgametype() { - level.no_end_game_check = 1; - level._game_module_game_end_check = ::grief_game_end_check_func; - level.round_end_custom_logic = ::grief_round_end_custom_logic; - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); + level.no_end_game_check = 1; + level._game_module_game_end_check = ::grief_game_end_check_func; + level.round_end_custom_logic = ::grief_round_end_custom_logic; + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zgrief", ::zgrief_main ); } zgrief_main() { - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); - flag_wait( "initial_blackscreen_passed" ); - level thread maps/mp/zombies/_zm_game_module::wait_for_team_death_and_round_end(); - players = get_players(); - _a302 = players; - _k302 = getFirstArrayKey( _a302 ); - while ( isDefined( _k302 ) ) - { - player = _a302[ _k302 ]; - player.is_hotjoin = 0; - _k302 = getNextArrayKey( _a302, _k302 ); - } - wait 1; - playsoundatposition( "vox_zmba_grief_intro_0", ( 1, 1, 1 ) ); + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); + flag_wait( "initial_blackscreen_passed" ); + level thread maps\mp\zombies\_zm_game_module::wait_for_team_death_and_round_end(); + players = get_players(); + + foreach ( player in players ) + player.is_hotjoin = 0; + + wait 1; + playsoundatposition( "vox_zmba_grief_intro_0", ( 0, 0, 0 ) ); } move_team_icons() { - self endon( "disconnect" ); - flag_wait( "initial_blackscreen_passed" ); - wait 0,5; + self endon( "disconnect" ); + flag_wait( "initial_blackscreen_passed" ); + wait 0.5; } kill_start_chest() { - flag_wait( "initial_blackscreen_passed" ); - wait 2; - start_chest = getstruct( "start_chest", "script_noteworthy" ); - start_chest maps/mp/zombies/_zm_magicbox::hide_chest(); + flag_wait( "initial_blackscreen_passed" ); + wait 2; + start_chest = getstruct( "start_chest", "script_noteworthy" ); + start_chest maps\mp\zombies\_zm_magicbox::hide_chest(); } meat_stink_powerup_grab( powerup, who ) { - switch( powerup.powerup_name ) - { - case "meat_stink": - level thread meat_stink( who ); - break; - } + switch ( powerup.powerup_name ) + { + case "meat_stink": + level thread meat_stink( who ); + break; + } } meat_stink( who ) { - weapons = who getweaponslist(); - has_meat = 0; - _a353 = weapons; - _k353 = getFirstArrayKey( _a353 ); - while ( isDefined( _k353 ) ) - { - weapon = _a353[ _k353 ]; - if ( weapon == "item_meat_zm" ) - { - has_meat = 1; - } - _k353 = getNextArrayKey( _a353, _k353 ); - } - if ( has_meat ) - { - return; - } - who.pre_meat_weapon = who getcurrentweapon(); - level notify( "meat_grabbed" ); - who notify( "meat_grabbed" ); - who playsound( "zmb_pickup_meat" ); - who increment_is_drinking(); - who giveweapon( "item_meat_zm" ); - who switchtoweapon( "item_meat_zm" ); - who setweaponammoclip( "item_meat_zm", 1 ); + weapons = who getweaponslist(); + has_meat = 0; + + foreach ( weapon in weapons ) + { + if ( weapon == "item_meat_zm" ) + has_meat = 1; + } + + if ( has_meat ) + return; + + who.pre_meat_weapon = who getcurrentweapon(); + level notify( "meat_grabbed" ); + who notify( "meat_grabbed" ); + who playsound( "zmb_pickup_meat" ); + who increment_is_drinking(); + who giveweapon( "item_meat_zm" ); + who switchtoweapon( "item_meat_zm" ); + who setweaponammoclip( "item_meat_zm", 1 ); } meat_stink_on_ground( position_to_play ) { - level.meat_on_ground = 1; - attractor_point = spawn( "script_model", position_to_play ); - attractor_point setmodel( "tag_origin" ); - attractor_point playsound( "zmb_land_meat" ); - wait 0,2; - playfxontag( level._effect[ "meat_stink_torso" ], attractor_point, "tag_origin" ); - attractor_point playloopsound( "zmb_meat_flies" ); - attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); - attractor_point.attract_to_origin = 1; - attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); - attractor_point thread maps/mp/zombies/_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); - attractor_point delay_thread( 15, ::self_delete ); - wait 16; - level.meat_on_ground = undefined; + level.meat_on_ground = 1; + attractor_point = spawn( "script_model", position_to_play ); + attractor_point setmodel( "tag_origin" ); + attractor_point playsound( "zmb_land_meat" ); + wait 0.2; + playfxontag( level._effect["meat_stink_torso"], attractor_point, "tag_origin" ); + attractor_point playloopsound( "zmb_meat_flies" ); + attractor_point create_zombie_point_of_interest( 1536, 32, 10000 ); + attractor_point.attract_to_origin = 1; + attractor_point thread create_zombie_point_of_interest_attractor_positions( 4, 45 ); + attractor_point thread maps\mp\zombies\_zm_weap_cymbal_monkey::wait_for_attractor_positions_complete(); + attractor_point delay_thread( 15, ::self_delete ); + wait 16.0; + level.meat_on_ground = undefined; } meat_bounce_override( pos, normal, ent ) { - if ( isDefined( ent ) && isplayer( ent ) ) - { - if ( !ent maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread meat_stink_player( ent ); - if ( isDefined( self.owner ) ) - { - maps/mp/_demo::bookmark( "zm_player_meat_stink", getTime(), ent, self.owner, 0, self ); - self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - } - else - { - players = getplayers(); - closest_player = undefined; - closest_player_dist = 10000; - player_index = 0; - while ( player_index < players.size ) - { - player_to_check = players[ player_index ]; - if ( self.owner == player_to_check ) - { - player_index++; - continue; - } - else if ( player_to_check maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player_index++; - continue; - } - else - { - distsq = distancesquared( pos, player_to_check.origin ); - if ( distsq < closest_player_dist ) - { - closest_player = player_to_check; - closest_player_dist = distsq; - } - } - player_index++; - } - if ( isDefined( closest_player ) ) - { - level thread meat_stink_player( closest_player ); - if ( isDefined( self.owner ) ) - { - maps/mp/_demo::bookmark( "zm_player_meat_stink", getTime(), closest_player, self.owner, 0, self ); - self.owner maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_given" ); - } - } - else - { - valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); - if ( valid_poi ) - { - self hide(); - level thread meat_stink_on_ground( self.origin ); - } - } - playfx( level._effect[ "meat_impact" ], self.origin ); - } - self delete(); + if ( isdefined( ent ) && isplayer( ent ) ) + { + if ( !ent maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread meat_stink_player( ent ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), ent, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + } + else + { + players = getplayers(); + closest_player = undefined; + closest_player_dist = 10000.0; + + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player_to_check = players[player_index]; + + if ( self.owner == player_to_check ) + continue; + + if ( player_to_check maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + distsq = distancesquared( pos, player_to_check.origin ); + + if ( distsq < closest_player_dist ) + { + closest_player = player_to_check; + closest_player_dist = distsq; + } + } + + if ( isdefined( closest_player ) ) + { + level thread meat_stink_player( closest_player ); + + if ( isdefined( self.owner ) ) + { + maps\mp\_demo::bookmark( "zm_player_meat_stink", gettime(), closest_player, self.owner, 0, self ); + self.owner maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_given" ); + } + } + else + { + valid_poi = check_point_in_enabled_zone( pos, undefined, undefined ); + + if ( valid_poi ) + { + self hide(); + level thread meat_stink_on_ground( self.origin ); + } + } + + playfx( level._effect["meat_impact"], self.origin ); + } + + self delete(); } meat_stink_player( who ) { - level notify( "new_meat_stink_player" ); - level endon( "new_meat_stink_player" ); - who.ignoreme = 0; - players = get_players(); - _a486 = players; - _k486 = getFirstArrayKey( _a486 ); - while ( isDefined( _k486 ) ) - { - player = _a486[ _k486 ]; - player thread meat_stink_player_cleanup(); - if ( player != who ) - { - player.ignoreme = 1; - } - _k486 = getNextArrayKey( _a486, _k486 ); - } - who thread meat_stink_player_create(); - who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); - players = get_players(); - _a501 = players; - _k501 = getFirstArrayKey( _a501 ); - while ( isDefined( _k501 ) ) - { - player = _a501[ _k501 ]; - player thread meat_stink_player_cleanup(); - player.ignoreme = 0; - _k501 = getNextArrayKey( _a501, _k501 ); - } + level notify( "new_meat_stink_player" ); + level endon( "new_meat_stink_player" ); + who.ignoreme = 0; + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + + if ( player != who ) + player.ignoreme = 1; + } + + who thread meat_stink_player_create(); + who waittill_any_or_timeout( 30, "disconnect", "player_downed", "bled_out" ); + players = get_players(); + + foreach ( player in players ) + { + player thread meat_stink_player_cleanup(); + player.ignoreme = 0; + } } meat_stink_player_create() { - self maps/mp/zombies/_zm_stats::increment_client_stat( "contaminations_received" ); - self endon( "disconnect" ); - self endon( "death" ); - tagname = "J_SpineLower"; - self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); - self.meat_stink_3p setmodel( "tag_origin" ); - self.meat_stink_3p linkto( self, tagname ); - wait 0,5; - playfxontag( level._effect[ "meat_stink_torso" ], self.meat_stink_3p, "tag_origin" ); - self setclientfieldtoplayer( "meat_stink", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "contaminations_received" ); + self endon( "disconnect" ); + self endon( "death" ); + tagname = "J_SpineLower"; + self.meat_stink_3p = spawn( "script_model", self gettagorigin( tagname ) ); + self.meat_stink_3p setmodel( "tag_origin" ); + self.meat_stink_3p linkto( self, tagname ); + wait 0.5; + playfxontag( level._effect["meat_stink_torso"], self.meat_stink_3p, "tag_origin" ); + self setclientfieldtoplayer( "meat_stink", 1 ); } meat_stink_player_cleanup() { - if ( isDefined( self.meat_stink_3p ) ) - { - self.meat_stink_3p unlink(); - self.meat_stink_3p delete(); - } - self setclientfieldtoplayer( "meat_stink", 0 ); + if ( isdefined( self.meat_stink_3p ) ) + { + self.meat_stink_3p unlink(); + self.meat_stink_3p delete(); + } + + self setclientfieldtoplayer( "meat_stink", 0 ); } door_close_zombie_think() { - self endon( "death" ); - while ( isalive( self ) ) - { - if ( isDefined( self.enemy ) && isplayer( self.enemy ) ) - { - insamezone = 0; - keys = getarraykeys( level.zones ); - i = 0; - while ( i < keys.size ) - { - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) && self.enemy maps/mp/zombies/_zm_zonemgr::entity_in_zone( keys[ i ] ) ) - { - insamezone = 1; - } - i++; - } - while ( insamezone ) - { - wait 3; - } - nearestzombienode = getnearestnode( self.origin ); - nearestplayernode = getnearestnode( self.enemy.origin ); - if ( isDefined( nearestzombienode ) && isDefined( nearestplayernode ) ) - { - if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) - { - self silentlyremovezombie(); - } - } - } - wait 1; - } + self endon( "death" ); + + while ( isalive( self ) ) + { + if ( isdefined( self.enemy ) && isplayer( self.enemy ) ) + { + insamezone = 0; + keys = getarraykeys( level.zones ); + + for ( i = 0; i < keys.size; i++ ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) && self.enemy maps\mp\zombies\_zm_zonemgr::entity_in_zone( keys[i] ) ) + insamezone = 1; + } + + if ( insamezone ) + { + wait 3; + continue; + } + + nearestzombienode = getnearestnode( self.origin ); + nearestplayernode = getnearestnode( self.enemy.origin ); + + if ( isdefined( nearestzombienode ) && isdefined( nearestplayernode ) ) + { + if ( !nodesvisible( nearestzombienode, nearestplayernode ) && !nodescanpath( nearestzombienode, nearestplayernode ) ) + self silentlyremovezombie(); + } + } + + wait 1; + } } silentlyremovezombie() { - level.zombie_total++; - playfx( level._effect[ "spawn_cloud" ], self.origin ); - self.skip_death_notetracks = 1; - self.nodeathragdoll = 1; - self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); - self self_delete(); + level.zombie_total++; + playfx( level._effect["spawn_cloud"], self.origin ); + self.skip_death_notetracks = 1; + self.nodeathragdoll = 1; + self dodamage( self.maxhealth * 2, self.origin, self, self, "none", "MOD_SUICIDE" ); + self self_delete(); } zgrief_player_bled_out_msg() { - level endon( "end_game" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "bled_out" ); - level thread update_players_on_bleedout_or_disconnect( self ); - } + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "bled_out" ); + + level thread update_players_on_bleedout_or_disconnect( self ); + } } show_grief_hud_msg( msg, msg_parm, offset, cleanup_end_game ) { - self endon( "disconnect" ); - zgrief_hudmsg = newclienthudelem( self ); - zgrief_hudmsg.alignx = "center"; - zgrief_hudmsg.aligny = "middle"; - zgrief_hudmsg.horzalign = "center"; - zgrief_hudmsg.vertalign = "middle"; - zgrief_hudmsg.y -= 130; - if ( self issplitscreen() ) - { - zgrief_hudmsg.y += 70; - } - if ( isDefined( offset ) ) - { - zgrief_hudmsg.y += offset; - } - zgrief_hudmsg.foreground = 1; - zgrief_hudmsg.fontscale = 5; - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.color = ( 1, 1, 1 ); - zgrief_hudmsg.hidewheninmenu = 1; - zgrief_hudmsg.font = "default"; - if ( isDefined( cleanup_end_game ) && cleanup_end_game ) - { - level endon( "end_game" ); - zgrief_hudmsg thread show_grief_hud_msg_cleanup(); - } - if ( isDefined( msg_parm ) ) - { - zgrief_hudmsg settext( msg, msg_parm ); - } - else - { - zgrief_hudmsg settext( msg ); - } - zgrief_hudmsg changefontscaleovertime( 0,25 ); - zgrief_hudmsg fadeovertime( 0,25 ); - zgrief_hudmsg.alpha = 1; - zgrief_hudmsg.fontscale = 2; - wait 3,25; - zgrief_hudmsg changefontscaleovertime( 1 ); - zgrief_hudmsg fadeovertime( 1 ); - zgrief_hudmsg.alpha = 0; - zgrief_hudmsg.fontscale = 5; - wait 1; - zgrief_hudmsg notify( "death" ); - if ( isDefined( zgrief_hudmsg ) ) - { - zgrief_hudmsg destroy(); - } + self endon( "disconnect" ); + + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + zgrief_hudmsg = newclienthudelem( self ); + zgrief_hudmsg.alignx = "center"; + zgrief_hudmsg.aligny = "middle"; + zgrief_hudmsg.horzalign = "center"; + zgrief_hudmsg.vertalign = "middle"; + zgrief_hudmsg.y -= 130; + + if ( self issplitscreen() ) + zgrief_hudmsg.y += 70; + + if ( isdefined( offset ) ) + zgrief_hudmsg.y += offset; + + zgrief_hudmsg.foreground = 1; + zgrief_hudmsg.fontscale = 5; + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.color = ( 1, 1, 1 ); + zgrief_hudmsg.hidewheninmenu = 1; + zgrief_hudmsg.font = "default"; + + if ( isdefined( cleanup_end_game ) && cleanup_end_game ) + { + level endon( "end_game" ); + zgrief_hudmsg thread show_grief_hud_msg_cleanup(); + } + + if ( isdefined( msg_parm ) ) + zgrief_hudmsg settext( msg, msg_parm ); + else + zgrief_hudmsg settext( msg ); + + zgrief_hudmsg changefontscaleovertime( 0.25 ); + zgrief_hudmsg fadeovertime( 0.25 ); + zgrief_hudmsg.alpha = 1; + zgrief_hudmsg.fontscale = 2; + wait 3.25; + zgrief_hudmsg changefontscaleovertime( 1 ); + zgrief_hudmsg fadeovertime( 1 ); + zgrief_hudmsg.alpha = 0; + zgrief_hudmsg.fontscale = 5; + wait 1; + zgrief_hudmsg notify( "death" ); + + if ( isdefined( zgrief_hudmsg ) ) + zgrief_hudmsg destroy(); } show_grief_hud_msg_cleanup() { - self endon( "death" ); - level waittill( "end_game" ); - if ( isDefined( self ) ) - { - self destroy(); - } + self endon( "death" ); + + level waittill( "end_game" ); + + if ( isdefined( self ) ) + self destroy(); } grief_reset_message() { - msg = &"ZOMBIE_GRIEF_RESET"; - players = get_players(); - _a681 = players; - _k681 = getFirstArrayKey( _a681 ); - while ( isDefined( _k681 ) ) - { - player = _a681[ _k681 ]; - player thread show_grief_hud_msg( msg ); - _k681 = getNextArrayKey( _a681, _k681 ); - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "grief_restarted" ); + msg = &"ZOMBIE_GRIEF_RESET"; + players = get_players(); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait 4; + } + + foreach ( player in players ) + player thread show_grief_hud_msg( msg ); + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "grief_restarted" ); } grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) { - self.grief_savedweapon_weapons = self getweaponslist(); - self.grief_savedweapon_weaponsammo_stock = []; - self.grief_savedweapon_weaponsammo_clip = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); - self.grief_savedweapon_grenades = self get_player_lethal_grenade(); - if ( isDefined( self.grief_savedweapon_grenades ) ) - { - self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); - } - self.grief_savedweapon_tactical = self get_player_tactical_grenade(); - if ( isDefined( self.grief_savedweapon_tactical ) ) - { - self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); - } - i = 0; - while ( i < self.grief_savedweapon_weapons.size ) - { - self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] ); - self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] ); - i++; - } - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - self.grief_hasriotshield = 1; - } - if ( self hasweapon( "claymore_zm" ) ) - { - self.grief_savedweapon_claymore = 1; - self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); - } + self.grief_savedweapon_weapons = self getweaponslist(); + self.grief_savedweapon_weaponsammo_stock = []; + self.grief_savedweapon_weaponsammo_clip = []; + self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_grenades = self get_player_lethal_grenade(); + + if ( isdefined( self.grief_savedweapon_grenades ) ) + self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); + + self.grief_savedweapon_tactical = self get_player_tactical_grenade(); + + if ( isdefined( self.grief_savedweapon_tactical ) ) + self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); + + for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) + { + self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); + self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + self.grief_hasriotshield = 1; + + if ( self hasweapon( "claymore_zm" ) ) + { + self.grief_savedweapon_claymore = 1; + self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); + } + + if ( isdefined( self.current_equipment ) ) + self.grief_savedweapon_equipment = self.current_equipment; } grief_laststand_weapons_return() { - if ( isDefined( level.isresetting_grief ) && !level.isresetting_grief ) - { - return 0; - } - if ( !isDefined( self.grief_savedweapon_weapons ) ) - { - return 0; - } - _a742 = self.grief_savedweapon_weapons; - index = getFirstArrayKey( _a742 ); - while ( isDefined( index ) ) - { - weapon = _a742[ index ]; - if ( isDefined( self.grief_savedweapon_grenades ) || weapon == self.grief_savedweapon_grenades && isDefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) - { - } - else - { - self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - if ( isDefined( self.grief_savedweapon_weaponsammo_clip[ index ] ) ) - { - self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[ index ] ); - } - if ( isDefined( self.grief_savedweapon_weaponsammo_stock[ index ] ) ) - { - self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[ index ] ); - } - } - index = getNextArrayKey( _a742, index ); - } - if ( isDefined( self.grief_savedweapon_grenades ) ) - { - self giveweapon( self.grief_savedweapon_grenades ); - if ( isDefined( self.grief_savedweapon_grenades_clip ) ) - { - self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); - } - } - if ( isDefined( self.grief_savedweapon_tactical ) ) - { - self giveweapon( self.grief_savedweapon_tactical ); - if ( isDefined( self.grief_savedweapon_tactical_clip ) ) - { - self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); - } - } - if ( isDefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) - { - self maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - if ( isDefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); - } - primaries = self getweaponslistprimaries(); - _a806 = primaries; - _k806 = getFirstArrayKey( _a806 ); - while ( isDefined( _k806 ) ) - { - weapon = _a806[ _k806 ]; - if ( isDefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) - { - self switchtoweapon( weapon ); - return 1; - } - _k806 = getNextArrayKey( _a806, _k806 ); - } - if ( primaries.size > 0 ) - { - self switchtoweapon( primaries[ 0 ] ); - return 1; - } + if ( !( isdefined( level.isresetting_grief ) && level.isresetting_grief ) ) + return false; + + if ( !isdefined( self.grief_savedweapon_weapons ) ) + return false; + + primary_weapons_returned = 0; + + foreach ( index, weapon in self.grief_savedweapon_weapons ) + { + if ( isdefined( self.grief_savedweapon_grenades ) && weapon == self.grief_savedweapon_grenades || isdefined( self.grief_savedweapon_tactical ) && weapon == self.grief_savedweapon_tactical ) + continue; + + if ( isweaponprimary( weapon ) ) + { + if ( primary_weapons_returned >= 2 ) + continue; + + primary_weapons_returned++; + } + + if ( "item_meat_zm" == weapon ) + continue; + + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_clip[index] ) ) + self setweaponammoclip( weapon, self.grief_savedweapon_weaponsammo_clip[index] ); + + if ( isdefined( self.grief_savedweapon_weaponsammo_stock[index] ) ) + self setweaponammostock( weapon, self.grief_savedweapon_weaponsammo_stock[index] ); + } + + if ( isdefined( self.grief_savedweapon_grenades ) ) + { + self giveweapon( self.grief_savedweapon_grenades ); + + if ( isdefined( self.grief_savedweapon_grenades_clip ) ) + self setweaponammoclip( self.grief_savedweapon_grenades, self.grief_savedweapon_grenades_clip ); + } + + if ( isdefined( self.grief_savedweapon_tactical ) ) + { + self giveweapon( self.grief_savedweapon_tactical ); + + if ( isdefined( self.grief_savedweapon_tactical_clip ) ) + self setweaponammoclip( self.grief_savedweapon_tactical, self.grief_savedweapon_tactical_clip ); + } + + if ( isdefined( self.current_equipment ) ) + self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment ); + + if ( isdefined( self.grief_savedweapon_equipment ) ) + { + self.do_not_display_equipment_pickup_hint = 1; + self maps\mp\zombies\_zm_equipment::equipment_give( self.grief_savedweapon_equipment ); + self.do_not_display_equipment_pickup_hint = undefined; + } + + if ( isdefined( self.grief_hasriotshield ) && self.grief_hasriotshield ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + if ( isdefined( self.grief_savedweapon_claymore ) && self.grief_savedweapon_claymore ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", self.grief_savedweapon_claymore_clip ); + } + + primaries = self getweaponslistprimaries(); + + foreach ( weapon in primaries ) + { + if ( isdefined( self.grief_savedweapon_currentweapon ) && self.grief_savedweapon_currentweapon == weapon ) + { + self switchtoweapon( weapon ); + return true; + } + } + + if ( primaries.size > 0 ) + { + self switchtoweapon( primaries[0] ); + return true; + } /# - assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); + assert( primaries.size > 0, "GRIEF: There was a problem restoring the weapons" ); #/ - return 0; + return false; } grief_store_player_scores() { - players = get_players(); - _a830 = players; - _k830 = getFirstArrayKey( _a830 ); - while ( isDefined( _k830 ) ) - { - player = _a830[ _k830 ]; - player._pre_round_score = player.score; - _k830 = getNextArrayKey( _a830, _k830 ); - } + players = get_players(); + + foreach ( player in players ) + player._pre_round_score = player.score; } grief_restore_player_score() { - if ( !isDefined( self._pre_round_score ) ) - { - self._pre_round_score = self.score; - } - if ( isDefined( self._pre_round_score ) ) - { - self.score = self._pre_round_score; - self.pers[ "score" ] = self._pre_round_score; - } + if ( !isdefined( self._pre_round_score ) ) + self._pre_round_score = self.score; + + if ( isdefined( self._pre_round_score ) ) + { + self.score = self._pre_round_score; + self.pers["score"] = self._pre_round_score; + } } game_mode_spawn_player_logic() { - if ( flag( "start_zombie_round_logic" ) && !isDefined( self.is_hotjoin ) ) - { - self.is_hotjoin = 1; - return 1; - } - return 0; + if ( flag( "start_zombie_round_logic" ) && !isdefined( self.is_hotjoin ) ) + { + self.is_hotjoin = 1; + return true; + } + + return false; } update_players_on_bleedout_or_disconnect( excluded_player ) { - other_team = undefined; - players = get_players(); - players_remaining = 0; - _a867 = players; - _k867 = getFirstArrayKey( _a867 ); - while ( isDefined( _k867 ) ) - { - player = _a867[ _k867 ]; - if ( player == excluded_player ) - { - } - else if ( player.team == excluded_player.team ) - { - if ( is_player_valid( player ) ) - { - players_remaining++; - } - break; - } - _k867 = getNextArrayKey( _a867, _k867 ); - } - _a884 = players; - _k884 = getFirstArrayKey( _a884 ); - while ( isDefined( _k884 ) ) - { - player = _a884[ _k884 ]; - if ( player == excluded_player ) - { - } - else if ( player.team != excluded_player.team ) - { - other_team = player.team; - if ( players_remaining < 1 ) - { - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); - player delay_thread( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); - break; - } - else - { - player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); - } - } - _k884 = getNextArrayKey( _a884, _k884 ); - } - if ( players_remaining == 1 ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); - } - if ( !isDefined( other_team ) ) - { - return; - } - if ( players_remaining < 1 ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); - } - else - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); - } + other_team = undefined; + players = get_players(); + players_remaining = 0; + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team == excluded_player.team ) + { + if ( is_player_valid( player ) ) + players_remaining++; + + continue; + } + } + + foreach ( player in players ) + { + if ( player == excluded_player ) + continue; + + if ( player.team != excluded_player.team ) + { + other_team = player.team; + + if ( players_remaining < 1 ) + { + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_ALL_PLAYERS_DOWN", undefined, undefined, 1 ); + player delay_thread_watch_host_migrate( 2, ::show_grief_hud_msg, &"ZOMBIE_ZGRIEF_SURVIVE", undefined, 30, 1 ); + continue; + } + + player thread show_grief_hud_msg( &"ZOMBIE_ZGRIEF_PLAYER_BLED_OUT", players_remaining ); + } + } + + if ( players_remaining == 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "last_player", excluded_player.team ); + + if ( !isdefined( other_team ) ) + return; + + if ( players_remaining < 1 ) + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "4_player_down", other_team ); + else + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( players_remaining + "_player_left", other_team ); +} + +delay_thread_watch_host_migrate( timer, func, param1, param2, param3, param4, param5, param6 ) +{ + self thread _delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ); +} + +_delay_thread_watch_host_migrate_proc( func, timer, param1, param2, param3, param4, param5, param6 ) +{ + self endon( "death" ); + self endon( "disconnect" ); + wait( timer ); + + if ( isdefined( level.hostmigrationtimer ) ) + { + while ( isdefined( level.hostmigrationtimer ) ) + wait 0.05; + + wait( timer ); + } + + single_thread( self, func, param1, param2, param3, param4, param5, param6 ); } grief_round_end_custom_logic() { - waittillframeend; - if ( isDefined( level.gamemodulewinningteam ) ) - { - level notify( "end_round_think" ); - } + waittillframeend; + + if ( isdefined( level.gamemodulewinningteam ) ) + level notify( "end_round_think" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc index 93f5155..0f0a9b3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zmeat.gsc @@ -1,2470 +1,2296 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; - -#using_animtree( "zombie_meat" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; main() { - maps/mp/gametypes_zm/_zm_gametype::main(); - registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); - registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - set_game_var( "ZM_roundLimit", 5 ); - set_game_var( "ZM_scoreLimit", 5 ); - set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); - set_gamemode_var( "match_end_notify", "meat_end" ); - set_gamemode_var( "match_end_func", ::meat_end_match ); - level._no_static_unitriggers = 1; - level._game_module_player_damage_callback = ::maps/mp/gametypes_zm/_zm_gametype::game_module_player_damage_callback; - level._game_module_player_laststand_callback = ::meat_last_stand_callback; - level.no_end_game_check = 1; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zmeat" ); - level thread maps/mp/gametypes_zm/_zm_gametype::init(); - level.zm_roundswitch = 1; - level.zm_switchsides_on_roundswitch = 1; - level._effect[ "meat_marker" ] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); - level._effect[ "butterflies" ] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); - level._effect[ "meat_glow" ] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); - level._effect[ "meat_glow3p" ] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); - level._effect[ "spawn_cloud" ] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); - level._effect[ "fw_burst" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); - level._effect[ "fw_impact" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); - level._effect[ "fw_drop" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); - level._effect[ "fw_trail" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); - level._effect[ "fw_trail_cheap" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); - level._effect[ "fw_pre_burst" ] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); - level._effect[ "meat_bounce" ] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); - level._effect[ "ring_glow" ] = loadfx( "misc/fx_zombie_powerup_on" ); - level.can_revive_game_module = ::can_revive; - onplayerconnect_callback( ::meat_on_player_connect ); - spawn_level_meat_manager(); - init_animtree(); + maps\mp\gametypes_zm\_zm_gametype::main(); + registerclientfield( "allplayers", "holding_meat", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glowfx", 7000, 1, "int" ); + registerclientfield( "scriptmover", "ring_glow_meatfx", 7000, 1, "int" ); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + set_game_var( "ZM_roundLimit", 5 ); + set_game_var( "ZM_scoreLimit", 5 ); + set_gamemode_var( "post_init_zombie_spawn_func", ::meat_zombie_post_spawn_init ); + set_gamemode_var( "match_end_notify", "meat_end" ); + set_gamemode_var( "match_end_func", ::meat_end_match ); + level._no_static_unitriggers = 1; + level._game_module_player_damage_callback = maps\mp\gametypes_zm\_zm_gametype::game_module_player_damage_callback; + level._game_module_player_laststand_callback = ::meat_last_stand_callback; + level.no_end_game_check = 1; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zmeat" ); + level thread maps\mp\gametypes_zm\_zm_gametype::init(); + level.zm_roundswitch = 1; + level.zm_switchsides_on_roundswitch = 1; + level._effect["meat_marker"] = loadfx( "maps/zombie/fx_zmb_meat_marker" ); + level._effect["butterflies"] = loadfx( "maps/zombie/fx_zmb_impact_noharm" ); + level._effect["meat_glow"] = loadfx( "maps/zombie/fx_zmb_meat_glow" ); + level._effect["meat_glow3p"] = loadfx( "maps/zombie/fx_zmb_meat_glow_3p" ); + level._effect["spawn_cloud"] = loadfx( "maps/zombie/fx_zmb_race_zombie_spawn_cloud" ); + level._effect["fw_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_center" ); + level._effect["fw_impact"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_impact" ); + level._effect["fw_drop"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_drop_trail" ); + level._effect["fw_trail"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail" ); + level._effect["fw_trail_cheap"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_trail_intro" ); + level._effect["fw_pre_burst"] = loadfx( "maps/zombie/fx_zmb_race_fireworks_burst_small" ); + level._effect["meat_bounce"] = loadfx( "maps/zombie/fx_zmb_meat_collision_glow" ); + level._effect["ring_glow"] = loadfx( "misc/fx_zombie_powerup_on" ); + level.can_revive_game_module = ::can_revive; + onplayerconnect_callback( ::meat_on_player_connect ); + spawn_level_meat_manager(); + init_animtree(); } onprecachegametype() { - level thread maps/mp/zombies/_zm_game_module_meat_utility::init_item_meat( "zmeat" ); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zmeat" ); - game_mode_objects = getstructarray( "game_mode_object", "targetname" ); - meat_objects = getstructarray( "meat_object", "targetname" ); - all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); - i = 0; - while ( i < all_structs.size ) - { - if ( isDefined( all_structs[ i ].script_parameters ) ) - { - precachemodel( all_structs[ i ].script_parameters ); - } - i++; - } - precacheshellshock( "grief_stab_zm" ); - precacheitem( "minigun_zm" ); - precacheshader( "faction_cdc" ); - precacheshader( "faction_cia" ); - precachemodel( "p6_zm_sign_meat_01_step1" ); - precachemodel( "p6_zm_sign_meat_01_step2" ); - precachemodel( "p6_zm_sign_meat_01_step3" ); - precachemodel( "p6_zm_sign_meat_01_step4" ); + level thread maps\mp\zombies\_zm_game_module_meat_utility::init_item_meat( "zmeat" ); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zmeat" ); + game_mode_objects = getstructarray( "game_mode_object", "targetname" ); + meat_objects = getstructarray( "meat_object", "targetname" ); + all_structs = arraycombine( game_mode_objects, meat_objects, 1, 0 ); + + for ( i = 0; i < all_structs.size; i++ ) + { + if ( isdefined( all_structs[i].script_parameters ) ) + precachemodel( all_structs[i].script_parameters ); + } + + precacheshellshock( "grief_stab_zm" ); + precacheitem( "minigun_zm" ); + precacheshader( "faction_cdc" ); + precacheshader( "faction_cia" ); + precachemodel( "p6_zm_sign_meat_01_step1" ); + precachemodel( "p6_zm_sign_meat_01_step2" ); + precachemodel( "p6_zm_sign_meat_01_step3" ); + precachemodel( "p6_zm_sign_meat_01_step4" ); } meat_hub_start_func() { - level thread meat_player_initial_spawn(); - level thread item_meat_reset( level._meat_start_point ); - level thread spawn_meat_zombies(); - level thread monitor_meat_on_team(); - level thread init_minigun_ring(); - level thread init_splitter_ring(); - level thread init_ammo_ring(); - level thread hide_non_meat_objects(); - level thread setup_meat_world_objects(); - level._zombie_path_timer_override = ::zombie_path_timer_override; - level.zombie_health = level.zombie_vars[ "zombie_health_start" ]; - level._zombie_spawning = 0; - level._poi_override = ::meat_poi_override_func; - level._meat_on_team = undefined; - level._meat_zombie_spawn_timer = 2; - level._meat_zombie_spawn_health = 1; - level._minigun_time_override = 15; - level._get_game_module_players = ::get_game_module_players; - level.powerup_drop_count = 0; - level.meat_spawners = level.zombie_spawners; - if ( isDefined( level._meat_callback_initialized ) && !level._meat_callback_initialized ) - { - maps/mp/zombies/_zm::register_player_damage_callback( ::maps/mp/zombies/_zm_game_module::damage_callback_no_pvp_damage ); - level._meat_callback_initialized = 1; - } - setmatchtalkflag( "DeadChatWithDead", 1 ); - setmatchtalkflag( "DeadChatWithTeam", 1 ); - setmatchtalkflag( "DeadHearTeamLiving", 1 ); - setmatchtalkflag( "DeadHearAllLiving", 1 ); - setmatchtalkflag( "EveryoneHearsEveryone", 1 ); - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 0 ); - level thread zmbmusicsetupmeat(); - level.zombie_spawn_fx = level._effect[ "spawn_cloud" ]; - weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) - { - weapon_spawns[ i ] trigger_off(); - i++; - } - level thread monitor_meat_on_side(); - level thread item_meat_watch_for_throw(); - level thread hold_meat_monitor(); - flag_wait( "start_encounters_match_logic" ); - level thread wait_for_team_death( 1 ); - level thread wait_for_team_death( 2 ); - level.team_a_downed = 0; - level.team_b_downed = 0; + level thread meat_player_initial_spawn(); + level thread item_meat_reset( level._meat_start_point ); + level thread spawn_meat_zombies(); + level thread monitor_meat_on_team(); + level thread init_minigun_ring(); + level thread init_splitter_ring(); + level thread init_ammo_ring(); + level thread hide_non_meat_objects(); + level thread setup_meat_world_objects(); + level._zombie_path_timer_override = ::zombie_path_timer_override; + level.zombie_health = level.zombie_vars["zombie_health_start"]; + level._zombie_spawning = 0; + level._poi_override = ::meat_poi_override_func; + level._meat_on_team = undefined; + level._meat_zombie_spawn_timer = 2; + level._meat_zombie_spawn_health = 1; + level._minigun_time_override = 15; + level._get_game_module_players = ::get_game_module_players; + level.powerup_drop_count = 0; + level.meat_spawners = level.zombie_spawners; + + if ( !( isdefined( level._meat_callback_initialized ) && level._meat_callback_initialized ) ) + { + maps\mp\zombies\_zm::register_player_damage_callback( maps\mp\zombies\_zm_game_module::damage_callback_no_pvp_damage ); + level._meat_callback_initialized = 1; + } + + setmatchtalkflag( "DeadChatWithDead", 1 ); + setmatchtalkflag( "DeadChatWithTeam", 1 ); + setmatchtalkflag( "DeadHearTeamLiving", 1 ); + setmatchtalkflag( "DeadHearAllLiving", 1 ); + setmatchtalkflag( "EveryoneHearsEveryone", 1 ); + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 0 ); + level thread zmbmusicsetupmeat(); + level.zombie_spawn_fx = level._effect["spawn_cloud"]; + weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); + + for ( i = 0; i < weapon_spawns.size; i++ ) + weapon_spawns[i] trigger_off(); + + level thread monitor_meat_on_side(); + level thread item_meat_watch_for_throw(); + level thread hold_meat_monitor(); + flag_wait( "start_encounters_match_logic" ); + level thread wait_for_team_death( 1 ); + level thread wait_for_team_death( 2 ); + level.team_a_downed = 0; + level.team_b_downed = 0; } meat_on_player_connect() { - hotjoined = flag( "initial_players_connected" ); - self thread spawn_player_meat_manager(); - self thread wait_for_player_disconnect(); - self thread wait_for_player_downed(); + hotjoined = flag( "initial_players_connected" ); + self thread spawn_player_meat_manager(); + self thread wait_for_player_disconnect(); + self thread wait_for_player_downed(); /# - self thread watch_debug_input(); + self thread watch_debug_input(); #/ - if ( hotjoined ) - { - one = 1; - two = 2; - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( self.team == "allies" ) - { - self._meat_team = one; - } - else - { - self._meat_team = two; - } - } - else if ( self.team == "allies" ) - { - self._meat_team = two; - } - else - { - self._meat_team = one; - } - self meat_player_setup(); - } + if ( hotjoined ) + { + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( self.team == "allies" ) + self._meat_team = one; + else + self._meat_team = two; + } + else if ( self.team == "allies" ) + self._meat_team = two; + else + self._meat_team = one; + + self meat_player_setup(); + } } meat_on_player_disconnect() { - team0 = 1; - team1 = 2; - team_counts = []; - team_counts[ team0 ] = 0; - team_counts[ team1 ] = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - team_counts[ players[ i ]._meat_team ] += 1; - i++; - } - if ( team_counts[ team0 ] == 0 ) - { - maps/mp/gametypes_zm/_zm_gametype::end_rounds_early( "B" ); - } - if ( team_counts[ team1 ] == 0 ) - { - maps/mp/gametypes_zm/_zm_gametype::end_rounds_early( "A" ); - } + team0 = 1; + team1 = 2; + team_counts = []; + team_counts[team0] = 0; + team_counts[team1] = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + team_counts[players[i]._meat_team] += 1; + + if ( team_counts[team0] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "B" ); + + if ( team_counts[team1] == 0 ) + maps\mp\gametypes_zm\_zm_gametype::end_rounds_early( "A" ); } wait_for_player_disconnect() { - level endon( "end_game" ); - self waittill( "disconnect" ); - meat_on_player_disconnect(); + level endon( "end_game" ); + + self waittill( "disconnect" ); + + meat_on_player_disconnect(); } watch_debug_input() { /# - self endon( "disconnect" ); - for ( ;; ) - { - if ( self actionslottwobuttonpressed() ) - { - if ( getDvar( #"0B188A91" ) != "" ) - { - self disableinvulnerability(); - self dodamage( self.health + 666, self.origin ); - } - } - wait 0,05; + self endon( "disconnect" ); + + for (;;) + { + if ( self actionslottwobuttonpressed() ) + { + if ( getdvar( _hash_B188A91 ) != "" ) + { + self disableinvulnerability(); + self dodamage( self.health + 666, self.origin ); + } + } + + wait 0.05; + } #/ - } } zmbmusicsetupmeat() { - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); + level.zmb_music_states["game_over"] = undefined; + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "waiting", "ENC_WAITING", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_start", "ENC_ROUND_START", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "round_end", "ENC_ROUND_END", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "halftime", "ENC_HALFTIME", 0, 0, 0, undefined ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "match_over", "ENC_MATCH_OVER", 0, 0, 0, undefined ); } monitor_meat_on_side() { - level endon( "meat_end" ); - level waittill( "meat_grabbed" ); - last_team = level._meat_on_team; - level.meat_lost_time_limit = 5000; - while ( 1 ) - { - if ( isDefined( level.item_meat ) ) - { - if ( !isDefined( level._meat_team_1_volume ) || !isDefined( level._meat_team_2_volume ) ) - { - iprintlnbold( "BUG: There is something wrong with the team volumes" ); - } - if ( isDefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) - { - level._meat_on_team = 1; - level.meat_lost_time = undefined; - } - else - { - if ( isDefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) - { - level._meat_on_team = 2; - level.meat_lost_time = undefined; - break; - } - else - { - if ( isDefined( last_team ) ) - { - if ( !isDefined( level.meat_lost_time ) ) - { - level.meat_lost_time = getTime(); - break; - } - else - { - if ( ( getTime() - level.meat_lost_time ) > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - level waittill( "meat_grabbed" ); - } - } - } - } - } - } - else player_with_meat = get_player_with_meat(); - if ( !isDefined( player_with_meat ) ) - { - if ( !isDefined( level.meat_lost_time ) ) - { - level.meat_lost_time = getTime(); - } - else - { - if ( ( getTime() - level.meat_lost_time ) > level.meat_lost_time_limit ) - { - add_meat_event( "level_lost_meat" ); - level thread item_meat_reset( level._meat_start_point, 1 ); - level.meat_lost_time = undefined; - level waittill( "meat_grabbed" ); - } - } - } - else - { - level.meat_lost_time = undefined; - } - if ( isDefined( level._meat_on_team ) && isDefined( last_team ) && level._meat_on_team != last_team ) - { - level notify( "clear_ignore_all" ); - add_meat_event( "level_meat_team", level._meat_on_team ); - last_team = level._meat_on_team; - assign_meat_to_team( undefined, level._meat_on_team ); + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + last_team = level._meat_on_team; + level.meat_lost_time_limit = 5000; + + while ( true ) + { + if ( isdefined( level.item_meat ) ) + { + if ( !isdefined( level._meat_team_1_volume ) || !isdefined( level._meat_team_2_volume ) ) + iprintlnbold( "BUG: There is something wrong with the team volumes" ); + + if ( isdefined( level._meat_team_1_volume ) && level.item_meat istouching( level._meat_team_1_volume ) ) + { + level._meat_on_team = 1; + level.meat_lost_time = undefined; + } + else if ( isdefined( level._meat_team_2_volume ) && level.item_meat istouching( level._meat_team_2_volume ) ) + { + level._meat_on_team = 2; + level.meat_lost_time = undefined; + } + else if ( isdefined( last_team ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + } + else + { + player_with_meat = get_player_with_meat(); + + if ( !isdefined( player_with_meat ) ) + { + if ( !isdefined( level.meat_lost_time ) ) + level.meat_lost_time = gettime(); + else if ( gettime() - level.meat_lost_time > level.meat_lost_time_limit ) + { + add_meat_event( "level_lost_meat" ); + level thread item_meat_reset( level._meat_start_point, 1 ); + level.meat_lost_time = undefined; + + level waittill( "meat_grabbed" ); + } + } + else + level.meat_lost_time = undefined; + } + + if ( isdefined( level._meat_on_team ) && isdefined( last_team ) && level._meat_on_team != last_team ) + { + level notify( "clear_ignore_all" ); + add_meat_event( "level_meat_team", level._meat_on_team ); + last_team = level._meat_on_team; + assign_meat_to_team( undefined, level._meat_on_team ); /# - if ( isDefined( level.item_meat ) ) - { - playfx( level._effect[ "spawn_cloud" ], level.item_meat.origin ); + if ( isdefined( level.item_meat ) ) + playfx( level._effect["spawn_cloud"], level.item_meat.origin ); #/ - } - } - wait 0,05; - } + } + + wait 0.05; + } } item_meat_watch_for_throw() { - level endon( "meat_end" ); - for ( ;; ) - { - level waittill( "meat_thrown", who ); - add_meat_event( "player_thrown", who ); - if ( isDefined( who._spawning_meat ) && who._spawning_meat ) - { - continue; - } - else - { - if ( randomintrange( 1, 101 ) <= 10 ) - { - } - who._has_meat = 0; - if ( isDefined( who._has_meat_hud ) ) - { - who._has_meat_hud destroy(); - } - assign_meat_to_team( undefined, level._meat_on_team ); - } - } + level endon( "meat_end" ); + + for (;;) + { + level waittill( "meat_thrown", who ); + + add_meat_event( "player_thrown", who ); + + if ( isdefined( who._spawning_meat ) && who._spawning_meat ) + continue; + + if ( randomintrange( 1, 101 ) <= 10 ) + { + + } + + who._has_meat = 0; + + if ( isdefined( who._has_meat_hud ) ) + who._has_meat_hud destroy(); + + assign_meat_to_team( undefined, level._meat_on_team ); + } } hold_meat_monitor() { - level endon( "meat_end" ); - level waittill( "meat_grabbed" ); - while ( 1 ) - { - player = get_player_with_meat(); - while ( !isDefined( player ) ) - { - wait 0,2; - } - while ( !should_try_to_bring_back_teammate( player._meat_team ) ) - { - wait 0,2; - } - if ( isDefined( player._bringing_back_teammate ) && !player._bringing_back_teammate ) - { - player thread bring_back_teammate_progress(); - } - wait 0,2; - } + level endon( "meat_end" ); + + level waittill( "meat_grabbed" ); + + while ( true ) + { + player = get_player_with_meat(); + + if ( !isdefined( player ) ) + { + wait 0.2; + continue; + } + + if ( !should_try_to_bring_back_teammate( player._meat_team ) ) + { + wait 0.2; + continue; + } + + if ( !( isdefined( player._bringing_back_teammate ) && player._bringing_back_teammate ) ) + player thread bring_back_teammate_progress(); + + wait 0.2; + } } meat_zombie_post_spawn_init() { + } create_item_meat_watcher() { - wait 0,05; - watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); - watcher.pickup = ::item_meat_on_pickup; - watcher.onspawn = ::item_meat_spawned; - watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; - watcher.headicon = 0; + wait 0.05; + watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( "item_meat", get_gamemode_var( "item_meat_name" ), self.team ); + watcher.pickup = ::item_meat_on_pickup; + watcher.onspawn = ::item_meat_spawned; + watcher.onspawnretrievetriggers = ::play_item_meat_on_spawn_retrieve_trigger; + watcher.headicon = 0; } item_meat_spawned( unused0, unused1 ) { - maps/mp/gametypes_zm/_weaponobjects::voidonspawn( unused0, unused1 ); - self.meat_is_moving = 0; - self.meat_is_flying = 0; + maps\mp\gametypes_zm\_weaponobjects::voidonspawn( unused0, unused1 ); + self.meat_is_moving = 0; + self.meat_is_flying = 0; } wait_for_player_downed() { - self endon( "disconnect" ); - while ( isDefined( self ) ) - { - self waittill_any( "player_downed", "fake_death", "death" ); - add_meat_event( "player_down", self ); - wait 0,1; - if ( isDefined( self._meat_team ) ) - { - self thread watch_save_player(); - players = get_players_on_meat_team( self._meat_team ); - if ( players.size >= 2 ) - { - } - } - } + self endon( "disconnect" ); + + while ( isdefined( self ) ) + { + self waittill_any( "player_downed", "fake_death", "death" ); + add_meat_event( "player_down", self ); + wait 0.1; + + if ( isdefined( self._meat_team ) ) + { + self thread watch_save_player(); + players = get_players_on_meat_team( self._meat_team ); + + if ( players.size >= 2 ) + { + + } + } + } } item_meat_watch_stationary() { - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_moving = 1; - self waittill( "stationary" ); - self playloopsound( "zmb_meat_looper", 2 ); - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - add_meat_event( "meat_stationary", self ); - } - else - { - add_meat_event( "fake_meat_stationary", self ); - } - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - level._meat_moving = 0; - level._meat_splitter_activated = 0; - level._last_person_to_throw_meat = undefined; - } - self.meat_is_moving = 0; - while ( isDefined( level._meat_on_team ) ) - { - teamplayers = get_players_on_meat_team( level._meat_on_team ); - i = 0; - while ( i < teamplayers.size ) - { - if ( isDefined( teamplayers[ i ] ) && isDefined( teamplayers[ i ]._encounters_team ) ) - { - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[ i ]._encounters_team ); - return; - } - else - { - i++; - } - } - } + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_moving = 1; + + self waittill( "stationary" ); + + self playloopsound( "zmb_meat_looper", 2 ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_stationary", self ); + else + add_meat_event( "fake_meat_stationary", self ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 0; + level._meat_splitter_activated = 0; + level._last_person_to_throw_meat = undefined; + } + + self.meat_is_moving = 0; + + if ( isdefined( level._meat_on_team ) ) + { + teamplayers = get_players_on_meat_team( level._meat_on_team ); + + for ( i = 0; i < teamplayers.size; i++ ) + { + if ( isdefined( teamplayers[i] ) && isdefined( teamplayers[i]._encounters_team ) ) + { + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_land", teamplayers[i]._encounters_team ); + break; + } + } + } } item_meat_watch_bounce() { - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_flying = 1; - self waittill( "grenade_bounce", pos, normal, ent ); - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - add_meat_event( "meat_bounce", self, pos, normal, ent ); - } - else - { - add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); - } - if ( isDefined( level.meat_bounce_override ) ) - { - self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); - return; - } - if ( isDefined( level.spawned_collmap ) ) - { - if ( isDefined( ent ) && ent == level.spawned_collmap ) - { - playfx( level._effect[ "meat_bounce" ], pos, normal ); - } - } - if ( isDefined( ent ) && isplayer( ent ) ) - { - add_meat_event( "player_hit_player", self.owner, ent ); - self.owner hit_player_with_meat( ent ); - } - self.meat_is_flying = 0; - self thread watch_for_roll(); - playfxontag( level._effect[ "meat_marker" ], self, "tag_origin" ); + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_flying = 1; + + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + add_meat_event( "meat_bounce", self, pos, normal, ent ); + else + add_meat_event( "fake_meat_bounce", self, pos, normal, ent ); + + if ( isdefined( level.meat_bounce_override ) ) + { + self thread [[ level.meat_bounce_override ]]( pos, normal, ent ); + return; + } + + if ( isdefined( level.spawned_collmap ) ) + { + if ( isdefined( ent ) && ent == level.spawned_collmap ) + playfx( level._effect["meat_bounce"], pos, normal ); + } + + if ( isdefined( ent ) && isplayer( ent ) ) + { + add_meat_event( "player_hit_player", self.owner, ent ); + self.owner hit_player_with_meat( ent ); + } + + self.meat_is_flying = 0; + self thread watch_for_roll(); + playfxontag( level._effect["meat_marker"], self, "tag_origin" ); } watch_for_roll() { - self endon( "stationary" ); - self endon( "death" ); - self endon( "picked_up" ); - self.meat_is_rolling = 0; - while ( 1 ) - { - old_z = self.origin[ 2 ]; - wait 1; - if ( abs( old_z - self.origin[ 2 ] ) < 10 ) - { - self.meat_is_rolling = 1; - self playloopsound( "zmb_meat_looper", 2 ); - } - } + self endon( "stationary" ); + self endon( "death" ); + self endon( "picked_up" ); + self.meat_is_rolling = 0; + + while ( true ) + { + old_z = self.origin[2]; + wait 1; + + if ( abs( old_z - self.origin[2] ) < 10 ) + { + self.meat_is_rolling = 1; + self playloopsound( "zmb_meat_looper", 2 ); + } + } } stop_rolling() { - self.origin = self.origin; - self.angles = self.angles; + self.origin = self.origin; + self.angles = self.angles; } hit_player_with_meat( hit_player ) { /# - println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\n" ); + println( "MEAT: Player " + self.name + " hit " + hit_player.name + " with the meat\n" ); #/ } item_meat_pickup() { - self.meat_is_moving = 0; - self.meat_is_flying = 0; - level._meat_moving = 0; - level._meat_splitter_activated = 0; - self notify( "picked_up" ); + self.meat_is_moving = 0; + self.meat_is_flying = 0; + level._meat_moving = 0; + level._meat_splitter_activated = 0; + self notify( "picked_up" ); } player_wait_take_meat( meat_name ) { - self.dont_touch_the_meat = 1; - if ( isDefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) - { - self switchtoweapon( self.pre_meat_weapon ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - else - { + self.dont_touch_the_meat = 1; + + if ( isdefined( self.pre_meat_weapon ) && self hasweapon( self.pre_meat_weapon ) ) + self switchtoweapon( self.pre_meat_weapon ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + else + { /# - assert( 0, "Player has no weapon" ); + assert( 0, "Player has no weapon" ); #/ - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } - } - self waittill_notify_or_timeout( "weapon_change_complete", 3 ); - self takeweapon( meat_name ); - self.pre_meat_weapon = undefined; - if ( self.is_drinking ) - { - self decrement_is_drinking(); - } - self.dont_touch_the_meat = 0; + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + } + } + + self waittill_notify_or_timeout( "weapon_change_complete", 3 ); + self takeweapon( meat_name ); + self.pre_meat_weapon = undefined; + + if ( self.is_drinking ) + self decrement_is_drinking(); + + self.dont_touch_the_meat = 0; } cleanup_meat() { - if ( isDefined( self.altmodel ) ) - { - self.altmodel delete(); - } - self delete(); + if ( isdefined( self.altmodel ) ) + self.altmodel delete(); + + self delete(); } init_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } +#using_animtree("zombie_meat"); + animate_meat( grenade ) { - grenade waittill_any( "bounce", "stationary", "death" ); - waittillframeend; - if ( isDefined( grenade ) ) - { - grenade hide(); - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); - altmodel useanimtree( -1 ); - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - altmodel setanim( %o_zombie_head_idle_v1 ); - grenade.altmodel = altmodel; - while ( isDefined( grenade ) ) - { - wait 0,05; - } - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - } + grenade waittill_any( "bounce", "stationary", "death" ); + waittillframeend; + + if ( isdefined( grenade ) ) + { + grenade hide(); + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( get_gamemode_var( "item_meat_model" ) ); + altmodel useanimtree( -1 ); + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + altmodel setanim( %o_zombie_head_idle_v1 ); + grenade.altmodel = altmodel; + + while ( isdefined( grenade ) ) + wait 0.05; + + if ( isdefined( altmodel ) ) + altmodel delete(); + } } indexinarray( array, value ) { - if ( isDefined( array ) && isarray( array ) || !isDefined( value ) && !isinarray( array, value ) ) - { - return undefined; - } - _a686 = array; - index = getFirstArrayKey( _a686 ); - while ( isDefined( index ) ) - { - item = _a686[ index ]; - if ( item == value ) - { - return index; - } - index = getNextArrayKey( _a686, index ); - } - return undefined; + if ( !isdefined( array ) || !isarray( array ) || !isdefined( value ) || !isinarray( array, value ) ) + return undefined; + + foreach ( index, item in array ) + { + if ( item == value ) + return index; + } + + return undefined; } item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname ) { - self endon( "death" ); - add_meat_event( "meat_spawn", self ); - thread animate_meat( self ); - while ( isDefined( level.splitting_meat ) && level.splitting_meat ) - { - wait 0,15; - } - if ( isDefined( player ) ) - { - self setowner( player ); - self setteam( player.pers[ "team" ] ); - self.owner = player; - self.oldangles = self.angles; - if ( player hasweapon( weaponname ) ) - { - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - player thread player_wait_take_meat( weaponname ); - } - else - { - player takeweapon( weaponname ); - player decrement_is_drinking(); - } - } - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - if ( isDefined( self._respawned_meat ) && !self._respawned_meat ) - { - level notify( "meat_thrown" ); - level._last_person_to_throw_meat = player; - level._last_person_to_throw_meat_time = getTime(); - } - } - } - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - level._meat_moving = 1; - if ( isDefined( level.item_meat ) && level.item_meat != self ) - { - level.item_meat cleanup_meat(); - } - level.item_meat = self; - } - self thread item_meat_watch_stationary(); - self thread item_meat_watch_bounce(); - self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); - self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); - self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); - self.item_meat_pick_up_trigger enablelinkto(); - self.item_meat_pick_up_trigger linkto( self ); - self.item_meat_pick_up_trigger triggerignoreteam(); - level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; - self thread item_meat_watch_shutdown(); - self.meat_id = indexinarray( level._fake_meats, self ); - if ( !isDefined( self.meat_id ) ) - { - self.meat_id = 0; - } - if ( isDefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) - { - self.item_meat_pick_up_trigger setinvisibletoall(); - } - else - { - self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); - self thread kick_meat_monitor(); - self thread last_stand_meat_nudge(); - } - self._respawned_meat = undefined; + self endon( "death" ); + add_meat_event( "meat_spawn", self ); + thread animate_meat( self ); + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.15; + + if ( isdefined( player ) ) + { + self setowner( player ); + self setteam( player.pers["team"] ); + self.owner = player; + self.oldangles = self.angles; + + if ( player hasweapon( weaponname ) ) + { + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + player thread player_wait_take_meat( weaponname ); + else + { + player takeweapon( weaponname ); + player decrement_is_drinking(); + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + if ( !( isdefined( self._respawned_meat ) && self._respawned_meat ) ) + { + level notify( "meat_thrown", player ); + level._last_person_to_throw_meat = player; + level._last_person_to_throw_meat_time = gettime(); + } + } + } + + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + { + level._meat_moving = 1; + + if ( isdefined( level.item_meat ) && level.item_meat != self ) + level.item_meat cleanup_meat(); + + level.item_meat = self; + } + + self thread item_meat_watch_stationary(); + self thread item_meat_watch_bounce(); + self.item_meat_pick_up_trigger = spawn( "trigger_radius_use", self.origin, 0, 36, 72 ); + self.item_meat_pick_up_trigger setcursorhint( "HINT_NOICON" ); + self.item_meat_pick_up_trigger sethintstring( &"ZOMBIE_MEAT_PICKUP" ); + self.item_meat_pick_up_trigger enablelinkto(); + self.item_meat_pick_up_trigger linkto( self ); + self.item_meat_pick_up_trigger triggerignoreteam(); + level.item_meat_pick_up_trigger = self.item_meat_pick_up_trigger; + self thread item_meat_watch_shutdown(); + self.meat_id = indexinarray( level._fake_meats, self ); + + if ( !isdefined( self.meat_id ) ) + self.meat_id = 0; + + if ( isdefined( level.dont_allow_meat_interaction ) && level.dont_allow_meat_interaction ) + self.item_meat_pick_up_trigger setinvisibletoall(); + else + { + self thread item_meat_watch_trigger( self.meat_id, self.item_meat_pick_up_trigger, ::item_meat_on_pickup, level.meat_pickupsoundplayer, level.meat_pickupsound ); + self thread kick_meat_monitor(); + self thread last_stand_meat_nudge(); + } + + self._respawned_meat = undefined; } last_stand_meat_nudge() { - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - wait 0,15; - while ( 1 ) - { - players = get_players(); - _a789 = players; - _k789 = getFirstArrayKey( _a789 ); - while ( isDefined( _k789 ) ) - { - player = _a789[ _k789 ]; - if ( distancesquared( player.origin, self.origin ) < 2304 && player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - player thread kick_the_meat( self, 1 ); - } - _k789 = getNextArrayKey( _a789, _k789 ); - } - wait 0,05; - } + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + wait 0.15; + + while ( true ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, self.origin ) < 2304 && player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + player thread kick_the_meat( self, 1 ); + } + + wait 0.05; + } } kick_meat_monitor() { - level endon( "meat_grabbed" ); - level endon( "end_meat" ); - self endon( "death" ); - kick_meat_timeout = 150; - while ( 1 ) - { - players = get_players(); - curr_time = getTime(); - _a813 = players; - _k813 = getFirstArrayKey( _a813 ); - while ( isDefined( _k813 ) ) - { - player = _a813[ _k813 ]; - if ( isDefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && ( curr_time - level._last_person_to_throw_meat_time ) <= kick_meat_timeout ) - { - } - else - { - if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) - { - if ( isDefined( player._meat_team ) && isDefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) - { - add_meat_event( "player_kick_meat", player, self ); - player thread kick_the_meat( self ); - } - } - } - _k813 = getNextArrayKey( _a813, _k813 ); - } - wait 0,05; - } + level endon( "meat_grabbed" ); + level endon( "end_meat" ); + self endon( "death" ); + kick_meat_timeout = 150; + + while ( true ) + { + players = get_players(); + curr_time = gettime(); + + foreach ( player in players ) + { + if ( isdefined( level._last_person_to_throw_meat ) && player == level._last_person_to_throw_meat && curr_time - level._last_person_to_throw_meat_time <= kick_meat_timeout ) + continue; + + if ( distancesquared( player.origin, self.origin ) < 2304 && player issprinting() && !player usebuttonpressed() ) + { + if ( isdefined( player._meat_team ) && isdefined( level._meat_on_team ) && level._meat_on_team == player._meat_team ) + { + add_meat_event( "player_kick_meat", player, self ); + player thread kick_the_meat( self ); + } + } + } + + wait 0.05; + } } is_meat( weapon ) { - return weapon == get_gamemode_var( "item_meat_name" ); + return weapon == get_gamemode_var( "item_meat_name" ); } spike_the_meat( meat ) { - if ( isDefined( self._kicking_meat ) && self._kicking_meat ) - { - return; - } - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = self getweaponmuzzlepoint(); - vel = meat getvelocity(); - if ( isDefined( meat._fake_meat ) && !meat._fake_meat ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = getTime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglesToForward( kickangles ); - speed = length( vel ) * 1,5; - launchvel = vectorScale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[ 0 ], launchvel[ 1 ], 380 ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - wait 0,1; - self._spawning_meat = 0; - self._kicking_meat = 0; - if ( !fake_meat ) - { - level notify( "meat_thrown" ); - level notify( "meat_kicked" ); - } + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = self getweaponmuzzlepoint(); + vel = meat getvelocity(); + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + speed = length( vel ) * 1.5; + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], 380 ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } } show_meat_throw_hint() { - level endon( "meat_thrown" ); - self endon( "player_downed" ); - self thread meat_screen_message_delete_on_death(); - wait 1; - self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); - self thread meat_screen_message_delete(); + level endon( "meat_thrown" ); + self endon( "player_downed" ); + self thread meat_screen_message_delete_on_death(); + wait 1; + self meat_create_hint_message( &"ZOMBIE_THROW_MEAT_HINT" ); + self thread meat_screen_message_delete(); } meat_create_hint_message( string_message_1, string_message_2, string_message_3, n_offset_y ) { - if ( !isDefined( n_offset_y ) ) - { - n_offset_y = 0; - } - if ( !isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 = newclienthudelem( self ); - self._screen_message_1.elemtype = "font"; - self._screen_message_1.font = "objective"; - self._screen_message_1.fontscale = 1,8; - self._screen_message_1.horzalign = "center"; - self._screen_message_1.vertalign = "middle"; - self._screen_message_1.alignx = "center"; - self._screen_message_1.aligny = "middle"; - self._screen_message_1.y = -60 + n_offset_y; - self._screen_message_1.sort = 2; - self._screen_message_1.color = ( 0, 0, 0 ); - self._screen_message_1.alpha = 0,7; - self._screen_message_1.hidewheninmenu = 1; - } - self._screen_message_1 settext( string_message_1 ); - if ( isDefined( string_message_2 ) ) - { - if ( !isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 = newclienthudelem( self ); - self._screen_message_2.elemtype = "font"; - self._screen_message_2.font = "objective"; - self._screen_message_2.fontscale = 1,8; - self._screen_message_2.horzalign = "center"; - self._screen_message_2.vertalign = "middle"; - self._screen_message_2.alignx = "center"; - self._screen_message_2.aligny = "middle"; - self._screen_message_2.y = -33 + n_offset_y; - self._screen_message_2.sort = 2; - self._screen_message_2.color = ( 0, 0, 0 ); - self._screen_message_2.alpha = 0,7; - self._screen_message_2.hidewheninmenu = 1; - } - level._screen_message_2 settext( string_message_2 ); - } - else - { - if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - } - if ( isDefined( string_message_3 ) ) - { - if ( !isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 = newclienthudelem( self ); - self._screen_message_3.elemtype = "font"; - self._screen_message_3.font = "objective"; - self._screen_message_3.fontscale = 1,8; - self._screen_message_3.horzalign = "center"; - self._screen_message_3.vertalign = "middle"; - self._screen_message_3.alignx = "center"; - self._screen_message_3.aligny = "middle"; - self._screen_message_3.y = -6 + n_offset_y; - self._screen_message_3.sort = 2; - self._screen_message_3.color = ( 0, 0, 0 ); - self._screen_message_3.alpha = 0,7; - self._screen_message_3.hidewheninmenu = 1; - } - self._screen_message_3 settext( string_message_3 ); - } - else - { - if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } - } + if ( !isdefined( n_offset_y ) ) + n_offset_y = 0; + + if ( !isdefined( self._screen_message_1 ) ) + { + self._screen_message_1 = newclienthudelem( self ); + self._screen_message_1.elemtype = "font"; + self._screen_message_1.font = "objective"; + self._screen_message_1.fontscale = 1.8; + self._screen_message_1.horzalign = "center"; + self._screen_message_1.vertalign = "middle"; + self._screen_message_1.alignx = "center"; + self._screen_message_1.aligny = "middle"; + self._screen_message_1.y = -60 + n_offset_y; + self._screen_message_1.sort = 2; + self._screen_message_1.color = ( 1, 1, 1 ); + self._screen_message_1.alpha = 0.7; + self._screen_message_1.hidewheninmenu = 1; + } + + self._screen_message_1 settext( string_message_1 ); + + if ( isdefined( string_message_2 ) ) + { + if ( !isdefined( self._screen_message_2 ) ) + { + self._screen_message_2 = newclienthudelem( self ); + self._screen_message_2.elemtype = "font"; + self._screen_message_2.font = "objective"; + self._screen_message_2.fontscale = 1.8; + self._screen_message_2.horzalign = "center"; + self._screen_message_2.vertalign = "middle"; + self._screen_message_2.alignx = "center"; + self._screen_message_2.aligny = "middle"; + self._screen_message_2.y = -33 + n_offset_y; + self._screen_message_2.sort = 2; + self._screen_message_2.color = ( 1, 1, 1 ); + self._screen_message_2.alpha = 0.7; + self._screen_message_2.hidewheninmenu = 1; + } + + level._screen_message_2 settext( string_message_2 ); + } + else if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( string_message_3 ) ) + { + if ( !isdefined( self._screen_message_3 ) ) + { + self._screen_message_3 = newclienthudelem( self ); + self._screen_message_3.elemtype = "font"; + self._screen_message_3.font = "objective"; + self._screen_message_3.fontscale = 1.8; + self._screen_message_3.horzalign = "center"; + self._screen_message_3.vertalign = "middle"; + self._screen_message_3.alignx = "center"; + self._screen_message_3.aligny = "middle"; + self._screen_message_3.y = -6 + n_offset_y; + self._screen_message_3.sort = 2; + self._screen_message_3.color = ( 1, 1, 1 ); + self._screen_message_3.alpha = 0.7; + self._screen_message_3.hidewheninmenu = 1; + } + + self._screen_message_3 settext( string_message_3 ); + } + else if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); } meat_screen_message_delete() { - self endon( "disconnect" ); - level waittill_notify_or_timeout( "meat_thrown", 5 ); - if ( isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 destroy(); - } - if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } + self endon( "disconnect" ); + level waittill_notify_or_timeout( "meat_thrown", 5 ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); } meat_screen_message_delete_on_death() { - level endon( "meat_thrown" ); - self endon( "disconnect" ); - self waittill( "player_downed" ); - if ( isDefined( self._screen_message_1 ) ) - { - self._screen_message_1 destroy(); - } - if ( isDefined( self._screen_message_2 ) ) - { - self._screen_message_2 destroy(); - } - if ( isDefined( self._screen_message_3 ) ) - { - self._screen_message_3 destroy(); - } + level endon( "meat_thrown" ); + self endon( "disconnect" ); + + self waittill( "player_downed" ); + + if ( isdefined( self._screen_message_1 ) ) + self._screen_message_1 destroy(); + + if ( isdefined( self._screen_message_2 ) ) + self._screen_message_2 destroy(); + + if ( isdefined( self._screen_message_3 ) ) + self._screen_message_3 destroy(); } set_ignore_all() { - level endon( "clear_ignore_all" ); - if ( isDefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) - { - return; - } - level._zombies_ignoring_all = 1; - zombies = getaiarray( level.zombie_team ); - _a1051 = zombies; - _k1051 = getFirstArrayKey( _a1051 ); - while ( isDefined( _k1051 ) ) - { - zombie = _a1051[ _k1051 ]; - if ( isDefined( zombie ) ) - { - zombie.ignoreall = 1; - } - _k1051 = getNextArrayKey( _a1051, _k1051 ); - } - wait 0,5; - clear_ignore_all(); + level endon( "clear_ignore_all" ); + + if ( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) + return; + + level._zombies_ignoring_all = 1; + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 1; + } + + wait 0.5; + clear_ignore_all(); } clear_ignore_all() { - if ( isDefined( level._zombies_ignoring_all ) && !level._zombies_ignoring_all ) - { - return; - } - zombies = getaiarray( level.zombie_team ); - _a1070 = zombies; - _k1070 = getFirstArrayKey( _a1070 ); - while ( isDefined( _k1070 ) ) - { - zombie = _a1070[ _k1070 ]; - if ( isDefined( zombie ) ) - { - zombie.ignoreall = 0; - } - _k1070 = getNextArrayKey( _a1070, _k1070 ); - } - level._zombies_ignoring_all = 0; + if ( !( isdefined( level._zombies_ignoring_all ) && level._zombies_ignoring_all ) ) + return; + + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + zombie.ignoreall = 0; + } + + level._zombies_ignoring_all = 0; } bring_back_teammate_progress() { - self notify( "bring_back_teammate_progress" ); - self endon( "bring_back_teammate_progress" ); - self endon( "disconnect" ); - player = self; - player._bringing_back_teammate = 1; - revivetime = 15; - progress = 0; - while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) - { - if ( !isDefined( player.revive_team_progressbar ) ) - { - player.revive_team_progressbar = player createprimaryprogressbar(); - player.revive_team_progressbar updatebar( 0,01, 1 / revivetime ); - player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); - player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); - player thread destroy_revive_progress_on_downed(); - } - progress++; - if ( progress > ( revivetime * 10 ) ) - { - level bring_back_dead_teammate( player._meat_team ); - player destroy_revive_progress(); - wait 1; - player._bringing_back_teammate = 0; - progress = -1; - } - wait 0,1; - } - player._bringing_back_teammate = 0; - player destroy_revive_progress(); + self notify( "bring_back_teammate_progress" ); + self endon( "bring_back_teammate_progress" ); + self endon( "disconnect" ); + player = self; + player._bringing_back_teammate = 1; + revivetime = 15; + progress = 0; + + while ( player_has_meat( player ) && is_player_valid( player ) && progress >= 0 ) + { + if ( !isdefined( player.revive_team_progressbar ) ) + { + player.revive_team_progressbar = player createprimaryprogressbar(); + player.revive_team_progressbar updatebar( 0.01, 1 / revivetime ); + player.revive_team_progressbar.progresstext = player createprimaryprogressbartext(); + player.revive_team_progressbar.progresstext settext( &"ZOMBIE_MEAT_RESPAWN_TEAMMATE" ); + player thread destroy_revive_progress_on_downed(); + } + + progress++; + + if ( progress > revivetime * 10 ) + { + level bring_back_dead_teammate( player._meat_team ); + player destroy_revive_progress(); + wait 1; + player._bringing_back_teammate = 0; + progress = -1; + } + + wait 0.1; + } + + player._bringing_back_teammate = 0; + player destroy_revive_progress(); } should_try_to_bring_back_teammate( team ) { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ]._meat_team == team && players[ i ].sessionstate == "spectator" ) - { - return 1; - } - i++; - } - return 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + return true; + } + + return false; } bring_back_dead_teammate( team ) { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ]._meat_team == team && players[ i ].sessionstate == "spectator" ) - { - player = players[ i ]; - break; - } - else - { - i++; - } - } - if ( !isDefined( player ) ) - { - return; - } - player playsound( level.zmb_laugh_alias ); - wait 0,25; - playfx( level._effect[ "poltergeist" ], player.spectator_respawn.origin ); - playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); - earthquake( 0,5, 0,75, player.spectator_respawn.origin, 1000 ); - level.custom_spawnplayer = ::respawn_meat_player; - player.pers[ "spectator_respawn" ] = player.spectator_respawn; - player [[ level.spawnplayer ]](); - level.custom_spawnplayer = undefined; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team && players[i].sessionstate == "spectator" ) + { + player = players[i]; + break; + } + } + + if ( !isdefined( player ) ) + return; + + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.spectator_respawn.origin ); + playsoundatposition( "zmb_bolt", player.spectator_respawn.origin ); + earthquake( 0.5, 0.75, player.spectator_respawn.origin, 1000 ); + level.custom_spawnplayer = ::respawn_meat_player; + player.pers["spectator_respawn"] = player.spectator_respawn; + player [[ level.spawnplayer ]](); + level.custom_spawnplayer = undefined; } respawn_meat_player() { - spawnpoint = self maps/mp/gametypes_zm/_globallogic_score::getpersstat( "meat_spectator_respawn" ); - self spawn( spawnpoint.origin, spawnpoint.angles ); - self._meat_team = self.pers[ "zteam" ]; - self._encounters_team = self.pers[ "encounters_team" ]; - self.characterindex = self.pers[ "characterindex" ]; - self._team_name = self.pers[ "team_name" ]; - self.spectator_respawn = self.pers[ "meat_spectator_respawn" ]; - self reviveplayer(); - self.is_burning = 0; - self.is_zombie = 0; - self.ignoreme = 0; + spawnpoint = self maps\mp\gametypes_zm\_globallogic_score::getpersstat( "meat_spectator_respawn" ); + self spawn( spawnpoint.origin, spawnpoint.angles ); + self._meat_team = self.pers["zteam"]; + self._encounters_team = self.pers["encounters_team"]; + self.characterindex = self.pers["characterindex"]; + self._team_name = self.pers["team_name"]; + self.spectator_respawn = self.pers["meat_spectator_respawn"]; + self reviveplayer(); + self.is_burning = 0; + self.is_zombie = 0; + self.ignoreme = 0; } destroy_revive_progress_on_downed() { - level endon( "end_game" ); - level endon( "meat_end" ); - self waittill_any( "fake_death", "player_downed", "death" ); - self destroy_revive_progress(); + level endon( "end_game" ); + level endon( "meat_end" ); + self waittill_any( "fake_death", "player_downed", "death" ); + self destroy_revive_progress(); } destroy_revive_progress() { - if ( isDefined( self.revive_team_progressbar ) ) - { - self.revive_team_progressbar destroyelem(); - self.revive_team_progressbar.progresstext destroyelem(); - } + if ( isdefined( self.revive_team_progressbar ) ) + { + self.revive_team_progressbar destroyelem(); + self.revive_team_progressbar.progresstext destroyelem(); + } } kick_the_meat( meat, laststand_nudge ) { - if ( isDefined( self._kicking_meat ) && self._kicking_meat ) - { - return; - } - fake_meat = 0; - self._kicking_meat = 1; - self._spawning_meat = 1; - org = meat.origin; - if ( isDefined( meat._fake_meat ) && !meat._fake_meat ) - { - meat cleanup_meat(); - level._last_person_to_throw_meat = self; - level._last_person_to_throw_meat_time = getTime(); - level._meat_splitter_activated = 0; - } - else - { - fake_meat = 1; - meat cleanup_meat(); - } - kickangles = self.angles; - kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); - launchdir = anglesToForward( kickangles ); - vel = self getvelocity(); - speed = length( vel ) * 1,5; - height_boost = 380; - if ( isDefined( laststand_nudge ) && laststand_nudge ) - { - if ( vel == ( 0, 0, 0 ) ) - { - vel = ( 30, 30, 5 ); - } - speed = length( vel ) * 2; - height_boost = 120; - } - launchvel = vectorScale( launchdir, speed ); - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[ 0 ], launchvel[ 1 ], height_boost ) ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); - if ( fake_meat ) - { - grenade._fake_meat = 1; - grenade thread delete_on_real_meat_pickup(); - level._kicked_meat = grenade; - } - wait 0,1; - self._spawning_meat = 0; - self._kicking_meat = 0; - if ( !fake_meat ) - { - level notify( "meat_thrown" ); - level notify( "meat_kicked" ); - } + if ( isdefined( self._kicking_meat ) && self._kicking_meat ) + return; + + fake_meat = 0; + self._kicking_meat = 1; + self._spawning_meat = 1; + org = meat.origin; + + if ( !( isdefined( meat._fake_meat ) && meat._fake_meat ) ) + { + meat cleanup_meat(); + level._last_person_to_throw_meat = self; + level._last_person_to_throw_meat_time = gettime(); + level._meat_splitter_activated = 0; + } + else + { + fake_meat = 1; + meat cleanup_meat(); + } + + kickangles = self.angles; + kickangles += ( randomfloatrange( -30, -20 ), randomfloatrange( -5, 5 ), 0 ); + launchdir = anglestoforward( kickangles ); + vel = self getvelocity(); + speed = length( vel ) * 1.5; + height_boost = 380; + + if ( isdefined( laststand_nudge ) && laststand_nudge ) + { + if ( vel == ( 0, 0, 0 ) ) + vel = ( 30, 30, 5 ); + + speed = length( vel ) * 2; + height_boost = 120; + } + + launchvel = vectorscale( launchdir, speed ); + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( launchvel[0], launchvel[1], height_boost ) ); + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); + + if ( fake_meat ) + { + grenade._fake_meat = 1; + grenade thread delete_on_real_meat_pickup(); + level._kicked_meat = grenade; + } + + wait 0.1; + self._spawning_meat = 0; + self._kicking_meat = 0; + + if ( !fake_meat ) + { + level notify( "meat_thrown", self ); + level notify( "meat_kicked" ); + } } delete_on_real_meat_pickup() { - if ( isDefined( self._fake_meat ) && !self._fake_meat ) - { - return; - } - self endon( "death" ); - level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); - add_meat_event( "fake_meat_killed_by_real", self ); - if ( isDefined( level._kicked_meat ) && level._kicked_meat == self ) - { - level._kicked_meat = undefined; - } - if ( isDefined( self ) ) - { - self cleanup_meat(); - } + if ( !( isdefined( self._fake_meat ) && self._fake_meat ) ) + return; + + self endon( "death" ); + level waittill_any( "meat_grabbed", "end_game", "meat_kicked" ); + add_meat_event( "fake_meat_killed_by_real", self ); + + if ( isdefined( level._kicked_meat ) && level._kicked_meat == self ) + level._kicked_meat = undefined; + + if ( isdefined( self ) ) + self cleanup_meat(); } play_item_meat_on_spawn_retrieve_trigger( watcher, player ) { - self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); + self item_meat_on_spawn_retrieve_trigger( watcher, player, get_gamemode_var( "item_meat_name" ) ); } can_revive( revivee ) { - if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - return 0; - } - if ( !self maps/mp/zombies/_zm_laststand::is_reviving_any() && isDefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) - { - return 0; - } - return 1; + if ( self hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + return false; + + if ( !self maps\mp\zombies\_zm_laststand::is_reviving_any() && isdefined( level.item_meat_pick_up_trigger ) && self istouching( level.item_meat_pick_up_trigger ) ) + return false; + + return true; } pickup_origin() { - origin = self get_eye(); - if ( !isDefined( origin ) ) - { - origin = self gettagorigin( "tag_weapon" ); - } - if ( !isDefined( origin ) ) - { - origin = self gettagorigin( "tag_weapon_right" ); - } - if ( !isDefined( origin ) ) - { - origin = self.origin; - } - return origin; + origin = self get_eye(); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon" ); + + if ( !isdefined( origin ) ) + origin = self gettagorigin( "tag_weapon_right" ); + + if ( !isdefined( origin ) ) + origin = self.origin; + + return origin; } can_spike_meat() { - if ( isDefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) - { - return 0; - } - meat = level.item_meat; - meat_spike_dist_sq = 4096; - meat_spike_dot = 0,1; - if ( isDefined( meat ) ) - { - view_pos = self getweaponmuzzlepoint(); - if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) - { - return 1; - } - } - return 0; + if ( isdefined( level._last_person_to_throw_meat ) && self == level._last_person_to_throw_meat ) + return false; + + meat = level.item_meat; + meat_spike_dist_sq = 4096; + meat_spike_dot = 0.1; + + if ( isdefined( meat ) ) + { + view_pos = self getweaponmuzzlepoint(); + + if ( distancesquared( view_pos, meat.origin ) < meat_spike_dist_sq ) + return true; + } + + return false; } start_encounters_round_logic() { - if ( isDefined( level.flag[ "start_zombie_round_logic" ] ) ) - { - flag_wait( "start_zombie_round_logic" ); - } - flag_wait( "initial_players_connected" ); - if ( !flag( "start_encounters_match_logic" ) ) - { - flag_set( "start_encounters_match_logic" ); - } + if ( isdefined( level.flag["start_zombie_round_logic"] ) ) + flag_wait( "start_zombie_round_logic" ); + + flag_wait( "initial_players_connected" ); + + if ( !flag( "start_encounters_match_logic" ) ) + flag_set( "start_encounters_match_logic" ); } onstartgametype() { - thread start_encounters_round_logic(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); + thread start_encounters_round_logic(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zmeat", ::meat_hub_start_func, 1 ); } hide_non_meat_objects() { - door_trigs = getentarray( "zombie_door", "targetname" ); - i = 0; - while ( i < door_trigs.size ) - { - if ( isDefined( door_trigs[ i ] ) ) - { - door_trigs[ i ] delete(); - } - i++; - } - objects = getentarray(); - i = 0; - while ( i < objects.size ) - { - if ( objects[ i ] is_meat_object() ) - { - i++; - continue; - } - else if ( objects[ i ] iszbarrier() ) - { - i++; - continue; - } - else - { - if ( isDefined( objects[ i ].spawnflags ) && objects[ i ].spawnflags == 1 ) - { - objects[ i ] connectpaths(); - } - objects[ i ] notsolid(); - objects[ i ] hide(); - } - i++; - } + door_trigs = getentarray( "zombie_door", "targetname" ); + + for ( i = 0; i < door_trigs.size; i++ ) + { + if ( isdefined( door_trigs[i] ) ) + door_trigs[i] delete(); + } + + objects = getentarray(); + + for ( i = 0; i < objects.size; i++ ) + { + if ( objects[i] is_meat_object() ) + continue; + + if ( objects[i] iszbarrier() ) + continue; + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 ) + objects[i] connectpaths(); + + objects[i] notsolid(); + objects[i] hide(); + } } is_meat_object() { - if ( !isDefined( self.script_parameters ) ) - { - return 1; - } - tokens = strtok( self.script_parameters, " " ); - i = 0; - while ( i < tokens.size ) - { - if ( tokens[ i ] == "meat_remove" ) - { - return 0; - } - i++; - } - return 1; + if ( !isdefined( self.script_parameters ) ) + return true; + + tokens = strtok( self.script_parameters, " " ); + + for ( i = 0; i < tokens.size; i++ ) + { + if ( tokens[i] == "meat_remove" ) + return false; + } + + return true; } setup_meat_world_objects() { - objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); - i = 0; - while ( i < objects.size ) - { - if ( !objects[ i ] is_meat_object() ) - { - i++; - continue; - } - else if ( isDefined( objects[ i ].script_gameobjectname ) ) - { - i++; - continue; - } - else - { - if ( isDefined( objects[ i ].script_vector ) ) - { - objects[ i ] moveto( objects[ i ].origin + objects[ i ].script_vector, 0,05 ); - objects[ i ] waittill( "movedone" ); - } - if ( isDefined( objects[ i ].spawnflags ) && objects[ i ].spawnflags == 1 && isDefined( level._dont_reconnect_paths ) && !level._dont_reconnect_paths ) - { - objects[ i ] disconnectpaths(); - } - } - i++; - } - level clientnotify( "meat_" + level.scr_zm_map_start_location ); + objects = getentarray( level.scr_zm_map_start_location, "script_noteworthy" ); + + for ( i = 0; i < objects.size; i++ ) + { + if ( !objects[i] is_meat_object() ) + continue; + + if ( isdefined( objects[i].script_gameobjectname ) ) + continue; + + if ( isdefined( objects[i].script_vector ) ) + { + objects[i] moveto( objects[i].origin + objects[i].script_vector, 0.05 ); + + objects[i] waittill( "movedone" ); + } + + if ( isdefined( objects[i].spawnflags ) && objects[i].spawnflags == 1 && !( isdefined( level._dont_reconnect_paths ) && level._dont_reconnect_paths ) ) + objects[i] disconnectpaths(); + } + + level clientnotify( "meat_" + level.scr_zm_map_start_location ); } spawn_meat_zombies() { - level endon( "meat_end" ); - force_riser = 0; - force_chaser = 0; - num = 0; - max_ai_num = 15; - if ( getDvarInt( #"CD22CF55" ) > 0 ) - { - max_ai_num = 0; - } - if ( getDvarInt( "zombie_cheat" ) == 2 ) - { - max_ai_num = -1; - } - level waittill( "meat_grabbed" ); - while ( 1 ) - { - ai = getaiarray( level.zombie_team ); - if ( ai.size > max_ai_num ) - { - wait 0,1; - } - else - { - if ( ( num % 2 ) == 0 ) - { - spawn_points = level._meat_team_1_zombie_spawn_points; - num++; - continue; - } - else - { - spawn_points = level._meat_team_2_zombie_spawn_points; - } - num++; - spawn_point = undefined; - dist = 512; - distcheck = dist * dist; - startindex = randomint( spawn_points.size ); - while ( !isDefined( spawn_point ) ) - { - i = 0; - while ( i < spawn_points.size ) - { - index = ( startindex + i ) % spawn_points.size; - point = spawn_points[ index ]; - if ( ( num % 2 ) == 0 ) - { - players = get_players_on_meat_team( 1 ); - } - else - { - players = get_players_on_meat_team( 2 ); - } - clear = 1; - _a1503 = players; - _k1503 = getFirstArrayKey( _a1503 ); - while ( isDefined( _k1503 ) ) - { - player = _a1503[ _k1503 ]; - if ( distancesquared( player.origin, point.origin ) < distcheck ) - { - clear = 0; - } - _k1503 = getNextArrayKey( _a1503, _k1503 ); - } - if ( clear ) - { - spawn_point = point; - break; - } - else - { - i++; - } - } - if ( dist <= 128 ) - { - spawn_point = point; - } - else - { - dist /= 4; - distcheck = dist * dist; - } - wait 0,05; - } - zombie = spawn_meat_zombie( level.meat_spawners[ 0 ], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); - if ( isDefined( zombie ) ) - { - zombie maps/mp/zombies/_zm_game_module::make_supersprinter(); - } - } - wait level._meat_zombie_spawn_timer; - } + level endon( "meat_end" ); + force_riser = 0; + force_chaser = 0; + num = 0; + max_ai_num = 15; + + if ( getdvarint( _hash_CD22CF55 ) > 0 ) + max_ai_num = 0; + + if ( getdvarint( _hash_FA81816F ) == 2 ) + max_ai_num = -1; + + level waittill( "meat_grabbed" ); + + while ( true ) + { + ai = getaiarray( level.zombie_team ); + + if ( ai.size > max_ai_num ) + wait 0.1; + else + { + if ( num % 2 == 0 ) + spawn_points = level._meat_team_1_zombie_spawn_points; + else + spawn_points = level._meat_team_2_zombie_spawn_points; + + num++; + spawn_point = undefined; + dist = 512; + distcheck = dist * dist; + startindex = randomint( spawn_points.size ); + + while ( !isdefined( spawn_point ) ) + { + for ( i = 0; i < spawn_points.size; i++ ) + { + index = ( startindex + i ) % spawn_points.size; + point = spawn_points[index]; + + if ( num % 2 == 0 ) + players = get_players_on_meat_team( 1 ); + else + players = get_players_on_meat_team( 2 ); + + clear = 1; + + foreach ( player in players ) + { + if ( distancesquared( player.origin, point.origin ) < distcheck ) + clear = 0; + } + + if ( clear ) + { + spawn_point = point; + break; + } + } + + if ( dist <= 128 ) + spawn_point = point; + else + { + dist /= 4; + distcheck = dist * dist; + } + + wait 0.05; + } + + zombie = spawn_meat_zombie( level.meat_spawners[0], "meat_zombie", spawn_point, level._meat_zombie_spawn_health ); + + if ( isdefined( zombie ) ) + zombie maps\mp\zombies\_zm_game_module::make_supersprinter(); + } + + wait( level._meat_zombie_spawn_timer ); + } } spawn_meat_zombie( spawner, target_name, spawn_point, round_number ) { - level endon( "meat_end" ); - if ( !isDefined( spawner ) ) - { - iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); - return; - } - while ( isDefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) - { - wait 0,05; - } - level._meat_zombie_spawning = 1; - level.zombie_spawn_locations = []; - level.zombie_spawn_locations[ level.zombie_spawn_locations.size ] = spawn_point; - zombie = maps/mp/zombies/_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); - if ( isDefined( zombie ) ) - { - zombie thread maps/mp/zombies/_zm_spawner::zombie_spawn_init(); - zombie thread maps/mp/zombies/_zm::round_spawn_failsafe(); - } - else - { - iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); - } - spawner._spawning = undefined; - level._meat_zombie_spawning = 0; - return zombie; + level endon( "meat_end" ); + + if ( !isdefined( spawner ) ) + { + iprintlnbold( "BUG: There is something wrong with the zombie spawners" ); + return; + } + + while ( isdefined( level._meat_zombie_spawning ) && level._meat_zombie_spawning ) + wait 0.05; + + level._meat_zombie_spawning = 1; + level.zombie_spawn_locations = []; + level.zombie_spawn_locations[level.zombie_spawn_locations.size] = spawn_point; + zombie = maps\mp\zombies\_zm_utility::spawn_zombie( spawner, target_name, spawn_point, round_number ); + + if ( isdefined( zombie ) ) + { + zombie thread maps\mp\zombies\_zm_spawner::zombie_spawn_init(); + zombie thread maps\mp\zombies\_zm::round_spawn_failsafe(); + } + else + iprintlnbold( "BUG: There is something wrong with the zombie spawning" ); + + spawner._spawning = undefined; + level._meat_zombie_spawning = 0; + return zombie; } monitor_meat_on_team() { - level endon( "meat_end" ); - while ( 1 ) - { - players = get_players(); - if ( isDefined( level._meat_on_team ) ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else - { - if ( players[ i ]._meat_team == level._meat_on_team ) - { - if ( players[ i ].ignoreme ) - { - players[ i ].ignoreme = 0; - } - } - else - { - if ( !players[ i ].ignoreme ) - { - players[ i ].ignoreme = 1; - } - } - wait 0,05; - } - i++; - } - } - else i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else - { - if ( players[ i ].ignoreme ) - { - players[ i ].ignoreme = 0; - } - wait 0,05; - } - i++; - } - wait 0,1; - } + level endon( "meat_end" ); + + while ( true ) + { + players = get_players(); + + if ( isdefined( level._meat_on_team ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i]._meat_team == level._meat_on_team ) + { + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + } + else if ( !players[i].ignoreme ) + players[i].ignoreme = 1; + + wait 0.05; + } + } + else + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i].ignoreme ) + players[i].ignoreme = 0; + + wait 0.05; + } + } + + wait 0.1; + } } item_meat_reset( origin, immediate ) { - level notify( "new_meat" ); - level endon( "new_meat" ); - if ( isDefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - if ( isDefined( immediate ) && !immediate ) - { - level waittill( "reset_meat" ); - } - item_meat_clear(); - if ( isDefined( origin ) ) - { - item_meat_spawn( origin ); - } + level notify( "new_meat" ); + level endon( "new_meat" ); + + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( !( isdefined( immediate ) && immediate ) ) + level waittill( "reset_meat" ); + + item_meat_clear(); + + if ( isdefined( origin ) ) + item_meat_spawn( origin ); } meat_player_initial_spawn() { - players = get_players(); - one = 1; - two = 2; - if ( get_game_var( "switchedsides" ) ) - { - one = 2; - two = 1; - } - i = 0; - while ( i < players.size ) - { - if ( get_game_var( "side_selection" ) == 1 ) - { - if ( players[ i ].team == "allies" ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - } - else if ( players[ i ].team == "allies" ) - { - players[ i ]._meat_team = two; - } - else - { - players[ i ]._meat_team = one; - } - if ( isDefined( level.custom_player_fake_death_cleanup ) ) - { - players[ i ] [[ level.custom_player_fake_death_cleanup ]](); - } - players[ i ] setstance( "stand" ); - if ( isDefined( players[ i ]._meat_team ) ) - { - if ( players[ i ]._meat_team == one ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - } - else if ( players[ i ].team == "axis" ) - { - players[ i ]._meat_team = one; - } - else - { - players[ i ]._meat_team = two; - } - players[ i ] meat_player_setup(); - i++; - } - waittillframeend; - maps/mp/gametypes_zm/_zm_gametype::start_round(); - award_grenades_for_team( 1 ); - award_grenades_for_team( 2 ); + players = get_players(); + one = 1; + two = 2; + + if ( get_game_var( "switchedsides" ) ) + { + one = 2; + two = 1; + } + + for ( i = 0; i < players.size; i++ ) + { + if ( get_game_var( "side_selection" ) == 1 ) + { + if ( players[i].team == "allies" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "allies" ) + players[i]._meat_team = two; + else + players[i]._meat_team = one; + + if ( isdefined( level.custom_player_fake_death_cleanup ) ) + players[i] [[ level.custom_player_fake_death_cleanup ]](); + + players[i] setstance( "stand" ); + + if ( isdefined( players[i]._meat_team ) ) + { + if ( players[i]._meat_team == one ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + } + else if ( players[i].team == "axis" ) + players[i]._meat_team = one; + else + players[i]._meat_team = two; + + players[i] meat_player_setup(); + } + + waittillframeend; + maps\mp\gametypes_zm\_zm_gametype::start_round(); + award_grenades_for_team( 1 ); + award_grenades_for_team( 2 ); } meat_player_setup() { - self.pers[ "zteam" ] = self._meat_team; - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "encounters_team", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "characterindex", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "team_name", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "spectator_respawn", 0 ); - self.pers[ "encounters_team" ] = self._encounters_team; - self.pers[ "characterindex" ] = self.characterindex; - self.pers[ "team_name" ] = self._team_name; - self.pers[ "meat_spectator_respawn" ] = self.spectator_respawn; - self.score = 1000; - self.pers[ "score" ] = 1000; - self takeallweapons(); - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); - if ( !isDefined( self._saved_by_throw ) ) - { - self._saved_by_throw = 0; - } - self setmovespeedscale( 1 ); - self._has_meat = 0; - self setclientfield( "holding_meat", 0 ); - self freeze_player_controls( 1 ); + self.pers["zteam"] = self._meat_team; + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "encounters_team", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "characterindex", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "team_name", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "spectator_respawn", 0 ); + self.pers["encounters_team"] = self._encounters_team; + self.pers["characterindex"] = self.characterindex; + self.pers["team_name"] = self._team_name; + self.pers["meat_spectator_respawn"] = self.spectator_respawn; + self.score = 1000; + self.pers["score"] = 1000; + self takeallweapons(); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); + + if ( !isdefined( self._saved_by_throw ) ) + self._saved_by_throw = 0; + + self setmovespeedscale( 1 ); + self._has_meat = 0; + self setclientfield( "holding_meat", 0 ); + self freeze_player_controls( 1 ); } can_touch_meat() { - if ( isDefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) - { - return 0; - } - meat = level.item_meat; - if ( isDefined( meat ) ) - { - meatorg = meat.origin + vectorScale( ( 0, 0, 0 ), 8 ); - trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); - return distancesquared( trace[ "position" ], meatorg ) < 1; - } - return 0; + if ( isdefined( self.dont_touch_the_meat ) && self.dont_touch_the_meat ) + return 0; + + meat = level.item_meat; + + if ( isdefined( meat ) ) + { + meatorg = meat.origin + vectorscale( ( 0, 0, 1 ), 8.0 ); + trace = bullettrace( self pickup_origin(), meatorg, 0, meat ); + return distancesquared( trace["position"], meatorg ) < 1; + } + + return 0; } trying_to_use() { - self.use_ever_released |= !self usebuttonpressed(); - if ( self.use_ever_released ) - { - return self usebuttonpressed(); - } + self.use_ever_released |= !self usebuttonpressed(); + return self.use_ever_released && self usebuttonpressed(); } trying_to_spike( item ) { - if ( item.meat_is_flying ) - { - return self meleebuttonpressed(); - } + return item.meat_is_flying && self meleebuttonpressed(); } item_quick_trigger( meat_id, trigger ) { - self endon( "death" ); - meat_trigger_time = 150; - if ( isDefined( trigger.radius ) ) - { - radius = trigger.radius + 15; - } - else - { - radius = 51; - } - trigrad2 = radius * radius; - players = get_players(); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - player.use_ever_released = !player usebuttonpressed(); - i++; - } - while ( isDefined( trigger ) ) - { - trigorg = trigger.origin; - players = get_players(); - while ( players.size ) - { - random_start_point = randomint( players.size ); - i = 0; - while ( i < players.size ) - { - player = players[ ( i + random_start_point ) % players.size ]; - if ( !isDefined( player.trying_to_trigger_meat ) ) - { - player.trying_to_trigger_meat = []; - } - if ( !isDefined( player.trying_to_trigger_meat_time ) ) - { - player.trying_to_trigger_meat_time = []; - } - if ( player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - i++; - continue; - } - else meleeing = player ismeleeing(); - if ( isDefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && !player trying_to_use() && self.meat_is_flying && meleeing && player can_touch_meat() ) - { - if ( self.meat_is_flying && meleeing ) - { - if ( player can_spike_meat() ) - { - player.trying_to_trigger_meat[ meat_id ] = 0; - trigger notify( "usetrigger" ); - } - } - else - { - if ( isDefined( player.trying_to_trigger_meat[ meat_id ] ) && !player.trying_to_trigger_meat[ meat_id ] ) - { - player.trying_to_trigger_meat[ meat_id ] = 1; - player.trying_to_trigger_meat_time[ meat_id ] = getTime(); - break; - } - else - { - if ( ( getTime() - player.trying_to_trigger_meat_time[ meat_id ] ) >= meat_trigger_time ) - { - player.trying_to_trigger_meat[ meat_id ] = 0; - trigger notify( "usetrigger" ); - } - } - } - i++; - continue; - } - else - { - player.trying_to_trigger_meat[ meat_id ] = 0; - } - i++; - } - } - wait 0,05; - } + self endon( "death" ); + meat_trigger_time = 150; + + if ( isdefined( trigger.radius ) ) + radius = trigger.radius + 15.0; + else + radius = 51.0; + + trigrad2 = radius * radius; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + player.use_ever_released = !player usebuttonpressed(); + } + + while ( isdefined( trigger ) ) + { + trigorg = trigger.origin; + players = get_players(); + + if ( players.size ) + { + random_start_point = randomint( players.size ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[( i + random_start_point ) % players.size]; + + if ( !isdefined( player.trying_to_trigger_meat ) ) + player.trying_to_trigger_meat = []; + + if ( !isdefined( player.trying_to_trigger_meat_time ) ) + player.trying_to_trigger_meat_time = []; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + meleeing = player ismeleeing(); + + if ( isdefined( trigger ) && player istouching( trigger ) && distance2dsquared( player.origin, trigorg ) < trigrad2 && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && ( player trying_to_use() || self.meat_is_flying && meleeing ) && player can_touch_meat() ) + { + if ( self.meat_is_flying && meleeing ) + { + if ( player can_spike_meat() ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + } + else if ( !( isdefined( player.trying_to_trigger_meat[meat_id] ) && player.trying_to_trigger_meat[meat_id] ) ) + { + player.trying_to_trigger_meat[meat_id] = 1; + player.trying_to_trigger_meat_time[meat_id] = gettime(); + } + else if ( gettime() - player.trying_to_trigger_meat_time[meat_id] >= meat_trigger_time ) + { + player.trying_to_trigger_meat[meat_id] = 0; + trigger notify( "usetrigger", player ); + } + + continue; + } + + player.trying_to_trigger_meat[meat_id] = 0; + player.trying_to_trigger_meat_time[meat_id] = undefined; + } + } + + wait 0.05; + } } item_meat_watch_trigger( meat_id, trigger, callback, playersoundonuse, npcsoundonuse ) { - self endon( "death" ); - self thread item_quick_trigger( meat_id, trigger ); - while ( 1 ) - { - trigger waittill( "usetrigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - continue; - } - while ( player has_powerup_weapon() ) - { - continue; - } - while ( player maps/mp/zombies/_zm_laststand::is_reviving_any() ) - { - continue; - } - if ( self.meat_is_flying ) - { - volley = player meleebuttonpressed(); - } - player.volley_meat = volley; - if ( isDefined( self._fake_meat ) && self._fake_meat ) - { - add_meat_event( "player_fake_take", player, self ); - } - else - { - if ( volley ) - { - add_meat_event( "player_volley", player, self ); - break; - } - else if ( self.meat_is_moving ) - { - add_meat_event( "player_catch", player, self ); - break; - } - else - { - add_meat_event( "player_take", player, self ); - } - } - if ( isDefined( self._fake_meat ) && self._fake_meat ) - { - player playlocalsound( level.zmb_laugh_alias ); - wait_network_frame(); - if ( !isDefined( self ) ) - { - return; - } - self cleanup_meat(); - return; - } - curr_weap = player getcurrentweapon(); - if ( !is_meat( curr_weap ) ) - { - player.pre_meat_weapon = curr_weap; - } - if ( self.meat_is_moving ) - { - if ( volley ) - { - self item_meat_volley( player ); - break; - } - else - { - self item_meat_caught( player, self.meat_is_flying ); - } - } - self item_meat_pickup(); - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - if ( volley ) - { - player thread spike_the_meat( self ); - continue; - } - else - { - self thread [[ callback ]]( player ); - if ( !isDefined( player._meat_hint_shown ) ) - { - player thread show_meat_throw_hint(); - player._meat_hint_shown = 1; - } - } - } + self endon( "death" ); + self thread item_quick_trigger( meat_id, trigger ); + + while ( true ) + { + trigger waittill( "usetrigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !is_player_valid( player ) ) + continue; + + if ( player has_powerup_weapon() ) + continue; + + if ( player maps\mp\zombies\_zm_laststand::is_reviving_any() ) + continue; + + volley = self.meat_is_flying && player meleebuttonpressed(); + player.volley_meat = volley; + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + add_meat_event( "player_fake_take", player, self ); + else if ( volley ) + add_meat_event( "player_volley", player, self ); + else if ( self.meat_is_moving ) + add_meat_event( "player_catch", player, self ); + else + add_meat_event( "player_take", player, self ); + + if ( isdefined( self._fake_meat ) && self._fake_meat ) + { + player playlocalsound( level.zmb_laugh_alias ); + wait_network_frame(); + + if ( !isdefined( self ) ) + return; + + self cleanup_meat(); + return; + } + + curr_weap = player getcurrentweapon(); + + if ( !is_meat( curr_weap ) ) + player.pre_meat_weapon = curr_weap; + + if ( self.meat_is_moving ) + { + if ( volley ) + self item_meat_volley( player ); + else + self item_meat_caught( player, self.meat_is_flying ); + } + + self item_meat_pickup(); + + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + if ( volley ) + player thread spike_the_meat( self ); + else + { + self thread [[ callback ]]( player ); + + if ( !isdefined( player._meat_hint_shown ) ) + { + player thread show_meat_throw_hint(); + player._meat_hint_shown = 1; + } + } + } } item_meat_volley( player ) { /# - println( "MEAT: Spiked the meat\n" ); + println( "MEAT: Spiked the meat\n" ); #/ } item_meat_caught( player, in_air ) { - if ( in_air ) - { + if ( in_air ) + { /# - println( "MEAT: Caught the meat on the fly\n" ); + println( "MEAT: Caught the meat on the fly\n" ); #/ - } - else - { + } + else + { /# - println( "MEAT: Caught the meat while moving\n" ); + println( "MEAT: Caught the meat while moving\n" ); #/ - } + } } item_meat_on_pickup( player ) { /# - assert( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); + assert( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand(), "Player in last stand triggered meat pickup" ); #/ - player maps/mp/gametypes_zm/_weaponobjects::deleteweaponobjecthelper( self ); - self cleanup_meat(); - level.item_meat = undefined; - level._last_person_to_throw_meat = undefined; - assign_meat_to_team( player ); - level notify( "meat_grabbed" ); - player notify( "meat_grabbed" ); - level thread zmbvoxmeatonteamspecific( player._encounters_team ); - if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - player giveweapon( get_gamemode_var( "item_meat_name" ) ); - } - player increment_is_drinking(); - player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); - player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); - player thread waittill_thrown(); + player maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjecthelper( self ); + self cleanup_meat(); + level.item_meat = undefined; + level._last_person_to_throw_meat = undefined; + assign_meat_to_team( player ); + level notify( "meat_grabbed" ); + player notify( "meat_grabbed" ); + level thread zmbvoxmeatonteamspecific( player._encounters_team ); + + if ( !player hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + player giveweapon( get_gamemode_var( "item_meat_name" ) ); + + player increment_is_drinking(); + player switchtoweapon( get_gamemode_var( "item_meat_name" ) ); + player setweaponammoclip( get_gamemode_var( "item_meat_name" ), 2 ); + player thread waittill_thrown(); } waittill_thrown() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "reset_downed" ); - self waittill( "grenade_fire", grenade ); - grenade playsound( "zmb_meat_meat_tossed" ); - grenade thread waittill_loopstart(); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "reset_downed" ); + + self waittill( "grenade_fire", grenade ); + + grenade playsound( "zmb_meat_meat_tossed" ); + grenade thread waittill_loopstart(); } waittill_loopstart() { - self endon( "stationary" ); - self endon( "death" ); - level endon( "meat_grabbed" ); - level endon( "end_game" ); - level endon( "meat_kicked" ); - while ( 1 ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - self stopsounds(); - wait 0,05; - self playsound( "zmb_meat_bounce" ); - } + self endon( "stationary" ); + self endon( "death" ); + level endon( "meat_grabbed" ); + level endon( "end_game" ); + level endon( "meat_kicked" ); + + while ( true ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + self stopsounds(); + wait 0.05; + self playsound( "zmb_meat_bounce" ); + } } item_meat_watch_shutdown() { - self waittill( "death" ); - if ( isDefined( self.item_meat_pick_up_trigger ) ) - { - self.item_meat_pick_up_trigger delete(); - level.item_meat_pick_up_trigger = undefined; - } + self waittill( "death" ); + + if ( isdefined( self.item_meat_pick_up_trigger ) ) + { + self.item_meat_pick_up_trigger delete(); + level.item_meat_pick_up_trigger = undefined; + } } item_meat_clear() { - if ( isDefined( level.item_meat ) ) - { - level.item_meat cleanup_meat(); - level.item_meat = undefined; - } - if ( isDefined( level._fake_meats ) ) - { - _a2090 = level._fake_meats; - _k2090 = getFirstArrayKey( _a2090 ); - while ( isDefined( _k2090 ) ) - { - meat = _a2090[ _k2090 ]; - if ( isDefined( meat ) ) - { - meat cleanup_meat(); - } - _k2090 = getNextArrayKey( _a2090, _k2090 ); - } - level._fake_meats = undefined; - } + if ( isdefined( level.item_meat ) ) + { + level.item_meat cleanup_meat(); + level.item_meat = undefined; + } + + if ( isdefined( level._fake_meats ) ) + { + foreach ( meat in level._fake_meats ) + { + if ( isdefined( meat ) ) + meat cleanup_meat(); + } + + level._fake_meats = undefined; + } } zombie_path_timer_override() { - return getTime() + ( randomfloatrange( 0,35, 1 ) * 1000 ); + return gettime() + randomfloatrange( 0.35, 1 ) * 1000; } meat_poi_override_func() { - if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) - { - if ( abs( level.item_meat.origin[ 2 ] - groundpos( level.item_meat.origin )[ 2 ] ) < 35 ) - { - level._zombies_ignoring_all = 0; - level notify( "clear_ignore_all" ); - return undefined; - } - level thread set_ignore_all(); - meat_poi = []; - meat_poi[ 0 ] = groundpos( level.item_meat.origin ); - meat_poi[ 1 ] = level.item_meat; - return meat_poi; - } - level._zombies_ignoring_all = 0; - return undefined; + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( abs( level.item_meat.origin[2] - groundpos( level.item_meat.origin )[2] ) < 35 ) + { + level._zombies_ignoring_all = 0; + level notify( "clear_ignore_all" ); + return undefined; + } + + level thread set_ignore_all(); + meat_poi = []; + meat_poi[0] = groundpos( level.item_meat.origin ); + meat_poi[1] = level.item_meat; + return meat_poi; + } + + level._zombies_ignoring_all = 0; + return undefined; } meat_end_match( winning_team ) { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ].has_minigun ) && players[ i ].has_minigun ) - { - primaryweapons = players[ i ] getweaponslistprimaries(); - x = 0; - while ( x < primaryweapons.size ) - { - if ( primaryweapons[ x ] == "minigun_zm" ) - { - players[ i ] takeweapon( "minigun_zm" ); - } - x++; - } - players[ i ] notify( "minigun_time_over" ); - players[ i ].zombie_vars[ "zombie_powerup_minigun_on" ] = 0; - players[ i ]._show_solo_hud = 0; - players[ i ].has_minigun = 0; - players[ i ].has_powerup_weapon = 0; - } - if ( isDefined( players[ i ]._has_meat_hud ) ) - { - players[ i ]._has_meat_hud destroy(); - } - if ( players[ i ] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) - { - players[ i ] takeweapon( get_gamemode_var( "item_meat_name" ) ); - players[ i ] decrement_is_drinking(); - } - i++; - } - level notify( "game_module_ended" ); - wait 0,1; - level delay_thread( 2, ::item_meat_clear ); - if ( isDefined( level.gameended ) && level.gameended ) - { - level clientnotify( "end_meat" ); - } + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i].has_minigun ) && players[i].has_minigun ) + { + primaryweapons = players[i] getweaponslistprimaries(); + + for ( x = 0; x < primaryweapons.size; x++ ) + { + if ( primaryweapons[x] == "minigun_zm" ) + players[i] takeweapon( "minigun_zm" ); + } + + players[i] notify( "minigun_time_over" ); + players[i].zombie_vars["zombie_powerup_minigun_on"] = 0; + players[i]._show_solo_hud = 0; + players[i].has_minigun = 0; + players[i].has_powerup_weapon = 0; + } + + if ( isdefined( players[i]._has_meat_hud ) ) + players[i]._has_meat_hud destroy(); + + if ( players[i] hasweapon( get_gamemode_var( "item_meat_name" ) ) ) + { + players[i] takeweapon( get_gamemode_var( "item_meat_name" ) ); + players[i] decrement_is_drinking(); + } + } + + level notify( "game_module_ended", winning_team ); + wait 0.1; + level delay_thread( 2, ::item_meat_clear ); + + if ( isdefined( level.gameended ) && level.gameended ) + level clientnotify( "end_meat" ); } updatedownedcounters() { - if ( self._encounters_team == "A" ) - { - level.team_a_downed++; - self thread waitforrevive( "A" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); - } - else - { - level.team_b_downed++; - self thread waitforrevive( "B" ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); - } + if ( self._encounters_team == "A" ) + { + level.team_a_downed++; + self thread waitforrevive( "A" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_a_downed, "A" ); + } + else + { + level.team_b_downed++; + self thread waitforrevive( "B" ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_revive_" + level.team_b_downed, "B" ); + } } waitforrevive( team ) { - self endon( "death" ); - self waittill( "player_revived" ); - if ( team == "A" ) - { - level.team_a_downed--; + self endon( "death" ); - } - else - { - level.team_b_downed--; + self waittill( "player_revived" ); - } + if ( team == "A" ) + level.team_a_downed--; + else + level.team_b_downed--; } assign_meat_to_team( player, team_num ) { - meat_team = undefined; - players = get_players(); - if ( isDefined( player ) ) - { - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else - { - if ( players[ i ] != player || isDefined( player._meat_hint_shown ) && player._meat_hint_shown ) - { - players[ i ] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); - } - } - i++; - } - meat_team = player._meat_team; - } - else - { - if ( isDefined( team_num ) ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ]._meat_team == team_num ) - { - players[ i ] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); - i++; - continue; - } - else - { - players[ i ] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); - } - i++; - } - meat_team = team_num; - } - } - level._meat_on_team = meat_team; - teamplayers = get_players_on_meat_team( meat_team ); - if ( isDefined( teamplayers ) && teamplayers.size > 0 ) - { - if ( teamplayers[ 0 ]._encounters_team == "B" ) - { - setteamhasmeat( "allies", 1 ); - setteamhasmeat( "axis", 0 ); - } - else - { - if ( teamplayers[ 0 ]._encounters_team == "A" ) - { - setteamhasmeat( "allies", 0 ); - setteamhasmeat( "axis", 1 ); - } - } - } - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ] ) ) - { - i++; - continue; - } - else if ( isDefined( player ) && players[ i ] == player ) - { - if ( isDefined( players[ i ]._has_meat ) && players[ i ]._has_meat ) - { - i++; - continue; - } - else - { - players[ i ]._has_meat = 1; - players[ i ] thread slow_down_player_with_meat(); - players[ i ] thread reset_meat_when_player_downed(); - players[ i ] thread reset_meat_when_player_disconnected(); - i++; - continue; - } - } - i++; - } + meat_team = undefined; + players = get_players(); + + if ( isdefined( player ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( players[i] != player || isdefined( player._meat_hint_shown ) && player._meat_hint_shown ) + players[i] iprintlnbold( &"ZOMBIE_GRABBED_MEAT", player.name ); + } + + meat_team = player._meat_team; + } + else if ( isdefined( team_num ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( players[i]._meat_team == team_num ) + { + players[i] iprintlnbold( &"ZOMBIE_YOUR_TEAM_MEAT" ); + continue; + } + + players[i] iprintlnbold( &"ZOMBIE_OTHER_TEAM_MEAT" ); + } + + meat_team = team_num; + } + + level._meat_on_team = meat_team; + teamplayers = get_players_on_meat_team( meat_team ); + + if ( isdefined( teamplayers ) && teamplayers.size > 0 ) + { + if ( teamplayers[0]._encounters_team == "B" ) + { + setteamhasmeat( "allies", 1 ); + setteamhasmeat( "axis", 0 ); + } + else if ( teamplayers[0]._encounters_team == "A" ) + { + setteamhasmeat( "allies", 0 ); + setteamhasmeat( "axis", 1 ); + } + } + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i] ) ) + continue; + + if ( isdefined( player ) && players[i] == player ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + continue; + + players[i]._has_meat = 1; + players[i] thread slow_down_player_with_meat(); + players[i] thread reset_meat_when_player_downed(); + players[i] thread reset_meat_when_player_disconnected(); + continue; + } + } } zmbvoxmeatonteamspecific( team ) { - if ( !isDefined( level.zmbvoxteamlasthadmeat ) ) - { - level.zmbvoxteamlasthadmeat = team; - } - if ( level.zmbvoxteamlasthadmeat == team ) - { - return; - } - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_grab", team ); - level.zmbvoxteamlasthadmeat = team; - otherteam = maps/mp/zombies/_zm_audio_announcer::getotherteam( team ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); + if ( !isdefined( level.zmbvoxteamlasthadmeat ) ) + level.zmbvoxteamlasthadmeat = team; + + if ( level.zmbvoxteamlasthadmeat == team ) + return; + + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab", team ); + level.zmbvoxteamlasthadmeat = team; + otherteam = maps\mp\zombies\_zm_audio_announcer::getotherteam( team ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_grab_" + otherteam, otherteam ); } create_meat_team_hud( meat_team, destroy_only ) { - if ( isDefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - if ( isDefined( destroy_only ) ) - { - return; - } - } - if ( !isDefined( meat_team ) ) - { - return; - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1,4; - elem.color = vectorScale( ( 0, 0, 0 ), 0,9 ); - elem.alpha = 1; - if ( isDefined( self._meat_team ) && self._meat_team == meat_team ) - { - elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; - } - else - { - elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; - } - self._has_meat_hud = elem; + if ( isdefined( self._has_meat_hud ) ) + { + self._has_meat_hud destroy(); + + if ( isdefined( destroy_only ) ) + return; + } + + if ( !isdefined( meat_team ) ) + return; + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + + if ( isdefined( self._meat_team ) && self._meat_team == meat_team ) + elem.label = &"ZOMBIE_TEAM_HAS_MEAT"; + else + elem.label = &"ZOMBIE_OTHER_TEAM_HAS_MEAT"; + + self._has_meat_hud = elem; } create_meat_player_hud() { - if ( isDefined( self._has_meat_hud ) ) - { - self._has_meat_hud destroy(); - } - elem = newclienthudelem( self ); - elem.hidewheninmenu = 1; - elem.horzalign = "LEFT"; - elem.vertalign = "BOTTOM"; - elem.alignx = "left"; - elem.aligny = "middle"; - elem.x = 10; - elem.y = -10; - elem.foreground = 1; - elem.font = "default"; - elem.fontscale = 1,4; - elem.color = vectorScale( ( 0, 0, 0 ), 0,9 ); - elem.alpha = 1; - elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; - self._has_meat_hud = elem; + if ( isdefined( self._has_meat_hud ) ) + self._has_meat_hud destroy(); + + elem = newclienthudelem( self ); + elem.hidewheninmenu = 1; + elem.horzalign = "LEFT"; + elem.vertalign = "BOTTOM"; + elem.alignx = "left"; + elem.aligny = "middle"; + elem.x = 10; + elem.y = -10; + elem.foreground = 1; + elem.font = "default"; + elem.fontscale = 1.4; + elem.color = vectorscale( ( 1, 1, 0 ), 0.9 ); + elem.alpha = 1.0; + elem.label = &"ZOMBIE_PLAYER_HAS_MEAT"; + self._has_meat_hud = elem; } slow_down_player_with_meat() { - self endon( "disconnect" ); - self setclientfield( "holding_meat", 1 ); - self setmovespeedscale( 0,6 ); - self thread zmbvoxstartholdcounter(); - while ( isDefined( self._has_meat ) && self._has_meat ) - { - level._meat_player_tracker_origin = self.origin; - wait 0,2; - } - self setmovespeedscale( 1 ); - self setclientfield( "holding_meat", 0 ); + self endon( "disconnect" ); + self setclientfield( "holding_meat", 1 ); + self setmovespeedscale( 0.6 ); + self thread zmbvoxstartholdcounter(); + + while ( isdefined( self._has_meat ) && self._has_meat ) + { + level._meat_player_tracker_origin = self.origin; + wait 0.2; + } + + self setmovespeedscale( 1 ); + self setclientfield( "holding_meat", 0 ); } zmbvoxstartholdcounter() { - meat_hold_counter = 0; - while ( isDefined( self._has_meat ) && self._has_meat ) - { - if ( meat_hold_counter >= 15 ) - { - self thread maps/mp/zombies/_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); - return; - } - else - { - wait 0,5; - meat_hold_counter++; - } - } + for ( meat_hold_counter = 0; isdefined( self._has_meat ) && self._has_meat; meat_hold_counter++ ) + { + if ( meat_hold_counter >= 15 ) + { + self thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "meat_hold" ); + break; + } + + wait 0.5; + } } reset_meat_when_player_downed() { - self notify( "reset_downed" ); - self endon( "reset_downed" ); - level endon( "meat_reset" ); - level endon( "meat_thrown" ); - self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); - self._has_meat = 0; - self._spawning_meat = 1; - grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", self.origin ); - wait 0,1; - self._spawning_meat = undefined; - level notify( "meat_reset" ); + self notify( "reset_downed" ); + self endon( "reset_downed" ); + level endon( "meat_reset" ); + level endon( "meat_thrown" ); + self waittill_any( "player_downed", "death", "fake_death", "replace_weapon_powerup" ); + self._has_meat = 0; + self._spawning_meat = 1; + grenade = self magicgrenadetype( get_gamemode_var( "item_meat_name" ), self.origin + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", self.origin ); + wait 0.1; + self._spawning_meat = undefined; + level notify( "meat_reset" ); } meat_last_stand_callback( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) { - if ( isDefined( self._has_meat ) && self._has_meat ) - { - level thread item_meat_drop( self.origin, self._meat_team ); - } + if ( isdefined( self._has_meat ) && self._has_meat ) + level thread item_meat_drop( self.origin, self._meat_team ); } reset_meat_when_player_disconnected() { - level endon( "meat_thrown" ); - level endon( "meat_reset" ); - level endon( "meat_end" ); - team = self._meat_team; - self waittill( "disconnect" ); - level thread item_meat_drop( level._meat_player_tracker_origin, team ); + level endon( "meat_thrown" ); + level endon( "meat_reset" ); + level endon( "meat_end" ); + team = self._meat_team; + + self waittill( "disconnect" ); + + level thread item_meat_drop( level._meat_player_tracker_origin, team ); } item_meat_drop( org, team ) { - players = get_alive_players_on_meat_team( team ); - if ( players.size > 0 ) - { - player = players[ 0 ]; - player endon( "disconnect" ); - player._spawning_meat = 1; - grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); - grenade._respawned_meat = 1; - level._last_person_to_throw_meat = undefined; - playsoundatposition( "zmb_spawn_powerup", grenade.origin ); - wait 0,1; - player._spawning_meat = undefined; - level notify( "meat_reset" ); - } + players = get_alive_players_on_meat_team( team ); + + if ( players.size > 0 ) + { + player = players[0]; + player endon( "disconnect" ); + player._spawning_meat = 1; + grenade = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org + ( randomintrange( 5, 10 ), randomintrange( 5, 10 ), 15 ), ( 0, 0, 0 ) ); + grenade._respawned_meat = 1; + level._last_person_to_throw_meat = undefined; + playsoundatposition( "zmb_spawn_powerup", grenade.origin ); + wait 0.1; + player._spawning_meat = undefined; + level notify( "meat_reset" ); + } } player_has_meat( player ) { - return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); + return player getcurrentweapon() == get_gamemode_var( "item_meat_name" ); } get_player_with_meat() { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isDefined( players[ i ]._has_meat ) && players[ i ]._has_meat ) - { - return players[ i ]; - } - i++; - } - return undefined; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( isdefined( players[i]._has_meat ) && players[i]._has_meat ) + return players[i]; + } + + return undefined; } spawn_player_meat_manager() { - self thread player_watch_weapon_change(); - self thread player_watch_grenade_throw(); + self thread player_watch_weapon_change(); + self thread player_watch_grenade_throw(); } player_watch_weapon_change() { - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( weapon == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_meat", self ); - continue; - } - else - { - add_meat_event( "player_no_meat", self ); - } - } + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "weapon_change", weapon ); + + if ( weapon == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_meat", self ); + continue; + } + + add_meat_event( "player_no_meat", self ); + } } player_watch_grenade_throw() { - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "grenade_fire", weapon, weapname ); - if ( weapname == get_gamemode_var( "item_meat_name" ) ) - { - add_meat_event( "player_grenade_fire", self, weapon ); - weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); - } - } + self endon( "death_or_disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", weapon, weapname ); + + if ( weapname == get_gamemode_var( "item_meat_name" ) ) + { + add_meat_event( "player_grenade_fire", self, weapon ); + weapon thread item_meat_on_spawn_retrieve_trigger( undefined, self, get_gamemode_var( "item_meat_name" ) ); + } + } } spawn_level_meat_manager() { /# - level.meat_manager = spawnstruct(); - level.meat_manager.events = []; - level.meat_manager thread handle_meat_events(); + level.meat_manager = spawnstruct(); + level.meat_manager.events = []; + level.meat_manager thread handle_meat_events(); #/ } add_meat_event( e, p1, p2, p3, p4 ) { /# - event = spawnstruct(); - event.e = e; - event.numparams = 0; - event.param = []; - if ( isDefined( p1 ) ) - { - event.param[ 0 ] = p1; - event.numparams = 1; - } - if ( isDefined( p2 ) ) - { - event.param[ 1 ] = p2; - event.numparams = 2; - } - if ( isDefined( p3 ) ) - { - event.param[ 2 ] = p3; - event.numparams = 3; - } - if ( isDefined( p4 ) ) - { - event.param[ 3 ] = p4; - event.numparams = 4; - } - level.meat_manager.events[ level.meat_manager.events.size ] = event; + event = spawnstruct(); + event.e = e; + event.numparams = 0; + event.param = []; + + if ( isdefined( p1 ) ) + { + event.param[0] = p1; + event.numparams = 1; + } + + if ( isdefined( p2 ) ) + { + event.param[1] = p2; + event.numparams = 2; + } + + if ( isdefined( p3 ) ) + { + event.param[2] = p3; + event.numparams = 3; + } + + if ( isdefined( p4 ) ) + { + event.param[3] = p4; + event.numparams = 4; + } + + if ( isdefined( level.meat_manager ) ) + level.meat_manager.events[level.meat_manager.events.size] = event; #/ } handle_meat_events() { - while ( 1 ) - { - while ( self.events.size ) - { - self handle_meat_event( self.events[ 0 ] ); - arrayremoveindex( self.events, 0 ); - } - wait 0,05; - } + while ( true ) + { + while ( self.events.size ) + { + self handle_meat_event( self.events[0] ); + arrayremoveindex( self.events, 0 ); + } + + wait 0.05; + } } paramstr( param ) { /# - if ( !isDefined( param ) ) - { - return "undefined"; - } - if ( isplayer( param ) ) - { - return param.name; - } - if ( !isstring( param ) && !isint( param ) || isfloat( param ) && isvec( param ) ) - { - return param; - } - if ( isarray( param ) ) - { - return "[]"; - } - return ""; + if ( !isdefined( param ) ) + return "undefined"; + + if ( isplayer( param ) ) + return param.name; + + if ( isstring( param ) || isint( param ) || isfloat( param ) || isvec( param ) ) + return param; + + if ( isarray( param ) ) + return "[]"; + + return ""; #/ } handle_meat_event( event ) { /# - estr = "ZM MEAT: [" + event.e + "]("; - i = 0; - while ( i < event.numparams ) - { - estr += paramstr( event.param[ i ] ); - if ( i < ( event.numparams - 1 ) ) - { - estr += ","; - } - i++; - } - estr += ") \n"; - println( estr ); + estr = "ZM MEAT: [" + event.e + "]("; + + for ( i = 0; i < event.numparams; i++ ) + { + estr += paramstr( event.param[i] ); + + if ( i < event.numparams - 1 ) + estr += ","; + } + + estr += ") \n"; + println( estr ); #/ } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc index c380171..eb15237 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/gametypes_zm/zstandard.gsc @@ -1,45 +1,46 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_ai_dogs; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_zm_gametype; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_dogs; +#include maps\mp\zombies\_zm; -main() //checked matches cerberus output +main() { - maps/mp/gametypes_zm/_zm_gametype::main(); - level.onprecachegametype = ::onprecachegametype; - level.onstartgametype = ::onstartgametype; - level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; - level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update; - maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" ); + maps\mp\gametypes_zm\_zm_gametype::main(); + level.onprecachegametype = ::onprecachegametype; + level.onstartgametype = ::onstartgametype; + level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func; + level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update; + maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" ); } -onprecachegametype() //checked matches cerberus output +onprecachegametype() { - level.playersuicideallowed = 1; - level.canplayersuicide = ::canplayersuicide; - level.suicide_weapon = "death_self_zm"; - precacheitem( "death_self_zm" ); - maps/mp/zombies/_zm_ai_dogs::init(); - maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); + level.playersuicideallowed = 1; + level.canplayersuicide = ::canplayersuicide; + level.suicide_weapon = "death_self_zm"; + precacheitem( "death_self_zm" ); + maps\mp\zombies\_zm_ai_dogs::init(); + maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" ); } -onstartgametype() //checked matches cerberus output +onstartgametype() { - maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype(); - maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); + maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype(); + maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); } -zstandard_main() //checked matches cerberus output +zstandard_main() { - level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); - if ( level.dog_rounds_allowed ) - { - maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); - } - level thread maps/mp/zombies/_zm::round_start(); - level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); + level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); + + if ( level.dog_rounds_allowed ) + maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds(); + + level thread maps\mp\zombies\_zm::round_start(); + level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies(); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc index 9ff7358..3ef07b3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_amb.gsc @@ -1,761 +1,698 @@ -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/_ambientpackage; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\_ambientpackage; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_sidequests; main() { - level.sndperksacolaloopoverride = ::sndperksacolaloop; - level.sndperksacolajingleoverride = ::sndperksacolajingle; - thread sndstingersetup(); - thread sndlastlifesetup(); - thread sndsetupendgamemusicstates(); - thread sndspectatorsetup(); - if ( is_classic() ) - { - thread sndmusicegg(); - } + level.sndperksacolaloopoverride = ::sndperksacolaloop; + level.sndperksacolajingleoverride = ::sndperksacolajingle; + thread sndstingersetup(); + thread sndlastlifesetup(); + thread sndsetupendgamemusicstates(); + thread sndspectatorsetup(); + + if ( is_classic() ) + thread sndmusicegg(); } sndspectatorsetup() { - flag_wait( "initial_players_connected" ); - players = getplayers(); - _a31 = players; - _k31 = getFirstArrayKey( _a31 ); - while ( isDefined( _k31 ) ) - { - player = _a31[ _k31 ]; - player thread sndspectatorafterliferevert(); - _k31 = getNextArrayKey( _a31, _k31 ); - } + flag_wait( "initial_players_connected" ); + players = getplayers(); + + foreach ( player in players ) + player thread sndspectatorafterliferevert(); } sndspectatorafterliferevert() { - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "spawned_spectator" ); - while ( self.sessionstate == "spectator" ) - { - wait 1; - } - self clientnotify( "sndSR" ); - } + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "spawned_spectator" ); + + while ( self.sessionstate == "spectator" ) + wait 1; + + self clientnotify( "sndSR" ); + } } sndsetupendgamemusicstates() { - flag_wait( "start_zombie_round_logic" ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" ); - level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" ); + flag_wait( "start_zombie_round_logic" ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" ); + level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" ); } sndperksacolajingle( perksacola ) { - if ( !isDefined( self.jingle_is_playing ) ) - { - self.jingle_is_playing = 0; - } - if ( !isDefined( self.script_sound ) ) - { - return; - } - if ( !isDefined( self.sndent ) ) - { - return; - } - if ( self.jingle_is_playing == 0 && level.music_override == 0 ) - { - self.jingle_is_playing = 1; - self.sndent stoploopsound( 1 ); - self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" ); - self.sndent waittill( "sndJingleDone" ); - self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 ); - self.jingle_is_playing = 0; - } + if ( !isdefined( self.jingle_is_playing ) ) + self.jingle_is_playing = 0; + + if ( !isdefined( self.script_sound ) ) + return; + + if ( !isdefined( self.sndent ) ) + return; + + if ( self.jingle_is_playing == 0 && level.music_override == 0 ) + { + self.jingle_is_playing = 1; + self.sndent stoploopsound( 1 ); + self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" ); + + self.sndent waittill( "sndJingleDone" ); + + self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 ); + self.jingle_is_playing = 0; + } } sndperksacolaloop() { - self endon( "death" ); - self.sndent = spawn( "script_origin", self.origin ); - self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 ); - while ( 1 ) - { - wait randomfloatrange( 31, 45 ); - if ( randomint( 100 ) < 15 ) - { - self thread sndperksacolajingle(); - } - } + self endon( "death" ); + self.sndent = spawn( "script_origin", self.origin ); + self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 ); + + while ( true ) + { + wait( randomfloatrange( 31, 45 ) ); + + if ( randomint( 100 ) < 15 ) + self thread sndperksacolajingle(); + } } sndeventstingertriggers() { - flag_wait( "start_zombie_round_logic" ); - triggers = getentarray( "sndMusicEventStinger", "targetname" ); - _a105 = triggers; - _k105 = getFirstArrayKey( _a105 ); - while ( isDefined( _k105 ) ) - { - trigger = _a105[ _k105 ]; - trigger thread sndeventstingertriggerthink(); - _k105 = getNextArrayKey( _a105, _k105 ); - } + flag_wait( "start_zombie_round_logic" ); + triggers = getentarray( "sndMusicEventStinger", "targetname" ); + + foreach ( trigger in triggers ) + trigger thread sndeventstingertriggerthink(); } sndeventstingertriggerthink() { - struct = getstruct( self.target, "targetname" ); - while ( 1 ) - { - self waittill( "trigger" ); - playsoundatposition( struct.script_sound, struct.origin ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trigger_stinger" ); - wait 5; - } + struct = getstruct( self.target, "targetname" ); + + while ( true ) + { + self waittill( "trigger" ); + + playsoundatposition( struct.script_sound, struct.origin ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trigger_stinger" ); + wait 5; + } } sndeventtension() { - flag_wait( "start_zombie_round_logic" ); - wait 30; - struct = spawnstruct(); - while ( 1 ) - { - tension = sndgettensionlevel( struct ); - waittime = tension.waittime; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( tension.tension_level ); - level thread waitfornexttension( waittime ); - level waittill( "sndNextTensionEvent" ); - } + flag_wait( "start_zombie_round_logic" ); + wait 30; + struct = spawnstruct(); + + while ( true ) + { + tension = sndgettensionlevel( struct ); + waittime = tension.waittime; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( tension.tension_level ); + level thread waitfornexttension( waittime ); + + level waittill( "sndNextTensionEvent" ); + } } sndgettensionlevel( struct ) { - tension_level = 0; - players = getplayers(); - _a148 = players; - _k148 = getFirstArrayKey( _a148 ); - while ( isDefined( _k148 ) ) - { - player = _a148[ _k148 ]; - if ( is_true( player.laststand ) ) - { - tension_level++; - } - _k148 = getNextArrayKey( _a148, _k148 ); - } - num_zombs = get_current_zombie_count(); - if ( num_zombs >= 12 ) - { - tension_level++; - } - enemies = getaispeciesarray( "axis", "all" ); - _a161 = enemies; - _k161 = getFirstArrayKey( _a161 ); - while ( isDefined( _k161 ) ) - { - enemy = _a161[ _k161 ]; - if ( enemy.animname == "brutus_zombie" ) - { - tension_level++; - } - _k161 = getNextArrayKey( _a161, _k161 ); - } - if ( tension_level > 2 ) - { - struct.tension_level = "tension_high"; - struct.waittime = 90; - } - else - { - struct.tension_level = "tension_low"; - struct.waittime = 140; - } - return struct; + tension_level = 0; + players = getplayers(); + + foreach ( player in players ) + { + if ( is_true( player.laststand ) ) + tension_level++; + } + + num_zombs = get_current_zombie_count(); + + if ( num_zombs >= 12 ) + tension_level++; + + enemies = getaispeciesarray( "axis", "all" ); + + foreach ( enemy in enemies ) + { + if ( enemy.animname == "brutus_zombie" ) + tension_level++; + } + + if ( tension_level > 2 ) + { + struct.tension_level = "tension_high"; + struct.waittime = 90; + } + else + { + struct.tension_level = "tension_low"; + struct.waittime = 140; + } + + return struct; } waitfornexttension( time ) { - level endon( "sndNextTensionEvent" ); - wait time; - level notify( "sndNextTensionEvent" ); + level endon( "sndNextTensionEvent" ); + wait( time ); + level notify( "sndNextTensionEvent" ); } sndboardmonitor() { - while ( 1 ) - { - level waittill( "last_board_torn", barrier_origin ); - players = getplayers(); - _a194 = players; - _k194 = getFirstArrayKey( _a194 ); - while ( isDefined( _k194 ) ) - { - player = _a194[ _k194 ]; - if ( distancesquared( player.origin, barrier_origin ) <= 22500 ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" ); - break; - } - else - { - _k194 = getNextArrayKey( _a194, _k194 ); - } - } - } + while ( true ) + { + level waittill( "last_board_torn", barrier_origin ); + + players = getplayers(); + + foreach ( player in players ) + { + if ( distancesquared( player.origin, barrier_origin ) <= 22500 ) + { + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" ); + break; + } + } + } } locationstingersetup() { - level thread locationstingerwait(); + level thread locationstingerwait(); } locationstingerwait( zone_name, type ) { - array = sndlocationsarray(); - sndnorepeats = 3; - numcut = 0; - level.sndlastzone = undefined; - level thread sndlocationbetweenroundswait(); - for ( ;; ) - { - while ( 1 ) - { - level waittill( "newzoneActive", activezone ); - while ( !sndlocationshouldplay( array, activezone ) ) - { - continue; - } - if ( is_true( level.sndroundwait ) ) - { - } - } - else while ( is_true( level.sndstinger.isplaying ) ) - { - level thread sndlocationqueue( activezone ); - } - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone ); - array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats ); - level.sndlastzone = activezone; - if ( numcut >= sndnorepeats ) - { - numcut = 0; - } - else - { - numcut++; - } - level waittill( "between_round_over" ); - while ( is_true( level.sndroundwait ) ) - { - wait 0,1; - } - } + array = sndlocationsarray(); + sndnorepeats = 3; + numcut = 0; + level.sndlastzone = undefined; + level thread sndlocationbetweenroundswait(); + + while ( true ) + { + level waittill( "newzoneActive", activezone ); + + if ( !sndlocationshouldplay( array, activezone ) ) + continue; + + if ( is_true( level.sndroundwait ) ) + continue; + else if ( is_true( level.sndstinger.isplaying ) ) + { + level thread sndlocationqueue( activezone ); + continue; + } + + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone ); + array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats ); + level.sndlastzone = activezone; + + if ( numcut >= sndnorepeats ) + numcut = 0; + else + numcut++; + + level waittill( "between_round_over" ); + + while ( is_true( level.sndroundwait ) ) + wait 0.1; + } } sndlocationsarray() { - array = []; - array[ 0 ] = "zone_cellblock_east"; - array[ 1 ] = "cellblock_shower"; - array[ 2 ] = "zone_infirmary"; - array[ 3 ] = "zone_citadel_stairs"; - array[ 4 ] = "zone_roof"; - array[ 5 ] = "zone_dock"; - array[ 6 ] = "zone_studio"; - array[ 7 ] = "zone_warden_office"; - return array; + array = []; + array[0] = "zone_cellblock_east"; + array[1] = "cellblock_shower"; + array[2] = "zone_infirmary"; + array[3] = "zone_citadel_stairs"; + array[4] = "zone_roof"; + array[5] = "zone_dock"; + array[6] = "zone_studio"; + array[7] = "zone_warden_office"; + return array; } sndlocationshouldplay( array, activezone ) { - shouldplay = 0; - _a280 = array; - _k280 = getFirstArrayKey( _a280 ); - while ( isDefined( _k280 ) ) - { - place = _a280[ _k280 ]; - if ( place == activezone ) - { - shouldplay = 1; - } - _k280 = getNextArrayKey( _a280, _k280 ); - } - if ( shouldplay == 0 ) - { - return shouldplay; - } - playersinlocal = 0; - players = getplayers(); - _a291 = players; - _k291 = getFirstArrayKey( _a291 ); - while ( isDefined( _k291 ) ) - { - player = _a291[ _k291 ]; - if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) ) - { - if ( !is_true( player.afterlife ) ) - { - playersinlocal++; - } - } - _k291 = getNextArrayKey( _a291, _k291 ); - } - if ( playersinlocal >= 1 ) - { - shouldplay = 1; - } - else - { - shouldplay = 0; - } - return shouldplay; + shouldplay = 0; + + foreach ( place in array ) + { + if ( place == activezone ) + shouldplay = 1; + } + + if ( shouldplay == 0 ) + return shouldplay; + + playersinlocal = 0; + players = getplayers(); + + foreach ( player in players ) + { + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) ) + { + if ( !is_true( player.afterlife ) ) + playersinlocal++; + } + } + + if ( playersinlocal >= 1 ) + shouldplay = 1; + else + shouldplay = 0; + + return shouldplay; } sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed ) { - if ( numcut >= max_num_removed ) - { - current_array = sndlocationsarray(); - } - _a314 = current_array; - _k314 = getFirstArrayKey( _a314 ); - while ( isDefined( _k314 ) ) - { - place = _a314[ _k314 ]; - if ( place == activezone ) - { - arrayremovevalue( current_array, place ); - break; - } - else - { - _k314 = getNextArrayKey( _a314, _k314 ); - } - } - return current_array; + if ( numcut >= max_num_removed ) + current_array = sndlocationsarray(); + + foreach ( place in current_array ) + { + if ( place == activezone ) + { + arrayremovevalue( current_array, place ); + break; + } + } + + return current_array; } sndlocationbetweenrounds() { - level endon( "newzoneActive" ); - activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); - _a331 = activezones; - _k331 = getFirstArrayKey( _a331 ); - while ( isDefined( _k331 ) ) - { - zone = _a331[ _k331 ]; - if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone ) - { - } - else - { - players = getplayers(); - _a337 = players; - _k337 = getFirstArrayKey( _a337 ); - while ( isDefined( _k337 ) ) - { - player = _a337[ _k337 ]; - if ( is_true( player.afterlife ) ) - { - } - else - { - if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) ) - { - wait 0,1; - level notify( "newzoneActive" ); - return; - } - } - _k337 = getNextArrayKey( _a337, _k337 ); - } - } - _k331 = getNextArrayKey( _a331, _k331 ); - } + level endon( "newzoneActive" ); + activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); + + foreach ( zone in activezones ) + { + if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone ) + continue; + + players = getplayers(); + + foreach ( player in players ) + { + if ( is_true( player.afterlife ) ) + continue; + + if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) ) + { + wait 0.1; + level notify( "newzoneActive", zone ); + return; + } + } + } } sndlocationbetweenroundswait() { - flag_wait( "afterlife_start_over" ); - while ( is_true( level.sndroundwait ) ) - { - wait 0,1; - } - while ( 1 ) - { - level thread sndlocationbetweenrounds(); - level waittill( "between_round_over" ); - while ( is_true( level.sndroundwait ) ) - { - wait 0,1; - } - } + flag_wait( "afterlife_start_over" ); + + while ( is_true( level.sndroundwait ) ) + wait 0.1; + + while ( true ) + { + level thread sndlocationbetweenrounds(); + + level waittill( "between_round_over" ); + + while ( is_true( level.sndroundwait ) ) + wait 0.1; + } } sndlocationqueue( zone ) { - level endon( "newzoneActive" ); - while ( is_true( level.sndstinger.isplaying ) ) - { - wait 0,5; - } - level notify( "newzoneActive" ); + level endon( "newzoneActive" ); + + while ( is_true( level.sndstinger.isplaying ) ) + wait 0.5; + + level notify( "newzoneActive", zone ); } sndstingersetup() { - level.sndmusicstingerevent = ::sndplaystinger; - level.sndstinger = spawnstruct(); - level.sndstinger.ent = spawn( "script_origin", ( 0, 0, 0 ) ); - level.sndstinger.queue = 0; - level.sndstinger.isplaying = 0; - level.sndstinger.states = []; - level.sndroundwait = 1; - createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" ); - createstingerstate( "gondola", "mus_event_tension_strings_01", 0,1, "reject" ); - createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" ); - createstingerstate( "trigger_stinger", "mus_event_group_02", 0,1, "ignore" ); - createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1,5, "queue" ); - createstingerstate( "brutus_death", "mus_event_brutus_death", 0,1, "ignore" ); - createstingerstate( "tension_low", "mus_event_tension_piano_01", 0,75, "reject" ); - createstingerstate( "tension_high", "mus_event_tension_piano_02", 0,75, "reject" ); - createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0,75, "queue" ); - createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0,75, "queue" ); - createstingerstate( "zone_studio", "mus_event_location_powerroom", 0,75, "queue" ); - createstingerstate( "zone_roof", "mus_event_location_roof", 0,75, "queue" ); - createstingerstate( "cellblock_shower", "mus_event_location_shower", 0,75, "queue" ); - createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0,75, "queue" ); - createstingerstate( "zone_dock", "mus_event_location_dock", 0,75, "queue" ); - createstingerstate( "zone_warden_office", "mus_event_location_warden", 0,75, "queue" ); - createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" ); - createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" ); - createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" ); - createstingerstate( "piece_4", "mus_event_piece_4", 0, "queue" ); - createstingerstate( "piece_5", "mus_event_piece_5", 0, "queue" ); - createstingerstate( "piece_mid", "mus_event_piece_mid", 0, "ignore" ); - createstingerstate( "gas_1", "mus_event_piece_1", 0, "reject" ); - createstingerstate( "gas_2", "mus_event_piece_2", 0, "reject" ); - createstingerstate( "gas_3", "mus_event_piece_3", 0, "reject" ); - createstingerstate( "gas_4", "mus_event_piece_4", 0, "reject" ); - createstingerstate( "gas_5", "mus_event_piece_5", 0, "reject" ); - createstingerstate( "plane_crafted_1", "mus_event_plane_1", 0, "reject" ); - createstingerstate( "plane_crafted_2", "mus_event_plane_2", 0, "reject" ); - createstingerstate( "plane_crafted_3", "mus_event_plane_3", 0, "reject" ); - createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" ); - createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" ); - createstingerstate( "trap", "mus_event_trap", 0, "reject" ); - createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0,5, "ignore" ); - createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0,5, "ignore" ); - createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0,5, "ignore" ); - createstingerstate( "quest_generic", "mus_event_quest_generic", 0,5, "reject" ); - createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" ); - createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" ); - createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" ); - createstingerstate( "spoon", "mus_event_spoon", 0, "ignore" ); - createstingerstate( "spork", "mus_event_spork", 0, "ignore" ); - level thread sndstingerroundwait(); - level thread sndboardmonitor(); - level thread locationstingersetup(); + level.sndmusicstingerevent = ::sndplaystinger; + level.sndstinger = spawnstruct(); + level.sndstinger.ent = spawn( "script_origin", ( 0, 0, 0 ) ); + level.sndstinger.queue = 0; + level.sndstinger.isplaying = 0; + level.sndstinger.states = []; + level.sndroundwait = 1; + createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" ); + createstingerstate( "gondola", "mus_event_tension_strings_01", 0.1, "reject" ); + createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" ); + createstingerstate( "trigger_stinger", "mus_event_group_02", 0.1, "ignore" ); + createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1.5, "queue" ); + createstingerstate( "brutus_death", "mus_event_brutus_death", 0.1, "ignore" ); + createstingerstate( "tension_low", "mus_event_tension_piano_01", 0.75, "reject" ); + createstingerstate( "tension_high", "mus_event_tension_piano_02", 0.75, "reject" ); + createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0.75, "queue" ); + createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0.75, "queue" ); + createstingerstate( "zone_studio", "mus_event_location_powerroom", 0.75, "queue" ); + createstingerstate( "zone_roof", "mus_event_location_roof", 0.75, "queue" ); + createstingerstate( "cellblock_shower", "mus_event_location_shower", 0.75, "queue" ); + createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0.75, "queue" ); + createstingerstate( "zone_dock", "mus_event_location_dock", 0.75, "queue" ); + createstingerstate( "zone_warden_office", "mus_event_location_warden", 0.75, "queue" ); + createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" ); + createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" ); + createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" ); + createstingerstate( "piece_4", "mus_event_piece_4", 0, "queue" ); + createstingerstate( "piece_5", "mus_event_piece_5", 0, "queue" ); + createstingerstate( "piece_mid", "mus_event_piece_mid", 0, "ignore" ); + createstingerstate( "gas_1", "mus_event_piece_1", 0, "reject" ); + createstingerstate( "gas_2", "mus_event_piece_2", 0, "reject" ); + createstingerstate( "gas_3", "mus_event_piece_3", 0, "reject" ); + createstingerstate( "gas_4", "mus_event_piece_4", 0, "reject" ); + createstingerstate( "gas_5", "mus_event_piece_5", 0, "reject" ); + createstingerstate( "plane_crafted_1", "mus_event_plane_1", 0, "reject" ); + createstingerstate( "plane_crafted_2", "mus_event_plane_2", 0, "reject" ); + createstingerstate( "plane_crafted_3", "mus_event_plane_3", 0, "reject" ); + createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" ); + createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" ); + createstingerstate( "trap", "mus_event_trap", 0, "reject" ); + createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0.5, "ignore" ); + createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0.5, "ignore" ); + createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0.5, "ignore" ); + createstingerstate( "quest_generic", "mus_event_quest_generic", 0.5, "reject" ); + createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" ); + createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" ); + createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" ); + createstingerstate( "spoon", "mus_event_spoon", 0, "ignore" ); + createstingerstate( "spork", "mus_event_spork", 0, "ignore" ); + level thread sndstingerroundwait(); + level thread sndboardmonitor(); + level thread locationstingersetup(); } createstingerstate( state, alias, prewait, interrupt ) { - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - s.states[ state ] = spawnstruct(); - s.states[ state ].alias = alias; - s.states[ state ].prewait = prewait; - s.states[ state ].interrupt = interrupt; - } + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + { + s.states[state] = spawnstruct(); + s.states[state].alias = alias; + s.states[state].prewait = prewait; + s.states[state].interrupt = interrupt; + } } sndplaystinger( state, player ) { - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - return; - } - interrupt = s.states[ state ].interrupt == "ignore"; - if ( !is_true( s.isplaying ) || is_true( interrupt ) ) - { - if ( interrupt ) - { - wait s.states[ state ].prewait; - playstinger( state, player, 1 ); - } - else if ( !level.sndroundwait ) - { - s.isplaying = 1; - wait s.states[ state ].prewait; - playstinger( state, player, 0 ); - level notify( "sndStingerDone" ); - s.isplaying = 0; - } - else - { - if ( s.states[ state ].interrupt == "queue" ) - { - level thread sndqueuestinger( state, player ); - } - } - return; - } - if ( s.states[ state ].interrupt == "queue" ) - { - level thread sndqueuestinger( state, player ); - } + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + return; + + interrupt = s.states[state].interrupt == "ignore"; + + if ( !is_true( s.isplaying ) || is_true( interrupt ) ) + { + if ( interrupt ) + { + wait( s.states[state].prewait ); + playstinger( state, player, 1 ); + } + else if ( !level.sndroundwait ) + { + s.isplaying = 1; + wait( s.states[state].prewait ); + playstinger( state, player, 0 ); + level notify( "sndStingerDone" ); + s.isplaying = 0; + } + else if ( s.states[state].interrupt == "queue" ) + level thread sndqueuestinger( state, player ); + + return; + } + + if ( s.states[state].interrupt == "queue" ) + level thread sndqueuestinger( state, player ); } playstinger( state, player, ignore ) { - s = level.sndstinger; - if ( !isDefined( s.states[ state ] ) ) - { - return; - } - if ( is_true( level.music_override ) ) - { - return; - } - if ( is_true( ignore ) ) - { - if ( isDefined( player ) ) - { - player playsoundtoplayer( s.states[ state ].alias, player ); - } - else - { - s.ent playsound( s.states[ state ].alias ); - } - } - else if ( isDefined( player ) ) - { - player playsoundtoplayer( s.states[ state ].alias, player ); - wait 8; - } - else - { - s.ent playsoundwithnotify( s.states[ state ].alias, "sndStingerDone" ); - s.ent waittill( "sndStingerDone" ); - } + s = level.sndstinger; + + if ( !isdefined( s.states[state] ) ) + return; + + if ( is_true( level.music_override ) ) + return; + + if ( is_true( ignore ) ) + { + if ( isdefined( player ) ) + player playsoundtoplayer( s.states[state].alias, player ); + else + s.ent playsound( s.states[state].alias ); + } + else if ( isdefined( player ) ) + { + player playsoundtoplayer( s.states[state].alias, player ); + wait 8; + } + else + { + s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" ); + + s.ent waittill( "sndStingerDone" ); + } } sndqueuestinger( state, player ) { - s = level.sndstinger; - if ( is_true( s.queue ) ) - { - return; - } - else - { - s.queue = 1; - while ( 1 ) - { - if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) ) - { - wait 0,5; - continue; - } - else - { - } - } - level thread sndplaystinger( state, player ); - s.queue = 0; - } + s = level.sndstinger; + + if ( is_true( s.queue ) ) + return; + else + { + s.queue = 1; + + while ( true ) + { + if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) ) + wait 0.5; + else + break; + } + + level thread sndplaystinger( state, player ); + s.queue = 0; + } } sndstingerroundwait() { - flag_wait( "afterlife_start_over" ); - wait 28; - level.sndroundwait = 0; - while ( 1 ) - { - level waittill( "end_of_round" ); - level notify( "sndStopBrutusLoop" ); - level thread sndstingerroundwait_start(); - } + flag_wait( "afterlife_start_over" ); + wait 28; + level.sndroundwait = 0; + + while ( true ) + { + level waittill( "end_of_round" ); + + level notify( "sndStopBrutusLoop" ); + level thread sndstingerroundwait_start(); + } } sndstingerroundwait_start() { - level.sndroundwait = 1; - wait 0,05; - level thread sndstingerroundwait_end(); + level.sndroundwait = 1; + wait 0.05; + level thread sndstingerroundwait_end(); } sndstingerroundwait_end() { - level endon( "end_of_round" ); - level waittill( "between_round_over" ); - wait 28; - level.sndroundwait = 0; + level endon( "end_of_round" ); + + level waittill( "between_round_over" ); + + wait 28; + level.sndroundwait = 0; } sndlastlifesetup() { - flag_wait( "start_zombie_round_logic" ); - if ( flag( "solo_game" ) ) - { - level thread sndlastlife_solo(); - } - else - { - level thread sndlastlife_multi(); - } + flag_wait( "start_zombie_round_logic" ); + + if ( flag( "solo_game" ) ) + level thread sndlastlife_solo(); + else + level thread sndlastlife_multi(); } sndlastlife_solo() { - return; - player = getplayers()[ 0 ]; - while ( 1 ) - { - player waittill( "sndLifeGone" ); - if ( player.lives == 0 ) - { - while ( is_true( player.afterlife ) ) - { - wait 0,1; - } - level notify( "sndStopBrutusLoop" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" ); - level waittill( "end_of_round" ); - } - } + return; + player = getplayers()[0]; + + while ( true ) + { + player waittill( "sndLifeGone" ); + + if ( player.lives == 0 ) + { + while ( is_true( player.afterlife ) ) + wait 0.1; + + level notify( "sndStopBrutusLoop" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" ); + + level waittill( "end_of_round" ); + } + } } sndlastlife_multi() { - level endon( "end_of_round" ); - level thread sndlastlife_multi_reset(); - sndplayersdead = 0; - while ( 1 ) - { - level waittill( "bleed_out" ); - sndplayersdead++; - players = getplayers(); - if ( ( players.size - sndplayersdead ) <= 1 ) - { - last_alive = sndlastlife_multi_getlastplayer(); - while ( last_alive.lives > 0 ) - { - wait 0,1; - } - while ( is_true( last_alive.afterlife ) ) - { - wait 0,1; - } - level notify( "sndStopBrutusLoop" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" ); - return; - } - } + level endon( "end_of_round" ); + level thread sndlastlife_multi_reset(); + sndplayersdead = 0; + + while ( true ) + { + level waittill( "bleed_out" ); + + sndplayersdead++; + players = getplayers(); + + if ( players.size - sndplayersdead <= 1 ) + { + last_alive = sndlastlife_multi_getlastplayer(); + + while ( last_alive.lives > 0 ) + wait 0.1; + + while ( is_true( last_alive.afterlife ) ) + wait 0.1; + + level notify( "sndStopBrutusLoop" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" ); + return; + } + } } sndlastlife_multi_getlastplayer() { - level endon( "end_of_round" ); - wait 0,5; - players = getplayers(); - _a645 = players; - _k645 = getFirstArrayKey( _a645 ); - while ( isDefined( _k645 ) ) - { - dude = _a645[ _k645 ]; - if ( dude.sessionstate == "spectator" ) - { - } - else - { - return dude; - } - _k645 = getNextArrayKey( _a645, _k645 ); - } + level endon( "end_of_round" ); + wait 0.5; + players = getplayers(); + + foreach ( dude in players ) + { + if ( dude.sessionstate == "spectator" ) + continue; + + return dude; + } } sndlastlife_multi_reset() { - level waittill( "end_of_round" ); - level thread sndlastlife_multi(); + level waittill( "end_of_round" ); + + level thread sndlastlife_multi(); } sndmusicegg() { - origins = []; - origins[ 0 ] = ( 338, 10673, 1378 ); - origins[ 1 ] = ( 2897, 9475, 1564 ); - origins[ 2 ] = ( -1157, 5217, -72 ); - level.meteor_counter = 0; - level.music_override = 0; - i = 0; - while ( i < origins.size ) - { - level thread sndmusicegg_wait( origins[ i ] ); - i++; - } + origins = []; + origins[0] = ( 338, 10673, 1378 ); + origins[1] = ( 2897, 9475, 1564 ); + origins[2] = ( -1157, 5217, -72 ); + level.meteor_counter = 0; + level.music_override = 0; + + for ( i = 0; i < origins.size; i++ ) + level thread sndmusicegg_wait( origins[i] ); } sndmusicegg_wait( bottle_origin ) { - temp_ent = spawn( "script_origin", bottle_origin ); - temp_ent playloopsound( "zmb_meteor_loop" ); - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); - temp_ent waittill( "main_music_egg_hit", player ); - temp_ent stoploopsound( 1 ); - player playsound( "zmb_meteor_activate" ); - level.meteor_counter += 1; - if ( level.meteor_counter == 3 ) - { - level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 170 ); - level thread easter_egg_song_vo( player ); - } - else - { - wait 1,5; - temp_ent delete(); - } + temp_ent = spawn( "script_origin", bottle_origin ); + temp_ent playloopsound( "zmb_meteor_loop" ); + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + temp_ent stoploopsound( 1 ); + player playsound( "zmb_meteor_activate" ); + level.meteor_counter += 1; + + if ( level.meteor_counter == 3 ) + { + level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 170 ); + level thread easter_egg_song_vo( player ); + } + else + { + wait 1.5; + temp_ent delete(); + } } sndmusicegg_override() { - if ( is_true( level.music_override ) ) - { - return 0; - } - return 1; + if ( is_true( level.music_override ) ) + return false; + + return true; } sndmuseggplay( ent, alias, time ) { - level.music_override = 1; - wait 1; - ent playsound( alias ); - level thread sndeggmusicwait( time ); - level waittill_either( "end_game", "sndSongDone" ); - ent stopsounds(); - wait 0,05; - ent delete(); - level.music_override = 0; + level.music_override = 1; + wait 1; + ent playsound( alias ); + level thread sndeggmusicwait( time ); + level waittill_either( "end_game", "sndSongDone" ); + ent stopsounds(); + wait 0.05; + ent delete(); + level.music_override = 0; } sndeggmusicwait( time ) { - level endon( "end_game" ); - wait time; - level notify( "sndSongDone" ); + level endon( "end_game" ); + wait( time ); + level notify( "sndSongDone" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc index fac439a..781efa8 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_classic.gsc @@ -1,304 +1,314 @@ -//checked includes changed to match cerberus output -#include maps/mp/zm_prison_sq_wth; -#include maps/mp/zm_prison_sq_fc; -#include maps/mp/zm_prison_sq_final; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zm_alcatraz_travel; -#include maps/mp/zm_alcatraz_traps; -#include maps/mp/zm_prison; -#include maps/mp/zm_alcatraz_sq; -#include maps/mp/zm_prison_sq_bg; -#include maps/mp/zm_prison_spoon; -#include maps/mp/zm_prison_achievement; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_afterlife; -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/zm_alcatraz_craftables; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_alcatraz_craftables; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_prison_achievement; +#include maps\mp\zm_prison_spoon; +#include maps\mp\zm_prison_sq_bg; +#include maps\mp\zm_alcatraz_sq; +#include maps\mp\zm_prison; +#include maps\mp\zm_alcatraz_traps; +#include maps\mp\zm_alcatraz_travel; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zm_prison_sq_final; +#include maps\mp\zm_prison_sq_fc; +#include maps\mp\zm_prison_sq_wth; -precache() //checked matches cerberus output +precache() { - if ( isDefined( level.createfx_enabled ) && level.createfx_enabled ) - { - return; - } - maps/mp/zombies/_zm_craftables::init(); - maps/mp/zm_alcatraz_craftables::include_craftables(); - maps/mp/zm_alcatraz_craftables::init_craftables(); - maps/mp/zombies/_zm_ai_brutus::precache(); - maps/mp/zombies/_zm_afterlife::init(); - precacheshader( "waypoint_kill_red" ); - level._effect[ "powerup_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" ); + if ( isdefined( level.createfx_enabled ) && level.createfx_enabled ) + return; + + maps\mp\zombies\_zm_craftables::init(); + maps\mp\zm_alcatraz_craftables::include_craftables(); + maps\mp\zm_alcatraz_craftables::init_craftables(); + maps\mp\zombies\_zm_ai_brutus::precache(); + maps\mp\zombies\_zm_afterlife::init(); + precacheshader( "waypoint_kill_red" ); + level._effect["powerup_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" ); } -main() //checked changed to match cerberus output +main() { - level thread sq_main_controller(); - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "zclassic" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - maps/mp/zombies/_zm_ai_brutus::init(); - level thread maps/mp/zombies/_zm_craftables::think_craftables(); - maps/mp/zm_prison_achievement::init(); - level thread maps/mp/zm_prison_spoon::init(); - level thread maps/mp/zm_prison_sq_bg::init(); - a_grief_clips = getentarray( "grief_clips", "targetname" ); - foreach ( clip in a_grief_clips ) - { - clip connectpaths(); - clip delete(); - } - level thread give_afterlife(); - level thread maps/mp/zm_alcatraz_sq::start_alcatraz_sidequest(); - onplayerconnect_callback( ::player_quest_vfx ); - flag_wait( "initial_blackscreen_passed" ); - level notify( "Pack_A_Punch_on" ); - flag_wait( "start_zombie_round_logic" ); - level thread maps/mp/zm_prison::delete_perk_machine_clip(); - level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs(); - level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs(); - level thread maps/mp/zm_alcatraz_traps::init_tower_trap_trigs(); - level thread maps/mp/zm_alcatraz_travel::init_alcatraz_zipline(); - level thread power_on_perk_machines(); - level thread afterlife_powerups(); - level thread afterlife_intro_door(); - level thread afterlife_cell_door_1(); - level thread afterlife_cell_door_2(); - level thread blundergat_upgrade_station(); + level thread sq_main_controller(); + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "zclassic" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + maps\mp\zombies\_zm_ai_brutus::init(); + level thread maps\mp\zombies\_zm_craftables::think_craftables(); + maps\mp\zm_prison_achievement::init(); + level thread maps\mp\zm_prison_spoon::init(); + level thread maps\mp\zm_prison_sq_bg::init(); + a_grief_clips = getentarray( "grief_clips", "targetname" ); + + foreach ( clip in a_grief_clips ) + { + clip connectpaths(); + clip delete(); + } + + level thread give_afterlife(); + level thread maps\mp\zm_alcatraz_sq::start_alcatraz_sidequest(); + onplayerconnect_callback( ::player_quest_vfx ); + flag_wait( "initial_blackscreen_passed" ); + level notify( "Pack_A_Punch_on" ); + flag_wait( "start_zombie_round_logic" ); + level thread maps\mp\zm_prison::delete_perk_machine_clip(); + level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs(); + level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs(); + level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs(); + level thread maps\mp\zm_alcatraz_travel::init_alcatraz_zipline(); + level thread power_on_perk_machines(); + level thread afterlife_powerups(); + level thread afterlife_intro_door(); + level thread afterlife_cell_door_1(); + level thread afterlife_cell_door_2(); + level thread blundergat_upgrade_station(); } -zm_treasure_chest_init() //checked matches cerberus output +zm_treasure_chest_init() { - chest1 = getstruct( "start_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); + chest1 = getstruct( "start_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); } -give_afterlife() //checked changed to match cerberus output +give_afterlife() { - onplayerconnect_callback( maps/mp/zombies/_zm_afterlife::init_player ); - flag_wait( "initial_players_connected" ); - wait 0.5; - n_start_pos = 1; - a_players = getplayers(); - foreach ( player in a_players ) - { - if ( isDefined( player.afterlife ) && !player.afterlife ) - { - player thread fake_kill_player( n_start_pos ); - n_start_pos++; - } - } + onplayerconnect_callback( maps\mp\zombies\_zm_afterlife::init_player ); + flag_wait( "initial_players_connected" ); + wait 0.5; + n_start_pos = 1; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.afterlife ) && !player.afterlife ) + { + player thread fake_kill_player( n_start_pos ); + n_start_pos++; + } + } } -fake_kill_player( n_start_pos ) //checked changed to match cerberus output +fake_kill_player( n_start_pos ) { - self afterlife_remove(); - self.afterlife = 1; - self thread afterlife_laststand(); - self waittill( "player_fake_corpse_created" ); - self thread afterlife_tutorial(); - e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" ); - trace_start = e_corpse_location.origin; - trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, -1 ), 100 ); - corpse_trace = physicstrace( trace_start, trace_end, vectorScale( ( -1, -1, 0 ), 10 ), vectorScale( ( 1, 1, 0 ), 10 ), self.e_afterlife_corpse ); - self.e_afterlife_corpse.origin = corpse_trace[ "position" ]; - vec_to_target = self.e_afterlife_corpse.origin - self.origin; - vec_to_target = vectorToAngles( vec_to_target ); - vec_to_target = ( 0, vec_to_target[ 1 ], 0 ); - self setplayerangles( vec_to_target ); - self notify( "al_all_setup" ); + self afterlife_remove(); + self.afterlife = 1; + self thread afterlife_laststand(); + + self waittill( "player_fake_corpse_created" ); + + self thread afterlife_tutorial(); + e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" ); + trace_start = e_corpse_location.origin; + trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 ); + corpse_trace = physicstrace( trace_start, trace_end, vectorscale( ( -1, -1, 0 ), 10.0 ), vectorscale( ( 1, 1, 0 ), 10.0 ), self.e_afterlife_corpse ); + self.e_afterlife_corpse.origin = corpse_trace["position"]; + vec_to_target = self.e_afterlife_corpse.origin - self.origin; + vec_to_target = vectortoangles( vec_to_target ); + vec_to_target = ( 0, vec_to_target[1], 0 ); + self setplayerangles( vec_to_target ); + self notify( "al_all_setup" ); } -afterlife_tutorial() //checked matches cerberus output +afterlife_tutorial() { - self endon( "disconnect" ); - level endon( "end_game" ); - flag_wait( "start_zombie_round_logic" ); - wait 3; - self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" ); - self thread afterlife_tutorial_attack_watch(); - waittill_notify_or_timeout( "stop_tutorial", 5 ); - self thread destroy_tutorial_message(); - wait 1; - if ( isDefined( self.afterlife ) && self.afterlife ) - { - self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" ); - self thread afterlife_tutorial_jump_watch(); - waittill_notify_or_timeout( "stop_tutorial", 5 ); - self thread destroy_tutorial_message(); - } + self endon( "disconnect" ); + level endon( "end_game" ); + flag_wait( "start_zombie_round_logic" ); + wait 3; + self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" ); + self thread afterlife_tutorial_attack_watch(); + waittill_notify_or_timeout( "stop_tutorial", 5 ); + self thread destroy_tutorial_message(); + wait 1; + + if ( isdefined( self.afterlife ) && self.afterlife ) + { + self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" ); + self thread afterlife_tutorial_jump_watch(); + waittill_notify_or_timeout( "stop_tutorial", 5 ); + self thread destroy_tutorial_message(); + } } -afterlife_tutorial_attack_watch() //checked matches cerberus output +afterlife_tutorial_attack_watch() { - self endon( "stop_tutorial" ); - self endon( "disconnect" ); - while ( isDefined( self.afterlife ) && self.afterlife && !self isfiring() ) - { - wait 0.05; - } - wait 0.2; - self notify( "stop_tutorial" ); + self endon( "stop_tutorial" ); + self endon( "disconnect" ); + + while ( isdefined( self.afterlife ) && self.afterlife && !self isfiring() ) + wait 0.05; + + wait 0.2; + self notify( "stop_tutorial" ); } -afterlife_tutorial_jump_watch() //checked matches cerberus output +afterlife_tutorial_jump_watch() { - self endon( "stop_tutorial" ); - self endon( "disconnect" ); - while ( isDefined( self.afterlife ) && self.afterlife && !self is_jumping() ) - { - wait 0.05; - } - wait 0.2; - self notify( "stop_tutorial" ); + self endon( "stop_tutorial" ); + self endon( "disconnect" ); + + while ( isdefined( self.afterlife ) && self.afterlife && !self is_jumping() ) + wait 0.05; + + wait 0.2; + self notify( "stop_tutorial" ); } -afterlife_powerups() //checked matches cerberus output +afterlife_powerups() { - level._powerup_grab_check = ::cell_grab_check; - s_powerup_loc = getstruct( "powerup_start", "targetname" ); - spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); - s_powerup_loc = getstruct( "powerup_cell_1", "targetname" ); - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); - } - else - { - spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" ); - } - s_powerup_loc = getstruct( "powerup_cell_2", "targetname" ); - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); - } - else - { - spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" ); - } + level._powerup_grab_check = ::cell_grab_check; + s_powerup_loc = getstruct( "powerup_start", "targetname" ); + spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); + s_powerup_loc = getstruct( "powerup_cell_1", "targetname" ); + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); + else + spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" ); + + s_powerup_loc = getstruct( "powerup_cell_2", "targetname" ); + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); + else + spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" ); } -cell_grab_check( player ) //checked matches cerberus output +cell_grab_check( player ) { - cell_powerup = getstruct( "powerup_start", "targetname" ); - if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) ) - { - m_door = getent( "powerup_door", "targetname" ); - if ( !isDefined( m_door.opened ) ) - { - return 0; - } - } - cell_powerup = getstruct( "powerup_cell_1", "targetname" ); - if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) ) - { - m_door = getent( "powerup_cell_door_1", "targetname" ); - if ( !isDefined( m_door.opened ) ) - { - return 0; - } - } - cell_powerup = getstruct( "powerup_cell_2", "targetname" ); - if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) ) - { - m_door = getent( "powerup_cell_door_2", "targetname" ); - if ( !isDefined( m_door.opened ) ) - { - return 0; - } - } - return 1; + cell_powerup = getstruct( "powerup_start", "targetname" ); + + if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ) + { + m_door = getent( "powerup_door", "targetname" ); + + if ( !isdefined( m_door.opened ) ) + return false; + } + + cell_powerup = getstruct( "powerup_cell_1", "targetname" ); + + if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ) + { + m_door = getent( "powerup_cell_door_1", "targetname" ); + + if ( !isdefined( m_door.opened ) ) + return false; + } + + cell_powerup = getstruct( "powerup_cell_2", "targetname" ); + + if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) ) + { + m_door = getent( "powerup_cell_door_2", "targetname" ); + + if ( !isdefined( m_door.opened ) ) + return false; + } + + return true; } -afterlife_intro_door() //checked matches cerberus output +afterlife_intro_door() { - m_door = getent( "powerup_door", "targetname" ); - level waittill( "intro_powerup_activate" ); - wait 1; - array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) ); - m_door.opened = 1; - m_door movex( 34, 2, 1 ); - m_door playsound( "zmb_jail_door" ); - level waittill( "intro_powerup_restored" ); - s_powerup_loc = getstruct( "powerup_start", "targetname" ); - spawn_infinite_powerup_drop( s_powerup_loc.origin ); + m_door = getent( "powerup_door", "targetname" ); + + level waittill( "intro_powerup_activate" ); + + wait 1; + array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) ); + m_door.opened = 1; + m_door movex( 34, 2, 1 ); + m_door playsound( "zmb_jail_door" ); + + level waittill( "intro_powerup_restored" ); + + s_powerup_loc = getstruct( "powerup_start", "targetname" ); + spawn_infinite_powerup_drop( s_powerup_loc.origin ); } -afterlife_cell_door_1() //checked matches cerberus output +afterlife_cell_door_1() { - m_door = getent( "powerup_cell_door_1", "targetname" ); - level waittill( "cell_1_powerup_activate" ); - wait 1; - array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) ); - m_door.opened = 1; - m_door movex( 36, 2, 1 ); - m_door playsound( "zmb_jail_door" ); + m_door = getent( "powerup_cell_door_1", "targetname" ); + + level waittill( "cell_1_powerup_activate" ); + + wait 1; + array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) ); + m_door.opened = 1; + m_door movex( 36, 2, 1 ); + m_door playsound( "zmb_jail_door" ); } -afterlife_cell_door_2() //checked matches cerberus output +afterlife_cell_door_2() { - m_door = getent( "powerup_cell_door_2", "targetname" ); - level waittill( "cell_2_powerup_activate" ); - wait 1; - array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) ); - m_door.opened = 1; - m_door movex( -34, 2, 1 ); - m_door playsound( "zmb_jail_door" ); + m_door = getent( "powerup_cell_door_2", "targetname" ); + + level waittill( "cell_2_powerup_activate" ); + + wait 1; + array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) ); + m_door.opened = 1; + m_door movex( -34, 2, 1 ); + m_door playsound( "zmb_jail_door" ); } -spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output +spawn_infinite_powerup_drop( v_origin, str_type ) { - level._powerup_timeout_override = ::powerup_infinite_time; - if ( isDefined( str_type ) ) - { - intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin ); - } - else - { - intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin ); - } - level._powerup_timeout_override = undefined; + level._powerup_timeout_override = ::powerup_infinite_time; + + if ( isdefined( str_type ) ) + intro_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_type, v_origin ); + else + intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin ); + + level._powerup_timeout_override = undefined; } -powerup_infinite_time() //checked matches cerberus output +powerup_infinite_time() { + } -power_on_perk_machines() //checked changed to match cerberus output +power_on_perk_machines() { - level waittill_any( "unlock_all_perk_machines", "open_sesame" ); - a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" ); - foreach ( e_shockbox in a_shockboxes ) - { - e_shockbox notify( "damage" ); - wait 1; - } + level waittill_any( "unlock_all_perk_machines", "open_sesame" ); + a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" ); + + foreach ( e_shockbox in a_shockboxes ) + { + e_shockbox notify( "damage", 1, level ); + wait 1; + } } -sq_main_controller() //checked matches cerberus output +sq_main_controller() { - precacheshader( "zm_al_wth_zombie" ); - onplayerconnect_callback( maps/mp/zm_prison_sq_final::onplayerconnect_sq_final ); - level thread maps/mp/zm_prison_sq_final::stage_one(); - onplayerconnect_callback( maps/mp/zm_prison_sq_fc::onplayerconnect_sq_fc ); - level thread maps/mp/zm_prison_sq_fc::watch_for_trigger_condition(); - onplayerconnect_callback( maps/mp/zm_prison_sq_wth::onplayerconnect_sq_wth ); + precacheshader( "zm_al_wth_zombie" ); + onplayerconnect_callback( maps\mp\zm_prison_sq_final::onplayerconnect_sq_final ); + level thread maps\mp\zm_prison_sq_final::stage_one(); + onplayerconnect_callback( maps\mp\zm_prison_sq_fc::onplayerconnect_sq_fc ); + level thread maps\mp\zm_prison_sq_fc::watch_for_trigger_condition(); + onplayerconnect_callback( maps\mp\zm_prison_sq_wth::onplayerconnect_sq_wth ); } -player_quest_vfx() //checked matches cerberus output +player_quest_vfx() { - flag_wait( "initial_blackscreen_passed" ); - wait 1; - if ( !flag( "generator_challenge_completed" ) ) - { - exploder( 2000 ); - } -} + flag_wait( "initial_blackscreen_passed" ); + wait 1; + if ( !flag( "generator_challenge_completed" ) ) + exploder( 2000 ); +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc index f2ffda6..244c668 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_craftables.gsc @@ -1,1006 +1,964 @@ -#include maps/mp/zm_alcatraz_travel; -#include maps/mp/zm_alcatraz_sq_vo; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_alcatraz_sq_vo; +#include maps\mp\zm_alcatraz_travel; init_craftables() { - precachestring( &"ZM_PRISON_KEY_DOOR" ); - level.craftable_piece_count = 10; - register_clientfields(); - add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 ); - add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" ); - make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorScale( ( 0, 0, 0 ), 90 ), ( 0, 0, level.riotshield_placement_zoffset ) ); - add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 ); - add_zombie_craftable_vox_category( "packasplat", "build_bsm" ); - make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorScale( ( 0, 0, 0 ), 90 ) ); - level.craftable_piece_swap_allowed = 0; - add_zombie_craftable( "quest_key1" ); - add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane ); - add_zombie_craftable( "refuelable_plane", &"ZM_PRISON_REFUEL_PLANE", &"ZM_PRISON_REFUELING_PLANE", undefined, ::onfullycrafted_refueled ); - in_game_checklist_setup(); + precachestring( &"ZM_PRISON_KEY_DOOR" ); + level.craftable_piece_count = 10; + register_clientfields(); + add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 ); + add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" ); + make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) ); + add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 ); + add_zombie_craftable_vox_category( "packasplat", "build_bsm" ); + make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorscale( ( 0, -1, 0 ), 90.0 ) ); + level.craftable_piece_swap_allowed = 0; + add_zombie_craftable( "quest_key1" ); + add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane ); + add_zombie_craftable( "refuelable_plane", &"ZM_PRISON_REFUEL_PLANE", &"ZM_PRISON_REFUELING_PLANE", undefined, ::onfullycrafted_refueled ); + in_game_checklist_setup(); } include_key_craftable( craftable_name, model_name ) { - part_key = generate_zombie_craftable_piece( craftable_name, undefined, model_name, 32, 15, 0, undefined, ::onpickup_key, undefined, undefined, undefined, undefined, undefined, undefined, 1 ); - part = spawnstruct(); - part.name = craftable_name; - part add_craftable_piece( part_key ); - part.triggerthink = ::maps/mp/zombies/_zm_craftables::setup_craftable_pieces; - include_craftable( part ); + part_key = generate_zombie_craftable_piece( craftable_name, undefined, model_name, 32, 15, 0, undefined, ::onpickup_key, undefined, undefined, undefined, undefined, undefined, undefined, 1 ); + part = spawnstruct(); + part.name = craftable_name; + part add_craftable_piece( part_key ); + part.triggerthink = maps\mp\zombies\_zm_craftables::setup_craftable_pieces; + include_craftable( part ); } include_craftables() { - level.zombie_include_craftables[ "open_table" ].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt; - craftable_name = "alcatraz_shield_zm"; - riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" ); - riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" ); - riotshield_clamp = generate_zombie_craftable_piece( craftable_name, "clamp", "t6_wpn_zmb_shield_dlc2_shackles", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" ); - riotshield = spawnstruct(); - riotshield.name = craftable_name; - riotshield add_craftable_piece( riotshield_dolly ); - riotshield add_craftable_piece( riotshield_door ); - riotshield add_craftable_piece( riotshield_clamp ); - riotshield.onbuyweapon = ::onbuyweapon_riotshield; - riotshield.triggerthink = ::riotshieldcraftable; - include_craftable( riotshield ); - craftable_name = "packasplat"; - packasplat_case = generate_zombie_craftable_piece( craftable_name, "case", "p6_zm_al_packasplat_suitcase", 48, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_case", 1, "build_bsm" ); - packasplat_fuse = generate_zombie_craftable_piece( craftable_name, "fuse", "p6_zm_al_packasplat_engine", 32, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_fuse", 1, "build_bsm" ); - packasplat_blood = generate_zombie_craftable_piece( craftable_name, "blood", "p6_zm_al_packasplat_iv", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_blood", 1, "build_bsm" ); - packasplat = spawnstruct(); - packasplat.name = craftable_name; - packasplat add_craftable_piece( packasplat_case ); - packasplat add_craftable_piece( packasplat_fuse ); - packasplat add_craftable_piece( packasplat_blood ); - packasplat.triggerthink = ::packasplatcraftable; - include_craftable( packasplat ); - include_key_craftable( "quest_key1", "p6_zm_al_key" ); - craftable_name = "plane"; - plane_cloth = generate_zombie_craftable_piece( craftable_name, "cloth", "p6_zm_al_clothes_pile_lrg", 48, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 1 ); - plane_fueltanks = generate_zombie_craftable_piece( craftable_name, "fueltanks", "veh_t6_dlc_zombie_part_fuel", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_feul_tanks", undefined, 2 ); - plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 ); - plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 ); - plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 ); - if ( level.is_forever_solo_game ) - { - plane_cloth.is_shared = 1; - plane_fueltanks.is_shared = 1; - plane_engine.is_shared = 1; - plane_steering.is_shared = 1; - plane_rigging.is_shared = 1; - plane_cloth.client_field_state = undefined; - plane_fueltanks.client_field_state = undefined; - plane_engine.client_field_state = undefined; - plane_steering.client_field_state = undefined; - plane_rigging.client_field_state = undefined; - } - plane_cloth.pickup_alias = "sidequest_sheets"; - plane_fueltanks.pickup_alias = "sidequest_oxygen"; - plane_engine.pickup_alias = "sidequest_engine"; - plane_steering.pickup_alias = "sidequest_valves"; - plane_rigging.pickup_alias = "sidequest_rigging"; - plane = spawnstruct(); - plane.name = craftable_name; - plane add_craftable_piece( plane_cloth ); - plane add_craftable_piece( plane_engine ); - plane add_craftable_piece( plane_fueltanks ); - plane add_craftable_piece( plane_steering ); - plane add_craftable_piece( plane_rigging ); - plane.triggerthink = ::planecraftable; - plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; - include_craftable( plane ); - craftable_name = "refuelable_plane"; - refuelable_plane_gas1 = generate_zombie_craftable_piece( craftable_name, "fuel1", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 6 ); - refuelable_plane_gas2 = generate_zombie_craftable_piece( craftable_name, "fuel2", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 7 ); - refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 ); - refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 ); - refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 ); - if ( level.is_forever_solo_game ) - { - refuelable_plane_gas1.is_shared = 1; - refuelable_plane_gas2.is_shared = 1; - refuelable_plane_gas3.is_shared = 1; - refuelable_plane_gas4.is_shared = 1; - refuelable_plane_gas5.is_shared = 1; - refuelable_plane_gas1.client_field_state = undefined; - refuelable_plane_gas2.client_field_state = undefined; - refuelable_plane_gas3.client_field_state = undefined; - refuelable_plane_gas4.client_field_state = undefined; - refuelable_plane_gas5.client_field_state = undefined; - } - refuelable_plane = spawnstruct(); - refuelable_plane.name = craftable_name; - refuelable_plane add_craftable_piece( refuelable_plane_gas1 ); - refuelable_plane add_craftable_piece( refuelable_plane_gas2 ); - refuelable_plane add_craftable_piece( refuelable_plane_gas3 ); - refuelable_plane add_craftable_piece( refuelable_plane_gas4 ); - refuelable_plane add_craftable_piece( refuelable_plane_gas5 ); - refuelable_plane.triggerthink = ::planefuelable; - plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; - include_craftable( refuelable_plane ); + level.zombie_include_craftables["open_table"].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt; + craftable_name = "alcatraz_shield_zm"; + riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" ); + riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" ); + riotshield_clamp = generate_zombie_craftable_piece( craftable_name, "clamp", "t6_wpn_zmb_shield_dlc2_shackles", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" ); + riotshield = spawnstruct(); + riotshield.name = craftable_name; + riotshield add_craftable_piece( riotshield_dolly ); + riotshield add_craftable_piece( riotshield_door ); + riotshield add_craftable_piece( riotshield_clamp ); + riotshield.onbuyweapon = ::onbuyweapon_riotshield; + riotshield.triggerthink = ::riotshieldcraftable; + include_craftable( riotshield ); + craftable_name = "packasplat"; + packasplat_case = generate_zombie_craftable_piece( craftable_name, "case", "p6_zm_al_packasplat_suitcase", 48, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_case", 1, "build_bsm" ); + packasplat_fuse = generate_zombie_craftable_piece( craftable_name, "fuse", "p6_zm_al_packasplat_engine", 32, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_fuse", 1, "build_bsm" ); + packasplat_blood = generate_zombie_craftable_piece( craftable_name, "blood", "p6_zm_al_packasplat_iv", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_blood", 1, "build_bsm" ); + packasplat = spawnstruct(); + packasplat.name = craftable_name; + packasplat add_craftable_piece( packasplat_case ); + packasplat add_craftable_piece( packasplat_fuse ); + packasplat add_craftable_piece( packasplat_blood ); + packasplat.triggerthink = ::packasplatcraftable; + include_craftable( packasplat ); + include_key_craftable( "quest_key1", "p6_zm_al_key" ); + craftable_name = "plane"; + plane_cloth = generate_zombie_craftable_piece( craftable_name, "cloth", "p6_zm_al_clothes_pile_lrg", 48, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 1 ); + plane_fueltanks = generate_zombie_craftable_piece( craftable_name, "fueltanks", "veh_t6_dlc_zombie_part_fuel", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_feul_tanks", undefined, 2 ); + plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 ); + plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 ); + plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 ); + + if ( level.is_forever_solo_game ) + { + plane_cloth.is_shared = 1; + plane_fueltanks.is_shared = 1; + plane_engine.is_shared = 1; + plane_steering.is_shared = 1; + plane_rigging.is_shared = 1; + plane_cloth.client_field_state = undefined; + plane_fueltanks.client_field_state = undefined; + plane_engine.client_field_state = undefined; + plane_steering.client_field_state = undefined; + plane_rigging.client_field_state = undefined; + } + + plane_cloth.pickup_alias = "sidequest_sheets"; + plane_fueltanks.pickup_alias = "sidequest_oxygen"; + plane_engine.pickup_alias = "sidequest_engine"; + plane_steering.pickup_alias = "sidequest_valves"; + plane_rigging.pickup_alias = "sidequest_rigging"; + plane = spawnstruct(); + plane.name = craftable_name; + plane add_craftable_piece( plane_cloth ); + plane add_craftable_piece( plane_engine ); + plane add_craftable_piece( plane_fueltanks ); + plane add_craftable_piece( plane_steering ); + plane add_craftable_piece( plane_rigging ); + plane.triggerthink = ::planecraftable; + plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; + include_craftable( plane ); + craftable_name = "refuelable_plane"; + refuelable_plane_gas1 = generate_zombie_craftable_piece( craftable_name, "fuel1", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 6 ); + refuelable_plane_gas2 = generate_zombie_craftable_piece( craftable_name, "fuel2", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 7 ); + refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 ); + refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 ); + refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 ); + + if ( level.is_forever_solo_game ) + { + refuelable_plane_gas1.is_shared = 1; + refuelable_plane_gas2.is_shared = 1; + refuelable_plane_gas3.is_shared = 1; + refuelable_plane_gas4.is_shared = 1; + refuelable_plane_gas5.is_shared = 1; + refuelable_plane_gas1.client_field_state = undefined; + refuelable_plane_gas2.client_field_state = undefined; + refuelable_plane_gas3.client_field_state = undefined; + refuelable_plane_gas4.client_field_state = undefined; + refuelable_plane_gas5.client_field_state = undefined; + } + + refuelable_plane = spawnstruct(); + refuelable_plane.name = craftable_name; + refuelable_plane add_craftable_piece( refuelable_plane_gas1 ); + refuelable_plane add_craftable_piece( refuelable_plane_gas2 ); + refuelable_plane add_craftable_piece( refuelable_plane_gas3 ); + refuelable_plane add_craftable_piece( refuelable_plane_gas4 ); + refuelable_plane add_craftable_piece( refuelable_plane_gas5 ); + refuelable_plane.triggerthink = ::planefuelable; + plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt; + include_craftable( refuelable_plane ); } register_clientfields() { - bits = 1; - registerclientfield( "world", "piece_riotshield_dolly", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_riotshield_door", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_riotshield_clamp", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_packasplat_fuse", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_packasplat_case", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_packasplat_blood", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_key_warden", 9000, bits, "int", undefined, 0 ); - bits = getminbitcountfornum( 10 ); - registerclientfield( "world", "piece_player1", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_player2", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_player3", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "piece_player4", 9000, bits, "int", undefined, 0 ); - bits = getminbitcountfornum( 7 ); - registerclientfield( "world", "quest_state1", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state2", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state3", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state4", 9000, bits, "int", undefined, 0 ); - registerclientfield( "world", "quest_state5", 9000, bits, "int", undefined, 0 ); - bits = 1; - registerclientfield( "world", "quest_plane_craft_complete", 9000, bits, "int", undefined, 0 ); + bits = 1; + registerclientfield( "world", "piece_riotshield_dolly", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_riotshield_door", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_riotshield_clamp", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_packasplat_fuse", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_packasplat_case", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_packasplat_blood", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_key_warden", 9000, bits, "int", undefined, 0 ); + bits = getminbitcountfornum( 10 ); + registerclientfield( "world", "piece_player1", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_player2", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_player3", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "piece_player4", 9000, bits, "int", undefined, 0 ); + bits = getminbitcountfornum( 7 ); + registerclientfield( "world", "quest_state1", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state2", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state3", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state4", 9000, bits, "int", undefined, 0 ); + registerclientfield( "world", "quest_state5", 9000, bits, "int", undefined, 0 ); + bits = 1; + registerclientfield( "world", "quest_plane_craft_complete", 9000, bits, "int", undefined, 0 ); } riotshieldcraftable() { - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 ); } packasplatcraftable() { - maps/mp/zombies/_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 ); + maps\mp\zombies\_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 ); } planecraftable() { - level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 ); - level setclientfield( "quest_plane_craft_complete", 0 ); - i = 1; - while ( i <= 5 ) - { - level setclientfield( "quest_state" + i, 2 ); - i++; - } + level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 ); + level setclientfield( "quest_plane_craft_complete", 0 ); + + for ( i = 1; i <= 5; i++ ) + level setclientfield( "quest_state" + i, 2 ); } planefuelable() { - level thread planefuelable_think(); + level thread planefuelable_think(); } planefuelable_think() { - flag_wait( "spawn_fuel_tanks" ); - t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" ); - t_plane_fuelable trigger_on(); - i = 1; - while ( i <= 5 ) - { - level setclientfield( "quest_state" + i, 5 ); - i++; - } - alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 ); + flag_wait( "spawn_fuel_tanks" ); + t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" ); + t_plane_fuelable trigger_on(); + + for ( i = 1; i <= 5; i++ ) + level setclientfield( "quest_state" + i, 5 ); + + alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 ); } ondrop_common( player ) { /# - println( "ZM >> Common part callback onDrop()" ); + println( "ZM >> Common part callback onDrop()" ); #/ - self droponmover( player ); - self.piece_owner = undefined; + self droponmover( player ); + self.piece_owner = undefined; } onpickup_common( player ) { /# - println( "ZM >> Common part callback onPickup()" ); + println( "ZM >> Common part callback onPickup()" ); #/ - player playsound( "zmb_craftable_pickup" ); - self pickupfrommover(); - self.piece_owner = player; + player playsound( "zmb_craftable_pickup" ); + self pickupfrommover(); + self.piece_owner = player; } ondisconnect_common( player ) { - level endon( "crafted_" + self.piecename ); - level endon( "dropped_" + self.piecename ); - player_num = player getentitynumber() + 1; - player waittill( "disconnect" ); - switch( self.piecename ) - { - case "cloth": - field_name = "quest_state1"; - in_game_checklist_plane_piece_dropped( "sheets" ); - break; - case "fueltanks": - field_name = "quest_state2"; - in_game_checklist_plane_piece_dropped( "fueltank" ); - break; - case "engine": - field_name = "quest_state3"; - in_game_checklist_plane_piece_dropped( "engine" ); - break; - case "steering": - field_name = "quest_state4"; - in_game_checklist_plane_piece_dropped( "contval" ); - break; - case "rigging": - field_name = "quest_state5"; - in_game_checklist_plane_piece_dropped( "rigging" ); - break; - } - level setclientfield( field_name, 2 ); - level setclientfield( "piece_player" + player_num, 0 ); - m_plane_piece = get_craftable_piece_model( "plane", self.piecename ); - if ( isDefined( m_plane_piece ) ) - { - playfxontag( level._effect[ "quest_item_glow" ], m_plane_piece, "tag_origin" ); - } - m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename ); - if ( isDefined( m_fuel_can ) ) - { - playfxontag( level._effect[ "quest_item_glow" ], m_fuel_can, "tag_origin" ); - } + level endon( "crafted_" + self.piecename ); + level endon( "dropped_" + self.piecename ); + player_num = player getentitynumber() + 1; + + player waittill( "disconnect" ); + + switch ( self.piecename ) + { + case "cloth": + field_name = "quest_state1"; + in_game_checklist_plane_piece_dropped( "sheets" ); + break; + case "fueltanks": + field_name = "quest_state2"; + in_game_checklist_plane_piece_dropped( "fueltank" ); + break; + case "engine": + field_name = "quest_state3"; + in_game_checklist_plane_piece_dropped( "engine" ); + break; + case "steering": + field_name = "quest_state4"; + in_game_checklist_plane_piece_dropped( "contval" ); + break; + case "rigging": + field_name = "quest_state5"; + in_game_checklist_plane_piece_dropped( "rigging" ); + break; + } + + level setclientfield( field_name, 2 ); + level setclientfield( "piece_player" + player_num, 0 ); + m_plane_piece = get_craftable_piece_model( "plane", self.piecename ); + + if ( isdefined( m_plane_piece ) ) + playfxontag( level._effect["quest_item_glow"], m_plane_piece, "tag_origin" ); + + m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename ); + + if ( isdefined( m_fuel_can ) ) + playfxontag( level._effect["quest_item_glow"], m_fuel_can, "tag_origin" ); } prison_open_craftablestub_update_prompt( player, b_set_hint_string_now, trigger ) { - valid = maps/mp/zombies/_zm_craftables::open_craftablestub_update_prompt( player ); - return valid; + valid = maps\mp\zombies\_zm_craftables::open_craftablestub_update_prompt( player ); + return valid; } onpickup_key( player ) { - flag_set( "key_found" ); - if ( level.is_master_key_west ) - { - level clientnotify( "fxanim_west_pulley_up_start" ); - } - else - { - level clientnotify( "fxanim_east_pulley_up_start" ); - } - a_m_checklist = getentarray( "plane_checklist", "targetname" ); - _a429 = a_m_checklist; - _k429 = getFirstArrayKey( _a429 ); - while ( isDefined( _k429 ) ) - { - m_checklist = _a429[ _k429 ]; - m_checklist showpart( "j_check_key" ); - m_checklist showpart( "j_strike_key" ); - _k429 = getNextArrayKey( _a429, _k429 ); - } - a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" ); - _a437 = a_door_structs; - _k437 = getFirstArrayKey( _a437 ); - while ( isDefined( _k437 ) ) - { - struct = _a437[ _k437 ]; - if ( isDefined( struct.unitrigger_stub ) ) - { - struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - } - _k437 = getNextArrayKey( _a437, _k437 ); - } - player playsound( "evt_key_pickup" ); - player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 ); - level setclientfield( "piece_key_warden", 1 ); + flag_set( "key_found" ); + + if ( level.is_master_key_west ) + level clientnotify( "fxanim_west_pulley_up_start" ); + else + level clientnotify( "fxanim_east_pulley_up_start" ); + + a_m_checklist = getentarray( "plane_checklist", "targetname" ); + + foreach ( m_checklist in a_m_checklist ) + { + m_checklist showpart( "j_check_key" ); + m_checklist showpart( "j_strike_key" ); + } + + a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" ); + + foreach ( struct in a_door_structs ) + { + if ( isdefined( struct.unitrigger_stub ) ) + struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + } + + player playsound( "evt_key_pickup" ); + player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 ); + level setclientfield( "piece_key_warden", 1 ); } prison_plane_update_prompt( player, b_set_hint_string_now, trigger ) { - return 1; + return 1; } ondrop_plane( player ) { /# - println( "ZM >> Common part callback onDrop()" ); + println( "ZM >> Common part callback onDrop()" ); #/ - level notify( "dropped_" + self.piecename ); - level.plane_pieces_picked_up -= 1; - self droponmover( player ); - self.piece_owner = undefined; - playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" ); - switch( self.piecename ) - { - case "cloth": - field_name = "quest_state1"; - in_game_checklist_plane_piece_dropped( "sheets" ); - break; - case "fueltanks": - field_name = "quest_state2"; - in_game_checklist_plane_piece_dropped( "fueltank" ); - break; - case "engine": - field_name = "quest_state3"; - in_game_checklist_plane_piece_dropped( "engine" ); - break; - case "steering": - field_name = "quest_state4"; - in_game_checklist_plane_piece_dropped( "contval" ); - break; - case "rigging": - field_name = "quest_state5"; - in_game_checklist_plane_piece_dropped( "rigging" ); - break; - } - level setclientfield( field_name, 2 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, 0 ); - } + level notify( "dropped_" + self.piecename ); + level.plane_pieces_picked_up -= 1; + self droponmover( player ); + self.piece_owner = undefined; + playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" ); + + switch ( self.piecename ) + { + case "cloth": + field_name = "quest_state1"; + in_game_checklist_plane_piece_dropped( "sheets" ); + break; + case "fueltanks": + field_name = "quest_state2"; + in_game_checklist_plane_piece_dropped( "fueltank" ); + break; + case "engine": + field_name = "quest_state3"; + in_game_checklist_plane_piece_dropped( "engine" ); + break; + case "steering": + field_name = "quest_state4"; + in_game_checklist_plane_piece_dropped( "contval" ); + break; + case "rigging": + field_name = "quest_state5"; + in_game_checklist_plane_piece_dropped( "rigging" ); + break; + } + + level setclientfield( field_name, 2 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, 0 ); + } } onpickup_plane( player ) { /# - println( "ZM >> Common part callback onPickup()" ); + println( "ZM >> Common part callback onPickup()" ); #/ - if ( !isDefined( level.plane_pieces_picked_up ) ) - { - level.plane_pieces_picked_up = 0; - level.sndplanepieces = 1; - } - level.plane_pieces_picked_up += 1; - if ( level.plane_pieces_picked_up == 5 ) - { - level thread roof_nag_vo(); - } - if ( level.sndplanepieces == level.plane_pieces_picked_up ) - { - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces ); - level.sndplanepieces++; - } - player playsound( "zmb_craftable_pickup" ); - vo_alias_call = undefined; - vo_alias_response = undefined; - self pickupfrommover(); - self.piece_owner = player; - switch( self.piecename ) - { - case "cloth": - field_name = "quest_state1"; - in_game_checklist_plane_piece_picked_up( "sheets" ); - break; - case "fueltanks": - field_name = "quest_state2"; - in_game_checklist_plane_piece_picked_up( "fueltank" ); - flag_set( "docks_gates_remain_open" ); - break; - case "engine": - field_name = "quest_state3"; - in_game_checklist_plane_piece_picked_up( "engine" ); - break; - case "steering": - field_name = "quest_state4"; - in_game_checklist_plane_piece_picked_up( "contval" ); - break; - case "rigging": - field_name = "quest_state5"; - in_game_checklist_plane_piece_picked_up( "rigging" ); - break; - } - level setclientfield( field_name, 3 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, self.client_field_state ); - } - vo_alias_call = self check_if_newly_found(); - if ( isDefined( vo_alias_call ) ) - { - level thread play_plane_piece_call_and_response_vo( player, vo_alias_call ); - } - self thread ondisconnect_common( player ); + if ( !isdefined( level.plane_pieces_picked_up ) ) + { + level.plane_pieces_picked_up = 0; + level.sndplanepieces = 1; + } + + level.plane_pieces_picked_up += 1; + + if ( level.plane_pieces_picked_up == 5 ) + level thread roof_nag_vo(); + + if ( level.sndplanepieces == level.plane_pieces_picked_up ) + { + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces ); + level.sndplanepieces++; + } + + player playsound( "zmb_craftable_pickup" ); + vo_alias_call = undefined; + vo_alias_response = undefined; + self pickupfrommover(); + self.piece_owner = player; + + switch ( self.piecename ) + { + case "cloth": + field_name = "quest_state1"; + in_game_checklist_plane_piece_picked_up( "sheets" ); + break; + case "fueltanks": + field_name = "quest_state2"; + in_game_checklist_plane_piece_picked_up( "fueltank" ); + flag_set( "docks_gates_remain_open" ); + break; + case "engine": + field_name = "quest_state3"; + in_game_checklist_plane_piece_picked_up( "engine" ); + break; + case "steering": + field_name = "quest_state4"; + in_game_checklist_plane_piece_picked_up( "contval" ); + break; + case "rigging": + field_name = "quest_state5"; + in_game_checklist_plane_piece_picked_up( "rigging" ); + break; + } + + level setclientfield( field_name, 3 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, self.client_field_state ); + } + + vo_alias_call = self check_if_newly_found(); + + if ( isdefined( vo_alias_call ) ) + level thread play_plane_piece_call_and_response_vo( player, vo_alias_call ); + + self thread ondisconnect_common( player ); } check_if_newly_found() { - if ( !flag( self.piecename + "_found" ) ) - { - switch( self.piecename ) - { - case "fueltanks": - vo_alias_call = "sidequest_oxygen"; - break; - case "cloth": - vo_alias_call = "sidequest_sheets"; - break; - case "engine": - vo_alias_call = "sidequest_engine"; - break; - case "steering": - vo_alias_call = "sidequest_valves"; - break; - case "rigging": - vo_alias_call = "sidequest_rigging"; - break; - } - level.n_plane_pieces_found++; - flag_set( self.piecename + "_found" ); - if ( self.piecename == "cloth" ) - { - level clientnotify( "fxanim_dryer_hide_start" ); - } - return vo_alias_call; - } + if ( !flag( self.piecename + "_found" ) ) + { + switch ( self.piecename ) + { + case "fueltanks": + vo_alias_call = "sidequest_oxygen"; + break; + case "cloth": + vo_alias_call = "sidequest_sheets"; + break; + case "engine": + vo_alias_call = "sidequest_engine"; + break; + case "steering": + vo_alias_call = "sidequest_valves"; + break; + case "rigging": + vo_alias_call = "sidequest_rigging"; + break; + } + + level.n_plane_pieces_found++; + flag_set( self.piecename + "_found" ); + + if ( self.piecename == "cloth" ) + level clientnotify( "fxanim_dryer_hide_start" ); + + return vo_alias_call; + } } play_plane_piece_call_and_response_vo( player, vo_alias_call ) { - player endon( "death" ); - player endon( "disconnect" ); - n_response_range = 1500; - players = getplayers(); - if ( !flag( "story_vo_playing" ) ) - { - flag_set( "story_vo_playing" ); - player do_player_general_vox( "quest", vo_alias_call, undefined, 100 ); - wait 5; - if ( players.size > 1 ) - { - arrayremovevalue( players, player ); - closest_other_player = getclosest( player.origin, players ); - if ( isDefined( closest_other_player ) ) - { - n_dist = distance( player.origin, closest_other_player.origin ); - if ( isDefined( closest_other_player ) && n_dist < n_response_range ) - { - if ( level.n_plane_pieces_found < 5 ) - { - vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog"; - } - else - { - vo_alias_response = "sidequest_all_parts"; - } - closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 ); - } - } - } - flag_clear( "story_vo_playing" ); - } + player endon( "death" ); + player endon( "disconnect" ); + n_response_range = 1500; + players = getplayers(); + + if ( !flag( "story_vo_playing" ) ) + { + flag_set( "story_vo_playing" ); + player do_player_general_vox( "quest", vo_alias_call, undefined, 100 ); + wait 5; + + if ( players.size > 1 ) + { + arrayremovevalue( players, player ); + closest_other_player = getclosest( player.origin, players ); + + if ( isdefined( closest_other_player ) ) + { + n_dist = distance( player.origin, closest_other_player.origin ); + + if ( isdefined( closest_other_player ) && n_dist < n_response_range ) + { + if ( level.n_plane_pieces_found < 5 ) + vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog"; + else + vo_alias_response = "sidequest_all_parts"; + + closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 ); + } + } + } + + flag_clear( "story_vo_playing" ); + } } roof_nag_vo() { - level notify( "roof_nag_vo" ); - level endon( "roof_nag_vo" ); - zone_roof = getent( "zone_roof", "targetname" ); - zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" ); - n_roof_nag_wait = 60; - n_roof_nag_max_times = 3; - while ( !flag( "plane_built" ) && n_roof_nag_max_times > 0 ) - { - wait n_roof_nag_wait; - b_is_a_player_on_the_roof = 0; - players = getplayers(); - _a696 = players; - _k696 = getFirstArrayKey( _a696 ); - while ( isDefined( _k696 ) ) - { - player = _a696[ _k696 ]; - if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) ) - { - b_is_a_player_on_the_roof = 1; - } - _k696 = getNextArrayKey( _a696, _k696 ); - } - if ( !b_is_a_player_on_the_roof ) - { - if ( level.plane_pieces_picked_up == 5 ) - { - player = players[ randomintrange( 0, players.size ) ]; - if ( isDefined( player ) ) - { - player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 ); - n_roof_nag_wait *= 1,5; - n_roof_nag_max_times--; + level notify( "roof_nag_vo" ); + level endon( "roof_nag_vo" ); + zone_roof = getent( "zone_roof", "targetname" ); + zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" ); + n_roof_nag_wait = 60; - } - } - } - } + for ( n_roof_nag_max_times = 3; !flag( "plane_built" ) && n_roof_nag_max_times > 0; n_roof_nag_max_times-- ) + { + wait( n_roof_nag_wait ); + b_is_a_player_on_the_roof = 0; + players = getplayers(); + + foreach ( player in players ) + { + if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) ) + b_is_a_player_on_the_roof = 1; + } + + asm_cond( !b_is_a_player_on_the_roof, loc_2E53 ); + asm_cond( level.plane_pieces_picked_up == 5, loc_2E53 ); + player = players[randomintrange( 0, players.size )]; + asm_cond( isdefined( player ), loc_2E53 ); + player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 ); + n_roof_nag_wait *= 1.5; + } } oncrafted_plane( player ) { - level notify( "crafted_" + self.piecename ); - m_plane_hideable_engine = getent( "plane_hideable_engine", "targetname" ); - m_plane_hideable_clothes_pile = getent( "plane_hideable_clothes_pile", "targetname" ); - m_plane_hideable_engine ghost(); - m_plane_hideable_clothes_pile ghost(); - plane_craftable = getent( "plane_craftable", "targetname" ); - plane_craftable hidepart( "tag_support_upper" ); - plane_craftable hidepart( "tag_wings_down" ); - plane_craftable hidepart( "tag_wing_skins_down" ); - plane_craftable hidepart( "tag_wing_skins_up" ); - plane_craftable hidepart( "tag_engines_down" ); - plane_craftable hidepart( "tag_engines_up" ); - plane_craftable hidepart( "tag_engines_down" ); - plane_craftable hidepart( "tag_engines_up" ); - plane_craftable hidepart( "tag_engine_ground" ); - plane_craftable hidepart( "tag_clothes_ground" ); - plane_craftable hidepart( "tag_fuel_hose" ); - if ( !isDefined( level.sndplanecrafted ) ) - { - level.sndplanecrafted = 0; - } - level.sndplanecrafted++; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted ); - if ( is_part_crafted( "plane", "rigging" ) ) - { - plane_craftable showpart( "tag_support_upper" ); - if ( is_part_crafted( "plane", "cloth" ) ) - { - plane_craftable showpart( "tag_wing_skins_up" ); - } - if ( is_part_crafted( "plane", "engine" ) ) - { - plane_craftable showpart( "tag_engines_up" ); - } - } - else - { - plane_craftable showpart( "tag_wings_down" ); - if ( is_part_crafted( "plane", "cloth" ) ) - { - m_plane_hideable_clothes_pile show(); - } - if ( is_part_crafted( "plane", "engine" ) ) - { - m_plane_hideable_engine show(); - } - } - if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) ) - { - plane_craftable showpart( "tag_fuel_hose" ); - } - switch( self.piecename ) - { - case "cloth": - field_name = "quest_state1"; - in_game_checklist_plane_piece_crafted( "sheets" ); - break; - case "fueltanks": - field_name = "quest_state2"; - in_game_checklist_plane_piece_crafted( "fueltank" ); - break; - case "engine": - field_name = "quest_state3"; - in_game_checklist_plane_piece_crafted( "engine" ); - break; - case "steering": - field_name = "quest_state4"; - in_game_checklist_plane_piece_crafted( "contval" ); - break; - case "rigging": - field_name = "quest_state5"; - in_game_checklist_plane_piece_crafted( "rigging" ); - break; - } - level setclientfield( field_name, 4 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, 0 ); - } + level notify( "crafted_" + self.piecename ); + m_plane_hideable_engine = getent( "plane_hideable_engine", "targetname" ); + m_plane_hideable_clothes_pile = getent( "plane_hideable_clothes_pile", "targetname" ); + m_plane_hideable_engine ghost(); + m_plane_hideable_clothes_pile ghost(); + plane_craftable = getent( "plane_craftable", "targetname" ); + plane_craftable hidepart( "tag_support_upper" ); + plane_craftable hidepart( "tag_wings_down" ); + plane_craftable hidepart( "tag_wing_skins_down" ); + plane_craftable hidepart( "tag_wing_skins_up" ); + plane_craftable hidepart( "tag_engines_down" ); + plane_craftable hidepart( "tag_engines_up" ); + plane_craftable hidepart( "tag_engines_down" ); + plane_craftable hidepart( "tag_engines_up" ); + plane_craftable hidepart( "tag_engine_ground" ); + plane_craftable hidepart( "tag_clothes_ground" ); + plane_craftable hidepart( "tag_fuel_hose" ); + + if ( !isdefined( level.sndplanecrafted ) ) + level.sndplanecrafted = 0; + + level.sndplanecrafted++; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted ); + + if ( is_part_crafted( "plane", "rigging" ) ) + { + plane_craftable showpart( "tag_support_upper" ); + + if ( is_part_crafted( "plane", "cloth" ) ) + plane_craftable showpart( "tag_wing_skins_up" ); + + if ( is_part_crafted( "plane", "engine" ) ) + plane_craftable showpart( "tag_engines_up" ); + } + else + { + plane_craftable showpart( "tag_wings_down" ); + + if ( is_part_crafted( "plane", "cloth" ) ) + m_plane_hideable_clothes_pile show(); + + if ( is_part_crafted( "plane", "engine" ) ) + m_plane_hideable_engine show(); + } + + if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) ) + plane_craftable showpart( "tag_fuel_hose" ); + + switch ( self.piecename ) + { + case "cloth": + field_name = "quest_state1"; + in_game_checklist_plane_piece_crafted( "sheets" ); + break; + case "fueltanks": + field_name = "quest_state2"; + in_game_checklist_plane_piece_crafted( "fueltank" ); + break; + case "engine": + field_name = "quest_state3"; + in_game_checklist_plane_piece_crafted( "engine" ); + break; + case "steering": + field_name = "quest_state4"; + in_game_checklist_plane_piece_crafted( "contval" ); + break; + case "rigging": + field_name = "quest_state5"; + in_game_checklist_plane_piece_crafted( "rigging" ); + break; + } + + level setclientfield( field_name, 4 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, 0 ); + } } ondrop_fuel( player ) { - level notify( "dropped_" + self.piecename ); - self.piece_owner = undefined; - playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" ); - if ( isDefined( level.sndfuelpieces ) ) - { - level.sndfuelpieces--; + level notify( "dropped_" + self.piecename ); + self.piece_owner = undefined; + playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" ); - } - switch( self.piecename ) - { - case "fuel1": - field_name = "quest_state1"; - break; - case "fuel2": - field_name = "quest_state2"; - break; - case "fuel3": - field_name = "quest_state3"; - break; - case "fuel4": - field_name = "quest_state4"; - break; - case "fuel5": - field_name = "quest_state5"; - break; - } - level setclientfield( field_name, 5 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, 0 ); - } + if ( isdefined( level.sndfuelpieces ) ) + level.sndfuelpieces--; + + switch ( self.piecename ) + { + case "fuel1": + field_name = "quest_state1"; + break; + case "fuel2": + field_name = "quest_state2"; + break; + case "fuel3": + field_name = "quest_state3"; + break; + case "fuel4": + field_name = "quest_state4"; + break; + case "fuel5": + field_name = "quest_state5"; + break; + } + + level setclientfield( field_name, 5 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, 0 ); + } } onpickup_fuel( player ) { - player playsound( "zmb_craftable_pickup" ); - if ( !isDefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 ) - { - level.sndfuelpieces = 0; - } - level.sndfuelpieces++; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces ); - self pickupfrommover(); - self.piece_owner = player; - if ( isDefined( player ) ) - { - player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 ); - } - switch( self.piecename ) - { - case "fuel1": - field_name = "quest_state1"; - break; - case "fuel2": - field_name = "quest_state2"; - break; - case "fuel3": - field_name = "quest_state3"; - break; - case "fuel4": - field_name = "quest_state4"; - break; - case "fuel5": - field_name = "quest_state5"; - break; - } - level setclientfield( field_name, 6 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, self.client_field_state ); - } - self thread ondisconnect_common( player ); + player playsound( "zmb_craftable_pickup" ); + + if ( !isdefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 ) + level.sndfuelpieces = 0; + + level.sndfuelpieces++; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces ); + self pickupfrommover(); + self.piece_owner = player; + + if ( isdefined( player ) ) + player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 ); + + switch ( self.piecename ) + { + case "fuel1": + field_name = "quest_state1"; + break; + case "fuel2": + field_name = "quest_state2"; + break; + case "fuel3": + field_name = "quest_state3"; + break; + case "fuel4": + field_name = "quest_state4"; + break; + case "fuel5": + field_name = "quest_state5"; + break; + } + + level setclientfield( field_name, 6 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, self.client_field_state ); + } + + self thread ondisconnect_common( player ); } oncrafted_fuel( player ) { - level notify( "crafted_" + self.piecename ); - level.n_plane_fuel_count++; - switch( self.piecename ) - { - case "fuel1": - field_name = "quest_state1"; - break; - case "fuel2": - field_name = "quest_state2"; - break; - case "fuel3": - field_name = "quest_state3"; - break; - case "fuel4": - field_name = "quest_state4"; - break; - case "fuel5": - field_name = "quest_state5"; - break; - } - level setclientfield( field_name, 7 ); - if ( !level.is_forever_solo_game ) - { - player_num = player getentitynumber() + 1; - level setclientfield( "piece_player" + player_num, 0 ); - } + level notify( "crafted_" + self.piecename ); + level.n_plane_fuel_count++; + + switch ( self.piecename ) + { + case "fuel1": + field_name = "quest_state1"; + break; + case "fuel2": + field_name = "quest_state2"; + break; + case "fuel3": + field_name = "quest_state3"; + break; + case "fuel4": + field_name = "quest_state4"; + break; + case "fuel5": + field_name = "quest_state5"; + break; + } + + level setclientfield( field_name, 7 ); + + if ( !level.is_forever_solo_game ) + { + player_num = player getentitynumber() + 1; + level setclientfield( "piece_player" + player_num, 0 ); + } } onfullycrafted_plane( player ) { - flag_set( "plane_built" ); - level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo(); - level notify( "roof_nag_vo" ); - level setclientfield( "quest_plane_craft_complete", 1 ); - return 0; + flag_set( "plane_built" ); + level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo(); + level notify( "roof_nag_vo" ); + level setclientfield( "quest_plane_craft_complete", 1 ); + return 0; } onfullycrafted_packasplat( player ) { - t_upgrade = getent( "blundergat_upgrade", "targetname" ); - t_upgrade.target = self.target; - t_upgrade.origin = self.origin; - t_upgrade.angles = self.angles; - t_upgrade.m_upgrade_machine = get_craftable_model( "packasplat" ); - return 1; + t_upgrade = getent( "blundergat_upgrade", "targetname" ); + t_upgrade.target = self.target; + t_upgrade.origin = self.origin; + t_upgrade.angles = self.angles; + t_upgrade.m_upgrade_machine = get_craftable_model( "packasplat" ); + return 1; } onfullycrafted_refueled( player ) { - flag_set( "plane_built" ); - level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo(); - level notify( "roof_nag_vo" ); - thread onfullycrafted_refueled_think( player ); - return 0; + flag_set( "plane_built" ); + level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo(); + level notify( "roof_nag_vo" ); + thread onfullycrafted_refueled_think( player ); + return 0; } onfullycrafted_refueled_think( player ) { - flag_wait( "spawn_fuel_tanks" ); - i = 1; - while ( i <= 5 ) - { - level setclientfield( "quest_state" + i, 5 ); - i++; - } - maps/mp/zombies/_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 ); + flag_wait( "spawn_fuel_tanks" ); + + for ( i = 1; i <= 5; i++ ) + level setclientfield( "quest_state" + i, 5 ); + + maps\mp\zombies\_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 ); } sqcommoncraftable() { - level.sq_craftable = maps/mp/zombies/_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 ); + level.sq_craftable = maps\mp\zombies\_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 ); } onbuyweapon_riotshield( player ) { - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - if ( isDefined( player.player_shield_reset_location ) ) - { - player [[ player.player_shield_reset_location ]](); - } + if ( isdefined( player.player_shield_reset_health ) ) + player [[ player.player_shield_reset_health ]](); + + if ( isdefined( player.player_shield_reset_location ) ) + player [[ player.player_shield_reset_location ]](); } onbuyweapon_plane( player ) { - level notify( "plane_takeoff" ); - iprintlnbold( "Plane Bought" ); + level notify( "plane_takeoff" ); + iprintlnbold( "Plane Bought" ); } droponmover( player ) { - while ( isDefined( player ) && player maps/mp/zm_alcatraz_travel::is_player_on_gondola() ) - { - str_location = undefined; - if ( isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isDefined( level.e_gondola.destination ) ) - { - str_location = level.e_gondola.destination; - } - else - { - str_location = level.e_gondola.location; - } - if ( !isDefined( str_location ) ) - { - str_location = "roof"; - } - a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" ); - _a1104 = a_s_part_teleport; - _k1104 = getFirstArrayKey( _a1104 ); - while ( isDefined( _k1104 ) ) - { - struct = _a1104[ _k1104 ]; - if ( isDefined( struct.occupied ) && !struct.occupied ) - { - self.model.origin = struct.origin; - self.model.angles = struct.angles; - struct.occupied = 1; - self.unitrigger.struct_teleport = struct; - return; - } - else - { - _k1104 = getNextArrayKey( _a1104, _k1104 ); - } - } - } + if ( isdefined( player ) && player maps\mp\zm_alcatraz_travel::is_player_on_gondola() ) + { + str_location = undefined; + + if ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isdefined( level.e_gondola.destination ) ) + str_location = level.e_gondola.destination; + else + str_location = level.e_gondola.location; + + if ( !isdefined( str_location ) ) + str_location = "roof"; + + a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" ); + + foreach ( struct in a_s_part_teleport ) + { + if ( !( isdefined( struct.occupied ) && struct.occupied ) ) + { + self.model.origin = struct.origin; + self.model.angles = struct.angles; + struct.occupied = 1; + self.unitrigger.struct_teleport = struct; + break; + } + } + } } pickupfrommover() { - if ( isDefined( self.unitrigger ) ) - { - if ( isDefined( self.unitrigger.struct_teleport ) ) - { - self.unitrigger.struct_teleport.occupied = 0; - self.unitrigger.struct_teleport = undefined; - } - } + if ( isdefined( self.unitrigger ) ) + { + if ( isdefined( self.unitrigger.struct_teleport ) ) + { + self.unitrigger.struct_teleport.occupied = 0; + self.unitrigger.struct_teleport = undefined; + } + } } in_game_checklist_setup() { - a_m_checklist = getentarray( "plane_checklist", "targetname" ); - a_str_partnames = []; - a_str_partnames[ 0 ] = "sheets"; - a_str_partnames[ 1 ] = "fueltank"; - a_str_partnames[ 2 ] = "engine"; - a_str_partnames[ 3 ] = "contval"; - a_str_partnames[ 4 ] = "rigging"; - a_str_partnames[ 5 ] = "key"; - _a1143 = a_m_checklist; - _k1143 = getFirstArrayKey( _a1143 ); - while ( isDefined( _k1143 ) ) - { - m_checklist = _a1143[ _k1143 ]; - _a1145 = a_str_partnames; - _k1145 = getFirstArrayKey( _a1145 ); - while ( isDefined( _k1145 ) ) - { - str_partname = _a1145[ _k1145 ]; - m_checklist hidepart( "j_check_" + str_partname ); - m_checklist hidepart( "j_strike_" + str_partname ); - _k1145 = getNextArrayKey( _a1145, _k1145 ); - } - _k1143 = getNextArrayKey( _a1143, _k1143 ); - } + a_m_checklist = getentarray( "plane_checklist", "targetname" ); + a_str_partnames = []; + a_str_partnames[0] = "sheets"; + a_str_partnames[1] = "fueltank"; + a_str_partnames[2] = "engine"; + a_str_partnames[3] = "contval"; + a_str_partnames[4] = "rigging"; + a_str_partnames[5] = "key"; + + foreach ( m_checklist in a_m_checklist ) + { + foreach ( str_partname in a_str_partnames ) + { + m_checklist hidepart( "j_check_" + str_partname ); + m_checklist hidepart( "j_strike_" + str_partname ); + } + } } in_game_checklist_plane_piece_picked_up( str_partname ) { - a_m_checklist = getentarray( "plane_checklist", "targetname" ); - _a1157 = a_m_checklist; - _k1157 = getFirstArrayKey( _a1157 ); - while ( isDefined( _k1157 ) ) - { - m_checklist = _a1157[ _k1157 ]; - m_checklist showpart( "j_check_" + str_partname ); - _k1157 = getNextArrayKey( _a1157, _k1157 ); - } + a_m_checklist = getentarray( "plane_checklist", "targetname" ); + + foreach ( m_checklist in a_m_checklist ) + m_checklist showpart( "j_check_" + str_partname ); } in_game_checklist_plane_piece_dropped( str_partname ) { - a_m_checklist = getentarray( "plane_checklist", "targetname" ); - _a1167 = a_m_checklist; - _k1167 = getFirstArrayKey( _a1167 ); - while ( isDefined( _k1167 ) ) - { - m_checklist = _a1167[ _k1167 ]; - m_checklist hidepart( "j_check_" + str_partname ); - _k1167 = getNextArrayKey( _a1167, _k1167 ); - } + a_m_checklist = getentarray( "plane_checklist", "targetname" ); + + foreach ( m_checklist in a_m_checklist ) + m_checklist hidepart( "j_check_" + str_partname ); } in_game_checklist_plane_piece_crafted( str_partname ) { - a_m_checklist = getentarray( "plane_checklist", "targetname" ); - _a1177 = a_m_checklist; - _k1177 = getFirstArrayKey( _a1177 ); - while ( isDefined( _k1177 ) ) - { - m_checklist = _a1177[ _k1177 ]; - m_checklist showpart( "j_strike_" + str_partname ); - _k1177 = getNextArrayKey( _a1177, _k1177 ); - } + a_m_checklist = getentarray( "plane_checklist", "targetname" ); + + foreach ( m_checklist in a_m_checklist ) + m_checklist showpart( "j_strike_" + str_partname ); } alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - return alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + return alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - trig.script_length = 386; - return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + trig.script_length = 386; + return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ]; - angles = trig.script_angles; - if ( !isDefined( angles ) ) - { - angles = ( 0, 0, 0 ); - } - unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 ); - unitrigger_stub.angles = trig.angles; - if ( isDefined( trig.script_angles ) ) - { - unitrigger_stub.angles = trig.script_angles; - } - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 100; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_craftablestubs[ equipname ].hint ) ) - { - unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].hint; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) - { - unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; - } - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - if ( isDefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - if ( isDefined( unitrigger_stub.model ) ) - { - if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) ) - { - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - } - unitrigger_stub.model ghost(); - unitrigger_stub.model notsolid(); - } - } - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].hint ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].hint; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) + unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; + + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model ghost(); + unitrigger_stub.model notsolid(); + } + } + + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc index a5d6f2e..75b0ded 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_distance_tracking.gsc @@ -1,169 +1,150 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; zombie_tracking_init() { - level.zombie_respawned_health = []; - if ( !isDefined( level.zombie_tracking_dist ) ) - { - level.zombie_tracking_dist = 1500; - } - if ( !isDefined( level.zombie_tracking_high ) ) - { - level.zombie_tracking_high = 600; - } - if ( !isDefined( level.zombie_tracking_wait ) ) - { - level.zombie_tracking_wait = 10; - } - for ( ;; ) - { - while ( 1 ) - { - zombies = get_round_enemy_array(); - if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) - { - wait level.zombie_tracking_wait; - } - } - else i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking ) - { - zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); - } - i++; - } - wait level.zombie_tracking_wait; - } + level.zombie_respawned_health = []; + + if ( !isdefined( level.zombie_tracking_dist ) ) + level.zombie_tracking_dist = 1500; + + if ( !isdefined( level.zombie_tracking_high ) ) + level.zombie_tracking_high = 600; + + if ( !isdefined( level.zombie_tracking_wait ) ) + level.zombie_tracking_wait = 10; + + while ( true ) + { + zombies = get_round_enemy_array(); + + if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) + { + wait( level.zombie_tracking_wait ); + continue; + } + else + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) + zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); + } + } + + wait( level.zombie_tracking_wait ); + } } delete_zombie_noone_looking( how_close, how_high ) { - self endon( "death" ); - if ( !isDefined( how_close ) ) - { - how_close = 1500; - } - if ( !isDefined( how_high ) ) - { - how_close = 600; - } - distance_squared_check = how_close * how_close; - too_far_dist = distance_squared_check * 3; - if ( isDefined( level.zombie_tracking_too_far_dist ) ) - { - too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; - } - self.inview = 0; - self.player_close = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" ) - { - i++; - continue; - } - else if ( isDefined( level.only_track_targeted_players ) ) - { - if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] ) - { - i++; - continue; - } - } - else - { - can_be_seen = self player_can_see_me( players[ i ] ); - if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist ) - { - self.inview++; - } - if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high ) - { - self.player_close++; - } - } - i++; - } - wait 0,1; - if ( self.inview == 0 && self.player_close == 0 ) - { - if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) - { - return; - } - if ( isDefined( self.electrified ) && self.electrified == 1 ) - { - return; - } - if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) - { - return; - } - zombies = getaiarray( "axis" ); - if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - else - { - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - if ( self.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - } - } - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self notify( "zombie_delete" ); - self delete(); - recalc_zombie_array(); - } + self endon( "death" ); + + if ( !isdefined( how_close ) ) + how_close = 1500; + + if ( !isdefined( how_high ) ) + how_close = 600; + + distance_squared_check = how_close * how_close; + too_far_dist = distance_squared_check * 3; + + if ( isdefined( level.zombie_tracking_too_far_dist ) ) + too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; + + self.inview = 0; + self.player_close = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" ) + continue; + + if ( isdefined( level.only_track_targeted_players ) ) + { + if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) + continue; + } + + can_be_seen = self player_can_see_me( players[i] ); + + if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) + self.inview++; + + if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high ) + self.player_close++; + } + + wait 0.1; + + if ( self.inview == 0 && self.player_close == 0 ) + { + if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) + return; + + if ( isdefined( self.electrified ) && self.electrified == 1 ) + return; + + if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 ) + return; + + zombies = getaiarray( "axis" ); + + if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + + if ( self.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self notify( "zombie_delete" ); + self delete(); + recalc_zombie_array(); + } } player_can_see_me( player ) { - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - if ( forwarddotbanzai >= 1 ) - { - anglefromcenter = 0; - } - else if ( forwarddotbanzai <= -1 ) - { - anglefromcenter = 180; - } - else - { - anglefromcenter = acos( forwarddotbanzai ); - } - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return playercanseeme; + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + + if ( forwarddotbanzai >= 1 ) + anglefromcenter = 0; + else if ( forwarddotbanzai <= -1 ) + anglefromcenter = 180; + else + anglefromcenter = acos( forwarddotbanzai ); + + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return playercanseeme; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc index 35ae52d..e1b1440 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_gamemodes.gsc @@ -1,18 +1,19 @@ -//checked includes changed to match cerberus output -#include maps/mp/zm_alcatraz_classic; -#include maps/mp/zm_alcatraz_grief_cellblock; -#include maps/mp/zm_prison; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_prison; +#include maps\mp\zm_alcatraz_grief_cellblock; +#include maps\mp\zm_alcatraz_classic; -init() //checked matches cerberus output +init() { - level.custom_vending_precaching = maps/mp/zm_prison::custom_vending_precaching; - add_map_gamemode( "zclassic", maps/mp/zm_prison::zclassic_preinit, undefined, undefined ); - add_map_gamemode( "zgrief", maps/mp/zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined ); - add_map_location_gamemode( "zclassic", "prison", maps/mp/zm_alcatraz_classic::precache, maps/mp/zm_alcatraz_classic::main ); - add_map_location_gamemode( "zgrief", "cellblock", maps/mp/zm_alcatraz_grief_cellblock::precache, maps/mp/zm_alcatraz_grief_cellblock::main ); + level.custom_vending_precaching = maps\mp\zm_prison::custom_vending_precaching; + add_map_gamemode( "zclassic", maps\mp\zm_prison::zclassic_preinit, undefined, undefined ); + add_map_gamemode( "zgrief", maps\mp\zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined ); + add_map_location_gamemode( "zclassic", "prison", maps\mp\zm_alcatraz_classic::precache, maps\mp\zm_alcatraz_classic::main ); + add_map_location_gamemode( "zgrief", "cellblock", maps\mp\zm_alcatraz_grief_cellblock::precache, maps\mp\zm_alcatraz_grief_cellblock::main ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc index a2f8136..4e34b5d 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_grief_cellblock.gsc @@ -1,482 +1,498 @@ -//checked includes changed to match cerberus output -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zm_alcatraz_traps; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zm_prison; -#include maps/mp/zombies/_zm_race_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_race_utility; +#include maps\mp\zm_prison; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\zombies\_zm_blockers; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zm_alcatraz_traps; +#include maps\mp\gametypes_zm\zmeat; -precache() //checked matches cerberus output +precache() { + } -zgrief_preinit() //checked matches cerberus output +zgrief_preinit() { - registerclientfield( "toplayer", "meat_stink", 1, 1, "int" ); - level.givecustomloadout = maps/mp/zm_prison::givecustomloadout; - zgrief_init(); + registerclientfield( "toplayer", "meat_stink", 1, 1, "int" ); + level.givecustomloadout = maps\mp\zm_prison::givecustomloadout; + zgrief_init(); } -zgrief_init() //checked matches cerberus output +zgrief_init() { - encounter_init(); - flag_wait( "start_zombie_round_logic" ); - if ( level.round_number < 4 && level.gamedifficulty != 0 ) - { - level.zombie_move_speed = 35; - } + encounter_init(); + flag_wait( "start_zombie_round_logic" ); + + if ( level.round_number < 4 && level.gamedifficulty != 0 ) + level.zombie_move_speed = 35; } -encounter_init() //checked matches cerberus output +encounter_init() { - level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save; - level.precachecustomcharacters = ::precache_team_characters; - level.givecustomcharacters = ::give_team_characters; - level.gamemode_post_spawn_logic = ::give_player_shiv; + level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save; + level.precachecustomcharacters = ::precache_team_characters; + level.givecustomcharacters = ::give_team_characters; + level.gamemode_post_spawn_logic = ::give_player_shiv; } -alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output +alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) { - if ( self hasperk( "specialty_additionalprimaryweapon" ) ) - { - primary_weapons_that_can_be_taken = []; - primaryweapons = self getweaponslistprimaries(); - for ( i = 0; i < primaryweapons.size; i++ ) - { - if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) ) - { - primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ]; - } - } - if ( primary_weapons_that_can_be_taken.size >= 3 ) - { - weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ]; - self takeweapon( weapon_to_take ); - self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take; - } - } - self.grief_savedweapon_weapons = self getweaponslist(); - self.grief_savedweapon_weaponsammo_stock = []; - self.grief_savedweapon_weaponsammo_clip = []; - self.grief_savedweapon_currentweapon = self getcurrentweapon(); - self.grief_savedweapon_grenades = self get_player_lethal_grenade(); - if ( isDefined( self.grief_savedweapon_grenades ) ) - { - self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); - } - self.grief_savedweapon_tactical = self get_player_tactical_grenade(); - if ( isDefined( self.grief_savedweapon_tactical ) ) - { - self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); - } - for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) - { - self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] ); - self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] ); - } - if ( isDefined( self.hasriotshield ) && self.hasriotshield ) - { - self.grief_hasriotshield = 1; - } - if ( self hasweapon( "claymore_zm" ) ) - { - self.grief_savedweapon_claymore = 1; - self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); - } + if ( self hasperk( "specialty_additionalprimaryweapon" ) ) + { + primary_weapons_that_can_be_taken = []; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) ) + primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i]; + } + + if ( primary_weapons_that_can_be_taken.size >= 3 ) + { + weapon_to_take = primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size - 1]; + self takeweapon( weapon_to_take ); + self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take; + } + } + + self.grief_savedweapon_weapons = self getweaponslist(); + self.grief_savedweapon_weaponsammo_stock = []; + self.grief_savedweapon_weaponsammo_clip = []; + self.grief_savedweapon_currentweapon = self getcurrentweapon(); + self.grief_savedweapon_grenades = self get_player_lethal_grenade(); + + if ( isdefined( self.grief_savedweapon_grenades ) ) + self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); + + self.grief_savedweapon_tactical = self get_player_tactical_grenade(); + + if ( isdefined( self.grief_savedweapon_tactical ) ) + self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); + + for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ ) + { + self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] ); + self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] ); + } + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + self.grief_hasriotshield = 1; + + if ( self hasweapon( "claymore_zm" ) ) + { + self.grief_savedweapon_claymore = 1; + self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" ); + } } -precache_team_characters() //checked matches cerberus output +precache_team_characters() { - precachemodel( "c_zom_player_grief_guard_fb" ); - precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); - precachemodel( "c_zom_player_grief_inmate_fb" ); - precachemodel( "c_zom_grief_guard_viewhands" ); + precachemodel( "c_zom_player_grief_guard_fb" ); + precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); + precachemodel( "c_zom_player_grief_inmate_fb" ); + precachemodel( "c_zom_grief_guard_viewhands" ); } -give_team_characters() //checked matches cerberus output +give_team_characters() { - self detachall(); - self set_player_is_female( 0 ); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = 1; - if ( self.team == "axis" ) - { - self.characterindex = 0; - } - } - switch( self.characterindex ) - { - case 0: - case 2: - self setmodel( "c_zom_player_grief_inmate_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); - self.characterindex = 0; - break; - case 1: - case 3: - self setmodel( "c_zom_player_grief_guard_fb" ); - self.voice = "american"; - self.skeleton = "base"; - self setviewmodel( "c_zom_grief_guard_viewhands" ); - self.characterindex = 1; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); + self detachall(); + self set_player_is_female( 0 ); + + if ( !isdefined( self.characterindex ) ) + { + self.characterindex = 1; + + if ( self.team == "axis" ) + self.characterindex = 0; + } + + switch ( self.characterindex ) + { + case "2": + case "0": + self setmodel( "c_zom_player_grief_inmate_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); + self.characterindex = 0; + break; + case "3": + case "1": + self setmodel( "c_zom_player_grief_guard_fb" ); + self.voice = "american"; + self.skeleton = "base"; + self setviewmodel( "c_zom_grief_guard_viewhands" ); + self.characterindex = 1; + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); } -give_player_shiv() //checked matches cerberus output +give_player_shiv() { - self takeweapon( "knife_zm" ); - self giveweapon( "knife_zm_alcatraz" ); + self takeweapon( "knife_zm" ); + self giveweapon( "knife_zm_alcatraz" ); } -grief_treasure_chest_init() //checked matches cerberus output +grief_treasure_chest_init() { - chest1 = getstruct( "start_chest", "script_noteworthy" ); - chest2 = getstruct( "cafe_chest", "script_noteworthy" ); - setdvar( "disableLookAtEntityLogic", 1 ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - level.chests[ level.chests.size ] = chest2; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); + chest1 = getstruct( "start_chest", "script_noteworthy" ); + chest2 = getstruct( "cafe_chest", "script_noteworthy" ); + setdvar( "disableLookAtEntityLogic", 1 ); + level.chests = []; + level.chests[level.chests.size] = chest1; + level.chests[level.chests.size] = chest2; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); } -main() //checked partially changed to match cerberus output changed at own discretion see info.md +main() { - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "cellblock" ); - grief_treasure_chest_init(); - precacheshader( "zm_al_wth_zombie" ); - array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief ); - maps/mp/zombies/_zm_ai_brutus::precache(); - maps/mp/zombies/_zm_ai_brutus::init(); - level.enemy_location_override_func = ::enemy_location_override; - level._effect[ "butterflies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" ); - a_t_door_triggers = getentarray( "zombie_door", "targetname" ); - triggers = a_t_door_triggers; - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ].script_flag ) ) - { - if ( triggers[ i ].script_flag == "activate_cellblock_citadel" || triggers[ i ].script_flag == "activate_shower_room" || triggers[ i ].script_flag == "activate_cellblock_infirmary" || triggers[ i ].script_flag == "activate_infirmary" ) - { - triggers[ i ] delete(); - i++; - continue; - } - if ( triggers[ i ].script_flag == "activate_cafeteria" || triggers[ i ].script_flag == "activate_cellblock_east" || triggers[ i ].script_flag == "activate_cellblock_west" || triggers[ i ].script_flag == "activate_cellblock_barber" || triggers[ i ].script_flag == "activate_cellblock_gondola" || triggers[ i ].script_flag == "activate_cellblock_east_west" || triggers[ i ].script_flag == "activate_warden_office" ) - { - i++; - continue; - } - if ( isDefined( triggers[ i ].target ) ) - { - str_target = triggers[ i ].target; - a_door_and_clip = getentarray( str_target, "targetname" ); - foreach ( ent in a_door_and_clip ) - { - ent delete(); - } - } - triggers[ i ] delete(); - } - i++; - } - a_t_doors = getentarray( "zombie_door", "targetname" ); - foreach ( t_door in a_t_doors ) - { - if ( isDefined( t_door.script_flag ) ) - { - if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" ) - { - t_door maps/mp/zombies/_zm_blockers::door_opened( self.zombie_cost ); - } - } - } - zbarriers = getzbarrierarray(); - a_str_zones = []; - a_str_zones[ 0 ] = "zone_start"; - a_str_zones[ 1 ] = "zone_library"; - a_str_zones[ 2 ] = "zone_cafeteria"; - a_str_zones[ 3 ] = "zone_cafeteria_end"; - a_str_zones[ 4 ] = "zone_warden_office"; - a_str_zones[ 5 ] = "zone_cellblock_east"; - a_str_zones[ 6 ] = "zone_cellblock_west_warden"; - a_str_zones[ 7 ] = "zone_cellblock_west_barber"; - a_str_zones[ 8 ] = "zone_cellblock_west"; - a_str_zones[ 9 ] = "zone_cellblock_west_gondola"; - foreach ( barrier in zbarriers ) - { - if ( isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "cafe_chest_zbarrier" || isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "start_chest_zbarrier" ) - { - } - else - { - str_model = barrier.model; - b_delete_barrier = 1; - if ( isdefined( barrier.script_string ) ) - { - for ( i = 0; i < a_str_zones.size; i++ ) - { - if ( str_model == a_str_zones[ i ] ) - { - b_delete_barrier = 0; - break; - } - } - } - else if ( b_delete_barrier == 1 ) - { - barrier delete(); - } - } - } - t_temp = getent( "tower_trap_activate_trigger", "targetname" ); - t_temp delete(); - t_temp = getent( "tower_trap_range_trigger", "targetname" ); - t_temp delete(); - e_model = getent( "trap_control_docks", "targetname" ); - e_model delete(); - e_brush = getent( "tower_shockbox_door", "targetname" ); - e_brush delete(); - a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" ); - foreach ( trigger in a_t_travel_triggers ) - { - trigger delete(); - } - a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" ); - foreach ( light in a_e_gondola_lights ) - { - light delete(); - } - a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" ); - foreach ( model in a_e_gondola_landing_gates ) - { - model delete(); - } - a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" ); - foreach ( model in a_e_gondola_landing_doors ) - { - model delete(); - } - a_e_gondola_gates = getentarray( "gondola_gates", "targetname" ); - foreach ( model in a_e_gondola_gates ) - { - model delete(); - } - a_e_gondola_doors = getentarray( "gondola_doors", "targetname" ); - foreach ( model in a_e_gondola_doors ) - { - model delete(); - } - m_gondola = getent( "zipline_gondola", "targetname" ); - m_gondola delete(); - t_ride_trigger = getent( "gondola_ride_trigger", "targetname" ); - t_ride_trigger delete(); - a_classic_clips = getentarray( "classic_clips", "targetname" ); - foreach ( clip in a_classic_clips ) - { - clip connectpaths(); - clip delete(); - } - a_afterlife_props = getentarray( "afterlife_show", "targetname" ); - foreach ( m_prop in a_afterlife_props ) - { - m_prop delete(); - } - spork_portal = getent( "afterlife_show_spork", "targetname" ); - spork_portal delete(); - a_audio = getentarray( "at_headphones", "script_noteworthy" ); - foreach ( model in a_audio ) - { - model delete(); - } - m_spoon_pickup = getent( "pickup_spoon", "targetname" ); - m_spoon_pickup delete(); - t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" ); - t_sq_bg delete(); - t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); - foreach ( trigger in t_crafting_table ) - { - trigger delete(); - } - t_warden_fence = getent( "warden_fence_damage", "targetname" ); - t_warden_fence delete(); - m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); - m_plane_about_to_crash delete(); - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_craftable delete(); - for ( i = 1; i <= 5; i++ ) - { - m_key_lock = getent( "masterkey_lock_" + i, "targetname" ); - m_key_lock delete(); - } - m_shower_door = getent( "shower_key_door", "targetname" ); - m_shower_door delete(); - m_nixie_door = getent( "nixie_door_left", "targetname" ); - m_nixie_door delete(); - m_nixie_door = getent( "nixie_door_right", "targetname" ); - m_nixie_door delete(); - m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" ); - m_nixie_brush delete(); - for ( i = 1; i <= 3; i++ ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - m_nixie_tube delete(); - } - t_elevator_door = getent( "nixie_elevator_door", "targetname" ); - t_elevator_door delete(); - e_elevator_clip = getent( "elevator_door_playerclip", "targetname" ); - e_elevator_clip delete(); - e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" ); - e_elevator_bottom_gate delete(); - e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" ); - e_elevator_bottom_gate delete(); - m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" ); - m_docks_puzzle delete(); - m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" ); - m_docks_puzzle delete(); - m_infirmary_case = getent( "infirmary_case_door_left", "targetname" ); - m_infirmary_case delete(); - m_infirmary_case = getent( "infirmary_case_door_right", "targetname" ); - m_infirmary_case delete(); - fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); - fake_plane_part delete(); - for ( i = 1; i <= 3; i++ ) - { - m_generator = getent( "generator_panel_" + i, "targetname" ); - m_generator delete(); - } - a_m_generator_core = getentarray( "generator_core", "targetname" ); - foreach ( generator in a_m_generator_core ) - { - generator delete(); - } - e_playerclip = getent( "electric_chair_playerclip", "targetname" ); - e_playerclip delete(); - for ( i = 1; i <= 4; i++ ) - { - t_use = getent( "trigger_electric_chair_" + i, "targetname" ); - t_use delete(); - m_chair = getent( "electric_chair_" + i, "targetname" ); - m_chair delete(); - } - a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); - foreach ( model in a_afterlife_interact ) - { - model turn_afterlife_interact_on(); - wait 0.1; - } - flag_wait( "initial_blackscreen_passed" ); - maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); - flag_wait( "start_zombie_round_logic" ); - level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs(); - level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs(); - wait 1; - level notify( "sleight_on" ); - wait_network_frame(); - level notify( "doubletap_on" ); - wait_network_frame(); - level notify( "juggernog_on" ); - wait_network_frame(); - level notify( "electric_cherry_on" ); - wait_network_frame(); - level notify( "deadshot_on" ); - wait_network_frame(); - level notify( "divetonuke_on" ); - wait_network_frame(); - level notify( "additionalprimaryweapon_on" ); - wait_network_frame(); - level notify( "Pack_A_Punch_on" ); - wait_network_frame(); - /* + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" ); + grief_treasure_chest_init(); + precacheshader( "zm_al_wth_zombie" ); + array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief ); + maps\mp\zombies\_zm_ai_brutus::precache(); + maps\mp\zombies\_zm_ai_brutus::init(); + level.enemy_location_override_func = ::enemy_location_override; + level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" ); + a_t_door_triggers = getentarray( "zombie_door", "targetname" ); + + foreach ( trigger in a_t_door_triggers ) + { + if ( isdefined( trigger.script_flag ) ) + { + if ( trigger.script_flag == "activate_cellblock_citadel" || trigger.script_flag == "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" || trigger.script_flag == "activate_infirmary" ) + { + trigger delete(); + continue; + } + + if ( trigger.script_flag == "activate_cafeteria" || trigger.script_flag == "activate_cellblock_east" || trigger.script_flag == "activate_cellblock_west" || trigger.script_flag == "activate_cellblock_barber" || trigger.script_flag == "activate_cellblock_gondola" || trigger.script_flag == "activate_cellblock_east_west" || trigger.script_flag == "activate_warden_office" ) + { + continue; + continue; + } + + if ( isdefined( trigger.target ) ) + { + str_target = trigger.target; + a_door_and_clip = getentarray( str_target, "targetname" ); + + foreach ( ent in a_door_and_clip ) + ent delete(); + } + + trigger delete(); + } + } + + a_t_doors = getentarray( "zombie_door", "targetname" ); + + foreach ( t_door in a_t_doors ) + { + if ( isdefined( t_door.script_flag ) ) + { + if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" ) + t_door maps\mp\zombies\_zm_blockers::door_opened( self.zombie_cost ); + } + } + + zbarriers = getzbarrierarray(); + a_str_zones = []; + a_str_zones[0] = "zone_start"; + a_str_zones[1] = "zone_library"; + a_str_zones[2] = "zone_cafeteria"; + a_str_zones[3] = "zone_cafeteria_end"; + a_str_zones[4] = "zone_warden_office"; + a_str_zones[5] = "zone_cellblock_east"; + a_str_zones[6] = "zone_cellblock_west_warden"; + a_str_zones[7] = "zone_cellblock_west_barber"; + a_str_zones[8] = "zone_cellblock_west"; + a_str_zones[9] = "zone_cellblock_west_gondola"; + + foreach ( barrier in zbarriers ) + { + if ( isdefined( barrier.script_noteworthy ) ) + { + if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" ) + continue; + } + + b_delete_barrier = 1; + + if ( isdefined( barrier.script_string ) ) + { + for ( i = 0; i < a_str_zones.size; i++ ) + { + if ( barrier.script_string == a_str_zones[i] ) + { + b_delete_barrier = 0; + break; + } + } + } + + if ( b_delete_barrier == 1 ) + barrier delete(); + } + + t_temp = getent( "tower_trap_activate_trigger", "targetname" ); + t_temp delete(); + t_temp = getent( "tower_trap_range_trigger", "targetname" ); + t_temp delete(); + e_model = getent( "trap_control_docks", "targetname" ); + e_model delete(); + e_brush = getent( "tower_shockbox_door", "targetname" ); + e_brush delete(); + a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" ); + + foreach ( trigger in a_t_travel_triggers ) + trigger delete(); + + a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" ); + + foreach ( light in a_e_gondola_lights ) + light delete(); + + a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" ); + + foreach ( model in a_e_gondola_landing_gates ) + model delete(); + + a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" ); + + foreach ( model in a_e_gondola_landing_doors ) + model delete(); + + a_e_gondola_gates = getentarray( "gondola_gates", "targetname" ); + + foreach ( model in a_e_gondola_gates ) + model delete(); + + a_e_gondola_doors = getentarray( "gondola_doors", "targetname" ); + + foreach ( model in a_e_gondola_doors ) + model delete(); + + m_gondola = getent( "zipline_gondola", "targetname" ); + m_gondola delete(); + t_ride_trigger = getent( "gondola_ride_trigger", "targetname" ); + t_ride_trigger delete(); + a_classic_clips = getentarray( "classic_clips", "targetname" ); + + foreach ( clip in a_classic_clips ) + { + clip connectpaths(); + clip delete(); + } + + a_afterlife_props = getentarray( "afterlife_show", "targetname" ); + + foreach ( m_prop in a_afterlife_props ) + m_prop delete(); + + spork_portal = getent( "afterlife_show_spork", "targetname" ); + spork_portal delete(); + a_audio = getentarray( "at_headphones", "script_noteworthy" ); + + foreach ( model in a_audio ) + model delete(); + + m_spoon_pickup = getent( "pickup_spoon", "targetname" ); + m_spoon_pickup delete(); + t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" ); + t_sq_bg delete(); + t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); + + foreach ( trigger in t_crafting_table ) + trigger delete(); + + t_warden_fence = getent( "warden_fence_damage", "targetname" ); + t_warden_fence delete(); + m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); + m_plane_about_to_crash delete(); + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_craftable delete(); + + for ( i = 1; i <= 5; i++ ) + { + m_key_lock = getent( "masterkey_lock_" + i, "targetname" ); + m_key_lock delete(); + } + + m_shower_door = getent( "shower_key_door", "targetname" ); + m_shower_door delete(); + m_nixie_door = getent( "nixie_door_left", "targetname" ); + m_nixie_door delete(); + m_nixie_door = getent( "nixie_door_right", "targetname" ); + m_nixie_door delete(); + m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" ); + m_nixie_brush delete(); + + for ( i = 1; i <= 3; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + m_nixie_tube delete(); + } + + t_elevator_door = getent( "nixie_elevator_door", "targetname" ); + t_elevator_door delete(); + e_elevator_clip = getent( "elevator_door_playerclip", "targetname" ); + e_elevator_clip delete(); + e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" ); + e_elevator_bottom_gate delete(); + e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" ); + e_elevator_bottom_gate delete(); + m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" ); + m_docks_puzzle delete(); + m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" ); + m_docks_puzzle delete(); + m_infirmary_case = getent( "infirmary_case_door_left", "targetname" ); + m_infirmary_case delete(); + m_infirmary_case = getent( "infirmary_case_door_right", "targetname" ); + m_infirmary_case delete(); + fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); + fake_plane_part delete(); + + for ( i = 1; i <= 3; i++ ) + { + m_generator = getent( "generator_panel_" + i, "targetname" ); + m_generator delete(); + } + + a_m_generator_core = getentarray( "generator_core", "targetname" ); + + foreach ( generator in a_m_generator_core ) + generator delete(); + + e_playerclip = getent( "electric_chair_playerclip", "targetname" ); + e_playerclip delete(); + + for ( i = 1; i <= 4; i++ ) + { + t_use = getent( "trigger_electric_chair_" + i, "targetname" ); + t_use delete(); + m_chair = getent( "electric_chair_" + i, "targetname" ); + m_chair delete(); + } + + a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); + + foreach ( model in a_afterlife_interact ) + { + model turn_afterlife_interact_on(); + wait 0.1; + } + + flag_wait( "initial_blackscreen_passed" ); + maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); + flag_wait( "start_zombie_round_logic" ); + level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs(); + level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs(); + wait 1; + level notify( "sleight_on" ); + wait_network_frame(); + level notify( "doubletap_on" ); + wait_network_frame(); + level notify( "juggernog_on" ); + wait_network_frame(); + level notify( "electric_cherry_on" ); + wait_network_frame(); + level notify( "deadshot_on" ); + wait_network_frame(); + level notify( "divetonuke_on" ); + wait_network_frame(); + level notify( "additionalprimaryweapon_on" ); + wait_network_frame(); + level notify( "Pack_A_Punch_on" ); + wait_network_frame(); /# - level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager(); + level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager(); #/ - */ } -remove_zombie_hats_for_grief() //checked matches cerberus output +remove_zombie_hats_for_grief() { - self detach( "c_zom_guard_hat" ); + self detach( "c_zom_guard_hat" ); } -enemy_location_override( zombie, enemy ) //checked matches cerberus output +enemy_location_override( zombie, enemy ) { - location = enemy.origin; - if ( is_true( self.reroute ) ) - { - if ( isDefined( self.reroute_origin ) ) - { - location = self.reroute_origin; - } - } - return location; + location = enemy.origin; + + if ( is_true( self.reroute ) ) + { + if ( isdefined( self.reroute_origin ) ) + location = self.reroute_origin; + } + + return location; } -magicbox_face_spawn() //checked matches cerberus output +magicbox_face_spawn() { - self endon( "disconnect" ); - if ( !is_gametype_active( "zgrief" ) ) - { - return; - } - while ( 1 ) - { - self waittill( "user_grabbed_weapon" ); - if ( randomint( 50000 ) == 115 ) - { - self playsoundtoplayer( "zmb_easteregg_face", self ); - self.wth_elem = newclienthudelem( self ); - self.wth_elem.horzalign = "fullscreen"; - self.wth_elem.vertalign = "fullscreen"; - self.wth_elem.sort = 1000; - self.wth_elem.foreground = 0; - self.wth_elem.alpha = 1; - self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); - self.wth_elem.hidewheninmenu = 1; - wait 0.25; - self.wth_elem destroy(); - } - wait 0.05; - } + self endon( "disconnect" ); + + if ( !is_gametype_active( "zgrief" ) ) + return; + + while ( true ) + { + self waittill( "user_grabbed_weapon" ); + + if ( randomint( 50000 ) == 115 ) + { + self playsoundtoplayer( "zmb_easteregg_face", self ); + self.wth_elem = newclienthudelem( self ); + self.wth_elem.horzalign = "fullscreen"; + self.wth_elem.vertalign = "fullscreen"; + self.wth_elem.sort = 1000; + self.wth_elem.foreground = 0; + self.wth_elem.alpha = 1.0; + self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); + self.wth_elem.hidewheninmenu = 1; + wait 0.25; + self.wth_elem destroy(); + } + + wait 0.05; + } } +#using_animtree("fxanim_props"); + turn_afterlife_interact_on() { - if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" ) - { - return; - } - if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" ) - { - if ( !isDefined( level.shockbox_anim ) ) - { - level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; - level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; - } - if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) - { - self useanimtree( -1 ); - self setmodel( "p6_zm_al_shock_box_on" ); - self setanim( level.shockbox_anim[ "on" ] ); - } - } - else - { - self delete(); - } -} + if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" ) + return; + if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" ) + { + if ( !isdefined( level.shockbox_anim ) ) + { + level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim; + level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim; + } + + if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) + { + self useanimtree( -1 ); + self setmodel( "p6_zm_al_shock_box_on" ); + self setanim( level.shockbox_anim["on"] ); + } + } + else + self delete(); +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc index 9d948bd..0a26369 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq.gsc @@ -1,2286 +1,2191 @@ -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zm_alcatraz_sq_nixie; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zm_alcatraz_sq_vo; -#include maps/mp/zm_prison_sq_final; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_afterlife; -#include maps/_vehicle; -#include maps/_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\_utility; +#include maps\_vehicle; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_prison_sq_final; +#include maps\mp\zm_alcatraz_sq_vo; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zm_alcatraz_sq_nixie; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_clone; init() { - precachemodel( "accessories_gas_canister_1" ); - precachemodel( "p6_zm_al_power_station_panels_03" ); - precacheitem( "falling_hands_zm" ); - precacheitem( "electrocuted_hands_zm" ); - precachestring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); - precachestring( &"ZM_PRISON_LAUNDRY_MACHINE_ACTIVATE" ); - precachestring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); - precachestring( &"ZM_PRISON_PLANE_BOARD" ); - precachestring( &"ZM_PRISON_KEY_DOOR_LOCKED" ); - precacherumble( "damage_heavy" ); - precacherumble( "explosion_generic" ); - registerclientfield( "world", "fake_master_key", 9000, 2, "int" ); - flag_init( "map_revealed" ); - flag_init( "key_found" ); - flag_init( "cloth_found" ); - flag_init( "fueltanks_found" ); - flag_init( "engine_found" ); - flag_init( "steering_found" ); - flag_init( "rigging_found" ); - flag_init( "plane_ready" ); - flag_init( "plane_built" ); - flag_init( "plane_boarded" ); - flag_init( "plane_departed" ); - flag_init( "plane_approach_bridge" ); - flag_init( "plane_zapped" ); - flag_init( "plane_crashed" ); - flag_init( "portal_open" ); - flag_init( "spawn_fuel_tanks" ); - flag_init( "plane_is_away" ); - flag_init( "plane_trip_to_nml_successful" ); - flag_init( "story_vo_playing" ); - flag_init( "docks_inner_gate_unlocked" ); - flag_init( "docks_inner_gate_open" ); - flag_init( "docks_outer_gate_open" ); - flag_init( "docks_gates_remain_open" ); - flag_init( "nixie_puzzle_solved" ); - flag_init( "nixie_countdown_started" ); - flag_init( "nixie_countdown_expired" ); - flag_init( "nixie_puzzle_completed" ); - flag_init( "generator_challenge_completed" ); - flag_init( "dryer_cycle_active" ); - flag_init( "quest_completed_thrice" ); - flag_init( "final_quest_ready" ); - flag_init( "final_quest_audio_tour_started" ); - flag_init( "final_quest_audio_tour_finished" ); - flag_init( "final_quest_plane_built" ); - flag_init( "final_quest_plane_boarded" ); - flag_init( "final_quest_plane_departed" ); - flag_init( "final_quest_plane_zapped" ); - flag_init( "final_quest_plane_crashed" ); - flag_init( "final_quest_final_battle_started" ); - flag_init( "final_quest_good_wins" ); - flag_init( "final_quest_evil_wins" ); - flag_init( "nixie_ee_flashing" ); + precachemodel( "accessories_gas_canister_1" ); + precachemodel( "p6_zm_al_power_station_panels_03" ); + precacheitem( "falling_hands_zm" ); + precacheitem( "electrocuted_hands_zm" ); + precachestring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); + precachestring( &"ZM_PRISON_LAUNDRY_MACHINE_ACTIVATE" ); + precachestring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); + precachestring( &"ZM_PRISON_PLANE_BOARD" ); + precachestring( &"ZM_PRISON_KEY_DOOR_LOCKED" ); + precacherumble( "damage_heavy" ); + precacherumble( "explosion_generic" ); + registerclientfield( "world", "fake_master_key", 9000, 2, "int" ); + flag_init( "map_revealed" ); + flag_init( "key_found" ); + flag_init( "cloth_found" ); + flag_init( "fueltanks_found" ); + flag_init( "engine_found" ); + flag_init( "steering_found" ); + flag_init( "rigging_found" ); + flag_init( "plane_ready" ); + flag_init( "plane_built" ); + flag_init( "plane_boarded" ); + flag_init( "plane_departed" ); + flag_init( "plane_approach_bridge" ); + flag_init( "plane_zapped" ); + flag_init( "plane_crashed" ); + flag_init( "portal_open" ); + flag_init( "spawn_fuel_tanks" ); + flag_init( "plane_is_away" ); + flag_init( "plane_trip_to_nml_successful" ); + flag_init( "story_vo_playing" ); + flag_init( "docks_inner_gate_unlocked" ); + flag_init( "docks_inner_gate_open" ); + flag_init( "docks_outer_gate_open" ); + flag_init( "docks_gates_remain_open" ); + flag_init( "nixie_puzzle_solved" ); + flag_init( "nixie_countdown_started" ); + flag_init( "nixie_countdown_expired" ); + flag_init( "nixie_puzzle_completed" ); + flag_init( "generator_challenge_completed" ); + flag_init( "dryer_cycle_active" ); + flag_init( "quest_completed_thrice" ); + flag_init( "final_quest_ready" ); + flag_init( "final_quest_audio_tour_started" ); + flag_init( "final_quest_audio_tour_finished" ); + flag_init( "final_quest_plane_built" ); + flag_init( "final_quest_plane_boarded" ); + flag_init( "final_quest_plane_departed" ); + flag_init( "final_quest_plane_zapped" ); + flag_init( "final_quest_plane_crashed" ); + flag_init( "final_quest_final_battle_started" ); + flag_init( "final_quest_good_wins" ); + flag_init( "final_quest_evil_wins" ); + flag_init( "nixie_ee_flashing" ); } start_alcatraz_sidequest() { - init(); - onplayerconnect_callback( ::player_disconnect_watcher ); - onplayerconnect_callback( ::player_death_watcher ); - flag_wait( "start_zombie_round_logic" ); + init(); + onplayerconnect_callback( ::player_disconnect_watcher ); + onplayerconnect_callback( ::player_death_watcher ); + flag_wait( "start_zombie_round_logic" ); /# - setup_devgui(); + setup_devgui(); #/ - level.n_quest_iteration_count = 1; - level.n_plane_fuel_count = 5; - level.n_plane_pieces_found = 0; - level.final_flight_players = []; - level.final_flight_activated = 0; - level.characters_in_nml = []; - level.someone_has_visited_nml = 0; - level.custom_game_over_hud_elem = ::maps/mp/zm_prison_sq_final::custom_game_over_hud_elem; - prevent_theater_mode_spoilers(); - setup_key_doors(); - setup_puzzle_piece_glint(); - setup_puzzles(); - setup_quest_triggers(); - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty != 0 ) - { - maps/mp/zm_prison_sq_final::final_flight_setup(); - } - level thread warden_fence_hotjoin_handler(); - if ( isDefined( level.host_migration_listener_custom_func ) ) - { - level thread [[ level.host_migration_listener_custom_func ]](); - } - else - { - level thread host_migration_listener(); - } - if ( isDefined( level.manage_electric_chairs_custom_func ) ) - { - level thread [[ level.manage_electric_chairs_custom_func ]](); - } - else - { - level thread manage_electric_chairs(); - } - if ( isDefined( level.plane_flight_thread_custom_func ) ) - { - level thread [[ level.plane_flight_thread_custom_func ]](); - } - else - { - level thread plane_flight_thread(); - } - if ( isDefined( level.track_quest_status_thread_custom_func ) ) - { - level thread [[ level.track_quest_status_thread_custom_func ]](); - } - else - { - level thread track_quest_status_thread(); - } - maps/mp/zm_alcatraz_sq_vo::opening_vo(); + level.n_quest_iteration_count = 1; + level.n_plane_fuel_count = 5; + level.n_plane_pieces_found = 0; + level.final_flight_players = []; + level.final_flight_activated = 0; + level.characters_in_nml = []; + level.someone_has_visited_nml = 0; + level.custom_game_over_hud_elem = maps\mp\zm_prison_sq_final::custom_game_over_hud_elem; + prevent_theater_mode_spoilers(); + setup_key_doors(); + setup_puzzle_piece_glint(); + setup_puzzles(); + setup_quest_triggers(); + + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty != 0 ) + maps\mp\zm_prison_sq_final::final_flight_setup(); + + level thread warden_fence_hotjoin_handler(); + + if ( isdefined( level.host_migration_listener_custom_func ) ) + level thread [[ level.host_migration_listener_custom_func ]](); + else + level thread host_migration_listener(); + + if ( isdefined( level.manage_electric_chairs_custom_func ) ) + level thread [[ level.manage_electric_chairs_custom_func ]](); + else + level thread manage_electric_chairs(); + + if ( isdefined( level.plane_flight_thread_custom_func ) ) + level thread [[ level.plane_flight_thread_custom_func ]](); + else + level thread plane_flight_thread(); + + if ( isdefined( level.track_quest_status_thread_custom_func ) ) + level thread [[ level.track_quest_status_thread_custom_func ]](); + else + level thread track_quest_status_thread(); + + maps\mp\zm_alcatraz_sq_vo::opening_vo(); } host_migration_listener() { - level endon( "end_game" ); - level notify( "afterlife_hostmigration" ); - level endon( "afterlife_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); - veh_plane_flyable = getent( "plane_flyable", "targetname" ); - a_players = getplayers(); - if ( flag( "plane_boarded" ) && !flag( "plane_departed" ) ) - { - _a215 = a_players; - _k215 = getFirstArrayKey( _a215 ); - while ( isDefined( _k215 ) ) - { - player = _a215[ _k215 ]; - if ( isDefined( player ) && isDefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); - } - _k215 = getNextArrayKey( _a215, _k215 ); - } - } - else if ( flag( "plane_departed" ) && !flag( "plane_approach_bridge" ) ) - { - _a225 = a_players; - _k225 = getFirstArrayKey( _a225 ); - while ( isDefined( _k225 ) ) - { - player = _a225[ _k225 ]; - if ( isDefined( player ) && isDefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); - } - _k225 = getNextArrayKey( _a225, _k225 ); - } - } - else if ( flag( "plane_approach_bridge" ) && !flag( "plane_zapped" ) ) - { - _a235 = a_players; - _k235 = getFirstArrayKey( _a235 ); - while ( isDefined( _k235 ) ) - { - player = _a235[ _k235 ]; - if ( isDefined( player ) && isDefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); - } - _k235 = getNextArrayKey( _a235, _k235 ); - } - } - else while ( flag( "plane_zapped" ) && !flag( "plane_crashed" ) ) - { - _a245 = a_players; - _k245 = getFirstArrayKey( _a245 ); - while ( isDefined( _k245 ) ) - { - player = _a245[ _k245 ]; - if ( isDefined( player ) && isDefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( player.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); - } - _k245 = getNextArrayKey( _a245, _k245 ); - } - } - setup_puzzle_piece_glint(); - setclientfield( "fake_master_key", level.is_master_key_west + 1 ); - if ( !flag( "key_found" ) ) - { - if ( level.is_master_key_west ) - { - exploder( 101 ); - break; - } - else - { - exploder( 100 ); - } - } - } + level endon( "end_game" ); + level notify( "afterlife_hostmigration" ); + level endon( "afterlife_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); + veh_plane_flyable = getent( "plane_flyable", "targetname" ); + a_players = getplayers(); + + if ( flag( "plane_boarded" ) && !flag( "plane_departed" ) ) + { + foreach ( player in a_players ) + { + if ( isdefined( player ) && isdefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) + player playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); + } + } + else if ( flag( "plane_departed" ) && !flag( "plane_approach_bridge" ) ) + { + foreach ( player in a_players ) + { + if ( isdefined( player ) && isdefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) + player playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); + } + } + else if ( flag( "plane_approach_bridge" ) && !flag( "plane_zapped" ) ) + { + foreach ( player in a_players ) + { + if ( isdefined( player ) && isdefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) + player playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( player.n_passenger_index + 1 ) ); + } + } + else if ( flag( "plane_zapped" ) && !flag( "plane_crashed" ) ) + { + foreach ( player in a_players ) + { + if ( isdefined( player ) && isdefined( player.character_name ) && isinarray( level.characters_in_nml, player.character_name ) ) + player playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( player.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); + } + } + + setup_puzzle_piece_glint(); + setclientfield( "fake_master_key", level.is_master_key_west + 1 ); + + if ( !flag( "key_found" ) ) + { + if ( level.is_master_key_west ) + exploder( 101 ); + else + exploder( 100 ); + } + } } prevent_theater_mode_spoilers() { - flag_wait( "initial_blackscreen_passed" ); - m_plane_flyable = getent( "plane_flyable", "targetname" ); - m_plane_flyable setinvisibletoall(); - m_plane_hideable_engine = getent( "plane_hideable_engine", "targetname" ); - m_plane_hideable_engine ghost(); - m_plane_hideable_clothes_pile = getent( "plane_hideable_clothes_pile", "targetname" ); - m_plane_hideable_clothes_pile ghost(); - a_str_partnames = []; - a_str_partnames[ 0 ] = "cloth"; - a_str_partnames[ 1 ] = "steering"; - i = 0; - while ( i < a_str_partnames.size ) - { - m_plane_piece = get_craftable_piece_model( "plane", a_str_partnames[ i ] ); - if ( isDefined( m_plane_piece ) ) - { - m_plane_piece setinvisibletoall(); - } - i++; - } - m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); - if ( isDefined( m_master_key ) ) - { - m_master_key setinvisibletoall(); - } + flag_wait( "initial_blackscreen_passed" ); + m_plane_flyable = getent( "plane_flyable", "targetname" ); + m_plane_flyable setinvisibletoall(); + m_plane_hideable_engine = getent( "plane_hideable_engine", "targetname" ); + m_plane_hideable_engine ghost(); + m_plane_hideable_clothes_pile = getent( "plane_hideable_clothes_pile", "targetname" ); + m_plane_hideable_clothes_pile ghost(); + a_str_partnames = []; + a_str_partnames[0] = "cloth"; + a_str_partnames[1] = "steering"; + + for ( i = 0; i < a_str_partnames.size; i++ ) + { + m_plane_piece = get_craftable_piece_model( "plane", a_str_partnames[i] ); + + if ( isdefined( m_plane_piece ) ) + m_plane_piece setinvisibletoall(); + } + + m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); + + if ( isdefined( m_master_key ) ) + m_master_key setinvisibletoall(); } setup_puzzle_piece_glint() { - wait 1; - a_str_partnames = []; - a_str_partnames[ 0 ] = "cloth"; - a_str_partnames[ 1 ] = "fueltanks"; - a_str_partnames[ 2 ] = "engine"; - a_str_partnames[ 3 ] = "steering"; - a_str_partnames[ 4 ] = "rigging"; - i = 0; - while ( i < a_str_partnames.size ) - { - m_plane_piece = get_craftable_piece_model( "plane", a_str_partnames[ i ] ); - if ( isDefined( m_plane_piece ) ) - { - playfxontag( level._effect[ "quest_item_glow" ], m_plane_piece, "tag_origin" ); - } - m_fuel_can = get_craftable_piece_model( "refuelable_plane", "fuel" + ( i + 1 ) ); - if ( isDefined( m_fuel_can ) ) - { - playfxontag( level._effect[ "quest_item_glow" ], m_fuel_can, "tag_origin" ); - } - i++; - } - m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); - if ( isDefined( m_master_key ) ) - { - playfxontag( level._effect[ "key_glint" ], m_master_key, "tag_origin" ); - } - m_fake_plane_steering = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); - if ( isDefined( m_fake_plane_steering ) ) - { - playfxontag( level._effect[ "quest_item_glow" ], m_fake_plane_steering, "tag_origin" ); - } + wait 1; + a_str_partnames = []; + a_str_partnames[0] = "cloth"; + a_str_partnames[1] = "fueltanks"; + a_str_partnames[2] = "engine"; + a_str_partnames[3] = "steering"; + a_str_partnames[4] = "rigging"; + + for ( i = 0; i < a_str_partnames.size; i++ ) + { + m_plane_piece = get_craftable_piece_model( "plane", a_str_partnames[i] ); + + if ( isdefined( m_plane_piece ) ) + playfxontag( level._effect["quest_item_glow"], m_plane_piece, "tag_origin" ); + + m_fuel_can = get_craftable_piece_model( "refuelable_plane", "fuel" + ( i + 1 ) ); + + if ( isdefined( m_fuel_can ) ) + playfxontag( level._effect["quest_item_glow"], m_fuel_can, "tag_origin" ); + } + + m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); + + if ( isdefined( m_master_key ) ) + playfxontag( level._effect["key_glint"], m_master_key, "tag_origin" ); + + m_fake_plane_steering = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); + + if ( isdefined( m_fake_plane_steering ) ) + playfxontag( level._effect["quest_item_glow"], m_fake_plane_steering, "tag_origin" ); } setup_devgui() { - setdvar( "add_afterlife", "off" ); - setdvar( "build_plane", "off" ); - setdvar( "get_master_key", "off" ); - setdvar( "alcatraz_final_battle", "off" ); - setdvar( "alcatraz_give_shield", "off" ); + setdvar( "add_afterlife", "off" ); + setdvar( "build_plane", "off" ); + setdvar( "get_master_key", "off" ); + setdvar( "alcatraz_final_battle", "off" ); + setdvar( "alcatraz_give_shield", "off" ); /# - adddebugcommand( "devgui_cmd "Zombies/Alcatraz:1/Add Afterlife" "add_afterlife on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Alcatraz:1/Get Master Key" "get_master_key on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Alcatraz:1/Alcatraz Final Battle" "alcatraz_final_battle on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Alcatraz:1/Build Plane:1" "build_plane on"\n" ); - adddebugcommand( "devgui_cmd "Zombies/Alcatraz:1/Give Shield:1" "alcatraz_give_shield on"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Alcatraz:1/Add Afterlife\" \"add_afterlife on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Alcatraz:1/Get Master Key\" \"get_master_key on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Alcatraz:1/Alcatraz Final Battle\" \"alcatraz_final_battle on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Alcatraz:1/Build Plane:1\" \"build_plane on\"\n" ); + adddebugcommand( "devgui_cmd \"Zombies/Alcatraz:1/Give Shield:1\" \"alcatraz_give_shield on\"\n" ); #/ - level thread watch_devgui_alcatraz_final_battle(); - level thread watch_devgui_afterlife(); - level thread watch_devgui_plane(); - level thread watch_devgui_get_key(); - level thread watch_devgui_give_shield(); + level thread watch_devgui_alcatraz_final_battle(); + level thread watch_devgui_afterlife(); + level thread watch_devgui_plane(); + level thread watch_devgui_get_key(); + level thread watch_devgui_give_shield(); } watch_devgui_alcatraz_final_battle() { - while ( 1 ) - { - if ( getDvar( "alcatraz_final_battle" ) == "on" ) - { - players = getplayers(); - _a379 = players; - _k379 = getFirstArrayKey( _a379 ); - while ( isDefined( _k379 ) ) - { - player = _a379[ _k379 ]; + while ( true ) + { + if ( getdvar( _hash_9624FC9B ) == "on" ) + { + players = getplayers(); + + foreach ( player in players ) + { /# - iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); + iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); #/ - level.final_flight_activated = 1; - player thread final_flight_player_thread(); - _k379 = getNextArrayKey( _a379, _k379 ); - } - setdvar( "alcatraz_final_battle", "off" ); - } - wait 0,1; - } + level.final_flight_activated = 1; + player thread final_flight_player_thread(); + } + + setdvar( "alcatraz_final_battle", "off" ); + } + + wait 0.1; + } } watch_devgui_get_key() { - while ( 1 ) - { - if ( getDvar( "get_master_key" ) == "on" ) - { - a_players = []; - a_players = getplayers(); - m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); - if ( isDefined( m_master_key ) ) - { - m_master_key.origin = a_players[ 0 ].origin + vectorScale( ( 0, 0, 0 ), 60 ); - m_master_key setvisibletoall(); - } - setdvar( "get_master_key", "off" ); - } - wait 0,1; - } + while ( true ) + { + if ( getdvar( _hash_B1E41F18 ) == "on" ) + { + a_players = []; + a_players = getplayers(); + m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); + + if ( isdefined( m_master_key ) ) + { + m_master_key.origin = a_players[0].origin + vectorscale( ( 0, 0, 1 ), 60.0 ); + m_master_key setvisibletoall(); + } + + setdvar( "get_master_key", "off" ); + } + + wait 0.1; + } } watch_devgui_afterlife() { - while ( 1 ) - { - if ( getDvar( "add_afterlife" ) == "on" ) - { - a_players = []; - a_players = getplayers(); - i = 0; - while ( i < a_players.size ) - { - a_players[ i ] afterlife_add(); - i++; - } - setdvar( "add_afterlife", "off" ); - } - wait 0,1; - } + while ( true ) + { + if ( getdvar( _hash_51DB321F ) == "on" ) + { + a_players = []; + a_players = getplayers(); + + for ( i = 0; i < a_players.size; i++ ) + a_players[i] afterlife_add(); + + setdvar( "add_afterlife", "off" ); + } + + wait 0.1; + } } watch_devgui_give_shield() { - while ( 1 ) - { - if ( getDvar( "alcatraz_give_shield" ) == "on" ) - { - _a438 = getplayers(); - _k438 = getFirstArrayKey( _a438 ); - while ( isDefined( _k438 ) ) - { - player = _a438[ _k438 ]; - if ( is_equipment_included( "alcatraz_shield_zm" ) ) - { - player maps/mp/zombies/_zm_equipment::equipment_buy( "alcatraz_shield_zm" ); - } - _k438 = getNextArrayKey( _a438, _k438 ); - } - setdvar( "alcatraz_give_shield", "off" ); - } - wait 0,05; - } + while ( true ) + { + if ( getdvar( _hash_DF65AA39 ) == "on" ) + { + foreach ( player in getplayers() ) + { + if ( is_equipment_included( "alcatraz_shield_zm" ) ) + player maps\mp\zombies\_zm_equipment::equipment_buy( "alcatraz_shield_zm" ); + } + + setdvar( "alcatraz_give_shield", "off" ); + } + + wait 0.05; + } } watch_devgui_plane() { - is_shortcut_plane_built = 0; - while ( !is_shortcut_plane_built ) - { - if ( getDvar( "build_plane" ) == "on" ) - { + is_shortcut_plane_built = 0; + + while ( !is_shortcut_plane_built ) + { + if ( getdvar( _hash_3C0D12E4 ) == "on" ) + { /# - iprintlnbold( "plane built!" ); + iprintlnbold( "plane built!" ); #/ - is_shortcut_plane_built = 1; - } - wait 0,1; - } - i = 0; - while ( i < level.a_uts_craftables.size ) - { - if ( level.a_uts_craftables[ i ].equipname == "plane" ) - { - level.a_uts_craftables[ i ].crafted = 1; - } - i++; - } - level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo(); - plane_craftable = getent( "plane_craftable", "targetname" ); - plane_craftable showpart( "tag_support_upper" ); - plane_craftable showpart( "tag_wing_skins_up" ); - plane_craftable showpart( "tag_engines_up" ); - plane_craftable showpart( "tag_feul_tanks" ); - plane_craftable showpart( "tag_control_mechanism" ); - plane_craftable showpart( "tag_fuel_hose" ); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly trigger_on(); - t_plane_fly.require_look_at = 0; - while ( isDefined( t_plane_fly ) ) - { - t_plane_fly waittill( "trigger", e_triggerer ); - if ( isplayer( e_triggerer ) ) - { + is_shortcut_plane_built = 1; + } + + wait 0.1; + } + + for ( i = 0; i < level.a_uts_craftables.size; i++ ) + { + if ( level.a_uts_craftables[i].equipname == "plane" ) + level.a_uts_craftables[i].crafted = 1; + } + + level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo(); + plane_craftable = getent( "plane_craftable", "targetname" ); + plane_craftable showpart( "tag_support_upper" ); + plane_craftable showpart( "tag_wing_skins_up" ); + plane_craftable showpart( "tag_engines_up" ); + plane_craftable showpart( "tag_feul_tanks" ); + plane_craftable showpart( "tag_control_mechanism" ); + plane_craftable showpart( "tag_fuel_hose" ); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly trigger_on(); + t_plane_fly.require_look_at = 0; + + while ( isdefined( t_plane_fly ) ) + { + t_plane_fly waittill( "trigger", e_triggerer ); + + if ( isplayer( e_triggerer ) ) + { /# - iprintlnbold( e_triggerer ); + iprintlnbold( e_triggerer ); #/ - while ( isDefined( level.custom_plane_validation ) ) - { - valid = t_plane_fly [[ level.custom_plane_validation ]]( e_triggerer ); - while ( !valid ) - { - continue; - } - } - if ( level.n_plane_fuel_count == 5 ) - { - if ( isDefined( level.plane_boarding_thread_custom_func ) ) - { - e_triggerer thread [[ level.plane_boarding_thread_custom_func ]](); - break; - } - else - { + if ( isdefined( level.custom_plane_validation ) ) + { + valid = t_plane_fly [[ level.custom_plane_validation ]]( e_triggerer ); + + if ( !valid ) + continue; + } + + if ( level.n_plane_fuel_count == 5 ) + { + if ( isdefined( level.plane_boarding_thread_custom_func ) ) + e_triggerer thread [[ level.plane_boarding_thread_custom_func ]](); + else + { /# - iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); + iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); #/ - e_triggerer thread plane_boarding_thread(); - } - } - } - } + e_triggerer thread plane_boarding_thread(); + } + } + } + } } setup_key_doors() { - width = 0; - height = 0; - length = 0; - piece_number = 1; - while ( piece_number < 6 ) - { - switch( piece_number ) - { - case 1: - width = 120; - height = 112; - length = 120; - break; - case 2: - width = 120; - height = 112; - length = 124; - break; - case 3: - width = 108; - height = 112; - length = 90; - break; - case 4: - width = 98; - height = 112; - length = 108; - break; - case 5: - width = 60; - height = 112; - length = 90; - break; - } - create_key_door_unitrigger( piece_number, width, height, length ); - piece_number++; - } + width = 0; + height = 0; + length = 0; + + for ( piece_number = 1; piece_number < 6; piece_number++ ) + { + switch ( piece_number ) + { + case "1": + width = 120; + height = 112; + length = 120; + break; + case "2": + width = 120; + height = 112; + length = 124; + break; + case "3": + width = 108; + height = 112; + length = 90; + break; + case "4": + width = 98; + height = 112; + length = 108; + break; + case "5": + width = 60; + height = 112; + length = 90; + break; + } + + create_key_door_unitrigger( piece_number, width, height, length ); + } } create_key_door_unitrigger( piece_num, width, height, length ) { - t_key_door = getstruct( "key_door_" + piece_num + "_trigger", "targetname" ); - t_key_door.unitrigger_stub = spawnstruct(); - t_key_door.unitrigger_stub.origin = t_key_door.origin; - t_key_door.unitrigger_stub.angles = t_key_door.angles; - t_key_door.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - t_key_door.unitrigger_stub.hint_string = &"ZM_PRISON_KEY_DOOR_LOCKED"; - t_key_door.unitrigger_stub.cursor_hint = "HINT_NOICON"; - t_key_door.unitrigger_stub.script_width = width; - t_key_door.unitrigger_stub.script_height = height; - t_key_door.unitrigger_stub.script_length = length; - t_key_door.unitrigger_stub.n_door_index = piece_num; - t_key_door.unitrigger_stub.require_look_at = 0; - t_key_door.unitrigger_stub.prompt_and_visibility_func = ::key_door_trigger_visibility; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( t_key_door.unitrigger_stub, ::master_key_door_trigger_thread ); + t_key_door = getstruct( "key_door_" + piece_num + "_trigger", "targetname" ); + t_key_door.unitrigger_stub = spawnstruct(); + t_key_door.unitrigger_stub.origin = t_key_door.origin; + t_key_door.unitrigger_stub.angles = t_key_door.angles; + t_key_door.unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + t_key_door.unitrigger_stub.hint_string = &"ZM_PRISON_KEY_DOOR_LOCKED"; + t_key_door.unitrigger_stub.cursor_hint = "HINT_NOICON"; + t_key_door.unitrigger_stub.script_width = width; + t_key_door.unitrigger_stub.script_height = height; + t_key_door.unitrigger_stub.script_length = length; + t_key_door.unitrigger_stub.n_door_index = piece_num; + t_key_door.unitrigger_stub.require_look_at = 0; + t_key_door.unitrigger_stub.prompt_and_visibility_func = ::key_door_trigger_visibility; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( t_key_door.unitrigger_stub, ::master_key_door_trigger_thread ); } key_door_trigger_visibility( player ) { - if ( !player.afterlife && isDefined( self.stub.master_key_door_opened ) && !self.stub.master_key_door_opened ) - { - if ( self.stub.n_door_index == 2 ) - { - b_is_invis = !flag( "generator_challenge_completed" ); - } - } - self setinvisibletoplayer( player, b_is_invis ); - if ( flag( "key_found" ) ) - { - self sethintstring( &"ZM_PRISON_KEY_DOOR" ); - } - else - { - self sethintstring( self.stub.hint_string ); - } - return !b_is_invis; + b_is_invis = player.afterlife || isdefined( self.stub.master_key_door_opened ) && self.stub.master_key_door_opened || self.stub.n_door_index == 2 && !flag( "generator_challenge_completed" ); + self setinvisibletoplayer( player, b_is_invis ); + + if ( flag( "key_found" ) ) + self sethintstring( &"ZM_PRISON_KEY_DOOR" ); + else + self sethintstring( self.stub.hint_string ); + + return !b_is_invis; } master_key_door_trigger_thread() { - self endon( "death" ); - self endon( "kill_trigger" ); - n_door_index = self.stub.n_door_index; - b_door_open = 0; - while ( !b_door_open ) - { - self waittill( "trigger", e_triggerer ); - if ( e_triggerer is_holding_part( "quest_key1", "p6_zm_al_key" ) ) - { - self.stub.master_key_door_opened = 1; - self.stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - level thread open_custom_door_master_key( n_door_index, e_triggerer ); - self playsound( "evt_quest_door_open" ); - b_door_open = 1; - continue; - } - else - { - e_triggerer thread do_player_general_vox( "quest", "sidequest_key", undefined, 100 ); + self endon( "death" ); + self endon( "kill_trigger" ); + n_door_index = self.stub.n_door_index; + b_door_open = 0; + + while ( !b_door_open ) + { + self waittill( "trigger", e_triggerer ); + + if ( e_triggerer is_holding_part( "quest_key1", "p6_zm_al_key" ) ) + { + self.stub.master_key_door_opened = 1; + self.stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + level thread open_custom_door_master_key( n_door_index, e_triggerer ); + self playsound( "evt_quest_door_open" ); + b_door_open = 1; + } + else + { + e_triggerer thread do_player_general_vox( "quest", "sidequest_key", undefined, 100 ); /# - iprintlnbold( "missing key!" ); + iprintlnbold( "missing key!" ); #/ - } - } - level thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); + } + } + + level thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); } open_custom_door_master_key( n_door_index, e_triggerer ) { - m_lock = getent( "masterkey_lock_" + n_door_index, "targetname" ); - m_lock playsound( "zmb_quest_key_unlock" ); - playfxontag( level._effect[ "fx_alcatraz_unlock_door" ], m_lock, "tag_origin" ); - wait 0,5; - m_lock delete(); - switch( n_door_index ) - { - case 1: - shower_key_door = getent( "shower_key_door", "targetname" ); - shower_key_door moveto( shower_key_door.origin + vectorScale( ( 0, 0, 0 ), 80 ), 0,25 ); - shower_key_door connectpaths(); - if ( isDefined( e_triggerer ) ) - { - e_triggerer door_rumble_on_open(); - } - shower_key_door playsound( "zmb_chainlink_open" ); - break; - case 2: - admin_powerhouse_puzzle_door_clip = getent( "admin_powerhouse_puzzle_door_clip", "targetname" ); - admin_powerhouse_puzzle_door_clip delete(); - admin_powerhouse_puzzle_door = getent( "admin_powerhouse_puzzle_door", "targetname" ); - admin_powerhouse_puzzle_door rotateyaw( 90, 0,5 ); - admin_powerhouse_puzzle_door playsound( "zmb_chainlink_open" ); - break; - case 3: - m_nixie_door_left = getent( "nixie_door_left", "targetname" ); - m_nixie_door_right = getent( "nixie_door_right", "targetname" ); - m_nixie_door_left rotateyaw( -165, 0,5 ); - m_nixie_door_right rotateyaw( 165, 0,5 ); - m_nixie_tube_weaponclip = getent( "nixie_tube_weaponclip", "targetname" ); - m_nixie_tube_weaponclip delete(); - if ( isDefined( e_triggerer ) ) - { - e_triggerer door_rumble_on_open(); - } - break; - case 4: - m_gate_01 = getent( "cable_puzzle_gate_01", "targetname" ); - m_gate_01 moveto( m_gate_01.origin + ( -16, 80, 0 ), 0,5 ); - m_gate_01 connectpaths(); - gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); - gate_1_monsterclip.origin += vectorScale( ( 0, 0, 0 ), 256 ); - gate_1_monsterclip disconnectpaths(); - gate_1_monsterclip.origin -= vectorScale( ( 0, 0, 0 ), 256 ); - if ( isDefined( e_triggerer ) ) - { - e_triggerer door_rumble_on_open(); - } - m_gate_01 playsound( "zmb_chainlink_open" ); - flag_set( "docks_inner_gate_unlocked" ); - flag_set( "docks_inner_gate_open" ); - break; - case 5: - m_infirmary_case_door_left = getent( "infirmary_case_door_left", "targetname" ); - m_infirmary_case_door_right = getent( "infirmary_case_door_right", "targetname" ); - m_infirmary_case_door_left rotateyaw( -165, 0,5 ); - m_infirmary_case_door_right rotateyaw( 165, 0,5 ); - m_fake_plane_steering = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); - m_plane_steering = get_craftable_piece_model( "plane", "steering" ); - m_plane_steering moveto( m_plane_steering.origin + vectorScale( ( 0, 0, 0 ), 512 ), 0,05 ); - m_plane_steering setvisibletoall(); - m_fake_plane_steering hide(); - if ( isDefined( e_triggerer ) ) - { - e_triggerer door_rumble_on_open(); - } - m_infirmary_case_door_right playsound( "zmb_cabinet_door" ); - break; - } + m_lock = getent( "masterkey_lock_" + n_door_index, "targetname" ); + m_lock playsound( "zmb_quest_key_unlock" ); + playfxontag( level._effect["fx_alcatraz_unlock_door"], m_lock, "tag_origin" ); + wait 0.5; + m_lock delete(); + + switch ( n_door_index ) + { + case "1": + shower_key_door = getent( "shower_key_door", "targetname" ); + shower_key_door moveto( shower_key_door.origin + vectorscale( ( 1, 0, 0 ), 80.0 ), 0.25 ); + shower_key_door connectpaths(); + + if ( isdefined( e_triggerer ) ) + e_triggerer door_rumble_on_open(); + + shower_key_door playsound( "zmb_chainlink_open" ); + break; + case "2": + admin_powerhouse_puzzle_door_clip = getent( "admin_powerhouse_puzzle_door_clip", "targetname" ); + admin_powerhouse_puzzle_door_clip delete(); + admin_powerhouse_puzzle_door = getent( "admin_powerhouse_puzzle_door", "targetname" ); + admin_powerhouse_puzzle_door rotateyaw( 90, 0.5 ); + admin_powerhouse_puzzle_door playsound( "zmb_chainlink_open" ); + break; + case "3": + m_nixie_door_left = getent( "nixie_door_left", "targetname" ); + m_nixie_door_right = getent( "nixie_door_right", "targetname" ); + m_nixie_door_left rotateyaw( -165, 0.5 ); + m_nixie_door_right rotateyaw( 165, 0.5 ); + m_nixie_tube_weaponclip = getent( "nixie_tube_weaponclip", "targetname" ); + m_nixie_tube_weaponclip delete(); + + if ( isdefined( e_triggerer ) ) + e_triggerer door_rumble_on_open(); + + break; + case "4": + m_gate_01 = getent( "cable_puzzle_gate_01", "targetname" ); + m_gate_01 moveto( m_gate_01.origin + ( -16, 80, 0 ), 0.5 ); + m_gate_01 connectpaths(); + gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); + gate_1_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 ); + gate_1_monsterclip disconnectpaths(); + gate_1_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 ); + + if ( isdefined( e_triggerer ) ) + e_triggerer door_rumble_on_open(); + + m_gate_01 playsound( "zmb_chainlink_open" ); + flag_set( "docks_inner_gate_unlocked" ); + flag_set( "docks_inner_gate_open" ); + break; + case "5": + m_infirmary_case_door_left = getent( "infirmary_case_door_left", "targetname" ); + m_infirmary_case_door_right = getent( "infirmary_case_door_right", "targetname" ); + m_infirmary_case_door_left rotateyaw( -165, 0.5 ); + m_infirmary_case_door_right rotateyaw( 165, 0.5 ); + m_fake_plane_steering = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); + m_plane_steering = get_craftable_piece_model( "plane", "steering" ); + m_plane_steering moveto( m_plane_steering.origin + vectorscale( ( 0, 0, 1 ), 512.0 ), 0.05 ); + m_plane_steering setvisibletoall(); + m_fake_plane_steering hide(); + + if ( isdefined( e_triggerer ) ) + e_triggerer door_rumble_on_open(); + + m_infirmary_case_door_right playsound( "zmb_cabinet_door" ); + break; + } } door_rumble_on_open() { - self endon( "disconnect" ); - level endon( "end_game" ); - self setclientfieldtoplayer( "rumble_door_open", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "rumble_door_open", 0 ); + self endon( "disconnect" ); + level endon( "end_game" ); + self setclientfieldtoplayer( "rumble_door_open", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "rumble_door_open", 0 ); } setup_puzzles() { - level thread setup_master_key(); - level thread setup_dryer_challenge(); - level thread setup_generator_challenge(); - level thread maps/mp/zm_alcatraz_sq_nixie::setup_nixie_tubes_puzzle(); - level thread setup_gate_puzzle(); + level thread setup_master_key(); + level thread setup_dryer_challenge(); + level thread setup_generator_challenge(); + level thread maps\mp\zm_alcatraz_sq_nixie::setup_nixie_tubes_puzzle(); + level thread setup_gate_puzzle(); } setup_quest_triggers() { - t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" ); - t_plane_fuelable trigger_off(); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly setcursorhint( "HINT_NOICON" ); - t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); - t_plane_fly.require_look_at = 0; - t_plane_fly thread plane_fly_trigger_thread(); + t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" ); + t_plane_fuelable trigger_off(); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly setcursorhint( "HINT_NOICON" ); + t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); + t_plane_fly.require_look_at = 0; + t_plane_fly thread plane_fly_trigger_thread(); } setup_master_key() { - level.is_master_key_west = randomintrange( 0, 2 ); - setclientfield( "fake_master_key", level.is_master_key_west + 1 ); - if ( level.is_master_key_west ) - { - level thread key_pulley( "west" ); - exploder( 101 ); - array_delete( getentarray( "wires_pulley_east", "script_noteworthy" ) ); - } - else - { - level thread key_pulley( "east" ); - exploder( 100 ); - array_delete( getentarray( "wires_pulley_west", "script_noteworthy" ) ); - } + level.is_master_key_west = randomintrange( 0, 2 ); + setclientfield( "fake_master_key", level.is_master_key_west + 1 ); + + if ( level.is_master_key_west ) + { + level thread key_pulley( "west" ); + exploder( 101 ); + array_delete( getentarray( "wires_pulley_east", "script_noteworthy" ) ); + } + else + { + level thread key_pulley( "east" ); + exploder( 100 ); + array_delete( getentarray( "wires_pulley_west", "script_noteworthy" ) ); + } } key_pulley( str_master_key_location ) { - if ( level.is_master_key_west ) - { - t_other_hurt_trigger = getent( "pulley_hurt_trigger_east", "targetname" ); - t_other_panel = getent( "master_key_pulley_east", "targetname" ); - } - else - { - t_other_hurt_trigger = getent( "pulley_hurt_trigger_west", "targetname" ); - t_other_panel = getent( "master_key_pulley_west", "targetname" ); - } - t_other_hurt_trigger delete(); - t_other_panel setmodel( "p6_zm_al_power_station_panels_03" ); - t_pulley_hurt_trigger = getent( "pulley_hurt_trigger_" + str_master_key_location, "targetname" ); - t_pulley_hurt_trigger thread maps/mp/zm_alcatraz_sq_vo::sndhitelectrifiedpulley( str_master_key_location ); - m_master_key_pulley = getent( "master_key_pulley_" + str_master_key_location, "targetname" ); - m_master_key_pulley play_fx( "fx_alcatraz_panel_on_2", m_master_key_pulley.origin, m_master_key_pulley.angles, "power_down", 1, undefined, undefined ); - m_master_key_pulley thread afterlife_interact_object_think(); - level waittill( "master_key_pulley_" + str_master_key_location ); - m_master_key_pulley playsound( "zmb_quest_generator_panel_spark" ); - m_master_key_pulley notify( "power_down" ); - m_master_key_pulley setmodel( "p6_zm_al_power_station_panels_03" ); - playfxontag( level._effect[ "fx_alcatraz_panel_ol" ], m_master_key_pulley, "tag_origin" ); - m_master_key_pulley play_fx( "fx_alcatraz_panel_off_2", m_master_key_pulley.origin, m_master_key_pulley.angles, "power_down", 1, undefined, undefined ); - if ( level.is_master_key_west ) - { - stop_exploder( 101 ); - array_delete( getentarray( "wires_pulley_west", "script_noteworthy" ) ); - } - else - { - stop_exploder( 100 ); - array_delete( getentarray( "wires_pulley_east", "script_noteworthy" ) ); - } - t_hurt_trigger = getent( "pulley_hurt_trigger_" + str_master_key_location, "targetname" ); - t_hurt_trigger delete(); - if ( str_master_key_location == "west" ) - { - level setclientfield( "fxanim_pulley_down_start", 1 ); - } - else - { - if ( str_master_key_location == "east" ) - { - level setclientfield( "fxanim_pulley_down_start", 2 ); - } - } - wait 3; - level setclientfield( "master_key_is_lowered", 1 ); - m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); - if ( isDefined( m_master_key ) ) - { - e_master_key_target = getstruct( "master_key_" + str_master_key_location + "_origin", "targetname" ); - m_master_key.origin = e_master_key_target.origin; - m_master_key setvisibletoall(); - } + if ( level.is_master_key_west ) + { + t_other_hurt_trigger = getent( "pulley_hurt_trigger_east", "targetname" ); + t_other_panel = getent( "master_key_pulley_east", "targetname" ); + } + else + { + t_other_hurt_trigger = getent( "pulley_hurt_trigger_west", "targetname" ); + t_other_panel = getent( "master_key_pulley_west", "targetname" ); + } + + t_other_hurt_trigger delete(); + t_other_panel setmodel( "p6_zm_al_power_station_panels_03" ); + t_pulley_hurt_trigger = getent( "pulley_hurt_trigger_" + str_master_key_location, "targetname" ); + t_pulley_hurt_trigger thread maps\mp\zm_alcatraz_sq_vo::sndhitelectrifiedpulley( str_master_key_location ); + m_master_key_pulley = getent( "master_key_pulley_" + str_master_key_location, "targetname" ); + m_master_key_pulley play_fx( "fx_alcatraz_panel_on_2", m_master_key_pulley.origin, m_master_key_pulley.angles, "power_down", 1, undefined, undefined ); + m_master_key_pulley thread afterlife_interact_object_think(); + + level waittill( "master_key_pulley_" + str_master_key_location ); + + m_master_key_pulley playsound( "zmb_quest_generator_panel_spark" ); + m_master_key_pulley notify( "power_down" ); + m_master_key_pulley setmodel( "p6_zm_al_power_station_panels_03" ); + playfxontag( level._effect["fx_alcatraz_panel_ol"], m_master_key_pulley, "tag_origin" ); + m_master_key_pulley play_fx( "fx_alcatraz_panel_off_2", m_master_key_pulley.origin, m_master_key_pulley.angles, "power_down", 1, undefined, undefined ); + + if ( level.is_master_key_west ) + { + stop_exploder( 101 ); + array_delete( getentarray( "wires_pulley_west", "script_noteworthy" ) ); + } + else + { + stop_exploder( 100 ); + array_delete( getentarray( "wires_pulley_east", "script_noteworthy" ) ); + } + + t_hurt_trigger = getent( "pulley_hurt_trigger_" + str_master_key_location, "targetname" ); + t_hurt_trigger delete(); + + if ( str_master_key_location == "west" ) + level setclientfield( "fxanim_pulley_down_start", 1 ); + else if ( str_master_key_location == "east" ) + level setclientfield( "fxanim_pulley_down_start", 2 ); + + wait 3; + level setclientfield( "master_key_is_lowered", 1 ); + m_master_key = get_craftable_piece_model( "quest_key1", "p6_zm_al_key" ); + + if ( isdefined( m_master_key ) ) + { + e_master_key_target = getstruct( "master_key_" + str_master_key_location + "_origin", "targetname" ); + m_master_key.origin = e_master_key_target.origin; + m_master_key setvisibletoall(); + } } setup_dryer_challenge() { - t_dryer = getent( "dryer_trigger", "targetname" ); - t_dryer setcursorhint( "HINT_NOICON" ); - t_dryer sethintstring( &"ZM_PRISON_LAUNDRY_MACHINE_ACTIVATE" ); - t_dryer thread dryer_trigger_thread(); - t_dryer thread dryer_zombies_thread(); - t_dryer trigger_off(); - level waittill( "laundry_power_switch_afterlife" ); - level setclientfield( "dryer_stage", 1 ); + t_dryer = getent( "dryer_trigger", "targetname" ); + t_dryer setcursorhint( "HINT_NOICON" ); + t_dryer sethintstring( &"ZM_PRISON_LAUNDRY_MACHINE_ACTIVATE" ); + t_dryer thread dryer_trigger_thread(); + t_dryer thread dryer_zombies_thread(); + t_dryer trigger_off(); + + level waittill( "laundry_power_switch_afterlife" ); + + level setclientfield( "dryer_stage", 1 ); /# - iprintlnbold( "dryer can now be activated" ); + iprintlnbold( "dryer can now be activated" ); #/ - t_dryer trigger_on(); - t_dryer playsound( "evt_dryer_rdy_bell" ); - wait 1; - players = getplayers(); - _a900 = players; - _k900 = getFirstArrayKey( _a900 ); - while ( isDefined( _k900 ) ) - { - player = _a900[ _k900 ]; - if ( !player.afterlife && distance( player.origin, t_dryer.origin ) < 1500 ) - { - player thread do_player_general_vox( "general", "power_on", undefined, 100 ); - return; - } - _k900 = getNextArrayKey( _a900, _k900 ); - } + t_dryer trigger_on(); + t_dryer playsound( "evt_dryer_rdy_bell" ); + wait 1; + players = getplayers(); + + foreach ( player in players ) + { + if ( !player.afterlife && distance( player.origin, t_dryer.origin ) < 1500 ) + { + player thread do_player_general_vox( "general", "power_on", undefined, 100 ); + return; + } + } } dryer_trigger_thread() { - self endon( "death" ); - n_dryer_cycle_duration = 30; - a_dryer_spawns = []; - sndent = spawn( "script_origin", ( 1613, 10599, 1203 ) ); - self waittill( "trigger" ); - self trigger_off(); - level setclientfield( "dryer_stage", 2 ); - dryer_playerclip = getent( "dryer_playerclip", "targetname" ); - dryer_playerclip moveto( dryer_playerclip.origin + vectorScale( ( 0, 0, 0 ), 104 ), 0,05 ); - level clientnotify( "sndFF" ); - if ( isDefined( level.music_override ) && !level.music_override ) - { - level notify( "sndStopBrutusLoop" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "laundry_defend" ); - } - exploder( 1000 ); - sndent thread snddryercountdown( n_dryer_cycle_duration ); - sndent playsound( "evt_dryer_start" ); - sndent playloopsound( "evt_dryer_lp" ); - level clientnotify( "fxanim_dryer_start" ); - flag_set( "dryer_cycle_active" ); - wait 1; - sndset = sndmusicvariable(); - level clientnotify( "fxanim_dryer_idle_start" ); - i = 3; - while ( i > 0 ) - { -/# - iprintlnbold( ( ( i / 3 ) * n_dryer_cycle_duration ) + " seconds left!" ); -#/ - wait ( n_dryer_cycle_duration / 3 ); - i--; + self endon( "death" ); + n_dryer_cycle_duration = 30; + a_dryer_spawns = []; + sndent = spawn( "script_origin", ( 1613, 10599, 1203 ) ); - } - level clientnotify( "fxanim_dryer_end_start" ); - wait 2; - flag_clear( "dryer_cycle_active" ); - dryer_playerclip = getent( "dryer_playerclip", "targetname" ); - dryer_playerclip delete(); - sndent stoploopsound(); - sndent playsound( "evt_dryer_stop" ); - if ( isDefined( sndset ) && sndset ) - { - level.music_override = 0; - } - level clientnotify( "sndFF" ); - level setclientfield( "dryer_stage", 3 ); - stop_exploder( 900 ); - stop_exploder( 1000 ); - m_sheets = get_craftable_piece_model( "plane", "cloth" ); - m_sheets.origin = ( 1586,16, 10598,3, 1192 ); - m_sheets setvisibletoall(); - m_sheets ghost(); - self delete(); - sndent thread delaysndenddelete(); + self waittill( "trigger" ); + + self trigger_off(); + level setclientfield( "dryer_stage", 2 ); + dryer_playerclip = getent( "dryer_playerclip", "targetname" ); + dryer_playerclip moveto( dryer_playerclip.origin + vectorscale( ( 0, 0, 1 ), 104.0 ), 0.05 ); + level clientnotify( "sndFF" ); + + if ( !( isdefined( level.music_override ) && level.music_override ) ) + { + level notify( "sndStopBrutusLoop" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "laundry_defend" ); + } + + exploder( 1000 ); + sndent thread snddryercountdown( n_dryer_cycle_duration ); + sndent playsound( "evt_dryer_start" ); + sndent playloopsound( "evt_dryer_lp" ); + level clientnotify( "fxanim_dryer_start" ); + flag_set( "dryer_cycle_active" ); + wait 1; + sndset = sndmusicvariable(); + level clientnotify( "fxanim_dryer_idle_start" ); + + for ( i = 3; i > 0; i-- ) + { +/# + iprintlnbold( i / 3 * n_dryer_cycle_duration + " seconds left!" ); +#/ + wait( n_dryer_cycle_duration / 3 ); + } + + level clientnotify( "fxanim_dryer_end_start" ); + wait 2; + flag_clear( "dryer_cycle_active" ); + dryer_playerclip = getent( "dryer_playerclip", "targetname" ); + dryer_playerclip delete(); + sndent stoploopsound(); + sndent playsound( "evt_dryer_stop" ); + + if ( isdefined( sndset ) && sndset ) + level.music_override = 0; + + level clientnotify( "sndFF" ); + level setclientfield( "dryer_stage", 3 ); + stop_exploder( 900 ); + stop_exploder( 1000 ); + m_sheets = get_craftable_piece_model( "plane", "cloth" ); + m_sheets.origin = ( 1586.16, 10598.3, 1192 ); + m_sheets setvisibletoall(); + m_sheets ghost(); + self delete(); + sndent thread delaysndenddelete(); } sndmusicvariable() { - if ( isDefined( level.music_override ) && !level.music_override ) - { - level.music_override = 1; - return 1; - } - return 0; + if ( !( isdefined( level.music_override ) && level.music_override ) ) + { + level.music_override = 1; + return true; + } + + return false; } dryer_zombies_thread() { - n_zombie_count_min = 20; - e_shower_zone = getent( "cellblock_shower", "targetname" ); - flag_wait( "dryer_cycle_active" ); - if ( level.round_number > 4 || isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - if ( level.zombie_total < n_zombie_count_min ) - { - level.zombie_total = n_zombie_count_min; - } - while ( flag( "dryer_cycle_active" ) ) - { - a_zombies_in_shower = []; - a_zombies_in_shower = get_zombies_touching_volume( "axis", "cellblock_shower", undefined ); - if ( a_zombies_in_shower.size < n_zombie_count_min ) - { - e_zombie = get_farthest_available_zombie( e_shower_zone ); - if ( isDefined( e_zombie ) && !isinarray( a_zombies_in_shower, e_zombie ) ) - { - e_zombie notify( "zapped" ); - e_zombie thread dryer_teleports_zombie(); - } - } - wait 1; - } - } - else maps/mp/zombies/_zm_ai_brutus::brutus_spawn_in_zone( "cellblock_shower" ); + n_zombie_count_min = 20; + e_shower_zone = getent( "cellblock_shower", "targetname" ); + flag_wait( "dryer_cycle_active" ); + + if ( level.round_number > 4 || isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + { + if ( level.zombie_total < n_zombie_count_min ) + level.zombie_total = n_zombie_count_min; + + while ( flag( "dryer_cycle_active" ) ) + { + a_zombies_in_shower = []; + a_zombies_in_shower = get_zombies_touching_volume( "axis", "cellblock_shower", undefined ); + + if ( a_zombies_in_shower.size < n_zombie_count_min ) + { + e_zombie = get_farthest_available_zombie( e_shower_zone ); + + if ( isdefined( e_zombie ) && !isinarray( a_zombies_in_shower, e_zombie ) ) + { + e_zombie notify( "zapped" ); + e_zombie thread dryer_teleports_zombie(); + } + } + + wait 1; + } + } + else + maps\mp\zombies\_zm_ai_brutus::brutus_spawn_in_zone( "cellblock_shower" ); } get_farthest_available_zombie( e_landmark ) { - if ( !isDefined( e_landmark ) ) - { - return undefined; - } - while ( 1 ) - { - a_zombies = getaiarray( level.zombie_team ); - if ( isDefined( a_zombies ) ) - { - zombies = get_array_of_closest( e_landmark.origin, a_zombies ); - x = 0; - while ( x < zombies.size ) - { - 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() ) - { - zombie.is_being_used_as_spawnpoint = 1; - return zombie; - } - x++; - } - } - else return undefined; - wait 0,05; - } + if ( !isdefined( e_landmark ) ) + return undefined; + + while ( true ) + { + a_zombies = getaiarray( level.zombie_team ); + + if ( isdefined( a_zombies ) ) + { + zombies = get_array_of_closest( e_landmark.origin, a_zombies ); + + for ( x = 0; x < zombies.size; x++ ) + { + zombie = zombies[x]; + + if ( isdefined( zombie ) && isalive( zombie ) && !( isdefined( zombie.in_the_ground ) && zombie.in_the_ground ) && !( isdefined( zombie.gibbed ) && zombie.gibbed ) && !( isdefined( zombie.head_gibbed ) && zombie.head_gibbed ) && !( isdefined( zombie.is_being_used_as_spawnpoint ) && zombie.is_being_used_as_spawnpoint ) && zombie in_playable_area() ) + { + zombie.is_being_used_as_spawnpoint = 1; + return zombie; + } + } + } + else + return undefined; + + wait 0.05; + } } get_zombies_touching_volume( team, volume_name, volume ) { - if ( !isDefined( volume ) ) - { - volume = getent( volume_name, "targetname" ); + if ( !isdefined( volume ) ) + { + volume = getent( volume_name, "targetname" ); /# - assert( isDefined( volume ), volume_name + " does not exist" ); + assert( isdefined( volume ), volume_name + " does not exist" ); #/ - } - guys = getaiarray( team ); - guys_touching_volume = []; - i = 0; - while ( i < guys.size ) - { - if ( guys[ i ] istouching( volume ) ) - { - guys_touching_volume[ guys_touching_volume.size ] = guys[ i ]; - } - i++; - } - return guys_touching_volume; + } + + guys = getaiarray( team ); + guys_touching_volume = []; + + for ( i = 0; i < guys.size; i++ ) + { + if ( guys[i] istouching( volume ) ) + guys_touching_volume[guys_touching_volume.size] = guys[i]; + } + + return guys_touching_volume; } dryer_teleports_zombie() { - self endon( "death" ); - self endon( "zapped" ); - if ( self.ai_state == "find_flesh" ) - { - self.zapped = 1; - a_nodes = getstructarray( "dryer_zombie_teleports", "targetname" ); - nd_target = random( a_nodes ); - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - self hide(); - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker thread linker_delete_watch( self ); - linker.origin = self.origin; - linker.angles = self.angles; - self linkto( linker ); - linker moveto( nd_target.origin, 0,05 ); - linker waittill( "movedone" ); - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - linker delete(); - self show(); - self.zapped = undefined; - self.ignoreall = 1; - self notify( "stop_find_flesh" ); - self thread afterlife_zapped_fx(); - self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - self.ignoreall = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + self endon( "death" ); + self endon( "zapped" ); + + if ( self.ai_state == "find_flesh" ) + { + self.zapped = 1; + a_nodes = getstructarray( "dryer_zombie_teleports", "targetname" ); + nd_target = random( a_nodes ); + playfx( level._effect["afterlife_teleport"], self.origin ); + self hide(); + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker thread linker_delete_watch( self ); + linker.origin = self.origin; + linker.angles = self.angles; + self linkto( linker ); + linker moveto( nd_target.origin, 0.05 ); + + linker waittill( "movedone" ); + + playfx( level._effect["afterlife_teleport"], self.origin ); + linker delete(); + self show(); + self.zapped = undefined; + self.ignoreall = 1; + self notify( "stop_find_flesh" ); + self thread afterlife_zapped_fx(); + self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + self.ignoreall = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } } delaysndenddelete() { - wait 5; - self delete(); + wait 5; + self delete(); } snddryercountdown( num ) { - ent = spawn( "script_origin", self.origin ); - i = num; - while ( i > 0 ) - { - if ( i <= 10 ) - { - ent playsound( "zmb_quest_nixie_count_final" ); - } - else - { - ent playsound( "zmb_quest_nixie_count" ); - } - wait 1; - i--; + ent = spawn( "script_origin", self.origin ); - } - ent delete(); + for ( i = num; i > 0; i-- ) + { + if ( i <= 10 ) + ent playsound( "zmb_quest_nixie_count_final" ); + else + ent playsound( "zmb_quest_nixie_count" ); + + wait 1; + } + + ent delete(); } setup_generator_challenge() { - level.n_generator_panels_active = 0; - generator_soundent = spawn( "script_origin", ( -467, 6388, 132 ) ); - i = 1; - while ( i < 4 ) - { - level thread generator_panel_trigger_thread( i, generator_soundent ); - i++; - } - level thread generator_challenge_main_thread(); + level.n_generator_panels_active = 0; + generator_soundent = spawn( "script_origin", ( -467, 6388, 132 ) ); + + for ( i = 1; i < 4; i++ ) + level thread generator_panel_trigger_thread( i, generator_soundent ); + + level thread generator_challenge_main_thread(); } generator_challenge_main_thread() { - exploder( 2000 ); - while ( !flag( "generator_challenge_completed" ) ) - { - if ( level.n_generator_panels_active == 3 ) - { + exploder( 2000 ); + + while ( !flag( "generator_challenge_completed" ) ) + { + if ( level.n_generator_panels_active == 3 ) + { /# - iprintlnbold( "generator overloaded!" ); + iprintlnbold( "generator overloaded!" ); #/ - flag_set( "generator_challenge_completed" ); - } - wait 0,1; - } - level clientnotify( "sndWard" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "piece_mid" ); - t_warden_fence_damage = getent( "warden_fence_damage", "targetname" ); - t_warden_fence_damage delete(); - level setclientfield( "warden_fence_down", 1 ); - array_delete( getentarray( "generator_wires", "script_noteworthy" ) ); - wait 3; - stop_exploder( 2000 ); - wait 1; - players = getplayers(); - player = players[ randomintrange( 0, players.size ) ]; - player do_player_general_vox( "general", "power_off", undefined, 100 ); + flag_set( "generator_challenge_completed" ); + } + + wait 0.1; + } + + level clientnotify( "sndWard" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "piece_mid" ); + t_warden_fence_damage = getent( "warden_fence_damage", "targetname" ); + t_warden_fence_damage delete(); + level setclientfield( "warden_fence_down", 1 ); + array_delete( getentarray( "generator_wires", "script_noteworthy" ) ); + wait 3; + stop_exploder( 2000 ); + wait 1; + players = getplayers(); + player = players[randomintrange( 0, players.size )]; + player do_player_general_vox( "general", "power_off", undefined, 100 ); } generator_panel_trigger_thread( n_panel_index, generator_soundent ) { - self endon( "death" ); - m_generator_panel = getent( "generator_panel_" + n_panel_index, "targetname" ); - m_generator_panel thread afterlife_interact_object_think(); - m_generator_panel play_fx( "fx_alcatraz_panel_on_2", m_generator_panel.origin, m_generator_panel.angles, "generator_panel_" + n_panel_index + "_afterlife", 1, undefined, undefined ); - level waittill( "generator_panel_" + n_panel_index + "_afterlife" ); - m_generator_panel notify( "generator_panel_" + n_panel_index + "_afterlife" ); + self endon( "death" ); + m_generator_panel = getent( "generator_panel_" + n_panel_index, "targetname" ); + m_generator_panel thread afterlife_interact_object_think(); + m_generator_panel play_fx( "fx_alcatraz_panel_on_2", m_generator_panel.origin, m_generator_panel.angles, "generator_panel_" + n_panel_index + "_afterlife", 1, undefined, undefined ); + + level waittill( "generator_panel_" + n_panel_index + "_afterlife" ); + + m_generator_panel notify( "generator_panel_" + n_panel_index + "_afterlife" ); /# - iprintlnbold( "generator panel " + n_panel_index + " overloaded!" ); + iprintlnbold( "generator panel " + n_panel_index + " overloaded!" ); #/ - level.n_generator_panels_active += 1; - m_generator_panel setmodel( "p6_zm_al_power_station_panels_03" ); - playfxontag( level._effect[ "fx_alcatraz_panel_ol" ], m_generator_panel, "tag_origin" ); - m_generator_panel play_fx( "fx_alcatraz_panel_off_2", m_generator_panel.origin, m_generator_panel.angles, undefined, 1, undefined, undefined ); - set_generator_vfx_amount( level.n_generator_panels_active, generator_soundent ); - playsoundatposition( "zmb_quest_generator_panel_spark", m_generator_panel.origin ); + level.n_generator_panels_active += 1; + m_generator_panel setmodel( "p6_zm_al_power_station_panels_03" ); + playfxontag( level._effect["fx_alcatraz_panel_ol"], m_generator_panel, "tag_origin" ); + m_generator_panel play_fx( "fx_alcatraz_panel_off_2", m_generator_panel.origin, m_generator_panel.angles, undefined, 1, undefined, undefined ); + set_generator_vfx_amount( level.n_generator_panels_active, generator_soundent ); + playsoundatposition( "zmb_quest_generator_panel_spark", m_generator_panel.origin ); } set_generator_vfx_amount( n_vfx_amount, generator_soundent ) { - if ( n_vfx_amount == 1 ) - { - generator_soundent playloopsound( "zmb_quest_generator_loop1" ); - } - if ( n_vfx_amount == 2 ) - { - generator_soundent stoploopsound(); - wait 0,05; - generator_soundent playloopsound( "zmb_quest_generator_loop2" ); - } - if ( n_vfx_amount == 3 ) - { - exploder( 3100 ); - exploder( 3200 ); - exploder( 3300 ); - generator_soundent stoploopsound(); - wait 0,05; - generator_soundent playloopsound( "zmb_quest_generator_loop3" ); - } + if ( n_vfx_amount == 1 ) + generator_soundent playloopsound( "zmb_quest_generator_loop1" ); + + if ( n_vfx_amount == 2 ) + { + generator_soundent stoploopsound(); + wait 0.05; + generator_soundent playloopsound( "zmb_quest_generator_loop2" ); + } + + if ( n_vfx_amount == 3 ) + { + exploder( 3100 ); + exploder( 3200 ); + exploder( 3300 ); + generator_soundent stoploopsound(); + wait 0.05; + generator_soundent playloopsound( "zmb_quest_generator_loop3" ); + } } setup_gate_puzzle() { - self endon( "death" ); - is_gate_toggled = 0; - is_inner_gate_toggleable = 0; - m_gate_02 = getent( "cable_puzzle_gate_02", "targetname" ); - n_gate_move_duration = 0,5; - m_docks_shockbox = getent( "docks_panel", "targetname" ); - array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 0 ); - a_players = []; - a_players = getplayers(); - if ( a_players.size > 1 ) - { - is_inner_gate_toggleable = 1; - } - while ( 1 ) - { - m_docks_shockbox thread afterlife_interact_object_think(); - level waittill( "cable_puzzle_gate_afterlife" ); - array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 1 ); - if ( is_inner_gate_toggleable && flag( "docks_inner_gate_unlocked" ) ) - { - level thread toggle_inner_gate( n_gate_move_duration ); - } - if ( !flag( "docks_outer_gate_open" ) ) - { - m_gate_02 moveto( m_gate_02.origin + ( -16, 80, 0 ), n_gate_move_duration ); - wait ( n_gate_move_duration + 0,25 ); - m_gate_02 connectpaths(); - gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" ); - gate_2_monsterclip.origin += vectorScale( ( 0, 0, 0 ), 256 ); - gate_2_monsterclip disconnectpaths(); - gate_2_monsterclip.origin -= vectorScale( ( 0, 0, 0 ), 256 ); - m_gate_02 playsound( "zmb_chainlink_close" ); - } - else - { - if ( !flag( "docks_gates_remain_open" ) ) - { - m_gate_02 moveto( m_gate_02.origin - ( -16, 80, 0 ), n_gate_move_duration ); - wait ( n_gate_move_duration + 0,25 ); - m_gate_02 disconnectpaths(); - gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" ); - gate_2_monsterclip connectpaths(); - m_gate_02 playsound( "zmb_chainlink_open" ); - } - } - flag_toggle( "docks_outer_gate_open" ); + self endon( "death" ); + is_gate_toggled = 0; + is_inner_gate_toggleable = 0; + m_gate_02 = getent( "cable_puzzle_gate_02", "targetname" ); + n_gate_move_duration = 0.5; + m_docks_shockbox = getent( "docks_panel", "targetname" ); + array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 0 ); + a_players = []; + a_players = getplayers(); + + if ( a_players.size > 1 ) + is_inner_gate_toggleable = 1; + + while ( true ) + { + m_docks_shockbox thread afterlife_interact_object_think(); + + level waittill( "cable_puzzle_gate_afterlife" ); + + array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 1 ); + + if ( is_inner_gate_toggleable && flag( "docks_inner_gate_unlocked" ) ) + level thread toggle_inner_gate( n_gate_move_duration ); + + if ( !flag( "docks_outer_gate_open" ) ) + { + m_gate_02 moveto( m_gate_02.origin + ( -16, 80, 0 ), n_gate_move_duration ); + wait( n_gate_move_duration + 0.25 ); + m_gate_02 connectpaths(); + gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" ); + gate_2_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 ); + gate_2_monsterclip disconnectpaths(); + gate_2_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 ); + m_gate_02 playsound( "zmb_chainlink_close" ); + } + else if ( !flag( "docks_gates_remain_open" ) ) + { + m_gate_02 moveto( m_gate_02.origin - ( -16, 80, 0 ), n_gate_move_duration ); + wait( n_gate_move_duration + 0.25 ); + m_gate_02 disconnectpaths(); + gate_2_monsterclip = getent( "docks_gate_2_monsterclip", "targetname" ); + gate_2_monsterclip connectpaths(); + m_gate_02 playsound( "zmb_chainlink_open" ); + } + + flag_toggle( "docks_outer_gate_open" ); /# - iprintlnbold( "gate toggled!" ); + iprintlnbold( "gate toggled!" ); #/ - wait n_gate_move_duration; + wait( n_gate_move_duration ); /# - iprintlnbold( "gate ready to be re-toggled" ); + iprintlnbold( "gate ready to be re-toggled" ); #/ - m_docks_shockbox notify( "afterlife_interact_reset" ); - array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 0 ); - } + m_docks_shockbox notify( "afterlife_interact_reset" ); + array_set_visible_to_all( getentarray( "wires_docks_gate_toggle", "script_noteworthy" ), 0 ); + } } toggle_inner_gate( n_gate_move_duration ) { - a_m_gate_01 = getentarray( "cable_puzzle_gate_01", "targetname" ); - if ( flag( "docks_inner_gate_open" ) && !flag( "docks_gates_remain_open" ) ) - { - i = 0; - while ( i < a_m_gate_01.size ) - { - a_m_gate_01[ i ] moveto( a_m_gate_01[ i ].origin - ( -16, 80, 0 ), n_gate_move_duration ); - i++; - } - wait ( n_gate_move_duration + 0,25 ); - i = 0; - while ( i < a_m_gate_01.size ) - { - a_m_gate_01[ i ] disconnectpaths(); - i++; - } - gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); - gate_1_monsterclip connectpaths(); - a_m_gate_01[ 0 ] playsound( "zmb_chainlink_close" ); - } - else - { - i = 0; - while ( i < a_m_gate_01.size ) - { - a_m_gate_01[ i ] moveto( a_m_gate_01[ i ].origin + ( -16, 80, 0 ), n_gate_move_duration ); - i++; - } - wait ( n_gate_move_duration + 0,25 ); - i = 0; - while ( i < a_m_gate_01.size ) - { - a_m_gate_01[ i ] connectpaths(); - i++; - } - gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); - gate_1_monsterclip.origin += vectorScale( ( 0, 0, 0 ), 256 ); - gate_1_monsterclip disconnectpaths(); - gate_1_monsterclip.origin -= vectorScale( ( 0, 0, 0 ), 256 ); - a_m_gate_01[ 0 ] playsound( "zmb_chainlink_open" ); - } - flag_toggle( "docks_inner_gate_open" ); + a_m_gate_01 = getentarray( "cable_puzzle_gate_01", "targetname" ); + + if ( flag( "docks_inner_gate_open" ) && !flag( "docks_gates_remain_open" ) ) + { + for ( i = 0; i < a_m_gate_01.size; i++ ) + a_m_gate_01[i] moveto( a_m_gate_01[i].origin - ( -16, 80, 0 ), n_gate_move_duration ); + + wait( n_gate_move_duration + 0.25 ); + + for ( i = 0; i < a_m_gate_01.size; i++ ) + a_m_gate_01[i] disconnectpaths(); + + gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); + gate_1_monsterclip connectpaths(); + a_m_gate_01[0] playsound( "zmb_chainlink_close" ); + } + else + { + for ( i = 0; i < a_m_gate_01.size; i++ ) + a_m_gate_01[i] moveto( a_m_gate_01[i].origin + ( -16, 80, 0 ), n_gate_move_duration ); + + wait( n_gate_move_duration + 0.25 ); + + for ( i = 0; i < a_m_gate_01.size; i++ ) + a_m_gate_01[i] connectpaths(); + + gate_1_monsterclip = getent( "docks_gate_1_monsterclip", "targetname" ); + gate_1_monsterclip.origin += vectorscale( ( 0, 0, 1 ), 256.0 ); + gate_1_monsterclip disconnectpaths(); + gate_1_monsterclip.origin -= vectorscale( ( 0, 0, 1 ), 256.0 ); + a_m_gate_01[0] playsound( "zmb_chainlink_open" ); + } + + flag_toggle( "docks_inner_gate_open" ); } plane_fly_trigger_thread() { - self setcursorhint( "HINT_NOICON" ); - self sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); - flag_wait( "initial_players_connected" ); - flag_wait( "brutus_setup_complete" ); - self trigger_off(); - wait 1; - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_craftable show(); - m_plane_craftable hidepart( "tag_support_upper" ); - m_plane_craftable hidepart( "tag_wing_skins_up" ); - m_plane_craftable hidepart( "tag_engines_up" ); - m_plane_craftable hidepart( "tag_feul_tanks" ); - m_plane_craftable hidepart( "tag_control_mechanism" ); - m_plane_craftable hidepart( "tag_engine_ground" ); - m_plane_craftable hidepart( "tag_clothes_ground" ); - m_plane_craftable hidepart( "tag_fuel_hose" ); - waittill_crafted( "plane" ); - maps/mp/zombies/_zm_ai_brutus::transfer_plane_trigger( "build", "fly" ); - self trigger_on(); - while ( isDefined( self ) ) - { - self waittill( "trigger", e_triggerer ); - if ( isplayer( e_triggerer ) ) - { - if ( level.n_plane_fuel_count == 5 ) - { - while ( isDefined( level.custom_plane_validation ) ) - { - valid = self [[ level.custom_plane_validation ]]( e_triggerer ); - while ( !valid ) - { - continue; - } - } - self setinvisibletoplayer( e_triggerer ); - if ( isDefined( level.plane_boarding_thread_custom_func ) ) - { - e_triggerer thread [[ level.plane_boarding_thread_custom_func ]](); - break; - } - else - { - e_triggerer thread plane_boarding_thread(); - } - } - } - } + self setcursorhint( "HINT_NOICON" ); + self sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); + flag_wait( "initial_players_connected" ); + flag_wait( "brutus_setup_complete" ); + self trigger_off(); + wait 1; + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_craftable show(); + m_plane_craftable hidepart( "tag_support_upper" ); + m_plane_craftable hidepart( "tag_wing_skins_up" ); + m_plane_craftable hidepart( "tag_engines_up" ); + m_plane_craftable hidepart( "tag_feul_tanks" ); + m_plane_craftable hidepart( "tag_control_mechanism" ); + m_plane_craftable hidepart( "tag_engine_ground" ); + m_plane_craftable hidepart( "tag_clothes_ground" ); + m_plane_craftable hidepart( "tag_fuel_hose" ); + waittill_crafted( "plane" ); + maps\mp\zombies\_zm_ai_brutus::transfer_plane_trigger( "build", "fly" ); + self trigger_on(); + + while ( isdefined( self ) ) + { + self waittill( "trigger", e_triggerer ); + + if ( isplayer( e_triggerer ) ) + { + if ( level.n_plane_fuel_count == 5 ) + { + if ( isdefined( level.custom_plane_validation ) ) + { + valid = self [[ level.custom_plane_validation ]]( e_triggerer ); + + if ( !valid ) + continue; + } + + self setinvisibletoplayer( e_triggerer ); + + if ( isdefined( level.plane_boarding_thread_custom_func ) ) + e_triggerer thread [[ level.plane_boarding_thread_custom_func ]](); + else + e_triggerer thread plane_boarding_thread(); + } + } + } } plane_boarding_thread() { - self endon( "death_or_disconnect" ); - flag_set( "plane_is_away" ); - self thread player_disconnect_watcher(); - self thread player_death_watcher(); + self endon( "death_or_disconnect" ); + flag_set( "plane_is_away" ); + self thread player_disconnect_watcher(); + self thread player_death_watcher(); /# - iprintlnbold( "plane boarding thread started" ); + iprintlnbold( "plane boarding thread started" ); #/ - flag_set( "plane_boarded" ); - self setclientfieldtoplayer( "effects_escape_flight", 1 ); - level.brutus_respawn_after_despawn = 0; - a_nml_teleport_targets = []; - i = 1; - while ( i < 6 ) - { - a_nml_teleport_targets[ i - 1 ] = getstruct( "nml_telepoint_" + i, "targetname" ); - i++; - } - level.characters_in_nml[ level.characters_in_nml.size ] = self.character_name; - self.on_a_plane = 1; - level.someone_has_visited_nml = 1; - self.n_passenger_index = level.characters_in_nml.size; - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); - veh_plane_flyable = getent( "plane_flyable", "targetname" ); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); - self enableinvulnerability(); - self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - self allowstand( 0 ); - flag_wait( "plane_departed" ); - level notify( "sndStopBrutusLoop" ); - self clientnotify( "sndPS" ); - self playsoundtoplayer( "zmb_plane_takeoff", self ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_takeoff", self ); - self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - self setclientfieldtoplayer( "effects_escape_flight", 2 ); - flag_wait( "plane_approach_bridge" ); - self thread snddelayedimp(); - self setclientfieldtoplayer( "effects_escape_flight", 3 ); - self unlink(); - self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - flag_wait( "plane_zapped" ); - flag_set( "activate_player_zone_bridge" ); - self playsoundtoplayer( "zmb_plane_fall", self ); - self setclientfieldtoplayer( "effects_escape_flight", 4 ); - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); - self forcegrenadethrow(); - str_current_weapon = self getcurrentweapon(); - self giveweapon( "falling_hands_zm" ); - self switchtoweaponimmediate( "falling_hands_zm" ); - self setweaponammoclip( "falling_hands_zm", 0 ); - players = getplayers(); - _a1548 = players; - _k1548 = getFirstArrayKey( _a1548 ); - while ( isDefined( _k1548 ) ) - { - player = _a1548[ _k1548 ]; - if ( player != self ) - { - player setinvisibletoplayer( self ); - } - _k1548 = getNextArrayKey( _a1548, _k1548 ); - } - flag_wait( "plane_crashed" ); - self setclientfieldtoplayer( "effects_escape_flight", 5 ); - self takeweapon( "falling_hands_zm" ); - if ( isDefined( str_current_weapon ) && str_current_weapon != "none" ) - { - self switchtoweaponimmediate( str_current_weapon ); - } - self thread fadetoblackforxsec( 0, 2, 0, 0,5, "black" ); - self thread snddelayedmusic(); - self unlink(); - self allowstand( 1 ); - self setstance( "stand" ); - players = getplayers(); - _a1571 = players; - _k1571 = getFirstArrayKey( _a1571 ); - while ( isDefined( _k1571 ) ) - { - player = _a1571[ _k1571 ]; - if ( player != self ) - { - player setvisibletoplayer( self ); - } - _k1571 = getNextArrayKey( _a1571, _k1571 ); - } - flag_clear( "spawn_zombies" ); - self setorigin( a_nml_teleport_targets[ self.n_passenger_index ].origin ); - e_poi = getstruct( "plane_crash_poi", "targetname" ); - vec_to_target = e_poi.origin - self.origin; - vec_to_target = vectorToAngle( vec_to_target ); - vec_to_target = ( 0, vec_to_target[ 1 ], 0 ); - self setplayerangles( vec_to_target ); - n_shellshock_duration = 5; - self shellshock( "explosion", n_shellshock_duration ); - self.dontspeak = 0; - self setclientfieldtoplayer( "isspeaking", 0 ); - self notify( "player_at_bridge" ); - wait n_shellshock_duration; - self disableinvulnerability(); - self.on_a_plane = 0; - if ( level.characters_in_nml.size == 1 ) - { - self vo_bridge_soliloquy(); - } - else - { - if ( level.characters_in_nml.size == 4 ) - { - vo_bridge_four_part_convo(); - } - } - wait 10; - self playsoundtoplayer( "zmb_ggb_swarm_start", self ); - flag_set( "spawn_zombies" ); - level.brutus_respawn_after_despawn = 1; - wait 5; - character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ]; - players = getplayers(); - _a1625 = players; - _k1625 = getFirstArrayKey( _a1625 ); - while ( isDefined( _k1625 ) ) - { - player = _a1625[ _k1625 ]; - if ( isDefined( player ) && player.character_name == character_name ) - { - player thread do_player_general_vox( "quest", "zombie_arrive_gg", undefined, 100 ); - } - _k1625 = getNextArrayKey( _a1625, _k1625 ); - } + flag_set( "plane_boarded" ); + self setclientfieldtoplayer( "effects_escape_flight", 1 ); + level.brutus_respawn_after_despawn = 0; + a_nml_teleport_targets = []; + + for ( i = 1; i < 6; i++ ) + a_nml_teleport_targets[i - 1] = getstruct( "nml_telepoint_" + i, "targetname" ); + + level.characters_in_nml[level.characters_in_nml.size] = self.character_name; + self.on_a_plane = 1; + level.someone_has_visited_nml = 1; + self.n_passenger_index = level.characters_in_nml.size; + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); + veh_plane_flyable = getent( "plane_flyable", "targetname" ); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); + self enableinvulnerability(); + self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + self allowstand( 0 ); + flag_wait( "plane_departed" ); + level notify( "sndStopBrutusLoop" ); + self clientnotify( "sndPS" ); + self playsoundtoplayer( "zmb_plane_takeoff", self ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_takeoff", self ); + self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + self setclientfieldtoplayer( "effects_escape_flight", 2 ); + flag_wait( "plane_approach_bridge" ); + self thread snddelayedimp(); + self setclientfieldtoplayer( "effects_escape_flight", 3 ); + self unlink(); + self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + flag_wait( "plane_zapped" ); + flag_set( "activate_player_zone_bridge" ); + self playsoundtoplayer( "zmb_plane_fall", self ); + self setclientfieldtoplayer( "effects_escape_flight", 4 ); + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); + self forcegrenadethrow(); + str_current_weapon = self getcurrentweapon(); + self giveweapon( "falling_hands_zm" ); + self switchtoweaponimmediate( "falling_hands_zm" ); + self setweaponammoclip( "falling_hands_zm", 0 ); + players = getplayers(); + + foreach ( player in players ) + { + if ( player != self ) + player setinvisibletoplayer( self ); + } + + flag_wait( "plane_crashed" ); + self setclientfieldtoplayer( "effects_escape_flight", 5 ); + self takeweapon( "falling_hands_zm" ); + + if ( isdefined( str_current_weapon ) && str_current_weapon != "none" ) + self switchtoweaponimmediate( str_current_weapon ); + + self thread fadetoblackforxsec( 0, 2, 0, 0.5, "black" ); + self thread snddelayedmusic(); + self unlink(); + self allowstand( 1 ); + self setstance( "stand" ); + players = getplayers(); + + foreach ( player in players ) + { + if ( player != self ) + player setvisibletoplayer( self ); + } + + flag_clear( "spawn_zombies" ); + self setorigin( a_nml_teleport_targets[self.n_passenger_index].origin ); + e_poi = getstruct( "plane_crash_poi", "targetname" ); + vec_to_target = e_poi.origin - self.origin; + vec_to_target = vectortoangles( vec_to_target ); + vec_to_target = ( 0, vec_to_target[1], 0 ); + self setplayerangles( vec_to_target ); + n_shellshock_duration = 5; + self shellshock( "explosion", n_shellshock_duration ); + self.dontspeak = 0; + self setclientfieldtoplayer( "isspeaking", 0 ); + self notify( "player_at_bridge" ); + wait( n_shellshock_duration ); + self disableinvulnerability(); + self.on_a_plane = 0; + + if ( level.characters_in_nml.size == 1 ) + self vo_bridge_soliloquy(); + else if ( level.characters_in_nml.size == 4 ) + vo_bridge_four_part_convo(); + + wait 10; + self playsoundtoplayer( "zmb_ggb_swarm_start", self ); + flag_set( "spawn_zombies" ); + level.brutus_respawn_after_despawn = 1; + wait 5; + character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )]; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player.character_name == character_name ) + player thread do_player_general_vox( "quest", "zombie_arrive_gg", undefined, 100 ); + } } snddelayedimp() { - self endon( "disconnect" ); - wait 6; - self playsoundtoplayer( "zmb_plane_explode", self ); + self endon( "disconnect" ); + wait 6; + self playsoundtoplayer( "zmb_plane_explode", self ); } snddelayedmusic() { - self endon( "disconnect" ); - wait 1; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "at_golden_gate", self ); - self clientnotify( "sndPE" ); + self endon( "disconnect" ); + wait 1; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "at_golden_gate", self ); + self clientnotify( "sndPE" ); } track_quest_status_thread() { - while ( 1 ) - { - while ( level.characters_in_nml.size == 0 ) - { - wait 1; - } - while ( level.characters_in_nml.size > 0 ) - { - wait 1; - } - if ( flag( "plane_trip_to_nml_successful" ) ) - { - bestow_quest_rewards(); - flag_clear( "plane_trip_to_nml_successful" ); - } - level notify( "bridge_empty" ); - level waittill( "start_of_round" ); - if ( level.n_quest_iteration_count == 2 ) - { - vo_play_four_part_conversation( level.four_part_convos[ "alcatraz_return_alt" + randomintrange( 0, 2 ) ] ); - } - prep_for_new_quest(); - waittill_crafted( "refuelable_plane" ); - maps/mp/zombies/_zm_ai_brutus::transfer_plane_trigger( "fuel", "fly" ); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly trigger_on(); - } + while ( true ) + { + while ( level.characters_in_nml.size == 0 ) + wait 1; + + while ( level.characters_in_nml.size > 0 ) + wait 1; + + if ( flag( "plane_trip_to_nml_successful" ) ) + { + bestow_quest_rewards(); + flag_clear( "plane_trip_to_nml_successful" ); + } + + level notify( "bridge_empty" ); + + level waittill( "start_of_round" ); + + if ( level.n_quest_iteration_count == 2 ) + vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_alt" + randomintrange( 0, 2 )] ); + + prep_for_new_quest(); + waittill_crafted( "refuelable_plane" ); + maps\mp\zombies\_zm_ai_brutus::transfer_plane_trigger( "fuel", "fly" ); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly trigger_on(); + } } bestow_quest_rewards() { - level.n_quest_iteration_count += 1; - if ( level.n_quest_iteration_count == 2 ) - { - level notify( "unlock_all_perk_machines" ); - level notify( "intro_powerup_restored" ); - } - else - { - if ( level.n_quest_iteration_count == 4 ) - { - flag_set( "quest_completed_thrice" ); - } - } + level.n_quest_iteration_count += 1; + + if ( level.n_quest_iteration_count == 2 ) + { + level notify( "unlock_all_perk_machines" ); + level notify( "intro_powerup_restored" ); + } + else if ( level.n_quest_iteration_count == 4 ) + flag_set( "quest_completed_thrice" ); } prep_for_new_quest() { - i = 1; - while ( i < 4 ) - { - str_trigger_targetname = "trigger_electric_chair_" + i; - t_electric_chair = getent( str_trigger_targetname, "targetname" ); - t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); - t_electric_chair trigger_on(); - i++; - } - flag_set( "spawn_fuel_tanks" ); - wait 0,05; - flag_clear( "spawn_fuel_tanks" ); - i = 0; - while ( i < level.a_uts_craftables.size ) - { - if ( level.a_uts_craftables[ i ].equipname == "refuelable_plane" ) - { - t_plane_fuelable = level.a_uts_craftables[ i ]; - level.zones[ "zone_roof" ].plane_triggers[ level.zones[ "zone_roof" ].plane_triggers.size ] = t_plane_fuelable; - break; - } - else - { - i++; - } - } - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly trigger_off(); - players = get_players(); - t_plane_fly setvisibletoall(); - maps/mp/zombies/_zm_ai_brutus::transfer_plane_trigger( "fly", "fuel" ); - i = 1; - while ( i < 5 ) - { - m_electric_chair = getent( "electric_chair_" + i, "targetname" ); - m_electric_chair notify( "bridge_empty" ); - i++; - } - setup_puzzle_piece_glint(); + for ( i = 1; i < 4; i++ ) + { + str_trigger_targetname = "trigger_electric_chair_" + i; + t_electric_chair = getent( str_trigger_targetname, "targetname" ); + t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); + t_electric_chair trigger_on(); + } + + flag_set( "spawn_fuel_tanks" ); + wait 0.05; + flag_clear( "spawn_fuel_tanks" ); + + for ( i = 0; i < level.a_uts_craftables.size; i++ ) + { + if ( level.a_uts_craftables[i].equipname == "refuelable_plane" ) + { + t_plane_fuelable = level.a_uts_craftables[i]; + level.zones["zone_roof"].plane_triggers[level.zones["zone_roof"].plane_triggers.size] = t_plane_fuelable; + break; + } + } + + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly trigger_off(); + players = get_players(); + t_plane_fly setvisibletoall(); + maps\mp\zombies\_zm_ai_brutus::transfer_plane_trigger( "fly", "fuel" ); + + for ( i = 1; i < 5; i++ ) + { + m_electric_chair = getent( "electric_chair_" + i, "targetname" ); + m_electric_chair notify( "bridge_empty" ); + } + + setup_puzzle_piece_glint(); /# - iprintlnbold( "plane location reset" ); + iprintlnbold( "plane location reset" ); #/ - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_craftable show(); - playfxontag( level._effect[ "fx_alcatraz_plane_apear" ], m_plane_craftable, "tag_origin" ); - veh_plane_flyable = getent( "plane_flyable", "targetname" ); - veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_underground", "targetname" ) ); - vo_play_four_part_conversation( level.four_part_convos[ "alcatraz_return_quest_reset" ] ); - flag_clear( "plane_is_away" ); + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_craftable show(); + playfxontag( level._effect["fx_alcatraz_plane_apear"], m_plane_craftable, "tag_origin" ); + veh_plane_flyable = getent( "plane_flyable", "targetname" ); + veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_underground", "targetname" ) ); + vo_play_four_part_conversation( level.four_part_convos["alcatraz_return_quest_reset"] ); + flag_clear( "plane_is_away" ); } plane_flight_thread() { - while ( 1 ) - { - m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); - m_plane_craftable = getent( "plane_craftable", "targetname" ); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - veh_plane_flyable = getent( "plane_flyable", "targetname" ); - m_plane_about_to_crash ghost(); - flag_wait( "plane_boarded" ); - level clientnotify( "sndPB" ); - if ( isDefined( level.music_override ) && !level.music_override ) - { - t_plane_fly playloopsound( "mus_event_plane_countdown_loop", 0,25 ); - } - i = 10; - while ( i > 0 ) - { -/# - iprintlnbold( "TAKE-OFF IN " + i + "..." ); -#/ - veh_plane_flyable playsound( "zmb_plane_countdown_tick" ); - wait 1; - i--; + while ( true ) + { + m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); + m_plane_craftable = getent( "plane_craftable", "targetname" ); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + veh_plane_flyable = getent( "plane_flyable", "targetname" ); + m_plane_about_to_crash ghost(); + flag_wait( "plane_boarded" ); + level clientnotify( "sndPB" ); - } - t_plane_fly stoploopsound( 2 ); - exploder( 10000 ); - veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_flight_path", "targetname" ) ); - veh_plane_flyable startpath(); - flag_set( "plane_departed" ); - t_plane_fly trigger_off(); - m_plane_craftable ghost(); - veh_plane_flyable setvisibletoall(); - level setclientfield( "fog_stage", 1 ); - playfxontag( level._effect[ "fx_alcatraz_plane_trail" ], veh_plane_flyable, "tag_origin" ); - wait 2; - playfxontag( level._effect[ "fx_alcatraz_plane_trail_fast" ], veh_plane_flyable, "tag_origin" ); - wait 3; - exploder( 10001 ); - wait 4; - playfxontag( level._effect[ "fx_alcatraz_flight_lightning" ], veh_plane_flyable, "tag_origin" ); - level setclientfield( "scripted_lightning_flash", 1 ); - wait 1; - flag_set( "plane_approach_bridge" ); - stop_exploder( 10001 ); - level setclientfield( "fog_stage", 2 ); - veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_approach", "targetname" ) ); - veh_plane_flyable startpath(); - wait 6; - playfxontag( level._effect[ "fx_alcatraz_flight_lightning" ], veh_plane_flyable, "tag_origin" ); - level setclientfield( "scripted_lightning_flash", 1 ); - veh_plane_flyable waittill( "reached_end_node" ); - flag_set( "plane_zapped" ); - level setclientfield( "fog_stage", 3 ); - veh_plane_flyable setinvisibletoall(); - n_crash_duration = 2,25; - nd_plane_about_to_crash_1 = getstruct( "plane_about_to_crash_point_1", "targetname" ); - m_plane_about_to_crash.origin = nd_plane_about_to_crash_1.origin; - nd_plane_about_to_crash_2 = getstruct( "plane_about_to_crash_point_2", "targetname" ); - m_plane_about_to_crash moveto( nd_plane_about_to_crash_2.origin, n_crash_duration ); - m_plane_about_to_crash thread spin_while_falling(); - stop_exploder( 10000 ); - m_plane_about_to_crash waittill( "movedone" ); - flag_set( "plane_crashed" ); - wait 2; - level setclientfield( "scripted_lightning_flash", 1 ); - m_plane_about_to_crash.origin += vectorScale( ( 0, 0, 0 ), 2048 ); - wait 4; - veh_plane_flyable setvisibletoall(); - veh_plane_flyable play_fx( "fx_alcatraz_plane_fire_trail", veh_plane_flyable.origin, veh_plane_flyable.angles, "reached_end_node", 1, "tag_origin", undefined ); - veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_flyby", "targetname" ) ); - veh_plane_flyable startpath(); - veh_plane_flyable thread sndpc(); - veh_plane_flyable waittill( "reached_end_node" ); - veh_plane_flyable setinvisibletoall(); - wait 20; - if ( !level.final_flight_activated ) - { - if ( isDefined( level.brutus_on_the_bridge_custom_func ) ) - { - level thread [[ level.brutus_on_the_bridge_custom_func ]](); - break; - } - else - { - level thread brutus_on_the_bridge(); - } - } - flag_clear( "plane_built" ); - flag_clear( "plane_boarded" ); - flag_clear( "plane_departed" ); - flag_clear( "plane_approach_bridge" ); - flag_clear( "plane_zapped" ); - flag_clear( "plane_crashed" ); - level.n_plane_fuel_count = 0; - } + if ( !( isdefined( level.music_override ) && level.music_override ) ) + t_plane_fly playloopsound( "mus_event_plane_countdown_loop", 0.25 ); + + for ( i = 10; i > 0; i-- ) + { +/# + iprintlnbold( "TAKE-OFF IN " + i + "..." ); +#/ + veh_plane_flyable playsound( "zmb_plane_countdown_tick" ); + wait 1; + } + + t_plane_fly stoploopsound( 2 ); + exploder( 10000 ); + veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_flight_path", "targetname" ) ); + veh_plane_flyable startpath(); + flag_set( "plane_departed" ); + t_plane_fly trigger_off(); + m_plane_craftable ghost(); + veh_plane_flyable setvisibletoall(); + level setclientfield( "fog_stage", 1 ); + playfxontag( level._effect["fx_alcatraz_plane_trail"], veh_plane_flyable, "tag_origin" ); + wait 2; + playfxontag( level._effect["fx_alcatraz_plane_trail_fast"], veh_plane_flyable, "tag_origin" ); + wait 3; + exploder( 10001 ); + wait 4; + playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" ); + level setclientfield( "scripted_lightning_flash", 1 ); + wait 1; + flag_set( "plane_approach_bridge" ); + stop_exploder( 10001 ); + level setclientfield( "fog_stage", 2 ); + veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_approach", "targetname" ) ); + veh_plane_flyable startpath(); + wait 6; + playfxontag( level._effect["fx_alcatraz_flight_lightning"], veh_plane_flyable, "tag_origin" ); + level setclientfield( "scripted_lightning_flash", 1 ); + + veh_plane_flyable waittill( "reached_end_node" ); + + flag_set( "plane_zapped" ); + level setclientfield( "fog_stage", 3 ); + veh_plane_flyable setinvisibletoall(); + n_crash_duration = 2.25; + nd_plane_about_to_crash_1 = getstruct( "plane_about_to_crash_point_1", "targetname" ); + m_plane_about_to_crash.origin = nd_plane_about_to_crash_1.origin; + nd_plane_about_to_crash_2 = getstruct( "plane_about_to_crash_point_2", "targetname" ); + m_plane_about_to_crash moveto( nd_plane_about_to_crash_2.origin, n_crash_duration ); + m_plane_about_to_crash thread spin_while_falling(); + stop_exploder( 10000 ); + + m_plane_about_to_crash waittill( "movedone" ); + + flag_set( "plane_crashed" ); + wait 2; + level setclientfield( "scripted_lightning_flash", 1 ); + m_plane_about_to_crash.origin += vectorscale( ( 0, 0, -1 ), 2048.0 ); + wait 4; + veh_plane_flyable setvisibletoall(); + veh_plane_flyable play_fx( "fx_alcatraz_plane_fire_trail", veh_plane_flyable.origin, veh_plane_flyable.angles, "reached_end_node", 1, "tag_origin", undefined ); + veh_plane_flyable attachpath( getvehiclenode( "zombie_plane_bridge_flyby", "targetname" ) ); + veh_plane_flyable startpath(); + veh_plane_flyable thread sndpc(); + + veh_plane_flyable waittill( "reached_end_node" ); + + veh_plane_flyable setinvisibletoall(); + wait 20; + + if ( !level.final_flight_activated ) + { + if ( isdefined( level.brutus_on_the_bridge_custom_func ) ) + level thread [[ level.brutus_on_the_bridge_custom_func ]](); + else + level thread brutus_on_the_bridge(); + } + + flag_clear( "plane_built" ); + flag_clear( "plane_boarded" ); + flag_clear( "plane_departed" ); + flag_clear( "plane_approach_bridge" ); + flag_clear( "plane_zapped" ); + flag_clear( "plane_crashed" ); + level.n_plane_fuel_count = 0; + } } sndpc() { - self playloopsound( "zmb_plane_fire", 4 ); - wait 6; - self playsound( "zmb_plane_fire_whoosh" ); - wait 1; - self stoploopsound( 3 ); + self playloopsound( "zmb_plane_fire", 4 ); + wait 6; + self playsound( "zmb_plane_fire_whoosh" ); + wait 1; + self stoploopsound( 3 ); } brutus_on_the_bridge() { - level endon( "bridge_empty" ); - n_round_on_bridge = 1; - n_desired_spawn_count = 0; - n_spawn_cap = 4; - level.n_bridge_brutuses_killed = 0; - if ( isDefined( level.last_brutus_on_bridge_custom_func ) ) - { - level thread [[ level.last_brutus_on_bridge_custom_func ]](); - } - else - { - level thread last_brutus_on_bridge(); - } - if ( isDefined( level.brutus_despawn_manager_custom_func ) ) - { - level thread [[ level.brutus_despawn_manager_custom_func ]](); - } - else - { - level thread brutus_despawn_manager(); - } - while ( 1 ) - { - level.brutus_last_spawn_round = 0; - n_desired_spawn_count = int( min( n_round_on_bridge, n_spawn_cap ) ); - n_brutuses_on_bridge_count = get_bridge_brutus_count(); - n_spawns_needed = n_desired_spawn_count - n_brutuses_on_bridge_count; - i = n_spawns_needed; - while ( i > 0 ) - { - ai = maps/mp/zombies/_zm_ai_brutus::brutus_spawn_in_zone( "zone_golden_gate_bridge", 1 ); - if ( isDefined( ai ) ) - { - ai.is_bridge_brutus = 1; - if ( level.n_bridge_brutuses_killed == 0 ) - { - ai thread suppress_brutus_bridge_powerups(); - } - } - wait randomfloatrange( 1, 4 ); - i--; + level endon( "bridge_empty" ); + n_round_on_bridge = 1; + n_desired_spawn_count = 0; + n_spawn_cap = 4; + level.n_bridge_brutuses_killed = 0; - } - level waittill( "start_of_round" ); - n_round_on_bridge++; - } + if ( isdefined( level.last_brutus_on_bridge_custom_func ) ) + level thread [[ level.last_brutus_on_bridge_custom_func ]](); + else + level thread last_brutus_on_bridge(); + + if ( isdefined( level.brutus_despawn_manager_custom_func ) ) + level thread [[ level.brutus_despawn_manager_custom_func ]](); + else + level thread brutus_despawn_manager(); + + while ( true ) + { + level.brutus_last_spawn_round = 0; + n_desired_spawn_count = int( min( n_round_on_bridge, n_spawn_cap ) ); + n_brutuses_on_bridge_count = get_bridge_brutus_count(); + n_spawns_needed = n_desired_spawn_count - n_brutuses_on_bridge_count; + + for ( i = n_spawns_needed; i > 0; i-- ) + { + ai = maps\mp\zombies\_zm_ai_brutus::brutus_spawn_in_zone( "zone_golden_gate_bridge", 1 ); + + if ( isdefined( ai ) ) + { + ai.is_bridge_brutus = 1; + + if ( level.n_bridge_brutuses_killed == 0 ) + ai thread suppress_brutus_bridge_powerups(); + } + + wait( randomfloatrange( 1.0, 4.0 ) ); + } + + level waittill( "start_of_round" ); + + n_round_on_bridge++; + } } last_brutus_on_bridge() { - level endon( "bridge_empty" ); - e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); - a_bridge_brutuses = []; - while ( 1 ) - { - a_bridge_brutuses = get_bridge_brutuses(); - if ( a_bridge_brutuses.size > 1 ) - { - _a2012 = a_bridge_brutuses; - _k2012 = getFirstArrayKey( _a2012 ); - while ( isDefined( _k2012 ) ) - { - brutus = _a2012[ _k2012 ]; - if ( isDefined( brutus ) ) - { - brutus.suppress_teargas_behavior = 1; - } - _k2012 = getNextArrayKey( _a2012, _k2012 ); - } - } - else if ( a_bridge_brutuses.size == 1 ) - { - a_bridge_brutuses[ 0 ].suppress_teargas_behavior = 0; - } - wait 0,05; - } + level endon( "bridge_empty" ); + e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); + a_bridge_brutuses = []; + + while ( true ) + { + a_bridge_brutuses = get_bridge_brutuses(); + + if ( a_bridge_brutuses.size > 1 ) + { + foreach ( brutus in a_bridge_brutuses ) + { + if ( isdefined( brutus ) ) + brutus.suppress_teargas_behavior = 1; + } + } + else if ( a_bridge_brutuses.size == 1 ) + a_bridge_brutuses[0].suppress_teargas_behavior = 0; + + wait 0.05; + } } suppress_brutus_bridge_powerups() { - self endon( "brutus_teleporting" ); - level endon( "bridge_empty" ); - level endon( "first_bridge_brutus_killed" ); - self waittill( "death" ); - level.n_bridge_brutuses_killed++; - if ( level.n_bridge_brutuses_killed >= 1 ) - { - level.global_brutus_powerup_prevention = 1; - level thread allow_brutus_powerup_spawning(); - level notify( "first_bridge_brutus_killed" ); - } + self endon( "brutus_teleporting" ); + level endon( "bridge_empty" ); + level endon( "first_bridge_brutus_killed" ); + + self waittill( "death" ); + + level.n_bridge_brutuses_killed++; + + if ( level.n_bridge_brutuses_killed >= 1 ) + { + level.global_brutus_powerup_prevention = 1; + level thread allow_brutus_powerup_spawning(); + level notify( "first_bridge_brutus_killed" ); + } } allow_brutus_powerup_spawning() { - level notify( "only_one_powerup_thread" ); - level endon( "only_one_powerup_thread" ); - level waittill( "bridge_empty" ); - level.global_brutus_powerup_prevention = 0; + level notify( "only_one_powerup_thread" ); + level endon( "only_one_powerup_thread" ); + + level waittill( "bridge_empty" ); + + level.global_brutus_powerup_prevention = 0; } get_bridge_brutuses() { - e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); - a_bridge_brutuses = []; - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_brutus ) && zombies[ i ].is_brutus ) - { - brutus = zombies[ i ]; - if ( brutus istouching( e_gg_zone ) ) - { - brutus.is_bridge_brutus = 1; - a_bridge_brutuses[ a_bridge_brutuses.size ] = brutus; - } - } - i++; - } - return a_bridge_brutuses; + e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); + a_bridge_brutuses = []; + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_brutus ) && zombies[i].is_brutus ) + { + brutus = zombies[i]; + + if ( brutus istouching( e_gg_zone ) ) + { + brutus.is_bridge_brutus = 1; + a_bridge_brutuses[a_bridge_brutuses.size] = brutus; + } + } + } + + return a_bridge_brutuses; } brutus_despawn_manager() { - level notify( "brutus_despawn_manager" ); - level endon( "brutus_despawn_manager" ); - level endon( "bridge_empty" ); - e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); - while ( 1 ) - { - b_is_time_to_despawn = 0; - while ( !b_is_time_to_despawn ) - { - b_is_time_to_despawn = 1; - players = getplayers(); - _a2098 = players; - _k2098 = getFirstArrayKey( _a2098 ); - while ( isDefined( _k2098 ) ) - { - player = _a2098[ _k2098 ]; - if ( isDefined( player ) && player istouching( e_gg_zone ) && !player.afterlife && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - b_is_time_to_despawn = 0; - } - _k2098 = getNextArrayKey( _a2098, _k2098 ); - } - wait 0,1; - } - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_brutus ) && zombies[ i ].is_brutus && isDefined( zombies[ i ].is_bridge_brutus ) && zombies[ i ].is_bridge_brutus ) - { - level thread brutus_temp_despawn( zombies[ i ], "bridge_empty", "bring_bridge_brutuses_back" ); - } - i++; - } - b_is_time_to_bring_back = 0; - while ( !b_is_time_to_bring_back ) - { - b_is_time_to_bring_back = 0; - players = getplayers(); - _a2125 = players; - _k2125 = getFirstArrayKey( _a2125 ); - while ( isDefined( _k2125 ) ) - { - player = _a2125[ _k2125 ]; - if ( isDefined( player ) && player istouching( e_gg_zone ) && !player.afterlife && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - b_is_time_to_bring_back = 1; - } - _k2125 = getNextArrayKey( _a2125, _k2125 ); - } - wait 0,1; - } - level notify( "bring_bridge_brutuses_back" ); - } + level notify( "brutus_despawn_manager" ); + level endon( "brutus_despawn_manager" ); + level endon( "bridge_empty" ); + e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); + + while ( true ) + { + b_is_time_to_despawn = 0; + + while ( !b_is_time_to_despawn ) + { + b_is_time_to_despawn = 1; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player istouching( e_gg_zone ) && !player.afterlife && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + b_is_time_to_despawn = 0; + } + + wait 0.1; + } + + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_brutus ) && zombies[i].is_brutus && ( isdefined( zombies[i].is_bridge_brutus ) && zombies[i].is_bridge_brutus ) ) + level thread brutus_temp_despawn( zombies[i], "bridge_empty", "bring_bridge_brutuses_back" ); + } + + b_is_time_to_bring_back = 0; + + while ( !b_is_time_to_bring_back ) + { + b_is_time_to_bring_back = 0; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player istouching( e_gg_zone ) && !player.afterlife && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + b_is_time_to_bring_back = 1; + } + + wait 0.1; + } + + level notify( "bring_bridge_brutuses_back" ); + } } get_bridge_brutus_count() { - n_touching_count = 0; - e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_brutus ) && zombies[ i ].is_brutus ) - { - brutus = zombies[ i ]; - if ( brutus istouching( e_gg_zone ) ) - { - n_touching_count++; - } - } - i++; - } - return n_touching_count; + n_touching_count = 0; + e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_brutus ) && zombies[i].is_brutus ) + { + brutus = zombies[i]; + + if ( brutus istouching( e_gg_zone ) ) + n_touching_count++; + } + } + + return n_touching_count; } clean_up_bridge_brutuses() { - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ].is_brutus ) && zombies[ i ].is_brutus && isDefined( zombies[ i ].is_bridge_brutus ) && zombies[ i ].is_bridge_brutus ) - { - brutus = zombies[ i ]; - brutus dodamage( 10000, brutus.origin ); - } - i++; - } + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i].is_brutus ) && zombies[i].is_brutus && ( isdefined( zombies[i].is_bridge_brutus ) && zombies[i].is_bridge_brutus ) ) + { + brutus = zombies[i]; + brutus dodamage( 10000, brutus.origin ); + } + } } spin_while_falling() { - self endon( "movedone" ); - while ( 1 ) - { - self.angles += vectorScale( ( 0, 0, 0 ), 4 ); - wait 0,05; - } + self endon( "movedone" ); + + while ( true ) + { + self.angles += vectorscale( ( 0, 1, 0 ), 4.0 ); + wait 0.05; + } } manage_electric_chairs() { - level notify( "manage_electric_chairs" ); - level endon( "manage_electric_chairs" ); - n_chairs_wait = 60; - while ( 1 ) - { - flag_wait( "plane_approach_bridge" ); - i = 1; - while ( i < 5 ) - { - str_trigger_targetname = "trigger_electric_chair_" + i; - t_electric_chair = getent( str_trigger_targetname, "targetname" ); - if ( isDefined( level.electric_chair_trigger_thread_custom_func ) ) - { - t_electric_chair thread [[ level.electric_chair_trigger_thread_custom_func ]]( i ); - } - else - { - t_electric_chair thread electric_chair_trigger_thread( i ); - } - t_electric_chair setcursorhint( "HINT_NOICON" ); - t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); - t_electric_chair usetriggerrequirelookat(); - i++; - } - if ( level.final_flight_activated ) - { - level.revive_trigger_should_ignore_sight_checks = ::maps/mp/zm_prison_sq_final::revive_trigger_should_ignore_sight_checks; - j = 0; - while ( j < level.final_flight_players.size ) - { - m_electric_chair = getent( "electric_chair_" + ( j + 1 ), "targetname" ); - corpse = level.final_flight_players[ j ].e_afterlife_corpse; - corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - corpse maps/mp/zombies/_zm_clone::clone_animate( "chair" ); - wait 1; - corpse.revivetrigger unlink(); - corpse.revivetrigger.origin = m_electric_chair.origin + ( 64, 0, 32 ); + level notify( "manage_electric_chairs" ); + level endon( "manage_electric_chairs" ); + n_chairs_wait = 60; + + while ( true ) + { + flag_wait( "plane_approach_bridge" ); + + for ( i = 1; i < 5; i++ ) + { + str_trigger_targetname = "trigger_electric_chair_" + i; + t_electric_chair = getent( str_trigger_targetname, "targetname" ); + + if ( isdefined( level.electric_chair_trigger_thread_custom_func ) ) + t_electric_chair thread [[ level.electric_chair_trigger_thread_custom_func ]]( i ); + else + t_electric_chair thread electric_chair_trigger_thread( i ); + + t_electric_chair setcursorhint( "HINT_NOICON" ); + t_electric_chair sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); + t_electric_chair usetriggerrequirelookat(); + } + + if ( level.final_flight_activated ) + { + level.revive_trigger_should_ignore_sight_checks = maps\mp\zm_prison_sq_final::revive_trigger_should_ignore_sight_checks; + + for ( j = 0; j < level.final_flight_players.size; j++ ) + { + m_electric_chair = getent( "electric_chair_" + ( j + 1 ), "targetname" ); + corpse = level.final_flight_players[j].e_afterlife_corpse; + corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + corpse maps\mp\zombies\_zm_clone::clone_animate( "chair" ); + wait 1; + corpse.revivetrigger unlink(); + corpse.revivetrigger.origin = m_electric_chair.origin + ( 64, 0, 32 ); /# - corpse.revivetrigger thread print3d_ent( "revivetrigger" ); + corpse.revivetrigger thread print3d_ent( "revivetrigger" ); #/ - j++; - } - j = 1; - while ( j < 5 ) - { - str_trigger_targetname = "trigger_electric_chair_" + j; - t_electric_chair = getent( str_trigger_targetname, "targetname" ); - t_electric_chair trigger_off(); - j++; - } - while ( flag( "plane_approach_bridge" ) ) - { - wait 1; - } - } - else i = 1; - while ( i < 5 ) - { - m_electric_chair = getent( "electric_chair_" + i, "targetname" ); - m_electric_chair hide(); - str_trigger_targetname = "trigger_electric_chair_" + i; - t_electric_chair = getent( str_trigger_targetname, "targetname" ); - t_electric_chair trigger_off(); - i++; - } - flag_wait( "plane_crashed" ); - wait n_chairs_wait; - exploder( 666 ); - i = 1; - while ( i < 5 ) - { - m_electric_chair = getent( "electric_chair_" + i, "targetname" ); - m_electric_chair show(); - m_electric_chair thread snddelayedchairaudio( i ); - str_trigger_targetname = "trigger_electric_chair_" + i; - t_electric_chair = getent( str_trigger_targetname, "targetname" ); - t_electric_chair trigger_on(); - i++; - } - wait 3; - electric_chair_vo(); - wait 6; - } + } + + for ( j = 1; j < 5; j++ ) + { + str_trigger_targetname = "trigger_electric_chair_" + j; + t_electric_chair = getent( str_trigger_targetname, "targetname" ); + t_electric_chair trigger_off(); + } + + while ( flag( "plane_approach_bridge" ) ) + wait 1; + } + else + { + for ( i = 1; i < 5; i++ ) + { + m_electric_chair = getent( "electric_chair_" + i, "targetname" ); + m_electric_chair hide(); + str_trigger_targetname = "trigger_electric_chair_" + i; + t_electric_chair = getent( str_trigger_targetname, "targetname" ); + t_electric_chair trigger_off(); + } + + flag_wait( "plane_crashed" ); + wait( n_chairs_wait ); + exploder( 666 ); + + for ( i = 1; i < 5; i++ ) + { + m_electric_chair = getent( "electric_chair_" + i, "targetname" ); + m_electric_chair show(); + m_electric_chair thread snddelayedchairaudio( i ); + str_trigger_targetname = "trigger_electric_chair_" + i; + t_electric_chair = getent( str_trigger_targetname, "targetname" ); + t_electric_chair trigger_on(); + } + + wait 3; + electric_chair_vo(); + wait 6; + } + } } snddelayedchairaudio( i ) { - wait ( i / 10 ); - self playsound( "zmb_quest_electricchair_spawn" ); + wait( i / 10 ); + self playsound( "zmb_quest_electricchair_spawn" ); } electric_chair_trigger_thread( chair_number ) { - level notify( "electric_chair_trigger_thread_" + chair_number ); - level endon( "electric_chair_trigger_thread_" + chair_number ); - m_electric_chair = getent( "electric_chair_" + chair_number, "targetname" ); - n_effects_wait_1 = 4; - n_effects_wait_2 = 0,15; - n_effects_wait_3 = 2; - n_effects_wait_4 = 2; - n_effects_duration = n_effects_wait_1 + n_effects_wait_2 + n_effects_wait_3 + n_effects_wait_4; - while ( 1 ) - { - self waittill( "trigger", e_triggerer ); - character_name = e_triggerer.character_name; - if ( isplayer( e_triggerer ) && !e_triggerer.afterlife ) - { - e_triggerer enableinvulnerability(); - self sethintstring( "" ); - self trigger_off(); - flag_set( "plane_trip_to_nml_successful" ); - if ( level.characters_in_nml.size == 1 ) - { - clean_up_bridge_brutuses(); - } - v_origin = m_electric_chair gettagorigin( "seated" ) + ( 10, 0, -40 ); - v_seated_angles = m_electric_chair gettagangles( "seated" ); - m_linkpoint = spawn_model( "tag_origin", v_origin, v_seated_angles ); - if ( isDefined( level.electric_chair_player_thread_custom_func ) ) - { - e_triggerer thread [[ level.electric_chair_player_thread_custom_func ]]( m_linkpoint, chair_number, n_effects_duration ); - } - else - { - e_triggerer thread electric_chair_player_thread( m_linkpoint, chair_number, n_effects_duration ); - } - chair_corpse = e_triggerer maps/mp/zombies/_zm_clone::spawn_player_clone( e_triggerer, e_triggerer.origin, undefined ); - chair_corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - chair_corpse.ignoreme = 1; - chair_corpse show(); - chair_corpse detachall(); - chair_corpse setvisibletoall(); - chair_corpse setinvisibletoplayer( e_triggerer ); - chair_corpse maps/mp/zombies/_zm_clone::clone_animate( "chair" ); - if ( isDefined( e_triggerer ) ) - { - e_triggerer setclientfieldtoplayer( "rumble_electric_chair", 1 ); - } - wait n_effects_wait_1; - m_fx_1 = spawn_model( "tag_origin", ( -516,883, -3912,04, -7494,9 ), vectorScale( ( 0, 0, 0 ), 180 ) ); - m_fx_2 = spawn_model( "tag_origin", ( -517,024, -3252,66, -7496,2 ), ( 0, 0, 0 ) ); - level setclientfield( "scripted_lightning_flash", 1 ); - wait n_effects_wait_2; - playfxontag( level._effect[ "fx_alcatraz_lightning_finale" ], m_fx_1, "tag_origin" ); - playfxontag( level._effect[ "fx_alcatraz_lightning_finale" ], m_fx_2, "tag_origin" ); - m_fx_3 = spawn_model( "tag_origin", ( -753,495, -3092,62, -8416,6 ), vectorScale( ( 0, 0, 0 ), 270 ) ); - playfxontag( level._effect[ "fx_alcatraz_lightning_wire" ], m_fx_3, "tag_origin" ); - wait n_effects_wait_3; - m_electric_chair play_fx( "fx_alcatraz_elec_chair", m_electric_chair.origin, m_electric_chair.angles, "bridge_empty" ); - if ( isDefined( e_triggerer ) ) - { - e_triggerer setclientfieldtoplayer( "rumble_electric_chair", 2 ); - } - wait n_effects_wait_4; - playfxontag( level._effect[ "fx_alcatraz_afterlife_zmb_tport" ], m_electric_chair, "tag_origin" ); - if ( isDefined( e_triggerer ) ) - { - e_triggerer playsoundtoplayer( "zmb_afterlife_death", e_triggerer ); - } - chair_corpse delete(); - if ( level.characters_in_nml.size == 1 ) - { - clean_up_bridge_brutuses(); - } - if ( isinarray( level.characters_in_nml, character_name ) ) - { - arrayremovevalue( level.characters_in_nml, character_name ); - } - m_fx_1 delete(); - m_fx_2 delete(); - self sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); - self trigger_on(); - } - } + level notify( "electric_chair_trigger_thread_" + chair_number ); + level endon( "electric_chair_trigger_thread_" + chair_number ); + m_electric_chair = getent( "electric_chair_" + chair_number, "targetname" ); + n_effects_wait_1 = 4; + n_effects_wait_2 = 0.15; + n_effects_wait_3 = 2; + n_effects_wait_4 = 2; + n_effects_duration = n_effects_wait_1 + n_effects_wait_2 + n_effects_wait_3 + n_effects_wait_4; + + while ( true ) + { + self waittill( "trigger", e_triggerer ); + + character_name = e_triggerer.character_name; + + if ( isplayer( e_triggerer ) && is_player_valid( e_triggerer ) ) + { + e_triggerer enableinvulnerability(); + self sethintstring( "" ); + self trigger_off(); + flag_set( "plane_trip_to_nml_successful" ); + + if ( level.characters_in_nml.size == 1 ) + clean_up_bridge_brutuses(); + + v_origin = m_electric_chair gettagorigin( "seated" ) + ( 10, 0, -40 ); + v_seated_angles = m_electric_chair gettagangles( "seated" ); + m_linkpoint = spawn_model( "tag_origin", v_origin, v_seated_angles ); + + if ( isdefined( level.electric_chair_player_thread_custom_func ) ) + e_triggerer thread [[ level.electric_chair_player_thread_custom_func ]]( m_linkpoint, chair_number, n_effects_duration ); + else + e_triggerer thread electric_chair_player_thread( m_linkpoint, chair_number, n_effects_duration ); + + chair_corpse = e_triggerer maps\mp\zombies\_zm_clone::spawn_player_clone( e_triggerer, e_triggerer.origin, undefined ); + chair_corpse linkto( m_electric_chair, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + chair_corpse.ignoreme = 1; + chair_corpse show(); + chair_corpse detachall(); + chair_corpse setvisibletoall(); + chair_corpse setinvisibletoplayer( e_triggerer ); + chair_corpse maps\mp\zombies\_zm_clone::clone_animate( "chair" ); + + if ( isdefined( e_triggerer ) ) + e_triggerer setclientfieldtoplayer( "rumble_electric_chair", 1 ); + + wait( n_effects_wait_1 ); + m_fx_1 = spawn_model( "tag_origin", ( -516.883, -3912.04, -7494.9 ), vectorscale( ( 0, 1, 0 ), 180.0 ) ); + m_fx_2 = spawn_model( "tag_origin", ( -517.024, -3252.66, -7496.2 ), ( 0, 0, 0 ) ); + level setclientfield( "scripted_lightning_flash", 1 ); + wait( n_effects_wait_2 ); + playfxontag( level._effect["fx_alcatraz_lightning_finale"], m_fx_1, "tag_origin" ); + playfxontag( level._effect["fx_alcatraz_lightning_finale"], m_fx_2, "tag_origin" ); + m_fx_3 = spawn_model( "tag_origin", ( -753.495, -3092.62, -8416.6 ), vectorscale( ( 1, 0, 0 ), 270.0 ) ); + playfxontag( level._effect["fx_alcatraz_lightning_wire"], m_fx_3, "tag_origin" ); + wait( n_effects_wait_3 ); + m_electric_chair play_fx( "fx_alcatraz_elec_chair", m_electric_chair.origin, m_electric_chair.angles, "bridge_empty" ); + + if ( isdefined( e_triggerer ) ) + e_triggerer setclientfieldtoplayer( "rumble_electric_chair", 2 ); + + wait( n_effects_wait_4 ); + playfxontag( level._effect["fx_alcatraz_afterlife_zmb_tport"], m_electric_chair, "tag_origin" ); + + if ( isdefined( e_triggerer ) ) + e_triggerer playsoundtoplayer( "zmb_afterlife_death", e_triggerer ); + + chair_corpse delete(); + + if ( level.characters_in_nml.size == 1 ) + clean_up_bridge_brutuses(); + + if ( isinarray( level.characters_in_nml, character_name ) ) + arrayremovevalue( level.characters_in_nml, character_name ); + + m_fx_1 delete(); + m_fx_2 delete(); + self sethintstring( &"ZM_PRISON_ELECTRIC_CHAIR_ACTIVATE" ); + self trigger_on(); + } + } } electric_chair_player_thread( m_linkpoint, chair_number, n_effects_duration ) { - self endon( "death_or_disconnect" ); - e_home_telepoint = getstruct( "home_telepoint_" + chair_number, "targetname" ); - e_corpse_location = getstruct( "corpse_starting_point_" + chair_number, "targetname" ); - self disableweapons(); - self enableinvulnerability(); - self setstance( "stand" ); - self playerlinktodelta( m_linkpoint, "tag_origin", 1, 20, 20, 20, 20 ); - self setplayerangles( m_linkpoint.angles ); - self playsoundtoplayer( "zmb_electric_chair_2d", self ); - self do_player_general_vox( "quest", "chair_electrocution", undefined, 100 ); - self ghost(); - self.ignoreme = 1; - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - wait ( n_effects_duration - 2 ); - switch( self.character_name ) - { - case "Arlington": - self playsoundontag( "vox_plr_3_arlington_electrocution_0", "J_Head" ); - break; - case "Sal": - self playsoundontag( "vox_plr_1_sal_electrocution_0", "J_Head" ); - break; - case "Billy": - self playsoundontag( "vox_plr_2_billy_electrocution_0", "J_Head" ); - break; - case "Finn": - self playsoundontag( "vox_plr_0_finn_electrocution_0", "J_Head" ); - break; - } - wait 2; - level.zones[ "zone_golden_gate_bridge" ].is_enabled = 1; - level.zones[ "zone_golden_gate_bridge" ].is_spawning_allowed = 1; - self.keep_perks = 1; - self disableinvulnerability(); - self.afterlife = 1; - self thread afterlife_laststand( 1 ); - self unlink(); - self setstance( "stand" ); - self waittill( "player_fake_corpse_created" ); - self thread track_player_completed_cycle(); - trace_start = e_corpse_location.origin + vectorScale( ( 0, 0, 0 ), 100 ); - trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, 0 ), 100 ); - corpse_trace = bullettrace( trace_start, trace_end, 0, self.e_afterlife_corpse ); - self.e_afterlife_corpse.origin = corpse_trace[ "position" ]; - self setorigin( e_home_telepoint.origin ); - self enableweapons(); - self setclientfieldtoplayer( "rumble_electric_chair", 0 ); - if ( level.n_quest_iteration_count == 2 ) - { - self waittill( "player_revived" ); - wait 1; - self do_player_general_vox( "quest", "start_2", undefined, 100 ); - } + self endon( "death_or_disconnect" ); + e_home_telepoint = getstruct( "home_telepoint_" + chair_number, "targetname" ); + e_corpse_location = getstruct( "corpse_starting_point_" + chair_number, "targetname" ); + self disableweapons(); + self enableinvulnerability(); + self setstance( "stand" ); + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + self playerlinktodelta( m_linkpoint, "tag_origin", 1, 20, 20, 20, 20 ); + self setplayerangles( m_linkpoint.angles ); + self playsoundtoplayer( "zmb_electric_chair_2d", self ); + self do_player_general_vox( "quest", "chair_electrocution", undefined, 100 ); + self ghost(); + self.ignoreme = 1; + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + wait( n_effects_duration - 2 ); + + switch ( self.character_name ) + { + case "Arlington": + self playsoundontag( "vox_plr_3_arlington_electrocution_0", "J_Head" ); + break; + case "Sal": + self playsoundontag( "vox_plr_1_sal_electrocution_0", "J_Head" ); + break; + case "Billy": + self playsoundontag( "vox_plr_2_billy_electrocution_0", "J_Head" ); + break; + case "Finn": + self playsoundontag( "vox_plr_0_finn_electrocution_0", "J_Head" ); + break; + } + + wait 2; + level.zones["zone_golden_gate_bridge"].is_enabled = 1; + level.zones["zone_golden_gate_bridge"].is_spawning_allowed = 1; + self.keep_perks = 1; + self disableinvulnerability(); + self.afterlife = 1; + self thread afterlife_laststand( 1 ); + self unlink(); + self setstance( "stand" ); + + self waittill( "player_fake_corpse_created" ); + + self thread track_player_completed_cycle(); + trace_start = e_corpse_location.origin + vectorscale( ( 0, 0, 1 ), 100.0 ); + trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 ); + corpse_trace = bullettrace( trace_start, trace_end, 0, self.e_afterlife_corpse ); + self.e_afterlife_corpse.origin = corpse_trace["position"]; + self setorigin( e_home_telepoint.origin ); + self enableweapons(); + self setclientfieldtoplayer( "rumble_electric_chair", 0 ); + + if ( level.n_quest_iteration_count == 2 ) + { + self waittill( "player_revived" ); + + wait 1; + self do_player_general_vox( "quest", "start_2", undefined, 100 ); + } } track_player_completed_cycle() { - self endon( "disconnect" ); - self.e_afterlife_corpse waittill( "death" ); - self notify( "player_completed_cycle" ); - level notify( "someone_completed_quest_cycle" ); + self endon( "disconnect" ); + + self.e_afterlife_corpse waittill( "death" ); + + self notify( "player_completed_cycle" ); + level notify( "someone_completed_quest_cycle" ); } reset_plane_hint_string( player ) { - if ( isDefined( self.stub ) ) - { + if ( isdefined( self.stub ) ) + { /# - println( "Error: This should have been handled by the craftables callback" ); + println( "Error: This should have been handled by the craftables callback" ); #/ - } - else - { - self.fly_trigger sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); - } + } + else + self.fly_trigger sethintstring( &"ZM_PRISON_PLANE_BEGIN_TAKEOFF" ); } play_fx( str_fx, v_origin, v_angles, time_to_delete_or_notify, b_link_to_self, str_tag, b_no_cull ) { - if ( isDefined( time_to_delete_or_notify ) && !isstring( time_to_delete_or_notify ) && time_to_delete_or_notify == -1 && isDefined( b_link_to_self ) && b_link_to_self && isDefined( str_tag ) ) - { - playfxontag( getfx( str_fx ), self, str_tag ); - return self; - } - else - { - m_fx = spawn_model( "tag_origin", v_origin, v_angles ); - if ( isDefined( b_link_to_self ) && b_link_to_self ) - { - if ( isDefined( str_tag ) ) - { - m_fx linkto( self, str_tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); - } - else - { - m_fx linkto( self ); - } - } - if ( isDefined( b_no_cull ) && b_no_cull ) - { - m_fx setforcenocull(); - } - playfxontag( getfx( str_fx ), m_fx, "tag_origin" ); - m_fx thread _play_fx_delete( self, time_to_delete_or_notify ); - return m_fx; - } + if ( ( !isdefined( time_to_delete_or_notify ) || !isstring( time_to_delete_or_notify ) && time_to_delete_or_notify == -1 ) && ( isdefined( b_link_to_self ) && b_link_to_self ) && isdefined( str_tag ) ) + { + playfxontag( getfx( str_fx ), self, str_tag ); + return self; + } + else + { + m_fx = spawn_model( "tag_origin", v_origin, v_angles ); + + if ( isdefined( b_link_to_self ) && b_link_to_self ) + { + if ( isdefined( str_tag ) ) + m_fx linkto( self, str_tag, ( 0, 0, 0 ), ( 0, 0, 0 ) ); + else + m_fx linkto( self ); + } + + if ( isdefined( b_no_cull ) && b_no_cull ) + m_fx setforcenocull(); + + playfxontag( getfx( str_fx ), m_fx, "tag_origin" ); + m_fx thread _play_fx_delete( self, time_to_delete_or_notify ); + return m_fx; + } } spawn_model( model_name, origin, angles, n_spawnflags ) { - if ( !isDefined( n_spawnflags ) ) - { - n_spawnflags = 0; - } - if ( !isDefined( origin ) ) - { - origin = ( 0, 0, 0 ); - } - model = spawn( "script_model", origin, n_spawnflags ); - model setmodel( model_name ); - if ( isDefined( angles ) ) - { - model.angles = angles; - } - return model; + if ( !isdefined( n_spawnflags ) ) + n_spawnflags = 0; + + if ( !isdefined( origin ) ) + origin = ( 0, 0, 0 ); + + model = spawn( "script_model", origin, n_spawnflags ); + model setmodel( model_name ); + + if ( isdefined( angles ) ) + model.angles = angles; + + return model; } getfx( fx ) { /# - assert( isDefined( level._effect[ fx ] ), "Fx " + fx + " is not defined in level._effect." ); + assert( isdefined( level._effect[fx] ), "Fx " + fx + " is not defined in level._effect." ); #/ - return level._effect[ fx ]; + return level._effect[fx]; } _play_fx_delete( ent, time_to_delete_or_notify ) { - if ( !isDefined( time_to_delete_or_notify ) ) - { - time_to_delete_or_notify = -1; - } - if ( isstring( time_to_delete_or_notify ) ) - { - ent waittill_either( "death", time_to_delete_or_notify ); - } - else if ( time_to_delete_or_notify > 0 ) - { - ent waittill_notify_or_timeout( "death", time_to_delete_or_notify ); - } - else - { - ent waittill( "death" ); - } - if ( isDefined( self ) ) - { - self delete(); - } + if ( !isdefined( time_to_delete_or_notify ) ) + time_to_delete_or_notify = -1; + + if ( isstring( time_to_delete_or_notify ) ) + ent waittill_either( "death", time_to_delete_or_notify ); + else if ( time_to_delete_or_notify > 0 ) + ent waittill_notify_or_timeout( "death", time_to_delete_or_notify ); + else + ent waittill( "death" ); + + if ( isdefined( self ) ) + self delete(); } player_disconnect_watcher() { - if ( isDefined( level.player_disconnect_watcher_custom_func ) ) - { - self thread [[ level.player_disconnect_watcher_custom_func ]](); - return; - } - self notify( "disconnect_watcher" ); - self endon( "disconnect_watcher" ); - level endon( "bridge_empty" ); + if ( isdefined( level.player_disconnect_watcher_custom_func ) ) + { + self thread [[ level.player_disconnect_watcher_custom_func ]](); + return; + } + + self notify( "disconnect_watcher" ); + self endon( "disconnect_watcher" ); + level endon( "bridge_empty" ); /# - iprintlnbold( "player_disconnect_watcher" ); + iprintlnbold( "player_disconnect_watcher" ); #/ - if ( !isDefined( self.character_name ) ) - { - wait 0,1; - } - character_name = self.character_name; - self waittill( "disconnect" ); + if ( !isdefined( self.character_name ) ) + wait 0.1; + + character_name = self.character_name; + + self waittill( "disconnect" ); /# - iprintlnbold( character_name + " disconnected!" ); + iprintlnbold( character_name + " disconnected!" ); #/ - if ( isinarray( level.characters_in_nml, character_name ) ) - { - arrayremovevalue( level.characters_in_nml, character_name ); - flag_set( "spawn_zombies" ); - level.brutus_respawn_after_despawn = 1; - } + if ( isinarray( level.characters_in_nml, character_name ) ) + { + arrayremovevalue( level.characters_in_nml, character_name ); + flag_set( "spawn_zombies" ); + level.brutus_respawn_after_despawn = 1; + } } player_death_watcher() { - if ( isDefined( level.player_death_watcher_custom_func ) ) - { - self thread [[ level.player_death_watcher_custom_func ]](); - return; - } - self notify( "player_death_watcher" ); - self endon( "player_death_watcher" ); - level endon( "bridge_empty" ); + if ( isdefined( level.player_death_watcher_custom_func ) ) + { + self thread [[ level.player_death_watcher_custom_func ]](); + return; + } + + self notify( "player_death_watcher" ); + self endon( "player_death_watcher" ); + level endon( "bridge_empty" ); /# - iprintlnbold( "player_death_watcher" ); + iprintlnbold( "player_death_watcher" ); #/ - e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); - nml_trip_is_over = 0; - while ( !nml_trip_is_over ) - { - level waittill( "start_of_round" ); - nml_trip_is_over = 1; - players = getplayers(); - _a2671 = players; - _k2671 = getFirstArrayKey( _a2671 ); - while ( isDefined( _k2671 ) ) - { - player = _a2671[ _k2671 ]; - if ( player istouching( e_gg_zone ) || isDefined( player.on_a_plane ) && player.on_a_plane ) - { - nml_trip_is_over = 0; - if ( !isinarray( level.characters_in_nml, player.character_name ) ) - { - level.characters_in_nml[ level.characters_in_nml.size ] = player.character_name; - } - } - _k2671 = getNextArrayKey( _a2671, _k2671 ); - } - } - while ( isDefined( level.characters_in_nml ) ) - { - i = 0; - while ( i < level.characters_in_nml.size ) - { - character_name = level.characters_in_nml[ i ]; - if ( isinarray( level.characters_in_nml, character_name ) ) - { - arrayremovevalue( level.characters_in_nml, character_name ); - } - i++; - } - } - flag_set( "spawn_zombies" ); - level.brutus_respawn_after_despawn = 1; + e_gg_zone = getent( "zone_golden_gate_bridge", "targetname" ); + nml_trip_is_over = 0; + + while ( !nml_trip_is_over ) + { + level waittill( "start_of_round" ); + + nml_trip_is_over = 1; + players = getplayers(); + + foreach ( player in players ) + { + if ( player istouching( e_gg_zone ) || isdefined( player.on_a_plane ) && player.on_a_plane ) + { + nml_trip_is_over = 0; + + if ( !isinarray( level.characters_in_nml, player.character_name ) ) + level.characters_in_nml[level.characters_in_nml.size] = player.character_name; + } + } + } + + if ( isdefined( level.characters_in_nml ) ) + { + for ( i = 0; i < level.characters_in_nml.size; i++ ) + { + character_name = level.characters_in_nml[i]; + + if ( isinarray( level.characters_in_nml, character_name ) ) + arrayremovevalue( level.characters_in_nml, character_name ); + } + } + + flag_set( "spawn_zombies" ); + level.brutus_respawn_after_despawn = 1; } array_set_visible_to_all( a_ents, is_visible ) { - if ( is_visible ) - { - _a2707 = a_ents; - _k2707 = getFirstArrayKey( _a2707 ); - while ( isDefined( _k2707 ) ) - { - ent = _a2707[ _k2707 ]; - ent setvisibletoall(); - _k2707 = getNextArrayKey( _a2707, _k2707 ); - } - } - else _a2714 = a_ents; - _k2714 = getFirstArrayKey( _a2714 ); - while ( isDefined( _k2714 ) ) - { - ent = _a2714[ _k2714 ]; - ent setinvisibletoall(); - _k2714 = getNextArrayKey( _a2714, _k2714 ); - } + if ( is_visible ) + { + foreach ( ent in a_ents ) + ent setvisibletoall(); + } + else + { + foreach ( ent in a_ents ) + ent setinvisibletoall(); + } } warden_fence_hotjoin_handler() { - while ( 1 ) - { - level waittill( "warden_fence_up" ); - stop_exploder( 2000 ); - exploder( 2000 ); - wait 0,05; - } + while ( true ) + { + level waittill( "warden_fence_up" ); + + stop_exploder( 2000 ); + exploder( 2000 ); + wait 0.05; + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc index 9041ab3..a1d26a4 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_nixie.gsc @@ -1,594 +1,566 @@ -#include maps/mp/zm_alcatraz_sq; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_afterlife; -#include maps/_vehicle; -#include maps/_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\_utility; +#include maps\_vehicle; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_alcatraz_sq; setup_nixie_tubes_puzzle() { - level.a_nixie_tube_code = []; - level.a_nixie_tube_solution = []; - t_elevator_door = getent( "nixie_elevator_door", "targetname" ); - t_elevator_door trigger_off(); - m_rigging = get_craftable_piece_model( "plane", "rigging" ); - m_citadel_elevator = getent( "citadel_elevator", "targetname" ); - m_rigging linkto( m_citadel_elevator ); - level thread nixie_tube_notifier(); - level thread nixie_tube_elevator_door(); - while ( !flag( "nixie_puzzle_completed" ) ) - { - generate_unrestricted_nixie_tube_solution(); - n_code = nixie_tube_add_code( level.a_nixie_tube_solution[ 1 ], level.a_nixie_tube_solution[ 2 ], level.a_nixie_tube_solution[ 3 ] ); - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - m_nixie_tube thread nixie_tube_thread( i ); - m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" ); - j = 0; - while ( j < 10 ) - { - m_nixie_clue hidepart( "J_" + j ); - j++; - } - players = getplayers(); - _a76 = players; - _k76 = getFirstArrayKey( _a76 ); - while ( isDefined( _k76 ) ) - { - player = _a76[ _k76 ]; - if ( isDefined( player ) && isDefined( player.afterlife ) && player.afterlife ) - { - m_nixie_clue setvisibletoplayer( player ); - } - _k76 = getNextArrayKey( _a76, _k76 ); - } - m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[ i ] ); - i++; - } - level waittill( "nixie_" + n_code ); - flag_set( "nixie_puzzle_solved" ); - nixie_tube_remove_code( n_code ); - i = 1; - while ( i < 4 ) - { - m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" ); - m_nixie_clue setinvisibletoall(); - i++; - } - nixie_tube_2 = getent( "nixie_tube_2", "targetname" ); - nixie_tube_2 playsound( "zmb_quest_nixie_success" ); - level thread nixie_tube_elevator_drops(); - nixie_tube_win_effects_all_tubes( 0, 6, 0 ); - wait 0,5; - n_countdown = 60; - level thread sndnixietubecountdown( n_countdown ); - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - level notify( "nixie_tube_trigger_" + i ); - m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown ); - i++; - } - flag_set( "nixie_countdown_started" ); - flag_wait( "nixie_countdown_expired" ); - if ( !flag( "nixie_puzzle_completed" ) ) - { - t_elevator_door = getent( "nixie_elevator_door", "targetname" ); - t_elevator_door trigger_off(); - flag_clear( "nixie_countdown_started" ); - flag_clear( "nixie_countdown_expired" ); - flag_clear( "nixie_puzzle_solved" ); - nixie_tube_elevator_rises(); - } - } - m_nixie_tube = getent( "nixie_tube_2", "targetname" ); - m_nixie_tube playsound( "zmb_quest_nixie_success" ); + level.a_nixie_tube_code = []; + level.a_nixie_tube_solution = []; + t_elevator_door = getent( "nixie_elevator_door", "targetname" ); + t_elevator_door trigger_off(); + m_rigging = get_craftable_piece_model( "plane", "rigging" ); + m_citadel_elevator = getent( "citadel_elevator", "targetname" ); + m_rigging linkto( m_citadel_elevator ); + level thread nixie_tube_notifier(); + level thread nixie_tube_elevator_door(); + + while ( !flag( "nixie_puzzle_completed" ) ) + { + generate_unrestricted_nixie_tube_solution(); + n_code = nixie_tube_add_code( level.a_nixie_tube_solution[1], level.a_nixie_tube_solution[2], level.a_nixie_tube_solution[3] ); + + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + m_nixie_tube thread nixie_tube_thread( i ); + m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" ); + + for ( j = 0; j < 10; j++ ) + m_nixie_clue hidepart( "J_" + j ); + + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && ( isdefined( player.afterlife ) && player.afterlife ) ) + m_nixie_clue setvisibletoplayer( player ); + } + + m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[i] ); + } + + level waittill( "nixie_" + n_code ); + + flag_set( "nixie_puzzle_solved" ); + nixie_tube_remove_code( n_code ); + + for ( i = 1; i < 4; i++ ) + { + m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" ); + m_nixie_clue setinvisibletoall(); + } + + nixie_tube_2 = getent( "nixie_tube_2", "targetname" ); + nixie_tube_2 playsound( "zmb_quest_nixie_success" ); + level thread nixie_tube_elevator_drops(); + nixie_tube_win_effects_all_tubes( 0, 6, 0 ); + wait 0.5; + n_countdown = 60; + level thread sndnixietubecountdown( n_countdown ); + + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + level notify( "nixie_tube_trigger_" + i ); + m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown ); + } + + flag_set( "nixie_countdown_started" ); + flag_wait( "nixie_countdown_expired" ); + + if ( !flag( "nixie_puzzle_completed" ) ) + { + t_elevator_door = getent( "nixie_elevator_door", "targetname" ); + t_elevator_door trigger_off(); + flag_clear( "nixie_countdown_started" ); + flag_clear( "nixie_countdown_expired" ); + flag_clear( "nixie_puzzle_solved" ); + nixie_tube_elevator_rises(); + } + } + + m_nixie_tube = getent( "nixie_tube_2", "targetname" ); + m_nixie_tube playsound( "zmb_quest_nixie_success" ); /# - iprintlnbold( "nixie puzzle solved!" ); + iprintlnbold( "nixie puzzle solved!" ); #/ - flag_clear( "nixie_puzzle_solved" ); - array_delete( getentarray( "wires_nixie_elevator", "script_noteworthy" ) ); - stop_exploder( 3400 ); - stop_exploder( 3500 ); - stop_exploder( 3600 ); - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - m_nixie_tube thread afterlife_interact_object_think(); - m_nixie_tube thread nixie_tube_thread( i ); - i++; - } + flag_clear( "nixie_puzzle_solved" ); + array_delete( getentarray( "wires_nixie_elevator", "script_noteworthy" ) ); + stop_exploder( 3400 ); + stop_exploder( 3500 ); + stop_exploder( 3600 ); + + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + m_nixie_tube thread afterlife_interact_object_think(); + m_nixie_tube thread nixie_tube_thread( i ); + } } generate_unrestricted_nixie_tube_solution() { - a_restricted_solutions = []; - a_restricted_solutions[ 0 ] = 115; - a_restricted_solutions[ 1 ] = 935; - a_restricted_solutions[ 2 ] = 386; - a_restricted_solutions[ 3 ] = 481; - a_restricted_solutions[ 4 ] = 101; - a_restricted_solutions[ 5 ] = 872; - a_numbers = []; - i = 0; - while ( i < 10 ) - { - a_numbers[ i ] = i; - i++; - } - i = 1; - while ( i < 4 ) - { - n_index = randomint( a_numbers.size ); - level.a_nixie_tube_solution[ i ] = a_numbers[ n_index ]; - arrayremoveindex( a_numbers, n_index ); - i++; - } - i = 0; - while ( i < a_restricted_solutions.size ) - { - b_is_restricted_solution = 1; - restricted_solution = []; - j = 1; - while ( j < 4 ) - { - restricted_solution[ j ] = get_split_number( j, a_restricted_solutions[ i ] ); - if ( restricted_solution[ j ] != level.a_nixie_tube_solution[ j ] ) - { - b_is_restricted_solution = 0; - } - j++; - } - if ( b_is_restricted_solution ) - { - n_index = randomint( a_numbers.size ); - level.a_nixie_tube_solution[ 3 ] = a_numbers[ n_index ]; - } - i++; - } + a_restricted_solutions = []; + a_restricted_solutions[0] = 115; + a_restricted_solutions[1] = 935; + a_restricted_solutions[2] = 386; + a_restricted_solutions[3] = 481; + a_restricted_solutions[4] = 101; + a_restricted_solutions[5] = 872; + a_numbers = []; + + for ( i = 0; i < 10; i++ ) + a_numbers[i] = i; + + for ( i = 1; i < 4; i++ ) + { + n_index = randomint( a_numbers.size ); + level.a_nixie_tube_solution[i] = a_numbers[n_index]; + arrayremoveindex( a_numbers, n_index ); + } + + for ( i = 0; i < a_restricted_solutions.size; i++ ) + { + b_is_restricted_solution = 1; + restricted_solution = []; + + for ( j = 1; j < 4; j++ ) + { + restricted_solution[j] = get_split_number( j, a_restricted_solutions[i] ); + + if ( restricted_solution[j] != level.a_nixie_tube_solution[j] ) + b_is_restricted_solution = 0; + } + + if ( b_is_restricted_solution ) + { + n_index = randomint( a_numbers.size ); + level.a_nixie_tube_solution[3] = a_numbers[n_index]; + } + } } nixie_tube_notifier() { - if ( !isDefined( level.a_important_codes ) ) - { - level.a_important_codes = []; - level.a_important_codes[ level.a_important_codes.size ] = 115; - level.a_important_codes[ level.a_important_codes.size ] = 935; - } - level thread nixie_115(); - level thread nixie_935(); - while ( !isDefined( level.a_nixie_tube_code ) || !isDefined( level.a_nixie_tube_code[ 3 ] ) ) - { - wait 1; - } - while ( 1 ) - { - codes_to_check = array_copy( level.a_important_codes ); - non_array_value = ( level.a_nixie_tube_code[ 1 ] * 100 ) + ( level.a_nixie_tube_code[ 2 ] * 10 ) + level.a_nixie_tube_code[ 3 ]; - _a240 = codes_to_check; - _k240 = getFirstArrayKey( _a240 ); - while ( isDefined( _k240 ) ) - { - code = _a240[ _k240 ]; - if ( code == non_array_value ) - { - level notify( "nixie_" + code ); - } - _k240 = getNextArrayKey( _a240, _k240 ); - } - wait 2; - } + if ( !isdefined( level.a_important_codes ) ) + { + level.a_important_codes = []; + level.a_important_codes[level.a_important_codes.size] = 115; + level.a_important_codes[level.a_important_codes.size] = 935; + } + + level thread nixie_115(); + level thread nixie_935(); + + while ( !isdefined( level.a_nixie_tube_code ) || !isdefined( level.a_nixie_tube_code[3] ) ) + wait 1; + + while ( true ) + { + codes_to_check = array_copy( level.a_important_codes ); + non_array_value = level.a_nixie_tube_code[1] * 100 + level.a_nixie_tube_code[2] * 10 + level.a_nixie_tube_code[3]; + + foreach ( code in codes_to_check ) + { + if ( code == non_array_value ) + level notify( "nixie_" + code ); + } + + wait 2; + } } nixie_tube_add_code( a, b, c ) { - if ( isDefined( b ) ) - { - non_array_value = ( a * 100 ) + ( b * 10 ) + c; - } - else - { - non_array_value = a; - } - level.a_important_codes[ level.a_important_codes.size ] = non_array_value; - return non_array_value; + if ( isdefined( b ) ) + non_array_value = a * 100 + b * 10 + c; + else + non_array_value = a; + + level.a_important_codes[level.a_important_codes.size] = non_array_value; + return non_array_value; } nixie_tube_remove_code( a, b, c ) { - if ( isDefined( b ) ) - { - non_array_value = ( a * 100 ) + ( b * 10 ) + c; - } - else - { - non_array_value = a; - } - arrayremovevalue( level.a_important_codes, non_array_value ); + if ( isdefined( b ) ) + non_array_value = a * 100 + b * 10 + c; + else + non_array_value = a; + + arrayremovevalue( level.a_important_codes, non_array_value ); } sndnixietubecountdown( num ) { - level endon( "sndEndNixieCount" ); - ent = getent( "nixie_tube_2", "targetname" ); - i = num; - while ( i > 0 ) - { - if ( i <= 10 ) - { - ent playsound( "zmb_quest_nixie_count_final" ); - } - else - { - ent playsound( "zmb_quest_nixie_count" ); - } - wait 1; - i--; + level endon( "sndEndNixieCount" ); + ent = getent( "nixie_tube_2", "targetname" ); - } - ent playsound( "zmb_quest_nixie_fail" ); + for ( i = num; i > 0; i-- ) + { + if ( i <= 10 ) + ent playsound( "zmb_quest_nixie_count_final" ); + else + ent playsound( "zmb_quest_nixie_count" ); + + wait 1; + } + + ent playsound( "zmb_quest_nixie_fail" ); } nixie_tube_thread( n_tube_index, b_force_reset ) { - if ( !isDefined( b_force_reset ) ) - { - b_force_reset = 1; - } - level endon( "kill_nixie_input" ); - if ( b_force_reset ) - { - level.a_nixie_tube_code[ n_tube_index ] = 0; - } - self thread afterlife_interact_object_think(); - i = 0; - while ( i < 10 ) - { - self hidepart( "J_off" ); - self hidepart( "J_" + i ); - i++; - } - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - while ( !flag( "nixie_puzzle_solved" ) ) - { - level waittill( "nixie_tube_trigger_" + n_tube_index ); - while ( flag( "nixie_puzzle_solved" ) ) - { - continue; - } - i = 0; - while ( i < 10 ) - { - self hidepart( "J_" + i ); - i++; - } - level.a_nixie_tube_code[ n_tube_index ]++; - self playsound( "zmb_quest_nixie_count" ); - if ( level.a_nixie_tube_code[ n_tube_index ] > 9 ) - { - level.a_nixie_tube_code[ n_tube_index ] = 0; - } - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait 0,05; - self notify( "afterlife_interact_reset" ); - } + if ( !isdefined( b_force_reset ) ) + b_force_reset = 1; + + level endon( "kill_nixie_input" ); + + if ( b_force_reset ) + level.a_nixie_tube_code[n_tube_index] = 0; + + self thread afterlife_interact_object_think(); + + for ( i = 0; i < 10; i++ ) + { + self hidepart( "J_off" ); + self hidepart( "J_" + i ); + } + + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + + while ( !flag( "nixie_puzzle_solved" ) ) + { + level waittill( "nixie_tube_trigger_" + n_tube_index ); + + if ( flag( "nixie_puzzle_solved" ) ) + continue; + + for ( i = 0; i < 10; i++ ) + self hidepart( "J_" + i ); + + level.a_nixie_tube_code[n_tube_index]++; + self playsound( "zmb_quest_nixie_count" ); + + if ( level.a_nixie_tube_code[n_tube_index] > 9 ) + level.a_nixie_tube_code[n_tube_index] = 0; + + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait 0.05; + self notify( "afterlife_interact_reset" ); + } } nixie_tube_win_effects( n_tube_index, n_blink_rate ) { - if ( !isDefined( n_blink_rate ) ) - { - n_blink_rate = 0,25; - } - while ( !flag( "nixie_countdown_started" ) ) - { - self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait n_blink_rate; - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait n_blink_rate; - } - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); + if ( !isdefined( n_blink_rate ) ) + n_blink_rate = 0.25; + + while ( !flag( "nixie_countdown_started" ) ) + { + self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait( n_blink_rate ); + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait( n_blink_rate ); + } + + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); } nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 ) { - if ( !isDefined( goal_num_1 ) ) - { - goal_num_1 = 0; - } - if ( !isDefined( goal_num_2 ) ) - { - goal_num_2 = 0; - } - if ( !isDefined( goal_num_3 ) ) - { - goal_num_3 = 0; - } - a_nixie_tube = []; - a_nixie_tube[ 1 ] = getent( "nixie_tube_1", "targetname" ); - a_nixie_tube[ 2 ] = getent( "nixie_tube_2", "targetname" ); - a_nixie_tube[ 3 ] = getent( "nixie_tube_3", "targetname" ); - n_off_tube = 1; - start_time = 0; - while ( start_time < 3 ) - { - i = 1; - while ( i < ( 3 + 1 ) ) - { - if ( i == n_off_tube ) - { - a_nixie_tube[ i ] hidepart( "J_" + level.a_nixie_tube_code[ i ] ); - i++; - continue; - } - else - { - a_nixie_tube[ i ] showpart( "J_" + level.a_nixie_tube_code[ i ] ); - if ( i == 1 || n_off_tube == 2 && i == 3 && n_off_tube == 1 ) - { - a_nixie_tube[ i ] playsound( "zmb_quest_nixie_count" ); - } - } - i++; - } - n_off_tube++; - if ( n_off_tube > 3 ) - { - n_off_tube = 1; - } - wait_network_frame(); - start_time += 0,15; - } - a_nixie_tube[ 1 ] showpart( "J_" + level.a_nixie_tube_code[ 1 ] ); - a_nixie_tube[ 2 ] showpart( "J_" + level.a_nixie_tube_code[ 2 ] ); - a_nixie_tube[ 3 ] showpart( "J_" + level.a_nixie_tube_code[ 3 ] ); - while ( level.a_nixie_tube_code[ 1 ] != goal_num_1 || level.a_nixie_tube_code[ 2 ] != goal_num_2 && level.a_nixie_tube_code[ 3 ] != goal_num_3 ) - { - n_current_tube = 1; - n_goal = goal_num_1; - if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_1 ) - { - n_current_tube = 2; - n_goal = goal_num_2; - if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_2 ) - { - n_current_tube = 3; - n_goal = goal_num_3; - } - } - j = 0; - while ( j < 10 ) - { - a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - level.a_nixie_tube_code[ n_current_tube ]--; + if ( !isdefined( goal_num_1 ) ) + goal_num_1 = 0; - if ( level.a_nixie_tube_code[ n_current_tube ] == -1 ) - { - level.a_nixie_tube_code[ n_current_tube ] = 9; - } - a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - if ( ( j % 3 ) == 0 ) - { - a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" ); - } - wait 0,05; - j++; - } - wait_network_frame(); - j = 0; - while ( level.a_nixie_tube_code[ n_current_tube ] != n_goal ) - { - a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - level.a_nixie_tube_code[ n_current_tube ]--; + if ( !isdefined( goal_num_2 ) ) + goal_num_2 = 0; - if ( level.a_nixie_tube_code[ n_current_tube ] == -1 ) - { - level.a_nixie_tube_code[ n_current_tube ] = 9; - } - a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - if ( ( j % 3 ) == 0 ) - { - a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" ); - } - j++; - wait 0,05; - } - } - a_nixie_tube[ 2 ] playsound( "zmb_quest_nixie_count_final" ); - wait_network_frame(); + if ( !isdefined( goal_num_3 ) ) + goal_num_3 = 0; + + a_nixie_tube = []; + a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" ); + a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" ); + a_nixie_tube[3] = getent( "nixie_tube_3", "targetname" ); + n_off_tube = 1; + + for ( start_time = 0; start_time < 3; start_time += 0.15 ) + { + for ( i = 1; i < 3 + 1; i++ ) + { + if ( i == n_off_tube ) + { + a_nixie_tube[i] hidepart( "J_" + level.a_nixie_tube_code[i] ); + continue; + } + + a_nixie_tube[i] showpart( "J_" + level.a_nixie_tube_code[i] ); + + if ( i == 1 && n_off_tube == 2 || i == 3 && n_off_tube == 1 ) + a_nixie_tube[i] playsound( "zmb_quest_nixie_count" ); + } + + n_off_tube++; + + if ( n_off_tube > 3 ) + n_off_tube = 1; + + wait_network_frame(); + } + + a_nixie_tube[1] showpart( "J_" + level.a_nixie_tube_code[1] ); + a_nixie_tube[2] showpart( "J_" + level.a_nixie_tube_code[2] ); + a_nixie_tube[3] showpart( "J_" + level.a_nixie_tube_code[3] ); + + while ( level.a_nixie_tube_code[1] != goal_num_1 || level.a_nixie_tube_code[2] != goal_num_2 || level.a_nixie_tube_code[3] != goal_num_3 ) + { + n_current_tube = 1; + n_goal = goal_num_1; + + if ( level.a_nixie_tube_code[n_current_tube] == goal_num_1 ) + { + n_current_tube = 2; + n_goal = goal_num_2; + + if ( level.a_nixie_tube_code[n_current_tube] == goal_num_2 ) + { + n_current_tube = 3; + n_goal = goal_num_3; + } + } + + for ( j = 0; j < 10; j++ ) + { + a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + level.a_nixie_tube_code[n_current_tube]--; + + if ( level.a_nixie_tube_code[n_current_tube] == -1 ) + level.a_nixie_tube_code[n_current_tube] = 9; + + a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + + if ( j % 3 == 0 ) + a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" ); + + wait 0.05; + } + + wait_network_frame(); + j = 0; + + while ( level.a_nixie_tube_code[n_current_tube] != n_goal ) + { + a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + level.a_nixie_tube_code[n_current_tube]--; + + if ( level.a_nixie_tube_code[n_current_tube] == -1 ) + level.a_nixie_tube_code[n_current_tube] = 9; + + a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + + if ( j % 3 == 0 ) + a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" ); + + j++; + wait 0.05; + } + } + + a_nixie_tube[2] playsound( "zmb_quest_nixie_count_final" ); + wait_network_frame(); } nixie_tube_thread_play_countdown( n_tube_index, n_countdown ) { - level endon( "end_nixie_countdown" ); - n_tick_duration = 1; - level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown ); + level endon( "end_nixie_countdown" ); + n_tick_duration = 1; + level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown ); /# - iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[ n_tube_index ] ); + iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[n_tube_index] ); #/ - i = 0; - while ( i < 10 ) - { - self hidepart( "J_" + i ); - i++; - } - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - while ( n_countdown ) - { - n_countdown--; + for ( i = 0; i < 10; i++ ) + self hidepart( "J_" + i ); - self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown ); - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait n_tick_duration; - } - flag_set( "nixie_countdown_expired" ); - wait 0,05; - flag_clear( "nixie_countdown_expired" ); + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + + while ( n_countdown ) + { + n_countdown--; + self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown ); + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait( n_tick_duration ); + } + + flag_set( "nixie_countdown_expired" ); + wait 0.05; + flag_clear( "nixie_countdown_expired" ); } get_split_number( n_tube_index, n_countdown ) { - if ( n_tube_index == 1 ) - { - return ( n_countdown - ( n_countdown % 100 ) ) / 100; - } - if ( n_tube_index == 2 ) - { - n_temp = n_countdown % 100; - n_temp -= n_countdown % 10; - n_temp /= 10; - return n_temp; - } - if ( n_tube_index == 3 ) - { - return n_countdown % 10; - } + if ( n_tube_index == 1 ) + return ( n_countdown - n_countdown % 100 ) / 100; + + if ( n_tube_index == 2 ) + { + n_temp = n_countdown % 100; + n_temp -= n_countdown % 10; + n_temp /= 10; + return n_temp; + } + + if ( n_tube_index == 3 ) + return n_countdown % 10; } nixie_tube_elevator_drops() { - n_elevator_drop_duration = 3; - maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 ); - exploder( 3400 ); - exploder( 3500 ); - exploder( 3600 ); - m_citadel_elevator = getent( "citadel_elevator", "targetname" ); - a_m_script_models = []; - a_m_script_models = getentarray( "script_model", "classname" ); - i = 0; - while ( i < a_m_script_models.size ) - { - if ( a_m_script_models[ i ].model == "veh_t6_dlc_zombie_part_rigging" ) - { - playfxontag( level._effect[ "elevator_fall" ], a_m_script_models[ i ], "tag_origin" ); - } - i++; - } - m_citadel_elevator playsound( "zmb_quest_elevator_move" ); - m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), n_elevator_drop_duration, 1, 1 ); - wait n_elevator_drop_duration; - t_elevator_door = getent( "nixie_elevator_door", "targetname" ); - t_elevator_door trigger_on(); + n_elevator_drop_duration = 3; + maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 ); + exploder( 3400 ); + exploder( 3500 ); + exploder( 3600 ); + m_citadel_elevator = getent( "citadel_elevator", "targetname" ); + a_m_script_models = []; + a_m_script_models = getentarray( "script_model", "classname" ); + + for ( i = 0; i < a_m_script_models.size; i++ ) + { + if ( a_m_script_models[i].model == "veh_t6_dlc_zombie_part_rigging" ) + playfxontag( level._effect["elevator_fall"], a_m_script_models[i], "tag_origin" ); + } + + m_citadel_elevator playsound( "zmb_quest_elevator_move" ); + m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, -1 ), 768.0 ), n_elevator_drop_duration, 1, 1 ); + wait( n_elevator_drop_duration ); + t_elevator_door = getent( "nixie_elevator_door", "targetname" ); + t_elevator_door trigger_on(); } nixie_tube_elevator_rises() { - elevator_rise_duration = 3; - maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 ); - stop_exploder( 3400 ); - stop_exploder( 3500 ); - stop_exploder( 3600 ); - m_citadel_elevator = getent( "citadel_elevator", "targetname" ); - m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), elevator_rise_duration, 1, 1 ); - m_citadel_elevator playsound( "zmb_quest_elevator_move" ); - wait elevator_rise_duration; + elevator_rise_duration = 3; + maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 ); + stop_exploder( 3400 ); + stop_exploder( 3500 ); + stop_exploder( 3600 ); + m_citadel_elevator = getent( "citadel_elevator", "targetname" ); + m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, 1 ), 768.0 ), elevator_rise_duration, 1, 1 ); + m_citadel_elevator playsound( "zmb_quest_elevator_move" ); + wait( elevator_rise_duration ); } nixie_tube_elevator_door() { - t_elevator_door = getent( "nixie_elevator_door", "targetname" ); - t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" ); - t_elevator_door waittill( "trigger", e_triggerer ); - m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" ); - m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" ); - m_elevator_bottom_gate_l rotateyaw( -90, 0,5 ); - m_elevator_bottom_gate_r rotateyaw( 90, 0,5 ); - elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" ); - elevator_door_playerclip delete(); - flag_set( "nixie_puzzle_completed" ); - level notify( "sndEndNixieCount" ); - level notify( "end_nixie_countdown" ); - flag_set( "nixie_countdown_expired" ); - wait 0,05; - flag_clear( "nixie_countdown_expired" ); - t_elevator_door delete(); + t_elevator_door = getent( "nixie_elevator_door", "targetname" ); + t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" ); + + t_elevator_door waittill( "trigger", e_triggerer ); + + m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" ); + m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" ); + m_elevator_bottom_gate_l rotateyaw( -90, 0.5 ); + m_elevator_bottom_gate_r rotateyaw( 90, 0.5 ); + elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" ); + elevator_door_playerclip delete(); + flag_set( "nixie_puzzle_completed" ); + level notify( "sndEndNixieCount" ); + level notify( "end_nixie_countdown" ); + flag_set( "nixie_countdown_expired" ); + wait 0.05; + flag_clear( "nixie_countdown_expired" ); + t_elevator_door delete(); } nixie_tube_win_effects_ee( n_tube_index ) { - n_blink_rate = 0,25; - while ( !flag( "nixie_ee_flashing" ) ) - { - self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait n_blink_rate; - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); - wait n_blink_rate; - } - self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] ); + n_blink_rate = 0.25; + + while ( !flag( "nixie_ee_flashing" ) ) + { + self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait( n_blink_rate ); + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); + wait( n_blink_rate ); + } + + self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] ); } nixie_115() { - level waittill( "nixie_" + 115 ); - level notify( "kill_nixie_input" ); - flag_set( "nixie_puzzle_solved" ); - flag_clear( "nixie_ee_flashing" ); - level thread nixie_115_audio(); - nixie_tube_win_effects_all_tubes( 6, 6, 6 ); - flag_set( "nixie_ee_flashing" ); - flag_clear( "nixie_puzzle_solved" ); - nixie_reset_control(); + level waittill( "nixie_" + 115 ); + + level notify( "kill_nixie_input" ); + flag_set( "nixie_puzzle_solved" ); + flag_clear( "nixie_ee_flashing" ); + level thread nixie_115_audio(); + nixie_tube_win_effects_all_tubes( 6, 6, 6 ); + flag_set( "nixie_ee_flashing" ); + flag_clear( "nixie_puzzle_solved" ); + nixie_reset_control(); } nixie_115_audio() { - m_nixie_tube = getent( "nixie_tube_1", "targetname" ); - n_random_line = randomint( 3 ); - m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" ); - m_nixie_tube waittill( "scary_voice" ); + m_nixie_tube = getent( "nixie_tube_1", "targetname" ); + n_random_line = randomint( 3 ); + m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" ); + + m_nixie_tube waittill( "scary_voice" ); } nixie_935() { - level waittill( "nixie_" + 935 ); - level notify( "kill_nixie_input" ); - flag_set( "nixie_puzzle_solved" ); - flag_clear( "nixie_ee_flashing" ); - level thread nixie_935_audio(); - nixie_tube_win_effects_all_tubes( 7, 7, 7 ); - flag_set( "nixie_ee_flashing" ); - flag_clear( "nixie_puzzle_solved" ); - nixie_reset_control(); + level waittill( "nixie_" + 935 ); + + level notify( "kill_nixie_input" ); + flag_set( "nixie_puzzle_solved" ); + flag_clear( "nixie_ee_flashing" ); + level thread nixie_935_audio(); + nixie_tube_win_effects_all_tubes( 7, 7, 7 ); + flag_set( "nixie_ee_flashing" ); + flag_clear( "nixie_puzzle_solved" ); + nixie_reset_control(); } nixie_935_audio() { - if ( isDefined( level.music_override ) && !level.music_override ) - { - level.music_override = 1; - playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) ); - wait 140; - level.music_override = 0; - } - else - { - m_nixie_tube = getent( "nixie_tube_1", "targetname" ); - n_random_line = randomint( 3 ); - m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" ); - m_nixie_tube waittill( "scary_voice" ); - } + if ( !( isdefined( level.music_override ) && level.music_override ) ) + { + level.music_override = 1; + playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) ); + wait 140; + level.music_override = 0; + } + else + { + m_nixie_tube = getent( "nixie_tube_1", "targetname" ); + n_random_line = randomint( 3 ); + m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" ); + + m_nixie_tube waittill( "scary_voice" ); + } } nixie_reset_control( b_reset_control ) { - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - m_nixie_tube thread afterlife_interact_object_think(); - m_nixie_tube thread nixie_tube_thread( i, b_reset_control ); - i++; - } + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + m_nixie_tube thread afterlife_interact_object_think(); + m_nixie_tube thread nixie_tube_thread( i, b_reset_control ); + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc index 2efef5b..38c671a 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_sq_vo.gsc @@ -1,733 +1,680 @@ -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/zombies/_zm_afterlife; -#include maps/_vehicle; -#include maps/_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\_utility; +#include maps\_vehicle; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; vo_see_map_trigger() { - level endon( "someone_completed_quest_cycle" ); - e_triggerer = undefined; - t_map_vo_trigger = getent( "map_vo_trigger", "targetname" ); - b_has_line_played = 0; - while ( !b_has_line_played ) - { - t_map_vo_trigger waittill( "trigger", e_triggerer ); - players = getplayers(); - if ( !e_triggerer.dontspeak && !flag( "story_vo_playing" ) ) - { - flag_set( "story_vo_playing" ); - e_triggerer do_player_general_vox( "quest", "find_map", undefined, 100 ); - wait 5; - arrayremovevalue( players, e_triggerer ); - closest_other_player = getclosest( e_triggerer.origin, players ); - if ( isDefined( closest_other_player ) ) - { - closest_other_player do_player_general_vox( "quest", "response_map", undefined, 100 ); - } - b_has_line_played = 1; - wait 5; - flag_clear( "story_vo_playing" ); - } - } + level endon( "someone_completed_quest_cycle" ); + e_triggerer = undefined; + t_map_vo_trigger = getent( "map_vo_trigger", "targetname" ); + b_has_line_played = 0; + + while ( !b_has_line_played ) + { + t_map_vo_trigger waittill( "trigger", e_triggerer ); + + players = getplayers(); + + if ( !e_triggerer.dontspeak && !flag( "story_vo_playing" ) ) + { + flag_set( "story_vo_playing" ); + e_triggerer do_player_general_vox( "quest", "find_map", undefined, 100 ); + wait 5; + arrayremovevalue( players, e_triggerer ); + closest_other_player = getclosest( e_triggerer.origin, players ); + + if ( isdefined( closest_other_player ) ) + closest_other_player do_player_general_vox( "quest", "response_map", undefined, 100 ); + + b_has_line_played = 1; + wait 5; + flag_clear( "story_vo_playing" ); + } + } } opening_vo() { - load_vo_alias_arrays(); - flag_wait( "afterlife_start_over" ); - wait 1; - players = getplayers(); - vo_play_four_part_conversation( level.four_part_convos[ "start_1_oh_shit_" + randomintrange( 1, 3 ) ] ); - wait 1; - if ( players.size == 1 ) - { - players[ 0 ] vo_play_soliloquy( level.soliloquy_convos[ "solo_intro_" + players[ 0 ].character_name ] ); - } - else - { - if ( is_player_character_present( "Arlington" ) ) - { - vo_play_four_part_conversation( level.four_part_convos[ "intro_plr_3" ] ); - } - } - level thread vo_see_map_trigger(); - wait 10; - vo_play_four_part_conversation( level.four_part_convos[ "during_1_oh_shit" ] ); - level waittill( "end_of_round" ); - wait 5; - vo_play_four_part_conversation( level.four_part_convos[ "start_2_oh_shit_" + randomintrange( 1, 3 ) ] ); - wait 4; - vo_play_four_part_conversation( level.four_part_convos[ "start_3_oh_shit" ] ); - level waittill( "end_of_round" ); - wait 3; - if ( ( get_players_touching( "zone_library" ) + get_players_touching( "zone_start" ) ) == 4 ) - { - vo_play_four_part_conversation( level.four_part_convos[ "start_2_oh_shit" ] ); - } - wait 1; + load_vo_alias_arrays(); + flag_wait( "afterlife_start_over" ); + wait 1; + players = getplayers(); + vo_play_four_part_conversation( level.four_part_convos["start_1_oh_shit_" + randomintrange( 1, 3 )] ); + wait 1; + + if ( players.size == 1 ) + players[0] vo_play_soliloquy( level.soliloquy_convos["solo_intro_" + players[0].character_name] ); + else if ( is_player_character_present( "Arlington" ) ) + vo_play_four_part_conversation( level.four_part_convos["intro_plr_3"] ); + + level thread vo_see_map_trigger(); + wait 10; + vo_play_four_part_conversation( level.four_part_convos["during_1_oh_shit"] ); + + level waittill( "end_of_round" ); + + wait 5; + vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit_" + randomintrange( 1, 3 )] ); + wait 4; + vo_play_four_part_conversation( level.four_part_convos["start_3_oh_shit"] ); + + level waittill( "end_of_round" ); + + wait 3; + + if ( get_players_touching( "zone_library" ) + get_players_touching( "zone_start" ) == 4 ) + vo_play_four_part_conversation( level.four_part_convos["start_2_oh_shit"] ); + + wait 1; } load_vo_alias_arrays() { - level.four_part_convos = []; - level.four_part_convos[ "intro_plr_1" ] = []; - level.four_part_convos[ "intro_plr_1" ][ 0 ] = "vox_plr_1_start_1_oh_shit1_0"; - level.four_part_convos[ "intro_plr_3" ] = []; - level.four_part_convos[ "intro_plr_3" ][ 0 ] = "vox_plr_3_chair2_var6_0"; - level.four_part_convos[ "intro_plr_3" ][ 1 ] = "vox_plr_3_chair2_var7_0"; - level.four_part_convos[ "intro_plr_3" ][ 2 ] = "vox_plr_3_chair2_var8_0"; - level.four_part_convos[ "start_1_oh_shit_1" ] = []; - level.four_part_convos[ "start_1_oh_shit_1" ][ 0 ] = "vox_plr_1_start_1_oh_shit4_0"; - level.four_part_convos[ "start_1_oh_shit_1" ][ 1 ] = "vox_plr_2_start_1_oh_shit5_0"; - level.four_part_convos[ "start_1_oh_shit_1" ][ 2 ] = "vox_plr_0_start_1_oh_shit6_0"; - level.four_part_convos[ "start_1_oh_shit_1" ][ 3 ] = "vox_plr_3_start_1_oh_shit7_0"; - level.four_part_convos[ "start_1_oh_shit_2" ] = []; - level.four_part_convos[ "start_1_oh_shit_2" ][ 0 ] = "vox_plr_3_start_1_oh_shit8_0"; - level.four_part_convos[ "start_1_oh_shit_2" ][ 1 ] = "vox_plr_2_start_1_oh_shit9_0"; - level.four_part_convos[ "start_1_oh_shit_2" ][ 2 ] = "vox_plr_1_start_1_oh_shit10_0"; - level.four_part_convos[ "start_1_oh_shit_2" ][ 3 ] = "vox_plr_0_start_1_oh_shit11_0"; - level.four_part_convos[ "during_1_oh_shit" ] = []; - level.four_part_convos[ "during_1_oh_shit" ][ 0 ] = "vox_plr_0_during_1_oh_shit5_0"; - level.four_part_convos[ "during_1_oh_shit" ][ 1 ] = "vox_plr_3_during_1_oh_shit6_0"; - level.four_part_convos[ "during_1_oh_shit" ][ 2 ] = "vox_plr_1_during_1_oh_shit7_0"; - level.four_part_convos[ "during_1_oh_shit" ][ 3 ] = "vox_plr_2_during_1_oh_shit8_0"; - level.four_part_convos[ "start_2_oh_shit_1" ] = []; - level.four_part_convos[ "start_2_oh_shit_1" ][ 0 ] = "vox_plr_3_start_2_oh_shit12_0"; - level.four_part_convos[ "start_2_oh_shit_1" ][ 1 ] = "vox_plr_0_start_2_oh_shit13_0"; - level.four_part_convos[ "start_2_oh_shit_1" ][ 2 ] = "vox_plr_2_start_2_oh_shit14_0"; - level.four_part_convos[ "start_2_oh_shit_1" ][ 3 ] = "vox_plr_1_start_2_oh_shit15_0"; - level.four_part_convos[ "start_2_oh_shit_2" ] = []; - level.four_part_convos[ "start_2_oh_shit_2" ][ 0 ] = "vox_plr_0_start_2_oh_shit16_0"; - level.four_part_convos[ "start_2_oh_shit_2" ][ 1 ] = "vox_plr_2_start_2_oh_shit17_0"; - level.four_part_convos[ "start_2_oh_shit_2" ][ 2 ] = "vox_plr_3_start_2_oh_shit18_0"; - level.four_part_convos[ "start_2_oh_shit_2" ][ 3 ] = "vox_plr_1_start_2_oh_shit19_0"; - level.four_part_convos[ "start_3_oh_shit" ] = []; - level.four_part_convos[ "start_3_oh_shit" ][ 0 ] = "vox_plr_3_start_3_oh_shit13_0"; - level.four_part_convos[ "start_3_oh_shit" ][ 1 ] = "vox_plr_2_start_3_oh_shit14_0"; - level.four_part_convos[ "start_3_oh_shit" ][ 2 ] = "vox_plr_1_start_3_oh_shit15_0"; - level.four_part_convos[ "start_3_oh_shit" ][ 3 ] = "vox_plr_0_start_3_oh_shit16_0"; - level.four_part_convos[ "start_2_oh_shit" ] = []; - level.four_part_convos[ "start_2_oh_shit" ][ 0 ] = "vox_plr_1_start_2_oh_shit9_0"; - level.four_part_convos[ "start_2_oh_shit" ][ 1 ] = "vox_plr_0_start_2_oh_shit10_0"; - level.four_part_convos[ "start_2_oh_shit" ][ 2 ] = "vox_plr_1_start_2_oh_shit11_0"; - level.four_part_convos[ "start_2_oh_shit" ][ 3 ] = "vox_plr_2_start_2_oh_shit12_0"; - level.four_part_convos[ "chair1" ] = []; - level.four_part_convos[ "chair1" ][ 0 ] = "vox_plr_1_chair1_var1_0"; - level.four_part_convos[ "chair1" ][ 1 ] = "vox_plr_2_chair1_var2_0"; - level.four_part_convos[ "chair1" ][ 2 ] = "vox_plr_3_chair1_var3_0"; - level.four_part_convos[ "chair1" ][ 3 ] = "vox_plr_1_chair1_var4_0"; - level.four_part_convos[ "chair1" ][ 4 ] = "vox_plr_3_chair1_var5_0"; - level.four_part_convos[ "chair2" ] = []; - level.four_part_convos[ "chair2" ][ 0 ] = "vox_plr_2_chair2_var1_0"; - level.four_part_convos[ "chair2" ][ 1 ] = "vox_plr_3_chair2_var2_0"; - level.four_part_convos[ "chair2" ][ 1 ] = "vox_plr_0_chair2_var3_0"; - level.four_part_convos[ "chair2" ][ 2 ] = "vox_plr_3_chair2_var5_0"; - level.four_part_convos[ "chair2" ][ 3 ] = "vox_plr_1_chair2_var4_0"; - level.four_part_convos[ "chair_combat_1" ] = []; - level.four_part_convos[ "chair_combat_1" ][ 0 ] = "vox_plr_3_chair3_var_3_0"; - level.four_part_convos[ "chair_combat_1" ][ 1 ] = "vox_plr_1_chair3_var_3_0"; - level.four_part_convos[ "chair_combat_1" ][ 2 ] = "vox_plr_2_chair3_var_3_0"; - level.four_part_convos[ "chair_combat_1" ][ 3 ] = "vox_plr_0_chair3_var_3_0"; - level.four_part_convos[ "chair_combat_2" ] = []; - level.four_part_convos[ "chair_combat_2" ][ 0 ] = "vox_plr_0_chair4_var_4_0"; - level.four_part_convos[ "chair_combat_2" ][ 1 ] = "vox_plr_3_chair4_var_4_0"; - level.four_part_convos[ "chair_combat_2" ][ 2 ] = "vox_plr_2_chair4_var_4_0"; - level.four_part_convos[ "chair_combat_2" ][ 3 ] = "vox_plr_1_chair4_var_4_0"; - level.four_part_convos[ "chair_combat_2" ][ 4 ] = "vox_plr_3_chair4_var_4_1"; - level.four_part_convos[ "bridge_visit1_alt1" ] = []; - level.four_part_convos[ "bridge_visit1_alt1" ][ 0 ] = "vox_plr_3_bridge_var1_1_0"; - level.four_part_convos[ "bridge_visit1_alt1" ][ 1 ] = "vox_plr_2_bridge_var1_2_0"; - level.four_part_convos[ "bridge_visit1_alt1" ][ 2 ] = "vox_plr_0_bridge_var1_3_0"; - level.four_part_convos[ "bridge_visit1_alt1" ][ 3 ] = "vox_plr_1_bridge_var1_4_0"; - level.four_part_convos[ "bridge_visit1_alt2" ] = []; - level.four_part_convos[ "bridge_visit1_alt2" ][ 0 ] = "vox_plr_1_bridge_var2_1_0"; - level.four_part_convos[ "bridge_visit1_alt2" ][ 1 ] = "vox_plr_0_bridge_var2_2_0"; - level.four_part_convos[ "bridge_visit1_alt2" ][ 2 ] = "vox_plr_1_bridge_var2_3_0"; - level.four_part_convos[ "bridge_visit1_alt2" ][ 3 ] = "vox_plr_2_bridge_var2_4_0"; - level.four_part_convos[ "bridge_visit1_alt2" ][ 4 ] = "vox_plr_3_bridge_var2_5_0"; - level.four_part_convos[ "bridge_visit1_alt3" ] = []; - level.four_part_convos[ "bridge_visit1_alt3" ][ 0 ] = "vox_plr_0_bridge_var2_6_0"; - level.four_part_convos[ "bridge_visit1_alt3" ][ 1 ] = "vox_plr_2_bridge_var2_7_0"; - level.four_part_convos[ "bridge_visit1_alt3" ][ 2 ] = "vox_plr_3_bridge_var2_8_0"; - level.four_part_convos[ "bridge_visit1_alt3" ][ 3 ] = "vox_plr_1_bridge_var2_9_0"; - level.four_part_convos[ "bridge_visit1_alt4" ] = []; - level.four_part_convos[ "bridge_visit1_alt4" ][ 0 ] = "vox_plr_1_bridge_var2_10_0"; - level.four_part_convos[ "bridge_visit1_alt4" ][ 1 ] = "vox_plr_2_bridge_var2_11_0"; - level.four_part_convos[ "bridge_visit1_alt4" ][ 2 ] = "vox_plr_0_bridge_var2_12_0"; - level.four_part_convos[ "bridge_visit1_alt4" ][ 3 ] = "vox_plr_3_bridge_var2_13_0"; - level.four_part_convos[ "bridge_visit2_alt1" ] = []; - level.four_part_convos[ "bridge_visit2_alt1" ][ 0 ] = "vox_plr_0_bridge_var5_1_0"; - level.four_part_convos[ "bridge_visit2_alt1" ][ 1 ] = "vox_plr_3_bridge_var5_2_0"; - level.four_part_convos[ "bridge_visit2_alt1" ][ 2 ] = "vox_plr_0_bridge_var5_3_0"; - level.four_part_convos[ "bridge_visit2_alt1" ][ 3 ] = "vox_plr_3_bridge_var6_1_0"; - level.four_part_convos[ "bridge_visit2_alt1" ][ 4 ] = "vox_plr_2_bridge_var5_5_0"; - level.four_part_convos[ "bridge_visit2_alt1" ][ 5 ] = "vox_plr_3_bridge_var5_4_0"; - level.four_part_convos[ "bridge_visit2_alt2" ] = []; - level.four_part_convos[ "bridge_visit2_alt2" ][ 0 ] = "vox_plr_3_bridge_var6_3_0"; - level.four_part_convos[ "bridge_visit2_alt2" ][ 1 ] = "vox_plr_1_bridge_var6_4_0"; - level.four_part_convos[ "bridge_visit2_alt2" ][ 2 ] = "vox_plr_3_bridge_var6_5_0"; - level.four_part_convos[ "bridge_visit2_alt2" ][ 3 ] = "vox_plr_2_bridge_var6_2_0"; - level.four_part_convos[ "bridge_visit2_alt2" ][ 4 ] = "vox_plr_3_bridge_var6_6_0"; - level.four_part_convos[ "bridge_visit2_alt2" ][ 5 ] = "vox_plr_0_bridge_var6_7_0"; - level.four_part_convos[ "bridge_visit2_alt3" ] = []; - level.four_part_convos[ "bridge_visit2_alt3" ][ 0 ] = "vox_plr_3_bridge_var6_8_0"; - level.four_part_convos[ "bridge_visit2_alt3" ][ 1 ] = "vox_plr_2_bridge_var6_9_0"; - level.four_part_convos[ "bridge_visit2_alt3" ][ 2 ] = "vox_plr_3_bridge_var6_10_0"; - level.four_part_convos[ "bridge_visit2_alt3" ][ 3 ] = "vox_plr_2_bridge_var6_11_0"; - level.four_part_convos[ "bridge_visit2_alt3" ][ 3 ] = "vox_plr_3_bridge_var6_12_0"; - level.four_part_convos[ "bridge_visit2_alt4" ] = []; - level.four_part_convos[ "bridge_visit2_alt4" ][ 0 ] = "vox_plr_0_bridge_var6_13_0"; - level.four_part_convos[ "bridge_visit2_alt4" ][ 1 ] = "vox_plr_2_bridge_var6_14_0"; - level.four_part_convos[ "bridge_visit2_alt4" ][ 2 ] = "vox_plr_1_bridge_var6_15_0"; - level.four_part_convos[ "bridge_visit2_alt4" ][ 3 ] = "vox_plr_3_bridge_var6_16_0"; - level.four_part_convos[ "alcatraz_return_alt1" ] = []; - level.four_part_convos[ "alcatraz_return_alt1" ][ 0 ] = "vox_plr_0_start_2_4_player_0"; - level.four_part_convos[ "alcatraz_return_alt1" ][ 1 ] = "vox_plr_3_start_2_4_player_0"; - level.four_part_convos[ "alcatraz_return_alt1" ][ 2 ] = "vox_plr_2_start_2_4_player_0"; - level.four_part_convos[ "alcatraz_return_alt1" ][ 3 ] = "vox_plr_1_start_2_4_player_0"; - level.four_part_convos[ "alcatraz_return_alt2" ] = []; - level.four_part_convos[ "alcatraz_return_alt2" ][ 0 ] = "vox_plr_2_start_2_4_player_1"; - level.four_part_convos[ "alcatraz_return_alt2" ][ 1 ] = "vox_plr_3_start_2_4_player_1"; - level.four_part_convos[ "alcatraz_return_alt2" ][ 2 ] = "vox_plr_0_start_2_4_player_1"; - level.four_part_convos[ "alcatraz_return_alt2" ][ 3 ] = "vox_plr_1_start_2_4_player_1"; - level.four_part_convos[ "alcatraz_return_quest_reset" ] = []; - level.four_part_convos[ "alcatraz_return_quest_reset" ][ 0 ] = "vox_plr_3_start_2_2_3_players_0"; - level.four_part_convos[ "alcatraz_return_quest_reset" ][ 1 ] = "vox_plr_1_start_2_2_3_players_0"; - level.four_part_convos[ "alcatraz_return_quest_reset" ][ 2 ] = "vox_plr_2_start_2_2_3_players_0"; - level.four_part_convos[ "alcatraz_return_quest_reset" ][ 3 ] = "vox_plr_0_start_2_2_3_players_0"; - level.soliloquy_convos[ "solo_intro_Billy" ] = []; - level.soliloquy_convos[ "solo_intro_Billy" ][ 0 ] = "vox_plr_2_start_1_billy_0"; - level.soliloquy_convos[ "solo_intro_Billy" ][ 1 ] = "vox_plr_2_start_1_billy_1"; - level.soliloquy_convos[ "solo_intro_Billy" ][ 2 ] = "vox_plr_2_start_1_billy_2"; - level.soliloquy_convos[ "solo_intro_Sal" ] = []; - level.soliloquy_convos[ "solo_intro_Sal" ][ 0 ] = "vox_plr_1_start_1_sal_0"; - level.soliloquy_convos[ "solo_intro_Sal" ][ 1 ] = "vox_plr_1_start_1_sal_1"; - level.soliloquy_convos[ "solo_intro_Sal" ][ 2 ] = "vox_plr_1_start_1_sal_2"; - level.soliloquy_convos[ "solo_intro_Finn" ] = []; - level.soliloquy_convos[ "solo_intro_Finn" ][ 0 ] = "vox_plr_0_start_1_finn_0"; - level.soliloquy_convos[ "solo_intro_Finn" ][ 1 ] = "vox_plr_0_start_1_finn_1"; - level.soliloquy_convos[ "solo_intro_Finn" ][ 2 ] = "vox_plr_0_start_1_finn_2"; - level.soliloquy_convos[ "solo_intro_Arlington" ] = []; - level.soliloquy_convos[ "solo_intro_Arlington" ][ 0 ] = "vox_plr_3_start_1_arlington_0"; - level.soliloquy_convos[ "solo_intro_Arlington" ][ 1 ] = "vox_plr_3_start_1_arlington_1"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 0 ] = "vox_plr_1_purgatory_sal_var1_0"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 1 ] = "vox_plr_1_purgatory_sal_var1_1"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 2 ] = "vox_plr_1_purgatory_sal_var1_2"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 3 ] = "vox_plr_1_purgatory_sal_var1_3"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt1" ][ 4 ] = "vox_plr_1_purgatory_sal_var1_4"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 0 ] = "vox_plr_1_purgatory_sal_var2_0"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 1 ] = "vox_plr_1_purgatory_sal_var2_1"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 2 ] = "vox_plr_1_purgatory_sal_var2_2"; - level.soliloquy_convos[ "purgatory_Sal_visit1_alt2" ][ 3 ] = "vox_plr_1_purgatory_sal_var2_3"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 0 ] = "vox_plr_1_purgatory_sal_var3_0"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 1 ] = "vox_plr_1_purgatory_sal_var3_1"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 2 ] = "vox_plr_1_purgatory_sal_var3_2"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 3 ] = "vox_plr_1_purgatory_sal_var3_3"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt1" ][ 4 ] = "vox_plr_1_purgatory_sal_var3_4"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 0 ] = "vox_plr_1_purgatory_sal_var4_0"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 1 ] = "vox_plr_1_purgatory_sal_var4_1"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 2 ] = "vox_plr_1_purgatory_sal_var4_3"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 3 ] = "vox_plr_1_purgatory_sal_var4_4"; - level.soliloquy_convos[ "purgatory_Sal_visit2_alt2" ][ 4 ] = "vox_plr_1_purgatory_sal_var4_5"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 0 ] = "vox_plr_2_purgatory_billy_var1_0"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 1 ] = "vox_plr_2_purgatory_billy_var1_1"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt1" ][ 2 ] = "vox_plr_2_purgatory_billy_var1_2"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 0 ] = "vox_plr_2_purgatory_billy_var2_0"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 1 ] = "vox_plr_2_purgatory_billy_var2_1"; - level.soliloquy_convos[ "purgatory_Billy_visit1_alt2" ][ 2 ] = "vox_plr_2_purgatory_billy_var2_2"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 0 ] = "vox_plr_2_purgatory_billy_var3_0"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 1 ] = "vox_plr_2_purgatory_billy_var3_1"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 2 ] = "vox_plr_2_purgatory_billy_var3_2"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt1" ][ 3 ] = "vox_plr_2_purgatory_billy_var3_3"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 0 ] = "vox_plr_2_purgatory_billy_var4_0"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 1 ] = "vox_plr_2_purgatory_billy_var4_1"; - level.soliloquy_convos[ "purgatory_Billy_visit2_alt2" ][ 2 ] = "vox_plr_2_purgatory_billy_var4_2"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 0 ] = "vox_plr_0_purgatory_finn_var1_0"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 1 ] = "vox_plr_0_purgatory_finn_var1_1"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 2 ] = "vox_plr_0_purgatory_finn_var1_2"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt1" ][ 3 ] = "vox_plr_0_purgatory_finn_var1_3"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 0 ] = "vox_plr_0_purgatory_finn_var2_0"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 1 ] = "vox_plr_0_purgatory_finn_var2_1"; - level.soliloquy_convos[ "purgatory_Finn_visit1_alt2" ][ 2 ] = "vox_plr_0_purgatory_finn_var2_2"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 0 ] = "vox_plr_0_purgatory_finn_var3_0"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 1 ] = "vox_plr_0_purgatory_finn_var3_1"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt1" ][ 2 ] = "vox_plr_0_purgatory_finn_var3_2"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 0 ] = "vox_plr_0_purgatory_finn_var4_0"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 1 ] = "vox_plr_0_purgatory_finn_var4_1"; - level.soliloquy_convos[ "purgatory_Finn_visit2_alt2" ][ 2 ] = "vox_plr_0_purgatory_finn_var4_2"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 0 ] = "vox_plr_3_purgatory_arlington_var1_0"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 1 ] = "vox_plr_3_purgatory_arlington_var1_1"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt1" ][ 2 ] = "vox_plr_3_purgatory_arlington_var1_2"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 0 ] = "vox_plr_3_purgatory_arlington_var2_0"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 1 ] = "vox_plr_3_purgatory_arlington_var2_1"; - level.soliloquy_convos[ "purgatory_Arlington_visit1_alt2" ][ 2 ] = "vox_plr_3_purgatory_arlington_var2_2"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ] = []; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 0 ] = "vox_plr_3_purgatory_arlington_var3_0"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 1 ] = "vox_plr_3_purgatory_arlington_var3_1"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt1" ][ 2 ] = "vox_plr_3_purgatory_arlington_var3_2"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ] = []; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 0 ] = "vox_plr_3_purgatory_arlington_var4_0"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 1 ] = "vox_plr_3_purgatory_arlington_var4_1"; - level.soliloquy_convos[ "purgatory_Arlington_visit2_alt2" ][ 2 ] = "vox_plr_3_purgatory_arlington_var4_2"; - level.soliloquy_convos[ "electric_chair_Finn" ] = []; - level.soliloquy_convos[ "electric_chair_Finn" ][ 0 ] = "vox_plr_0_chair4_var_4_0"; - level.soliloquy_convos[ "electric_chair_Sal" ] = []; - level.soliloquy_convos[ "electric_chair_Sal" ][ 0 ] = "vox_plr_1_chair1_var1_0"; - level.soliloquy_convos[ "electric_chair_Billy" ] = []; - level.soliloquy_convos[ "electric_chair_Billy" ][ 0 ] = "vox_plr_2_chair1_var2_0"; - level.soliloquy_convos[ "electric_chair_Arlington" ] = []; - level.soliloquy_convos[ "electric_chair_Arlington" ][ 0 ] = "vox_plr_3_chair3_var_3_0"; + level.four_part_convos = []; + level.four_part_convos["intro_plr_1"] = []; + level.four_part_convos["intro_plr_1"][0] = "vox_plr_1_start_1_oh_shit1_0"; + level.four_part_convos["intro_plr_3"] = []; + level.four_part_convos["intro_plr_3"][0] = "vox_plr_3_chair2_var6_0"; + level.four_part_convos["intro_plr_3"][1] = "vox_plr_3_chair2_var7_0"; + level.four_part_convos["intro_plr_3"][2] = "vox_plr_3_chair2_var8_0"; + level.four_part_convos["start_1_oh_shit_1"] = []; + level.four_part_convos["start_1_oh_shit_1"][0] = "vox_plr_1_start_1_oh_shit4_0"; + level.four_part_convos["start_1_oh_shit_1"][1] = "vox_plr_2_start_1_oh_shit5_0"; + level.four_part_convos["start_1_oh_shit_1"][2] = "vox_plr_0_start_1_oh_shit6_0"; + level.four_part_convos["start_1_oh_shit_1"][3] = "vox_plr_3_start_1_oh_shit7_0"; + level.four_part_convos["start_1_oh_shit_2"] = []; + level.four_part_convos["start_1_oh_shit_2"][0] = "vox_plr_3_start_1_oh_shit8_0"; + level.four_part_convos["start_1_oh_shit_2"][1] = "vox_plr_2_start_1_oh_shit9_0"; + level.four_part_convos["start_1_oh_shit_2"][2] = "vox_plr_1_start_1_oh_shit10_0"; + level.four_part_convos["start_1_oh_shit_2"][3] = "vox_plr_0_start_1_oh_shit11_0"; + level.four_part_convos["during_1_oh_shit"] = []; + level.four_part_convos["during_1_oh_shit"][0] = "vox_plr_0_during_1_oh_shit5_0"; + level.four_part_convos["during_1_oh_shit"][1] = "vox_plr_3_during_1_oh_shit6_0"; + level.four_part_convos["during_1_oh_shit"][2] = "vox_plr_1_during_1_oh_shit7_0"; + level.four_part_convos["during_1_oh_shit"][3] = "vox_plr_2_during_1_oh_shit8_0"; + level.four_part_convos["start_2_oh_shit_1"] = []; + level.four_part_convos["start_2_oh_shit_1"][0] = "vox_plr_3_start_2_oh_shit12_0"; + level.four_part_convos["start_2_oh_shit_1"][1] = "vox_plr_0_start_2_oh_shit13_0"; + level.four_part_convos["start_2_oh_shit_1"][2] = "vox_plr_2_start_2_oh_shit14_0"; + level.four_part_convos["start_2_oh_shit_1"][3] = "vox_plr_1_start_2_oh_shit15_0"; + level.four_part_convos["start_2_oh_shit_2"] = []; + level.four_part_convos["start_2_oh_shit_2"][0] = "vox_plr_0_start_2_oh_shit16_0"; + level.four_part_convos["start_2_oh_shit_2"][1] = "vox_plr_2_start_2_oh_shit17_0"; + level.four_part_convos["start_2_oh_shit_2"][2] = "vox_plr_3_start_2_oh_shit18_0"; + level.four_part_convos["start_2_oh_shit_2"][3] = "vox_plr_1_start_2_oh_shit19_0"; + level.four_part_convos["start_3_oh_shit"] = []; + level.four_part_convos["start_3_oh_shit"][0] = "vox_plr_3_start_3_oh_shit13_0"; + level.four_part_convos["start_3_oh_shit"][1] = "vox_plr_2_start_3_oh_shit14_0"; + level.four_part_convos["start_3_oh_shit"][2] = "vox_plr_1_start_3_oh_shit15_0"; + level.four_part_convos["start_3_oh_shit"][3] = "vox_plr_0_start_3_oh_shit16_0"; + level.four_part_convos["start_2_oh_shit"] = []; + level.four_part_convos["start_2_oh_shit"][0] = "vox_plr_1_start_2_oh_shit9_0"; + level.four_part_convos["start_2_oh_shit"][1] = "vox_plr_0_start_2_oh_shit10_0"; + level.four_part_convos["start_2_oh_shit"][2] = "vox_plr_1_start_2_oh_shit11_0"; + level.four_part_convos["start_2_oh_shit"][3] = "vox_plr_2_start_2_oh_shit12_0"; + level.four_part_convos["chair1"] = []; + level.four_part_convos["chair1"][0] = "vox_plr_1_chair1_var1_0"; + level.four_part_convos["chair1"][1] = "vox_plr_2_chair1_var2_0"; + level.four_part_convos["chair1"][2] = "vox_plr_3_chair1_var3_0"; + level.four_part_convos["chair1"][3] = "vox_plr_1_chair1_var4_0"; + level.four_part_convos["chair1"][4] = "vox_plr_3_chair1_var5_0"; + level.four_part_convos["chair2"] = []; + level.four_part_convos["chair2"][0] = "vox_plr_2_chair2_var1_0"; + level.four_part_convos["chair2"][1] = "vox_plr_3_chair2_var2_0"; + level.four_part_convos["chair2"][1] = "vox_plr_0_chair2_var3_0"; + level.four_part_convos["chair2"][2] = "vox_plr_3_chair2_var5_0"; + level.four_part_convos["chair2"][3] = "vox_plr_1_chair2_var4_0"; + level.four_part_convos["chair_combat_1"] = []; + level.four_part_convos["chair_combat_1"][0] = "vox_plr_3_chair3_var_3_0"; + level.four_part_convos["chair_combat_1"][1] = "vox_plr_1_chair3_var_3_0"; + level.four_part_convos["chair_combat_1"][2] = "vox_plr_2_chair3_var_3_0"; + level.four_part_convos["chair_combat_1"][3] = "vox_plr_0_chair3_var_3_0"; + level.four_part_convos["chair_combat_2"] = []; + level.four_part_convos["chair_combat_2"][0] = "vox_plr_0_chair4_var_4_0"; + level.four_part_convos["chair_combat_2"][1] = "vox_plr_3_chair4_var_4_0"; + level.four_part_convos["chair_combat_2"][2] = "vox_plr_2_chair4_var_4_0"; + level.four_part_convos["chair_combat_2"][3] = "vox_plr_1_chair4_var_4_0"; + level.four_part_convos["chair_combat_2"][4] = "vox_plr_3_chair4_var_4_1"; + level.four_part_convos["bridge_visit1_alt1"] = []; + level.four_part_convos["bridge_visit1_alt1"][0] = "vox_plr_3_bridge_var1_1_0"; + level.four_part_convos["bridge_visit1_alt1"][1] = "vox_plr_2_bridge_var1_2_0"; + level.four_part_convos["bridge_visit1_alt1"][2] = "vox_plr_0_bridge_var1_3_0"; + level.four_part_convos["bridge_visit1_alt1"][3] = "vox_plr_1_bridge_var1_4_0"; + level.four_part_convos["bridge_visit1_alt2"] = []; + level.four_part_convos["bridge_visit1_alt2"][0] = "vox_plr_1_bridge_var2_1_0"; + level.four_part_convos["bridge_visit1_alt2"][1] = "vox_plr_0_bridge_var2_2_0"; + level.four_part_convos["bridge_visit1_alt2"][2] = "vox_plr_1_bridge_var2_3_0"; + level.four_part_convos["bridge_visit1_alt2"][3] = "vox_plr_2_bridge_var2_4_0"; + level.four_part_convos["bridge_visit1_alt2"][4] = "vox_plr_3_bridge_var2_5_0"; + level.four_part_convos["bridge_visit1_alt3"] = []; + level.four_part_convos["bridge_visit1_alt3"][0] = "vox_plr_0_bridge_var2_6_0"; + level.four_part_convos["bridge_visit1_alt3"][1] = "vox_plr_2_bridge_var2_7_0"; + level.four_part_convos["bridge_visit1_alt3"][2] = "vox_plr_3_bridge_var2_8_0"; + level.four_part_convos["bridge_visit1_alt3"][3] = "vox_plr_1_bridge_var2_9_0"; + level.four_part_convos["bridge_visit1_alt4"] = []; + level.four_part_convos["bridge_visit1_alt4"][0] = "vox_plr_1_bridge_var2_10_0"; + level.four_part_convos["bridge_visit1_alt4"][1] = "vox_plr_2_bridge_var2_11_0"; + level.four_part_convos["bridge_visit1_alt4"][2] = "vox_plr_0_bridge_var2_12_0"; + level.four_part_convos["bridge_visit1_alt4"][3] = "vox_plr_3_bridge_var2_13_0"; + level.four_part_convos["bridge_visit2_alt1"] = []; + level.four_part_convos["bridge_visit2_alt1"][0] = "vox_plr_0_bridge_var5_1_0"; + level.four_part_convos["bridge_visit2_alt1"][1] = "vox_plr_3_bridge_var5_2_0"; + level.four_part_convos["bridge_visit2_alt1"][2] = "vox_plr_0_bridge_var5_3_0"; + level.four_part_convos["bridge_visit2_alt1"][3] = "vox_plr_3_bridge_var6_1_0"; + level.four_part_convos["bridge_visit2_alt1"][4] = "vox_plr_2_bridge_var5_5_0"; + level.four_part_convos["bridge_visit2_alt1"][5] = "vox_plr_3_bridge_var5_4_0"; + level.four_part_convos["bridge_visit2_alt2"] = []; + level.four_part_convos["bridge_visit2_alt2"][0] = "vox_plr_3_bridge_var6_3_0"; + level.four_part_convos["bridge_visit2_alt2"][1] = "vox_plr_1_bridge_var6_4_0"; + level.four_part_convos["bridge_visit2_alt2"][2] = "vox_plr_3_bridge_var6_5_0"; + level.four_part_convos["bridge_visit2_alt2"][3] = "vox_plr_2_bridge_var6_2_0"; + level.four_part_convos["bridge_visit2_alt2"][4] = "vox_plr_3_bridge_var6_6_0"; + level.four_part_convos["bridge_visit2_alt2"][5] = "vox_plr_0_bridge_var6_7_0"; + level.four_part_convos["bridge_visit2_alt3"] = []; + level.four_part_convos["bridge_visit2_alt3"][0] = "vox_plr_3_bridge_var6_8_0"; + level.four_part_convos["bridge_visit2_alt3"][1] = "vox_plr_2_bridge_var6_9_0"; + level.four_part_convos["bridge_visit2_alt3"][2] = "vox_plr_3_bridge_var6_10_0"; + level.four_part_convos["bridge_visit2_alt3"][3] = "vox_plr_2_bridge_var6_11_0"; + level.four_part_convos["bridge_visit2_alt3"][3] = "vox_plr_3_bridge_var6_12_0"; + level.four_part_convos["bridge_visit2_alt4"] = []; + level.four_part_convos["bridge_visit2_alt4"][0] = "vox_plr_0_bridge_var6_13_0"; + level.four_part_convos["bridge_visit2_alt4"][1] = "vox_plr_2_bridge_var6_14_0"; + level.four_part_convos["bridge_visit2_alt4"][2] = "vox_plr_1_bridge_var6_15_0"; + level.four_part_convos["bridge_visit2_alt4"][3] = "vox_plr_3_bridge_var6_16_0"; + level.four_part_convos["alcatraz_return_alt1"] = []; + level.four_part_convos["alcatraz_return_alt1"][0] = "vox_plr_0_start_2_4_player_0"; + level.four_part_convos["alcatraz_return_alt1"][1] = "vox_plr_3_start_2_4_player_0"; + level.four_part_convos["alcatraz_return_alt1"][2] = "vox_plr_2_start_2_4_player_0"; + level.four_part_convos["alcatraz_return_alt1"][3] = "vox_plr_1_start_2_4_player_0"; + level.four_part_convos["alcatraz_return_alt2"] = []; + level.four_part_convos["alcatraz_return_alt2"][0] = "vox_plr_2_start_2_4_player_1"; + level.four_part_convos["alcatraz_return_alt2"][1] = "vox_plr_3_start_2_4_player_1"; + level.four_part_convos["alcatraz_return_alt2"][2] = "vox_plr_0_start_2_4_player_1"; + level.four_part_convos["alcatraz_return_alt2"][3] = "vox_plr_1_start_2_4_player_1"; + level.four_part_convos["alcatraz_return_quest_reset"] = []; + level.four_part_convos["alcatraz_return_quest_reset"][0] = "vox_plr_3_start_2_2_3_players_0"; + level.four_part_convos["alcatraz_return_quest_reset"][1] = "vox_plr_1_start_2_2_3_players_0"; + level.four_part_convos["alcatraz_return_quest_reset"][2] = "vox_plr_2_start_2_2_3_players_0"; + level.four_part_convos["alcatraz_return_quest_reset"][3] = "vox_plr_0_start_2_2_3_players_0"; + level.soliloquy_convos["solo_intro_Billy"] = []; + level.soliloquy_convos["solo_intro_Billy"][0] = "vox_plr_2_start_1_billy_0"; + level.soliloquy_convos["solo_intro_Billy"][1] = "vox_plr_2_start_1_billy_1"; + level.soliloquy_convos["solo_intro_Billy"][2] = "vox_plr_2_start_1_billy_2"; + level.soliloquy_convos["solo_intro_Sal"] = []; + level.soliloquy_convos["solo_intro_Sal"][0] = "vox_plr_1_start_1_sal_0"; + level.soliloquy_convos["solo_intro_Sal"][1] = "vox_plr_1_start_1_sal_1"; + level.soliloquy_convos["solo_intro_Sal"][2] = "vox_plr_1_start_1_sal_2"; + level.soliloquy_convos["solo_intro_Finn"] = []; + level.soliloquy_convos["solo_intro_Finn"][0] = "vox_plr_0_start_1_finn_0"; + level.soliloquy_convos["solo_intro_Finn"][1] = "vox_plr_0_start_1_finn_1"; + level.soliloquy_convos["solo_intro_Finn"][2] = "vox_plr_0_start_1_finn_2"; + level.soliloquy_convos["solo_intro_Arlington"] = []; + level.soliloquy_convos["solo_intro_Arlington"][0] = "vox_plr_3_start_1_arlington_0"; + level.soliloquy_convos["solo_intro_Arlington"][1] = "vox_plr_3_start_1_arlington_1"; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"] = []; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"][0] = "vox_plr_1_purgatory_sal_var1_0"; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"][1] = "vox_plr_1_purgatory_sal_var1_1"; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"][2] = "vox_plr_1_purgatory_sal_var1_2"; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"][3] = "vox_plr_1_purgatory_sal_var1_3"; + level.soliloquy_convos["purgatory_Sal_visit1_alt1"][4] = "vox_plr_1_purgatory_sal_var1_4"; + level.soliloquy_convos["purgatory_Sal_visit1_alt2"] = []; + level.soliloquy_convos["purgatory_Sal_visit1_alt2"][0] = "vox_plr_1_purgatory_sal_var2_0"; + level.soliloquy_convos["purgatory_Sal_visit1_alt2"][1] = "vox_plr_1_purgatory_sal_var2_1"; + level.soliloquy_convos["purgatory_Sal_visit1_alt2"][2] = "vox_plr_1_purgatory_sal_var2_2"; + level.soliloquy_convos["purgatory_Sal_visit1_alt2"][3] = "vox_plr_1_purgatory_sal_var2_3"; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"] = []; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"][0] = "vox_plr_1_purgatory_sal_var3_0"; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"][1] = "vox_plr_1_purgatory_sal_var3_1"; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"][2] = "vox_plr_1_purgatory_sal_var3_2"; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"][3] = "vox_plr_1_purgatory_sal_var3_3"; + level.soliloquy_convos["purgatory_Sal_visit2_alt1"][4] = "vox_plr_1_purgatory_sal_var3_4"; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"] = []; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"][0] = "vox_plr_1_purgatory_sal_var4_0"; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"][1] = "vox_plr_1_purgatory_sal_var4_1"; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"][2] = "vox_plr_1_purgatory_sal_var4_3"; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"][3] = "vox_plr_1_purgatory_sal_var4_4"; + level.soliloquy_convos["purgatory_Sal_visit2_alt2"][4] = "vox_plr_1_purgatory_sal_var4_5"; + level.soliloquy_convos["purgatory_Billy_visit1_alt1"] = []; + level.soliloquy_convos["purgatory_Billy_visit1_alt1"][0] = "vox_plr_2_purgatory_billy_var1_0"; + level.soliloquy_convos["purgatory_Billy_visit1_alt1"][1] = "vox_plr_2_purgatory_billy_var1_1"; + level.soliloquy_convos["purgatory_Billy_visit1_alt1"][2] = "vox_plr_2_purgatory_billy_var1_2"; + level.soliloquy_convos["purgatory_Billy_visit1_alt2"] = []; + level.soliloquy_convos["purgatory_Billy_visit1_alt2"][0] = "vox_plr_2_purgatory_billy_var2_0"; + level.soliloquy_convos["purgatory_Billy_visit1_alt2"][1] = "vox_plr_2_purgatory_billy_var2_1"; + level.soliloquy_convos["purgatory_Billy_visit1_alt2"][2] = "vox_plr_2_purgatory_billy_var2_2"; + level.soliloquy_convos["purgatory_Billy_visit2_alt1"] = []; + level.soliloquy_convos["purgatory_Billy_visit2_alt1"][0] = "vox_plr_2_purgatory_billy_var3_0"; + level.soliloquy_convos["purgatory_Billy_visit2_alt1"][1] = "vox_plr_2_purgatory_billy_var3_1"; + level.soliloquy_convos["purgatory_Billy_visit2_alt1"][2] = "vox_plr_2_purgatory_billy_var3_2"; + level.soliloquy_convos["purgatory_Billy_visit2_alt1"][3] = "vox_plr_2_purgatory_billy_var3_3"; + level.soliloquy_convos["purgatory_Billy_visit2_alt2"] = []; + level.soliloquy_convos["purgatory_Billy_visit2_alt2"][0] = "vox_plr_2_purgatory_billy_var4_0"; + level.soliloquy_convos["purgatory_Billy_visit2_alt2"][1] = "vox_plr_2_purgatory_billy_var4_1"; + level.soliloquy_convos["purgatory_Billy_visit2_alt2"][2] = "vox_plr_2_purgatory_billy_var4_2"; + level.soliloquy_convos["purgatory_Finn_visit1_alt1"] = []; + level.soliloquy_convos["purgatory_Finn_visit1_alt1"][0] = "vox_plr_0_purgatory_finn_var1_0"; + level.soliloquy_convos["purgatory_Finn_visit1_alt1"][1] = "vox_plr_0_purgatory_finn_var1_1"; + level.soliloquy_convos["purgatory_Finn_visit1_alt1"][2] = "vox_plr_0_purgatory_finn_var1_2"; + level.soliloquy_convos["purgatory_Finn_visit1_alt1"][3] = "vox_plr_0_purgatory_finn_var1_3"; + level.soliloquy_convos["purgatory_Finn_visit1_alt2"] = []; + level.soliloquy_convos["purgatory_Finn_visit1_alt2"][0] = "vox_plr_0_purgatory_finn_var2_0"; + level.soliloquy_convos["purgatory_Finn_visit1_alt2"][1] = "vox_plr_0_purgatory_finn_var2_1"; + level.soliloquy_convos["purgatory_Finn_visit1_alt2"][2] = "vox_plr_0_purgatory_finn_var2_2"; + level.soliloquy_convos["purgatory_Finn_visit2_alt1"] = []; + level.soliloquy_convos["purgatory_Finn_visit2_alt1"][0] = "vox_plr_0_purgatory_finn_var3_0"; + level.soliloquy_convos["purgatory_Finn_visit2_alt1"][1] = "vox_plr_0_purgatory_finn_var3_1"; + level.soliloquy_convos["purgatory_Finn_visit2_alt1"][2] = "vox_plr_0_purgatory_finn_var3_2"; + level.soliloquy_convos["purgatory_Finn_visit2_alt2"] = []; + level.soliloquy_convos["purgatory_Finn_visit2_alt2"][0] = "vox_plr_0_purgatory_finn_var4_0"; + level.soliloquy_convos["purgatory_Finn_visit2_alt2"][1] = "vox_plr_0_purgatory_finn_var4_1"; + level.soliloquy_convos["purgatory_Finn_visit2_alt2"][2] = "vox_plr_0_purgatory_finn_var4_2"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt1"] = []; + level.soliloquy_convos["purgatory_Arlington_visit1_alt1"][0] = "vox_plr_3_purgatory_arlington_var1_0"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt1"][1] = "vox_plr_3_purgatory_arlington_var1_1"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt1"][2] = "vox_plr_3_purgatory_arlington_var1_2"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt2"] = []; + level.soliloquy_convos["purgatory_Arlington_visit1_alt2"][0] = "vox_plr_3_purgatory_arlington_var2_0"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt2"][1] = "vox_plr_3_purgatory_arlington_var2_1"; + level.soliloquy_convos["purgatory_Arlington_visit1_alt2"][2] = "vox_plr_3_purgatory_arlington_var2_2"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt1"] = []; + level.soliloquy_convos["purgatory_Arlington_visit2_alt1"][0] = "vox_plr_3_purgatory_arlington_var3_0"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt1"][1] = "vox_plr_3_purgatory_arlington_var3_1"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt1"][2] = "vox_plr_3_purgatory_arlington_var3_2"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt2"] = []; + level.soliloquy_convos["purgatory_Arlington_visit2_alt2"][0] = "vox_plr_3_purgatory_arlington_var4_0"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt2"][1] = "vox_plr_3_purgatory_arlington_var4_1"; + level.soliloquy_convos["purgatory_Arlington_visit2_alt2"][2] = "vox_plr_3_purgatory_arlington_var4_2"; + level.soliloquy_convos["electric_chair_Finn"] = []; + level.soliloquy_convos["electric_chair_Finn"][0] = "vox_plr_0_chair4_var_4_0"; + level.soliloquy_convos["electric_chair_Sal"] = []; + level.soliloquy_convos["electric_chair_Sal"][0] = "vox_plr_1_chair1_var1_0"; + level.soliloquy_convos["electric_chair_Billy"] = []; + level.soliloquy_convos["electric_chair_Billy"][0] = "vox_plr_2_chair1_var2_0"; + level.soliloquy_convos["electric_chair_Arlington"] = []; + level.soliloquy_convos["electric_chair_Arlington"][0] = "vox_plr_3_chair3_var_3_0"; } vo_bridge_soliloquy() { - if ( level.n_quest_iteration_count < 3 ) - { - convo = level.soliloquy_convos[ "purgatory_" + self.character_name + "_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 3 ) ]; - if ( isDefined( convo ) ) - { - self vo_play_soliloquy( convo ); - } - } + if ( level.n_quest_iteration_count < 3 ) + { + convo = level.soliloquy_convos["purgatory_" + self.character_name + "_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 3 )]; + + if ( isdefined( convo ) ) + self vo_play_soliloquy( convo ); + } } vo_bridge_four_part_convo() { - if ( level.n_quest_iteration_count < 3 ) - { - convo = level.four_part_convos[ "bridge_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 5 ) ]; - if ( isDefined( convo ) ) - { - vo_play_four_part_conversation( convo ); - } - } + if ( level.n_quest_iteration_count < 3 ) + { + convo = level.four_part_convos["bridge_visit" + level.n_quest_iteration_count + "_alt" + randomintrange( 1, 5 )]; + + if ( isdefined( convo ) ) + vo_play_four_part_conversation( convo ); + } } vo_play_soliloquy( convo ) { - self endon( "disconnect" ); - if ( !isDefined( convo ) ) - { - return; - } - if ( !flag( "story_vo_playing" ) ) - { - flag_set( "story_vo_playing" ); - self thread vo_play_soliloquy_disconnect_listener(); - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - i = 0; - while ( i < convo.size ) - { - if ( isDefined( self.afterlife ) && self.afterlife ) - { - self.dontspeak = 0; - self setclientfieldtoplayer( "isspeaking", 0 ); - flag_clear( "story_vo_playing" ); - self notify( "soliloquy_vo_done" ); - return; - } - else - { - self playsoundwithnotify( convo[ i ], "sound_done" + convo[ i ] ); - self waittill( "sound_done" + convo[ i ] ); - } - wait 1; - i++; - } - self.dontspeak = 0; - self setclientfieldtoplayer( "isspeaking", 0 ); - flag_clear( "story_vo_playing" ); - self notify( "soliloquy_vo_done" ); - } + self endon( "disconnect" ); + + if ( !isdefined( convo ) ) + return; + + if ( !flag( "story_vo_playing" ) ) + { + flag_set( "story_vo_playing" ); + self thread vo_play_soliloquy_disconnect_listener(); + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + + for ( i = 0; i < convo.size; i++ ) + { + if ( isdefined( self.afterlife ) && self.afterlife ) + { + self.dontspeak = 0; + self setclientfieldtoplayer( "isspeaking", 0 ); + flag_clear( "story_vo_playing" ); + self notify( "soliloquy_vo_done" ); + return; + } + else + { + self playsoundwithnotify( convo[i], "sound_done" + convo[i] ); + + self waittill( "sound_done" + convo[i] ); + } + + wait 1; + } + + self.dontspeak = 0; + self setclientfieldtoplayer( "isspeaking", 0 ); + flag_clear( "story_vo_playing" ); + self notify( "soliloquy_vo_done" ); + } } vo_play_soliloquy_disconnect_listener() { - self endon( "soliloquy_vo_done" ); - self waittill( "disconnect" ); - flag_clear( "story_vo_playing" ); + self endon( "soliloquy_vo_done" ); + + self waittill( "disconnect" ); + + flag_clear( "story_vo_playing" ); } vo_play_four_part_conversation( convo ) { - if ( !isDefined( convo ) ) - { - return; - } - players = getplayers(); - if ( players.size == 4 && !flag( "story_vo_playing" ) ) - { - flag_set( "story_vo_playing" ); - old_speaking_player = undefined; - speaking_player = undefined; - n_dist = 0; - n_max_reply_dist = 1500; - e_arlington = undefined; - e_sal = undefined; - e_billy = undefined; - e_finn = undefined; - _a513 = players; - _k513 = getFirstArrayKey( _a513 ); - while ( isDefined( _k513 ) ) - { - player = _a513[ _k513 ]; - if ( isDefined( player ) ) - { - switch( player.character_name ) - { - case "Arlington": - e_arlington = player; - break; - break; - case "Sal": - e_sal = player; - break; - break; - case "Billy": - e_billy = player; - break; - break; - case "Finn": - e_finn = player; - break; - break; - } - } - _k513 = getNextArrayKey( _a513, _k513 ); - } - if ( isDefined( e_arlington ) && isDefined( e_sal ) || !isDefined( e_billy ) && !isDefined( e_finn ) ) - { - return; - } - else _a542 = players; - _k542 = getFirstArrayKey( _a542 ); - while ( isDefined( _k542 ) ) - { - player = _a542[ _k542 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 1; - player setclientfieldtoplayer( "isspeaking", 1 ); - } - _k542 = getNextArrayKey( _a542, _k542 ); - } - i = 0; - while ( i < convo.size ) - { - players = getplayers(); - if ( players.size != 4 ) - { - _a557 = players; - _k557 = getFirstArrayKey( _a557 ); - while ( isDefined( _k557 ) ) - { - player = _a557[ _k557 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); - } - _k557 = getNextArrayKey( _a557, _k557 ); - } - flag_clear( "story_vo_playing" ); - return; - } - if ( issubstr( convo[ i ], "plr_0" ) ) - { - speaking_player = e_finn; - } - else if ( issubstr( convo[ i ], "plr_1" ) ) - { - speaking_player = e_sal; - } - else if ( issubstr( convo[ i ], "plr_2" ) ) - { - speaking_player = e_billy; - } - else - { - if ( issubstr( convo[ i ], "plr_3" ) ) - { - speaking_player = e_arlington; - } - } - if ( isDefined( old_speaking_player ) ) - { - n_dist = distance( old_speaking_player.origin, speaking_player.origin ); - } - if ( speaking_player.afterlife || n_dist > n_max_reply_dist ) - { - _a593 = players; - _k593 = getFirstArrayKey( _a593 ); - while ( isDefined( _k593 ) ) - { - player = _a593[ _k593 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); - } - _k593 = getNextArrayKey( _a593, _k593 ); - } - flag_clear( "story_vo_playing" ); - return; - } - else - { - speaking_player playsoundwithnotify( convo[ i ], "sound_done" + convo[ i ] ); - speaking_player waittill( "sound_done" + convo[ i ] ); - old_speaking_player = speaking_player; - } - wait 1; - i++; - } - _a613 = players; - _k613 = getFirstArrayKey( _a613 ); - while ( isDefined( _k613 ) ) - { - player = _a613[ _k613 ]; - if ( isDefined( player ) ) - { - player.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); - } - _k613 = getNextArrayKey( _a613, _k613 ); - } - flag_clear( "story_vo_playing" ); - } + if ( !isdefined( convo ) ) + return; + + players = getplayers(); + + if ( players.size == 4 && !flag( "story_vo_playing" ) ) + { + flag_set( "story_vo_playing" ); + old_speaking_player = undefined; + speaking_player = undefined; + n_dist = 0; + n_max_reply_dist = 1500; + e_arlington = undefined; + e_sal = undefined; + e_billy = undefined; + e_finn = undefined; + + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + switch ( player.character_name ) + { + case "Arlington": + e_arlington = player; + continue; + case "Sal": + e_sal = player; + continue; + case "Billy": + e_billy = player; + continue; + case "Finn": + e_finn = player; + continue; + } + } + } + + if ( !isdefined( e_arlington ) || !isdefined( e_sal ) || !isdefined( e_billy ) || !isdefined( e_finn ) ) + return; + else + { + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 1; + player setclientfieldtoplayer( "isspeaking", 1 ); + } + } + } + + for ( i = 0; i < convo.size; i++ ) + { + players = getplayers(); + + if ( players.size != 4 ) + { + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); + } + } + + flag_clear( "story_vo_playing" ); + return; + } + + if ( issubstr( convo[i], "plr_0" ) ) + speaking_player = e_finn; + else if ( issubstr( convo[i], "plr_1" ) ) + speaking_player = e_sal; + else if ( issubstr( convo[i], "plr_2" ) ) + speaking_player = e_billy; + else if ( issubstr( convo[i], "plr_3" ) ) + speaking_player = e_arlington; + + if ( isdefined( old_speaking_player ) ) + n_dist = distance( old_speaking_player.origin, speaking_player.origin ); + + if ( speaking_player.afterlife || n_dist > n_max_reply_dist ) + { + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); + } + } + + flag_clear( "story_vo_playing" ); + return; + } + else + { + speaking_player playsoundwithnotify( convo[i], "sound_done" + convo[i] ); + + speaking_player waittill( "sound_done" + convo[i] ); + + old_speaking_player = speaking_player; + } + + wait 1; + } + + foreach ( player in players ) + { + if ( isdefined( player ) ) + { + player.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); + } + } + + flag_clear( "story_vo_playing" ); + } } electric_chair_vo() { - if ( level.n_quest_iteration_count == 1 ) - { - e_nml_zone = getent( "zone_golden_gate_bridge", "targetname" ); - n_players_on_bridge_count = get_players_touching( "zone_golden_gate_bridge" ); - players = getplayers(); - if ( players.size == 4 && n_players_on_bridge_count == 4 ) - { - if ( count_zombies_in_zone( "zone_golden_gate_bridge" ) > 0 ) - { - vo_play_four_part_conversation( level.four_part_convos[ "chair_combat_" + randomintrange( 1, 3 ) ] ); - } - else - { - vo_play_four_part_conversation( level.four_part_convos[ "chair" + randomintrange( 1, 3 ) ] ); - } - return; - } - else - { - if ( isDefined( players[ 0 ] ) && players[ 0 ] istouching( e_nml_zone ) ) - { - character_name = players[ 0 ].character_name; - players[ 0 ] vo_play_soliloquy( level.soliloquy_convos[ "electric_chair_" + character_name ] ); - } - } - } + if ( level.n_quest_iteration_count == 1 ) + { + e_nml_zone = getent( "zone_golden_gate_bridge", "targetname" ); + n_players_on_bridge_count = get_players_touching( "zone_golden_gate_bridge" ); + players = getplayers(); + + if ( players.size == 4 && n_players_on_bridge_count == 4 ) + { + if ( count_zombies_in_zone( "zone_golden_gate_bridge" ) > 0 ) + vo_play_four_part_conversation( level.four_part_convos["chair_combat_" + randomintrange( 1, 3 )] ); + else + vo_play_four_part_conversation( level.four_part_convos["chair" + randomintrange( 1, 3 )] ); + } + else if ( isdefined( players[0] ) && players[0] istouching( e_nml_zone ) ) + { + character_name = players[0].character_name; + players[0] vo_play_soliloquy( level.soliloquy_convos["electric_chair_" + character_name] ); + } + } } escape_flight_vo() { - e_roof_zone = getent( "zone_roof", "targetname" ); - players = getplayers(); - player = players[ randomintrange( 0, players.size ) ]; - if ( isDefined( player ) && player istouching( e_roof_zone ) ) - { - player thread do_player_general_vox( "quest", "build_plane", undefined, 100 ); - } - flag_wait( "plane_boarded" ); - if ( level.final_flight_activated ) - { - return; - } - while ( level.characters_in_nml.size == 0 ) - { - wait 0,1; - } - wait 1; - while ( level.characters_in_nml.size > 0 ) - { - character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ]; - players = getplayers(); - _a687 = players; - _k687 = getFirstArrayKey( _a687 ); - while ( isDefined( _k687 ) ) - { - player = _a687[ _k687 ]; - if ( isDefined( player ) && player.character_name == character_name ) - { - player thread do_player_general_vox( "quest", "plane_takeoff" ); - } - _k687 = getNextArrayKey( _a687, _k687 ); - } - } - flag_wait( "plane_departed" ); - wait 2; - while ( level.characters_in_nml.size > 0 ) - { - character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ]; - players = getplayers(); - _a703 = players; - _k703 = getFirstArrayKey( _a703 ); - while ( isDefined( _k703 ) ) - { - player = _a703[ _k703 ]; - if ( isDefined( player ) && player.character_name == character_name ) - { - player playsound( "vox_plr_" + player.characterindex + "_plane_flight_0" ); - } - _k703 = getNextArrayKey( _a703, _k703 ); - } - } - flag_wait( "plane_approach_bridge" ); - wait 3,5; - while ( level.characters_in_nml.size > 0 ) - { - character_name = level.characters_in_nml[ randomintrange( 0, level.characters_in_nml.size ) ]; - players = getplayers(); - _a719 = players; - _k719 = getFirstArrayKey( _a719 ); - while ( isDefined( _k719 ) ) - { - player = _a719[ _k719 ]; - if ( isDefined( player ) && player.character_name == character_name ) - { - player playsound( "vox_plr_" + player.characterindex + "_plane_crash_0" ); - } - _k719 = getNextArrayKey( _a719, _k719 ); - } - } - flag_wait( "plane_zapped" ); - players = getplayers(); - _a732 = players; - _k732 = getFirstArrayKey( _a732 ); - while ( isDefined( _k732 ) ) - { - player = _a732[ _k732 ]; - if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player thread player_scream_thread(); - } - _k732 = getNextArrayKey( _a732, _k732 ); - } + e_roof_zone = getent( "zone_roof", "targetname" ); + players = getplayers(); + player = players[randomintrange( 0, players.size )]; + + if ( isdefined( player ) && player istouching( e_roof_zone ) ) + player thread do_player_general_vox( "quest", "build_plane", undefined, 100 ); + + flag_wait( "plane_boarded" ); + + if ( level.final_flight_activated ) + return; + + while ( level.characters_in_nml.size == 0 ) + wait 0.1; + + wait 1; + + if ( level.characters_in_nml.size > 0 ) + { + character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )]; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player.character_name == character_name ) + player thread do_player_general_vox( "quest", "plane_takeoff" ); + } + } + + flag_wait( "plane_departed" ); + wait 2; + + if ( level.characters_in_nml.size > 0 ) + { + character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )]; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player.character_name == character_name ) + player playsound( "vox_plr_" + player.characterindex + "_plane_flight_0" ); + } + } + + flag_wait( "plane_approach_bridge" ); + wait 3.5; + + if ( level.characters_in_nml.size > 0 ) + { + character_name = level.characters_in_nml[randomintrange( 0, level.characters_in_nml.size )]; + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && player.character_name == character_name ) + player playsound( "vox_plr_" + player.characterindex + "_plane_crash_0" ); + } + } + + flag_wait( "plane_zapped" ); + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && isinarray( level.characters_in_nml, player.character_name ) ) + player thread player_scream_thread(); + } } player_scream_thread() { - self endon( "death" ); - self endon( "disconnect" ); - players = getplayers(); - _a749 = players; - _k749 = getFirstArrayKey( _a749 ); - while ( isDefined( _k749 ) ) - { - player = _a749[ _k749 ]; - if ( isDefined( player ) && isinarray( level.characters_in_nml, player.character_name ) ) - { - player playsoundtoplayer( "vox_plr_" + player.characterindex + "_free_fall_0", self ); - } - _k749 = getNextArrayKey( _a749, _k749 ); - } - level flag_wait( "plane_crashed" ); - self stopsounds(); - self.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); + self endon( "death" ); + self endon( "disconnect" ); + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player ) && isinarray( level.characters_in_nml, player.character_name ) ) + player playsoundtoplayer( "vox_plr_" + player.characterindex + "_free_fall_0", self ); + } + + level flag_wait( "plane_crashed" ); + self stopsounds(); + self.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); } sndhitelectrifiedpulley( str_master_key_location ) { - self endon( "master_key_pulley_" + str_master_key_location ); - while ( 1 ) - { - self waittill( "trigger", e_triggerer ); - self playsound( "fly_elec_sparks_key" ); - wait 1; - } + self endon( "master_key_pulley_" + str_master_key_location ); + + while ( true ) + { + self waittill( "trigger", e_triggerer ); + + self playsound( "fly_elec_sparks_key" ); + wait 1; + } } is_player_character_present( character_name ) { - if ( !isDefined( character_name ) ) - { - return 0; - } - players = getplayers(); - _a785 = players; - _k785 = getFirstArrayKey( _a785 ); - while ( isDefined( _k785 ) ) - { - player = _a785[ _k785 ]; - if ( isDefined( player.character_name ) && player.character_name == character_name ) - { - return 1; - } - _k785 = getNextArrayKey( _a785, _k785 ); - } - return 0; + if ( !isdefined( character_name ) ) + return false; + + players = getplayers(); + + foreach ( player in players ) + { + if ( isdefined( player.character_name ) && player.character_name == character_name ) + return true; + } + + return false; } get_players_touching( scr_touched_name ) { - n_touching_count = 0; - e_touched = getent( scr_touched_name, "targetname" ); + n_touching_count = 0; + e_touched = getent( scr_touched_name, "targetname" ); /# - assert( isDefined( e_touched ) ); + assert( isdefined( e_touched ) ); #/ - a_players = getplayers(); - _a803 = a_players; - _k803 = getFirstArrayKey( _a803 ); - while ( isDefined( _k803 ) ) - { - player = _a803[ _k803 ]; - if ( isDefined( player ) && player istouching( e_touched ) ) - { - n_touching_count++; - } - _k803 = getNextArrayKey( _a803, _k803 ); - } - return n_touching_count; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player ) && player istouching( e_touched ) ) + n_touching_count++; + } + + return n_touching_count; } count_zombies_in_zone( volume ) { - e_zone = getent( volume, "targetname" ); - if ( !isDefined( e_zone ) ) - { - return; - } - n_zombie_count = 0; - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - if ( zombies[ i ] istouching( e_zone ) ) - { - n_zombie_count++; - } - i++; - } - return n_zombie_count; + e_zone = getent( volume, "targetname" ); + + if ( !isdefined( e_zone ) ) + return; + + n_zombie_count = 0; + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + { + if ( zombies[i] istouching( e_zone ) ) + n_zombie_count++; + } + + return n_zombie_count; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc index 0afe11c..120c4e2 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_standard.gsc @@ -1,28 +1,30 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_magicbox; -precache() //checked matches cerberus output +precache() { + } -main() //checked matches cerberus output +main() { - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "working" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - flag_wait( "initial_blackscreen_passed" ); - flag_set( "power_on" ); - zm_treasure_chest_init(); + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "working" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + flag_wait( "initial_blackscreen_passed" ); + flag_set( "power_on" ); + zm_treasure_chest_init(); } -zm_treasure_chest_init() //checked matches cerberus output +zm_treasure_chest_init() { - chest1 = getstruct( "start_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); + chest1 = getstruct( "start_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc index a9e0e57..450bc62 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_traps.gsc @@ -1,771 +1,796 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_ai_brutus; -//#using_animtree( "fxanim_props" ); //uncomment when the compiler supports anim trees - -init_fan_trap_trigs() //checked matches cerberus output +init_fan_trap_trigs() { - trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" ); - array_thread( trap_trigs, ::fan_trap_think ); - init_fan_fxanim( "wardens_office" ); + trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" ); + array_thread( trap_trigs, ::fan_trap_think ); + init_fan_fxanim( "wardens_office" ); } -init_fan_trap_animtree() //checked matches cerberus output +init_fan_trap_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } -init_fan_fxanim( str_loc ) //checked matches cerberus output +#using_animtree("fxanim_props"); + +init_fan_fxanim( str_loc ) { - e_fan = getent( "fxanim_fan_" + str_loc, "targetname" ); - level.fan_trap_fxanims = []; - level.fan_trap_fxanims[ "fan_trap_start" ] = %fxanim_zom_al_trap_fan_start_anim; - level.fan_trap_fxanims[ "fan_trap_idle" ] = %fxanim_zom_al_trap_fan_idle_anim; - level.fan_trap_fxanims[ "fan_trap_end" ] = %fxanim_zom_al_trap_fan_end_anim; + e_fan = getent( "fxanim_fan_" + str_loc, "targetname" ); + level.fan_trap_fxanims = []; + level.fan_trap_fxanims["fan_trap_start"] = %fxanim_zom_al_trap_fan_start_anim; + level.fan_trap_fxanims["fan_trap_idle"] = %fxanim_zom_al_trap_fan_idle_anim; + level.fan_trap_fxanims["fan_trap_end"] = %fxanim_zom_al_trap_fan_end_anim; } -fan_trap_think() //checked changed to match cerberus output +fan_trap_think() { - triggers = getentarray( self.targetname, "targetname" ); - self.cost = 1000; - self.in_use = 0; - self.is_available = 1; - self.has_been_used = 0; - self.zombie_dmg_trig = getent( self.target, "targetname" ); - self.zombie_dmg_trig.script_string = self.script_string; - self.zombie_dmg_trig.in_use = 0; - self.rumble_trig = getent( "fan_trap_rumble", "targetname" ); - light_name = self get_trap_light_name(); - zapper_light_red( light_name ); - self sethintstring( &"ZM_PRISON_FAN_TRAP_UNAVAILABLE" ); - flag_wait( "activate_warden_office" ); - zapper_light_green( light_name ); - self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost ); - while ( 1 ) - { - self waittill( "trigger", who ); - if ( who in_revive_trigger() ) - { - continue; - } - if ( !isDefined( self.is_available ) ) - { - continue; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.cost ) - { - if ( !self.zombie_dmg_trig.in_use ) - { - if ( !self.has_been_used ) - { - self.has_been_used = 1; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" ); - who do_player_general_vox( "general", "discover_trap" ); - } - else - { - who do_player_general_vox( "general", "start_trap" ); - } - self.zombie_dmg_trig.in_use = 1; - self.zombie_dmg_trig.active = 1; - self playsound( "zmb_trap_activate" ); - self thread fan_trap_move_switch( self ); - self waittill( "switch_activated" ); - who minus_to_player_score( self.cost ); - level.trapped_track[ "fan" ] = 1; - level notify( "trap_activated" ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 ); - array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); - self.zombie_dmg_trig setvisibletoall(); - self thread activate_fan_trap(); - self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string ); - clientnotify( self.script_string + "off" ); - self.zombie_dmg_trig notify( "fan_trap_finished" ); - self.zombie_dmg_trig.active = 0; - self.zombie_dmg_trig setinvisibletoall(); - array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); - wait 25; - self playsound( "zmb_trap_available" ); - self notify( "available" ); - self.zombie_dmg_trig.in_use = 0; - array_thread( triggers, ::hint_string, &"ZM_PRISON_FAN_TRAP", self.cost ); - } - } - } - } + triggers = getentarray( self.targetname, "targetname" ); + self.cost = 1000; + self.in_use = 0; + self.is_available = 1; + self.has_been_used = 0; + self.zombie_dmg_trig = getent( self.target, "targetname" ); + self.zombie_dmg_trig.script_string = self.script_string; + self.zombie_dmg_trig.in_use = 0; + self.rumble_trig = getent( "fan_trap_rumble", "targetname" ); + light_name = self get_trap_light_name(); + zapper_light_red( light_name ); + self sethintstring( &"ZM_PRISON_FAN_TRAP_UNAVAILABLE" ); + flag_wait( "activate_warden_office" ); + zapper_light_green( light_name ); + self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost ); + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( !isdefined( self.is_available ) ) + continue; + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.cost ) + { + if ( !self.zombie_dmg_trig.in_use ) + { + if ( !self.has_been_used ) + { + self.has_been_used = 1; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" ); + who do_player_general_vox( "general", "discover_trap" ); + } + else + who do_player_general_vox( "general", "start_trap" ); + + self.zombie_dmg_trig.in_use = 1; + self.zombie_dmg_trig.active = 1; + self playsound( "zmb_trap_activate" ); + self thread fan_trap_move_switch( self ); + + self waittill( "switch_activated" ); + + who minus_to_player_score( self.cost ); + level.trapped_track["fan"] = 1; + level notify( "trap_activated" ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 ); + array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); + self.zombie_dmg_trig setvisibletoall(); + self thread activate_fan_trap(); + + self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string ); + + clientnotify( self.script_string + "off" ); + self.zombie_dmg_trig notify( "fan_trap_finished" ); + self.zombie_dmg_trig.active = 0; + self.zombie_dmg_trig setinvisibletoall(); + array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); + wait 25; + self playsound( "zmb_trap_available" ); + self notify( "available" ); + self.zombie_dmg_trig.in_use = 0; + array_thread( triggers, ::hint_string, &"ZM_PRISON_FAN_TRAP", self.cost ); + } + } + } + } } -activate_fan_trap() //checked changed to match cerberus output +activate_fan_trap() { - self.zombie_dmg_trig thread fan_trap_damage( self ); - e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" ); - e_fan useanimtree( -1 ); - e_fan playsound( "zmb_trap_fan_start" ); - e_fan playloopsound( "zmb_trap_fan_loop", 2 ); - n_start_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_start" ] ); - n_idle_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_idle" ] ); - n_end_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_end" ] ); - e_fan setanim( level.fan_trap_fxanims[ "fan_trap_start" ], 1, 0.1, 1 ); - wait n_start_time; - e_fan setanim( level.fan_trap_fxanims[ "fan_trap_idle" ], 1, 0.1, 1 ); - self thread fan_trap_timeout(); - self thread fan_trap_rumble_think(); - self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string ); - e_fan setanim( level.fan_trap_fxanims[ "fan_trap_end" ], 1, 0.1, 1 ); - a_players = getplayers(); - foreach ( player in a_players ) - { - if ( is_true( player.fan_trap_rumble ) ) - { - player setclientfieldtoplayer( "rumble_fan_trap", 0 ); - player.fan_trap_rumble = 0; - } - } - e_fan stoploopsound( 0.75 ); - e_fan playsound( "zmb_trap_fan_end" ); - wait n_end_time; + self.zombie_dmg_trig thread fan_trap_damage( self ); + e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" ); + e_fan useanimtree( -1 ); + e_fan playsound( "zmb_trap_fan_start" ); + e_fan playloopsound( "zmb_trap_fan_loop", 2 ); + n_start_time = getanimlength( level.fan_trap_fxanims["fan_trap_start"] ); + n_idle_time = getanimlength( level.fan_trap_fxanims["fan_trap_idle"] ); + n_end_time = getanimlength( level.fan_trap_fxanims["fan_trap_end"] ); + e_fan setanim( level.fan_trap_fxanims["fan_trap_start"], 1, 0.1, 1 ); + wait( n_start_time ); + e_fan setanim( level.fan_trap_fxanims["fan_trap_idle"], 1, 0.1, 1 ); + self thread fan_trap_timeout(); + self thread fan_trap_rumble_think(); + + self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string ); + + e_fan setanim( level.fan_trap_fxanims["fan_trap_end"], 1, 0.1, 1 ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( is_true( player.fan_trap_rumble ) ) + { + player setclientfieldtoplayer( "rumble_fan_trap", 0 ); + player.fan_trap_rumble = 0; + } + } + + e_fan stoploopsound( 0.75 ); + e_fan playsound( "zmb_trap_fan_end" ); + wait( n_end_time ); } -fan_trap_timeout() //checked does not match cerberus output did not change +fan_trap_timeout() { - self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); - n_duration = 0; - while ( n_duration < 25 ) - { - wait 0.05; - n_duration += 0.05; - } - self.zombie_dmg_trig notify( "trap_finished_" + self.script_string ); + self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); + + for ( n_duration = 0; n_duration < 25; n_duration += 0.05 ) + wait 0.05; + + self.zombie_dmg_trig notify( "trap_finished_" + self.script_string ); } -fan_trap_rumble_think() //checked matches cerberus output +fan_trap_rumble_think() { - self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); - while ( 1 ) - { - self.rumble_trig waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - if ( !is_true( ent.fan_trap_rumble ) ) - { - self thread fan_trap_rumble( ent ); - } - } - } + self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); + + while ( true ) + { + self.rumble_trig waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + { + if ( !is_true( ent.fan_trap_rumble ) ) + self thread fan_trap_rumble( ent ); + } + } } -fan_trap_rumble( player ) //checked changed to match cerberus output +fan_trap_rumble( player ) { - player endon( "death" ); - player endon( "disconnect" ); - self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); - while ( 1 ) - { - if ( player istouching( self.rumble_trig ) ) - { - player setclientfieldtoplayer( "rumble_fan_trap", 1 ); - player.fan_trap_rumble = 1; - wait 0.25; - } - else - { - player setclientfieldtoplayer( "rumble_fan_trap", 0 ); - player.fan_trap_rumble = 0; - break; - } - } + player endon( "death" ); + player endon( "disconnect" ); + self.zombie_dmg_trig endon( "trap_finished_" + self.script_string ); + + while ( true ) + { + if ( player istouching( self.rumble_trig ) ) + { + player setclientfieldtoplayer( "rumble_fan_trap", 1 ); + player.fan_trap_rumble = 1; + wait 0.25; + } + else + { + player setclientfieldtoplayer( "rumble_fan_trap", 0 ); + player.fan_trap_rumble = 0; + break; + } + } } -fan_trap_damage( parent ) //checked partially changed to match cerberus output +fan_trap_damage( parent ) { - if ( isDefined( level.custom_fan_trap_damage_func ) ) - { - self thread [[ level.custom_fan_trap_damage_func ]]( parent ); - return; - } - self endon( "fan_trap_finished" ); - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - ent thread player_fan_trap_damage(); - } - else - { - if ( is_true( ent.is_brutus ) ) - { - ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self ); - return; - } - if ( !isDefined( ent.marked_for_death ) ) - { - ent.marked_for_death = 1; - ent thread zombie_fan_trap_death(); - } - } - } + if ( isdefined( level.custom_fan_trap_damage_func ) ) + { + self thread [[ level.custom_fan_trap_damage_func ]]( parent ); + return; + } + + self endon( "fan_trap_finished" ); + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + ent thread player_fan_trap_damage(); + else + { + if ( is_true( ent.is_brutus ) ) + { + ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self ); + return; + } + + if ( !isdefined( ent.marked_for_death ) ) + { + ent.marked_for_death = 1; + ent thread zombie_fan_trap_death(); + } + } + } } -fan_trap_move_switch( parent ) //checked matches cerberus output +fan_trap_move_switch( parent ) { - light_name = ""; - tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); - light_name = parent get_trap_light_name(); - zapper_light_red( light_name ); - tswitch rotatepitch( -180, 0.5 ); - tswitch playsound( "amb_sparks_l_b" ); - tswitch waittill( "rotatedone" ); - self notify( "switch_activated" ); - self waittill( "available" ); - tswitch rotatepitch( 180, 0.5 ); - zapper_light_green( light_name ); + light_name = ""; + tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); + light_name = parent get_trap_light_name(); + zapper_light_red( light_name ); + tswitch rotatepitch( -180, 0.5 ); + tswitch playsound( "amb_sparks_l_b" ); + + tswitch waittill( "rotatedone" ); + + self notify( "switch_activated" ); + + self waittill( "available" ); + + tswitch rotatepitch( 180, 0.5 ); + zapper_light_green( light_name ); } -player_fan_trap_damage() //checked matches cerberus output +player_fan_trap_damage() { - self endon( "death" ); - self endon( "disconnect" ); - if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 ) - { - radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); - } - else - { - self dodamage( 50, self.origin ); - } + self endon( "death" ); + self endon( "disconnect" ); + + if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 ) + radiusdamage( self.origin, 10, self.health + 100, self.health + 100 ); + else + self dodamage( 50, self.origin ); } -zombie_fan_trap_death() //checked matches cerberus output +zombie_fan_trap_death() { - self endon( "death" ); - if ( !isDefined( self.is_brutus ) ) - { - self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self setclientfield( "fan_trap_blood_fx", 1 ); - self thread stop_fan_trap_blood_fx(); - self dodamage( self.health + 1000, self.origin ); + self endon( "death" ); + + if ( !isdefined( self.is_brutus ) ) + { + self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self setclientfield( "fan_trap_blood_fx", 1 ); + self thread stop_fan_trap_blood_fx(); + self dodamage( self.health + 1000, self.origin ); } -stop_fan_trap_blood_fx() //checked matches cerberus output +stop_fan_trap_blood_fx() { - wait 2; - self setclientfield( "fan_trap_blood_fx", 0 ); + wait 2.0; + self setclientfield( "fan_trap_blood_fx", 0 ); } -init_acid_trap_trigs() //checked matches cerberus output +init_acid_trap_trigs() { - trap_trigs = getentarray( "acid_trap_trigger", "targetname" ); - array_thread( trap_trigs, ::acid_trap_think ); - level thread acid_trap_host_migration_listener(); + trap_trigs = getentarray( "acid_trap_trigger", "targetname" ); + array_thread( trap_trigs, ::acid_trap_think ); + level thread acid_trap_host_migration_listener(); } -acid_trap_think() //checked changed to match cerberus output +acid_trap_think() { - triggers = getentarray( self.targetname, "targetname" ); - self.is_available = 1; - self.has_been_used = 0; - self.cost = 1000; - self.in_use = 0; - self.zombie_dmg_trig = getent( self.target, "targetname" ); - self.zombie_dmg_trig.in_use = 0; - light_name = self get_trap_light_name(); - zapper_light_red( light_name ); - self sethintstring( &"ZM_PRISON_ACID_TRAP_UNAVAILABLE" ); - flag_wait_any( "activate_cafeteria", "activate_infirmary" ); - zapper_light_green( light_name ); - self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost ); - while ( 1 ) - { - self waittill( "trigger", who ); - if ( who in_revive_trigger() ) - { - continue; - } - if ( !isDefined( self.is_available ) ) - { - continue; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.cost ) - { - if ( !self.zombie_dmg_trig.in_use ) - { - if ( !self.has_been_used ) - { - self.has_been_used = 1; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" ); - who do_player_general_vox( "general", "discover_trap" ); - } - else - { - who do_player_general_vox( "general", "start_trap" ); - } - self.zombie_dmg_trig.in_use = 1; - self.zombie_dmg_trig.active = 1; - self playsound( "zmb_trap_activate" ); - self thread acid_trap_move_switch( self ); - self waittill( "switch_activated" ); - who minus_to_player_score( self.cost ); - level.trapped_track[ "acid" ] = 1; - level notify( "trap_activated" ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 ); - array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); - self thread activate_acid_trap(); - self.zombie_dmg_trig waittill( "acid_trap_fx_done" ); - clientnotify( self.script_string + "off" ); - if ( isDefined( self.fx_org ) ) - { - self.fx_org delete(); - } - if ( isDefined( self.zapper_fx_org ) ) - { - self.zapper_fx_org delete(); - } - if ( isDefined( self.zapper_fx_switch_org ) ) - { - self.zapper_fx_switch_org delete(); - } - self.zombie_dmg_trig notify( "acid_trap_finished" ); - self.zombie_dmg_trig.active = 0; - array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); - wait 25; - self playsound( "zmb_trap_available" ); - self notify( "available" ); - self.zombie_dmg_trig.in_use = 0; - array_thread( triggers, ::hint_string, &"ZM_PRISON_ACID_TRAP", self.cost ); - } - } - } - } + triggers = getentarray( self.targetname, "targetname" ); + self.is_available = 1; + self.has_been_used = 0; + self.cost = 1000; + self.in_use = 0; + self.zombie_dmg_trig = getent( self.target, "targetname" ); + self.zombie_dmg_trig.in_use = 0; + light_name = self get_trap_light_name(); + zapper_light_red( light_name ); + self sethintstring( &"ZM_PRISON_ACID_TRAP_UNAVAILABLE" ); + flag_wait_any( "activate_cafeteria", "activate_infirmary" ); + zapper_light_green( light_name ); + self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost ); + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( !isdefined( self.is_available ) ) + continue; + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.cost ) + { + if ( !self.zombie_dmg_trig.in_use ) + { + if ( !self.has_been_used ) + { + self.has_been_used = 1; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" ); + who do_player_general_vox( "general", "discover_trap" ); + } + else + who do_player_general_vox( "general", "start_trap" ); + + self.zombie_dmg_trig.in_use = 1; + self.zombie_dmg_trig.active = 1; + self playsound( "zmb_trap_activate" ); + self thread acid_trap_move_switch( self ); + + self waittill( "switch_activated" ); + + who minus_to_player_score( self.cost ); + level.trapped_track["acid"] = 1; + level notify( "trap_activated" ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 ); + array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" ); + self thread activate_acid_trap(); + + self.zombie_dmg_trig waittill( "acid_trap_fx_done" ); + + clientnotify( self.script_string + "off" ); + + if ( isdefined( self.fx_org ) ) + self.fx_org delete(); + + if ( isdefined( self.zapper_fx_org ) ) + self.zapper_fx_org delete(); + + if ( isdefined( self.zapper_fx_switch_org ) ) + self.zapper_fx_switch_org delete(); + + self.zombie_dmg_trig notify( "acid_trap_finished" ); + self.zombie_dmg_trig.active = 0; + array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" ); + wait 25; + self playsound( "zmb_trap_available" ); + self notify( "available" ); + self.zombie_dmg_trig.in_use = 0; + array_thread( triggers, ::hint_string, &"ZM_PRISON_ACID_TRAP", self.cost ); + } + } + } + } } -acid_trap_move_switch( parent ) //checked matches cerberus output +acid_trap_move_switch( parent ) { - light_name = ""; - tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); - light_name = parent get_trap_light_name(); - zapper_light_red( light_name ); - tswitch rotatepitch( -180, 0.5 ); - tswitch playsound( "amb_sparks_l_b" ); - tswitch waittill( "rotatedone" ); - self notify( "switch_activated" ); - self waittill( "available" ); - tswitch rotatepitch( 180, 0.5 ); - zapper_light_green( light_name ); + light_name = ""; + tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); + light_name = parent get_trap_light_name(); + zapper_light_red( light_name ); + tswitch rotatepitch( -180, 0.5 ); + tswitch playsound( "amb_sparks_l_b" ); + + tswitch waittill( "rotatedone" ); + + self notify( "switch_activated" ); + + self waittill( "available" ); + + tswitch rotatepitch( 180, 0.5 ); + zapper_light_green( light_name ); } -activate_acid_trap() //checked changed to match cerberus output +activate_acid_trap() { - clientnotify( self.target ); - fire_points = getstructarray( self.target, "targetname" ); - for ( i = 0; i < fire_points.size; i++ ) - { - wait_network_frame(); - fire_points[ i ] thread acid_trap_fx( self ); - } - self.zombie_dmg_trig thread acid_trap_damage(); + clientnotify( self.target ); + fire_points = getstructarray( self.target, "targetname" ); + + for ( i = 0; i < fire_points.size; i++ ) + { + wait_network_frame(); + fire_points[i] thread acid_trap_fx( self ); + } + + self.zombie_dmg_trig thread acid_trap_damage(); } -acid_trap_damage() //checked partially changed to match cerberus output +acid_trap_damage() { - if ( isDefined( level.custom_acid_trap_damage_func ) ) - { - self thread [[ level.custom_acid_trap_damage_func ]](); - return; - } - self endon( "acid_trap_finished" ); - while ( 1 ) - { - self waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - ent thread player_acid_damage( self ); - } - else - { - if ( is_true( ent.is_brutus ) ) - { - ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self ); - return; - } - if ( !isDefined( ent.marked_for_death ) ) - { - ent.marked_for_death = 1; - ent thread zombie_acid_damage(); - } - } - } + if ( isdefined( level.custom_acid_trap_damage_func ) ) + { + self thread [[ level.custom_acid_trap_damage_func ]](); + return; + } + + self endon( "acid_trap_finished" ); + + while ( true ) + { + self waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + ent thread player_acid_damage( self ); + else + { + if ( is_true( ent.is_brutus ) ) + { + ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self ); + return; + } + + if ( !isdefined( ent.marked_for_death ) ) + { + ent.marked_for_death = 1; + ent thread zombie_acid_damage(); + } + } + } } -zombie_acid_damage() //checked matches cerberus output +zombie_acid_damage() { - self endon( "death" ); - self setclientfield( "acid_trap_death_fx", 1 ); - wait randomfloatrange( 0.25, 2 ); - if ( !isDefined( self.is_brutus ) ) - { - self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self dodamage( self.health + 1000, self.origin ); + self endon( "death" ); + self setclientfield( "acid_trap_death_fx", 1 ); + wait( randomfloatrange( 0.25, 2.0 ) ); + + if ( !isdefined( self.is_brutus ) ) + { + self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self dodamage( self.health + 1000, self.origin ); } -stop_acid_death_fx() //checked matches cerberus output +stop_acid_death_fx() { - wait 3; - self setclientfield( "acid_trap_death_fx", 0 ); + wait 3.0; + self setclientfield( "acid_trap_death_fx", 0 ); } -player_acid_damage( t_damage ) //checked changed to match cerberus output +player_acid_damage( t_damage ) { - self endon( "death" ); - self endon( "disconnect" ); - t_damage endon( "acid_trap_finished" ); - if ( !isDefined( self.is_in_acid ) && !self player_is_in_laststand() ) - { - self.is_in_acid = 1; - self thread player_acid_damage_cooldown(); - while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife ) - { - self dodamage( self.maxhealth / 2, self.origin ); - wait 1; - } - } + self endon( "death" ); + self endon( "disconnect" ); + t_damage endon( "acid_trap_finished" ); + + if ( !isdefined( self.is_in_acid ) && !self player_is_in_laststand() ) + { + self.is_in_acid = 1; + self thread player_acid_damage_cooldown(); + + while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife ) + { + self dodamage( self.maxhealth / 2, self.origin ); + wait 1; + } + } } -player_acid_damage_cooldown() //checked matches cerberus output +player_acid_damage_cooldown() { - self endon( "disconnect" ); - wait 1; - if ( isDefined( self ) ) - { - self.is_in_acid = undefined; - } + self endon( "disconnect" ); + wait 1; + + if ( isdefined( self ) ) + self.is_in_acid = undefined; } -acid_trap_fx( notify_ent ) //checked matches cerberus output +acid_trap_fx( notify_ent ) { - wait 25; - notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" ); + wait 25; + notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" ); } -acid_trap_host_migration_listener() //checked changed to match cerberus output +acid_trap_host_migration_listener() { - level endon( "end_game" ); - level notify( "acid_trap_hostmigration" ); - level endon( "acid_trap_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_end" ); - trap_trigs = getentarray( "acid_trap_trigger", "targetname" ); - foreach ( trigger in trap_trigs ) - { - if ( isDefined( trigger.zombie_dmg_trig ) && isDefined( trigger.zombie_dmg_trig.active ) ) - { - if ( trigger.zombie_dmg_trig.active == 1 ) - { - clientnotify( trigger.target ); - break; - } - } - } - } + level endon( "end_game" ); + level notify( "acid_trap_hostmigration" ); + level endon( "acid_trap_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_end" ); + + trap_trigs = getentarray( "acid_trap_trigger", "targetname" ); + + foreach ( trigger in trap_trigs ) + { + if ( isdefined( trigger.zombie_dmg_trig ) && isdefined( trigger.zombie_dmg_trig.active ) ) + { + if ( trigger.zombie_dmg_trig.active == 1 ) + { + clientnotify( trigger.target ); + break; + } + } + } + } } -init_tower_trap_trigs() //checked changed to match cerberus output +init_tower_trap_trigs() { - trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" ); - foreach ( trigger in trap_trigs ) - { - trigger thread tower_trap_trigger_think(); - } + trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" ); + + foreach ( trigger in trap_trigs ) + trigger thread tower_trap_trigger_think(); } -tower_trap_trigger_think() //checked changed to match cerberus output +tower_trap_trigger_think() { - self.range_trigger = getent( self.target, "targetname" ); - self.upgrade_trigger = getent( self.script_string, "script_noteworthy" ); - self.cost = 1000; - light_name = self get_trap_light_name(); - zapper_light_green( light_name ); - self.is_available = 1; - self.in_use = 0; - self.has_been_used = 0; - self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) ); - while ( 1 ) - { - self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost ); - self waittill( "trigger", who ); - if ( who in_revive_trigger() ) - { - continue; - } - if ( !isDefined( self.is_available ) ) - { - continue; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.cost ) - { - if ( !self.in_use ) - { - if ( !self.has_been_used ) - { - self.has_been_used = 1; - who do_player_general_vox( "general", "discover_trap" ); - } - else - { - who do_player_general_vox( "general", "start_trap" ); - } - self.in_use = 1; - self.active = 1; - play_sound_at_pos( "purchase", who.origin ); - self thread tower_trap_move_switch( self ); - self playsound( "zmb_trap_activate" ); - self waittill( "switch_activated" ); - who minus_to_player_score( self.cost ); - level.trapped_track[ "tower" ] = 1; - level notify( "trap_activated" ); - who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 ); - self hint_string( &"ZOMBIE_TRAP_ACTIVE" ); - self.sndtowerent playsound( "zmb_trap_tower_start" ); - self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 ); - self thread activate_tower_trap(); - self thread tower_trap_timer(); - self thread tower_upgrade_trigger_think(); - level thread open_tower_trap_upgrade_panel(); - level thread tower_trap_upgrade_panel_closes_early(); - self waittill( "tower_trap_off" ); - self.sndtowerent stoploopsound( 1 ); - self.sndtowerent playsound( "zmb_trap_tower_end" ); - self.upgrade_trigger notify( "afterlife_interact_reset" ); - self.active = 0; - self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" ); - zapper_light_red( light_name ); - wait 25; - self playsound( "zmb_trap_available" ); - self notify( "available" ); - self.in_use = 0; - self.upgrade_trigger notify( "available" ); - self.upgrade_trigger.in_use = 0; - } - } - } - } + self.range_trigger = getent( self.target, "targetname" ); + self.upgrade_trigger = getent( self.script_string, "script_noteworthy" ); + self.cost = 1000; + light_name = self get_trap_light_name(); + zapper_light_green( light_name ); + self.is_available = 1; + self.in_use = 0; + self.has_been_used = 0; + self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) ); + + while ( true ) + { + self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost ); + + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( !isdefined( self.is_available ) ) + continue; + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.cost ) + { + if ( !self.in_use ) + { + if ( !self.has_been_used ) + { + self.has_been_used = 1; + who do_player_general_vox( "general", "discover_trap" ); + } + else + who do_player_general_vox( "general", "start_trap" ); + + self.in_use = 1; + self.active = 1; + play_sound_at_pos( "purchase", who.origin ); + self thread tower_trap_move_switch( self ); + self playsound( "zmb_trap_activate" ); + + self waittill( "switch_activated" ); + + who minus_to_player_score( self.cost ); + level.trapped_track["tower"] = 1; + level notify( "trap_activated" ); + who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 ); + self hint_string( &"ZOMBIE_TRAP_ACTIVE" ); + self.sndtowerent playsound( "zmb_trap_tower_start" ); + self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 ); + self thread activate_tower_trap(); + self thread tower_trap_timer(); + self thread tower_upgrade_trigger_think(); + level thread open_tower_trap_upgrade_panel(); + level thread tower_trap_upgrade_panel_closes_early(); + + self waittill( "tower_trap_off" ); + + self.sndtowerent stoploopsound( 1 ); + self.sndtowerent playsound( "zmb_trap_tower_end" ); + self.upgrade_trigger notify( "afterlife_interact_reset" ); + self.active = 0; + self sethintstring( &"ZOMBIE_TRAP_COOLDOWN" ); + zapper_light_red( light_name ); + wait 25; + self playsound( "zmb_trap_available" ); + self notify( "available" ); + self.in_use = 0; + self.upgrade_trigger notify( "available" ); + self.upgrade_trigger.in_use = 0; + } + } + } + } } -tower_upgrade_trigger_think() //checked matches cerberus output +tower_upgrade_trigger_think() { - self endon( "tower_trap_off" ); - self.upgrade_trigger.cost = 1000; - self.upgrade_trigger.in_use = 0; - self.upgrade_trigger.is_available = 1; - while ( 1 ) - { - level waittill( self.upgrade_trigger.script_string ); - level.trapped_track[ "tower_upgrade" ] = 1; - level notify( "tower_trap_upgraded" ); - level notify( "close_tower_trap_upgrade_panel" ); - self upgrade_tower_trap_weapon(); - self notify( "tower_trap_reset_timer" ); - self thread tower_trap_timer(); - self waittill( "tower_trap_off" ); - wait 25; - } + self endon( "tower_trap_off" ); + self.upgrade_trigger.cost = 1000; + self.upgrade_trigger.in_use = 0; + self.upgrade_trigger.is_available = 1; + + while ( true ) + { + level waittill( self.upgrade_trigger.script_string ); + + level.trapped_track["tower_upgrade"] = 1; + level notify( "tower_trap_upgraded" ); + level notify( "close_tower_trap_upgrade_panel" ); + self upgrade_tower_trap_weapon(); + self notify( "tower_trap_reset_timer" ); + self thread tower_trap_timer(); + + self waittill( "tower_trap_off" ); + + wait 25; + } } -open_tower_trap_upgrade_panel() //checked matches cerberus output +open_tower_trap_upgrade_panel() { - e_door = getent( "tower_shockbox_door", "targetname" ); - e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 ); - level waittill( "close_tower_trap_upgrade_panel" ); - e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 ); + e_door = getent( "tower_shockbox_door", "targetname" ); + e_door moveto( e_door.origin + vectorscale( ( 0, -1, 0 ), 40.0 ), 1.0 ); + + level waittill( "close_tower_trap_upgrade_panel" ); + + e_door moveto( e_door.origin + vectorscale( ( 0, 1, 0 ), 40.0 ), 1.0 ); } -tower_trap_upgrade_panel_closes_early() //checked matches cerberus output +tower_trap_upgrade_panel_closes_early() { - level endon( "tower_trap_upgraded" ); - n_waittime = 24; - wait n_waittime; - level notify( "close_tower_trap_upgrade_panel" ); + level endon( "tower_trap_upgraded" ); + n_waittime = 24; + wait( n_waittime ); + level notify( "close_tower_trap_upgrade_panel" ); } -tower_trap_move_switch( parent ) //checked matches cerberus output +tower_trap_move_switch( parent ) { - light_name = ""; - tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); - light_name = parent get_trap_light_name(); - zapper_light_red( light_name ); - tswitch rotatepitch( -180, 0.5 ); - tswitch playsound( "amb_sparks_l_b" ); - tswitch waittill( "rotatedone" ); - self notify( "switch_activated" ); - self waittill( "available" ); - tswitch rotatepitch( 180, 0.5 ); - if ( isDefined( parent.script_noteworthy ) ) - { - zapper_light_green( light_name ); - } + light_name = ""; + tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" ); + light_name = parent get_trap_light_name(); + zapper_light_red( light_name ); + tswitch rotatepitch( -180, 0.5 ); + tswitch playsound( "amb_sparks_l_b" ); + + tswitch waittill( "rotatedone" ); + + self notify( "switch_activated" ); + + self waittill( "available" ); + + tswitch rotatepitch( 180, 0.5 ); + + if ( isdefined( parent.script_noteworthy ) ) + zapper_light_green( light_name ); } -activate_tower_trap() //checked changed to match cerberus output +activate_tower_trap() { - self endon( "tower_trap_off" ); - self.weapon_name = "tower_trap_zm"; - self.tag_to_target = "J_Head"; - self.trap_reload_time = 0.75; - while ( 1 ) - { - zombies = getaiarray( level.zombie_team ); - zombies_sorted = []; - foreach(zombie in zombies) - { - if ( zombie istouching( self.range_trigger ) ) - { - zombies_sorted[ zombies_sorted.size ] = zombie; - } - } - if ( zombies_sorted.size <= 0 ) - { - wait_network_frame(); - } - else - { - wait_network_frame(); - self tower_trap_fires( zombies_sorted ); - } - } + self endon( "tower_trap_off" ); + self.weapon_name = "tower_trap_zm"; + self.tag_to_target = "J_Head"; + self.trap_reload_time = 0.75; + + while ( true ) + { + zombies = getaiarray( level.zombie_team ); + zombies_sorted = []; + + foreach ( zombie in zombies ) + { + if ( zombie istouching( self.range_trigger ) ) + zombies_sorted[zombies_sorted.size] = zombie; + } + + if ( zombies_sorted.size <= 0 ) + { + wait_network_frame(); + continue; + } + else + { + wait_network_frame(); + self tower_trap_fires( zombies_sorted ); + } + } } -upgrade_tower_trap_weapon() //checked matches cerberus output +upgrade_tower_trap_weapon() { - self.weapon_name = "tower_trap_upgraded_zm"; - self.tag_to_target = "J_SpineLower"; - self.trap_reload_time = 1.5; + self.weapon_name = "tower_trap_upgraded_zm"; + self.tag_to_target = "J_SpineLower"; + self.trap_reload_time = 1.5; } -tower_trap_timer() //checked matches cerberus output +tower_trap_timer() { - self endon( "tower_trap_reset_timer" ); - /* + self endon( "tower_trap_reset_timer" ); /# - self thread debug_tower_trap_timer(); + self thread debug_tower_trap_timer(); #/ - */ - wait 25; - self notify( "tower_trap_off" ); + wait 25; + self notify( "tower_trap_off" ); } -debug_tower_trap_timer() //checked changed to match cerberus output +debug_tower_trap_timer() { - self endon( "tower_trap_reset_timer" ); - for ( i = 1; i <= 25; i++ ) - { - /* + self endon( "tower_trap_reset_timer" ); + + for ( i = 1; i <= 25; i++ ) + { /# - iprintln( "Tower Trap Timer = " + i ); + iprintln( "Tower Trap Timer = " + i ); #/ - */ - wait 1; - } + wait 1.0; + } } -tower_trap_fires( a_zombies ) //checked changed to match cerberus output +tower_trap_fires( a_zombies ) { - if ( isDefined( level.custom_tower_trap_fires_func ) ) - { - self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies ); - return; - } - self endon( "tower_trap_off" ); - e_org = getstruct( self.range_trigger.target, "targetname" ); - n_index = randomintrange( 0, a_zombies.size ); - while ( isalive( a_zombies[ n_index ] ) ) - { - e_target = a_zombies[ n_index ]; - v_zombietarget = e_target gettagorigin( self.tag_to_target ); - if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) ) - { - magicbullet( self.weapon_name, e_org.origin, v_zombietarget ); - wait self.trap_reload_time; - } - else - { - arrayremovevalue( a_zombies, e_target, 0 ); - wait_network_frame(); - if ( a_zombies.size <= 0 ) - { - break; - } - n_index = randomintrange( 0, a_zombies.size ); - } - } + if ( isdefined( level.custom_tower_trap_fires_func ) ) + { + self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies ); + return; + } + + self endon( "tower_trap_off" ); + e_org = getstruct( self.range_trigger.target, "targetname" ); + + for ( n_index = randomintrange( 0, a_zombies.size ); isalive( a_zombies[n_index] ); n_index = randomintrange( 0, a_zombies.size ) ) + { + e_target = a_zombies[n_index]; + v_zombietarget = e_target gettagorigin( self.tag_to_target ); + arrayremovevalue( a_zombies, e_target, 0 ); + wait_network_frame(); + asm_cond( a_zombies.size <= 0, loc_2676 ); + asm_jump( loc_268A ); + } } -hint_string( string, cost ) //checked matches cerberus output +hint_string( string, cost ) { - if ( isDefined( cost ) ) - { - self sethintstring( string, cost ); - } - else - { - self sethintstring( string ); - } - self setcursorhint( "HINT_NOICON" ); + if ( isdefined( cost ) ) + self sethintstring( string, cost ); + else + self sethintstring( string ); + + self setcursorhint( "HINT_NOICON" ); } -zapper_light_red( lightname ) //checked changed to match cerberus output +zapper_light_red( lightname ) { - zapper_lights = getentarray( lightname, "targetname" ); - for ( i = 0; i < zapper_lights.size; i++ ) - { - zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control_red" ); - } + zapper_lights = getentarray( lightname, "targetname" ); + + for ( i = 0; i < zapper_lights.size; i++ ) + zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control_red" ); } -zapper_light_green( lightname ) //checked changed to match cerberus output +zapper_light_green( lightname ) { - zapper_lights = getentarray( lightname, "targetname" ); - for ( i = 0; i < zapper_lights.size; i++ ) - { - zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control" ); - } + zapper_lights = getentarray( lightname, "targetname" ); + + for ( i = 0; i < zapper_lights.size; i++ ) + zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control" ); } -get_trap_light_name() //checked matches cerberus output +get_trap_light_name() { - tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" ); - switch( tswitch.script_linkname ) - { - case "1": - case "2": - light_name = "trap_control_wardens_office"; - break; - case "3": - case "4": - case "5": - light_name = "trap_control_cafeteria"; - break; - case "99": - light_name = "trap_control_docks"; - break; - } - return light_name; + tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" ); + + switch ( tswitch.script_linkname ) + { + case "2": + case "1": + light_name = "trap_control_wardens_office"; + break; + case "5": + case "4": + case "3": + light_name = "trap_control_cafeteria"; + break; + case "99": + light_name = "trap_control_docks"; + break; + } + + return light_name; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc index ed4e7d2..1be000b 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_travel.gsc @@ -1,1001 +1,912 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/_zombiemode_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\_zombiemode_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio; -#using_animtree( "fxanim_props" ); +#using_animtree("fxanim_props"); init_alcatraz_zipline() { - level thread gondola_hostmigration(); - level.player_intersection_tracker_override = ::zombie_alcatraz_player_intersection_tracker_override; - flag_init( "gondola_at_roof" ); - flag_init( "gondola_at_docks" ); - flag_init( "gondola_in_motion" ); - flag_init( "gondola_initialized" ); - e_gondola = getent( "zipline_gondola", "targetname" ); - level.e_gondola = e_gondola; - e_gondola.location = "roof"; - e_gondola.destination = undefined; - e_gondola setmovingplatformenabled( 1 ); - playfxontag( level._effect[ "light_gondola" ], e_gondola, "tag_origin" ); - flag_set( "gondola_at_roof" ); - level.e_gondola.t_ride = getent( "gondola_ride_trigger", "targetname" ); - level.e_gondola.t_ride enablelinkto(); - level.e_gondola.t_ride linkto( e_gondola ); - t_move_triggers = getentarray( "gondola_move_trigger", "targetname" ); - t_call_triggers = getentarray( "gondola_call_trigger", "targetname" ); - a_t_gondola_triggers = arraycombine( t_move_triggers, t_call_triggers, 1, 0 ); - _a47 = a_t_gondola_triggers; - _k47 = getFirstArrayKey( _a47 ); - while ( isDefined( _k47 ) ) - { - trigger = _a47[ _k47 ]; - trigger hint_string( &"ZM_PRISON_GONDOLA_REQUIRES_POWER" ); - _k47 = getNextArrayKey( _a47, _k47 ); - } - a_gondola_doors = getentarray( "gondola_doors", "targetname" ); - _a54 = a_gondola_doors; - _k54 = getFirstArrayKey( _a54 ); - while ( isDefined( _k54 ) ) - { - m_door = _a54[ _k54 ]; - m_door linkto( e_gondola ); - e_gondola establish_gondola_door_definition( m_door ); - m_door setmovingplatformenabled( 1 ); - _k54 = getNextArrayKey( _a54, _k54 ); - } - a_gondola_gates = getentarray( "gondola_gates", "targetname" ); - _a63 = a_gondola_gates; - _k63 = getFirstArrayKey( _a63 ); - while ( isDefined( _k63 ) ) - { - m_gate = _a63[ _k63 ]; - m_gate linkto( e_gondola ); - e_gondola establish_gondola_gate_definition( m_gate ); - m_gate setmovingplatformenabled( 1 ); - _k63 = getNextArrayKey( _a63, _k63 ); - } - a_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" ); - _a72 = a_gondola_landing_doors; - _k72 = getFirstArrayKey( _a72 ); - while ( isDefined( _k72 ) ) - { - m_door = _a72[ _k72 ]; - e_gondola establish_gondola_landing_door_definition( m_door ); - _k72 = getNextArrayKey( _a72, _k72 ); - } - a_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" ); - _a79 = a_gondola_landing_gates; - _k79 = getFirstArrayKey( _a79 ); - while ( isDefined( _k79 ) ) - { - m_gate = _a79[ _k79 ]; - e_gondola establish_gondola_landing_gate_definition( m_gate ); - _k79 = getNextArrayKey( _a79, _k79 ); - } - m_chains = spawn( "script_model", level.e_gondola.origin ); - m_chains.origin = level.e_gondola.origin; - m_chains.angles = level.e_gondola.angles; - m_chains setmodel( "fxanim_zom_al_gondola_chains_mod" ); - m_chains linkto( level.e_gondola ); - level.e_gondola.fxanim_chains = m_chains; - level.gondola_chains_fxanims = []; - level.gondola_chains_fxanims[ "gondola_chains_start" ] = %fxanim_zom_al_gondola_chains_start_anim; - level.gondola_chains_fxanims[ "gondola_chains_idle" ] = %fxanim_zom_al_gondola_chains_idle_anim; - level.gondola_chains_fxanims[ "gondola_chains_end" ] = %fxanim_zom_al_gondola_chains_end_anim; - gondola_lights_red(); + level thread gondola_hostmigration(); + level.player_intersection_tracker_override = ::zombie_alcatraz_player_intersection_tracker_override; + level.gondola_kill_brush_override = 0; + flag_init( "gondola_at_roof" ); + flag_init( "gondola_at_docks" ); + flag_init( "gondola_in_motion" ); + flag_init( "gondola_initialized" ); + e_gondola = getent( "zipline_gondola", "targetname" ); + level.e_gondola = e_gondola; + e_gondola.location = "roof"; + e_gondola.destination = undefined; + e_gondola setmovingplatformenabled( 1 ); + playfxontag( level._effect["light_gondola"], e_gondola, "tag_origin" ); + flag_set( "gondola_at_roof" ); + level.e_gondola.t_ride = getent( "gondola_ride_trigger", "targetname" ); + level.e_gondola.t_ride enablelinkto(); + level.e_gondola.t_ride linkto( e_gondola ); + t_move_triggers = getentarray( "gondola_move_trigger", "targetname" ); + t_call_triggers = getentarray( "gondola_call_trigger", "targetname" ); + a_t_gondola_triggers = arraycombine( t_move_triggers, t_call_triggers, 1, 0 ); + + foreach ( trigger in a_t_gondola_triggers ) + trigger hint_string( &"ZM_PRISON_GONDOLA_REQUIRES_POWER" ); + + a_gondola_doors = getentarray( "gondola_doors", "targetname" ); + + foreach ( m_door in a_gondola_doors ) + { + m_door linkto( e_gondola ); + e_gondola establish_gondola_door_definition( m_door ); + m_door setmovingplatformenabled( 1 ); + } + + a_gondola_gates = getentarray( "gondola_gates", "targetname" ); + + foreach ( m_gate in a_gondola_gates ) + { + m_gate linkto( e_gondola ); + e_gondola establish_gondola_gate_definition( m_gate ); + m_gate setmovingplatformenabled( 1 ); + } + + a_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" ); + + foreach ( m_door in a_gondola_landing_doors ) + e_gondola establish_gondola_landing_door_definition( m_door ); + + a_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" ); + + foreach ( m_gate in a_gondola_landing_gates ) + e_gondola establish_gondola_landing_gate_definition( m_gate ); + + m_chains = spawn( "script_model", level.e_gondola.origin ); + m_chains.origin = level.e_gondola.origin; + m_chains.angles = level.e_gondola.angles; + m_chains setmodel( "fxanim_zom_al_gondola_chains_mod" ); + m_chains linkto( level.e_gondola ); + level.e_gondola.fxanim_chains = m_chains; + level.gondola_chains_fxanims = []; + level.gondola_chains_fxanims["gondola_chains_start"] = %fxanim_zom_al_gondola_chains_start_anim; + level.gondola_chains_fxanims["gondola_chains_idle"] = %fxanim_zom_al_gondola_chains_idle_anim; + level.gondola_chains_fxanims["gondola_chains_end"] = %fxanim_zom_al_gondola_chains_end_anim; + gondola_lights_red(); /# - level thread debug_power_gondola_on(); + level thread debug_power_gondola_on(); #/ - str_notify = level waittill_any_array_return( array( "gondola_powered_on_roof", "gondola_powered_on_docks" ) ); - if ( str_notify == "gondola_powered_on_roof" ) - { - level thread turn_off_opposite_side_gondola_shockbox( "gondola_powered_on_docks" ); - e_gondola gondola_doors_move( "roof", 1 ); - } - else - { - if ( str_notify == "gondola_powered_on_docks" ) - { - level thread turn_off_opposite_side_gondola_shockbox( "gondola_powered_on_roof" ); - move_gondola( 1 ); - } - } - flag_set( "gondola_initialized" ); - gondola_lights_green(); - array_thread( t_move_triggers, ::zipline_move_trigger_think ); - array_thread( t_call_triggers, ::zipline_call_trigger_think ); + str_notify = level waittill_any_array_return( array( "gondola_powered_on_roof", "gondola_powered_on_docks" ) ); + + if ( str_notify == "gondola_powered_on_roof" ) + { + level thread turn_off_opposite_side_gondola_shockbox( "gondola_powered_on_docks" ); + e_gondola gondola_doors_move( "roof", 1 ); + } + else if ( str_notify == "gondola_powered_on_docks" ) + { + level thread turn_off_opposite_side_gondola_shockbox( "gondola_powered_on_roof" ); + move_gondola( 1 ); + } + + flag_set( "gondola_initialized" ); + gondola_lights_green(); + array_thread( t_move_triggers, ::zipline_move_trigger_think ); + array_thread( t_call_triggers, ::zipline_call_trigger_think ); } turn_off_opposite_side_gondola_shockbox( str_notify_opposite ) { - a_e_afterlife_interacts = getentarray( "afterlife_interact", "targetname" ); - _a134 = a_e_afterlife_interacts; - _k134 = getFirstArrayKey( _a134 ); - while ( isDefined( _k134 ) ) - { - shockbox = _a134[ _k134 ]; - if ( isDefined( shockbox.script_string ) ) - { - if ( shockbox.script_string == str_notify_opposite ) - { - shockbox notify( "damage" ); - } - } - _k134 = getNextArrayKey( _a134, _k134 ); - } + a_e_afterlife_interacts = getentarray( "afterlife_interact", "targetname" ); + + foreach ( shockbox in a_e_afterlife_interacts ) + { + if ( isdefined( shockbox.script_string ) ) + { + if ( shockbox.script_string == str_notify_opposite ) + shockbox notify( "damage", 1, level ); + } + } } debug_power_gondola_on() { /# - level waittill( "open_sesame" ); - level notify( "gondola_powered_on_roof" ); + level waittill( "open_sesame" ); + + level notify( "gondola_powered_on_roof" ); #/ } establish_gondola_door_definition( m_door ) { - str_identifier = m_door.script_noteworthy; - switch( str_identifier ) - { - case "roof left": - self.door_roof_left = m_door; - break; - case "roof right": - self.door_roof_right = m_door; - break; - case "docks left": - self.door_docks_left = m_door; - break; - case "docks right": - self.door_docks_right = m_door; - break; - } + str_identifier = m_door.script_noteworthy; + + switch ( str_identifier ) + { + case "roof left": + self.door_roof_left = m_door; + break; + case "roof right": + self.door_roof_right = m_door; + break; + case "docks left": + self.door_docks_left = m_door; + break; + case "docks right": + self.door_docks_right = m_door; + break; + } } establish_gondola_gate_definition( m_gate ) { - str_identifier = m_gate.script_noteworthy; - switch( str_identifier ) - { - case "roof left": - self.gate_roof_left = m_gate; - break; - case "roof right": - self.gate_roof_right = m_gate; - break; - case "docks left": - self.gate_docks_left = m_gate; - break; - case "docks right": - self.gate_docks_right = m_gate; - break; - } + str_identifier = m_gate.script_noteworthy; + + switch ( str_identifier ) + { + case "roof left": + self.gate_roof_left = m_gate; + break; + case "roof right": + self.gate_roof_right = m_gate; + break; + case "docks left": + self.gate_docks_left = m_gate; + break; + case "docks right": + self.gate_docks_right = m_gate; + break; + } } establish_gondola_landing_door_definition( m_door ) { - str_identifier = m_door.script_noteworthy; - switch( str_identifier ) - { - case "roof left": - self.landing_door_roof_left = m_door; - break; - case "roof right": - self.landing_door_roof_right = m_door; - break; - case "docks left": - self.landing_door_docks_left = m_door; - break; - case "docks right": - self.landing_door_docks_right = m_door; - break; - } + str_identifier = m_door.script_noteworthy; + + switch ( str_identifier ) + { + case "roof left": + self.landing_door_roof_left = m_door; + break; + case "roof right": + self.landing_door_roof_right = m_door; + break; + case "docks left": + self.landing_door_docks_left = m_door; + break; + case "docks right": + self.landing_door_docks_right = m_door; + break; + } } establish_gondola_landing_gate_definition( m_gate ) { - str_identifier = m_gate.script_noteworthy; - switch( str_identifier ) - { - case "roof left": - self.landing_gate_roof_left = m_gate; - break; - case "roof right": - self.landing_gate_roof_right = m_gate; - break; - case "docks left": - self.landing_gate_docks_left = m_gate; - break; - case "docks right": - self.landing_gate_docks_right = m_gate; - break; - } + str_identifier = m_gate.script_noteworthy; + + switch ( str_identifier ) + { + case "roof left": + self.landing_gate_roof_left = m_gate; + break; + case "roof right": + self.landing_gate_roof_right = m_gate; + break; + case "docks left": + self.landing_gate_docks_left = m_gate; + break; + case "docks right": + self.landing_gate_docks_right = m_gate; + break; + } } zipline_move_trigger_think() { - level endon( "interrupt_gondola_move_trigger_" + self.script_string ); - self.cost = 750; - self.in_use = 0; - self.is_available = 1; - self hint_string( "" ); - while ( 1 ) - { - flag_wait( "gondola_at_" + self.script_string ); - self hint_string( &"ZM_PRISON_MOVE_GONDOLA", self.cost ); - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( !isDefined( self.is_available ) ) - { - continue; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.cost ) - { - if ( !self.in_use ) - { - self.in_use = 1; - self.is_available = undefined; - play_sound_at_pos( "purchase", who.origin ); - who minus_to_player_score( self.cost ); - if ( self.script_string == "roof" ) - { - level notify( "interrupt_gondola_call_trigger_docks" ); - str_loc = "docks"; - } - else - { - if ( self.script_string == "docks" ) - { - level notify( "interrupt_gondola_call_trigger_roof" ); - str_loc = "roof"; - } - } - a_t_trig = getentarray( "gondola_call_trigger", "targetname" ); - _a298 = a_t_trig; - _k298 = getFirstArrayKey( _a298 ); - while ( isDefined( _k298 ) ) - { - trigger = _a298[ _k298 ]; - if ( trigger.script_string == str_loc ) - { - t_opposite_call_trigger = trigger; - break; - } - else - { - _k298 = getNextArrayKey( _a298, _k298 ); - } - } - move_gondola(); - t_opposite_call_trigger thread zipline_call_trigger_think(); - t_opposite_call_trigger playsound( "zmb_trap_available" ); - self.in_use = 0; - self.is_available = 1; - } - } - } - } + level endon( "interrupt_gondola_move_trigger_" + self.script_string ); + self.cost = 750; + self.in_use = 0; + self.is_available = 1; + self hint_string( "" ); + + while ( true ) + { + flag_wait( "gondola_at_" + self.script_string ); + self hint_string( &"ZM_PRISON_MOVE_GONDOLA", self.cost ); + + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( !isdefined( self.is_available ) ) + continue; + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.cost ) + { + if ( !self.in_use ) + { + self.in_use = 1; + self.is_available = undefined; + play_sound_at_pos( "purchase", who.origin ); + who minus_to_player_score( self.cost ); + + if ( self.script_string == "roof" ) + { + level notify( "interrupt_gondola_call_trigger_docks" ); + str_loc = "docks"; + } + else if ( self.script_string == "docks" ) + { + level notify( "interrupt_gondola_call_trigger_roof" ); + str_loc = "roof"; + } + + a_t_trig = getentarray( "gondola_call_trigger", "targetname" ); + + foreach ( trigger in a_t_trig ) + { + if ( trigger.script_string == str_loc ) + { + t_opposite_call_trigger = trigger; + break; + } + } + + move_gondola(); + t_opposite_call_trigger thread zipline_call_trigger_think(); + t_opposite_call_trigger playsound( "zmb_trap_available" ); + self.in_use = 0; + self.is_available = 1; + } + } + } + } } zipline_call_trigger_think() { - level endon( "interrupt_gondola_call_trigger_" + self.script_string ); - self.cost = 0; - self.in_use = 0; - self.is_available = 1; - e_gondola = level.e_gondola; - if ( self.script_string == "roof" ) - { - str_gondola_loc = "docks"; - } - else - { - if ( self.script_string == "docks" ) - { - str_gondola_loc = "roof"; - } - } - while ( 1 ) - { - self sethintstring( "" ); - flag_wait( "gondola_at_" + str_gondola_loc ); - self notify( "available" ); - self hint_string( &"ZM_PRISON_CALL_GONDOLA" ); - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( !isDefined( self.is_available ) ) - { - continue; - } - if ( is_player_valid( who ) ) - { - if ( !self.in_use ) - { - self.in_use = 1; - if ( self.script_string == "roof" ) - { - level notify( "interrupt_gondola_move_trigger_docks" ); - str_loc = "docks"; - } - else - { - if ( self.script_string == "docks" ) - { - level notify( "interrupt_gondola_move_trigger_roof" ); - str_loc = "roof"; - } - } - a_t_trig = getentarray( "gondola_move_trigger", "targetname" ); - _a388 = a_t_trig; - _k388 = getFirstArrayKey( _a388 ); - while ( isDefined( _k388 ) ) - { - trigger = _a388[ _k388 ]; - if ( trigger.script_string == str_loc ) - { - t_opposite_move_trigger = trigger; - break; - } - else - { - _k388 = getNextArrayKey( _a388, _k388 ); - } - } - self playsound( "zmb_trap_activate" ); - move_gondola(); - t_opposite_move_trigger thread zipline_move_trigger_think(); - self.in_use = 0; - self playsound( "zmb_trap_available" ); - self.is_available = 1; - } - } - } + level endon( "interrupt_gondola_call_trigger_" + self.script_string ); + self.cost = 0; + self.in_use = 0; + self.is_available = 1; + e_gondola = level.e_gondola; + + if ( self.script_string == "roof" ) + str_gondola_loc = "docks"; + else if ( self.script_string == "docks" ) + str_gondola_loc = "roof"; + + while ( true ) + { + self sethintstring( "" ); + flag_wait( "gondola_at_" + str_gondola_loc ); + self notify( "available" ); + self hint_string( &"ZM_PRISON_CALL_GONDOLA" ); + + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( !isdefined( self.is_available ) ) + continue; + + if ( is_player_valid( who ) ) + { + if ( !self.in_use ) + { + self.in_use = 1; + + if ( self.script_string == "roof" ) + { + level notify( "interrupt_gondola_move_trigger_docks" ); + str_loc = "docks"; + } + else if ( self.script_string == "docks" ) + { + level notify( "interrupt_gondola_move_trigger_roof" ); + str_loc = "roof"; + } + + a_t_trig = getentarray( "gondola_move_trigger", "targetname" ); + + foreach ( trigger in a_t_trig ) + { + if ( trigger.script_string == str_loc ) + { + t_opposite_move_trigger = trigger; + break; + } + } + + self playsound( "zmb_trap_activate" ); + move_gondola(); + t_opposite_move_trigger thread zipline_move_trigger_think(); + self.in_use = 0; + self playsound( "zmb_trap_available" ); + self.is_available = 1; + } + } + } } move_gondola( b_suppress_doors_close ) { - if ( !isDefined( b_suppress_doors_close ) ) - { - b_suppress_doors_close = 0; - } - level clientnotify( "sndGS" ); - gondola_lights_red(); - e_gondola = level.e_gondola; - t_ride = level.e_gondola.t_ride; - e_gondola.is_moving = 1; - if ( e_gondola.location == "roof" ) - { - s_moveloc = getstruct( "gondola_struct_docks", "targetname" ); - e_gondola.destination = "docks"; - } - else - { - if ( e_gondola.location == "docks" ) - { - s_moveloc = getstruct( "gondola_struct_roof", "targetname" ); - e_gondola.destination = "roof"; - } - } - if ( flag( "gondola_initialized" ) ) - { - flag_set( "gondola_roof_to_dock" ); - flag_set( "gondola_dock_to_roof" ); - flag_set( "gondola_ride_zone_enabled" ); - } - flag_clear( "gondola_at_" + e_gondola.location ); - if ( isDefined( b_suppress_doors_close ) && !b_suppress_doors_close ) - { - e_gondola gondola_doors_move( e_gondola.location, -1 ); - } - level notify( "gondola_moving" ); - a_t_move = getentarray( "gondola_move_trigger", "targetname" ); - _a455 = a_t_move; - _k455 = getFirstArrayKey( _a455 ); - while ( isDefined( _k455 ) ) - { - trigger = _a455[ _k455 ]; - trigger sethintstring( "" ); - _k455 = getNextArrayKey( _a455, _k455 ); - } - a_t_call = getentarray( "gondola_call_trigger", "targetname" ); - _a461 = a_t_call; - _k461 = getFirstArrayKey( _a461 ); - while ( isDefined( _k461 ) ) - { - trigger = _a461[ _k461 ]; - trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" ); - _k461 = getNextArrayKey( _a461, _k461 ); - } - check_when_gondola_moves_if_groundent_is_undefined( e_gondola ); - a_players = getplayers(); - _a472 = a_players; - _k472 = getFirstArrayKey( _a472 ); - while ( isDefined( _k472 ) ) - { - player = _a472[ _k472 ]; - if ( player is_player_on_gondola() ) - { - player setclientfieldtoplayer( "rumble_gondola", 1 ); - player thread check_for_death_on_gondola( e_gondola ); - player.is_on_gondola = 1; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "gondola", player ); - } - if ( isDefined( player.e_afterlife_corpse ) && player.e_afterlife_corpse istouching( t_ride ) ) - { - player.e_afterlife_corpse thread link_corpses_to_gondola( e_gondola ); - } - _k472 = getNextArrayKey( _a472, _k472 ); - } - e_gondola thread create_gondola_poi(); - level thread gondola_moving_vo(); - e_gondola thread gondola_physics_explosion( 10 ); - e_gondola moveto( s_moveloc.origin, 10, 1, 1 ); - flag_set( "gondola_in_motion" ); - e_gondola thread gondola_chain_fx_anim(); - e_gondola playsound( "zmb_gondola_start" ); - e_gondola playloopsound( "zmb_gondola_loop", 1 ); - e_gondola waittill( "movedone" ); - flag_clear( "gondola_in_motion" ); - e_gondola stoploopsound( 0,5 ); - e_gondola thread sndcooldown(); - e_gondola playsound( "zmb_gondola_stop" ); - player_escaped_gondola_failsafe(); - a_players = getplayers(); - _a517 = a_players; - _k517 = getFirstArrayKey( _a517 ); - while ( isDefined( _k517 ) ) - { - player = _a517[ _k517 ]; - if ( isDefined( player.is_on_gondola ) && player.is_on_gondola ) - { - player setclientfieldtoplayer( "rumble_gondola", 0 ); - player.is_on_gondola = 0; - } - _k517 = getNextArrayKey( _a517, _k517 ); - } - e_gondola gondola_doors_move( e_gondola.destination, 1 ); - e_gondola.is_moving = 0; - e_gondola thread tear_down_gondola_poi(); - wait 1; - level clientnotify( "sndGE" ); - if ( e_gondola.location == "roof" ) - { - e_gondola.location = "docks"; - str_zone = "zone_dock_gondola"; - } - else - { - if ( e_gondola.location == "docks" ) - { - e_gondola.location = "roof"; - str_zone = "zone_cellblock_west_gondola_dock"; - } - } - level notify( "gondola_arrived" ); - gondola_cooldown(); - flag_set( "gondola_at_" + e_gondola.location ); + if ( !isdefined( b_suppress_doors_close ) ) + b_suppress_doors_close = 0; + + level clientnotify( "sndGS" ); + gondola_lights_red(); + e_gondola = level.e_gondola; + t_ride = level.e_gondola.t_ride; + e_gondola.is_moving = 1; + + if ( e_gondola.location == "roof" ) + { + s_moveloc = getstruct( "gondola_struct_docks", "targetname" ); + e_gondola.destination = "docks"; + level thread gondola_outofbounds_trigger_stop(); + } + else if ( e_gondola.location == "docks" ) + { + s_moveloc = getstruct( "gondola_struct_roof", "targetname" ); + e_gondola.destination = "roof"; + level thread gondola_outofbounds_trigger_enabled(); + } + + if ( flag( "gondola_initialized" ) ) + { + flag_set( "gondola_roof_to_dock" ); + flag_set( "gondola_dock_to_roof" ); + flag_set( "gondola_ride_zone_enabled" ); + } + + flag_clear( "gondola_at_" + e_gondola.location ); + + if ( !( isdefined( b_suppress_doors_close ) && b_suppress_doors_close ) ) + e_gondola gondola_doors_move( e_gondola.location, -1 ); + + level notify( "gondola_moving" ); + a_t_move = getentarray( "gondola_move_trigger", "targetname" ); + + foreach ( trigger in a_t_move ) + trigger sethintstring( "" ); + + a_t_call = getentarray( "gondola_call_trigger", "targetname" ); + + foreach ( trigger in a_t_call ) + trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" ); + + check_when_gondola_moves_if_groundent_is_undefined( e_gondola ); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player is_player_on_gondola() ) + { + player setclientfieldtoplayer( "rumble_gondola", 1 ); + player thread check_for_death_on_gondola( e_gondola ); + player.is_on_gondola = 1; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gondola", player ); + } + + if ( isdefined( player.e_afterlife_corpse ) && player.e_afterlife_corpse istouching( t_ride ) ) + player.e_afterlife_corpse thread link_corpses_to_gondola( e_gondola ); + } + + e_gondola thread create_gondola_poi(); + level thread gondola_moving_vo(); + e_gondola thread gondola_physics_explosion( 10 ); + e_gondola moveto( s_moveloc.origin, 10, 1, 1 ); + flag_set( "gondola_in_motion" ); + e_gondola thread gondola_chain_fx_anim(); + e_gondola playsound( "zmb_gondola_start" ); + e_gondola playloopsound( "zmb_gondola_loop", 1 ); + + e_gondola waittill( "movedone" ); + + flag_clear( "gondola_in_motion" ); + e_gondola stoploopsound( 0.5 ); + e_gondola thread sndcooldown(); + e_gondola playsound( "zmb_gondola_stop" ); + player_escaped_gondola_failsafe(); + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.is_on_gondola ) && player.is_on_gondola ) + { + player setclientfieldtoplayer( "rumble_gondola", 0 ); + player.is_on_gondola = 0; + } + } + + e_gondola gondola_doors_move( e_gondola.destination, 1 ); + e_gondola.is_moving = 0; + e_gondola thread tear_down_gondola_poi(); + wait 1.0; + level clientnotify( "sndGE" ); + + if ( e_gondola.location == "roof" ) + { + e_gondola.location = "docks"; + str_zone = "zone_dock_gondola"; + } + else if ( e_gondola.location == "docks" ) + { + e_gondola.location = "roof"; + str_zone = "zone_cellblock_west_gondola_dock"; + } + + level notify( "gondola_arrived", str_zone ); + gondola_cooldown(); + flag_set( "gondola_at_" + e_gondola.location ); } sndcooldown() { - self playsound( "zmb_gond_pwr_dn" ); - self playloopsound( "zmb_gondola_cooldown_lp", 1 ); - wait 10; - wait 3,5; - self stoploopsound( 0,5 ); - self playsound( "zmb_gond_pwr_on" ); + self playsound( "zmb_gond_pwr_dn" ); + self playloopsound( "zmb_gondola_cooldown_lp", 1 ); + wait 10; + wait 3.5; + self stoploopsound( 0.5 ); + self playsound( "zmb_gond_pwr_on" ); } gondola_doors_move( str_side, n_state ) { - if ( str_side == "roof" ) - { - m_door_left = self.door_roof_left; - m_gate_left = self.gate_roof_left; - m_door_right = self.door_roof_right; - m_gate_right = self.gate_roof_right; - m_landing_door_left = self.landing_door_roof_left; - m_landing_gate_left = self.landing_gate_roof_left; - m_landing_door_right = self.landing_door_roof_right; - m_landing_gate_right = self.landing_gate_roof_right; - n_side_modifier = 1; - } - else - { - if ( str_side == "docks" ) - { - m_door_left = self.door_docks_left; - m_gate_left = self.gate_docks_left; - m_door_right = self.door_docks_right; - m_gate_right = self.gate_docks_right; - m_landing_door_left = self.landing_door_docks_left; - m_landing_gate_left = self.landing_gate_docks_left; - m_landing_door_right = self.landing_door_docks_right; - m_landing_gate_right = self.landing_gate_docks_right; - n_side_modifier = -1; - } - } - a_doors_and_gates = []; - a_doors_and_gates[ 0 ] = m_door_left; - a_doors_and_gates[ 1 ] = m_gate_left; - a_doors_and_gates[ 2 ] = m_door_right; - a_doors_and_gates[ 3 ] = m_gate_right; - _a611 = a_doors_and_gates; - _k611 = getFirstArrayKey( _a611 ); - while ( isDefined( _k611 ) ) - { - m_model = _a611[ _k611 ]; - m_model unlink(); - _k611 = getNextArrayKey( _a611, _k611 ); - } - m_door_left playsound( "zmb_gondola_door" ); - if ( n_state == 1 ) - { - gondola_gate_moves( n_state, n_side_modifier, m_gate_left, m_gate_right, m_landing_gate_left, m_landing_gate_right ); - gondola_gate_and_door_moves( n_state, n_side_modifier, m_gate_left, m_door_left, m_gate_right, m_door_right, m_landing_gate_left, m_landing_door_left, m_landing_gate_right, m_landing_door_right ); - if ( n_side_modifier == 1 ) - { - top_node_r = getnode( "nd_gond_top_r", "targetname" ); - top_node_r node_add_connection( getnode( "nd_on_top_r", "targetname" ) ); - } - else - { - bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); - bottom_node_r node_add_connection( getnode( "nd_on_bottom_r", "targetname" ) ); - } - } - else - { - if ( n_side_modifier == 1 ) - { - top_node_r = getnode( "nd_gond_top_r", "targetname" ); - top_node_r node_disconnect_from_path(); - } - else - { - bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); - bottom_node_r node_disconnect_from_path(); - } - gondola_gate_and_door_moves( n_state, n_side_modifier, m_gate_left, m_door_left, m_gate_right, m_door_right, m_landing_gate_left, m_landing_door_left, m_landing_gate_right, m_landing_door_right ); - gondola_gate_moves( n_state, n_side_modifier, m_gate_left, m_gate_right, m_landing_gate_left, m_landing_gate_right ); - } - _a657 = a_doors_and_gates; - _k657 = getFirstArrayKey( _a657 ); - while ( isDefined( _k657 ) ) - { - m_model = _a657[ _k657 ]; - m_model linkto( self ); - _k657 = getNextArrayKey( _a657, _k657 ); - } + if ( str_side == "roof" ) + { + m_door_left = self.door_roof_left; + m_gate_left = self.gate_roof_left; + m_door_right = self.door_roof_right; + m_gate_right = self.gate_roof_right; + m_landing_door_left = self.landing_door_roof_left; + m_landing_gate_left = self.landing_gate_roof_left; + m_landing_door_right = self.landing_door_roof_right; + m_landing_gate_right = self.landing_gate_roof_right; + n_side_modifier = 1; + } + else if ( str_side == "docks" ) + { + m_door_left = self.door_docks_left; + m_gate_left = self.gate_docks_left; + m_door_right = self.door_docks_right; + m_gate_right = self.gate_docks_right; + m_landing_door_left = self.landing_door_docks_left; + m_landing_gate_left = self.landing_gate_docks_left; + m_landing_door_right = self.landing_door_docks_right; + m_landing_gate_right = self.landing_gate_docks_right; + n_side_modifier = -1; + } + + a_doors_and_gates = []; + a_doors_and_gates[0] = m_door_left; + a_doors_and_gates[1] = m_gate_left; + a_doors_and_gates[2] = m_door_right; + a_doors_and_gates[3] = m_gate_right; + + foreach ( m_model in a_doors_and_gates ) + m_model unlink(); + + m_door_left playsound( "zmb_gondola_door" ); + + if ( n_state == 1 ) + { + gondola_gate_moves( n_state, n_side_modifier, m_gate_left, m_gate_right, m_landing_gate_left, m_landing_gate_right ); + gondola_gate_and_door_moves( n_state, n_side_modifier, m_gate_left, m_door_left, m_gate_right, m_door_right, m_landing_gate_left, m_landing_door_left, m_landing_gate_right, m_landing_door_right ); + + if ( n_side_modifier == 1 ) + { + top_node_r = getnode( "nd_gond_top_r", "targetname" ); + top_node_r node_add_connection( getnode( "nd_on_top_r", "targetname" ) ); + } + else + { + bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); + bottom_node_r node_add_connection( getnode( "nd_on_bottom_r", "targetname" ) ); + } + } + else + { + if ( n_side_modifier == 1 ) + { + top_node_r = getnode( "nd_gond_top_r", "targetname" ); + top_node_r node_disconnect_from_path(); + } + else + { + bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); + bottom_node_r node_disconnect_from_path(); + } + + gondola_gate_and_door_moves( n_state, n_side_modifier, m_gate_left, m_door_left, m_gate_right, m_door_right, m_landing_gate_left, m_landing_door_left, m_landing_gate_right, m_landing_door_right ); + gondola_gate_moves( n_state, n_side_modifier, m_gate_left, m_gate_right, m_landing_gate_left, m_landing_gate_right ); + } + + foreach ( m_model in a_doors_and_gates ) + m_model linkto( self ); } gondola_gate_moves( n_state, n_side_modifier, m_gate_left, m_gate_right, m_landing_gate_left, m_landing_gate_right ) { - m_gate_left moveto( m_gate_left.origin + ( 22,5 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_gate_right moveto( m_gate_right.origin + ( 22,5 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_gate_left moveto( m_landing_gate_left.origin + ( 22,5 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_gate_right moveto( m_landing_gate_right.origin + ( 22,5 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_gate_right waittill( "movedone" ); + m_gate_left moveto( m_gate_left.origin + ( 22.5 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_gate_right moveto( m_gate_right.origin + ( 22.5 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_gate_left moveto( m_landing_gate_left.origin + ( 22.5 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_gate_right moveto( m_landing_gate_right.origin + ( 22.5 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + + m_gate_right waittill( "movedone" ); } gondola_gate_and_door_moves( n_state, n_side_modifier, m_gate_left, m_door_left, m_gate_right, m_door_right, m_landing_gate_left, m_landing_door_left, m_landing_gate_right, m_landing_door_right ) { - m_door_left moveto( m_door_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_gate_left moveto( m_gate_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_door_right moveto( m_door_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_gate_right moveto( m_gate_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_door_left moveto( m_landing_door_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_gate_left moveto( m_landing_gate_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_door_right moveto( m_landing_door_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_landing_gate_right moveto( m_landing_gate_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0,5, 0,05, 0,05 ); - m_gate_right waittill( "movedone" ); + m_door_left moveto( m_door_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_gate_left moveto( m_gate_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_door_right moveto( m_door_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + m_gate_right moveto( m_gate_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_door_left moveto( m_landing_door_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_gate_left moveto( m_landing_gate_left.origin + ( 24 * n_side_modifier * n_state, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_door_right moveto( m_landing_door_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + m_landing_gate_right moveto( m_landing_gate_right.origin + ( 24 * n_side_modifier * n_state * -1, 0, 0 ), 0.5, 0.05, 0.05 ); + + m_gate_right waittill( "movedone" ); } check_for_death_on_gondola( e_gondola ) { - self endon( "disconnect" ); - self endon( "afterlife_bleedout" ); - e_gondola endon( "movedone" ); - self waittill( "player_fake_corpse_created" ); - self.e_afterlife_corpse endon( "player_revived" ); - self.e_afterlife_corpse linkto( e_gondola ); + self endon( "disconnect" ); + self endon( "afterlife_bleedout" ); + e_gondola endon( "movedone" ); + + self waittill( "player_fake_corpse_created" ); + + self.e_afterlife_corpse endon( "player_revived" ); + self.e_afterlife_corpse linkto( e_gondola ); } link_corpses_to_gondola( e_gondola ) { - e_gondola endon( "movedone" ); - if ( isDefined( self ) ) - { - self linkto( e_gondola ); - } + e_gondola endon( "movedone" ); + + if ( isdefined( self ) ) + self linkto( e_gondola ); } create_gondola_poi() { - a_players = getplayers(); - _a717 = a_players; - _k717 = getFirstArrayKey( _a717 ); - while ( isDefined( _k717 ) ) - { - player = _a717[ _k717 ]; - if ( isDefined( player.is_on_gondola ) && !player.is_on_gondola ) - { - return; - } - _k717 = getNextArrayKey( _a717, _k717 ); - } - s_poi = getstruct( "gondola_poi_" + self.destination, "targetname" ); - e_poi = spawn( "script_origin", s_poi.origin ); - e_poi create_zombie_point_of_interest( 10000, 30, 5000, 1 ); - e_poi thread create_zombie_point_of_interest_attractor_positions(); - self.poi = e_poi; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !( isdefined( player.is_on_gondola ) && player.is_on_gondola ) ) + return; + } + + s_poi = getstruct( "gondola_poi_" + self.destination, "targetname" ); + e_poi = spawn( "script_origin", s_poi.origin ); + e_poi create_zombie_point_of_interest( 10000, 30, 5000, 1 ); + e_poi thread create_zombie_point_of_interest_attractor_positions(); + self.poi = e_poi; } tear_down_gondola_poi() { - if ( isDefined( self.poi ) ) - { - remove_poi_attractor( self.poi ); - self.poi delete(); - } + if ( isdefined( self.poi ) ) + { + remove_poi_attractor( self.poi ); + self.poi delete(); + } } gondola_chain_fx_anim() { - m_chains = self.fxanim_chains; - m_chains useanimtree( -1 ); - n_start_time = getanimlength( level.gondola_chains_fxanims[ "gondola_chains_start" ] ); - n_idle_time = getanimlength( level.gondola_chains_fxanims[ "gondola_chains_idle" ] ); - m_chains setanim( level.gondola_chains_fxanims[ "gondola_chains_start" ], 1, 0,1, 1 ); - wait n_start_time; - m_chains setanim( level.gondola_chains_fxanims[ "gondola_chains_idle" ], 1, 0,1, 1 ); - while ( flag( "gondola_in_motion" ) ) - { - wait n_idle_time; - } - m_chains setanim( level.gondola_chains_fxanims[ "gondola_chains_end" ], 1, 0,1, 1 ); + m_chains = self.fxanim_chains; + m_chains useanimtree( -1 ); + n_start_time = getanimlength( level.gondola_chains_fxanims["gondola_chains_start"] ); + n_idle_time = getanimlength( level.gondola_chains_fxanims["gondola_chains_idle"] ); + m_chains setanim( level.gondola_chains_fxanims["gondola_chains_start"], 1, 0.1, 1 ); + wait( n_start_time ); + m_chains setanim( level.gondola_chains_fxanims["gondola_chains_idle"], 1, 0.1, 1 ); + + while ( flag( "gondola_in_motion" ) ) + wait( n_idle_time ); + + m_chains setanim( level.gondola_chains_fxanims["gondola_chains_end"], 1, 0.1, 1 ); } gondola_physics_explosion( n_move_time ) { - self endon( "movedone" ); - i = 0; - while ( i < 2 ) - { - physicsexplosionsphere( self.origin, 1000, 0,1, 0,1 ); - wait ( n_move_time / 2 ); - i++; - } + self endon( "movedone" ); + + for ( i = 0; i < 2; i++ ) + { + physicsexplosionsphere( self.origin, 1000, 0.1, 0.1 ); + wait( n_move_time / 2 ); + } } gondola_cooldown() { - a_t_call = getentarray( "gondola_call_trigger", "targetname" ); - _a785 = a_t_call; - _k785 = getFirstArrayKey( _a785 ); - while ( isDefined( _k785 ) ) - { - trigger = _a785[ _k785 ]; - trigger sethintstring( &"ZM_PRISON_GONDOLA_COOLDOWN" ); - _k785 = getNextArrayKey( _a785, _k785 ); - } - a_t_move = getentarray( "gondola_move_trigger", "targetname" ); - _a792 = a_t_move; - _k792 = getFirstArrayKey( _a792 ); - while ( isDefined( _k792 ) ) - { - trigger = _a792[ _k792 ]; - trigger sethintstring( &"ZM_PRISON_GONDOLA_COOLDOWN" ); - _k792 = getNextArrayKey( _a792, _k792 ); - } - wait 10; - gondola_lights_green(); + a_t_call = getentarray( "gondola_call_trigger", "targetname" ); + + foreach ( trigger in a_t_call ) + trigger sethintstring( &"ZM_PRISON_GONDOLA_COOLDOWN" ); + + a_t_move = getentarray( "gondola_move_trigger", "targetname" ); + + foreach ( trigger in a_t_move ) + trigger sethintstring( &"ZM_PRISON_GONDOLA_COOLDOWN" ); + + wait 10; + gondola_lights_green(); } gondola_moving_vo() { - if ( isDefined( level.custom_gondola_moving_vo_func ) ) - { - self thread [[ level.custom_gondola_moving_vo_func ]](); - return; - } - a_players = array_players_on_gondola(); - if ( a_players.size > 0 ) - { - a_players = array_randomize( a_players ); - a_players[ 0 ] thread do_player_general_vox( "general", "use_gondola" ); - } + if ( isdefined( level.custom_gondola_moving_vo_func ) ) + { + self thread [[ level.custom_gondola_moving_vo_func ]](); + return; + } + + a_players = array_players_on_gondola(); + + if ( a_players.size > 0 ) + { + a_players = array_randomize( a_players ); + a_players[0] thread do_player_general_vox( "general", "use_gondola" ); + } } hint_string( string, cost ) { - if ( isDefined( cost ) ) - { - self sethintstring( string, cost ); - } - else - { - self sethintstring( string ); - } - self setcursorhint( "HINT_NOICON" ); + if ( isdefined( cost ) ) + self sethintstring( string, cost ); + else + self sethintstring( string ); + + self setcursorhint( "HINT_NOICON" ); } gondola_lights_red() { - a_m_gondola_lights = getentarray( "gondola_state_light", "targetname" ); - _a845 = a_m_gondola_lights; - _k845 = getFirstArrayKey( _a845 ); - while ( isDefined( _k845 ) ) - { - model = _a845[ _k845 ]; - model setmodel( "p6_zm_al_gondola_frame_light_red" ); - wait_network_frame(); - _k845 = getNextArrayKey( _a845, _k845 ); - } + a_m_gondola_lights = getentarray( "gondola_state_light", "targetname" ); + + foreach ( model in a_m_gondola_lights ) + { + model setmodel( "p6_zm_al_gondola_frame_light_red" ); + wait_network_frame(); + } } gondola_lights_green() { - a_m_gondola_lights = getentarray( "gondola_state_light", "targetname" ); - _a857 = a_m_gondola_lights; - _k857 = getFirstArrayKey( _a857 ); - while ( isDefined( _k857 ) ) - { - model = _a857[ _k857 ]; - model setmodel( "p6_zm_al_gondola_frame_light_green" ); - wait_network_frame(); - _k857 = getNextArrayKey( _a857, _k857 ); - } + a_m_gondola_lights = getentarray( "gondola_state_light", "targetname" ); + + foreach ( model in a_m_gondola_lights ) + { + model setmodel( "p6_zm_al_gondola_frame_light_green" ); + wait_network_frame(); + } } is_player_on_gondola() { - if ( isplayer( self ) ) - { - if ( self istouching( level.e_gondola.t_ride ) ) - { - return 1; - } - else - { - return 0; - } - } + if ( isplayer( self ) ) + { + if ( self istouching( level.e_gondola.t_ride ) ) + return true; + else + return false; + } } array_players_on_gondola() { - a_players_on_gondola = []; - a_players = getplayers(); - _a885 = a_players; - _k885 = getFirstArrayKey( _a885 ); - while ( isDefined( _k885 ) ) - { - player = _a885[ _k885 ]; - if ( player is_player_on_gondola() ) - { - a_players_on_gondola[ a_players_on_gondola.size ] = player; - } - _k885 = getNextArrayKey( _a885, _k885 ); - } - return a_players_on_gondola; + a_players_on_gondola = []; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player is_player_on_gondola() ) + a_players_on_gondola[a_players_on_gondola.size] = player; + } + + return a_players_on_gondola; } init_gondola_chains_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } gondola_hostmigration() { - level endon( "end_game" ); - level notify( "gondola_hostmigration" ); - level endon( "gondola_hostmigration" ); - while ( 1 ) - { - level waittill( "host_migration_begin" ); - level.hm_link_origins = []; - a_players = getplayers(); - _a915 = a_players; - _k915 = getFirstArrayKey( _a915 ); - while ( isDefined( _k915 ) ) - { - player = _a915[ _k915 ]; - player thread link_player_to_gondola(); - _k915 = getNextArrayKey( _a915, _k915 ); - } - level waittill( "host_migration_end" ); - a_players = getplayers(); - _a923 = a_players; - _k923 = getFirstArrayKey( _a923 ); - while ( isDefined( _k923 ) ) - { - player = _a923[ _k923 ]; - player unlink(); - _k923 = getNextArrayKey( _a923, _k923 ); - } - _a928 = level.hm_link_origins; - _k928 = getFirstArrayKey( _a928 ); - while ( isDefined( _k928 ) ) - { - e_origin = _a928[ _k928 ]; - e_origin delete(); - _k928 = getNextArrayKey( _a928, _k928 ); - } - if ( isDefined( level.e_gondola.is_moving ) && !level.e_gondola.is_moving ) - { - if ( level.e_gondola.location == "roof" ) - { - top_node_r = getnode( "nd_gond_top_r", "targetname" ); - top_node_r node_add_connection( getnode( "nd_on_top_r", "targetname" ) ); - break; - } - else - { - bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); - bottom_node_r node_add_connection( getnode( "nd_on_bottom_r", "targetname" ) ); - } - } - } + level endon( "end_game" ); + level notify( "gondola_hostmigration" ); + level endon( "gondola_hostmigration" ); + + while ( true ) + { + level waittill( "host_migration_begin" ); + + level.hm_link_origins = []; + a_players = getplayers(); + + foreach ( player in a_players ) + player thread link_player_to_gondola(); + + level waittill( "host_migration_end" ); + + a_players = getplayers(); + + foreach ( player in a_players ) + player unlink(); + + foreach ( e_origin in level.hm_link_origins ) + e_origin delete(); + + if ( !( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) ) + { + if ( level.e_gondola.location == "roof" ) + { + top_node_r = getnode( "nd_gond_top_r", "targetname" ); + top_node_r node_add_connection( getnode( "nd_on_top_r", "targetname" ) ); + } + else + { + bottom_node_r = getnode( "nd_gond_bottom_r", "targetname" ); + bottom_node_r node_add_connection( getnode( "nd_on_bottom_r", "targetname" ) ); + } + } + } } link_player_to_gondola() { - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self ) ) - { - return; - } - if ( self is_player_on_gondola() ) - { - e_origin = spawn( "script_origin", self.origin ); - e_origin.angles = self.angles; - level.hm_link_origins[ level.hm_link_origins.size ] = e_origin; - e_origin linkto( level.e_gondola ); - self playerlinkto( e_origin ); - } + self endon( "death" ); + self endon( "disconnect" ); + + if ( !isdefined( self ) ) + return; + + if ( self is_player_on_gondola() ) + { + e_origin = spawn( "script_origin", self.origin ); + e_origin.angles = self.angles; + level.hm_link_origins[level.hm_link_origins.size] = e_origin; + e_origin linkto( level.e_gondola ); + self playerlinkto( e_origin ); + } } node_add_connection( nd_node ) { - if ( !nodesarelinked( self, nd_node ) ) - { - if ( !isDefined( self.a_node_path_connections ) ) - { - self.a_node_path_connections = []; - } - link_nodes( self, nd_node ); - link_nodes( nd_node, self ); - self.a_node_path_connections[ self.a_node_path_connections.size ] = nd_node; - } + if ( !nodesarelinked( self, nd_node ) ) + { + if ( !isdefined( self.a_node_path_connections ) ) + self.a_node_path_connections = []; + + link_nodes( self, nd_node ); + link_nodes( nd_node, self ); + self.a_node_path_connections[self.a_node_path_connections.size] = nd_node; + } } node_disconnect_from_path() { - while ( isDefined( self.a_node_path_connections ) ) - { - i = 0; - while ( i < self.a_node_path_connections.size ) - { - nd_node = self.a_node_path_connections[ i ]; - unlink_nodes( self, nd_node ); - unlink_nodes( nd_node, self ); - i++; - } - } - self.a_node_path_connections = undefined; + if ( isdefined( self.a_node_path_connections ) ) + { + for ( i = 0; i < self.a_node_path_connections.size; i++ ) + { + nd_node = self.a_node_path_connections[i]; + unlink_nodes( self, nd_node ); + unlink_nodes( nd_node, self ); + } + } + + self.a_node_path_connections = undefined; } check_when_gondola_moves_if_groundent_is_undefined( e_gondola ) { - wait 1; - a_zombies = getaiarray( level.zombie_team ); - a_zombies = get_array_of_closest( e_gondola.origin, a_zombies ); - i = 0; - while ( i < a_zombies.size ) - { - if ( distancesquared( e_gondola.origin, a_zombies[ i ].origin ) < 90000 ) - { - ground_ent = a_zombies[ i ] getgroundent(); - if ( !isDefined( ground_ent ) ) - { - a_zombies[ i ] dodamage( a_zombies[ i ].health + 1000, a_zombies[ i ].origin ); - } - } - i++; - } + wait 1.0; + a_zombies = getaiarray( level.zombie_team ); + a_zombies = get_array_of_closest( e_gondola.origin, a_zombies ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( distancesquared( e_gondola.origin, a_zombies[i].origin ) < 90000 ) + { + ground_ent = a_zombies[i] getgroundent(); + + if ( !isdefined( ground_ent ) ) + a_zombies[i] dodamage( a_zombies[i].health + 1000, a_zombies[i].origin ); + } + } } get_gondola_doors_and_gates() { - if ( isDefined( level.e_gondola ) ) - { - a_doors_gates = []; - a_doors_gates[ 0 ] = level.e_gondola.door_roof_left; - a_doors_gates[ 1 ] = level.e_gondola.door_roof_right; - a_doors_gates[ 2 ] = level.e_gondola.door_docks_left; - a_doors_gates[ 3 ] = level.e_gondola.door_docks_right; - a_doors_gates[ 4 ] = level.e_gondola.gate_roof_left; - a_doors_gates[ 5 ] = level.e_gondola.gate_roof_right; - a_doors_gates[ 6 ] = level.e_gondola.gate_docks_left; - a_doors_gates[ 7 ] = level.e_gondola.gate_docks_right; - a_doors_gates[ 8 ] = level.e_gondola.landing_door_roof_left; - a_doors_gates[ 9 ] = level.e_gondola.landing_door_roof_right; - a_doors_gates[ 10 ] = level.e_gondola.landing_door_docks_left; - a_doors_gates[ 11 ] = level.e_gondola.landing_door_docks_right; - a_doors_gates[ 12 ] = level.e_gondola.landing_gate_roof_left; - a_doors_gates[ 13 ] = level.e_gondola.landing_gate_roof_right; - a_doors_gates[ 14 ] = level.e_gondola.landing_gate_docks_left; - a_doors_gates[ 15 ] = level.e_gondola.landing_gate_docks_right; - return a_doors_gates; - } + if ( isdefined( level.e_gondola ) ) + { + a_doors_gates = []; + a_doors_gates[0] = level.e_gondola.door_roof_left; + a_doors_gates[1] = level.e_gondola.door_roof_right; + a_doors_gates[2] = level.e_gondola.door_docks_left; + a_doors_gates[3] = level.e_gondola.door_docks_right; + a_doors_gates[4] = level.e_gondola.gate_roof_left; + a_doors_gates[5] = level.e_gondola.gate_roof_right; + a_doors_gates[6] = level.e_gondola.gate_docks_left; + a_doors_gates[7] = level.e_gondola.gate_docks_right; + a_doors_gates[8] = level.e_gondola.landing_door_roof_left; + a_doors_gates[9] = level.e_gondola.landing_door_roof_right; + a_doors_gates[10] = level.e_gondola.landing_door_docks_left; + a_doors_gates[11] = level.e_gondola.landing_door_docks_right; + a_doors_gates[12] = level.e_gondola.landing_gate_roof_left; + a_doors_gates[13] = level.e_gondola.landing_gate_roof_right; + a_doors_gates[14] = level.e_gondola.landing_gate_docks_left; + a_doors_gates[15] = level.e_gondola.landing_gate_docks_right; + return a_doors_gates; + } } zombie_alcatraz_player_intersection_tracker_override( other_player ) { - if ( isDefined( self.afterlife_revived ) || self.afterlife_revived && isDefined( other_player.afterlife_revived ) && other_player.afterlife_revived ) - { - return 1; - } - if ( isDefined( self.is_on_gondola ) && self.is_on_gondola && isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) - { - return 1; - } - if ( isDefined( other_player.is_on_gondola ) && other_player.is_on_gondola && isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) - { - return 1; - } - return 0; + if ( isdefined( self.afterlife_revived ) && self.afterlife_revived || isdefined( other_player.afterlife_revived ) && other_player.afterlife_revived ) + return true; + + if ( isdefined( self.is_on_gondola ) && self.is_on_gondola && ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) ) + return true; + + if ( isdefined( other_player.is_on_gondola ) && other_player.is_on_gondola && ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) ) + return true; + + return false; } player_escaped_gondola_failsafe() { - a_players = getplayers(); - _a1074 = a_players; - _k1074 = getFirstArrayKey( _a1074 ); - while ( isDefined( _k1074 ) ) - { - player = _a1074[ _k1074 ]; - while ( isDefined( player.is_on_gondola ) && player.is_on_gondola ) - { - while ( !player is_player_on_gondola() ) - { - if ( isDefined( player.afterlife ) && !player.afterlife && isalive( player ) ) - { - a_s_orgs = getstructarray( "gondola_dropped_parts_" + level.e_gondola.destination, "targetname" ); - _a1084 = a_s_orgs; - _k1084 = getFirstArrayKey( _a1084 ); - while ( isDefined( _k1084 ) ) - { - struct = _a1084[ _k1084 ]; - if ( !positionwouldtelefrag( struct.origin ) ) - { - player setorigin( struct.origin ); - break; - } - else - { - _k1084 = getNextArrayKey( _a1084, _k1084 ); - } - } - } - } - } - _k1074 = getNextArrayKey( _a1074, _k1074 ); - } + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.is_on_gondola ) && player.is_on_gondola ) + { + if ( !player is_player_on_gondola() ) + { + if ( !( isdefined( player.afterlife ) && player.afterlife ) && isalive( player ) ) + { + a_s_orgs = getstructarray( "gondola_dropped_parts_" + level.e_gondola.destination, "targetname" ); + + foreach ( struct in a_s_orgs ) + { + if ( !positionwouldtelefrag( struct.origin ) ) + { + player setorigin( struct.origin ); + break; + } + } + } + } + } + } +} + +gondola_outofbounds_trigger_stop() +{ + wait 5.0; + level.gondola_kill_brush_override = 1; +} + +gondola_outofbounds_trigger_enabled() +{ + wait 5.0; + level.gondola_kill_brush_override = 0; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc index 7bf5550..bde109b 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_utility.gsc @@ -1,1346 +1,1283 @@ -#include maps/mp/zm_alcatraz_weap_quest; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_alcatraz_weap_quest; +#include maps\mp\zombies\_zm_afterlife; include_craftable( craftable_struct ) { /# - println( "ZM >> include_craftable = " + craftable_struct.name ); + println( "ZM >> include_craftable = " + craftable_struct.name ); #/ - maps/mp/zombies/_zm_craftables::include_zombie_craftable( craftable_struct ); + maps\mp\zombies\_zm_craftables::include_zombie_craftable( craftable_struct ); } is_craftable() { - return self maps/mp/zombies/_zm_craftables::is_craftable(); + return self maps\mp\zombies\_zm_craftables::is_craftable(); } is_part_crafted( craftable_name, part_modelname ) { - return maps/mp/zombies/_zm_craftables::is_part_crafted( craftable_name, part_modelname ); + return maps\mp\zombies\_zm_craftables::is_part_crafted( craftable_name, part_modelname ); } wait_for_craftable( craftable_name ) { - level waittill( craftable_name + "_crafted", player ); - return player; + level waittill( craftable_name + "_crafted", player ); + + return player; } is_team_on_golden_gate_bridge() { - players = getplayers(); - e_zone = getent( "zone_golden_gate_bridge", "targetname" ); - _a57 = players; - _k57 = getFirstArrayKey( _a57 ); - while ( isDefined( _k57 ) ) - { - player = _a57[ _k57 ]; - if ( player istouching( e_zone ) ) - { - } - else return 0; - _k57 = getNextArrayKey( _a57, _k57 ); - } - return 1; + players = getplayers(); + e_zone = getent( "zone_golden_gate_bridge", "targetname" ); + + foreach ( player in players ) + { + if ( player istouching( e_zone ) ) + { + continue; + continue; + } + + return false; + } + + return true; } create_tutorial_message( str_msg ) { - if ( !isDefined( self.client_hint ) ) - { - self.client_hint = newclienthudelem( self ); - self.client_hint.alignx = "center"; - self.client_hint.aligny = "middle"; - self.client_hint.horzalign = "center"; - self.client_hint.vertalign = "bottom"; - if ( self issplitscreen() ) - { - self.client_hint.y = -140; - } - else - { - self.client_hint.y = -250; - } - self.client_hint.foreground = 1; - self.client_hint.font = "default"; - self.client_hint.fontscale = 1,5; - self.client_hint.alpha = 1; - self.client_hint.foreground = 1; - self.client_hint.hidewheninmenu = 1; - self.client_hint.color = ( 1, 1, 1 ); - } - self.client_hint settext( str_msg ); + if ( !isdefined( self.client_hint ) ) + { + self.client_hint = newclienthudelem( self ); + self.client_hint.alignx = "center"; + self.client_hint.aligny = "middle"; + self.client_hint.horzalign = "center"; + self.client_hint.vertalign = "bottom"; + + if ( self issplitscreen() ) + self.client_hint.y = -140; + else + self.client_hint.y = -250; + + self.client_hint.foreground = 1; + self.client_hint.font = "default"; + self.client_hint.fontscale = 1.5; + self.client_hint.alpha = 1; + self.client_hint.foreground = 1; + self.client_hint.hidewheninmenu = 1; + self.client_hint.color = ( 1, 1, 1 ); + } + + self.client_hint settext( str_msg ); } destroy_tutorial_message() { - if ( isDefined( self.client_hint ) ) - { - self.client_hint fadeovertime( 0,5 ); - self.client_hint.alpha = 0; - wait 0,5; - if ( isDefined( self.client_hint ) ) - { - self.client_hint destroy(); - self.client_hint = undefined; - } - } + if ( isdefined( self.client_hint ) ) + { + self.client_hint fadeovertime( 0.5 ); + self.client_hint.alpha = 0; + wait 0.5; + + if ( isdefined( self.client_hint ) ) + { + self.client_hint destroy(); + self.client_hint = undefined; + } + } } get_array_of_farthest( org, array, excluders, max ) { - sorted_array = get_array_of_closest( org, array, excluders ); - if ( isDefined( max ) ) - { - temp_array = []; - i = 0; - while ( i < sorted_array.size ) - { - temp_array[ temp_array.size ] = sorted_array[ sorted_array.size - i ]; - i++; - } - sorted_array = temp_array; - } - sorted_array = array_reverse( sorted_array ); - return sorted_array; + sorted_array = get_array_of_closest( org, array, excluders ); + + if ( isdefined( max ) ) + { + temp_array = []; + + for ( i = 0; i < sorted_array.size; i++ ) + temp_array[temp_array.size] = sorted_array[sorted_array.size - i]; + + sorted_array = temp_array; + } + + sorted_array = array_reverse( sorted_array ); + return sorted_array; } drop_all_barriers() { - zkeys = getarraykeys( level.zones ); - z = 0; - while ( z < level.zones.size ) - { - while ( zkeys[ z ] != "zone_start" && zkeys[ z ] != "zone_library" ) - { - zbarriers = get_all_zone_zbarriers( zkeys[ z ] ); - if ( !isDefined( zbarriers ) ) - { - z++; - continue; - } - else - { - _a155 = zbarriers; - _k155 = getFirstArrayKey( _a155 ); - while ( isDefined( _k155 ) ) - { - zbarrier = _a155[ _k155 ]; - zbarrier_pieces = zbarrier getnumzbarrierpieces(); - i = 0; - while ( i < zbarrier_pieces ) - { - zbarrier hidezbarrierpiece( i ); - zbarrier setzbarrierpiecestate( i, "open" ); - i++; - } - wait 0,05; - _k155 = getNextArrayKey( _a155, _k155 ); - } - } - } - z++; - } + zkeys = getarraykeys( level.zones ); + + for ( z = 0; z < level.zones.size; z++ ) + { + if ( zkeys[z] != "zone_start" && zkeys[z] != "zone_library" ) + { + zbarriers = get_all_zone_zbarriers( zkeys[z] ); + + if ( !isdefined( zbarriers ) ) + continue; + + foreach ( zbarrier in zbarriers ) + { + zbarrier_pieces = zbarrier getnumzbarrierpieces(); + + for ( i = 0; i < zbarrier_pieces; i++ ) + { + zbarrier hidezbarrierpiece( i ); + zbarrier setzbarrierpiecestate( i, "open" ); + } + + wait 0.05; + } + } + } } get_all_zone_zbarriers( zone_name ) { - if ( !isDefined( zone_name ) ) - { - return undefined; - } - zone = level.zones[ zone_name ]; - return zone.zbarriers; + if ( !isdefined( zone_name ) ) + return undefined; + + zone = level.zones[zone_name]; + return zone.zbarriers; } blundergat_change_hintstring( hint_string ) { - self notify( "new_change_hint_string" ); - self endon( "new_change_hint_string" ); - while ( isDefined( self.is_locked ) && self.is_locked ) - { - wait 0,05; - } - self sethintstring( hint_string ); - wait 0,05; - self sethintstring( hint_string ); + self notify( "new_change_hint_string" ); + self endon( "new_change_hint_string" ); + + while ( isdefined( self.is_locked ) && self.is_locked ) + wait 0.05; + + self sethintstring( hint_string ); + wait 0.05; + self sethintstring( hint_string ); } +#using_animtree("fxanim_props"); + blundergat_upgrade_station() { - t_upgrade = getent( "blundergat_upgrade", "targetname" ); - t_upgrade sethintstring( &"ZM_PRISON_CONVERT_START" ); - waittill_crafted( "packasplat" ); - m_converter = t_upgrade.m_upgrade_machine; - v_angles = m_converter gettagangles( "tag_origin" ); - v_weapon_origin_offset = ( ( anglesToForward( v_angles ) * 1 ) + ( anglesToRight( v_angles ) * 10 ) ) + ( anglesToUp( v_angles ) * 1,75 ); - v_weapon_angles_offset = ( 0, 90, -90 ); - m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset; - m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset; - m_converter useanimtree( -1 ); - m_converter.fxanims[ "close" ] = %fxanim_zom_al_packasplat_start_anim; - m_converter.fxanims[ "inject" ] = %fxanim_zom_al_packasplat_idle_anim; - m_converter.fxanims[ "open" ] = %fxanim_zom_al_packasplat_end_anim; - m_converter.n_start_time = getanimlength( m_converter.fxanims[ "close" ] ); - m_converter.n_idle_time = getanimlength( m_converter.fxanims[ "inject" ] ); - m_converter.n_end_time = getanimlength( m_converter.fxanims[ "open" ] ); - while ( 1 ) - { - t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_START" ); - t_upgrade waittill( "trigger", player ); - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = t_upgrade [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - str_valid_weapon = undefined; - if ( player hasweapon( "blundergat_zm" ) ) - { - str_valid_weapon = "blundergat_zm"; - } - else - { - if ( player hasweapon( "blundergat_upgraded_zm" ) ) - { - str_valid_weapon = "blundergat_upgraded_zm"; - } - } - if ( isDefined( str_valid_weapon ) ) - { - player takeweapon( str_valid_weapon ); - player.is_pack_splatting = 1; - t_upgrade setinvisibletoall(); - m_converter.worldgun = spawn_weapon_model( str_valid_weapon, undefined, m_converter.v_weapon_origin, m_converter.v_weapon_angles ); - m_converter blundergat_upgrade_station_inject( str_valid_weapon ); - t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_PICKUP" ); - if ( isDefined( player ) ) - { - t_upgrade setvisibletoplayer( player ); - t_upgrade thread wait_for_player_to_take( player, str_valid_weapon ); - } - t_upgrade thread wait_for_timeout(); - t_upgrade waittill_any( "acid_timeout", "acid_taken" ); - if ( isDefined( player ) ) - { - player.is_pack_splatting = undefined; - } - m_converter.worldgun delete(); - wait 0,5; - t_upgrade setvisibletoall(); - continue; - } - else - { - t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_MISSING_BLUNDERGAT" ); - wait 2; - } - } + t_upgrade = getent( "blundergat_upgrade", "targetname" ); + t_upgrade sethintstring( &"ZM_PRISON_CONVERT_START" ); + waittill_crafted( "packasplat" ); + m_converter = t_upgrade.m_upgrade_machine; + v_angles = m_converter gettagangles( "tag_origin" ); + v_weapon_origin_offset = anglestoforward( v_angles ) * 1 + anglestoright( v_angles ) * 10 + anglestoup( v_angles ) * 1.75; + v_weapon_angles_offset = ( 0, 90, -90 ); + m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset; + m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset; + m_converter useanimtree( -1 ); + m_converter.fxanims["close"] = %fxanim_zom_al_packasplat_start_anim; + m_converter.fxanims["inject"] = %fxanim_zom_al_packasplat_idle_anim; + m_converter.fxanims["open"] = %fxanim_zom_al_packasplat_end_anim; + m_converter.n_start_time = getanimlength( m_converter.fxanims["close"] ); + m_converter.n_idle_time = getanimlength( m_converter.fxanims["inject"] ); + m_converter.n_end_time = getanimlength( m_converter.fxanims["open"] ); + + while ( true ) + { + t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_START" ); + + t_upgrade waittill( "trigger", player ); + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = t_upgrade [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + str_valid_weapon = undefined; + + if ( player hasweapon( "blundergat_zm" ) ) + str_valid_weapon = "blundergat_zm"; + else if ( player hasweapon( "blundergat_upgraded_zm" ) ) + str_valid_weapon = "blundergat_upgraded_zm"; + + if ( isdefined( str_valid_weapon ) ) + { + player takeweapon( str_valid_weapon ); + player.is_pack_splatting = 1; + t_upgrade setinvisibletoall(); + m_converter.worldgun = spawn_weapon_model( str_valid_weapon, undefined, m_converter.v_weapon_origin, m_converter.v_weapon_angles ); + m_converter blundergat_upgrade_station_inject( str_valid_weapon ); + t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_PICKUP" ); + + if ( isdefined( player ) ) + { + t_upgrade setvisibletoplayer( player ); + t_upgrade thread wait_for_player_to_take( player, str_valid_weapon ); + } + + t_upgrade thread wait_for_timeout(); + t_upgrade waittill_any( "acid_timeout", "acid_taken" ); + + if ( isdefined( player ) ) + player.is_pack_splatting = undefined; + + m_converter.worldgun delete(); + wait 0.5; + t_upgrade setvisibletoall(); + } + else + { + t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_MISSING_BLUNDERGAT" ); + wait 2; + } + } } wait_for_player_to_take( player, str_valid_weapon ) { - self endon( "acid_timeout" ); - player endon( "disconnect" ); - while ( 1 ) - { - self waittill( "trigger", trigger_player ); - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - if ( trigger_player == player ) - { - current_weapon = player getcurrentweapon(); - if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) - { - self notify( "acid_taken" ); - player notify( "acid_taken" ); - weapon_limit = 2; - primaries = player getweaponslistprimaries(); - if ( isDefined( primaries ) && primaries.size >= weapon_limit ) - { - player takeweapon( current_weapon ); - } - str_new_weapon = undefined; - if ( str_valid_weapon == "blundergat_zm" ) - { - str_new_weapon = "blundersplat_zm"; - } - else - { - str_new_weapon = "blundersplat_upgraded_zm"; - } - if ( player hasweapon( "blundersplat_zm" ) ) - { - player givemaxammo( "blundersplat_zm" ); - } - else if ( player hasweapon( "blundersplat_upgraded_zm" ) ) - { - player givemaxammo( "blundersplat_upgraded_zm" ); - } - else - { - player giveweapon( str_new_weapon ); - player switchtoweapon( str_new_weapon ); - } - player thread do_player_general_vox( "general", "player_recieves_blundersplat" ); - player notify( "player_obtained_acidgat" ); - player thread player_lost_blundersplat_watcher(); - return; - } - } - } + self endon( "acid_timeout" ); + player endon( "disconnect" ); + + while ( true ) + { + self waittill( "trigger", trigger_player ); + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( trigger_player == player ) + { + current_weapon = player getcurrentweapon(); + + if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active() ) + { + self notify( "acid_taken" ); + player notify( "acid_taken" ); + weapon_limit = 2; + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries ) && primaries.size >= weapon_limit ) + player takeweapon( current_weapon ); + + str_new_weapon = undefined; + + if ( str_valid_weapon == "blundergat_zm" ) + str_new_weapon = "blundersplat_zm"; + else + str_new_weapon = "blundersplat_upgraded_zm"; + + if ( player hasweapon( "blundersplat_zm" ) ) + player givemaxammo( "blundersplat_zm" ); + else if ( player hasweapon( "blundersplat_upgraded_zm" ) ) + player givemaxammo( "blundersplat_upgraded_zm" ); + else + { + player giveweapon( str_new_weapon ); + player switchtoweapon( str_new_weapon ); + } + + player thread do_player_general_vox( "general", "player_recieves_blundersplat" ); + player notify( "player_obtained_acidgat" ); + player thread player_lost_blundersplat_watcher(); + return; + } + } + } } wait_for_timeout() { - self endon( "acid_taken" ); - wait 15; - self notify( "acid_timeout" ); + self endon( "acid_taken" ); + wait 15; + self notify( "acid_timeout" ); } blundergat_upgrade_station_inject( str_weapon_model ) { - wait 0,5; - self playsound( "zmb_acidgat_upgrade_machine" ); - self setanim( self.fxanims[ "close" ], 1, 0, 1 ); - wait self.n_start_time; - i = 0; - while ( i < 3 ) - { - self setanim( self.fxanims[ "inject" ], 1, 0, 1 ); - wait self.n_idle_time; - i++; - } - self.worldgun delete(); - if ( str_weapon_model == "blundergat_zm" ) - { - self.worldgun = spawn_weapon_model( "blundersplat_zm", undefined, self.v_weapon_origin, self.v_weapon_angles ); - } - else - { - self.worldgun = spawn_weapon_model( "blundersplat_upgraded_zm", undefined, self.v_weapon_origin, self.v_weapon_angles ); - } - self setanim( self.fxanims[ "open" ], 1, 0, 1 ); - wait self.n_end_time; - wait 0,5; + wait 0.5; + self playsound( "zmb_acidgat_upgrade_machine" ); + self setanim( self.fxanims["close"], 1, 0, 1 ); + wait( self.n_start_time ); + + for ( i = 0; i < 3; i++ ) + { + self setanim( self.fxanims["inject"], 1, 0, 1 ); + wait( self.n_idle_time ); + } + + self.worldgun delete(); + + if ( str_weapon_model == "blundergat_zm" ) + self.worldgun = spawn_weapon_model( "blundersplat_zm", undefined, self.v_weapon_origin, self.v_weapon_angles ); + else + self.worldgun = spawn_weapon_model( "blundersplat_upgraded_zm", undefined, self.v_weapon_origin, self.v_weapon_angles ); + + self setanim( self.fxanims["open"], 1, 0, 1 ); + wait( self.n_end_time ); + wait 0.5; } player_lost_blundersplat_watcher() { - while ( isDefined( self ) ) - { - if ( isalive( self ) ) - { - primaries = self getweaponslistprimaries(); - if ( !isinarray( primaries, "blundersplat_zm" ) && !isinarray( primaries, "blundersplat_upgraded_zm" ) ) - { - if ( isDefined( self.afterlife ) && !self.afterlife ) - { - return; - } - } - } - else - { - wait 1; - } - } + while ( isdefined( self ) ) + { + if ( isalive( self ) ) + { + primaries = self getweaponslistprimaries(); + + if ( !isinarray( primaries, "blundersplat_zm" ) && !isinarray( primaries, "blundersplat_upgraded_zm" ) ) + { + if ( !( isdefined( self.afterlife ) && self.afterlife ) ) + break; + } + } + + wait 1.0; + } } player_lightning_manager() { - self endon( "disconnect" ); - self.b_lightning = 0; - a_bad_zones[ 0 ] = "zone_dryer"; - a_bad_zones[ 1 ] = "zone_studio"; - a_bad_zones[ 2 ] = "zone_citadel_stairs"; - a_bad_zones[ 3 ] = "cellblock_shower"; - a_bad_zones[ 4 ] = "zone_citadel"; - a_bad_zones[ 5 ] = "zone_infirmary"; - a_bad_zones[ 6 ] = "zone_infirmary_roof"; - a_bad_zones[ 7 ] = "zone_citadel_shower"; - while ( 1 ) - { - str_player_zone = self get_player_zone(); - while ( !isDefined( str_player_zone ) ) - { - wait 1; - } - if ( isDefined( level.hostmigrationtimer ) ) - { - level waittill( "host_migration_end" ); - self.b_lightning = 0; - self setclientfieldtoplayer( "toggle_lightning", 0 ); - wait 1; - } - while ( isDefined( self.afterlife ) || self.afterlife && isDefined( self.scary_lightning ) && self.scary_lightning ) - { - self.b_lightning = 0; - self setclientfieldtoplayer( "toggle_lightning", 0 ); - while ( isDefined( self.afterlife ) || self.afterlife && isDefined( self.scary_lightning ) && self.scary_lightning ) - { - wait 0,05; - } - } - if ( isDefined( self.b_lightning ) && self.b_lightning ) - { - _a496 = a_bad_zones; - _k496 = getFirstArrayKey( _a496 ); - while ( isDefined( _k496 ) ) - { - str_bad_zone = _a496[ _k496 ]; - if ( str_player_zone == str_bad_zone ) - { - self.b_lightning = 0; - self setclientfieldtoplayer( "toggle_lightning", 0 ); - break; - } - else - { - _k496 = getNextArrayKey( _a496, _k496 ); - } - } - } - else self.b_lightning = 1; - _a512 = a_bad_zones; - _k512 = getFirstArrayKey( _a512 ); - while ( isDefined( _k512 ) ) - { - str_bad_zone = _a512[ _k512 ]; - if ( str_player_zone == str_bad_zone ) - { - self.b_lightning = 0; - } - _k512 = getNextArrayKey( _a512, _k512 ); - } - if ( isDefined( self.b_lightning ) && self.b_lightning ) - { - self setclientfieldtoplayer( "toggle_lightning", 1 ); - } - wait 1; - } + self endon( "disconnect" ); + self.b_lightning = 0; + a_bad_zones[0] = "zone_dryer"; + a_bad_zones[1] = "zone_studio"; + a_bad_zones[2] = "zone_citadel_stairs"; + a_bad_zones[3] = "cellblock_shower"; + a_bad_zones[4] = "zone_citadel"; + a_bad_zones[5] = "zone_infirmary"; + a_bad_zones[6] = "zone_infirmary_roof"; + a_bad_zones[7] = "zone_citadel_shower"; + + while ( true ) + { + str_player_zone = self get_player_zone(); + + if ( !isdefined( str_player_zone ) ) + { + wait 1; + continue; + } + + if ( isdefined( level.hostmigrationtimer ) ) + { + level waittill( "host_migration_end" ); + + self.b_lightning = 0; + self setclientfieldtoplayer( "toggle_lightning", 0 ); + wait 1; + } + + if ( isdefined( self.afterlife ) && self.afterlife || isdefined( self.scary_lightning ) && self.scary_lightning ) + { + self.b_lightning = 0; + self setclientfieldtoplayer( "toggle_lightning", 0 ); + + while ( isdefined( self.afterlife ) && self.afterlife || isdefined( self.scary_lightning ) && self.scary_lightning ) + wait 0.05; + } + + if ( isdefined( self.b_lightning ) && self.b_lightning ) + { + foreach ( str_bad_zone in a_bad_zones ) + { + if ( str_player_zone == str_bad_zone ) + { + self.b_lightning = 0; + self setclientfieldtoplayer( "toggle_lightning", 0 ); + break; + } + } + } + else + { + self.b_lightning = 1; + + foreach ( str_bad_zone in a_bad_zones ) + { + if ( str_player_zone == str_bad_zone ) + self.b_lightning = 0; + } + + if ( isdefined( self.b_lightning ) && self.b_lightning ) + self setclientfieldtoplayer( "toggle_lightning", 1 ); + } + + wait 1; + } } setting_tutorial_hud() { - client_hint = newclienthudelem( self ); - client_hint.x = 320; - client_hint.y = 220; - client_hint.alignx = "center"; - client_hint.aligny = "bottom"; - client_hint.fontscale = 1,6; - client_hint.alpha = 1; - client_hint.sort = 20; - return client_hint; + client_hint = newclienthudelem( self ); + client_hint.x = 320; + client_hint.y = 220; + client_hint.alignx = "center"; + client_hint.aligny = "bottom"; + client_hint.fontscale = 1.6; + client_hint.alpha = 1; + client_hint.sort = 20; + return client_hint; } riotshield_tutorial_hint() { - self waittill( "alcatraz_shield_zm_given" ); - wait 4; - hud = setting_tutorial_hud(); - hud settext( &"ZM_PRISON_RIOTSHIELD_ATTACK" ); - self waittill_notify_or_timeout( "shield_attack", 3 ); - hud settext( &"ZM_PRISON_RIOTSHIELD_DEPLOY" ); - self waittill_notify_or_timeout( "shield_attack", 3 ); - hud destroy(); + self waittill( "alcatraz_shield_zm_given" ); + + wait 4; + hud = setting_tutorial_hud(); + hud settext( &"ZM_PRISON_RIOTSHIELD_ATTACK" ); + self waittill_notify_or_timeout( "shield_attack", 3 ); + hud settext( &"ZM_PRISON_RIOTSHIELD_DEPLOY" ); + self waittill_notify_or_timeout( "shield_attack", 3 ); + hud destroy(); } check_solo_status() { - if ( getnumexpectedplayers() == 1 || !sessionmodeisonlinegame() && !sessionmodeisprivate() ) - { - level.is_forever_solo_game = 1; - } - else - { - level.is_forever_solo_game = 0; - } + if ( getnumexpectedplayers() == 1 && ( !sessionmodeisonlinegame() || !sessionmodeisprivate() ) ) + level.is_forever_solo_game = 1; + else + level.is_forever_solo_game = 0; } disable_powerup_if_player_on_bridge() { - self endon( "disconnect" ); - flag_wait( "afterlife_start_over" ); - while ( 1 ) - { - if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) - { - if ( flag( "zombie_drop_powerups" ) ) - { - flag_clear( "zombie_drop_powerups" ); - } - } - wait 1; - } + self endon( "disconnect" ); + flag_wait( "afterlife_start_over" ); + + while ( true ) + { + if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) + { + if ( flag( "zombie_drop_powerups" ) ) + flag_clear( "zombie_drop_powerups" ); + } + + wait 1; + } } enable_powerup_if_no_player_on_bridge() { - flag_wait( "afterlife_start_over" ); - while ( 1 ) - { - n_player_total = 0; - n_player_total += get_players_in_zone( "zone_golden_gate_bridge" ); - if ( n_player_total == 0 && !flag( "zombie_drop_powerups" ) ) - { - flag_set( "zombie_drop_powerups" ); - } - wait 1; - } + flag_wait( "afterlife_start_over" ); + + while ( true ) + { + n_player_total = 0; + n_player_total += get_players_in_zone( "zone_golden_gate_bridge" ); + + if ( n_player_total == 0 && !flag( "zombie_drop_powerups" ) ) + flag_set( "zombie_drop_powerups" ); + + wait 1; + } } init_level_specific_audio() { - level.oh_shit_vo_cooldown = 0; - level.wolf_kill_vo_cooldown = 0; - level.wallbuys_purchased = 0; - setdvar( "zombie_kills", "5" ); - setdvar( "zombie_kill_timer", "5" ); - if ( is_classic() ) - { - level._audio_custom_response_line = ::alcatraz_audio_custom_response_line; - level.audio_get_mod_type = ::alcatraz_audio_get_mod_type_override; - level.custom_kill_damaged_vo = ::maps/mp/zombies/_zm_audio::custom_kill_damaged_vo; - level._custom_zombie_oh_shit_vox_func = ::alcatraz_custom_zombie_oh_shit_vox; - level.gib_on_damage = ::alcatraz_custom_crawler_spawned_vo; - level thread alcatraz_first_magic_box_seen_vo(); - level._audio_custom_weapon_check = ::alcatraz_audio_custom_weapon_check; - level thread brutus_spawn_vo_watcher(); - level thread brutus_killed_vo_watcher(); - } - level thread setup_conversation_vo(); - alcatraz_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined ); - alcatraz_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined ); - alcatraz_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined ); - alcatraz_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "perk", "specialty_rof", "perk_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "perk", "specialty_deadshot", "perk_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "perk", "specialty_grenadepulldeath", "perk_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0", "headshot_respond_to_plr_0", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1", "headshot_respond_to_plr_1", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2", "headshot_respond_to_plr_2", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3", "headshot_respond_to_plr_3", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_generic", "headshot_respond_generic", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "kill", "retriever", "kill_retriever", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "redeemer", "kill_redeemer", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "blundergat", "kill_blundergat", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "acidgat", "kill_acidgat", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "death_machine", "kill_death_machine", undefined, 15 ); - alcatraz_add_player_dialogue( "player", "kill", "wolf_kill", "wolf_kill", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "revive_up", "heal_revived", "revive_player", 100 ); - alcatraz_add_player_dialogue( "player", "general", "revive_player", "revive_player", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_pickup", "build_pickup", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_swap", "build_swap", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_add", "build_add", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_final", "build_final", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_bsm_pickup", "build_bsm_pickup", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_bsm_final", "build_bsm_final", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "player_recieves_blundersplat", "build_bsm_plc", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_plc", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 50 ); - alcatraz_add_player_dialogue( "player", "general", "discover_box", "discover_box", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 25 ); - alcatraz_add_player_dialogue( "player", "general", "wpck_pap", "wpck_pap", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "portal_clue", "portal_clue", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "killswitch_clue", "killswitch_clue", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "power_off", "power_off", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "power_on", "power_on", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "electric_zap", "electric_zap", undefined, 25 ); - alcatraz_add_player_dialogue( "player", "general", "need_electricity", "need_electricity", undefined, 25 ); - alcatraz_add_player_dialogue( "player", "general", "use_gondola", "use_gondola", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "discover_trap", "discover_trap", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "start_trap", "start_trap", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_0", "surrounded_respond_to_plr_0", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_1", "surrounded_respond_to_plr_1", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_2", "surrounded_respond_to_plr_2", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_3", "surrounded_respond_to_plr_3", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "wolf_complete", "wolf_complete", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "wolf_final", "wolf_final", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "wolf_encounter", "wolf_encounter", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "brutus_encounter", "brutus_encounter", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "brutus_arrival", "brutus_arrival", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "brutus_reaction", "brutus_reaction", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "general", "brutus_defeated", "brutus_defeated", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "find_map", "find_map", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "response_map", "response_map", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_key", "sidequest_key", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_key_response", "sidequest_key_response", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_sheets", "sidequest_sheets", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_valves", "sidequest_valves", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_engine", "sidequest_engine", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_rigging", "sidequest_rigging", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_oxygen", "sidequest_oxygen", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts1_prog", "sidequest_parts1_prog", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts2_prog", "sidequest_parts2_prog", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts3_prog", "sidequest_parts3_prog", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts4_prog", "sidequest_parts4_prog", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_all_parts", "sidequest_all_parts", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "sidequest_roof_nag", "sidequest_roof_nag", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "build_plane", "build_plane", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "plane_takeoff", "plane_takeoff", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "plane_flight", "plane_flight", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "plane_crash", "plane_crash", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "free_fall", "free_fall", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "zombie_arrive_gg", "zombie_arrive_gg", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "chair_electrocution", "chair_electrocution", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "fuel_pickup", "fuel_pickup", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "start_2", "start_2", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "pick_up_easter_egg", "pick_up_egg", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "secret_poster", "secret_poster", undefined, 100 ); - alcatraz_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 ); + level.oh_shit_vo_cooldown = 0; + level.wolf_kill_vo_cooldown = 0; + level.wallbuys_purchased = 0; + setdvar( "zombie_kills", "5" ); + setdvar( "zombie_kill_timer", "5" ); + + if ( is_classic() ) + { + level._audio_custom_response_line = ::alcatraz_audio_custom_response_line; + level.audio_get_mod_type = ::alcatraz_audio_get_mod_type_override; + level.custom_kill_damaged_vo = maps\mp\zombies\_zm_audio::custom_kill_damaged_vo; + level._custom_zombie_oh_shit_vox_func = ::alcatraz_custom_zombie_oh_shit_vox; + level.gib_on_damage = ::alcatraz_custom_crawler_spawned_vo; + level thread alcatraz_first_magic_box_seen_vo(); + level._audio_custom_weapon_check = ::alcatraz_audio_custom_weapon_check; + level thread brutus_spawn_vo_watcher(); + level thread brutus_killed_vo_watcher(); + } + + level thread setup_conversation_vo(); + alcatraz_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined ); + alcatraz_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined ); + alcatraz_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined ); + alcatraz_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "perk", "specialty_rof", "perk_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "perk", "specialty_deadshot", "perk_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "perk", "specialty_grenadepulldeath", "perk_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0", "headshot_respond_to_plr_0", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1", "headshot_respond_to_plr_1", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2", "headshot_respond_to_plr_2", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3", "headshot_respond_to_plr_3", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_generic", "headshot_respond_generic", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "kill", "retriever", "kill_retriever", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "redeemer", "kill_redeemer", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "blundergat", "kill_blundergat", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "acidgat", "kill_acidgat", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "death_machine", "kill_death_machine", undefined, 15 ); + alcatraz_add_player_dialogue( "player", "kill", "wolf_kill", "wolf_kill", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "revive_up", "heal_revived", "revive_player", 100 ); + alcatraz_add_player_dialogue( "player", "general", "revive_player", "revive_player", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_pickup", "build_pickup", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_swap", "build_swap", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_add", "build_add", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_final", "build_final", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_bsm_pickup", "build_bsm_pickup", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_bsm_final", "build_bsm_final", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "player_recieves_blundersplat", "build_bsm_plc", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_plc", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 50 ); + alcatraz_add_player_dialogue( "player", "general", "discover_box", "discover_box", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 25 ); + alcatraz_add_player_dialogue( "player", "general", "wpck_pap", "wpck_pap", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "portal_clue", "portal_clue", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "killswitch_clue", "killswitch_clue", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "power_off", "power_off", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "power_on", "power_on", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "electric_zap", "electric_zap", undefined, 25 ); + alcatraz_add_player_dialogue( "player", "general", "need_electricity", "need_electricity", undefined, 25 ); + alcatraz_add_player_dialogue( "player", "general", "use_gondola", "use_gondola", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "discover_trap", "discover_trap", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "start_trap", "start_trap", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_0", "surrounded_respond_to_plr_0", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_1", "surrounded_respond_to_plr_1", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_2", "surrounded_respond_to_plr_2", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_3", "surrounded_respond_to_plr_3", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "wolf_complete", "wolf_complete", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "wolf_final", "wolf_final", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "wolf_encounter", "wolf_encounter", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "brutus_encounter", "brutus_encounter", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "brutus_arrival", "brutus_arrival", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "brutus_reaction", "brutus_reaction", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "general", "brutus_defeated", "brutus_defeated", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "find_map", "find_map", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "response_map", "response_map", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_key", "sidequest_key", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_key_response", "sidequest_key_response", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_sheets", "sidequest_sheets", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_valves", "sidequest_valves", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_engine", "sidequest_engine", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_rigging", "sidequest_rigging", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_oxygen", "sidequest_oxygen", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts1_prog", "sidequest_parts1_prog", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts2_prog", "sidequest_parts2_prog", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts3_prog", "sidequest_parts3_prog", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts4_prog", "sidequest_parts4_prog", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_all_parts", "sidequest_all_parts", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "sidequest_roof_nag", "sidequest_roof_nag", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "build_plane", "build_plane", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "plane_takeoff", "plane_takeoff", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "plane_flight", "plane_flight", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "plane_crash", "plane_crash", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "free_fall", "free_fall", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "zombie_arrive_gg", "zombie_arrive_gg", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "chair_electrocution", "chair_electrocution", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "fuel_pickup", "fuel_pickup", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "start_2", "start_2", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "pick_up_easter_egg", "pick_up_egg", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "secret_poster", "secret_poster", undefined, 100 ); + alcatraz_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 ); } alcatraz_add_player_dialogue( speaker, category, type, alias, response, chance ) { - level.vox zmbvoxadd( speaker, category, type, alias, response ); - if ( isDefined( chance ) ) - { - add_vox_response_chance( type, chance ); - } + level.vox zmbvoxadd( speaker, category, type, alias, response ); + + if ( isdefined( chance ) ) + add_vox_response_chance( type, chance ); } alcatraz_audio_get_mod_type_override( impact, mod, weapon, zombie, instakill, dist, player ) { - close_dist = 4096; - med_dist = 15376; - far_dist = 75625; - a_str_mod = []; - if ( isDefined( zombie.my_soul_catcher ) ) - { - if ( isDefined( zombie.my_soul_catcher.wolf_kill_cooldown ) && !zombie.my_soul_catcher.wolf_kill_cooldown ) - { - if ( isDefined( player.soul_catcher_cooldown ) && !player.soul_catcher_cooldown ) - { - if ( isDefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received > 0 ) - { - a_str_mod[ a_str_mod.size ] = "wolf_kill"; - } - else - { - if ( isDefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received == 0 ) - { - if ( isDefined( level.wolf_encounter_vo_played ) && !level.wolf_encounter_vo_played ) - { - if ( level.soul_catchers_charged == 0 ) - { - zombie.my_soul_catcher thread maps/mp/zm_alcatraz_weap_quest::first_wolf_encounter_vo(); - } - } - } - } - } - } - } - if ( weapon == "blundergat_zm" || weapon == "blundergat_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "blundergat"; - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "blundersplat_explosive_dart_zm" ) - { - a_str_mod[ a_str_mod.size ] = "acidgat"; - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "bouncing_tomahawk_zm" ) - { - a_str_mod[ a_str_mod.size ] = "retriever"; - } - if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "upgraded_tomahawk_zm" ) - { - a_str_mod[ a_str_mod.size ] = "redeemer"; - } - if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" ) - { - a_str_mod[ a_str_mod.size ] = "death_machine"; - } - if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) - { - a_str_mod[ a_str_mod.size ] = "headshot"; - } - if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && isDefined( zombie.is_on_fire ) && !zombie.is_on_fire ) - { - if ( !isinarray( a_str_mod, "retriever" ) && !isinarray( a_str_mod, "redeemer" ) ) - { - if ( !instakill ) - { - a_str_mod[ a_str_mod.size ] = "explosive"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - } - if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" ) - { - if ( dist > far_dist ) - { - if ( !instakill ) - { - a_str_mod[ a_str_mod.size ] = "raygun"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - } - if ( instakill ) - { - if ( mod == "MOD_MELEE" ) - { - a_str_mod[ a_str_mod.size ] = "melee_instakill"; - } - else - { - a_str_mod[ a_str_mod.size ] = "weapon_instakill"; - } - } - if ( mod != "MOD_MELEE" && !zombie.has_legs ) - { - a_str_mod[ a_str_mod.size ] = "crawler"; - } - if ( mod != "MOD_BURNED" && dist < close_dist ) - { - a_str_mod[ a_str_mod.size ] = "closekill"; - } - if ( a_str_mod.size == 0 ) - { - str_mod_final = "default"; - } - else if ( a_str_mod.size == 1 ) - { - str_mod_final = a_str_mod[ 0 ]; - } - else - { - i = 0; - while ( i < a_str_mod.size ) - { - if ( cointoss() ) - { - str_mod_final = a_str_mod[ i ]; - } - i++; - } - str_mod_final = a_str_mod[ randomint( a_str_mod.size ) ]; - } - if ( str_mod_final == "wolf_kill" ) - { - player thread wolf_kill_cooldown_watcher( zombie.my_soul_catcher ); - } - return str_mod_final; + close_dist = 4096; + med_dist = 15376; + far_dist = 75625; + a_str_mod = []; + + if ( isdefined( zombie.my_soul_catcher ) ) + { + if ( !( isdefined( zombie.my_soul_catcher.wolf_kill_cooldown ) && zombie.my_soul_catcher.wolf_kill_cooldown ) ) + { + if ( !( isdefined( player.soul_catcher_cooldown ) && player.soul_catcher_cooldown ) ) + { + if ( isdefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received > 0 ) + a_str_mod[a_str_mod.size] = "wolf_kill"; + else if ( isdefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received == 0 ) + { + if ( !( isdefined( level.wolf_encounter_vo_played ) && level.wolf_encounter_vo_played ) ) + { + if ( level.soul_catchers_charged == 0 ) + zombie.my_soul_catcher thread maps\mp\zm_alcatraz_weap_quest::first_wolf_encounter_vo(); + } + } + } + } + } + + if ( weapon == "blundergat_zm" || weapon == "blundergat_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "blundergat"; + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "blundersplat_explosive_dart_zm" ) + a_str_mod[a_str_mod.size] = "acidgat"; + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "bouncing_tomahawk_zm" ) + a_str_mod[a_str_mod.size] = "retriever"; + + if ( isdefined( zombie.damageweapon ) && zombie.damageweapon == "upgraded_tomahawk_zm" ) + a_str_mod[a_str_mod.size] = "redeemer"; + + if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" ) + a_str_mod[a_str_mod.size] = "death_machine"; + + if ( is_headshot( weapon, impact, mod ) && dist >= far_dist ) + a_str_mod[a_str_mod.size] = "headshot"; + + if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && !( isdefined( zombie.is_on_fire ) && zombie.is_on_fire ) ) + { + if ( !isinarray( a_str_mod, "retriever" ) && !isinarray( a_str_mod, "redeemer" ) ) + { + if ( !instakill ) + a_str_mod[a_str_mod.size] = "explosive"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + } + + if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" ) + { + if ( dist > far_dist ) + { + if ( !instakill ) + a_str_mod[a_str_mod.size] = "raygun"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + } + + if ( instakill ) + { + if ( mod == "MOD_MELEE" ) + a_str_mod[a_str_mod.size] = "melee_instakill"; + else + a_str_mod[a_str_mod.size] = "weapon_instakill"; + } + + if ( mod != "MOD_MELEE" && !zombie.has_legs ) + a_str_mod[a_str_mod.size] = "crawler"; + + if ( mod != "MOD_BURNED" && dist < close_dist ) + a_str_mod[a_str_mod.size] = "closekill"; + + if ( a_str_mod.size == 0 ) + str_mod_final = "default"; + else if ( a_str_mod.size == 1 ) + str_mod_final = a_str_mod[0]; + else + { + for ( i = 0; i < a_str_mod.size; i++ ) + { + if ( cointoss() ) + str_mod_final = a_str_mod[i]; + } + + str_mod_final = a_str_mod[randomint( a_str_mod.size )]; + } + + if ( str_mod_final == "wolf_kill" ) + player thread wolf_kill_cooldown_watcher( zombie.my_soul_catcher ); + + return str_mod_final; } wolf_kill_cooldown_watcher( soul_catcher ) { - self endon( "disconnect" ); - self waittill( "speaking", type ); - if ( type == "wolf_kill" ) - { - self.soul_catcher_cooldown = 1; - soul_catcher thread wolf_kill_cooldown(); - } + self endon( "disconnect" ); + + self waittill( "speaking", type ); + + if ( type == "wolf_kill" ) + { + self.soul_catcher_cooldown = 1; + soul_catcher thread wolf_kill_cooldown(); + } } wolf_kill_cooldown() { - self.wolf_kill_cooldown = 1; - wait 60; - self.wolf_kill_cooldown = 0; + self.wolf_kill_cooldown = 1; + wait 60; + self.wolf_kill_cooldown = 0; } setup_conversation_vo() { - level.conscience_vo = []; - level.conscience_vo[ "conscience_Finn_convo_1" ] = []; - level.conscience_vo[ "conscience_Finn_convo_1" ][ 0 ] = "vox_plr_0_finn_self_2_0"; - level.conscience_vo[ "conscience_Finn_convo_1" ][ 1 ] = "vox_plr_0_finn_self_2_1"; - level.conscience_vo[ "conscience_Finn_convo_1" ][ 2 ] = "vox_plr_0_finn_self_2_2"; - level.conscience_vo[ "conscience_Finn_convo_1" ][ 3 ] = "vox_plr_0_finn_self_2_3"; - level.conscience_vo[ "conscience_Finn_convo_1" ][ 4 ] = "vox_plr_0_finn_self_2_4"; - level.conscience_vo[ "conscience_Finn_convo_2" ] = []; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 0 ] = "vox_plr_0_finn_self_3_0"; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 1 ] = "vox_plr_0_finn_self_3_1"; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 2 ] = "vox_plr_0_finn_self_3_2"; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 3 ] = "vox_plr_0_finn_self_3_3"; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 4 ] = "vox_plr_0_finn_self_3_4"; - level.conscience_vo[ "conscience_Finn_convo_2" ][ 5 ] = "vox_plr_0_finn_self_3_5"; - level.conscience_vo[ "conscience_Sal_convo_1" ] = []; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 0 ] = "vox_plr_1_sal_self_2_0"; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 1 ] = "vox_plr_1_sal_self_2_1"; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 2 ] = "vox_plr_1_sal_self_2_2"; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 3 ] = "vox_plr_1_sal_self_2_3"; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 4 ] = "vox_plr_1_sal_self_2_4"; - level.conscience_vo[ "conscience_Sal_convo_1" ][ 5 ] = "vox_plr_1_sal_self_2_5"; - level.conscience_vo[ "conscience_Sal_convo_2" ] = []; - level.conscience_vo[ "conscience_Sal_convo_2" ][ 0 ] = "vox_plr_1_sal_self_3_0"; - level.conscience_vo[ "conscience_Sal_convo_2" ][ 1 ] = "vox_plr_1_sal_self_3_1"; - level.conscience_vo[ "conscience_Sal_convo_2" ][ 2 ] = "vox_plr_1_sal_self_3_2"; - level.conscience_vo[ "conscience_Sal_convo_2" ][ 3 ] = "vox_plr_1_sal_self_3_3"; - level.conscience_vo[ "conscience_Sal_convo_2" ][ 4 ] = "vox_plr_1_sal_self_3_4"; - level.conscience_vo[ "conscience_Billy_convo_1" ] = []; - level.conscience_vo[ "conscience_Billy_convo_1" ][ 0 ] = "vox_plr_2_billy_self_2_0"; - level.conscience_vo[ "conscience_Billy_convo_1" ][ 1 ] = "vox_plr_2_billy_self_2_1"; - level.conscience_vo[ "conscience_Billy_convo_1" ][ 2 ] = "vox_plr_2_billy_self_2_2"; - level.conscience_vo[ "conscience_Billy_convo_1" ][ 3 ] = "vox_plr_2_billy_self_2_3"; - level.conscience_vo[ "conscience_Billy_convo_1" ][ 4 ] = "vox_plr_2_billy_self_2_4"; - level.conscience_vo[ "conscience_Billy_convo_2" ] = []; - level.conscience_vo[ "conscience_Billy_convo_2" ][ 0 ] = "vox_plr_2_billy_self_3_0"; - level.conscience_vo[ "conscience_Billy_convo_2" ][ 1 ] = "vox_plr_2_billy_self_3_1"; - level.conscience_vo[ "conscience_Billy_convo_2" ][ 2 ] = "vox_plr_2_billy_self_3_2"; - level.conscience_vo[ "conscience_Billy_convo_2" ][ 3 ] = "vox_plr_2_billy_self_3_3"; - level.conscience_vo[ "conscience_Billy_convo_2" ][ 4 ] = "vox_plr_2_billy_self_3_4"; - level.conscience_vo[ "conscience_Arlington_convo_1" ] = []; - level.conscience_vo[ "conscience_Arlington_convo_1" ][ 0 ] = "vox_plr_3_arlington_self_2_0"; - level.conscience_vo[ "conscience_Arlington_convo_1" ][ 1 ] = "vox_plr_3_arlington_self_2_2"; - level.conscience_vo[ "conscience_Arlington_convo_1" ][ 2 ] = "vox_plr_3_arlington_self_2_3"; - level.conscience_vo[ "conscience_Arlington_convo_1" ][ 3 ] = "vox_plr_3_arlington_self_2_4"; - level.conscience_vo[ "conscience_Arlington_convo_1" ][ 4 ] = "vox_plr_3_arlington_self_2_5"; - level.conscience_vo[ "conscience_Arlington_convo_2" ] = []; - level.conscience_vo[ "conscience_Arlington_convo_2" ][ 0 ] = "vox_plr_3_arlington_self_3_0"; - level.conscience_vo[ "conscience_Arlington_convo_2" ][ 1 ] = "vox_plr_3_arlington_self_3_1"; - level.conscience_vo[ "conscience_Arlington_convo_2" ][ 2 ] = "vox_plr_3_arlington_self_3_2"; - level.conscience_vo[ "conscience_Arlington_convo_2" ][ 3 ] = "vox_plr_3_arlington_self_3_3"; - level.conscience_vo[ "conscience_Arlington_convo_2" ][ 4 ] = "vox_plr_3_arlington_self_3_4"; + level.conscience_vo = []; + level.conscience_vo["conscience_Finn_convo_1"] = []; + level.conscience_vo["conscience_Finn_convo_1"][0] = "vox_plr_0_finn_self_2_0"; + level.conscience_vo["conscience_Finn_convo_1"][1] = "vox_plr_0_finn_self_2_1"; + level.conscience_vo["conscience_Finn_convo_1"][2] = "vox_plr_0_finn_self_2_2"; + level.conscience_vo["conscience_Finn_convo_1"][3] = "vox_plr_0_finn_self_2_3"; + level.conscience_vo["conscience_Finn_convo_1"][4] = "vox_plr_0_finn_self_2_4"; + level.conscience_vo["conscience_Finn_convo_2"] = []; + level.conscience_vo["conscience_Finn_convo_2"][0] = "vox_plr_0_finn_self_3_0"; + level.conscience_vo["conscience_Finn_convo_2"][1] = "vox_plr_0_finn_self_3_1"; + level.conscience_vo["conscience_Finn_convo_2"][2] = "vox_plr_0_finn_self_3_2"; + level.conscience_vo["conscience_Finn_convo_2"][3] = "vox_plr_0_finn_self_3_3"; + level.conscience_vo["conscience_Finn_convo_2"][4] = "vox_plr_0_finn_self_3_4"; + level.conscience_vo["conscience_Finn_convo_2"][5] = "vox_plr_0_finn_self_3_5"; + level.conscience_vo["conscience_Sal_convo_1"] = []; + level.conscience_vo["conscience_Sal_convo_1"][0] = "vox_plr_1_sal_self_2_0"; + level.conscience_vo["conscience_Sal_convo_1"][1] = "vox_plr_1_sal_self_2_1"; + level.conscience_vo["conscience_Sal_convo_1"][2] = "vox_plr_1_sal_self_2_2"; + level.conscience_vo["conscience_Sal_convo_1"][3] = "vox_plr_1_sal_self_2_3"; + level.conscience_vo["conscience_Sal_convo_1"][4] = "vox_plr_1_sal_self_2_4"; + level.conscience_vo["conscience_Sal_convo_1"][5] = "vox_plr_1_sal_self_2_5"; + level.conscience_vo["conscience_Sal_convo_2"] = []; + level.conscience_vo["conscience_Sal_convo_2"][0] = "vox_plr_1_sal_self_3_0"; + level.conscience_vo["conscience_Sal_convo_2"][1] = "vox_plr_1_sal_self_3_1"; + level.conscience_vo["conscience_Sal_convo_2"][2] = "vox_plr_1_sal_self_3_2"; + level.conscience_vo["conscience_Sal_convo_2"][3] = "vox_plr_1_sal_self_3_3"; + level.conscience_vo["conscience_Sal_convo_2"][4] = "vox_plr_1_sal_self_3_4"; + level.conscience_vo["conscience_Billy_convo_1"] = []; + level.conscience_vo["conscience_Billy_convo_1"][0] = "vox_plr_2_billy_self_2_0"; + level.conscience_vo["conscience_Billy_convo_1"][1] = "vox_plr_2_billy_self_2_1"; + level.conscience_vo["conscience_Billy_convo_1"][2] = "vox_plr_2_billy_self_2_2"; + level.conscience_vo["conscience_Billy_convo_1"][3] = "vox_plr_2_billy_self_2_3"; + level.conscience_vo["conscience_Billy_convo_1"][4] = "vox_plr_2_billy_self_2_4"; + level.conscience_vo["conscience_Billy_convo_2"] = []; + level.conscience_vo["conscience_Billy_convo_2"][0] = "vox_plr_2_billy_self_3_0"; + level.conscience_vo["conscience_Billy_convo_2"][1] = "vox_plr_2_billy_self_3_1"; + level.conscience_vo["conscience_Billy_convo_2"][2] = "vox_plr_2_billy_self_3_2"; + level.conscience_vo["conscience_Billy_convo_2"][3] = "vox_plr_2_billy_self_3_3"; + level.conscience_vo["conscience_Billy_convo_2"][4] = "vox_plr_2_billy_self_3_4"; + level.conscience_vo["conscience_Arlington_convo_1"] = []; + level.conscience_vo["conscience_Arlington_convo_1"][0] = "vox_plr_3_arlington_self_2_0"; + level.conscience_vo["conscience_Arlington_convo_1"][1] = "vox_plr_3_arlington_self_2_2"; + level.conscience_vo["conscience_Arlington_convo_1"][2] = "vox_plr_3_arlington_self_2_3"; + level.conscience_vo["conscience_Arlington_convo_1"][3] = "vox_plr_3_arlington_self_2_4"; + level.conscience_vo["conscience_Arlington_convo_1"][4] = "vox_plr_3_arlington_self_2_5"; + level.conscience_vo["conscience_Arlington_convo_2"] = []; + level.conscience_vo["conscience_Arlington_convo_2"][0] = "vox_plr_3_arlington_self_3_0"; + level.conscience_vo["conscience_Arlington_convo_2"][1] = "vox_plr_3_arlington_self_3_1"; + level.conscience_vo["conscience_Arlington_convo_2"][2] = "vox_plr_3_arlington_self_3_2"; + level.conscience_vo["conscience_Arlington_convo_2"][3] = "vox_plr_3_arlington_self_3_3"; + level.conscience_vo["conscience_Arlington_convo_2"][4] = "vox_plr_3_arlington_self_3_4"; } alcatraz_custom_zombie_oh_shit_vox() { - self endon( "death_or_disconnect" ); - while ( 1 ) - { - wait 1; - if ( isDefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown ) - { - continue; - } - players = get_players(); - zombs = get_round_enemy_array(); - if ( players.size <= 1 ) - { - n_distance = 250; - n_zombies = 5; - n_chance = 30; - n_cooldown_time = 20; - } - else - { - n_distance = 250; - n_zombies = 5; - n_chance = 30; - n_cooldown_time = 15; - } - close_zombs = 0; - i = 0; - while ( i < zombs.size ) - { - if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) ) - { - if ( distancesquared( zombs[ i ].origin, self.origin ) < ( n_distance * n_distance ) ) - { - close_zombs++; - } - } - i++; - } - if ( close_zombs >= n_zombies ) - { - if ( randomint( 100 ) < n_chance && isDefined( self.isonbus ) && !self.isonbus ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "oh_shit" ); - self thread global_oh_shit_cooldown_timer( n_cooldown_time ); - wait n_cooldown_time; - } - } - } + self endon( "death_or_disconnect" ); + + while ( true ) + { + wait 1; + + if ( isdefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown ) + continue; + + players = get_players(); + zombs = get_round_enemy_array(); + + if ( players.size <= 1 ) + { + n_distance = 250; + n_zombies = 5; + n_chance = 30; + n_cooldown_time = 20; + } + else + { + n_distance = 250; + n_zombies = 5; + n_chance = 30; + n_cooldown_time = 15; + } + + close_zombs = 0; + + for ( i = 0; i < zombs.size; i++ ) + { + if ( isdefined( zombs[i].favoriteenemy ) && zombs[i].favoriteenemy == self || !isdefined( zombs[i].favoriteenemy ) ) + { + if ( distancesquared( zombs[i].origin, self.origin ) < n_distance * n_distance ) + close_zombs++; + } + } + + if ( close_zombs >= n_zombies ) + { + if ( randomint( 100 ) < n_chance && !( isdefined( self.isonbus ) && self.isonbus ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "oh_shit" ); + self thread global_oh_shit_cooldown_timer( n_cooldown_time ); + wait( n_cooldown_time ); + } + } + } } global_oh_shit_cooldown_timer( n_cooldown_time ) { - self endon( "disconnect" ); - self.oh_shit_vo_cooldown = 1; - wait n_cooldown_time; - self.oh_shit_vo_cooldown = 0; + self endon( "disconnect" ); + self.oh_shit_vo_cooldown = 1; + wait( n_cooldown_time ); + self.oh_shit_vo_cooldown = 0; } alcatraz_custom_crawler_spawned_vo() { - self endon( "death" ); - if ( isDefined( self.a.gib_ref ) && isalive( self ) ) - { - if ( self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" ) - { - if ( isDefined( self.attacker ) && isplayer( self.attacker ) ) - { - if ( isDefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown ) - { - return; - } - rand = randomintrange( 0, 100 ); - if ( rand < 15 ) - { - self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); - self.attacker thread crawler_created_vo_cooldown(); - } - } - } - } + self endon( "death" ); + + if ( isdefined( self.a.gib_ref ) && isalive( self ) ) + { + if ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) + { + if ( isdefined( self.attacker ) && isplayer( self.attacker ) ) + { + if ( isdefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown ) + return; + + rand = randomintrange( 0, 100 ); + + if ( rand < 15 ) + { + self.attacker maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); + self.attacker thread crawler_created_vo_cooldown(); + } + } + } + } } crawler_created_vo_cooldown() { - self endon( "disconnect" ); - self.crawler_created_vo_cooldown = 1; - wait 30; - self.crawler_created_vo_cooldown = 0; + self endon( "disconnect" ); + self.crawler_created_vo_cooldown = 1; + wait 30; + self.crawler_created_vo_cooldown = 0; } alcatraz_first_magic_box_seen_vo() { - flag_wait( "start_zombie_round_logic" ); - magicbox = level.chests[ level.chest_index ]; - a_players = getplayers(); - _a1155 = a_players; - _k1155 = getFirstArrayKey( _a1155 ); - while ( isDefined( _k1155 ) ) - { - player = _a1155[ _k1155 ]; - player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub ); - _k1155 = getNextArrayKey( _a1155, _k1155 ); - } + flag_wait( "start_zombie_round_logic" ); + magicbox = level.chests[level.chest_index]; + a_players = getplayers(); + + foreach ( player in a_players ) + player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub ); } wait_and_play_first_magic_box_seen_vo( struct ) { - self endon( "disconnect" ); - level endon( "first_maigc_box_discovered" ); - while ( 1 ) - { - if ( distancesquared( self.origin, struct.origin ) < 40000 ) - { - if ( self is_player_looking_at( struct.origin, 0,25 ) ) - { - if ( isDefined( self.dontspeak ) && !self.dontspeak ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_box" ); - level notify( "first_maigc_box_discovered" ); - return; - } - } - } - else - { - wait 0,1; - } - } + self endon( "disconnect" ); + level endon( "first_maigc_box_discovered" ); + + while ( true ) + { + if ( distancesquared( self.origin, struct.origin ) < 40000 ) + { + if ( self is_player_looking_at( struct.origin, 0.25 ) ) + { + if ( !( isdefined( self.dontspeak ) && self.dontspeak ) ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_box" ); + level notify( "first_maigc_box_discovered" ); + break; + } + } + } + + wait 0.1; + } } alcatraz_audio_custom_weapon_check( weapon, magic_box ) { - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( magic_box ) && magic_box ) - { - type = self maps/mp/zombies/_zm_weapons::weapon_type_check( weapon ); - return type; - } - if ( issubstr( weapon, "upgraded" ) ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wpck_pap" ); - } - else if ( level.wallbuys_purchased == 0 ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" ); - level.wallbuys_purchased++; - } - else - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" ); - } - return "crappy"; + self endon( "death" ); + self endon( "disconnect" ); + + if ( isdefined( magic_box ) && magic_box ) + { + type = self maps\mp\zombies\_zm_weapons::weapon_type_check( weapon ); + return type; + } + + if ( issubstr( weapon, "upgraded" ) ) + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wpck_pap" ); + else if ( level.wallbuys_purchased == 0 ) + { + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" ); + level.wallbuys_purchased++; + } + else + self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" ); + + return "crappy"; } brutus_spawn_vo_watcher() { - level.total_brutuses_spawned = 0; - while ( 1 ) - { - level waittill( "brutus_spawned", ai_brutus ); - while ( !isDefined( ai_brutus ) ) - { - continue; - } - if ( isDefined( level.brutus_spawn_vo_cooldown ) && level.brutus_spawn_vo_cooldown ) - { - continue; - } - ai_brutus thread brutus_reaction_vo_watcher(); - ai_brutus thread brutus_helmet_pop_vo_watcher(); - if ( level.total_brutuses_spawned == 0 ) - { - str_vo_category = "brutus_encounter"; - } - else - { - str_vo_category = "brutus_arrival"; - } - wait 3; - while ( !isalive( ai_brutus ) ) - { - continue; - } - a_players = getplayers(); - a_closest = get_array_of_closest( ai_brutus.origin, a_players ); - i = 0; - while ( i < a_closest.size ) - { - if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak ) - { - if ( isalive( a_closest[ i ] ) && isalive( ai_brutus ) ) - { - a_closest[ i ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", str_vo_category ); - level thread brutus_spawn_vo_cooldown(); - } - } - i++; - } - } + level.total_brutuses_spawned = 0; + + while ( true ) + { + level waittill( "brutus_spawned", ai_brutus ); + + if ( !isdefined( ai_brutus ) ) + continue; + + if ( isdefined( level.brutus_spawn_vo_cooldown ) && level.brutus_spawn_vo_cooldown ) + continue; + + ai_brutus thread brutus_reaction_vo_watcher(); + ai_brutus thread brutus_helmet_pop_vo_watcher(); + + if ( level.total_brutuses_spawned == 0 ) + str_vo_category = "brutus_encounter"; + else + str_vo_category = "brutus_arrival"; + + wait 3.0; + + if ( !isalive( ai_brutus ) ) + continue; + + a_players = getplayers(); + a_closest = get_array_of_closest( ai_brutus.origin, a_players ); + + for ( i = 0; i < a_closest.size; i++ ) + { + if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) ) + { + if ( isalive( a_closest[i] ) && isalive( ai_brutus ) ) + { + a_closest[i] thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", str_vo_category ); + level thread brutus_spawn_vo_cooldown(); + } + } + } + } } brutus_spawn_vo_cooldown() { - level.brutus_spawn_vo_cooldown = 1; - wait 30; - level.brutus_spawn_vo_cooldown = 0; + level.brutus_spawn_vo_cooldown = 1; + wait 30; + level.brutus_spawn_vo_cooldown = 0; } brutus_reaction_vo_watcher() { - self endon( "death" ); - level endon( "restart_brutus_reaction_vo_watcher" ); - while ( isalive( self ) ) - { - wait randomfloatrange( 20, 40 ); - a_players = getplayers(); - a_closest = get_array_of_closest( self.origin, a_players ); - i = 0; - while ( i < a_closest.size ) - { - if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak ) - { - if ( distancesquared( a_closest[ i ].origin, self.origin ) < 1000000 ) - { - a_closest[ i ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_reaction" ); - } - } - i++; - } - } + self endon( "death" ); + level endon( "restart_brutus_reaction_vo_watcher" ); + + while ( isalive( self ) ) + { + wait( randomfloatrange( 20, 40 ) ); + a_players = getplayers(); + a_closest = get_array_of_closest( self.origin, a_players ); + + for ( i = 0; i < a_closest.size; i++ ) + { + if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) ) + { + if ( distancesquared( a_closest[i].origin, self.origin ) < 1000000 ) + a_closest[i] thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "brutus_reaction" ); + } + } + } } brutus_helmet_pop_vo_watcher() { - self endon( "death" ); - level waittill( "brutus_helmet_removed", player ); - wait 3; - if ( isalive( player ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_reaction" ); - } - level notify( "restart_brutus_reaction_vo_watcher" ); - self thread brutus_reaction_vo_watcher(); + self endon( "death" ); + + level waittill( "brutus_helmet_removed", player ); + + wait 3.0; + + if ( isalive( player ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "brutus_reaction" ); + + level notify( "restart_brutus_reaction_vo_watcher" ); + self thread brutus_reaction_vo_watcher(); } brutus_killed_vo_watcher() { - while ( 1 ) - { - level waittill( "brutus_killed", player ); - wait 5; - if ( isalive( player ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_defeated" ); - } - } + while ( true ) + { + level waittill( "brutus_killed", player ); + + wait 5.0; + + if ( isalive( player ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "brutus_defeated" ); + } } easter_egg_song_vo( player ) { - wait 3,5; - if ( isalive( player ) ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); - } - else - { - while ( 1 ) - { - a_players = getplayers(); - _a1346 = a_players; - _k1346 = getFirstArrayKey( _a1346 ); - while ( isDefined( _k1346 ) ) - { - player = _a1346[ _k1346 ]; - if ( isalive( player ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" ); - } - } - _k1346 = getNextArrayKey( _a1346, _k1346 ); - } - } - wait 0,1; - } + wait 3.5; + + if ( isalive( player ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" ); + else + { + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isalive( player ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" ); + } + } + } + + wait 0.1; + } } player_portal_clue_vo() { - self endon( "death" ); - self endon( "disconnect" ); - flag_wait( "afterlife_start_over" ); - wait 1; - while ( 1 ) - { - self waittill( "player_fake_corpse_created" ); - self.e_afterlife_corpse waittill( "player_revived", e_reviver ); - if ( self == e_reviver && !level.someone_has_visited_nml ) - { - wait 3; - self do_player_general_vox( "general", "portal_clue", undefined, 100 ); - return; - } - wait 0,1; - } + self endon( "death" ); + self endon( "disconnect" ); + flag_wait( "afterlife_start_over" ); + wait 1; + + while ( true ) + { + self waittill( "player_fake_corpse_created" ); + + self.e_afterlife_corpse waittill( "player_revived", e_reviver ); + + if ( self == e_reviver && !level.someone_has_visited_nml ) + { + wait 3; + self do_player_general_vox( "general", "portal_clue", undefined, 100 ); + return; + } + + wait 0.1; + } } setup_personality_character_exerts() { - level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; - level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; - level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; - level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; - level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; - level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; - level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; - level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; - level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; - level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; - level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; - level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; - level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; - level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; - level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; - level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; - level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; - level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; - level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; - level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; - level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; - level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; - level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; - level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; - level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; - level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; - level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; - level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; - level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; - level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; - level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; - level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; - level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; - level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; - level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; - level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; - level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; - level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; - level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; + level.exert_sounds[1]["burp"][0] = "vox_plr_0_exert_burp_0"; + level.exert_sounds[1]["burp"][1] = "vox_plr_0_exert_burp_1"; + level.exert_sounds[1]["burp"][2] = "vox_plr_0_exert_burp_2"; + level.exert_sounds[1]["burp"][3] = "vox_plr_0_exert_burp_3"; + level.exert_sounds[1]["burp"][4] = "vox_plr_0_exert_burp_4"; + level.exert_sounds[1]["burp"][5] = "vox_plr_0_exert_burp_5"; + level.exert_sounds[1]["burp"][6] = "vox_plr_0_exert_burp_6"; + level.exert_sounds[2]["burp"][0] = "vox_plr_1_exert_burp_0"; + level.exert_sounds[2]["burp"][1] = "vox_plr_1_exert_burp_1"; + level.exert_sounds[2]["burp"][2] = "vox_plr_1_exert_burp_2"; + level.exert_sounds[2]["burp"][3] = "vox_plr_1_exert_burp_3"; + level.exert_sounds[3]["burp"][0] = "vox_plr_2_exert_burp_0"; + level.exert_sounds[3]["burp"][1] = "vox_plr_2_exert_burp_1"; + level.exert_sounds[3]["burp"][2] = "vox_plr_2_exert_burp_2"; + level.exert_sounds[3]["burp"][3] = "vox_plr_2_exert_burp_3"; + level.exert_sounds[3]["burp"][4] = "vox_plr_2_exert_burp_4"; + level.exert_sounds[3]["burp"][5] = "vox_plr_2_exert_burp_5"; + level.exert_sounds[3]["burp"][6] = "vox_plr_2_exert_burp_6"; + level.exert_sounds[4]["burp"][0] = "vox_plr_3_exert_burp_0"; + level.exert_sounds[4]["burp"][1] = "vox_plr_3_exert_burp_1"; + level.exert_sounds[4]["burp"][2] = "vox_plr_3_exert_burp_2"; + level.exert_sounds[4]["burp"][3] = "vox_plr_3_exert_burp_3"; + level.exert_sounds[4]["burp"][4] = "vox_plr_3_exert_burp_4"; + level.exert_sounds[4]["burp"][5] = "vox_plr_3_exert_burp_5"; + level.exert_sounds[4]["burp"][6] = "vox_plr_3_exert_burp_6"; + level.exert_sounds[1]["hitmed"][0] = "vox_plr_0_exert_pain_medium_0"; + level.exert_sounds[1]["hitmed"][1] = "vox_plr_0_exert_pain_medium_1"; + level.exert_sounds[1]["hitmed"][2] = "vox_plr_0_exert_pain_medium_2"; + level.exert_sounds[1]["hitmed"][3] = "vox_plr_0_exert_pain_medium_3"; + level.exert_sounds[2]["hitmed"][0] = "vox_plr_1_exert_pain_medium_0"; + level.exert_sounds[2]["hitmed"][1] = "vox_plr_1_exert_pain_medium_1"; + level.exert_sounds[2]["hitmed"][2] = "vox_plr_1_exert_pain_medium_2"; + level.exert_sounds[2]["hitmed"][3] = "vox_plr_1_exert_pain_medium_3"; + level.exert_sounds[3]["hitmed"][0] = "vox_plr_2_exert_pain_medium_0"; + level.exert_sounds[3]["hitmed"][1] = "vox_plr_2_exert_pain_medium_1"; + level.exert_sounds[3]["hitmed"][2] = "vox_plr_2_exert_pain_medium_2"; + level.exert_sounds[3]["hitmed"][3] = "vox_plr_2_exert_pain_medium_3"; + level.exert_sounds[4]["hitmed"][0] = "vox_plr_3_exert_pain_medium_0"; + level.exert_sounds[4]["hitmed"][1] = "vox_plr_3_exert_pain_medium_1"; + level.exert_sounds[4]["hitmed"][2] = "vox_plr_3_exert_pain_medium_2"; + level.exert_sounds[4]["hitmed"][3] = "vox_plr_3_exert_pain_medium_3"; + level.exert_sounds[1]["hitlrg"][0] = "vox_plr_0_exert_pain_high_0"; + level.exert_sounds[1]["hitlrg"][1] = "vox_plr_0_exert_pain_high_1"; + level.exert_sounds[1]["hitlrg"][2] = "vox_plr_0_exert_pain_high_2"; + level.exert_sounds[1]["hitlrg"][3] = "vox_plr_0_exert_pain_high_3"; + level.exert_sounds[2]["hitlrg"][0] = "vox_plr_1_exert_pain_high_0"; + level.exert_sounds[2]["hitlrg"][1] = "vox_plr_1_exert_pain_high_1"; + level.exert_sounds[2]["hitlrg"][2] = "vox_plr_1_exert_pain_high_2"; + level.exert_sounds[2]["hitlrg"][3] = "vox_plr_1_exert_pain_high_3"; + level.exert_sounds[3]["hitlrg"][0] = "vox_plr_2_exert_pain_high_0"; + level.exert_sounds[3]["hitlrg"][1] = "vox_plr_2_exert_pain_high_1"; + level.exert_sounds[3]["hitlrg"][2] = "vox_plr_2_exert_pain_high_2"; + level.exert_sounds[3]["hitlrg"][3] = "vox_plr_2_exert_pain_high_3"; + level.exert_sounds[4]["hitlrg"][0] = "vox_plr_3_exert_pain_high_0"; + level.exert_sounds[4]["hitlrg"][1] = "vox_plr_3_exert_pain_high_1"; + level.exert_sounds[4]["hitlrg"][2] = "vox_plr_3_exert_pain_high_2"; + level.exert_sounds[4]["hitlrg"][3] = "vox_plr_3_exert_pain_high_3"; } alcatraz_audio_custom_response_line( player, index, category, type ) { - if ( type == "revive_up" ) - { - player thread play_vo_category_on_closest_player( "general", "revive_player" ); - } - else if ( type == "headshot" ) - { - if ( cointoss() ) - { - player thread play_vo_category_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex ); - } - else - { - player thread play_vo_category_on_closest_player( "kill", "headshot_respond_generic" ); - } - } - else - { - if ( type == "oh_shit" ) - { - player thread play_vo_category_on_closest_player( "general", "surrounded_respond_to_plr_" + player.characterindex ); - player thread global_oh_shit_cooldown_timer( 15 ); - } - } + if ( type == "revive_up" ) + player thread play_vo_category_on_closest_player( "general", "revive_player" ); + else if ( type == "headshot" ) + { + if ( cointoss() ) + player thread play_vo_category_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex ); + else + player thread play_vo_category_on_closest_player( "kill", "headshot_respond_generic" ); + } + else if ( type == "oh_shit" ) + { + player thread play_vo_category_on_closest_player( "general", "surrounded_respond_to_plr_" + player.characterindex ); + player thread global_oh_shit_cooldown_timer( 15 ); + } } play_vo_category_on_closest_player( category, type ) { - a_players = getplayers(); - if ( a_players.size <= 1 ) - { - return; - } - arrayremovevalue( a_players, self ); - a_closest = arraysort( a_players, self.origin, 1 ); - if ( distancesquared( self.origin, a_closest[ 0 ].origin ) <= 250000 ) - { - if ( isalive( a_closest[ 0 ] ) ) - { - a_closest[ 0 ] maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type ); - } - } + a_players = getplayers(); + + if ( a_players.size <= 1 ) + return; + + arrayremovevalue( a_players, self ); + a_closest = arraysort( a_players, self.origin, 1 ); + + if ( distancesquared( self.origin, a_closest[0].origin ) <= 250000 ) + { + if ( isalive( a_closest[0] ) ) + a_closest[0] maps\mp\zombies\_zm_audio::create_and_play_dialog( category, type ); + } } check_for_special_weapon_limit_exist( weapon ) { - if ( weapon != "blundergat_zm" && weapon != "minigun_alcatraz_zm" ) - { - return 1; - } - players = get_players(); - count = 0; - if ( weapon == "blundergat_zm" ) - { - if ( self maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( "blundersplat_zm" ) ) - { - return 0; - } - if ( self afterlife_weapon_limit_check( "blundergat_zm" ) ) - { - return 0; - } - limit = level.limited_weapons[ "blundergat_zm" ]; - } - else - { - if ( self afterlife_weapon_limit_check( "minigun_alcatraz_zm" ) ) - { - return 0; - } - limit = level.limited_weapons[ "minigun_alcatraz_zm" ]; - } - i = 0; - while ( i < players.size ) - { - if ( weapon == "blundergat_zm" ) - { - if ( players[ i ] has_weapon_or_upgrade( "blundersplat_zm" ) || isDefined( players[ i ].is_pack_splatting ) && players[ i ].is_pack_splatting ) - { - count++; - i++; - continue; - } - } - else - { - if ( players[ i ] afterlife_weapon_limit_check( weapon ) ) - { - count++; - } - } - i++; - } - if ( count >= limit ) - { - return 0; - } - return 1; + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + if ( weapon == "ray_gun_zm" ) + { + if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps\mp\zombies\_zm_afterlife::is_weapon_available_in_afterlife_corpse( "raygun_mark2_zm", self ) ) + return false; + } + + if ( weapon == "raygun_mark2_zm" ) + { + if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps\mp\zombies\_zm_afterlife::is_weapon_available_in_afterlife_corpse( "ray_gun_zm", self ) ) + return false; + + if ( randomint( 100 ) >= 33 ) + return false; + } + } + + if ( weapon != "blundergat_zm" && weapon != "minigun_alcatraz_zm" ) + return true; + + players = get_players(); + count = 0; + + if ( weapon == "blundergat_zm" ) + { + if ( self maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( "blundersplat_zm" ) ) + return false; + + if ( self afterlife_weapon_limit_check( "blundergat_zm" ) ) + return false; + + limit = level.limited_weapons["blundergat_zm"]; + } + else + { + if ( self afterlife_weapon_limit_check( "minigun_alcatraz_zm" ) ) + return false; + + limit = level.limited_weapons["minigun_alcatraz_zm"]; + } + + for ( i = 0; i < players.size; i++ ) + { + if ( weapon == "blundergat_zm" ) + { + if ( players[i] has_weapon_or_upgrade( "blundersplat_zm" ) || isdefined( players[i].is_pack_splatting ) && players[i].is_pack_splatting ) + { + count++; + continue; + } + } + + if ( players[i] afterlife_weapon_limit_check( weapon ) ) + count++; + } + + if ( count >= limit ) + return false; + + return true; } afterlife_weapon_limit_check( limited_weapon ) { - while ( isDefined( self.afterlife ) && self.afterlife ) - { - if ( limited_weapon == "blundergat_zm" ) - { - _a1577 = self.loadout; - _k1577 = getFirstArrayKey( _a1577 ); - while ( isDefined( _k1577 ) ) - { - weapon = _a1577[ _k1577 ]; - if ( weapon != "blundergat_zm" && weapon != "blundergat_upgraded_zm" || weapon == "blundersplat_zm" && weapon == "blundersplat_upgraded_zm" ) - { - return 1; - } - _k1577 = getNextArrayKey( _a1577, _k1577 ); - } - } - else while ( limited_weapon == "minigun_alcatraz_zm" ) - { - _a1587 = self.loadout; - _k1587 = getFirstArrayKey( _a1587 ); - while ( isDefined( _k1587 ) ) - { - weapon = _a1587[ _k1587 ]; - if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" ) - { - return 1; - } - _k1587 = getNextArrayKey( _a1587, _k1587 ); - } - } - } - return 0; + if ( isdefined( self.afterlife ) && self.afterlife ) + { + if ( limited_weapon == "blundergat_zm" ) + { + foreach ( weapon in self.loadout.weapons ) + { + if ( weapon == "blundergat_zm" || weapon == "blundergat_upgraded_zm" || weapon == "blundersplat_zm" || weapon == "blundersplat_upgraded_zm" ) + return true; + } + } + else if ( limited_weapon == "minigun_alcatraz_zm" ) + { + foreach ( weapon in self.loadout.weapons ) + { + if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" ) + return true; + } + } + } + + return false; } door_rumble_on_buy() { - self setclientfieldtoplayer( "rumble_door_open", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "rumble_door_open", 0 ); + self setclientfieldtoplayer( "rumble_door_open", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "rumble_door_open", 0 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc index 70c497e..7cffab9 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_alcatraz_weap_quest.gsc @@ -1,642 +1,654 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_powerups; -//#using_animtree( "fxanim_props" ); //leave commented for now for compiling - -init() //checked changed to match cerberus output +init() { - flag_init( "soul_catchers_charged" ); - level.soul_catchers = []; - level.soul_catchers_vol = []; - level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area; - level.soul_catcher_clip[ "rune_2" ] = getent( "wolf_clip_docks", "targetname" ); - level.soul_catcher_clip[ "rune_3" ] = getent( "wolf_clip_infirmary", "targetname" ); - foreach ( e_clip in level.soul_catcher_clip ) - { - e_clip setinvisibletoall(); - } - level thread create_anim_references_on_server(); - registerclientfield( "actor", "make_client_clone", 9000, 4, "int" ); - onplayerconnect_callback( ::toggle_redeemer_trigger ); - onplayerconnect_callback( ::hellhole_projectile_watch ); - onplayerconnect_callback( ::hellhole_tomahawk_watch ); - level.a_wolf_structs = getstructarray( "wolf_position", "targetname" ); - for ( i = 0; i < level.a_wolf_structs.size; i++ ) - { - registerclientfield( "world", level.a_wolf_structs[ i ].script_parameters, 9000, 3, "int" ); - level.soul_catchers[ i ] = level.a_wolf_structs[ i ]; - level.soul_catchers_vol[ i ] = getent( level.a_wolf_structs[ i ].target, "targetname" ); - } - for ( i = 0; i < level.soul_catchers.size; i++ ) - { - level.soul_catchers[ i ].souls_received = 0; - level.soul_catchers[ i ].is_eating = 0; - level.soul_catchers[ i ] thread soul_catcher_check(); - if ( is_classic() ) - { - level.soul_catchers[ i ] thread soul_catcher_state_manager(); - } - else - { - level.soul_catchers[ i ] thread grief_soul_catcher_state_manager(); - } - level.soul_catchers[ i ] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) ); - level.soul_catchers_vol[ i ] = getent( level.soul_catchers[ i ].target, "targetname" ); - } - level.soul_catchers_charged = 0; - level thread soul_catchers_charged(); - array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func ); + flag_init( "soul_catchers_charged" ); + level.soul_catchers = []; + level.soul_catchers_vol = []; + level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area; + level.soul_catcher_clip["rune_2"] = getent( "wolf_clip_docks", "targetname" ); + level.soul_catcher_clip["rune_3"] = getent( "wolf_clip_infirmary", "targetname" ); + + foreach ( e_clip in level.soul_catcher_clip ) + e_clip setinvisibletoall(); + + level thread create_anim_references_on_server(); + registerclientfield( "actor", "make_client_clone", 9000, 4, "int" ); + onplayerconnect_callback( ::toggle_redeemer_trigger ); + onplayerconnect_callback( ::hellhole_projectile_watch ); + onplayerconnect_callback( ::hellhole_tomahawk_watch ); + level.a_wolf_structs = getstructarray( "wolf_position", "targetname" ); + + for ( i = 0; i < level.a_wolf_structs.size; i++ ) + { + registerclientfield( "world", level.a_wolf_structs[i].script_parameters, 9000, 3, "int" ); + level.soul_catchers[i] = level.a_wolf_structs[i]; + level.soul_catchers_vol[i] = getent( level.a_wolf_structs[i].target, "targetname" ); + } + + for ( i = 0; i < level.soul_catchers.size; i++ ) + { + level.soul_catchers[i].souls_received = 0; + level.soul_catchers[i].is_eating = 0; + level.soul_catchers[i] thread soul_catcher_check(); + + if ( is_classic() ) + level.soul_catchers[i] thread soul_catcher_state_manager(); + else + level.soul_catchers[i] thread grief_soul_catcher_state_manager(); + + level.soul_catchers[i] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) ); + level.soul_catchers_vol[i] = getent( level.soul_catchers[i].target, "targetname" ); + } + + level.soul_catchers_charged = 0; + level thread soul_catchers_charged(); + array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func ); } -create_anim_references_on_server() //checked matches cerberus output +#using_animtree("fxanim_props"); + +create_anim_references_on_server() { - root = %root; - wolfhead_intro_anim = %o_zombie_dreamcatcher_intro; - wolfhead_outtro_anim = %o_zombie_dreamcatcher_outtro; - woflhead_idle_anims = []; - wolfhead_idle_anim[ 0 ] = %o_zombie_dreamcatcher_idle; - wolfhead_idle_anim[ 1 ] = %o_zombie_dreamcatcher_idle_twitch_scan; - wolfhead_idle_anim[ 2 ] = %o_zombie_dreamcatcher_idle_twitch_shake; - wolfhead_idle_anim[ 3 ] = %o_zombie_dreamcatcher_idle_twitch_yawn; - wolfhead_body_death = %ai_zombie_dreamcatch_impact; - wolfhead_body_float = %ai_zombie_dreamcatch_rise; - wolfhead_body_shrink = %ai_zombie_dreamcatch_shrink_a; - wolfhead_pre_eat_anims = []; - wolfhead_pre_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_r; - wolfhead_pre_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_l; - wolfhead_pre_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_f; - wolfhead_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_align_r; - wolfhead_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_align_l; - wolfhead_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_align_f; - wolfhead_body_anims[ "right" ] = %ai_zombie_dreamcatcher_wallconsume_align_r; - wolfhead_body_anims[ "left" ] = %ai_zombie_dreamcatcher_wallconsume_align_l; - wolfhead_body_anims[ "front" ] = %ai_zombie_dreamcatcher_wallconsume_align_f; + root = %root; + wolfhead_intro_anim = %o_zombie_dreamcatcher_intro; + wolfhead_outtro_anim = %o_zombie_dreamcatcher_outtro; + woflhead_idle_anims = []; + wolfhead_idle_anim[0] = %o_zombie_dreamcatcher_idle; + wolfhead_idle_anim[1] = %o_zombie_dreamcatcher_idle_twitch_scan; + wolfhead_idle_anim[2] = %o_zombie_dreamcatcher_idle_twitch_shake; + wolfhead_idle_anim[3] = %o_zombie_dreamcatcher_idle_twitch_yawn; + wolfhead_body_death = %ai_zombie_dreamcatch_impact; + wolfhead_body_float = %ai_zombie_dreamcatch_rise; + wolfhead_body_shrink = %ai_zombie_dreamcatch_shrink_a; + wolfhead_pre_eat_anims = []; + wolfhead_pre_eat_anims["right"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_r; + wolfhead_pre_eat_anims["left"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_l; + wolfhead_pre_eat_anims["front"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_f; + wolfhead_eat_anims["right"] = %o_zombie_dreamcatcher_wallconsume_align_r; + wolfhead_eat_anims["left"] = %o_zombie_dreamcatcher_wallconsume_align_l; + wolfhead_eat_anims["front"] = %o_zombie_dreamcatcher_wallconsume_align_f; + wolfhead_body_anims["right"] = %ai_zombie_dreamcatcher_wallconsume_align_r; + wolfhead_body_anims["left"] = %ai_zombie_dreamcatcher_wallconsume_align_l; + wolfhead_body_anims["front"] = %ai_zombie_dreamcatcher_wallconsume_align_f; } -soul_catcher_state_manager() //checked changed to match cerberus output +soul_catcher_state_manager() { - wait 1; - if ( self.script_noteworthy == "rune_3" ) - { - trigger = getent( "wolf_hurt_trigger", "targetname" ); - trigger hide(); - } - else if ( self.script_noteworthy == "rune_2" ) - { - trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); - trigger hide(); - } - level setclientfield( self.script_parameters, 0 ); - self waittill( "first_zombie_killed_in_zone" ); - if ( self.script_noteworthy == "rune_3" ) - { - trigger = getent( "wolf_hurt_trigger", "targetname" ); - trigger show(); - } - else if ( self.script_noteworthy == "rune_2" ) - { - trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); - trigger show(); - } - if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) ) - { - level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall(); - } - level setclientfield( self.script_parameters, 1 ); - anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); - wait anim_length; - while ( !self.is_charged ) - { - level setclientfield( self.script_parameters, 2 ); - self waittill_either( "fully_charged", "finished_eating" ); - } - level setclientfield( self.script_parameters, 6 ); - anim_length = getanimlength( %o_zombie_dreamcatcher_outtro ); - wait anim_length; - if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) ) - { - level.soul_catcher_clip[ self.script_noteworthy ] delete(); - } - if ( self.script_noteworthy == "rune_3" ) - { - trigger = getent( "wolf_hurt_trigger", "targetname" ); - trigger delete(); - } - else if ( self.script_noteworthy == "rune_2" ) - { - trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); - trigger delete(); - } - level setclientfield( self.script_parameters, 7 ); + wait 1.0; + + if ( self.script_noteworthy == "rune_3" ) + { + trigger = getent( "wolf_hurt_trigger", "targetname" ); + trigger hide(); + } + else if ( self.script_noteworthy == "rune_2" ) + { + trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); + trigger hide(); + } + + level setclientfield( self.script_parameters, 0 ); + + self waittill( "first_zombie_killed_in_zone" ); + + if ( self.script_noteworthy == "rune_3" ) + { + trigger = getent( "wolf_hurt_trigger", "targetname" ); + trigger show(); + } + else if ( self.script_noteworthy == "rune_2" ) + { + trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); + trigger show(); + } + + if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) + level.soul_catcher_clip[self.script_noteworthy] setvisibletoall(); + + level setclientfield( self.script_parameters, 1 ); + anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); + wait( anim_length ); + + while ( !self.is_charged ) + { + level setclientfield( self.script_parameters, 2 ); + self waittill_either( "fully_charged", "finished_eating" ); + } + + level setclientfield( self.script_parameters, 6 ); + anim_length = getanimlength( %o_zombie_dreamcatcher_outtro ); + wait( anim_length ); + + if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) + level.soul_catcher_clip[self.script_noteworthy] delete(); + + if ( self.script_noteworthy == "rune_3" ) + { + trigger = getent( "wolf_hurt_trigger", "targetname" ); + trigger delete(); + } + else if ( self.script_noteworthy == "rune_2" ) + { + trigger = getent( "wolf_hurt_trigger_docks", "targetname" ); + trigger delete(); + } + + level setclientfield( self.script_parameters, 7 ); } -grief_soul_catcher_state_manager() //checked matches cerberus output +grief_soul_catcher_state_manager() { - wait 1; - while ( 1 ) - { - level setclientfield( self.script_parameters, 0 ); - self waittill( "first_zombie_killed_in_zone" ); - if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) ) - { - level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall(); - } - level setclientfield( self.script_parameters, 1 ); - anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); - wait anim_length; - while ( !self.is_charged ) - { - level setclientfield( self.script_parameters, 2 ); - self waittill_either( "fully_charged", "finished_eating" ); - } - level setclientfield( self.script_parameters, 6 ); - anim_length = getanimlength( %o_zombie_dreamcatcher_outtro ); - wait anim_length; - if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) ) - { - level.soul_catcher_clip[ self.script_noteworthy ] delete(); - } - self.souls_received = 0; - level thread wolf_spit_out_powerup(); - wait 20; - self thread soul_catcher_check(); - } + wait 1; + + while ( true ) + { + level setclientfield( self.script_parameters, 0 ); + + self waittill( "first_zombie_killed_in_zone" ); + + if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) + level.soul_catcher_clip[self.script_noteworthy] setvisibletoall(); + + level setclientfield( self.script_parameters, 1 ); + anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); + wait( anim_length ); + + while ( !self.is_charged ) + { + level setclientfield( self.script_parameters, 2 ); + self waittill_either( "fully_charged", "finished_eating" ); + } + + level setclientfield( self.script_parameters, 6 ); + anim_length = getanimlength( %o_zombie_dreamcatcher_outtro ); + wait( anim_length ); + + if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) ) + level.soul_catcher_clip[self.script_noteworthy] delete(); + + self.souls_received = 0; + level thread wolf_spit_out_powerup(); + wait 20; + self thread soul_catcher_check(); + } } -wolf_spit_out_powerup() //checked changed to match cerberus output +wolf_spit_out_powerup() { - if ( isDefined( level.enable_magic ) && !level.enable_magic ) - { - return; - } - power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" ); - if ( randomint( 100 ) < 20 ) - { - for ( i = 0; i < level.zombie_powerup_array.size; i++ ) - { - if ( level.zombie_powerup_array[ i ] == "meat_stink" ) - { - level.zombie_powerup_index = i; - found = 1; - break; - } - } - } - while ( 1 ) - { - level.zombie_powerup_index = randomint( level.zombie_powerup_array.size ); - if ( level.zombie_powerup_array[ level.zombie_powerup_index ] == "nuke" ) - { - wait 0.05; - continue; - } - break; - } - spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[ level.zombie_powerup_index ] ); - power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 ); - if ( isDefined( power_ups[ 0 ] ) ) - { - power_ups[ 0 ] movez( 120, 4 ); - } + if ( !( isdefined( level.enable_magic ) && level.enable_magic ) ) + return; + + power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" ); + + if ( randomint( 100 ) < 20 ) + { + for ( i = 0; i < level.zombie_powerup_array.size; i++ ) + { + if ( level.zombie_powerup_array[i] == "meat_stink" ) + { + level.zombie_powerup_index = i; + found = 1; + break; + } + } + } + else + { + while ( true ) + { + level.zombie_powerup_index = randomint( level.zombie_powerup_array.size ); + + if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" ) + { + wait 0.05; + continue; + } + + break; + } + } + + spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[level.zombie_powerup_index] ); + power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 ); + + if ( isdefined( power_ups[0] ) ) + power_ups[0] movez( 120, 4 ); } -zombie_spawn_func() //checked matches cerberus output +zombie_spawn_func() { - self.actor_killed_override = ::zombie_killed_override; + self.actor_killed_override = ::zombie_killed_override; } -zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output +zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) { - if ( !is_true( self.has_legs ) ) - { - return; - } - if ( isplayer( attacker ) ) - { - for ( i = 0; i < level.soul_catchers.size; i++ ) - { - if ( self istouching( level.soul_catchers_vol[ i ] ) ) - { - if ( !level.soul_catchers[ i ].is_charged ) - { - self.deathfunction = ::zombie_soul_catcher_death; - self.my_soul_catcher = level.soul_catchers[ i ]; - } - } - } - } + if ( !is_true( self.has_legs ) ) + return; + + if ( isplayer( attacker ) ) + { + for ( i = 0; i < level.soul_catchers.size; i++ ) + { + if ( self istouching( level.soul_catchers_vol[i] ) ) + { + if ( !level.soul_catchers[i].is_charged ) + { + self.deathfunction = ::zombie_soul_catcher_death; + self.my_soul_catcher = level.soul_catchers[i]; + } + } + } + } } -check_for_zombie_in_wolf_area() //checked changed to match cerberus output +check_for_zombie_in_wolf_area() { - for ( i = 0; i < level.soul_catchers.size; i++ ) - { - if ( self istouching( level.soul_catchers_vol[ i ] ) ) - { - if ( !level.soul_catchers[ i ].is_charged && !level.soul_catchers[ i ].is_eating ) - { - return 1; - } - } - } - return 0; + for ( i = 0; i < level.soul_catchers.size; i++ ) + { + if ( self istouching( level.soul_catchers_vol[i] ) ) + { + if ( !level.soul_catchers[i].is_charged && !level.soul_catchers[i].is_eating ) + return true; + } + } + + return false; } -zombie_soul_catcher_death() //checked matches cerberus output +zombie_soul_catcher_death() { - self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript(); - if ( isDefined( self._race_team ) ) - { - team = self._race_team; - } - level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); - if ( self.my_soul_catcher.is_eating ) - { - return 0; - } - if ( self.my_soul_catcher.souls_received >= 6 ) - { - return 0; - } - self.my_soul_catcher.is_eating = 1; - if ( self.my_soul_catcher.souls_received == 0 ) - { - self.my_soul_catcher notify( "first_zombie_killed_in_zone" ); - self thread notify_wolf_intro_anim_complete(); - } - client_notify_value = self get_correct_model_array(); - self setclientfield( "make_client_clone", client_notify_value ); - self setanimstatefromasd( "zm_portal_death" ); - self maps/mp/animscripts/shared::donotetracks( "portal_death" ); - if ( self.my_soul_catcher.souls_received == 0 ) - { - self waittill( "wolf_intro_anim_complete" ); - } - n_eating_anim = self which_eating_anim(); - self ghost(); - level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim ); - if ( n_eating_anim == 3 ) - { - total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f ); - } - else if ( n_eating_anim == 4 ) - { - total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r ); - } - else - { - total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l ); - } - wait ( total_wait_time - 0.5 ); - self.my_soul_catcher.souls_received++; - wait 0.5; - self.my_soul_catcher notify( "finished_eating" ); - self.my_soul_catcher.is_eating = 0; - self delete(); - return 1; + self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript(); + + if ( isdefined( self._race_team ) ) + team = self._race_team; + + level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team ); + + if ( self.my_soul_catcher.is_eating ) + return false; + + if ( self.my_soul_catcher.souls_received >= 6 ) + return false; + + self.my_soul_catcher.is_eating = 1; + + if ( self.my_soul_catcher.souls_received == 0 ) + { + self.my_soul_catcher notify( "first_zombie_killed_in_zone" ); + self thread notify_wolf_intro_anim_complete(); + } + + client_notify_value = self get_correct_model_array(); + self setclientfield( "make_client_clone", client_notify_value ); + self setanimstatefromasd( "zm_portal_death" ); + self maps\mp\animscripts\shared::donotetracks( "portal_death" ); + + if ( self.my_soul_catcher.souls_received == 0 ) + self waittill( "wolf_intro_anim_complete" ); + + n_eating_anim = self which_eating_anim(); + self ghost(); + level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim ); + + if ( n_eating_anim == 3 ) + total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f ); + else if ( n_eating_anim == 4 ) + total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r ); + else + total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l ); + + wait( total_wait_time - 0.5 ); + self.my_soul_catcher.souls_received++; + wait 0.5; + self.my_soul_catcher notify( "finished_eating" ); + self.my_soul_catcher.is_eating = 0; + self delete(); + return true; } -get_correct_model_array() //checked matches cerberus output +get_correct_model_array() { - mod = 0; - if ( self.model == "c_zom_guard_body" && isDefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" ) - { - mod = 4; - } - if ( self.headmodel == "c_zom_zombie_barbwire_head" ) - { - return 1 + mod; - } - if ( self.headmodel == "c_zom_zombie_hellcatraz_head" ) - { - return 2 + mod; - } - if ( self.headmodel == "c_zom_zombie_mask_head" ) - { - return 3 + mod; - } - if ( self.headmodel == "c_zom_zombie_slackjaw_head" ) - { - return 4 + mod; - } - return 5; + mod = 0; + + if ( self.model == "c_zom_guard_body" && isdefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" ) + mod = 4; + + if ( self.headmodel == "c_zom_zombie_barbwire_head" ) + return 1 + mod; + + if ( self.headmodel == "c_zom_zombie_hellcatraz_head" ) + return 2 + mod; + + if ( self.headmodel == "c_zom_zombie_mask_head" ) + return 3 + mod; + + if ( self.headmodel == "c_zom_zombie_slackjaw_head" ) + return 4 + mod; + + return 5; } -notify_wolf_intro_anim_complete() //checked matches cerberus output +notify_wolf_intro_anim_complete() { - anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); - wait anim_length; - self notify( "wolf_intro_anim_complete" ); + anim_length = getanimlength( %o_zombie_dreamcatcher_intro ); + wait( anim_length ); + self notify( "wolf_intro_anim_complete" ); } -which_eating_anim() //checked matches cerberus output +which_eating_anim() { - soul_catcher = self.my_soul_catcher; - forward_dot = vectordot( anglesToForward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) ); - if ( forward_dot > 0.85 ) - { - return 3; - } - else - { - right_dot = vectordot( anglesToRight( soul_catcher.angles ), self.origin - soul_catcher.origin ); - if ( right_dot > 0 ) - { - return 4; - } - else - { - return 5; - } - } + soul_catcher = self.my_soul_catcher; + forward_dot = vectordot( anglestoforward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) ); + + if ( forward_dot > 0.85 ) + return 3; + else + { + right_dot = vectordot( anglestoright( soul_catcher.angles ), self.origin - soul_catcher.origin ); + + if ( right_dot > 0 ) + return 4; + else + return 5; + } } -soul_catcher_check() //checked changed to match cerberus output +soul_catcher_check() { - self.is_charged = 0; - while ( 1 ) - { - if ( self.souls_received >= 6 ) - { - level.soul_catchers_charged++; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged ); - self.is_charged = 1; - self notify( "fully_charged" ); - break; - } - wait 0.05; - } - if ( level.soul_catchers_charged == 1 ) - { - self thread first_wolf_complete_vo(); - } - else if ( level.soul_catchers_charged >= level.soul_catchers.size ) - { - self thread final_wolf_complete_vo(); - } + self.is_charged = 0; + + while ( true ) + { + if ( self.souls_received >= 6 ) + { + level.soul_catchers_charged++; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged ); + self.is_charged = 1; + self notify( "fully_charged" ); + break; + } + + wait 0.05; + } + + if ( level.soul_catchers_charged == 1 ) + self thread first_wolf_complete_vo(); + else if ( level.soul_catchers_charged >= level.soul_catchers.size ) + self thread final_wolf_complete_vo(); } -wolf_head_removal( wolf_head_model_string ) //checked matches cerberus output +wolf_head_removal( wolf_head_model_string ) { - wolf_head_model = getent( wolf_head_model_string, "targetname" ); - wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" ); - self waittill( "fully_charged" ); - wolf_head_model setmodel( "p6_zm_al_dream_catcher" ); + wolf_head_model = getent( wolf_head_model_string, "targetname" ); + wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" ); + + self waittill( "fully_charged" ); + + wolf_head_model setmodel( "p6_zm_al_dream_catcher" ); } -soul_catchers_charged() //checked changed to match cerberus output +soul_catchers_charged() { - while ( 1 ) - { - if ( level.soul_catchers_charged >= level.soul_catchers.size ) - { - flag_set( "soul_catchers_charged" ); - level notify( "soul_catchers_charged" ); - break; - } - wait 1; - } + while ( true ) + { + if ( level.soul_catchers_charged >= level.soul_catchers.size ) + { + flag_set( "soul_catchers_charged" ); + level notify( "soul_catchers_charged" ); + break; + } + + wait 1; + } } -first_wolf_encounter_vo() //checked changed to match cerberus output +first_wolf_encounter_vo() { - if ( !is_classic() ) - { - return; - } - wait 2; - a_players = getplayers(); - a_closest = get_array_of_closest( self.origin, a_players ); - for ( i = 0; i < a_closest.size; i++ ) - { - if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak ) - { - a_closest[ i ] thread do_player_general_vox( "general", "wolf_encounter" ); - level.wolf_encounter_vo_played = 1; - break; - } - } + if ( !is_classic() ) + return; + + wait 2.0; + a_players = getplayers(); + a_closest = get_array_of_closest( self.origin, a_players ); + + for ( i = 0; i < a_closest.size; i++ ) + { + if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) ) + { + a_closest[i] thread do_player_general_vox( "general", "wolf_encounter" ); + level.wolf_encounter_vo_played = 1; + break; + } + } } -first_wolf_complete_vo() //checked changed to match cerberus output +first_wolf_complete_vo() { - if ( !is_classic() ) - { - return; - } - wait 3.5; - a_players = getplayers(); - a_closest = get_array_of_closest( self.origin, a_players ); - for ( i = 0; i < a_closest.size; i++ ) - { - if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak ) - { - a_closest[ i ] thread do_player_general_vox( "general", "wolf_complete" ); - break; - } - } + if ( !is_classic() ) + return; + + wait 3.5; + a_players = getplayers(); + a_closest = get_array_of_closest( self.origin, a_players ); + + for ( i = 0; i < a_closest.size; i++ ) + { + if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) ) + { + a_closest[i] thread do_player_general_vox( "general", "wolf_complete" ); + break; + } + } } -final_wolf_complete_vo() //checked changed to match cerberus output +final_wolf_complete_vo() { - if ( !is_classic() ) - { - return; - } - wait 3.5; - a_players = getplayers(); - a_closest = get_array_of_closest( self.origin, a_players ); - for ( i = 0; i < a_closest.size; i++ ) - { - if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak ) - { - a_closest[ i ] thread do_player_general_vox( "general", "wolf_final" ); - break; - } - } + if ( !is_classic() ) + return; + + wait 3.5; + a_players = getplayers(); + a_closest = get_array_of_closest( self.origin, a_players ); + + for ( i = 0; i < a_closest.size; i++ ) + { + if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) ) + { + a_closest[i] thread do_player_general_vox( "general", "wolf_final" ); + break; + } + } } -tomahawk_upgrade_quest() //checked changed to match cerberus output +tomahawk_upgrade_quest() { - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - return; - } - self endon( "disconnect" ); - for ( self.tomahawk_upgrade_kills = 0; self.tomahawk_upgrade_kills < 15; self.tomahawk_upgrade_kills++ ) - { - self waittill( "got_a_tomahawk_kill" ); - } - wait 1; - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" ); - e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) ); - e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); - e_org waittill( "easteregg_scream_complete" ); - e_org delete(); - while ( level.round_number < 10 ) - { - wait 0.5; - } - self ent_flag_init( "gg_round_done" ); - while ( !self ent_flag( "gg_round_done" ) ) - { - level waittill( "between_round_over" ); - self.killed_with_only_tomahawk = 1; - self.killed_something_thq = 0; - if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) - { - continue; - } - level waittill( "end_of_round" ); - if ( !self.killed_with_only_tomahawk || !self.killed_something_thq ) - { - continue; - } - if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) - { - continue; - } - self ent_flag_set( "gg_round_done" ); - } - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" ); - e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) ); - e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); - e_org waittill( "easteregg_scream_complete" ); - e_org delete(); - self notify( "hellhole_time" ); - self waittill( "tomahawk_in_hellhole" ); - if ( isDefined( self.retriever_trigger ) ) - { - self.retriever_trigger setinvisibletoplayer( self ); - } - else - { - trigger = getent( "retriever_pickup_trigger", "script_noteworthy" ); - self.retriever_trigger = trigger; - self.retriever_trigger setinvisibletoplayer( self ); - } - self takeweapon( "bouncing_tomahawk_zm" ); - self set_player_tactical_grenade( "none" ); - self notify( "tomahawk_upgraded_swap" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" ); - e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) ); - e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); - e_org waittill( "easteregg_scream_complete" ); - e_org delete(); - level waittill( "end_of_round" ); - tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" ); - tomahawk_pick setclientfield( "play_tomahawk_fx", 2 ); - self.current_tomahawk_weapon = "upgraded_tomahawk_zm"; + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + return; + + self endon( "disconnect" ); + + for ( self.tomahawk_upgrade_kills = 0; self.tomahawk_upgrade_kills < 15; self.tomahawk_upgrade_kills++ ) + self waittill( "got_a_tomahawk_kill" ); + + wait 1.0; + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" ); + e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) ); + e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); + + e_org waittill( "easteregg_scream_complete" ); + + e_org delete(); + + while ( level.round_number < 10 ) + wait 0.5; + + self ent_flag_init( "gg_round_done" ); + + while ( !self ent_flag( "gg_round_done" ) ) + { + level waittill( "between_round_over" ); + + self.killed_with_only_tomahawk = 1; + self.killed_something_thq = 0; + + if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) + continue; + + level waittill( "end_of_round" ); + + if ( !self.killed_with_only_tomahawk || !self.killed_something_thq ) + continue; + + if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) + continue; + + self ent_flag_set( "gg_round_done" ); + } + + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" ); + e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) ); + e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); + + e_org waittill( "easteregg_scream_complete" ); + + e_org delete(); + self notify( "hellhole_time" ); + + self waittill( "tomahawk_in_hellhole" ); + + if ( isdefined( self.retriever_trigger ) ) + self.retriever_trigger setinvisibletoplayer( self ); + else + { + trigger = getent( "retriever_pickup_trigger", "script_noteworthy" ); + self.retriever_trigger = trigger; + self.retriever_trigger setinvisibletoplayer( self ); + } + + self takeweapon( "bouncing_tomahawk_zm" ); + self set_player_tactical_grenade( "none" ); + self notify( "tomahawk_upgraded_swap" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" ); + e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) ); + e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" ); + + e_org waittill( "easteregg_scream_complete" ); + + e_org delete(); + + level waittill( "end_of_round" ); + + tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" ); + tomahawk_pick setclientfield( "play_tomahawk_fx", 2 ); + self.current_tomahawk_weapon = "upgraded_tomahawk_zm"; } -toggle_redeemer_trigger() //checked changed to match cerberus output +toggle_redeemer_trigger() { - self endon( "disconnect" ); - flag_wait( "tomahawk_pickup_complete" ); - upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" ); - upgraded_tomahawk_trigger setinvisibletoplayer( self ); - tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" ); - while ( 1 ) - { - if ( isDefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) - { - break; - } - else - { - wait 1; - } - } - while ( 1 ) - { - if ( isDefined( self.afterlife ) && self.afterlife ) - { - upgraded_tomahawk_trigger setvisibletoplayer( self ); - tomahawk_model setvisibletoplayer( self ); - } - else - { - upgraded_tomahawk_trigger setinvisibletoplayer( self ); - tomahawk_model setinvisibletoplayer( self ); - } - wait 1; - } + self endon( "disconnect" ); + flag_wait( "tomahawk_pickup_complete" ); + upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" ); + upgraded_tomahawk_trigger setinvisibletoplayer( self ); + tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" ); + + while ( true ) + { + if ( isdefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) + break; + else + wait 1; + } + + while ( true ) + { + if ( isdefined( self.afterlife ) && self.afterlife ) + { + upgraded_tomahawk_trigger setvisibletoplayer( self ); + tomahawk_model setvisibletoplayer( self ); + } + else + { + upgraded_tomahawk_trigger setinvisibletoplayer( self ); + tomahawk_model setinvisibletoplayer( self ); + } + + wait 1; + } } -hellhole_projectile_watch() //checked matches cerberus output +hellhole_projectile_watch() { - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "frag_grenade_zm" ) - { - self thread hellhole_grenades( grenade ); - } - } + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname == "frag_grenade_zm" ) + self thread hellhole_grenades( grenade ); + } } -hellhole_tomahawk_watch() //checked matches cerberus output +hellhole_tomahawk_watch() { - self endon( "disconnect" ); - self waittill( "hellhole_time" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "bouncing_tomahawk_zm" ) - { - self thread hellhole_tomahawk( grenade ); - } - } + self endon( "disconnect" ); + + self waittill( "hellhole_time" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( weapname == "bouncing_tomahawk_zm" ) + self thread hellhole_tomahawk( grenade ); + } } -hellhole_grenades( grenade ) //checked matches cerberus output +hellhole_grenades( grenade ) { - grenade endon( "death" ); - trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" ); - while ( !grenade istouching( trig_hellhole ) ) - { - wait 0.05; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 20 ); - playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin ); - playsoundatposition( "wpn_grenade_poof", grenade.origin ); - grenade delete(); + grenade endon( "death" ); + trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" ); + + while ( !grenade istouching( trig_hellhole ) ) + wait 0.05; + + self maps\mp\zombies\_zm_score::add_to_player_score( 20 ); + playfx( level._effect["tomahawk_hellhole"], grenade.origin ); + playsoundatposition( "wpn_grenade_poof", grenade.origin ); + grenade delete(); } -hellhole_tomahawk( grenade ) //checked matches cerberus output +hellhole_tomahawk( grenade ) { - grenade endon( "death" ); - trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" ); - while ( !grenade istouching( trig_hellhole ) ) - { - wait 0.05; - } - self notify( "tomahawk_in_hellhole" ); - grenade notify( "in_hellhole" ); - playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin ); - playsoundatposition( "wpn_grenade_poof", grenade.origin ); - grenade delete(); + grenade endon( "death" ); + trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" ); + + while ( !grenade istouching( trig_hellhole ) ) + wait 0.05; + + self notify( "tomahawk_in_hellhole" ); + grenade notify( "in_hellhole" ); + playfx( level._effect["tomahawk_hellhole"], grenade.origin ); + playsoundatposition( "wpn_grenade_poof", grenade.origin ); + grenade delete(); } -spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output +spawn_infinite_powerup_drop( v_origin, str_type ) { - if ( isDefined( str_type ) ) - { - intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin ); - } - else - { - intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin ); - } + if ( isdefined( str_type ) ) + intro_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_type, v_origin ); + else + intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin ); } - diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc index 5287965..40dbcb0 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison.gsc @@ -1,1243 +1,1250 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_blockers; -#include maps/mp/zombies/_zm_audio; -#include character/c_zom_oleary; -#include character/c_zom_handsome; -#include character/c_zom_deluca; -#include character/c_zom_arlington; -#include maps/mp/zm_prison; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_alcatraz_grief_cellblock; -#include maps/mp/zm_alcatraz_weap_quest; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_weap_tomahawk; -#include maps/mp/zombies/_zm_weap_blundersplat; -#include maps/mp/zombies/_zm_weap_riotshield_prison; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_magicbox_prison; -#include maps/mp/zm_alcatraz_travel; -#include maps/mp/zm_alcatraz_traps; -#include maps/mp/zm_alcatraz_distance_tracking; -#include maps/mp/zombies/_zm_perk_divetonuke; -#include maps/mp/zombies/_zm_perk_electric_cherry; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zm_prison_achievement; -#include maps/mp/zombies/_load; -#include maps/mp/zm_alcatraz_amb; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_prison_ffotd; -#include maps/mp/zm_prison_fx; -#include maps/mp/zm_alcatraz_gamemodes; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zm_alcatraz_gamemodes; +#include maps\mp\zm_prison_fx; +#include maps\mp\zm_prison_ffotd; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zm_alcatraz_amb; +#include maps\mp\zombies\_load; +#include maps\mp\zm_prison_achievement; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zombies\_zm_perk_electric_cherry; +#include maps\mp\zombies\_zm_perk_divetonuke; +#include maps\mp\zm_alcatraz_distance_tracking; +#include maps\mp\zm_alcatraz_traps; +#include maps\mp\zm_alcatraz_travel; +#include maps\mp\zombies\_zm_magicbox_prison; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_riotshield_prison; +#include maps\mp\zombies\_zm_weap_blundersplat; +#include maps\mp\zombies\_zm_weap_tomahawk; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_alcatraz_weap_quest; +#include maps\mp\zm_alcatraz_grief_cellblock; +#include maps\mp\_visionset_mgr; +#include maps\mp\zm_prison; +#include character\c_zom_arlington; +#include character\c_zom_deluca; +#include character\c_zom_handsome; +#include character\c_zom_oleary; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_blockers; -//#using_animtree( "fxanim_props" ); //leave commented out for now for compiling - -gamemode_callback_setup() //checked matches cerberus output +gamemode_callback_setup() { - maps/mp/zm_alcatraz_gamemodes::init(); + maps\mp\zm_alcatraz_gamemodes::init(); } -init_characters() //checked matches cerberus output +init_characters() { - level.has_weasel = 0; - level.givecustomloadout = ::givecustomloadout; - level.precachecustomcharacters = ::precache_personality_characters; - level.givecustomcharacters = ::give_personality_characters; - level.setupcustomcharacterexerts = ::setup_personality_character_exerts; - flag_wait( "start_zombie_round_logic" ); + level.has_weasel = 0; + level.givecustomloadout = ::givecustomloadout; + level.precachecustomcharacters = ::precache_personality_characters; + level.givecustomcharacters = ::give_personality_characters; + level.setupcustomcharacterexerts = ::setup_personality_character_exerts; + flag_wait( "start_zombie_round_logic" ); } -zclassic_preinit() //checked matches cerberus output +zclassic_preinit() { - init_characters(); + init_characters(); } -createfx_callback() //checked changed to match cerberus output +createfx_callback() { - ents = getentarray(); - for ( i = 0; i < ents.size; i++ ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - } + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } } -main() //checked changed to match cerberus output +main() { - maps/mp/zm_prison_fx::main(); - level thread maps/mp/zm_prison_ffotd::main_start(); - level thread title_update_main_start(); - precacherumble( "brutus_footsteps" ); - level.default_game_mode = "zclassic"; - level.default_start_location = "prison"; - setup_rex_starts(); - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - maps/mp/zm_alcatraz_amb::main(); - maps/mp/zombies/_load::main(); - level.level_specific_stats_init = maps/mp/zm_prison_achievement::init_player_achievement_stats; - if ( getDvar( "createfx" ) == "1" ) - { - return; - } - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level.fixed_max_player_use_radius = 72; - level.custom_player_fake_death = ::zm_player_fake_death; - level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; - level.initial_round_wait_func = ::initial_round_wait_func; - level.special_weapon_magicbox_check = ::check_for_special_weapon_limit_exist; - level._door_open_rumble_func = ::door_rumble_on_buy; - level._zombies_round_spawn_failsafe = ::alcatraz_round_spawn_failsafe; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.zombie_init_done = ::zombie_init_done; - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.zombiemode_using_deadshot_perk = 1; - if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zclassic" ) ) - { - level.zombiemode_using_electric_cherry_perk = 1; - maps/mp/zombies/_zm_perk_electric_cherry::enable_electric_cherry_perk_for_level(); - } - else if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) - { - level.zombiemode_using_additionalprimaryweapon_perk = 1; - level.zombiemode_using_divetonuke_perk = 1; - maps/mp/zombies/_zm_perk_divetonuke::enable_divetonuke_perk_for_level(); - } - level._zmbvoxlevelspecific = ::init_level_specific_audio; - level.random_pandora_box_start = 1; - if ( is_classic() ) - { - level._default_door_custom_logic = ::alcatraz_afterlife_doors; - } - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; - level.max_equipment_attack_range = 72; - level.min_equipment_attack_range = 25; - level.vert_equipment_attack_range = 55; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - level._no_vending_machine_bump_trigs = 1; - level.custom_ai_type = []; - precachemodel( "p6_zm_al_wall_trap_control_red" ); - precachemodel( "p6_zm_al_gondola_frame_light_red" ); - precachemodel( "p6_zm_al_gondola_frame_light_green" ); - precachemodel( "fxanim_zom_al_gondola_chains_mod" ); - if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) - { - precachemodel( "p6_zm_al_shock_box_on" ); - } - level.raygun2_included = 1; - include_weapons(); - include_powerups(); - include_equipment_for_level(); - register_level_specific_client_fields(); - level thread maps/mp/zm_alcatraz_distance_tracking::zombie_tracking_init(); - maps/mp/zm_alcatraz_traps::init_fan_trap_animtree(); - maps/mp/zm_alcatraz_travel::init_gondola_chains_animtree(); - maps/mp/zombies/_zm_magicbox_prison::init(); - maps/mp/zombies/_zm::init(); - maps/mp/zombies/_zm_ai_basic::init_inert_zombies(); - maps/mp/zombies/_zm_weap_claymore::init(); - maps/mp/zombies/_zm_weap_riotshield_prison::init(); - maps/mp/zombies/_zm_weap_blundersplat::init(); - maps/mp/zombies/_zm_weap_tomahawk::init(); - level.calc_closest_player_using_paths = 1; - level._melee_weapons = []; - precacheitem( "death_throe_zm" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - level.optimise_for_splitscreen = 1; - level.culldist = 4000; - } - else - { - level.optimise_for_splitscreen = 0; - level.culldist = 18000; - } - setculldist( level.culldist ); - if ( isDefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) - { - if ( is_classic() ) - { - level.zombie_ai_limit = 20; - } - setdvar( "fx_marks_draw", 0 ); - setdvar( "disable_rope", 1 ); - setdvar( "cg_disableplayernames", 1 ); - setdvar( "disableLookAtEntityLogic", 1 ); - } - else - { - level.zombie_ai_limit = 24; - } - setdvar( "zombiemode_path_minz_bias", 13 ); - setdvar( "waypointMaxDrawDist", 12000 ); - level.zombie_vars[ "zombie_use_failsafe" ] = 0; - level.zones = []; - level.zone_manager_init_func = ::working_zone_init; - init_zones = []; - if ( is_classic() ) - { - init_zones[ 0 ] = "zone_start"; - init_zones[ 1 ] = "zone_library"; - } - else - { - init_zones[ 0 ] = "zone_cellblock_east"; - init_zones[ 1 ] = "zone_cellblock_west_warden"; - init_zones[ 2 ] = "zone_cellblock_west_barber"; - init_zones[ 3 ] = "zone_cellblock_west"; - } - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - level.speed_change_round = 15; - level.speed_change_max = 5; - level thread maps/mp/zm_alcatraz_weap_quest::init(); - onplayerconnect_callback( maps/mp/zm_alcatraz_weap_quest::tomahawk_upgrade_quest ); - onplayerconnect_callback( ::riotshield_tutorial_hint ); - onplayerconnect_callback( ::disable_powerup_if_player_on_bridge ); - level thread enable_powerup_if_no_player_on_bridge(); - onplayerconnect_callback( ::player_lightning_manager ); - onplayerconnect_callback( ::player_shockbox_glowfx ); - onplayerconnect_callback( ::player_portal_clue_vo ); - onplayerconnect_callback( maps/mp/zm_alcatraz_grief_cellblock::magicbox_face_spawn ); - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_audio_log", 9000, 200, 1, 1 ); - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_electric_cherry", 9000, 121, 1, 1 ); + maps\mp\zm_prison_fx::main(); + level thread maps\mp\zm_prison_ffotd::main_start(); + level thread title_update_main_start(); + precacherumble( "brutus_footsteps" ); + level.default_game_mode = "zclassic"; + level.default_start_location = "prison"; + setup_rex_starts(); + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + maps\mp\zm_alcatraz_amb::main(); + maps\mp\zombies\_load::main(); + level.level_specific_stats_init = maps\mp\zm_prison_achievement::init_player_achievement_stats; - level thread drop_all_barriers(); - level thread check_solo_status(); - level thread maps/mp/zm_prison_ffotd::main_end(); - level thread title_update_main_end(); - //flag_wait( "start_zombie_round_logic" ); //players can't join if this is uncommented + if ( getdvar( "createfx" ) == "1" ) + return; + + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level.fixed_max_player_use_radius = 72; + level.custom_player_fake_death = ::zm_player_fake_death; + level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; + level.initial_round_wait_func = ::initial_round_wait_func; + level.special_weapon_magicbox_check = ::check_for_special_weapon_limit_exist; + level._door_open_rumble_func = ::door_rumble_on_buy; + level._zombies_round_spawn_failsafe = ::alcatraz_round_spawn_failsafe; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.zombie_init_done = ::zombie_init_done; + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.zombiemode_using_deadshot_perk = 1; + + if ( is_gametype_active( "zclassic" ) ) + { + level.zombiemode_using_electric_cherry_perk = 1; + maps\mp\zombies\_zm_perk_electric_cherry::enable_electric_cherry_perk_for_level(); + } + else if ( is_gametype_active( "zgrief" ) ) + { + level.zombiemode_using_additionalprimaryweapon_perk = 1; + level.zombiemode_using_divetonuke_perk = 1; + maps\mp\zombies\_zm_perk_divetonuke::enable_divetonuke_perk_for_level(); + } + + level._zmbvoxlevelspecific = ::init_level_specific_audio; + level.random_pandora_box_start = 1; + + if ( is_classic() ) + level._default_door_custom_logic = ::alcatraz_afterlife_doors; + + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; + level.max_equipment_attack_range = 72; + level.min_equipment_attack_range = 25; + level.vert_equipment_attack_range = 55; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + level._no_vending_machine_bump_trigs = 1; + level.custom_ai_type = []; + precachemodel( "p6_zm_al_wall_trap_control_red" ); + precachemodel( "p6_zm_al_gondola_frame_light_red" ); + precachemodel( "p6_zm_al_gondola_frame_light_green" ); + precachemodel( "fxanim_zom_al_gondola_chains_mod" ); + + if ( is_gametype_active( "zgrief" ) ) + precachemodel( "p6_zm_al_shock_box_on" ); + + level.raygun2_included = 1; + include_weapons(); + include_powerups(); + include_equipment_for_level(); + register_level_specific_client_fields(); + level thread maps\mp\zm_alcatraz_distance_tracking::zombie_tracking_init(); + maps\mp\zm_alcatraz_traps::init_fan_trap_animtree(); + maps\mp\zm_alcatraz_travel::init_gondola_chains_animtree(); + maps\mp\zombies\_zm_magicbox_prison::init(); + maps\mp\zombies\_zm::init(); + maps\mp\zombies\_zm_ai_basic::init_inert_zombies(); + maps\mp\zombies\_zm_weap_claymore::init(); + maps\mp\zombies\_zm_weap_riotshield_prison::init(); + maps\mp\zombies\_zm_weap_blundersplat::init(); + maps\mp\zombies\_zm_weap_tomahawk::init(); + level.calc_closest_player_using_paths = 1; + level._melee_weapons = []; + precacheitem( "death_throe_zm" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + { + level.optimise_for_splitscreen = 1; + level.culldist = 4000; + } + else + { + level.optimise_for_splitscreen = 0; + level.culldist = 18000; + } + + setculldist( level.culldist ); + + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + { + if ( is_classic() ) + level.zombie_ai_limit = 20; + + setdvar( "fx_marks_draw", 0 ); + setdvar( "disable_rope", 1 ); + setdvar( "cg_disableplayernames", 1 ); + setdvar( "disableLookAtEntityLogic", 1 ); + } + else + level.zombie_ai_limit = 24; + + setdvar( "zombiemode_path_minz_bias", 13 ); + setdvar( "waypointMaxDrawDist", 12000 ); + level.zombie_vars["zombie_use_failsafe"] = 0; + level.zones = []; + level.zone_manager_init_func = ::working_zone_init; + + if ( is_classic() ) + { + init_zones[0] = "zone_start"; + init_zones[1] = "zone_library"; + } + else + { + init_zones[0] = "zone_cellblock_east"; + init_zones[1] = "zone_cellblock_west_warden"; + init_zones[2] = "zone_cellblock_west_barber"; + init_zones[3] = "zone_cellblock_west"; + } + + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + level.speed_change_round = 15; + level.speed_change_max = 5; + level thread maps\mp\zm_alcatraz_weap_quest::init(); + onplayerconnect_callback( maps\mp\zm_alcatraz_weap_quest::tomahawk_upgrade_quest ); + onplayerconnect_callback( ::riotshield_tutorial_hint ); + onplayerconnect_callback( ::disable_powerup_if_player_on_bridge ); + level thread enable_powerup_if_no_player_on_bridge(); + onplayerconnect_callback( ::player_lightning_manager ); + onplayerconnect_callback( ::player_shockbox_glowfx ); + onplayerconnect_callback( ::player_portal_clue_vo ); + onplayerconnect_callback( maps\mp\zm_alcatraz_grief_cellblock::magicbox_face_spawn ); + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_audio_log", 9000, 200, 1, 1 ); + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_electric_cherry", 9000, 121, 1, 1 ); + level thread drop_all_barriers(); + level thread check_solo_status(); + level thread maps\mp\zm_prison_ffotd::main_end(); + level thread title_update_main_end(); + flag_wait( "start_zombie_round_logic" ); } -title_update_main_start() //checked matches cerberus output +title_update_main_start() { + } -title_update_main_end() //checked changed to match cerberus output +title_update_main_end() { - a_nodes = getanynodearray( ( 969, 6708, 239 ), 200 ); - foreach ( node in a_nodes ) - { - node.no_teleport = 1; - } - level.equipment_tu_dead_zone_pos = []; - level.equipment_tu_dead_zone_rad2 = []; - level.equipment_tu_dead_zone_pos[ 0 ] = ( 447, 5963, 275 ); - level.equipment_tu_dead_zone_rad2[ 0 ] = 2500; - level.equipment_tu_dead_zone_pos[ 1 ] = ( 896, 8400, 1544 ); - level.equipment_tu_dead_zone_rad2[ 1 ] = 14400; + a_nodes = getanynodearray( ( 969, 6708, 239 ), 200 ); + + foreach ( node in a_nodes ) + node.no_teleport = 1; + + level.equipment_tu_dead_zone_pos = []; + level.equipment_tu_dead_zone_rad2 = []; + level.equipment_tu_dead_zone_pos[0] = ( 447, 5963, 275 ); + level.equipment_tu_dead_zone_rad2[0] = 2500; + level.equipment_tu_dead_zone_pos[1] = ( 896, 8400, 1544 ); + level.equipment_tu_dead_zone_rad2[1] = 14400; } register_level_specific_client_fields() { - registerclientfield( "actor", "fan_trap_blood_fx", 9000, 1, "int" ); - registerclientfield( "actor", "acid_trap_death_fx", 9000, 1, "int" ); - registerclientfield( "toplayer", "toggle_lightning", 9000, 1, "int" ); - registerclientfield( "toplayer", "rumble_electric_chair", 9000, 2, "int" ); - registerclientfield( "toplayer", "effects_escape_flight", 9000, 3, "int" ); - registerclientfield( "toplayer", "rumble_gondola", 9000, 1, "int" ); - registerclientfield( "toplayer", "rumble_fan_trap", 9000, 1, "int" ); - registerclientfield( "toplayer", "rumble_sq_bg", 9000, 1, "int" ); - registerclientfield( "toplayer", "rumble_door_open", 9000, 1, "int" ); - registerclientfield( "world", "toggle_futz", 9000, 1, "int" ); - registerclientfield( "world", "dryer_stage", 9000, 2, "int" ); - registerclientfield( "world", "fog_stage", 9000, 2, "int" ); - registerclientfield( "world", "scripted_lightning_flash", 9000, 1, "int" ); - registerclientfield( "world", "warden_fence_down", 9000, 1, "int" ); - registerclientfield( "world", "master_key_is_lowered", 9000, 1, "int" ); - registerclientfield( "world", "fxanim_pulley_down_start", 9000, 2, "int" ); - registerclientfield( "world", "sq_bg_reward_portal", 9000, 1, "int" ); - registerclientfield( "toplayer", "spoon_visual_state", 9000, 2, "int" ); - registerclientfield( "scriptmover", "afterlife_shockbox_glow", 9000, 1, "int" ); - registerclientfield( "scriptmover", "toggle_perk_machine_power", 9000, 2, "int" ); + registerclientfield( "actor", "fan_trap_blood_fx", 9000, 1, "int" ); + registerclientfield( "actor", "acid_trap_death_fx", 9000, 1, "int" ); + registerclientfield( "toplayer", "toggle_lightning", 9000, 1, "int" ); + registerclientfield( "toplayer", "rumble_electric_chair", 9000, 2, "int" ); + registerclientfield( "toplayer", "effects_escape_flight", 9000, 3, "int" ); + registerclientfield( "toplayer", "rumble_gondola", 9000, 1, "int" ); + registerclientfield( "toplayer", "rumble_fan_trap", 9000, 1, "int" ); + registerclientfield( "toplayer", "rumble_sq_bg", 9000, 1, "int" ); + registerclientfield( "toplayer", "rumble_door_open", 9000, 1, "int" ); + registerclientfield( "world", "toggle_futz", 9000, 1, "int" ); + registerclientfield( "world", "dryer_stage", 9000, 2, "int" ); + registerclientfield( "world", "fog_stage", 9000, 2, "int" ); + registerclientfield( "world", "scripted_lightning_flash", 9000, 1, "int" ); + registerclientfield( "world", "warden_fence_down", 9000, 1, "int" ); + registerclientfield( "world", "master_key_is_lowered", 9000, 1, "int" ); + registerclientfield( "world", "fxanim_pulley_down_start", 9000, 2, "int" ); + registerclientfield( "world", "sq_bg_reward_portal", 9000, 1, "int" ); + registerclientfield( "toplayer", "spoon_visual_state", 9000, 2, "int" ); + registerclientfield( "scriptmover", "afterlife_shockbox_glow", 9000, 1, "int" ); + registerclientfield( "scriptmover", "toggle_perk_machine_power", 9000, 2, "int" ); } givecustomloadout( takeallweapons, alreadyspawned ) { - self giveweapon( "knife_zm_alcatraz" ); - self set_player_melee_weapon( "knife_zm_alcatraz" ); - self give_start_weapon( 1 ); + self giveweapon( "knife_zm_alcatraz" ); + self set_player_melee_weapon( "knife_zm_alcatraz" ); + self give_start_weapon( 1 ); } -custom_vending_precaching() //checked changed to match cerberus output +custom_vending_precaching() { - if ( level._custom_perks.size > 0 ) - { - a_keys = getarraykeys( level._custom_perks ); - for ( i = 0; i < a_keys.size; i++ ) - { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].precache_func ) ) - { - level [[ level._custom_perks[ a_keys[ i ] ].precache_func ]](); - } - } - } - if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) - { - precacheitem( "zombie_knuckle_crack" ); - precachemodel( "p6_anim_zm_buildable_pap" ); - precachemodel( "p6_anim_zm_buildable_pap_on" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); - level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zombie_packapunch" ); - level.machine_assets[ "packapunch" ] = spawnstruct(); - level.machine_assets[ "packapunch" ].weapon = "zombie_knuckle_crack"; - level.machine_assets[ "packapunch" ].off_model = "p6_zm_al_vending_pap_on"; - level.machine_assets[ "packapunch" ].on_model = "p6_zm_al_vending_pap_on"; - level.machine_assets[ "packapunch" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "packapunch" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); - precacheshader( "specialty_additionalprimaryweapon_zombies" ); - precachemodel( "p6_zm_al_vending_three_gun_on" ); - precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); - level._effect[ "additionalprimaryweapon_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "additionalprimaryweapon" ] = spawnstruct(); - level.machine_assets[ "additionalprimaryweapon" ].weapon = "zombie_perk_bottle_additionalprimaryweapon"; - level.machine_assets[ "additionalprimaryweapon" ].off_model = "p6_zm_al_vending_three_gun_on"; - level.machine_assets[ "additionalprimaryweapon" ].on_model = "p6_zm_al_vending_three_gun_on"; - level.machine_assets[ "additionalprimaryweapon" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "additionalprimaryweapon" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - precacheitem( "zombie_perk_bottle_deadshot" ); - precacheshader( "specialty_ads_zombies" ); - precachemodel( "p6_zm_al_vending_ads_on" ); - precachestring( &"ZOMBIE_PERK_DEADSHOT" ); - level._effect[ "deadshot_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "deadshot" ] = spawnstruct(); - level.machine_assets[ "deadshot" ].weapon = "zombie_perk_bottle_deadshot"; - level.machine_assets[ "deadshot" ].off_model = "p6_zm_al_vending_ads_on"; - level.machine_assets[ "deadshot" ].on_model = "p6_zm_al_vending_ads_on"; - level.machine_assets[ "deadshot" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "deadshot" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "p6_zm_al_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "divetonuke" ] = spawnstruct(); - level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; - level.machine_assets[ "divetonuke" ].off_model = "p6_zm_al_vending_nuke_on"; - level.machine_assets[ "divetonuke" ].on_model = "p6_zm_al_vending_nuke_on"; - level.machine_assets[ "divetonuke" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "divetonuke" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) - { - precacheitem( "zombie_perk_bottle_doubletap" ); - precacheshader( "specialty_doubletap_zombies" ); - precachemodel( "p6_zm_al_vending_doubletap2_on" ); - precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); - level._effect[ "doubletap_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "doubletap" ] = spawnstruct(); - level.machine_assets[ "doubletap" ].weapon = "zombie_perk_bottle_doubletap"; - level.machine_assets[ "doubletap" ].off_model = "p6_zm_al_vending_doubletap2_on"; - level.machine_assets[ "doubletap" ].on_model = "p6_zm_al_vending_doubletap2_on"; - level.machine_assets[ "doubletap" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "doubletap" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) - { - precacheitem( "zombie_perk_bottle_jugg" ); - precacheshader( "specialty_juggernaut_zombies" ); - precachemodel( "p6_zm_al_vending_jugg_on" ); - precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); - level._effect[ "jugger_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "juggernog" ] = spawnstruct(); - level.machine_assets[ "juggernog" ].weapon = "zombie_perk_bottle_jugg"; - level.machine_assets[ "juggernog" ].off_model = "p6_zm_al_vending_jugg_on"; - level.machine_assets[ "juggernog" ].on_model = "p6_zm_al_vending_jugg_on"; - level.machine_assets[ "juggernog" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "juggernog" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - precacheitem( "zombie_perk_bottle_marathon" ); - precacheshader( "specialty_marathon_zombies" ); - precachemodel( "zombie_vending_marathon" ); - precachemodel( "zombie_vending_marathon_on" ); - precachestring( &"ZOMBIE_PERK_MARATHON" ); - level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); - level.machine_assets[ "marathon" ] = spawnstruct(); - level.machine_assets[ "marathon" ].weapon = "zombie_perk_bottle_marathon"; - level.machine_assets[ "marathon" ].off_model = "zombie_vending_marathon"; - level.machine_assets[ "marathon" ].on_model = "zombie_vending_marathon_on"; - } - if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) - { - precacheitem( "zombie_perk_bottle_revive" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "zombie_vending_revive" ); - precachemodel( "zombie_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); - level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - level.machine_assets[ "revive" ] = spawnstruct(); - level.machine_assets[ "revive" ].weapon = "zombie_perk_bottle_revive"; - level.machine_assets[ "revive" ].off_model = "zombie_vending_revive"; - level.machine_assets[ "revive" ].on_model = "zombie_vending_revive_on"; - } - if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) - { - precacheitem( "zombie_perk_bottle_sleight" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "p6_zm_al_vending_sleight_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); - level.machine_assets[ "speedcola" ] = spawnstruct(); - level.machine_assets[ "speedcola" ].weapon = "zombie_perk_bottle_sleight"; - level.machine_assets[ "speedcola" ].off_model = "p6_zm_al_vending_sleight_on"; - level.machine_assets[ "speedcola" ].on_model = "p6_zm_al_vending_sleight_on"; - level.machine_assets[ "speedcola" ].power_on_callback = ::custom_vending_power_on; - level.machine_assets[ "speedcola" ].power_off_callback = ::custom_vending_power_off; - } - if ( isDefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) - { - precacheitem( "zombie_perk_bottle_tombstone" ); - precacheshader( "specialty_tombstone_zombies" ); - precachemodel( "zombie_vending_tombstone" ); - precachemodel( "zombie_vending_tombstone_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "tombstone" ] = spawnstruct(); - level.machine_assets[ "tombstone" ].weapon = "zombie_perk_bottle_tombstone"; - level.machine_assets[ "tombstone" ].off_model = "zombie_vending_tombstone"; - level.machine_assets[ "tombstone" ].on_model = "zombie_vending_tombstone_on"; - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - precacheitem( "zombie_perk_bottle_whoswho" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_vending_chugabud" ); - precachemodel( "p6_zm_vending_chugabud_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "whoswho" ] = spawnstruct(); - level.machine_assets[ "whoswho" ].weapon = "zombie_perk_bottle_whoswho"; - level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; - level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; - } + if ( level._custom_perks.size > 0 ) + { + a_keys = getarraykeys( level._custom_perks ); + + for ( i = 0; i < a_keys.size; i++ ) + { + if ( isdefined( level._custom_perks[a_keys[i]].precache_func ) ) + level [[ level._custom_perks[a_keys[i]].precache_func ]](); + } + } + + if ( isdefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) + { + precacheitem( "zombie_knuckle_crack" ); + precachemodel( "p6_anim_zm_buildable_pap" ); + precachemodel( "p6_anim_zm_buildable_pap_on" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); + level._effect["packapunch_fx"] = loadfx( "maps/zombie/fx_zombie_packapunch" ); + level.machine_assets["packapunch"] = spawnstruct(); + level.machine_assets["packapunch"].weapon = "zombie_knuckle_crack"; + level.machine_assets["packapunch"].off_model = "p6_zm_al_vending_pap_on"; + level.machine_assets["packapunch"].on_model = "p6_zm_al_vending_pap_on"; + level.machine_assets["packapunch"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["packapunch"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + { + precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); + precacheshader( "specialty_additionalprimaryweapon_zombies" ); + precachemodel( "p6_zm_al_vending_three_gun_on" ); + precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); + level._effect["additionalprimaryweapon_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["additionalprimaryweapon"] = spawnstruct(); + level.machine_assets["additionalprimaryweapon"].weapon = "zombie_perk_bottle_additionalprimaryweapon"; + level.machine_assets["additionalprimaryweapon"].off_model = "p6_zm_al_vending_three_gun_on"; + level.machine_assets["additionalprimaryweapon"].on_model = "p6_zm_al_vending_three_gun_on"; + level.machine_assets["additionalprimaryweapon"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["additionalprimaryweapon"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + { + precacheitem( "zombie_perk_bottle_deadshot" ); + precacheshader( "specialty_ads_zombies" ); + precachemodel( "p6_zm_al_vending_ads_on" ); + precachestring( &"ZOMBIE_PERK_DEADSHOT" ); + level._effect["deadshot_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["deadshot"] = spawnstruct(); + level.machine_assets["deadshot"].weapon = "zombie_perk_bottle_deadshot"; + level.machine_assets["deadshot"].off_model = "p6_zm_al_vending_ads_on"; + level.machine_assets["deadshot"].on_model = "p6_zm_al_vending_ads_on"; + level.machine_assets["deadshot"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["deadshot"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) + { + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "p6_zm_al_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect["divetonuke_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["divetonuke"] = spawnstruct(); + level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets["divetonuke"].off_model = "p6_zm_al_vending_nuke_on"; + level.machine_assets["divetonuke"].on_model = "p6_zm_al_vending_nuke_on"; + level.machine_assets["divetonuke"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["divetonuke"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + { + precacheitem( "zombie_perk_bottle_doubletap" ); + precacheshader( "specialty_doubletap_zombies" ); + precachemodel( "p6_zm_al_vending_doubletap2_on" ); + precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); + level._effect["doubletap_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["doubletap"] = spawnstruct(); + level.machine_assets["doubletap"].weapon = "zombie_perk_bottle_doubletap"; + level.machine_assets["doubletap"].off_model = "p6_zm_al_vending_doubletap2_on"; + level.machine_assets["doubletap"].on_model = "p6_zm_al_vending_doubletap2_on"; + level.machine_assets["doubletap"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["doubletap"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + { + precacheitem( "zombie_perk_bottle_jugg" ); + precacheshader( "specialty_juggernaut_zombies" ); + precachemodel( "p6_zm_al_vending_jugg_on" ); + precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); + level._effect["jugger_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["juggernog"] = spawnstruct(); + level.machine_assets["juggernog"].weapon = "zombie_perk_bottle_jugg"; + level.machine_assets["juggernog"].off_model = "p6_zm_al_vending_jugg_on"; + level.machine_assets["juggernog"].on_model = "p6_zm_al_vending_jugg_on"; + level.machine_assets["juggernog"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["juggernog"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + { + precacheitem( "zombie_perk_bottle_marathon" ); + precacheshader( "specialty_marathon_zombies" ); + precachemodel( "zombie_vending_marathon" ); + precachemodel( "zombie_vending_marathon_on" ); + precachestring( &"ZOMBIE_PERK_MARATHON" ); + level._effect["marathon_light"] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); + level.machine_assets["marathon"] = spawnstruct(); + level.machine_assets["marathon"].weapon = "zombie_perk_bottle_marathon"; + level.machine_assets["marathon"].off_model = "zombie_vending_marathon"; + level.machine_assets["marathon"].on_model = "zombie_vending_marathon_on"; + } + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + { + precacheitem( "zombie_perk_bottle_revive" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "zombie_vending_revive" ); + precachemodel( "zombie_vending_revive_on" ); + precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); + level._effect["revive_light"] = loadfx( "misc/fx_zombie_cola_revive_on" ); + level._effect["revive_light_flicker"] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); + level.machine_assets["revive"] = spawnstruct(); + level.machine_assets["revive"].weapon = "zombie_perk_bottle_revive"; + level.machine_assets["revive"].off_model = "zombie_vending_revive"; + level.machine_assets["revive"].on_model = "zombie_vending_revive_on"; + } + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + { + precacheitem( "zombie_perk_bottle_sleight" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "p6_zm_al_vending_sleight_on" ); + precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); + level._effect["sleight_light"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_smk" ); + level.machine_assets["speedcola"] = spawnstruct(); + level.machine_assets["speedcola"].weapon = "zombie_perk_bottle_sleight"; + level.machine_assets["speedcola"].off_model = "p6_zm_al_vending_sleight_on"; + level.machine_assets["speedcola"].on_model = "p6_zm_al_vending_sleight_on"; + level.machine_assets["speedcola"].power_on_callback = maps\mp\zm_prison::custom_vending_power_on; + level.machine_assets["speedcola"].power_off_callback = maps\mp\zm_prison::custom_vending_power_off; + } + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + { + precacheitem( "zombie_perk_bottle_tombstone" ); + precacheshader( "specialty_tombstone_zombies" ); + precachemodel( "zombie_vending_tombstone" ); + precachemodel( "zombie_vending_tombstone_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["tombstone"] = spawnstruct(); + level.machine_assets["tombstone"].weapon = "zombie_perk_bottle_tombstone"; + level.machine_assets["tombstone"].off_model = "zombie_vending_tombstone"; + level.machine_assets["tombstone"].on_model = "zombie_vending_tombstone_on"; + } + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + { + precacheitem( "zombie_perk_bottle_whoswho" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_vending_chugabud" ); + precachemodel( "p6_zm_vending_chugabud_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["whoswho"] = spawnstruct(); + level.machine_assets["whoswho"].weapon = "zombie_perk_bottle_whoswho"; + level.machine_assets["whoswho"].off_model = "p6_zm_vending_chugabud"; + level.machine_assets["whoswho"].on_model = "p6_zm_vending_chugabud_on"; + } } -custom_vending_power_on() //checked matches cerberus output +custom_vending_power_on() { - self setclientfield( "toggle_perk_machine_power", 2 ); + self setclientfield( "toggle_perk_machine_power", 2 ); } -custom_vending_power_off() //checked matches cerberus output +custom_vending_power_off() { - self setclientfield( "toggle_perk_machine_power", 1 ); + self setclientfield( "toggle_perk_machine_power", 1 ); } -precache_personality_characters() //checked matches cerberus output +precache_personality_characters() { - character/c_zom_arlington::precache(); - character/c_zom_deluca::precache(); - character/c_zom_handsome::precache(); - character/c_zom_oleary::precache(); - precachemodel( "c_zom_arlington_coat_viewhands" ); - precachemodel( "c_zom_deluca_longsleeve_viewhands" ); - precachemodel( "c_zom_handsome_sleeveless_viewhands" ); - precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); + character\c_zom_arlington::precache(); + character\c_zom_deluca::precache(); + character\c_zom_handsome::precache(); + character\c_zom_oleary::precache(); + precachemodel( "c_zom_arlington_coat_viewhands" ); + precachemodel( "c_zom_deluca_longsleeve_viewhands" ); + precachemodel( "c_zom_handsome_sleeveless_viewhands" ); + precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); } -give_personality_characters() //checked matches cerberus output +give_personality_characters() { - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_arlington_coat_viewhands" ) ) - { - return; - } - self detachall(); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = assign_lowest_unused_character_index(); - } - self.favorite_wall_weapons_list = []; - /* + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_arlington_coat_viewhands" ) ) + return; + + self detachall(); + + if ( !isdefined( self.characterindex ) ) + self.characterindex = assign_lowest_unused_character_index(); + + self.favorite_wall_weapons_list = []; /# - if ( getDvar( #"40772CF1" ) != "" ) - { - self.characterindex = getDvarInt( #"40772CF1" ); + if ( getdvar( _hash_40772CF1 ) != "" ) + self.characterindex = getdvarint( _hash_40772CF1 ); #/ - } - */ - switch( self.characterindex ) - { - case 0: - self character/c_zom_oleary::main(); - self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "judge_zm"; - self set_player_is_female( 0 ); - self.character_name = "Finn"; - break; - case 1: - self character/c_zom_deluca::main(); - self setviewmodel( "c_zom_deluca_longsleeve_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "thompson_zm"; - self set_player_is_female( 0 ); - self.character_name = "Sal"; - break; - case 2: - self character/c_zom_handsome::main(); - self setviewmodel( "c_zom_handsome_sleeveless_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "blundergat_zm"; - self set_player_is_female( 0 ); - self.character_name = "Billy"; - break; - case 3: - self character/c_zom_arlington::main(); - self setviewmodel( "c_zom_arlington_coat_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "ray_gun_zm"; - self set_player_is_female( 0 ); - self.character_name = "Arlington"; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self thread set_exert_id(); + switch ( self.characterindex ) + { + case "0": + self character\c_zom_oleary::main(); + self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "judge_zm"; + self set_player_is_female( 0 ); + self.character_name = "Finn"; + break; + case "1": + self character\c_zom_deluca::main(); + self setviewmodel( "c_zom_deluca_longsleeve_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "thompson_zm"; + self set_player_is_female( 0 ); + self.character_name = "Sal"; + break; + case "2": + self character\c_zom_handsome::main(); + self setviewmodel( "c_zom_handsome_sleeveless_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "blundergat_zm"; + self set_player_is_female( 0 ); + self.character_name = "Billy"; + break; + case "3": + self character\c_zom_arlington::main(); + self setviewmodel( "c_zom_arlington_coat_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "ray_gun_zm"; + self set_player_is_female( 0 ); + self.character_name = "Arlington"; + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self thread set_exert_id(); } -set_exert_id() //checked matches cerberus output +set_exert_id() { - self endon( "disconnect" ); - wait_network_frame(); - wait_network_frame(); - self maps/mp/zombies/_zm_audio::setexertvoice( self.characterindex + 1 ); + self endon( "disconnect" ); + wait_network_frame(); + wait_network_frame(); + self maps\mp\zombies\_zm_audio::setexertvoice( self.characterindex + 1 ); } -assign_lowest_unused_character_index() //checked changed to match cerberus output +assign_lowest_unused_character_index() { - charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; - players = get_players(); - if ( players.size == 1 ) - { - charindexarray = array_randomize( charindexarray ); - if ( charindexarray[ 0 ] == 3 ) - { - level.has_weasel = 1; - } - return charindexarray[ 0 ]; - } - else - { - n_characters_defined = 0; - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - n_characters_defined++; - } - } - if ( charindexarray.size > 0 ) - { - if ( n_characters_defined == ( players.size - 1 ) ) - { - if ( !is_true( level.has_weasel ) ) - { - level.has_weasel = 1; - return 3; - } - } - charindexarray = array_randomize( charindexarray ); - if ( charindexarray[ 0 ] == 3 ) - { - level.has_weasel = 1; - } - return charindexarray[ 0 ]; - } - } - return 0; + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + + if ( charindexarray[0] == 3 ) + level.has_weasel = 1; + + return charindexarray[0]; + } + else + { + n_characters_defined = 0; + + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + arrayremovevalue( charindexarray, player.characterindex, 0 ); + n_characters_defined++; + } + } + + if ( charindexarray.size > 0 ) + { + if ( n_characters_defined == players.size - 1 ) + { + if ( !( isdefined( level.has_weasel ) && level.has_weasel ) ) + { + level.has_weasel = 1; + return 3; + } + } + + charindexarray = array_randomize( charindexarray ); + + if ( charindexarray[0] == 3 ) + level.has_weasel = 1; + + return charindexarray[0]; + } + } + + return 0; } -initcharacterstartindex() //checked matches cerberus output +initcharacterstartindex() { - level.characterstartindex = randomint( 4 ); + level.characterstartindex = randomint( 4 ); } -zombie_init_done() //checked matches cerberus output +zombie_init_done() { - self.allowpain = 0; - self setphysparams( 15, 0, 48 ); + self.allowpain = 0; + self setphysparams( 15, 0, 48 ); } -zm_player_fake_death_cleanup() //checked matches cerberus output +zm_player_fake_death_cleanup() { - if ( isDefined( self._fall_down_anchor ) ) - { - self._fall_down_anchor delete(); - self._fall_down_anchor = undefined; - } + if ( isdefined( self._fall_down_anchor ) ) + { + self._fall_down_anchor delete(); + self._fall_down_anchor = undefined; + } } -zm_player_fake_death( vdir ) //checked matches cerberus output +zm_player_fake_death( vdir ) { - level notify( "fake_death" ); - self notify( "fake_death" ); - stance = self getstance(); - self.ignoreme = 1; - self enableinvulnerability(); - self takeallweapons(); - if ( isDefined( self.insta_killed ) && self.insta_killed ) - { - self maps/mp/zombies/_zm::player_fake_death(); - self allowprone( 1 ); - self allowcrouch( 0 ); - self allowstand( 0 ); - wait 0.25; - self freezecontrols( 1 ); - } - else - { - self freezecontrols( 1 ); - self thread fall_down( vdir, stance ); - wait 1; - } + level notify( "fake_death" ); + self notify( "fake_death" ); + stance = self getstance(); + self.ignoreme = 1; + self enableinvulnerability(); + self takeallweapons(); + + if ( isdefined( self.insta_killed ) && self.insta_killed ) + { + self maps\mp\zombies\_zm::player_fake_death(); + self allowprone( 1 ); + self allowcrouch( 0 ); + self allowstand( 0 ); + wait 0.25; + self freezecontrols( 1 ); + } + else + { + self freezecontrols( 1 ); + self thread fall_down( vdir, stance ); + wait 1; + } } -fall_down( vdir, stance ) //checked matches cerberus output +fall_down( vdir, stance ) { - self endon( "disconnect" ); - level endon( "game_module_ended" ); - self ghost(); - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - falling = stance != "prone"; - if ( falling ) - { - origin = playerphysicstrace( origin, origin + xyspeed ); - eye = self get_eye(); - floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; - origin += ( 0, 0, floor_height ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - } - self freezecontrols( 1 ); - if ( falling ) - { - linker waittill( "movedone" ); - } - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - if ( falling ) - { - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - } - wait 15; - linker delete(); + self endon( "disconnect" ); + level endon( "game_module_ended" ); + self ghost(); + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + falling = stance != "prone"; + + if ( falling ) + { + origin = playerphysicstrace( origin, origin + xyspeed ); + eye = self get_eye(); + floor_height = 10 + origin[2] - eye[2]; + origin += ( 0, 0, floor_height ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + } + + self freezecontrols( 1 ); + + if ( falling ) + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + + if ( falling ) + { + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + } + + wait 15; + linker delete(); } -initial_round_wait_func() //checked matches cerberus output +initial_round_wait_func() { - flag_wait( "initial_blackscreen_passed" ); + flag_wait( "initial_blackscreen_passed" ); } -offhand_weapon_overrride() //checked matches cerberus output +offhand_weapon_overrride() { - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_tactical_grenade_for_level( "emp_grenade_zm" ); - register_placeable_mine_for_level( "claymore_zm" ); - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "knife_zm_alcatraz" ); - register_melee_weapon_for_level( "spoon_zm_alcatraz" ); - register_melee_weapon_for_level( "spork_zm_alcatraz" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm_alcatraz"; - register_equipment_for_level( "alcatraz_shield_zm" ); - level.zombie_equipment_player_init = undefined; - level.equipment_safe_to_drop = ::equipment_safe_to_drop; + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_tactical_grenade_for_level( "emp_grenade_zm" ); + register_placeable_mine_for_level( "claymore_zm" ); + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "knife_zm_alcatraz" ); + register_melee_weapon_for_level( "spoon_zm_alcatraz" ); + register_melee_weapon_for_level( "spork_zm_alcatraz" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm_alcatraz"; + register_equipment_for_level( "alcatraz_shield_zm" ); + level.zombie_equipment_player_init = undefined; + level.equipment_safe_to_drop = ::equipment_safe_to_drop; } -equipment_safe_to_drop( weapon ) //checked changed to match cerberus output +equipment_safe_to_drop( weapon ) { - if ( !isDefined( self.origin ) ) - { - return 1; - } - for ( i = 0; i < level.equipment_tu_dead_zone_pos.size; i++ ) - { - if ( distancesquared( level.equipment_tu_dead_zone_pos[ i ], weapon.origin ) < level.equipment_tu_dead_zone_rad2[ i ] ) - { - return 0; - } - } - s_check = getstruct( "plane_equipment_safe_check", "targetname" ); - if ( distance2dsquared( self.origin, s_check.origin ) < 65536 && self.origin[ 2 ] > s_check.origin[ 2 ] ) - { - return 0; - } - return 1; + if ( !isdefined( self.origin ) ) + return true; + + for ( i = 0; i < level.equipment_tu_dead_zone_pos.size; i++ ) + { + if ( distancesquared( level.equipment_tu_dead_zone_pos[i], weapon.origin ) < level.equipment_tu_dead_zone_rad2[i] ) + return false; + } + + s_check = getstruct( "plane_equipment_safe_check", "targetname" ); + + if ( distance2dsquared( self.origin, s_check.origin ) < 65536 && self.origin[2] > s_check.origin[2] ) + return false; + + return true; } -offhand_weapon_give_override( str_weapon ) //checked matches cerberus output +offhand_weapon_give_override( str_weapon ) { - self endon( "death" ); - if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) - { - self setweaponammoclip( self get_player_tactical_grenade(), 0 ); - self takeweapon( self get_player_tactical_grenade() ); - } - return 0; + self endon( "death" ); + + if ( is_tactical_grenade( str_weapon ) && isdefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) + { + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + + return 0; } -custom_add_weapons() //checked changed to match cerberus output +custom_add_weapons() { - add_zombie_weapon_prison( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "wpck_crappy", "", undefined ); - add_zombie_weapon_prison( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon_prison( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_pistol", "", undefined, 1 ); - add_zombie_weapon_prison( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 900, "wpck_pistol", "", undefined ); - add_zombie_weapon_prison( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_dual", "", undefined, 1 ); - add_zombie_weapon_prison( "uzi_zm", "uzi_upgraded_zm", &"ZOMBIE_WEAPON_UZI", 1500, "wpck_smg", "", undefined ); - add_zombie_weapon_prison( "thompson_zm", "thompson_upgraded_zm", &"ZMWEAPON_THOMPSON_WALLBUY", 1500, "wpck_smg", "", 800 ); - add_zombie_weapon_prison( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "wpck_smg", "", 500 ); - add_zombie_weapon_prison( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1200, "wpck_crappy", "", undefined, 1 ); - add_zombie_weapon_prison( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1200, "wpck_shot", "", undefined ); - add_zombie_weapon_prison( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "wpck_shot", "", undefined ); - add_zombie_weapon_prison( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_shot", "", undefined, 1 ); - add_zombie_weapon_prison( "blundergat_zm", "blundergat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined, 1 ); - add_zombie_weapon_prison( "blundersplat_zm", "blundersplat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined ); - add_zombie_weapon_prison( "ak47_zm", "ak47_upgraded_zm", &"ZOMBIE_WEAPON_AK47", 500, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon_prison( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "wpck_mg", "", undefined ); - add_zombie_weapon_prison( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon_prison( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon_prison( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_shot", "", undefined, 1 ); - add_zombie_weapon_prison( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_snipe", "", undefined, 1 ); - add_zombie_weapon_prison( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "wpck_snipe", "", undefined, 1 ); - add_zombie_weapon_prison( "minigun_alcatraz_zm", "minigun_alcatraz_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon_prison( "lsat_zm", "lsat_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); - add_zombie_weapon_prison( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon_prison( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1500, "grenade", "", undefined ); - add_zombie_weapon_prison( "willy_pete_zm", undefined, &"ZOMBIE_WEAPON_SMOKE_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon_prison( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon_prison( "bouncing_tomahawk_zm", "upgraded_tomahawk_zm", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "", "", undefined, 1 ); - add_zombie_weapon_prison( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - if ( isdefined( level.raygun2_included ) && level.raygun2_included ) - { - add_zombie_weapon_prison( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); - } + add_zombie_weapon_prison( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "wpck_crappy", "", undefined ); + add_zombie_weapon_prison( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon_prison( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_pistol", "", undefined, 1 ); + add_zombie_weapon_prison( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 900, "wpck_pistol", "", undefined ); + add_zombie_weapon_prison( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_dual", "", undefined, 1 ); + add_zombie_weapon_prison( "uzi_zm", "uzi_upgraded_zm", &"ZOMBIE_WEAPON_UZI", 1500, "wpck_smg", "", undefined ); + add_zombie_weapon_prison( "thompson_zm", "thompson_upgraded_zm", &"ZMWEAPON_THOMPSON_WALLBUY", 1500, "wpck_smg", "", 800 ); + add_zombie_weapon_prison( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "wpck_smg", "", 500 ); + add_zombie_weapon_prison( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1200, "wpck_crappy", "", undefined, 1 ); + add_zombie_weapon_prison( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1200, "wpck_shot", "", undefined ); + add_zombie_weapon_prison( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "wpck_shot", "", undefined ); + add_zombie_weapon_prison( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_shot", "", undefined, 1 ); + add_zombie_weapon_prison( "blundergat_zm", "blundergat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined, 1 ); + add_zombie_weapon_prison( "blundersplat_zm", "blundersplat_upgraded_zm", &"ZOMBIE_WEAPON_BLUNDERGAT", 500, "wpck_shot", "", undefined ); + add_zombie_weapon_prison( "ak47_zm", "ak47_upgraded_zm", &"ZOMBIE_WEAPON_AK47", 500, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon_prison( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "wpck_mg", "", undefined ); + add_zombie_weapon_prison( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon_prison( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon_prison( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_shot", "", undefined, 1 ); + add_zombie_weapon_prison( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_snipe", "", undefined, 1 ); + add_zombie_weapon_prison( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "wpck_snipe", "", undefined, 1 ); + add_zombie_weapon_prison( "minigun_alcatraz_zm", "minigun_alcatraz_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon_prison( "lsat_zm", "lsat_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_mg", "", undefined, 1 ); + add_zombie_weapon_prison( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon_prison( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1500, "grenade", "", undefined ); + add_zombie_weapon_prison( "willy_pete_zm", undefined, &"ZOMBIE_WEAPON_SMOKE_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon_prison( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon_prison( "bouncing_tomahawk_zm", "upgraded_tomahawk_zm", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "", "", undefined, 1 ); + add_zombie_weapon_prison( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + add_zombie_weapon_prison( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); } -include_weapons() //checked changed to match cerberus output +include_weapons() { - include_weapon( "knife_zm", 0 ); - include_weapon( "knife_zm_alcatraz", 0 ); - include_weapon( "spoon_zm_alcatraz", 0 ); - include_weapon( "spork_zm_alcatraz", 0 ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "claymore_zm", 0 ); - include_weapon( "willy_pete_zm", 0 ); - include_weapon( "m1911_zm", 0 ); - include_weapon( "m1911_upgraded_zm", 0 ); - include_weapon( "judge_zm" ); - include_weapon( "judge_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "uzi_zm", 0 ); - include_weapon( "uzi_upgraded_zm", 0 ); - if ( is_classic() ) - { - include_weapon( "thompson_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - } - else - { - include_weapon( "870mcs_zm" ); - include_weapon( "thompson_zm" ); - } - include_weapon( "thompson_upgraded_zm", 0 ); - include_weapon( "mp5k_zm", 0 ); - include_weapon( "mp5k_upgraded_zm", 0 ); - include_weapon( "pdw57_zm" ); - include_weapon( "pdw57_upgraded_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "saiga12_zm" ); - include_weapon( "saiga12_upgraded_zm", 0 ); - include_weapon( "rottweil72_zm", 0 ); - include_weapon( "rottweil72_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "ak47_zm" ); - include_weapon( "ak47_upgraded_zm", 0 ); - include_weapon( "tar21_zm" ); - include_weapon( "tar21_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "barretm82_zm" ); - include_weapon( "barretm82_upgraded_zm", 0 ); - include_weapon( "minigun_alcatraz_zm" ); - include_weapon( "minigun_alcatraz_upgraded_zm", 0 ); - include_weapon( "lsat_zm" ); - include_weapon( "lsat_upgraded_zm", 0 ); - include_weapon( "usrpg_zm" ); - include_weapon( "usrpg_upgraded_zm", 0 ); - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - include_weapon( "bouncing_tomahawk_zm", 0 ); - include_weapon( "upgraded_tomahawk_zm", 0 ); - include_weapon( "blundergat_zm" ); - include_weapon( "blundergat_upgraded_zm", 0 ); - include_weapon( "blundersplat_zm", 0 ); - include_weapon( "blundersplat_upgraded_zm", 0 ); - level._uses_retrievable_ballisitic_knives = 1; - include_weapon( "alcatraz_shield_zm", 0 ); - add_limited_weapon( "m1911_zm", 4 ); - add_limited_weapon( "minigun_alcatraz_zm", 1 ); - add_limited_weapon( "blundergat_zm", 1 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - include_weapon( "tower_trap_zm", 0 ); - include_weapon( "tower_trap_upgraded_zm", 0 ); - if ( isdefined( level.raygun2_included ) && level.raygun2_included ) - { - include_weapon( "raygun_mark2_zm" ); - include_weapon( "raygun_mark2_upgraded_zm", 0 ); - add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); - add_limited_weapon( "raygun_mark2_zm", 1); - add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); - } + include_weapon( "knife_zm", 0 ); + include_weapon( "knife_zm_alcatraz", 0 ); + include_weapon( "spoon_zm_alcatraz", 0 ); + include_weapon( "spork_zm_alcatraz", 0 ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "claymore_zm", 0 ); + include_weapon( "willy_pete_zm", 0 ); + include_weapon( "m1911_zm", 0 ); + include_weapon( "m1911_upgraded_zm", 0 ); + include_weapon( "judge_zm" ); + include_weapon( "judge_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "uzi_zm", 0 ); + include_weapon( "uzi_upgraded_zm", 0 ); + + if ( is_classic() ) + { + include_weapon( "thompson_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + } + else + { + include_weapon( "870mcs_zm" ); + include_weapon( "thompson_zm" ); + } + + include_weapon( "thompson_upgraded_zm", 0 ); + include_weapon( "mp5k_zm", 0 ); + include_weapon( "mp5k_upgraded_zm", 0 ); + include_weapon( "pdw57_zm" ); + include_weapon( "pdw57_upgraded_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "saiga12_zm" ); + include_weapon( "saiga12_upgraded_zm", 0 ); + include_weapon( "rottweil72_zm", 0 ); + include_weapon( "rottweil72_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "ak47_zm" ); + include_weapon( "ak47_upgraded_zm", 0 ); + include_weapon( "tar21_zm" ); + include_weapon( "tar21_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "barretm82_zm" ); + include_weapon( "barretm82_upgraded_zm", 0 ); + include_weapon( "minigun_alcatraz_zm" ); + include_weapon( "minigun_alcatraz_upgraded_zm", 0 ); + include_weapon( "lsat_zm" ); + include_weapon( "lsat_upgraded_zm", 0 ); + include_weapon( "usrpg_zm" ); + include_weapon( "usrpg_upgraded_zm", 0 ); + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + include_weapon( "bouncing_tomahawk_zm", 0 ); + include_weapon( "upgraded_tomahawk_zm", 0 ); + include_weapon( "blundergat_zm" ); + include_weapon( "blundergat_upgraded_zm", 0 ); + include_weapon( "blundersplat_zm", 0 ); + include_weapon( "blundersplat_upgraded_zm", 0 ); + level._uses_retrievable_ballisitic_knives = 1; + include_weapon( "alcatraz_shield_zm", 0 ); + add_limited_weapon( "m1911_zm", 4 ); + add_limited_weapon( "minigun_alcatraz_zm", 1 ); + add_limited_weapon( "blundergat_zm", 1 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + include_weapon( "tower_trap_zm", 0 ); + include_weapon( "tower_trap_upgraded_zm", 0 ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + include_weapon( "raygun_mark2_zm" ); + include_weapon( "raygun_mark2_upgraded_zm", 0 ); + add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); + add_limited_weapon( "raygun_mark2_zm", 1 ); + add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); + } } -add_zombie_weapon_prison( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) //checked matches cerberus output +add_zombie_weapon_prison( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) { - if ( isDefined( level.zombie_include_weapons ) && !isDefined( level.zombie_include_weapons[ weapon_name ] ) ) - { - return; - } - table = "mp/zombiemode.csv"; - table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); - if ( isDefined( table_ammo_cost ) && table_ammo_cost != "" ) - { - ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); - } - precachestring( hint ); - struct = spawnstruct(); - if ( !isDefined( level.zombie_weapons ) ) - { - level.zombie_weapons = []; - } - if ( !isDefined( level.zombie_weapons_upgraded ) ) - { - level.zombie_weapons_upgraded = []; - } - if ( isDefined( upgrade_name ) ) - { - level.zombie_weapons_upgraded[ upgrade_name ] = weapon_name; - } - struct.weapon_name = weapon_name; - struct.upgrade_name = upgrade_name; - struct.weapon_classname = "weapon_" + weapon_name; - struct.hint = hint; - struct.cost = cost; - struct.vox = weaponvo; - struct.vox_response = weaponvoresp; - /* + if ( isdefined( level.zombie_include_weapons ) && !isdefined( level.zombie_include_weapons[weapon_name] ) ) + return; + + table = "mp/zombiemode.csv"; + table_ammo_cost = tablelookup( table, 0, weapon_name, 2 ); + + if ( isdefined( table_ammo_cost ) && table_ammo_cost != "" ) + ammo_cost = round_up_to_ten( int( table_ammo_cost ) ); + + precachestring( hint ); + struct = spawnstruct(); + + if ( !isdefined( level.zombie_weapons ) ) + level.zombie_weapons = []; + + if ( !isdefined( level.zombie_weapons_upgraded ) ) + level.zombie_weapons_upgraded = []; + + if ( isdefined( upgrade_name ) ) + level.zombie_weapons_upgraded[upgrade_name] = weapon_name; + + struct.weapon_name = weapon_name; + struct.upgrade_name = upgrade_name; + struct.weapon_classname = "weapon_" + weapon_name; + struct.hint = hint; + struct.cost = cost; + struct.vox = weaponvo; + struct.vox_response = weaponvoresp; /# - println( "ZM >> Looking for weapon - " + weapon_name ); + println( "ZM >> Looking for weapon - " + weapon_name ); #/ - */ - struct.is_in_box = level.zombie_include_weapons[ weapon_name ]; - if ( !isDefined( ammo_cost ) ) - { - ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); - } - struct.ammo_cost = ammo_cost; - level.zombie_weapons[ weapon_name ] = struct; - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isDefined( upgrade_name ) ) - { - add_attachments( weapon_name, upgrade_name ); - } - if ( isDefined( create_vox ) ) - { - level.vox maps/mp/zombies/_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); - } - /* + struct.is_in_box = level.zombie_include_weapons[weapon_name]; + + if ( !isdefined( ammo_cost ) ) + ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); + + struct.ammo_cost = ammo_cost; + level.zombie_weapons[weapon_name] = struct; + + if ( isdefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isdefined( upgrade_name ) ) + add_attachments( weapon_name, upgrade_name ); + + if ( isdefined( create_vox ) ) + level.vox maps\mp\zombies\_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); /# - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); #/ - } - */ } -include_powerups() //checked matches cerberus output +include_powerups() { - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - include_powerup( "fire_sale" ); + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + include_powerup( "fire_sale" ); } -include_equipment_for_level() //checked matches cerberus output +include_equipment_for_level() { - include_equipment( "alcatraz_shield_zm" ); + include_equipment( "alcatraz_shield_zm" ); } -setup_rex_starts() //checked matches cerberus output +setup_rex_starts() { - add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); - add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); - add_gameloc( "prison", ::dummy, "prison", ::dummy ); - add_gameloc( "cellblock", ::dummy, "cellblock", ::dummy ); + add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); + add_gametype( "zgrief", ::dummy, "zgrief", ::dummy ); + add_gameloc( "prison", ::dummy, "prison", ::dummy ); + add_gameloc( "cellblock", ::dummy, "cellblock", ::dummy ); } -dummy() //checked matches cerberus output +dummy() { + } -working_zone_init() //checked changed to match cerberus output +working_zone_init() { - flag_init( "always_on" ); - flag_set( "always_on" ); - if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) - { - a_s_spawner = getstructarray( "zone_cellblock_west_roof_spawner", "targetname" ); - foreach ( spawner in a_s_spawner ) - { - if ( isDefined( spawner.script_parameters ) && spawner.script_parameters == "zclassic_prison" ) - { - spawner structdelete(); - } - } - } - if ( is_classic() ) - { - add_adjacent_zone( "zone_library", "zone_start", "always_on" ); - } - else - { - add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); - add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_west" ); - add_adjacent_zone( "zone_cellblock_east", "zone_start", "activate_cellblock_east" ); - add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_east" ); - } - add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); - add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_barber", "activate_cellblock_barber" ); - add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_barber" ); - add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_infirmary", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_start", "zone_cellblock_east", "activate_cellblock_east" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_east", "activate_cellblock_east_west" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_east_west" ); - add_adjacent_zone( "zone_cellblock_west_warden", "zone_warden_office", "activate_warden_office" ); - add_adjacent_zone( "zone_cellblock_west_warden", "zone_citadel_warden", "activate_cellblock_citadel" ); - add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_citadel" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_cellblock_citadel" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_cellblock_citadel" ); - add_adjacent_zone( "zone_cellblock_east", "zone_cafeteria", "activate_cafeteria" ); - add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_cafeteria" ); - add_adjacent_zone( "zone_cellblock_east", "cellblock_shower", "activate_shower_room" ); - add_adjacent_zone( "cellblock_shower", "zone_citadel_shower", "activate_shower_citadel" ); - add_adjacent_zone( "zone_citadel_shower", "zone_citadel", "activate_shower_citadel" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_shower_citadel" ); - add_adjacent_zone( "zone_cafeteria", "zone_infirmary", "activate_infirmary" ); - add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_infirmary" ); - add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_infirmary" ); - add_adjacent_zone( "zone_roof", "zone_roof_infirmary", "activate_roof" ); - add_adjacent_zone( "zone_roof_infirmary", "zone_infirmary_roof", "activate_roof" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_stairs", "activate_citadel_stair" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_citadel_stair" ); - add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_citadel_stair" ); - add_adjacent_zone( "zone_citadel_stairs", "zone_citadel_basement", "activate_citadel_basement" ); - add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_citadel_basement" ); - add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_building" ); - add_adjacent_zone( "zone_citadel_basement_building", "zone_studio", "activate_basement_building" ); - add_adjacent_zone( "zone_citadel_basement", "zone_studio", "activate_basement_building" ); - add_adjacent_zone( "zone_citadel_basement_building", "zone_dock_gondola", "activate_basement_gondola" ); - add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_gondola" ); - add_adjacent_zone( "zone_dock", "zone_dock_gondola", "activate_basement_gondola" ); - add_adjacent_zone( "zone_studio", "zone_dock", "activate_dock_sally" ); - add_adjacent_zone( "zone_dock_gondola", "zone_dock", "activate_dock_sally" ); - add_adjacent_zone( "zone_dock", "zone_dock_gondola", "gondola_roof_to_dock" ); - add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); - add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "gondola_dock_to_roof" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "gondola_dock_to_roof" ); - if ( is_classic() ) - { - add_adjacent_zone( "zone_gondola_ride", "zone_gondola_ride", "gondola_ride_zone_enabled" ); - } - if ( is_classic() ) - { - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_infirmary" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" ); - add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" ); - } - if ( maps/mp/zombies/_zm_utility::is_gametype_active( "zgrief" ) ) - { - playable_area = getentarray( "player_volume", "script_noteworthy" ); - foreach ( area in playable_area ) - { - if ( isDefined( area.script_parameters ) && area.script_parameters == "classic_only" ) - { - area delete(); - } - } - } - add_adjacent_zone( "zone_golden_gate_bridge", "zone_golden_gate_bridge", "activate_player_zone_bridge" ); - if ( is_classic() ) - { - add_adjacent_zone( "zone_dock_puzzle", "zone_dock_puzzle", "always_on" ); - } + flag_init( "always_on" ); + flag_set( "always_on" ); + + if ( is_gametype_active( "zgrief" ) ) + { + a_s_spawner = getstructarray( "zone_cellblock_west_roof_spawner", "targetname" ); + + foreach ( spawner in a_s_spawner ) + { + if ( isdefined( spawner.script_parameters ) && spawner.script_parameters == "zclassic_prison" ) + spawner structdelete(); + } + } + + if ( is_classic() ) + add_adjacent_zone( "zone_library", "zone_start", "always_on" ); + else + { + add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); + add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_west" ); + add_adjacent_zone( "zone_cellblock_east", "zone_start", "activate_cellblock_east" ); + add_adjacent_zone( "zone_library", "zone_start", "activate_cellblock_east" ); + } + + add_adjacent_zone( "zone_library", "zone_cellblock_west", "activate_cellblock_west" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_barber", "activate_cellblock_barber" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_barber" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_infirmary", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_barber", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_start", "zone_cellblock_east", "activate_cellblock_east" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_east", "activate_cellblock_east_west" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "activate_cellblock_east_west" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_warden_office", "activate_warden_office" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_citadel_warden", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_cellblock_west_warden", "zone_cellblock_west_barber", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_cellblock_citadel" ); + add_adjacent_zone( "zone_cellblock_east", "zone_cafeteria", "activate_cafeteria" ); + add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_cafeteria" ); + add_adjacent_zone( "zone_cellblock_east", "cellblock_shower", "activate_shower_room" ); + add_adjacent_zone( "cellblock_shower", "zone_citadel_shower", "activate_shower_citadel" ); + add_adjacent_zone( "zone_citadel_shower", "zone_citadel", "activate_shower_citadel" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_shower_citadel" ); + add_adjacent_zone( "zone_cafeteria", "zone_infirmary", "activate_infirmary" ); + add_adjacent_zone( "zone_cafeteria", "zone_cafeteria_end", "activate_infirmary" ); + add_adjacent_zone( "zone_infirmary_roof", "zone_infirmary", "activate_infirmary" ); + add_adjacent_zone( "zone_roof", "zone_roof_infirmary", "activate_roof" ); + add_adjacent_zone( "zone_roof_infirmary", "zone_infirmary_roof", "activate_roof" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_stairs", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_shower", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel", "zone_citadel_warden", "activate_citadel_stair" ); + add_adjacent_zone( "zone_citadel_stairs", "zone_citadel_basement", "activate_citadel_basement" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_citadel_basement" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement_building", "zone_studio", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement", "zone_studio", "activate_basement_building" ); + add_adjacent_zone( "zone_citadel_basement_building", "zone_dock_gondola", "activate_basement_gondola" ); + add_adjacent_zone( "zone_citadel_basement", "zone_citadel_basement_building", "activate_basement_gondola" ); + add_adjacent_zone( "zone_dock", "zone_dock_gondola", "activate_basement_gondola" ); + add_adjacent_zone( "zone_studio", "zone_dock", "activate_dock_sally" ); + add_adjacent_zone( "zone_dock_gondola", "zone_dock", "activate_dock_sally" ); + add_adjacent_zone( "zone_dock", "zone_dock_gondola", "gondola_roof_to_dock" ); + add_adjacent_zone( "zone_cellblock_west", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_gondola", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_barber", "zone_cellblock_west_warden", "gondola_dock_to_roof" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_east", "gondola_dock_to_roof" ); + + if ( is_classic() ) + add_adjacent_zone( "zone_gondola_ride", "zone_gondola_ride", "gondola_ride_zone_enabled" ); + + if ( is_classic() ) + { + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_infirmary" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" ); + add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" ); + } + else if ( is_gametype_active( "zgrief" ) ) + { + playable_area = getentarray( "player_volume", "script_noteworthy" ); + + foreach ( area in playable_area ) + { + if ( isdefined( area.script_parameters ) && area.script_parameters == "classic_only" ) + area delete(); + } + } + + add_adjacent_zone( "zone_golden_gate_bridge", "zone_golden_gate_bridge", "activate_player_zone_bridge" ); + + if ( is_classic() ) + add_adjacent_zone( "zone_dock_puzzle", "zone_dock_puzzle", "always_on" ); } -alcatraz_afterlife_doors() //checked changed to match cerberus output +#using_animtree("fxanim_props"); + +alcatraz_afterlife_doors() { - wait 0.05; - if ( !isDefined( level.shockbox_anim ) ) - { - level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; - level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "afterlife_door" ) - { - self sethintstring( &"ZM_PRISON_AFTERLIFE_DOOR" ); - /* + wait 0.05; + + if ( !isdefined( level.shockbox_anim ) ) + { + level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim; + level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim; + } + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "afterlife_door" ) + { + self sethintstring( &"ZM_PRISON_AFTERLIFE_DOOR" ); /# - self thread afterlife_door_open_sesame(); + self thread afterlife_door_open_sesame(); #/ - */ - s_struct = getstruct( self.target, "targetname" ); - if ( !isDefined( s_struct ) ) - { - /* + s_struct = getstruct( self.target, "targetname" ); + + if ( !isdefined( s_struct ) ) + { /# - iprintln( "Afterlife Door was not targeting a valid struct" ); + iprintln( "Afterlife Door was not targeting a valid struct" ); #/ - */ - return; - } - m_shockbox = getent( s_struct.target, "targetname" ); - m_shockbox.health = 5000; - m_shockbox setcandamage( 1 ); - m_shockbox useanimtree( -1 ); - t_bump = spawn( "trigger_radius", m_shockbox.origin, 0, 28, 64 ); - t_bump.origin = ( ( m_shockbox.origin + ( anglesToForward( m_shockbox.angles ) * 0 ) ) + ( anglesToRight( m_shockbox.angles ) * 28 ) ) + ( anglesToUp( m_shockbox.angles ) * 0 ); - if ( isDefined( t_bump ) ) - { - t_bump setcursorhint( "HINT_NOICON" ); - t_bump sethintstring( &"ZM_PRISON_AFTERLIFE_INTERACT" ); - } - while ( 1 ) - { - m_shockbox waittill( "damage", amount, attacker ); - if ( isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) - { - if ( isDefined( level.afterlife_interact_dist ) ) - { - if ( distance2d( attacker.origin, m_shockbox.origin ) < level.afterlife_interact_dist ) - { - t_bump delete(); - m_shockbox playsound( "zmb_powerpanel_activate" ); - playfxontag( level._effect[ "box_activated" ], m_shockbox, "tag_origin" ); - m_shockbox setmodel( "p6_zm_al_shock_box_on" ); - m_shockbox setanim( level.shockbox_anim[ "on" ] ); - if ( ( m_shockbox.script_string == "wires_shower_door" || m_shockbox.script_string == "wires_admin_door" ) && isDefined( m_shockbox.script_string ) ) - { - array_delete( getentarray( m_shockbox.script_string, "script_noteworthy" ) ); - } - self maps/mp/zombies/_zm_blockers::door_opened( 0 ); //you have to buy doors after powering them if you don't do this - attacker notify( "player_opened_afterlife_door" ); - break; - } - } - } - } - } - while ( 1 ) - { - if ( !self maps/mp/zombies/_zm_blockers::door_buy() ) - { - wait 0.05; - continue; - } - break; - } + return; + } + else + { + m_shockbox = getent( s_struct.target, "targetname" ); + m_shockbox.health = 5000; + m_shockbox setcandamage( 1 ); + m_shockbox useanimtree( -1 ); + t_bump = spawn( "trigger_radius", m_shockbox.origin, 0, 28, 64 ); + t_bump.origin = m_shockbox.origin + anglestoforward( m_shockbox.angles ) * 0 + anglestoright( m_shockbox.angles ) * 28 + anglestoup( m_shockbox.angles ) * 0; + + if ( isdefined( t_bump ) ) + { + t_bump setcursorhint( "HINT_NOICON" ); + t_bump sethintstring( &"ZM_PRISON_AFTERLIFE_INTERACT" ); + } + + while ( true ) + { + m_shockbox waittill( "damage", amount, attacker ); + + if ( isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) + { + if ( isdefined( level.afterlife_interact_dist ) ) + { + if ( distance2d( attacker.origin, m_shockbox.origin ) < level.afterlife_interact_dist ) + { + t_bump delete(); + m_shockbox playsound( "zmb_powerpanel_activate" ); + playfxontag( level._effect["box_activated"], m_shockbox, "tag_origin" ); + m_shockbox setmodel( "p6_zm_al_shock_box_on" ); + m_shockbox setanim( level.shockbox_anim["on"] ); + + if ( isdefined( m_shockbox.script_string ) && ( m_shockbox.script_string == "wires_shower_door" || m_shockbox.script_string == "wires_admin_door" ) ) + array_delete( getentarray( m_shockbox.script_string, "script_noteworthy" ) ); + + attacker notify( "player_opened_afterlife_door" ); + break; + } + } + } + } + } + } + else + { + while ( true ) + { + if ( !self maps\mp\zombies\_zm_blockers::door_buy() ) + continue; + + break; + } + } } -afterlife_door_open_sesame() //checked matches cerberus output +afterlife_door_open_sesame() { - /* /# - level waittill( "open_sesame" ); - self maps/mp/zombies/_zm_blockers::door_opened( 0 ); + level waittill( "open_sesame" ); + + self maps\mp\zombies\_zm_blockers::door_opened( 0 ); #/ - */ } -delete_perk_machine_clip() //checked changed to match cerberus output +delete_perk_machine_clip() { - perk_machines = getentarray( "zombie_vending", "targetname" ); - foreach ( perk_machine in perk_machines ) - { - if ( isDefined( perk_machine.clip ) ) - { - perk_machine.clip delete(); - } - } + perk_machines = getentarray( "zombie_vending", "targetname" ); + + foreach ( perk_machine in perk_machines ) + { + if ( isdefined( perk_machine.clip ) ) + perk_machine.clip delete(); + } } -alcatraz_round_spawn_failsafe() //checked changed to match cerberus output +alcatraz_round_spawn_failsafe() { - self endon( "death" ); - prevorigin = self.origin; - while ( 1 ) - { - if ( isDefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) - { - return; - } - wait 15; - if ( isDefined( self.is_inert ) && self.is_inert ) - { - continue; - } - if ( isDefined( self.lastchunk_destroy_time ) ) - { - if ( ( getTime() - self.lastchunk_destroy_time ) < 8000 ) - { - continue; - } - } - if ( self.origin[ 2 ] < -15000 ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - break; - } - if ( distancesquared( self.origin, prevorigin ) < 576 ) - { - if ( isDefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) - { - if ( isDefined( self.nuked ) && !self.nuked && isDefined( self.marked_for_death ) && !self.marked_for_death && isDefined( self.isscreecher ) && !self.isscreecher && isDefined( self.has_legs ) && self.has_legs && isDefined( self.is_brutus ) && !self.is_brutus ) - { - level.zombie_total++; - level.zombie_total_subtract++; - } - } - level.zombies_timeout_playspace++; - if ( isDefined( self.is_brutus ) && self.is_brutus ) - { - self.suppress_brutus_powerup_drop = 1; - self.brutus_round_spawn_failsafe = 1; - } - self dodamage( self.health + 100, ( 0, 0, 0 ) ); - return; - } - prevorigin = self.origin; - } + self endon( "death" ); + prevorigin = self.origin; + + while ( true ) + { + if ( isdefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) + return; + + wait 15; + + if ( isdefined( self.is_inert ) && self.is_inert ) + continue; + + if ( isdefined( self.lastchunk_destroy_time ) ) + { + if ( gettime() - self.lastchunk_destroy_time < 8000 ) + continue; + } + + if ( self.origin[2] < -15000 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } +/# + +#/ + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + if ( distancesquared( self.origin, prevorigin ) < 576 ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) + { + if ( !( isdefined( self.nuked ) && self.nuked ) && !( isdefined( self.marked_for_death ) && self.marked_for_death ) && !( isdefined( self.isscreecher ) && self.isscreecher ) && ( isdefined( self.has_legs ) && self.has_legs ) && !( isdefined( self.is_brutus ) && self.is_brutus ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + } + + level.zombies_timeout_playspace++; +/# + +#/ + if ( isdefined( self.is_brutus ) && self.is_brutus ) + { + self.suppress_brutus_powerup_drop = 1; + self.brutus_round_spawn_failsafe = 1; + } + + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + prevorigin = self.origin; + } } player_shockbox_glowfx() { - self endon( "disconnect" ); - a_afterlife_interacts = getentarray( "afterlife_interact", "targetname" ); - a_afterlife_door_interacts = getentarray( "afterlife_door_shock_box", "script_noteworthy" ); - a_combine = arraycombine( a_afterlife_interacts, a_afterlife_door_interacts, 0, 0 ); - foreach ( shockbox in a_combine ) - { - if ( issubstr( shockbox.model, "shock_box" ) ) - { - shockbox setclientfield( "afterlife_shockbox_glow", 1 ); - } - } -} + self endon( "disconnect" ); + a_afterlife_interacts = getentarray( "afterlife_interact", "targetname" ); + a_afterlife_door_interacts = getentarray( "afterlife_door_shock_box", "script_noteworthy" ); + a_combine = arraycombine( a_afterlife_interacts, a_afterlife_door_interacts, 0, 0 ); -/* -is_gametype_active( a_gametypes ) //not in cerberus output -{ - is_gametype_active = 0; - if ( !isarray( a_gametypes ) ) - { - a_gametypes = array( a_gametypes ); - } - i = 0; - while ( i < a_gametypes.size ) - { - if ( getDvar( "g_gametype" ) == a_gametypes[ i ] ) - { - is_gametype_active = 1; - } - i++; - } - return is_gametype_active; + foreach ( shockbox in a_combine ) + { + if ( issubstr( shockbox.model, "shock_box" ) ) + shockbox setclientfield( "afterlife_shockbox_glow", 1 ); + } } -*/ diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc index af9233c..f87a4c9 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_achievement.gsc @@ -1,209 +1,211 @@ -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_zonemgr; init() { - level thread achievement_full_lockdown(); - level thread achievement_pop_goes_the_weasel(); - level thread achievement_trapped_in_time(); - onplayerconnect_callback( ::onplayerconnect ); - level.achievement_sound_func = ::achievement_sound_func; + level thread achievement_full_lockdown(); + level thread achievement_pop_goes_the_weasel(); + level thread achievement_trapped_in_time(); + onplayerconnect_callback( ::onplayerconnect ); + level.achievement_sound_func = ::achievement_sound_func; } onplayerconnect() { - self thread achievement_no_one_escapes_alive(); - self thread achievement_feed_the_beast(); - self thread achievement_making_the_rounds(); - self thread achievement_acid_drip(); - self thread achievement_a_burst_of_flavor(); - self thread achievement_paranormal_progress(); - self thread achievement_gg_bridge(); + self thread achievement_no_one_escapes_alive(); + self thread achievement_feed_the_beast(); + self thread achievement_making_the_rounds(); + self thread achievement_acid_drip(); + self thread achievement_a_burst_of_flavor(); + self thread achievement_paranormal_progress(); + self thread achievement_gg_bridge(); } achievement_sound_func( achievement_name_lower ) { - self thread do_player_general_vox( "general", "achievement" ); + self thread do_player_general_vox( "general", "achievement" ); } init_player_achievement_stats() { - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 ); } achievement_full_lockdown() { - level endon( "end_game" ); - level.lockdown_track[ "magic_box" ] = 0; - level.lockdown_track[ "speedcola_perk" ] = 0; - level.lockdown_track[ "electric_cherry_perk" ] = 0; - level.lockdown_track[ "jugg_perk" ] = 0; - level.lockdown_track[ "deadshot_perk" ] = 0; - level.lockdown_track[ "tap_perk" ] = 0; - level.lockdown_track[ "plane_ramp" ] = 0; - level.lockdown_track[ "craft_shield" ] = 0; - level.lockdown_track[ "craft_kit" ] = 0; - b_unlock = 0; - while ( b_unlock == 0 ) - { - level waittill( "brutus_locked_object" ); - b_unlock = 1; - _a92 = level.lockdown_track; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - b_check = _a92[ _k92 ]; - if ( b_check == 0 ) - { - b_unlock = 0; - break; - } - else - { - _k92 = getNextArrayKey( _a92, _k92 ); - } - } - } - level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 ); + level endon( "end_game" ); + level.lockdown_track["magic_box"] = 0; + level.lockdown_track["speedcola_perk"] = 0; + level.lockdown_track["electric_cherry_perk"] = 0; + level.lockdown_track["jugg_perk"] = 0; + level.lockdown_track["deadshot_perk"] = 0; + level.lockdown_track["tap_perk"] = 0; + level.lockdown_track["plane_ramp"] = 0; + level.lockdown_track["craft_shield"] = 0; + level.lockdown_track["craft_kit"] = 0; + b_unlock = 0; + + while ( b_unlock == 0 ) + { + level waittill( "brutus_locked_object" ); + + b_unlock = 1; + + foreach ( b_check in level.lockdown_track ) + { + if ( b_check == 0 ) + { + b_unlock = 0; + break; + } + } + } + + level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 ); } achievement_trapped_in_time() { - level endon( "end_game" ); - level.trapped_track[ "acid" ] = 0; - level.trapped_track[ "fan" ] = 0; - level.trapped_track[ "tower" ] = 0; - level.trapped_track[ "tower_upgrade" ] = 0; - b_unlock = 0; - while ( b_unlock == 0 ) - { - level waittill_either( "trap_activated", "tower_trap_upgraded" ); - if ( level.round_number >= 10 ) - { - return; - } - b_unlock = 1; - _a131 = level.trapped_track; - _k131 = getFirstArrayKey( _a131 ); - while ( isDefined( _k131 ) ) - { - b_check = _a131[ _k131 ]; - if ( b_check == 0 ) - { - b_unlock = 0; - break; - } - else - { - _k131 = getNextArrayKey( _a131, _k131 ); - } - } - } - level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 ); + level endon( "end_game" ); + level.trapped_track["acid"] = 0; + level.trapped_track["fan"] = 0; + level.trapped_track["tower"] = 0; + level.trapped_track["tower_upgrade"] = 0; + b_unlock = 0; + + while ( b_unlock == 0 ) + { + level waittill_either( "trap_activated", "tower_trap_upgraded" ); + + if ( level.round_number >= 10 ) + return; + + b_unlock = 1; + + foreach ( b_check in level.trapped_track ) + { + if ( b_check == 0 ) + { + b_unlock = 0; + break; + } + } + } + + level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 ); } achievement_pop_goes_the_weasel() { - level endon( "end_game" ); - level waittill( "pop_goes_the_weasel_achieved" ); - level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 ); + level endon( "end_game" ); + + level waittill( "pop_goes_the_weasel_achieved" ); + + level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 ); } achievement_no_one_escapes_alive() { - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "player_at_bridge" ); - self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "player_at_bridge" ); + + self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" ); } achievement_feed_the_beast() { - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "player_obtained_tomahawk" ); - self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "player_obtained_tomahawk" ); + + self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" ); } achievement_making_the_rounds() { - level endon( "end_game" ); - self endon( "disconnect" ); - n_completed_trips = 0; - while ( n_completed_trips < 3 ) - { - self waittill( "player_completed_cycle" ); - n_completed_trips++; - } - self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + for ( n_completed_trips = 0; n_completed_trips < 3; n_completed_trips++ ) + self waittill( "player_completed_cycle" ); + + self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" ); } achievement_acid_drip() { - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "player_obtained_acidgat" ); - self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "player_obtained_acidgat" ); + + self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" ); } achievement_a_burst_of_flavor() { - level endon( "end_game" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "electric_cherry_start" ); - self.cherry_kills = 0; - self waittill( "electric_cherry_end" ); - if ( self.cherry_kills >= 10 ) - { - break; - } - else - { - } - } - self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "electric_cherry_start" ); + + self.cherry_kills = 0; + + self waittill( "electric_cherry_end" ); + + if ( self.cherry_kills >= 10 ) + break; + } + + self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" ); } achievement_paranormal_progress() { - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "player_opened_afterlife_door" ); - self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "player_opened_afterlife_door" ); + + self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" ); } achievement_gg_bridge() { - level endon( "end_game" ); - self endon( "disconnect" ); - while ( 1 ) - { - level waittill( "end_of_round" ); - if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 ) - { - level waittill( "end_of_round" ); - if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) - { - break; - } - } - else - { - } - } - self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + while ( true ) + { + level waittill( "end_of_round" ); + + if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 ) + { + level waittill( "end_of_round" ); + + if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) + break; + } + } + + self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc index 28d4eeb..3bba3b3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_ffotd.gsc @@ -1,148 +1,178 @@ -#include maps/mp/zombies/_zm_afterlife; -#include maps/mp/zm_prison; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_prison; +#include maps\mp\zombies\_zm_afterlife; main_start() { - level thread spawned_collision_ffotd(); - t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 ); - t_killbrush_1.script_noteworthy = "kill_brush"; - t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 ); - t_killbrush_2.script_noteworthy = "kill_brush"; - t_killbrush_3 = spawn( "trigger_box", ( -42, 9348, 1392 ), 0, 200, 100, 128 ); - t_killbrush_3.script_noteworthy = "kill_brush"; + level thread spawned_collision_ffotd(); + t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 ); + t_killbrush_1.script_noteworthy = "kill_brush"; + t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 ); + t_killbrush_2.script_noteworthy = "kill_brush"; + t_killbrush_3 = spawn( "trigger_box", ( -50, 9318, 1392 ), 0, 200, 110, 128 ); + t_killbrush_3.script_noteworthy = "kill_brush"; + t_killbrush_4 = spawn( "trigger_box", ( -212, 7876, 74 ), 0, 220, 280, 30 ); + t_killbrush_4.angles = vectorscale( ( 0, 1, 0 ), 315.0 ); + t_killbrush_4.script_noteworthy = "kill_brush"; + t_killbrush_5 = spawn( "trigger_box", ( 896, 6291, 84 ), 0, 798, 498, 332 ); + t_killbrush_5.angles = vectorscale( ( 0, 1, 0 ), 10.0 ); + t_killbrush_5.script_noteworthy = "kill_brush"; + t_killbrush_6 = spawn( "trigger_box", ( 1268, 6870, 232 ), 0, 1024, 512, 512 ); + t_killbrush_6.angles = vectorscale( ( 0, 1, 0 ), 10.0 ); + t_killbrush_6.script_noteworthy = "kill_brush"; + t_killbrush_7 = spawn( "trigger_box", ( 896, 6009, 304 ), 0, 320, 192, 128 ); + t_killbrush_7.angles = ( 0, 0, 0 ); + t_killbrush_7.script_noteworthy = "kill_brush"; + level.gondola_docks_landing_killbrush = t_killbrush_7; + t_killbrush_8 = spawn( "trigger_box", ( 934, 9148, 1346 ), 0, 39.7, 55.6, 39.7 ); + t_killbrush_8.angles = vectorscale( ( 1, 0, 0 ), 325.0 ); + t_killbrush_8.script_noteworthy = "kill_brush"; + t_killbrush_9 = spawn( "trigger_box", ( -1338, 5478, 114 ), 0, 200, 50, 100 ); + t_killbrush_9.angles = vectorscale( ( 0, 1, 0 ), 280.0 ); + t_killbrush_9.script_noteworthy = "kill_brush"; } main_end() { - level.equipment_dead_zone_pos = []; - level.equipment_dead_zone_rad2 = []; - level.equipment_dead_zone_pos[ 0 ] = ( 408, 10016, 1128 ); - level.equipment_dead_zone_rad2[ 0 ] = 65536; - level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 ); - level.equipment_dead_zone_rad2[ 1 ] = 10000; - level.equipment_dead_zone_pos[ 2 ] = ( -104, 8056, 280 ); - level.equipment_dead_zone_rad2[ 2 ] = 10000; - level.equipment_dead_zone_pos[ 3 ] = ( -86, 7712, 114 ); - level.equipment_dead_zone_rad2[ 3 ] = 10000; - level.equipment_dead_zone_pos[ 4 ] = ( 447, 5963, 264 ); - level.equipment_dead_zone_rad2[ 4 ] = 10000; - level.equipment_dead_zone_pos[ 5 ] = ( 231, 5913, 200 ); - level.equipment_dead_zone_rad2[ 5 ] = 10000; - level.equipment_dead_zone_pos[ 6 ] = ( 15, 5877, 136 ); - level.equipment_dead_zone_rad2[ 6 ] = 10000; - level.equipment_dead_zone_pos[ 7 ] = ( -335, 5795, 14 ); - level.equipment_dead_zone_rad2[ 7 ] = 22500; - level.equipment_dead_zone_pos[ 8 ] = ( -621, 5737, -48 ); - level.equipment_dead_zone_rad2[ 8 ] = 10000; - level.equipment_dead_zone_pos[ 9 ] = ( 402, 7058, 147 ); - level.equipment_dead_zone_rad2[ 9 ] = 10000; - level.equipment_dead_zone_pos[ 10 ] = ( 2151, 10180, 1204 ); - level.equipment_dead_zone_rad2[ 10 ] = 625; - level.equipment_dead_zone_pos[ 11 ] = ( 2144, 9486, 1364 ); - level.equipment_dead_zone_rad2[ 11 ] = 2500; - level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd; - waittillframeend; - level.afterlife_give_loadout = ::afterlife_give_loadout_override; + level.equipment_dead_zone_pos = []; + level.equipment_dead_zone_rad2 = []; + level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd; + waittillframeend; + level.afterlife_give_loadout = ::afterlife_give_loadout_override; } equipment_safe_to_drop_ffotd( weapon ) { - i = 0; - while ( i < level.equipment_dead_zone_pos.size ) - { - if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] ) - { - return 0; - } - i++; - } - return self maps/mp/zm_prison::equipment_safe_to_drop( weapon ); + for ( i = 0; i < level.equipment_dead_zone_pos.size; i++ ) + { + if ( distancesquared( level.equipment_dead_zone_pos[i], weapon.origin ) < level.equipment_dead_zone_rad2[i] ) + return 0; + } + + return self maps\mp\zm_prison::equipment_safe_to_drop( weapon ); } spawned_collision_ffotd() { - precachemodel( "collision_ai_64x64x10" ); - precachemodel( "collision_wall_256x256x10_standard" ); - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_wall_512x512x10_standard" ); - precachemodel( "collision_geo_256x256x256_standard" ); - precachemodel( "collision_geo_64x64x256_standard" ); - precachemodel( "collision_geo_128x128x128_standard" ); - flag_wait( "start_zombie_round_logic" ); - if ( !is_true( level.optimise_for_splitscreen ) ) - { - collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) ); - collision1 setmodel( "collision_ai_64x64x10" ); - collision1.angles = ( 0, 270, -90 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( -437, 6260, 121 ) ); - collision2 setmodel( "collision_wall_256x256x10_standard" ); - collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) ); - collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 270, 38,6 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) ); - collision4 setmodel( "collision_geo_256x256x256_standard" ); - collision4.angles = vectorScale( ( 0, 0, 0 ), 180 ); - collision4 ghost(); - collision5a = spawn( "script_model", ( 792, 8302, 1620 ) ); - collision5a setmodel( "collision_geo_64x64x256_standard" ); - collision5a.angles = ( 0, 0, 0 ); - collision5a ghost(); - collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) ); - collision5b setmodel( "collision_geo_64x64x256_standard" ); - collision5b.angles = ( 0, 0, 0 ); - collision5b ghost(); - collision6 = spawn( "script_model", ( 554, 8026, 698 ) ); - collision6 setmodel( "collision_wall_128x128x10_standard" ); - collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 ); - collision6 ghost(); - collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) ); - collision7 setmodel( "collision_geo_64x64x256_standard" ); - collision7.angles = ( 0, 0, 0 ); - collision7 ghost(); - collision8 = spawn( "script_model", ( 258, 9706, 1152 ) ); - collision8 setmodel( "collision_geo_64x64x256_standard" ); - collision8.angles = ( 0, 0, 0 ); - collision8 ghost(); - collision9 = spawn( "script_model", ( 596, 8944, 1160 ) ); - collision9 setmodel( "collision_ai_64x64x10" ); - collision9.angles = ( 270, 180, -180 ); - collision9 ghost(); - collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) ); - collision10 setmodel( "collision_geo_128x128x128_standard" ); - collision10.angles = ( 354,9, 11, 0 ); - collision10 ghost(); - collision11 = spawn( "script_model", ( -4, 8314, 808 ) ); - collision11 setmodel( "collision_wall_128x128x10_standard" ); - collision11.angles = vectorScale( ( 0, 0, 0 ), 292 ); - collision11 ghost(); - collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) ); - collision12 setmodel( "collision_wall_512x512x10_standard" ); - collision12.angles = ( 0, 0, 0 ); - collision12 ghost(); - } + precachemodel( "collision_ai_64x64x10" ); + precachemodel( "collision_wall_256x256x10_standard" ); + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_wall_512x512x10_standard" ); + precachemodel( "collision_geo_256x256x256_standard" ); + precachemodel( "collision_geo_64x64x256_standard" ); + precachemodel( "collision_geo_128x128x128_standard" ); + precachemodel( "collision_geo_128x128x10_standard" ); + precachemodel( "collision_geo_64x64x64_standard" ); + precachemodel( "collision_geo_32x32x128_standard" ); + precachemodel( "p6_zm_al_surgery_cart" ); + precachemodel( "p6_zm_al_laundry_bag" ); + precachemodel( "ch_furniture_teachers_chair1" ); + flag_wait( "start_zombie_round_logic" ); + + if ( !is_true( level.optimise_for_splitscreen ) ) + { + collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) ); + collision1 setmodel( "collision_ai_64x64x10" ); + collision1.angles = ( 0, 270, -90 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( -437, 6260, 121 ) ); + collision2 setmodel( "collision_wall_256x256x10_standard" ); + collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) ); + collision3 setmodel( "collision_wall_128x128x10_standard" ); + collision3.angles = ( 0, 270, 38.6 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) ); + collision4 setmodel( "collision_geo_256x256x256_standard" ); + collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 ); + collision4 ghost(); + collision5a = spawn( "script_model", ( 792, 8302, 1620 ) ); + collision5a setmodel( "collision_geo_64x64x256_standard" ); + collision5a.angles = ( 0, 0, 0 ); + collision5a ghost(); + collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) ); + collision5b setmodel( "collision_geo_64x64x256_standard" ); + collision5b.angles = ( 0, 0, 0 ); + collision5b ghost(); + collision6 = spawn( "script_model", ( 554, 8026, 698 ) ); + collision6 setmodel( "collision_wall_128x128x10_standard" ); + collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 ); + collision6 ghost(); + collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) ); + collision7 setmodel( "collision_geo_64x64x256_standard" ); + collision7.angles = ( 0, 0, 0 ); + collision7 ghost(); + collision8 = spawn( "script_model", ( 258, 9706, 1152 ) ); + collision8 setmodel( "collision_geo_64x64x256_standard" ); + collision8.angles = ( 0, 0, 0 ); + collision8 ghost(); + collision9 = spawn( "script_model", ( 596, 8944, 1160 ) ); + collision9 setmodel( "collision_ai_64x64x10" ); + collision9.angles = ( 270, 180, -180 ); + collision9 ghost(); + collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) ); + collision10 setmodel( "collision_geo_128x128x128_standard" ); + collision10.angles = ( 354.9, 11, 0 ); + collision10 ghost(); + collision11 = spawn( "script_model", ( -4, 8314, 808 ) ); + collision11 setmodel( "collision_wall_128x128x10_standard" ); + collision11.angles = vectorscale( ( 0, 1, 0 ), 292.0 ); + collision11 ghost(); + collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) ); + collision12 setmodel( "collision_wall_512x512x10_standard" ); + collision12.angles = ( 0, 0, 0 ); + collision12 ghost(); + collision13 = spawn( "script_model", ( 1788, 9758, 1472 ) ); + collision13 setmodel( "collision_geo_64x64x64_standard" ); + collision13.angles = ( 0, 0, 0 ); + collision13 ghost(); + collision13_prop1 = spawn( "script_model", ( 1801.27, 9753.57, 1440 ) ); + collision13_prop1 setmodel( "p6_zm_al_surgery_cart" ); + collision13_prop1.angles = vectorscale( ( 0, 1, 0 ), 14.8 ); + collision13_prop2 = spawn( "script_model", ( 1802.64, 9754.85, 1476 ) ); + collision13_prop2 setmodel( "p6_zm_al_laundry_bag" ); + collision13_prop2.angles = vectorscale( ( 0, 1, 0 ), 314.351 ); + collision14 = spawn( "script_model", ( -820, 8668, 1400 ) ); + collision14 setmodel( "collision_geo_32x32x128_standard" ); + collision14.angles = ( 0, 0, 0 ); + collision14 ghost(); + collision14_prop1 = spawn( "script_model", ( -820.273, 8668.71, 1336 ) ); + collision14_prop1 setmodel( "ch_furniture_teachers_chair1" ); + collision14_prop1.angles = vectorscale( ( 0, 1, 0 ), 80.0 ); + collision15 = spawn( "script_model", ( 2557, 9723.5, 1520 ) ); + collision15 setmodel( "collision_geo_128x128x10_standard" ); + collision15.angles = vectorscale( ( 0, 0, 1 ), 34.2 ); + collision15 ghost(); + collision16 = spawn( "script_model", ( -1909.5, -3614, -8583 ) ); + collision16 setmodel( "collision_geo_256x256x256_standard" ); + collision16.angles = vectorscale( ( 1, 0, 0 ), 34.9 ); + collision16 ghost(); + collision17 = spawn( "script_model", ( -1909.5, -3554, -8583 ) ); + collision17 setmodel( "collision_geo_256x256x256_standard" ); + collision17.angles = vectorscale( ( 1, 0, 0 ), 34.9 ); + collision17 ghost(); + } } afterlife_give_loadout_override() { - self thread afterlife_leave_freeze(); - self maps/mp/zombies/_zm_afterlife::afterlife_give_loadout(); + self thread afterlife_leave_freeze(); + self maps\mp\zombies\_zm_afterlife::afterlife_give_loadout(); } afterlife_leave_freeze() { - self endon( "disconnect" ); - self freezecontrols( 1 ); - wait 0,5; - if ( !is_true( self.hostmigrationcontrolsfrozen ) ) - { - self freezecontrols( 0 ); - } + self endon( "disconnect" ); + level endon( "end_game" ); + self freezecontrols( 1 ); + wait 0.5; + + if ( !is_true( self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc index f6bb61b..931b4e6 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_fx.gsc @@ -1,144 +1,147 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_prison_fx; main() { - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/zm_prison_fx::main(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\zm_prison_fx::main(); } precache_scripted_fx() { - level._effect[ "elevator_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" ); - level._effect[ "key_glint" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" ); - level._effect[ "quest_item_glow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" ); - level._effect[ "eye_glow" ] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" ); - level._effect[ "fx_alcatraz_unlock_door" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" ); - level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" ); - level._effect[ "fx_alcatraz_lightning_finale" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" ); - level._effect[ "fx_alcatraz_panel_on_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" ); - level._effect[ "fx_alcatraz_panel_off_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" ); - level._effect[ "fx_alcatraz_lightning_wire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" ); - level._effect[ "fx_alcatraz_afterlife_zmb_tport" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); - level._effect[ "fx_alcatraz_panel_ol" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" ); - level._effect[ "fx_alcatraz_plane_apear" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" ); - level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); - level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); - level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); - level._effect[ "fx_alcatraz_plane_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" ); - level._effect[ "fx_alcatraz_plane_trail_fast" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" ); - level._effect[ "fx_alcatraz_flight_lightning" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" ); - level._effect[ "fx_alcatraz_plane_fire_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" ); - level._effect[ "alcatraz_dryer_light_green" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" ); - level._effect[ "alcatraz_dryer_light_red" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" ); - level._effect[ "alcatraz_dryer_light_yellow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); - level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" ); - level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); - level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); - level._effect[ "acid_spray" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" ); - level._effect[ "acid_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" ); - level._effect[ "box_activated" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" ); - level._effect[ "fan_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" ); - level._effect[ "light_gondola" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" ); - level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" ); - level._effect[ "tomahawk_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" ); - level._effect[ "tomahawk_trail_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" ); - level._effect[ "tomahawk_impact" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" ); - level._effect[ "tomahawk_impact_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" ); - level._effect[ "tomahawk_charge_up" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" ); - level._effect[ "tomahawk_charge_up_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" ); - level._effect[ "tomahawk_pickup" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" ); - level._effect[ "tomahawk_pickup_upgrade" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" ); - level._effect[ "tomahawk_charged_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" ); - level._effect[ "tomahawk_fire_dot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" ); - level._effect[ "soul_charge_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" ); - level._effect[ "soul_charge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" ); - level._effect[ "soul_charge_impact" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" ); - level._effect[ "soul_charged" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" ); - level._effect[ "hell_portal" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" ); - level._effect[ "hell_portal_close" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" ); - level._effect[ "tomahawk_hellhole" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" ); - level._effect[ "wolf_bite_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" ); - level._effect[ "uzi_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" ); - level._effect[ "thompson_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" ); - level._effect[ "fx_alcatraz_lighthouse" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" ); - level._effect[ "ee_skull_shot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" ); + level._effect["elevator_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" ); + level._effect["key_glint"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" ); + level._effect["quest_item_glow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" ); + level._effect["eye_glow"] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" ); + level._effect["fx_alcatraz_unlock_door"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" ); + level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" ); + level._effect["fx_alcatraz_lightning_finale"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" ); + level._effect["fx_alcatraz_panel_on_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" ); + level._effect["fx_alcatraz_panel_off_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" ); + level._effect["fx_alcatraz_lightning_wire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" ); + level._effect["fx_alcatraz_afterlife_zmb_tport"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); + level._effect["fx_alcatraz_panel_ol"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" ); + level._effect["fx_alcatraz_plane_apear"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" ); + level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" ); + level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); + level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); + level._effect["fx_alcatraz_plane_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" ); + level._effect["fx_alcatraz_plane_trail_fast"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" ); + level._effect["fx_alcatraz_flight_lightning"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" ); + level._effect["fx_alcatraz_plane_fire_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" ); + level._effect["alcatraz_dryer_light_green"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" ); + level._effect["alcatraz_dryer_light_red"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" ); + level._effect["alcatraz_dryer_light_yellow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); + level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" ); + level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" ); + level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" ); + level._effect["acid_spray"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" ); + level._effect["acid_death"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" ); + level._effect["box_activated"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" ); + level._effect["fan_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" ); + level._effect["light_gondola"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" ); + level._effect["lightning_flash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" ); + level._effect["tomahawk_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" ); + level._effect["tomahawk_trail_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" ); + level._effect["tomahawk_impact"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" ); + level._effect["tomahawk_impact_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" ); + level._effect["tomahawk_charge_up"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" ); + level._effect["tomahawk_charge_up_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" ); + level._effect["tomahawk_pickup"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" ); + level._effect["tomahawk_pickup_upgrade"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" ); + level._effect["tomahawk_charged_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" ); + level._effect["tomahawk_fire_dot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" ); + level._effect["soul_charge_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" ); + level._effect["soul_charge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" ); + level._effect["soul_charge_impact"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" ); + level._effect["soul_charged"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" ); + level._effect["hell_portal"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" ); + level._effect["hell_portal_close"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" ); + level._effect["tomahawk_hellhole"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" ); + level._effect["wolf_bite_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" ); + level._effect["uzi_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" ); + level._effect["thompson_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" ); + level._effect["fx_alcatraz_lighthouse"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" ); + level._effect["ee_skull_shot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" ); } precache_createfx_fx() { - level._effect[ "fx_alcatraz_storm_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" ); - level._effect[ "fx_alcatraz_vista_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" ); - level._effect[ "fx_alcatraz_docks_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" ); - level._effect[ "fx_alcatraz_fog_closet" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" ); - level._effect[ "fx_alcatraz_fire_works" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" ); - level._effect[ "fx_alcatraz_tunnel_dust_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" ); - level._effect[ "fx_alcatraz_tunnel_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" ); - level._effect[ "fx_alcatraz_steam_pipe_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" ); - level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); - level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" ); - level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); - level._effect[ "fx_alcatraz_panel_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" ); - level._effect[ "fx_alcatraz_door_blocker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" ); - level._effect[ "fx_alcatraz_dryer_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" ); - level._effect[ "fx_alcatraz_elec_fence" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" ); - level._effect[ "fx_alcatraz_generator_smk" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" ); - level._effect[ "fx_alcatraz_generator_sparks" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" ); - level._effect[ "fx_alcatraz_generator_exp" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" ); - level._effect[ "fx_alcatraz_elevator_spark" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" ); - level._effect[ "fx_alcatraz_elec_key" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" ); - level._effect[ "fx_alcatraz_sparks_ceiling" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" ); - level._effect[ "fx_alcatraz_sparks_panel" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" ); - level._effect[ "fx_alcatraz_fire_sm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" ); - level._effect[ "fx_alcatraz_fire_xsm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" ); - level._effect[ "fx_alcatraz_embers_flat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" ); - level._effect[ "fx_alcatraz_falling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" ); - level._effect[ "fx_alcatraz_steam_3floor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" ); - level._effect[ "fx_alcatraz_elec_box_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" ); - level._effect[ "fx_alcatraz_blood_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" ); - level._effect[ "fx_alcatraz_godray_grill" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" ); - level._effect[ "fx_alcatraz_godray_grill_lg" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" ); - level._effect[ "fx_alcatraz_godray_skinny" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" ); - level._effect[ "fx_alcatraz_ground_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" ); - level._effect[ "fx_alcatraz_flies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" ); - level._effect[ "fx_alcatraz_candle_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" ); - level._effect[ "fx_alcatraz_portal_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" ); - level._effect[ "fx_alcatraz_fire_md" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" ); - level._effect[ "fx_alcatraz_smk_linger" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" ); - level._effect[ "fx_alcatraz_embers_indoor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" ); - level._effect[ "fx_alcatraz_papers" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" ); - level._effect[ "fx_alcatraz_ceiling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" ); - level._effect[ "fx_alcatraz_steam_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" ); - level._effect[ "fx_alcatraz_godray_jail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" ); - level._effect[ "fx_alcatraz_water_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" ); - level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" ); - level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); - level._effect[ "fx_alcatraz_light_tinhat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" ); - level._effect[ "fx_alcatraz_light_round_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" ); - level._effect[ "fx_alcatraz_light_tinhat_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" ); - level._effect[ "fx_alcatraz_flight_clouds" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" ); - level._effect[ "fx_alcatraz_lightning_bridge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" ); - level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" ); + level._effect["fx_alcatraz_storm_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" ); + level._effect["fx_alcatraz_vista_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" ); + level._effect["fx_alcatraz_docks_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" ); + level._effect["fx_alcatraz_fog_closet"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" ); + level._effect["fx_alcatraz_fire_works"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" ); + level._effect["fx_alcatraz_tunnel_dust_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" ); + level._effect["fx_alcatraz_tunnel_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" ); + level._effect["fx_alcatraz_steam_pipe_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" ); + level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); + level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" ); + level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); + level._effect["fx_alcatraz_panel_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" ); + level._effect["fx_alcatraz_door_blocker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" ); + level._effect["fx_alcatraz_dryer_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" ); + level._effect["fx_alcatraz_elec_fence"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" ); + level._effect["fx_alcatraz_generator_smk"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" ); + level._effect["fx_alcatraz_generator_sparks"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" ); + level._effect["fx_alcatraz_generator_exp"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" ); + level._effect["fx_alcatraz_elevator_spark"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" ); + level._effect["fx_alcatraz_elec_key"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" ); + level._effect["fx_alcatraz_sparks_ceiling"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" ); + level._effect["fx_alcatraz_sparks_panel"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" ); + level._effect["fx_alcatraz_fire_sm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" ); + level._effect["fx_alcatraz_fire_xsm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" ); + level._effect["fx_alcatraz_embers_flat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" ); + level._effect["fx_alcatraz_falling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" ); + level._effect["fx_alcatraz_steam_3floor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" ); + level._effect["fx_alcatraz_elec_box_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" ); + level._effect["fx_alcatraz_blood_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" ); + level._effect["fx_alcatraz_godray_grill"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" ); + level._effect["fx_alcatraz_godray_grill_lg"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" ); + level._effect["fx_alcatraz_godray_skinny"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" ); + level._effect["fx_alcatraz_ground_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" ); + level._effect["fx_alcatraz_flies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" ); + level._effect["fx_alcatraz_candle_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" ); + level._effect["fx_alcatraz_portal_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" ); + level._effect["fx_alcatraz_fire_md"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" ); + level._effect["fx_alcatraz_smk_linger"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" ); + level._effect["fx_alcatraz_embers_indoor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" ); + level._effect["fx_alcatraz_papers"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" ); + level._effect["fx_alcatraz_ceiling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" ); + level._effect["fx_alcatraz_steam_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" ); + level._effect["fx_alcatraz_godray_jail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" ); + level._effect["fx_alcatraz_water_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" ); + level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" ); + level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" ); + level._effect["fx_alcatraz_light_tinhat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" ); + level._effect["fx_alcatraz_light_round_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" ); + level._effect["fx_alcatraz_light_tinhat_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" ); + level._effect["fx_alcatraz_flight_clouds"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" ); + level._effect["fx_alcatraz_lightning_bridge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" ); + level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" ); } +#using_animtree("fxanim_props"); + precache_fxanim_props() { - level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_start" ] = %fxanim_zom_al_industrial_dryer_start_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_idle" ] = %fxanim_zom_al_industrial_dryer_idle_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_end" ] = %fxanim_zom_al_industrial_dryer_end_anim; - level.scr_anim[ "fxanim_props" ][ "dryer_hide" ] = %fxanim_zom_al_industrial_dryer_hide_anim; - level.scr_anim[ "fxanim_props" ][ "pulley_down" ] = %fxanim_zom_al_key_pulley_down_anim; - level.scr_anim[ "fxanim_props" ][ "pulley_up" ] = %fxanim_zom_al_key_pulley_up_anim; - level.scr_anim[ "fxanim_props" ][ "crane_palette" ] = %fxanim_zom_al_crane_palette_anim; - level.scr_anim[ "fxanim_props" ][ "chain_hook_rotate" ] = %fxanim_zom_al_chain_short_hook_rotate_anim; - level.scr_anim[ "fxanim_props" ][ "bodybag_rotate" ] = %fxanim_zom_al_bodybag_rotate_anim; - level.scr_anim[ "fxanim_props" ][ "chain_hook_swing" ] = %fxanim_zom_al_chain_short_hook_swing_anim; - level.scr_anim[ "fxanim_props" ][ "bodybag_swing" ] = %fxanim_zom_al_bodybag_swing_anim; - level.scr_anim[ "fxanim_props" ][ "chain_hook_crane" ] = %fxanim_zom_al_chain_short_hook_crane_anim; - level.scr_anim[ "fxanim_props" ][ "bodybag_crane" ] = %fxanim_zom_al_bodybag_crane_anim; + level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim; + level.scr_anim["fxanim_props"]["dryer_start"] = %fxanim_zom_al_industrial_dryer_start_anim; + level.scr_anim["fxanim_props"]["dryer_idle"] = %fxanim_zom_al_industrial_dryer_idle_anim; + level.scr_anim["fxanim_props"]["dryer_end"] = %fxanim_zom_al_industrial_dryer_end_anim; + level.scr_anim["fxanim_props"]["dryer_hide"] = %fxanim_zom_al_industrial_dryer_hide_anim; + level.scr_anim["fxanim_props"]["pulley_down"] = %fxanim_zom_al_key_pulley_down_anim; + level.scr_anim["fxanim_props"]["pulley_up"] = %fxanim_zom_al_key_pulley_up_anim; + level.scr_anim["fxanim_props"]["crane_palette"] = %fxanim_zom_al_crane_palette_anim; + level.scr_anim["fxanim_props"]["chain_hook_rotate"] = %fxanim_zom_al_chain_short_hook_rotate_anim; + level.scr_anim["fxanim_props"]["bodybag_rotate"] = %fxanim_zom_al_bodybag_rotate_anim; + level.scr_anim["fxanim_props"]["chain_hook_swing"] = %fxanim_zom_al_chain_short_hook_swing_anim; + level.scr_anim["fxanim_props"]["bodybag_swing"] = %fxanim_zom_al_bodybag_swing_anim; + level.scr_anim["fxanim_props"]["chain_hook_crane"] = %fxanim_zom_al_chain_short_hook_crane_anim; + level.scr_anim["fxanim_props"]["bodybag_crane"] = %fxanim_zom_al_bodybag_crane_anim; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc index da575df..4b35457 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_spoon.gsc @@ -1,305 +1,294 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weap_tomahawk; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_weap_tomahawk; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_audio; -//#using_animtree( "fxanim_props" ); - -init() //checked matches cerberus output +init() { - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - spoon_easy_cleanup(); - return; - } - precachemodel( "t6_wpn_zmb_spoon_world" ); - precachemodel( "c_zom_inmate_g_rarmspawn" ); - level thread wait_for_initial_conditions(); - array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func ); - level thread bucket_init(); - spork_portal = getent( "afterlife_show_spork", "targetname" ); - spork_portal setinvisibletoall(); - level.b_spoon_in_tub = 0; - level.n_spoon_kill_count = 0; - flag_init( "spoon_obtained" ); - flag_init( "charged_spoon" ); + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + { + spoon_easy_cleanup(); + return; + } + + precachemodel( "t6_wpn_zmb_spoon_world" ); + precachemodel( "c_zom_inmate_g_rarmspawn" ); + level thread wait_for_initial_conditions(); + array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func ); + level thread bucket_init(); + spork_portal = getent( "afterlife_show_spork", "targetname" ); + spork_portal setinvisibletoall(); + level.b_spoon_in_tub = 0; + level.n_spoon_kill_count = 0; + flag_init( "spoon_obtained" ); + flag_init( "charged_spoon" ); /# - level thread debug_prison_spoon_quest(); + level thread debug_prison_spoon_quest(); #/ } -spoon_easy_cleanup() //checked matches cerberus output +spoon_easy_cleanup() { - spork_portal = getent( "afterlife_show_spork", "targetname" ); - spork_portal delete(); - m_spoon_pickup = getent( "pickup_spoon", "targetname" ); - m_spoon_pickup delete(); - m_spoon = getent( "zap_spoon", "targetname" ); - m_spoon delete(); + spork_portal = getent( "afterlife_show_spork", "targetname" ); + spork_portal delete(); + m_spoon_pickup = getent( "pickup_spoon", "targetname" ); + m_spoon_pickup delete(); + m_spoon = getent( "zap_spoon", "targetname" ); + m_spoon delete(); } -extra_death_func_to_check_for_splat_death() //checked matches cerberus output +extra_death_func_to_check_for_splat_death() { - self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript(); - if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) - { - if ( self.damageweapon == "blundersplat_explosive_dart_zm" ) - { - if ( isplayer( self.attacker ) ) - { - self notify( "killed_by_a_blundersplat" ); - } - } - else - { - if ( self.damageweapon == "bouncing_tomahawk_zm" ) - { - if ( isplayer( self.attacker ) ) - { - self.attacker notify( "got_a_tomahawk_kill" ); - } - } - } - } - if ( isDefined( self.attacker.killed_with_only_tomahawk ) ) - { - if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" ) - { - self.attacker.killed_with_only_tomahawk = 0; - } - } - if ( isDefined( self.attacker.killed_something_thq ) ) - { - self.attacker.killed_something_thq = 1; - } - return 0; + self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript(); + + if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" ) + { + if ( self.damageweapon == "blundersplat_explosive_dart_zm" ) + { + if ( isplayer( self.attacker ) ) + self notify( "killed_by_a_blundersplat", self.attacker ); + } + else if ( self.damageweapon == "bouncing_tomahawk_zm" ) + { + if ( isplayer( self.attacker ) ) + self.attacker notify( "got_a_tomahawk_kill" ); + } + } + + if ( isdefined( self.attacker.killed_with_only_tomahawk ) ) + { + if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" ) + self.attacker.killed_with_only_tomahawk = 0; + } + + if ( isdefined( self.attacker.killed_something_thq ) ) + self.attacker.killed_something_thq = 1; + + return 0; } -zombie_spoon_func() //checked matches cerberus output +zombie_spoon_func() { - self.deathfunction = ::extra_death_func_to_check_for_splat_death; - self waittill( "killed_by_a_blundersplat", player ); - if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub ) - { - return; - } - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "cellblock_shower" ) ) - { - level.n_spoon_kill_count++; - } - else - { - return; - } - if ( level.n_spoon_kill_count >= 50 ) - { + self.deathfunction = ::extra_death_func_to_check_for_splat_death; + + self waittill( "killed_by_a_blundersplat", player ); + + if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub ) + return; + + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "cellblock_shower" ) ) + level.n_spoon_kill_count++; + else + return; + + if ( level.n_spoon_kill_count >= 50 ) + { /# - iprintlnbold( "Spoon Charged" ); + iprintlnbold( "Spoon Charged" ); #/ - flag_set( "charged_spoon" ); - } + flag_set( "charged_spoon" ); + } } -wait_for_initial_conditions() //checked changed to match cerberus output +wait_for_initial_conditions() { - m_spoon_pickup = getent( "pickup_spoon", "targetname" ); - m_spoon_pickup ghost(); - m_spoon_pickup ghostindemo(); - while ( !isDefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 ) - { - wait 1; - } - flag_wait( "soul_catchers_charged" ); - m_poster = getent( "poster", "targetname" ); - m_poster.health = 5000; - m_poster setcandamage( 1 ); - b_poster_knocked_down = 0; - while ( !b_poster_knocked_down ) - { - m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); - if ( weaponname != "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" ) - { - b_poster_knocked_down = 1; - playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin ); - m_poster delete(); - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 ); - } - wait 1; - attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" ); - } - } - spork_door = getent( "spork_door", "targetname" ); - spork_door.targetname = "afterlife_door"; - spork_portal = getent( "afterlife_show_spork", "targetname" ); - spork_portal.targetname = "afterlife_show"; - m_spoon = getent( "zap_spoon", "targetname" ); - m_spoon ghostindemo(); - m_spoon.health = 50000; - m_spoon setcandamage( 1 ); - b_spoon_shocked = 0; - while ( !b_spoon_shocked ) - { - m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); - m_spoon.health += damage; - if ( weaponname == "lightning_hands_zm" ) - { - b_spoon_shocked = 1; - m_spoon delete(); - attacker playsound( "zmb_easteregg_laugh" ); - } - } - m_spoon_pickup show(); - m_spoon_pickup.health = 10000; - m_spoon_pickup setcandamage( 1 ); - level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_spoon; + m_spoon_pickup = getent( "pickup_spoon", "targetname" ); + m_spoon_pickup ghost(); + m_spoon_pickup ghostindemo(); + + while ( !isdefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 ) + wait 1; + + flag_wait( "soul_catchers_charged" ); + m_poster = getent( "poster", "targetname" ); + m_poster.health = 5000; + m_poster setcandamage( 1 ); + b_poster_knocked_down = 0; + + while ( !b_poster_knocked_down ) + { + m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); + + if ( weaponname == "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" ) + { + b_poster_knocked_down = 1; + playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin ); + m_poster delete(); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 ); + + wait 1.0; + attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" ); + } + } + + spork_door = getent( "spork_door", "targetname" ); + spork_door.targetname = "afterlife_door"; + spork_portal = getent( "afterlife_show_spork", "targetname" ); + spork_portal.targetname = "afterlife_show"; + m_spoon = getent( "zap_spoon", "targetname" ); + m_spoon ghostindemo(); + m_spoon.health = 50000; + m_spoon setcandamage( 1 ); + b_spoon_shocked = 0; + + while ( !b_spoon_shocked ) + { + m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); + + m_spoon.health += damage; + + if ( weaponname == "lightning_hands_zm" ) + { + b_spoon_shocked = 1; + m_spoon delete(); + attacker playsound( "zmb_easteregg_laugh" ); + } + } + + m_spoon_pickup show(); + m_spoon_pickup.health = 10000; + m_spoon_pickup setcandamage( 1 ); + level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_spoon; } -tomahawk_the_spoon( grenade, n_grenade_charge_power ) //checked matches cerberus output +tomahawk_the_spoon( grenade, n_grenade_charge_power ) { - if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) ) - { - return 0; - } - m_spoon = getent( "pickup_spoon", "targetname" ); - if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 ) - { - m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - m_player_spoon = spawn( "script_model", grenade.origin ); - m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" ); - m_player_spoon linkto( m_tomahawk ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 ); - self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk ); - self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ); - self thread dip_the_spoon(); - flag_set( "spoon_obtained" ); - self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self ); - return 1; - } - return 0; + if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) ) + return false; + + m_spoon = getent( "pickup_spoon", "targetname" ); + + if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 ) + { + m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + m_player_spoon = spawn( "script_model", grenade.origin ); + m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" ); + m_player_spoon linkto( m_tomahawk ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 ); + self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk ); + self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ); + self thread dip_the_spoon(); + flag_set( "spoon_obtained" ); + self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self ); + return true; + } + + return false; } -give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ) //checked changed to match cerberus output +give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ) { - while ( isDefined( m_tomahawk ) ) - { - wait 0.05; - } - m_player_spoon delete(); - if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !is_true( self.spoon_in_tub ) ) - { - self giveweapon( "spoon_zm_alcatraz" ); - self set_player_melee_weapon( "spoon_zm_alcatraz" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spoon", self ); - weapons = self getweaponslist(); - for ( i = 0; i < weapons.size; i++ ) - { - if ( issubstr( weapons[ i ], "knife" ) ) - { - self takeweapon( weapons[ i ] ); - } - } - } - weapons = self getweaponslist(); - wait 1; - self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); + while ( isdefined( m_tomahawk ) ) + wait 0.05; + + m_player_spoon delete(); + + if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !( isdefined( self.spoon_in_tub ) && self.spoon_in_tub ) ) + { + self giveweapon( "spoon_zm_alcatraz" ); + self set_player_melee_weapon( "spoon_zm_alcatraz" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spoon", self ); + weapons = self getweaponslist(); + + for ( i = 0; i < weapons.size; i++ ) + { + if ( issubstr( weapons[i], "knife" ) ) + self takeweapon( weapons[i] ); + } + } + + weapons = self getweaponslist(); + wait 1.0; + self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); } -bucket_init() //checked matches cerberus output +bucket_init() { - s_bathtub = getstruct( "tub_trigger_struct", "targetname" ); - level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 ); - level.t_bathtub usetriggerrequirelookat(); - level.t_bathtub triggerignoreteam(); - level.t_bathtub sethintstring( "" ); - level.t_bathtub setcursorhint( "HINT_NOICON" ); + s_bathtub = getstruct( "tub_trigger_struct", "targetname" ); + level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 ); + level.t_bathtub usetriggerrequirelookat(); + level.t_bathtub triggerignoreteam(); + level.t_bathtub sethintstring( "" ); + level.t_bathtub setcursorhint( "HINT_NOICON" ); } -wait_for_bucket_activated( player ) //checked matches cerberus output +wait_for_bucket_activated( player ) { - if ( isDefined( player ) ) - { - while ( 1 ) - { - level.t_bathtub waittill( "trigger", who ); - if ( who == player ) - { - return; - } - } - } - else - { - level.t_bathtub waittill( "trigger", who ); - } + if ( isdefined( player ) ) + { + while ( true ) + { + level.t_bathtub waittill( "trigger", who ); + + if ( who == player ) + return; + } + } + else + level.t_bathtub waittill( "trigger", who ); } -dip_the_spoon() //checked matches cerberus output +dip_the_spoon() { - self endon( "disconnect" ); - wait_for_bucket_activated( self ); - self takeweapon( "spoon_zm_alcatraz" ); - self giveweapon( "knife_zm_alcatraz" ); - self set_player_melee_weapon( "knife_zm_alcatraz" ); - self.spoon_in_tub = 1; - self setclientfieldtoplayer( "spoon_visual_state", 1 ); - wait 5; - level.b_spoon_in_tub = 1; - flag_wait( "charged_spoon" ); - wait 1; - level.t_bathtub playsound( "zmb_easteregg_laugh" ); - self thread thrust_the_spork(); + self endon( "disconnect" ); + wait_for_bucket_activated( self ); + self takeweapon( "spoon_zm_alcatraz" ); + self giveweapon( "knife_zm_alcatraz" ); + self set_player_melee_weapon( "knife_zm_alcatraz" ); + self.spoon_in_tub = 1; + self setclientfieldtoplayer( "spoon_visual_state", 1 ); + wait 5; + level.b_spoon_in_tub = 1; + flag_wait( "charged_spoon" ); + wait 1.0; + level.t_bathtub playsound( "zmb_easteregg_laugh" ); + self thread thrust_the_spork(); } -thrust_the_spork() //checked matches cerberus output +thrust_the_spork() { - self endon( "disconnect" ); - wait_for_bucket_activated( self ); - self setclientfieldtoplayer( "spoon_visual_state", 2 ); - wait 5; - wait_for_bucket_activated( self ); - self takeweapon( "knife_zm_alcatraz" ); - self giveweapon( "spork_zm_alcatraz" ); - self set_player_melee_weapon( "spork_zm_alcatraz" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spork", self ); - self.spoon_in_tub = undefined; - self setclientfieldtoplayer( "spoon_visual_state", 3 ); - wait 1; - self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); + self endon( "disconnect" ); + wait_for_bucket_activated( self ); + self setclientfieldtoplayer( "spoon_visual_state", 2 ); + wait 5; + wait_for_bucket_activated( self ); + self takeweapon( "knife_zm_alcatraz" ); + self giveweapon( "spork_zm_alcatraz" ); + self set_player_melee_weapon( "spork_zm_alcatraz" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spork", self ); + self.spoon_in_tub = undefined; + self setclientfieldtoplayer( "spoon_visual_state", 3 ); + wait 1.0; + self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); } -debug_prison_spoon_quest() //dev call didn't check +debug_prison_spoon_quest() { - /* /# - while ( 1 ) - { - a_players = getplayers(); - _a377 = a_players; - _k377 = getFirstArrayKey( _a377 ); - while ( isDefined( _k377 ) ) - { - player = _a377[ _k377 ]; - if ( player hasweapon( "bouncing_tomahawk_zm" ) ) - { - flag_set( "soul_catchers_charged" ); - break; - } - else - { - _k377 = getNextArrayKey( _a377, _k377 ); - } - } - wait 1; + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player hasweapon( "bouncing_tomahawk_zm" ) ) + { + flag_set( "soul_catchers_charged" ); + break; + } + } + + wait 1.0; + } #/ - } - */ } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc index 8ff8515..c3097ee 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_bg.gsc @@ -1,287 +1,289 @@ -#include maps/mp/zombies/_zm_weap_tomahawk; -#include maps/mp/zombies/_zm_afterlife; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\zombies\_zm_weap_tomahawk; init() { - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - sq_bg_easy_cleanup(); - return; - } - precachemodel( "p6_zm_al_skull_afterlife" ); - flag_init( "warden_blundergat_obtained" ); - level thread wait_for_initial_conditions(); + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + { + sq_bg_easy_cleanup(); + return; + } + + precachemodel( "p6_zm_al_skull_afterlife" ); + flag_init( "warden_blundergat_obtained" ); + level thread wait_for_initial_conditions(); } sq_bg_easy_cleanup() { - t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); - t_reward_pickup delete(); + t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); + t_reward_pickup delete(); } wait_for_initial_conditions() { - t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); - t_reward_pickup sethintstring( "" ); - t_reward_pickup setcursorhint( "HINT_NOICON" ); + t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); + t_reward_pickup sethintstring( "" ); + t_reward_pickup setcursorhint( "HINT_NOICON" ); /# - level thread debug_sq_bg_quest_starter(); + level thread debug_sq_bg_quest_starter(); #/ - level waittill( "bouncing_tomahawk_zm_aquired" ); - level.sq_bg_macguffins = []; - a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" ); - _a46 = a_s_mcguffin; - _k46 = getFirstArrayKey( _a46 ); - while ( isDefined( _k46 ) ) - { - struct = _a46[ _k46 ]; - m_temp = spawn( "script_model", struct.origin, 0 ); - m_temp.targetname = "sq_bg_macguffin"; - m_temp setmodel( struct.model ); - m_temp.angles = struct.angles; - m_temp ghost(); - m_temp ghostindemo(); - level.sq_bg_macguffins[ level.sq_bg_macguffins.size ] = m_temp; - wait_network_frame(); - _k46 = getNextArrayKey( _a46, _k46 ); - } - array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think ); - level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_macguffin; - level thread check_sq_bg_progress(); - level waittill( "all_macguffins_acquired" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" ); - t_reward_pickup thread give_sq_bg_reward(); + level waittill( "bouncing_tomahawk_zm_aquired" ); + + level.sq_bg_macguffins = []; + a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" ); + + foreach ( struct in a_s_mcguffin ) + { + m_temp = spawn( "script_model", struct.origin, 0 ); + m_temp.targetname = "sq_bg_macguffin"; + m_temp setmodel( struct.model ); + m_temp.angles = struct.angles; + m_temp ghost(); + m_temp ghostindemo(); + level.sq_bg_macguffins[level.sq_bg_macguffins.size] = m_temp; + wait_network_frame(); + } + + array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think ); + level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_macguffin; + level thread check_sq_bg_progress(); + + level waittill( "all_macguffins_acquired" ); + + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" ); + t_reward_pickup thread give_sq_bg_reward(); } sq_bg_macguffin_think() { - self endon( "sq_bg_macguffin_received_by_player" ); - self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop(); - self.health = 10000; - self setcandamage( 1 ); - self setforcenocull(); - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) - { - playfx( level._effect[ "ee_skull_shot" ], self.origin ); - self playsound( "zmb_powerpanel_activate" ); - self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop(); - self thread wait_and_hide_sq_bg_macguffin(); - } - } + self endon( "sq_bg_macguffin_received_by_player" ); + self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop(); + self.health = 10000; + self setcandamage( 1 ); + self setforcenocull(); + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) + { + playfx( level._effect["ee_skull_shot"], self.origin ); + self playsound( "zmb_powerpanel_activate" ); + self thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop(); + self thread wait_and_hide_sq_bg_macguffin(); + } + } } wait_and_hide_sq_bg_macguffin() { - self notify( "restart_show_timer" ); - self endon( "restart_show_timer" ); - self endon( "caught_by_tomahawk" ); - wait 1,6; - self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop(); + self notify( "restart_show_timer" ); + self endon( "restart_show_timer" ); + self endon( "caught_by_tomahawk" ); + wait 1.6; + self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop(); } tomahawk_the_macguffin( grenade, n_grenade_charge_power ) { - if ( !isDefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 ) - { - return 0; - } - _a119 = level.sq_bg_macguffins; - _k119 = getFirstArrayKey( _a119 ); - while ( isDefined( _k119 ) ) - { - macguffin = _a119[ _k119 ]; - if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 ) - { - m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - macguffin notify( "caught_by_tomahawk" ); - macguffin.origin = grenade.origin; - macguffin linkto( m_tomahawk ); - macguffin thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop(); - self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk ); - self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin ); - return 1; - } - _k119 = getNextArrayKey( _a119, _k119 ); - } - return 0; + if ( !isdefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 ) + return false; + + foreach ( macguffin in level.sq_bg_macguffins ) + { + if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 ) + { + m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + macguffin notify( "caught_by_tomahawk" ); + macguffin.origin = grenade.origin; + macguffin linkto( m_tomahawk ); + macguffin thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop(); + self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk ); + self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin ); + return true; + } + } + + return false; } give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin ) { - self endon( "disconnect" ); - while ( isDefined( m_tomahawk ) ) - { - wait 0,05; - } - m_macguffin notify( "sq_bg_macguffin_received_by_player" ); - arrayremovevalue( level.sq_bg_macguffins, m_macguffin ); - m_macguffin delete(); - play_sound_at_pos( "purchase", self.origin ); - level notify( "sq_bg_macguffin_collected" ); + self endon( "disconnect" ); + + while ( isdefined( m_tomahawk ) ) + wait 0.05; + + m_macguffin notify( "sq_bg_macguffin_received_by_player" ); + arrayremovevalue( level.sq_bg_macguffins, m_macguffin ); + m_macguffin delete(); + play_sound_at_pos( "purchase", self.origin ); + level notify( "sq_bg_macguffin_collected", self ); } check_sq_bg_progress() { - n_macguffins_total = level.sq_bg_macguffins.size; - n_macguffins_collected = 0; - while ( 1 ) - { - level waittill( "sq_bg_macguffin_collected", player ); - n_macguffins_collected++; - if ( n_macguffins_collected >= n_macguffins_total ) - { - level notify( "all_macguffins_acquired" ); - break; - } - else play_sq_bg_collected_vo( player ); - } - wait 1; - player playsound( "zmb_easteregg_laugh" ); + n_macguffins_total = level.sq_bg_macguffins.size; + n_macguffins_collected = 0; + + while ( true ) + { + level waittill( "sq_bg_macguffin_collected", player ); + + n_macguffins_collected++; + + if ( n_macguffins_collected >= n_macguffins_total ) + { + level notify( "all_macguffins_acquired" ); + break; + } + else + play_sq_bg_collected_vo( player ); + } + + wait 1.0; + player playsound( "zmb_easteregg_laugh" ); } play_sq_bg_collected_vo( player ) { - player endon( "disconnect" ); - wait 1; - player thread do_player_general_vox( "quest", "pick_up_easter_egg" ); + player endon( "disconnect" ); + wait 1.0; + player thread do_player_general_vox( "quest", "pick_up_easter_egg" ); } give_sq_bg_reward() { - s_reward_origin = getstruct( "sq_bg_reward", "targetname" ); - t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 ); - while ( 1 ) - { - t_near waittill( "trigger", ent ); - if ( isplayer( ent ) ) - { - t_near thread sq_bg_spawn_rumble(); - break; - } - else - { - wait 0,1; - } - } - a_players = getplayers(); - if ( a_players.size == 1 ) - { - if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) ) - { - str_reward_weapon = "blundersplat_zm"; - str_loc = &"ZM_PRISON_SQ_BS"; - } - else - { - str_reward_weapon = "blundergat_zm"; - str_loc = &"ZM_PRISON_SQ_BG"; - } - } - else - { - str_reward_weapon = "blundergat_zm"; - str_loc = &"ZM_PRISON_SQ_BG"; - } - m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles ); - m_reward_model moveto( m_reward_model.origin + vectorScale( ( 0, 0, 1 ), 14 ), 5 ); - level setclientfield( "sq_bg_reward_portal", 1 ); - self sethintstring( str_loc ); - for ( ;; ) - { - while ( 1 ) - { - self waittill( "trigger", player ); - current_weapon = player getcurrentweapon(); - if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) - { - if ( player hasweapon( str_reward_weapon ) ) - { + s_reward_origin = getstruct( "sq_bg_reward", "targetname" ); + t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 ); + + while ( true ) + { + t_near waittill( "trigger", ent ); + + if ( isplayer( ent ) ) + { + t_near thread sq_bg_spawn_rumble(); + break; + } + + wait 0.1; + } + + a_players = getplayers(); + + if ( a_players.size == 1 ) + { + if ( a_players[0] hasweapon( "blundergat_zm" ) ) + { + str_reward_weapon = "blundersplat_zm"; + str_loc = &"ZM_PRISON_SQ_BS"; + } + else + { + str_reward_weapon = "blundergat_zm"; + str_loc = &"ZM_PRISON_SQ_BG"; + } + } + else + { + str_reward_weapon = "blundergat_zm"; + str_loc = &"ZM_PRISON_SQ_BG"; + } + + m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles ); + m_reward_model moveto( m_reward_model.origin + vectorscale( ( 0, 0, 1 ), 14.0 ), 5 ); + level setclientfield( "sq_bg_reward_portal", 1 ); + self sethintstring( str_loc ); + + while ( true ) + { + self waittill( "trigger", player ); + + current_weapon = player getcurrentweapon(); + + if ( is_player_valid( player ) && !( player.is_drinking > 0 ) && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && "none" != current_weapon && !player hacker_active() ) + { + if ( player hasweapon( str_reward_weapon ) ) + { /# - iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" ); + iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" ); #/ - } - } - else self delete(); - level setclientfield( "sq_bg_reward_portal", 0 ); - wait_network_frame(); - m_reward_model delete(); - player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon ); - } - } - t_near delete(); + continue; + } + else + { + self delete(); + level setclientfield( "sq_bg_reward_portal", 0 ); + wait_network_frame(); + m_reward_model delete(); + player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon ); + } + } + } + + t_near delete(); } sq_bg_spawn_rumble() { - a_players = getplayers(); - _a285 = a_players; - _k285 = getFirstArrayKey( _a285 ); - while ( isDefined( _k285 ) ) - { - player = _a285[ _k285 ]; - if ( player istouching( self ) ) - { - player setclientfieldtoplayer( "rumble_sq_bg", 1 ); - } - _k285 = getNextArrayKey( _a285, _k285 ); - } + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player istouching( self ) ) + player setclientfieldtoplayer( "rumble_sq_bg", 1 ); + } } take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override ) { - if ( !isDefined( weapon_limit_override ) ) - { - weapon_limit_override = 0; - } - if ( weapon_limit_override == 1 ) - { - self takeweapon( current_weapon ); - } - else - { - primaries = self getweaponslistprimaries(); - if ( isDefined( primaries ) && primaries.size >= 2 ) - { - self takeweapon( current_weapon ); - } - } - self giveweapon( reward_weapon ); - self switchtoweapon( reward_weapon ); - flag_set( "warden_blundergat_obtained" ); - self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self ); + if ( !isdefined( weapon_limit_override ) ) + weapon_limit_override = 0; + + if ( weapon_limit_override == 1 ) + self takeweapon( current_weapon ); + else + { + primaries = self getweaponslistprimaries(); + + if ( isdefined( primaries ) && primaries.size >= 2 ) + self takeweapon( current_weapon ); + } + + self giveweapon( reward_weapon ); + self switchtoweapon( reward_weapon ); + flag_set( "warden_blundergat_obtained" ); + self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self ); } debug_sq_bg_quest_starter() { /# - while ( 1 ) - { - a_players = getplayers(); - _a327 = a_players; - _k327 = getFirstArrayKey( _a327 ); - while ( isDefined( _k327 ) ) - { - player = _a327[ _k327 ]; - if ( player hasweapon( "bouncing_tomahawk_zm" ) ) - { - level notify( "bouncing_tomahawk_zm_aquired" ); - break; - } - else - { - _k327 = getNextArrayKey( _a327, _k327 ); - } - } - wait 1; + while ( true ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player hasweapon( "bouncing_tomahawk_zm" ) ) + { + level notify( "bouncing_tomahawk_zm_aquired" ); + break; + } + } + + wait 1.0; + } #/ - } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc index e8ffba8..117bee7 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_fc.gsc @@ -1,162 +1,162 @@ -#include maps/mp/zombies/_zm; -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm; onplayerconnect_sq_fc() { - if ( !isDefined( level.sq_fc_still_valid ) ) - { - level.sq_fc_still_valid = 1; - } - if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid ) - { - return; - } - self thread watch_for_touching_controls(); + if ( !isdefined( level.sq_fc_still_valid ) ) + level.sq_fc_still_valid = 1; + + if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid ) + return; + + self thread watch_for_touching_controls(); } watch_for_touching_controls() { - self endon( "out_of_mana" ); - self endon( "disconnect" ); - self waittill( "al_all_setup" ); - wait 1; - v_original_origin = ( self.origin[ 0 ], self.origin[ 1 ], 0 ); - v_original_angles = self.angles; - v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 ); - v_original_forward_vec = vectornormalize( v_forward_point - self.origin ); - while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid ) - { - v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 ); - v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin ); - move_length = length( ( self.origin[ 0 ], self.origin[ 1 ], 0 ) - v_original_origin ); - if ( !self actionslotonebuttonpressed() && !self actionslottwobuttonpressed() && !self actionslotthreebuttonpressed() && !self actionslotfourbuttonpressed() && !self adsbuttonpressed() && !self attackbuttonpressed() && !self fragbuttonpressed() && !self inventorybuttonpressed() && !self jumpbuttonpressed() && !self meleebuttonpressed() && !self secondaryoffhandbuttonpressed() && !self sprintbuttonpressed() && !self stancebuttonpressed() && !self throwbuttonpressed() && !self usebuttonpressed() && !self changeseatbuttonpressed() || move_length > 2 && vectordot( v_original_forward_vec, v_new_forward_vec ) < 0,99 ) - { - level.sq_fc_still_valid = 0; - } - wait 0,05; - } - level notify( "someone_touched_controls" ); + self endon( "out_of_mana" ); + self endon( "disconnect" ); + + self waittill( "al_all_setup" ); + + wait 1; + v_original_origin = ( self.origin[0], self.origin[1], 0 ); + v_original_angles = self.angles; + v_forward_point = self.origin + anglestoforward( self.angles ) * 10; + v_original_forward_vec = vectornormalize( v_forward_point - self.origin ); + + while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid ) + { + v_new_forward_point = self.origin + anglestoforward( self.angles ) * 10; + v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin ); + move_length = length( ( self.origin[0], self.origin[1], 0 ) - v_original_origin ); + + if ( self actionslotonebuttonpressed() || self actionslottwobuttonpressed() || self actionslotthreebuttonpressed() || self actionslotfourbuttonpressed() || self adsbuttonpressed() || self attackbuttonpressed() || self fragbuttonpressed() || self inventorybuttonpressed() || self jumpbuttonpressed() || self meleebuttonpressed() || self secondaryoffhandbuttonpressed() || self sprintbuttonpressed() || self stancebuttonpressed() || self throwbuttonpressed() || self usebuttonpressed() || self changeseatbuttonpressed() || move_length > 2 || vectordot( v_original_forward_vec, v_new_forward_vec ) < 0.99 ) + level.sq_fc_still_valid = 0; + + wait 0.05; + } + + level notify( "someone_touched_controls" ); } watch_for_trigger_condition() { - level waittill( "pre_end_game" ); - if ( !level.sq_fc_still_valid ) - { - return; - } - level.sndgameovermusicoverride = "game_over_nomove"; - level.custom_intermission = ::player_intermission_prison; - players = getplayers(); - _a94 = players; - _k94 = getFirstArrayKey( _a94 ); - while ( isDefined( _k94 ) ) - { - player = _a94[ _k94 ]; - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player ); - _k94 = getNextArrayKey( _a94, _k94 ); - } + level waittill( "pre_end_game" ); + + if ( !level.sq_fc_still_valid ) + return; + + level.sndgameovermusicoverride = "game_over_nomove"; + level.custom_intermission = ::player_intermission_prison; + players = getplayers(); + + foreach ( player in players ) + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player ); } player_intermission_prison() { - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "dblock_cam", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "dblock_cam", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { /# - println( "NO info_intermission POINTS IN MAP" ); + println( "NO info_intermission POINTS IN MAP" ); #/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - visionsetnaked( "cheat_bw", 0,05 ); - org = undefined; - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( points[ i ].target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - i++; - } - } + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + visionsetnaked( "cheat_bw", 0.05 ); + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc index 8f66cc6..64b2a59 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_final.gsc @@ -1,1057 +1,1005 @@ -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/zm_alcatraz_sq; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_alcatraz_sq_nixie; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zm_alcatraz_sq_nixie; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_alcatraz_sq; +#include maps\mp\zombies\_zm_afterlife; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm; onplayerconnect_sq_final() { + } stage_one() { - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - sq_final_easy_cleanup(); - return; - } - precachemodel( "p6_zm_al_audio_headset_icon" ); - flag_wait( "quest_completed_thrice" ); - flag_wait( "spoon_obtained" ); - flag_wait( "warden_blundergat_obtained" ); + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + { + sq_final_easy_cleanup(); + return; + } + + precachemodel( "p6_zm_al_audio_headset_icon" ); + flag_wait( "quest_completed_thrice" ); + flag_wait( "spoon_obtained" ); + flag_wait( "warden_blundergat_obtained" ); /# - players = getplayers(); - _a51 = players; - _k51 = getFirstArrayKey( _a51 ); - while ( isDefined( _k51 ) ) - { - player = _a51[ _k51 ]; - player.fq_client_hint = newclienthudelem( player ); - player.fq_client_hint.x = 25; - player.fq_client_hint.y = 200; - player.fq_client_hint.alignx = "center"; - player.fq_client_hint.aligny = "bottom"; - player.fq_client_hint.fontscale = 1,6; - player.fq_client_hint.alpha = 1; - player.fq_client_hint.sort = 20; - player.fq_client_hint settext( 386 + " - " + 481 + " - " + 101 + " - " + 872 ); - _k51 = getNextArrayKey( _a51, _k51 ); + players = getplayers(); + + foreach ( player in players ) + { + player.fq_client_hint = newclienthudelem( player ); + player.fq_client_hint.x = 25; + player.fq_client_hint.y = 200; + player.fq_client_hint.alignx = "center"; + player.fq_client_hint.aligny = "bottom"; + player.fq_client_hint.fontscale = 1.6; + player.fq_client_hint.alpha = 1; + player.fq_client_hint.sort = 20; + player.fq_client_hint settext( 386 + " - " + 481 + " - " + 101 + " - " + 872 ); + } #/ - } - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - m_nixie_tube thread nixie_tube_scramble_protected_effects( i ); - i++; - } - level waittill_multiple( "nixie_tube_trigger_1", "nixie_tube_trigger_2", "nixie_tube_trigger_3" ); - level thread nixie_final_codes( 386 ); - level thread nixie_final_codes( 481 ); - level thread nixie_final_codes( 101 ); - level thread nixie_final_codes( 872 ); - level waittill_multiple( "nixie_final_" + 386, "nixie_final_" + 481, "nixie_final_" + 101, "nixie_final_" + 872 ); - nixie_tube_off(); + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + m_nixie_tube thread nixie_tube_scramble_protected_effects( i ); + } + + level waittill_multiple( "nixie_tube_trigger_1", "nixie_tube_trigger_2", "nixie_tube_trigger_3" ); + level thread nixie_final_codes( 386 ); + level thread nixie_final_codes( 481 ); + level thread nixie_final_codes( 101 ); + level thread nixie_final_codes( 872 ); + level waittill_multiple( "nixie_final_" + 386, "nixie_final_" + 481, "nixie_final_" + 101, "nixie_final_" + 872 ); + nixie_tube_off(); /# - players = getplayers(); - _a88 = players; - _k88 = getFirstArrayKey( _a88 ); - while ( isDefined( _k88 ) ) - { - player = _a88[ _k88 ]; - player.fq_client_hint destroy(); - _k88 = getNextArrayKey( _a88, _k88 ); + players = getplayers(); + + foreach ( player in players ) + player.fq_client_hint destroy(); #/ - } - m_nixie_tube = getent( "nixie_tube_1", "targetname" ); - m_nixie_tube playsoundwithnotify( "vox_brutus_nixie_right_0", "scary_voice" ); - m_nixie_tube waittill( "scary_voice" ); - wait 3; - level thread stage_two(); + m_nixie_tube = getent( "nixie_tube_1", "targetname" ); + m_nixie_tube playsoundwithnotify( "vox_brutus_nixie_right_0", "scary_voice" ); + + m_nixie_tube waittill( "scary_voice" ); + + wait 3; + level thread stage_two(); } sq_final_easy_cleanup() { - t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); - t_plane_fly_afterlife delete(); + t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); + t_plane_fly_afterlife delete(); } nixie_tube_off() { - level notify( "kill_nixie_input" ); - wait 1; - i = 1; - while ( i < 4 ) - { - m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); - j = 0; - while ( j < 10 ) - { - m_nixie_tube hidepart( "J_" + j ); - j++; - } - wait 0,3; - i++; - } + level notify( "kill_nixie_input" ); + wait 1; + + for ( i = 1; i < 4; i++ ) + { + m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); + + for ( j = 0; j < 10; j++ ) + m_nixie_tube hidepart( "J_" + j ); + + wait 0.3; + } } nixie_final_codes( nixie_code ) { - maps/mp/zm_alcatraz_sq_nixie::nixie_tube_add_code( nixie_code ); - level waittill( "nixie_" + nixie_code ); - level notify( "kill_nixie_input" ); - flag_set( "nixie_puzzle_solved" ); - flag_clear( "nixie_ee_flashing" ); - goal_num_1 = maps/mp/zm_alcatraz_sq_nixie::get_split_number( 1, nixie_code ); - goal_num_2 = maps/mp/zm_alcatraz_sq_nixie::get_split_number( 2, nixie_code ); - goal_num_3 = maps/mp/zm_alcatraz_sq_nixie::get_split_number( 3, nixie_code ); - nixie_tube_win_effects_all_tubes_final( goal_num_2, goal_num_3, goal_num_1 ); - flag_set( "nixie_ee_flashing" ); - flag_clear( "nixie_puzzle_solved" ); - maps/mp/zm_alcatraz_sq_nixie::nixie_reset_control( 0 ); - level notify( "nixie_final_" + nixie_code ); + maps\mp\zm_alcatraz_sq_nixie::nixie_tube_add_code( nixie_code ); + + level waittill( "nixie_" + nixie_code ); + + level notify( "kill_nixie_input" ); + flag_set( "nixie_puzzle_solved" ); + flag_clear( "nixie_ee_flashing" ); + goal_num_1 = maps\mp\zm_alcatraz_sq_nixie::get_split_number( 1, nixie_code ); + goal_num_2 = maps\mp\zm_alcatraz_sq_nixie::get_split_number( 2, nixie_code ); + goal_num_3 = maps\mp\zm_alcatraz_sq_nixie::get_split_number( 3, nixie_code ); + nixie_tube_win_effects_all_tubes_final( goal_num_2, goal_num_3, goal_num_1 ); + flag_set( "nixie_ee_flashing" ); + flag_clear( "nixie_puzzle_solved" ); + maps\mp\zm_alcatraz_sq_nixie::nixie_reset_control( 0 ); + level notify( "nixie_final_" + nixie_code ); } nixie_tube_scramble_protected_effects( n_tube_index ) { - self endon( "nixie_scramble_stop" ); - level endon( "nixie_tube_trigger_" + n_tube_index ); - n_change_rate = 0,1; - unrestricted_scramble_num = []; - unrestricted_scramble_num[ 1 ] = array( 0, 2, 5, 6, 7 ); - unrestricted_scramble_num[ 2 ] = array( 2, 4, 5, 6, 9 ); - unrestricted_scramble_num[ 3 ] = array( 0, 3, 4, 7, 8, 9 ); - n_number_to_display = random( unrestricted_scramble_num[ n_tube_index ] ); - while ( 1 ) - { - self hidepart( "J_" + n_number_to_display ); - n_number_to_display = random( unrestricted_scramble_num[ n_tube_index ] ); - self showpart( "J_" + n_number_to_display ); - self playsound( "zmb_quest_nixie_count" ); - wait n_change_rate; - } + self endon( "nixie_scramble_stop" ); + level endon( "nixie_tube_trigger_" + n_tube_index ); + n_change_rate = 0.1; + unrestricted_scramble_num = []; + unrestricted_scramble_num[1] = array( 0, 2, 5, 6, 7 ); + unrestricted_scramble_num[2] = array( 2, 4, 5, 6, 9 ); + unrestricted_scramble_num[3] = array( 0, 3, 4, 7, 8, 9 ); + n_number_to_display = random( unrestricted_scramble_num[n_tube_index] ); + + while ( true ) + { + self hidepart( "J_" + n_number_to_display ); + n_number_to_display = random( unrestricted_scramble_num[n_tube_index] ); + self showpart( "J_" + n_number_to_display ); + self playsound( "zmb_quest_nixie_count" ); + wait( n_change_rate ); + } } nixie_final_audio_cue_code() { - m_nixie_tube = getent( "nixie_tube_1", "targetname" ); - m_nixie_tube playsoundwithnotify( "vox_brutus_nixie_right_0", "scary_voice" ); - m_nixie_tube waittill( "scary_voice" ); + m_nixie_tube = getent( "nixie_tube_1", "targetname" ); + m_nixie_tube playsoundwithnotify( "vox_brutus_nixie_right_0", "scary_voice" ); + + m_nixie_tube waittill( "scary_voice" ); } nixie_tube_win_effects_all_tubes_final( goal_num_1, goal_num_2, goal_num_3 ) { - if ( !isDefined( goal_num_1 ) ) - { - goal_num_1 = 0; - } - if ( !isDefined( goal_num_2 ) ) - { - goal_num_2 = 0; - } - if ( !isDefined( goal_num_3 ) ) - { - goal_num_3 = 0; - } - a_nixie_tube = []; - a_nixie_tube[ 1 ] = getent( "nixie_tube_1", "targetname" ); - a_nixie_tube[ 2 ] = getent( "nixie_tube_2", "targetname" ); - a_nixie_tube[ 3 ] = getent( "nixie_tube_3", "targetname" ); - n_off_tube = 1; - start_time = 0; - while ( start_time < 2 ) - { - i = 1; - while ( i < ( 3 + 1 ) ) - { - if ( i == n_off_tube ) - { - a_nixie_tube[ i ] hidepart( "J_" + level.a_nixie_tube_code[ i ] ); - i++; - continue; - } - else - { - a_nixie_tube[ i ] showpart( "J_" + level.a_nixie_tube_code[ i ] ); - if ( i == 1 || n_off_tube == 2 && i == 3 && n_off_tube == 1 ) - { - a_nixie_tube[ i ] playsound( "zmb_quest_nixie_count" ); - } - } - i++; - } - n_off_tube++; - if ( n_off_tube > 3 ) - { - n_off_tube = 1; - } - wait_network_frame(); - start_time += 0,15; - } - a_nixie_tube[ 1 ] showpart( "J_" + level.a_nixie_tube_code[ 1 ] ); - a_nixie_tube[ 2 ] showpart( "J_" + level.a_nixie_tube_code[ 2 ] ); - a_nixie_tube[ 3 ] showpart( "J_" + level.a_nixie_tube_code[ 3 ] ); - while ( level.a_nixie_tube_code[ 1 ] != goal_num_1 || level.a_nixie_tube_code[ 2 ] != goal_num_2 && level.a_nixie_tube_code[ 3 ] != goal_num_3 ) - { - n_current_tube = 1; - n_goal = goal_num_1; - if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_1 ) - { - n_current_tube = 2; - n_goal = goal_num_2; - if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_2 ) - { - n_current_tube = 3; - n_goal = goal_num_3; - } - } - wait_network_frame(); - j = 0; - while ( level.a_nixie_tube_code[ n_current_tube ] != n_goal ) - { - a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - level.a_nixie_tube_code[ n_current_tube ]--; + if ( !isdefined( goal_num_1 ) ) + goal_num_1 = 0; - if ( level.a_nixie_tube_code[ n_current_tube ] == -1 ) - { - level.a_nixie_tube_code[ n_current_tube ] = 9; - } - a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] ); - if ( ( j % 3 ) == 0 ) - { - a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" ); - } - j++; - wait 0,05; - } - } - a_nixie_tube[ 2 ] playsound( "zmb_quest_nixie_count_final" ); - wait_network_frame(); + if ( !isdefined( goal_num_2 ) ) + goal_num_2 = 0; + + if ( !isdefined( goal_num_3 ) ) + goal_num_3 = 0; + + a_nixie_tube = []; + a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" ); + a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" ); + a_nixie_tube[3] = getent( "nixie_tube_3", "targetname" ); + n_off_tube = 1; + + for ( start_time = 0; start_time < 2; start_time += 0.15 ) + { + for ( i = 1; i < 3 + 1; i++ ) + { + if ( i == n_off_tube ) + { + a_nixie_tube[i] hidepart( "J_" + level.a_nixie_tube_code[i] ); + continue; + } + + a_nixie_tube[i] showpart( "J_" + level.a_nixie_tube_code[i] ); + + if ( i == 1 && n_off_tube == 2 || i == 3 && n_off_tube == 1 ) + a_nixie_tube[i] playsound( "zmb_quest_nixie_count" ); + } + + n_off_tube++; + + if ( n_off_tube > 3 ) + n_off_tube = 1; + + wait_network_frame(); + } + + a_nixie_tube[1] showpart( "J_" + level.a_nixie_tube_code[1] ); + a_nixie_tube[2] showpart( "J_" + level.a_nixie_tube_code[2] ); + a_nixie_tube[3] showpart( "J_" + level.a_nixie_tube_code[3] ); + + while ( level.a_nixie_tube_code[1] != goal_num_1 || level.a_nixie_tube_code[2] != goal_num_2 || level.a_nixie_tube_code[3] != goal_num_3 ) + { + n_current_tube = 1; + n_goal = goal_num_1; + + if ( level.a_nixie_tube_code[n_current_tube] == goal_num_1 ) + { + n_current_tube = 2; + n_goal = goal_num_2; + + if ( level.a_nixie_tube_code[n_current_tube] == goal_num_2 ) + { + n_current_tube = 3; + n_goal = goal_num_3; + } + } + + wait_network_frame(); + j = 0; + + while ( level.a_nixie_tube_code[n_current_tube] != n_goal ) + { + a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + level.a_nixie_tube_code[n_current_tube]--; + + if ( level.a_nixie_tube_code[n_current_tube] == -1 ) + level.a_nixie_tube_code[n_current_tube] = 9; + + a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] ); + + if ( j % 3 == 0 ) + a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" ); + + j++; + wait 0.05; + } + } + + a_nixie_tube[2] playsound( "zmb_quest_nixie_count_final" ); + wait_network_frame(); } stage_two() { - audio_logs = []; - audio_logs[ 0 ] = []; - audio_logs[ 0 ][ 0 ] = "vox_guar_tour_vo_1_0"; - audio_logs[ 0 ][ 1 ] = "vox_guar_tour_vo_2_0"; - audio_logs[ 0 ][ 2 ] = "vox_guar_tour_vo_3_0"; - audio_logs[ 2 ] = []; - audio_logs[ 2 ][ 0 ] = "vox_guar_tour_vo_4_0"; - audio_logs[ 3 ] = []; - audio_logs[ 3 ][ 0 ] = "vox_guar_tour_vo_5_0"; - audio_logs[ 3 ][ 1 ] = "vox_guar_tour_vo_6_0"; - audio_logs[ 4 ] = []; - audio_logs[ 4 ][ 0 ] = "vox_guar_tour_vo_7_0"; - audio_logs[ 5 ] = []; - audio_logs[ 5 ][ 0 ] = "vox_guar_tour_vo_8_0"; - audio_logs[ 6 ] = []; - audio_logs[ 6 ][ 0 ] = "vox_guar_tour_vo_9_0"; - audio_logs[ 6 ][ 1 ] = "vox_guar_tour_vo_10_0"; - play_sq_audio_log( 0, audio_logs[ 0 ], 0 ); - i = 2; - while ( i <= 6 ) - { - play_sq_audio_log( i, audio_logs[ i ], 1 ); - i++; - } - level.m_headphones delete(); - t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); - t_plane_fly_afterlife playsound( "zmb_easteregg_laugh" ); - trigger_is_on = 0; - while ( 1 ) - { - players = getplayers(); - if ( players.size > 1 ) - { - arlington_is_present = 0; - _a339 = players; - _k339 = getFirstArrayKey( _a339 ); - while ( isDefined( _k339 ) ) - { - player = _a339[ _k339 ]; - if ( isDefined( player ) && player.character_name == "Arlington" ) - { - arlington_is_present = 1; - } - _k339 = getNextArrayKey( _a339, _k339 ); - } - if ( arlington_is_present && !trigger_is_on ) - { - t_plane_fly_afterlife trigger_on(); - trigger_is_on = 1; - } - else - { - if ( !arlington_is_present && trigger_is_on ) - { - t_plane_fly_afterlife trigger_off(); - trigger_is_on = 0; - } - } - } - else - { - if ( trigger_is_on ) - { - t_plane_fly_afterlife trigger_off(); - trigger_is_on = 0; - } - } - wait 0,1; - } + audio_logs = []; + audio_logs[0] = []; + audio_logs[0][0] = "vox_guar_tour_vo_1_0"; + audio_logs[0][1] = "vox_guar_tour_vo_2_0"; + audio_logs[0][2] = "vox_guar_tour_vo_3_0"; + audio_logs[2] = []; + audio_logs[2][0] = "vox_guar_tour_vo_4_0"; + audio_logs[3] = []; + audio_logs[3][0] = "vox_guar_tour_vo_5_0"; + audio_logs[3][1] = "vox_guar_tour_vo_6_0"; + audio_logs[4] = []; + audio_logs[4][0] = "vox_guar_tour_vo_7_0"; + audio_logs[5] = []; + audio_logs[5][0] = "vox_guar_tour_vo_8_0"; + audio_logs[6] = []; + audio_logs[6][0] = "vox_guar_tour_vo_9_0"; + audio_logs[6][1] = "vox_guar_tour_vo_10_0"; + play_sq_audio_log( 0, audio_logs[0], 0 ); + + for ( i = 2; i <= 6; i++ ) + play_sq_audio_log( i, audio_logs[i], 1 ); + + level.m_headphones delete(); + t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); + t_plane_fly_afterlife playsound( "zmb_easteregg_laugh" ); + trigger_is_on = 0; + + while ( true ) + { + players = getplayers(); + + if ( players.size > 1 ) + { + arlington_is_present = 0; + + foreach ( player in players ) + { + if ( isdefined( player ) && player.character_name == "Arlington" ) + arlington_is_present = 1; + } + + if ( arlington_is_present && !trigger_is_on ) + { + t_plane_fly_afterlife trigger_on(); + trigger_is_on = 1; + } + else if ( !arlington_is_present && trigger_is_on ) + { + t_plane_fly_afterlife trigger_off(); + trigger_is_on = 0; + } + } + else if ( trigger_is_on ) + { + t_plane_fly_afterlife trigger_off(); + trigger_is_on = 0; + } + + wait 0.1; + } } headphones_rotate() { - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 360, 3 ); - self waittill( "rotatedone" ); - } + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 360, 3 ); + + self waittill( "rotatedone" ); + } } play_sq_audio_log( num, a_vo, b_use_trig ) { - v_pos = getstruct( "sq_at_" + num, "targetname" ).origin; - if ( !isDefined( level.m_headphones ) ) - { - level.m_headphones = spawn( "script_model", v_pos ); - level.m_headphones ghostindemo(); - level.m_headphones setmodel( "p6_zm_al_audio_headset_icon" ); - playfxontag( level._effect[ "powerup_on" ], level.m_headphones, "tag_origin" ); - level.m_headphones thread headphones_rotate(); - level.m_headphones playloopsound( "zmb_spawn_powerup_loop" ); - level.m_headphones trigger_off(); - } - else - { - level.m_headphones trigger_on(); - level.m_headphones.origin = v_pos; - } - if ( b_use_trig ) - { - trigger = spawn( "trigger_radius", level.m_headphones.origin - vectorScale( ( 1, 1, 1 ), 80 ), 0, 30, 150 ); - trigger waittill( "trigger" ); - trigger delete(); - } - level.m_headphones trigger_off(); - level setclientfield( "toggle_futz", 1 ); - players = getplayers(); - _a411 = players; - _k411 = getFirstArrayKey( _a411 ); - while ( isDefined( _k411 ) ) - { - player = _a411[ _k411 ]; - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player ); - _k411 = getNextArrayKey( _a411, _k411 ); - } - i = 0; - while ( i < a_vo.size ) - { - level.m_headphones playsoundwithnotify( a_vo[ i ], "at_done" ); - level.m_headphones waittill( "at_done" ); - wait 0,5; - i++; - } - level setclientfield( "toggle_futz", 0 ); - players = getplayers(); - _a426 = players; - _k426 = getFirstArrayKey( _a426 ); - while ( isDefined( _k426 ) ) - { - player = _a426[ _k426 ]; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_audio_log", player ); - _k426 = getNextArrayKey( _a426, _k426 ); - } + v_pos = getstruct( "sq_at_" + num, "targetname" ).origin; + + if ( !isdefined( level.m_headphones ) ) + { + level.m_headphones = spawn( "script_model", v_pos ); + level.m_headphones ghostindemo(); + level.m_headphones setmodel( "p6_zm_al_audio_headset_icon" ); + playfxontag( level._effect["powerup_on"], level.m_headphones, "tag_origin" ); + level.m_headphones thread headphones_rotate(); + level.m_headphones playloopsound( "zmb_spawn_powerup_loop" ); + level.m_headphones trigger_off(); + } + else + { + level.m_headphones trigger_on(); + level.m_headphones.origin = v_pos; + } + + if ( b_use_trig ) + { + trigger = spawn( "trigger_radius", level.m_headphones.origin - vectorscale( ( 0, 0, 1 ), 80.0 ), 0, 30, 150 ); + + trigger waittill( "trigger" ); + + trigger delete(); + } + + level.m_headphones trigger_off(); + level setclientfield( "toggle_futz", 1 ); + players = getplayers(); + + foreach ( player in players ) + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player ); + + for ( i = 0; i < a_vo.size; i++ ) + { + level.m_headphones playsoundwithnotify( a_vo[i], "at_done" ); + + level.m_headphones waittill( "at_done" ); + + wait 0.5; + } + + level setclientfield( "toggle_futz", 0 ); + players = getplayers(); + + foreach ( player in players ) + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_audio_log", player ); } final_flight_setup() { - t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); - t_plane_fly_afterlife thread final_flight_trigger(); - t_plane_fly_afterlife trigger_off(); + t_plane_fly_afterlife = getent( "plane_fly_afterlife_trigger", "script_noteworthy" ); + t_plane_fly_afterlife thread final_flight_trigger(); + t_plane_fly_afterlife trigger_off(); } final_flight_trigger() { - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - self setcursorhint( "HINT_NOICON" ); - self sethintstring( "" ); - while ( isDefined( self ) ) - { - self waittill( "trigger", e_triggerer ); - if ( isplayer( e_triggerer ) ) - { - while ( isDefined( level.custom_plane_validation ) ) - { - valid = self [[ level.custom_plane_validation ]]( e_triggerer ); - while ( !valid ) - { - continue; - } - } - players = getplayers(); - while ( players.size < 2 ) - { - continue; - } - b_everyone_is_ready = 1; - _a480 = players; - _k480 = getFirstArrayKey( _a480 ); - while ( isDefined( _k480 ) ) - { - player = _a480[ _k480 ]; - if ( isDefined( player ) || player.sessionstate == "spectator" && player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - b_everyone_is_ready = 0; - } - _k480 = getNextArrayKey( _a480, _k480 ); - } - while ( !b_everyone_is_ready ) - { - continue; - } - while ( flag( "plane_is_away" ) ) - { - continue; - } - flag_set( "plane_is_away" ); - t_plane_fly trigger_off(); - _a504 = players; - _k504 = getFirstArrayKey( _a504 ); - while ( isDefined( _k504 ) ) - { - player = _a504[ _k504 ]; - if ( isDefined( player ) ) - { + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + self setcursorhint( "HINT_NOICON" ); + self sethintstring( "" ); + + while ( isdefined( self ) ) + { + self waittill( "trigger", e_triggerer ); + + if ( isplayer( e_triggerer ) ) + { + if ( isdefined( level.custom_plane_validation ) ) + { + valid = self [[ level.custom_plane_validation ]]( e_triggerer ); + + if ( !valid ) + continue; + } + + players = getplayers(); + + if ( players.size < 2 ) + continue; + + b_everyone_is_ready = 1; + + foreach ( player in players ) + { + if ( !isdefined( player ) || player.sessionstate == "spectator" || player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + b_everyone_is_ready = 0; + } + + if ( !b_everyone_is_ready ) + continue; + + if ( flag( "plane_is_away" ) ) + continue; + + flag_set( "plane_is_away" ); + t_plane_fly trigger_off(); + + foreach ( player in players ) + { + if ( isdefined( player ) ) + { /# - iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); + iprintlnbold( "LINK PLAYER TO PLANE, START COUNTDOWN IF NOT YET STARTED" ); #/ - player thread final_flight_player_thread(); - } - _k504 = getNextArrayKey( _a504, _k504 ); - } - return; - } - } + player thread final_flight_player_thread(); + } + } + + return; + } + } } final_flight_player_thread() { - self endon( "death_or_disconnect" ); - self.on_a_plane = 1; - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); + self endon( "death_or_disconnect" ); + self.on_a_plane = 1; + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); /# - iprintlnbold( "plane boarding thread started" ); + iprintlnbold( "plane boarding thread started" ); #/ - if ( isDefined( self.afterlife ) && !self.afterlife ) - { - self.keep_perks = 1; - self afterlife_remove(); - self.afterlife = 1; - self thread afterlife_laststand(); - self waittill( "player_fake_corpse_created" ); - } - self afterlife_infinite_mana( 1 ); - level.final_flight_activated = 1; - level.final_flight_players[ level.final_flight_players.size ] = self; - a_nml_teleport_targets = []; - i = 1; - while ( i < 6 ) - { - a_nml_teleport_targets[ i - 1 ] = getstruct( "nml_telepoint_" + i, "targetname" ); - i++; - } - self.n_passenger_index = level.final_flight_players.size; - a_players = []; - a_players = getplayers(); - if ( a_players.size == 1 ) - { - self.n_passenger_index = 1; - } - m_plane_craftable = getent( "plane_craftable", "targetname" ); - m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); - m_plane_about_to_crash ghost(); - veh_plane_flyable = getent( "plane_flyable", "targetname" ); - veh_plane_flyable show(); - flag_set( "plane_boarded" ); - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - str_hint_string = "BOARD FINAL FLIGHT"; - t_plane_fly sethintstring( str_hint_string ); - self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - self allowcrouch( 1 ); - self allowstand( 0 ); - self clientnotify( "sndFFCON" ); - flag_wait( "plane_departed" ); - level notify( "sndStopBrutusLoop" ); - self clientnotify( "sndPS" ); - self playsoundtoplayer( "zmb_plane_takeoff", self ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_takeoff", self ); - m_plane_craftable ghost(); - self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - self setclientfieldtoplayer( "effects_escape_flight", 1 ); - flag_wait( "plane_approach_bridge" ); - self thread maps/mp/zm_alcatraz_sq::snddelayedimp(); - self setclientfieldtoplayer( "effects_escape_flight", 2 ); - self unlink(); - self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); - flag_wait( "plane_zapped" ); - flag_set( "activate_player_zone_bridge" ); - self playsoundtoplayer( "zmb_plane_fall", self ); - self setclientfieldtoplayer( "effects_escape_flight", 3 ); - self.dontspeak = 1; - self setclientfieldtoplayer( "isspeaking", 1 ); - self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); - flag_wait( "plane_crashed" ); - self thread fadetoblackforxsec( 0, 2, 0, 0,5, "black" ); - self unlink(); - self allowstand( 1 ); - self setstance( "stand" ); - self allowcrouch( 0 ); - flag_clear( "spawn_zombies" ); - self setorigin( a_nml_teleport_targets[ self.n_passenger_index ].origin ); - e_poi = getstruct( "plane_crash_poi", "targetname" ); - vec_to_target = e_poi.origin - self.origin; - vec_to_target = vectorToAngle( vec_to_target ); - vec_to_target = ( 0, vec_to_target[ 1 ], 0 ); - self setplayerangles( vec_to_target ); - n_shellshock_duration = 5; - self shellshock( "explosion", n_shellshock_duration ); - self.on_a_plane = 0; - stage_final(); + if ( !( isdefined( self.afterlife ) && self.afterlife ) ) + { + self.keep_perks = 1; + self afterlife_remove(); + self.afterlife = 1; + self thread afterlife_laststand(); + + self waittill( "player_fake_corpse_created" ); + } + + self afterlife_infinite_mana( 1 ); + level.final_flight_activated = 1; + level.final_flight_players[level.final_flight_players.size] = self; + a_nml_teleport_targets = []; + + for ( i = 1; i < 6; i++ ) + a_nml_teleport_targets[i - 1] = getstruct( "nml_telepoint_" + i, "targetname" ); + + self.n_passenger_index = level.final_flight_players.size; + a_players = []; + a_players = getplayers(); + + if ( a_players.size == 1 ) + self.n_passenger_index = 1; + + m_plane_craftable = getent( "plane_craftable", "targetname" ); + m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); + m_plane_about_to_crash ghost(); + veh_plane_flyable = getent( "plane_flyable", "targetname" ); + veh_plane_flyable show(); + flag_set( "plane_boarded" ); + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + str_hint_string = "BOARD FINAL FLIGHT"; + t_plane_fly sethintstring( str_hint_string ); + self playerlinktodelta( m_plane_craftable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + self allowcrouch( 1 ); + self allowstand( 0 ); + self clientnotify( "sndFFCON" ); + flag_wait( "plane_departed" ); + level notify( "sndStopBrutusLoop" ); + self clientnotify( "sndPS" ); + self playsoundtoplayer( "zmb_plane_takeoff", self ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_takeoff", self ); + m_plane_craftable ghost(); + self playerlinktodelta( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + self setclientfieldtoplayer( "effects_escape_flight", 1 ); + flag_wait( "plane_approach_bridge" ); + self thread maps\mp\zm_alcatraz_sq::snddelayedimp(); + self setclientfieldtoplayer( "effects_escape_flight", 2 ); + self unlink(); + self playerlinktoabsolute( veh_plane_flyable, "tag_player_crouched_" + ( self.n_passenger_index + 1 ) ); + flag_wait( "plane_zapped" ); + flag_set( "activate_player_zone_bridge" ); + self playsoundtoplayer( "zmb_plane_fall", self ); + self setclientfieldtoplayer( "effects_escape_flight", 3 ); + self.dontspeak = 1; + self setclientfieldtoplayer( "isspeaking", 1 ); + self playerlinktodelta( m_plane_about_to_crash, "tag_player_crouched_" + ( self.n_passenger_index + 1 ), 1, 0, 0, 0, 0, 1 ); + flag_wait( "plane_crashed" ); + self thread fadetoblackforxsec( 0, 2, 0, 0.5, "black" ); + self unlink(); + self allowstand( 1 ); + self setstance( "stand" ); + self allowcrouch( 0 ); + flag_clear( "spawn_zombies" ); + self setorigin( a_nml_teleport_targets[self.n_passenger_index].origin ); + e_poi = getstruct( "plane_crash_poi", "targetname" ); + vec_to_target = e_poi.origin - self.origin; + vec_to_target = vectortoangles( vec_to_target ); + vec_to_target = ( 0, vec_to_target[1], 0 ); + self setplayerangles( vec_to_target ); + n_shellshock_duration = 5; + self shellshock( "explosion", n_shellshock_duration ); + self.on_a_plane = 0; + stage_final(); } stage_final() { - level notify( "stage_final" ); - level endon( "stage_final" ); - b_everyone_alive = 0; - while ( isDefined( b_everyone_alive ) && !b_everyone_alive ) - { - b_everyone_alive = 1; - a_players = getplayers(); - _a648 = a_players; - _k648 = getFirstArrayKey( _a648 ); - while ( isDefined( _k648 ) ) - { - player = _a648[ _k648 ]; - if ( isDefined( player.afterlife ) && player.afterlife ) - { - b_everyone_alive = 0; - wait 0,05; - break; - } - else - { - _k648 = getNextArrayKey( _a648, _k648 ); - } - } - } - level._should_skip_ignore_player_logic = ::final_showdown_zombie_logic; - flag_set( "spawn_zombies" ); - array_func( getplayers(), ::maps/mp/zombies/_zm_afterlife::afterlife_remove ); - p_weasel = undefined; - a_player_team = []; - a_players = getplayers(); - _a671 = a_players; - _k671 = getFirstArrayKey( _a671 ); - while ( isDefined( _k671 ) ) - { - player = _a671[ _k671 ]; - player.dontspeak = 1; - player setclientfieldtoplayer( "isspeaking", 1 ); - if ( player.character_name == "Arlington" ) - { - p_weasel = player; - } - else a_player_team[ a_player_team.size ] = player; - _k671 = getNextArrayKey( _a671, _k671 ); - } - if ( isDefined( p_weasel ) && a_player_team.size > 0 ) - { - level.longregentime = 1000000; - level.playerhealth_regularregendelay = 1000000; - p_weasel.team = level.zombie_team; - p_weasel.pers[ "team" ] = level.zombie_team; - p_weasel.sessionteam = level.zombie_team; - p_weasel.maxhealth = a_player_team.size * 2000; - p_weasel.health = p_weasel.maxhealth; - _a698 = a_player_team; - _k698 = getFirstArrayKey( _a698 ); - while ( isDefined( _k698 ) ) - { - player = _a698[ _k698 ]; - player.maxhealth = 2000; - player.health = player.maxhealth; - _k698 = getNextArrayKey( _a698, _k698 ); - } - s_start_point = getstruct( "final_fight_starting_point_weasel", "targetname" ); - if ( isDefined( p_weasel ) && isDefined( s_start_point ) ) - { - playfx( level._effect[ "afterlife_teleport" ], p_weasel.origin ); - p_weasel setorigin( s_start_point.origin ); - p_weasel setplayerangles( s_start_point.angles ); - playfx( level._effect[ "afterlife_teleport" ], p_weasel.origin ); - } - i = 0; - while ( i < a_player_team.size ) - { - s_start_point = getstruct( "final_fight_starting_point_hero_" + ( i + 1 ), "targetname" ); - if ( isDefined( a_player_team[ i ] ) && isDefined( s_start_point ) ) - { - playfx( level._effect[ "afterlife_teleport" ], a_player_team[ i ].origin ); - a_player_team[ i ] setorigin( s_start_point.origin ); - a_player_team[ i ] setplayerangles( s_start_point.angles ); - playfx( level._effect[ "afterlife_teleport" ], a_player_team[ i ].origin ); - } - i++; - } - level thread final_showdown_track_weasel( p_weasel ); - level thread final_showdown_track_team( a_player_team ); - n_spawns_needed = 2; - i = n_spawns_needed; - while ( i > 0 ) - { - maps/mp/zombies/_zm_ai_brutus::brutus_spawn_in_zone( "zone_golden_gate_bridge", 1 ); - i--; + level notify( "stage_final" ); + level endon( "stage_final" ); + b_everyone_alive = 0; - } - level thread final_battle_vo( p_weasel, a_player_team ); - level notify( "pop_goes_the_weasel_achieved" ); - level waittill( "showdown_over" ); - } - else - { - if ( isDefined( p_weasel ) ) - { - level.winner = "weasel"; - } - else - { - level.winner = "team"; - } - } - level clientnotify( "sndSQF" ); - level.brutus_respawn_after_despawn = 0; - level thread clean_up_final_brutuses(); - wait 2; - if ( level.winner == "weasel" ) - { - a_players = getplayers(); - _a764 = a_players; - _k764 = getFirstArrayKey( _a764 ); - while ( isDefined( _k764 ) ) - { - player = _a764[ _k764 ]; - player freezecontrols( 1 ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_good_ending", 0 ); - player thread fadetoblackforxsec( 0, 5, 0,5, 0, "white" ); - player create_ending_message( &"ZM_PRISON_GOOD" ); - player.client_hint.sort = 55; - player.client_hint.color = ( 1, 1, 1 ); - playsoundatposition( "zmb_quest_final_white_good", ( 1, 1, 1 ) ); - level.sndgameovermusicoverride = "game_over_final_good"; - _k764 = getNextArrayKey( _a764, _k764 ); - } - level.custom_intermission = ::player_intermission_bridge; - } - else - { - a_players = getplayers(); - _a783 = a_players; - _k783 = getFirstArrayKey( _a783 ); - while ( isDefined( _k783 ) ) - { - player = _a783[ _k783 ]; - player freezecontrols( 1 ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_bad_ending", 0 ); - player thread fadetoblackforxsec( 0, 5, 0,5, 0, "white" ); - player create_ending_message( &"ZM_PRISON_BAD" ); - player.client_hint.sort = 55; - player.client_hint.color = ( 1, 1, 1 ); - playsoundatposition( "zmb_quest_final_white_bad", ( 1, 1, 1 ) ); - level.sndgameovermusicoverride = "game_over_final_bad"; - _k783 = getNextArrayKey( _a783, _k783 ); - } - } - wait 5; - a_players = getplayers(); - _a799 = a_players; - _k799 = getFirstArrayKey( _a799 ); - while ( isDefined( _k799 ) ) - { - player = _a799[ _k799 ]; - if ( isDefined( player.client_hint ) ) - { - player thread destroy_tutorial_message(); - } - if ( isDefined( player.revivetrigger ) ) - { - player thread revive_success( player, 0 ); - player cleanup_suicide_hud(); - } - if ( isDefined( player ) ) - { - player ghost(); - } - _k799 = getNextArrayKey( _a799, _k799 ); - } - if ( isDefined( p_weasel ) ) - { - p_weasel.team = "allies"; - p_weasel.pers[ "team" ] = "allies"; - p_weasel.sessionteam = "allies"; - p_weasel ghost(); - } - level notify( "end_game" ); + while ( isdefined( b_everyone_alive ) && !b_everyone_alive ) + { + b_everyone_alive = 1; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.afterlife ) && player.afterlife ) + { + b_everyone_alive = 0; + wait 0.05; + break; + } + } + } + + level._should_skip_ignore_player_logic = ::final_showdown_zombie_logic; + flag_set( "spawn_zombies" ); + array_func( getplayers(), maps\mp\zombies\_zm_afterlife::afterlife_remove ); + p_weasel = undefined; + a_player_team = []; + a_players = getplayers(); + + foreach ( player in a_players ) + { + player.dontspeak = 1; + player setclientfieldtoplayer( "isspeaking", 1 ); + + if ( player.character_name == "Arlington" ) + { + p_weasel = player; + continue; + } + + a_player_team[a_player_team.size] = player; + } + + if ( isdefined( p_weasel ) && a_player_team.size > 0 ) + { + level.longregentime = 1000000; + level.playerhealth_regularregendelay = 1000000; + p_weasel.team = level.zombie_team; + p_weasel.pers["team"] = level.zombie_team; + p_weasel.sessionteam = level.zombie_team; + p_weasel.maxhealth = a_player_team.size * 2000; + p_weasel.health = p_weasel.maxhealth; + + foreach ( player in a_player_team ) + { + player.maxhealth = 2000; + player.health = player.maxhealth; + } + + s_start_point = getstruct( "final_fight_starting_point_weasel", "targetname" ); + + if ( isdefined( p_weasel ) && isdefined( s_start_point ) ) + { + playfx( level._effect["afterlife_teleport"], p_weasel.origin ); + p_weasel setorigin( s_start_point.origin ); + p_weasel setplayerangles( s_start_point.angles ); + playfx( level._effect["afterlife_teleport"], p_weasel.origin ); + } + + for ( i = 0; i < a_player_team.size; i++ ) + { + s_start_point = getstruct( "final_fight_starting_point_hero_" + ( i + 1 ), "targetname" ); + + if ( isdefined( a_player_team[i] ) && isdefined( s_start_point ) ) + { + playfx( level._effect["afterlife_teleport"], a_player_team[i].origin ); + a_player_team[i] setorigin( s_start_point.origin ); + a_player_team[i] setplayerangles( s_start_point.angles ); + playfx( level._effect["afterlife_teleport"], a_player_team[i].origin ); + } + } + + level thread final_showdown_track_weasel( p_weasel ); + level thread final_showdown_track_team( a_player_team ); + n_spawns_needed = 2; + + for ( i = n_spawns_needed; i > 0; i-- ) + maps\mp\zombies\_zm_ai_brutus::brutus_spawn_in_zone( "zone_golden_gate_bridge", 1 ); + + level thread final_battle_vo( p_weasel, a_player_team ); + level notify( "pop_goes_the_weasel_achieved" ); + + level waittill( "showdown_over" ); + } + else if ( isdefined( p_weasel ) ) + level.winner = "weasel"; + else + level.winner = "team"; + + level clientnotify( "sndSQF" ); + level.brutus_respawn_after_despawn = 0; + level thread clean_up_final_brutuses(); + wait 2; + + if ( level.winner == "weasel" ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + player freezecontrols( 1 ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_ee_good_ending", 0 ); + player thread fadetoblackforxsec( 0, 5, 0.5, 0, "white" ); + player create_ending_message( &"ZM_PRISON_GOOD" ); + player.client_hint.sort = 55; + player.client_hint.color = ( 0, 0, 0 ); + playsoundatposition( "zmb_quest_final_white_good", ( 0, 0, 0 ) ); + level.sndgameovermusicoverride = "game_over_final_good"; + } + + level.custom_intermission = ::player_intermission_bridge; + } + else + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + player freezecontrols( 1 ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_ee_bad_ending", 0 ); + player thread fadetoblackforxsec( 0, 5, 0.5, 0, "white" ); + player create_ending_message( &"ZM_PRISON_BAD" ); + player.client_hint.sort = 55; + player.client_hint.color = ( 0, 0, 0 ); + playsoundatposition( "zmb_quest_final_white_bad", ( 0, 0, 0 ) ); + level.sndgameovermusicoverride = "game_over_final_bad"; + } + } + + wait 5; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.client_hint ) ) + player thread destroy_tutorial_message(); + + if ( isdefined( player.revivetrigger ) ) + { + player thread revive_success( player, 0 ); + player cleanup_suicide_hud(); + } + + if ( isdefined( player ) ) + player ghost(); + } + + if ( isdefined( p_weasel ) ) + { + p_weasel.team = "allies"; + p_weasel.pers["team"] = "allies"; + p_weasel.sessionteam = "allies"; + p_weasel ghost(); + } + + level notify( "end_game" ); } final_showdown_track_weasel( p_weasel ) { - level endon( "showdown_over" ); - while ( 1 ) - { - if ( !isDefined( p_weasel ) || p_weasel maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level.winner = "team"; - level notify( "showdown_over" ); - } - wait 0,05; - } + level endon( "showdown_over" ); + + while ( true ) + { + if ( !isdefined( p_weasel ) || p_weasel maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level.winner = "team"; + level notify( "showdown_over" ); + } + + wait 0.05; + } } final_showdown_track_team( a_player_team ) { - level endon( "showdown_over" ); - while ( 1 ) - { - weasel_won = 1; - _a855 = a_player_team; - _k855 = getFirstArrayKey( _a855 ); - while ( isDefined( _k855 ) ) - { - player = _a855[ _k855 ]; - if ( is_player_valid( player, 0, 0 ) ) - { - weasel_won = 0; - } - _k855 = getNextArrayKey( _a855, _k855 ); - } - if ( isDefined( weasel_won ) && weasel_won ) - { - level.winner = "weasel"; - level notify( "showdown_over" ); - } - wait 0,05; - } + level endon( "showdown_over" ); + + while ( true ) + { + weasel_won = 1; + + foreach ( player in a_player_team ) + { + if ( is_player_valid( player, 0, 0 ) ) + weasel_won = 0; + } + + if ( isdefined( weasel_won ) && weasel_won ) + { + level.winner = "weasel"; + level notify( "showdown_over" ); + } + + wait 0.05; + } } final_showdown_zombie_logic() { - a_players = getplayers(); - _a877 = a_players; - _k877 = getFirstArrayKey( _a877 ); - while ( isDefined( _k877 ) ) - { - player = _a877[ _k877 ]; - if ( player.character_name == "Arlington" ) - { - self.ignore_player[ self.ignore_player.size ] = player; - } - _k877 = getNextArrayKey( _a877, _k877 ); - } - return 1; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( player.character_name == "Arlington" ) + self.ignore_player[self.ignore_player.size] = player; + } + + return 1; } final_showdown_create_icon( player, enemy ) { - height_offset = 60; - hud_elem = newclienthudelem( player ); - hud_elem.x = enemy.origin[ 0 ]; - hud_elem.y = enemy.origin[ 1 ]; - hud_elem.z = enemy.origin[ 2 ] + height_offset; - hud_elem.alpha = 1; - hud_elem.archived = 1; - hud_elem setshader( "waypoint_kill_red", 8, 8 ); - hud_elem setwaypoint( 1 ); - hud_elem.foreground = 1; - hud_elem.hidewheninmenu = 1; - hud_elem thread final_showdown_update_icon( enemy ); - waittill_any_ents( level, "showdown_over", enemy, "disconnect" ); - hud_elem destroy(); + height_offset = 60; + hud_elem = newclienthudelem( player ); + hud_elem.x = enemy.origin[0]; + hud_elem.y = enemy.origin[1]; + hud_elem.z = enemy.origin[2] + height_offset; + hud_elem.alpha = 1; + hud_elem.archived = 1; + hud_elem setshader( "waypoint_kill_red", 8, 8 ); + hud_elem setwaypoint( 1 ); + hud_elem.foreground = 1; + hud_elem.hidewheninmenu = 1; + hud_elem thread final_showdown_update_icon( enemy ); + waittill_any_ents( level, "showdown_over", enemy, "disconnect" ); + hud_elem destroy(); } final_showdown_update_icon( enemy ) { - level endon( "showdown_over" ); - enemy endon( "disconnect" ); - height_offset = 60; - while ( isDefined( enemy ) ) - { - self.x = enemy.origin[ 0 ]; - self.y = enemy.origin[ 1 ]; - self.z = enemy.origin[ 2 ] + height_offset; - wait 0,05; - } + level endon( "showdown_over" ); + enemy endon( "disconnect" ); + height_offset = 60; + + while ( isdefined( enemy ) ) + { + self.x = enemy.origin[0]; + self.y = enemy.origin[1]; + self.z = enemy.origin[2] + height_offset; + wait 0.05; + } } revive_trigger_should_ignore_sight_checks( player_down ) { - if ( level.final_flight_activated ) - { - return 1; - } - return 0; + if ( level.final_flight_activated ) + return true; + + return false; } final_battle_vo( p_weasel, a_player_team ) { - level endon( "showdown_over" ); - wait 10; - a_players = arraycopy( a_player_team ); - player = a_players[ randomintrange( 0, a_players.size ) ]; - arrayremovevalue( a_players, player ); - if ( a_players.size > 0 ) - { - player_2 = a_players[ randomintrange( 0, a_players.size ) ]; - } - if ( isDefined( player ) ) - { - player final_battle_reveal(); - } - wait 3; - if ( isDefined( p_weasel ) ) - { - p_weasel playsoundontag( "vox_plr_3_end_scenario_0", "J_Head" ); - } - wait 1; - _a967 = a_player_team; - _k967 = getFirstArrayKey( _a967 ); - while ( isDefined( _k967 ) ) - { - player = _a967[ _k967 ]; - level thread final_showdown_create_icon( player, p_weasel ); - level thread final_showdown_create_icon( p_weasel, player ); - _k967 = getNextArrayKey( _a967, _k967 ); - } - wait 10; - if ( isDefined( player_2 ) ) - { - player_2 playsoundontag( "vox_plr_" + player_2.characterindex + "_end_scenario_1", "J_Head" ); - } - else - { - if ( isDefined( player ) ) - { - player playsoundontag( "vox_plr_" + player.characterindex + "_end_scenario_1", "J_Head" ); - } - } - wait 4; - if ( isDefined( p_weasel ) ) - { - p_weasel playsoundontag( "vox_plr_3_end_scenario_1", "J_Head" ); - p_weasel.dontspeak = 0; - p_weasel setclientfieldtoplayer( "isspeaking", 0 ); - } - _a996 = a_player_team; - _k996 = getFirstArrayKey( _a996 ); - while ( isDefined( _k996 ) ) - { - player = _a996[ _k996 ]; - player.dontspeak = 0; - player setclientfieldtoplayer( "isspeaking", 0 ); - _k996 = getNextArrayKey( _a996, _k996 ); - } + level endon( "showdown_over" ); + wait 10; + a_players = arraycopy( a_player_team ); + player = a_players[randomintrange( 0, a_players.size )]; + arrayremovevalue( a_players, player ); + + if ( a_players.size > 0 ) + player_2 = a_players[randomintrange( 0, a_players.size )]; + + if ( isdefined( player ) ) + player final_battle_reveal(); + + wait 3; + + if ( isdefined( p_weasel ) ) + p_weasel playsoundontag( "vox_plr_3_end_scenario_0", "J_Head" ); + + wait 1; + + foreach ( player in a_player_team ) + { + level thread final_showdown_create_icon( player, p_weasel ); + level thread final_showdown_create_icon( p_weasel, player ); + } + + wait 10; + + if ( isdefined( player_2 ) ) + player_2 playsoundontag( "vox_plr_" + player_2.characterindex + "_end_scenario_1", "J_Head" ); + else if ( isdefined( player ) ) + player playsoundontag( "vox_plr_" + player.characterindex + "_end_scenario_1", "J_Head" ); + + wait 4; + + if ( isdefined( p_weasel ) ) + { + p_weasel playsoundontag( "vox_plr_3_end_scenario_1", "J_Head" ); + p_weasel.dontspeak = 0; + p_weasel setclientfieldtoplayer( "isspeaking", 0 ); + } + + foreach ( player in a_player_team ) + { + player.dontspeak = 0; + player setclientfieldtoplayer( "isspeaking", 0 ); + } } final_battle_reveal() { - self endon( "death_or_disconnect" ); - self playsoundwithnotify( "vox_plr_" + self.characterindex + "_end_scenario_0", "showdown_icon_reveal" ); - self waittill( "showdown_icon_reveal" ); + self endon( "death_or_disconnect" ); + self playsoundwithnotify( "vox_plr_" + self.characterindex + "_end_scenario_0", "showdown_icon_reveal" ); + + self waittill( "showdown_icon_reveal" ); } player_intermission_bridge() { - self closemenu(); - self closeingamemenu(); - level endon( "stop_intermission" ); - self endon( "disconnect" ); - self endon( "death" ); - self notify( "_zombie_game_over" ); - self.score = self.score_total; - self.sessionstate = "intermission"; - self.spectatorclient = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - self.friendlydamage = undefined; - points = getstructarray( "final_cam", "targetname" ); - if ( !isDefined( points ) || points.size == 0 ) - { - points = getentarray( "info_intermission", "classname" ); - if ( points.size < 1 ) - { + self closemenu(); + self closeingamemenu(); + level endon( "stop_intermission" ); + self endon( "disconnect" ); + self endon( "death" ); + self notify( "_zombie_game_over" ); + self.score = self.score_total; + self.sessionstate = "intermission"; + self.spectatorclient = -1; + self.killcamentity = -1; + self.archivetime = 0; + self.psoffsettime = 0; + self.friendlydamage = undefined; + points = getstructarray( "final_cam", "targetname" ); + + if ( !isdefined( points ) || points.size == 0 ) + { + points = getentarray( "info_intermission", "classname" ); + + if ( points.size < 1 ) + { /# - println( "NO info_intermission POINTS IN MAP" ); + println( "NO info_intermission POINTS IN MAP" ); #/ - return; - } - } - self.game_over_bg = newclienthudelem( self ); - self.game_over_bg.horzalign = "fullscreen"; - self.game_over_bg.vertalign = "fullscreen"; - self.game_over_bg setshader( "black", 640, 480 ); - self.game_over_bg.alpha = 1; - org = undefined; - while ( 1 ) - { - points = array_randomize( points ); - i = 0; - while ( i < points.size ) - { - point = points[ i ]; - if ( !isDefined( org ) ) - { - self spawn( point.origin, point.angles ); - } - if ( isDefined( points[ i ].target ) ) - { - if ( !isDefined( org ) ) - { - org = spawn( "script_model", self.origin + vectorScale( ( 1, 1, 1 ), 60 ) ); - org setmodel( "tag_origin" ); - } - org.origin = points[ i ].origin; - org.angles = points[ i ].angles; - j = 0; - while ( j < get_players().size ) - { - player = get_players()[ j ]; - player camerasetposition( org ); - player camerasetlookat(); - player cameraactivate( 1 ); - j++; - } - speed = 20; - if ( isDefined( points[ i ].speed ) ) - { - speed = points[ i ].speed; - } - target_point = getstruct( points[ i ].target, "targetname" ); - dist = distance( points[ i ].origin, target_point.origin ); - time = dist / speed; - q_time = time * 0,25; - if ( q_time > 1 ) - { - q_time = 1; - } - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 0; - org moveto( target_point.origin, time, q_time, q_time ); - org rotateto( target_point.angles, time, q_time, q_time ); - wait ( time - q_time ); - self.game_over_bg fadeovertime( q_time ); - self.game_over_bg.alpha = 1; - wait q_time; - i++; - continue; - } - else - { - self.game_over_bg fadeovertime( 1 ); - self.game_over_bg.alpha = 0; - wait 5; - self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); - } - i++; - } - } + return; + } + } + + self.game_over_bg = newclienthudelem( self ); + self.game_over_bg.horzalign = "fullscreen"; + self.game_over_bg.vertalign = "fullscreen"; + self.game_over_bg setshader( "black", 640, 480 ); + self.game_over_bg.alpha = 1; + org = undefined; + + while ( true ) + { + points = array_randomize( points ); + + for ( i = 0; i < points.size; i++ ) + { + point = points[i]; + + if ( !isdefined( org ) ) + self spawn( point.origin, point.angles ); + + if ( isdefined( points[i].target ) ) + { + if ( !isdefined( org ) ) + { + org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) ); + org setmodel( "tag_origin" ); + } + + org.origin = points[i].origin; + org.angles = points[i].angles; + + for ( j = 0; j < get_players().size; j++ ) + { + player = get_players()[j]; + player camerasetposition( org ); + player camerasetlookat(); + player cameraactivate( 1 ); + } + + speed = 20; + + if ( isdefined( points[i].speed ) ) + speed = points[i].speed; + + target_point = getstruct( points[i].target, "targetname" ); + dist = distance( points[i].origin, target_point.origin ); + time = dist / speed; + q_time = time * 0.25; + + if ( q_time > 1 ) + q_time = 1; + + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 0; + org moveto( target_point.origin, time, q_time, q_time ); + org rotateto( target_point.angles, time, q_time, q_time ); + wait( time - q_time ); + self.game_over_bg fadeovertime( q_time ); + self.game_over_bg.alpha = 1; + wait( q_time ); + continue; + } + + self.game_over_bg fadeovertime( 1 ); + self.game_over_bg.alpha = 0; + wait 5; + self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 ); + } + } } create_ending_message( str_msg ) { - if ( !isDefined( self.client_hint ) ) - { - self.client_hint = newclienthudelem( self ); - self.client_hint.alignx = "center"; - self.client_hint.aligny = "middle"; - self.client_hint.horzalign = "center"; - self.client_hint.vertalign = "bottom"; - if ( self issplitscreen() ) - { - self.client_hint.y = -140; - } - else - { - self.client_hint.y = -250; - } - self.client_hint.foreground = 1; - self.client_hint.font = "default"; - self.client_hint.fontscale = 50; - self.client_hint.alpha = 1; - self.client_hint.foreground = 1; - self.client_hint.hidewheninmenu = 1; - self.client_hint.color = ( 1, 1, 1 ); - } - self.client_hint settext( str_msg ); + if ( !isdefined( self.client_hint ) ) + { + self.client_hint = newclienthudelem( self ); + self.client_hint.alignx = "center"; + self.client_hint.aligny = "middle"; + self.client_hint.horzalign = "center"; + self.client_hint.vertalign = "bottom"; + + if ( self issplitscreen() ) + self.client_hint.y = -140; + else + self.client_hint.y = -250; + + self.client_hint.foreground = 1; + self.client_hint.font = "default"; + self.client_hint.fontscale = 50; + self.client_hint.alpha = 1; + self.client_hint.foreground = 1; + self.client_hint.hidewheninmenu = 1; + self.client_hint.color = ( 1, 1, 1 ); + } + + self.client_hint settext( str_msg ); } custom_game_over_hud_elem( player ) { - game_over = newclienthudelem( player ); - game_over.alignx = "center"; - game_over.aligny = "middle"; - game_over.horzalign = "center"; - game_over.vertalign = "middle"; - game_over.y -= 130; - game_over.foreground = 1; - game_over.fontscale = 3; - game_over.alpha = 0; - game_over.color = ( 1, 1, 1 ); - game_over.hidewheninmenu = 1; - if ( isDefined( level.winner ) ) - { - game_over settext( &"ZM_PRISON_LIFE_OVER" ); - } - else - { - game_over settext( &"ZOMBIE_GAME_OVER" ); - } - game_over fadeovertime( 1 ); - game_over.alpha = 1; - if ( player issplitscreen() ) - { - game_over.fontscale = 2; - game_over.y += 40; - } - return game_over; + game_over = newclienthudelem( player ); + game_over.alignx = "center"; + game_over.aligny = "middle"; + game_over.horzalign = "center"; + game_over.vertalign = "middle"; + game_over.y -= 130; + game_over.foreground = 1; + game_over.fontscale = 3; + game_over.alpha = 0; + game_over.color = ( 1, 1, 1 ); + game_over.hidewheninmenu = 1; + + if ( isdefined( level.winner ) ) + game_over settext( &"ZM_PRISON_LIFE_OVER" ); + else + game_over settext( &"ZOMBIE_GAME_OVER" ); + + game_over fadeovertime( 1 ); + game_over.alpha = 1; + + if ( player issplitscreen() ) + { + game_over.fontscale = 2; + game_over.y += 40; + } + + return game_over; } clean_up_final_brutuses() { - while ( 1 ) - { - zombies = getaispeciesarray( "axis", "all" ); - i = 0; - while ( i < zombies.size ) - { - zombies[ i ] dodamage( 10000, zombies[ i ].origin ); - i++; - } - wait 1; - } + while ( true ) + { + zombies = getaispeciesarray( "axis", "all" ); + + for ( i = 0; i < zombies.size; i++ ) + zombies[i] dodamage( 10000, zombies[i].origin ); + + wait 1; + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc index 050b566..75b1942 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zm_prison_sq_wth.gsc @@ -1,108 +1,112 @@ -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_zonemgr; onplayerconnect_sq_wth() { - if ( !isDefined( level.wth_lookat_point ) ) - { - level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" ); - } - self thread track_player_eyes(); - self thread play_scary_lightning(); + if ( !isdefined( level.wth_lookat_point ) ) + level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" ); + + self thread track_player_eyes(); + self thread play_scary_lightning(); } track_player_eyes() { - self endon( "disconnect" ); - b_saw_the_wth = 0; - while ( !b_saw_the_wth ) - { - n_time = 0; - while ( self adsbuttonpressed() && n_time < 25 ) - { - n_time++; - wait 0,05; - } - if ( n_time >= 25 && self adsbuttonpressed() && self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0,9, 0, undefined ) ) - { - self do_player_general_vox( "general", "scare_react", undefined, 100 ); - self playsoundtoplayer( "zmb_easteregg_face", self ); - self.wth_elem = newclienthudelem( self ); - self.wth_elem.horzalign = "fullscreen"; - self.wth_elem.vertalign = "fullscreen"; - self.wth_elem.sort = 1000; - self.wth_elem.foreground = 0; - self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); - self.wth_elem.hidewheninmenu = 1; - j_time = 0; - while ( self adsbuttonpressed() && j_time < 5 ) - { - j_time++; - wait 0,05; - } - self.wth_elem destroy(); - b_saw_the_wth = 1; - } - wait 0,05; - } + self endon( "disconnect" ); + b_saw_the_wth = 0; + + while ( !b_saw_the_wth ) + { + n_time = 0; + + while ( self adsbuttonpressed() && n_time < 25 ) + { + n_time++; + wait 0.05; + } + + if ( n_time >= 25 && self adsbuttonpressed() && self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0.9, 0, undefined ) ) + { + self do_player_general_vox( "general", "scare_react", undefined, 100 ); + self playsoundtoplayer( "zmb_easteregg_face", self ); + self.wth_elem = newclienthudelem( self ); + self.wth_elem.horzalign = "fullscreen"; + self.wth_elem.vertalign = "fullscreen"; + self.wth_elem.sort = 1000; + self.wth_elem.foreground = 0; + self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); + self.wth_elem.hidewheninmenu = 1; + j_time = 0; + + while ( self adsbuttonpressed() && j_time < 5 ) + { + j_time++; + wait 0.05; + } + + self.wth_elem destroy(); + b_saw_the_wth = 1; + } + + wait 0.05; + } } sq_is_weapon_sniper( str_weapon ) { - a_snipers = array( "dsr50", "barretm82" ); - _a77 = a_snipers; - _k77 = getFirstArrayKey( _a77 ); - while ( isDefined( _k77 ) ) - { - str_sniper = _a77[ _k77 ]; - if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) ) - { - return 1; - } - _k77 = getNextArrayKey( _a77, _k77 ); - } - return 0; + a_snipers = array( "dsr50", "barretm82" ); + + foreach ( str_sniper in a_snipers ) + { + if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) ) + return true; + } + + return false; } play_scary_lightning() { - self endon( "disconnect" ); - while ( 1 ) - { - while ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && isDefined( self.b_lightning ) || !self.b_lightning && flag( "plane_zapped" ) ) - { - wait 0,25; - } - if ( randomint( 100000 ) == 1337 ) - { - self.scary_lighting = 1; - level setclientfield( "scripted_lightning_flash", 1 ); - wait_network_frame(); - self.sl_elem = newclienthudelem( self ); - self.sl_elem.horzalign = "fullscreen"; - self.sl_elem.vertalign = "fullscreen"; - self.sl_elem.sort = 1000; - self.sl_elem.foreground = 0; - self.sl_elem.alpha = 0,6; - self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 ); - self.sl_elem.hidewheninmenu = 1; - self.sl_elem.alpha = 0; - self.sl_elem fadeovertime( 0,1 ); - wait_network_frame(); - self.sl_elem.alpha = 0,6; - self.sl_elem fadeovertime( 0,1 ); - wait_network_frame(); - self.sl_elem.alpha = 0; - self.sl_elem fadeovertime( 0,1 ); - wait_network_frame(); - self.sl_elem destroy(); - self.scary_lightning = 0; - wait 10; - level setclientfield( "scripted_lightning_flash", 0 ); - } - wait 1; - } + self endon( "disconnect" ); + + while ( true ) + { + while ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) || !( isdefined( self.b_lightning ) && self.b_lightning ) || flag( "plane_zapped" ) ) + wait 0.25; + + if ( randomint( 100000 ) == 1337 ) + { + self.scary_lighting = 1; + level setclientfield( "scripted_lightning_flash", 1 ); + wait_network_frame(); + self.sl_elem = newclienthudelem( self ); + self.sl_elem.horzalign = "fullscreen"; + self.sl_elem.vertalign = "fullscreen"; + self.sl_elem.sort = 1000; + self.sl_elem.foreground = 0; + self.sl_elem.alpha = 0.6; + self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 ); + self.sl_elem.hidewheninmenu = 1; + self.sl_elem.alpha = 0.0; + self.sl_elem fadeovertime( 0.1 ); + wait_network_frame(); + self.sl_elem.alpha = 0.6; + self.sl_elem fadeovertime( 0.1 ); + wait_network_frame(); + self.sl_elem.alpha = 0.0; + self.sl_elem fadeovertime( 0.1 ); + wait_network_frame(); + self.sl_elem destroy(); + self.scary_lightning = 0; + wait 10; + level setclientfield( "scripted_lightning_flash", 0 ); + } + + wait 1; + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc index dc2a5a9..9fe8db6 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_afterlife.gsc @@ -1,2289 +1,2170 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_alcatraz_travel; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_perk_electric_cherry; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm; -#include maps/mp/_visionset_mgr; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\_visionset_mgr; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_perk_electric_cherry; +#include maps\mp\zombies\_zm_clone; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_alcatraz_travel; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_ai_basic; init() { - level.zombiemode_using_afterlife = 1; - flag_init( "afterlife_start_over" ); - level.afterlife_revive_tool = "syrette_afterlife_zm"; - precacheitem( level.afterlife_revive_tool ); - precachemodel( "drone_collision" ); - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_afterlife", 9000, 120, 1, 1 ); - maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_afterlife_filter", 9000, 120, 1, 1 ); - if ( isDefined( level.afterlife_player_damage_override ) ) - { - maps/mp/zombies/_zm::register_player_damage_callback( level.afterlife_player_damage_override ); - } - else - { - maps/mp/zombies/_zm::register_player_damage_callback( ::afterlife_player_damage_callback ); - } - registerclientfield( "toplayer", "player_lives", 9000, 2, "int" ); - registerclientfield( "toplayer", "player_in_afterlife", 9000, 1, "int" ); - registerclientfield( "toplayer", "player_afterlife_mana", 9000, 5, "float" ); - registerclientfield( "allplayers", "player_afterlife_fx", 9000, 1, "int" ); - registerclientfield( "toplayer", "clientfield_afterlife_audio", 9000, 1, "int" ); - registerclientfield( "toplayer", "player_afterlife_refill", 9000, 1, "int" ); - registerclientfield( "scriptmover", "player_corpse_id", 9000, 3, "int" ); - afterlife_load_fx(); - level thread afterlife_hostmigration(); - precachemodel( "c_zom_ghost_viewhands" ); - precachemodel( "c_zom_hero_ghost_fb" ); - precacheitem( "lightning_hands_zm" ); - precachemodel( "p6_zm_al_shock_box_on" ); - precacheshader( "waypoint_revive_afterlife" ); - a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); - array_thread( a_afterlife_interact, ::afterlife_interact_object_think ); - level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); - array_thread( level.zombie_spawners, ::add_spawn_function, ::afterlife_zombie_damage ); - a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); - _a87 = a_afterlife_triggers; - _k87 = getFirstArrayKey( _a87 ); - while ( isDefined( _k87 ) ) - { - struct = _a87[ _k87 ]; - afterlife_trigger_create( struct ); - _k87 = getNextArrayKey( _a87, _k87 ); - } - level.afterlife_interact_dist = 256; - level.is_player_valid_override = ::is_player_valid_afterlife; - level.can_revive = ::can_revive_override; - level.round_prestart_func = ::afterlife_start_zombie_logic; - level.custom_pap_validation = ::is_player_valid_afterlife; - level.player_out_of_playable_area_monitor_callback = ::player_out_of_playable_area; - level thread afterlife_gameover_cleanup(); - level.afterlife_get_spawnpoint = ::afterlife_get_spawnpoint; - level.afterlife_zapped = ::afterlife_zapped; - level.afterlife_give_loadout = ::afterlife_give_loadout; - level.afterlife_save_loadout = ::afterlife_save_loadout; + level.zombiemode_using_afterlife = 1; + flag_init( "afterlife_start_over" ); + level.afterlife_revive_tool = "syrette_afterlife_zm"; + precacheitem( level.afterlife_revive_tool ); + precachemodel( "drone_collision" ); + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_afterlife", 9000, 120, 1, 1 ); + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_afterlife_filter", 9000, 120, 1, 1 ); + + if ( isdefined( level.afterlife_player_damage_override ) ) + maps\mp\zombies\_zm::register_player_damage_callback( level.afterlife_player_damage_override ); + else + maps\mp\zombies\_zm::register_player_damage_callback( ::afterlife_player_damage_callback ); + + registerclientfield( "toplayer", "player_lives", 9000, 2, "int" ); + registerclientfield( "toplayer", "player_in_afterlife", 9000, 1, "int" ); + registerclientfield( "toplayer", "player_afterlife_mana", 9000, 5, "float" ); + registerclientfield( "allplayers", "player_afterlife_fx", 9000, 1, "int" ); + registerclientfield( "toplayer", "clientfield_afterlife_audio", 9000, 1, "int" ); + registerclientfield( "toplayer", "player_afterlife_refill", 9000, 1, "int" ); + registerclientfield( "scriptmover", "player_corpse_id", 9000, 3, "int" ); + afterlife_load_fx(); + level thread afterlife_hostmigration(); + precachemodel( "c_zom_ghost_viewhands" ); + precachemodel( "c_zom_hero_ghost_fb" ); + precacheitem( "lightning_hands_zm" ); + precachemodel( "p6_zm_al_shock_box_on" ); + precacheshader( "waypoint_revive_afterlife" ); + a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); + array_thread( a_afterlife_interact, ::afterlife_interact_object_think ); + level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); + array_thread( level.zombie_spawners, ::add_spawn_function, ::afterlife_zombie_damage ); + a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); + + foreach ( struct in a_afterlife_triggers ) + afterlife_trigger_create( struct ); + + level.afterlife_interact_dist = 256; + level.is_player_valid_override = ::is_player_valid_afterlife; + level.can_revive = ::can_revive_override; + level.round_prestart_func = ::afterlife_start_zombie_logic; + level.custom_pap_validation = ::is_player_valid_afterlife; + level.player_out_of_playable_area_monitor_callback = ::player_out_of_playable_area; + level thread afterlife_gameover_cleanup(); + level.afterlife_get_spawnpoint = ::afterlife_get_spawnpoint; + level.afterlife_zapped = ::afterlife_zapped; + level.afterlife_give_loadout = ::afterlife_give_loadout; + level.afterlife_save_loadout = ::afterlife_save_loadout; } afterlife_gameover_cleanup() { - level waittill( "end_game" ); - _a126 = getplayers(); - _k126 = getFirstArrayKey( _a126 ); - while ( isDefined( _k126 ) ) - { - player = _a126[ _k126 ]; - player.afterlife = 0; - player clientnotify( "end_game" ); - player notify( "end_game" ); - if ( isDefined( player.client_hint ) ) - { - player.client_hint destroy(); - } - _k126 = getNextArrayKey( _a126, _k126 ); - } - wait 5; - _a141 = getplayers(); - _k141 = getFirstArrayKey( _a141 ); - while ( isDefined( _k141 ) ) - { - player = _a141[ _k141 ]; - if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_afterlife_filter", player ); - } - _k141 = getNextArrayKey( _a141, _k141 ); - } + level waittill( "end_game" ); + + foreach ( player in getplayers() ) + { + player.afterlife = 0; + player clientnotify( "end_game" ); + player notify( "end_game" ); + + if ( isdefined( player.client_hint ) ) + player.client_hint destroy(); + } + + wait 5; + + foreach ( player in getplayers() ) + { + if ( isdefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_afterlife_filter", player ); + } } afterlife_load_fx() { - level._effect[ "afterlife_teleport" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); - level._effect[ "teleport_ball" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" ); - level._effect[ "afterlife_kill_point_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_suicide_area" ); - level._effect[ "afterlife_enter" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_start" ); - level._effect[ "afterlife_leave" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_player_revive" ); - level._effect[ "afterlife_pixie_dust" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_pixies" ); - level._effect[ "afterlife_corpse" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_player_down" ); - level._effect[ "afterlife_damage" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_damage" ); - level._effect[ "afterlife_ghost_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_body" ); - level._effect[ "afterlife_ghost_h_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_head" ); - level._effect[ "afterlife_ghost_arm_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_arm" ); - level._effect[ "afterlife_ghost_hand_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_hand" ); - level._effect[ "afterlife_ghost_hand_r_fx" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_hand_r" ); - level._effect[ "afterlife_transition" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_transition" ); - level._effect[ "fx_alcatraz_ghost_vm_wrist" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_vm_wrist" ); - level._effect[ "fx_alcatraz_ghost_vm_wrist_r" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_vm_wrist_r" ); - level._effect[ "fx_alcatraz_ghost_spectate" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_spec" ); + level._effect["afterlife_teleport"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" ); + level._effect["teleport_ball"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" ); + level._effect["afterlife_kill_point_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_suicide_area" ); + level._effect["afterlife_enter"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_start" ); + level._effect["afterlife_leave"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_player_revive" ); + level._effect["afterlife_pixie_dust"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_pixies" ); + level._effect["afterlife_corpse"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_player_down" ); + level._effect["afterlife_damage"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_damage" ); + level._effect["afterlife_ghost_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_body" ); + level._effect["afterlife_ghost_h_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_head" ); + level._effect["afterlife_ghost_arm_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_arm" ); + level._effect["afterlife_ghost_hand_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_hand" ); + level._effect["afterlife_ghost_hand_r_fx"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_hand_r" ); + level._effect["afterlife_transition"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_transition" ); + level._effect["fx_alcatraz_ghost_vm_wrist"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_vm_wrist" ); + level._effect["fx_alcatraz_ghost_vm_wrist_r"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_vm_wrist_r" ); + level._effect["fx_alcatraz_ghost_spectate"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ghost_spec" ); } afterlife_start_zombie_logic() { - flag_wait( "start_zombie_round_logic" ); - wait 0,5; - b_everyone_alive = 0; - while ( isDefined( b_everyone_alive ) && !b_everyone_alive ) - { - b_everyone_alive = 1; - a_players = getplayers(); - _a192 = a_players; - _k192 = getFirstArrayKey( _a192 ); - while ( isDefined( _k192 ) ) - { - player = _a192[ _k192 ]; - if ( isDefined( player.afterlife ) && player.afterlife ) - { - b_everyone_alive = 0; - wait 0,05; - break; - } - else - { - _k192 = getNextArrayKey( _a192, _k192 ); - } - } - } - wait 0,5; - while ( level.intermission ) - { - wait 0,05; - } - flag_set( "afterlife_start_over" ); - wait 2; - array_func( getplayers(), ::afterlife_add ); + flag_wait( "start_zombie_round_logic" ); + wait 0.5; + b_everyone_alive = 0; + + while ( isdefined( b_everyone_alive ) && !b_everyone_alive ) + { + b_everyone_alive = 1; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.afterlife ) && player.afterlife ) + { + b_everyone_alive = 0; + wait 0.05; + break; + } + } + } + + wait 0.5; + + while ( level.intermission ) + wait 0.05; + + flag_set( "afterlife_start_over" ); + wait 2; + array_func( getplayers(), ::afterlife_add ); } is_player_valid_afterlife( player ) { - if ( isDefined( player.afterlife ) && player.afterlife ) - { - return 0; - } - return 1; + if ( isdefined( player.afterlife ) && player.afterlife ) + return false; + + return true; } can_revive_override( revivee ) { - if ( isDefined( self.afterlife ) && self.afterlife ) - { - return 0; - } - return 1; + if ( isdefined( self.afterlife ) && self.afterlife ) + return false; + + return true; } player_out_of_playable_area() { - if ( isDefined( self.afterlife ) && self.afterlife ) - { - return 0; - } - if ( isDefined( self.on_a_plane ) && self.on_a_plane ) - { - return 0; - } - return 1; + if ( isdefined( self.afterlife ) && self.afterlife ) + return false; + + if ( isdefined( self.on_a_plane ) && self.on_a_plane ) + return false; + + if ( isdefined( level.gondola_kill_brush_override ) && level.gondola_kill_brush_override ) + { + if ( self istouching( level.gondola_docks_landing_killbrush ) ) + return false; + } + + return true; } init_player() { - flag_wait( "initial_players_connected" ); - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - self.lives = 3; - } - else - { - self.lives = 1; - } - self setclientfieldtoplayer( "player_lives", self.lives ); - self.afterlife = 0; - self.afterliferound = level.round_number; - self.afterlifedeaths = 0; - self thread afterlife_doors_close(); - self thread afterlife_player_refill_watch(); + flag_wait( "initial_players_connected" ); + + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + self.lives = 3; + else + self.lives = 1; + + self setclientfieldtoplayer( "player_lives", self.lives ); + self.afterlife = 0; + self.afterliferound = level.round_number; + self.afterlifedeaths = 0; + self thread afterlife_doors_close(); + self thread afterlife_player_refill_watch(); } afterlife_remove( b_afterlife_death ) { - if ( !isDefined( b_afterlife_death ) ) - { - b_afterlife_death = 0; - } - if ( isDefined( b_afterlife_death ) && b_afterlife_death ) - { - self.lives = 0; - } - else - { - if ( self.lives > 0 ) - { - self.lives--; + if ( !isdefined( b_afterlife_death ) ) + b_afterlife_death = 0; - } - } - self notify( "sndLifeGone" ); - self setclientfieldtoplayer( "player_lives", self.lives ); + if ( isdefined( b_afterlife_death ) && b_afterlife_death ) + self.lives = 0; + else if ( self.lives > 0 ) + self.lives--; + + self notify( "sndLifeGone" ); + self setclientfieldtoplayer( "player_lives", self.lives ); } afterlife_add() { - if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - if ( self.lives < 3 ) - { - self.lives++; - self thread afterlife_add_fx(); - } - } - else - { - if ( self.lives < 1 ) - { - self.lives++; - self thread afterlife_add_fx(); - } - } - self playsoundtoplayer( "zmb_afterlife_add", self ); - self setclientfieldtoplayer( "player_lives", self.lives ); + if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) + { + if ( self.lives < 3 ) + { + self.lives++; + self thread afterlife_add_fx(); + } + } + else if ( self.lives < 1 ) + { + self.lives++; + self thread afterlife_add_fx(); + } + + self playsoundtoplayer( "zmb_afterlife_add", self ); + self setclientfieldtoplayer( "player_lives", self.lives ); } afterlife_add_fx() { - if ( isDefined( self.afterlife ) && !self.afterlife ) - { - self setclientfieldtoplayer( "player_afterlife_refill", 1 ); - wait 3; - if ( isDefined( self.afterlife ) && !self.afterlife ) - { - self setclientfieldtoplayer( "player_afterlife_refill", 0 ); - } - } + if ( isdefined( self.afterlife ) && !self.afterlife ) + { + self setclientfieldtoplayer( "player_afterlife_refill", 1 ); + wait 3; + + if ( isdefined( self.afterlife ) && !self.afterlife ) + self setclientfieldtoplayer( "player_afterlife_refill", 0 ); + } } afterlife_player_refill_watch() { - self endon( "disconnect" ); - self endon( "_zombie_game_over" ); - level endon( "stage_final" ); - while ( 1 ) - { - level waittill( "end_of_round" ); - wait 2; - self afterlife_add(); - reset_all_afterlife_unitriggers(); - } + self endon( "disconnect" ); + self endon( "_zombie_game_over" ); + level endon( "stage_final" ); + + while ( true ) + { + level waittill( "end_of_round" ); + + wait 2; + self afterlife_add(); + reset_all_afterlife_unitriggers(); + } } afterlife_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) { - if ( isDefined( eattacker ) ) - { - if ( isDefined( eattacker.is_zombie ) && eattacker.is_zombie ) - { - if ( isDefined( eattacker.custom_damage_func ) ) - { - idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); - } - else - { - if ( isDefined( eattacker.meleedamage ) && smeansofdeath != "MOD_GRENADE_SPLASH" ) - { - idamage = eattacker.meleedamage; - } - } - if ( isDefined( self.afterlife ) && self.afterlife ) - { - self afterlife_reduce_mana( 10 ); - self clientnotify( "al_d" ); - return 0; - } - } - } - if ( isDefined( self.afterlife ) && self.afterlife ) - { - return 0; - } - if ( isDefined( eattacker ) && isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) - { - if ( isDefined( self.hasriotshield ) && self.hasriotshield && isDefined( vdir ) ) - { - item_dmg = 100; - if ( isDefined( eattacker.custom_item_dmg ) ) - { - item_dmg = eattacker.custom_item_dmg; - } - if ( isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - if ( self player_shield_facing_attacker( vdir, 0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( item_dmg, 0 ); - return 0; - } - } - else - { - if ( !isDefined( self.riotshieldentity ) ) - { - if ( !self player_shield_facing_attacker( vdir, -0,2 ) && isDefined( self.player_shield_apply_damage ) ) - { - self [[ self.player_shield_apply_damage ]]( item_dmg, 0 ); - return 0; - } - } - } - } - } - if ( smeansofdeath != "MOD_PROJECTILE" && smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" && smeansofdeath == "MOD_GRENADE_SPLASH" ) - { - if ( sweapon == "blundersplat_explosive_dart_zm" ) - { - if ( self hasperk( "specialty_flakjacket" ) ) - { - self.use_adjusted_grenade_damage = 1; - idamage = 0; - } - if ( isalive( self ) && isDefined( self.is_zombie ) && !self.is_zombie ) - { - self.use_adjusted_grenade_damage = 1; - idamage = 10; - } - } - else - { - if ( self hasperk( "specialty_flakjacket" ) ) - { - return 0; - } - if ( self.health > 75 && isDefined( self.is_zombie ) && !self.is_zombie ) - { - idamage = 75; - } - } - } - if ( sweapon == "tower_trap_zm" || sweapon == "tower_trap_upgraded_zm" ) - { - self.use_adjusted_grenade_damage = 1; - return 0; - } - if ( idamage >= self.health && isDefined( level.intermission ) && !level.intermission ) - { - if ( self.lives > 0 && isDefined( self.afterlife ) && !self.afterlife ) - { - self playsoundtoplayer( "zmb_afterlife_death", self ); - self afterlife_remove(); - self.afterlife = 1; - self thread afterlife_laststand(); - if ( self.health <= 1 ) - { - return 0; - } - else - { - idamage = self.health - 1; - } - } - else - { - self thread last_stand_conscience_vo(); - } - } - return idamage; + if ( isdefined( eattacker ) ) + { + if ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) + { + if ( isdefined( eattacker.custom_damage_func ) ) + idamage = eattacker [[ eattacker.custom_damage_func ]]( self ); + else if ( isdefined( eattacker.meleedamage ) && smeansofdeath != "MOD_GRENADE_SPLASH" ) + idamage = eattacker.meleedamage; + + if ( isdefined( self.afterlife ) && self.afterlife ) + { + self afterlife_reduce_mana( 10 ); + self clientnotify( "al_d" ); + return 0; + } + } + } + + if ( isdefined( self.afterlife ) && self.afterlife ) + return 0; + + if ( isdefined( eattacker ) && ( isdefined( eattacker.is_zombie ) && eattacker.is_zombie || isplayer( eattacker ) ) ) + { + if ( isdefined( self.hasriotshield ) && self.hasriotshield && isdefined( vdir ) ) + { + item_dmg = 100; + + if ( isdefined( eattacker.custom_item_dmg ) ) + item_dmg = eattacker.custom_item_dmg; + + if ( isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + { + if ( self player_shield_facing_attacker( vdir, 0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( item_dmg, 0 ); + return 0; + } + } + else if ( !isdefined( self.riotshieldentity ) ) + { + if ( !self player_shield_facing_attacker( vdir, -0.2 ) && isdefined( self.player_shield_apply_damage ) ) + { + self [[ self.player_shield_apply_damage ]]( item_dmg, 0 ); + return 0; + } + } + } + } + + if ( sweapon == "tower_trap_zm" || sweapon == "tower_trap_upgraded_zm" || sweapon == "none" && shitloc == "riotshield" && !( isdefined( eattacker.is_zombie ) && eattacker.is_zombie ) ) + { + self.use_adjusted_grenade_damage = 1; + return 0; + } + + if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) + { + if ( sweapon == "blundersplat_explosive_dart_zm" ) + { + if ( self hasperk( "specialty_flakjacket" ) ) + { + self.use_adjusted_grenade_damage = 1; + idamage = 0; + } + + if ( isalive( self ) && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + { + self.use_adjusted_grenade_damage = 1; + idamage = 10; + } + } + else + { + if ( self hasperk( "specialty_flakjacket" ) ) + return 0; + + if ( self.health > 75 && !( isdefined( self.is_zombie ) && self.is_zombie ) ) + idamage = 75; + } + } + + if ( idamage >= self.health && ( isdefined( level.intermission ) && !level.intermission ) ) + { + if ( self.lives > 0 && ( isdefined( self.afterlife ) && !self.afterlife ) ) + { + self playsoundtoplayer( "zmb_afterlife_death", self ); + self afterlife_remove(); + self.afterlife = 1; + self thread afterlife_laststand(); + + if ( self.health <= 1 ) + return 0; + else + idamage = self.health - 1; + } + else + self thread last_stand_conscience_vo(); + } + + return idamage; } afterlife_enter() { - if ( !isDefined( self.afterlife_visionset ) || self.afterlife_visionset == 0 ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_afterlife", self ); - if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) - { - maps/mp/_visionset_mgr::vsmgr_activate( "overlay", "zm_afterlife_filter", self ); - } - self.afterlife_visionset = 1; - } - self enableafterlife(); - self.str_living_model = self.model; - self.str_living_view = self getviewmodel(); - self setmodel( "c_zom_hero_ghost_fb" ); - self setviewmodel( "c_zom_ghost_viewhands" ); - self thread afterlife_doors_open(); - self setclientfieldtoplayer( "player_in_afterlife", 1 ); - self setclientfield( "player_afterlife_fx", 1 ); - self afterlife_create_mana_bar( self.e_afterlife_corpse ); - if ( !isDefined( self.keep_perks ) && flag( "afterlife_start_over" ) ) - { - self increment_downed_stat(); - } - a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); - _a534 = a_afterlife_triggers; - _k534 = getFirstArrayKey( _a534 ); - while ( isDefined( _k534 ) ) - { - struct = _a534[ _k534 ]; - struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - _k534 = getNextArrayKey( _a534, _k534 ); - } - a_exterior_goals = getstructarray( "exterior_goal", "targetname" ); - _a541 = a_exterior_goals; - _k541 = getFirstArrayKey( _a541 ); - while ( isDefined( _k541 ) ) - { - struct = _a541[ _k541 ]; - if ( isDefined( struct.unitrigger_stub ) ) - { - struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - } - _k541 = getNextArrayKey( _a541, _k541 ); - } + if ( !isdefined( self.afterlife_visionset ) || self.afterlife_visionset == 0 ) + { + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_afterlife", self ); + + if ( isdefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) + maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_afterlife_filter", self ); + + self.afterlife_visionset = 1; + } + + self enableafterlife(); + self.str_living_model = self.model; + self.str_living_view = self getviewmodel(); + self setmodel( "c_zom_hero_ghost_fb" ); + self setviewmodel( "c_zom_ghost_viewhands" ); + self thread afterlife_doors_open(); + self setclientfieldtoplayer( "player_in_afterlife", 1 ); + self setclientfield( "player_afterlife_fx", 1 ); + self afterlife_create_mana_bar( self.e_afterlife_corpse ); + + if ( !isdefined( self.keep_perks ) && flag( "afterlife_start_over" ) ) + self increment_downed_stat(); + + a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); + + foreach ( struct in a_afterlife_triggers ) + struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + + a_exterior_goals = getstructarray( "exterior_goal", "targetname" ); + + foreach ( struct in a_exterior_goals ) + { + if ( isdefined( struct.unitrigger_stub ) ) + struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + } } afterlife_leave( b_revived ) { - if ( !isDefined( b_revived ) ) - { - b_revived = 1; - } - self clientnotify( "al_t" ); - if ( isDefined( self.afterlife_visionset ) && self.afterlife_visionset ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_afterlife", self ); - if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) - { - maps/mp/_visionset_mgr::vsmgr_deactivate( "overlay", "zm_afterlife_filter", self ); - } - self.afterlife_visionset = 0; - } - self disableafterlife(); - self.dontspeak = 0; - self thread afterlife_doors_close(); - self.health = self.maxhealth; - self setclientfieldtoplayer( "player_in_afterlife", 0 ); - self setclientfield( "player_afterlife_fx", 0 ); - self setclientfieldtoplayer( "clientfield_afterlife_audio", 0 ); - self maps/mp/zombies/_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); - self allowstand( 1 ); - self allowcrouch( 1 ); - self allowprone( 1 ); - self setmodel( self.str_living_model ); - self setviewmodel( self.str_living_view ); - if ( self.e_afterlife_corpse.revivetrigger.origin != self.e_afterlife_corpse.origin ) - { - self setorigin( self.e_afterlife_corpse.revivetrigger.origin ); - } - else - { - self setorigin( self.e_afterlife_corpse.origin ); - } - while ( isDefined( level.e_gondola ) ) - { - a_gondola_doors_gates = get_gondola_doors_and_gates(); - i = 0; - while ( i < a_gondola_doors_gates.size ) - { - if ( self.e_afterlife_corpse istouching( a_gondola_doors_gates[ i ] ) ) - { - if ( isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) - { - str_location = level.e_gondola.destination; - } - else - { - str_location = level.e_gondola.location; - } - a_s_orgs = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" ); - _a617 = a_s_orgs; - _k617 = getFirstArrayKey( _a617 ); - while ( isDefined( _k617 ) ) - { - struct = _a617[ _k617 ]; - if ( !positionwouldtelefrag( struct.origin ) ) - { - self setorigin( struct.origin ); - break; - } - else - { - _k617 = getNextArrayKey( _a617, _k617 ); - } - } - } - else i++; - } - } - self setplayerangles( self.e_afterlife_corpse.angles ); - self.afterlife = 0; - self afterlife_laststand_cleanup( self.e_afterlife_corpse ); - if ( isDefined( b_revived ) && !b_revived ) - { - self afterlife_remove( 1 ); - self dodamage( 1000, self.origin ); - } - reset_all_afterlife_unitriggers(); + if ( !isdefined( b_revived ) ) + b_revived = 1; + + while ( self ismantling() ) + wait 0.05; + + self clientnotify( "al_t" ); + + if ( isdefined( self.afterlife_visionset ) && self.afterlife_visionset ) + { + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_afterlife", self ); + + if ( isdefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen ) + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_afterlife_filter", self ); + + self.afterlife_visionset = 0; + } + + self disableafterlife(); + self.dontspeak = 0; + self thread afterlife_doors_close(); + self.health = self.maxhealth; + self setclientfieldtoplayer( "player_in_afterlife", 0 ); + self setclientfield( "player_afterlife_fx", 0 ); + self setclientfieldtoplayer( "clientfield_afterlife_audio", 0 ); + self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( "health_reboot", 1, 0 ); + self allowstand( 1 ); + self allowcrouch( 1 ); + self allowprone( 1 ); + self setmodel( self.str_living_model ); + self setviewmodel( self.str_living_view ); + + if ( self.e_afterlife_corpse.revivetrigger.origin != self.e_afterlife_corpse.origin ) + self setorigin( self.e_afterlife_corpse.revivetrigger.origin ); + else + self setorigin( self.e_afterlife_corpse.origin ); + + if ( isdefined( level.e_gondola ) ) + { + a_gondola_doors_gates = get_gondola_doors_and_gates(); + + for ( i = 0; i < a_gondola_doors_gates.size; i++ ) + { + if ( self.e_afterlife_corpse istouching( a_gondola_doors_gates[i] ) ) + { + if ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) + str_location = level.e_gondola.destination; + else + str_location = level.e_gondola.location; + + a_s_orgs = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" ); + + foreach ( struct in a_s_orgs ) + { + if ( !positionwouldtelefrag( struct.origin ) ) + { + self setorigin( struct.origin ); + break; + } + } + + break; + } + } + + if ( self.e_afterlife_corpse islinkedto( level.e_gondola ) && ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) ) + self.is_on_gondola = 1; + } + + self setplayerangles( self.e_afterlife_corpse.angles ); + self.afterlife = 0; + self afterlife_laststand_cleanup( self.e_afterlife_corpse ); + + if ( isdefined( b_revived ) && !b_revived ) + { + self afterlife_remove( 1 ); + self dodamage( 1000, self.origin ); + } + + reset_all_afterlife_unitriggers(); } afterlife_laststand( b_electric_chair ) { - if ( !isDefined( b_electric_chair ) ) - { - b_electric_chair = 0; - } - self endon( "disconnect" ); - self endon( "afterlife_bleedout" ); - level endon( "end_game" ); - if ( isDefined( level.afterlife_laststand_override ) ) - { - self thread [[ level.afterlife_laststand_override ]]( b_electric_chair ); - return; - } - self.dontspeak = 1; - self.health = 1000; - b_has_electric_cherry = 0; - if ( self hasperk( "specialty_grenadepulldeath" ) ) - { - b_has_electric_cherry = 1; - } - self [[ level.afterlife_save_loadout ]](); - self afterlife_fake_death(); - if ( isDefined( b_electric_chair ) && !b_electric_chair ) - { - wait 1; - } - if ( isDefined( b_has_electric_cherry ) && b_has_electric_cherry && isDefined( b_electric_chair ) && !b_electric_chair ) - { - self maps/mp/zombies/_zm_perk_electric_cherry::electric_cherry_laststand(); - wait 2; - } - self setclientfieldtoplayer( "clientfield_afterlife_audio", 1 ); - if ( flag( "afterlife_start_over" ) ) - { - self clientnotify( "al_t" ); - wait 1; - self thread fadetoblackforxsec( 0, 1, 0,5, 0,5, "white" ); - wait 0,5; - } - self ghost(); - self.e_afterlife_corpse = self afterlife_spawn_corpse(); - self thread afterlife_clean_up_on_disconnect(); - self notify( "player_fake_corpse_created" ); - self afterlife_fake_revive(); - self afterlife_enter(); - self.e_afterlife_corpse setclientfield( "player_corpse_id", self getentitynumber() + 1 ); - wait 0,5; - self show(); - if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen ) - { - self freezecontrols( 0 ); - } - self disableinvulnerability(); - self.e_afterlife_corpse waittill( "player_revived", e_reviver ); - self notify( "player_revived" ); - self seteverhadweaponall( 1 ); - self enableinvulnerability(); - self.afterlife_revived = 1; - playsoundatposition( "zmb_afterlife_spawn_leave", self.e_afterlife_corpse.origin ); - self afterlife_leave(); - self thread afterlife_revive_invincible(); - self playsound( "zmb_afterlife_revived_gasp" ); + if ( !isdefined( b_electric_chair ) ) + b_electric_chair = 0; + + self endon( "disconnect" ); + self endon( "afterlife_bleedout" ); + level endon( "end_game" ); + + if ( isdefined( level.afterlife_laststand_override ) ) + { + self thread [[ level.afterlife_laststand_override ]]( b_electric_chair ); + return; + } + + self.dontspeak = 1; + self.health = 1000; + b_has_electric_cherry = 0; + + if ( self hasperk( "specialty_grenadepulldeath" ) ) + b_has_electric_cherry = 1; + + self [[ level.afterlife_save_loadout ]](); + self afterlife_fake_death(); + + if ( isdefined( b_electric_chair ) && !b_electric_chair ) + wait 1; + + if ( isdefined( b_has_electric_cherry ) && b_has_electric_cherry && ( isdefined( b_electric_chair ) && !b_electric_chair ) ) + { + self maps\mp\zombies\_zm_perk_electric_cherry::electric_cherry_laststand(); + wait 2; + } + + self setclientfieldtoplayer( "clientfield_afterlife_audio", 1 ); + + if ( flag( "afterlife_start_over" ) ) + { + self clientnotify( "al_t" ); + wait 1; + self thread fadetoblackforxsec( 0, 1, 0.5, 0.5, "white" ); + wait 0.5; + } + + self ghost(); + self.e_afterlife_corpse = self afterlife_spawn_corpse(); + self thread afterlife_clean_up_on_disconnect(); + self notify( "player_fake_corpse_created" ); + self afterlife_fake_revive(); + self afterlife_enter(); + self.e_afterlife_corpse setclientfield( "player_corpse_id", self getentitynumber() + 1 ); + wait 0.5; + self show(); + + if ( !( isdefined( self.hostmigrationcontrolsfrozen ) && self.hostmigrationcontrolsfrozen ) ) + self freezecontrols( 0 ); + + self disableinvulnerability(); + + self.e_afterlife_corpse waittill( "player_revived", e_reviver ); + + self notify( "player_revived" ); + self seteverhadweaponall( 1 ); + self enableinvulnerability(); + self.afterlife_revived = 1; + playsoundatposition( "zmb_afterlife_spawn_leave", self.e_afterlife_corpse.origin ); + self afterlife_leave(); + self thread afterlife_revive_invincible(); + self playsound( "zmb_afterlife_revived_gasp" ); } afterlife_clean_up_on_disconnect() { - e_corpse = self.e_afterlife_corpse; - e_corpse endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( e_corpse.revivetrigger ) ) - { - e_corpse notify( "stop_revive_trigger" ); - e_corpse.revivetrigger delete(); - e_corpse.revivetrigger = undefined; - } - e_corpse setclientfield( "player_corpse_id", 0 ); - e_corpse notify( "disconnect" ); - wait_network_frame(); - wait_network_frame(); - e_corpse delete(); + e_corpse = self.e_afterlife_corpse; + e_corpse endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( e_corpse.revivetrigger ) ) + { + e_corpse notify( "stop_revive_trigger" ); + e_corpse.revivetrigger delete(); + e_corpse.revivetrigger = undefined; + } + + e_corpse setclientfield( "player_corpse_id", 0 ); + e_corpse notify( "disconnect" ); + wait_network_frame(); + wait_network_frame(); + e_corpse delete(); } afterlife_revive_invincible() { - self endon( "disconnect" ); - wait 2; - self disableinvulnerability(); - self seteverhadweaponall( 0 ); - self.afterlife_revived = undefined; + self endon( "disconnect" ); + wait 2; + self disableinvulnerability(); + self seteverhadweaponall( 0 ); + self.afterlife_revived = undefined; } afterlife_laststand_cleanup( corpse ) { - self [[ level.afterlife_give_loadout ]](); - self afterlife_corpse_cleanup( corpse ); + self [[ level.afterlife_give_loadout ]](); + self thread afterlife_corpse_cleanup( corpse ); } afterlife_create_mana_bar( corpse ) { - if ( self.afterliferound == level.round_number ) - { - if ( !isDefined( self.keep_perks ) || self.afterlifedeaths == 0 ) - { - self.afterlifedeaths++; - } - } - else - { - self.afterliferound = level.round_number; - self.afterlifedeaths = 1; - } - self.manacur = 200; - self thread afterlife_mana_watch( corpse ); - self thread afterlife_lightning_watch( corpse ); - self thread afterlife_jump_watch( corpse ); + if ( self.afterliferound == level.round_number ) + { + if ( !isdefined( self.keep_perks ) || self.afterlifedeaths == 0 ) + self.afterlifedeaths++; + } + else + { + self.afterliferound = level.round_number; + self.afterlifedeaths = 1; + } + + self.manacur = 200; + self thread afterlife_mana_watch( corpse ); + self thread afterlife_lightning_watch( corpse ); + self thread afterlife_jump_watch( corpse ); } afterlife_infinite_mana( b_infinite ) { - if ( !isDefined( b_infinite ) ) - { - b_infinite = 1; - } - if ( isDefined( b_infinite ) && b_infinite ) - { - self.infinite_mana = 1; - } - else - { - self.infinite_mana = 0; - } + if ( !isdefined( b_infinite ) ) + b_infinite = 1; + + if ( isdefined( b_infinite ) && b_infinite ) + self.infinite_mana = 1; + else + self.infinite_mana = 0; } afterlife_mana_watch( corpse ) { - self endon( "disconnect" ); - corpse endon( "player_revived" ); - while ( self.manacur > 0 ) - { - wait 0,05; - self afterlife_reduce_mana( 0,05 * self.afterlifedeaths * 3 ); - if ( self.manacur < 0 ) - { - self.manacur = 0; - } - n_mapped_mana = linear_map( self.manacur, 0, 200, 0, 1 ); - self setclientfieldtoplayer( "player_afterlife_mana", n_mapped_mana ); - } - while ( isDefined( corpse.revivetrigger ) ) - { - while ( corpse.revivetrigger.beingrevived ) - { - wait 0,05; - } - } - corpse notify( "stop_revive_trigger" ); - self thread fadetoblackforxsec( 0, 0,5, 0,5, 0,5, "black" ); - wait 0,5; - self notify( "out_of_mana" ); - self afterlife_leave( 0 ); + self endon( "disconnect" ); + corpse endon( "player_revived" ); + + while ( self.manacur > 0 ) + { + wait 0.05; + self afterlife_reduce_mana( 0.05 * self.afterlifedeaths * 3 ); + + if ( self.manacur < 0 ) + self.manacur = 0; + + n_mapped_mana = linear_map( self.manacur, 0, 200, 0, 1 ); + self setclientfieldtoplayer( "player_afterlife_mana", n_mapped_mana ); + } + + if ( isdefined( corpse.revivetrigger ) ) + { + while ( corpse.revivetrigger.beingrevived ) + wait 0.05; + } + + corpse notify( "stop_revive_trigger" ); + self thread fadetoblackforxsec( 0, 0.5, 0.5, 0.5, "black" ); + wait 0.5; + self notify( "out_of_mana" ); + self afterlife_leave( 0 ); } afterlife_doors_open() { - n_network_sent = 0; - a_show = getentarray( "afterlife_show", "targetname" ); - a_show = arraycombine( a_show, getentarray( "afterlife_prop", "script_noteworthy" ), 0, 0 ); - _a888 = a_show; - _k888 = getFirstArrayKey( _a888 ); - while ( isDefined( _k888 ) ) - { - ent = _a888[ _k888 ]; - n_network_sent++; - if ( n_network_sent > 10 ) - { - n_network_sent = 0; - wait_network_frame(); - } - if ( isDefined( ent ) ) - { - ent setvisibletoplayer( self ); - } - _k888 = getNextArrayKey( _a888, _k888 ); - } - a_hide = getentarray( "afterlife_door", "targetname" ); - a_hide = arraycombine( a_hide, getentarray( "zombie_door", "targetname" ), 0, 0 ); - a_hide = arraycombine( a_hide, getentarray( "quest_trigger", "script_noteworthy" ), 0, 0 ); - a_hide = arraycombine( a_hide, getentarray( "trap_trigger", "script_noteworthy" ), 0, 0 ); - a_hide = arraycombine( a_hide, getentarray( "travel_trigger", "script_noteworthy" ), 0, 0 ); - _a907 = a_hide; - _k907 = getFirstArrayKey( _a907 ); - while ( isDefined( _k907 ) ) - { - ent = _a907[ _k907 ]; - n_network_sent++; - if ( n_network_sent > 10 ) - { - n_network_sent = 0; - wait_network_frame(); - } - if ( isDefined( ent ) ) - { - ent setinvisibletoplayer( self ); - } - _k907 = getNextArrayKey( _a907, _k907 ); - } - while ( isDefined( self.claymores ) ) - { - _a924 = self.claymores; - _k924 = getFirstArrayKey( _a924 ); - while ( isDefined( _k924 ) ) - { - claymore = _a924[ _k924 ]; - if ( isDefined( claymore.pickuptrigger ) ) - { - claymore.pickuptrigger setinvisibletoplayer( self ); - } - _k924 = getNextArrayKey( _a924, _k924 ); - } - } + n_network_sent = 0; + a_show = getentarray( "afterlife_show", "targetname" ); + a_show = arraycombine( a_show, getentarray( "afterlife_prop", "script_noteworthy" ), 0, 0 ); + + foreach ( ent in a_show ) + { + n_network_sent++; + + if ( n_network_sent > 10 ) + { + n_network_sent = 0; + wait_network_frame(); + } + + if ( isdefined( ent ) ) + ent setvisibletoplayer( self ); + } + + a_hide = getentarray( "afterlife_door", "targetname" ); + a_hide = arraycombine( a_hide, getentarray( "zombie_door", "targetname" ), 0, 0 ); + a_hide = arraycombine( a_hide, getentarray( "quest_trigger", "script_noteworthy" ), 0, 0 ); + a_hide = arraycombine( a_hide, getentarray( "trap_trigger", "script_noteworthy" ), 0, 0 ); + a_hide = arraycombine( a_hide, getentarray( "travel_trigger", "script_noteworthy" ), 0, 0 ); + + foreach ( ent in a_hide ) + { + n_network_sent++; + + if ( n_network_sent > 10 ) + { + n_network_sent = 0; + wait_network_frame(); + } + + if ( isdefined( ent ) ) + ent setinvisibletoplayer( self ); + } + + if ( isdefined( self.claymores ) ) + { + foreach ( claymore in self.claymores ) + { + if ( isdefined( claymore.pickuptrigger ) ) + claymore.pickuptrigger setinvisibletoplayer( self ); + } + } } afterlife_doors_close() { - n_network_sent = 0; - a_hide = getentarray( "afterlife_show", "targetname" ); - a_hide = arraycombine( a_hide, getentarray( "afterlife_prop", "script_noteworthy" ), 0, 0 ); - _a943 = a_hide; - _k943 = getFirstArrayKey( _a943 ); - while ( isDefined( _k943 ) ) - { - ent = _a943[ _k943 ]; - n_network_sent++; - if ( n_network_sent > 10 ) - { - n_network_sent = 0; - wait_network_frame(); - } - if ( isDefined( ent ) ) - { - ent setinvisibletoplayer( self ); - } - _k943 = getNextArrayKey( _a943, _k943 ); - } - a_show = getentarray( "afterlife_door", "targetname" ); - a_show = arraycombine( a_show, getentarray( "zombie_door", "targetname" ), 0, 0 ); - a_show = arraycombine( a_show, getentarray( "quest_trigger", "script_noteworthy" ), 0, 0 ); - a_show = arraycombine( a_show, getentarray( "trap_trigger", "script_noteworthy" ), 0, 0 ); - a_show = arraycombine( a_show, getentarray( "travel_trigger", "script_noteworthy" ), 0, 0 ); - _a962 = a_show; - _k962 = getFirstArrayKey( _a962 ); - while ( isDefined( _k962 ) ) - { - ent = _a962[ _k962 ]; - n_network_sent++; - if ( n_network_sent > 10 ) - { - n_network_sent = 0; - wait_network_frame(); - } - if ( isDefined( ent ) ) - { - ent setvisibletoplayer( self ); - } - _k962 = getNextArrayKey( _a962, _k962 ); - } - while ( isDefined( self.claymores ) ) - { - _a979 = self.claymores; - _k979 = getFirstArrayKey( _a979 ); - while ( isDefined( _k979 ) ) - { - claymore = _a979[ _k979 ]; - if ( isDefined( claymore.pickuptrigger ) ) - { - claymore.pickuptrigger setvisibletoplayer( self ); - } - _k979 = getNextArrayKey( _a979, _k979 ); - } - } + n_network_sent = 0; + a_hide = getentarray( "afterlife_show", "targetname" ); + a_hide = arraycombine( a_hide, getentarray( "afterlife_prop", "script_noteworthy" ), 0, 0 ); + + foreach ( ent in a_hide ) + { + n_network_sent++; + + if ( n_network_sent > 10 ) + { + n_network_sent = 0; + wait_network_frame(); + } + + if ( isdefined( ent ) ) + ent setinvisibletoplayer( self ); + } + + a_show = getentarray( "afterlife_door", "targetname" ); + a_show = arraycombine( a_show, getentarray( "zombie_door", "targetname" ), 0, 0 ); + a_show = arraycombine( a_show, getentarray( "quest_trigger", "script_noteworthy" ), 0, 0 ); + a_show = arraycombine( a_show, getentarray( "trap_trigger", "script_noteworthy" ), 0, 0 ); + a_show = arraycombine( a_show, getentarray( "travel_trigger", "script_noteworthy" ), 0, 0 ); + + foreach ( ent in a_show ) + { + n_network_sent++; + + if ( n_network_sent > 10 ) + { + n_network_sent = 0; + wait_network_frame(); + } + + if ( isdefined( ent ) ) + ent setvisibletoplayer( self ); + } + + if ( isdefined( self.claymores ) ) + { + foreach ( claymore in self.claymores ) + { + if ( isdefined( claymore.pickuptrigger ) ) + claymore.pickuptrigger setvisibletoplayer( self ); + } + } } afterlife_corpse_cleanup( corpse ) { - playsoundatposition( "zmb_afterlife_revived", corpse.origin ); - if ( isDefined( corpse.revivetrigger ) ) - { - corpse notify( "stop_revive_trigger" ); - corpse.revivetrigger delete(); - corpse.revivetrigger = undefined; - } - corpse setclientfield( "player_corpse_id", 0 ); - corpse afterlife_corpse_remove_pois(); - wait_network_frame(); - wait_network_frame(); - corpse delete(); - self.e_afterlife_corpse = undefined; + playsoundatposition( "zmb_afterlife_revived", corpse.origin ); + + if ( isdefined( corpse.revivetrigger ) ) + { + corpse notify( "stop_revive_trigger" ); + corpse.revivetrigger delete(); + corpse.revivetrigger = undefined; + } + + self.e_afterlife_corpse = undefined; + corpse setclientfield( "player_corpse_id", 0 ); + corpse afterlife_corpse_remove_pois(); + corpse ghost(); + self.loadout = undefined; + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + corpse delete(); +} + +is_weapon_available_in_afterlife_corpse( weapon, player_to_check ) +{ + count = 0; + upgradedweapon = weapon; + + if ( isdefined( level.zombie_weapons[weapon] ) && isdefined( level.zombie_weapons[weapon].upgrade_name ) ) + upgradedweapon = level.zombie_weapons[weapon].upgrade_name; + + players = getplayers(); + + if ( isdefined( players ) ) + { + for ( player_index = 0; player_index < players.size; player_index++ ) + { + player = players[player_index]; + + if ( isdefined( player_to_check ) && player != player_to_check ) + continue; + + if ( isdefined( player.loadout ) && isdefined( player.loadout.weapons ) ) + { + for ( i = 0; i < player.loadout.weapons.size; i++ ) + { + afterlife_weapon = player.loadout.weapons[i]; + + if ( isdefined( afterlife_weapon ) && ( afterlife_weapon == weapon || afterlife_weapon == upgradedweapon ) ) + count++; + } + } + } + } + + return count; } afterlife_spawn_corpse() { - if ( isDefined( self.is_on_gondola ) && self.is_on_gondola && level.e_gondola.destination == "roof" ) - { - corpse = maps/mp/zombies/_zm_clone::spawn_player_clone( self, self.origin, undefined ); - } - else - { - trace_start = self.origin; - trace_end = self.origin + vectorScale( ( 0, 0, 1 ), 500 ); - corpse_trace = playerphysicstrace( trace_start, trace_end ); - corpse = maps/mp/zombies/_zm_clone::spawn_player_clone( self, corpse_trace, undefined ); - } - corpse.angles = self.angles; - corpse.ignoreme = 1; - corpse maps/mp/zombies/_zm_clone::clone_give_weapon( "m1911_zm" ); - corpse maps/mp/zombies/_zm_clone::clone_animate( "afterlife" ); - corpse.revive_hud = self afterlife_revive_hud_create(); - corpse thread afterlife_revive_trigger_spawn(); - if ( flag( "solo_game" ) ) - { - corpse thread afterlife_corpse_create_pois(); - } - return corpse; + if ( isdefined( self.is_on_gondola ) && self.is_on_gondola && level.e_gondola.destination == "roof" ) + corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, self.origin, undefined ); + else + { + trace_start = self.origin; + trace_end = self.origin + vectorscale( ( 0, 0, -1 ), 500.0 ); + corpse_trace = playerphysicstrace( trace_start, trace_end ); + corpse = maps\mp\zombies\_zm_clone::spawn_player_clone( self, corpse_trace, undefined ); + } + + corpse.angles = self.angles; + corpse.ignoreme = 1; + corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" ); + corpse maps\mp\zombies\_zm_clone::clone_animate( "afterlife" ); + corpse.revive_hud = self afterlife_revive_hud_create(); + corpse thread afterlife_revive_trigger_spawn(); + + if ( flag( "solo_game" ) ) + corpse thread afterlife_corpse_create_pois(); + + return corpse; } afterlife_corpse_create_pois() { - n_attractors = ceil( get_current_zombie_count() / 3 ); - if ( n_attractors < 4 ) - { - n_attractors = 4; - } - a_nodes = afterlife_corpse_get_array_poi_positions(); - self.pois = []; - while ( isDefined( a_nodes ) && a_nodes.size > 3 ) - { - i = 0; - while ( i < 3 ) - { - self.pois[ i ] = afterlife_corpse_create_poi( a_nodes[ i ].origin, n_attractors ); - wait 0,05; - i++; - } - } + n_attractors = ceil( get_current_zombie_count() / 3 ); + + if ( n_attractors < 4 ) + n_attractors = 4; + + a_nodes = afterlife_corpse_get_array_poi_positions(); + self.pois = []; + + if ( isdefined( a_nodes ) && a_nodes.size > 3 ) + { + for ( i = 0; i < 3; i++ ) + { + self.pois[i] = afterlife_corpse_create_poi( a_nodes[i].origin, n_attractors ); + wait 0.05; + } + } } afterlife_corpse_create_poi( v_origin, n_attractors ) { - e_poi = spawn( "script_origin", v_origin ); - e_poi create_zombie_point_of_interest( 10000, 24, 5000, 1 ); - e_poi thread create_zombie_point_of_interest_attractor_positions(); + e_poi = spawn( "script_origin", v_origin ); + e_poi create_zombie_point_of_interest( 10000, 24, 5000, 1 ); + e_poi thread create_zombie_point_of_interest_attractor_positions(); /# - e_poi thread print3d_ent( "Corpse POI" ); + e_poi thread print3d_ent( "Corpse POI" ); #/ - return e_poi; + return e_poi; } afterlife_corpse_remove_pois() { - if ( !isDefined( self.pois ) ) - { - return; - } - i = 0; - while ( i < self.pois.size ) - { - remove_poi_attractor( self.pois[ i ] ); - self.pois[ i ] delete(); - i++; - } - self.pois = undefined; + if ( !isdefined( self.pois ) ) + return; + + for ( i = 0; i < self.pois.size; i++ ) + { + remove_poi_attractor( self.pois[i] ); + self.pois[i] delete(); + } + + self.pois = undefined; } afterlife_corpse_get_array_poi_positions() { - n_ideal_dist_sq = 490000; - a_nodes = getanynodearray( self.origin, 1200 ); - i = 0; - while ( i < a_nodes.size ) - { - if ( !a_nodes[ i ] is_valid_teleport_node() ) - { - } - i++; - } - a_nodes = remove_undefined_from_array( a_nodes ); - return array_randomize( a_nodes ); + n_ideal_dist_sq = 490000; + a_nodes = getanynodearray( self.origin, 1200 ); + + for ( i = 0; i < a_nodes.size; i++ ) + { + if ( !a_nodes[i] is_valid_teleport_node() ) + a_nodes[i] = undefined; + } + + a_nodes = remove_undefined_from_array( a_nodes ); + return array_randomize( a_nodes ); } afterlife_revive_hud_create() { - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.y = -160; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1,5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 0, 0, 1 ); - self.revive_hud.hidewheninmenu = 1; - self.revive_hud settext( "" ); - return self.revive_hud; + self.revive_hud = newclienthudelem( self ); + self.revive_hud.alignx = "center"; + self.revive_hud.aligny = "middle"; + self.revive_hud.horzalign = "center"; + self.revive_hud.vertalign = "bottom"; + self.revive_hud.y = -160; + self.revive_hud.foreground = 1; + self.revive_hud.font = "default"; + self.revive_hud.fontscale = 1.5; + self.revive_hud.alpha = 0; + self.revive_hud.color = ( 1, 1, 1 ); + self.revive_hud.hidewheninmenu = 1; + self.revive_hud settext( "" ); + return self.revive_hud; } afterlife_revive_trigger_spawn() { - radius = getDvarInt( "revive_trigger_radius" ); - self.revivetrigger = spawn( "trigger_radius", ( 0, 0, 1 ), 0, radius, radius ); - self.revivetrigger sethintstring( "" ); - self.revivetrigger setcursorhint( "HINT_NOICON" ); - self.revivetrigger setmovingplatformenabled( 1 ); - self.revivetrigger enablelinkto(); - self.revivetrigger.origin = self.origin; - self.revivetrigger linkto( self ); - self.revivetrigger.beingrevived = 0; - self.revivetrigger.createtime = getTime(); - self thread afterlife_revive_trigger_think(); + radius = getdvarint( _hash_A17166B0 ); + self.revivetrigger = spawn( "trigger_radius", ( 0, 0, 0 ), 0, radius, radius ); + self.revivetrigger sethintstring( "" ); + self.revivetrigger setcursorhint( "HINT_NOICON" ); + self.revivetrigger setmovingplatformenabled( 1 ); + self.revivetrigger enablelinkto(); + self.revivetrigger.origin = self.origin; + self.revivetrigger linkto( self ); + self.revivetrigger.beingrevived = 0; + self.revivetrigger.createtime = gettime(); + self thread afterlife_revive_trigger_think(); } afterlife_revive_trigger_think() { - self endon( "disconnect" ); - self endon( "stop_revive_trigger" ); - self endon( "death" ); - wait 1; - while ( 1 ) - { - wait 0,1; - self.revivetrigger sethintstring( "" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] afterlife_can_revive( self ) ) - { - self.revivetrigger setrevivehintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER", self.team ); - break; - } - else - { - i++; - } - } - i = 0; - while ( i < players.size ) - { - reviver = players[ i ]; - if ( self == reviver || !reviver is_reviving_afterlife( self ) ) - { - i++; - continue; - } - else - { - gun = reviver getcurrentweapon(); + self endon( "disconnect" ); + self endon( "stop_revive_trigger" ); + self endon( "death" ); + wait 1; + + while ( true ) + { + wait 0.1; + self.revivetrigger sethintstring( "" ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] afterlife_can_revive( self ) ) + { + self.revivetrigger setrevivehintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER", self.team ); + break; + } + } + + for ( i = 0; i < players.size; i++ ) + { + reviver = players[i]; + + if ( self == reviver || !reviver is_reviving_afterlife( self ) ) + continue; + + gun = reviver getcurrentweapon(); /# - assert( isDefined( gun ) ); + assert( isdefined( gun ) ); #/ - if ( gun == level.revive_tool || gun == level.afterlife_revive_tool ) - { - i++; - continue; - } - else - { - if ( isDefined( reviver.afterlife ) && reviver.afterlife ) - { - reviver giveweapon( level.afterlife_revive_tool ); - reviver switchtoweapon( level.afterlife_revive_tool ); - reviver setweaponammostock( level.afterlife_revive_tool, 1 ); - } - else - { - reviver giveweapon( level.revive_tool ); - reviver switchtoweapon( level.revive_tool ); - reviver setweaponammostock( level.revive_tool, 1 ); - } - revive_success = reviver afterlife_revive_do_revive( self, gun ); - reviver revive_give_back_weapons( gun ); - if ( isplayer( self ) ) - { - self allowjump( 1 ); - } - self.laststand = undefined; - if ( revive_success ) - { - self thread revive_success( reviver ); - self cleanup_suicide_hud(); - return; - } - } - } - i++; - } - } + if ( gun == level.revive_tool || gun == level.afterlife_revive_tool ) + continue; + + if ( isdefined( reviver.afterlife ) && reviver.afterlife ) + { + reviver giveweapon( level.afterlife_revive_tool ); + reviver switchtoweapon( level.afterlife_revive_tool ); + reviver setweaponammostock( level.afterlife_revive_tool, 1 ); + } + else + { + reviver giveweapon( level.revive_tool ); + reviver switchtoweapon( level.revive_tool ); + reviver setweaponammostock( level.revive_tool, 1 ); + } + + revive_success = reviver afterlife_revive_do_revive( self, gun ); + reviver revive_give_back_weapons( gun ); + + if ( isplayer( self ) ) + self allowjump( 1 ); + + self.laststand = undefined; + + if ( revive_success ) + { + self thread revive_success( reviver ); + self cleanup_suicide_hud(); + return; + } + } + } } afterlife_can_revive( revivee ) { - if ( isDefined( self.afterlife ) && self.afterlife && isDefined( self.e_afterlife_corpse ) && self.e_afterlife_corpse != revivee ) - { - return 0; - } - if ( !isDefined( revivee.revivetrigger ) ) - { - return 0; - } - if ( !isalive( self ) ) - { - return 0; - } - if ( self player_is_in_laststand() ) - { - return 0; - } - if ( self.team != revivee.team ) - { - return 0; - } - if ( self has_powerup_weapon() ) - { - return 0; - } - ignore_sight_checks = 0; - ignore_touch_checks = 0; - if ( isDefined( level.revive_trigger_should_ignore_sight_checks ) ) - { - ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); - if ( ignore_sight_checks && isDefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) - { - ignore_touch_checks = 1; - } - } - if ( !ignore_touch_checks ) - { - if ( !self istouching( revivee.revivetrigger ) ) - { - return 0; - } - } - if ( !ignore_sight_checks ) - { - if ( !self is_facing( revivee ) ) - { - return 0; - } - if ( !sighttracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 50 ), revivee.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, undefined ) ) - { - return 0; - } - } - return 1; + if ( isdefined( self.afterlife ) && self.afterlife && isdefined( self.e_afterlife_corpse ) && self.e_afterlife_corpse != revivee ) + return false; + + if ( !isdefined( revivee.revivetrigger ) ) + return false; + + if ( !isalive( self ) ) + return false; + + if ( self player_is_in_laststand() ) + return false; + + if ( self.team != revivee.team ) + return false; + + if ( self has_powerup_weapon() ) + return false; + + ignore_sight_checks = 0; + ignore_touch_checks = 0; + + if ( isdefined( level.revive_trigger_should_ignore_sight_checks ) ) + { + ignore_sight_checks = [[ level.revive_trigger_should_ignore_sight_checks ]]( self ); + + if ( ignore_sight_checks && isdefined( revivee.revivetrigger.beingrevived ) && revivee.revivetrigger.beingrevived == 1 ) + ignore_touch_checks = 1; + } + + if ( !ignore_touch_checks ) + { + if ( !self istouching( revivee.revivetrigger ) ) + return false; + } + + if ( !ignore_sight_checks ) + { + if ( !self is_facing( revivee ) ) + return false; + + if ( !sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), revivee.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), 0, undefined ) ) + return false; + } + + return true; } afterlife_revive_do_revive( playerbeingrevived, revivergun ) { /# - assert( self is_reviving_afterlife( playerbeingrevived ) ); + assert( self is_reviving_afterlife( playerbeingrevived ) ); #/ - revivetime = 3; - playloop = 0; - if ( isDefined( self.afterlife ) && self.afterlife ) - { - playloop = 1; - revivetime = 1; - } - timer = 0; - revived = 0; - playerbeingrevived.revivetrigger.beingrevived = 1; - playerbeingrevived.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", self ); - playerbeingrevived revive_hud_show_n_fade( 3 ); - playerbeingrevived.revivetrigger sethintstring( "" ); - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived startrevive( self ); - } - if ( !isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar = self createprimaryprogressbar(); - } - if ( !isDefined( self.revivetexthud ) ) - { - self.revivetexthud = newclienthudelem( self ); - } - self thread revive_clean_up_on_gameover(); - self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); - if ( !isDefined( self.is_reviving_any ) ) - { - self.is_reviving_any = 0; - } - self.is_reviving_any++; - self thread laststand_clean_up_reviving_any( playerbeingrevived ); - self.reviveprogressbar updatebar( 0,01, 1 / revivetime ); - self.revivetexthud.alignx = "center"; - self.revivetexthud.aligny = "middle"; - self.revivetexthud.horzalign = "center"; - self.revivetexthud.vertalign = "bottom"; - self.revivetexthud.y = -113; - if ( self issplitscreen() ) - { - self.revivetexthud.y = -347; - } - self.revivetexthud.foreground = 1; - self.revivetexthud.font = "default"; - self.revivetexthud.fontscale = 1,8; - self.revivetexthud.alpha = 1; - self.revivetexthud.color = ( 0, 0, 1 ); - self.revivetexthud.hidewheninmenu = 1; - if ( isDefined( self.pers_upgrades_awarded[ "revive" ] ) && self.pers_upgrades_awarded[ "revive" ] ) - { - self.revivetexthud.color = ( 0,5, 0,5, 1 ); - } - self.revivetexthud settext( &"GAME_REVIVING" ); - self thread check_for_failed_revive( playerbeingrevived ); - e_fx = spawn( "script_model", playerbeingrevived.revivetrigger.origin ); - e_fx setmodel( "tag_origin" ); - e_fx thread revive_fx_clean_up_on_disconnect( playerbeingrevived ); - playfxontag( level._effect[ "afterlife_leave" ], e_fx, "tag_origin" ); - if ( isDefined( playloop ) && playloop ) - { - e_fx playloopsound( "zmb_afterlife_reviving", 0,05 ); - } - while ( self is_reviving_afterlife( playerbeingrevived ) ) - { - wait 0,05; - timer += 0,05; - if ( self player_is_in_laststand() ) - { - break; - } - else if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - break; - } - else - { - if ( timer >= revivetime ) - { - revived = 1; - break; - } - else - { - } - } - } - e_fx delete(); - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } - if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) - { - } - else if ( !revived ) - { - if ( isplayer( playerbeingrevived ) ) - { - playerbeingrevived stoprevive( self ); - } - } - playerbeingrevived.revivetrigger sethintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER" ); - playerbeingrevived.revivetrigger.beingrevived = 0; - self notify( "do_revive_ended_normally" ); - self.is_reviving_any--; + revivetime = 3; + playloop = 0; - if ( !revived ) - { - playerbeingrevived thread checkforbleedout( self ); - } - return revived; + if ( isdefined( self.afterlife ) && self.afterlife ) + { + playloop = 1; + revivetime = 1; + } + + timer = 0; + revived = 0; + playerbeingrevived.revivetrigger.beingrevived = 1; + playerbeingrevived.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", self ); + playerbeingrevived revive_hud_show_n_fade( 3.0 ); + playerbeingrevived.revivetrigger sethintstring( "" ); + + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived startrevive( self ); + + if ( !isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar = self createprimaryprogressbar(); + + if ( !isdefined( self.revivetexthud ) ) + self.revivetexthud = newclienthudelem( self ); + + self thread revive_clean_up_on_gameover(); + self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); + + if ( !isdefined( self.is_reviving_any ) ) + self.is_reviving_any = 0; + + self.is_reviving_any++; + self thread laststand_clean_up_reviving_any( playerbeingrevived ); + self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); + self.revivetexthud.alignx = "center"; + self.revivetexthud.aligny = "middle"; + self.revivetexthud.horzalign = "center"; + self.revivetexthud.vertalign = "bottom"; + self.revivetexthud.y = -113; + + if ( self issplitscreen() ) + self.revivetexthud.y = -347; + + self.revivetexthud.foreground = 1; + self.revivetexthud.font = "default"; + self.revivetexthud.fontscale = 1.8; + self.revivetexthud.alpha = 1; + self.revivetexthud.color = ( 1, 1, 1 ); + self.revivetexthud.hidewheninmenu = 1; + + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) + self.revivetexthud.color = ( 0.5, 0.5, 1.0 ); + + self.revivetexthud settext( &"GAME_REVIVING" ); + self thread check_for_failed_revive( playerbeingrevived ); + e_fx = spawn( "script_model", playerbeingrevived.revivetrigger.origin ); + e_fx setmodel( "tag_origin" ); + e_fx thread revive_fx_clean_up_on_disconnect( playerbeingrevived ); + playfxontag( level._effect["afterlife_leave"], e_fx, "tag_origin" ); + + if ( isdefined( playloop ) && playloop ) + e_fx playloopsound( "zmb_afterlife_reviving", 0.05 ); + + while ( self is_reviving_afterlife( playerbeingrevived ) ) + { + wait 0.05; + timer += 0.05; + + if ( self player_is_in_laststand() ) + break; + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + break; + + if ( timer >= revivetime ) + { + revived = 1; + break; + } + } + + e_fx delete(); + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + { + + } + else if ( !revived ) + { + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived stoprevive( self ); + } + + playerbeingrevived.revivetrigger sethintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER" ); + playerbeingrevived.revivetrigger.beingrevived = 0; + self notify( "do_revive_ended_normally" ); + self.is_reviving_any--; + + if ( !revived ) + playerbeingrevived thread checkforbleedout( self ); + + return revived; } revive_fx_clean_up_on_disconnect( e_corpse ) { - self endon( "death" ); - e_corpse waittill( "disconnect" ); - self delete(); + self endon( "death" ); + + e_corpse waittill( "disconnect" ); + + self delete(); } revive_clean_up_on_gameover() { - self endon( "do_revive_ended_normally" ); - level waittill( "end_game" ); - if ( isDefined( self.reviveprogressbar ) ) - { - self.reviveprogressbar destroyelem(); - } - if ( isDefined( self.revivetexthud ) ) - { - self.revivetexthud destroy(); - } + self endon( "do_revive_ended_normally" ); + + level waittill( "end_game" ); + + if ( isdefined( self.reviveprogressbar ) ) + self.reviveprogressbar destroyelem(); + + if ( isdefined( self.revivetexthud ) ) + self.revivetexthud destroy(); } is_reviving_afterlife( revivee ) { - if ( self usebuttonpressed() ) - { - return afterlife_can_revive( revivee ); - } + return self usebuttonpressed() && afterlife_can_revive( revivee ); } afterlife_save_loadout() { - primaries = self getweaponslistprimaries(); - currentweapon = self getcurrentweapon(); - self.loadout = spawnstruct(); - self.loadout.player = self; - self.loadout.weapons = []; - self.loadout.score = self.score; - self.loadout.current_weapon = 0; - _a1516 = primaries; - index = getFirstArrayKey( _a1516 ); - while ( isDefined( index ) ) - { - weapon = _a1516[ index ]; - self.loadout.weapons[ index ] = weapon; - self.loadout.stockcount[ index ] = self getweaponammostock( weapon ); - self.loadout.clipcount[ index ] = self getweaponammoclip( weapon ); - if ( weaponisdualwield( weapon ) ) - { - weapon_dw = weapondualwieldweaponname( weapon ); - self.loadout.clipcount2[ index ] = self getweaponammoclip( weapon_dw ); - } - weapon_alt = weaponaltweaponname( weapon ); - if ( weapon_alt != "none" ) - { - self.loadout.stockcountalt[ index ] = self getweaponammostock( weapon_alt ); - self.loadout.clipcountalt[ index ] = self getweaponammoclip( weapon_alt ); - } - if ( weapon == currentweapon ) - { - self.loadout.current_weapon = index; - } - index = getNextArrayKey( _a1516, index ); - } - self.loadout.equipment = self get_player_equipment(); - if ( isDefined( self.loadout.equipment ) ) - { - self equipment_take( self.loadout.equipment ); - } - if ( self hasweapon( "claymore_zm" ) ) - { - self.loadout.hasclaymore = 1; - self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); - } - if ( self hasweapon( "emp_grenade_zm" ) ) - { - self.loadout.hasemp = 1; - self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); - } - if ( self hasweapon( "bouncing_tomahawk_zm" ) || self hasweapon( "upgraded_tomahawk_zm" ) ) - { - self.loadout.hastomahawk = 1; - self setclientfieldtoplayer( "tomahawk_in_use", 0 ); - } - self.loadout.perks = afterlife_save_perks( self ); - lethal_grenade = self get_player_lethal_grenade(); - if ( self hasweapon( lethal_grenade ) ) - { - self.loadout.grenade = self getweaponammoclip( lethal_grenade ); - } - else - { - self.loadout.grenade = 0; - } - self.loadout.lethal_grenade = lethal_grenade; - self set_player_lethal_grenade( undefined ); + primaries = self getweaponslistprimaries(); + currentweapon = self getcurrentweapon(); + self.loadout = spawnstruct(); + self.loadout.player = self; + self.loadout.weapons = []; + self.loadout.score = self.score; + self.loadout.current_weapon = 0; + + foreach ( index, weapon in primaries ) + { + self.loadout.weapons[index] = weapon; + self.loadout.stockcount[index] = self getweaponammostock( weapon ); + self.loadout.clipcount[index] = self getweaponammoclip( weapon ); + + if ( weaponisdualwield( weapon ) ) + { + weapon_dw = weapondualwieldweaponname( weapon ); + self.loadout.clipcount2[index] = self getweaponammoclip( weapon_dw ); + } + + weapon_alt = weaponaltweaponname( weapon ); + + if ( weapon_alt != "none" ) + { + self.loadout.stockcountalt[index] = self getweaponammostock( weapon_alt ); + self.loadout.clipcountalt[index] = self getweaponammoclip( weapon_alt ); + } + + if ( weapon == currentweapon ) + self.loadout.current_weapon = index; + } + + self.loadout.equipment = self get_player_equipment(); + + if ( isdefined( self.loadout.equipment ) ) + self equipment_take( self.loadout.equipment ); + + if ( self hasweapon( "claymore_zm" ) ) + { + self.loadout.hasclaymore = 1; + self.loadout.claymoreclip = self getweaponammoclip( "claymore_zm" ); + } + + if ( self hasweapon( "emp_grenade_zm" ) ) + { + self.loadout.hasemp = 1; + self.loadout.empclip = self getweaponammoclip( "emp_grenade_zm" ); + } + + if ( self hasweapon( "bouncing_tomahawk_zm" ) || self hasweapon( "upgraded_tomahawk_zm" ) ) + { + self.loadout.hastomahawk = 1; + self setclientfieldtoplayer( "tomahawk_in_use", 0 ); + } + + self.loadout.perks = afterlife_save_perks( self ); + lethal_grenade = self get_player_lethal_grenade(); + + if ( self hasweapon( lethal_grenade ) ) + self.loadout.grenade = self getweaponammoclip( lethal_grenade ); + else + self.loadout.grenade = 0; + + self.loadout.lethal_grenade = lethal_grenade; + self set_player_lethal_grenade( undefined ); } afterlife_give_loadout() { - self takeallweapons(); - loadout = self.loadout; - primaries = self getweaponslistprimaries(); - while ( loadout.weapons.size > 1 || primaries.size > 1 ) - { - _a1601 = primaries; - _k1601 = getFirstArrayKey( _a1601 ); - while ( isDefined( _k1601 ) ) - { - weapon = _a1601[ _k1601 ]; - self takeweapon( weapon ); - _k1601 = getNextArrayKey( _a1601, _k1601 ); - } - } - i = 0; - while ( i < loadout.weapons.size ) - { - if ( !isDefined( loadout.weapons[ i ] ) ) - { - i++; - continue; - } - else if ( loadout.weapons[ i ] == "none" ) - { - i++; - continue; - } - else - { - weapon = loadout.weapons[ i ]; - stock_amount = loadout.stockcount[ i ]; - clip_amount = loadout.clipcount[ i ]; - if ( !self hasweapon( weapon ) ) - { - self giveweapon( weapon, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); - self setweaponammostock( weapon, stock_amount ); - self setweaponammoclip( weapon, clip_amount ); - if ( weaponisdualwield( weapon ) ) - { - weapon_dw = weapondualwieldweaponname( weapon ); - self setweaponammoclip( weapon_dw, loadout.clipcount2[ i ] ); - } - weapon_alt = weaponaltweaponname( weapon ); - if ( weapon_alt != "none" ) - { - self setweaponammostock( weapon_alt, loadout.stockcountalt[ i ] ); - self setweaponammoclip( weapon_alt, loadout.clipcountalt[ i ] ); - } - } - } - i++; - } - self setspawnweapon( loadout.weapons[ loadout.current_weapon ] ); - self switchtoweaponimmediate( loadout.weapons[ loadout.current_weapon ] ); - if ( isDefined( self get_player_melee_weapon() ) ) - { - self giveweapon( self get_player_melee_weapon() ); - } - self maps/mp/zombies/_zm_equipment::equipment_give( self.loadout.equipment ); - if ( isDefined( loadout.hasclaymore ) && loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) - { - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammoclip( "claymore_zm", loadout.claymoreclip ); - } - if ( isDefined( loadout.hasemp ) && loadout.hasemp ) - { - self giveweapon( "emp_grenade_zm" ); - self setweaponammoclip( "emp_grenade_zm", loadout.empclip ); - } - if ( isDefined( loadout.hastomahawk ) && loadout.hastomahawk ) - { - self giveweapon( self.current_tomahawk_weapon ); - self set_player_tactical_grenade( self.current_tomahawk_weapon ); - self setclientfieldtoplayer( "tomahawk_in_use", 1 ); - } - self.score = loadout.score; - perk_array = maps/mp/zombies/_zm_perks::get_perk_array( 1 ); - i = 0; - while ( i < perk_array.size ) - { - perk = perk_array[ i ]; - self unsetperk( perk ); - self set_perk_clientfield( perk, 0 ); - i++; - } - while ( isDefined( self.keep_perks ) && self.keep_perks && isDefined( loadout.perks ) && loadout.perks.size > 0 ) - { - i = 0; - while ( i < loadout.perks.size ) - { - if ( self hasperk( loadout.perks[ i ] ) ) - { - i++; - continue; - } - else if ( loadout.perks[ i ] == "specialty_quickrevive" && flag( "solo_game" ) ) - { - level.solo_game_free_player_quickrevive = 1; - } - if ( loadout.perks[ i ] == "specialty_finalstand" ) - { - i++; - continue; - } - else - { - maps/mp/zombies/_zm_perks::give_perk( loadout.perks[ i ] ); - } - i++; - } - } - self.keep_perks = undefined; - self set_player_lethal_grenade( self.loadout.lethal_grenade ); - if ( loadout.grenade > 0 ) - { - curgrenadecount = 0; - if ( self hasweapon( self get_player_lethal_grenade() ) ) - { - self getweaponammoclip( self get_player_lethal_grenade() ); - } - else - { - self giveweapon( self get_player_lethal_grenade() ); - } - self setweaponammoclip( self get_player_lethal_grenade(), loadout.grenade + curgrenadecount ); - } + self takeallweapons(); + loadout = self.loadout; + primaries = self getweaponslistprimaries(); + + if ( loadout.weapons.size > 1 || primaries.size > 1 ) + { + foreach ( weapon in primaries ) + self takeweapon( weapon ); + } + + for ( i = 0; i < loadout.weapons.size; i++ ) + { + if ( !isdefined( loadout.weapons[i] ) ) + continue; + + if ( loadout.weapons[i] == "none" ) + continue; + + weapon = loadout.weapons[i]; + stock_amount = loadout.stockcount[i]; + clip_amount = loadout.clipcount[i]; + + if ( !self hasweapon( weapon ) ) + { + self giveweapon( weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( weapon ) ); + self setweaponammostock( weapon, stock_amount ); + self setweaponammoclip( weapon, clip_amount ); + + if ( weaponisdualwield( weapon ) ) + { + weapon_dw = weapondualwieldweaponname( weapon ); + self setweaponammoclip( weapon_dw, loadout.clipcount2[i] ); + } + + weapon_alt = weaponaltweaponname( weapon ); + + if ( weapon_alt != "none" ) + { + self setweaponammostock( weapon_alt, loadout.stockcountalt[i] ); + self setweaponammoclip( weapon_alt, loadout.clipcountalt[i] ); + } + } + } + + self setspawnweapon( loadout.weapons[loadout.current_weapon] ); + self switchtoweaponimmediate( loadout.weapons[loadout.current_weapon] ); + + if ( isdefined( self get_player_melee_weapon() ) ) + self giveweapon( self get_player_melee_weapon() ); + + self maps\mp\zombies\_zm_equipment::equipment_give( self.loadout.equipment ); + + if ( isdefined( loadout.hasclaymore ) && loadout.hasclaymore && !self hasweapon( "claymore_zm" ) ) + { + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammoclip( "claymore_zm", loadout.claymoreclip ); + } + + if ( isdefined( loadout.hasemp ) && loadout.hasemp ) + { + self giveweapon( "emp_grenade_zm" ); + self setweaponammoclip( "emp_grenade_zm", loadout.empclip ); + } + + if ( isdefined( loadout.hastomahawk ) && loadout.hastomahawk ) + { + self giveweapon( self.current_tomahawk_weapon ); + self set_player_tactical_grenade( self.current_tomahawk_weapon ); + self setclientfieldtoplayer( "tomahawk_in_use", 1 ); + } + + self.score = loadout.score; + perk_array = maps\mp\zombies\_zm_perks::get_perk_array( 1 ); + + for ( i = 0; i < perk_array.size; i++ ) + { + perk = perk_array[i]; + self unsetperk( perk ); + self set_perk_clientfield( perk, 0 ); + } + + if ( isdefined( self.keep_perks ) && self.keep_perks && isdefined( loadout.perks ) && loadout.perks.size > 0 ) + { + for ( i = 0; i < loadout.perks.size; i++ ) + { + if ( self hasperk( loadout.perks[i] ) ) + continue; + + if ( loadout.perks[i] == "specialty_quickrevive" && flag( "solo_game" ) ) + level.solo_game_free_player_quickrevive = 1; + + if ( loadout.perks[i] == "specialty_finalstand" ) + continue; + + maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] ); + } + } + + self.keep_perks = undefined; + self set_player_lethal_grenade( self.loadout.lethal_grenade ); + + if ( loadout.grenade > 0 ) + { + curgrenadecount = 0; + + if ( self hasweapon( self get_player_lethal_grenade() ) ) + self getweaponammoclip( self get_player_lethal_grenade() ); + else + self giveweapon( self get_player_lethal_grenade() ); + + self setweaponammoclip( self get_player_lethal_grenade(), loadout.grenade + curgrenadecount ); + } } afterlife_fake_death() { - level notify( "fake_death" ); - self notify( "fake_death" ); - self takeallweapons(); - self allowstand( 0 ); - self allowcrouch( 0 ); - self allowprone( 1 ); - self setstance( "prone" ); - while ( self is_jumping() ) - { - while ( self is_jumping() ) - { - wait 0,05; - } - } - playfx( level._effect[ "afterlife_enter" ], self.origin ); - self.ignoreme = 1; - self enableinvulnerability(); - self freezecontrols( 1 ); + level notify( "fake_death" ); + self notify( "fake_death" ); + self takeallweapons(); + self allowstand( 0 ); + self allowcrouch( 0 ); + self allowprone( 1 ); + self setstance( "prone" ); + + if ( self is_jumping() ) + { + while ( self is_jumping() ) + wait 0.05; + } + + playfx( level._effect["afterlife_enter"], self.origin ); + self.ignoreme = 1; + self enableinvulnerability(); + self freezecontrols( 1 ); } afterlife_fake_revive() { - level notify( "fake_revive" ); - self notify( "fake_revive" ); - playsoundatposition( "zmb_afterlife_spawn_leave", self.origin ); - if ( flag( "afterlife_start_over" ) ) - { - spawnpoint = [[ level.afterlife_get_spawnpoint ]](); - trace_start = spawnpoint.origin; - trace_end = spawnpoint.origin + vectorScale( ( 0, 0, 1 ), 200 ); - respawn_trace = playerphysicstrace( trace_start, trace_end ); - self setorigin( respawn_trace ); - self setplayerangles( spawnpoint.angles ); - playsoundatposition( "zmb_afterlife_spawn_enter", spawnpoint.origin ); - } - else - { - playsoundatposition( "zmb_afterlife_spawn_enter", self.origin ); - } - self allowstand( 1 ); - self allowcrouch( 0 ); - self allowprone( 0 ); - self.ignoreme = 0; - self setstance( "stand" ); - self giveweapon( "lightning_hands_zm" ); - self switchtoweapon( "lightning_hands_zm" ); - self.score = 0; - wait 1; + level notify( "fake_revive" ); + self notify( "fake_revive" ); + playsoundatposition( "zmb_afterlife_spawn_leave", self.origin ); + + if ( flag( "afterlife_start_over" ) ) + { + spawnpoint = [[ level.afterlife_get_spawnpoint ]](); + trace_start = spawnpoint.origin; + trace_end = spawnpoint.origin + vectorscale( ( 0, 0, -1 ), 200.0 ); + respawn_trace = playerphysicstrace( trace_start, trace_end ); + self setorigin( respawn_trace ); + self setplayerangles( spawnpoint.angles ); + playsoundatposition( "zmb_afterlife_spawn_enter", spawnpoint.origin ); + } + else + playsoundatposition( "zmb_afterlife_spawn_enter", self.origin ); + + self allowstand( 1 ); + self allowcrouch( 0 ); + self allowprone( 0 ); + self.ignoreme = 0; + self setstance( "stand" ); + self giveweapon( "lightning_hands_zm" ); + self switchtoweapon( "lightning_hands_zm" ); + self.score = 0; + wait 1; } afterlife_get_spawnpoint() { - spawnpoint = check_for_valid_spawn_in_zone( self ); - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_position( self, self.origin, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - } - if ( !isDefined( spawnpoint ) ) - { - match_string = ""; - location = level.scr_zm_map_start_location; - if ( location != "default" && location == "" && isDefined( level.default_start_location ) ) - { - location = level.default_start_location; - } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - spawnpoints = []; - structs = getstructarray( "initial_spawn", "script_noteworthy" ); - while ( isDefined( structs ) ) - { - _a1858 = structs; - _k1858 = getFirstArrayKey( _a1858 ); - while ( isDefined( _k1858 ) ) - { - struct = _a1858[ _k1858 ]; - while ( isDefined( struct.script_string ) ) - { - tokens = strtok( struct.script_string, " " ); - _a1864 = tokens; - _k1864 = getFirstArrayKey( _a1864 ); - while ( isDefined( _k1864 ) ) - { - token = _a1864[ _k1864 ]; - if ( token == match_string ) - { - spawnpoints[ spawnpoints.size ] = struct; - } - _k1864 = getNextArrayKey( _a1864, _k1864 ); - } - } - _k1858 = getNextArrayKey( _a1858, _k1858 ); - } - } - if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) - { - spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); - } + spawnpoint = check_for_valid_spawn_in_zone( self ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_position( self, self.origin, 1 ); + + if ( !isdefined( spawnpoint ) ) + spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 ); + + if ( !isdefined( spawnpoint ) ) + { + match_string = ""; + location = level.scr_zm_map_start_location; + + if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) ) + location = level.default_start_location; + + match_string = level.scr_zm_ui_gametype + "_" + location; + spawnpoints = []; + structs = getstructarray( "initial_spawn", "script_noteworthy" ); + + if ( isdefined( structs ) ) + { + foreach ( struct in structs ) + { + if ( isdefined( struct.script_string ) ) + { + tokens = strtok( struct.script_string, " " ); + + foreach ( token in tokens ) + { + if ( token == match_string ) + spawnpoints[spawnpoints.size] = struct; + } + } + } + } + + if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 ) + spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); /# - assert( isDefined( spawnpoints ), "Could not find initial spawn points!" ); + assert( isdefined( spawnpoints ), "Could not find initial spawn points!" ); #/ - spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self ); - } - return spawnpoint; + spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self ); + } + + return spawnpoint; } check_for_valid_spawn_in_zone( player ) { - a_spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( isDefined( level.e_gondola ) && isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) - { - if ( player maps/mp/zm_alcatraz_travel::is_player_on_gondola() ) - { - if ( level.e_gondola.destination == "roof" ) - { - str_player_zone = "zone_cellblock_west_gondola"; - } - else - { - if ( level.e_gondola.destination == "docks" ) - { - str_player_zone = "zone_dock"; - } - } - } - else - { - str_player_zone = player maps/mp/zombies/_zm_zonemgr::get_player_zone(); - } - } - else - { - str_player_zone = player maps/mp/zombies/_zm_zonemgr::get_player_zone(); - } + a_spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( isdefined( level.e_gondola ) && ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving ) ) + { + if ( player maps\mp\zm_alcatraz_travel::is_player_on_gondola() ) + { + if ( level.e_gondola.destination == "roof" ) + str_player_zone = "zone_cellblock_west_gondola"; + else if ( level.e_gondola.destination == "docks" ) + str_player_zone = "zone_dock"; + } + else + str_player_zone = player maps\mp\zombies\_zm_zonemgr::get_player_zone(); + } + else + str_player_zone = player maps\mp\zombies\_zm_zonemgr::get_player_zone(); /# - println( "The player is not in a zone at origin " + player.origin ); + println( "The player is not in a zone at origin " + player.origin ); #/ - _a1929 = a_spawn_points; - _k1929 = getFirstArrayKey( _a1929 ); - while ( isDefined( _k1929 ) ) - { - spawn_point = _a1929[ _k1929 ]; - while ( spawn_point.script_noteworthy == str_player_zone ) - { - a_spawn_structs = getstructarray( spawn_point.target, "targetname" ); - a_spawn_structs = get_array_of_closest( player.origin, a_spawn_structs ); - _a1939 = a_spawn_structs; - _k1939 = getFirstArrayKey( _a1939 ); - while ( isDefined( _k1939 ) ) - { - s_spawn = _a1939[ _k1939 ]; - if ( !flag( "afterlife_start_over" ) ) - { - if ( isDefined( s_spawn.en_num ) && s_spawn.en_num != player.playernum ) - { - } - } - else - { - if ( positionwouldtelefrag( s_spawn.origin ) || distancesquared( player.origin, s_spawn.origin ) < 250000 ) - { - break; - } - else return s_spawn; - } - _k1939 = getNextArrayKey( _a1939, _k1939 ); - } - a_spawn_structs = get_array_of_farthest( player.origin, a_spawn_structs, undefined, 250000 ); - _a1962 = a_spawn_structs; - _k1962 = getFirstArrayKey( _a1962 ); - while ( isDefined( _k1962 ) ) - { - s_spawn = _a1962[ _k1962 ]; - if ( positionwouldtelefrag( s_spawn.origin ) ) - { - } - else return s_spawn; - _k1962 = getNextArrayKey( _a1962, _k1962 ); - } - } - _k1929 = getNextArrayKey( _a1929, _k1929 ); - } - return undefined; + foreach ( spawn_point in a_spawn_points ) + { + if ( spawn_point.script_noteworthy == str_player_zone ) + { + a_spawn_structs = getstructarray( spawn_point.target, "targetname" ); + a_spawn_structs = get_array_of_closest( player.origin, a_spawn_structs ); + + foreach ( s_spawn in a_spawn_structs ) + { + if ( !flag( "afterlife_start_over" ) ) + { + if ( isdefined( s_spawn.en_num ) && s_spawn.en_num != player.playernum ) + continue; + } + + if ( positionwouldtelefrag( s_spawn.origin ) || distancesquared( player.origin, s_spawn.origin ) < 250000 ) + { + continue; + continue; + } + + return s_spawn; + } + + a_spawn_structs = get_array_of_farthest( player.origin, a_spawn_structs, undefined, 250000 ); + + foreach ( s_spawn in a_spawn_structs ) + { + if ( positionwouldtelefrag( s_spawn.origin ) ) + { + continue; + continue; + } + + return s_spawn; + } + } + } + + return undefined; } afterlife_save_perks( ent ) { - perk_array = ent get_perk_array( 1 ); - _a1989 = perk_array; - _k1989 = getFirstArrayKey( _a1989 ); - while ( isDefined( _k1989 ) ) - { - perk = _a1989[ _k1989 ]; - ent unsetperk( perk ); - _k1989 = getNextArrayKey( _a1989, _k1989 ); - } - return perk_array; + perk_array = ent get_perk_array( 1 ); + + foreach ( perk in perk_array ) + ent unsetperk( perk ); + + return perk_array; } afterlife_hostmigration() { - while ( 1 ) - { - level waittill( "host_migration_end" ); - _a2007 = getplayers(); - _k2007 = getFirstArrayKey( _a2007 ); - while ( isDefined( _k2007 ) ) - { - player = _a2007[ _k2007 ]; - player setclientfieldtoplayer( "player_lives", player.lives ); - if ( isDefined( player.e_afterlife_corpse ) ) - { - player.e_afterlife_corpse setclientfield( "player_corpse_id", 0 ); - } - _k2007 = getNextArrayKey( _a2007, _k2007 ); - } - wait_network_frame(); - wait_network_frame(); - _a2021 = getplayers(); - _k2021 = getFirstArrayKey( _a2021 ); - while ( isDefined( _k2021 ) ) - { - player = _a2021[ _k2021 ]; - if ( isDefined( player.e_afterlife_corpse ) ) - { - player.e_afterlife_corpse setclientfield( "player_corpse_id", player getentitynumber() + 1 ); - } - _k2021 = getNextArrayKey( _a2021, _k2021 ); - } - } + while ( true ) + { + level waittill( "host_migration_end" ); + + foreach ( player in getplayers() ) + { + player setclientfieldtoplayer( "player_lives", player.lives ); + + if ( isdefined( player.e_afterlife_corpse ) ) + player.e_afterlife_corpse setclientfield( "player_corpse_id", 0 ); + } + + wait_network_frame(); + wait_network_frame(); + + foreach ( player in getplayers() ) + { + if ( isdefined( player.e_afterlife_corpse ) ) + player.e_afterlife_corpse setclientfield( "player_corpse_id", player getentitynumber() + 1 ); + } + } } afterlife_reduce_mana( n_mana ) { - if ( isDefined( self.afterlife ) && !self.afterlife ) - { - return; - } - if ( isDefined( level.hostmigrationtimer ) ) - { - return; - } - if ( isDefined( self.infinite_mana ) && self.infinite_mana ) - { - self.manacur = 200; - return; - } + if ( isdefined( self.afterlife ) && !self.afterlife ) + return; + + if ( isdefined( level.hostmigrationtimer ) ) + return; + + if ( isdefined( self.infinite_mana ) && self.infinite_mana ) + { + self.manacur = 200; + return; + } /# - if ( getDvarInt( "zombie_cheat" ) >= 1 ) - { - self.manacur = 200; - return; + if ( getdvarint( _hash_FA81816F ) >= 1 ) + { + self.manacur = 200; + return; + } #/ - } - if ( isDefined( self.e_afterlife_corpse ) && isDefined( self.e_afterlife_corpse.revivetrigger.beingrevived ) && self.e_afterlife_corpse.revivetrigger.beingrevived ) - { - return; - } - self.manacur -= n_mana; + if ( isdefined( self.e_afterlife_corpse ) && ( isdefined( self.e_afterlife_corpse.revivetrigger.beingrevived ) && self.e_afterlife_corpse.revivetrigger.beingrevived ) ) + return; + + self.manacur -= n_mana; } afterlife_lightning_watch( corpse ) { - self endon( "disconnect" ); - corpse endon( "player_revived" ); - while ( 1 ) - { - self waittill( "weapon_fired" ); - self afterlife_reduce_mana( 1 ); - wait 0,05; - } + self endon( "disconnect" ); + corpse endon( "player_revived" ); + + while ( true ) + { + self waittill( "weapon_fired" ); + + self afterlife_reduce_mana( 1 ); + wait 0.05; + } } afterlife_jump_watch( corpse ) { - self endon( "disconnect" ); - corpse endon( "player_revived" ); - while ( 1 ) - { - if ( self is_jumping() ) - { - self afterlife_reduce_mana( 0,3 ); - earthquake( 0,1, 0,05, self.origin, 200, self ); - } - wait 0,05; - } + self endon( "disconnect" ); + corpse endon( "player_revived" ); + + while ( true ) + { + if ( self is_jumping() ) + { + self afterlife_reduce_mana( 0.3 ); + earthquake( 0.1, 0.05, self.origin, 200, self ); + } + + wait 0.05; + } } afterlife_trigger_create( s_origin ) { - s_origin.unitrigger_stub = spawnstruct(); - s_origin.unitrigger_stub.origin = s_origin.origin; - s_origin.unitrigger_stub.radius = 36; - s_origin.unitrigger_stub.height = 256; - s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - s_origin.unitrigger_stub.hint_string = &"ZM_PRISON_AFTERLIFE_KILL"; - s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; - s_origin.unitrigger_stub.require_look_at = 1; - s_origin.unitrigger_stub.prompt_and_visibility_func = ::afterlife_trigger_visibility; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( s_origin.unitrigger_stub, 1 ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::afterlife_trigger_think ); + s_origin.unitrigger_stub = spawnstruct(); + s_origin.unitrigger_stub.origin = s_origin.origin; + s_origin.unitrigger_stub.radius = 36; + s_origin.unitrigger_stub.height = 256; + s_origin.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + s_origin.unitrigger_stub.hint_string = &"ZM_PRISON_AFTERLIFE_KILL"; + s_origin.unitrigger_stub.cursor_hint = "HINT_NOICON"; + s_origin.unitrigger_stub.require_look_at = 1; + s_origin.unitrigger_stub.prompt_and_visibility_func = ::afterlife_trigger_visibility; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( s_origin.unitrigger_stub, 1 ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( s_origin.unitrigger_stub, ::afterlife_trigger_think ); } reset_all_afterlife_unitriggers() { - a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); - _a2129 = a_afterlife_triggers; - _k2129 = getFirstArrayKey( _a2129 ); - while ( isDefined( _k2129 ) ) - { - struct = _a2129[ _k2129 ]; - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( struct.unitrigger_stub ); - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( struct.unitrigger_stub, ::afterlife_trigger_think ); - _k2129 = getNextArrayKey( _a2129, _k2129 ); - } + a_afterlife_triggers = getstructarray( "afterlife_trigger", "targetname" ); + + foreach ( struct in a_afterlife_triggers ) + { + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( struct.unitrigger_stub ); + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( struct.unitrigger_stub, ::afterlife_trigger_think ); + } } afterlife_trigger_visibility( player ) { - b_is_invis = player.afterlife; - self setinvisibletoplayer( player, b_is_invis ); - if ( player.lives == 0 ) - { - self sethintstring( &"ZM_PRISON_OUT_OF_LIVES" ); - } - else - { - self sethintstring( self.stub.hint_string ); - if ( !isDefined( player.has_played_afterlife_trigger_hint ) && player is_player_looking_at( self.stub.origin, 0,25 ) ) - { - if ( isDefined( player.dontspeak ) && !player.dontspeak ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "killswitch_clue" ); - player.has_played_afterlife_trigger_hint = 1; - } - } - } - return !b_is_invis; + b_is_invis = player.afterlife; + self setinvisibletoplayer( player, b_is_invis ); + + if ( player.lives == 0 ) + self sethintstring( &"ZM_PRISON_OUT_OF_LIVES" ); + else + { + self sethintstring( self.stub.hint_string ); + + if ( !isdefined( player.has_played_afterlife_trigger_hint ) && player is_player_looking_at( self.stub.origin, 0.25 ) ) + { + if ( !( isdefined( player.dontspeak ) && player.dontspeak ) ) + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "killswitch_clue" ); + player.has_played_afterlife_trigger_hint = 1; + } + } + } + + return !b_is_invis; } afterlife_trigger_think() { - self endon( "kill_trigger" ); - flag_wait( "start_zombie_round_logic" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( player.lives <= 0 ) - { - self playsound( "zmb_no_cha_ching" ); - } - while ( player is_reviving_any() || player player_is_in_laststand() ) - { - wait 0,1; - } - if ( isDefined( player.afterlife ) && !player.afterlife ) - { - self setinvisibletoplayer( player, 1 ); - self playsound( "zmb_afterlife_trigger_activate" ); - player playsoundtoplayer( "zmb_afterlife_trigger_electrocute", player ); - player thread afterlife_trigger_used_vo(); - self sethintstring( "" ); - player.keep_perks = 1; - player afterlife_remove(); - player.afterlife = 1; - player thread afterlife_laststand(); - e_fx = spawn( "script_model", self.origin ); - e_fx setmodel( "tag_origin" ); - e_fx.angles = vectorScale( ( 0, 0, 1 ), 90 ); - playfxontag( level._effect[ "afterlife_kill_point_fx" ], e_fx, "tag_origin" ); - wait 2; - e_fx delete(); - self sethintstring( &"ZM_PRISON_AFTERLIFE_KILL" ); - } - } + self endon( "kill_trigger" ); + flag_wait( "start_zombie_round_logic" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player.lives <= 0 ) + { + self playsound( "zmb_no_cha_ching" ); + continue; + } + + if ( player is_reviving_any() || player player_is_in_laststand() ) + { + wait 0.1; + continue; + } + + if ( isdefined( player.afterlife ) && !player.afterlife ) + { + self setinvisibletoplayer( player, 1 ); + self playsound( "zmb_afterlife_trigger_activate" ); + player playsoundtoplayer( "zmb_afterlife_trigger_electrocute", player ); + player thread afterlife_trigger_used_vo(); + self sethintstring( "" ); + player.keep_perks = 1; + player afterlife_remove(); + player.afterlife = 1; + player thread afterlife_laststand(); + e_fx = spawn( "script_model", self.origin ); + e_fx setmodel( "tag_origin" ); + e_fx.angles = vectorscale( ( 1, 0, 0 ), 90.0 ); + playfxontag( level._effect["afterlife_kill_point_fx"], e_fx, "tag_origin" ); + wait 2; + e_fx delete(); + self sethintstring( &"ZM_PRISON_AFTERLIFE_KILL" ); + } + } } +#using_animtree("fxanim_props"); + afterlife_interact_object_think() { - self endon( "afterlife_interact_complete" ); - if ( isDefined( self.script_int ) && self.script_int > 0 ) - { - n_total_interact_count = self.script_int; - } - else - { - if ( !isDefined( self.script_int ) || isDefined( self.script_int ) && self.script_int <= 0 ) - { - n_total_interact_count = 0; - } - } - n_count = 0; - self.health = 5000; - self setcandamage( 1 ); - self useanimtree( -1 ); - self playloopsound( "zmb_afterlife_shockbox_off", 1 ); - if ( !isDefined( level.shockbox_anim ) ) - { - level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; - level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; - } - trig_spawn_offset = ( 0, 0, 1 ); - if ( self.model != "p6_anim_zm_al_nixie_tubes" ) - { - if ( isDefined( self.script_string ) && self.script_string == "intro_powerup_activate" ) - { - self.t_bump = spawn( "trigger_radius", self.origin + vectorScale( ( 0, 0, 1 ), 28 ), 0, 28, 64 ); - } - else - { - if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) - { - trig_spawn_offset = ( 0, 11, 46 ); - str_hint = &"ZM_PRISON_AFTERLIFE_INTERACT"; - } - else - { - if ( issubstr( self.model, "p6_zm_al_power_station_panels" ) ) - { - trig_spawn_offset = ( 32, 35, 58 ); - str_hint = &"ZM_PRISON_AFTERLIFE_OVERLOAD"; - } - } - afterlife_interact_hint_trigger_create( self, trig_spawn_offset, str_hint ); - } - } - while ( 1 ) - { - if ( isDefined( self.unitrigger_stub ) ) - { - self.unitrigger_stub.is_activated_in_afterlife = 0; - } - else - { - if ( isDefined( self.t_bump ) ) - { - self.t_bump setcursorhint( "HINT_NOICON" ); - self.t_bump sethintstring( &"ZM_PRISON_AFTERLIFE_INTERACT" ); - } - } - self waittill( "damage", amount, attacker ); - if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) - { - if ( isDefined( self.script_string ) ) - { - if ( isDefined( level.afterlife_interact_dist ) ) - { - if ( attacker == level || distancesquared( attacker.origin, self.origin ) < ( level.afterlife_interact_dist * level.afterlife_interact_dist ) ) - { - level notify( self.script_string ); - if ( isDefined( self.unitrigger_stub ) ) - { - self.unitrigger_stub.is_activated_in_afterlife = 1; - self.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - } - else - { - if ( isDefined( self.t_bump ) ) - { - self.t_bump sethintstring( "" ); - } - } - self playloopsound( "zmb_afterlife_shockbox_on", 1 ); - if ( self.model == "p6_zm_al_shock_box_off" ) - { - if ( !isDefined( self.playing_fx ) ) - { - playfxontag( level._effect[ "box_activated" ], self, "tag_origin" ); - self.playing_fx = 1; - self thread afterlife_interact_object_fx_cooldown(); - self playsound( "zmb_powerpanel_activate" ); - } - self setmodel( "p6_zm_al_shock_box_on" ); - self setanim( level.shockbox_anim[ "on" ] ); - } - n_count++; - if ( n_total_interact_count <= 0 || n_count < n_total_interact_count ) - { - self waittill( "afterlife_interact_reset" ); - self playloopsound( "zmb_afterlife_shockbox_off", 1 ); - if ( self.model == "p6_zm_al_shock_box_on" ) - { - self setmodel( "p6_zm_al_shock_box_off" ); - self setanim( level.shockbox_anim[ "off" ] ); - } - if ( isDefined( self.unitrigger_stub ) ) - { - self.unitrigger_stub.is_activated_in_afterlife = 0; - self.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - } - break; - } - else - { - if ( isDefined( self.t_bump ) ) - { - self.t_bump delete(); - } - return; - } - } - } - } - } - else - { - } - } + self endon( "afterlife_interact_complete" ); + + if ( isdefined( self.script_int ) && self.script_int > 0 ) + n_total_interact_count = self.script_int; + else if ( !isdefined( self.script_int ) || isdefined( self.script_int ) && self.script_int <= 0 ) + n_total_interact_count = 0; + + n_count = 0; + self.health = 5000; + self setcandamage( 1 ); + self useanimtree( -1 ); + self playloopsound( "zmb_afterlife_shockbox_off", 1 ); + + if ( !isdefined( level.shockbox_anim ) ) + { + level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim; + level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim; + } + + trig_spawn_offset = ( 0, 0, 0 ); + + if ( self.model != "p6_anim_zm_al_nixie_tubes" ) + { + if ( isdefined( self.script_string ) && self.script_string == "intro_powerup_activate" ) + self.t_bump = spawn( "trigger_radius", self.origin + vectorscale( ( 0, 1, 0 ), 28.0 ), 0, 28, 64 ); + else + { + if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) + { + trig_spawn_offset = ( 0, 11, 46 ); + str_hint = &"ZM_PRISON_AFTERLIFE_INTERACT"; + } + else if ( issubstr( self.model, "p6_zm_al_power_station_panels" ) ) + { + trig_spawn_offset = ( 32, 35, 58 ); + str_hint = &"ZM_PRISON_AFTERLIFE_OVERLOAD"; + } + + afterlife_interact_hint_trigger_create( self, trig_spawn_offset, str_hint ); + } + } + + while ( true ) + { + if ( isdefined( self.unitrigger_stub ) ) + self.unitrigger_stub.is_activated_in_afterlife = 0; + else if ( isdefined( self.t_bump ) ) + { + self.t_bump setcursorhint( "HINT_NOICON" ); + self.t_bump sethintstring( &"ZM_PRISON_AFTERLIFE_INTERACT" ); + } + + self waittill( "damage", amount, attacker ); + + if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) + { + if ( isdefined( self.script_string ) ) + { + if ( isdefined( level.afterlife_interact_dist ) ) + { + if ( attacker == level || distancesquared( attacker.origin, self.origin ) < level.afterlife_interact_dist * level.afterlife_interact_dist ) + { + level notify( self.script_string ); + + if ( isdefined( self.unitrigger_stub ) ) + { + self.unitrigger_stub.is_activated_in_afterlife = 1; + self.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + } + else if ( isdefined( self.t_bump ) ) + self.t_bump sethintstring( "" ); + + self playloopsound( "zmb_afterlife_shockbox_on", 1 ); + + if ( self.model == "p6_zm_al_shock_box_off" ) + { + if ( !isdefined( self.playing_fx ) ) + { + playfxontag( level._effect["box_activated"], self, "tag_origin" ); + self.playing_fx = 1; + self thread afterlife_interact_object_fx_cooldown(); + self playsound( "zmb_powerpanel_activate" ); + } + + self setmodel( "p6_zm_al_shock_box_on" ); + self setanim( level.shockbox_anim["on"] ); + } + + n_count++; + + if ( n_total_interact_count <= 0 || n_count < n_total_interact_count ) + { + self waittill( "afterlife_interact_reset" ); + + self playloopsound( "zmb_afterlife_shockbox_off", 1 ); + + if ( self.model == "p6_zm_al_shock_box_on" ) + { + self setmodel( "p6_zm_al_shock_box_off" ); + self setanim( level.shockbox_anim["off"] ); + } + + if ( isdefined( self.unitrigger_stub ) ) + { + self.unitrigger_stub.is_activated_in_afterlife = 0; + self.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + } + } + else + { + if ( isdefined( self.t_bump ) ) + self.t_bump delete(); + + break; + } + } + } + } + } + } } afterlife_interact_hint_trigger_create( m_interact, v_trig_offset, str_hint ) { - m_interact.unitrigger_stub = spawnstruct(); - m_interact.unitrigger_stub.origin = ( ( m_interact.origin + ( anglesToForward( m_interact.angles ) * v_trig_offset[ 0 ] ) ) + ( anglesToRight( m_interact.angles ) * v_trig_offset[ 1 ] ) ) + ( anglesToUp( m_interact.angles ) * v_trig_offset[ 2 ] ); - m_interact.unitrigger_stub.radius = 40; - m_interact.unitrigger_stub.height = 64; - m_interact.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - m_interact.unitrigger_stub.hint_string = str_hint; - m_interact.unitrigger_stub.cursor_hint = "HINT_NOICON"; - m_interact.unitrigger_stub.require_look_at = 1; - m_interact.unitrigger_stub.ignore_player_valid = 1; - m_interact.unitrigger_stub.prompt_and_visibility_func = ::afterlife_trigger_visible_in_afterlife; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( m_interact.unitrigger_stub, ::afterlife_interact_hint_trigger_think ); + m_interact.unitrigger_stub = spawnstruct(); + m_interact.unitrigger_stub.origin = m_interact.origin + anglestoforward( m_interact.angles ) * v_trig_offset[0] + anglestoright( m_interact.angles ) * v_trig_offset[1] + anglestoup( m_interact.angles ) * v_trig_offset[2]; + m_interact.unitrigger_stub.radius = 40; + m_interact.unitrigger_stub.height = 64; + m_interact.unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + m_interact.unitrigger_stub.hint_string = str_hint; + m_interact.unitrigger_stub.cursor_hint = "HINT_NOICON"; + m_interact.unitrigger_stub.require_look_at = 1; + m_interact.unitrigger_stub.ignore_player_valid = 1; + m_interact.unitrigger_stub.prompt_and_visibility_func = ::afterlife_trigger_visible_in_afterlife; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( m_interact.unitrigger_stub, ::afterlife_interact_hint_trigger_think ); } afterlife_trigger_visible_in_afterlife( player ) { - if ( isDefined( self.stub.is_activated_in_afterlife ) ) - { - b_is_invis = self.stub.is_activated_in_afterlife; - } - self setinvisibletoplayer( player, b_is_invis ); - self sethintstring( self.stub.hint_string ); - if ( !b_is_invis ) - { - if ( player is_player_looking_at( self.origin, 0,25 ) ) - { - if ( cointoss() ) - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "need_electricity" ); - } - else - { - player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "electric_zap" ); - } - } - } - return !b_is_invis; + b_is_invis = isdefined( self.stub.is_activated_in_afterlife ) && self.stub.is_activated_in_afterlife; + self setinvisibletoplayer( player, b_is_invis ); + self sethintstring( self.stub.hint_string ); + + if ( !b_is_invis ) + { + if ( player is_player_looking_at( self.origin, 0.25 ) ) + { + if ( cointoss() ) + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "need_electricity" ); + else + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "electric_zap" ); + } + } + + return !b_is_invis; } afterlife_interact_hint_trigger_think() { - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger" ); - wait 1000; - } + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger" ); + + wait 1000; + } } afterlife_interact_object_fx_cooldown() { - wait 2; - self.playing_fx = undefined; + wait 2; + self.playing_fx = undefined; } afterlife_zombie_damage() { - self.actor_damage_func = ::afterlife_damage_func; + self.actor_damage_func = ::afterlife_damage_func; } -afterlife_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) +afterlife_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) { - if ( sweapon == "lightning_hands_zm" ) - { - while ( !isDefined( self.zapped ) ) - { - a_zombies = get_array_of_closest( self.origin, getaiarray( "axis" ), undefined, 5, 80 ); - i = 0; - while ( i < a_zombies.size ) - { - if ( isalive( a_zombies[ i ] ) && !isDefined( a_zombies[ i ].zapped ) ) - { - a_zombies[ i ] notify( "zapped" ); - a_zombies[ i ] thread [[ level.afterlife_zapped ]](); - wait 0,05; - } - i++; - } - } - return 0; - } - return idamage; + if ( sweapon == "lightning_hands_zm" ) + { + if ( !isdefined( self.zapped ) ) + { + a_zombies = get_array_of_closest( self.origin, getaiarray( "axis" ), undefined, 5, 80 ); + + for ( i = 0; i < a_zombies.size; i++ ) + { + if ( isalive( a_zombies[i] ) && !isdefined( a_zombies[i].zapped ) ) + { + a_zombies[i] notify( "zapped" ); + a_zombies[i] thread [[ level.afterlife_zapped ]](); + wait 0.05; + } + } + } + + return 0; + } + + return idamage; } afterlife_zapped() { - self endon( "death" ); - self endon( "zapped" ); - if ( self.ai_state == "find_flesh" ) - { - self.zapped = 1; - n_ideal_dist_sq = 490000; - n_min_dist_sq = 10000; - a_nodes = getanynodearray( self.origin, 1200 ); - a_nodes = arraycombine( a_nodes, getanynodearray( self.origin + vectorScale( ( 0, 0, 1 ), 120 ), 1200 ), 0, 0 ); - a_nodes = arraycombine( a_nodes, getanynodearray( self.origin - vectorScale( ( 0, 0, 1 ), 120 ), 1200 ), 0, 0 ); - a_nodes = array_randomize( a_nodes ); - nd_target = undefined; - i = 0; - while ( i < a_nodes.size ) - { - if ( distance2dsquared( a_nodes[ i ].origin, self.origin ) > n_ideal_dist_sq ) - { - if ( a_nodes[ i ] is_valid_teleport_node() ) - { - nd_target = a_nodes[ i ]; - break; - } - } - else - { - i++; - } - } - while ( !isDefined( nd_target ) ) - { - i = 0; - while ( i < a_nodes.size ) - { - if ( distance2dsquared( a_nodes[ i ].origin, self.origin ) > n_min_dist_sq ) - { - if ( a_nodes[ i ] is_valid_teleport_node() ) - { - nd_target = a_nodes[ i ]; - break; - } - } - else - { - i++; - } - } - } - if ( isDefined( nd_target ) ) - { - v_fx_offset = vectorScale( ( 0, 0, 1 ), 40 ); - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - playsoundatposition( "zmb_afterlife_zombie_warp_out", self.origin ); - self hide(); - linker = spawn( "script_model", self.origin + v_fx_offset ); - linker setmodel( "tag_origin" ); - playfxontag( level._effect[ "teleport_ball" ], linker, "tag_origin" ); - linker thread linker_delete_watch( self ); - self linkto( linker ); - linker moveto( nd_target.origin + v_fx_offset, 1 ); - linker waittill( "movedone" ); - linker delete(); - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - playsoundatposition( "zmb_afterlife_zombie_warp_in", self.origin ); - self show(); - } - else - { + self endon( "death" ); + self endon( "zapped" ); + + if ( self.ai_state == "find_flesh" ) + { + self.zapped = 1; + n_ideal_dist_sq = 490000; + n_min_dist_sq = 10000; + a_nodes = getanynodearray( self.origin, 1200 ); + a_nodes = arraycombine( a_nodes, getanynodearray( self.origin + vectorscale( ( 0, 0, 1 ), 120.0 ), 1200 ), 0, 0 ); + a_nodes = arraycombine( a_nodes, getanynodearray( self.origin - vectorscale( ( 0, 0, 1 ), 120.0 ), 1200 ), 0, 0 ); + a_nodes = array_randomize( a_nodes ); + nd_target = undefined; + + for ( i = 0; i < a_nodes.size; i++ ) + { + if ( distance2dsquared( a_nodes[i].origin, self.origin ) > n_ideal_dist_sq ) + { + if ( a_nodes[i] is_valid_teleport_node() ) + { + nd_target = a_nodes[i]; + break; + } + } + } + + if ( !isdefined( nd_target ) ) + { + for ( i = 0; i < a_nodes.size; i++ ) + { + if ( distance2dsquared( a_nodes[i].origin, self.origin ) > n_min_dist_sq ) + { + if ( a_nodes[i] is_valid_teleport_node() ) + { + nd_target = a_nodes[i]; + break; + } + } + } + } + + if ( isdefined( nd_target ) ) + { + v_fx_offset = vectorscale( ( 0, 0, 1 ), 40.0 ); + playfx( level._effect["afterlife_teleport"], self.origin ); + playsoundatposition( "zmb_afterlife_zombie_warp_out", self.origin ); + self hide(); + linker = spawn( "script_model", self.origin + v_fx_offset ); + linker setmodel( "tag_origin" ); + playfxontag( level._effect["teleport_ball"], linker, "tag_origin" ); + linker thread linker_delete_watch( self ); + self linkto( linker ); + linker moveto( nd_target.origin + v_fx_offset, 1 ); + + linker waittill( "movedone" ); + + linker delete(); + playfx( level._effect["afterlife_teleport"], self.origin ); + playsoundatposition( "zmb_afterlife_zombie_warp_in", self.origin ); + self show(); + } + else + { /# - iprintln( "Could not teleport" ); + iprintln( "Could not teleport" ); #/ - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - playsoundatposition( "zmb_afterlife_zombie_warp_out", self.origin ); - level.zombie_total++; - self delete(); - return; - } - self.zapped = undefined; - self.ignoreall = 1; - self notify( "stop_find_flesh" ); - self thread afterlife_zapped_fx(); - i = 0; - while ( i < 3 ) - { - self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - i++; - } - self.ignoreall = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + playfx( level._effect["afterlife_teleport"], self.origin ); + playsoundatposition( "zmb_afterlife_zombie_warp_out", self.origin ); + level.zombie_total++; + self delete(); + return; + } + + self.zapped = undefined; + self.ignoreall = 1; + self notify( "stop_find_flesh" ); + self thread afterlife_zapped_fx(); + + for ( i = 0; i < 3; i++ ) + { + self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); + self maps\mp\animscripts\shared::donotetracks( "stunned" ); + } + + self.ignoreall = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } } is_valid_teleport_node() { - if ( !check_point_in_enabled_zone( self.origin ) ) - { - return 0; - } - if ( self.type != "Path" ) - { - return 0; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "no_teleport" ) - { - return 0; - } - if ( isDefined( self.no_teleport ) && self.no_teleport ) - { - return 0; - } - return 1; + if ( !check_point_in_enabled_zone( self.origin ) ) + return false; + + if ( self.type != "Path" ) + return false; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "no_teleport" ) + return false; + + if ( isdefined( self.no_teleport ) && self.no_teleport ) + return false; + + return true; } linker_delete_watch( ai_zombie ) { - self endon( "death" ); - ai_zombie waittill( "death" ); - self delete(); + self endon( "death" ); + + ai_zombie waittill( "death" ); + + self delete(); } afterlife_zapped_fx() { - self endon( "death" ); - playfxontag( level._effect[ "elec_torso" ], self, "J_SpineLower" ); - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "elec_md" ], self, tagarray[ 0 ] ); - self playsound( "zmb_elec_jib_zombie" ); - wait 1; - self playsound( "zmb_elec_jib_zombie" ); - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( !isDefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = array_randomize( tagarray ); - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 0 ] ); - playfxontag( level._effect[ "elec_sm" ], self, tagarray[ 1 ] ); + self endon( "death" ); + playfxontag( level._effect["elec_torso"], self, "J_SpineLower" ); + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["elec_md"], self, tagarray[0] ); + self playsound( "zmb_elec_jib_zombie" ); + wait 1; + self playsound( "zmb_elec_jib_zombie" ); + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = array_randomize( tagarray ); + playfxontag( level._effect["elec_sm"], self, tagarray[0] ); + playfxontag( level._effect["elec_sm"], self, tagarray[1] ); } enable_afterlife_prop() { - self show(); - self.script_noteworthy = "afterlife_prop"; - a_players = getplayers(); - _a2655 = a_players; - _k2655 = getFirstArrayKey( _a2655 ); - while ( isDefined( _k2655 ) ) - { - player = _a2655[ _k2655 ]; - if ( isDefined( player.afterlife ) && player.afterlife ) - { - self setvisibletoplayer( player ); - } - else - { - self setinvisibletoplayer( player ); - } - _k2655 = getNextArrayKey( _a2655, _k2655 ); - } + self show(); + self.script_noteworthy = "afterlife_prop"; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.afterlife ) && player.afterlife ) + { + self setvisibletoplayer( player ); + continue; + } + + self setinvisibletoplayer( player ); + } } disable_afterlife_prop() { - self.script_noteworthy = undefined; - self setvisibletoall(); + self.script_noteworthy = undefined; + self setvisibletoall(); } last_stand_conscience_vo() { - self endon( "player_revived" ); - self endon( "player_suicide" ); - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "end_game" ); - if ( !isDefined( self.conscience_vo_played ) ) - { - self.conscience_vo_played = 0; - } - self.conscience_vo_played++; - convo = []; - convo = level.conscience_vo[ "conscience_" + self.character_name + "_convo_" + self.conscience_vo_played ]; - while ( isDefined( convo ) ) - { - wait 5; - a_players = getplayers(); - while ( a_players.size > 1 ) - { - _a2708 = a_players; - _k2708 = getFirstArrayKey( _a2708 ); - while ( isDefined( _k2708 ) ) - { - player = _a2708[ _k2708 ]; - if ( player != self ) - { - if ( distancesquared( self.origin, player.origin ) < 1000000 ) - { - return; - } - } - _k2708 = getNextArrayKey( _a2708, _k2708 ); - } - } - self.dontspeak = 1; - i = 0; - while ( i < convo.size ) - { - n_duration = soundgetplaybacktime( convo[ i ] ); - self playsoundtoplayer( convo[ i ], self ); - self thread conscience_vo_ended_early( convo[ i ] ); - wait ( n_duration / 1000 ); - wait 0,5; - i++; - } - } - self.dontspeak = 0; + self endon( "player_revived" ); + self endon( "player_suicide" ); + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "end_game" ); + + if ( !isdefined( self.conscience_vo_played ) ) + self.conscience_vo_played = 0; + + self.conscience_vo_played++; + convo = []; + convo = level.conscience_vo["conscience_" + self.character_name + "_convo_" + self.conscience_vo_played]; + + if ( isdefined( convo ) ) + { + wait 5; + a_players = getplayers(); + + if ( a_players.size > 1 ) + { + foreach ( player in a_players ) + { + if ( player != self ) + { + if ( distancesquared( self.origin, player.origin ) < 1000000 ) + return; + } + } + } + + self.dontspeak = 1; + + for ( i = 0; i < convo.size; i++ ) + { + n_duration = soundgetplaybacktime( convo[i] ); + self playsoundtoplayer( convo[i], self ); + self thread conscience_vo_ended_early( convo[i] ); + wait( n_duration / 1000 ); + wait 0.5; + } + } + + self.dontspeak = 0; } conscience_vo_ended_early( str_alias ) { - self notify( "conscience_VO_end_early" ); - self endon( "conscience_VO_end_early" ); - self waittill_any( "player_revived", "player_suicide", "zombified", "death", "end_game" ); - self.dontspeak = 0; - self stoplocalsound( str_alias ); + self notify( "conscience_VO_end_early" ); + self endon( "conscience_VO_end_early" ); + self waittill_any( "player_revived", "player_suicide", "zombified", "death", "end_game" ); + self.dontspeak = 0; + self stoplocalsound( str_alias ); } afterlife_trigger_used_vo() { - a_vo = level.exert_sounds[ self.characterindex + 1 ][ "hitlrg" ]; - n_index = randomint( a_vo.size ); - self playsound( a_vo[ n_index ] ); + a_vo = level.exert_sounds[self.characterindex + 1]["hitlrg"]; + n_index = randomint( a_vo.size ); + self playsound( a_vo[n_index] ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc index 85a0d47..476ec8a 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_ai_brutus.gsc @@ -1,2880 +1,2770 @@ -//checked includes changed to match cerberus output -#include maps/mp/zm_alcatraz_sq; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_weap_riotshield_prison; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zm_alcatraz_utility; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_ai_brutus; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_magicbox; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_zonemgr; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zm_alcatraz_utility; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\animscripts\shared; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_weap_riotshield_prison; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zm_alcatraz_sq; -precache() //checked matches cerberus output +precache() { - level._effect[ "brutus_flashlight" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_light" ); - level._effect[ "brutus_spawn" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); - level._effect[ "brutus_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); - level._effect[ "brutus_teargas" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_gas" ); - level._effect[ "brutus_lockdown" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_lock" ); - level._effect[ "brutus_lockdown_sm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" ); - level._effect[ "brutus_lockdown_lg" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" ); - precachemodel( "c_zom_cellbreaker_helmet" ); - precacheshellshock( "mp_radiation_high" ); - precacheshellshock( "mp_radiation_med" ); - precacheshellshock( "mp_radiation_low" ); - precachestring( &"ZOMBIE_LOCKED_COST" ); - precachestring( &"ZOMBIE_LOCKED_COST_2000" ); - precachestring( &"ZOMBIE_LOCKED_COST_4000" ); - precachestring( &"ZOMBIE_LOCKED_COST_6000" ); - flag_init( "brutus_setup_complete" ); - setdvar( "zombie_double_wide_checks", 1 ); - if ( !isDefined( level.vsmgr_prio_zm_brutus_teargas ) ) - { - level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50; - } - if ( !isDefined( level.custom_brutus_barrier_fx ) ) - { - level.custom_brutus_barrier_fx = ::precache_default_brutus_barrier_fx; - } - [[ level.custom_brutus_barrier_fx ]](); + level._effect["brutus_flashlight"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_light" ); + level._effect["brutus_spawn"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); + level._effect["brutus_death"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); + level._effect["brutus_teargas"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_gas" ); + level._effect["brutus_lockdown"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_lock" ); + level._effect["brutus_lockdown_sm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" ); + level._effect["brutus_lockdown_lg"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" ); + precachemodel( "c_zom_cellbreaker_helmet" ); + precacheshellshock( "mp_radiation_high" ); + precacheshellshock( "mp_radiation_med" ); + precacheshellshock( "mp_radiation_low" ); + precachestring( &"ZOMBIE_LOCKED_COST" ); + precachestring( &"ZOMBIE_LOCKED_COST_2000" ); + precachestring( &"ZOMBIE_LOCKED_COST_4000" ); + precachestring( &"ZOMBIE_LOCKED_COST_6000" ); + flag_init( "brutus_setup_complete" ); + setdvar( "zombie_double_wide_checks", 1 ); + + if ( !isdefined( level.vsmgr_prio_zm_brutus_teargas ) ) + level.vsmgr_prio_overlay_zm_ai_screecher_blur = 50; + + if ( !isdefined( level.custom_brutus_barrier_fx ) ) + level.custom_brutus_barrier_fx = ::precache_default_brutus_barrier_fx; + + [[ level.custom_brutus_barrier_fx ]](); } -init() //checked changed to match cerberus output +init() { - level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" ); - if ( level.brutus_spawners.size == 0 ) - { - return; - } - array_thread( level.brutus_spawners, ::add_spawn_function, ::brutus_prespawn ); - for ( i = 0; i < level.brutus_spawners.size; i++ ) - { - level.brutus_spawners[ i ].is_enabled = 1; - level.brutus_spawners[ i ].script_forcespawn = 1; - } - level.brutus_spawn_positions = getstructarray( "brutus_location", "script_noteworthy" ); - level thread setup_interaction_matrix(); - level.sndbrutusistalking = 0; - level.brutus_health = 500; - level.brutus_health_increase = 1000; - level.brutus_round_count = 0; - level.brutus_last_spawn_round = 0; - level.brutus_count = 0; - level.brutus_max_count = 1; - level.brutus_damage_percent = 0.1; - level.brutus_helmet_shots = 5; - level.brutus_team_points_for_death = 500; - level.brutus_player_points_for_death = 250; - level.brutus_points_for_helmet = 250; - level.brutus_alarm_chance = 100; - level.brutus_min_alarm_chance = 100; - level.brutus_alarm_chance_increment = 10; - level.brutus_max_alarm_chance = 200; - level.brutus_min_round_fq = 4; - level.brutus_max_round_fq = 7; - level.brutus_reset_dist_sq = 262144; - level.brutus_aggro_dist_sq = 16384; - level.brutus_aggro_earlyout = 12; - level.brutus_blocker_pieces_req = 1; - level.brutus_zombie_per_round = 1; - level.brutus_players_in_zone_spawn_point_cap = 120; - level.brutus_teargas_duration = 7; - level.player_teargas_duration = 2; - level.brutus_teargas_radius = 64; - level.num_pulls_since_brutus_spawn = 0; - level.brutus_min_pulls_between_box_spawns = 4; - level.brutus_explosive_damage_for_helmet_pop = 1500; - level.brutus_explosive_damage_increase = 600; - level.brutus_failed_paths_to_teleport = 4; - level.brutus_do_prologue = 1; - level.brutus_min_spawn_delay = 10; - level.brutus_max_spawn_delay = 60; - level.brutus_respawn_after_despawn = 1; - level.brutus_in_grief = 0; - if ( getDvar( "ui_gametype" ) == "zgrief" ) - { - level.brutus_in_grief = 1; - } - level.brutus_shotgun_damage_mod = 1.5; - level.brutus_custom_goalradius = 48; - registerclientfield( "actor", "helmet_off", 9000, 1, "int" ); - registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" ); - level thread maps/mp/zombies/_zm_ai_brutus::brutus_spawning_logic(); - if ( !level.brutus_in_grief ) - { - level thread maps/mp/zombies/_zm_ai_brutus::get_brutus_interest_points(); - /* + level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" ); + + if ( level.brutus_spawners.size == 0 ) + return; + + array_thread( level.brutus_spawners, ::add_spawn_function, ::brutus_prespawn ); + + for ( i = 0; i < level.brutus_spawners.size; i++ ) + { + level.brutus_spawners[i].is_enabled = 1; + level.brutus_spawners[i].script_forcespawn = 1; + } + + level.brutus_spawn_positions = getstructarray( "brutus_location", "script_noteworthy" ); + level thread setup_interaction_matrix(); + level.sndbrutusistalking = 0; + level.brutus_health = 500; + level.brutus_health_increase = 1000; + level.brutus_round_count = 0; + level.brutus_last_spawn_round = 0; + level.brutus_count = 0; + level.brutus_max_count = 1; + level.brutus_damage_percent = 0.1; + level.brutus_helmet_shots = 5; + level.brutus_team_points_for_death = 500; + level.brutus_player_points_for_death = 250; + level.brutus_points_for_helmet = 250; + level.brutus_alarm_chance = 100; + level.brutus_min_alarm_chance = 100; + level.brutus_alarm_chance_increment = 10; + level.brutus_max_alarm_chance = 200; + level.brutus_min_round_fq = 4; + level.brutus_max_round_fq = 7; + level.brutus_reset_dist_sq = 262144; + level.brutus_aggro_dist_sq = 16384; + level.brutus_aggro_earlyout = 12; + level.brutus_blocker_pieces_req = 1; + level.brutus_zombie_per_round = 1; + level.brutus_players_in_zone_spawn_point_cap = 120; + level.brutus_teargas_duration = 7; + level.player_teargas_duration = 2; + level.brutus_teargas_radius = 64; + level.num_pulls_since_brutus_spawn = 0; + level.brutus_min_pulls_between_box_spawns = 4; + level.brutus_explosive_damage_for_helmet_pop = 1500; + level.brutus_explosive_damage_increase = 600; + level.brutus_failed_paths_to_teleport = 4; + level.brutus_do_prologue = 1; + level.brutus_min_spawn_delay = 10.0; + level.brutus_max_spawn_delay = 60.0; + level.brutus_respawn_after_despawn = 1; + level.brutus_in_grief = 0; + + if ( getdvar( "ui_gametype" ) == "zgrief" ) + level.brutus_in_grief = 1; + + level.brutus_shotgun_damage_mod = 1.5; + level.brutus_custom_goalradius = 48; + registerclientfield( "actor", "helmet_off", 9000, 1, "int" ); + registerclientfield( "actor", "brutus_lock_down", 9000, 1, "int" ); + level thread maps\mp\zombies\_zm_ai_brutus::brutus_spawning_logic(); + + if ( !level.brutus_in_grief ) + { + level thread maps\mp\zombies\_zm_ai_brutus::get_brutus_interest_points(); /# - setup_devgui(); + setup_devgui(); #/ - */ - level.custom_perk_validation = ::check_perk_machine_valid; - level.custom_craftable_validation = ::check_craftable_table_valid; - level.custom_plane_validation = ::check_plane_valid; - } + level.custom_perk_validation = maps\mp\zombies\_zm_ai_brutus::check_perk_machine_valid; + level.custom_craftable_validation = maps\mp\zombies\_zm_ai_brutus::check_craftable_table_valid; + level.custom_plane_validation = maps\mp\zombies\_zm_ai_brutus::check_plane_valid; + } } -setup_interaction_matrix() //checked changed to match cerberus output +setup_interaction_matrix() { - level.interaction_types = []; - level.interaction_types[ "magic_box" ] = spawnstruct(); - level.interaction_types[ "magic_box" ].priority = 0; - level.interaction_types[ "magic_box" ].animstate = "zm_lock_magicbox"; - level.interaction_types[ "magic_box" ].notify_name = "box_lock_anim"; - level.interaction_types[ "magic_box" ].action_notetrack = "locked"; - level.interaction_types[ "magic_box" ].end_notetrack = "lock_done"; - level.interaction_types[ "magic_box" ].validity_func = ::is_magic_box_valid; - level.interaction_types[ "magic_box" ].get_func = ::get_magic_boxes; - level.interaction_types[ "magic_box" ].value_func = ::get_dist_score; - level.interaction_types[ "magic_box" ].interact_func = ::magic_box_lock; - level.interaction_types[ "magic_box" ].spawn_bias = 1000; - level.interaction_types[ "magic_box" ].num_times_to_scale = 1; - level.interaction_types[ "magic_box" ].unlock_cost = 2000; - level.interaction_types[ "perk_machine" ] = spawnstruct(); - level.interaction_types[ "perk_machine" ].priority = 1; - level.interaction_types[ "perk_machine" ].animstate = "zm_lock_perk_machine"; - level.interaction_types[ "perk_machine" ].notify_name = "perk_lock_anim"; - level.interaction_types[ "perk_machine" ].action_notetrack = "locked"; - level.interaction_types[ "perk_machine" ].validity_func = ::is_perk_machine_valid; - level.interaction_types[ "perk_machine" ].get_func = ::get_perk_machines; - level.interaction_types[ "perk_machine" ].value_func = ::get_dist_score; - level.interaction_types[ "perk_machine" ].interact_func = ::perk_machine_lock; - level.interaction_types[ "perk_machine" ].spawn_bias = 800; - level.interaction_types[ "perk_machine" ].num_times_to_scale = 3; - level.interaction_types[ "perk_machine" ].unlock_cost = 2000; - level.interaction_types[ "craftable_table" ] = spawnstruct(); - level.interaction_types[ "craftable_table" ].priority = 2; - level.interaction_types[ "craftable_table" ].animstate = "zm_smash_craftable_table"; - level.interaction_types[ "craftable_table" ].notify_name = "table_smash_anim"; - level.interaction_types[ "craftable_table" ].action_notetrack = "fire"; - level.interaction_types[ "craftable_table" ].validity_func = ::is_craftable_table_valid; - level.interaction_types[ "craftable_table" ].get_func = ::get_craftable_tables; - level.interaction_types[ "craftable_table" ].value_func = ::get_dist_score; - level.interaction_types[ "craftable_table" ].interact_func = ::craftable_table_lock; - level.interaction_types[ "craftable_table" ].spawn_bias = 600; - level.interaction_types[ "craftable_table" ].num_times_to_scale = 1; - level.interaction_types[ "craftable_table" ].unlock_cost = 2000; - level.interaction_types[ "craftable_table" ].interaction_z_offset = -15; - level.interaction_types[ "craftable_table" ].interaction_yaw_offset = 270; - level.interaction_types[ "craftable_table" ].fx_z_offset = -44; - level.interaction_types[ "craftable_table" ].fx_yaw_offset = 270; - level.interaction_types[ "trap" ] = spawnstruct(); - level.interaction_types[ "trap" ].priority = 3; - level.interaction_types[ "trap" ].animstate = "zm_smash_trap"; - level.interaction_types[ "trap" ].notify_name = "trap_smash_anim"; - level.interaction_types[ "trap" ].action_notetrack = "fire"; - level.interaction_types[ "trap" ].validity_func = ::is_trap_valid; - level.interaction_types[ "trap" ].get_func = ::get_traps; - level.interaction_types[ "trap" ].value_func = ::get_dist_score; - level.interaction_types[ "trap" ].interact_func = ::trap_smash; - level.interaction_types[ "trap" ].spawn_bias = 400; - level.interaction_types[ "trap" ].interaction_z_offset = -15; - level.interaction_types[ "plane_ramp" ] = spawnstruct(); - level.interaction_types[ "plane_ramp" ].priority = 4; - level.interaction_types[ "plane_ramp" ].animstate = "zm_lock_plane_ramp"; - level.interaction_types[ "plane_ramp" ].notify_name = "plane_lock_anim"; - level.interaction_types[ "plane_ramp" ].action_notetrack = "locked"; - level.interaction_types[ "plane_ramp" ].end_notetrack = "lock_done"; - level.interaction_types[ "plane_ramp" ].validity_func = ::is_plane_ramp_valid; - level.interaction_types[ "plane_ramp" ].get_func = ::get_plane_ramps; - level.interaction_types[ "plane_ramp" ].value_func = ::get_dist_score; - level.interaction_types[ "plane_ramp" ].interact_func = ::plane_ramp_lock; - level.interaction_types[ "plane_ramp" ].spawn_bias = 500; - level.interaction_types[ "plane_ramp" ].num_times_to_scale = 3; - level.interaction_types[ "plane_ramp" ].unlock_cost = 2000; - level.interaction_types[ "plane_ramp" ].interaction_z_offset = -60; - level.interaction_types[ "plane_ramp" ].fx_z_offset = -60; - level.interaction_types[ "plane_ramp" ].fx_x_offset = 70; - level.interaction_types[ "plane_ramp" ].fx_yaw_offset = 90; - level.interaction_types[ "blocker" ] = spawnstruct(); - level.interaction_types[ "blocker" ].priority = 5; - level.interaction_types[ "blocker" ].animstate = "zm_smash_blocker"; - level.interaction_types[ "blocker" ].notify_name = "board_smash_anim"; - level.interaction_types[ "blocker" ].action_notetrack = "fire"; - level.interaction_types[ "blocker" ].validity_func = ::is_blocker_valid; - level.interaction_types[ "blocker" ].get_func = ::get_blockers; - level.interaction_types[ "blocker" ].value_func = ::get_dist_score; - level.interaction_types[ "blocker" ].interact_func = ::blocker_smash; - level.interaction_types[ "blocker" ].spawn_bias = 50; - level.interaction_priority = []; - interaction_types = getarraykeys( level.interaction_types ); - for ( i = 0; i < interaction_types.size; i++ ) - { - int_type = interaction_types[ i ]; - interaction = level.interaction_types[ int_type ]; - /* + level.interaction_types = []; + level.interaction_types["magic_box"] = spawnstruct(); + level.interaction_types["magic_box"].priority = 0; + level.interaction_types["magic_box"].animstate = "zm_lock_magicbox"; + level.interaction_types["magic_box"].notify_name = "box_lock_anim"; + level.interaction_types["magic_box"].action_notetrack = "locked"; + level.interaction_types["magic_box"].end_notetrack = "lock_done"; + level.interaction_types["magic_box"].validity_func = ::is_magic_box_valid; + level.interaction_types["magic_box"].get_func = ::get_magic_boxes; + level.interaction_types["magic_box"].value_func = ::get_dist_score; + level.interaction_types["magic_box"].interact_func = ::magic_box_lock; + level.interaction_types["magic_box"].spawn_bias = 1000; + level.interaction_types["magic_box"].num_times_to_scale = 1; + level.interaction_types["magic_box"].unlock_cost = 2000; + level.interaction_types["perk_machine"] = spawnstruct(); + level.interaction_types["perk_machine"].priority = 1; + level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine"; + level.interaction_types["perk_machine"].notify_name = "perk_lock_anim"; + level.interaction_types["perk_machine"].action_notetrack = "locked"; + level.interaction_types["perk_machine"].validity_func = ::is_perk_machine_valid; + level.interaction_types["perk_machine"].get_func = ::get_perk_machines; + level.interaction_types["perk_machine"].value_func = ::get_dist_score; + level.interaction_types["perk_machine"].interact_func = ::perk_machine_lock; + level.interaction_types["perk_machine"].spawn_bias = 800; + level.interaction_types["perk_machine"].num_times_to_scale = 3; + level.interaction_types["perk_machine"].unlock_cost = 2000; + level.interaction_types["craftable_table"] = spawnstruct(); + level.interaction_types["craftable_table"].priority = 2; + level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table"; + level.interaction_types["craftable_table"].notify_name = "table_smash_anim"; + level.interaction_types["craftable_table"].action_notetrack = "fire"; + level.interaction_types["craftable_table"].validity_func = ::is_craftable_table_valid; + level.interaction_types["craftable_table"].get_func = ::get_craftable_tables; + level.interaction_types["craftable_table"].value_func = ::get_dist_score; + level.interaction_types["craftable_table"].interact_func = ::craftable_table_lock; + level.interaction_types["craftable_table"].spawn_bias = 600; + level.interaction_types["craftable_table"].num_times_to_scale = 1; + level.interaction_types["craftable_table"].unlock_cost = 2000; + level.interaction_types["craftable_table"].interaction_z_offset = -15; + level.interaction_types["craftable_table"].interaction_yaw_offset = 270; + level.interaction_types["craftable_table"].fx_z_offset = -44; + level.interaction_types["craftable_table"].fx_yaw_offset = 270; + level.interaction_types["trap"] = spawnstruct(); + level.interaction_types["trap"].priority = 3; + level.interaction_types["trap"].animstate = "zm_smash_trap"; + level.interaction_types["trap"].notify_name = "trap_smash_anim"; + level.interaction_types["trap"].action_notetrack = "fire"; + level.interaction_types["trap"].validity_func = ::is_trap_valid; + level.interaction_types["trap"].get_func = ::get_traps; + level.interaction_types["trap"].value_func = ::get_dist_score; + level.interaction_types["trap"].interact_func = ::trap_smash; + level.interaction_types["trap"].spawn_bias = 400; + level.interaction_types["trap"].interaction_z_offset = -15; + level.interaction_types["plane_ramp"] = spawnstruct(); + level.interaction_types["plane_ramp"].priority = 4; + level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp"; + level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim"; + level.interaction_types["plane_ramp"].action_notetrack = "locked"; + level.interaction_types["plane_ramp"].end_notetrack = "lock_done"; + level.interaction_types["plane_ramp"].validity_func = ::is_plane_ramp_valid; + level.interaction_types["plane_ramp"].get_func = ::get_plane_ramps; + level.interaction_types["plane_ramp"].value_func = ::get_dist_score; + level.interaction_types["plane_ramp"].interact_func = ::plane_ramp_lock; + level.interaction_types["plane_ramp"].spawn_bias = 500; + level.interaction_types["plane_ramp"].num_times_to_scale = 3; + level.interaction_types["plane_ramp"].unlock_cost = 2000; + level.interaction_types["plane_ramp"].interaction_z_offset = -60; + level.interaction_types["plane_ramp"].fx_z_offset = -60; + level.interaction_types["plane_ramp"].fx_x_offset = 70; + level.interaction_types["plane_ramp"].fx_yaw_offset = 90; + level.interaction_types["blocker"] = spawnstruct(); + level.interaction_types["blocker"].priority = 5; + level.interaction_types["blocker"].animstate = "zm_smash_blocker"; + level.interaction_types["blocker"].notify_name = "board_smash_anim"; + level.interaction_types["blocker"].action_notetrack = "fire"; + level.interaction_types["blocker"].validity_func = ::is_blocker_valid; + level.interaction_types["blocker"].get_func = ::get_blockers; + level.interaction_types["blocker"].value_func = ::get_dist_score; + level.interaction_types["blocker"].interact_func = ::blocker_smash; + level.interaction_types["blocker"].spawn_bias = 50; + level.interaction_priority = []; + interaction_types = getarraykeys( level.interaction_types ); + + for ( i = 0; i < interaction_types.size; i++ ) + { + int_type = interaction_types[i]; + interaction = level.interaction_types[int_type]; /# - assert( !isDefined( level.interaction_priority[ interaction.priority ] ) ); + assert( !isdefined( level.interaction_priority[interaction.priority] ) ); #/ - */ - level.interaction_priority[ interaction.priority ] = int_type; - } - /* + level.interaction_priority[interaction.priority] = int_type; + } /# - i = 0; - while ( i < interaction_types.size ) - { - assert( isDefined( level.interaction_priority[ i ] ) ); - i++; -#/ - } - */ -} - -brutus_prespawn() //checked matches cerberus output -{ -} - -brutus_spawn_prologue( spawn_pos ) //checked matches cerberus output -{ - playsoundatposition( "zmb_ai_brutus_prespawn", spawn_pos.origin ); - wait 3; -} - -brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ) //checked matches cerberus output -{ - level.num_pulls_since_brutus_spawn = 0; - self set_zombie_run_cycle( "run" ); - if ( !isDefined( has_helmet ) ) - { - self.has_helmet = 1; - } - else - { - self.has_helmet = has_helmet; - } - if ( !isDefined( helmet_hits ) ) - { - self.helmet_hits = 0; - } - else - { - self.helmet_hits = helmet_hits; - } - if ( !isDefined( explosive_dmg_taken ) ) - { - self.explosive_dmg_taken = 0; - } - else - { - self.explosive_dmg_taken = explosive_dmg_taken; - } - if ( !isDefined( starting_health ) ) - { - self brutus_health_increases(); - self.maxhealth = level.brutus_health; - self.health = level.brutus_health; - } - else - { - self.maxhealth = starting_health; - self.health = starting_health; - } - self.explosive_dmg_req = level.brutus_expl_dmg_req; - self.no_damage_points = 1; - self endon( "death" ); - level endon( "intermission" ); - self.animname = "brutus_zombie"; - self.audio_type = "brutus"; - self.has_legs = 1; - self.ignore_all_poi = 1; - self.is_brutus = 1; - self.ignore_enemy_count = 1; - self.instakill_func = ::brutus_instakill_override; - self.nuke_damage_func = ::brutus_nuke_override; - self.melee_anim_func = ::melee_anim_func; - self.meleedamage = 99; - self.custom_item_dmg = 1000; - self.brutus_lockdown_state = 0; - recalc_zombie_array(); - self setphysparams( 20, 0, 60 ); - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.allowpain = 0; - self animmode( "normal" ); - self orientmode( "face enemy" ); - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self setfreecameralockonallowed( 0 ); - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - if ( isDefined( zone_name ) && zone_name == "zone_golden_gate_bridge" ) - { - wait randomfloat( 1.5 ); - spawn_pos = get_random_brutus_spawn_pos( zone_name ); - } - else - { - spawn_pos = get_best_brutus_spawn_pos( zone_name ); - } - if ( !isDefined( spawn_pos ) ) - { - /* + for ( i = 0; i < interaction_types.size; i++ ) + { /# - println( "ERROR: Tried to spawn brutus with no brutus spawn_positions!\n" ); - iprintln( "ERROR: Tried to spawn brutus with no brutus spawn_positions!" ); + assert( isdefined( level.interaction_priority[i] ) ); +#/ + } #/ - */ - self delete(); - return; - } - if ( !isDefined( spawn_pos.angles ) ) - { - spawn_pos.angles = ( 0, 0, 0 ); - } - if ( isDefined( level.brutus_do_prologue ) && level.brutus_do_prologue ) - { - self brutus_spawn_prologue( spawn_pos ); - } - if ( !self.has_helmet ) - { - self detach( "c_zom_cellbreaker_helmet" ); - } - level.brutus_count++; - self maps/mp/zombies/_zm_spawner::zombie_complete_emerging_into_playable_area(); - self thread snddelayedmusic(); - self thread brutus_death(); - self thread brutus_check_zone(); - self thread brutus_watch_enemy(); - self forceteleport( spawn_pos.origin, spawn_pos.angles ); - self.cant_melee = 1; - self.not_interruptable = 1; - self.actor_damage_func = ::brutus_damage_override; - self.non_attacker_func = ::brutus_non_attacker_damage_override; - self thread brutus_lockdown_client_effects( 0.5 ); - playfx( level._effect[ "brutus_spawn" ], self.origin ); - playsoundatposition( "zmb_ai_brutus_spawn", self.origin ); - self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "spawn_anim" ); - self waittillmatch( "spawn_anim" ); - self.not_interruptable = 0; - self.cant_melee = 0; - self thread brutus_chest_flashlight(); - self thread brutus_find_flesh(); - self thread maps/mp/zombies/_zm_spawner::delayed_zombie_eye_glow(); - level notify( "brutus_spawned", self, "spawn_complete" ); - logline1 = "INFO: _zm_ai_brutus.gsc brutus_spawn() completed its operation " + "\n"; - logprint( logline1 ); } -brutus_chest_flashlight() //checked matches cerberus output +brutus_prespawn() { - wait 0.1; - self.chest_flashlight = spawn( "script_model", self.origin ); - self.chest_flashlight setmodel( "tag_origin" ); - self.chest_flashlight linkto( self, "J_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) ); - playfxontag( level._effect[ "brutus_flashlight" ], self.chest_flashlight, "tag_origin" ); - self waittill( "death" ); - if ( isDefined( self.chest_flashlight ) ) - { - self.chest_flashlight delete(); - } + } -brutus_temp_despawn( brutus, endon_notify, respawn_notify ) //checked changed to match cerberus output +brutus_spawn_prologue( spawn_pos ) { - level endon( endon_notify ); - align_struct = spawn( "script_model", brutus.origin ); - align_struct.angles = brutus.angles; - align_struct setmodel( "tag_origin" ); - if ( !level.brutus_in_grief && brutus istouching( level.e_gondola.t_ride ) || isDefined( brutus.force_gondola_teleport ) && brutus.force_gondola_teleport ) - { - brutus.force_gondola_teleport = 0; - align_struct linkto( level.e_gondola ); - brutus linkto( align_struct ); - } - brutus.not_interruptable = 1; - playfxontag( level._effect[ "brutus_spawn" ], align_struct, "tag_origin" ); - brutus animscripted( brutus.origin, brutus.angles, "zm_taunt" ); - brutus maps/mp/animscripts/zm_shared::donotetracks( "taunt_anim" ); - brutus.not_interruptable = 0; - brutus ghost(); - brutus notify( "brutus_cleanup" ); - brutus notify( "brutus_teleporting" ); - if ( isDefined( align_struct ) ) - { - align_struct delete(); - } - if ( isDefined( brutus.sndbrutusmusicent ) ) - { - brutus.sndbrutusmusicent delete(); - brutus.sndbrutusmusicent = undefined; - } - health = brutus.health; - has_helmet = brutus.has_helmet; - helmet_hits = brutus.helmet_hits; - explosive_dmg_taken = brutus.explosive_dmg_taken; - zone_name = brutus.force_zone; - brutus delete(); - level.brutus_count--; - - level waittill( respawn_notify ); - wait randomfloatrange( 1, 2.5 ); - level thread respawn_brutus( health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); + playsoundatposition( "zmb_ai_brutus_prespawn", spawn_pos.origin ); + wait 3; } -brutus_spawn_zone_locked( zone_name ) //checked matches cerberus output +brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ) { - ai = spawn_zombie( level.brutus_spawners[ 0 ] ); - ai thread brutus_spawn( undefined, undefined, undefined, undefined, zone_name ); - ai.force_zone = zone_name; - if ( isDefined( ai ) ) - { - ai playsound( "zmb_ai_brutus_spawn_2d" ); - return ai; - } -} + level.num_pulls_since_brutus_spawn = 0; + self set_zombie_run_cycle( "run" ); -brutus_spawn_in_zone( zone_name, zone_locked ) //checked matches cerberus output -{ - if ( isDefined( zone_locked ) && zone_locked ) - { - return brutus_spawn_zone_locked( zone_name ); - } - else - { - ai = spawn_zombie( level.brutus_spawners[ 0 ] ); - ai thread brutus_spawn( undefined, undefined, undefined, undefined, zone_name ); - if ( isDefined( ai ) ) - { - ai playsound( "zmb_ai_brutus_spawn_2d" ); - return ai; - } - } -} + if ( !isdefined( has_helmet ) ) + self.has_helmet = 1; + else + self.has_helmet = has_helmet; -snddelayedmusic() //checked matches cerberus output -{ - self endon( "death" ); - wait 5; - if ( !isDefined( self.sndbrutusmusicent ) ) - { - sndentorigin = self gettagorigin( "J_spineupper" ); - self.sndbrutusmusicent = spawn( "script_origin", sndentorigin ); - self.sndbrutusmusicent linkto( self, "J_spineupper" ); - self.sndbrutusmusicent playloopsound( "mus_event_brutus_loop" ); - } - self thread sndbrutusloopwatcher( self.sndbrutusmusicent ); -} + if ( !isdefined( helmet_hits ) ) + self.helmet_hits = 0; + else + self.helmet_hits = helmet_hits; -sndbrutusloopwatcher( ent ) //checked matches cerberus output -{ - self endon( "death" ); - level waittill( "sndStopBrutusLoop" ); - ent stoploopsound( 1 ); - wait 1; - ent delete(); -} + if ( !isdefined( explosive_dmg_taken ) ) + self.explosive_dmg_taken = 0; + else + self.explosive_dmg_taken = explosive_dmg_taken; -brutus_health_increases() //checked matches cerberus output -{ - if ( level.round_number > level.brutus_last_spawn_round ) - { - a_players = getplayers(); - n_player_modifier = 1; - if ( a_players.size > 1 ) - { - n_player_modifier = a_players.size * 0.75; - } - level.brutus_round_count++; - level.brutus_health = int( level.brutus_health_increase * n_player_modifier * level.brutus_round_count ); - level.brutus_expl_dmg_req = int( level.brutus_explosive_damage_increase * n_player_modifier * level.brutus_round_count ); - if ( level.brutus_health >= ( 5000 * n_player_modifier ) ) - { - level.brutus_health = int( 5000 * n_player_modifier ); - } - if ( level.brutus_expl_dmg_req >= ( 4500 * n_player_modifier ) ) - { - level.brutus_expl_dmg_req = int( 4500 * n_player_modifier ); - } - level.brutus_last_spawn_round = level.round_number; - } -} + if ( !isdefined( starting_health ) ) + { + self brutus_health_increases(); + self.maxhealth = level.brutus_health; + self.health = level.brutus_health; + } + else + { + self.maxhealth = starting_health; + self.health = starting_health; + } -//this function breaks in the first rooms mod when _zm_zonemgr is loaded -get_brutus_spawn_pos_val( brutus_pos ) //checked changed to match cerberus output -{ - score = 0; - zone_name = brutus_pos.zone_name; - logline1 = "INFO: _zm_ai_brutus.gsc get_brutus_spawn_pos_val() zone_name: " + zone_name + "\n"; - logprint( logline1 ); - if ( !maps/mp/zombies/_zm_zonemgr::zone_is_enabled( zone_name ) ) - { - return 0; - } - a_players_in_zone = get_players_in_zone( zone_name, 1 ); - logline1 = "INFO: _zm_ai_brutus.gsc get_brutus_spawn_pos_val() a_players_in_zone.size: " + a_players_in_zone.size + "\n"; - logprint( logline1 ); - if ( a_players_in_zone.size == 0 ) - { - return 0; - } - else - { - n_score_addition = 1; - for ( i = 0; i < a_players_in_zone.size; i++ ) - { - if ( findpath( brutus_pos.origin, a_players_in_zone[ i ].origin, self, 0, 0 ) ) - { - n_dist = distance2d( brutus_pos.origin, a_players_in_zone[ i ].origin ); - n_score_addition += linear_map( n_dist, 2000, 0, 0, level.brutus_players_in_zone_spawn_point_cap ); - } - } - if ( n_score_addition > level.brutus_players_in_zone_spawn_point_cap ) - { - n_score_addition = level.brutus_players_in_zone_spawn_point_cap; - } - score += n_score_addition; - } - if ( !level.brutus_in_grief ) - { - interaction_types = getarraykeys( level.interaction_types ); - interact_array = level.interaction_types; - for ( i = 0; i < interaction_types.size; i++ ) - { - int_type = interaction_types[ i ]; - interaction = interact_array[ int_type ]; - interact_points = [[ interaction.get_func ]]( zone_name ); - for ( j = 0; j < interact_points.size; j++ ) - { - if ( interact_points[ j ] [[ interaction.validity_func ]]() ) - { - score += interaction.spawn_bias; - } - } - } - } - return score; -} + self.explosive_dmg_req = level.brutus_expl_dmg_req; + self.no_damage_points = 1; + self endon( "death" ); + level endon( "intermission" ); + self.animname = "brutus_zombie"; + self.audio_type = "brutus"; + self.has_legs = 1; + self.ignore_all_poi = 1; + self.is_brutus = 1; + self.ignore_enemy_count = 1; + self.instakill_func = ::brutus_instakill_override; + self.nuke_damage_func = ::brutus_nuke_override; + self.melee_anim_func = ::melee_anim_func; + self.meleedamage = 99; + self.custom_item_dmg = 1000; + self.brutus_lockdown_state = 0; + recalc_zombie_array(); + self setphysparams( 20, 0, 60 ); + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.allowpain = 0; + self animmode( "normal" ); + self orientmode( "face enemy" ); + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self setfreecameralockonallowed( 0 ); + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); -get_random_brutus_spawn_pos( zone_name ) //checked partially changed to match cerberus output see info.md -{ - logline1 = "INFO: _zm_ai_brutus.gsc get_random_brutus_spawn_pos() is called " + "\n"; - logprint( logline1 ); - zone_spawn_pos = []; - i = 0; - logline1 = "INFO: _zm_ai_brutus.gsc get_random_brutus_spawn_pos() level.zombie_brutus_locations: " + level.zombie_brutus_locations.size + "\n"; - logprint( logline1 ); - while ( i < level.zombie_brutus_locations.size ) - { - if ( isDefined( zone_name ) && level.zombie_brutus_locations[ i ].zone_name != zone_name ) - { - i++; - continue; - } - zone_spawn_pos[ zone_spawn_pos.size ] = i; - i++; - } - if ( zone_spawn_pos.size > 0 ) - { - pos_idx = randomint( zone_spawn_pos.size ); - return level.zombie_brutus_locations[ zone_spawn_pos[ pos_idx ] ]; - } - return undefined; -} + if ( isdefined( zone_name ) && zone_name == "zone_golden_gate_bridge" ) + { + wait( randomfloat( 1.5 ) ); + spawn_pos = get_random_brutus_spawn_pos( zone_name ); + } + else + spawn_pos = get_best_brutus_spawn_pos( zone_name ); -get_best_brutus_spawn_pos( zone_name ) //checked partially changed to match cerberus output see info.md -{ - logline1 = "INFO: _zm_ai_brutus.gsc get_best_brutus_spawn_pos() level.zombie_brutus_locations: " + level.zombie_brutus_locations.size + "\n"; - logprint( logline1 ); - val = 0; - i = 0; - while ( i < level.zombie_brutus_locations.size ) - { - if ( isDefined( zone_name ) && level.zombie_brutus_locations[ i ].zone_name != zone_name ) - { - i++; - continue; - } - newval = get_brutus_spawn_pos_val( level.zombie_brutus_locations[ i ] ); - if ( newval > val ) - { - val = newval; - pos_idx = i; - } - i++; - } - if ( isDefined( pos_idx ) ) - { - if ( isDefined( level.zombie_brutus_locations[ pos_idx ] ) ) - { - logline1 = "INFO: _zm_ai_brutus.gsc get_best_brutus_spawn_pos() level.zombie_brutus_locations[ pos_idx ] isDefined " + "\n"; - logprint( logline1 ); - } - if ( isDefined( level.zombie_brutus_locations[ pos_idx ] ) ) - { - return level.zombie_brutus_locations[ pos_idx ]; - } - } - else - { - return undefined; - } -} - -play_ambient_brutus_vocals() //checked changed at own discretion -{ - self endon( "death" ); - wait randomintrange( 2, 4 ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - if ( isDefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) - { - continue; - } - self playsound( "zmb_vocals_brutus_ambience" ); - } - wait randomfloatrange( 1, 1.5 ); - } -} - -brutus_cleanup() //checked matches cerberus output -{ - self waittill( "brutus_cleanup" ); - level.sndbrutusistalking = 0; - if ( isDefined( self.sndbrutusmusicent ) ) - { - self.sndbrutusmusicent delete(); - self.sndbrutusmusicent = undefined; - } -} - -brutus_cleanup_at_end_of_grief_round() //checked matches cerberus output -{ - self endon( "death" ); - self endon( "brutus_cleanup" ); - level waittill_any( "keep_griefing", "game_module_ended" ); - self delete(); - self notify( "brutus_cleanup" ); -} - -brutus_death() //checked partially changed to match cerberus output see info.md -{ - self endon( "brutus_cleanup" ); - self thread brutus_cleanup(); - if ( level.brutus_in_grief ) - { - self thread brutus_cleanup_at_end_of_grief_round(); - } - self waittill( "death" ); - self thread sndbrutusvox( "vox_brutus_brutus_defeated" ); - level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "brutus_death" ); - level.brutus_count--; - - playfx( level._effect[ "brutus_death" ], self.origin ); - playsoundatposition( "zmb_ai_brutus_death", self.origin ); - if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) - { - level.last_brutus_origin = self.origin; - level notify( "last_brutus_down" ); - if ( isDefined( self.brutus_round_spawn_failsafe ) && self.brutus_round_spawn_failsafe ) - { - level.next_brutus_round = level.round_number + 1; - } - } - else if ( isDefined( self.brutus_round_spawn_failsafe ) && self.brutus_round_spawn_failsafe ) - { - level.zombie_total++; - level.zombie_total_subtract++; - level thread brutus_round_spawn_failsafe_respawn(); - } - if ( !isDefined( self.suppress_brutus_powerup_drop ) || isDefined( self.suppress_brutus_powerup_drop ) && !self.suppress_brutus_powerup_drop ) - { - if ( !isDefined( level.global_brutus_powerup_prevention ) || isDefined( level.global_brutus_powerup_prevention ) && !level.global_brutus_powerup_prevention ) - { - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_golden_gate_bridge" ) ) - { - level.global_brutus_powerup_prevention = 1; - } - if ( level.powerup_drop_count >= level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] ) - { - level.powerup_drop_count = level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] - 1; - } - level.zombie_vars[ "zombie_drop_item" ] = 1; - level thread maps/mp/zombies/_zm_powerups::powerup_drop( self.origin ); - } - } - if ( isplayer( self.attacker ) ) - { - event = "death"; - if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) - { - event = "ballistic_knife_death"; - } - self.attacker thread do_player_general_vox( "general", "brutus_killed", 20, 20 ); - if ( level.brutus_in_grief ) - { - team_points = level.brutus_team_points_for_death; - player_points = level.brutus_player_points_for_death; - a_players = getplayers( self.team ); - } - else - { - multiplier = maps/mp/zombies/_zm_score::get_points_multiplier( self ); - team_points = multiplier * round_up_score( level.brutus_team_points_for_death, 5 ); - player_points = multiplier * round_up_score( level.brutus_player_points_for_death, 5 ); - a_players = getplayers(); - } - foreach ( player in a_players ) - { - if ( !is_player_valid( player ) ) - { - } - else - { - player add_to_player_score( team_points ); - if ( player == self.attacker ) - { - player add_to_player_score( player_points ); - level notify( "brutus_killed", player ); - } - player.pers[ "score" ] = player.score; - player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_brutus_killed", 0 ); - } - } - } - self notify( "brutus_cleanup" ); -} - -brutus_round_spawn_failsafe_respawn() //checked changed to match cerberus output -{ - while ( 1 ) - { - wait 2; - if ( attempt_brutus_spawn( 1 ) ) - { - break; - } - } -} - -get_interact_offset( item, target_type ) //checked matches cerberus output -{ - /* + if ( !isdefined( spawn_pos ) ) + { /# - assert( isDefined( level.interaction_types[ target_type ] ) ); + println( "ERROR: Tried to spawn brutus with no brutus spawn_positions!\n" ); + iprintln( "ERROR: Tried to spawn brutus with no brutus spawn_positions!" ); #/ - */ - interaction = level.interaction_types[ target_type ]; - anim_state = interaction.animstate; - animationid = self getanimfromasd( anim_state, 0 ); - origin = item.origin; - angles = item.angles; - if ( isDefined( interaction.interaction_z_offset ) ) - { - origin += ( 0, 0, interaction.interaction_z_offset ); - } - if ( isDefined( interaction.interaction_yaw_offset ) ) - { - angles += ( 0, interaction.interaction_yaw_offset, 0 ); - } - return getstartorigin( origin, angles, animationid ); + self delete(); + return; + } + + if ( !isdefined( spawn_pos.angles ) ) + spawn_pos.angles = ( 0, 0, 0 ); + + if ( isdefined( level.brutus_do_prologue ) && level.brutus_do_prologue ) + self brutus_spawn_prologue( spawn_pos ); + + if ( !self.has_helmet ) + self detach( "c_zom_cellbreaker_helmet" ); + + level.brutus_count++; + self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); + self thread snddelayedmusic(); + self thread brutus_death(); + self thread brutus_check_zone(); + self thread brutus_watch_enemy(); + self forceteleport( spawn_pos.origin, spawn_pos.angles ); + self.cant_melee = 1; + self.not_interruptable = 1; + self.actor_damage_func = ::brutus_damage_override; + self.non_attacker_func = ::brutus_non_attacker_damage_override; + self thread brutus_lockdown_client_effects( 0.5 ); + playfx( level._effect["brutus_spawn"], self.origin ); + playsoundatposition( "zmb_ai_brutus_spawn", self.origin ); + self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" ); + + self waittillmatch( "spawn_anim", "spawn_complete" ); + + self.not_interruptable = 0; + self.cant_melee = 0; + self thread brutus_chest_flashlight(); + self thread brutus_find_flesh(); + self thread maps\mp\zombies\_zm_spawner::delayed_zombie_eye_glow(); + level notify( "brutus_spawned", self ); } -enable_brutus_rounds() //checked matches cerberus output +brutus_chest_flashlight() { - level.brutus_rounds_enabled = 1; - flag_init( "brutus_round" ); - level thread brutus_round_tracker(); + wait 0.1; + self.chest_flashlight = spawn( "script_model", self.origin ); + self.chest_flashlight setmodel( "tag_origin" ); + self.chest_flashlight linkto( self, "J_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + playfxontag( level._effect["brutus_flashlight"], self.chest_flashlight, "tag_origin" ); + + self waittill( "death" ); + + if ( isdefined( self.chest_flashlight ) ) + self.chest_flashlight delete(); } -brutus_round_tracker() //checked changed to match cerberus output +brutus_temp_despawn( brutus, endon_notify, respawn_notify ) { - level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - while ( 1 ) - { - level waittill( "between_round_over" ); - players = get_players(); - if ( level.round_number < 9 && isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) - { - continue; - } - if ( level.next_brutus_round <= level.round_number ) - { - if ( maps/mp/zm_alcatraz_utility::is_team_on_golden_gate_bridge() ) - { - level.next_brutus_round = level.round_number + 1; - continue; - } - wait randomfloatrange( level.brutus_min_spawn_delay, level.brutus_max_spawn_delay ); - if ( attempt_brutus_spawn( level.brutus_zombie_per_round ) ) - { - level.music_round_override = 1; - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "brutus_round_start" ); - level thread sndforcewait(); - level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); - } - } - } + level endon( endon_notify ); + align_struct = spawn( "script_model", brutus.origin ); + align_struct.angles = brutus.angles; + align_struct setmodel( "tag_origin" ); + + if ( !level.brutus_in_grief && ( brutus istouching( level.e_gondola.t_ride ) || isdefined( brutus.force_gondola_teleport ) && brutus.force_gondola_teleport ) ) + { + brutus.force_gondola_teleport = 0; + align_struct linkto( level.e_gondola ); + brutus linkto( align_struct ); + } + + brutus.not_interruptable = 1; + playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" ); + brutus animscripted( brutus.origin, brutus.angles, "zm_taunt" ); + brutus maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" ); + brutus.not_interruptable = 0; + brutus ghost(); + brutus notify( "brutus_cleanup" ); + brutus notify( "brutus_teleporting" ); + + if ( isdefined( align_struct ) ) + align_struct delete(); + + if ( isdefined( brutus.sndbrutusmusicent ) ) + { + brutus.sndbrutusmusicent delete(); + brutus.sndbrutusmusicent = undefined; + } + + health = brutus.health; + has_helmet = brutus.has_helmet; + helmet_hits = brutus.helmet_hits; + explosive_dmg_taken = brutus.explosive_dmg_taken; + zone_name = brutus.force_zone; + brutus delete(); + level.brutus_count--; + + level waittill( respawn_notify ); + + wait( randomfloatrange( 1.0, 2.5 ) ); + level thread respawn_brutus( health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); } -sndforcewait() //checked matches cerberus output +brutus_spawn_zone_locked( zone_name ) { - wait 10; - level.music_round_override = 0; + ai = spawn_zombie( level.brutus_spawners[0] ); + ai thread brutus_spawn( undefined, undefined, undefined, undefined, zone_name ); + ai.force_zone = zone_name; + + if ( isdefined( ai ) ) + { + ai playsound( "zmb_ai_brutus_spawn_2d" ); + return ai; + } } -wait_on_box_alarm() //checked changed to match cerberus output +brutus_spawn_in_zone( zone_name, zone_locked ) { - while ( 1 ) - { - self.zbarrier waittill( "randomization_done" ); - level.num_pulls_since_brutus_spawn++; - if ( level.brutus_in_grief ) - { - level.brutus_min_pulls_between_box_spawns = randomintrange( 7, 10 ); - } - if ( level.num_pulls_since_brutus_spawn >= level.brutus_min_pulls_between_box_spawns ) - { - rand = randomint( 1000 ); - if ( level.brutus_in_grief ) - { - level notify( "spawn_brutus", 1 ); - } - else if ( rand <= level.brutus_alarm_chance ) - { - if ( flag( "moving_chest_now" ) ) - { - continue; - } - if ( attempt_brutus_spawn( 1 ) ) - { - if ( level.next_brutus_round == ( level.round_number + 1 ) ) - { - level.next_brutus_round++; - } - level.brutus_alarm_chance = level.brutus_min_alarm_chance; - } - } - else if ( level.brutus_alarm_chance < level.brutus_max_alarm_chance ) - { - level.brutus_alarm_chance += level.brutus_alarm_chance_increment; - } - } - } + if ( isdefined( zone_locked ) && zone_locked ) + return brutus_spawn_zone_locked( zone_name ); + else + { + ai = spawn_zombie( level.brutus_spawners[0] ); + ai thread brutus_spawn( undefined, undefined, undefined, undefined, zone_name ); + + if ( isdefined( ai ) ) + { + ai playsound( "zmb_ai_brutus_spawn_2d" ); + return ai; + } + } } -brutus_spawning_logic() //checked changed to match cerberus output +snddelayedmusic() { - if ( !level.brutus_in_grief ) - { - level thread enable_brutus_rounds(); - } - if ( isDefined( level.chests ) ) - { - for ( i = 0; i < level.chests.size; i++ ) - { - level.chests[ i ] thread wait_on_box_alarm(); - } - } - while ( 1 ) - { - level waittill( "connected", player ); - wait 20; - num = 1; - while ( 1 ) - { - level waittill( "spawn_brutus", num ); - for ( i = 0; i < num; i++ ) - { - ai = spawn_zombie( level.brutus_spawners[ 0 ] ); - ai thread brutus_spawn(); - } - if ( isDefined( ai ) ) - { - ai playsound( "zmb_ai_brutus_spawn_2d" ); - } - wait 30; - } - } + self endon( "death" ); + wait 5; + + if ( !isdefined( self.sndbrutusmusicent ) ) + { + sndentorigin = self gettagorigin( "J_spineupper" ); + self.sndbrutusmusicent = spawn( "script_origin", sndentorigin ); + self.sndbrutusmusicent linkto( self, "J_spineupper" ); + self.sndbrutusmusicent playloopsound( "mus_event_brutus_loop" ); + } + + self thread sndbrutusloopwatcher( self.sndbrutusmusicent ); } -attempt_brutus_spawn( n_spawn_num ) //checked changed to match cerberus output +sndbrutusloopwatcher( ent ) +{ + self endon( "death" ); + + level waittill( "sndStopBrutusLoop" ); + + ent stoploopsound( 1 ); + wait 1; + ent delete(); +} + +brutus_health_increases() +{ + if ( level.round_number > level.brutus_last_spawn_round ) + { + a_players = getplayers(); + n_player_modifier = 1; + + if ( a_players.size > 1 ) + n_player_modifier = a_players.size * 0.75; + + level.brutus_round_count++; + level.brutus_health = int( level.brutus_health_increase * n_player_modifier * level.brutus_round_count ); + level.brutus_expl_dmg_req = int( level.brutus_explosive_damage_increase * n_player_modifier * level.brutus_round_count ); + + if ( level.brutus_health >= 5000 * n_player_modifier ) + level.brutus_health = int( 5000 * n_player_modifier ); + + if ( level.brutus_expl_dmg_req >= 4500 * n_player_modifier ) + level.brutus_expl_dmg_req = int( 4500 * n_player_modifier ); + + level.brutus_last_spawn_round = level.round_number; + } +} + +get_brutus_spawn_pos_val( brutus_pos ) +{ + score = 0; + zone_name = brutus_pos.zone_name; + + if ( !maps\mp\zombies\_zm_zonemgr::zone_is_enabled( zone_name ) ) + return 0; + + a_players_in_zone = get_players_in_zone( zone_name, 1 ); + + if ( a_players_in_zone.size == 0 ) + return 0; + else + { + n_score_addition = 1; + + for ( i = 0; i < a_players_in_zone.size; i++ ) + { + if ( findpath( brutus_pos.origin, a_players_in_zone[i].origin, self, 0, 0 ) ) + { + n_dist = distance2d( brutus_pos.origin, a_players_in_zone[i].origin ); + n_score_addition += linear_map( n_dist, 2000, 0, 0, level.brutus_players_in_zone_spawn_point_cap ); + } + } + + if ( n_score_addition > level.brutus_players_in_zone_spawn_point_cap ) + n_score_addition = level.brutus_players_in_zone_spawn_point_cap; + + score += n_score_addition; + } + + if ( !level.brutus_in_grief ) + { + interaction_types = getarraykeys( level.interaction_types ); + interact_array = level.interaction_types; + + for ( i = 0; i < interaction_types.size; i++ ) + { + int_type = interaction_types[i]; + interaction = interact_array[int_type]; + interact_points = [[ interaction.get_func ]]( zone_name ); + + for ( j = 0; j < interact_points.size; j++ ) + { + if ( interact_points[j] [[ interaction.validity_func ]]() ) + score += interaction.spawn_bias; + } + } + } + + return score; +} + +get_random_brutus_spawn_pos( zone_name ) +{ + zone_spawn_pos = []; + + for ( i = 0; i < level.zombie_brutus_locations.size; i++ ) + { + if ( isdefined( zone_name ) && level.zombie_brutus_locations[i].zone_name != zone_name ) + continue; + + zone_spawn_pos[zone_spawn_pos.size] = i; + } + + if ( zone_spawn_pos.size > 0 ) + { + pos_idx = randomint( zone_spawn_pos.size ); + return level.zombie_brutus_locations[zone_spawn_pos[pos_idx]]; + } + + return undefined; +} + +get_best_brutus_spawn_pos( zone_name ) +{ + val = 0; + + for ( i = 0; i < level.zombie_brutus_locations.size; i++ ) + { + if ( isdefined( zone_name ) && level.zombie_brutus_locations[i].zone_name != zone_name ) + continue; + + newval = get_brutus_spawn_pos_val( level.zombie_brutus_locations[i] ); + + if ( newval > val ) + { + val = newval; + pos_idx = i; + } + } + + if ( isdefined( pos_idx ) ) + return level.zombie_brutus_locations[pos_idx]; + else + return undefined; +} + +play_ambient_brutus_vocals() +{ + self endon( "death" ); + wait( randomintrange( 2, 4 ) ); + + while ( true ) + { + if ( isdefined( self ) ) + { + if ( isdefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) + { + + } + else + self playsound( "zmb_vocals_brutus_ambience" ); + } + + wait( randomfloatrange( 1, 1.5 ) ); + } +} + +brutus_cleanup() +{ + self waittill( "brutus_cleanup" ); + + level.sndbrutusistalking = 0; + + if ( isdefined( self.sndbrutusmusicent ) ) + { + self.sndbrutusmusicent delete(); + self.sndbrutusmusicent = undefined; + } +} + +brutus_cleanup_at_end_of_grief_round() +{ + self endon( "death" ); + self endon( "brutus_cleanup" ); + level waittill_any( "keep_griefing", "game_module_ended" ); + self delete(); + self notify( "brutus_cleanup" ); +} + +brutus_death() +{ + self endon( "brutus_cleanup" ); + self thread brutus_cleanup(); + + if ( level.brutus_in_grief ) + self thread brutus_cleanup_at_end_of_grief_round(); + + self waittill( "death" ); + + self thread sndbrutusvox( "vox_brutus_brutus_defeated" ); + level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "brutus_death" ); + level.brutus_count--; + playfx( level._effect["brutus_death"], self.origin ); + playsoundatposition( "zmb_ai_brutus_death", self.origin ); + + if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) + { + level.last_brutus_origin = self.origin; + level notify( "last_brutus_down" ); + + if ( isdefined( self.brutus_round_spawn_failsafe ) && self.brutus_round_spawn_failsafe ) + level.next_brutus_round = level.round_number + 1; + } + else if ( isdefined( self.brutus_round_spawn_failsafe ) && self.brutus_round_spawn_failsafe ) + { + level.zombie_total++; + level.zombie_total_subtract++; + level thread brutus_round_spawn_failsafe_respawn(); + } + + if ( !( isdefined( self.suppress_brutus_powerup_drop ) && self.suppress_brutus_powerup_drop ) ) + { + if ( !( isdefined( level.global_brutus_powerup_prevention ) && level.global_brutus_powerup_prevention ) ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_golden_gate_bridge" ) ) + level.global_brutus_powerup_prevention = 1; + + if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] ) + level.powerup_drop_count = level.zombie_vars["zombie_powerup_drop_max_per_round"] - 1; + + level.zombie_vars["zombie_drop_item"] = 1; + level thread maps\mp\zombies\_zm_powerups::powerup_drop( self.origin ); + } + } + + if ( isplayer( self.attacker ) ) + { + event = "death"; + + if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) + event = "ballistic_knife_death"; + + self.attacker thread do_player_general_vox( "general", "brutus_killed", 20, 20 ); + + if ( level.brutus_in_grief ) + { + team_points = level.brutus_team_points_for_death; + player_points = level.brutus_player_points_for_death; + a_players = getplayers( self.team ); + } + else + { + multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); + team_points = multiplier * round_up_score( level.brutus_team_points_for_death, 5 ); + player_points = multiplier * round_up_score( level.brutus_player_points_for_death, 5 ); + a_players = getplayers(); + } + + foreach ( player in a_players ) + { + if ( !is_player_valid( player ) ) + continue; + + player add_to_player_score( team_points ); + + if ( player == self.attacker ) + { + player add_to_player_score( player_points ); + level notify( "brutus_killed", player ); + } + + player.pers["score"] = player.score; + player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_brutus_killed", 0 ); + } + } + + self notify( "brutus_cleanup" ); +} + +brutus_round_spawn_failsafe_respawn() +{ + while ( true ) + { + wait 2.0; + + if ( attempt_brutus_spawn( 1 ) ) + break; + } +} + +get_interact_offset( item, target_type ) { - if ( ( level.brutus_count + n_spawn_num ) > level.brutus_max_count ) - { - /* /# - iprintln( "Brutus max count reached - Preventing Brutus from spawning!" ); + assert( isdefined( level.interaction_types[target_type] ) ); #/ - */ - return 0; - } - level notify( "spawn_brutus", n_spawn_num ); - return 1; + interaction = level.interaction_types[target_type]; + anim_state = interaction.animstate; + animationid = self getanimfromasd( anim_state, 0 ); + origin = item.origin; + angles = item.angles; + + if ( isdefined( interaction.interaction_z_offset ) ) + origin += ( 0, 0, interaction.interaction_z_offset ); + + if ( isdefined( interaction.interaction_yaw_offset ) ) + angles += ( 0, interaction.interaction_yaw_offset, 0 ); + + return getstartorigin( origin, angles, animationid ); } -brutus_start_basic_find_flesh() //checked matches cerberus output +enable_brutus_rounds() { - self.goalradius = 48; - self.custom_goalradius_override = level.brutus_custom_goalradius; - if ( self.ai_state != "find_flesh" ) - { - self.ai_state = "find_flesh"; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + level.brutus_rounds_enabled = 1; + flag_init( "brutus_round" ); + level thread brutus_round_tracker(); } -brutus_stop_basic_find_flesh() //checked matches cerberus output +brutus_round_tracker() { - if ( self.ai_state == "find_flesh" ) - { - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - } + level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + + while ( true ) + { + level waittill( "between_round_over" ); + + players = get_players(); + + if ( level.round_number < 9 && ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) ) + continue; + else if ( level.next_brutus_round <= level.round_number ) + { + if ( maps\mp\zm_alcatraz_utility::is_team_on_golden_gate_bridge() ) + { + level.next_brutus_round = level.round_number + 1; + continue; + } + + wait( randomfloatrange( level.brutus_min_spawn_delay, level.brutus_max_spawn_delay ) ); + + if ( attempt_brutus_spawn( level.brutus_zombie_per_round ) ) + { + level.music_round_override = 1; + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "brutus_round_start" ); + level thread sndforcewait(); + level.next_brutus_round = level.round_number + randomintrange( level.brutus_min_round_fq, level.brutus_max_round_fq ); + } + } + } } -setup_devgui() //checked matches cerberus output +sndforcewait() { - /* + wait 10; + level.music_round_override = 0; +} + +wait_on_box_alarm() +{ + while ( true ) + { + self.zbarrier waittill( "randomization_done" ); + + level.num_pulls_since_brutus_spawn++; + + if ( level.brutus_in_grief ) + level.brutus_min_pulls_between_box_spawns = randomintrange( 7, 10 ); + + if ( level.num_pulls_since_brutus_spawn >= level.brutus_min_pulls_between_box_spawns ) + { + rand = randomint( 1000 ); + + if ( level.brutus_in_grief ) + level notify( "spawn_brutus", 1 ); + else if ( rand <= level.brutus_alarm_chance ) + { + if ( flag( "moving_chest_now" ) ) + continue; + + if ( attempt_brutus_spawn( 1 ) ) + { + if ( level.next_brutus_round == level.round_number + 1 ) + level.next_brutus_round++; + + level.brutus_alarm_chance = level.brutus_min_alarm_chance; + } + } + else if ( level.brutus_alarm_chance < level.brutus_max_alarm_chance ) + level.brutus_alarm_chance += level.brutus_alarm_chance_increment; + } + } +} + +brutus_spawning_logic() +{ + if ( !level.brutus_in_grief ) + level thread enable_brutus_rounds(); + + if ( isdefined( level.chests ) ) + { + for ( i = 0; i < level.chests.size; i++ ) + level.chests[i] thread wait_on_box_alarm(); + } + + while ( true ) + { + level waittill( "spawn_brutus", num ); + + for ( i = 0; i < num; i++ ) + { + ai = spawn_zombie( level.brutus_spawners[0] ); + ai thread brutus_spawn(); + } + + if ( isdefined( ai ) ) + ai playsound( "zmb_ai_brutus_spawn_2d" ); + } +} + +attempt_brutus_spawn( n_spawn_num ) +{ + if ( level.brutus_count + n_spawn_num > level.brutus_max_count ) + { /# - setdvar( "spawn_Brutus", "off" ); - adddebugcommand( "devgui_cmd "Zombies:2/Zombie Spawning:2/Spawn Zombie:1/Brutus:1" "spawn_Brutus on" + "\n" ); - level thread watch_devgui_brutus(); + iprintln( "Brutus max count reached - Preventing Brutus from spawning!" ); #/ - */ + return false; + } + + level notify( "spawn_brutus", n_spawn_num ); + return true; } -watch_devgui_brutus() //checked matches cerberus output +brutus_start_basic_find_flesh() +{ + self.goalradius = 48; + self.custom_goalradius_override = level.brutus_custom_goalradius; + + if ( self.ai_state != "find_flesh" ) + { + self.ai_state = "find_flesh"; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } +} + +brutus_stop_basic_find_flesh() +{ + if ( self.ai_state == "find_flesh" ) + { + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + } +} + +setup_devgui() { - /* /# - while ( 1 ) - { - if ( getDvar( "spawn_Brutus" ) == "on" ) - { - level notify( "spawn_brutus" ); - setdvar( "spawn_Brutus", "off" ); - } - wait 0.1; + setdvar( "spawn_Brutus", "off" ); + adddebugcommand( "devgui_cmd \"Zombies:2/Zombie Spawning:2/Spawn Zombie:1/Brutus:1\" \"spawn_Brutus on\"\n" ); + level thread watch_devgui_brutus(); #/ - } - */ } -respawn_brutus( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name, b_no_current_valid_targets ) //checked matches cerberus output +watch_devgui_brutus() { - if ( isDefined( b_no_current_valid_targets ) && b_no_current_valid_targets ) - { - zone_name = brutus_watch_for_new_valid_targets(); - } - else - { - wait 5; - } - ai = spawn_zombie( level.brutus_spawners[ 0 ] ); - ai thread brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); - ai.force_zone = zone_name; -} - -respawn_brutus_after_gondola( starting_health, has_helmet, helmet_hits, explosive_dmg_taken ) //checked matches cerberus output -{ - level waittill( "gondola_arrived", zone_name ); - ai = spawn_zombie( level.brutus_spawners[ 0 ] ); - ai thread brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); -} - -brutus_watch_for_gondola() //checked matches cerberus output -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "gondola_moving" ); - if ( !level.brutus_in_grief && self istouching( level.e_gondola.t_ride ) ) - { - self.force_gondola_teleport = 1; - } - wait 0.05; - } -} - -are_all_targets_invalid() //checked changed to match cerberus output -{ - a_players = getplayers(); - foreach ( player in a_players ) - { - if ( isDefined( player.is_on_gondola ) && !player.is_on_gondola && isDefined( player.afterlife ) && !player.afterlife ) - { - return 0; - } - } - return 1; -} - -brutus_watch_for_new_valid_targets() //checked matches cerberus output -{ - level thread brutus_watch_for_gondola_arrive(); - level thread brutus_watch_for_non_afterlife_players(); - level waittill( "brutus_valid_targets_arrived", zone_name ); - return zone_name; -} - -brutus_watch_for_gondola_arrive() //checked changed to match cerberus output -{ - level endon( "brutus_valid_targets_arrived" ); - level waittill( "gondola_arrived", zone_name ); - level notify( "brutus_valid_targets_arrived", zone_name ); -} - -brutus_watch_for_non_afterlife_players() //checked changed to match cerberus output -{ - level endon( "brutus_valid_targets_arrived" ); - b_all_players_in_afterlife = 1; - while ( b_all_players_in_afterlife ) - { - a_players = getplayers(); - foreach ( player in a_players ) - { - if ( isDefined( player.afterlife ) && !player.afterlife && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - b_all_players_in_afterlife = 0; - } - } - wait 0.5; - } - level notify( "brutus_valid_targets_arrived" ); -} - -brutus_stuck_teleport() //checked changed to match cerberus output -{ - self endon( "death" ); - align_struct = spawn( "script_model", self.origin ); - align_struct.angles = self.angles; - align_struct setmodel( "tag_origin" ); - if ( ( self istouching( level.e_gondola.t_ride ) || isDefined( self.force_gondola_teleport ) ) && self.force_gondola_teleport && !level.brutus_in_grief ) - { - self.force_gondola_teleport = 0; - align_struct linkto( level.e_gondola ); - self linkto( align_struct ); - } - self.not_interruptable = 1; - playfxontag( level._effect[ "brutus_spawn" ], align_struct, "tag_origin" ); - self animscripted( self.origin, self.angles, "zm_taunt" ); - self maps/mp/animscripts/zm_shared::donotetracks( "taunt_anim" ); - self.not_interruptable = 0; - self ghost(); - self notify( "brutus_cleanup" ); - self notify( "brutus_teleporting" ); - if ( isDefined( align_struct ) ) - { - align_struct delete(); - } - if ( isDefined( self.sndbrutusmusicent ) ) - { - self.sndbrutusmusicent delete(); - self.sndbrutusmusicent = undefined; - } - if ( isDefined( level.brutus_respawn_after_despawn ) && level.brutus_respawn_after_despawn ) - { - b_no_current_valid_targets = are_all_targets_invalid(); - level thread respawn_brutus( self.health, self.has_helmet, self.helmet_hits, self.explosive_dmg_taken, self.force_zone, b_no_current_valid_targets ); - } - level.brutus_count--; - - self delete(); -} - -watch_for_riot_shield_melee() //checked matches cerberus output -{ - self endon( "new_stuck_watcher" ); - self endon( "death" ); - while ( 1 ) - { - self waittill( "item_attack" ); - self.fail_count = 0; - } -} - -watch_for_valid_melee() //checked changed to match cerberus output -{ - self endon( "new_stuck_watcher" ); - self endon( "death" ); - while ( 1 ) - { - self waittillmatch( "melee_anim" ); - if ( isDefined( self.favorite_enemy ) && distancesquared( self.origin, self.favorite_enemy.origin ) < 16384 && isDefined( self.favorite_enemy.is_on_gondola ) && !self.favorite_enemy.is_on_gondola ) - { - self.fail_count = 0; - } - } -} - -brutus_stuck_watcher() //checked changed to match cerberus output -{ - self notify( "new_stuck_watcher" ); - self endon( "death" ); - self endon( "new_stuck_watcher" ); - self.fail_count = 0; - self thread watch_for_valid_melee(); - self thread watch_for_riot_shield_melee(); - while ( 1 ) - { - while ( !isDefined( self.goal_pos ) ) - { - wait 0.05; - } - if ( self.not_interruptable ) - { - wait 1; - } - if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) ) - { - /* /# - println( "Brutus could not path to goal_pos " + self.goal_pos ); + while ( true ) + { + if ( getdvar( _hash_5E6F2932 ) == "on" ) + { + level notify( "spawn_brutus", 1 ); + setdvar( "spawn_Brutus", "off" ); + } + + wait 0.1; + } #/ - */ - self.fail_count++; - } - else - { - self.fail_count = 0; - } - if ( self.fail_count >= level.brutus_failed_paths_to_teleport ) - { - self brutus_stuck_teleport(); - return; - } - wait 1; - } } -should_brutus_aggro( player_zone, brutus_zone ) //checked matches cerberus output +respawn_brutus( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name, b_no_current_valid_targets ) { - if ( !isDefined( player_zone ) || !isDefined( brutus_zone ) ) - { - return 0; - } - if ( player_zone == brutus_zone ) - { - return 1; - } - if ( isDefined( level.zones[ brutus_zone ].adjacent_zones ) && isDefined( level.zones[ brutus_zone ].adjacent_zones[ player_zone ] ) ) - { - return 1; - } - return 0; + if ( isdefined( b_no_current_valid_targets ) && b_no_current_valid_targets ) + zone_name = brutus_watch_for_new_valid_targets(); + else + wait 5; + + ai = spawn_zombie( level.brutus_spawners[0] ); + ai thread brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); + ai.force_zone = zone_name; } -brutus_find_flesh() //checked changed to match cerberus output +respawn_brutus_after_gondola( starting_health, has_helmet, helmet_hits, explosive_dmg_taken ) { - self endon( "death" ); - level endon( "intermission" ); - if ( level.intermission ) - { - return; - } - self.ai_state = "idle"; - self.helitarget = 1; - self.ignoreme = 0; - self.nododgemove = 1; - self.ignore_player = []; - self thread brutus_watch_for_gondola(); - self thread brutus_stuck_watcher(); - self thread brutus_goal_watcher(); - self thread watch_for_player_dist(); - while ( 1 ) - { - if ( self.not_interruptable ) - { - wait 0.05; - continue; - } - player = brutus_get_closest_valid_player(); - brutus_zone = get_zone_from_position( self.origin ); - if ( !isDefined( brutus_zone ) ) - { - brutus_zone = self.prev_zone; - if ( !isDefined( brutus_zone ) ) - { - wait 1; - continue; - } - } - player_zone = undefined; - self.prev_zone = brutus_zone; - if ( level.brutus_in_grief ) - { - brutus_start_basic_find_flesh(); - } - else if ( !isDefined( player ) ) - { - self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); - } - else - { - player_zone = player get_player_zone(); - if ( isDefined( player_zone ) ) - { - self.priority_item = self get_priority_item_for_brutus( player_zone ); - } - else - { - self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); - } - } - if ( isDefined( player ) && distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isDefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) ) - { - self.favorite_enemy = player; - self.goal_pos = player.origin; - brutus_start_basic_find_flesh(); - } - else if ( isDefined( self.priority_item ) ) - { - brutus_stop_basic_find_flesh(); - self.goalradius = 12; - self.custom_goalradius_override = 12; - self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state ); - self setgoalpos( self.goal_pos ); - break; - } - else if ( isDefined( player ) ) - { - self.favorite_enemy = player; - self.goal_pos = self.favorite_enemy.origin; - brutus_start_basic_find_flesh(); - break; - } - else - { - self.goal_pos = self.origin; - self.ai_state = "idle"; - self setanimstatefromasd( "zm_idle" ); - self setgoalpos( self.goal_pos ); - } - wait 1; - } + level waittill( "gondola_arrived", zone_name ); + + ai = spawn_zombie( level.brutus_spawners[0] ); + ai thread brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zone_name ); } -trap_damage_callback( trap ) //checked changed to match cerberus output +brutus_watch_for_gondola() { - self endon( "death" ); - if ( isDefined( self.not_interruptable ) && !self.not_interruptable ) - { - self.not_interruptable = 1; - self animscripted( self.origin, self.angles, "zm_taunt" ); - self maps/mp/animscripts/shared::donotetracks( "taunt_anim" ); - if ( trap.targetname == "fan_trap" ) - { - trap notify( "trap_finished_" + trap.script_string ); - } - else if ( trap.targetname == "acid_trap" ) - { - trap notify( "acid_trap_fx_done" ); - } - self.not_interruptable = 0; - } + self endon( "death" ); + + while ( true ) + { + level waittill( "gondola_moving" ); + + if ( !level.brutus_in_grief && self istouching( level.e_gondola.t_ride ) ) + self.force_gondola_teleport = 1; + + wait 0.05; + } } -zone_array_contains( zone_array, zone_name ) //checked changed to match cerberus output +are_all_targets_invalid() { - for ( j = 0; j < zone_array.size; j++ ) - { - if ( zone_array[ j ] == zone_name ) - { - return 1; - } - } - return 0; + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !( isdefined( player.is_on_gondola ) && player.is_on_gondola ) && !( isdefined( player.afterlife ) && player.afterlife ) ) + return false; + } + + return true; } -get_priority_item_for_brutus( zone_name, do_secondary_zone_checks ) //checked partially changed to match cerberus output +brutus_watch_for_new_valid_targets() { - interact_types = level.interaction_types; - interact_prio = level.interaction_priority; - for ( i = 0; i < interact_prio.size; i++ ) - { - best_score = -1; - best_object = undefined; - int_type = interact_prio[ i ]; - int_struct = interact_types[ int_type ]; - int_objects = self [[ int_struct.get_func ]]( zone_name ); - for ( j = 0; j < int_objects.size; j++ ) - { - if ( int_objects[ j ] [[ int_struct.validity_func ]]() ) - { - score = self [[ int_struct.value_func ]]( int_objects[ j ] ); - /* + level thread brutus_watch_for_gondola_arrive(); + level thread brutus_watch_for_non_afterlife_players(); + + level waittill( "brutus_valid_targets_arrived", zone_name ); + + return zone_name; +} + +brutus_watch_for_gondola_arrive() +{ + level endon( "brutus_valid_targets_arrived" ); + + level waittill( "gondola_arrived", zone_name ); + + level notify( "brutus_valid_targets_arrived", zone_name ); +} + +brutus_watch_for_non_afterlife_players() +{ + level endon( "brutus_valid_targets_arrived" ); + b_all_players_in_afterlife = 1; + + while ( b_all_players_in_afterlife ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( !( isdefined( player.afterlife ) && player.afterlife ) && !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + b_all_players_in_afterlife = 0; + } + + wait 0.5; + } + + level notify( "brutus_valid_targets_arrived" ); +} + +brutus_stuck_teleport() +{ + self endon( "death" ); + align_struct = spawn( "script_model", self.origin ); + align_struct.angles = self.angles; + align_struct setmodel( "tag_origin" ); + + if ( !level.brutus_in_grief && ( self istouching( level.e_gondola.t_ride ) || isdefined( self.force_gondola_teleport ) && self.force_gondola_teleport ) ) + { + self.force_gondola_teleport = 0; + align_struct linkto( level.e_gondola ); + self linkto( align_struct ); + } + + self.not_interruptable = 1; + playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" ); + self animscripted( self.origin, self.angles, "zm_taunt" ); + self maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" ); + self.not_interruptable = 0; + self ghost(); + self notify( "brutus_cleanup" ); + self notify( "brutus_teleporting" ); + + if ( isdefined( align_struct ) ) + align_struct delete(); + + if ( isdefined( self.sndbrutusmusicent ) ) + { + self.sndbrutusmusicent delete(); + self.sndbrutusmusicent = undefined; + } + + if ( isdefined( level.brutus_respawn_after_despawn ) && level.brutus_respawn_after_despawn ) + { + b_no_current_valid_targets = are_all_targets_invalid(); + level thread respawn_brutus( self.health, self.has_helmet, self.helmet_hits, self.explosive_dmg_taken, self.force_zone, b_no_current_valid_targets ); + } + + level.brutus_count--; + self delete(); +} + +watch_for_riot_shield_melee() +{ + self endon( "new_stuck_watcher" ); + self endon( "death" ); + + while ( true ) + { + self waittill( "item_attack" ); + + self.fail_count = 0; + } +} + +watch_for_valid_melee() +{ + self endon( "new_stuck_watcher" ); + self endon( "death" ); + + while ( true ) + { + self waittillmatch( "melee_anim", "end" ); + + if ( isdefined( self.favorite_enemy ) && distancesquared( self.origin, self.favorite_enemy.origin ) < 16384 && !( isdefined( self.favorite_enemy.is_on_gondola ) && self.favorite_enemy.is_on_gondola ) ) + self.fail_count = 0; + } +} + +brutus_stuck_watcher() +{ + self notify( "new_stuck_watcher" ); + self endon( "death" ); + self endon( "new_stuck_watcher" ); + self.fail_count = 0; + self thread watch_for_valid_melee(); + self thread watch_for_riot_shield_melee(); + + while ( true ) + { + while ( !isdefined( self.goal_pos ) ) + wait 0.05; + + if ( self.not_interruptable ) + { + wait 1; + continue; + } + + if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) ) + { /# - assert( score >= 0 ); + println( "Brutus could not path to goal_pos " + self.goal_pos ); #/ - */ - if ( score < best_score || best_score < 0 ) - { - best_object = int_objects[ j ]; - best_score = score; - } - } - } - if ( isDefined( best_object ) ) - { - self.ai_state = int_type; - return best_object; - } - } - if ( isDefined( do_secondary_zone_checks ) && do_secondary_zone_checks ) - { - adj_zone_names = getarraykeys( level.zones[ zone_name ].adjacent_zones ); - i = 0; - while ( i < adj_zone_names.size ) - { - if ( !maps/mp/zombies/_zm_zonemgr::zone_is_enabled( adj_zone_names[ i ] ) ) - { - i++; - continue; - } - best_object = get_priority_item_for_brutus( adj_zone_names[ i ] ); - if ( isDefined( best_object ) ) - { - return best_object; - } - i++; - } - global_zone_names = getarraykeys( level.zones ); - i = 0; - while ( i < global_zone_names.size ) - { - if ( global_zone_names[ i ] == zone_name ) - { - i++; - continue; - } - if ( zone_array_contains( adj_zone_names, global_zone_names[ i ] ) ) - { - i++; - continue; - } - if ( !maps/mp/zombies/_zm_zonemgr::zone_is_enabled( global_zone_names[ i ] ) ) - { - i++; - continue; - } - best_object = get_priority_item_for_brutus( global_zone_names[ i ] ); - if ( isDefined( best_object ) ) - { - return best_object; - } - i++; - } - } - return undefined; + self.fail_count++; + } + else + self.fail_count = 0; + + if ( self.fail_count >= level.brutus_failed_paths_to_teleport ) + { + self brutus_stuck_teleport(); + return; + } + + wait 1; + } } -get_dist_score( object ) //checked matches cerberus output +should_brutus_aggro( player_zone, brutus_zone ) { - return distancesquared( self.origin, object.origin ); + if ( !isdefined( player_zone ) || !isdefined( brutus_zone ) ) + return false; + + if ( player_zone == brutus_zone ) + return true; + + if ( isdefined( level.zones[brutus_zone].adjacent_zones ) && isdefined( level.zones[brutus_zone].adjacent_zones[player_zone] ) ) + return true; + + return false; } -get_trap_score( object ) //checked changed to match cerberus output +brutus_find_flesh() { - if ( sighttracepassed( self.origin + ( 0, 0, 1 ), object.origin, 0, self ) ) - { - return 0; - } - return distancesquared( self.origin, object.origin ); + self endon( "death" ); + level endon( "intermission" ); + + if ( level.intermission ) + return; + + self.ai_state = "idle"; + self.helitarget = 1; + self.ignoreme = 0; + self.nododgemove = 1; + self.ignore_player = []; + self thread brutus_watch_for_gondola(); + self thread brutus_stuck_watcher(); + self thread brutus_goal_watcher(); + self thread watch_for_player_dist(); + + while ( true ) + { + if ( self.not_interruptable ) + { + wait 0.05; + continue; + } + + player = brutus_get_closest_valid_player(); + brutus_zone = get_zone_from_position( self.origin ); + + if ( !isdefined( brutus_zone ) ) + { + brutus_zone = self.prev_zone; + + if ( !isdefined( brutus_zone ) ) + { + wait 1; + continue; + } + } + + player_zone = undefined; + self.prev_zone = brutus_zone; + + if ( level.brutus_in_grief ) + brutus_start_basic_find_flesh(); + else if ( !isdefined( player ) ) + self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); + else + { + player_zone = player get_player_zone(); + + if ( isdefined( player_zone ) ) + self.priority_item = self get_priority_item_for_brutus( player_zone ); + else + self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); + } + + if ( isdefined( player ) && distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isdefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) ) + { + self.favorite_enemy = player; + self.goal_pos = player.origin; + brutus_start_basic_find_flesh(); + } + else if ( isdefined( self.priority_item ) ) + { + brutus_stop_basic_find_flesh(); + self.goalradius = 12; + self.custom_goalradius_override = 12; + self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state ); + self setgoalpos( self.goal_pos ); + } + else if ( isdefined( player ) ) + { + self.favorite_enemy = player; + self.goal_pos = self.favorite_enemy.origin; + brutus_start_basic_find_flesh(); + } + else + { + self.goal_pos = self.origin; + self.ai_state = "idle"; + self setanimstatefromasd( "zm_idle" ); + self setgoalpos( self.goal_pos ); + } + + wait 1; + } } -get_magic_boxes( zone_name ) //checked matches cerberus output +trap_damage_callback( trap ) { - /* + self endon( "death" ); + + if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) ) + { + self.not_interruptable = 1; + self animscripted( self.origin, self.angles, "zm_taunt" ); + self maps\mp\animscripts\shared::donotetracks( "taunt_anim" ); + + if ( trap.targetname == "fan_trap" ) + trap notify( "trap_finished_" + trap.script_string ); + else if ( trap.targetname == "acid_trap" ) + trap notify( "acid_trap_fx_done" ); + + self.not_interruptable = 0; + } +} + +zone_array_contains( zone_array, zone_name ) +{ + for ( j = 0; j < zone_array.size; j++ ) + { + if ( zone_array[j] == zone_name ) + return true; + } + + return false; +} + +get_priority_item_for_brutus( zone_name, do_secondary_zone_checks ) +{ + interact_types = level.interaction_types; + interact_prio = level.interaction_priority; + + for ( i = 0; i < interact_prio.size; i++ ) + { + best_score = -1; + best_object = undefined; + int_type = interact_prio[i]; + int_struct = interact_types[int_type]; + int_objects = self [[ int_struct.get_func ]]( zone_name ); + + for ( j = 0; j < int_objects.size; j++ ) + { + if ( int_objects[j] [[ int_struct.validity_func ]]() ) + { + score = self [[ int_struct.value_func ]]( int_objects[j] ); /# - assert( isDefined( level.zones[ zone_name ] ) ); + assert( score >= 0 ); #/ - */ - return level.zones[ zone_name ].magic_boxes; + if ( score < best_score || best_score < 0 ) + { + best_object = int_objects[j]; + best_score = score; + } + } + } + + if ( isdefined( best_object ) ) + { + self.ai_state = int_type; + return best_object; + } + } + + if ( isdefined( do_secondary_zone_checks ) && do_secondary_zone_checks ) + { + adj_zone_names = getarraykeys( level.zones[zone_name].adjacent_zones ); + + for ( i = 0; i < adj_zone_names.size; i++ ) + { + if ( !maps\mp\zombies\_zm_zonemgr::zone_is_enabled( adj_zone_names[i] ) ) + continue; + + best_object = get_priority_item_for_brutus( adj_zone_names[i] ); + + if ( isdefined( best_object ) ) + return best_object; + } + + global_zone_names = getarraykeys( level.zones ); + + for ( i = 0; i < global_zone_names.size; i++ ) + { + if ( global_zone_names[i] == zone_name ) + continue; + + if ( zone_array_contains( adj_zone_names, global_zone_names[i] ) ) + continue; + + if ( !maps\mp\zombies\_zm_zonemgr::zone_is_enabled( global_zone_names[i] ) ) + continue; + + best_object = get_priority_item_for_brutus( global_zone_names[i] ); + + if ( isdefined( best_object ) ) + return best_object; + } + } + + return undefined; } -is_magic_box_valid() //checked matches cerberus output +get_dist_score( object ) { - if ( self is_chest_active() && self == level.chests[ level.chest_index ] ) - { - return 1; - } - return 0; + return distancesquared( self.origin, object.origin ); } -get_perk_machine_trigger() //checked matches cerberus output +get_trap_score( object ) { - if ( self.targetname == "vendingelectric_cherry" ) - { - perk_machine = getent( "vending_electriccherry", "target" ); - } - else if ( self.targetname == "vending_deadshot_model" ) - { - perk_machine = getent( "vending_deadshot", "target" ); - } - else - { - perk_machine = getent( self.targetname, "target" ); - } - return perk_machine; + if ( sighttracepassed( self.origin + ( 0, 0, 1 ), object.origin, 0, self ) ) + return 0; + + return distancesquared( self.origin, object.origin ); } -get_perk_machines( zone_name ) //checked matches cerberus output +get_magic_boxes( zone_name ) { - /* /# - assert( isDefined( level.zones[ zone_name ] ) ); + assert( isdefined( level.zones[zone_name] ) ); #/ - */ - return level.zones[ zone_name ].perk_machines; + return level.zones[zone_name].magic_boxes; } -is_perk_machine_valid() //checked matches cerberus output +is_magic_box_valid() { - trigger = self get_perk_machine_trigger(); - if ( isDefined( trigger.is_locked ) && trigger.is_locked ) - { - return 0; - } - if ( isDefined( trigger.power_on ) && trigger.power_on ) - { - return 1; - } - return 0; + if ( self is_chest_active() && self == level.chests[level.chest_index] ) + return true; + + return false; } -get_trigger_for_craftable() //checked changed to match cerberus output +get_perk_machine_trigger() { - for ( i = 0; i < level.a_uts_craftables.size; i++ ) - { - if ( isDefined( level.a_uts_craftables[ i ].target ) && level.a_uts_craftables[ i ].target == self.targetname ) - { - return level.a_uts_craftables[ i ]; - } - } - trig_ent = getent( self.targetname, "target" ); - return trig_ent; + if ( self.targetname == "vendingelectric_cherry" ) + perk_machine = getent( "vending_electriccherry", "target" ); + else if ( self.targetname == "vending_deadshot_model" ) + perk_machine = getent( "vending_deadshot", "target" ); + else + perk_machine = getent( self.targetname, "target" ); + + return perk_machine; } -get_craftable_tables( zone_name ) //checked matches cerberus output +get_perk_machines( zone_name ) { - /* /# - assert( isDefined( level.zones[ zone_name ] ) ); + assert( isdefined( level.zones[zone_name] ) ); #/ - */ - return level.zones[ zone_name ].craftable_tables; + return level.zones[zone_name].perk_machines; } -is_craftable_table_valid() //checked matches cerberus output +is_perk_machine_valid() { - table_trig = self get_trigger_for_craftable(); - if ( isDefined( table_trig.is_locked ) && table_trig.is_locked ) - { - return 0; - } - if ( isDefined( table_trig.removed ) && table_trig.removed ) - { - return 0; - } - return 1; + trigger = self get_perk_machine_trigger(); + + if ( isdefined( trigger.is_locked ) && trigger.is_locked ) + return false; + + if ( isdefined( trigger.power_on ) && trigger.power_on ) + return true; + + return false; } -get_closest_trap_for_brutus() //checked partially changed to match cerberus output see info.md +get_trigger_for_craftable() { - best_dist = -1; - best_trap = undefined; - i = 0; - while ( i < level.trap_triggers.size ) - { - if ( !( level.trap_triggers[ i ] [[ level.interaction_types[ "trap" ].validity_func ]]() ) ) - { - i++; - continue; - } - dist = distancesquared( self.origin, level.trap_triggers[ i ].origin ); - if ( dist < best_dist || best_dist < 0 ) - { - best_dist = dist; - best_trap = level.trap_triggers[ i ]; - } - i++; - } - return best_trap; + for ( i = 0; i < level.a_uts_craftables.size; i++ ) + { + if ( isdefined( level.a_uts_craftables[i].target ) && level.a_uts_craftables[i].target == self.targetname ) + return level.a_uts_craftables[i]; + } + + trig_ent = getent( self.targetname, "target" ); + return trig_ent; +} + +get_craftable_tables( zone_name ) +{ +/# + assert( isdefined( level.zones[zone_name] ) ); +#/ + return level.zones[zone_name].craftable_tables; +} + +is_craftable_table_valid() +{ + table_trig = self get_trigger_for_craftable(); + + if ( isdefined( table_trig.is_locked ) && table_trig.is_locked ) + return false; + + if ( isdefined( table_trig.removed ) && table_trig.removed ) + return false; + + return true; +} + +get_closest_trap_for_brutus() +{ + best_dist = -1; + best_trap = undefined; + + for ( i = 0; i < level.trap_triggers.size; i++ ) + { + if ( !level.trap_triggers[i] [[ level.interaction_types["trap"].validity_func ]]() ) + continue; + + dist = distancesquared( self.origin, level.trap_triggers[i].origin ); + + if ( dist < best_dist || best_dist < 0 ) + { + best_dist = dist; + best_trap = level.trap_triggers[i]; + } + } + + return best_trap; } get_traps( zone_name ) { - /* /# - assert( isDefined( level.zones[ zone_name ] ) ); + assert( isdefined( level.zones[zone_name] ) ); #/ - */ - return level.zones[ zone_name ].traps; + return level.zones[zone_name].traps; } -is_trap_valid() //checked changed to match cerberus output +is_trap_valid() { - if ( isDefined( self.trigger.zombie_dmg_trig ) && isDefined( self.trigger.zombie_dmg_trig.active ) && self.trigger.zombie_dmg_trig.active ) - { - return 1; - } - else if ( isDefined( self.trigger.active ) && self.trigger.active ) - { - return 1; - } - return 0; + if ( isdefined( self.trigger.zombie_dmg_trig ) && ( isdefined( self.trigger.zombie_dmg_trig.active ) && self.trigger.zombie_dmg_trig.active ) ) + return true; + else if ( isdefined( self.trigger.active ) && self.trigger.active ) + return true; + + return false; } -get_plane_ramps( zone_name ) //checked matches cerberus output +get_plane_ramps( zone_name ) { - /* /# - assert( isDefined( level.zones[ zone_name ] ) ); + assert( isdefined( level.zones[zone_name] ) ); #/ - */ - return level.zones[ zone_name ].plane_triggers; + return level.zones[zone_name].plane_triggers; } -is_plane_ramp_valid() //checked matches cerberus output +is_plane_ramp_valid() { - if ( isDefined( self.fly_trigger ) && isDefined( self.fly_trigger.trigger_off ) && self.fly_trigger.trigger_off ) - { - return 0; - } - if ( isDefined( self.is_locked ) && self.is_locked ) - { - return 0; - } - if ( isDefined( self.equipname ) && isDefined( self.crafted ) && self.crafted ) - { - return 0; - } - return 1; + if ( isdefined( self.fly_trigger ) && ( isdefined( self.fly_trigger.trigger_off ) && self.fly_trigger.trigger_off ) ) + return false; + + if ( isdefined( self.is_locked ) && self.is_locked ) + return false; + + if ( isdefined( self.equipname ) && ( isdefined( self.crafted ) && self.crafted ) ) + return false; + + return true; } -get_blockers( zone_name ) //checked matches cerberus output +get_blockers( zone_name ) { - return get_zone_zbarriers( zone_name ); + return get_zone_zbarriers( zone_name ); } -is_blocker_valid() //checked matches cerberus output +is_blocker_valid() { - closed_pieces = self getzbarrierpieceindicesinstate( "closed" ); - if ( closed_pieces.size >= level.brutus_blocker_pieces_req ) - { - return 1; - } - return 0; + closed_pieces = self getzbarrierpieceindicesinstate( "closed" ); + + if ( closed_pieces.size >= level.brutus_blocker_pieces_req ) + return true; + + return false; } -brutus_get_closest_valid_player() //checked changed to match cerberus output +brutus_get_closest_valid_player() { - valid_player_found = 0; - players = get_players(); - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) - { - players = arraycombine( players, level._zombie_human_array, 0, 0 ); - } - if ( isDefined( self.ignore_player ) ) - { - for ( i = 0; i < self.ignore_player.size; i++ ) - { - arrayremovevalue( players, self.ignore_player[ i ] ); - } - } - while ( !valid_player_found ) - { - if ( isDefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) - { - player = get_closest_player_using_paths( self.origin, players ); - } - else - { - player = getclosest( self.origin, players ); - } - if ( !isDefined( player ) ) - { - return undefined; - } - if ( isDefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) - { - return player; - } - if ( !is_player_valid( player, 1 ) ) - { - arrayremovevalue( players, player ); - } - return player; - } + valid_player_found = 0; + players = get_players(); + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) + players = arraycombine( players, level._zombie_human_array, 0, 0 ); + + if ( isdefined( self.ignore_player ) ) + { + for ( i = 0; i < self.ignore_player.size; i++ ) + arrayremovevalue( players, self.ignore_player[i] ); + } + + while ( !valid_player_found ) + { + if ( isdefined( level.calc_closest_player_using_paths ) && level.calc_closest_player_using_paths ) + player = get_closest_player_using_paths( self.origin, players ); + else + player = getclosest( self.origin, players ); + + if ( !isdefined( player ) ) + return undefined; + + if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun && isai( player ) ) + return player; + + if ( !is_player_valid( player, 1 ) ) + { + arrayremovevalue( players, player ); + continue; + } + + return player; + } } -watch_for_player_dist() //checked matches cerberus output +watch_for_player_dist() { - self endon( "death" ); - while ( 1 ) - { - player = brutus_get_closest_valid_player(); - if ( !isDefined( player ) || distancesquared( player.origin, self.origin ) > level.brutus_reset_dist_sq ) - { - self.ai_state = "idle"; - self notify( "zombie_acquire_enemy" ); - self notify( "stop_find_flesh" ); - } - wait 0.5; - } + self endon( "death" ); + + while ( true ) + { + player = brutus_get_closest_valid_player(); + + if ( !isdefined( player ) || distancesquared( player.origin, self.origin ) > level.brutus_reset_dist_sq ) + { + self.ai_state = "idle"; + self notify( "zombie_acquire_enemy" ); + self notify( "stop_find_flesh" ); + } + + wait 0.5; + } } -brutus_goal_watcher() //checked changed to match cerberus output +brutus_goal_watcher() { - self endon( "death" ); - while ( 1 ) - { - self waittill( "goal" ); - while ( self.ai_state == "find_flesh" || self.ai_state == "idle" ) - { - wait 0.05; - } - interaction = level.interaction_types[ self.ai_state ]; - origin = self.priority_item.origin; - angles = self.priority_item.angles; - if ( isDefined( interaction.interaction_z_offset ) ) - { - origin += ( 0, 0, interaction.interaction_z_offset ); - } - if ( isDefined( interaction.interaction_yaw_offset ) ) - { - angles += ( 0, interaction.interaction_yaw_offset, 0 ); - } - self.not_interruptable = 1; - self animscripted( origin, angles, interaction.animstate ); - self thread maps/mp/animscripts/zm_shared::donotetracks( interaction.notify_name ); - self thread snddointeractionvox( interaction.notify_name ); - self waittillmatch( interaction.notify_name ); - return interaction.action_notetrack; - self brutus_lockdown_client_effects(); - self thread [[ interaction.interact_func ]](); - self.priority_item = undefined; - if ( isDefined( interaction.end_notetrack ) ) - { - self waittillmatch( interaction.notify_name ); - } - else - { - self waittillmatch( interaction.notify_name ); - } - self.not_interruptable = 0; - while ( !isDefined( self.priority_item ) ) - { - wait 0.05; - } - } + self endon( "death" ); + + while ( true ) + { + self waittill( "goal" ); + + if ( self.ai_state == "find_flesh" || self.ai_state == "idle" ) + { + wait 0.05; + continue; + } + + interaction = level.interaction_types[self.ai_state]; + origin = self.priority_item.origin; + angles = self.priority_item.angles; + + if ( isdefined( interaction.interaction_z_offset ) ) + origin += ( 0, 0, interaction.interaction_z_offset ); + + if ( isdefined( interaction.interaction_yaw_offset ) ) + angles += ( 0, interaction.interaction_yaw_offset, 0 ); + + self.not_interruptable = 1; + self animscripted( origin, angles, interaction.animstate ); + self thread maps\mp\animscripts\zm_shared::donotetracks( interaction.notify_name ); + self thread snddointeractionvox( interaction.notify_name ); + + self waittillmatch( interaction.notify_name, interaction.action_notetrack ); + + self brutus_lockdown_client_effects(); + self thread [[ interaction.interact_func ]](); + self.priority_item = undefined; + + if ( isdefined( interaction.end_notetrack ) ) + self waittillmatch( interaction.notify_name, interaction.end_notetrack ); + else + self waittillmatch( interaction.notify_name, "end" ); + + self.not_interruptable = 0; + + while ( !isdefined( self.priority_item ) ) + wait 0.05; + } } -snddointeractionvox( type ) //checked matches cerberus output +snddointeractionvox( type ) { - alias = "vox_brutus_brutus_lockbox"; - num = undefined; - switch( type ) - { - case "box_lock_anim": - alias = "vox_brutus_brutus_lockbox"; - break; - case "perk_lock_anim": - alias = "vox_brutus_brutus_lockbox"; - num = 5; - break; - case "table_smash_anim": - alias = "vox_brutus_brutus_lockbox"; - num = 5; - break; - case "trap_smash_anim": - alias = "vox_brutus_brutus_lockbox"; - num = 5; - break; - case "plane_lock_anim": - alias = "vox_brutus_brutus_lockbox"; - num = 5; - break; - case "board_smash_anim": - alias = "vox_brutus_brutus_lockbox"; - num = 5; - break; - } - self thread sndbrutusvox( alias, num ); + alias = "vox_brutus_brutus_lockbox"; + num = undefined; + + switch ( type ) + { + case "box_lock_anim": + alias = "vox_brutus_brutus_lockbox"; + break; + case "perk_lock_anim": + alias = "vox_brutus_brutus_lockbox"; + num = 5; + break; + case "table_smash_anim": + alias = "vox_brutus_brutus_lockbox"; + num = 5; + break; + case "trap_smash_anim": + alias = "vox_brutus_brutus_lockbox"; + num = 5; + break; + case "plane_lock_anim": + alias = "vox_brutus_brutus_lockbox"; + num = 5; + break; + case "board_smash_anim": + alias = "vox_brutus_brutus_lockbox"; + num = 5; + break; + } + + self thread sndbrutusvox( alias, num ); } -brutus_fire_teargas_when_possible() //checked changed to match cerberus output +brutus_fire_teargas_when_possible() { - self endon( "death" ); - wait 0.2; - while ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { - wait 0.05; - } - self.not_interruptable = 1; - self playsound( "vox_brutus_enraged" ); - self animscripted( self.origin, self.angles, "zm_teargas_attack" ); - self thread maps/mp/animscripts/zm_shared::donotetracks( "teargas_anim" ); - self waittillmatch( "teargas_anim" ); - v_org_left = self gettagorigin( "TAG_WEAPON_LEFT" ); - v_org_right = self gettagorigin( "TAG_WEAPON_RIGHT" ); - self thread sndplaydelayedsmokeaudio( v_org_left, v_org_right ); - self magicgrenadetype( "willy_pete_zm", v_org_left, ( 0, 0, 0 ), 0.4 ); - self magicgrenadetype( "willy_pete_zm", v_org_right, ( 0, 0, 0 ), 0.4 ); - self waittillmatch( "teargas_anim" ); - self.not_interruptable = 0; + self endon( "death" ); + wait 0.2; + + while ( isdefined( self.not_interruptable ) && self.not_interruptable ) + wait 0.05; + + self.not_interruptable = 1; + self playsound( "vox_brutus_enraged" ); + self animscripted( self.origin, self.angles, "zm_teargas_attack" ); + self thread maps\mp\animscripts\zm_shared::donotetracks( "teargas_anim" ); + + self waittillmatch( "teargas_anim", "grenade_drop" ); + + v_org_left = self gettagorigin( "TAG_WEAPON_LEFT" ); + v_org_right = self gettagorigin( "TAG_WEAPON_RIGHT" ); + self thread sndplaydelayedsmokeaudio( v_org_left, v_org_right ); + self magicgrenadetype( "willy_pete_zm", v_org_left, ( 0, 0, 0 ), 0.4 ); + self magicgrenadetype( "willy_pete_zm", v_org_right, ( 0, 0, 0 ), 0.4 ); + + self waittillmatch( "teargas_anim", "end" ); + + self.not_interruptable = 0; } -sndplaydelayedsmokeaudio( org1, org2 ) //checked matches cerberus output +sndplaydelayedsmokeaudio( org1, org2 ) { - wait 1.5; - playsoundatposition( "zmb_ai_brutus_gas_explode", org1 ); - wait 0.25; - playsoundatposition( "zmb_ai_brutus_gas_explode", org2 ); + wait 1.5; + playsoundatposition( "zmb_ai_brutus_gas_explode", org1 ); + wait 0.25; + playsoundatposition( "zmb_ai_brutus_gas_explode", org2 ); } -brutus_afterlife_teleport() //checked matches cerberus output +brutus_afterlife_teleport() { - playfx( level._effect[ "afterlife_teleport" ], self.origin ); - self hide(); - wait 0.1; - self notify( "brutus_cleanup" ); - if ( isDefined( self.sndbrutusmusicent ) ) - { - self.sndbrutusmusicent delete(); - self.sndbrutusmusicent = undefined; - } - level thread respawn_brutus( self.health, self.has_helmet, self.helmet_hits, self.explosive_dmg_taken, self.force_zone ); - level.brutus_count--; + playfx( level._effect["afterlife_teleport"], self.origin ); + self hide(); + wait 0.1; + self notify( "brutus_cleanup" ); - self delete(); + if ( isdefined( self.sndbrutusmusicent ) ) + { + self.sndbrutusmusicent delete(); + self.sndbrutusmusicent = undefined; + } + + level thread respawn_brutus( self.health, self.has_helmet, self.helmet_hits, self.explosive_dmg_taken, self.force_zone ); + level.brutus_count--; + self delete(); } -brutus_remove_helmet( vdir ) //checked changed to match cerberus output +brutus_remove_helmet( vdir ) { - self.has_helmet = 0; - self detach( "c_zom_cellbreaker_helmet" ); - self playsound( "evt_brutus_helmet" ); - launch_pos = self.origin + vectorScale( ( 0, 0, 1 ), 85 ); - createdynentandlaunch( "c_zom_cellbreaker_helmet", launch_pos, self.angles, launch_pos, vdir ); - if ( !isDefined( self.suppress_teargas_behavior ) || isDefined( self.suppress_teargas_behavior ) && !self.suppress_teargas_behavior ) - { - self thread brutus_fire_teargas_when_possible(); - if ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { - return; - } - self.not_interruptable = 1; - self playsound( "vox_brutus_exert" ); - self animscripted( self.origin, self.angles, "zm_pain" ); - self maps/mp/animscripts/zm_shared::donotetracks( "pain_anim" ); - self.not_interruptable = 0; - } + self.has_helmet = 0; + self detach( "c_zom_cellbreaker_helmet" ); + self playsound( "evt_brutus_helmet" ); + launch_pos = self.origin + vectorscale( ( 0, 0, 1 ), 85.0 ); + createdynentandlaunch( "c_zom_cellbreaker_helmet", launch_pos, self.angles, launch_pos, vdir ); + + if ( !( isdefined( self.suppress_teargas_behavior ) && self.suppress_teargas_behavior ) ) + { + self thread brutus_fire_teargas_when_possible(); + + if ( isdefined( self.not_interruptable ) && self.not_interruptable ) + return; + + self.not_interruptable = 1; + self playsound( "vox_brutus_exert" ); + self animscripted( self.origin, self.angles, "zm_pain" ); + self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); + self.not_interruptable = 0; + } } -offset_fx_struct( int_struct, fx_struct ) //checked matches cerberus output +offset_fx_struct( int_struct, fx_struct ) { - if ( isDefined( int_struct.fx_x_offset ) ) - { - fx_struct.origin += ( int_struct.fx_x_offset, 0, 0 ); - } - if ( isDefined( int_struct.fx_y_offset ) ) - { - fx_struct.origin += ( 0, int_struct.fx_y_offset, 0 ); - } - if ( isDefined( int_struct.fx_z_offset ) ) - { - fx_struct.origin += ( 0, 0, int_struct.fx_z_offset ); - } - if ( isDefined( int_struct.fx_yaw_offset ) ) - { - fx_struct.angles += ( 0, int_struct.fx_yaw_offset, 0 ); - } - return fx_struct; + if ( isdefined( int_struct.fx_x_offset ) ) + fx_struct.origin += ( int_struct.fx_x_offset, 0, 0 ); + + if ( isdefined( int_struct.fx_y_offset ) ) + fx_struct.origin += ( 0, int_struct.fx_y_offset, 0 ); + + if ( isdefined( int_struct.fx_z_offset ) ) + fx_struct.origin += ( 0, 0, int_struct.fx_z_offset ); + + if ( isdefined( int_struct.fx_yaw_offset ) ) + fx_struct.angles += ( 0, int_struct.fx_yaw_offset, 0 ); + + return fx_struct; } -get_scaling_lock_cost( int_type, object ) //checked matches cerberus output +get_scaling_lock_cost( int_type, object ) { - interaction = level.interaction_types[ int_type ]; - base_cost = interaction.unlock_cost; - if ( !isDefined( object.num_times_locked ) ) - { - object.num_times_locked = 0; - } - object.num_times_locked++; - num_times_locked = object.num_times_locked; - if ( num_times_locked > interaction.num_times_to_scale ) - { - num_times_locked = interaction.num_times_to_scale; - } - return num_times_locked * base_cost; + interaction = level.interaction_types[int_type]; + base_cost = interaction.unlock_cost; + + if ( !isdefined( object.num_times_locked ) ) + object.num_times_locked = 0; + + object.num_times_locked++; + num_times_locked = object.num_times_locked; + + if ( num_times_locked > interaction.num_times_to_scale ) + num_times_locked = interaction.num_times_to_scale; + + return num_times_locked * base_cost; } -get_lock_hint_string( cost ) //checked matches cerberus output +get_lock_hint_string( cost ) { - switch( cost ) - { - case 2000: - return &"ZOMBIE_LOCKED_COST_2000"; - case 4000: - return &"ZOMBIE_LOCKED_COST_4000"; - case 6000: - return &"ZOMBIE_LOCKED_COST_6000"; - default: - return &"ZOMBIE_LOCKED_COST"; - } + switch ( cost ) + { + case "2000": + return &"ZOMBIE_LOCKED_COST_2000"; + case "4000": + return &"ZOMBIE_LOCKED_COST_4000"; + case "6000": + return &"ZOMBIE_LOCKED_COST_6000"; + default: + return &"ZOMBIE_LOCKED_COST"; + } } -magic_box_lock() //checked matches cerberus output +magic_box_lock() { - self endon( "death" ); - if ( flag( "moving_chest_now" ) ) - { - self.priority_item = undefined; - return; - } - magic_box = self.priority_item; - if ( !isDefined( magic_box ) ) - { - return; - } - magic_box.zbarrier set_magic_box_zbarrier_state( "locking" ); - self playsound( "zmb_ai_brutus_clang" ); - magic_box.locked_cost = get_scaling_lock_cost( "magic_box", magic_box ); - level.lockdown_track[ "magic_box" ] = 1; - level notify( "brutus_locked_object" ); - self.priority_item = undefined; + self endon( "death" ); + + if ( flag( "moving_chest_now" ) ) + { + self.priority_item = undefined; + return; + } + + magic_box = self.priority_item; + + if ( !isdefined( magic_box ) ) + return; + + magic_box.zbarrier set_magic_box_zbarrier_state( "locking" ); + self playsound( "zmb_ai_brutus_clang" ); + magic_box.locked_cost = get_scaling_lock_cost( "magic_box", magic_box ); + level.lockdown_track["magic_box"] = 1; + level notify( "brutus_locked_object" ); + self.priority_item = undefined; } -perk_machine_lock() //checked matches cerberus output +perk_machine_lock() { - self endon( "death" ); - perk_machine = self.priority_item get_perk_machine_trigger(); - if ( !isDefined( perk_machine ) ) - { - return; - } - int_struct = level.interaction_types[ "perk_machine" ]; - if ( perk_machine.target == "vending_jugg" || perk_machine.target == "vending_deadshot" ) - { - lock_fx = level._effect[ "brutus_lockdown_sm" ]; - } - else - { - lock_fx = level._effect[ "brutus_lockdown" ]; - } - perk_machine.lock_fx = spawn( "script_model", self.priority_item.origin ); - perk_machine.lock_fx.angles = self.priority_item.angles; - perk_machine.lock_fx = offset_fx_struct( int_struct, perk_machine.lock_fx ); - perk_machine.lock_fx setmodel( "tag_origin" ); - playfxontag( lock_fx, perk_machine.lock_fx, "tag_origin" ); - perk_machine.lock_fx playsound( "zmb_ai_brutus_clang" ); - perk_machine.is_locked = 1; - perk_machine.locked_cost = get_scaling_lock_cost( "perk_machine", perk_machine ); - perk_machine sethintstring( &"ZOMBIE_LOCKED_COST", perk_machine.locked_cost ); - level.lockdown_track[ perk_machine.script_string ] = 1; - level notify( "brutus_locked_object" ); - self.priority_item = undefined; + self endon( "death" ); + perk_machine = self.priority_item get_perk_machine_trigger(); + + if ( !isdefined( perk_machine ) ) + return; + + int_struct = level.interaction_types["perk_machine"]; + + if ( perk_machine.target == "vending_jugg" || perk_machine.target == "vending_deadshot" ) + lock_fx = level._effect["brutus_lockdown_sm"]; + else + lock_fx = level._effect["brutus_lockdown"]; + + perk_machine.lock_fx = spawn( "script_model", self.priority_item.origin ); + perk_machine.lock_fx.angles = self.priority_item.angles; + perk_machine.lock_fx = offset_fx_struct( int_struct, perk_machine.lock_fx ); + perk_machine.lock_fx setmodel( "tag_origin" ); + playfxontag( lock_fx, perk_machine.lock_fx, "tag_origin" ); + perk_machine.lock_fx playsound( "zmb_ai_brutus_clang" ); + perk_machine.is_locked = 1; + perk_machine.locked_cost = get_scaling_lock_cost( "perk_machine", perk_machine ); + perk_machine sethintstring( &"ZOMBIE_LOCKED_COST", perk_machine.locked_cost ); + level.lockdown_track[perk_machine.script_string] = 1; + level notify( "brutus_locked_object" ); + self.priority_item = undefined; } -craftable_table_lock() //checked matches cerberus output +craftable_table_lock() { - self endon( "death" ); - table_struct = self.priority_item; - if ( !isDefined( table_struct ) ) - { - return; - } - craftable_table = table_struct get_trigger_for_craftable(); - int_struct = level.interaction_types[ "craftable_table" ]; - craftable_table.lock_fx = spawn( "script_model", table_struct.origin ); - craftable_table.lock_fx.angles = table_struct.angles; - craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx ); - craftable_table.lock_fx setmodel( "tag_origin" ); - playfxontag( level._effect[ "brutus_lockdown_lg" ], craftable_table.lock_fx, "tag_origin" ); - craftable_table.lock_fx playsound( "zmb_ai_brutus_clang" ); - craftable_table.is_locked = 1; - craftable_table.locked_cost = get_scaling_lock_cost( "craftable_table", craftable_table ); - craftable_table.hint_string = get_lock_hint_string( craftable_table.locked_cost ); - if ( !isDefined( craftable_table.equipname ) ) - { - craftable_table sethintstring( craftable_table.hint_string ); - } - if ( isDefined( craftable_table.targetname ) && craftable_table.targetname == "blundergat_upgrade" ) - { - level.lockdown_track[ "craft_kit" ] = 1; - } - if ( isDefined( craftable_table.weaponname ) && craftable_table.weaponname == "alcatraz_shield_zm" ) - { - level.lockdown_track[ "craft_shield" ] = 1; - } - level notify( "brutus_locked_object" ); - self.priority_item = undefined; + self endon( "death" ); + table_struct = self.priority_item; + + if ( !isdefined( table_struct ) ) + return; + + craftable_table = table_struct get_trigger_for_craftable(); + int_struct = level.interaction_types["craftable_table"]; + craftable_table.lock_fx = spawn( "script_model", table_struct.origin ); + craftable_table.lock_fx.angles = table_struct.angles; + craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx ); + craftable_table.lock_fx setmodel( "tag_origin" ); + playfxontag( level._effect["brutus_lockdown_lg"], craftable_table.lock_fx, "tag_origin" ); + craftable_table.lock_fx playsound( "zmb_ai_brutus_clang" ); + craftable_table.is_locked = 1; + craftable_table.locked_cost = get_scaling_lock_cost( "craftable_table", craftable_table ); + craftable_table.hint_string = get_lock_hint_string( craftable_table.locked_cost ); + + if ( !isdefined( craftable_table.equipname ) ) + craftable_table sethintstring( craftable_table.hint_string ); + + if ( isdefined( craftable_table.targetname ) && craftable_table.targetname == "blundergat_upgrade" ) + level.lockdown_track["craft_kit"] = 1; + + if ( isdefined( craftable_table.weaponname ) && craftable_table.weaponname == "alcatraz_shield_zm" ) + level.lockdown_track["craft_shield"] = 1; + + level notify( "brutus_locked_object" ); + self.priority_item = undefined; } -trap_smash() //checked changed to match cerberus output +trap_smash() { - self endon( "death" ); - trap = self.priority_item.trigger; - if ( !isDefined( trap ) ) - { - return; - } - if ( trap.targetname == "fan_trap_use_trigger" ) - { - trap.zombie_dmg_trig notify( "trap_finished_" + trap.script_string ); - } - else if ( trap.targetname == "acid_trap_trigger" ) - { - trap.zombie_dmg_trig notify( "acid_trap_fx_done" ); - } - else if ( trap.targetname == "tower_trap_activate_trigger" ) - { - trap notify( "tower_trap_off" ); - } - trap playsound( "zmb_ai_brutus_clang" ); - self.priority_item = undefined; + self endon( "death" ); + trap = self.priority_item.trigger; + + if ( !isdefined( trap ) ) + return; + + if ( trap.targetname == "fan_trap_use_trigger" ) + trap.zombie_dmg_trig notify( "trap_finished_" + trap.script_string ); + else if ( trap.targetname == "acid_trap_trigger" ) + trap.zombie_dmg_trig notify( "acid_trap_fx_done" ); + else if ( trap.targetname == "tower_trap_activate_trigger" ) + trap notify( "tower_trap_off" ); + + trap playsound( "zmb_ai_brutus_clang" ); + self.priority_item = undefined; } -plane_ramp_lock() //checked matches cerberus output +plane_ramp_lock() { - self endon( "death" ); - plane_ramp = self.priority_item; - if ( !isDefined( plane_ramp ) ) - { - return; - } - int_struct = level.interaction_types[ "plane_ramp" ]; - plane_ramp.lock_fx = spawn( "script_model", plane_ramp.origin ); - plane_ramp.lock_fx.angles = plane_ramp.angles; - plane_ramp.lock_fx = offset_fx_struct( int_struct, plane_ramp.lock_fx ); - plane_ramp.lock_fx setmodel( "tag_origin" ); - plane_ramp.lock_fx playsound( "zmb_ai_brutus_clang" ); - playfxontag( level._effect[ "brutus_lockdown" ], plane_ramp.lock_fx, "tag_origin" ); - plane_ramp.is_locked = 1; - plane_ramp.locked_cost = get_scaling_lock_cost( "plane_ramp", plane_ramp ); - plane_ramp.hint_string = get_lock_hint_string( plane_ramp.locked_cost ); - plane_ramp maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers(); - level.lockdown_track[ "plane_ramp" ] = 1; - level notify( "brutus_locked_object" ); - if ( !isDefined( plane_ramp.equipname ) ) - { - plane_ramp.fly_trigger sethintstring( plane_ramp.hint_string ); - } + self endon( "death" ); + plane_ramp = self.priority_item; + + if ( !isdefined( plane_ramp ) ) + return; + + int_struct = level.interaction_types["plane_ramp"]; + plane_ramp.lock_fx = spawn( "script_model", plane_ramp.origin ); + plane_ramp.lock_fx.angles = plane_ramp.angles; + plane_ramp.lock_fx = offset_fx_struct( int_struct, plane_ramp.lock_fx ); + plane_ramp.lock_fx setmodel( "tag_origin" ); + plane_ramp.lock_fx playsound( "zmb_ai_brutus_clang" ); + playfxontag( level._effect["brutus_lockdown"], plane_ramp.lock_fx, "tag_origin" ); + plane_ramp.is_locked = 1; + plane_ramp.locked_cost = get_scaling_lock_cost( "plane_ramp", plane_ramp ); + plane_ramp.hint_string = get_lock_hint_string( plane_ramp.locked_cost ); + plane_ramp maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers(); + level.lockdown_track["plane_ramp"] = 1; + level notify( "brutus_locked_object" ); + + if ( !isdefined( plane_ramp.equipname ) ) + plane_ramp.fly_trigger sethintstring( plane_ramp.hint_string ); } -blocker_smash() //checked changed to match cerberus output +blocker_smash() { - self endon( "death" ); - self playsound( "vox_brutus_enraged" ); - self playsound( "zmb_ai_brutus_window_teardown" ); - blocker = self.priority_item; - self playsound( "zmb_ai_brutus_clang" ); - if ( !isDefined( blocker ) ) - { - return; - } - num_pieces = blocker getnumzbarrierpieces(); - for ( i = 0; i < num_pieces; i++ ) - { - blocker hidezbarrierpiece( i ); - blocker setzbarrierpiecestate( i, "open" ); - } - if ( !isDefined( blocker.script_string ) ) - { - smash_fx_alias = "brutus_smash_default"; - } - else - { - smash_fx_alias = "brutus_smash_" + blocker.script_string; - } - forward = anglesToForward( blocker.angles + vectorScale( ( 0, 1, 0 ), 180 ) ); - if ( isDefined( level._effect[ smash_fx_alias ] ) ) - { - playfx( level._effect[ smash_fx_alias ], blocker.origin, forward ); - } - else - { - playfx( level._effect[ "brutus_smash_default" ], blocker.origin, forward ); - } - self.priority_item = undefined; + self endon( "death" ); + self playsound( "vox_brutus_enraged" ); + self playsound( "zmb_ai_brutus_window_teardown" ); + blocker = self.priority_item; + self playsound( "zmb_ai_brutus_clang" ); + + if ( !isdefined( blocker ) ) + return; + + num_pieces = blocker getnumzbarrierpieces(); + + for ( i = 0; i < num_pieces; i++ ) + { + blocker hidezbarrierpiece( i ); + blocker setzbarrierpiecestate( i, "open" ); + } + + if ( !isdefined( blocker.script_string ) ) + smash_fx_alias = "brutus_smash_default"; + else + smash_fx_alias = "brutus_smash_" + blocker.script_string; + + forward = anglestoforward( blocker.angles + vectorscale( ( 0, 1, 0 ), 180.0 ) ); + + if ( isdefined( level._effect[smash_fx_alias] ) ) + playfx( level._effect[smash_fx_alias], blocker.origin, forward ); + else + playfx( level._effect["brutus_smash_default"], blocker.origin, forward ); + + self.priority_item = undefined; } -melee_anim_func() //checked matches cerberus output +melee_anim_func() { - self.next_leap_time = getTime() + 1500; + self.next_leap_time = gettime() + 1500; } -kill_teargas_after_duration( duration ) //checked matches cerberus output +kill_teargas_after_duration( duration ) { - wait duration; - self notify( "kill_teargas" ); - wait_network_frame(); - self delete(); + wait( duration ); + self notify( "kill_teargas" ); + wait_network_frame(); + self delete(); } -teargas_player( player ) //checked changed to match cerberus output +teargas_player( player ) { - player endon( "death_or_disconnect" ); - level endon( "intermission" ); - self endon( "kill_teargas" ); - player.being_teargassed = 1; - clear_timer = 0; - teargas_timer = 0; - while ( 1 ) - { - self waittill( "trigger", player ); - while ( 1 ) - { - if ( !player istouching( self ) ) - { - clear_timer += 0.1; - } - else - { - clear_timer = 0; - } - if ( clear_timer >= level.player_teargas_duration ) - { - player.being_teargassed = 0; - break; - } - else if ( ( teargas_timer % 5 ) == 0 ) - { - if ( distancesquared( player.origin, self.origin ) > ( ( ( level.brutus_teargas_radius * 2 ) / 3 ) * ( ( level.brutus_teargas_radius * 2 ) / 3 ) ) ) - { - player shellshock( "mp_radiation_low", 1.5 ); - } - else if ( distancesquared( player.origin, self.origin ) > ( ( ( level.brutus_teargas_radius * 1 ) / 3 ) * ( ( level.brutus_teargas_radius * 1 ) / 3 ) ) ) - { - player shellshock( "mp_radiation_med", 1.5 ); - } - else - { - player shellshock( "mp_radiation_high", 1.5 ); - } - } - teargas_timer++; - wait 0.1; - } - } + player endon( "death_or_disconnect" ); + level endon( "intermission" ); + self endon( "kill_teargas" ); + player.being_teargassed = 1; + clear_timer = 0; + teargas_timer = 0; + + while ( true ) + { + self waittill( "trigger", player ); + + while ( true ) + { + if ( !player istouching( self ) ) + clear_timer += 0.1; + else + clear_timer = 0; + + if ( clear_timer >= level.player_teargas_duration ) + { + player.being_teargassed = 0; + break; + } + else if ( teargas_timer % 5 == 0 ) + { + if ( distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 2 / 3 * level.brutus_teargas_radius * 2 / 3 ) + player shellshock( "mp_radiation_low", 1.5 ); + else if ( distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 1 / 3 * level.brutus_teargas_radius * 1 / 3 ) + player shellshock( "mp_radiation_med", 1.5 ); + else + player shellshock( "mp_radiation_high", 1.5 ); + } + + teargas_timer++; + wait 0.1; + } + } } -teargas_trigger_think() //checked changed to match cerberus output +teargas_trigger_think() { - self endon( "kill_teargas" ); - self thread kill_teargas_after_duration( level.brutus_teargas_duration ); - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - if ( isDefined( players[ i ].being_teargassed ) && !players[ i ].being_teargassed ) - { - self thread teargas_player( players[ i ] ); - } - } + self endon( "kill_teargas" ); + self thread kill_teargas_after_duration( level.brutus_teargas_duration ); + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !( isdefined( players[i].being_teargassed ) && players[i].being_teargassed ) ) + self thread teargas_player( players[i] ); + } } -precache_default_brutus_barrier_fx() //checked matches cerberus output +precache_default_brutus_barrier_fx() { - level._effect[ "brutus_smash_default" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_brk_wood" ); + level._effect["brutus_smash_default"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_brk_wood" ); } -scale_helmet_damage( attacker, damage, headshot_mod, damage_mod, vdir ) //checked matches cerberus output +scale_helmet_damage( attacker, damage, headshot_mod, damage_mod, vdir ) { - if ( !self.has_helmet ) - { - return damage * headshot_mod; - } - else - { - self.helmet_hits++; - if ( self.helmet_hits >= level.brutus_helmet_shots ) - { - self thread brutus_remove_helmet( vdir ); - if ( level.brutus_in_grief ) - { - player_points = level.brutus_points_for_helmet; - } - else - { - multiplier = maps/mp/zombies/_zm_score::get_points_multiplier( self ); - player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - attacker add_to_player_score( player_points ); - attacker.pers[ "score" ] = attacker.score; - level notify( "brutus_helmet_removed" ); - } - } - return damage * damage_mod; - } + if ( !self.has_helmet ) + return damage * headshot_mod; + else + { + self.helmet_hits++; + + if ( self.helmet_hits >= level.brutus_helmet_shots ) + { + self thread brutus_remove_helmet( vdir ); + + if ( level.brutus_in_grief ) + player_points = level.brutus_points_for_helmet; + else + { + multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); + player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); + } + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + attacker add_to_player_score( player_points ); + attacker.pers["score"] = attacker.score; + level notify( "brutus_helmet_removed", attacker ); + } + } + + return damage * damage_mod; + } } -brutus_non_attacker_damage_override( damage, weapon ) //checked changed to match cerberus output +brutus_non_attacker_damage_override( damage, weapon ) { - scaled_dmg = 0; - if ( weapon == "tower_trap_zm" ) - { - scaled_dmg = self scale_helmet_damage( undefined, damage, 0.1, 0.01, vectorScale( ( 0, 1, 0 ), 10 ) ); - } - return int( scaled_dmg ); + scaled_dmg = 0; + + if ( weapon == "tower_trap_zm" ) + scaled_dmg = self scale_helmet_damage( undefined, damage, 0.1, 0.01, vectorscale( ( 0, 1, 0 ), 10.0 ) ); + + return int( scaled_dmg ); } -is_weapon_shotgun( sweapon ) //checked matches cerberus output +is_weapon_shotgun( sweapon ) { - if ( weaponclass( sweapon ) == "spread" ) - { - return 1; - } - return 0; + if ( weaponclass( sweapon ) == "spread" ) + return true; + + return false; } -brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex ) //checked changed to match cerberus output +brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon, vpoint, vdir, shitloc, poffsettime, boneindex ) { - if ( isDefined( attacker ) && isalive( attacker ) && isplayer( attacker ) && level.zombie_vars[ attacker.team ][ "zombie_insta_kill" ] || isDefined( attacker.personal_instakill ) && attacker.personal_instakill ) - { - n_brutus_damage_percent = 1; - n_brutus_headshot_modifier = 2; - } - else - { - n_brutus_damage_percent = level.brutus_damage_percent; - n_brutus_headshot_modifier = 1; - } - if ( isDefined( weapon ) && is_weapon_shotgun( weapon ) ) - { - n_brutus_damage_percent *= level.brutus_shotgun_damage_mod; - n_brutus_headshot_modifier *= level.brutus_shotgun_damage_mod; - } - if ( isDefined( weapon ) && weapon == "bouncing_tomahawk_zm" && isDefined( inflictor ) ) - { - self playsound( "wpn_tomahawk_imp_zombie" ); - if ( self.has_helmet ) - { - if ( damage == 1 ) - { - return 0; - } - if ( isDefined( inflictor.n_cookedtime ) && inflictor.n_cookedtime >= 2000 ) - { - self.helmet_hits = level.brutus_helmet_shots; - } - else if ( isDefined( inflictor.n_grenade_charge_power ) && inflictor.n_grenade_charge_power >= 2 ) - { - self.helmet_hits = level.brutus_helmet_shots; - } - else - { - self.helmet_hits++; - } - if ( self.helmet_hits >= level.brutus_helmet_shots ) - { - self thread brutus_remove_helmet( vdir ); - if ( level.brutus_in_grief ) - { - player_points = level.brutus_points_for_helmet; - } - else - { - multiplier = maps/mp/zombies/_zm_score::get_points_multiplier( self ); - player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); - } - if ( isDefined( attacker ) && isplayer( attacker ) ) - { - attacker add_to_player_score( player_points ); - attacker.pers[ "score" ] = attacker.score; - level notify( "brutus_helmet_removed", attacker ); - } - } - return damage * n_brutus_damage_percent; - } - else - { - return damage; - } - } - if ( ( meansofdeath == "MOD_MELEE" || meansofdeath == "MOD_IMPACT" ) && isDefined( meansofdeath ) ) - { - if ( weapon == "alcatraz_shield_zm" ) - { - shield_damage = level.zombie_vars[ "riotshield_fling_damage_shield" ]; - inflictor maps/mp/zombies/_zm_weap_riotshield_prison::player_damage_shield( shield_damage, 0 ); - return 0; - } - } - if ( isDefined( level.zombiemode_using_afterlife ) && level.zombiemode_using_afterlife && weapon == "lightning_hands_zm" ) - { - self thread brutus_afterlife_teleport(); - return 0; - } - if ( is_explosive_damage( meansofdeath ) ) - { - self.explosive_dmg_taken += damage; - if ( !self.has_helmet ) - { - scaler = n_brutus_headshot_modifier; - } - else - { - scaler = level.brutus_damage_percent; - } - if ( self.explosive_dmg_taken >= self.explosive_dmg_req && isDefined( self.has_helmet ) && self.has_helmet ) - { - self thread brutus_remove_helmet( vectorScale( ( 0, 1, 0 ), 10 ) ); - if ( level.brutus_in_grief ) - { - player_points = level.brutus_points_for_helmet; - } - else - { - multiplier = maps/mp/zombies/_zm_score::get_points_multiplier( self ); - player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); - } - attacker add_to_player_score( player_points ); - attacker.pers[ "score" ] = inflictor.score; - } - return damage * scaler; - } - else if ( shitloc != "head" && shitloc != "helmet" ) - { - return damage * n_brutus_damage_percent; - } - else - { - return int( self scale_helmet_damage( attacker, damage, n_brutus_headshot_modifier, n_brutus_damage_percent, vdir ) ); - } + if ( isdefined( attacker ) && isalive( attacker ) && isplayer( attacker ) && ( level.zombie_vars[attacker.team]["zombie_insta_kill"] || isdefined( attacker.personal_instakill ) && attacker.personal_instakill ) ) + { + n_brutus_damage_percent = 1.0; + n_brutus_headshot_modifier = 2.0; + } + else + { + n_brutus_damage_percent = level.brutus_damage_percent; + n_brutus_headshot_modifier = 1.0; + } + + if ( isdefined( weapon ) && is_weapon_shotgun( weapon ) ) + { + n_brutus_damage_percent *= level.brutus_shotgun_damage_mod; + n_brutus_headshot_modifier *= level.brutus_shotgun_damage_mod; + } + + if ( isdefined( weapon ) && weapon == "bouncing_tomahawk_zm" && isdefined( inflictor ) ) + { + self playsound( "wpn_tomahawk_imp_zombie" ); + + if ( self.has_helmet ) + { + if ( damage == 1 ) + return 0; + + if ( isdefined( inflictor.n_cookedtime ) && inflictor.n_cookedtime >= 2000 ) + self.helmet_hits = level.brutus_helmet_shots; + else if ( isdefined( inflictor.n_grenade_charge_power ) && inflictor.n_grenade_charge_power >= 2 ) + self.helmet_hits = level.brutus_helmet_shots; + else + self.helmet_hits++; + + if ( self.helmet_hits >= level.brutus_helmet_shots ) + { + self thread brutus_remove_helmet( vdir ); + + if ( level.brutus_in_grief ) + player_points = level.brutus_points_for_helmet; + else + { + multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); + player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); + } + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + attacker add_to_player_score( player_points ); + attacker.pers["score"] = attacker.score; + level notify( "brutus_helmet_removed", attacker ); + } + } + + return damage * n_brutus_damage_percent; + } + else + return damage; + } + + if ( isdefined( meansofdeath ) && ( meansofdeath == "MOD_MELEE" || meansofdeath == "MOD_IMPACT" ) ) + { + if ( weapon == "alcatraz_shield_zm" ) + { + shield_damage = level.zombie_vars["riotshield_fling_damage_shield"]; + inflictor maps\mp\zombies\_zm_weap_riotshield_prison::player_damage_shield( shield_damage, 0 ); + return 0; + } + } + + if ( isdefined( level.zombiemode_using_afterlife ) && level.zombiemode_using_afterlife && weapon == "lightning_hands_zm" ) + { + self thread brutus_afterlife_teleport(); + return 0; + } + + if ( is_explosive_damage( meansofdeath ) ) + { + self.explosive_dmg_taken += damage; + + if ( !self.has_helmet ) + scaler = n_brutus_headshot_modifier; + else + scaler = level.brutus_damage_percent; + + if ( self.explosive_dmg_taken >= self.explosive_dmg_req && ( isdefined( self.has_helmet ) && self.has_helmet ) ) + { + self thread brutus_remove_helmet( vectorscale( ( 0, 1, 0 ), 10.0 ) ); + + if ( level.brutus_in_grief ) + player_points = level.brutus_points_for_helmet; + else + { + multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); + player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); + } + + attacker add_to_player_score( player_points ); + attacker.pers["score"] = inflictor.score; + } + + return damage * scaler; + } + else if ( shitloc != "head" && shitloc != "helmet" ) + return damage * n_brutus_damage_percent; + else + return int( self scale_helmet_damage( attacker, damage, n_brutus_headshot_modifier, n_brutus_damage_percent, vdir ) ); } -brutus_instakill_override() //checked matches cerberus output +brutus_instakill_override() { - return; + } -brutus_nuke_override() //checked matches cerberus output +brutus_nuke_override() { - self endon( "death" ); - wait randomfloatrange( 0.1, 0.7 ); - self thread maps/mp/animscripts/zm_death::flame_death_fx(); - self playsound( "evt_nuked" ); - self dodamage( level.brutus_health * 0.25, self.origin ); - return; + self endon( "death" ); + wait( randomfloatrange( 0.1, 0.7 ) ); + self thread maps\mp\animscripts\zm_death::flame_death_fx(); + self playsound( "evt_nuked" ); + self dodamage( level.brutus_health * 0.25, self.origin ); } -custom_brutus_flame_death_fx() //checked matches cerberus output +custom_brutus_flame_death_fx() { - self endon( "death" ); - if ( isDefined( self.is_on_fire ) && self.is_on_fire ) - { - return; - } - self.is_on_fire = 1; - a_script_origins = []; - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_torso" ] ) ) - { - if ( !self.isdog ) - { - v_origin = self gettagorigin( "J_SpineLower" ); - e_origin = spawn( "script_origin", v_origin ); - e_origin setmodel( "tag_origin" ); - e_origin linkto( self, "J_SpineLower" ); - playfxontag( level._effect[ "character_fire_death_torso" ], e_origin, "tag_origin" ); - a_script_origins[ a_script_origins.size ] = e_origin; - } - } - else - { - /* + self endon( "death" ); + + if ( isdefined( self.is_on_fire ) && self.is_on_fire ) + return; + + self.is_on_fire = 1; + a_script_origins = []; + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) + { + if ( !self.isdog ) + { + v_origin = self gettagorigin( "J_SpineLower" ); + e_origin = spawn( "script_origin", v_origin ); + e_origin setmodel( "tag_origin" ); + e_origin linkto( self, "J_SpineLower" ); + playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" ); + a_script_origins[a_script_origins.size] = e_origin; + } + } + else + { /# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_torso"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_player_torso"" ); + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_torso\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_player_torso\"" ); #/ - */ - } - if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) ) - { - wait 1; - tagarray = []; - tagarray[ 0 ] = "J_Elbow_LE"; - tagarray[ 1 ] = "J_Elbow_RI"; - tagarray[ 2 ] = "J_Knee_RI"; - tagarray[ 3 ] = "J_Knee_LE"; - tagarray = maps/mp/animscripts/zm_death::randomize_array( tagarray ); - v_origin = self gettagorigin( tagarray[ 0 ] ); - e_origin = spawn( "script_origin", v_origin ); - e_origin setmodel( "tag_origin" ); - e_origin linkto( self, tagarray[ 0 ] ); - playfxontag( level._effect[ "character_fire_death_torso" ], e_origin, "tag_origin" ); - a_script_origins[ a_script_origins.size ] = e_origin; - wait 1; - tagarray[ 0 ] = "J_Wrist_RI"; - tagarray[ 1 ] = "J_Wrist_LE"; - if ( isDefined( self.a ) || !isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" ) - { - tagarray[ 2 ] = "J_Ankle_RI"; - tagarray[ 3 ] = "J_Ankle_LE"; - } - tagarray = maps/mp/animscripts/zm_death::randomize_array( tagarray ); - v_origin_0 = self gettagorigin( tagarray[ 0 ] ); - v_origin_1 = self gettagorigin( tagarray[ 1 ] ); - e_origin_0 = spawn( "script_origin", v_origin_0 ); - e_origin_1 = spawn( "script_origin", v_origin_1 ); - e_origin_0 setmodel( "tag_origin" ); - e_origin_1 setmodel( "tag_origin" ); - e_origin_0 linkto( self, tagarray[ 0 ] ); - e_origin_1 linkto( self, tagarray[ 1 ] ); - playfxontag( level._effect[ "character_fire_death_torso" ], e_origin_0, "tag_origin" ); - playfxontag( level._effect[ "character_fire_death_torso" ], e_origin_1, "tag_origin" ); - a_script_origins[ a_script_origins.size ] = e_origin_0; - a_script_origins[ a_script_origins.size ] = e_origin_1; - } - else - { - /* + } + + if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) + { + wait 1; + tagarray = []; + tagarray[0] = "J_Elbow_LE"; + tagarray[1] = "J_Elbow_RI"; + tagarray[2] = "J_Knee_RI"; + tagarray[3] = "J_Knee_LE"; + tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray ); + v_origin = self gettagorigin( tagarray[0] ); + e_origin = spawn( "script_origin", v_origin ); + e_origin setmodel( "tag_origin" ); + e_origin linkto( self, tagarray[0] ); + playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" ); + a_script_origins[a_script_origins.size] = e_origin; + wait 1; + tagarray[0] = "J_Wrist_RI"; + tagarray[1] = "J_Wrist_LE"; + + if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" ) + { + tagarray[2] = "J_Ankle_RI"; + tagarray[3] = "J_Ankle_LE"; + } + + tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray ); + v_origin_0 = self gettagorigin( tagarray[0] ); + v_origin_1 = self gettagorigin( tagarray[1] ); + e_origin_0 = spawn( "script_origin", v_origin_0 ); + e_origin_1 = spawn( "script_origin", v_origin_1 ); + e_origin_0 setmodel( "tag_origin" ); + e_origin_1 setmodel( "tag_origin" ); + e_origin_0 linkto( self, tagarray[0] ); + e_origin_1 linkto( self, tagarray[1] ); + playfxontag( level._effect["character_fire_death_torso"], e_origin_0, "tag_origin" ); + playfxontag( level._effect["character_fire_death_torso"], e_origin_1, "tag_origin" ); + a_script_origins[a_script_origins.size] = e_origin_0; + a_script_origins[a_script_origins.size] = e_origin_1; + } + else + { /# - println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_sm"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_zombie_md"" ); + println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_sm\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_zombie_md\"" ); #/ - */ - } - self thread custom_brutus_on_fire_timeout( a_script_origins ); + } + + self thread custom_brutus_on_fire_timeout( a_script_origins ); } -custom_brutus_on_fire_timeout( a_script_origins ) //checked changed to match cerberus output +custom_brutus_on_fire_timeout( a_script_origins ) { - self endon( "death" ); - wait 3; - if ( isDefined( self ) && isalive( self ) ) - { - self.is_on_fire = 0; - self notify( "stop_flame_damage" ); - } - foreach ( script_origin in a_script_origins ) - { - script_origin delete(); - } + self endon( "death" ); + wait 3; + + if ( isdefined( self ) && isalive( self ) ) + { + self.is_on_fire = 0; + self notify( "stop_flame_damage" ); + } + + foreach ( script_origin in a_script_origins ) + script_origin delete(); } -brutus_debug() //checked changed to match cerberus output dvar name not found +brutus_debug() { - /* /# - while ( 1 ) - { - debug_level = getDvarInt( #"8DB11170" ); - if ( isDefined( debug_level ) && debug_level ) - { - if ( debug_level == 1 ) - { - brutus_array = getentarray( "brutus_zombie_ai" ); - for ( i = 0; i < brutus_array.size; i++ ) - { - if ( isDefined( brutus_array[ i ].goal_pos ) ) - { - debugstar( brutus_array[ i ].goal_pos, ( 1, 0, 0 ), 1 ); - line( brutus_array[ i ].goal_pos, brutus_array[ i ].origin, ( 1, 0, 0 ), 0, 1 ); - } - i++; - } - } - } + while ( true ) + { + debug_level = getdvarint( _hash_8DB11170 ); + + if ( isdefined( debug_level ) && debug_level ) + { + if ( debug_level == 1 ) + { + brutus_array = getentarray( "brutus_zombie_ai" ); + + for ( i = 0; i < brutus_array.size; i++ ) + { + if ( isdefined( brutus_array[i].goal_pos ) ) + { + debugstar( brutus_array[i].goal_pos, ( 1, 0, 0 ), 1 ); + line( brutus_array[i].goal_pos, brutus_array[i].origin, ( 1, 0, 0 ), 0, 1 ); + } + } + } + } + } #/ - } - */ } -brutus_check_zone() //checked partially changed to match cerberus output see info.md +brutus_check_zone() { - self endon( "death" ); - self.in_player_zone = 0; - while ( 1 ) - { - self.in_player_zone = 0; - foreach ( zone in level.zones ) - { - if ( !isDefined( zone.volumes ) || zone.volumes.size == 0 ) - { - } - else - { - zone_name = zone.volumes[ 0 ].targetname; - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone_name ) ) - { - if ( is_true( zone.is_occupied ) ) - { - self.in_player_zone = 1; - break; - } - } - } - } - wait 0.2; - } + self endon( "death" ); + self.in_player_zone = 0; + + while ( true ) + { + self.in_player_zone = 0; + + foreach ( zone in level.zones ) + { + if ( !isdefined( zone.volumes ) || zone.volumes.size == 0 ) + continue; + + zone_name = zone.volumes[0].targetname; + + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone_name ) ) + { + if ( is_true( zone.is_occupied ) ) + { + self.in_player_zone = 1; + break; + } + } + } + + wait 0.2; + } } -brutus_watch_enemy() //checked matches cerberus output +brutus_watch_enemy() { - self endon( "death" ); - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy ) ) - { - self.favoriteenemy = get_favorite_enemy(); - } - wait 0.2; - } + self endon( "death" ); + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy ) ) + self.favoriteenemy = get_favorite_enemy(); + + wait 0.2; + } } -get_favorite_enemy() //checked partially changed to match cerberus output see info.md +get_favorite_enemy() { - brutus_targets = getplayers(); - least_hunted = brutus_targets[ 0 ]; - i = 0; - while ( i < brutus_targets.size ) - { - if ( !isDefined( brutus_targets[ i ].hunted_by ) ) - { - brutus_targets[ i ].hunted_by = 0; - } - if ( !is_player_valid( brutus_targets[ i ] ) ) - { - i++; - continue; - } - if ( !is_player_valid( least_hunted ) ) - { - least_hunted = brutus_targets[ i ]; - } - if ( brutus_targets[ i ].hunted_by < least_hunted.hunted_by ) - { - least_hunted = brutus_targets[ i ]; - } - i++; - } - least_hunted.hunted_by += 1; - return least_hunted; + brutus_targets = getplayers(); + least_hunted = brutus_targets[0]; + + for ( i = 0; i < brutus_targets.size; i++ ) + { + if ( !isdefined( brutus_targets[i].hunted_by ) ) + brutus_targets[i].hunted_by = 0; + + if ( !is_player_valid( brutus_targets[i] ) ) + continue; + + if ( !is_player_valid( least_hunted ) ) + least_hunted = brutus_targets[i]; + + if ( brutus_targets[i].hunted_by < least_hunted.hunted_by ) + least_hunted = brutus_targets[i]; + } + + least_hunted.hunted_by += 1; + return least_hunted; } -brutus_lockdown_client_effects( delay ) //checked matches cerberus output +brutus_lockdown_client_effects( delay ) { - self endon( "death" ); - if ( isDefined( delay ) ) - { - wait delay; - } - if ( self.brutus_lockdown_state ) - { - self.brutus_lockdown_state = 0; - self setclientfield( "brutus_lock_down", 0 ); - } - else - { - self.brutus_lockdown_state = 1; - self setclientfield( "brutus_lock_down", 1 ); - } + self endon( "death" ); + + if ( isdefined( delay ) ) + wait( delay ); + + if ( self.brutus_lockdown_state ) + { + self.brutus_lockdown_state = 0; + self setclientfield( "brutus_lock_down", 0 ); + } + else + { + self.brutus_lockdown_state = 1; + self setclientfield( "brutus_lock_down", 1 ); + } } -get_brutus_interest_points() //checked changed to match cerberus output +get_brutus_interest_points() { - zone_names = getarraykeys( level.zones ); - for ( i = 0; i < zone_names.size; i++ ) - { - self thread get_zone_perk_machines( zone_names[ i ] ); - self thread get_zone_craftable_tables( zone_names[ i ] ); - self thread get_zone_traps( zone_names[ i ] ); - self thread get_zone_plane_ramp( zone_names[ i ] ); - } - build_trap_array(); - flag_set( "brutus_setup_complete" ); + zone_names = getarraykeys( level.zones ); + + for ( i = 0; i < zone_names.size; i++ ) + { + self thread get_zone_perk_machines( zone_names[i] ); + self thread get_zone_craftable_tables( zone_names[i] ); + self thread get_zone_traps( zone_names[i] ); + self thread get_zone_plane_ramp( zone_names[i] ); + } + + build_trap_array(); + flag_set( "brutus_setup_complete" ); } -build_trap_array() //checked matches cerberus output +build_trap_array() { - fan_array = getentarray( "acid_trap_trigger", "targetname" ); - acid_array = getentarray( "fan_trap_use_trigger", "targetname" ); - level.trap_triggers = arraycombine( fan_array, acid_array, 0, 0 ); + fan_array = getentarray( "acid_trap_trigger", "targetname" ); + acid_array = getentarray( "fan_trap_use_trigger", "targetname" ); + level.trap_triggers = arraycombine( fan_array, acid_array, 0, 0 ); } -add_machines_in_zone( zone, zone_name, match_string ) //checked changed to match cerberus output +add_machines_in_zone( zone, zone_name, match_string ) { - machine_array = getentarray( match_string, "targetname" ); - for ( i = 0; i < machine_array.size; i++ ) - { - if ( machine_array[ i ] entity_in_zone( zone_name, 1 ) ) - { - zone.perk_machines[ zone.perk_machines.size ] = machine_array[ i ]; - } - } + machine_array = getentarray( match_string, "targetname" ); + + for ( i = 0; i < machine_array.size; i++ ) + { + if ( machine_array[i] entity_in_zone( zone_name, 1 ) ) + zone.perk_machines[zone.perk_machines.size] = machine_array[i]; + } } -get_zone_perk_machines( zone_name ) //checked matches cerberus output +get_zone_perk_machines( zone_name ) { - zone = level.zones[ zone_name ]; - zone.perk_machines = []; - machine_array = []; - if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_doubletap" ); - } - if ( isDefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_revive" ); - } - if ( isDefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_jugg" ); - } - if ( isDefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_sleight" ); - } - if ( isDefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_deadshot_model" ); - } - if ( isDefined( level.zombiemode_using_electric_cherry_perk ) && level.zombiemode_using_electric_cherry_perk ) - { - add_machines_in_zone( zone, zone_name, "vendingelectric_cherry" ); - } - if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_additionalprimaryweapon" ); - } - if ( isDefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_marathon" ); - } - if ( isDefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_divetonuke" ); - } - if ( isDefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) - { - add_machines_in_zone( zone, zone_name, "vending_chugabud" ); - } + zone = level.zones[zone_name]; + zone.perk_machines = []; + machine_array = []; + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + add_machines_in_zone( zone, zone_name, "vending_doubletap" ); + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + add_machines_in_zone( zone, zone_name, "vending_revive" ); + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + add_machines_in_zone( zone, zone_name, "vending_jugg" ); + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + add_machines_in_zone( zone, zone_name, "vending_sleight" ); + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + add_machines_in_zone( zone, zone_name, "vending_deadshot_model" ); + + if ( isdefined( level.zombiemode_using_electric_cherry_perk ) && level.zombiemode_using_electric_cherry_perk ) + add_machines_in_zone( zone, zone_name, "vendingelectric_cherry" ); + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + add_machines_in_zone( zone, zone_name, "vending_additionalprimaryweapon" ); + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + add_machines_in_zone( zone, zone_name, "vending_marathon" ); + + if ( isdefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) + add_machines_in_zone( zone, zone_name, "vending_divetonuke" ); + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + add_machines_in_zone( zone, zone_name, "vending_chugabud" ); } -get_zone_craftable_tables( zone_name ) //checked partially changed to match cerberus output see info.md +get_zone_craftable_tables( zone_name ) { - flag_wait( "initial_players_connected" ); - zone = level.zones[ zone_name ]; - zone.craftable_tables = []; - while ( level.a_uts_craftables.size == 0 ) - { - wait 1; - } - scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); - craftable_tables = level.a_uts_craftables; - i = 0; - while ( i < craftable_tables.size ) - { - if ( !isDefined( craftable_tables[ i ].origin ) ) - { - i++; - continue; - } - scr_org.origin = craftable_tables[ i ].origin; - wait 0.05; - if ( craftable_tables[ i ].equipname == "open_table" && scr_org entity_in_zone( zone_name, 1 ) ) - { - zone.craftable_tables[ zone.craftable_tables.size ] = getstruct( craftable_tables[ i ].target, "targetname" ); - } - i++; - } - scr_org delete(); + flag_wait( "initial_players_connected" ); + zone = level.zones[zone_name]; + zone.craftable_tables = []; + + while ( level.a_uts_craftables.size == 0 ) + wait 1; + + scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); + craftable_tables = level.a_uts_craftables; + + for ( i = 0; i < craftable_tables.size; i++ ) + { + if ( !isdefined( craftable_tables[i].origin ) ) + continue; + + scr_org.origin = craftable_tables[i].origin; + wait 0.05; + + if ( craftable_tables[i].equipname == "open_table" && scr_org entity_in_zone( zone_name, 1 ) ) + zone.craftable_tables[zone.craftable_tables.size] = getstruct( craftable_tables[i].target, "targetname" ); + } + + scr_org delete(); } -get_zone_traps( zone_name ) //checked changed to match cerberus output +get_zone_traps( zone_name ) { - zone = level.zones[ zone_name ]; - zone.traps = []; - acid_traps = getentarray( "acid_trap_trigger", "targetname" ); - scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); - for ( i = 0; i < acid_traps.size; i++ ) - { - target_struct = getstruct( acid_traps[ i ].script_parameters, "targetname" ); - acid_traps[ i ].target_struct = target_struct; - scr_org.origin = target_struct.origin; - wait 0.05; - if ( scr_org entity_in_zone( zone_name, 1 ) ) - { - zone.traps[ zone.traps.size ] = acid_traps[ i ].target_struct; - target_struct.trigger = acid_traps[ i ]; - } - } - fan_traps = getentarray( "fan_trap_use_trigger", "targetname" ); - for ( i = 0; i < fan_traps.size; i++ ) - { - target_struct = getstruct( fan_traps[ i ].script_parameters, "targetname" ); - fan_traps[ i ].target_struct = target_struct; - scr_org.origin = target_struct.origin; - wait 0.05; - if ( scr_org entity_in_zone( zone_name, 1 ) ) - { - zone.traps[ zone.traps.size ] = fan_traps[ i ].target_struct; - target_struct.trigger = fan_traps[ i ]; - } - } - tower_traps = getentarray( "tower_trap_activate_trigger", "targetname" ); - for ( i = 0; i < tower_traps.size; i++ ) - { - target_struct = getstruct( tower_traps[ i ].script_parameters, "targetname" ); - tower_traps[ i ].target_struct = target_struct; - scr_org.origin = target_struct.origin; - wait 0.05; - if ( scr_org entity_in_zone( zone_name, 1 ) ) - { - zone.traps[ zone.traps.size ] = tower_traps[ i ].target_struct; - target_struct.trigger = tower_traps[ i ]; - } - } - scr_org delete(); + zone = level.zones[zone_name]; + zone.traps = []; + acid_traps = getentarray( "acid_trap_trigger", "targetname" ); + scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); + + for ( i = 0; i < acid_traps.size; i++ ) + { + target_struct = getstruct( acid_traps[i].script_parameters, "targetname" ); + acid_traps[i].target_struct = target_struct; + scr_org.origin = target_struct.origin; + wait 0.05; + + if ( scr_org entity_in_zone( zone_name, 1 ) ) + { + zone.traps[zone.traps.size] = acid_traps[i].target_struct; + target_struct.trigger = acid_traps[i]; + } + } + + fan_traps = getentarray( "fan_trap_use_trigger", "targetname" ); + + for ( i = 0; i < fan_traps.size; i++ ) + { + target_struct = getstruct( fan_traps[i].script_parameters, "targetname" ); + fan_traps[i].target_struct = target_struct; + scr_org.origin = target_struct.origin; + wait 0.05; + + if ( scr_org entity_in_zone( zone_name, 1 ) ) + { + zone.traps[zone.traps.size] = fan_traps[i].target_struct; + target_struct.trigger = fan_traps[i]; + } + } + + tower_traps = getentarray( "tower_trap_activate_trigger", "targetname" ); + + for ( i = 0; i < tower_traps.size; i++ ) + { + target_struct = getstruct( tower_traps[i].script_parameters, "targetname" ); + tower_traps[i].target_struct = target_struct; + scr_org.origin = target_struct.origin; + wait 0.05; + + if ( scr_org entity_in_zone( zone_name, 1 ) ) + { + zone.traps[zone.traps.size] = tower_traps[i].target_struct; + target_struct.trigger = tower_traps[i]; + } + } + + scr_org delete(); } -get_zone_plane_ramp( zone_name ) //checked changed to match cerberus output +get_zone_plane_ramp( zone_name ) { - flag_wait( "initial_players_connected" ); - zone = level.zones[ zone_name ]; - zone.plane_triggers = []; - scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); - fly_trigger = getent( "plane_fly_trigger", "targetname" ); - scr_org.origin = fly_trigger.origin; - if ( scr_org entity_in_zone( zone_name, 1 ) ) - { - fly_trigger_target = spawn( "script_model", ( 0, 0, 0 ) ); - fly_trigger_target.targetname = "fly_target"; - fly_trigger.fly_trigger_target = fly_trigger_target; - fly_trigger_target.fly_trigger = fly_trigger; - zone.plane_triggers[ zone.plane_triggers.size ] = fly_trigger_target; - } - while ( level.a_uts_craftables.size == 0 ) - { - wait 1; - } - for ( i = 0; i < level.a_uts_craftables.size; i++ ) - { - if ( level.a_uts_craftables[ i ].equipname == "plane" ) - { - scr_org.origin = level.a_uts_craftables[ i ].origin; - wait 0.05; - if ( scr_org entity_in_zone( zone_name, 1 ) ) - { - zone.plane_triggers[ zone.plane_triggers.size ] = level.a_uts_craftables[ i ]; - fly_trigger_target.origin = level.a_uts_craftables[ i ].origin; - fly_trigger_target.angles = level.a_uts_craftables[ i ].angles; - } - } - i++; - } - scr_org delete(); + flag_wait( "initial_players_connected" ); + zone = level.zones[zone_name]; + zone.plane_triggers = []; + scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); + fly_trigger = getent( "plane_fly_trigger", "targetname" ); + scr_org.origin = fly_trigger.origin; + + if ( scr_org entity_in_zone( zone_name, 1 ) ) + { + fly_trigger_target = spawn( "script_model", ( 0, 0, 0 ) ); + fly_trigger_target.targetname = "fly_target"; + fly_trigger.fly_trigger_target = fly_trigger_target; + fly_trigger_target.fly_trigger = fly_trigger; + zone.plane_triggers[zone.plane_triggers.size] = fly_trigger_target; + } + + while ( level.a_uts_craftables.size == 0 ) + wait 1; + + for ( i = 0; i < level.a_uts_craftables.size; i++ ) + { + if ( level.a_uts_craftables[i].equipname == "plane" ) + { + scr_org.origin = level.a_uts_craftables[i].origin; + wait 0.05; + + if ( scr_org entity_in_zone( zone_name, 1 ) ) + { + zone.plane_triggers[zone.plane_triggers.size] = level.a_uts_craftables[i]; + fly_trigger_target.origin = level.a_uts_craftables[i].origin; + fly_trigger_target.angles = level.a_uts_craftables[i].angles; + } + } + } + + scr_org delete(); } -check_magic_box_valid( player ) //checked matches cerberus output +check_magic_box_valid( player ) { - if ( isDefined( self.is_locked ) && self.is_locked ) - { - if ( player.score >= self.locked_cost ) - { - player minus_to_player_score( self.locked_cost ); - self.is_locked = 0; - self.locked_cost = undefined; - self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); - } - return 0; - } - return 1; + if ( isdefined( self.is_locked ) && self.is_locked ) + { + if ( player.score >= self.locked_cost ) + { + player minus_to_player_score( self.locked_cost ); + self.is_locked = 0; + self.locked_cost = undefined; + self.zbarrier set_magic_box_zbarrier_state( "unlocking" ); + } + + return false; + } + + return true; } -check_perk_machine_valid( player ) //checked matches cerberus output +check_perk_machine_valid( player ) { - if ( isDefined( self.is_locked ) && self.is_locked ) - { - if ( player.score >= self.locked_cost ) - { - player minus_to_player_score( self.locked_cost ); - self.is_locked = 0; - self.locked_cost = undefined; - self.lock_fx delete(); - self maps/mp/zombies/_zm_perks::reset_vending_hint_string(); - } - return 0; - } - return 1; + if ( isdefined( self.is_locked ) && self.is_locked ) + { + if ( player.score >= self.locked_cost ) + { + player minus_to_player_score( self.locked_cost ); + self.is_locked = 0; + self.locked_cost = undefined; + self.lock_fx delete(); + self maps\mp\zombies\_zm_perks::reset_vending_hint_string(); + } + + return false; + } + + return true; } -check_craftable_table_valid( player ) //checked changed to match cerberus output +check_craftable_table_valid( player ) { - if ( !isDefined( self.stub ) && isDefined( self.is_locked ) && self.is_locked ) - { - if ( player.score >= self.locked_cost ) - { - player minus_to_player_score( self.locked_cost ); - self.is_locked = 0; - self.locked_cost = undefined; - self.lock_fx delete(); - } - return 0; - } - else if ( isDefined( self.stub ) && isDefined( self.stub.is_locked ) && self.stub.is_locked ) - { - if ( player.score >= self.stub.locked_cost ) - { - player minus_to_player_score( self.stub.locked_cost ); - self.stub.is_locked = 0; - self.stub.locked_cost = undefined; - self.stub.lock_fx delete(); - self.stub thread maps/mp/zombies/_zm_craftables::craftablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - } - return 0; - } - return 1; + if ( !isdefined( self.stub ) && ( isdefined( self.is_locked ) && self.is_locked ) ) + { + if ( player.score >= self.locked_cost ) + { + player minus_to_player_score( self.locked_cost ); + self.is_locked = 0; + self.locked_cost = undefined; + self.lock_fx delete(); + } + + return false; + } + else if ( isdefined( self.stub ) && ( isdefined( self.stub.is_locked ) && self.stub.is_locked ) ) + { + if ( player.score >= self.stub.locked_cost ) + { + player minus_to_player_score( self.stub.locked_cost ); + self.stub.is_locked = 0; + self.stub.locked_cost = undefined; + self.stub.lock_fx delete(); + self.stub thread maps\mp\zombies\_zm_craftables::craftablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + } + + return false; + } + + return true; } -check_plane_valid( player ) //checked matches cerberus output +check_plane_valid( player ) { - if ( isDefined( self.fly_trigger_target ) ) - { - plane_struct = self.fly_trigger_target; - } - else - { - plane_struct = self; - } - if ( isDefined( plane_struct.is_locked ) && plane_struct.is_locked ) - { - if ( player.score >= plane_struct.locked_cost ) - { - player minus_to_player_score( plane_struct.locked_cost ); - plane_struct.is_locked = 0; - plane_struct.locked_cost = undefined; - plane_struct.lock_fx delete(); - plane_struct maps/mp/zm_alcatraz_sq::reset_plane_hint_string( player ); - } - return 0; - } - return 1; + if ( isdefined( self.fly_trigger_target ) ) + plane_struct = self.fly_trigger_target; + else + plane_struct = self; + + if ( isdefined( plane_struct.is_locked ) && plane_struct.is_locked ) + { + if ( player.score >= plane_struct.locked_cost ) + { + player minus_to_player_score( plane_struct.locked_cost ); + plane_struct.is_locked = 0; + plane_struct.locked_cost = undefined; + plane_struct.lock_fx delete(); + plane_struct maps\mp\zm_alcatraz_sq::reset_plane_hint_string( player ); + } + + return false; + } + + return true; } -sndbrutusvox( alias, num ) //checked matches cerberus output +sndbrutusvox( alias, num ) { - self endon( "brutus_cleanup" ); - if ( !isDefined( alias ) ) - { - return; - } - num_variants = maps/mp/zombies/_zm_spawner::get_number_variants( alias ); - if ( num_variants <= 0 ) - { - return; - } - if ( isDefined( num ) && num <= num_variants ) - { - num_variants = num; - } - if ( !level.sndbrutusistalking ) - { - level.sndbrutusistalking = 1; - alias = ( alias + "_" ) + randomintrange( 0, num_variants ); - playbacktime = soundgetplaybacktime( alias ); - if ( playbacktime >= 0 ) - { - playbacktime *= 0.001; - } - else - { - playbacktime = 1; - } - self playsoundontag( alias, "J_head" ); - wait playbacktime; - level.sndbrutusistalking = 0; - } + self endon( "brutus_cleanup" ); + + if ( !isdefined( alias ) ) + return; + + num_variants = maps\mp\zombies\_zm_spawner::get_number_variants( alias ); + + if ( num_variants <= 0 ) + return; + + if ( isdefined( num ) && num <= num_variants ) + num_variants = num; + + if ( !level.sndbrutusistalking ) + { + level.sndbrutusistalking = 1; + alias = alias + "_" + randomintrange( 0, num_variants ); + playbacktime = soundgetplaybacktime( alias ); + + if ( playbacktime >= 0 ) + playbacktime *= 0.001; + else + playbacktime = 1; + + self playsoundontag( alias, "J_head" ); + wait( playbacktime ); + level.sndbrutusistalking = 0; + } } -get_fly_trigger() //checked changed to match cerberus output +get_fly_trigger() { - plane_triggers = level.zones[ "zone_roof" ].plane_triggers; - for ( i = 0; i < plane_triggers.size; i++ ) - { - if ( isDefined( plane_triggers[ i ].fly_trigger ) ) - { - return plane_triggers[ i ]; - } - } + plane_triggers = level.zones["zone_roof"].plane_triggers; + + for ( i = 0; i < plane_triggers.size; i++ ) + { + if ( isdefined( plane_triggers[i].fly_trigger ) ) + return plane_triggers[i]; + } } -get_build_trigger() //checked changed to match cerberus output +get_build_trigger() { - plane_triggers = level.zones[ "zone_roof" ].plane_triggers; - for ( i = 0; i < plane_triggers.size; i++ ) - { - if ( isDefined( plane_triggers[ i ].equipname ) && plane_triggers[ i ].equipname == "plane" ) - { - return plane_triggers[ i ]; - } - } + plane_triggers = level.zones["zone_roof"].plane_triggers; + + for ( i = 0; i < plane_triggers.size; i++ ) + { + if ( isdefined( plane_triggers[i].equipname ) && plane_triggers[i].equipname == "plane" ) + return plane_triggers[i]; + } } -get_fuel_trigger() //checked changed to match cerberus output +get_fuel_trigger() { - plane_triggers = level.zones[ "zone_roof" ].plane_triggers; - for ( i = 0; i < plane_triggers.size; i++ ) - { - if ( isDefined( plane_triggers[ i ].equipname ) && plane_triggers[ i ].equipname == "refuelable_plane" ) - { - return plane_triggers[ i ]; - } - } + plane_triggers = level.zones["zone_roof"].plane_triggers; + + for ( i = 0; i < plane_triggers.size; i++ ) + { + if ( isdefined( plane_triggers[i].equipname ) && plane_triggers[i].equipname == "refuelable_plane" ) + return plane_triggers[i]; + } } -transfer_plane_trigger( from, to ) //checked matches cerberus output +transfer_plane_trigger( from, to ) { - if ( from == "fly" ) - { - from_trigger = get_fly_trigger(); - } - else if ( from == "build" ) - { - from_trigger = get_build_trigger(); - } - else - { - from_trigger = get_fuel_trigger(); - } - if ( to == "fly" ) - { - to_trigger = get_fly_trigger(); - } - else if ( to == "build" ) - { - to_trigger = get_build_trigger(); - } - else - { - to_trigger = get_fuel_trigger(); - } - to_trigger.lock_fx = from_trigger.lock_fx; - to_trigger.is_locked = from_trigger.is_locked; - to_trigger.num_times_locked = from_trigger.num_times_locked; - to_trigger.hint_string = from_trigger.hint_string; - to_trigger.locked_cost = from_trigger.locked_cost; - from_trigger.lock_fx = undefined; - from_trigger.is_locked = 0; - from_trigger.locked_cost = undefined; - if ( from == "fly" ) - { - t_plane_fly = getent( "plane_fly_trigger", "targetname" ); - t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); - } + if ( from == "fly" ) + from_trigger = get_fly_trigger(); + else if ( from == "build" ) + from_trigger = get_build_trigger(); + else + from_trigger = get_fuel_trigger(); + + if ( to == "fly" ) + to_trigger = get_fly_trigger(); + else if ( to == "build" ) + to_trigger = get_build_trigger(); + else + to_trigger = get_fuel_trigger(); + + to_trigger.lock_fx = from_trigger.lock_fx; + to_trigger.is_locked = from_trigger.is_locked; + to_trigger.num_times_locked = from_trigger.num_times_locked; + to_trigger.hint_string = from_trigger.hint_string; + to_trigger.locked_cost = from_trigger.locked_cost; + from_trigger.lock_fx = undefined; + from_trigger.is_locked = 0; + from_trigger.locked_cost = undefined; + + if ( from == "fly" ) + { + t_plane_fly = getent( "plane_fly_trigger", "targetname" ); + t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); + } } - - - - diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc index fec7059..3a8d8f1 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_craftables.gsc @@ -1,3192 +1,2931 @@ -#include maps/mp/_demo; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_craftables; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_craftables; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\_demo; init() { - precachestring( &"ZOMBIE_BUILDING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); - precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); - precacheitem( "zombie_builder_zm" ); - precacheitem( "buildable_piece_zm" ); - level.craftable_piece_swap_allowed = 1; - zombie_craftables_callbacks = []; - level.craftablepickups = []; - level.craftables_crafted = []; - level.a_uts_craftables = []; - level.craftable_piece_count = 0; - level._effect[ "building_dust" ] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); - if ( isDefined( level.init_craftables ) ) - { - [[ level.init_craftables ]](); - } - open_table = spawnstruct(); - open_table.name = "open_table"; - open_table.triggerthink = ::opentablecraftable; - open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; - include_zombie_craftable( open_table ); - add_zombie_craftable( "open_table", &"" ); - if ( isDefined( level.use_swipe_protection ) ) - { - onplayerconnect_callback( ::craftables_watch_swipes ); - } + precachestring( &"ZOMBIE_BUILDING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_MISSING" ); + precachestring( &"ZOMBIE_BUILD_PIECE_GRAB" ); + precacheitem( "zombie_builder_zm" ); + precacheitem( "buildable_piece_zm" ); + level.craftable_piece_swap_allowed = 1; + zombie_craftables_callbacks = []; + level.craftablepickups = []; + level.craftables_crafted = []; + level.a_uts_craftables = []; + level.craftable_piece_count = 0; + level._effect["building_dust"] = loadfx( "maps/zombie/fx_zmb_buildable_assemble_dust" ); + + if ( isdefined( level.init_craftables ) ) + [[ level.init_craftables ]](); + + open_table = spawnstruct(); + open_table.name = "open_table"; + open_table.triggerthink = ::opentablecraftable; + open_table.custom_craftablestub_update_prompt = ::open_craftablestub_update_prompt; + include_zombie_craftable( open_table ); + add_zombie_craftable( "open_table", &"" ); + + if ( isdefined( level.use_swipe_protection ) ) + onplayerconnect_callback( ::craftables_watch_swipes ); } anystub_update_prompt( player ) { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.is_drinking ) && player.is_drinking > 0 ) - { - self.hint_string = ""; - return 0; - } - if ( isDefined( player.screecher_weapon ) ) - { - self.hint_string = ""; - return 0; - } - return 1; + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || player in_revive_trigger() ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.is_drinking ) && player.is_drinking > 0 ) + { + self.hint_string = ""; + return false; + } + + if ( isdefined( player.screecher_weapon ) ) + { + self.hint_string = ""; + return false; + } + + return true; } anystub_get_unitrigger_origin() { - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - return self.origin; + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin; + + return self.origin; } anystub_on_spawn_trigger( trigger ) { - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } + if ( isdefined( self.link_parent ) ) + { + trigger enablelinkto(); + trigger linkto( self.link_parent ); + trigger setmovingplatformenabled( 1 ); + } } craftables_watch_swipes() { - self endon( "disconnect" ); - self notify( "craftables_watch_swipes" ); - self endon( "craftables_watch_swipes" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - trigger = level._unitriggers.trigger_pool[ self getentitynumber() ]; - if ( isDefined( trigger ) && isDefined( trigger.stub.piece ) ) - { - piece = trigger.stub.piece; - if ( !isDefined( piece.damage ) ) - { - piece.damage = 0; - } - piece.damage++; - if ( piece.damage > 12 ) - { - thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( trigger.stub maps/mp/zombies/_zm_unitrigger::unitrigger_origin() ); - piece maps/mp/zombies/_zm_craftables::piece_unspawn(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - } - } - } + self endon( "disconnect" ); + self notify( "craftables_watch_swipes" ); + self endon( "craftables_watch_swipes" ); + + while ( true ) + { + self waittill( "melee_swipe", zombie ); + + if ( distancesquared( zombie.origin, self.origin ) > zombie.meleeattackdist * zombie.meleeattackdist ) + continue; + + trigger = level._unitriggers.trigger_pool[self getentitynumber()]; + + if ( isdefined( trigger ) && isdefined( trigger.stub.piece ) ) + { + piece = trigger.stub.piece; + + if ( !isdefined( piece.damage ) ) + piece.damage = 0; + + piece.damage++; + + if ( piece.damage > 12 ) + { + thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( trigger.stub maps\mp\zombies\_zm_unitrigger::unitrigger_origin() ); + piece maps\mp\zombies\_zm_craftables::piece_unspawn(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + + if ( isalive( self ) ) + self playlocalsound( level.zmb_laugh_alias ); + } + } + } } explosiondamage( damage, pos ) { /# - println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\n" ); + println( "ZM CRAFTABLE Explode do " + damage + " damage to " + self.name + "\n" ); #/ - self dodamage( damage, pos ); + self dodamage( damage, pos ); } make_zombie_craftable_open( str_craftable, str_model, v_angle_offset, v_origin_offset ) { /# - assert( isDefined( level.zombie_craftablestubs[ str_craftable ] ), "Craftable " + str_craftable + " has not been added yet." ); + assert( isdefined( level.zombie_craftablestubs[str_craftable] ), "Craftable " + str_craftable + " has not been added yet." ); #/ - precachemodel( str_model ); - s_craftable = level.zombie_craftablestubs[ str_craftable ]; - s_craftable.is_open_table = 1; - s_craftable.str_model = str_model; - s_craftable.v_angle_offset = v_angle_offset; - s_craftable.v_origin_offset = v_origin_offset; + precachemodel( str_model ); + s_craftable = level.zombie_craftablestubs[str_craftable]; + s_craftable.is_open_table = 1; + s_craftable.str_model = str_model; + s_craftable.v_angle_offset = v_angle_offset; + s_craftable.v_origin_offset = v_origin_offset; } add_zombie_craftable( craftable_name, str_to_craft, str_crafting, str_taken, onfullycrafted, need_all_pieces ) { - if ( !isDefined( level.zombie_include_craftables ) ) - { - level.zombie_include_craftables = []; - } - if ( isDefined( level.zombie_include_craftables ) && !isDefined( level.zombie_include_craftables[ craftable_name ] ) ) - { - return; - } - if ( isDefined( str_to_craft ) ) - { - precachestring( str_to_craft ); - } - if ( isDefined( str_crafting ) ) - { - precachestring( str_crafting ); - } - if ( isDefined( str_taken ) ) - { - precachestring( str_taken ); - } - craftable_struct = level.zombie_include_craftables[ craftable_name ]; - if ( !isDefined( level.zombie_craftablestubs ) ) - { - level.zombie_craftablestubs = []; - } - craftable_struct.str_to_craft = str_to_craft; - craftable_struct.str_crafting = str_crafting; - craftable_struct.str_taken = str_taken; - craftable_struct.onfullycrafted = onfullycrafted; - craftable_struct.need_all_pieces = need_all_pieces; + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; + + if ( isdefined( level.zombie_include_craftables ) && !isdefined( level.zombie_include_craftables[craftable_name] ) ) + return; + + if ( isdefined( str_to_craft ) ) + precachestring( str_to_craft ); + + if ( isdefined( str_crafting ) ) + precachestring( str_crafting ); + + if ( isdefined( str_taken ) ) + precachestring( str_taken ); + + craftable_struct = level.zombie_include_craftables[craftable_name]; + + if ( !isdefined( level.zombie_craftablestubs ) ) + level.zombie_craftablestubs = []; + + craftable_struct.str_to_craft = str_to_craft; + craftable_struct.str_crafting = str_crafting; + craftable_struct.str_taken = str_taken; + craftable_struct.onfullycrafted = onfullycrafted; + craftable_struct.need_all_pieces = need_all_pieces; /# - println( "ZM >> Looking for craftable - " + craftable_struct.name ); + println( "ZM >> Looking for craftable - " + craftable_struct.name ); #/ - level.zombie_craftablestubs[ craftable_struct.name ] = craftable_struct; - if ( !level.createfx_enabled ) - { - if ( level.zombie_craftablestubs.size == 2 ) - { - bits = getminbitcountfornum( level.craftable_piece_count ); - registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); - } - } + level.zombie_craftablestubs[craftable_struct.name] = craftable_struct; + + if ( !level.createfx_enabled ) + { + if ( level.zombie_craftablestubs.size == 2 ) + { + bits = getminbitcountfornum( level.craftable_piece_count ); + registerclientfield( "toplayer", "craftable", 9000, bits, "int" ); + } + } } add_zombie_craftable_vox_category( craftable_name, vox_id ) { - craftable_struct = level.zombie_include_craftables[ craftable_name ]; - craftable_struct.vox_id = vox_id; + craftable_struct = level.zombie_include_craftables[craftable_name]; + craftable_struct.vox_id = vox_id; } include_zombie_craftable( craftablestub ) { - if ( !isDefined( level.zombie_include_craftables ) ) - { - level.zombie_include_craftables = []; - } + if ( !isdefined( level.zombie_include_craftables ) ) + level.zombie_include_craftables = []; /# - println( "ZM >> Including craftable - " + craftablestub.name ); + println( "ZM >> Including craftable - " + craftablestub.name ); #/ - level.zombie_include_craftables[ craftablestub.name ] = craftablestub; + level.zombie_include_craftables[craftablestub.name] = craftablestub; } -generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared, vox_id ) +generate_zombie_craftable_piece( craftablename, piecename, modelname, radius, height, drop_offset, hud_icon, onpickup, ondrop, oncrafted, use_spawn_num, tag_name, can_reuse, client_field_value, is_shared, vox_id, b_one_time_vo ) { - if ( !isDefined( is_shared ) ) - { - is_shared = 0; - } - precachemodel( modelname ); - if ( isDefined( hud_icon ) ) - { - precacheshader( hud_icon ); - } - piecestub = spawnstruct(); - craftable_pieces = []; - piece_alias = ""; - if ( !isDefined( piecename ) ) - { - piecename = modelname; - } - craftable_pieces_structs = getstructarray( ( craftablename + "_" ) + piecename, "targetname" ); + if ( !isdefined( is_shared ) ) + is_shared = 0; + + if ( !isdefined( b_one_time_vo ) ) + b_one_time_vo = 0; + + precachemodel( modelname ); + + if ( isdefined( hud_icon ) ) + precacheshader( hud_icon ); + + piecestub = spawnstruct(); + craftable_pieces = []; + piece_alias = ""; + + if ( !isdefined( piecename ) ) + piecename = modelname; + + craftable_pieces_structs = getstructarray( craftablename + "_" + piecename, "targetname" ); /# - if ( craftable_pieces_structs.size < 1 ) - { - println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\n" ); + if ( craftable_pieces_structs.size < 1 ) + println( "ERROR: Missing craftable piece <" + craftablename + "> <" + piecename + ">\n" ); #/ - } - _a344 = craftable_pieces_structs; - index = getFirstArrayKey( _a344 ); - while ( isDefined( index ) ) - { - struct = _a344[ index ]; - craftable_pieces[ index ] = struct; - craftable_pieces[ index ].hasspawned = 0; - index = getNextArrayKey( _a344, index ); - } - piecestub.spawns = craftable_pieces; - piecestub.craftablename = craftablename; - piecestub.piecename = piecename; - piecestub.modelname = modelname; - piecestub.hud_icon = hud_icon; - piecestub.radius = radius; - piecestub.height = height; - piecestub.tag_name = tag_name; - piecestub.can_reuse = can_reuse; - piecestub.drop_offset = drop_offset; - piecestub.max_instances = 256; - piecestub.onpickup = onpickup; - piecestub.ondrop = ondrop; - piecestub.oncrafted = oncrafted; - piecestub.use_spawn_num = use_spawn_num; - piecestub.is_shared = is_shared; - piecestub.vox_id = vox_id; - if ( isDefined( client_field_value ) ) - { - if ( isDefined( is_shared ) && is_shared ) - { + foreach ( index, struct in craftable_pieces_structs ) + { + craftable_pieces[index] = struct; + craftable_pieces[index].hasspawned = 0; + } + + piecestub.spawns = craftable_pieces; + piecestub.craftablename = craftablename; + piecestub.piecename = piecename; + piecestub.modelname = modelname; + piecestub.hud_icon = hud_icon; + piecestub.radius = radius; + piecestub.height = height; + piecestub.tag_name = tag_name; + piecestub.can_reuse = can_reuse; + piecestub.drop_offset = drop_offset; + piecestub.max_instances = 256; + piecestub.onpickup = onpickup; + piecestub.ondrop = ondrop; + piecestub.oncrafted = oncrafted; + piecestub.use_spawn_num = use_spawn_num; + piecestub.is_shared = is_shared; + piecestub.vox_id = vox_id; + + if ( isdefined( b_one_time_vo ) && b_one_time_vo ) + piecestub.b_one_time_vo = b_one_time_vo; + + if ( isdefined( client_field_value ) ) + { + if ( isdefined( is_shared ) && is_shared ) + { /# - assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); + assert( isstring( client_field_value ), "Client field value for shared item (" + piecename + ") should be a string (the name of the ClientField to use)" ); #/ - piecestub.client_field_id = client_field_value; - } - else - { - piecestub.client_field_state = client_field_value; - } - } - return piecestub; + piecestub.client_field_id = client_field_value; + } + else + piecestub.client_field_state = client_field_value; + } + + return piecestub; } manage_multiple_pieces( max_instances ) { - self.max_instances = max_instances; - self.managing_pieces = 1; - self.piece_allocated = []; + self.max_instances = max_instances; + self.managing_pieces = 1; + self.piece_allocated = []; } combine_craftable_pieces( piece1, piece2, piece3 ) { - spawns1 = piece1.spawns; - spawns2 = piece2.spawns; - spawns = arraycombine( spawns1, spawns2, 1, 0 ); - if ( isDefined( piece3 ) ) - { - spawns3 = piece3.spawns; - spawns = arraycombine( spawns, spawns3, 1, 0 ); - spawns = array_randomize( spawns ); - piece3.spawns = spawns; - } - else - { - spawns = array_randomize( spawns ); - } - piece1.spawns = spawns; - piece2.spawns = spawns; + spawns1 = piece1.spawns; + spawns2 = piece2.spawns; + spawns = arraycombine( spawns1, spawns2, 1, 0 ); + + if ( isdefined( piece3 ) ) + { + spawns3 = piece3.spawns; + spawns = arraycombine( spawns, spawns3, 1, 0 ); + spawns = array_randomize( spawns ); + piece3.spawns = spawns; + } + else + spawns = array_randomize( spawns ); + + piece1.spawns = spawns; + piece2.spawns = spawns; } add_craftable_piece( piecestub, tag_name, can_reuse ) { - if ( !isDefined( self.a_piecestubs ) ) - { - self.a_piecestubs = []; - } - if ( isDefined( tag_name ) ) - { - piecestub.tag_name = tag_name; - } - if ( isDefined( can_reuse ) ) - { - piecestub.can_reuse = can_reuse; - } - self.a_piecestubs[ self.a_piecestubs.size ] = piecestub; + if ( !isdefined( self.a_piecestubs ) ) + self.a_piecestubs = []; + + if ( isdefined( tag_name ) ) + piecestub.tag_name = tag_name; + + if ( isdefined( can_reuse ) ) + piecestub.can_reuse = can_reuse; + + self.a_piecestubs[self.a_piecestubs.size] = piecestub; } player_drop_piece_on_downed() { - self endon( "craftable_piece_released" ); - self waittill( "bled_out" ); - onplayerlaststand(); + self endon( "craftable_piece_released" ); + + self waittill( "bled_out" ); + + onplayerlaststand(); } onplayerlaststand() { - piece = self.current_craftable_piece; - if ( isDefined( piece ) ) - { - return_to_start_pos = 0; - if ( isDefined( level.safe_place_for_craftable_piece ) ) - { - if ( !( self [[ level.safe_place_for_craftable_piece ]]( piece ) ) ) - { - return_to_start_pos = 1; - } - } - if ( return_to_start_pos ) - { - piece piece_spawn_at(); - } - else - { - piece piece_spawn_at( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.angles ); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - self setclientfieldtoplayer( "craftable", 0 ); - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); + piece = self.current_craftable_piece; + + if ( isdefined( piece ) ) + { + return_to_start_pos = 0; + + if ( isdefined( level.safe_place_for_craftable_piece ) ) + { + if ( !self [[ level.safe_place_for_craftable_piece ]]( piece ) ) + return_to_start_pos = 1; + } + + if ( return_to_start_pos ) + piece piece_spawn_at(); + else + piece piece_spawn_at( self.origin + vectorscale( ( 1, 1, 0 ), 5.0 ), self.angles ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + self setclientfieldtoplayer( "craftable", 0 ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); } piecestub_get_unitrigger_origin() { - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin + vectorScale( ( 0, 0, 1 ), 12 ); - } - return self.origin; + if ( isdefined( self.origin_parent ) ) + return self.origin_parent.origin + vectorscale( ( 0, 0, 1 ), 12.0 ); + + return self.origin; } generate_piece_unitrigger( classname, origin, angles, flags, radius, script_height, moving ) { - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13,5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27,5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; - unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - if ( isDefined( moving ) && moving ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); - } - return unitrigger_stub; + if ( !isdefined( radius ) ) + radius = 64; + + if ( !isdefined( script_height ) ) + script_height = 64; + + script_width = script_height; + + if ( !isdefined( script_width ) ) + script_width = 64; + + script_length = script_height; + + if ( !isdefined( script_length ) ) + script_length = 64; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = origin; + + if ( isdefined( script_length ) ) + unitrigger_stub.script_length = script_length; + else + unitrigger_stub.script_length = 13.5; + + if ( isdefined( script_width ) ) + unitrigger_stub.script_width = script_width; + else + unitrigger_stub.script_width = 27.5; + + if ( isdefined( script_height ) ) + unitrigger_stub.script_height = script_height; + else + unitrigger_stub.script_height = 24; + + unitrigger_stub.radius = radius; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 0; + + switch ( classname ) + { + case "trigger_radius": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; + break; + case "trigger_radius_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + break; + case "trigger_box": + unitrigger_stub.script_unitrigger_type = "unitrigger_box"; + break; + case "trigger_box_use": + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + break; + } + + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; + unitrigger_stub.originfunc = ::piecestub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + + if ( isdefined( moving ) && moving ) + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + else + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::piece_unitrigger_think ); + + return unitrigger_stub; } piecetrigger_update_prompt( player ) { - can_use = self.stub piecestub_update_prompt( player ); - self setinvisibletoplayer( player, !can_use ); - self sethintstring( self.stub.hint_string ); - return can_use; + can_use = self.stub piecestub_update_prompt( player ); + self setinvisibletoplayer( player, !can_use ); + self sethintstring( self.stub.hint_string ); + return can_use; } piecestub_update_prompt( player ) { - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - if ( isDefined( player.current_craftable_piece ) && isDefined( self.piece.is_shared ) && !self.piece.is_shared ) - { - if ( !level.craftable_piece_swap_allowed ) - { - self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; - } - else - { - spiece = self.piece; - cpiece = player.current_craftable_piece; - if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) - { - self.hint_string = ""; - return 0; - } - self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; - } - } - else - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; - } - return 1; + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( player.current_craftable_piece ) && !( isdefined( self.piece.is_shared ) && self.piece.is_shared ) ) + { + if ( !level.craftable_piece_swap_allowed ) + self.hint_string = &"ZM_CRAFTABLES_PIECE_NO_SWITCH"; + else + { + spiece = self.piece; + cpiece = player.current_craftable_piece; + + if ( spiece.piecename == cpiece.piecename && spiece.craftablename == cpiece.craftablename ) + { + self.hint_string = ""; + return false; + } + + self.hint_string = &"ZOMBIE_BUILD_PIECE_SWITCH"; + } + } + else + self.hint_string = &"ZOMBIE_BUILD_PIECE_GRAB"; + + return true; } piece_unitrigger_think() { - self endon( "kill_trigger" ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !level.craftable_piece_swap_allowed && isDefined( player.current_craftable_piece ) && isDefined( self.stub.piece.is_shared ) && !self.stub.piece.is_shared ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_take_piece( self.stub.piece ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - continue; - } - else - { - player thread player_take_piece( self.stub.piece ); - } - } + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !level.craftable_piece_swap_allowed && isdefined( player.current_craftable_piece ) && !( isdefined( self.stub.piece.is_shared ) && self.stub.piece.is_shared ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_take_piece( self.stub.piece ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + else + player thread player_take_piece( self.stub.piece ); + } } player_can_take_piece( piece ) { - if ( !isDefined( piece ) ) - { - return 0; - } - return 1; + if ( !isdefined( piece ) ) + return false; + + return true; } dbline( from, to ) { /# - time = 20; - while ( time > 0 ) - { - line( from, to, ( 0, 0, 1 ), 0, 1 ); - time -= 0,05; - wait 0,05; + time = 20; + + while ( time > 0 ) + { + line( from, to, ( 0, 0, 1 ), 0, 1 ); + time -= 0.05; + wait 0.05; + } #/ - } } player_throw_piece( piece, origin, dir, return_to_spawn, return_time, endangles ) { /# - assert( isDefined( piece ) ); + assert( isdefined( piece ) ); #/ - if ( isDefined( piece ) ) - { + if ( isdefined( piece ) ) + { /# - thread dbline( origin, origin + dir ); + thread dbline( origin, origin + dir ); #/ - pass = 0; - done = 0; - altmodel = undefined; - while ( pass < 2 && !done ) - { - grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); - grenade thread watch_hit_players(); - grenade ghost(); - if ( !isDefined( altmodel ) ) - { - altmodel = spawn( "script_model", grenade.origin ); - altmodel setmodel( piece.modelname ); - } - altmodel.origin = grenade.angles; - altmodel.angles = grenade.angles; - altmodel linkto( grenade, "", ( 0, 0, 1 ), ( 0, 0, 1 ) ); - grenade.altmodel = altmodel; - grenade waittill( "stationary" ); - grenade_origin = grenade.origin; - grenade_angles = grenade.angles; - landed_on = grenade getgroundent(); - grenade delete(); - if ( isDefined( landed_on ) && landed_on == level ) - { - done = 1; - continue; - } - else - { - origin = grenade_origin; - dir = ( ( dir[ 0 ] * -1 ) / 10, ( dir[ 1 ] * -1 ) / 10, -1 ); - pass++; - } - } - if ( !isDefined( endangles ) ) - { - endangles = grenade_angles; - } - piece piece_spawn_at( grenade_origin, endangles ); - if ( isDefined( altmodel ) ) - { - altmodel delete(); - } - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - if ( isDefined( return_to_spawn ) && return_to_spawn ) - { - piece piece_wait_and_return( return_time ); - } - } + pass = 0; + done = 0; + altmodel = undefined; + + while ( pass < 2 && !done ) + { + grenade = self magicgrenadetype( "buildable_piece_zm", origin, dir, 30000 ); + grenade thread watch_hit_players(); + grenade ghost(); + + if ( !isdefined( altmodel ) ) + { + altmodel = spawn( "script_model", grenade.origin ); + altmodel setmodel( piece.modelname ); + } + + altmodel.origin = grenade.angles; + altmodel.angles = grenade.angles; + altmodel linkto( grenade, "", ( 0, 0, 0 ), ( 0, 0, 0 ) ); + grenade.altmodel = altmodel; + + grenade waittill( "stationary" ); + + grenade_origin = grenade.origin; + grenade_angles = grenade.angles; + landed_on = grenade getgroundent(); + grenade delete(); + + if ( isdefined( landed_on ) && landed_on == level ) + done = 1; + else + { + origin = grenade_origin; + dir = ( dir[0] * -1 / 10, dir[1] * -1 / 10, -1 ); + pass++; + } + } + + if ( !isdefined( endangles ) ) + endangles = grenade_angles; + + piece piece_spawn_at( grenade_origin, endangles ); + + if ( isdefined( altmodel ) ) + altmodel delete(); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + + if ( isdefined( return_to_spawn ) && return_to_spawn ) + piece piece_wait_and_return( return_time ); + } } watch_hit_players() { - self endon( "death" ); - self endon( "stationary" ); - while ( isDefined( self ) ) - { - self waittill( "grenade_bounce", pos, normal, ent ); - if ( isplayer( ent ) ) - { - ent explosiondamage( 25, pos ); - } - } + self endon( "death" ); + self endon( "stationary" ); + + while ( isdefined( self ) ) + { + self waittill( "grenade_bounce", pos, normal, ent ); + + if ( isplayer( ent ) ) + ent explosiondamage( 25, pos ); + } } piece_wait_and_return( return_time ) { - self endon( "pickup" ); - wait 0,15; - if ( isDefined( level.exploding_jetgun_fx ) ) - { - playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "powerup_on" ], self.model, "tag_origin" ); - } - wait ( return_time - 6 ); - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self piece_hide(); - wait 1; - self piece_show(); - wait 1; - self notify( "respawn" ); - self piece_unspawn(); - self piece_spawn_at(); + self endon( "pickup" ); + wait 0.15; + + if ( isdefined( level.exploding_jetgun_fx ) ) + playfxontag( level.exploding_jetgun_fx, self.model, "tag_origin" ); + else + playfxontag( level._effect["powerup_on"], self.model, "tag_origin" ); + + wait( return_time - 6 ); + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self piece_hide(); + wait 1; + self piece_show(); + wait 1; + self notify( "respawn" ); + self piece_unspawn(); + self piece_spawn_at(); } player_return_piece_to_original_spawn() { - self notify( "craftable_piece_released" ); - piece = self.current_craftable_piece; - self.current_craftable_piece = undefined; - if ( isDefined( piece ) ) - { - piece piece_spawn_at(); - self setclientfieldtoplayer( "craftable", 0 ); - } + self notify( "craftable_piece_released" ); + piece = self.current_craftable_piece; + self.current_craftable_piece = undefined; + + if ( isdefined( piece ) ) + { + piece piece_spawn_at(); + self setclientfieldtoplayer( "craftable", 0 ); + } } player_drop_piece_on_death() { - self notify( "craftable_piece_released" ); - self endon( "craftable_piece_released" ); - self thread player_drop_piece_on_downed(); - origin = self.origin; - angles = self.angles; - piece = self.current_craftable_piece; - self waittill( "disconnect" ); - piece piece_spawn_at( origin, angles ); - if ( isDefined( self ) ) - { - self setclientfieldtoplayer( "craftable", 0 ); - } + self notify( "craftable_piece_released" ); + self endon( "craftable_piece_released" ); + self thread player_drop_piece_on_downed(); + origin = self.origin; + angles = self.angles; + piece = self.current_craftable_piece; + + self waittill( "disconnect" ); + + piece piece_spawn_at( origin, angles ); + + if ( isdefined( self ) ) + self setclientfieldtoplayer( "craftable", 0 ); } player_drop_piece( piece ) { - if ( !isDefined( piece ) ) - { - piece = self.current_craftable_piece; - } - if ( isDefined( piece ) ) - { - piece.damage = 0; - piece piece_spawn_at( self.origin, self.angles ); - self setclientfieldtoplayer( "craftable", 0 ); - if ( isDefined( piece.ondrop ) ) - { - piece [[ piece.ondrop ]]( self ); - } - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); + if ( !isdefined( piece ) ) + piece = self.current_craftable_piece; + + if ( isdefined( piece ) ) + { + piece.damage = 0; + piece piece_spawn_at( self.origin, self.angles ); + self setclientfieldtoplayer( "craftable", 0 ); + + if ( isdefined( piece.ondrop ) ) + piece [[ piece.ondrop ]]( self ); + } + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); } player_take_piece( piecespawn ) { - piecestub = piecespawn.piecestub; - damage = piecespawn.damage; - if ( isDefined( piecestub.is_shared ) && !piecestub.is_shared && isDefined( self.current_craftable_piece ) ) - { - other_piece = self.current_craftable_piece; - self player_drop_piece( self.current_craftable_piece ); - other_piece.damage = damage; - self do_player_general_vox( "general", "craft_swap" ); - } - if ( isDefined( piecestub.onpickup ) ) - { - piecespawn [[ piecestub.onpickup ]]( self ); - } - if ( isDefined( piecestub.is_shared ) && piecestub.is_shared ) - { - if ( isDefined( piecestub.client_field_id ) ) - { - level setclientfield( piecestub.client_field_id, 1 ); - } - } - else - { - if ( isDefined( piecestub.client_field_state ) ) - { - self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); - } - } - piecespawn piece_unspawn(); - piecespawn notify( "pickup" ); - if ( isDefined( piecestub.is_shared ) && piecestub.is_shared ) - { - piecespawn.in_shared_inventory = 1; - } - else - { - self.current_craftable_piece = piecespawn; - self thread player_drop_piece_on_death(); - } - self track_craftable_piece_pickedup( piecespawn ); + piecestub = piecespawn.piecestub; + damage = piecespawn.damage; + + if ( !( isdefined( piecestub.is_shared ) && piecestub.is_shared ) && isdefined( self.current_craftable_piece ) ) + { + other_piece = self.current_craftable_piece; + self player_drop_piece( self.current_craftable_piece ); + other_piece.damage = damage; + self do_player_general_vox( "general", "craft_swap" ); + } + + if ( isdefined( piecestub.onpickup ) ) + piecespawn [[ piecestub.onpickup ]]( self ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + { + if ( isdefined( piecestub.client_field_id ) ) + level setclientfield( piecestub.client_field_id, 1 ); + } + else if ( isdefined( piecestub.client_field_state ) ) + self setclientfieldtoplayer( "craftable", piecestub.client_field_state ); + + piecespawn piece_unspawn(); + piecespawn notify( "pickup" ); + + if ( isdefined( piecestub.is_shared ) && piecestub.is_shared ) + piecespawn.in_shared_inventory = 1; + else + { + self.current_craftable_piece = piecespawn; + self thread player_drop_piece_on_death(); + } + + self track_craftable_piece_pickedup( piecespawn ); } player_destroy_piece( piece ) { - if ( !isDefined( piece ) ) - { - piece = self.current_craftable_piece; - } - if ( isDefined( piece ) ) - { - self setclientfieldtoplayer( "craftable", 0 ); - } - self.current_craftable_piece = undefined; - self notify( "craftable_piece_released" ); + if ( !isdefined( piece ) ) + piece = self.current_craftable_piece; + + if ( isdefined( piece ) ) + self setclientfieldtoplayer( "craftable", 0 ); + + self.current_craftable_piece = undefined; + self notify( "craftable_piece_released" ); } claim_location( location ) { - if ( !isDefined( level.craftable_claimed_locations ) ) - { - level.craftable_claimed_locations = []; - } - if ( !isDefined( level.craftable_claimed_locations[ location ] ) ) - { - level.craftable_claimed_locations[ location ] = 1; - return 1; - } - return 0; + if ( !isdefined( level.craftable_claimed_locations ) ) + level.craftable_claimed_locations = []; + + if ( !isdefined( level.craftable_claimed_locations[location] ) ) + { + level.craftable_claimed_locations[location] = 1; + return true; + } + + return false; } is_point_in_craft_trigger( point ) { - candidate_list = []; - _a952 = level.zones; - _k952 = getFirstArrayKey( _a952 ); - while ( isDefined( _k952 ) ) - { - zone = _a952[ _k952 ]; - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - _k952 = getNextArrayKey( _a952, _k952 ); - } - valid_range = 128; - closest = maps/mp/zombies/_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); - index = 0; - while ( index < closest.size ) - { - if ( isDefined( closest[ index ].registered ) && closest[ index ].registered && isDefined( closest[ index ].piece ) ) - { - return 1; - } - index++; - } - return 0; + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + valid_range = 128; + closest = maps\mp\zombies\_zm_unitrigger::get_closest_unitriggers( point, candidate_list, valid_range ); + + for ( index = 0; index < closest.size; index++ ) + { + if ( isdefined( closest[index].registered ) && closest[index].registered && isdefined( closest[index].piece ) ) + return true; + } + + return false; } piece_allocate_spawn( piecestub ) { - self.current_spawn = 0; - self.managed_spawn = 1; - self.piecestub = piecestub; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - any_good = 0; - any_okay = 0; - totalweight = 0; - spawnweights = []; - i = 0; - while ( i < self.spawns.size ) - { - if ( isDefined( piecestub.piece_allocated[ i ] ) && piecestub.piece_allocated[ i ] ) - { - spawnweights[ i ] = 0; - } - else - { - if ( is_point_in_craft_trigger( self.spawns[ i ].origin ) ) - { - any_okay = 1; - spawnweights[ i ] = 0,01; - break; - } - else - { - any_good = 1; - spawnweights[ i ] = 1; - } - } - totalweight += spawnweights[ i ]; - i++; - } + self.current_spawn = 0; + self.managed_spawn = 1; + self.piecestub = piecestub; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + any_good = 0; + any_okay = 0; + totalweight = 0; + spawnweights = []; + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( isdefined( piecestub.piece_allocated[i] ) && piecestub.piece_allocated[i] ) + spawnweights[i] = 0; + else if ( is_point_in_craft_trigger( self.spawns[i].origin ) ) + { + any_okay = 1; + spawnweights[i] = 0.01; + } + else + { + any_good = 1; + spawnweights[i] = 1.0; + } + + totalweight += spawnweights[i]; + } /# - if ( !any_good ) - { - assert( any_okay, "There is nowhere to spawn this piece" ); - } + assert( any_good || any_okay, "There is nowhere to spawn this piece" ); #/ - if ( any_good ) - { - totalweight = float( int( totalweight ) ); - } - r = randomfloat( totalweight ); - i = 0; - while ( i < self.spawns.size ) - { - if ( !any_good || spawnweights[ i ] >= 1 ) - { - r -= spawnweights[ i ]; - if ( r < 0 ) - { - self.current_spawn = i; - piecestub.piece_allocated[ self.current_spawn ] = 1; - return; - } - } - i++; - } - self.current_spawn = randomint( self.spawns.size ); - piecestub.piece_allocated[ self.current_spawn ] = 1; - } + if ( any_good ) + totalweight = float( int( totalweight ) ); + + r = randomfloat( totalweight ); + + for ( i = 0; i < self.spawns.size; i++ ) + { + if ( !any_good || spawnweights[i] >= 1.0 ) + { + r -= spawnweights[i]; + + if ( r < 0 ) + { + self.current_spawn = i; + piecestub.piece_allocated[self.current_spawn] = 1; + return; + } + } + } + + self.current_spawn = randomint( self.spawns.size ); + piecestub.piece_allocated[self.current_spawn] = 1; + } } piece_deallocate_spawn() { - if ( isDefined( self.current_spawn ) ) - { - self.piecestub.piece_allocated[ self.current_spawn ] = 0; - self.current_spawn = undefined; - } - self.start_origin = undefined; + if ( isdefined( self.current_spawn ) ) + { + self.piecestub.piece_allocated[self.current_spawn] = 0; + self.current_spawn = undefined; + } + + self.start_origin = undefined; } piece_pick_random_spawn() { - self.current_spawn = 0; - while ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = randomint( self.spawns.size ); - while ( isDefined( self.spawns[ self.current_spawn ].claim_location ) && !claim_location( self.spawns[ self.current_spawn ].claim_location ) ) - { - arrayremoveindex( self.spawns, self.current_spawn ); - if ( self.spawns.size < 1 ) - { - self.current_spawn = 0; + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + { + for ( self.current_spawn = randomint( self.spawns.size ); isdefined( self.spawns[self.current_spawn].claim_location ) && !claim_location( self.spawns[self.current_spawn].claim_location ); self.current_spawn = randomint( self.spawns.size ) ) + { + arrayremoveindex( self.spawns, self.current_spawn ); + + if ( self.spawns.size < 1 ) + { + self.current_spawn = 0; /# - println( "ERROR: All craftable spawn locations claimed" ); + println( "ERROR: All craftable spawn locations claimed" ); #/ - return; - } - self.current_spawn = randomint( self.spawns.size ); - } - } + return; + } + } + } } piece_set_spawn( num ) { - self.current_spawn = 0; - if ( self.spawns.size >= 1 && self.spawns.size > 1 ) - { - self.current_spawn = int( min( num, self.spawns.size - 1 ) ); - } + self.current_spawn = 0; + + if ( self.spawns.size >= 1 && self.spawns.size > 1 ) + self.current_spawn = int( min( num, self.spawns.size - 1 ) ); } piece_spawn_in( piecestub ) { - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) ) - { - self piece_allocate_spawn( self.piecestub ); - } - } - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - spawndef = self.spawns[ self.current_spawn ]; - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorScale( ( 0, 0, 1 ), 12 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); - self.unitrigger.piece = self; - self.radius = piecestub.radius; - self.height = piecestub.height; - self.craftablename = piecestub.craftablename; - self.piecename = piecestub.piecename; - self.modelname = piecestub.modelname; - self.hud_icon = piecestub.hud_icon; - self.tag_name = piecestub.tag_name; - self.drop_offset = piecestub.drop_offset; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - self.client_field_state = piecestub.client_field_state; - self.is_shared = piecestub.is_shared; - self.model = spawn( "script_model", self.start_origin ); - if ( isDefined( self.start_angles ) ) - { - self.model.angles = self.start_angles; - } - self.model setmodel( piecestub.modelname ); - if ( isDefined( piecestub.onspawn ) ) - { - self [[ piecestub.onspawn ]](); - } - self.model ghostindemo(); - self.model.hud_icon = piecestub.hud_icon; - self.piecestub = piecestub; - self.unitrigger.origin_parent = self.model; + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) ) + self piece_allocate_spawn( self.piecestub ); + } + + if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + spawndef = self.spawns[self.current_spawn]; + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", spawndef.origin + vectorscale( ( 0, 0, 1 ), 12.0 ), spawndef.angles, 0, piecestub.radius, piecestub.height, 0 ); + self.unitrigger.piece = self; + self.radius = piecestub.radius; + self.height = piecestub.height; + self.craftablename = piecestub.craftablename; + self.piecename = piecestub.piecename; + self.modelname = piecestub.modelname; + self.hud_icon = piecestub.hud_icon; + self.tag_name = piecestub.tag_name; + self.drop_offset = piecestub.drop_offset; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + self.client_field_state = piecestub.client_field_state; + self.is_shared = piecestub.is_shared; + self.model = spawn( "script_model", self.start_origin ); + + if ( isdefined( self.start_angles ) ) + self.model.angles = self.start_angles; + + self.model setmodel( piecestub.modelname ); + + if ( isdefined( piecestub.onspawn ) ) + self [[ piecestub.onspawn ]](); + + self.model ghostindemo(); + self.model.hud_icon = piecestub.hud_icon; + self.piecestub = piecestub; + self.unitrigger.origin_parent = self.model; } piece_spawn_at( origin, angles, use_random_start ) { - if ( self.spawns.size < 1 ) - { - return; - } - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - if ( !isDefined( self.current_spawn ) && !isDefined( origin ) ) - { - self piece_allocate_spawn( self.piecestub ); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - } - } - else - { - if ( !isDefined( self.current_spawn ) ) - { - self.current_spawn = 0; - } - } - unitrigger_offset = vectorScale( ( 0, 0, 1 ), 12 ); - if ( isDefined( use_random_start ) && use_random_start ) - { - self piece_pick_random_spawn(); - spawndef = self.spawns[ self.current_spawn ]; - self.start_origin = spawndef.origin; - self.start_angles = spawndef.angles; - origin = spawndef.origin; - angles = spawndef.angles; - } - else - { - if ( !isDefined( origin ) ) - { - origin = self.start_origin; - } - else - { - origin += ( 0, 0, self.drop_offset ); - unitrigger_offset -= ( 0, 0, self.drop_offset ); - } - if ( !isDefined( angles ) ) - { - angles = self.start_angles; - } + if ( self.spawns.size < 1 ) + return; + + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + { + if ( !isdefined( self.current_spawn ) && !isdefined( origin ) ) + { + self piece_allocate_spawn( self.piecestub ); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + } + } + else if ( !isdefined( self.current_spawn ) ) + self.current_spawn = 0; + + unitrigger_offset = vectorscale( ( 0, 0, 1 ), 12.0 ); + + if ( isdefined( use_random_start ) && use_random_start ) + { + self piece_pick_random_spawn(); + spawndef = self.spawns[self.current_spawn]; + self.start_origin = spawndef.origin; + self.start_angles = spawndef.angles; + origin = spawndef.origin; + angles = spawndef.angles; + } + else + { + if ( !isdefined( origin ) ) + origin = self.start_origin; + else + { + origin += ( 0, 0, self.drop_offset ); + unitrigger_offset -= ( 0, 0, self.drop_offset ); + } + + if ( !isdefined( angles ) ) + angles = self.start_angles; /# - if ( !isDefined( level.drop_offset ) ) - { - level.drop_offset = 0; - } - origin += ( 0, 0, level.drop_offset ); - unitrigger_offset -= ( 0, 0, level.drop_offset ); + if ( !isdefined( level.drop_offset ) ) + level.drop_offset = 0; + + origin += ( 0, 0, level.drop_offset ); + unitrigger_offset -= ( 0, 0, level.drop_offset ); #/ - } - self.model = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - self.model.angles = angles; - } - self.model setmodel( self.modelname ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( [[ level.equipment_safe_to_drop ]]( self.model ) ) ) - { - origin = self.start_origin; - angles = self.start_angles; - self.model.origin = origin; - self.model.angles = angles; - } - } - if ( isDefined( self.onspawn ) ) - { - self [[ self.onspawn ]](); - } - if ( isDefined( self.model.canmove ) ) - { - self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, self.model.canmove ); - } - self.unitrigger.piece = self; - self.model.hud_icon = self.hud_icon; - self.unitrigger.origin_parent = self.model; + } + + self.model = spawn( "script_model", origin ); + + if ( isdefined( angles ) ) + self.model.angles = angles; + + self.model setmodel( self.modelname ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( ![[ level.equipment_safe_to_drop ]]( self.model ) ) + { + origin = self.start_origin; + angles = self.start_angles; + self.model.origin = origin; + self.model.angles = angles; + } + } + + if ( isdefined( self.onspawn ) ) + self [[ self.onspawn ]](); + + self.unitrigger = generate_piece_unitrigger( "trigger_radius_use", origin + unitrigger_offset, angles, 0, self.radius, self.height, isdefined( self.model.canmove ) && self.model.canmove ); + self.unitrigger.piece = self; + self.model.hud_icon = self.hud_icon; + self.unitrigger.origin_parent = self.model; } piece_unspawn() { - if ( isDefined( self.managed_spawn ) && self.managed_spawn ) - { - self piece_deallocate_spawn(); - } - if ( isDefined( self.model ) ) - { - self.model delete(); - } - self.model = undefined; - if ( isDefined( self.unitrigger ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger ); - } - self.unitrigger = undefined; + if ( isdefined( self.managed_spawn ) && self.managed_spawn ) + self piece_deallocate_spawn(); + + if ( isdefined( self.model ) ) + self.model delete(); + + self.model = undefined; + + if ( isdefined( self.unitrigger ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); + + self.unitrigger = undefined; } piece_hide() { - if ( isDefined( self.model ) ) - { - self.model ghost(); - } + if ( isdefined( self.model ) ) + self.model ghost(); } piece_show() { - if ( isDefined( self.model ) ) - { - self.model show(); - } + if ( isdefined( self.model ) ) + self.model show(); } generate_piece( piecestub ) { - piecespawn = spawnstruct(); - piecespawn.spawns = piecestub.spawns; - if ( isDefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) - { - piecespawn piece_allocate_spawn( piecestub ); - } - else - { - if ( isDefined( piecestub.use_spawn_num ) ) - { - piecespawn piece_set_spawn( piecestub.use_spawn_num ); - } - else - { - piecespawn piece_pick_random_spawn(); - } - } - piecespawn piece_spawn_in( piecestub ); - if ( piecespawn.spawns.size >= 1 ) - { - piecespawn.hud_icon = piecestub.hud_icon; - } - if ( isDefined( piecestub.onpickup ) ) - { - piecespawn.onpickup = piecestub.onpickup; - } - else - { - piecespawn.onpickup = ::onpickuputs; - } - if ( isDefined( piecestub.ondrop ) ) - { - piecespawn.ondrop = piecestub.ondrop; - } - else - { - piecespawn.ondrop = ::ondroputs; - } - if ( isDefined( piecestub.oncrafted ) ) - { - piecespawn.oncrafted = piecestub.oncrafted; - } - return piecespawn; + piecespawn = spawnstruct(); + piecespawn.spawns = piecestub.spawns; + + if ( isdefined( piecestub.managing_pieces ) && piecestub.managing_pieces ) + piecespawn piece_allocate_spawn( piecestub ); + else if ( isdefined( piecestub.use_spawn_num ) ) + piecespawn piece_set_spawn( piecestub.use_spawn_num ); + else + piecespawn piece_pick_random_spawn(); + + piecespawn piece_spawn_in( piecestub ); + + if ( piecespawn.spawns.size >= 1 ) + piecespawn.hud_icon = piecestub.hud_icon; + + if ( isdefined( piecestub.onpickup ) ) + piecespawn.onpickup = piecestub.onpickup; + else + piecespawn.onpickup = ::onpickuputs; + + if ( isdefined( piecestub.ondrop ) ) + piecespawn.ondrop = piecestub.ondrop; + else + piecespawn.ondrop = ::ondroputs; + + if ( isdefined( piecestub.oncrafted ) ) + piecespawn.oncrafted = piecestub.oncrafted; + + return piecespawn; } craftable_piece_unitriggers( craftable_name, origin ) { /# - assert( isDefined( craftable_name ) ); + assert( isdefined( craftable_name ) ); #/ /# - assert( isDefined( level.zombie_craftablestubs[ craftable_name ] ), "Called craftable_think() without including the craftable - " + craftable_name ); + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), "Called craftable_think() without including the craftable - " + craftable_name ); #/ - craftable = level.zombie_craftablestubs[ craftable_name ]; - if ( !isDefined( craftable.a_piecestubs ) ) - { - craftable.a_piecestubs = []; - } - flag_wait( "start_zombie_round_logic" ); - craftablespawn = spawnstruct(); - craftablespawn.craftable_name = craftable_name; - if ( !isDefined( craftablespawn.a_piecespawns ) ) - { - craftablespawn.a_piecespawns = []; - } - craftablepickups = []; - _a1314 = craftable.a_piecestubs; - _k1314 = getFirstArrayKey( _a1314 ); - while ( isDefined( _k1314 ) ) - { - piecestub = _a1314[ _k1314 ]; - if ( !isDefined( piecestub.generated_instances ) ) - { - piecestub.generated_instances = 0; - } - if ( isDefined( piecestub.piecespawn ) && isDefined( piecestub.can_reuse ) && piecestub.can_reuse ) - { - piece = piecestub.piecespawn; - } - else - { - if ( piecestub.generated_instances >= piecestub.max_instances ) - { - piece = piecestub.piecespawn; - break; - } - else - { - piece = generate_piece( piecestub ); - piecestub.piecespawn = piece; - piecestub.generated_instances++; - } - } - craftablespawn.a_piecespawns[ craftablespawn.a_piecespawns.size ] = piece; - _k1314 = getNextArrayKey( _a1314, _k1314 ); - } - craftablespawn.stub = self; - return craftablespawn; + craftable = level.zombie_craftablestubs[craftable_name]; + + if ( !isdefined( craftable.a_piecestubs ) ) + craftable.a_piecestubs = []; + + flag_wait( "start_zombie_round_logic" ); + craftablespawn = spawnstruct(); + craftablespawn.craftable_name = craftable_name; + + if ( !isdefined( craftablespawn.a_piecespawns ) ) + craftablespawn.a_piecespawns = []; + + craftablepickups = []; + + foreach ( piecestub in craftable.a_piecestubs ) + { + if ( !isdefined( piecestub.generated_instances ) ) + piecestub.generated_instances = 0; + + if ( isdefined( piecestub.piecespawn ) && ( isdefined( piecestub.can_reuse ) && piecestub.can_reuse ) ) + piece = piecestub.piecespawn; + else if ( piecestub.generated_instances >= piecestub.max_instances ) + piece = piecestub.piecespawn; + else + { + piece = generate_piece( piecestub ); + piecestub.piecespawn = piece; + piecestub.generated_instances++; + } + + craftablespawn.a_piecespawns[craftablespawn.a_piecespawns.size] = piece; + } + + craftablespawn.stub = self; + return craftablespawn; } hide_craftable_table_model( trigger_targetname ) { - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - if ( isDefined( trig.target ) ) - { - model = getent( trig.target, "targetname" ); - if ( isDefined( model ) ) - { - model ghost(); - model notsolid(); - } - } + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + if ( isdefined( trig.target ) ) + { + model = getent( trig.target, "targetname" ); + + if ( isdefined( model ) ) + { + model ghost(); + model notsolid(); + } + } } setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + return setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - triggers = getentarray( trigger_targetname, "targetname" ); - stubs = []; - _a1376 = triggers; - _k1376 = getFirstArrayKey( _a1376 ); - while ( isDefined( _k1376 ) ) - { - trig = _a1376[ _k1376 ]; - stubs[ stubs.size ] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); - _k1376 = getNextArrayKey( _a1376, _k1376 ); - } - return stubs; + triggers = getentarray( trigger_targetname, "targetname" ); + stubs = []; + + foreach ( trig in triggers ) + stubs[stubs.size] = setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + + return stubs; } setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ]; - angles = trig.script_angles; - if ( !isDefined( angles ) ) - { - angles = ( 0, 0, 1 ); - } - unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 ); - unitrigger_stub.angles = trig.angles; - if ( isDefined( trig.script_angles ) ) - { - unitrigger_stub.angles = trig.script_angles; - } - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 32; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 100; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_craftablestubs[ equipname ].str_to_craft ) ) - { - unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].str_to_craft; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) - { - unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; - } - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; - if ( isDefined( unitrigger_stub.target ) ) - { - unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); - if ( isDefined( unitrigger_stub.model ) ) - { - if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) ) - { - unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); - } - unitrigger_stub.model ghost(); - unitrigger_stub.model notsolid(); - } - } - if ( unitrigger_stub.equipname == "open_table" ) - { - unitrigger_stub.a_uts_open_craftables_available = []; - unitrigger_stub.n_open_craftable_choice = -1; - unitrigger_stub.b_open_craftable_checking_input = 0; - } - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + angles = trig.script_angles; + + if ( !isdefined( angles ) ) + angles = ( 0, 0, 0 ); + + unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6; + unitrigger_stub.angles = trig.angles; + + if ( isdefined( trig.script_angles ) ) + unitrigger_stub.angles = trig.script_angles; + + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 100; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + + if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) ) + unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt; + + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade; + + if ( isdefined( unitrigger_stub.target ) ) + { + unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" ); + + if ( isdefined( unitrigger_stub.model ) ) + { + if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) ) + unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade ); + + unitrigger_stub.model ghost(); + unitrigger_stub.model notsolid(); + } + } + + if ( unitrigger_stub.equipname == "open_table" ) + { + unitrigger_stub.a_uts_open_craftables_available = []; + unitrigger_stub.n_open_craftable_choice = -1; + unitrigger_stub.b_open_craftable_checking_input = 0; + } + + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; } setup_craftable_pieces() { - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ self.name ]; - unitrigger_stub.equipname = self.name; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[self.name]; + unitrigger_stub.equipname = self.name; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( self.name, unitrigger_stub.origin ); + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; } craftable_has_piece( piece ) { - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - return 1; - } - i++; - } - return 0; + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return true; + } + + return false; } get_actual_uts_craftable() { - if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) - { - return self.stub.a_uts_open_craftables_available[ self.n_open_craftable_choice ]; - } - else - { - return self.stub; - } + if ( self.craftable_name == "open_table" && self.n_open_craftable_choice != -1 ) + return self.stub.a_uts_open_craftables_available[self.n_open_craftable_choice]; + else + return self.stub; } get_actual_craftablespawn() { - if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isDefined( self.stub.a_uts_open_craftables_available[ self.stub.n_open_craftable_choice ].craftablespawn ) ) - { - return self.stub.a_uts_open_craftables_available[ self.stub.n_open_craftable_choice ].craftablespawn; - } - else - { - return self; - } + if ( self.craftable_name == "open_table" && self.stub.n_open_craftable_choice != -1 && isdefined( self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn ) ) + return self.stub.a_uts_open_craftables_available[self.stub.n_open_craftable_choice].craftablespawn; + else + return self; } craftable_can_use_shared_piece() { - uts_craftable = self.stub; - if ( isDefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isDefined( uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ] ) ) - { - return 1; - } - if ( isDefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) - { - _a1595 = self.a_piecespawns; - _k1595 = getFirstArrayKey( _a1595 ); - while ( isDefined( _k1595 ) ) - { - piece = _a1595[ _k1595 ]; - if ( isDefined( piece.in_shared_inventory ) && !piece.in_shared_inventory ) - { - return 0; - } - _k1595 = getNextArrayKey( _a1595, _k1595 ); - } - return 1; - } - else - { - _a1608 = self.a_piecespawns; - _k1608 = getFirstArrayKey( _a1608 ); - while ( isDefined( _k1608 ) ) - { - piece = _a1608[ _k1608 ]; - if ( isDefined( piece.crafted ) && !piece.crafted && isDefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) - { - return 1; - } - _k1608 = getNextArrayKey( _a1608, _k1608 ); - } - } - return 0; + uts_craftable = self.stub; + + if ( isdefined( uts_craftable.n_open_craftable_choice ) && uts_craftable.n_open_craftable_choice != -1 && isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return true; + + if ( isdefined( uts_craftable.craftablestub.need_all_pieces ) && uts_craftable.craftablestub.need_all_pieces ) + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return false; + } + + return true; + } + else + { + foreach ( piece in self.a_piecespawns ) + { + if ( !( isdefined( piece.crafted ) && piece.crafted ) && ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) ) + return true; + } + } + + return false; } craftable_set_piece_crafted( piecespawn_check, player ) { - craftablespawn_check = get_actual_craftablespawn(); - _a1625 = craftablespawn_check.a_piecespawns; - _k1625 = getFirstArrayKey( _a1625 ); - while ( isDefined( _k1625 ) ) - { - piecespawn = _a1625[ _k1625 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - piecespawn.crafted = 1; - if ( isDefined( piecespawn.oncrafted ) ) - { - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - } - } - } - else - { - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafted = 1; - if ( isDefined( piecespawn.oncrafted ) ) - { - piecespawn thread [[ piecespawn.oncrafted ]]( player ); - } - piecespawn.in_shared_inventory = 0; - } - } - _k1625 = getNextArrayKey( _a1625, _k1625 ); - } + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + continue; + } + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + { + piecespawn.crafted = 1; + + if ( isdefined( piecespawn.oncrafted ) ) + piecespawn thread [[ piecespawn.oncrafted ]]( player ); + + piecespawn.in_shared_inventory = 0; + } + } } craftable_set_piece_crafting( piecespawn_check ) { - craftablespawn_check = get_actual_craftablespawn(); - _a1664 = craftablespawn_check.a_piecespawns; - _k1664 = getFirstArrayKey( _a1664 ); - while ( isDefined( _k1664 ) ) - { - piecespawn = _a1664[ _k1664 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - piecespawn.crafting = 1; - } - } - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafting = 1; - } - _k1664 = getNextArrayKey( _a1664, _k1664 ); - } + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + piecespawn.crafting = 1; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 1; + } } craftable_clear_piece_crafting( piecespawn_check ) { - if ( isDefined( piecespawn_check ) ) - { - piecespawn_check.crafting = 0; - } - craftablespawn_check = get_actual_craftablespawn(); - _a1693 = craftablespawn_check.a_piecespawns; - _k1693 = getFirstArrayKey( _a1693 ); - while ( isDefined( _k1693 ) ) - { - piecespawn = _a1693[ _k1693 ]; - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) - { - piecespawn.crafting = 0; - } - _k1693 = getNextArrayKey( _a1693, _k1693 ); - } + if ( isdefined( piecespawn_check ) ) + piecespawn_check.crafting = 0; + + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) ) + piecespawn.crafting = 0; + } } craftable_is_piece_crafted( piece ) { - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) ) - { - return self.a_piecespawns[ i ].crafted; - } - } - i++; - } - return 0; + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted; + } + + return 0; } craftable_is_piece_crafting( piecespawn_check ) { - craftablespawn_check = get_actual_craftablespawn(); - _a1720 = craftablespawn_check.a_piecespawns; - _k1720 = getFirstArrayKey( _a1720 ); - while ( isDefined( _k1720 ) ) - { - piecespawn = _a1720[ _k1720 ]; - if ( isDefined( piecespawn_check ) ) - { - if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) - { - return piecespawn.crafting; - } - } - if ( isDefined( piecespawn.is_shared ) && piecespawn.is_shared && isDefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory && isDefined( piecespawn.crafting ) && piecespawn.crafting ) - { - return 1; - } - _k1720 = getNextArrayKey( _a1720, _k1720 ); - } - return 0; + craftablespawn_check = get_actual_craftablespawn(); + + foreach ( piecespawn in craftablespawn_check.a_piecespawns ) + { + if ( isdefined( piecespawn_check ) ) + { + if ( piecespawn.piecename == piecespawn_check.piecename && piecespawn.craftablename == piecespawn_check.craftablename ) + return piecespawn.crafting; + } + + if ( isdefined( piecespawn.is_shared ) && piecespawn.is_shared && ( isdefined( piecespawn.in_shared_inventory ) && piecespawn.in_shared_inventory ) && ( isdefined( piecespawn.crafting ) && piecespawn.crafting ) ) + return 1; + } + + return 0; } craftable_is_piece_crafted_or_crafting( piece ) { - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( self.a_piecespawns[ i ].piecename == piece.piecename && self.a_piecespawns[ i ].craftablename == piece.craftablename ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) && !self.a_piecespawns[ i ].crafted ) - { - if ( isDefined( self.a_piecespawns[ i ].crafting ) ) - { - return self.a_piecespawns[ i ].crafting; - } - } - } - i++; - } - return 0; + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( self.a_piecespawns[i].piecename == piece.piecename && self.a_piecespawns[i].craftablename == piece.craftablename ) + return isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted || isdefined( self.a_piecespawns[i].crafting ) && self.a_piecespawns[i].crafting; + } + + return 0; } craftable_all_crafted() { - i = 0; - while ( i < self.a_piecespawns.size ) - { - if ( isDefined( self.a_piecespawns[ i ].crafted ) && !self.a_piecespawns[ i ].crafted ) - { - return 0; - } - i++; - } - return 1; + for ( i = 0; i < self.a_piecespawns.size; i++ ) + { + if ( !( isdefined( self.a_piecespawns[i].crafted ) && self.a_piecespawns[i].crafted ) ) + return false; + } + + return true; } waittill_crafted( craftable_name ) { - level waittill( craftable_name + "_crafted", player ); - return player; + level waittill( craftable_name + "_crafted", player ); + + return player; } player_can_craft( craftablespawn, continuing ) { - if ( !isDefined( craftablespawn ) ) - { - return 0; - } - if ( !craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isDefined( self.current_craftable_piece ) ) - { - return 0; - } - if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) - { - return 0; - } - if ( isDefined( continuing ) && continuing ) - { - if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) - { - return 0; - } - } - else - { - if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) - { - return 0; - } - } - } - if ( isDefined( craftablespawn.stub ) && isDefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isDefined( craftablespawn.stub.playertrigger[ 0 ] ) && isDefined( craftablespawn.stub.playertrigger[ 0 ].stub ) && !( craftablespawn.stub.playertrigger[ 0 ].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[ self getentitynumber() ] ) ) ) - { - return 0; - } - return 1; + if ( !isdefined( craftablespawn ) ) + return false; + + if ( !craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( self.current_craftable_piece ) ) + return false; + + if ( !craftablespawn craftable_has_piece( self.current_craftable_piece ) ) + return false; + + if ( isdefined( continuing ) && continuing ) + { + if ( craftablespawn craftable_is_piece_crafted( self.current_craftable_piece ) ) + return false; + } + else if ( craftablespawn craftable_is_piece_crafted_or_crafting( self.current_craftable_piece ) ) + return false; + } + + if ( isdefined( craftablespawn.stub ) && isdefined( craftablespawn.stub.custom_craftablestub_update_prompt ) && isdefined( craftablespawn.stub.playertrigger[0] ) && isdefined( craftablespawn.stub.playertrigger[0].stub ) && !craftablespawn.stub.playertrigger[0].stub [[ craftablespawn.stub.custom_craftablestub_update_prompt ]]( self, 1, craftablespawn.stub.playertrigger[self getentitynumber()] ) ) + return false; + + return true; } craftable_transfer_data() { - uts_craftable = self.stub; - if ( uts_craftable.n_open_craftable_choice == -1 || !isDefined( uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ] ) ) - { - return; - } - uts_source = uts_craftable.a_uts_open_craftables_available[ uts_craftable.n_open_craftable_choice ]; - uts_target = uts_craftable; - uts_target.craftablestub = uts_source.craftablestub; - uts_target.craftablespawn = uts_source.craftablespawn; - uts_target.crafted = uts_source.crafted; - uts_target.cursor_hint = uts_source.cursor_hint; - uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; - uts_target.equipname = uts_source.equipname; - uts_target.hint_string = uts_source.hint_string; - uts_target.persistent = uts_source.persistent; - uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; - uts_target.trigger_func = uts_source.trigger_func; - uts_target.trigger_hintstring = uts_source.trigger_hintstring; - uts_target.weaponname = uts_source.weaponname; - uts_target.craftablespawn.stub = uts_target; - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_source ); - uts_source craftablestub_remove(); - return uts_target; + uts_craftable = self.stub; + + if ( uts_craftable.n_open_craftable_choice == -1 || !isdefined( uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice] ) ) + return; + + uts_source = uts_craftable.a_uts_open_craftables_available[uts_craftable.n_open_craftable_choice]; + uts_target = uts_craftable; + uts_target.craftablestub = uts_source.craftablestub; + uts_target.craftablespawn = uts_source.craftablespawn; + uts_target.crafted = uts_source.crafted; + uts_target.cursor_hint = uts_source.cursor_hint; + uts_target.custom_craftable_update_prompt = uts_source.custom_craftable_update_prompt; + uts_target.equipname = uts_source.equipname; + uts_target.hint_string = uts_source.hint_string; + uts_target.persistent = uts_source.persistent; + uts_target.prompt_and_visibility_func = uts_source.prompt_and_visibility_func; + uts_target.trigger_func = uts_source.trigger_func; + uts_target.trigger_hintstring = uts_source.trigger_hintstring; + uts_target.weaponname = uts_source.weaponname; + uts_target.craftablespawn.stub = uts_target; + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_source ); + uts_source craftablestub_remove(); + return uts_target; } player_craft( craftablespawn ) { - craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); - if ( isDefined( self.current_craftable_piece ) && isDefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) - { - player_destroy_piece( self.current_craftable_piece ); - } - if ( isDefined( craftablespawn.stub.n_open_craftable_choice ) ) - { - uts_craftable = craftablespawn craftable_transfer_data(); - craftablespawn = uts_craftable.craftablespawn; - update_open_table_status(); - } - else - { - uts_craftable = craftablespawn.stub; - } - if ( !isDefined( uts_craftable.model ) && isDefined( uts_craftable.craftablestub.str_model ) ) - { - craftablestub = uts_craftable.craftablestub; - s_model = getstruct( uts_craftable.target, "targetname" ); - if ( isDefined( s_model ) ) - { - m_spawn = spawn( "script_model", s_model.origin ); - if ( isDefined( craftablestub.v_origin_offset ) ) - { - m_spawn.origin += craftablestub.v_origin_offset; - } - m_spawn.angles = s_model.angles; - if ( isDefined( craftablestub.v_angle_offset ) ) - { - m_spawn.angles += craftablestub.v_angle_offset; - } - m_spawn setmodel( craftablestub.str_model ); - uts_craftable.model = m_spawn; - } - } - while ( isDefined( uts_craftable.model ) ) - { - i = 0; - while ( i < craftablespawn.a_piecespawns.size ) - { - if ( isDefined( craftablespawn.a_piecespawns[ i ].tag_name ) ) - { - uts_craftable.model notsolid(); - if ( isDefined( craftablespawn.a_piecespawns[ i ].crafted ) && !craftablespawn.a_piecespawns[ i ].crafted ) - { - uts_craftable.model hidepart( craftablespawn.a_piecespawns[ i ].tag_name ); - i++; - continue; - } - else - { - uts_craftable.model show(); - uts_craftable.model showpart( craftablespawn.a_piecespawns[ i ].tag_name ); - } - } - i++; - } - } - self track_craftable_pieces_crafted( craftablespawn ); - if ( craftablespawn craftable_all_crafted() ) - { - self player_finish_craftable( craftablespawn ); - self track_craftables_crafted( craftablespawn ); - if ( isDefined( level.craftable_crafted_custom_func ) ) - { - self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); - } - self playsound( "zmb_buildable_complete" ); - } - else - { - self playsound( "zmb_buildable_piece_add" ); + craftablespawn craftable_set_piece_crafted( self.current_craftable_piece, self ); + + if ( isdefined( self.current_craftable_piece ) && ( isdefined( self.current_craftable_piece.crafted ) && self.current_craftable_piece.crafted ) ) + player_destroy_piece( self.current_craftable_piece ); + + if ( isdefined( craftablespawn.stub.n_open_craftable_choice ) ) + { + uts_craftable = craftablespawn craftable_transfer_data(); + craftablespawn = uts_craftable.craftablespawn; + update_open_table_status(); + } + else + uts_craftable = craftablespawn.stub; + + if ( !isdefined( uts_craftable.model ) && isdefined( uts_craftable.craftablestub.str_model ) ) + { + craftablestub = uts_craftable.craftablestub; + s_model = getstruct( uts_craftable.target, "targetname" ); + + if ( isdefined( s_model ) ) + { + m_spawn = spawn( "script_model", s_model.origin ); + + if ( isdefined( craftablestub.v_origin_offset ) ) + m_spawn.origin += craftablestub.v_origin_offset; + + m_spawn.angles = s_model.angles; + + if ( isdefined( craftablestub.v_angle_offset ) ) + m_spawn.angles += craftablestub.v_angle_offset; + + m_spawn setmodel( craftablestub.str_model ); + uts_craftable.model = m_spawn; + } + } + + if ( isdefined( uts_craftable.model ) ) + { + for ( i = 0; i < craftablespawn.a_piecespawns.size; i++ ) + { + if ( isdefined( craftablespawn.a_piecespawns[i].tag_name ) ) + { + uts_craftable.model notsolid(); + + if ( !( isdefined( craftablespawn.a_piecespawns[i].crafted ) && craftablespawn.a_piecespawns[i].crafted ) ) + { + uts_craftable.model hidepart( craftablespawn.a_piecespawns[i].tag_name ); + continue; + } + + uts_craftable.model show(); + uts_craftable.model showpart( craftablespawn.a_piecespawns[i].tag_name ); + } + } + } + + self track_craftable_pieces_crafted( craftablespawn ); + + if ( craftablespawn craftable_all_crafted() ) + { + self player_finish_craftable( craftablespawn ); + self track_craftables_crafted( craftablespawn ); + + if ( isdefined( level.craftable_crafted_custom_func ) ) + self thread [[ level.craftable_crafted_custom_func ]]( craftablespawn ); + + self playsound( "zmb_buildable_complete" ); + } + else + { + self playsound( "zmb_buildable_piece_add" ); /# - assert( isDefined( level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting ), "Missing builing hint" ); + assert( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ), "Missing builing hint" ); #/ - if ( isDefined( level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting ) ) - { - return level.zombie_craftablestubs[ craftablespawn.craftable_name ].str_crafting; - } - } - return ""; + if ( isdefined( level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting ) ) + return level.zombie_craftablestubs[craftablespawn.craftable_name].str_crafting; + } + + return ""; } update_open_table_status() { - b_open_craftables_remaining = 0; - _a1963 = level.a_uts_craftables; - _k1963 = getFirstArrayKey( _a1963 ); - while ( isDefined( _k1963 ) ) - { - uts_craftable = _a1963[ _k1963 ]; - if ( isDefined( level.zombie_include_craftables[ uts_craftable.equipname ] ) && isDefined( level.zombie_include_craftables[ uts_craftable.equipname ].is_open_table ) && level.zombie_include_craftables[ uts_craftable.equipname ].is_open_table ) - { - b_piece_crafted = 0; - _a1970 = uts_craftable.craftablespawn.a_piecespawns; - _k1970 = getFirstArrayKey( _a1970 ); - while ( isDefined( _k1970 ) ) - { - piecespawn = _a1970[ _k1970 ]; - if ( isDefined( piecespawn.crafted ) && piecespawn.crafted ) - { - b_piece_crafted = 1; - break; - } - else - { - _k1970 = getNextArrayKey( _a1970, _k1970 ); - } - } - if ( !b_piece_crafted ) - { - b_open_craftables_remaining = 1; - } - } - _k1963 = getNextArrayKey( _a1963, _k1963 ); - } - while ( !b_open_craftables_remaining ) - { - _a1989 = level.a_uts_craftables; - _k1989 = getFirstArrayKey( _a1989 ); - while ( isDefined( _k1989 ) ) - { - uts_craftable = _a1989[ _k1989 ]; - if ( uts_craftable.equipname == "open_table" ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_craftable ); - } - _k1989 = getNextArrayKey( _a1989, _k1989 ); - } - } + b_open_craftables_remaining = 0; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( level.zombie_include_craftables[uts_craftable.equipname] ) && ( isdefined( level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) && level.zombie_include_craftables[uts_craftable.equipname].is_open_table ) ) + { + b_piece_crafted = 0; + + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( isdefined( piecespawn.crafted ) && piecespawn.crafted ) + { + b_piece_crafted = 1; + break; + } + } + + if ( !b_piece_crafted ) + b_open_craftables_remaining = 1; + } + } + + if ( !b_open_craftables_remaining ) + { + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.equipname == "open_table" ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + } + } } player_finish_craftable( craftablespawn ) { - craftablespawn.crafted = 1; - craftablespawn.stub.crafted = 1; - craftablespawn notify( "crafted" ); - level.craftables_crafted[ craftablespawn.craftable_name ] = 1; - level notify( craftablespawn.craftable_name + "_crafted" ); + craftablespawn.crafted = 1; + craftablespawn.stub.crafted = 1; + craftablespawn notify( "crafted", self ); + level.craftables_crafted[craftablespawn.craftable_name] = 1; + level notify( craftablespawn.craftable_name + "_crafted", self ); } complete_craftable( str_craftable_name ) { - _a2014 = level.a_uts_craftables; - _k2014 = getFirstArrayKey( _a2014 ); - while ( isDefined( _k2014 ) ) - { - uts_craftable = _a2014[ _k2014 ]; - if ( uts_craftable.craftablestub.name == str_craftable_name ) - { - player = getplayers()[ 0 ]; - player player_finish_craftable( uts_craftable.craftablespawn ); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( uts_craftable ); - if ( isDefined( uts_craftable.craftablestub.onfullycrafted ) ) - { - uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); - } - return; - } - _k2014 = getNextArrayKey( _a2014, _k2014 ); - } + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable_name ) + { + player = getplayers()[0]; + player player_finish_craftable( uts_craftable.craftablespawn ); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( uts_craftable ); + + if ( isdefined( uts_craftable.craftablestub.onfullycrafted ) ) + uts_craftable [[ uts_craftable.craftablestub.onfullycrafted ]](); + + return; + } + } } craftablestub_remove() { - arrayremovevalue( level.a_uts_craftables, self ); + arrayremovevalue( level.a_uts_craftables, self ); } craftabletrigger_update_prompt( player ) { - can_use = self.stub craftablestub_update_prompt( player ); - self sethintstring( self.stub.hint_string ); - return can_use; + can_use = self.stub craftablestub_update_prompt( player ); + self sethintstring( self.stub.hint_string ); + return can_use; } craftablestub_update_prompt( player, unitrigger ) { - if ( !self anystub_update_prompt( player ) ) - { - return 0; - } - if ( isDefined( self.is_locked ) && self.is_locked ) - { - return 1; - } - can_use = 1; - if ( isDefined( self.custom_craftablestub_update_prompt ) && !( self [[ self.custom_craftablestub_update_prompt ]]( player ) ) ) - { - return 0; - } - if ( isDefined( self.crafted ) && !self.crafted ) - { - if ( !self.craftablespawn craftable_can_use_shared_piece() ) - { - if ( !isDefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - return 0; - } - else - { - if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; - return 0; - } - } - } + if ( !self anystub_update_prompt( player ) ) + return false; + + if ( isdefined( self.is_locked ) && self.is_locked ) + return true; + + can_use = 1; + + if ( isdefined( self.custom_craftablestub_update_prompt ) && !self [[ self.custom_craftablestub_update_prompt ]]( player ) ) + return false; + + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + if ( !self.craftablespawn craftable_can_use_shared_piece() ) + { + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + return false; + } + else if ( !self.craftablespawn craftable_has_piece( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; + return false; + } + } /# - assert( isDefined( level.zombie_craftablestubs[ self.equipname ].str_to_craft ), "Missing craftable hint" ); + assert( isdefined( level.zombie_craftablestubs[self.equipname].str_to_craft ), "Missing craftable hint" ); #/ - self.hint_string = level.zombie_craftablestubs[ self.equipname ].str_to_craft; - } - else - { - if ( self.persistent == 1 ) - { - if ( maps/mp/zombies/_zm_equipment::is_limited_equipment( self.weaponname ) && maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; - return 0; - } - if ( player has_player_equipment( self.weaponname ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; - return 0; - } - self.hint_string = self.trigger_hintstring; - } - else if ( self.persistent == 2 ) - { - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - return 0; - } - else - { - if ( isDefined( self.str_taken ) && self.str_taken ) - { - self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - return 0; - } - } - self.hint_string = self.trigger_hintstring; - } - else - { - self.hint_string = ""; - return 0; - } - } - return 1; + self.hint_string = level.zombie_craftablestubs[self.equipname].str_to_craft; + } + else if ( self.persistent == 1 ) + { + if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( self.weaponname ) && maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE"; + return false; + } + + if ( player has_player_equipment( self.weaponname ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else if ( self.persistent == 2 ) + { + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + return false; + } + else if ( isdefined( self.str_taken ) && self.str_taken ) + { + self.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + return false; + } + + self.hint_string = self.trigger_hintstring; + } + else + { + self.hint_string = ""; + return false; + } + + return true; } choose_open_craftable( player ) { - self endon( "kill_choose_open_craftable" ); - n_playernum = player getentitynumber(); - self.b_open_craftable_checking_input = 1; - b_got_input = 1; - hinttexthudelem = newclienthudelem( player ); - hinttexthudelem.alignx = "center"; - hinttexthudelem.aligny = "middle"; - hinttexthudelem.horzalign = "center"; - hinttexthudelem.vertalign = "bottom"; - hinttexthudelem.y = -100; - if ( player issplitscreen() ) - { - hinttexthudelem.y = -50; - } - hinttexthudelem.foreground = 1; - hinttexthudelem.font = "default"; - hinttexthudelem.fontscale = 1; - hinttexthudelem.alpha = 1; - hinttexthudelem.color = ( 0, 0, 1 ); - hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); - if ( !isDefined( self.opencraftablehudelem ) ) - { - self.opencraftablehudelem = []; - } - self.opencraftablehudelem[ n_playernum ] = hinttexthudelem; - while ( isDefined( self.playertrigger[ n_playernum ] ) && !self.crafted ) - { - if ( player actionslotonebuttonpressed() ) - { - self.n_open_craftable_choice++; - b_got_input = 1; - } - else - { - if ( player actionslottwobuttonpressed() ) - { - self.n_open_craftable_choice--; + self endon( "kill_choose_open_craftable" ); + n_playernum = player getentitynumber(); + self.b_open_craftable_checking_input = 1; + b_got_input = 1; + hinttexthudelem = newclienthudelem( player ); + hinttexthudelem.alignx = "center"; + hinttexthudelem.aligny = "middle"; + hinttexthudelem.horzalign = "center"; + hinttexthudelem.vertalign = "bottom"; + hinttexthudelem.y = -100; - b_got_input = 1; - } - } - if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) - { - self.n_open_craftable_choice = 0; - } - else - { - if ( self.n_open_craftable_choice < 0 ) - { - self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; - } - } - if ( b_got_input ) - { - self.equipname = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].equipname; - self.hint_string = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].hint_string; - self.playertrigger[ n_playernum ] sethintstring( self.hint_string ); - b_got_input = 0; - } - if ( player is_player_looking_at( self.playertrigger[ n_playernum ].origin, 0,76 ) ) - { - self.opencraftablehudelem[ n_playernum ].alpha = 1; - } - else - { - self.opencraftablehudelem[ n_playernum ].alpha = 0; - } - wait 0,05; - } - self.b_open_craftable_checking_input = 0; - self.opencraftablehudelem[ n_playernum ] destroy(); + if ( player issplitscreen() ) + hinttexthudelem.y = -50; + + hinttexthudelem.foreground = 1; + hinttexthudelem.font = "default"; + hinttexthudelem.fontscale = 1.0; + hinttexthudelem.alpha = 1; + hinttexthudelem.color = ( 1, 1, 1 ); + hinttexthudelem settext( &"ZM_CRAFTABLES_CHANGE_BUILD" ); + + if ( !isdefined( self.opencraftablehudelem ) ) + self.opencraftablehudelem = []; + + self.opencraftablehudelem[n_playernum] = hinttexthudelem; + + while ( isdefined( self.playertrigger[n_playernum] ) && !self.crafted ) + { + if ( player actionslotonebuttonpressed() ) + { + self.n_open_craftable_choice++; + b_got_input = 1; + } + else if ( player actionslottwobuttonpressed() ) + { + self.n_open_craftable_choice--; + b_got_input = 1; + } + + if ( self.n_open_craftable_choice >= self.a_uts_open_craftables_available.size ) + self.n_open_craftable_choice = 0; + else if ( self.n_open_craftable_choice < 0 ) + self.n_open_craftable_choice = self.a_uts_open_craftables_available.size - 1; + + if ( b_got_input ) + { + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string; + self.playertrigger[n_playernum] sethintstring( self.hint_string ); + b_got_input = 0; + } + + if ( player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) ) + self.opencraftablehudelem[n_playernum].alpha = 1; + else + self.opencraftablehudelem[n_playernum].alpha = 0; + + wait 0.05; + } + + self.b_open_craftable_checking_input = 0; + self.opencraftablehudelem[n_playernum] destroy(); + self.opencraftablehudelem[n_playernum] = undefined; } open_craftablestub_update_prompt( player ) { - if ( isDefined( self.crafted ) && !self.crafted ) - { - self.a_uts_open_craftables_available = []; - _a2235 = level.a_uts_craftables; - _k2235 = getFirstArrayKey( _a2235 ); - while ( isDefined( _k2235 ) ) - { - uts_craftable = _a2235[ _k2235 ]; - if ( isDefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && isDefined( uts_craftable.crafted ) && !uts_craftable.crafted && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) - { - self.a_uts_open_craftables_available[ self.a_uts_open_craftables_available.size ] = uts_craftable; - } - _k2235 = getNextArrayKey( _a2235, _k2235 ); - } - if ( self.a_uts_open_craftables_available.size < 2 ) - { - self notify( "kill_choose_open_craftable" ); - self.b_open_craftable_checking_input = 0; - n_entitynum = player getentitynumber(); - if ( isDefined( self.opencraftablehudelem ) && isDefined( self.opencraftablehudelem[ n_entitynum ] ) ) - { - self.opencraftablehudelem[ n_entitynum ] destroy(); - } - } - switch( self.a_uts_open_craftables_available.size ) - { - case 0: - if ( !isDefined( player.current_craftable_piece ) ) - { - self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; - self.n_open_craftable_choice = -1; - return 0; - } - case 1: - self.n_open_craftable_choice = 0; - self.equipname = self.a_uts_open_craftables_available[ self.n_open_craftable_choice ].equipname; - return 1; - default: - if ( !self.b_open_craftable_checking_input ) - { - thread choose_open_craftable( player ); - } - return 1; - } - } - else - { - if ( self.persistent == 1 ) - { - return 1; - } - } - return 0; - } + if ( !( isdefined( self.crafted ) && self.crafted ) ) + { + self.a_uts_open_craftables_available = []; + + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( isdefined( uts_craftable.craftablestub.is_open_table ) && uts_craftable.craftablestub.is_open_table && !( isdefined( uts_craftable.crafted ) && uts_craftable.crafted ) && uts_craftable.craftablespawn.craftable_name != "open_table" && uts_craftable.craftablespawn craftable_can_use_shared_piece() ) + self.a_uts_open_craftables_available[self.a_uts_open_craftables_available.size] = uts_craftable; + } + + if ( self.a_uts_open_craftables_available.size < 2 ) + { + self notify( "kill_choose_open_craftable" ); + self.b_open_craftable_checking_input = 0; + n_entitynum = player getentitynumber(); + + if ( isdefined( self.opencraftablehudelem ) && isdefined( self.opencraftablehudelem[n_entitynum] ) ) + { + self.opencraftablehudelem[n_entitynum] destroy(); + self.opencraftablehudelem[n_entitynum] = undefined; + } + } + + switch ( self.a_uts_open_craftables_available.size ) + { + case "0": + if ( !isdefined( player.current_craftable_piece ) ) + { + self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; + self.n_open_craftable_choice = -1; + return false; + } + + break; + case "1": + self.n_open_craftable_choice = 0; + self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname; + return true; + default: + if ( !self.b_open_craftable_checking_input ) + thread choose_open_craftable( player ); + + return true; + } + } + else if ( self.persistent == 1 || self.persistent == 2 && !( isdefined( self.bought ) && self.bought ) ) + return true; + + return false; } player_continue_crafting( craftablespawn ) { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( !self player_can_craft( craftablespawn, 1 ) ) - { - return 0; - } - if ( isDefined( self.screecher ) ) - { - return 0; - } - if ( !self usebuttonpressed() ) - { - return 0; - } - if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) - { - return 0; - } - trigger = craftablespawn.stub maps/mp/zombies/_zm_unitrigger::unitrigger_trigger( self ); - if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) - { - torigin = craftablespawn.stub unitrigger_origin(); - porigin = self geteye(); - radius_sq = 2,25 * craftablespawn.stub.radius * craftablespawn.stub.radius; - if ( distance2dsquared( torigin, porigin ) > radius_sq ) - { - return 0; - } - } - else - { - if ( !isDefined( trigger ) || !trigger istouching( self ) ) - { - return 0; - } - } - if ( isDefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0,76 ) ) - { - return 0; - } - return 1; + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) + return false; + + if ( !self player_can_craft( craftablespawn, 1 ) ) + return false; + + if ( isdefined( self.screecher ) ) + return false; + + if ( !self usebuttonpressed() ) + return false; + + if ( !craftablespawn craftable_is_piece_crafting( self.current_craftable_piece ) ) + return false; + + trigger = craftablespawn.stub maps\mp\zombies\_zm_unitrigger::unitrigger_trigger( self ); + + if ( craftablespawn.stub.script_unitrigger_type == "unitrigger_radius_use" ) + { + torigin = craftablespawn.stub unitrigger_origin(); + porigin = self geteye(); + radius_sq = 2.25 * craftablespawn.stub.radius * craftablespawn.stub.radius; + + if ( distance2dsquared( torigin, porigin ) > radius_sq ) + return false; + } + else if ( !isdefined( trigger ) || !trigger istouching( self ) ) + return false; + + if ( isdefined( craftablespawn.stub.require_look_at ) && craftablespawn.stub.require_look_at && !self is_player_looking_at( trigger.origin, 0.76 ) ) + return false; + + return true; } player_progress_bar_update( start_time, craft_time ) { - self endon( "entering_last_stand" ); - self endon( "death" ); - self endon( "disconnect" ); - self endon( "craftable_progress_end" ); - while ( isDefined( self ) && ( getTime() - start_time ) < craft_time ) - { - progress = ( getTime() - start_time ) / craft_time; - if ( progress < 0 ) - { - progress = 0; - } - if ( progress > 1 ) - { - progress = 1; - } - self.usebar updatebar( progress ); - wait 0,05; - } + self endon( "entering_last_stand" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "craftable_progress_end" ); + + while ( isdefined( self ) && gettime() - start_time < craft_time ) + { + progress = ( gettime() - start_time ) / craft_time; + + if ( progress < 0 ) + progress = 0; + + if ( progress > 1 ) + progress = 1; + + self.usebar updatebar( progress ); + wait 0.05; + } } player_progress_bar( start_time, craft_time ) { - self.usebar = self createprimaryprogressbar(); - self.usebartext = self createprimaryprogressbartext(); - self.usebartext settext( &"ZOMBIE_BUILDING" ); - if ( isDefined( self ) && isDefined( start_time ) && isDefined( craft_time ) ) - { - self player_progress_bar_update( start_time, craft_time ); - } - self.usebartext destroyelem(); - self.usebar destroyelem(); + self.usebar = self createprimaryprogressbar(); + self.usebartext = self createprimaryprogressbartext(); + self.usebartext settext( &"ZOMBIE_BUILDING" ); + + if ( isdefined( self ) && isdefined( start_time ) && isdefined( craft_time ) ) + self player_progress_bar_update( start_time, craft_time ); + + self.usebartext destroyelem(); + self.usebar destroyelem(); } craftable_use_hold_think_internal( player ) { - wait 0,01; - if ( !isDefined( self ) ) - { - self notify( "craft_failed" ); - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - return; - } - if ( !isDefined( self.usetime ) ) - { - self.usetime = int( 3000 ); - } - self.craft_time = self.usetime; - self.craft_start_time = getTime(); - craft_time = self.craft_time; - craft_start_time = self.craft_start_time; - player disable_player_move_states( 1 ); - player increment_is_drinking(); - orgweapon = player getcurrentweapon(); - player giveweapon( "zombie_builder_zm" ); - player switchtoweapon( "zombie_builder_zm" ); - self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); - player thread player_progress_bar( craft_start_time, craft_time ); - if ( isDefined( level.craftable_craft_custom_func ) ) - { - player thread [[ level.craftable_craft_custom_func ]]( self.stub ); - } - while ( isDefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && ( getTime() - self.craft_start_time ) < self.craft_time ) - { - wait 0,05; - } - player notify( "craftable_progress_end" ); - player maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( orgweapon ); - player takeweapon( "zombie_builder_zm" ); - if ( isDefined( player.is_drinking ) && player.is_drinking ) - { - player decrement_is_drinking(); - } - player enable_player_move_states(); - if ( isDefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && ( getTime() - self.craft_start_time ) >= self.craft_time ) - { - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_succeed" ); - } - else - { - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); - self notify( "craft_failed" ); - } + wait 0.01; + + if ( !isdefined( self ) ) + { + self notify( "craft_failed" ); + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + return; + } + + if ( !isdefined( self.usetime ) ) + self.usetime = int( 3000 ); + + self.craft_time = self.usetime; + self.craft_start_time = gettime(); + craft_time = self.craft_time; + craft_start_time = self.craft_start_time; + player disable_player_move_states( 1 ); + player increment_is_drinking(); + orgweapon = player getcurrentweapon(); + player giveweapon( "zombie_builder_zm" ); + player switchtoweapon( "zombie_builder_zm" ); + self.stub.craftablespawn craftable_set_piece_crafting( player.current_craftable_piece ); + player thread player_progress_bar( craft_start_time, craft_time ); + + if ( isdefined( level.craftable_craft_custom_func ) ) + player thread [[ level.craftable_craft_custom_func ]]( self.stub ); + + while ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time < self.craft_time ) + wait 0.05; + + player notify( "craftable_progress_end" ); + player maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( orgweapon ); + player takeweapon( "zombie_builder_zm" ); + + if ( isdefined( player.is_drinking ) && player.is_drinking ) + player decrement_is_drinking(); + + player enable_player_move_states(); + + if ( isdefined( self ) && player player_continue_crafting( self.stub.craftablespawn ) && gettime() - self.craft_start_time >= self.craft_time ) + { + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_succeed" ); + } + else + { + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + self.stub.craftablespawn craftable_clear_piece_crafting( player.current_craftable_piece ); + self notify( "craft_failed" ); + } } craftable_play_craft_fx( player ) { - self endon( "kill_trigger" ); - self endon( "craft_succeed" ); - self endon( "craft_failed" ); - while ( 1 ) - { - playfx( level._effect[ "building_dust" ], player getplayercamerapos(), player.angles ); - wait 0,5; - } + self endon( "kill_trigger" ); + self endon( "craft_succeed" ); + self endon( "craft_failed" ); + + while ( true ) + { + playfx( level._effect["building_dust"], player getplayercamerapos(), player.angles ); + wait 0.5; + } } craftable_use_hold_think( player ) { - self thread craftable_play_craft_fx( player ); - self thread craftable_use_hold_think_internal( player ); - retval = self waittill_any_return( "craft_succeed", "craft_failed" ); - if ( retval == "craft_succeed" ) - { - return 1; - } - return 0; + self thread craftable_play_craft_fx( player ); + self thread craftable_use_hold_think_internal( player ); + retval = self waittill_any_return( "craft_succeed", "craft_failed" ); + + if ( retval == "craft_succeed" ) + return true; + + return false; } craftable_place_think() { - self endon( "kill_trigger" ); - player_crafted = undefined; - while ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self waittill( "trigger", player ); - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - while ( player != self.parent_player ) - { - continue; - } - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - status = player player_can_craft( self.stub.craftablespawn ); - if ( !status ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - if ( isDefined( self.stub.oncantuse ) ) - { - self.stub [[ self.stub.oncantuse ]]( player ); - } - continue; - } - else - { - if ( isDefined( self.stub.onbeginuse ) ) - { - self.stub [[ self.stub.onbeginuse ]]( player ); - } - result = self craftable_use_hold_think( player ); - team = player.pers[ "team" ]; - if ( isDefined( self.stub.onenduse ) ) - { - self.stub [[ self.stub.onenduse ]]( team, player, result ); - } - while ( !result ) - { - continue; - } - if ( isDefined( self.stub.onuse ) ) - { - self.stub [[ self.stub.onuse ]]( player ); - } - prompt = player player_craft( self.stub.craftablespawn ); - player_crafted = player; - self.stub.hint_string = prompt; - self sethintstring( self.stub.hint_string ); - } - } - if ( isDefined( self.stub.craftablestub.onfullycrafted ) ) - { - b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); - if ( !b_result ) - { - return; - } - } - if ( isDefined( player_crafted ) ) - { - } - if ( self.stub.persistent == 0 ) - { - self.stub craftablestub_remove(); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - return; - } - if ( self.stub.persistent == 3 ) - { - stub_uncraft_craftable( self.stub, 1 ); - return; - } - if ( self.stub.persistent == 2 ) - { - if ( isDefined( player_crafted ) ) - { - self craftabletrigger_update_prompt( player_crafted ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.str_taken ) && self.stub.str_taken ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - self sethintstring( self.stub.hint_string ); - return; - } - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 2 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - if ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - self.stub.bought = 1; - if ( isDefined( self.stub.model ) ) - { - self.stub.model thread model_fly_away(); - } - player maps/mp/zombies/_zm_weapons::weapon_give( self.stub.weaponname ); - if ( isDefined( level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; - } - else - { - self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; - } - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.weaponname ); - } - } - else while ( !isDefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) - { - if ( isDefined( self.stub.model ) ) - { - self.stub.model notsolid(); - self.stub.model show(); - } - while ( self.stub.persistent == 1 ) - { - self waittill( "trigger", player ); - while ( isDefined( player.screecher_weapon ) ) - { - continue; - } - while ( isDefined( level.custom_craftable_validation ) ) - { - valid = self [[ level.custom_craftable_validation ]]( player ); - while ( !valid ) - { - continue; - } - } - if ( isDefined( self.stub.crafted ) && !self.stub.crafted ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return; - } - while ( player != self.parent_player ) - { - continue; - } - while ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - } - while ( player has_player_equipment( self.stub.weaponname ) ) - { - continue; - } - if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) - { - player maps/mp/zombies/_zm_equipment::equipment_buy( self.stub.weaponname ); - player giveweapon( self.stub.weaponname ); - player setweaponammoclip( self.stub.weaponname, 1 ); - if ( isDefined( level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ) ) - { - self [[ level.zombie_include_craftables[ self.stub.equipname ].onbuyweapon ]]( player ); - } - if ( self.stub.weaponname != "keys_zm" ) - { - player setactionslot( 1, "weapon", self.stub.weaponname ); - } - if ( isDefined( level.zombie_craftablestubs[ self.stub.equipname ].str_taken ) ) - { - self.stub.hint_string = level.zombie_craftablestubs[ self.stub.equipname ].str_taken; - } - else - { - self.stub.hint_string = ""; - } - self sethintstring( self.stub.hint_string ); - player track_craftables_pickedup( self.stub.craftablespawn ); - continue; - } - else - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - } - } - } + self endon( "kill_trigger" ); + player_crafted = undefined; + + while ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self waittill( "trigger", player ); + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( player != self.parent_player ) + continue; + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + status = player player_can_craft( self.stub.craftablespawn ); + + if ( !status ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + + if ( isdefined( self.stub.oncantuse ) ) + self.stub [[ self.stub.oncantuse ]]( player ); + } + else + { + if ( isdefined( self.stub.onbeginuse ) ) + self.stub [[ self.stub.onbeginuse ]]( player ); + + result = self craftable_use_hold_think( player ); + team = player.pers["team"]; + + if ( isdefined( self.stub.onenduse ) ) + self.stub [[ self.stub.onenduse ]]( team, player, result ); + + if ( !result ) + continue; + + if ( isdefined( self.stub.onuse ) ) + self.stub [[ self.stub.onuse ]]( player ); + + prompt = player player_craft( self.stub.craftablespawn ); + player_crafted = player; + self.stub.hint_string = prompt; + self sethintstring( self.stub.hint_string ); + } + } + + if ( isdefined( self.stub.craftablestub.onfullycrafted ) ) + { + b_result = self.stub [[ self.stub.craftablestub.onfullycrafted ]](); + + if ( !b_result ) + return; + } + + if ( isdefined( player_crafted ) ) + { + + } + + if ( self.stub.persistent == 0 ) + { + self.stub craftablestub_remove(); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + return; + } + + if ( self.stub.persistent == 3 ) + { + stub_uncraft_craftable( self.stub, 1 ); + return; + } + + if ( self.stub.persistent == 2 ) + { + if ( isdefined( player_crafted ) ) + self craftabletrigger_update_prompt( player_crafted ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.str_taken ) && self.stub.str_taken ) + { + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 2 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + self.stub.bought = 1; + + if ( isdefined( self.stub.model ) ) + self.stub.model thread model_fly_away( self ); + + player maps\mp\zombies\_zm_weapons::weapon_give( self.stub.weaponname ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + + if ( !maps\mp\zombies\_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) ) + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED"; + else + self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX"; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + } + else if ( !isdefined( player_crafted ) || self craftabletrigger_update_prompt( player_crafted ) ) + { + if ( isdefined( self.stub.model ) ) + { + self.stub.model notsolid(); + self.stub.model show(); + } + + while ( self.stub.persistent == 1 ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.screecher_weapon ) ) + continue; + + if ( isdefined( level.custom_craftable_validation ) ) + { + valid = self [[ level.custom_craftable_validation ]]( player ); + + if ( !valid ) + continue; + } + + if ( !( isdefined( self.stub.crafted ) && self.stub.crafted ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return; + } + + if ( player != self.parent_player ) + continue; + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player has_player_equipment( self.stub.weaponname ) ) + continue; + + if ( isdefined( level.zombie_craftable_persistent_weapon ) ) + { + if ( self [[ level.zombie_craftable_persistent_weapon ]]( player ) ) + continue; + } + + if ( isdefined( level.zombie_custom_equipment_setup ) ) + { + if ( self [[ level.zombie_custom_equipment_setup ]]( player ) ) + continue; + } + + if ( !maps\mp\zombies\_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps\mp\zombies\_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) ) + { + player maps\mp\zombies\_zm_equipment::equipment_buy( self.stub.weaponname ); + player giveweapon( self.stub.weaponname ); + player setweaponammoclip( self.stub.weaponname, 1 ); + + if ( isdefined( level.zombie_include_craftables[self.stub.equipname].onbuyweapon ) ) + self [[ level.zombie_include_craftables[self.stub.equipname].onbuyweapon ]]( player ); + else if ( self.stub.weaponname != "keys_zm" ) + player setactionslot( 1, "weapon", self.stub.weaponname ); + + if ( isdefined( level.zombie_craftablestubs[self.stub.equipname].str_taken ) ) + self.stub.hint_string = level.zombie_craftablestubs[self.stub.equipname].str_taken; + else + self.stub.hint_string = ""; + + self sethintstring( self.stub.hint_string ); + player track_craftables_pickedup( self.stub.craftablespawn ); + } + else + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + } + } + } } -model_fly_away() +model_fly_away( unitrigger ) { - self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); - direction = self.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - self vibrate( direction, 10, 0,5, 4 ); - self waittill( "movedone" ); - self ghost(); - playfx( level._effect[ "poltergeist" ], self.origin ); + self moveto( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), 3 ); + direction = self.origin; + direction = ( direction[1], direction[0], 0 ); + + if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 ) + direction = ( direction[0], direction[1] * -1, 0 ); + else if ( direction[0] < 0 ) + direction = ( direction[0] * -1, direction[1], 0 ); + + self vibrate( direction, 10, 0.5, 4 ); + + self waittill( "movedone" ); + + self ghost(); + playfx( level._effect["poltergeist"], self.origin ); } find_craftable_stub( equipname ) { - _a2752 = level.a_uts_craftables; - _k2752 = getFirstArrayKey( _a2752 ); - while ( isDefined( _k2752 ) ) - { - stub = _a2752[ _k2752 ]; - if ( stub.equipname == equipname ) - { - return stub; - } - _k2752 = getNextArrayKey( _a2752, _k2752 ); - } - return undefined; + foreach ( stub in level.a_uts_craftables ) + { + if ( stub.equipname == equipname ) + return stub; + } + + return undefined; } uncraft_craftable( equipname, return_pieces, origin, angles ) { - stub = find_craftable_stub( equipname ); - stub_uncraft_craftable( stub, return_pieces, origin, angles ); + stub = find_craftable_stub( equipname ); + stub_uncraft_craftable( stub, return_pieces, origin, angles ); } stub_uncraft_craftable( stub, return_pieces, origin, angles, use_random_start ) { - if ( isDefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[ craftable.craftable_name ] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - i = 0; - while ( i < craftable.a_piecespawns.size ) - { - craftable.a_piecespawns[ i ].crafted = 0; - if ( isDefined( craftable.a_piecespawns[ i ].tag_name ) ) - { - craftable.stub.model notsolid(); - if ( isDefined( craftable.a_piecespawns[ i ].crafted ) && !craftable.a_piecespawns[ i ].crafted ) - { - craftable.stub.model hidepart( craftable.a_piecespawns[ i ].tag_name ); - break; - } - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[ i ].tag_name ); - } - } - if ( isDefined( return_pieces ) && return_pieces ) - { - craftable.a_piecespawns[ i ] piece_spawn_at( origin, angles, use_random_start ); - } - i++; - } - if ( isDefined( craftable.stub.model ) ) - { - craftable.stub.model ghost(); - } - } + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + if ( isdefined( return_pieces ) && return_pieces ) + craftable.a_piecespawns[i] piece_spawn_at( origin, angles, use_random_start ); + } + + if ( isdefined( craftable.stub.model ) ) + craftable.stub.model ghost(); + } } player_explode_craftable( equipname, origin, speed, return_to_spawn, return_time ) { - self explosiondamage( 50, origin ); - stub = find_craftable_stub( equipname ); - if ( isDefined( stub ) ) - { - craftable = stub.craftablespawn; - craftable.crafted = 0; - craftable.stub.crafted = 0; - craftable notify( "uncrafted" ); - level.craftables_crafted[ craftable.craftable_name ] = 0; - level notify( craftable.craftable_name + "_uncrafted" ); - i = 0; - while ( i < craftable.a_piecespawns.size ) - { - craftable.a_piecespawns[ i ].crafted = 0; - if ( isDefined( craftable.a_piecespawns[ i ].tag_name ) ) - { - craftable.stub.model notsolid(); - if ( isDefined( craftable.a_piecespawns[ i ].crafted ) && !craftable.a_piecespawns[ i ].crafted ) - { - craftable.stub.model hidepart( craftable.a_piecespawns[ i ].tag_name ); - break; - } - else - { - craftable.stub.model show(); - craftable.stub.model showpart( craftable.a_piecespawns[ i ].tag_name ); - } - } - ang = randomfloat( 360 ); - h = 0,25 + randomfloat( 0,5 ); - dir = ( sin( ang ), cos( ang ), h ); - self thread player_throw_piece( craftable.a_piecespawns[ i ], origin, speed * dir, return_to_spawn, return_time ); - i++; - } - craftable.stub.model ghost(); - } + self explosiondamage( 50, origin ); + stub = find_craftable_stub( equipname ); + + if ( isdefined( stub ) ) + { + craftable = stub.craftablespawn; + craftable.crafted = 0; + craftable.stub.crafted = 0; + craftable notify( "uncrafted" ); + level.craftables_crafted[craftable.craftable_name] = 0; + level notify( craftable.craftable_name + "_uncrafted" ); + + for ( i = 0; i < craftable.a_piecespawns.size; i++ ) + { + craftable.a_piecespawns[i].crafted = 0; + + if ( isdefined( craftable.a_piecespawns[i].tag_name ) ) + { + craftable.stub.model notsolid(); + + if ( !( isdefined( craftable.a_piecespawns[i].crafted ) && craftable.a_piecespawns[i].crafted ) ) + craftable.stub.model hidepart( craftable.a_piecespawns[i].tag_name ); + else + { + craftable.stub.model show(); + craftable.stub.model showpart( craftable.a_piecespawns[i].tag_name ); + } + } + + ang = randomfloat( 360 ); + h = 0.25 + randomfloat( 0.5 ); + dir = ( sin( ang ), cos( ang ), h ); + self thread player_throw_piece( craftable.a_piecespawns[i], origin, speed * dir, return_to_spawn, return_time ); + } + + craftable.stub.model ghost(); + } } think_craftables() { - _a2850 = level.zombie_include_craftables; - _k2850 = getFirstArrayKey( _a2850 ); - while ( isDefined( _k2850 ) ) - { - craftable = _a2850[ _k2850 ]; - if ( isDefined( craftable.triggerthink ) ) - { - craftable [[ craftable.triggerthink ]](); - } - _k2850 = getNextArrayKey( _a2850, _k2850 ); - } + foreach ( craftable in level.zombie_include_craftables ) + { + if ( isdefined( craftable.triggerthink ) ) + craftable [[ craftable.triggerthink ]](); + } } opentablecraftable() { - a_trigs = getentarray( "open_craftable_trigger", "targetname" ); - _a2864 = a_trigs; - _k2864 = getFirstArrayKey( _a2864 ); - while ( isDefined( _k2864 ) ) - { - trig = _a2864[ _k2864 ]; - setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); - _k2864 = getNextArrayKey( _a2864, _k2864 ); - } + a_trigs = getentarray( "open_craftable_trigger", "targetname" ); + + foreach ( trig in a_trigs ) + setup_unitrigger_craftable_internal( trig, "open_table", "", "OPEN_CRAFTABLE", 1, 0 ); } craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + return setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } craftable_trigger_think_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + return setup_unitrigger_craftable_array( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } setup_vehicle_unitrigger_craftable( parent, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - trig = getent( trigger_targetname, "targetname" ); - if ( !isDefined( trig ) ) - { - return; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ]; - unitrigger_stub.link_parent = parent; - unitrigger_stub.origin_parent = trig; - unitrigger_stub.trigger_targetname = trigger_targetname; - unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; - unitrigger_stub.origin = trig.origin; - unitrigger_stub.angles = trig.angles; - unitrigger_stub.equipname = equipname; - unitrigger_stub.weaponname = weaponname; - unitrigger_stub.trigger_hintstring = trigger_hintstring; - unitrigger_stub.delete_trigger = delete_trigger; - unitrigger_stub.crafted = 0; - unitrigger_stub.persistent = persistent; - unitrigger_stub.usetime = int( 3000 ); - unitrigger_stub.onbeginuse = ::onbeginuseuts; - unitrigger_stub.onenduse = ::onenduseuts; - unitrigger_stub.onuse = ::onuseplantobjectuts; - unitrigger_stub.oncantuse = ::oncantuseuts; - if ( isDefined( trig.script_length ) ) - { - unitrigger_stub.script_length = trig.script_length; - } - else - { - unitrigger_stub.script_length = 24; - } - if ( isDefined( trig.script_width ) ) - { - unitrigger_stub.script_width = trig.script_width; - } - else - { - unitrigger_stub.script_width = 64; - } - if ( isDefined( trig.script_height ) ) - { - unitrigger_stub.script_height = trig.script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - if ( isDefined( trig.radius ) ) - { - unitrigger_stub.radius = trig.radius; - } - else - { - unitrigger_stub.radius = 64; - } - unitrigger_stub.target = trig.target; - unitrigger_stub.targetname = trig.targetname + "_trigger"; - unitrigger_stub.script_noteworthy = trig.script_noteworthy; - unitrigger_stub.script_parameters = trig.script_parameters; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( isDefined( level.zombie_craftablestubs[ equipname ].str_to_craft ) ) - { - unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].str_to_craft; - } - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - unitrigger_stub.require_look_at = 1; - unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); - unitrigger_stub.piece_trigger = trig; - trig.trigger_stub = unitrigger_stub; - unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); - if ( delete_trigger ) - { - trig delete(); - } - level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub; - return unitrigger_stub; + trig = getent( trigger_targetname, "targetname" ); + + if ( !isdefined( trig ) ) + return; + + unitrigger_stub = spawnstruct(); + unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname]; + unitrigger_stub.link_parent = parent; + unitrigger_stub.origin_parent = trig; + unitrigger_stub.trigger_targetname = trigger_targetname; + unitrigger_stub.originfunc = ::anystub_get_unitrigger_origin; + unitrigger_stub.onspawnfunc = ::anystub_on_spawn_trigger; + unitrigger_stub.origin = trig.origin; + unitrigger_stub.angles = trig.angles; + unitrigger_stub.equipname = equipname; + unitrigger_stub.weaponname = weaponname; + unitrigger_stub.trigger_hintstring = trigger_hintstring; + unitrigger_stub.delete_trigger = delete_trigger; + unitrigger_stub.crafted = 0; + unitrigger_stub.persistent = persistent; + unitrigger_stub.usetime = int( 3000 ); + unitrigger_stub.onbeginuse = ::onbeginuseuts; + unitrigger_stub.onenduse = ::onenduseuts; + unitrigger_stub.onuse = ::onuseplantobjectuts; + unitrigger_stub.oncantuse = ::oncantuseuts; + + if ( isdefined( trig.script_length ) ) + unitrigger_stub.script_length = trig.script_length; + else + unitrigger_stub.script_length = 24; + + if ( isdefined( trig.script_width ) ) + unitrigger_stub.script_width = trig.script_width; + else + unitrigger_stub.script_width = 64; + + if ( isdefined( trig.script_height ) ) + unitrigger_stub.script_height = trig.script_height; + else + unitrigger_stub.script_height = 24; + + if ( isdefined( trig.radius ) ) + unitrigger_stub.radius = trig.radius; + else + unitrigger_stub.radius = 64; + + unitrigger_stub.target = trig.target; + unitrigger_stub.targetname = trig.targetname + "_trigger"; + unitrigger_stub.script_noteworthy = trig.script_noteworthy; + unitrigger_stub.script_parameters = trig.script_parameters; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + + if ( isdefined( level.zombie_craftablestubs[equipname].str_to_craft ) ) + unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].str_to_craft; + + unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; + unitrigger_stub.require_look_at = 1; + unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt; + maps\mp\zombies\_zm_unitrigger::register_unitrigger( unitrigger_stub, ::craftable_place_think ); + unitrigger_stub.piece_trigger = trig; + trig.trigger_stub = unitrigger_stub; + unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin ); + + if ( delete_trigger ) + trig delete(); + + level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub; + return unitrigger_stub; } vehicle_craftable_trigger_think( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ) { - return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); + return setup_vehicle_unitrigger_craftable( vehicle, trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent ); } onpickuputs( player ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece recovered by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece recovered by - " + player.name ); #/ - } } ondroputs( player ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece dropped by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece dropped by - " + player.name ); #/ - } - player notify( "event_ended" ); + player notify( "event_ended" ); } onbeginuseuts( player ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece begin use by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece begin use by - " + player.name ); #/ - } - if ( isDefined( self.craftablestub.onbeginuse ) ) - { - self [[ self.craftablestub.onbeginuse ]]( player ); - } - if ( isDefined( player ) && !isDefined( player.craftableaudio ) ) - { - player.craftableaudio = spawn( "script_origin", player.origin ); - player.craftableaudio playloopsound( "zmb_craftable_loop" ); - } + if ( isdefined( self.craftablestub.onbeginuse ) ) + self [[ self.craftablestub.onbeginuse ]]( player ); + + if ( isdefined( player ) && !isdefined( player.craftableaudio ) ) + { + player.craftableaudio = spawn( "script_origin", player.origin ); + player.craftableaudio playloopsound( "zmb_craftable_loop" ); + } } onenduseuts( team, player, result ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece end use by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece end use by - " + player.name ); #/ - } - if ( !isDefined( player ) ) - { - return; - } - if ( isDefined( player.craftableaudio ) ) - { - player.craftableaudio delete(); - player.craftableaudio = undefined; - } - if ( isDefined( self.craftablestub.onenduse ) ) - { - self [[ self.craftablestub.onenduse ]]( team, player, result ); - } - player notify( "event_ended" ); + if ( !isdefined( player ) ) + return; + + if ( isdefined( player.craftableaudio ) ) + { + player.craftableaudio delete(); + player.craftableaudio = undefined; + } + + if ( isdefined( self.craftablestub.onenduse ) ) + self [[ self.craftablestub.onenduse ]]( team, player, result ); + + player notify( "event_ended" ); } oncantuseuts( player ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece can't use by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece can't use by - " + player.name ); #/ - } - if ( isDefined( self.craftablestub.oncantuse ) ) - { - self [[ self.craftablestub.oncantuse ]]( player ); - } + if ( isdefined( self.craftablestub.oncantuse ) ) + self [[ self.craftablestub.oncantuse ]]( player ); } onuseplantobjectuts( player ) { /# - if ( isDefined( player ) && isDefined( player.name ) ) - { - println( "ZM >> Craftable piece crafted by - " + player.name ); + if ( isdefined( player ) && isdefined( player.name ) ) + println( "ZM >> Craftable piece crafted by - " + player.name ); #/ - } - if ( isDefined( self.craftablestub.onuseplantobject ) ) - { - self [[ self.craftablestub.onuseplantobject ]]( player ); - } - player notify( "bomb_planted" ); + if ( isdefined( self.craftablestub.onuseplantobject ) ) + self [[ self.craftablestub.onuseplantobject ]]( player ); + + player notify( "bomb_planted" ); } is_craftable() { - if ( !isDefined( level.zombie_craftablestubs ) ) - { - return 0; - } - if ( isDefined( self.zombie_weapon_upgrade ) && isDefined( level.zombie_craftablestubs[ self.zombie_weapon_upgrade ] ) ) - { - return 1; - } - if ( isDefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) - { - if ( isDefined( level.craftables_crafted[ "pap" ] ) && level.craftables_crafted[ "pap" ] ) - { - return 0; - } - return 1; - } - return 0; + if ( !isdefined( level.zombie_craftablestubs ) ) + return false; + + if ( isdefined( self.zombie_weapon_upgrade ) && isdefined( level.zombie_craftablestubs[self.zombie_weapon_upgrade] ) ) + return true; + + if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "specialty_weapupgrade" ) + { + if ( isdefined( level.craftables_crafted["pap"] ) && level.craftables_crafted["pap"] ) + return false; + + return true; + } + + return false; } craftable_crafted() { - self.a_piecespawns--; - + self.a_piecespawns--; } craftable_complete() { - if ( self.a_piecespawns <= 0 ) - { - return 1; - } - return 0; + if ( self.a_piecespawns <= 0 ) + return true; + + return false; } get_craftable_hint( craftable_name ) { /# - assert( isDefined( level.zombie_craftablestubs[ craftable_name ] ), craftable_name + " was not included or is not part of the zombie weapon list." ); + assert( isdefined( level.zombie_craftablestubs[craftable_name] ), craftable_name + " was not included or is not part of the zombie weapon list." ); #/ - return level.zombie_craftablestubs[ craftable_name ].str_to_craft; + return level.zombie_craftablestubs[craftable_name].str_to_craft; } delete_on_disconnect( craftable, self_notify, skip_delete ) { - craftable endon( "death" ); - self waittill( "disconnect" ); - if ( isDefined( self_notify ) ) - { - self notify( self_notify ); - } - if ( isDefined( skip_delete ) && !skip_delete ) - { - if ( isDefined( craftable.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( craftable.stub ); - craftable.stub = undefined; - } - if ( isDefined( craftable ) ) - { - craftable delete(); - } - } + craftable endon( "death" ); + + self waittill( "disconnect" ); + + if ( isdefined( self_notify ) ) + self notify( self_notify ); + + if ( !( isdefined( skip_delete ) && skip_delete ) ) + { + if ( isdefined( craftable.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( craftable.stub ); + craftable.stub = undefined; + } + + if ( isdefined( craftable ) ) + craftable delete(); + } } is_holding_part( craftable_name, piece_name ) { - if ( isDefined( self.current_craftable_piece ) ) - { - if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) - { - return 1; - } - } - while ( isDefined( level.a_uts_craftables ) ) - { - _a3223 = level.a_uts_craftables; - _k3223 = getFirstArrayKey( _a3223 ); - while ( isDefined( _k3223 ) ) - { - craftable_stub = _a3223[ _k3223 ]; - while ( craftable_stub.craftablestub.name == craftable_name ) - { - _a3228 = craftable_stub.craftablespawn.a_piecespawns; - _k3228 = getFirstArrayKey( _a3228 ); - while ( isDefined( _k3228 ) ) - { - piece = _a3228[ _k3228 ]; - if ( piece.piecename == piece_name ) - { - if ( isDefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) - { - return 1; - } - } - _k3228 = getNextArrayKey( _a3228, _k3228 ); - } - } - _k3223 = getNextArrayKey( _a3223, _k3223 ); - } - } - return 0; + if ( isdefined( self.current_craftable_piece ) ) + { + if ( self.current_craftable_piece.craftablename == craftable_name && self.current_craftable_piece.modelname == piece_name ) + return true; + } + + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.in_shared_inventory ) && piece.in_shared_inventory ) + return true; + } + } + } + } + } + + return false; } is_part_crafted( craftable_name, piece_name ) { - while ( isDefined( level.a_uts_craftables ) ) - { - _a3253 = level.a_uts_craftables; - _k3253 = getFirstArrayKey( _a3253 ); - while ( isDefined( _k3253 ) ) - { - craftable_stub = _a3253[ _k3253 ]; - while ( craftable_stub.craftablestub.name == craftable_name ) - { - if ( isDefined( craftable_stub.crafted ) && craftable_stub.crafted ) - { - return 1; - } - _a3264 = craftable_stub.craftablespawn.a_piecespawns; - _k3264 = getFirstArrayKey( _a3264 ); - while ( isDefined( _k3264 ) ) - { - piece = _a3264[ _k3264 ]; - if ( piece.piecename == piece_name ) - { - if ( isDefined( piece.crafted ) && piece.crafted ) - { - return 1; - } - } - _k3264 = getNextArrayKey( _a3264, _k3264 ); - } - } - _k3253 = getNextArrayKey( _a3253, _k3253 ); - } - } - return 0; + if ( isdefined( level.a_uts_craftables ) ) + { + foreach ( craftable_stub in level.a_uts_craftables ) + { + if ( craftable_stub.craftablestub.name == craftable_name ) + { + if ( isdefined( craftable_stub.crafted ) && craftable_stub.crafted ) + return true; + + foreach ( piece in craftable_stub.craftablespawn.a_piecespawns ) + { + if ( piece.piecename == piece_name ) + { + if ( isdefined( piece.crafted ) && piece.crafted ) + return true; + } + } + } + } + } + + return false; } track_craftable_piece_pickedup( piece ) { - if ( !isDefined( piece ) || !isDefined( piece.craftablename ) ) - { + if ( !isdefined( piece ) || !isdefined( piece.craftablename ) ) + { /# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \n" ); + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_piece_pickedup() \n" ); #/ - return; - } - self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); - if ( isDefined( piece.piecestub.vox_id ) ) - { - self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); - } - else - { - self thread do_player_general_vox( "general", "build_pickup" ); - } + return; + } + + self add_map_craftable_stat( piece.craftablename, "pieces_pickedup", 1 ); + + if ( isdefined( piece.piecestub.vox_id ) ) + { + if ( isdefined( piece.piecestub.b_one_time_vo ) && piece.piecestub.b_one_time_vo ) + { + if ( !isdefined( self.a_one_time_piece_pickup_vo ) ) + self.a_one_time_piece_pickup_vo = []; + + if ( isdefined( self.dontspeak ) && self.dontspeak ) + return; + + if ( isinarray( self.a_one_time_piece_pickup_vo, piece.piecestub.vox_id ) ) + return; + + self.a_one_time_piece_pickup_vo[self.a_one_time_piece_pickup_vo.size] = piece.piecestub.vox_id; + } + + self thread do_player_general_vox( "general", piece.piecestub.vox_id + "_pickup" ); + } + else + self thread do_player_general_vox( "general", "build_pickup" ); } track_craftable_pieces_crafted( craftable ) { - if ( !isDefined( craftable ) || !isDefined( craftable.craftable_name ) ) - { + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { /# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \n" ); + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftable_pieces_crafted() \n" ); #/ - return; - } - bname = craftable.craftable_name; - if ( isDefined( craftable.stat_name ) ) - { - bname = craftable.stat_name; - } - self add_map_craftable_stat( bname, "pieces_built", 1 ); - if ( !craftable craftable_all_crafted() ) - { - self thread do_player_general_vox( "general", "build_add" ); - } + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "pieces_built", 1 ); + + if ( !craftable craftable_all_crafted() ) + self thread do_player_general_vox( "general", "build_add" ); } track_craftables_crafted( craftable ) { - if ( !isDefined( craftable ) || !isDefined( craftable.craftable_name ) ) - { + if ( !isdefined( craftable ) || !isdefined( craftable.craftable_name ) ) + { /# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \n" ); + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_crafted() \n" ); #/ - return; - } - bname = craftable.craftable_name; - if ( isDefined( craftable.stat_name ) ) - { - bname = craftable.stat_name; - } - self add_map_craftable_stat( bname, "buildable_built", 1 ); - self maps/mp/zombies/_zm_stats::increment_client_stat( "buildables_built", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "buildables_built" ); - if ( isDefined( craftable.stub.craftablestub.vox_id ) ) - { - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); - } + return; + } + + bname = craftable.craftable_name; + + if ( isdefined( craftable.stat_name ) ) + bname = craftable.stat_name; + + self add_map_craftable_stat( bname, "buildable_built", 1 ); + self maps\mp\zombies\_zm_stats::increment_client_stat( "buildables_built", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "buildables_built" ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + { + if ( isdefined( level.zombie_custom_craftable_built_vo ) ) + self thread [[ level.zombie_custom_craftable_built_vo ]]( craftable.stub ); + + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_final" ); + } } track_craftables_pickedup( craftable ) { - if ( !isDefined( craftable ) ) - { + if ( !isdefined( craftable ) ) + { /# - println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \n" ); + println( "STAT TRACKING FAILURE: NOT DEFINED IN track_craftables_pickedup() \n" ); #/ - return; - } - stat_name = get_craftable_stat_name( craftable.craftable_name ); - if ( !isDefined( stat_name ) ) - { + return; + } + + stat_name = get_craftable_stat_name( craftable.craftable_name ); + + if ( !isdefined( stat_name ) ) + { /# - println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\n" ); + println( "STAT TRACKING FAILURE: NO STAT NAME FOR " + craftable.craftable_name + "\n" ); #/ - return; - } - self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); - if ( isDefined( craftable.stub.craftablestub.vox_id ) ) - { - self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); - } - self say_pickup_craftable_vo( craftable, 0 ); + return; + } + + self add_map_craftable_stat( stat_name, "buildable_pickedup", 1 ); + + if ( isdefined( craftable.stub.craftablestub.vox_id ) ) + self thread do_player_general_vox( "general", craftable.stub.craftablestub.vox_id + "_plc" ); + + self say_pickup_craftable_vo( craftable, 0 ); } track_craftables_planted( equipment ) { - if ( !isDefined( equipment ) ) - { + if ( !isdefined( equipment ) ) + { /# - println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \n" ); + println( "STAT TRACKING FAILURE: NOT DEFINED for track_craftables_planted() \n" ); #/ - return; - } - craftable_name = undefined; - if ( isDefined( equipment.name ) ) - { - craftable_name = get_craftable_stat_name( equipment.name ); - } - if ( !isDefined( craftable_name ) ) - { + return; + } + + craftable_name = undefined; + + if ( isdefined( equipment.name ) ) + craftable_name = get_craftable_stat_name( equipment.name ); + + if ( !isdefined( craftable_name ) ) + { /# - println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\n" ); + println( "STAT TRACKING FAILURE: NO CRAFTABLE NAME FOR track_craftables_planted() " + equipment.name + "\n" ); #/ - return; - } - maps/mp/_demo::bookmark( "zm_player_buildable_placed", getTime(), self ); - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); + return; + } + + maps\mp\_demo::bookmark( "zm_player_buildable_placed", gettime(), self ); + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); } placed_craftable_vo_timer() { - self endon( "disconnect" ); - self.craftable_timer = 1; - wait 60; - self.craftable_timer = 0; + self endon( "disconnect" ); + self.craftable_timer = 1; + wait 60; + self.craftable_timer = 0; } craftable_pickedup_timer() { - self endon( "disconnect" ); - self.craftable_pickedup_timer = 1; - wait 60; - self.craftable_pickedup_timer = 0; + self endon( "disconnect" ); + self.craftable_pickedup_timer = 1; + wait 60; + self.craftable_pickedup_timer = 0; } track_planted_craftables_pickedup( equipment ) { - if ( !isDefined( equipment ) ) - { - return; - } - if ( equipment != "equip_turbine_zm" && equipment != "equip_turret_zm" && equipment != "equip_electrictrap_zm" || equipment == "riotshield_zm" && equipment == "alcatraz_shield_zm" ) - { - self maps/mp/zombies/_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); - } - if ( isDefined( self.craftable_pickedup_timer ) && !self.craftable_pickedup_timer ) - { - self say_pickup_craftable_vo( equipment, 1 ); - self thread craftable_pickedup_timer(); - } + if ( !isdefined( equipment ) ) + return; + + if ( equipment == "equip_turbine_zm" || equipment == "equip_turret_zm" || equipment == "equip_electrictrap_zm" || equipment == "riotshield_zm" || equipment == "alcatraz_shield_zm" || equipment == "tomb_shield_zm" ) + { + self maps\mp\zombies\_zm_stats::increment_client_stat( "planted_buildables_pickedup", 0 ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "planted_buildables_pickedup" ); + } + + if ( !( isdefined( self.craftable_pickedup_timer ) && self.craftable_pickedup_timer ) ) + { + self say_pickup_craftable_vo( equipment, 1 ); + self thread craftable_pickedup_timer(); + } } track_placed_craftables( craftable_name ) { - if ( !isDefined( craftable_name ) ) - { - return; - } - self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); - vo_name = undefined; - if ( craftable_name == level.riotshield_name ) - { - vo_name = "craft_plc_shield"; - } - if ( !isDefined( vo_name ) ) - { - return; - } - self thread do_player_general_vox( "general", vo_name ); + if ( !isdefined( craftable_name ) ) + return; + + self add_map_craftable_stat( craftable_name, "buildable_placed", 1 ); + vo_name = undefined; + + if ( craftable_name == level.riotshield_name ) + vo_name = "craft_plc_shield"; + + if ( !isdefined( vo_name ) ) + return; + + self thread do_player_general_vox( "general", vo_name ); } add_map_craftable_stat( piece_name, stat_name, value ) { - if ( isDefined( piece_name ) || piece_name == "sq_common" && piece_name == "keys_zm" ) - { - return; - } - self adddstat( "buildables", piece_name, stat_name, value ); + if ( !isdefined( piece_name ) || piece_name == "sq_common" || piece_name == "keys_zm" ) + return; + + if ( isdefined( level.zm_disable_recording_stats ) && level.zm_disable_recording_stats || isdefined( level.zm_disable_recording_buildable_stats ) && level.zm_disable_recording_buildable_stats ) + return; + + self adddstat( "buildables", piece_name, stat_name, value ); } say_pickup_craftable_vo( craftable_name, world ) { + } get_craftable_vo_name( craftable_name ) { + } get_craftable_stat_name( craftable_name ) { - if ( isDefined( craftable_name ) ) - { - switch( craftable_name ) - { - case "equip_riotshield_zm": - return "riotshield_zm"; - case "equip_turbine_zm": - return "turbine"; - case "equip_turret_zm": - return "turret"; - case "equip_electrictrap_zm": - return "electric_trap"; - case "equip_springpad_zm": - return "springpad_zm"; - case "equip_slipgun_zm": - return "slipgun_zm"; - } - } - return craftable_name; + if ( isdefined( craftable_name ) ) + { + switch ( craftable_name ) + { + case "equip_riotshield_zm": + return "riotshield_zm"; + case "equip_turbine_zm": + return "turbine"; + case "equip_turret_zm": + return "turret"; + case "equip_electrictrap_zm": + return "electric_trap"; + case "equip_springpad_zm": + return "springpad_zm"; + case "equip_slipgun_zm": + return "slipgun_zm"; + } + } + + return craftable_name; } get_craftable_model( str_craftable ) { - _a3544 = level.a_uts_craftables; - _k3544 = getFirstArrayKey( _a3544 ); - while ( isDefined( _k3544 ) ) - { - uts_craftable = _a3544[ _k3544 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - if ( isDefined( uts_craftable.model ) ) - { - return uts_craftable.model; - } - } - else - { - _k3544 = getNextArrayKey( _a3544, _k3544 ); - } - } - return undefined; + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + if ( isdefined( uts_craftable.model ) ) + return uts_craftable.model; + + break; + } + } + + return undefined; } get_craftable_piece( str_craftable, str_piece ) { - _a3564 = level.a_uts_craftables; - _k3564 = getFirstArrayKey( _a3564 ); - while ( isDefined( _k3564 ) ) - { - uts_craftable = _a3564[ _k3564 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - _a3568 = uts_craftable.craftablespawn.a_piecespawns; - _k3568 = getFirstArrayKey( _a3568 ); - while ( isDefined( _k3568 ) ) - { - piecespawn = _a3568[ _k3568 ]; - if ( piecespawn.piecename == str_piece ) - { - return piecespawn; - } - _k3568 = getNextArrayKey( _a3568, _k3568 ); - } - } - else _k3564 = getNextArrayKey( _a3564, _k3564 ); - } - return undefined; + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece ) + return piecespawn; + } + + break; + } + } + + return undefined; } player_get_craftable_piece( str_craftable, str_piece ) { - piecespawn = get_craftable_piece( str_craftable, str_piece ); - if ( isDefined( piecespawn ) ) - { - self player_take_piece( piecespawn ); - } + piecespawn = get_craftable_piece( str_craftable, str_piece ); + + if ( isdefined( piecespawn ) ) + self player_take_piece( piecespawn ); } get_craftable_piece_model( str_craftable, str_piece ) { - _a3600 = level.a_uts_craftables; - _k3600 = getFirstArrayKey( _a3600 ); - while ( isDefined( _k3600 ) ) - { - uts_craftable = _a3600[ _k3600 ]; - if ( uts_craftable.craftablestub.name == str_craftable ) - { - _a3604 = uts_craftable.craftablespawn.a_piecespawns; - _k3604 = getFirstArrayKey( _a3604 ); - while ( isDefined( _k3604 ) ) - { - piecespawn = _a3604[ _k3604 ]; - if ( piecespawn.piecename == str_piece && isDefined( piecespawn.model ) ) - { - return piecespawn.model; - } - _k3604 = getNextArrayKey( _a3604, _k3604 ); - } - } - else _k3600 = getNextArrayKey( _a3600, _k3600 ); - } - return undefined; + foreach ( uts_craftable in level.a_uts_craftables ) + { + if ( uts_craftable.craftablestub.name == str_craftable ) + { + foreach ( piecespawn in uts_craftable.craftablespawn.a_piecespawns ) + { + if ( piecespawn.piecename == str_piece && isdefined( piecespawn.model ) ) + return piecespawn.model; + } + + break; + } + } + + return undefined; } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc index c626fe9..739c351 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_grief.gsc @@ -1,13 +1,14 @@ -//checked includes changed to match cerberus output -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_game_module; -register_game_module() //checked matches cerberus output +register_game_module() { - level.game_module_grief_index = 9; - maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); + level.game_module_grief_index = 9; + maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc index 2eb58a5..09cd690 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat.gsc @@ -1,7 +1,9 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_utility; + diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc index 101f026..f9b9ab1 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_meat_utility.gsc @@ -1,685 +1,666 @@ -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/zmeat; -#include maps/mp/zombies/_zm_audio_announcer; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_game_module_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_utility; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio_announcer; +#include maps\mp\gametypes_zm\zmeat; +#include maps\mp\zombies\_zm_powerups; award_grenades_for_team( team ) { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - lethal_grenade = players[ i ] get_player_lethal_grenade(); - players[ i ] giveweapon( lethal_grenade ); - players[ i ] setweaponammoclip( lethal_grenade, 4 ); - } - i++; - } + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + lethal_grenade = players[i] get_player_lethal_grenade(); + players[i] giveweapon( lethal_grenade ); + players[i] setweaponammoclip( lethal_grenade, 4 ); + } } get_players_on_meat_team( team ) { - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - i++; - } - return players_on_team; + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; } get_alive_players_on_meat_team( team ) { - players = get_players(); - players_on_team = []; - i = 0; - while ( i < players.size ) - { - if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) - { - i++; - continue; - } - else - { - if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - i++; - continue; - } - else - { - players_on_team[ players_on_team.size ] = players[ i ]; - } - } - i++; - } - return players_on_team; + players = get_players(); + players_on_team = []; + + for ( i = 0; i < players.size; i++ ) + { + if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team ) + continue; + + if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + continue; + + players_on_team[players_on_team.size] = players[i]; + } + + return players_on_team; } init_minigun_ring() { - if ( isDefined( level._minigun_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._minigun_ring = spawn( "script_model", ring_pos.origin ); - level._minigun_ring.angles = ring_pos.angles; - level._minigun_ring setmodel( ring_pos.script_parameters ); - level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); - if ( isDefined( level._minigun_ring_clip ) ) - { - level._minigun_ring_clip linkto( level._minigun_ring ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_clip" ); - } - level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); - if ( isDefined( level._minigun_ring_trig ) ) - { - level._minigun_ring_trig enablelinkto(); - level._minigun_ring_trig linkto( level._minigun_ring ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._minigun_ring_trig, "minigun" ); - } - else - { - iprintlnbold( "BUG: no level._minigun_ring_trig" ); - } - level._minigun_ring thread move_ring( ring_pos ); - level._minigun_ring thread rotate_ring( 1 ); + if ( isdefined( level._minigun_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._minigun_ring = spawn( "script_model", ring_pos.origin ); + level._minigun_ring.angles = ring_pos.angles; + level._minigun_ring setmodel( ring_pos.script_parameters ); + level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); + + if ( isdefined( level._minigun_ring_clip ) ) + level._minigun_ring_clip linkto( level._minigun_ring ); + else + iprintlnbold( "BUG: no level._minigun_ring_clip" ); + + level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); + + if ( isdefined( level._minigun_ring_trig ) ) + { + level._minigun_ring_trig enablelinkto(); + level._minigun_ring_trig linkto( level._minigun_ring ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._minigun_ring_trig, "minigun" ); + } + else + iprintlnbold( "BUG: no level._minigun_ring_trig" ); + + level._minigun_ring thread move_ring( ring_pos ); + level._minigun_ring thread rotate_ring( 1 ); } init_ammo_ring() { - if ( isDefined( level._ammo_ring ) ) - { - return; - } - name = level._meat_location + "_meat_ammo"; - ring_pos = getstruct( name, "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._ammo_ring = spawn( "script_model", ring_pos.origin ); - level._ammo_ring.angles = ring_pos.angles; - level._ammo_ring setmodel( ring_pos.script_parameters ); - name = level._meat_location + "_meat_ammo_clip"; - level._ammo_ring_clip = getent( name, "script_noteworthy" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_clip linkto( level._ammo_ring ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_clip" ); - } - name = level._meat_location + "_meat_ammo_trig"; - level._ammo_ring_trig = getent( name, "targetname" ); - if ( isDefined( level._ammo_ring_clip ) ) - { - level._ammo_ring_trig enablelinkto(); - level._ammo_ring_trig linkto( level._ammo_ring ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level thread ring_toss( level._ammo_ring_trig, "ammo" ); - } - else - { - iprintlnbold( "BUG: no level._ammo_ring_trig" ); - } - level._ammo_ring thread move_ring( ring_pos ); - level._ammo_ring thread rotate_ring( 1 ); + if ( isdefined( level._ammo_ring ) ) + return; + + name = level._meat_location + "_meat_ammo"; + ring_pos = getstruct( name, "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._ammo_ring = spawn( "script_model", ring_pos.origin ); + level._ammo_ring.angles = ring_pos.angles; + level._ammo_ring setmodel( ring_pos.script_parameters ); + name = level._meat_location + "_meat_ammo_clip"; + level._ammo_ring_clip = getent( name, "script_noteworthy" ); + + if ( isdefined( level._ammo_ring_clip ) ) + level._ammo_ring_clip linkto( level._ammo_ring ); + else + iprintlnbold( "BUG: no level._ammo_ring_clip" ); + + name = level._meat_location + "_meat_ammo_trig"; + level._ammo_ring_trig = getent( name, "targetname" ); + + if ( isdefined( level._ammo_ring_clip ) ) + { + level._ammo_ring_trig enablelinkto(); + level._ammo_ring_trig linkto( level._ammo_ring ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level thread ring_toss( level._ammo_ring_trig, "ammo" ); + } + else + iprintlnbold( "BUG: no level._ammo_ring_trig" ); + + level._ammo_ring thread move_ring( ring_pos ); + level._ammo_ring thread rotate_ring( 1 ); } init_splitter_ring() { - if ( isDefined( level._splitter_ring ) ) - { - return; - } - ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); - if ( !isDefined( ring_pos ) ) - { - return; - } - level._splitter_ring = spawn( "script_model", ring_pos.origin ); - level._splitter_ring.angles = ring_pos.angles; - level._splitter_ring setmodel( ring_pos.script_parameters ); - level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); - level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 enablelinkto(); - level._splitter_ring_trig2 enablelinkto(); - } - else - { - iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); - } - level._splitter_ring notsolid(); - level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); - level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); - level._meat_icon linkto( level._splitter_ring ); - level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); - if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) ) - { - level._splitter_ring_trig1 linkto( level._splitter_ring ); - level._splitter_ring_trig2 linkto( level._splitter_ring ); - level thread ring_toss( level._splitter_ring_trig1, "splitter" ); - level thread ring_toss( level._splitter_ring_trig2, "splitter" ); - } - level._splitter_ring thread move_ring( ring_pos ); + if ( isdefined( level._splitter_ring ) ) + return; + + ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); + + if ( !isdefined( ring_pos ) ) + return; + + level._splitter_ring = spawn( "script_model", ring_pos.origin ); + level._splitter_ring.angles = ring_pos.angles; + level._splitter_ring setmodel( ring_pos.script_parameters ); + level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); + level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 enablelinkto(); + level._splitter_ring_trig2 enablelinkto(); + } + else + iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); + + level._splitter_ring notsolid(); + level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); + level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); + level._meat_icon linkto( level._splitter_ring ); + level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); + + if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) ) + { + level._splitter_ring_trig1 linkto( level._splitter_ring ); + level._splitter_ring_trig2 linkto( level._splitter_ring ); + level thread ring_toss( level._splitter_ring_trig1, "splitter" ); + level thread ring_toss( level._splitter_ring_trig2, "splitter" ); + } + + level._splitter_ring thread move_ring( ring_pos ); } ring_toss( trig, type ) { - level endon( "end_game" ); - while ( 1 ) - { - while ( isDefined( level._ring_triggered ) && level._ring_triggered ) - { - wait 0,05; - } - if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) - { - if ( level.item_meat istouching( trig ) ) - { - level thread ring_toss_prize( type, trig ); - level._ring_triggered = 1; - level thread ring_cooldown(); - } - } - wait 0,05; - } + level endon( "end_game" ); + + while ( true ) + { + if ( isdefined( level._ring_triggered ) && level._ring_triggered ) + { + wait 0.05; + continue; + } + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) ) + { + if ( level.item_meat istouching( trig ) ) + { + level thread ring_toss_prize( type, trig ); + level._ring_triggered = 1; + level thread ring_cooldown(); + } + } + + wait 0.05; + } } ring_cooldown() { - wait 3; - level._ring_triggered = 0; + wait 3; + level._ring_triggered = 0; } ring_toss_prize( type, trig ) { - switch( type ) - { - case "splitter": - level thread meat_splitter( trig ); - break; - case "minigun": - level thread minigun_prize( trig ); - break; - case "ammo": - level thread ammo_prize( trig ); - break; - } + switch ( type ) + { + case "splitter": + level thread meat_splitter( trig ); + break; + case "minigun": + level thread minigun_prize( trig ); + break; + case "ammo": + level thread ammo_prize( trig ); + break; + } } meat_splitter( trig ) { - level endon( "meat_grabbed" ); - level endon( "meat_kicked" ); - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - exit_trig = getent( trig.target, "targetname" ); - exit_struct = getstruct( trig.target, "targetname" ); - while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - playfx( level._effect[ "fw_burst" ], exit_trig.origin ); - flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) ); - velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) ); - velocity1 = ( velocity[ 0 ] + 75, velocity[ 1 ] + 75, randomintrange( 75, 125 ) ); - velocity2 = ( velocity[ 0 ] - 75, velocity[ 1 ] - 75, randomintrange( 75, 125 ) ); - velocity3 = ( velocity[ 0 ], velocity[ 1 ], 100 ); - level._fake_meats = []; - level._meat_splitter_activated = 1; - org = exit_trig.origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player endon( "disconnect" ); - thread split_meat( player, org, velocity1, velocity2, velocity ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); - wait 0,1; - while ( isDefined( level.splitting_meat ) && level.splitting_meat ) - { - wait 0,05; - } - player._spawning_meat = 0; + level endon( "meat_grabbed" ); + level endon( "meat_kicked" ); + + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + exit_trig = getent( trig.target, "targetname" ); + exit_struct = getstruct( trig.target, "targetname" ); + + while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) ) + wait 0.05; + + while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + playfx( level._effect["fw_burst"], exit_trig.origin ); + flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) ); + velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) ); + velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) ); + velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) ); + velocity3 = ( velocity[0], velocity[1], 100 ); + level._fake_meats = []; + level._meat_splitter_activated = 1; + org = exit_trig.origin; + player = get_players()[0]; + player._spawning_meat = 1; + player endon( "disconnect" ); + thread split_meat( player, org, velocity1, velocity2, velocity ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); + wait 0.1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat ) + wait 0.05; + + player._spawning_meat = 0; } split_meat( player, org, vel1, vel2, vel3 ) { - level.splitting_meat = 1; - level.item_meat cleanup_meat(); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); - wait_network_frame(); - level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); - real_meat = random( level._fake_meats ); - _a330 = level._fake_meats; - _k330 = getFirstArrayKey( _a330 ); - while ( isDefined( _k330 ) ) - { - meat = _a330[ _k330 ]; - if ( real_meat != meat ) - { - meat._fake_meat = 1; - meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup(); - } - else - { - meat._fake_meat = 0; - level.item_meat = meat; - } - _k330 = getNextArrayKey( _a330, _k330 ); - } - level.splitting_meat = 0; + level.splitting_meat = 1; + level.item_meat cleanup_meat(); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); + wait_network_frame(); + level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); + real_meat = random( level._fake_meats ); + + foreach ( meat in level._fake_meats ) + { + if ( real_meat != meat ) + { + meat._fake_meat = 1; + meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup(); + continue; + } + + meat._fake_meat = 0; + level.item_meat = meat; + } + + level.splitting_meat = 0; } minigun_prize( trig ) { - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) - { - return; - } - level thread minigun_toss_cooldown(); - if ( !is_player_valid( level._last_person_to_throw_meat ) ) - { - return; - } - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" ); - level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) + return; + + level thread minigun_toss_cooldown(); + + if ( !is_player_valid( level._last_person_to_throw_meat ) ) + return; + + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" ); + level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); } ammo_prize( trig ) { - while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) - { - wait 0,05; - } - if ( !isDefined( level.item_meat ) ) - { - return; - } - if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) - { - return; - } - playfx( level._effect[ "poltergeist" ], trig.origin ); - level thread ammo_toss_cooldown(); - level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" ); - level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); + while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) ) + wait 0.05; + + if ( !isdefined( level.item_meat ) ) + return; + + if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) + return; + + playfx( level._effect["poltergeist"], trig.origin ); + level thread ammo_toss_cooldown(); + level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" ); + level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); } minigun_toss_cooldown() { - level._minigun_toss_cooldown = 1; - if ( isDefined( level._minigun_icon ) ) - { - level._minigun_icon delete(); - } - waittill_any_or_timeout( 120, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._minigun_ring_trig.origin ); - level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); - level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); - level._minigun_icon linkto( level._minigun_ring ); - level._minigun_icon setclientfield( "ring_glowfx", 1 ); - level._minigun_toss_cooldown = 0; + level._minigun_toss_cooldown = 1; + + if ( isdefined( level._minigun_icon ) ) + level._minigun_icon delete(); + + waittill_any_or_timeout( 120, "meat_end" ); + playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin ); + level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); + level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); + level._minigun_icon linkto( level._minigun_ring ); + level._minigun_icon setclientfield( "ring_glowfx", 1 ); + level._minigun_toss_cooldown = 0; } ammo_toss_cooldown() { - level._ammo_toss_cooldown = 1; - if ( isDefined( level._ammo_icon ) ) - { - level._ammo_icon delete(); - } - waittill_any_or_timeout( 60, "meat_end" ); - playfx( level._effect[ "poltergeist" ], level._ammo_ring_trig.origin ); - level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); - level._ammo_icon setmodel( "zombie_ammocan" ); - level._ammo_icon linkto( level._ammo_ring ); - level._ammo_icon setclientfield( "ring_glowfx", 1 ); - level._ammo_toss_cooldown = 0; + level._ammo_toss_cooldown = 1; + + if ( isdefined( level._ammo_icon ) ) + level._ammo_icon delete(); + + waittill_any_or_timeout( 60, "meat_end" ); + playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin ); + level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); + level._ammo_icon setmodel( "zombie_ammocan" ); + level._ammo_icon linkto( level._ammo_ring ); + level._ammo_icon setclientfield( "ring_glowfx", 1 ); + level._ammo_toss_cooldown = 0; } wait_for_team_death( team ) { - level endon( "meat_end" ); - encounters_team = undefined; - while ( 1 ) - { - wait 1; - while ( isDefined( level._checking_for_save ) && level._checking_for_save ) - { - wait 0,1; - } - alive_team_players = get_alive_players_on_meat_team( team ); - while ( alive_team_players.size > 0 ) - { - encounters_team = alive_team_players[ 0 ]._encounters_team; - } - } - if ( !isDefined( encounters_team ) ) - { - return; - } - winning_team = "A"; - if ( encounters_team == "A" ) - { - winning_team = "B"; - } - level notify( "meat_end" ); + level endon( "meat_end" ); + encounters_team = undefined; + + while ( true ) + { + wait 1; + + while ( isdefined( level._checking_for_save ) && level._checking_for_save ) + wait 0.1; + + alive_team_players = get_alive_players_on_meat_team( team ); + + if ( alive_team_players.size > 0 ) + { + encounters_team = alive_team_players[0]._encounters_team; + continue; + } + + break; + } + + if ( !isdefined( encounters_team ) ) + return; + + winning_team = "A"; + + if ( encounters_team == "A" ) + winning_team = "B"; + + level notify( "meat_end", winning_team ); } check_should_save_player( team ) { - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - level._checking_for_save = 1; - players = get_players_on_meat_team( team ); - i = 0; - while ( i < players.size ) - { - player = players[ i ]; - if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != player._meat_team ) - { - break; - } - else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) - { - break; - } - else - { - wait 0,05; - } - } - if ( !isDefined( player ) ) - { - level._checking_for_save = 0; - return 0; - } - if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player ) - { - level._checking_for_save = 0; - return 0; - } - if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( player ); - return 1; - } - } - } - i++; - } - level._checking_for_save = 0; - return 0; + if ( !isdefined( level._meat_on_team ) ) + return false; + + level._checking_for_save = 1; + players = get_players_on_meat_team( team ); + + for ( i = 0; i < players.size; i++ ) + { + player = players[i]; + + if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) + { + if ( level._meat_on_team != player._meat_team ) + break; + + if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) + break; + + wait 0.05; + } + + if ( !isdefined( player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) ) + { + level._checking_for_save = 0; + return false; + } + + if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player ) + { + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( player ); + return true; + } + } + } + } + + level._checking_for_save = 0; + return false; } watch_save_player() { - if ( !isDefined( level._meat_on_team ) ) - { - return 0; - } - if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) - { - return 0; - } - level._checking_for_save = 1; - while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) - { - if ( level._meat_on_team != self._meat_team ) - { - } - else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team ) - { - } - else - { - wait 0,05; - } - } - if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) - { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - level thread revive_saved_player( self ); - return 1; - } - } - level._checking_for_save = 0; - return 0; + if ( !isdefined( level._meat_on_team ) ) + return false; + + if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) + return false; + + level._checking_for_save = 1; + + while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) ) + { + if ( level._meat_on_team != self._meat_team ) + break; + + if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team ) + break; + + wait 0.05; + } + + if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self ) + { + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + level thread revive_saved_player( self ); + return true; + } + } + + level._checking_for_save = 0; + return false; } revive_saved_player( player ) { - player endon( "disconnect" ); - player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); - player playsound( level.zmb_laugh_alias ); - wait 0,25; - playfx( level._effect[ "poltergeist" ], player.origin ); - playsoundatposition( "zmb_bolt", player.origin ); - earthquake( 0,5, 0,75, player.origin, 1000 ); - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); - player._saved_by_throw++; - level._checking_for_save = 0; + player endon( "disconnect" ); + player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); + player playsound( level.zmb_laugh_alias ); + wait 0.25; + playfx( level._effect["poltergeist"], player.origin ); + playsoundatposition( "zmb_bolt", player.origin ); + earthquake( 0.5, 0.75, player.origin, 1000 ); + player thread maps\mp\zombies\_zm_laststand::auto_revive( player ); + player._saved_by_throw++; + level._checking_for_save = 0; } get_game_module_players( player ) { - return get_players_on_meat_team( player._meat_team ); + return get_players_on_meat_team( player._meat_team ); } item_meat_spawn( origin ) { - org = origin; - player = get_players()[ 0 ]; - player._spawning_meat = 1; - player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) ); - playsoundatposition( "zmb_spawn_powerup", org ); - wait 0,1; - player._spawning_meat = undefined; + org = origin; + player = get_players()[0]; + player._spawning_meat = 1; + player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) ); + playsoundatposition( "zmb_spawn_powerup", org ); + wait 0.1; + player._spawning_meat = undefined; } init_item_meat( gametype ) { - if ( gametype == "zgrief" ) - { - set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); - } - else - { - set_gamemode_var_once( "item_meat_name", "item_head_zm" ); - set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); - } - precacheitem( get_gamemode_var( "item_meat_name" ) ); - set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); - level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); - level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); - level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); + if ( gametype == "zgrief" ) + { + set_gamemode_var_once( "item_meat_name", "item_meat_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_meat_world" ); + } + else + { + set_gamemode_var_once( "item_meat_name", "item_head_zm" ); + set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); + } + + precacheitem( get_gamemode_var( "item_meat_name" ) ); + set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); + level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); + level.meat_pickupsound = getweaponpickupsound( level.meat_weaponidx ); + level.meat_pickupsoundplayer = getweaponpickupsoundplayer( level.meat_weaponidx ); } meat_intro( launch_spot ) { - flag_wait( "start_encounters_match_logic" ); - wait 3; - level thread multi_launch( launch_spot ); - launch_meat( launch_spot ); - drop_meat( level._meat_start_point ); - level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); + flag_wait( "start_encounters_match_logic" ); + wait 3; + level thread multi_launch( launch_spot ); + launch_meat( launch_spot ); + drop_meat( level._meat_start_point ); + level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); } launch_meat( launch_spot ) { - level waittill( "launch_meat" ); - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - spot = random( spots ); - meat = spawn( "script_model", spot.origin ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - wait randomfloatrange( 0,2, 0,5 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); - wait randomfloatrange( 0,5, 0,75 ); - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_burst" ], meat.origin ); - meat delete(); - } + level waittill( "launch_meat" ); + + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + spot = random( spots ); + meat = spawn( "script_model", spot.origin ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + wait( randomfloatrange( 0.2, 0.5 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); + wait( randomfloatrange( 0.5, 0.75 ) ); + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_burst"], meat.origin ); + meat delete(); + } } multi_launch( launch_spot ) { - spots = getstructarray( launch_spot, "targetname" ); - if ( isDefined( spots ) && spots.size > 0 ) - { - x = 0; - while ( x < 3 ) - { - i = 0; - while ( i < spots.size ) - { - delay = randomfloatrange( 0,1, 0,25 ); - level thread fake_launch( spots[ i ], delay ); - i++; - } - wait randomfloatrange( 0,25, 0,75 ); - if ( x > 1 ) - { - level notify( "launch_meat" ); - } - x++; - } - } - else wait randomfloatrange( 0,25, 0,75 ); - level notify( "launch_meat" ); + spots = getstructarray( launch_spot, "targetname" ); + + if ( isdefined( spots ) && spots.size > 0 ) + { + for ( x = 0; x < 3; x++ ) + { + for ( i = 0; i < spots.size; i++ ) + { + delay = randomfloatrange( 0.1, 0.25 ); + level thread fake_launch( spots[i], delay ); + } + + wait( randomfloatrange( 0.25, 0.75 ) ); + + if ( x > 1 ) + level notify( "launch_meat" ); + } + } + else + { + wait( randomfloatrange( 0.25, 0.75 ) ); + level notify( "launch_meat" ); + } } fake_launch( launch_spot, delay ) { - wait delay; - wait randomfloatrange( 0,1, 4 ); - meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); - meat setmodel( "tag_origin" ); - wait_network_frame(); - playfxontag( level._effect[ "fw_trail_cheap" ], meat, "tag_origin" ); - meat playloopsound( "zmb_souls_loop", 0,75 ); - dest = launch_spot; - while ( isDefined( dest ) && isDefined( dest.target ) ) - { - random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); - new_dest = getstruct( dest.target, "targetname" ); - dest = new_dest; - dist = distance( new_dest.origin + random_offset, meat.origin ); - time = dist / 700; - meat moveto( new_dest.origin + random_offset, time ); - meat waittill( "movedone" ); - } - meat playsound( "zmb_souls_end" ); - playfx( level._effect[ "fw_pre_burst" ], meat.origin ); - meat delete(); + wait( delay ); + wait( randomfloatrange( 0.1, 4 ) ); + meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); + meat setmodel( "tag_origin" ); + wait_network_frame(); + playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" ); + meat playloopsound( "zmb_souls_loop", 0.75 ); + dest = launch_spot; + + while ( isdefined( dest ) && isdefined( dest.target ) ) + { + random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); + new_dest = getstruct( dest.target, "targetname" ); + dest = new_dest; + dist = distance( new_dest.origin + random_offset, meat.origin ); + time = dist / 700; + meat moveto( new_dest.origin + random_offset, time ); + + meat waittill( "movedone" ); + } + + meat playsound( "zmb_souls_end" ); + playfx( level._effect["fw_pre_burst"], meat.origin ); + meat delete(); } drop_meat( drop_spot ) { - meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) ); - meat setmodel( "tag_origin" ); - dist = distance( meat.origin, drop_spot ); - time = dist / 400; - wait 2; - meat moveto( drop_spot, time ); - wait_network_frame(); - playfxontag( level._effect[ "fw_drop" ], meat, "tag_origin" ); - meat waittill( "movedone" ); - playfx( level._effect[ "fw_impact" ], drop_spot ); - level notify( "reset_meat" ); - meat delete(); + meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) ); + meat setmodel( "tag_origin" ); + dist = distance( meat.origin, drop_spot ); + time = dist / 400; + wait 2; + meat moveto( drop_spot, time ); + wait_network_frame(); + playfxontag( level._effect["fw_drop"], meat, "tag_origin" ); + + meat waittill( "movedone" ); + + playfx( level._effect["fw_impact"], drop_spot ); + level notify( "reset_meat" ); + meat delete(); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc index 76fa367..aa16bce 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_game_module_utility.gsc @@ -1,43 +1,46 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_game_module_meat; -#include maps/mp/zombies/_zm_game_module_meat_utility; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\gametypes_zm\_hud_util; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module_meat_utility; +#include maps\mp\zombies\_zm_game_module_meat; -init_item_meat() //checked matches cerberus output +init_item_meat() { - level.item_meat_name = "item_meat_zm"; - precacheitem( level.item_meat_name ); + level.item_meat_name = "item_meat_zm"; + precacheitem( level.item_meat_name ); } -move_ring( ring ) //checked changed to match cerberus output +move_ring( ring ) { - positions = getstructarray( ring.target, "targetname" ); - positions = array_randomize( positions ); - level endon( "end_game" ); - while ( 1 ) - { - foreach ( position in positions ) - { - self moveto( position.origin, randomintrange( 30, 45 ) ); - self waittill( "movedone" ); - } - } + positions = getstructarray( ring.target, "targetname" ); + positions = array_randomize( positions ); + level endon( "end_game" ); + + while ( true ) + { + foreach ( position in positions ) + { + self moveto( position.origin, randomintrange( 30, 45 ) ); + + self waittill( "movedone" ); + } + } } -rotate_ring( forward ) //checked matches cerberus output +rotate_ring( forward ) { - level endon( "end_game" ); - dir = -360; - if ( forward ) - { - dir = 360; - } - while ( 1 ) - { - self rotateyaw( dir, 9 ); - wait 9; - } + level endon( "end_game" ); + dir = -360; + + if ( forward ) + dir = 360; + + while ( true ) + { + self rotateyaw( dir, 9 ); + wait 9; + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc index 991f0a3..6a796a3 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_magicbox_prison.gsc @@ -1,217 +1,209 @@ -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_magicbox; init() { - registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" ); - registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" ); - registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" ); - registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "system_elements/fx_null" ); - level._effect[ "box_gone_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" ); - level._effect[ "box_here_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" ); - level._effect[ "box_is_open" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" ); - level._effect[ "box_is_locked" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" ); - level._effect[ "box_is_leaving" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" ); - level.using_locked_magicbox = 1; - level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red"; - precachemodel( level.chest_joker_model ); - level.chest_joker_custom_movement = ::custom_joker_movement; - level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; - level thread wait_then_create_base_magic_box_fx(); - level thread handle_fire_sale(); + registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" ); + registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" ); + registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" ); + registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" ); + level._effect["lght_marker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" ); + level._effect["poltergeist"] = loadfx( "system_elements/fx_null" ); + level._effect["box_gone_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" ); + level._effect["box_here_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" ); + level._effect["box_is_open"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" ); + level._effect["box_is_locked"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" ); + level._effect["box_is_leaving"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" ); + level.using_locked_magicbox = 1; + level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red"; + precachemodel( level.chest_joker_model ); + level.chest_joker_custom_movement = ::custom_joker_movement; + level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; + level thread wait_then_create_base_magic_box_fx(); + level thread handle_fire_sale(); } custom_joker_movement() { - v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 ); - self.weapon_model delete(); - m_lock = spawn( "script_model", v_origin ); - m_lock setmodel( level.chest_joker_model ); - m_lock.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); - wait 0,5; - level notify( "weapon_fly_away_start" ); - wait 1; - m_lock rotateyaw( 3000, 4, 4 ); - wait 3; - m_lock movez( 20, 0,5, 0,5 ); - m_lock waittill( "movedone" ); - m_lock movez( -100, 0,5, 0,5 ); - m_lock waittill( "movedone" ); - m_lock delete(); - self notify( "box_moving" ); - level notify( "weapon_fly_away_end" ); + v_origin = self.weapon_model.origin - vectorscale( ( 0, 0, 1 ), 5.0 ); + self.weapon_model delete(); + m_lock = spawn( "script_model", v_origin ); + m_lock setmodel( level.chest_joker_model ); + m_lock.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); + wait 0.5; + level notify( "weapon_fly_away_start" ); + wait 1; + m_lock rotateyaw( 3000, 4, 4 ); + wait 3; + m_lock movez( 20, 0.5, 0.5 ); + + m_lock waittill( "movedone" ); + + m_lock movez( -100, 0.5, 0.5 ); + + m_lock waittill( "movedone" ); + + m_lock delete(); + self notify( "box_moving" ); + level notify( "weapon_fly_away_end" ); } wait_then_create_base_magic_box_fx() { - while ( !isDefined( level.chests ) ) - { - wait 0,5; - } - while ( !isDefined( level.chests[ level.chests.size - 1 ].zbarrier ) ) - { - wait 0,5; - } - _a92 = level.chests; - _k92 = getFirstArrayKey( _a92 ); - while ( isDefined( _k92 ) ) - { - chest = _a92[ _k92 ]; - chest.zbarrier setclientfield( "magicbox_initial_fx", 1 ); - _k92 = getNextArrayKey( _a92, _k92 ); - } + while ( !isdefined( level.chests ) ) + wait 0.5; + + while ( !isdefined( level.chests[level.chests.size - 1].zbarrier ) ) + wait 0.5; + + foreach ( chest in level.chests ) + chest.zbarrier setclientfield( "magicbox_initial_fx", 1 ); } set_magic_box_zbarrier_state( state ) { - i = 0; - while ( i < self getnumzbarrierpieces() ) - { - self hidezbarrierpiece( i ); - i++; - } - self notify( "zbarrier_state_change" ); - switch( state ) - { - case "away": - self showzbarrierpiece( 0 ); - self.state = "away"; - self.owner.is_locked = 0; - break; - case "arriving": - self showzbarrierpiece( 1 ); - self thread magic_box_arrives(); - self.state = "arriving"; - break; - case "initial": - self showzbarrierpiece( 1 ); - self thread magic_box_initial(); - thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think ); - self.state = "close"; - break; - case "open": - self showzbarrierpiece( 2 ); - self thread magic_box_opens(); - self.state = "open"; - break; - case "close": - self showzbarrierpiece( 2 ); - self thread magic_box_closes(); - self.state = "close"; - break; - case "leaving": - self showzbarrierpiece( 1 ); - self thread magic_box_leaves(); - self.state = "leaving"; - self.owner.is_locked = 0; - break; - default: - if ( isDefined( level.custom_magicbox_state_handler ) ) - { - self [[ level.custom_magicbox_state_handler ]]( state ); - } - break; - } + for ( i = 0; i < self getnumzbarrierpieces(); i++ ) + self hidezbarrierpiece( i ); + + self notify( "zbarrier_state_change" ); + + switch ( state ) + { + case "away": + self showzbarrierpiece( 0 ); + self.state = "away"; + self.owner.is_locked = 0; + break; + case "arriving": + self showzbarrierpiece( 1 ); + self thread magic_box_arrives(); + self.state = "arriving"; + break; + case "initial": + self showzbarrierpiece( 1 ); + self thread magic_box_initial(); + thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think ); + self.state = "close"; + break; + case "open": + self showzbarrierpiece( 2 ); + self thread magic_box_opens(); + self.state = "open"; + break; + case "close": + self showzbarrierpiece( 2 ); + self thread magic_box_closes(); + self.state = "close"; + break; + case "leaving": + self showzbarrierpiece( 1 ); + self thread magic_box_leaves(); + self.state = "leaving"; + self.owner.is_locked = 0; + break; + default: + if ( isdefined( level.custom_magicbox_state_handler ) ) + self [[ level.custom_magicbox_state_handler ]]( state ); + + break; + } } magic_box_initial() { - self setzbarrierpiecestate( 1, "open" ); - wait 1; - self setclientfield( "magicbox_amb_fx", 1 ); + self setzbarrierpiecestate( 1, "open" ); + wait 1; + self setclientfield( "magicbox_amb_fx", 1 ); } magic_box_arrives() { - self setclientfield( "magicbox_leaving_fx", 0 ); - self setclientfield( "magicbox_amb_fx", 1 ); - self setzbarrierpiecestate( 1, "opening" ); - while ( self getzbarrierpiecestate( 1 ) == "opening" ) - { - wait 0,05; - } - self notify( "arrived" ); - self.state = "close"; + self setclientfield( "magicbox_leaving_fx", 0 ); + self setclientfield( "magicbox_amb_fx", 1 ); + self setzbarrierpiecestate( 1, "opening" ); + + while ( self getzbarrierpiecestate( 1 ) == "opening" ) + wait 0.05; + + self notify( "arrived" ); + self.state = "close"; } magic_box_leaves() { - self setclientfield( "magicbox_leaving_fx", 1 ); - self setclientfield( "magicbox_open_fx", 0 ); - self setzbarrierpiecestate( 1, "closing" ); - self playsound( "zmb_hellbox_rise" ); - while ( self getzbarrierpiecestate( 1 ) == "closing" ) - { - wait 0,1; - } - self notify( "left" ); - self setclientfield( "magicbox_amb_fx", 0 ); + self setclientfield( "magicbox_leaving_fx", 1 ); + self setclientfield( "magicbox_open_fx", 0 ); + self setzbarrierpiecestate( 1, "closing" ); + self playsound( "zmb_hellbox_rise" ); + + while ( self getzbarrierpiecestate( 1 ) == "closing" ) + wait 0.1; + + self notify( "left" ); + self setclientfield( "magicbox_amb_fx", 0 ); } magic_box_opens() { - self setclientfield( "magicbox_open_fx", 1 ); - self setzbarrierpiecestate( 2, "opening" ); - self playsound( "zmb_hellbox_open" ); - while ( self getzbarrierpiecestate( 2 ) == "opening" ) - { - wait 0,1; - } - self notify( "opened" ); + self setclientfield( "magicbox_open_fx", 1 ); + self setzbarrierpiecestate( 2, "opening" ); + self playsound( "zmb_hellbox_open" ); + + while ( self getzbarrierpiecestate( 2 ) == "opening" ) + wait 0.1; + + self notify( "opened" ); } magic_box_closes() { - self setzbarrierpiecestate( 2, "closing" ); - self playsound( "zmb_hellbox_close" ); - while ( self getzbarrierpiecestate( 2 ) == "closing" ) - { - wait 0,1; - } - self notify( "closed" ); - self setclientfield( "magicbox_open_fx", 0 ); + self setzbarrierpiecestate( 2, "closing" ); + self playsound( "zmb_hellbox_close" ); + + while ( self getzbarrierpiecestate( 2 ) == "closing" ) + wait 0.1; + + self notify( "closed" ); + self setclientfield( "magicbox_open_fx", 0 ); } magic_box_do_weapon_rise() { - self endon( "box_hacked_respin" ); - self setzbarrierpiecestate( 3, "closed" ); - self setzbarrierpiecestate( 4, "closed" ); - wait_network_frame(); - self zbarrierpieceuseboxriselogic( 3 ); - self zbarrierpieceuseboxriselogic( 4 ); - self showzbarrierpiece( 3 ); - self showzbarrierpiece( 4 ); - self setzbarrierpiecestate( 3, "opening" ); - self setzbarrierpiecestate( 4, "opening" ); - while ( self getzbarrierpiecestate( 3 ) != "open" ) - { - wait 0,5; - } - self hidezbarrierpiece( 3 ); - self hidezbarrierpiece( 4 ); + self endon( "box_hacked_respin" ); + self setzbarrierpiecestate( 3, "closed" ); + self setzbarrierpiecestate( 4, "closed" ); + wait_network_frame(); + self zbarrierpieceuseboxriselogic( 3 ); + self zbarrierpieceuseboxriselogic( 4 ); + self showzbarrierpiece( 3 ); + self showzbarrierpiece( 4 ); + self setzbarrierpiecestate( 3, "opening" ); + self setzbarrierpiecestate( 4, "opening" ); + + while ( self getzbarrierpiecestate( 3 ) != "open" ) + wait 0.5; + + self hidezbarrierpiece( 3 ); + self hidezbarrierpiece( 4 ); } handle_fire_sale() { - while ( 1 ) - { - level waittill( "fire_sale_off" ); - i = 0; - while ( i < level.chests.size ) - { - if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) ) - { - level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 0 ); - } - i++; - } - } + while ( true ) + { + level waittill( "fire_sale_off" ); + + for ( i = 0; i < level.chests.size; i++ ) + { + if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) ) + level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 ); + } + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc index fc1ef72..adfca7a 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_melee_weapon.gsc @@ -1,556 +1,580 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ); - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ } -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - if ( isDefined( stub ) ) - { - stub.hint_string = hint_string; - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.has_weapon = has_weapon; - stub.give_weapon = give_weapon; - stub.take_weapon = take_weapon; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } } add_stub( stub, weapon_name ) { - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( stub ) && isDefined( melee_weapon ) ) - { - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn ); - } + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); } give_melee_weapon_by_name( weapon_name ) { - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( melee_weapon ) ) - { - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined ); - } + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); } -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.has_weapon = has_weapon; - melee_weapon.give_weapon = give_weapon; - melee_weapon.take_weapon = take_weapon; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; } spectator_respawn_all() { - i = 0; - while ( i < level._melee_weapons.size ) - { - self [[ level._melee_weapons[ i ].take_weapon ]](); - i++; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon ); - i++; - } + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); } -spectator_respawn( wallbuy_targetname, take_weapon, has_weapon ) +spectator_respawn( wallbuy_targetname, weapon_name ) { - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( players[ j ] [[ has_weapon ]]() ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } } trigger_hide_all() { - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); } trigger_hide( wallbuy_targetname ) { - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); } has_any_ballistic_knife() { - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; } has_upgraded_ballistic_knife() { - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; } give_ballistic_knife( weapon_string, upgraded ) { - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; } change_melee_weapon( weapon_name, current_weapon ) { - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; } -melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) { - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - has_weapon = self.stub.has_weapon; - give_weapon = self.stub.give_weapon; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] [[ has_weapon ]]() ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player [[ has_weapon ]](); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } } melee_weapon_show( player ) { - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); } -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger ) +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) { - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - self [[ give_weapon ]](); - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoplayer( self ); - } - self trigger_hide_all(); - } + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } } do_melee_weapon_flourish_begin( flourish_weapon_name ) { - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; } do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) { /# - assert( !is_zombie_perk_bottle( gun ) ); + assert( !is_zombie_perk_bottle( gun ) ); #/ /# - assert( gun != level.revive_tool ); + assert( gun != level.revive_tool ); #/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc index 1d99917..4dc086f 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc @@ -1,169 +1,172 @@ -//checked includes match cerberus output -#include maps/mp/_visionset_mgr; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\_visionset_mgr; -enable_divetonuke_perk_for_level() //checked matches cerberus output +enable_divetonuke_perk_for_level() { - maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" ); - maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache ); - maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield ); - maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think ); - maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); + maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" ); + maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache ); + maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield ); + maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think ); + maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); } -init_divetonuke() //checked matches cerberus output +init_divetonuke() { - level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; - maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); - level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); - set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); - set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); - set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); + level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; + maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); + level._effect["divetonuke_groundhit"] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); + set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); + set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); + set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); } -divetonuke_precache() //checked matches cerberus output +divetonuke_precache() { - if ( isDefined( level.divetonuke_precache_override_func ) ) - { - [[ level.divetonuke_precache_override_func ]](); - return; - } - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "zombie_vending_nuke" ); - precachemodel( "zombie_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "divetonuke" ] = spawnstruct(); - level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; - level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; - level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; + if ( isdefined( level.divetonuke_precache_override_func ) ) + { + [[ level.divetonuke_precache_override_func ]](); + return; + } + + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "zombie_vending_nuke" ); + precachemodel( "zombie_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["divetonuke"] = spawnstruct(); + level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke"; + level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on"; } -divetonuke_register_clientfield() //checked matches cerberus output +divetonuke_register_clientfield() { - registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); + registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); } -divetonuke_set_clientfield( state ) //checked matches cerberus output +divetonuke_set_clientfield( state ) { - self setclientfieldtoplayer( "perk_dive_to_nuke", state ); + self setclientfieldtoplayer( "perk_dive_to_nuke", state ); } -divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output +divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) { - use_trigger.script_sound = "mus_perks_phd_jingle"; - use_trigger.script_string = "divetonuke_perk"; - use_trigger.script_label = "mus_perks_phd_sting"; - use_trigger.target = "vending_divetonuke"; - perk_machine.script_string = "divetonuke_perk"; - perk_machine.targetname = "vending_divetonuke"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "divetonuke_perk"; - } + use_trigger.script_sound = "mus_perks_phd_jingle"; + use_trigger.script_string = "divetonuke_perk"; + use_trigger.script_label = "mus_perks_phd_sting"; + use_trigger.target = "vending_divetonuke"; + perk_machine.script_string = "divetonuke_perk"; + perk_machine.targetname = "vending_divetonuke"; + + if ( isdefined( bump_trigger ) ) + bump_trigger.script_string = "divetonuke_perk"; } -divetonuke_perk_machine_think() //checked changed to match cerberus output +divetonuke_perk_machine_think() { - init_divetonuke(); - while ( 1 ) - { - machine = getentarray( "vending_divetonuke", "targetname" ); - machine_triggers = getentarray( "vending_divetonuke", "target" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model ); - } - array_thread( machine_triggers, ::set_power_on, 0 ); - level thread do_initial_power_off_callback( machine, "divetonuke" ); - level waittill( "divetonuke_on" ); - for ( i = 0; i < machine.size; i++ ) - { - machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "divetonuke_light" ); - machine[ i ] thread play_loop_on_machine(); - } - level notify( "specialty_flakjacket_power_on" ); - array_thread( machine_triggers, ::set_power_on, 1 ); - if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) ) - { - array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback ); - } - level waittill( "divetonuke_off" ); - if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) ) - { - array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback ); - } - array_thread( machine, ::turn_perk_off ); - } + init_divetonuke(); + + while ( true ) + { + machine = getentarray( "vending_divetonuke", "targetname" ); + machine_triggers = getentarray( "vending_divetonuke", "target" ); + + for ( i = 0; i < machine.size; i++ ) + machine[i] setmodel( level.machine_assets["divetonuke"].off_model ); + + array_thread( machine_triggers, ::set_power_on, 0 ); + level thread do_initial_power_off_callback( machine, "divetonuke" ); + + level waittill( "divetonuke_on" ); + + for ( i = 0; i < machine.size; i++ ) + { + machine[i] setmodel( level.machine_assets["divetonuke"].on_model ); + machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 ); + machine[i] playsound( "zmb_perks_power_on" ); + machine[i] thread perk_fx( "divetonuke_light" ); + machine[i] thread play_loop_on_machine(); + } + + level notify( "specialty_flakjacket_power_on" ); + array_thread( machine_triggers, ::set_power_on, 1 ); + + if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) ) + array_thread( machine, level.machine_assets["divetonuke"].power_on_callback ); + + level waittill( "divetonuke_off" ); + + if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) ) + array_thread( machine, level.machine_assets["divetonuke"].power_off_callback ); + + array_thread( machine, ::turn_perk_off ); + } } -divetonuke_host_migration_func() //checked changed to match cerberus output +divetonuke_host_migration_func() { - flop = getentarray( "vending_divetonuke", "targetname" ); - foreach ( perk in flop ) - { - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model ) - { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "divetonuke_light" ); - } - } + flop = getentarray( "vending_divetonuke", "targetname" ); + + foreach ( perk in flop ) + { + if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model ) + { + perk perk_fx( undefined, 1 ); + perk thread perk_fx( "divetonuke_light" ); + } + } } divetonuke_explode( attacker, origin ) { - radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; - min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; - max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) - { - attacker thread divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); - } - else - { - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); - } - playfx( level._effect[ "divetonuke_groundhit" ], origin ); - attacker playsound( "zmb_phdflop_explo" ); - maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); - wait 1; - maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); + radius = level.zombie_vars["zombie_perk_divetonuke_radius"]; + min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"]; + max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"]; + + if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) + attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + else + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + + playfx( level._effect["divetonuke_groundhit"], origin ); + attacker playsound( "zmb_phdflop_explo" ); + maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); + wait 1; + maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); } -divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, damage_mod) +divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod ) { - self endon( "disconnect" ); - a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); - network_stall_counter = 0; - if ( isdefined( a_zombies ) ) - { - i = 0; - while ( i < a_zombies.size ) - { - e_zombie = a_zombies[ i ]; - if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) - { - i++; - continue; - } - dist = distance( e_zombie.origin, origin ); - damage = ( min_damage + max_damage ) - min_damage * ( 1 - ( dist / radius ) ); - e_zombie dodamage(damage, e_zombie.origin, self, self, 0, damage_mod); - network_stall_counter--; - if ( network_stall_counter <= 0 ) - { - wait_network_frame(); - network_stall_counter = randomintrange( 1, 3 ); - } - i++; - } - } + self endon( "disconnect" ); + a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + network_stall_counter = 0; + + if ( isdefined( a_zombies ) ) + { + for ( i = 0; i < a_zombies.size; i++ ) + { + e_zombie = a_zombies[i]; + + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + continue; + + dist = distance( e_zombie.origin, origin ); + damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius ); + e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod ); + network_stall_counter--; + + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + } + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_electric_cherry.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_electric_cherry.gsc deleted file mode 100644 index 6c32c17..0000000 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_perk_electric_cherry.gsc +++ /dev/null @@ -1,391 +0,0 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/shared; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -enable_electric_cherry_perk_for_level() -{ - maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" ); - maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache ); - maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield ); - maps/mp/zombies/_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost ); - maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think ); - maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func ); -} - -init_electric_cherry() -{ - level.custom_laststand_func = ::electric_cherry_laststand; - set_zombie_var( "tesla_head_gib_chance", 50 ); - registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" ); -} - -electic_cherry_precache() -{ - precacheitem( "zombie_perk_bottle_cherry" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "p6_zm_vending_electric_cherry_off" ); - precachemodel( "p6_zm_vending_electric_cherry_on" ); - precachestring( &"ZM_PRISON_PERK_CHERRY" ); - level._effect[ "electriccherry" ] = loadfx( "misc/fx_zombie_cola_on" ); - level._effect[ "electric_cherry_explode" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" ); - level._effect[ "electric_cherry_reload_small" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" ); - level._effect[ "electric_cherry_reload_medium" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" ); - level._effect[ "electric_cherry_reload_large" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" ); - level._effect[ "tesla_shock" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock" ); - level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); -} - -electric_cherry_register_clientfield() -{ - registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" ); -} - -electric_cherry_set_clientfield( state ) -{ - self setclientfieldtoplayer( "perk_electric_cherry", state ); -} - -electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) -{ - use_trigger.script_sound = "mus_perks_cherry_jingle"; - use_trigger.script_string = "electric_cherry_perk"; - use_trigger.script_label = "mus_perks_cherry_sting"; - use_trigger.target = "vending_electriccherry"; - perk_machine.script_string = "electriccherry_perk"; - perk_machine.targetname = "vendingelectric_cherry"; - if ( isDefined( bump_trigger ) ) - { - bump_trigger.script_string = "electriccherry_perk"; - } -} - -electric_cherry_perk_machine_think() -{ - init_electric_cherry(); - while ( 1 ) - { - machine = getentarray( "vendingelectric_cherry", "targetname" ); - machine_triggers = getentarray( "vending_electriccherry", "target" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" ); - i++; - } - level thread do_initial_power_off_callback( machine, "electriccherry" ); - array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 0 ); - level waittill( "electric_cherry_on" ); - i = 0; - while ( i < machine.size ) - { - machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] thread perk_fx( "electriccherry" ); - machine[ i ] thread play_loop_on_machine(); - i++; - } - level notify( "specialty_grenadepulldeath_power_on" ); - array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 1 ); - level waittill( "electric_cherry_off" ); - array_thread( machine, ::maps/mp/zombies/_zm_perks::turn_perk_off ); - } -} - -electric_cherry_host_migration_func() -{ - a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" ); - _a125 = a_electric_cherry_perk_machines; - _k125 = getFirstArrayKey( _a125 ); - while ( isDefined( _k125 ) ) - { - perk_machine = _a125[ _k125 ]; - if ( isDefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" ) - { - perk_machine perk_fx( undefined, 1 ); - perk_machine thread perk_fx( "electriccherry" ); - } - _k125 = getNextArrayKey( _a125, _k125 ); - } -} - -electric_cherry_laststand() -{ - visionsetlaststand( "zombie_last_stand", 1 ); - if ( isDefined( self ) ) - { - playfx( level._effect[ "electric_cherry_explode" ], self.origin ); - self playsound( "zmb_cherry_explode" ); - self notify( "electric_cherry_start" ); - wait 0,05; - a_zombies = get_round_enemy_array(); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); - i = 0; - while ( i < a_zombies.size ) - { - if ( isalive( self ) ) - { - if ( a_zombies[ i ].health <= 1000 ) - { - a_zombies[ i ] thread electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else - { - a_zombies[ i ] thread electric_cherry_stun(); - a_zombies[ i ] thread electric_cherry_shock_fx(); - } - wait 0,1; - a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" ); - } - i++; - } - self notify( "electric_cherry_end" ); - } -} - -electric_cherry_death_fx() -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ fx ], self, tag ); - if ( isDefined( self.tesla_head_gib_func ) && !self.head_gibbed ) - { - [[ self.tesla_head_gib_func ]](); - } -} - -electric_cherry_shock_fx() -{ - self endon( "death" ); - tag = "J_SpineUpper"; - fx = "tesla_shock_secondary"; - if ( self.isdog ) - { - tag = "J_Spine1"; - } - self playsound( "zmb_elec_jib_zombie" ); - network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag ); -} - -electric_cherry_stun() -{ - self endon( "death" ); - self notify( "stun_zombie" ); - self endon( "stun_zombie" ); - if ( self.health <= 0 ) - { -/# - iprintln( "trying to stun a dead zombie" ); -#/ - return; - } - if ( self.ai_state != "find_flesh" ) - { - return; - } - self.forcemovementscriptstate = 1; - self.ignoreall = 1; - i = 0; - while ( i < 2 ) - { - self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); - self maps/mp/animscripts/shared::donotetracks( "stunned" ); - i++; - } - self.forcemovementscriptstate = 0; - self.ignoreall = 0; - self setgoalpos( self.origin ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); -} - -electric_cherry_reload_attack() -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "stop_electric_cherry_reload_attack" ); - self.wait_on_reload = []; - self.consecutive_electric_cherry_attacks = 0; - while ( 1 ) - { - self waittill( "reload_start" ); - str_current_weapon = self getcurrentweapon(); - while ( isinarray( self.wait_on_reload, str_current_weapon ) ) - { - continue; - } - self.wait_on_reload[ self.wait_on_reload.size ] = str_current_weapon; - self.consecutive_electric_cherry_attacks++; - n_clip_current = self getweaponammoclip( str_current_weapon ); - n_clip_max = weaponclipsize( str_current_weapon ); - n_fraction = n_clip_current / n_clip_max; - perk_radius = linear_map( n_fraction, 1, 0, 32, 128 ); - perk_dmg = linear_map( n_fraction, 1, 0, 1, 1045 ); - self thread check_for_reload_complete( str_current_weapon ); - if ( isDefined( self ) ) - { - switch( self.consecutive_electric_cherry_attacks ) - { - case 0: - case 1: - n_zombie_limit = undefined; - break; - case 2: - n_zombie_limit = 8; - break; - case 3: - n_zombie_limit = 4; - break; - case 4: - n_zombie_limit = 2; - break; - default: - n_zombie_limit = 0; - } - self thread electric_cherry_cooldown_timer( str_current_weapon ); - if ( isDefined( n_zombie_limit ) && n_zombie_limit == 0 ) - { - continue; - } - self thread electric_cherry_reload_fx( n_fraction ); - self notify( "electric_cherry_start" ); - self playsound( "zmb_cherry_explode" ); - a_zombies = get_round_enemy_array(); - a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); - n_zombies_hit = 0; - i = 0; - while ( i < a_zombies.size ) - { - if ( isalive( self ) ) - { - if ( isDefined( n_zombie_limit ) ) - { - if ( n_zombies_hit < n_zombie_limit ) - { - n_zombies_hit++; - break; - } - else } - else if ( a_zombies[ i ].health <= perk_dmg ) - { - a_zombies[ i ] thread electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) - { - self.cherry_kills++; - } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); - } - else - { - if ( !isDefined( a_zombies[ i ].is_brutus ) ) - { - a_zombies[ i ] thread electric_cherry_stun(); - } - a_zombies[ i ] thread electric_cherry_shock_fx(); - } - wait 0,1; - a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" ); - } - i++; - } - self notify( "electric_cherry_end" ); - } - } -} - -electric_cherry_cooldown_timer( str_current_weapon ) -{ - self notify( "electric_cherry_cooldown_started" ); - self endon( "electric_cherry_cooldown_started" ); - self endon( "death" ); - self endon( "disconnect" ); - n_reload_time = weaponreloadtime( str_current_weapon ); - if ( self hasperk( "specialty_fastreload" ) ) - { - n_reload_time *= getDvarFloat( "perk_weapReloadMultiplier" ); - } - n_cooldown_time = n_reload_time + 3; - wait n_cooldown_time; - self.consecutive_electric_cherry_attacks = 0; -} - -check_for_reload_complete( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "player_lost_weapon_" + weapon ); - self thread weapon_replaced_monitor( weapon ); - while ( 1 ) - { - self waittill( "reload" ); - str_current_weapon = self getcurrentweapon(); - if ( str_current_weapon == weapon ) - { - arrayremovevalue( self.wait_on_reload, weapon ); - self notify( "weapon_reload_complete_" + weapon ); - return; - } - else - { - } - } -} - -weapon_replaced_monitor( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "weapon_reload_complete_" + weapon ); - while ( 1 ) - { - self waittill( "weapon_change" ); - primaryweapons = self getweaponslistprimaries(); - if ( !isinarray( primaryweapons, weapon ) ) - { - self notify( "player_lost_weapon_" + weapon ); - arrayremovevalue( self.wait_on_reload, weapon ); - return; - } - else - { - } - } -} - -electric_cherry_reload_fx( n_fraction ) -{ - if ( n_fraction >= 0,67 ) - { - self setclientfield( "electric_cherry_reload_fx", 1 ); - } - else if ( n_fraction >= 0,33 && n_fraction < 0,67 ) - { - self setclientfield( "electric_cherry_reload_fx", 2 ); - } - else - { - self setclientfield( "electric_cherry_reload_fx", 3 ); - } - wait 1; - self setclientfield( "electric_cherry_reload_fx", 0 ); -} - -electric_cherry_perk_lost() -{ - self notify( "stop_electric_cherry_reload_attack" ); -} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc index 8b3d7af..8a4e1b8 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_riotshield_prison.gsc @@ -1,664 +1,633 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_weap_riotshield_prison; -#include common_scripts/utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield_prison; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; -init() //checked matches cerberus output +init() { - level.riotshield_name = "alcatraz_shield_zm"; - level.deployedshieldmodel = []; - level.stowedshieldmodel = []; - level.carriedshieldmodel = []; - level.deployedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_world"; - level.deployedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_world"; - level.deployedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_world"; - level.stowedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_stow"; - level.stowedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_stow"; - level.stowedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_stow"; - level.carriedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_world"; - level.carriedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_world"; - level.carriedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_world"; - level.viewshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_view"; - level.viewshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_view"; - level.viewshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_view"; - precachemodel( level.stowedshieldmodel[ 0 ] ); - precachemodel( level.stowedshieldmodel[ 2 ] ); - precachemodel( level.stowedshieldmodel[ 3 ] ); - precachemodel( level.carriedshieldmodel[ 0 ] ); - precachemodel( level.carriedshieldmodel[ 2 ] ); - precachemodel( level.carriedshieldmodel[ 3 ] ); - precachemodel( level.viewshieldmodel[ 0 ] ); - precachemodel( level.viewshieldmodel[ 2 ] ); - precachemodel( level.viewshieldmodel[ 3 ] ); - level.riotshield_placement_zoffset = 26; + level.riotshield_name = "alcatraz_shield_zm"; + level.deployedshieldmodel = []; + level.stowedshieldmodel = []; + level.carriedshieldmodel = []; + level.deployedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_world"; + level.deployedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_world"; + level.deployedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_world"; + level.stowedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_stow"; + level.stowedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_stow"; + level.stowedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_stow"; + level.carriedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_world"; + level.carriedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_world"; + level.carriedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_world"; + level.viewshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_view"; + level.viewshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_view"; + level.viewshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_view"; + precachemodel( level.stowedshieldmodel[0] ); + precachemodel( level.stowedshieldmodel[2] ); + precachemodel( level.stowedshieldmodel[3] ); + precachemodel( level.carriedshieldmodel[0] ); + precachemodel( level.carriedshieldmodel[2] ); + precachemodel( level.carriedshieldmodel[3] ); + precachemodel( level.viewshieldmodel[0] ); + precachemodel( level.viewshieldmodel[2] ); + precachemodel( level.viewshieldmodel[3] ); + level.riotshield_placement_zoffset = 26; } -attachriotshield( model, tag ) //checked matches cerberus output +attachriotshield( model, tag ) { - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = model; - self.prev_shield_tag = tag; - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = model; + self.prev_shield_tag = tag; + + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); } -removeriotshield() //checked matches cerberus output +removeriotshield() { - if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) ) - { - self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); - } - self.prev_shield_model = undefined; - self.prev_shield_tag = undefined; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 0 ); + if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) ) + self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag ); + + self.prev_shield_model = undefined; + self.prev_shield_tag = undefined; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 0 ); } -setriotshieldviewmodel( modelnum ) //checked matches cerberus output +setriotshieldviewmodel( modelnum ) { - self.prev_shield_viewmodel = modelnum; - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } + self.prev_shield_viewmodel = modelnum; + + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); } -specialriotshieldviewmodel() //checked matches cerberus output +specialriotshieldviewmodel() { - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - self setheldweaponmodel( 3 ); + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + self setheldweaponmodel( 3 ); } -restoreriotshieldviewmodel() //checked matches cerberus output +restoreriotshieldviewmodel() { - if ( self getcurrentweapon() != level.riotshield_name ) - { - return; - } - if ( isDefined( self.prev_shield_viewmodel ) ) - { - self setheldweaponmodel( self.prev_shield_viewmodel ); - } - else - { - self setheldweaponmodel( 0 ); - } + if ( self getcurrentweapon() != level.riotshield_name ) + return; + + if ( isdefined( self.prev_shield_viewmodel ) ) + self setheldweaponmodel( self.prev_shield_viewmodel ); + else + self setheldweaponmodel( 0 ); } -updateriotshieldmodel() //checked changed to match cerberus output +updateriotshieldmodel() { - if ( !isDefined( self.shield_damage_level ) ) - { - if ( isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - } - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) - { - self.prev_shield_placement = self.shield_placement; - update = 1; - } - if ( update ) - { - if ( self.prev_shield_placement == 0 ) - { - self attachriotshield(); - } - else if ( self.prev_shield_placement == 1 ) - { - self attachriotshield( level.carriedshieldmodel[ self.prev_shield_damage_level ], "tag_weapon_left" ); - self setriotshieldviewmodel( self.prev_shield_damage_level ); - } - else if ( self.prev_shield_placement == 2 ) - { - self attachriotshield( level.stowedshieldmodel[ self.prev_shield_damage_level ], "tag_stowed_back" ); - } - else if ( self.prev_shield_placement == 3 ) - { - self attachriotshield(); - if ( isDefined( self.shield_ent ) ) - { - self.shield_ent setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } - } - } + if ( !isdefined( self.shield_damage_level ) ) + { + if ( isdefined( self.player_shield_reset_health ) ) + self [[ self.player_shield_reset_health ]](); + } + + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement ) + { + self.prev_shield_placement = self.shield_placement; + update = 1; + } + + if ( update ) + { + if ( self.prev_shield_placement == 0 ) + self attachriotshield(); + else if ( self.prev_shield_placement == 1 ) + { + self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" ); + self setriotshieldviewmodel( self.prev_shield_damage_level ); + } + else if ( self.prev_shield_placement == 2 ) + self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" ); + else if ( self.prev_shield_placement == 3 ) + { + self attachriotshield(); + + if ( isdefined( self.shield_ent ) ) + self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); + } + } } -updatestandaloneriotshieldmodel() //checked matches cerberus output +updatestandaloneriotshieldmodel() { - update = 0; - if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) - { - self.prev_shield_damage_level = self.shield_damage_level; - update = 1; - } - if ( update ) - { - self setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] ); - } + update = 0; + + if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level ) + { + self.prev_shield_damage_level = self.shield_damage_level; + update = 1; + } + + if ( update ) + self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] ); } -watchshieldlaststand() //checked matches cerberus output used is_true() instead +watchshieldlaststand() { - self endon( "death" ); - self endon( "disconnect" ); - self notify( "watchShieldLastStand" ); - self endon( "watchShieldLastStand" ); - while ( 1 ) - { - self waittill( "weapons_taken_for_last_stand" ); - self.riotshield_hidden = 0; - if ( is_true( self.hasriotshield ) ) - { - if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) - { - self.riotshield_hidden = 2; - self.shield_placement = 0; - self updateriotshieldmodel(); - } - } - str_notify = self waittill_any_return( "player_revived", "bled_out" ); - if ( str_notify == "player_revived" ) - { - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) - { - self.shield_placement = self.riotshield_hidden; - self updateriotshieldmodel(); - } - } - else - { - self maps/mp/zombies/_zm_weap_riotshield_prison::player_take_riotshield(); - } - self.riotshield_hidden = undefined; - } + self endon( "death" ); + self endon( "disconnect" ); + self notify( "watchShieldLastStand" ); + self endon( "watchShieldLastStand" ); + + while ( true ) + { + self waittill( "weapons_taken_for_last_stand" ); + + self.riotshield_hidden = 0; + + if ( isdefined( self.hasriotshield ) && self.hasriotshield ) + { + if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 ) + { + self.riotshield_hidden = 2; + self.shield_placement = 0; + self updateriotshieldmodel(); + } + } + + str_notify = self waittill_any_return( "player_revived", "bled_out" ); + + if ( str_notify == "player_revived" ) + { + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 ) + { + self.shield_placement = self.riotshield_hidden; + self updateriotshieldmodel(); + } + } + else + self maps\mp\zombies\_zm_weap_riotshield_prison::player_take_riotshield(); + + self.riotshield_hidden = undefined; + } } - - -trackriotshield() //checked changed to match cerberus output +trackriotshield() { - self endon( "death" ); - self endon( "disconnect" ); - self.hasriotshield = self hasweapon( level.riotshield_name ); - if ( self getcurrentweapon() == level.riotshield_name ) - { - self.hasriotshieldequipped = 1; - } - else - { - self.hasriotshieldequipped = 0; - } - self.shield_placement = 0; - if ( self.hasriotshield ) - { - if ( self.hasriotshieldequipped ) - { - self.shield_placement = 1; - self updateriotshieldmodel(); - } - else - { - self.shield_placement = 2; - self updateriotshieldmodel(); - } - } - for ( ;; ) - { - self waittill( "weapon_change", newweapon ); - if ( newweapon == level.riotshield_name ) - { - if ( self.hasriotshieldequipped ) - { - continue; - } - if ( isDefined( self.riotshieldentity ) ) - { - self notify( "destroy_riotshield" ); - } - self.shield_placement = 1; - self updateriotshieldmodel(); - if ( self.hasriotshield ) - { - break; - } - self.hasriotshield = 1; - self.hasriotshieldequipped = 1; - continue; - } - if ( self ismantling() && newweapon == "none" ) - { - continue; - } - if ( self.hasriotshieldequipped ) - { - /* + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + if ( self.hasriotshield ) + { + + } + else + { + + } + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { /# - assert( self.hasriotshield ); + assert( self.hasriotshield ); #/ - */ - self.hasriotshield = self hasweapon( level.riotshield_name ); - if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden ) - { - } - else if ( self.hasriotshield ) - { - self.shield_placement = 2; - break; - } - else if ( isDefined( self.shield_ent ) ) - { - /* + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + { /# - assert( self.shield_placement == 3 ); + assert( self.shield_placement == 3 ); #/ - */ - break; - } - else - { - self.shield_placement = 0; - } - self updateriotshieldmodel(); - self.hasriotshieldequipped = 0; - break; - } - if ( self.hasriotshield ) - { - if ( !self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - self.hasriotshield = 0; - } - continue; - } - if ( self hasweapon( level.riotshield_name ) ) - { - self.shield_placement = 2; - self updateriotshieldmodel(); - self.hasriotshield = 1; - } - } + } + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } } -trackequipmentchange() //checked changed to match cerberus output +trackequipmentchange() { - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_dropped", equipname ); - self notify( "weapon_change", self getcurrentweapon() ); - } + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_dropped", equipname ); + + self notify( "weapon_change", self getcurrentweapon() ); + } } -updateriotshieldplacement() //checked matches cerberus output +updateriotshieldplacement() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "deploy_riotshield" ); - self endon( "start_riotshield_deploy" ); - self endon( "weapon_change" ); - while ( 1 ) - { - placement = self canplaceriotshield( "raise_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) ) - { - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - } - else - { - self specialriotshieldviewmodel(); - self setplacementhint( 0 ); - } - wait 0.05; - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "deploy_riotshield" ); + self endon( "start_riotshield_deploy" ); + self endon( "weapon_change" ); + + while ( true ) + { + placement = self canplaceriotshield( "raise_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) ) + { + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + } + else + { + self specialriotshieldviewmodel(); + self setplacementhint( 0 ); + } + + wait 0.05; + } } -startriotshielddeploy() //checked matches cerberus output +startriotshielddeploy() { - self notify( "start_riotshield_deploy" ); - self thread updateriotshieldplacement(); - self thread watchriotshielddeploy(); + self notify( "start_riotshield_deploy" ); + self thread updateriotshieldplacement(); + self thread watchriotshielddeploy(); } -spawnriotshieldcover( origin, angles ) //checked matches cerberus output +spawnriotshieldcover( origin, angles ) { - shield_ent = spawn( "script_model", origin, 1 ); - shield_ent.angles = angles; - shield_ent setowner( self ); - shield_ent.owner = self; - shield_ent.owner.shield_ent = shield_ent; - shield_ent.isriotshield = 1; - self.shield_placement = 3; - self updateriotshieldmodel(); - shield_ent setscriptmoverflag( 0 ); - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); - maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent ); - return shield_ent; + shield_ent = spawn( "script_model", origin, 1 ); + shield_ent.angles = angles; + shield_ent setowner( self ); + shield_ent.owner = self; + shield_ent.owner.shield_ent = shield_ent; + shield_ent.isriotshield = 1; + self.shield_placement = 3; + self updateriotshieldmodel(); + shield_ent setscriptmoverflag( 0 ); + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 ); + maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent ); + return shield_ent; } -watchriotshielddeploy() //checked matches cerberus output +watchriotshielddeploy() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self waittill( "deploy_riotshield", deploy_attempt ); - self restoreriotshieldviewmodel(); - self setplacementhint( 1 ); - placement_hint = 0; - if ( deploy_attempt ) - { - placement = self canplaceriotshield( "deploy_riotshield" ); - if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) && self check_plant_position( placement[ "origin" ], placement[ "angles" ] ) ) - { - self doriotshielddeploy( placement[ "origin" ], placement[ "angles" ] ); - } - else - { - placement_hint = 1; - clip_max_ammo = weaponclipsize( level.riotshield_name ); - self setweaponammoclip( level.riotshield_name, clip_max_ammo ); - } - } - else - { - placement_hint = 1; - } - if ( placement_hint ) - { - self setriotshieldfailhint(); - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + + self waittill( "deploy_riotshield", deploy_attempt ); + + self restoreriotshieldviewmodel(); + self setplacementhint( 1 ); + placement_hint = 0; + + if ( deploy_attempt ) + { + placement = self canplaceriotshield( "deploy_riotshield" ); + + if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) ) + self doriotshielddeploy( placement["origin"], placement["angles"] ); + else + { + placement_hint = 1; + clip_max_ammo = weaponclipsize( level.riotshield_name ); + self setweaponammoclip( level.riotshield_name, clip_max_ammo ); + } + } + else + placement_hint = 1; + + if ( placement_hint ) + self setriotshieldfailhint(); } -check_plant_position( origin, angles ) //checked matches cerberus output +check_plant_position( origin, angles ) { - if ( isDefined( level.equipment_safe_to_drop ) ) - { - ret = 1; - test_ent = spawn( "script_model", origin ); - test_ent setmodel( level.deployedshieldmodel[ 0 ] ); - test_ent.angles = angles; - if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) ) - { - ret = 0; - } - test_ent delete(); - return ret; - } - return 1; + if ( isdefined( level.equipment_safe_to_drop ) ) + { + ret = 1; + test_ent = spawn( "script_model", origin ); + test_ent setmodel( level.deployedshieldmodel[0] ); + test_ent.angles = angles; + + if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) ) + ret = 0; + + test_ent delete(); + return ret; + } + + return 1; } -doriotshielddeploy( origin, angles ) //checked matches cerberus output +doriotshielddeploy( origin, angles ) { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self notify( "deployed_riotshield" ); - self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name ); - if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) - { - self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name ); - } - zoffset = level.riotshield_placement_zoffset; - shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); - item_ent = deployriotshield( self, shield_ent ); - primaries = self getweaponslistprimaries(); - /* + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); /# - assert( isDefined( item_ent ) ); - assert( !isDefined( self.riotshieldretrievetrigger ) ); - assert( !isDefined( self.riotshieldentity ) ); + assert( isdefined( item_ent ) ); + assert( !isdefined( self.riotshieldretrievetrigger ) ); + assert( !isdefined( self.riotshieldentity ) ); #/ - */ - self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] ); - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); - } - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) - { - self notify( "destroy_riotshield" ); - shield_ent delete(); - item_ent delete(); - return; - } - } - self.riotshieldretrievetrigger = item_ent; - self.riotshieldentity = shield_ent; - self thread watchdeployedriotshieldents(); - self thread deleteshieldondamage( self.riotshieldentity ); - self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); - self thread deleteriotshieldonplayerdeath(); - self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); - self.riotshieldentity thread watchdeployedriotshielddamage(); - return shield_ent; + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] ); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; } -riotshielddistancetest( origin ) //checked matches cerberus output +riotshielddistancetest( origin ) { - /* /# - assert( isDefined( origin ) ); + assert( isdefined( origin ) ); #/ - */ - min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" ); - min_dist_squared *= min_dist_squared; - i = 0; - while ( i < level.players.size ) - { - if ( isDefined( level.players[ i ].riotshieldentity ) ) - { - dist_squared = distancesquared( level.players[ i ].riotshieldentity.origin, origin ); - if ( min_dist_squared > dist_squared ) - { - /* + min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" ); + min_dist_squared *= min_dist_squared; + + for ( i = 0; i < level.players.size; i++ ) + { + if ( isdefined( level.players[i].riotshieldentity ) ) + { + dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin ); + + if ( min_dist_squared > dist_squared ) + { /# - println( "Shield placement denied! Failed distance check to other riotshields." ); + println( "Shield placement denied! Failed distance check to other riotshields." ); #/ - */ - return 0; - } - } - i++; - } - return 1; + return false; + } + } + } + + return true; } -watchdeployedriotshieldents() //checked matches cerberus output +watchdeployedriotshieldents() { - /* /# - assert( isDefined( self.riotshieldretrievetrigger ) ); - assert( isDefined( self.riotshieldentity ) ); + assert( isdefined( self.riotshieldretrievetrigger ) ); + assert( isdefined( self.riotshieldentity ) ); #/ - */ - riotshieldretrievetrigger = self.riotshieldretrievetrigger; - riotshieldentity = self.riotshieldentity; - self waittill_any( "destroy_riotshield", "disconnect", "alcatraz_shield_zm_taken" ); - if ( isDefined( self ) ) - { - self.shield_placement = 0; - self updateriotshieldmodel(); - } - if ( isDefined( riotshieldretrievetrigger ) ) - { - riotshieldretrievetrigger delete(); - } - if ( isDefined( riotshieldentity ) ) - { - riotshieldentity delete(); - } + riotshieldretrievetrigger = self.riotshieldretrievetrigger; + riotshieldentity = self.riotshieldentity; + self waittill_any( "destroy_riotshield", "disconnect", "alcatraz_shield_zm_taken" ); + + if ( isdefined( self ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + } + + if ( isdefined( riotshieldretrievetrigger ) ) + riotshieldretrievetrigger delete(); + + if ( isdefined( riotshieldentity ) ) + riotshieldentity delete(); } -watchdeployedriotshielddamage() //checked changed to match cerberus output +watchdeployedriotshielddamage() { - self endon( "death" ); - damagemax = getDvarInt( "riotshield_deployed_health" ); - self.damagetaken = 0; - while ( 1 ) - { - self.maxhealth = 100000; - self.health = self.maxhealth; - self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields ) - { - continue; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } + self endon( "death" ); + damagemax = getdvarint( "riotshield_deployed_health" ); + self.damagetaken = 0; + + while ( true ) + { + self.maxhealth = 100000; + self.health = self.maxhealth; + + self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) ) + continue; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; /# - if ( isDefined( self.owner ) ) - { - assert( isDefined( self.owner.team ) ); - } + assert( isdefined( self.owner ) && isdefined( self.owner.team ) ); #/ - if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) - { - continue; - } - if ( isDefined( level.riotshield_damage_callback ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - continue; - } - else if ( type == "MOD_MELEE" ) - { - damage *= getDvarFloat( "riotshield_melee_damage_scale" ); - } - else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) - { - damage *= getDvarFloat( "riotshield_bullet_damage_scale" ); - } - if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) - { - damage *= getDvarFloat( "riotshield_explosive_damage_scale" ); - break; - } - else if ( type == "MOD_IMPACT" ) - { - damage *= getDvarFloat( "riotshield_projectile_damage_scale" ); - } - self.damagetaken += damage; - if ( self.damagetaken >= damagemax ) - { - self damagethendestroyriotshield(); - } - } + if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner ) + continue; + + if ( isdefined( level.riotshield_damage_callback ) ) + self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); + else + { + if ( type == "MOD_MELEE" ) + damage *= getdvarfloat( "riotshield_melee_damage_scale" ); + else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" ) + damage *= getdvarfloat( "riotshield_bullet_damage_scale" ); + else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" ) + damage *= getdvarfloat( "riotshield_explosive_damage_scale" ); + else if ( type == "MOD_IMPACT" ) + damage *= getdvarfloat( "riotshield_projectile_damage_scale" ); + + self.damagetaken += damage; + + if ( self.damagetaken >= damagemax ) + self damagethendestroyriotshield(); + } + } } -damagethendestroyriotshield() //checked matches cerberus output +damagethendestroyriotshield() { - self endon( "death" ); - self.owner.riotshieldretrievetrigger delete(); - self notsolid(); - self setclientflag( 14 ); - wait getDvarFloat( "riotshield_destroyed_cleanup_time" ); - self.owner notify( "destroy_riotshield" ); + self endon( "death" ); + self.owner.riotshieldretrievetrigger delete(); + self notsolid(); + self setclientflag( 14 ); + wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) ); + self.owner notify( "destroy_riotshield" ); } -deleteshieldondamage( shield_ent ) //checked matches cerberus output +deleteshieldondamage( shield_ent ) { - shield_ent waittill( "death" ); - self notify( "destroy_riotshield" ); + shield_ent waittill( "death" ); + + self notify( "destroy_riotshield" ); } -deleteshieldmodelonweaponpickup( shield_trigger ) //checked matches cerberus output +deleteshieldmodelonweaponpickup( shield_trigger ) { - shield_trigger waittill( "trigger", player ); - self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name ); - self notify( "destroy_riotshield" ); - if ( self != player ) - { - if ( isDefined( level.transferriotshield ) ) - { - [[ level.transferriotshield ]]( self, player ); - } - } + shield_trigger waittill( "trigger", player ); + + self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name ); + self notify( "destroy_riotshield" ); + + if ( self != player ) + { + if ( isdefined( level.transferriotshield ) ) + [[ level.transferriotshield ]]( self, player ); + } } -watchshieldtriggervisibility( trigger ) //checked partially changed to match cerberus output see compiler_limitations.md No. 2 +watchshieldtriggervisibility( trigger ) { - self endon( "death" ); - trigger endon( "death" ); - while ( isDefined( trigger ) ) - { - players = get_players(); - foreach ( player in players ) - { - pickup = 1; - if ( !isDefined( player ) ) - { - } - else if ( is_true( player.afterlife ) ) - { - trigger setinvisibletoplayer( player ); - wait 0.05; - } - else - { - if ( isDefined( level.cantransferriotshield ) ) - { - pickup = [[ level.cantransferriotshield ]]( self, player ); - } - if ( !isDefined( trigger ) ) - { - return; - } - if ( pickup ) - { - trigger setvisibletoplayer( player ); - } - else - { - trigger setinvisibletoplayer( player ); - } - wait 0.05; - } - } - wait 0.05; - } + self endon( "death" ); + trigger endon( "death" ); + + while ( isdefined( trigger ) ) + { + players = get_players(); + + foreach ( player in players ) + { + pickup = 1; + + if ( !isdefined( player ) ) + continue; + + if ( is_true( player.afterlife ) ) + { + trigger setinvisibletoplayer( player ); + wait 0.05; + continue; + } + + if ( isdefined( level.cantransferriotshield ) ) + pickup = [[ level.cantransferriotshield ]]( self, player ); + + if ( !isdefined( trigger ) ) + return; + + if ( pickup ) + trigger setvisibletoplayer( player ); + else + trigger setinvisibletoplayer( player ); + + wait 0.05; + } + + wait 0.05; + } } -deleteriotshieldonplayerdeath() //checked matches cerberus output +deleteriotshieldonplayerdeath() { - self.riotshieldentity endon( "death" ); - self waittill( "death" ); - self notify( "destroy_riotshield" ); + self.riotshieldentity endon( "death" ); + + self waittill( "death" ); + + self notify( "destroy_riotshield" ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc index cd33180..d83c091 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -1,278 +1,302 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; init() { - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } + if ( !isdefined( level.ballistic_knife_autorecover ) ) + level.ballistic_knife_autorecover = 1; + + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } } on_spawn( watcher, player ) { - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } } wait_to_show_glowing_model( prey ) { - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); } on_spawn_retrieve_trigger( watcher, player ) { - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + if ( is_true( level.ballistic_knife_autorecover ) ) + { + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + } + else + { + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + } + + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); } debug_print( endpos ) { /# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } #/ - } } watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) { - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( weapon ) + 1; + autorecover = is_true( level.ballistic_knife_autorecover ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() && !is_true( trigger.force_pickup ) ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + ammo_stock = player getweaponammostock( weapon ); + ammo_clip = player getweaponammoclip( weapon ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } } pick_up( weapon, model, trigger ) { - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); + if ( self hasweapon( weapon ) ) + { + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); } destroy_ent() { - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } } watch_shutdown( trigger, model ) { - self waittill_any( "death", "disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); + self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); } drop_knives_to_ground( player ) { - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } } force_drop_knives_to_ground_on_death( player, prey ) { - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); } update_retrieve_trigger( player ) { - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc index c89e39f..1ec918c 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc @@ -1,323 +1,328 @@ -//checked includes match cerberus output -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\animscripts\zm_shared; -init() //checked matches cerberus output +init() { - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "blundergat_zm" ) ) - { - return; - } - else - { - precacheitem( "blundersplat_bullet_zm" ); - precacheitem( "blundersplat_explosive_dart_zm" ); - } - level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); - array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit ); - level.custom_derive_damage_refs = ::gib_on_blundergat_damage; - level._effect[ "dart_light" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - onplayerconnect_callback( ::blundersplat_on_player_connect ); + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "blundergat_zm" ) ) + return; + else + { + precacheitem( "blundersplat_bullet_zm" ); + precacheitem( "blundersplat_explosive_dart_zm" ); + } + + level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); + array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit ); + level.custom_derive_damage_refs = ::gib_on_blundergat_damage; + level._effect["dart_light"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); + onplayerconnect_callback( ::blundersplat_on_player_connect ); } -blundersplat_on_player_connect() //checked matches cerberus output +blundersplat_on_player_connect() { - self thread wait_for_blundersplat_fired(); - self thread wait_for_blundersplat_upgraded_fired(); + self thread wait_for_blundersplat_fired(); + self thread wait_for_blundersplat_upgraded_fired(); } -zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output +zombie_wait_for_blundersplat_hit() { - self endon( "death" ); - while ( 1 ) - { - self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( weaponname == "blundersplat_bullet_zm" ) - { - if ( !isDefined( self.titus_tagged ) ) - { - a_grenades = getentarray( "grenade", "classname" ); - if ( !isDefined( a_grenades ) || a_grenades.size <= 0 ) - { - continue; - } - self.titus_tagged = 1; - foreach ( e_grenade in a_grenades ) - { - if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" ) - { - if ( e_grenade islinkedto( self ) ) - { - while ( 1 ) - { - if ( !isDefined( e_grenade.fuse_time ) ) - { - wait_network_frame(); - } - else - { - break; - } - } - n_fuse_timer = e_grenade.fuse_time; - e_grenade thread _titus_grenade_detonate_on_target_death( self ); - } - } - } - self thread _titus_target_animate_and_die( n_fuse_timer, inflictor ); - self thread _titus_target_check_for_grenade_hits(); - } - } - } + self endon( "death" ); + + while ( true ) + { + self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( weaponname == "blundersplat_bullet_zm" ) + { + if ( !isdefined( self.titus_tagged ) ) + { + a_grenades = getentarray( "grenade", "classname" ); + + if ( !isdefined( a_grenades ) || a_grenades.size <= 0 ) + continue; + + self.titus_tagged = 1; + + foreach ( e_grenade in a_grenades ) + { + if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" ) + { + if ( e_grenade islinkedto( self ) ) + { + while ( true ) + { + if ( !isdefined( e_grenade.fuse_time ) ) + wait_network_frame(); + else + break; + } + + n_fuse_timer = e_grenade.fuse_time; + e_grenade thread _titus_grenade_detonate_on_target_death( self ); + } + } + } + + self thread _titus_target_animate_and_die( n_fuse_timer, inflictor ); + self thread _titus_target_check_for_grenade_hits(); + } + } + } } -wait_for_blundersplat_fired() //checked matches cerberus output +wait_for_blundersplat_fired() { - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - self waittill( "weapon_fired", str_weapon ); - if ( str_weapon == "blundersplat_zm" ) - { - wait_network_frame(); - _titus_locate_target( 1 ); - wait_network_frame(); - _titus_locate_target( 1 ); - wait_network_frame(); - _titus_locate_target( 1 ); - } - wait 0.5; - } + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + self waittill( "weapon_fired", str_weapon ); + + if ( str_weapon == "blundersplat_zm" ) + { + wait_network_frame(); + _titus_locate_target( 1 ); + wait_network_frame(); + _titus_locate_target( 1 ); + wait_network_frame(); + _titus_locate_target( 1 ); + } + + wait 0.5; + } } -wait_for_blundersplat_upgraded_fired() //checked matches cerberus output +wait_for_blundersplat_upgraded_fired() { - self endon( "disconnect" ); - self waittill( "spawned_player" ); - for ( ;; ) - { - self waittill( "weapon_fired", str_weapon ); - if ( str_weapon == "blundersplat_upgraded_zm" ) - { - wait_network_frame(); - _titus_locate_target( 0 ); - wait_network_frame(); - _titus_locate_target( 0 ); - wait_network_frame(); - _titus_locate_target( 0 ); - } - } + self endon( "disconnect" ); + + self waittill( "spawned_player" ); + + for (;;) + { + self waittill( "weapon_fired", str_weapon ); + + if ( str_weapon == "blundersplat_upgraded_zm" ) + { + wait_network_frame(); + _titus_locate_target( 0 ); + wait_network_frame(); + _titus_locate_target( 0 ); + wait_network_frame(); + _titus_locate_target( 0 ); + } + } } -_titus_locate_target( is_not_upgraded ) //checked changed to match cerberus output +_titus_locate_target( is_not_upgraded ) { - if ( !isDefined( is_not_upgraded ) ) - { - is_not_upgraded = 1; - } - fire_angles = self getplayerangles(); - fire_origin = self getplayercamerapos(); - a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 ); - a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 ); - if ( is_not_upgraded ) - { - n_fuse_timer = randomfloatrange( 1, 2.5 ); - } - else - { - n_fuse_timer = randomfloatrange( 3, 4 ); - } - foreach ( target in a_targets ) - { - if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) ) - { - if ( isai( target ) ) - { - if ( !isDefined( target.titusmarked ) ) - { - a_tags = []; - a_tags[ 0 ] = "j_hip_le"; - a_tags[ 1 ] = "j_hip_ri"; - a_tags[ 2 ] = "j_spine4"; - a_tags[ 3 ] = "j_elbow_le"; - a_tags[ 4 ] = "j_elbow_ri"; - a_tags[ 5 ] = "j_clavicle_le"; - a_tags[ 6 ] = "j_clavicle_ri"; - str_tag = a_tags[ randomint( a_tags.size ) ]; - b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target ); - if ( b_trace_pass ) - { - target thread _titus_marked(); - e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self ); - e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ); - return; - } - } - } - } - } - vec = anglesToForward( fire_angles ); - trace_end = fire_origin + ( vec * 20000 ); - trace = bullettrace( fire_origin, trace_end, 1, self ); - offsetpos = trace[ "position" ] + _titus_get_spread( 80 ); - e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self ); - e_dart thread _titus_reset_grenade_fuse( n_fuse_timer ); + if ( !isdefined( is_not_upgraded ) ) + is_not_upgraded = 1; + + fire_angles = self getplayerangles(); + fire_origin = self getplayercamerapos(); + a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 ); + a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 ); + + if ( is_not_upgraded ) + n_fuse_timer = randomfloatrange( 1.0, 2.5 ); + else + n_fuse_timer = randomfloatrange( 3.0, 4.0 ); + + foreach ( target in a_targets ) + { + if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) ) + { + if ( isai( target ) ) + { + if ( !isdefined( target.titusmarked ) ) + { + a_tags = []; + a_tags[0] = "j_hip_le"; + a_tags[1] = "j_hip_ri"; + a_tags[2] = "j_spine4"; + a_tags[3] = "j_elbow_le"; + a_tags[4] = "j_elbow_ri"; + a_tags[5] = "j_clavicle_le"; + a_tags[6] = "j_clavicle_ri"; + str_tag = a_tags[randomint( a_tags.size )]; + b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target ); + + if ( b_trace_pass ) + { + target thread _titus_marked(); + e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self ); + e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ); + return; + } + } + } + } + } + + vec = anglestoforward( fire_angles ); + trace_end = fire_origin + vec * 20000; + trace = bullettrace( fire_origin, trace_end, 1, self ); + offsetpos = trace["position"] + _titus_get_spread( 80 ); + e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self ); + e_dart thread _titus_reset_grenade_fuse( n_fuse_timer ); } -_titus_get_spread( n_spread ) //checked matches cerberus output +_titus_get_spread( n_spread ) { - n_x = randomintrange( n_spread * -1, n_spread ); - n_y = randomintrange( n_spread * -1, n_spread ); - n_z = randomintrange( n_spread * -1, n_spread ); - return ( n_x, n_y, n_z ); + n_x = randomintrange( n_spread * -1, n_spread ); + n_y = randomintrange( n_spread * -1, n_spread ); + n_z = randomintrange( n_spread * -1, n_spread ); + return ( n_x, n_y, n_z ); } -_titus_marked() //checked matches cerberus output +_titus_marked() { - self endon( "death" ); - self.titusmarked = 1; - wait 1; - self.titusmarked = undefined; + self endon( "death" ); + self.titusmarked = 1; + wait 1; + self.titusmarked = undefined; } -_titus_target_animate_and_die( n_fuse_timer, inflictor ) //checked matches cerberus output +_titus_target_animate_and_die( n_fuse_timer, inflictor ) { - self endon( "death" ); - self endon( "titus_target_timeout" ); - self thread _titus_target_timeout( n_fuse_timer ); - self thread _titus_check_for_target_death( inflictor ); - self thread _blundersplat_target_acid_stun_anim(); - wait n_fuse_timer; - self notify( "killed_by_a_blundersplat" ); - self dodamage( self.health + 1000, self.origin ); + self endon( "death" ); + self endon( "titus_target_timeout" ); + self thread _titus_target_timeout( n_fuse_timer ); + self thread _titus_check_for_target_death( inflictor ); + self thread _blundersplat_target_acid_stun_anim(); + wait( n_fuse_timer ); + self notify( "killed_by_a_blundersplat", inflictor ); + self dodamage( self.health + 1000, self.origin ); } -_titus_target_check_for_grenade_hits() //checked changed to match cerberus output +_titus_target_check_for_grenade_hits() { - self endon( "death" ); - self endon( "titus_target_timeout" ); - while ( 1 ) - { - self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); - if ( weaponname == "blundersplat_bullet_zm" ) - { - a_grenades = getentarray( "grenade", "classname" ); - foreach ( e_grenade in a_grenades ) - { - if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" ) - { - if ( e_grenade islinkedto( self ) ) - { - e_grenade thread _titus_grenade_detonate_on_target_death( self ); - } - } - } - } - } + self endon( "death" ); + self endon( "titus_target_timeout" ); + + while ( true ) + { + self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); + + if ( weaponname == "blundersplat_bullet_zm" ) + { + a_grenades = getentarray( "grenade", "classname" ); + + foreach ( e_grenade in a_grenades ) + { + if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" ) + { + if ( e_grenade islinkedto( self ) ) + e_grenade thread _titus_grenade_detonate_on_target_death( self ); + } + } + } + } } -_titus_target_timeout( n_fuse_timer ) //checked matches cerberus output +_titus_target_timeout( n_fuse_timer ) { - self endon( "death" ); - wait n_fuse_timer; - self notify( "titus_target_timeout" ); + self endon( "death" ); + wait( n_fuse_timer ); + self notify( "titus_target_timeout" ); } -_titus_check_for_target_death( inflictor ) //checked changed to match cerberus output +_titus_check_for_target_death( inflictor ) { - self waittill( "death" ); - self notify( "killed_by_a_blundersplat", inflictor ); - self notify( "titus_target_killed" ); + self waittill( "death" ); + + self notify( "killed_by_a_blundersplat", inflictor ); + self notify( "titus_target_killed" ); } -_titus_grenade_detonate_on_target_death( target ) //checked matches cerberus output +_titus_grenade_detonate_on_target_death( target ) { - self endon( "death" ); - target endon( "titus_target_timeout" ); - target waittill( "titus_target_killed" ); - self.fuse_reset = 1; - self resetmissiledetonationtime( 0.05 ); + self endon( "death" ); + target endon( "titus_target_timeout" ); + + target waittill( "titus_target_killed" ); + + self.fuse_reset = 1; + self resetmissiledetonationtime( 0.05 ); } -_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ) //checked changed to match cerberus output +_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ) { - if ( !isDefined( is_not_upgraded ) ) - { - is_not_upgraded = 1; - } - if ( !isDefined( n_fuse_timer ) ) - { - n_fuse_timer = randomfloatrange( 1, 1,5 ); - } - self waittill( "death" ); - a_grenades = getentarray( "grenade", "classname" ); - foreach ( e_grenade in a_grenades ) - { - if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isDefined( e_grenade.fuse_reset ) ) - { - e_grenade.fuse_reset = 1; - e_grenade.fuse_time = n_fuse_timer; - e_grenade resetmissiledetonationtime( n_fuse_timer ); - if ( is_not_upgraded ) - { - e_grenade create_zombie_point_of_interest( 250, 5, 10000 ); - } - else - { - e_grenade create_zombie_point_of_interest( 500, 10, 10000 ); - } - return; - } - } + if ( !isdefined( is_not_upgraded ) ) + is_not_upgraded = 1; + + if ( !isdefined( n_fuse_timer ) ) + n_fuse_timer = randomfloatrange( 1, 1.5 ); + + self waittill( "death" ); + + a_grenades = getentarray( "grenade", "classname" ); + + foreach ( e_grenade in a_grenades ) + { + if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined( e_grenade.fuse_reset ) ) + { + e_grenade.fuse_reset = 1; + e_grenade.fuse_time = n_fuse_timer; + e_grenade resetmissiledetonationtime( n_fuse_timer ); + + if ( is_not_upgraded ) + e_grenade create_zombie_point_of_interest( 250, 5, 10000 ); + else + e_grenade create_zombie_point_of_interest( 500, 10, 10000 ); + + return; + } + } } -gib_on_blundergat_damage( refs, point, weaponname ) //checked changed to match cerberus output +gib_on_blundergat_damage( refs, point, weaponname ) { - new_gib_ref = []; - if ( isDefined( level.no_gib_in_wolf_area ) ) - { - if ( [[ level.no_gib_in_wolf_area ]]() ) - { - return new_gib_ref; - } - } - if ( self.health <= 0 ) - { - return refs; - } - else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" ) - { - new_gib_ref = self maps/mp/zombies/_zm_spawner::derive_damage_refs( point ); - return new_gib_ref; - } - return refs; + new_gib_ref = []; + + if ( isdefined( level.no_gib_in_wolf_area ) ) + { + if ( [[ level.no_gib_in_wolf_area ]]() ) + return new_gib_ref; + } + + if ( self.health <= 0 ) + return refs; + else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" ) + { + new_gib_ref = self maps\mp\zombies\_zm_spawner::derive_damage_refs( point ); + return new_gib_ref; + } + + return refs; } -_blundersplat_target_acid_stun_anim() //checked matches cerberus output +_blundersplat_target_acid_stun_anim() { - self endon( "death" ); - while ( 1 ) - { - ground_ent = self getgroundent(); - if ( isDefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) ) - { - self linkto( ground_ent ); - } - if ( is_true( self.has_legs ) ) - { - self animscripted( self.origin, self.angles, "zm_blundersplat_stun" ); - } - else - { - self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" ); - } - self maps/mp/animscripts/zm_shared::donotetracks( "blundersplat_stunned_anim" ); - } -} + self endon( "death" ); + while ( true ) + { + ground_ent = self getgroundent(); + + if ( isdefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) ) + self linkto( ground_ent ); + + if ( is_true( self.has_legs ) ) + self animscripted( self.origin, self.angles, "zm_blundersplat_stun" ); + else + self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" ); + + self maps\mp\animscripts\zm_shared::donotetracks( "blundersplat_stunned_anim" ); + } +} diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc index 564c67f..4c5d3f8 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_claymore.gsc @@ -1,492 +1,466 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; init() { - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); } buy_claymores() { - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_NOICON" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - } - } - } + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + else + { + who play_sound_on_ent( "no_purchase" ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } } claymore_unitrigger_update_prompt( player ) { - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - return 0; - } - return 1; + if ( player is_player_placeable_mine( "claymore_zm" ) ) + { + self sethintstring( "" ); + self setcursorhint( "HINT_NOICON" ); + return false; + } + + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + return true; } set_claymore_visible() { - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } } claymore_safe_to_plant() { - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; } claymore_wait_and_detonate() { - wait 0,1; - self detonate( self.owner ); + wait 0.1; + self detonate( self.owner ); } claymore_watch() { - self endon( "death" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread satchel_damage(); - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } + self endon( "death" ); + self notify( "claymore_watch" ); + self endon( "claymore_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } } claymore_setup() { - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); } adjust_trigger_origin( origin ) { - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; } on_spawn_retrieve_trigger( watcher, player ) { - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); } pickup_claymores() { - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - self destroy_ent(); - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + self destroy_ent(); + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); } pickup_claymores_trigger_listener( trigger, player ) { - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); } pickup_claymores_trigger_listener_enable( trigger, player ) { - self endon( "delete" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } } pickup_claymores_trigger_listener_disable( trigger, player ) { - self endon( "delete" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } } shouldaffectweaponobject( object ) { - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; } claymore_detonation() { - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } } delete_claymores_on_death( player, ent ) { - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); } satchel_damage() { - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); + self endon( "death" ); + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); } reset_satchel_explode_this_frame() { - wait 0,05; - level.satchelexplodethisframe = 0; + wait 0.05; + level.satchelexplodethisframe = 0; } play_claymore_effects() { - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); } give_claymores_after_rounds() { - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} + while ( true ) + { + level waittill( "between_round_over" ); -init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); -setup_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } } show_claymore_hint( string ) { - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - self setup_client_hintelem(); - self.hintelem settext( text ); - wait 3,5; - self.hintelem settext( "" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + show_equipment_hint_text( text ); } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc index 59454f8..0015817 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_riotshield_prison.gsc @@ -1,778 +1,768 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_riotshield_prison; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zombies\_zm_audio; init() { - maps/mp/zombies/_zm_riotshield_prison::init(); - set_zombie_var( "riotshield_cylinder_radius", 360 ); - set_zombie_var( "riotshield_fling_range", 90 ); - set_zombie_var( "riotshield_gib_range", 90 ); - set_zombie_var( "riotshield_gib_damage", 75 ); - set_zombie_var( "riotshield_knockdown_range", 90 ); - set_zombie_var( "riotshield_knockdown_damage", 15 ); - set_zombie_var( "riotshield_hit_points", 1500 ); - set_zombie_var( "riotshield_fling_damage_shield", 100 ); - set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); - level.riotshield_network_choke_count = 0; - level.riotshield_gib_refs = []; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "guts"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "right_arm"; - level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "left_arm"; - level.riotshield_damage_callback = ::player_damage_shield; - level.deployed_riotshield_damage_callback = ::deployed_damage_shield; - level.transferriotshield = ::transferriotshield; - level.cantransferriotshield = ::cantransferriotshield; - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); - maps/mp/zombies/_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); - onplayerconnect_callback( ::onplayerconnect ); + maps\mp\zombies\_zm_riotshield_prison::init(); + set_zombie_var( "riotshield_cylinder_radius", 360 ); + set_zombie_var( "riotshield_fling_range", 90 ); + set_zombie_var( "riotshield_gib_range", 90 ); + set_zombie_var( "riotshield_gib_damage", 75 ); + set_zombie_var( "riotshield_knockdown_range", 90 ); + set_zombie_var( "riotshield_knockdown_damage", 15 ); + set_zombie_var( "riotshield_hit_points", 1500 ); + set_zombie_var( "riotshield_fling_damage_shield", 100 ); + set_zombie_var( "riotshield_knockdown_damage_shield", 15 ); + level.riotshield_network_choke_count = 0; + level.riotshield_gib_refs = []; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm"; + level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm"; + level.riotshield_damage_callback = ::player_damage_shield; + level.deployed_riotshield_damage_callback = ::deployed_damage_shield; + level.transferriotshield = ::transferriotshield; + level.cantransferriotshield = ::cantransferriotshield; + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response ); + maps\mp\zombies\_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" ); + onplayerconnect_callback( ::onplayerconnect ); } onplayerconnect() { - self.player_shield_reset_health = ::player_init_shield_health; - self.player_shield_apply_damage = ::player_damage_shield; - self.player_shield_reset_location = ::player_init_shield_location; - self thread watchriotshielduse(); - self thread watchriotshieldmelee(); - self thread player_watch_laststand(); + self.player_shield_reset_health = ::player_init_shield_health; + self.player_shield_apply_damage = ::player_damage_shield; + self.player_shield_reset_location = ::player_init_shield_location; + self thread watchriotshielduse(); + self thread watchriotshieldmelee(); + self thread player_watch_laststand(); } dropshield() { - self.shield_placement = 0; - self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel(); - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.shielddamagetaken = self.shielddamagetaken; - item.original_owner = self; - item.owner = undefined; - item.name = level.riotshield_name; - item.isriotshield = 1; - item deployed_damage_shield( 0 ); - item setscriptmoverflag( 0 ); - item.requires_pickup = 1; - item thread watchtoofriendly( self ); - } - self takeweapon( level.riotshield_name ); - return item; + self.shield_placement = 0; + self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel(); + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.shielddamagetaken = self.shielddamagetaken; + item.original_owner = self; + item.owner = undefined; + item.name = level.riotshield_name; + item.isriotshield = 1; + item deployed_damage_shield( 0 ); + item setscriptmoverflag( 0 ); + item.requires_pickup = 1; + item thread watchtoofriendly( self ); + } + + self takeweapon( level.riotshield_name ); + return item; } watchtoofriendly( player ) { - wait 1; - if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) - { - if ( isalive( player ) ) - { - player playlocalsound( level.zmb_laugh_alias ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self deployed_damage_shield( 2000 ); - } + wait 1; + + if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 ) + { + if ( isalive( player ) ) + player playlocalsound( level.zmb_laugh_alias ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 ); + self deployed_damage_shield( 2000 ); + } } pickupshield( item ) { - item.owner = self; - damage = item.shielddamagetaken; - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - self.shielddamagetaken = damage; - self player_set_shield_health( damage, damagemax ); + item.owner = self; + damage = item.shielddamagetaken; + damagemax = level.zombie_vars["riotshield_hit_points"]; + self.shielddamagetaken = damage; + self player_set_shield_health( damage, damagemax ); } placeshield( origin, angles ) { - if ( self getcurrentweapon() != level.riotshield_name ) - { - self switchtoweapon( level.riotshield_name ); - self waittill( "weapon_change" ); - } - item = self maps/mp/zombies/_zm_riotshield_prison::doriotshielddeploy( origin, angles ); - if ( isDefined( item ) ) - { - item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 ); - item.angles = self.angles; - item.owner = self; - } - return item; + if ( self getcurrentweapon() != level.riotshield_name ) + { + self switchtoweapon( level.riotshield_name ); + + self waittill( "weapon_change" ); + } + + item = self maps\mp\zombies\_zm_riotshield_prison::doriotshielddeploy( origin, angles ); + + if ( isdefined( item ) ) + { + item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); + item.angles = self.angles; + item.owner = self; + } + + return item; } cantransferriotshield( fromplayer, toplayer ) { - if ( isDefined( toplayer.screecher_weapon ) ) - { - return 0; - } - if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) - { - return 0; - } - if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) - { - return 0; - } - if ( toplayer isthrowinggrenade() ) - { - return 0; - } - if ( fromplayer == toplayer ) - { - return 1; - } - if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) - { - return 0; - } - if ( fromplayer.session_team != toplayer.session_team ) - { - return 0; - } - return 1; + if ( isdefined( toplayer.screecher_weapon ) ) + return false; + + if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 ) + return false; + + if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() ) + return false; + + if ( toplayer isthrowinggrenade() ) + return false; + + if ( fromplayer == toplayer ) + return true; + + if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 ) + return false; + + if ( fromplayer.session_team != toplayer.session_team ) + return false; + + return true; } transferriotshield( fromplayer, toplayer ) { - damage = fromplayer.shielddamagetaken; - toplayer player_take_riotshield(); - fromplayer player_take_riotshield(); - toplayer.shielddamagetaken = damage; - toplayer.shield_placement = 3; - toplayer.shield_damage_level = 0; - toplayer maps/mp/zombies/_zm_equipment::equipment_give( "alcatraz_shield_zm" ); - toplayer switchtoweapon( "alcatraz_shield_zm" ); - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - toplayer player_set_shield_health( damage, damagemax ); + damage = fromplayer.shielddamagetaken; + toplayer player_take_riotshield(); + fromplayer player_take_riotshield(); + toplayer.shielddamagetaken = damage; + toplayer.shield_placement = 3; + toplayer.shield_damage_level = 0; + toplayer maps\mp\zombies\_zm_equipment::equipment_give( "alcatraz_shield_zm" ); + toplayer switchtoweapon( "alcatraz_shield_zm" ); + damagemax = level.zombie_vars["riotshield_hit_points"]; + toplayer player_set_shield_health( damage, damagemax ); } player_take_riotshield() { - self notify( "destroy_riotshield" ); - if ( self getcurrentweapon() == "alcatraz_shield_zm" ) - { - new_primary = ""; - if ( isDefined( self.laststand ) && self.laststand ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - if ( primaryweapons[ i ] != "alcatraz_shield_zm" ) - { - new_primary = primaryweapons[ i ]; - break; - } - else - { - i++; - } - } - if ( new_primary == "" ) - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - new_primary = "zombie_fists_zm"; - } - } - self switchtoweaponimmediate( new_primary ); - self playsound( "wpn_riotshield_zm_destroy" ); - self waittill( "weapon_change" ); - } - self maps/mp/zombies/_zm_riotshield_prison::removeriotshield(); - self maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" ); - self.hasriotshield = 0; - self.hasriotshieldequipped = 0; + self notify( "destroy_riotshield" ); + + if ( self getcurrentweapon() == "alcatraz_shield_zm" ) + { + new_primary = ""; + + if ( isdefined( self.laststand ) && self.laststand ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + } + else + { + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + if ( primaryweapons[i] != "alcatraz_shield_zm" ) + { + new_primary = primaryweapons[i]; + break; + } + } + + if ( new_primary == "" ) + { + self maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + new_primary = "zombie_fists_zm"; + } + } + + self switchtoweaponimmediate( new_primary ); + self playsound( "wpn_riotshield_zm_destroy" ); + + self waittill( "weapon_change" ); + } + + self maps\mp\zombies\_zm_riotshield_prison::removeriotshield(); + self maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" ); + self.hasriotshield = 0; + self.hasriotshieldequipped = 0; } player_watch_laststand() { - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "entering_last_stand" ); - if ( self getcurrentweapon() == "alcatraz_shield_zm" ) - { - new_primary = self.laststandpistol; - self giveweapon( new_primary ); - self switchtoweaponimmediate( new_primary ); - } - } + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "entering_last_stand" ); + + if ( self getcurrentweapon() == "alcatraz_shield_zm" ) + { + new_primary = self.laststandpistol; + self giveweapon( new_primary ); + self switchtoweaponimmediate( new_primary ); + } + } } player_init_shield_health() { - retval = self.shielddamagetaken > 0; - self.shielddamagetaken = 0; - self.shield_damage_level = 0; - self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel(); - return retval; + retval = self.shielddamagetaken > 0; + self.shielddamagetaken = 0; + self.shield_damage_level = 0; + self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel(); + return retval; } player_init_shield_location() { - self.hasriotshield = 1; - self.hasriotshieldequipped = 0; - self.shield_placement = 2; - self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel(); + self.hasriotshield = 1; + self.hasriotshieldequipped = 0; + self.shield_placement = 2; + self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel(); } player_set_shield_health( damage, max_damage ) { - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel(); + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel(); } deployed_set_shield_health( damage, max_damage ) { - shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage ); - if ( shieldhealth >= 50 ) - { - self.shield_damage_level = 0; - } - else if ( shieldhealth >= 25 ) - { - self.shield_damage_level = 2; - } - else - { - self.shield_damage_level = 3; - } - self maps/mp/zombies/_zm_riotshield_prison::updatestandaloneriotshieldmodel(); + shieldhealth = int( 100 * ( max_damage - damage ) / max_damage ); + + if ( shieldhealth >= 50 ) + self.shield_damage_level = 0; + else if ( shieldhealth >= 25 ) + self.shield_damage_level = 2; + else + self.shield_damage_level = 3; + + self maps\mp\zombies\_zm_riotshield_prison::updatestandaloneriotshieldmodel(); } player_damage_shield( idamage, bheld ) { - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - if ( bheld || !isDefined( self.shield_ent ) ) - { - self playrumbleonentity( "damage_heavy" ); - earthquake( 1, 0,75, self.origin, 100 ); - } - else - { - if ( isDefined( self.shield_ent ) ) - { - if ( is_true( self.shield_ent.destroy_begun ) ) - { - return; - } - self.shield_ent.destroy_begun = 1; - shield_origin = self.shield_ent.origin; - level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - wait 1; - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - } - } - self thread player_take_riotshield(); - } - else - { - if ( bheld ) - { - self playrumbleonentity( "damage_light" ); - earthquake( 0,5, 0,5, self.origin, 100 ); - } - self player_set_shield_health( self.shielddamagetaken, damagemax ); - self playsound( "fly_riotshield_zm_impact_zombies" ); - } + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + if ( bheld || !isdefined( self.shield_ent ) ) + { + self playrumbleonentity( "damage_heavy" ); + earthquake( 1.0, 0.75, self.origin, 100 ); + } + else if ( isdefined( self.shield_ent ) ) + { + if ( is_true( self.shield_ent.destroy_begun ) ) + return; + + self.shield_ent.destroy_begun = 1; + shield_origin = self.shield_ent.origin; + level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + wait 1; + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + } + + self thread player_take_riotshield(); + } + else + { + if ( bheld ) + { + self playrumbleonentity( "damage_light" ); + earthquake( 0.5, 0.5, self.origin, 100 ); + } + + self player_set_shield_health( self.shielddamagetaken, damagemax ); + self playsound( "fly_riotshield_zm_impact_zombies" ); + } } deployed_damage_shield( idamage ) { - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( !isDefined( self.shielddamagetaken ) ) - { - self.shielddamagetaken = 0; - } - self.shielddamagetaken += idamage; - if ( self.shielddamagetaken >= damagemax ) - { - shield_origin = self.origin; - if ( isDefined( self.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); - } - if ( isDefined( self.original_owner ) ) - { - self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" ); - } - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); - playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); - self_delete(); - } - else - { - self deployed_set_shield_health( self.shielddamagetaken, damagemax ); - } + damagemax = level.zombie_vars["riotshield_hit_points"]; + + if ( !isdefined( self.shielddamagetaken ) ) + self.shielddamagetaken = 0; + + self.shielddamagetaken += idamage; + + if ( self.shielddamagetaken >= damagemax ) + { + shield_origin = self.origin; + + if ( isdefined( self.stub ) ) + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub ); + + if ( isdefined( self.original_owner ) ) + self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" ); + + maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx ); + playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin ); + self_delete(); + } + else + self deployed_set_shield_health( self.shielddamagetaken, damagemax ); } riotshield_activation_watcher_thread() { - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "alcatraz_shield_zm_taken" ); - while ( 1 ) - { - self waittill_either( "alcatraz_shield_zm_activate", "alcatraz_shield_zm_deactivate" ); - } + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "alcatraz_shield_zm_taken" ); + + while ( true ) + self waittill_either( "alcatraz_shield_zm_activate", "alcatraz_shield_zm_deactivate" ); } watchriotshielduse() { - self endon( "death" ); - self endon( "disconnect" ); - self.shielddamagetaken = 0; - self thread maps/mp/zombies/_zm_riotshield_prison::trackriotshield(); - self thread maps/mp/zombies/_zm_riotshield_prison::trackequipmentchange(); - self thread maps/mp/zombies/_zm_riotshield_prison::watchshieldlaststand(); - self thread trackstuckzombies(); - for ( ;; ) - { - self waittill( "raise_riotshield" ); - self thread maps/mp/zombies/_zm_riotshield_prison::startriotshielddeploy(); - } + self endon( "death" ); + self endon( "disconnect" ); + self.shielddamagetaken = 0; + self thread maps\mp\zombies\_zm_riotshield_prison::trackriotshield(); + self thread maps\mp\zombies\_zm_riotshield_prison::trackequipmentchange(); + self thread maps\mp\zombies\_zm_riotshield_prison::watchshieldlaststand(); + self thread trackstuckzombies(); + + for (;;) + { + self waittill( "raise_riotshield" ); + + self thread maps\mp\zombies\_zm_riotshield_prison::startriotshielddeploy(); + } } watchriotshieldmelee() { - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == level.riotshield_name ) - { - self riotshield_melee(); - } - } + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == level.riotshield_name ) + self riotshield_melee(); + } } is_riotshield_damage( mod, player, amount ) { - if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) - { - return 1; - } - return 0; + if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 ) + return true; + + return false; } riotshield_damage( amount ) { + } riotshield_fling_zombie( player, fling_vec, index ) { - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield ) - { - return; - } - if ( isDefined( self.riotshield_fling_func ) ) - { - self [[ self.riotshield_fling_func ]]( player ); - return; - } - damage = 2500; - self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); - if ( self.health < 1 ) - { - self.riotshield_death = 1; - self startragdoll(); - self launchragdoll( fling_vec ); - } + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield ) + return; + + if ( isdefined( self.riotshield_fling_func ) ) + { + self [[ self.riotshield_fling_func ]]( player ); + return; + } + + damage = 2500; + self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" ); + + if ( self.health < 1 ) + { + self.riotshield_death = 1; + self startragdoll(); + self launchragdoll( fling_vec ); + } } zombie_knockdown( player, gib ) { - damage = level.zombie_vars[ "riotshield_knockdown_damage" ]; - if ( isDefined( level.override_riotshield_damage_func ) ) - { - self [[ level.override_riotshield_damage_func ]]( player, gib ); - } - else - { - if ( gib ) - { - self.a.gib_ref = random( level.riotshield_gib_refs ); - self thread maps/mp/animscripts/zm_death::do_gib(); - } - self dodamage( damage, player.origin, player ); - } + damage = level.zombie_vars["riotshield_knockdown_damage"]; + + if ( isdefined( level.override_riotshield_damage_func ) ) + self [[ level.override_riotshield_damage_func ]]( player, gib ); + else + { + if ( gib ) + { + self.a.gib_ref = random( level.riotshield_gib_refs ); + self thread maps\mp\animscripts\zm_death::do_gib(); + } + + self dodamage( damage, player.origin, player ); + } } riotshield_knockdown_zombie( player, gib ) { - self endon( "death" ); - playsoundatposition( "vox_riotshield_forcehit", self.origin ); - playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( self.riotshield_knockdown_func ) ) - { - self [[ self.riotshield_knockdown_func ]]( player, gib ); - } - else - { - self zombie_knockdown( player, gib ); - } - self dodamage( level.zombie_vars[ "riotshield_knockdown_damage" ], player.origin, player ); - self playsound( "fly_riotshield_forcehit" ); + self endon( "death" ); + playsoundatposition( "vox_riotshield_forcehit", self.origin ); + playsoundatposition( "wpn_riotshield_proj_impact", self.origin ); + + if ( !isdefined( self ) || !isalive( self ) ) + return; + + if ( isdefined( self.riotshield_knockdown_func ) ) + self [[ self.riotshield_knockdown_func ]]( player, gib ); + else + self zombie_knockdown( player, gib ); + + self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player ); + self playsound( "fly_riotshield_forcehit" ); } riotshield_get_enemies_in_range() { - view_pos = self geteye(); - zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars[ "riotshield_knockdown_range" ] ); - if ( !isDefined( zombies ) ) - { - return; - } - knockdown_range_squared = level.zombie_vars[ "riotshield_knockdown_range" ] * level.zombie_vars[ "riotshield_knockdown_range" ]; - gib_range_squared = level.zombie_vars[ "riotshield_gib_range" ] * level.zombie_vars[ "riotshield_gib_range" ]; - fling_range_squared = level.zombie_vars[ "riotshield_fling_range" ] * level.zombie_vars[ "riotshield_fling_range" ]; - cylinder_radius_squared = level.zombie_vars[ "riotshield_cylinder_radius" ] * level.zombie_vars[ "riotshield_cylinder_radius" ]; - forward_view_angles = self getweaponforwarddir(); - end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] ); + view_pos = self geteye(); + zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] ); + + if ( !isdefined( zombies ) ) + return; + + knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"]; + gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"]; + fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"]; + cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"]; + forward_view_angles = self getweaponforwarddir(); + end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] ); /# - if ( getDvarInt( #"BF480CE9" ) == 2 ) - { - near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 ); - circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); - line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); - circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 ); + if ( 2 == getdvarint( _hash_BF480CE9 ) ) + { + near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 ); + circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 ); + circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 ); + } #/ - } - i = 0; - while ( i < zombies.size ) - { - if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - test_origin = zombies[ i ] getcentroid(); - test_range_squared = distancesquared( view_pos, test_origin ); - if ( test_range_squared > knockdown_range_squared ) - { - zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) ); - return; - } - normal = vectornormalize( test_origin - view_pos ); - dot = vectordot( forward_view_angles, normal ); - if ( dot <= 0 ) - { - zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) ); - i++; - continue; - } - else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); - if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) - { - zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 ) - { - zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) ); - i++; - continue; - } - else if ( test_range_squared < fling_range_squared ) - { - level.riotshield_fling_enemies[ level.riotshield_fling_enemies.size ] = zombies[ i ]; - dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; - fling_vec = vectornormalize( test_origin - view_pos ); - if ( test_range_squared >= 5000 ) - { - fling_vec += vectornormalize( test_origin - radial_origin ); - } - fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) ); - fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) ); - level.riotshield_fling_vecs[ level.riotshield_fling_vecs.size ] = fling_vec; - zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) ); - i++; - continue; - } - else - { - level.riotshield_knockdown_enemies[ level.riotshield_knockdown_enemies.size ] = zombies[ i ]; - level.riotshield_knockdown_gib[ level.riotshield_knockdown_gib.size ] = 0; - zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) ); - } - } - i++; - } + for ( i = 0; i < zombies.size; i++ ) + { + if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) ) + continue; + + test_origin = zombies[i] getcentroid(); + test_range_squared = distancesquared( view_pos, test_origin ); + + if ( test_range_squared > knockdown_range_squared ) + { + zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) ); + return; + } + + normal = vectornormalize( test_origin - view_pos ); + dot = vectordot( forward_view_angles, normal ); + + if ( 0 > dot ) + { + zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) ); + continue; + } + + radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); + + if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) + { + zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) ); + continue; + } + + if ( 0 == zombies[i] damageconetrace( view_pos, self ) ) + { + zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) ); + continue; + } + + if ( test_range_squared < fling_range_squared ) + { + level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i]; + dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared; + fling_vec = vectornormalize( test_origin - view_pos ); + + if ( 5000 < test_range_squared ) + fling_vec += vectornormalize( test_origin - radial_origin ); + + fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) ); + fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult ); + level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec; + zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) ); + continue; + } + + level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i]; + level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0; + zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) ); + } } riotshield_network_choke() { - level.riotshield_network_choke_count++; - if ( level.riotshield_network_choke_count % 10 ) - { - wait_network_frame(); - wait_network_frame(); - wait_network_frame(); - } + level.riotshield_network_choke_count++; + + if ( !( level.riotshield_network_choke_count % 10 ) ) + { + wait_network_frame(); + wait_network_frame(); + wait_network_frame(); + } } riotshield_melee() { - if ( !isDefined( level.riotshield_knockdown_enemies ) ) - { - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - } - self riotshield_get_enemies_in_range(); - shield_damage = 0; - level.riotshield_network_choke_count = 0; - i = 0; - while ( i < level.riotshield_fling_enemies.size ) - { - riotshield_network_choke(); - if ( isDefined( level.riotshield_fling_enemies[ i ] ) ) - { - level.riotshield_fling_enemies[ i ] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[ i ], i ); - shield_damage += level.zombie_vars[ "riotshield_fling_damage_shield" ]; - } - i++; - } - i = 0; - while ( i < level.riotshield_knockdown_enemies.size ) - { - riotshield_network_choke(); - level.riotshield_knockdown_enemies[ i ] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[ i ] ); - shield_damage += level.zombie_vars[ "riotshield_knockdown_damage_shield" ]; - i++; - } - level.riotshield_knockdown_enemies = []; - level.riotshield_knockdown_gib = []; - level.riotshield_fling_enemies = []; - level.riotshield_fling_vecs = []; - if ( shield_damage ) - { - self player_damage_shield( shield_damage, 0 ); - } + if ( !isdefined( level.riotshield_knockdown_enemies ) ) + { + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + } + + self riotshield_get_enemies_in_range(); + shield_damage = 0; + level.riotshield_network_choke_count = 0; + + for ( i = 0; i < level.riotshield_fling_enemies.size; i++ ) + { + riotshield_network_choke(); + + if ( isdefined( level.riotshield_fling_enemies[i] ) ) + { + level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i ); + shield_damage += level.zombie_vars["riotshield_fling_damage_shield"]; + } + } + + for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ ) + { + riotshield_network_choke(); + level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] ); + shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"]; + } + + level.riotshield_knockdown_enemies = []; + level.riotshield_knockdown_gib = []; + level.riotshield_fling_enemies = []; + level.riotshield_fling_vecs = []; + + if ( shield_damage ) + self player_damage_shield( shield_damage, 0 ); } trackstuckzombies() { - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - if ( isDefined( self.riotshieldentity ) ) - { - self thread watchstuckzombies(); - } - } + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + if ( isdefined( self.riotshieldentity ) ) + self thread watchstuckzombies(); + } } attack_shield( shield ) { - self endon( "death" ); - shield.owner endon( "death" ); - shield.owner endon( "disconnect" ); - shield.owner endon( "start_riotshield_deploy" ); - shield.owner endon( "destroy_riotshield" ); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - return 0; - } - self.old_origin = self.origin; - if ( getDvar( "zombie_shield_attack_freq" ) == "" ) - { - setdvar( "zombie_shield_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_shield_attack_freq" ); - self.doing_shield_attack = 1; - self.enemyoverride[ 0 ] = shield.origin; - self.enemyoverride[ 1 ] = shield; - wait ( randomint( 100 ) / 100 ); - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - attackanim = "zm_riotshield_melee"; - if ( !self.has_legs ) - { - attackanim += "_crawl"; - } - self orientmode( "face point", shield.origin ); - self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim ); - if ( isDefined( shield.owner.player_shield_apply_damage ) ) - { - shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); - } - else - { - shield.owner player_damage_shield( 100, 0 ); - } - self thread attack_shield_stop( shield ); - wait ( randomint( 100 ) / 100 ); - self.doing_shield_attack = 0; - self orientmode( "face default" ); + self endon( "death" ); + shield.owner endon( "death" ); + shield.owner endon( "disconnect" ); + shield.owner endon( "start_riotshield_deploy" ); + shield.owner endon( "destroy_riotshield" ); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + return 0; + + self.old_origin = self.origin; + + if ( getdvar( _hash_B253DFE7 ) == "" ) + setdvar( "zombie_shield_attack_freq", "15" ); + + freq = getdvarint( _hash_B253DFE7 ); + self.doing_shield_attack = 1; + self.enemyoverride[0] = shield.origin; + self.enemyoverride[1] = shield; + wait( randomint( 100 ) / 100.0 ); + self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname ); + attackanim = "zm_riotshield_melee"; + + if ( !self.has_legs ) + attackanim += "_crawl"; + + self orientmode( "face point", shield.origin ); + self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim ); + + if ( isdefined( shield.owner.player_shield_apply_damage ) ) + shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 ); + else + shield.owner player_damage_shield( 100, 0 ); + + self thread attack_shield_stop( shield ); + wait( randomint( 100 ) / 100.0 ); + self.doing_shield_attack = 0; + self orientmode( "face default" ); } attack_shield_stop( shield ) { - self notify( "attack_shield_stop" ); - self endon( "attack_shield_stop" ); - self endon( "death" ); - shield waittill( "death" ); - self stopanimscripted(); - if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack ) - { - breachanim = "zm_riotshield_breakthrough"; - if ( !self.has_legs ) - { - breachanim += "_crawl"; - } - self animscripted( self.origin, flat_angle( self.angles ), breachanim ); - } + self notify( "attack_shield_stop" ); + self endon( "attack_shield_stop" ); + self endon( "death" ); + + shield waittill( "death" ); + + self stopanimscripted(); + + if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack ) + { + breachanim = "zm_riotshield_breakthrough"; + + if ( !self.has_legs ) + breachanim += "_crawl"; + + self animscripted( self.origin, flat_angle( self.angles ), breachanim ); + } } window_notetracks( msg, player ) { - self endon( "death" ); - while ( 1 ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - player player_damage_shield( 100, 0 ); - } - } + self endon( "death" ); + + while ( true ) + { + self waittill( msg, notetrack ); + + if ( notetrack == "end" ) + return; + + if ( notetrack == "fire" ) + player player_damage_shield( 100, 0 ); + } } watchstuckzombies() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - level endon( "intermission" ); - self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies(); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + level endon( "intermission" ); + self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies(); } riotshield_active() { - return self maps/mp/zombies/_zm_equipment::is_equipment_active( "alcatraz_shield_zm" ); + return self maps\mp\zombies\_zm_equipment::is_equipment_active( "alcatraz_shield_zm" ); } riotshield_debug_print( msg, color ) { /# - if ( !getDvarInt( #"BF480CE9" ) ) - { - return; - } - if ( !isDefined( color ) ) - { - color = ( 0, 0, 1 ); - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 ); + if ( !getdvarint( _hash_BF480CE9 ) ) + return; + + if ( !isdefined( color ) ) + color = ( 1, 1, 1 ); + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 ); #/ } shield_zombie_attract_func( poi ) { + } shield_zombie_arrive_func( poi ) { - self endon( "death" ); - self endon( "zombie_acquire_enemy" ); - self endon( "path_timer_done" ); - self waittill( "goal" ); - if ( isDefined( poi.owner ) ) - { - poi.owner player_damage_shield( 100, 0 ); - if ( isDefined( poi.owner.player_shield_apply_damage ) ) - { - poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); - } - } + self endon( "death" ); + self endon( "zombie_acquire_enemy" ); + self endon( "path_timer_done" ); + + self waittill( "goal" ); + + if ( isdefined( poi.owner ) ) + { + poi.owner player_damage_shield( 100, 0 ); + + if ( isdefined( poi.owner.player_shield_apply_damage ) ) + poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 ); + } } createriotshieldattractor() { - self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); - self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); - return get_zombie_point_of_interest( self.origin ); + self create_zombie_point_of_interest( 50, 8, 0, 1, ::shield_zombie_attract_func, ::shield_zombie_arrive_func ); + self thread create_zombie_point_of_interest_attractor_positions( 4, 15, 15 ); + return get_zombie_point_of_interest( self.origin ); } riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) { - if ( self is_riotshield_damage( mod, player, amount ) ) - { - self riotshield_damage( amount ); - return 1; - } - return 0; + if ( self is_riotshield_damage( mod, player, amount ) ) + { + self riotshield_damage( amount ); + return true; + } + + return false; } watchriotshieldattractor() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "start_riotshield_deploy" ); - self endon( "destroy_riotshield" ); - self endon( "deployed_riotshield" ); - poi = self.riotshieldentity createriotshieldattractor(); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self endon( "destroy_riotshield" ); + self endon( "deployed_riotshield" ); + poi = self.riotshieldentity createriotshieldattractor(); } trackriotshieldattractor() { - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "deployed_riotshield" ); - self thread watchriotshieldattractor(); - } + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "deployed_riotshield" ); + + self thread watchriotshieldattractor(); + } } diff --git a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc index ac19017..bcda267 100644 --- a/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc +++ b/Zombie Maps/Alcatraz/zm_prison_patch/maps/mp/zombies/_zm_weap_tomahawk.gsc @@ -1,632 +1,634 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; -init() //checked matches cerberus output +init() { - registerclientfield( "toplayer", "tomahawk_in_use", 9000, 2, "int" ); - registerclientfield( "toplayer", "upgraded_tomahawk_in_use", 9000, 1, "int" ); - registerclientfield( "scriptmover", "play_tomahawk_fx", 9000, 2, "int" ); - registerclientfield( "actor", "play_tomahawk_hit_sound", 9000, 1, "int" ); - onplayerconnect_callback( ::tomahawk_on_player_connect ); - maps/mp/zombies/_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 ); - maps/mp/zombies/_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 ); - maps/mp/zombies/_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 ); - maps/mp/zombies/_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - maps/mp/zombies/_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - level thread tomahawk_pickup(); - level.zombie_weapons_no_max_ammo = []; - level.zombie_weapons_no_max_ammo[ "bouncing_tomahawk_zm" ] = 1; - level.zombie_weapons_no_max_ammo[ "upgraded_tomahawk_zm" ] = 1; - level.a_tomahawk_pickup_funcs = []; + registerclientfield( "toplayer", "tomahawk_in_use", 9000, 2, "int" ); + registerclientfield( "toplayer", "upgraded_tomahawk_in_use", 9000, 1, "int" ); + registerclientfield( "scriptmover", "play_tomahawk_fx", 9000, 2, "int" ); + registerclientfield( "actor", "play_tomahawk_hit_sound", 9000, 1, "int" ); + onplayerconnect_callback( ::tomahawk_on_player_connect ); + maps\mp\zombies\_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 ); + maps\mp\zombies\_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 ); + maps\mp\zombies\_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 ); + maps\mp\zombies\_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + maps\mp\zombies\_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + level thread tomahawk_pickup(); + level.zombie_weapons_no_max_ammo = []; + level.zombie_weapons_no_max_ammo["bouncing_tomahawk_zm"] = 1; + level.zombie_weapons_no_max_ammo["upgraded_tomahawk_zm"] = 1; + level.a_tomahawk_pickup_funcs = []; } -tomahawk_on_player_connect() //checked matches cerberus output +tomahawk_on_player_connect() { - self.current_tomahawk_weapon = "bouncing_tomahawk_zm"; - self.current_tactical_grenade = "bouncing_tomahawk_zm"; - self thread watch_for_tomahawk_throw(); - self thread watch_for_tomahawk_charge(); + self.current_tomahawk_weapon = "bouncing_tomahawk_zm"; + self.current_tactical_grenade = "bouncing_tomahawk_zm"; + self thread watch_for_tomahawk_throw(); + self thread watch_for_tomahawk_charge(); } -watch_for_tomahawk_throw() //checked changed to match cerberus output +watch_for_tomahawk_throw() { - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( !issubstr( weapname, "tomahawk_zm" ) ) - { - continue; - } - grenade.use_grenade_special_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - grenade.low_level_instant_kill_charge = 1; - grenade.owner = self; - self notify( "throwing_tomahawk" ); - if ( isDefined( self.n_tomahawk_cooking_time ) ) - { - grenade.n_cookedtime = grenade.birthtime - self.n_tomahawk_cooking_time; - } - else - { - grenade.n_cookedtime = 0; - } - self thread check_for_time_out( grenade ); - self thread tomahawk_thrown( grenade ); - } + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_fire", grenade, weapname ); + + if ( !issubstr( weapname, "tomahawk_zm" ) ) + continue; + + grenade.use_grenade_special_bookmark = 1; + grenade.grenade_multiattack_bookmark_count = 1; + grenade.low_level_instant_kill_charge = 1; + grenade.owner = self; + self notify( "throwing_tomahawk" ); + + if ( isdefined( self.n_tomahawk_cooking_time ) ) + grenade.n_cookedtime = grenade.birthtime - self.n_tomahawk_cooking_time; + else + grenade.n_cookedtime = 0; + + self thread check_for_time_out( grenade ); + self thread tomahawk_thrown( grenade ); + } } -watch_for_tomahawk_charge() //checked changed to match cerberus output +watch_for_tomahawk_charge() { - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "grenade_pullback", weaponname ); - if ( !issubstr( weaponname, "tomahawk_zm" ) ) - { - continue; - } - self thread watch_for_grenade_cancel(); - self thread play_charge_fx(); - self.n_tomahawk_cooking_time = getTime(); - self waittill_either( "grenade_fire", "grenade_throw_cancelled" ); - wait 0.1; - self.n_tomahawk_cooking_time = undefined; - } + self endon( "disconnect" ); + + while ( true ) + { + self waittill( "grenade_pullback", weaponname ); + + if ( !issubstr( weaponname, "tomahawk_zm" ) ) + continue; + + self thread watch_for_grenade_cancel(); + self thread play_charge_fx(); + self.n_tomahawk_cooking_time = gettime(); + self waittill_either( "grenade_fire", "grenade_throw_cancelled" ); + wait 0.1; + self.n_tomahawk_cooking_time = undefined; + } } -watch_for_grenade_cancel() //checked matches cerberus output +watch_for_grenade_cancel() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_fire" ); - waittillframeend; - weapon = "none"; - while ( self isthrowinggrenade() && weapon == "none" ) - { - self waittill( "weapon_change", weapon ); - } - self notify( "grenade_throw_cancelled" ); + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_fire" ); + waittillframeend; + weapon = "none"; + + while ( self isthrowinggrenade() && weapon == "none" ) + self waittill( "weapon_change", weapon ); + + self notify( "grenade_throw_cancelled" ); } -play_charge_fx() //checked changed to match cerberus output +play_charge_fx() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "grenade_fire" ); - waittillframeend; - time_to_pulse = 1000; - while ( 1 ) - { - time = getTime() - self.n_tomahawk_cooking_time; - self.current_tactical_grenade = self get_player_tactical_grenade(); - if ( time >= time_to_pulse ) - { - if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) - { - playfxontag( level._effect[ "tomahawk_charge_up_ug" ], self, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "tomahawk_charge_up" ], self, "tag_origin" ); - } - time_to_pulse += 1000; - self playrumbleonentity( "reload_small" ); - } - if ( time_to_pulse > 2400 && self.current_tactical_grenade != "upgraded_tomahawk_zm" ) - { - return; - } - if ( time_to_pulse >= 3400 ) - { - return; - } - wait 0.05; - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "grenade_fire" ); + waittillframeend; + time_to_pulse = 1000; + + while ( true ) + { + time = gettime() - self.n_tomahawk_cooking_time; + self.current_tactical_grenade = self get_player_tactical_grenade(); + + if ( time >= time_to_pulse ) + { + if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) + playfxontag( level._effect["tomahawk_charge_up_ug"], self, "tag_origin" ); + else + playfxontag( level._effect["tomahawk_charge_up"], self, "tag_origin" ); + + time_to_pulse += 1000; + self playrumbleonentity( "reload_small" ); + } + + if ( time_to_pulse > 2400 && self.current_tactical_grenade != "upgraded_tomahawk_zm" ) + break; + + if ( time_to_pulse >= 3400 ) + break; + + wait 0.05; + } } -get_grenade_charge_power( player ) //checked changed to match cerberus output +get_grenade_charge_power( player ) { - player endon( "disconnect" ); - if ( self.n_cookedtime > 1000 && self.n_cookedtime < 2000 ) - { - if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) - { - return 4.5; - } - return 1.5; - } - else if ( self.n_cookedtime > 2000 && self.n_cookedtime < 3000 ) - { - if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) - { - return 6; - } - return 2; - } - else if ( self.n_cookedtime >= 3000 && player.current_tomahawk_weapon != "upgraded_tomahawk_zm" ) - { - return 2; - } - else if ( self.n_cookedtime >= 3000 ) - { - return 3; - } - return 1; + player endon( "disconnect" ); + + if ( self.n_cookedtime > 1000 && self.n_cookedtime < 2000 ) + { + if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) + return 4.5; + + return 1.5; + } + else if ( self.n_cookedtime > 2000 && self.n_cookedtime < 3000 ) + { + if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) + return 6; + + return 2; + } + else if ( self.n_cookedtime >= 3000 && player.current_tomahawk_weapon != "upgraded_tomahawk_zm" ) + return 2; + else if ( self.n_cookedtime >= 3000 ) + return 3; + + return 1; } -tomahawk_thrown( grenade ) //checked changed to match cerberus output +tomahawk_thrown( grenade ) { - self endon( "disconnect" ); - grenade endon( "in_hellhole" ); - grenade_owner = undefined; - if ( isDefined( grenade.owner ) ) - { - grenade_owner = grenade.owner; - } - playfxontag( level._effect[ "tomahawk_charged_trail" ], grenade, "tag_origin" ); - self setclientfieldtoplayer( "tomahawk_in_use", 2 ); - grenade waittill_either( "death", "time_out" ); - grenade_origin = grenade.origin; - a_zombies = getaispeciesarray( "axis", "all" ); - n_grenade_charge_power = grenade get_grenade_charge_power( self ); - a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 200 ); - a_powerups = get_array_of_closest( grenade_origin, level.active_powerups, undefined, undefined, 200 ); - if ( isDefined( level.a_tomahawk_pickup_funcs ) ) - { - foreach ( tomahawk_func in level.a_tomahawk_pickup_funcs ) - { - if ( [[ tomahawk_func ]]( grenade, n_grenade_charge_power ) ) - { - return; - } - } - } - if ( isDefined( a_powerups ) && a_powerups.size > 0 ) - { - m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - foreach ( powerup in a_powerups ) - { - powerup.origin = grenade_origin; - powerup linkto( m_tomahawk ); - m_tomahawk.a_has_powerup = a_powerups; - } - self thread tomahawk_return_player( m_tomahawk, 0 ); - return; - } - if ( !isDefined( a_zombies ) ) - { - m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - self thread tomahawk_return_player( m_tomahawk, 0 ); - return; - } - foreach ( ai_zombie in a_zombies ) - { - ai_zombie.hit_by_tomahawk = 0; - } - if ( isDefined( a_zombies[ 0 ] ) && isalive( a_zombies[ 0 ] ) ) - { - v_zombiepos = a_zombies[ 0 ].origin; - if ( distancesquared( grenade_origin, v_zombiepos ) <= 4900 ) - { - a_zombies[ 0 ] setclientfield( "play_tomahawk_hit_sound", 1 ); - n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[ 0 ], n_grenade_charge_power, grenade ); - a_zombies[ 0 ] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); - a_zombies[ 0 ].hit_by_tomahawk = 1; - self maps/mp/zombies/_zm_score::add_to_player_score( 10 ); - self thread tomahawk_ricochet_attack( grenade_origin, n_grenade_charge_power ); - } - else - { - m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - self thread tomahawk_return_player( m_tomahawk, 0 ); - } - } - else - { - m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); - m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; - if ( isDefined( grenade ) ) - { - grenade delete(); - } - self thread tomahawk_return_player( m_tomahawk, 0 ); - } + self endon( "disconnect" ); + grenade endon( "in_hellhole" ); + grenade_owner = undefined; + + if ( isdefined( grenade.owner ) ) + grenade_owner = grenade.owner; + + playfxontag( level._effect["tomahawk_charged_trail"], grenade, "tag_origin" ); + self setclientfieldtoplayer( "tomahawk_in_use", 2 ); + grenade waittill_either( "death", "time_out" ); + grenade_origin = grenade.origin; + a_zombies = getaispeciesarray( "axis", "all" ); + n_grenade_charge_power = grenade get_grenade_charge_power( self ); + a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 200 ); + a_powerups = get_array_of_closest( grenade_origin, level.active_powerups, undefined, undefined, 200 ); + + if ( isdefined( level.a_tomahawk_pickup_funcs ) ) + { + foreach ( tomahawk_func in level.a_tomahawk_pickup_funcs ) + { + if ( [[ tomahawk_func ]]( grenade, n_grenade_charge_power ) ) + return; + } + } + + if ( isdefined( a_powerups ) && a_powerups.size > 0 ) + { + m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + + foreach ( powerup in a_powerups ) + { + powerup.origin = grenade_origin; + powerup linkto( m_tomahawk ); + m_tomahawk.a_has_powerup = a_powerups; + } + + self thread tomahawk_return_player( m_tomahawk, 0 ); + return; + } + + if ( !isdefined( a_zombies ) ) + { + m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + self thread tomahawk_return_player( m_tomahawk, 0 ); + return; + } + else + { + foreach ( ai_zombie in a_zombies ) + ai_zombie.hit_by_tomahawk = 0; + } + + if ( isdefined( a_zombies[0] ) && isalive( a_zombies[0] ) ) + { + v_zombiepos = a_zombies[0].origin; + + if ( distancesquared( grenade_origin, v_zombiepos ) <= 4900 ) + { + a_zombies[0] setclientfield( "play_tomahawk_hit_sound", 1 ); + n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[0], n_grenade_charge_power, grenade ); + a_zombies[0] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); + a_zombies[0].hit_by_tomahawk = 1; + self maps\mp\zombies\_zm_score::add_to_player_score( 10 ); + self thread tomahawk_ricochet_attack( grenade_origin, n_grenade_charge_power ); + } + else + { + m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + self thread tomahawk_return_player( m_tomahawk, 0 ); + } + } + else + { + m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power ); + m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; + + if ( isdefined( grenade ) ) + grenade delete(); + + self thread tomahawk_return_player( m_tomahawk, 0 ); + } } -check_for_time_out( grenade ) //checked matches cerberus output +check_for_time_out( grenade ) { - self endon( "disconnect" ); - grenade endon( "death" ); - wait 0.5; - grenade notify( "time_out" ); + self endon( "disconnect" ); + grenade endon( "death" ); + wait 0.5; + grenade notify( "time_out" ); } -tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power ) //checked matches cerberus output +tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power ) { - self endon( "disconnect" ); - a_zombies = getaispeciesarray( "axis", "all" ); - a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 300 ); - a_zombies = array_reverse( a_zombies ); - if ( !isDefined( a_zombies ) ) - { - m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power ); - m_tomahawk.n_grenade_charge_power = tomahawk_charge_power; - self thread tomahawk_return_player( m_tomahawk, 0 ); - return; - } - m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power ); - m_tomahawk.n_grenade_charge_power = tomahawk_charge_power; - self thread tomahawk_attack_zombies( m_tomahawk, a_zombies ); + self endon( "disconnect" ); + a_zombies = getaispeciesarray( "axis", "all" ); + a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 300 ); + a_zombies = array_reverse( a_zombies ); + + if ( !isdefined( a_zombies ) ) + { + m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power ); + m_tomahawk.n_grenade_charge_power = tomahawk_charge_power; + self thread tomahawk_return_player( m_tomahawk, 0 ); + return; + } + + m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power ); + m_tomahawk.n_grenade_charge_power = tomahawk_charge_power; + self thread tomahawk_attack_zombies( m_tomahawk, a_zombies ); } -tomahawk_attack_zombies( m_tomahawk, a_zombies ) //checked changed to match cerberus output +tomahawk_attack_zombies( m_tomahawk, a_zombies ) { - self endon( "disconnect" ); - if ( !isDefined( a_zombies ) ) - { - self thread tomahawk_return_player( m_tomahawk, 0 ); - return; - } - if ( a_zombies.size <= 4 ) - { - n_attack_limit = a_zombies.size; - } - else - { - n_attack_limit = 4; - } - for ( i = 0; i < n_attack_limit; i++ ) - { - if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) ) - { - tag = "J_Head"; - if ( a_zombies[ i ].isdog ) - { - tag = "J_Spine1"; - } - if ( isDefined( a_zombies[ i ].hit_by_tomahawk ) && !a_zombies[ i ].hit_by_tomahawk ) - { - v_target = a_zombies[ i ] gettagorigin( tag ); - m_tomahawk moveto( v_target, 0.3 ); - m_tomahawk waittill( "movedone" ); - if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) ) - { - if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) - { - playfxontag( level._effect[ "tomahawk_impact_ug" ], a_zombies[ i ], tag ); - } - else - { - playfxontag( level._effect[ "tomahawk_impact" ], a_zombies[ i ], tag ); - } - playfxontag( level._effect[ "tomahawk_fire_dot" ], a_zombies[ i ], "j_spineupper" ); - a_zombies[ i ] setclientfield( "play_tomahawk_hit_sound", 1 ); - n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[ i ], m_tomahawk.n_grenade_charge_power, m_tomahawk ); - a_zombies[ i ] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); - a_zombies[ i ].hit_by_tomahawk = 1; - self maps/mp/zombies/_zm_score::add_to_player_score( 10 ); - } - } - } - wait 0.2; - } - self thread tomahawk_return_player( m_tomahawk, n_attack_limit ); + self endon( "disconnect" ); + + if ( !isdefined( a_zombies ) ) + { + self thread tomahawk_return_player( m_tomahawk, 0 ); + return; + } + + if ( a_zombies.size <= 4 ) + n_attack_limit = a_zombies.size; + else + n_attack_limit = 4; + + for ( i = 0; i < n_attack_limit; i++ ) + { + if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) ) + { + tag = "J_Head"; + + if ( a_zombies[i].isdog ) + tag = "J_Spine1"; + + if ( isdefined( a_zombies[i].hit_by_tomahawk ) && !a_zombies[i].hit_by_tomahawk ) + { + v_target = a_zombies[i] gettagorigin( tag ); + m_tomahawk moveto( v_target, 0.3 ); + + m_tomahawk waittill( "movedone" ); + + if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) ) + { + if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) + playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag ); + else + playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag ); + + playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" ); + a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 ); + n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk ); + a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); + a_zombies[i].hit_by_tomahawk = 1; + self maps\mp\zombies\_zm_score::add_to_player_score( 10 ); + } + } + } + + wait 0.2; + } + + self thread tomahawk_return_player( m_tomahawk, n_attack_limit ); } -tomahawk_return_player( m_tomahawk, num_zombie_hit ) //checked changed to match cerberus output +tomahawk_return_player( m_tomahawk, num_zombie_hit ) { - self endon( "disconnect" ); - n_dist = distance2dsquared( m_tomahawk.origin, self.origin ); - if ( !isDefined( num_zombie_hit ) ) - { - num_zombie_hit = 5; - } - while ( n_dist > 4096 ) - { - m_tomahawk moveto( self geteye(), 0.25 ); - if ( num_zombie_hit < 5 ) - { - self tomahawk_check_for_zombie( m_tomahawk ); - num_zombie_hit++; - } - wait 0.1; - n_dist = distance2dsquared( m_tomahawk.origin, self geteye() ); - } - if ( isDefined( m_tomahawk.a_has_powerup ) ) - { - foreach ( powerup in m_tomahawk.a_has_powerup ) - { - if ( isDefined( powerup ) ) - { - powerup.origin = self.origin; - } - } - } - m_tomahawk delete(); - self playsoundtoplayer( "wpn_tomahawk_catch_plr", self ); - self playsound( "wpn_tomahawk_catch_npc" ); - wait 5; - self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self ); - self givemaxammo( self.current_tomahawk_weapon ); - a_zombies = getaispeciesarray( "axis", "all" ); - foreach ( ai_zombie in a_zombies ) - { - ai_zombie.hit_by_tomahawk = 0; - } - self setclientfieldtoplayer( "tomahawk_in_use", 3 ); + self endon( "disconnect" ); + n_dist = distance2dsquared( m_tomahawk.origin, self.origin ); + + if ( !isdefined( num_zombie_hit ) ) + num_zombie_hit = 5; + + while ( n_dist > 4096 ) + { + m_tomahawk moveto( self geteye(), 0.25 ); + + if ( num_zombie_hit < 5 ) + { + self tomahawk_check_for_zombie( m_tomahawk ); + num_zombie_hit++; + } + + wait 0.1; + n_dist = distance2dsquared( m_tomahawk.origin, self geteye() ); + } + + if ( isdefined( m_tomahawk.a_has_powerup ) ) + { + foreach ( powerup in m_tomahawk.a_has_powerup ) + { + if ( isdefined( powerup ) ) + powerup.origin = self.origin; + } + } + + m_tomahawk delete(); + self playsoundtoplayer( "wpn_tomahawk_catch_plr", self ); + self playsound( "wpn_tomahawk_catch_npc" ); + wait 5; + self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self ); + self givemaxammo( self.current_tomahawk_weapon ); + a_zombies = getaispeciesarray( "axis", "all" ); + + foreach ( ai_zombie in a_zombies ) + ai_zombie.hit_by_tomahawk = 0; + + self setclientfieldtoplayer( "tomahawk_in_use", 3 ); } -tomahawk_check_for_zombie( grenade ) //checked matches cerberus output +tomahawk_check_for_zombie( grenade ) { - self endon( "disconnect" ); - grenade endon( "death" ); - a_zombies = getaispeciesarray( "axis", "all" ); - a_zombies = get_array_of_closest( grenade.origin, a_zombies, undefined, undefined, 100 ); - if ( isDefined( a_zombies[ 0 ] ) && distance2dsquared( grenade.origin, a_zombies[ 0 ].origin ) <= 10000 ) - { - if ( isDefined( a_zombies[ 0 ].hit_by_tomahawk ) && !a_zombies[ 0 ].hit_by_tomahawk ) - { - self tomahawk_hit_zombie( a_zombies[ 0 ], grenade ); - } - } + self endon( "disconnect" ); + grenade endon( "death" ); + a_zombies = getaispeciesarray( "axis", "all" ); + a_zombies = get_array_of_closest( grenade.origin, a_zombies, undefined, undefined, 100 ); + + if ( isdefined( a_zombies[0] ) && distance2dsquared( grenade.origin, a_zombies[0].origin ) <= 10000 ) + { + if ( isdefined( a_zombies[0].hit_by_tomahawk ) && !a_zombies[0].hit_by_tomahawk ) + self tomahawk_hit_zombie( a_zombies[0], grenade ); + } } -tomahawk_hit_zombie( ai_zombie, grenade ) //checked matches cerberus output +tomahawk_hit_zombie( ai_zombie, grenade ) { - self endon( "disconnect" ); - if ( isDefined( ai_zombie ) && isalive( ai_zombie ) ) - { - tag = "J_Head"; - if ( ai_zombie.isdog ) - { - tag = "J_Spine1"; - } - v_target = ai_zombie gettagorigin( tag ); - grenade moveto( v_target, 0.3 ); - grenade waittill( "movedone" ); - if ( isDefined( ai_zombie ) && isalive( ai_zombie ) ) - { - if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) - { - playfxontag( level._effect[ "tomahawk_impact_ug" ], ai_zombie, tag ); - } - else - { - playfxontag( level._effect[ "tomahawk_impact" ], ai_zombie, tag ); - } - ai_zombie setclientfield( "play_tomahawk_hit_sound", 1 ); - n_tomahawk_damage = calculate_tomahawk_damage( ai_zombie, grenade.n_grenade_charge_power, grenade ); - ai_zombie dodamage( n_tomahawk_damage, grenade.origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); - ai_zombie.hit_by_tomahawk = 1; - self maps/mp/zombies/_zm_score::add_to_player_score( 10 ); - } - } + self endon( "disconnect" ); + + if ( isdefined( ai_zombie ) && isalive( ai_zombie ) ) + { + tag = "J_Head"; + + if ( ai_zombie.isdog ) + tag = "J_Spine1"; + + v_target = ai_zombie gettagorigin( tag ); + grenade moveto( v_target, 0.3 ); + + grenade waittill( "movedone" ); + + if ( isdefined( ai_zombie ) && isalive( ai_zombie ) ) + { + if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) + playfxontag( level._effect["tomahawk_impact_ug"], ai_zombie, tag ); + else + playfxontag( level._effect["tomahawk_impact"], ai_zombie, tag ); + + ai_zombie setclientfield( "play_tomahawk_hit_sound", 1 ); + n_tomahawk_damage = calculate_tomahawk_damage( ai_zombie, grenade.n_grenade_charge_power, grenade ); + ai_zombie dodamage( n_tomahawk_damage, grenade.origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" ); + ai_zombie.hit_by_tomahawk = 1; + self maps\mp\zombies\_zm_score::add_to_player_score( 10 ); + } + } } -tomahawk_spawn( grenade_origin, charged ) //checked matches cerberus output +tomahawk_spawn( grenade_origin, charged ) { - m_tomahawk = spawn( "script_model", grenade_origin ); - m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" ); - m_tomahawk thread tomahawk_spin(); - m_tomahawk playloopsound( "wpn_tomahawk_flying_loop" ); - if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) - { - playfxontag( level._effect[ "tomahawk_trail_ug" ], m_tomahawk, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "tomahawk_trail" ], m_tomahawk, "tag_origin" ); - } - if ( isDefined( charged ) && charged > 1 ) - { - playfxontag( level._effect[ "tomahawk_charged_trail" ], m_tomahawk, "tag_origin" ); - } - m_tomahawk.low_level_instant_kill_charge = 1; - return m_tomahawk; + m_tomahawk = spawn( "script_model", grenade_origin ); + m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" ); + m_tomahawk thread tomahawk_spin(); + m_tomahawk playloopsound( "wpn_tomahawk_flying_loop" ); + + if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" ) + playfxontag( level._effect["tomahawk_trail_ug"], m_tomahawk, "tag_origin" ); + else + playfxontag( level._effect["tomahawk_trail"], m_tomahawk, "tag_origin" ); + + if ( isdefined( charged ) && charged > 1 ) + playfxontag( level._effect["tomahawk_charged_trail"], m_tomahawk, "tag_origin" ); + + m_tomahawk.low_level_instant_kill_charge = 1; + return m_tomahawk; } -tomahawk_spin() //checked matches cerberus output +tomahawk_spin() { - self endon( "death" ); - while ( isDefined( self ) ) - { - self rotatepitch( 90, 0.2 ); - wait 0.15; - } + self endon( "death" ); + + while ( isdefined( self ) ) + { + self rotatepitch( 90, 0.2 ); + wait 0.15; + } } -tomahawk_pickup() //checked matches cerberus output +tomahawk_pickup() { - flag_wait( "soul_catchers_charged" ); - flag_init( "tomahawk_pickup_complete" ); - door = getent( "tomahawk_room_door", "targetname" ); - door trigger_off(); - door connectpaths(); - s_pos_tomahawk = getstruct( "tomahawk_pickup_pos", "targetname" ); - m_tomahawk = spawn( "script_model", s_pos_tomahawk.origin ); - m_tomahawk.targetname = "spinning_tomahawk_pickup"; - m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" ); - m_tomahawk setclientfield( "play_tomahawk_fx", 1 ); - m_tomahawk thread tomahawk_pickup_spin(); - m_tomahawk playloopsound( "amb_tomahawk_swirl" ); - s_pos_trigger = getstruct( "tomahawk_trigger_pos", "targetname" ); - trigger = spawn( "trigger_radius_use", s_pos_trigger.origin, 0, 100, 150 ); - trigger.script_noteworthy = "retriever_pickup_trigger"; - trigger usetriggerrequirelookat(); - trigger triggerignoreteam(); - trigger sethintstring( &"ZM_PRISON_TOMAHAWK_PICKUP" ); - trigger setcursorhint( "HINT_NOICON" ); - trigger_upgraded = spawn( "trigger_radius_use", s_pos_trigger.origin, 0, 100, 150 ); - trigger_upgraded usetriggerrequirelookat(); - trigger_upgraded triggerignoreteam(); - trigger_upgraded.script_noteworthy = "redeemer_pickup_trigger"; - trigger_upgraded sethintstring( &"ZM_PRISON_TOMAHAWK_UPGRADED_PICKUP" ); - trigger_upgraded setcursorhint( "HINT_NOICON" ); - /* + flag_wait( "soul_catchers_charged" ); + flag_init( "tomahawk_pickup_complete" ); + door = getent( "tomahawk_room_door", "targetname" ); + door trigger_off(); + door connectpaths(); + s_pos_tomahawk = getstruct( "tomahawk_pickup_pos", "targetname" ); + m_tomahawk = spawn( "script_model", s_pos_tomahawk.origin ); + m_tomahawk.targetname = "spinning_tomahawk_pickup"; + m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" ); + m_tomahawk setclientfield( "play_tomahawk_fx", 1 ); + m_tomahawk thread tomahawk_pickup_spin(); + m_tomahawk playloopsound( "amb_tomahawk_swirl" ); + s_pos_trigger = getstruct( "tomahawk_trigger_pos", "targetname" ); + trigger = spawn( "trigger_radius_use", s_pos_trigger.origin, 0, 100, 150 ); + trigger.script_noteworthy = "retriever_pickup_trigger"; + trigger usetriggerrequirelookat(); + trigger triggerignoreteam(); + trigger sethintstring( &"ZM_PRISON_TOMAHAWK_PICKUP" ); + trigger setcursorhint( "HINT_NOICON" ); + trigger_upgraded = spawn( "trigger_radius_use", s_pos_trigger.origin, 0, 100, 150 ); + trigger_upgraded usetriggerrequirelookat(); + trigger_upgraded triggerignoreteam(); + trigger_upgraded.script_noteworthy = "redeemer_pickup_trigger"; + trigger_upgraded sethintstring( &"ZM_PRISON_TOMAHAWK_UPGRADED_PICKUP" ); + trigger_upgraded setcursorhint( "HINT_NOICON" ); /# - iprintlnbold( "GO FIND THE TOMAHAWK" ); + iprintlnbold( "GO FIND THE TOMAHAWK" ); #/ - */ - trigger thread tomahawk_pickup_trigger(); - trigger_upgraded thread tomahawk_pickup_trigger(); - flag_set( "tomahawk_pickup_complete" ); + trigger thread tomahawk_pickup_trigger(); + trigger_upgraded thread tomahawk_pickup_trigger(); + flag_set( "tomahawk_pickup_complete" ); } -tomahawk_pickup_trigger() //checked changed to match cerberus output +tomahawk_pickup_trigger() { - while ( 1 ) - { - self waittill( "trigger", player ); - if ( isDefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) ) - { - player takeweapon( player.current_tactical_grenade ); - } - if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) - { - if ( !is_true( player.afterlife ) ) - { - continue; - } - else - { - player disable_player_move_states( 1 ); - gun = player getcurrentweapon(); - level notify( "bouncing_tomahawk_zm_aquired" ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 ); - player giveweapon( "zombie_tomahawk_flourish" ); - player thread tomahawk_update_hud_on_last_stand(); - player switchtoweapon( "zombie_tomahawk_flourish" ); - player waittill_any( "player_downed", "weapon_change_complete" ); - if ( self.script_noteworthy == "redeemer_pickup_trigger" ) - { - player.redeemer_trigger = self; - player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 ); - } - player switchtoweapon( gun ); - player enable_player_move_states(); - player.loadout.hastomahawk = 1; - continue; - } - } - if ( !player hasweapon( "bouncing_tomahawk_zm" ) && !player hasweapon( "upgraded_tomahawk_zm" ) ) - { - player disable_player_move_states( 1 ); - if ( !is_true( player.afterlife ) ) - { - player giveweapon( player.current_tomahawk_weapon ); - player thread tomahawk_update_hud_on_last_stand(); - player thread tomahawk_tutorial_hint(); - player set_player_tactical_grenade( player.current_tomahawk_weapon ); - if ( self.script_noteworthy == "retriever_pickup_trigger" ) - { - player.retriever_trigger = self; - } - player notify( "tomahawk_picked_up" ); - player setclientfieldtoplayer( "tomahawk_in_use", 1 ); - gun = player getcurrentweapon(); - level notify( "bouncing_tomahawk_zm_aquired" ); - player notify( "player_obtained_tomahawk" ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 ); - player giveweapon( "zombie_tomahawk_flourish" ); - player switchtoweapon( "zombie_tomahawk_flourish" ); - player waittill_any( "player_downed", "weapon_change_complete" ); - if ( self.script_noteworthy == "redeemer_pickup_trigger" ) - { - player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 ); - } - player switchtoweapon( gun ); - } - player enable_player_move_states(); - wait 0.1; - } - } + while ( true ) + { + self waittill( "trigger", player ); + + if ( isdefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) ) + player takeweapon( player.current_tactical_grenade ); + + if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" ) + { + if ( !is_true( player.afterlife ) ) + continue; + else + { + player disable_player_move_states( 1 ); + gun = player getcurrentweapon(); + level notify( "bouncing_tomahawk_zm_aquired" ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 ); + player giveweapon( "zombie_tomahawk_flourish" ); + player thread tomahawk_update_hud_on_last_stand(); + player switchtoweapon( "zombie_tomahawk_flourish" ); + player waittill_any( "player_downed", "weapon_change_complete" ); + + if ( self.script_noteworthy == "redeemer_pickup_trigger" ) + { + player.redeemer_trigger = self; + player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 ); + } + + player switchtoweapon( gun ); + player enable_player_move_states(); + player.loadout.hastomahawk = 1; + continue; + } + } + + if ( !player hasweapon( "bouncing_tomahawk_zm" ) && !player hasweapon( "upgraded_tomahawk_zm" ) ) + { + player disable_player_move_states( 1 ); + + if ( !is_true( player.afterlife ) ) + { + player giveweapon( player.current_tomahawk_weapon ); + player thread tomahawk_update_hud_on_last_stand(); + player thread tomahawk_tutorial_hint(); + player set_player_tactical_grenade( player.current_tomahawk_weapon ); + + if ( self.script_noteworthy == "retriever_pickup_trigger" ) + player.retriever_trigger = self; + + player notify( "tomahawk_picked_up" ); + player setclientfieldtoplayer( "tomahawk_in_use", 1 ); + gun = player getcurrentweapon(); + level notify( "bouncing_tomahawk_zm_aquired" ); + player notify( "player_obtained_tomahawk" ); + player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 ); + player giveweapon( "zombie_tomahawk_flourish" ); + player switchtoweapon( "zombie_tomahawk_flourish" ); + player waittill_any( "player_downed", "weapon_change_complete" ); + + if ( self.script_noteworthy == "redeemer_pickup_trigger" ) + player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 ); + + player switchtoweapon( gun ); + } + + player enable_player_move_states(); + wait 0.1; + } + } } -tomahawk_pickup_spin() //checked matches cerberus output +tomahawk_pickup_spin() { - self endon( "death" ); - while ( 1 ) - { - self rotateyaw( 90, 1 ); - wait 0.15; - } + self endon( "death" ); + + while ( true ) + { + self rotateyaw( 90, 1 ); + wait 0.15; + } } -calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) //checked changed to match cerberus output +calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) { - if ( n_tomahawk_power > 2 ) - { - return n_target_zombie.health + 1; - } - else if ( level.round_number >= 10 && level.round_number < 13 && tomahawk.low_level_instant_kill_charge <= 3 ) - { - tomahawk.low_level_instant_kill_charge += 1; - return n_target_zombie.health + 1; - } - else if ( level.round_number >= 13 && level.round_number < 15 && tomahawk.low_level_instant_kill_charge <= 2 ) - { - tomahawk.low_level_instant_kill_charge += 1; - return n_target_zombie.health + 1; - } - else - { - return 1000 * n_tomahawk_power; - } + if ( n_tomahawk_power > 2 ) + return n_target_zombie.health + 1; + else if ( level.round_number >= 10 && level.round_number < 13 && tomahawk.low_level_instant_kill_charge <= 3 ) + { + tomahawk.low_level_instant_kill_charge += 1; + return n_target_zombie.health + 1; + } + else if ( level.round_number >= 13 && level.round_number < 15 && tomahawk.low_level_instant_kill_charge <= 2 ) + { + tomahawk.low_level_instant_kill_charge += 1; + return n_target_zombie.health + 1; + } + else + return 1000 * n_tomahawk_power; } -setting_tutorial_hud() //checked matches cerberus output +setting_tutorial_hud() { - client_hint = newclienthudelem( self ); - client_hint.alignx = "center"; - client_hint.aligny = "middle"; - client_hint.horzalign = "center"; - client_hint.vertalign = "bottom"; - client_hint.y = -120; - client_hint.foreground = 1; - client_hint.font = "default"; - client_hint.fontscale = 1.5; - client_hint.alpha = 1; - client_hint.color = ( 1, 1, 1 ); - return client_hint; + client_hint = newclienthudelem( self ); + client_hint.alignx = "center"; + client_hint.aligny = "middle"; + client_hint.horzalign = "center"; + client_hint.vertalign = "bottom"; + client_hint.y = -120; + client_hint.foreground = 1; + client_hint.font = "default"; + client_hint.fontscale = 1.5; + client_hint.alpha = 1; + client_hint.color = ( 1, 1, 1 ); + return client_hint; } -tomahawk_tutorial_hint() //checked matches cerberus output +tomahawk_tutorial_hint() { - hud = setting_tutorial_hud(); - hud settext( &"ZM_PRISON_TOMAHAWK_TUTORIAL" ); - self waittill_notify_or_timeout( "throwing_tomahawk", 5 ); - wait 1; - hud destroy(); + hud = setting_tutorial_hud(); + hud settext( &"ZM_PRISON_TOMAHAWK_TUTORIAL" ); + self waittill_notify_or_timeout( "throwing_tomahawk", 5 ); + wait 1; + hud destroy(); } -tomahawk_update_hud_on_last_stand() //checked matches cerberus output +tomahawk_update_hud_on_last_stand() { - self endon( "disconnect" ); - self endon( "bled_out" ); - self endon( "tomahawk_upgraded_swap" ); - while ( 1 ) - { - self waittill_either( "entering_last_stand", "fake_death" ); - self setclientfieldtoplayer( "tomahawk_in_use", 0 ); - self waittill( "player_revived" ); - if ( isalive( self ) ) - { - wait 0.1; - self setclientfieldtoplayer( "tomahawk_in_use", 1 ); - self giveweapon( self.current_tomahawk_weapon ); - self givemaxammo( self.current_tomahawk_weapon ); - self set_player_tactical_grenade( self.current_tomahawk_weapon ); - } - } -} + self endon( "disconnect" ); + self endon( "bled_out" ); + self endon( "tomahawk_upgraded_swap" ); + while ( true ) + { + self waittill_either( "entering_last_stand", "fake_death" ); + self setclientfieldtoplayer( "tomahawk_in_use", 0 ); + + self waittill( "player_revived" ); + + if ( isalive( self ) ) + { + wait 0.1; + self setclientfieldtoplayer( "tomahawk_in_use", 1 ); + self giveweapon( self.current_tomahawk_weapon ); + self givemaxammo( self.current_tomahawk_weapon ); + self set_player_tactical_grenade( self.current_tomahawk_weapon ); + } + } +} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/_sticky_grenade.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/_sticky_grenade.gsc deleted file mode 100644 index eb8885c..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/_sticky_grenade.gsc +++ /dev/null @@ -1,12 +0,0 @@ -#include common_scripts/utility; -#include maps/mp/_utility; - -init() -{ - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); - loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" ); -} - -watch_bolt_detonation( owner ) -{ -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc index dbd239a..ff808ca 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise.gsc @@ -1,1854 +1,1860 @@ -//includes checked changed to match cerberus output -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_equipment; -#include character/c_highrise_player_reporter; -#include character/c_highrise_player_engineer; -#include character/c_highrise_player_oldman; -#include character/c_highrise_player_farmgirl; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_devgui; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zm_highrise_distance_tracking; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zm_highrise_achievement; -#include maps/mp/zombies/_zm_weap_tazer_knuckles; -#include maps/mp/zombies/_zm_weap_slipgun; -#include maps/mp/zombies/_zm_weap_ballistic_knife; -#include maps/mp/zombies/_zm_weap_claymore; -#include maps/mp/zombies/_zm_weap_cymbal_monkey; -#include maps/mp/zombies/_zm_weap_bowie; -#include maps/mp/_sticky_grenade; -#include maps/mp/zm_highrise; -#include maps/mp/zombies/_zm_ai_leaper; -#include maps/mp/zm_highrise_classic; -#include maps/mp/gametypes_zm/_spawning; -#include maps/mp/zombies/_load; -#include maps/mp/zm_highrise_elevators; -#include maps/mp/zm_highrise_amb; -#include maps/mp/animscripts/zm_death; -#include maps/mp/zombies/_zm; -#include maps/mp/zm_highrise_utility; -#include maps/mp/zm_highrise_ffotd; -#include maps/mp/zm_highrise_fx; -#include maps/mp/zombies/_zm_banking; -#include maps/mp/zm_highrise_sq; -#include maps/mp/zm_highrise_gamemodes; -#include maps/mp/zombies/_zm_weapon_locker; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_weapon_locker; +#include maps\mp\zm_highrise_gamemodes; +#include maps\mp\zm_highrise_sq; +#include maps\mp\zombies\_zm_banking; +#include maps\mp\zm_highrise_fx; +#include maps\mp\zm_highrise_ffotd; +#include maps\mp\zm_highrise_utility; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_death; +#include maps\mp\zm_highrise_amb; +#include maps\mp\zm_highrise_elevators; +#include maps\mp\zombies\_load; +#include maps\mp\gametypes_zm\_spawning; +#include maps\mp\zm_highrise_classic; +#include maps\mp\zombies\_zm_ai_leaper; +#include maps\mp\zm_highrise; +#include maps\mp\_sticky_grenade; +#include maps\mp\zombies\_zm_weap_bowie; +#include maps\mp\zombies\_zm_weap_cymbal_monkey; +#include maps\mp\zombies\_zm_weap_claymore; +#include maps\mp\zombies\_zm_weap_ballistic_knife; +#include maps\mp\zombies\_zm_weap_slipgun; +#include maps\mp\zombies\_zm_weap_tazer_knuckles; +#include maps\mp\zm_highrise_achievement; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_highrise_distance_tracking; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_devgui; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_perks; +#include character\c_highrise_player_farmgirl; +#include character\c_highrise_player_oldman; +#include character\c_highrise_player_engineer; +#include character\c_highrise_player_reporter; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_chugabud; gamemode_callback_setup() { - maps/mp/zm_highrise_gamemodes::init(); + maps\mp\zm_highrise_gamemodes::init(); } -survival_init() //checked changed to match cerberus output +survival_init() { - level.precachecustomcharacters = ::precache_personality_characters; - level.givecustomcharacters = ::give_personality_characters; - level.setupcustomcharacterexerts = ::setup_personality_character_exerts; - level.buildable_build_custom_func = ::buildable_build_custom_func; - level.use_female_animations = 1; - vend_trigs = getentarray( "zombie_vending", "targetname" ); - foreach ( ent in vend_trigs ) - { - if ( isDefined( ent.clip ) ) - { - ent.clip delete(); - } - } - flag_wait( "start_zombie_round_logic" ); + level.precachecustomcharacters = ::precache_personality_characters; + level.givecustomcharacters = ::give_personality_characters; + level.setupcustomcharacterexerts = ::setup_personality_character_exerts; + level.buildable_build_custom_func = ::buildable_build_custom_func; + level.use_female_animations = 1; + vend_trigs = getentarray( "zombie_vending", "targetname" ); + + foreach ( ent in vend_trigs ) + { + if ( isdefined( ent.clip ) ) + ent.clip delete(); + } + + flag_wait( "start_zombie_round_logic" ); } -zclassic_preinit() //checked changed to match cerberus output +zclassic_preinit() { - setdvar("player_sliding_velocity_cap", 80); - setdvar("player_sliding_wishspeed", 800); - registerclientfield( "scriptmover", "clientfield_escape_pod_tell_fx", 5000, 1, "int" ); - registerclientfield( "scriptmover", "clientfield_escape_pod_sparks_fx", 5000, 1, "int" ); - registerclientfield( "scriptmover", "clientfield_escape_pod_impact_fx", 5000, 1, "int" ); - registerclientfield( "scriptmover", "clientfield_escape_pod_light_fx", 5000, 1, "int" ); - registerclientfield( "actor", "clientfield_whos_who_clone_glow_shader", 5000, 1, "int" ); - registerclientfield( "toplayer", "clientfield_whos_who_audio", 5000, 1, "int" ); - registerclientfield( "toplayer", "clientfield_whos_who_filter", 5000, 1, "int" ); - level.whos_who_client_setup = 1; - maps/mp/zm_highrise_sq::sq_highrise_clientfield_init(); - precachemodel( "p6_zm_keycard" ); - precachemodel( "p6_zm_hr_keycard" ); - precachemodel( "fxanim_zom_highrise_trample_gen_mod" ); - level.banking_map = "zm_transit"; - level.weapon_locker_map = "zm_transit"; - level thread maps/mp/zombies/_zm_banking::init(); - survival_init(); - weapon_locker = spawnstruct(); - weapon_locker.origin = ( 2159, 610, 1343 ); - weapon_locker.angles = VectorScale( ( 0, 1, 0 ), 60 ); - weapon_locker.targetname = "weapons_locker"; - deposit_spot = spawnstruct(); - deposit_spot.origin = ( 2247, 553, 1326 ); - deposit_spot.angles = VectorScale( ( 0, 1, 0 ), 60 ); - deposit_spot.script_length = 16; - deposit_spot.targetname = "bank_deposit"; - withdraw_spot = spawnstruct(); - withdraw_spot.origin = ( 2280, 611, 1330 ); - withdraw_spot.angles = VectorScale( ( 0, 1, 0 ), 60 ); - withdraw_spot.script_length = 16; - withdraw_spot.targetname = "bank_withdraw"; - level thread maps/mp/zombies/_zm_weapon_locker::main(); - weapon_locker thread maps/mp/zombies/_zm_weapon_locker::triggerweaponslockerwatch(); - level thread maps/mp/zombies/_zm_banking::main(); - deposit_spot thread maps/mp/zombies/_zm_banking::bank_deposit_unitrigger(); - withdraw_spot thread maps/mp/zombies/_zm_banking::bank_withdraw_unitrigger(); + setdvar( "player_sliding_velocity_cap", 80.0 ); + setdvar( "player_sliding_wishspeed", 800.0 ); + registerclientfield( "scriptmover", "clientfield_escape_pod_tell_fx", 5000, 1, "int" ); + registerclientfield( "scriptmover", "clientfield_escape_pod_sparks_fx", 5000, 1, "int" ); + registerclientfield( "scriptmover", "clientfield_escape_pod_impact_fx", 5000, 1, "int" ); + registerclientfield( "scriptmover", "clientfield_escape_pod_light_fx", 5000, 1, "int" ); + registerclientfield( "actor", "clientfield_whos_who_clone_glow_shader", 5000, 1, "int" ); + registerclientfield( "toplayer", "clientfield_whos_who_audio", 5000, 1, "int" ); + registerclientfield( "toplayer", "clientfield_whos_who_filter", 5000, 1, "int" ); + level.whos_who_client_setup = 1; + maps\mp\zm_highrise_sq::sq_highrise_clientfield_init(); + precachemodel( "p6_zm_keycard" ); + precachemodel( "p6_zm_hr_keycard" ); + precachemodel( "fxanim_zom_highrise_trample_gen_mod" ); + level.banking_map = "zm_transit"; + level.weapon_locker_map = "zm_transit"; + level thread maps\mp\zombies\_zm_banking::init(); + survival_init(); + + if ( !( isdefined( level.banking_update_enabled ) && level.banking_update_enabled ) ) + return; + + weapon_locker = spawnstruct(); + weapon_locker.origin = ( 2159, 610, 1343 ); + weapon_locker.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); + weapon_locker.targetname = "weapons_locker"; + deposit_spot = spawnstruct(); + deposit_spot.origin = ( 2247, 553, 1326 ); + deposit_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); + deposit_spot.script_length = 16; + deposit_spot.targetname = "bank_deposit"; + withdraw_spot = spawnstruct(); + withdraw_spot.origin = ( 2280, 611, 1330 ); + withdraw_spot.angles = vectorscale( ( 0, 1, 0 ), 60.0 ); + withdraw_spot.script_length = 16; + withdraw_spot.targetname = "bank_withdraw"; + level thread maps\mp\zombies\_zm_weapon_locker::main(); + weapon_locker thread maps\mp\zombies\_zm_weapon_locker::triggerweaponslockerwatch(); + level thread maps\mp\zombies\_zm_banking::main(); + deposit_spot thread maps\mp\zombies\_zm_banking::bank_deposit_unitrigger(); + withdraw_spot thread maps\mp\zombies\_zm_banking::bank_withdraw_unitrigger(); } -createfx_callback() //checked changed to match cerberus output +createfx_callback() { - ents = getentarray(); - for ( i = 0; i < ents.size; i++ ) - { - if ( ents[ i ].classname != "info_player_start" ) - { - ents[ i ] delete(); - } - } + ents = getentarray(); + + for ( i = 0; i < ents.size; i++ ) + { + if ( ents[i].classname != "info_player_start" ) + ents[i] delete(); + } } -main() //checked changed to match cerberus output +main() { - maps/mp/zm_highrise_fx::main(); - level thread maps/mp/zm_highrise_ffotd::main_start(); - level thread maps/mp/zm_highrise_utility::main_start(); - level.level_createfx_callback_thread = ::createfx_callback; - if ( !isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) - { - level.vsmgr_prio_visionset_zm_whos_who = 123; - } - level.default_game_mode = "zclassic"; - level.default_start_location = "rooftop"; - setup_rex_starts(); - maps/mp/zombies/_zm::init_fx(); - maps/mp/animscripts/zm_death::precache_gib_fx(); - level.zombiemode = 1; - level._no_water_risers = 1; - maps/mp/zm_highrise_amb::main(); - level._override_eye_fx = level._effect[ "blue_eyes" ]; - level.level_specific_stats_init = ::init_highrise_stats; - level.hostmigration_link_entity_callback = maps/mp/zm_highrise_elevators::get_link_entity_for_host_migration; - level.hostmigration_ai_link_entity_callback = maps/mp/zm_highrise_elevators::get_link_entity_for_host_migration; - maps/mp/zombies/_load::main(); - if ( getDvar( "createfx" ) != "" ) - { - return; - } - setdvar( "r_lightGridEnableTweaks", 1 ); - setdvar( "r_lightGridIntensity", 1.25 ); - setdvar( "r_lightGridContrast", -0.25 ); - maps/mp/gametypes_zm/_spawning::level_use_unified_spawning( 1 ); - level.givecustomloadout = ::givecustomloadout; - level.custom_player_fake_death = ::zm_player_fake_death; - level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; - level.initial_round_wait_func = ::initial_round_wait_func; - level.zombie_init_done = ::zombie_init_done; - level.check_for_valid_spawn_near_team_callback = ::highrise_respawn_override; - level.zombiemode_using_pack_a_punch = 1; - level.zombiemode_reusing_pack_a_punch = 1; - level.pap_interaction_height = 47; - level.zombiemode_using_doubletap_perk = 1; - level.zombiemode_using_juggernaut_perk = 1; - level.zombiemode_using_revive_perk = 1; - level.zombiemode_using_sleightofhand_perk = 1; - level.zombiemode_using_chugabud_perk = 1; - level.zombiemode_using_additionalprimaryweapon_perk = 1; - level._custom_zombie_audio_func = ::custom_zombie_audio_func; - init_persistent_abilities(); - level._zmbvoxlevelspecific = ::init_level_specific_audio; - maps/mp/zm_highrise_classic::init_escape_elevators_animtree(); - maps/mp/zm_highrise_elevators::init_perk_elvators_animtree(); - level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; - level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; - level._zombie_custom_add_weapons = ::custom_add_weapons; - level._allow_melee_weapon_switching = 1; - level.custom_ai_type = []; - level.custom_ai_type[ level.custom_ai_type.size ] = maps/mp/zombies/_zm_ai_leaper::init; //remove unneeded :: before filepath. makes map fail to launch due to not being able to find _zm_ai_leaper - level.raygun2_included = 1; - include_weapons(); - include_powerups(); - include_equipment_for_level(); - init_level_specific_wall_buy_fx(); - level.special_weapon_magicbox_check = ::highrise_special_weapon_magicbox_check; //no function highrise_special_weapon_magicbox_check found. makes map fail to launch due to unresolved external error. //I forgot to include this function from cerberus; for some reason certain functions and code are - //missing from certain functions in the scripts I use as a base. - level.melee_anim_state = ::melee_anim_state; - level.pandora_fx_func = ::zm_highrise_pandora_fx_func; - maps/mp/zm_highrise_elevators::init_elevator_perks(); - level.custom_vending_precaching = ::custom_vending_precaching; - maps/mp/zombies/_zm::init(); - level thread maps/mp/_sticky_grenade::init(); - maps/mp/zombies/_zm_weap_bowie::init(); - level.legacy_cymbal_monkey = 1; - maps/mp/zombies/_zm_weap_cymbal_monkey::init(); - maps/mp/zombies/_zm_weap_claymore::init(); - maps/mp/zombies/_zm_weap_ballistic_knife::init(); - maps/mp/zombies/_zm_weap_slipgun::init(); - maps/mp/zombies/_zm_weap_tazer_knuckles::init(); - level maps/mp/zm_highrise_achievement::init(); - precacheitem( "death_throe_zm" ); - if ( level.splitscreen && getDvarInt( "splitscreen_playerCount" ) > 2 ) - { - level.optimise_for_splitscreen = 1; - } - else - { - level.optimise_for_splitscreen = 0; - } - precache_team_whos_who_characters(); - maps/mp/zombies/_zm_ai_leaper::precache(); - level thread maps/mp/zm_highrise_sq::start_highrise_sidequest(); - level.zones = []; - level.zone_manager_init_func = ::highrise_zone_init; - init_zones = []; - init_zones[ 0 ] = "zone_green_start"; - init_zones[ 1 ] = "zone_orange_level3a"; - init_zones[ 2 ] = "zone_green_level3d"; - init_zones[ 3 ] = "zone_blue_level2a"; - level thread maps/mp/zombies/_zm_zonemgr::manage_zones( init_zones ); - if ( is_true( level.optimise_for_splitscreen ) ) - { - if ( is_classic() ) - { - level.zombie_ai_limit = 20; - } - setdvar( "fx_marks_draw", 0 ); - setdvar( "disable_rope", 1 ); - setdvar( "cg_disableplayernames", 1 ); - setdvar( "disableLookAtEntityLogic", 1 ); - } - else - { - level.zombie_ai_limit = 24; - } - level.speed_change_round = 15; - level.speed_change_max = 5; - level._audio_custom_response_line = ::highrise_audio_custom_response_line; - setup_zone_monitor(); - setup_leapers(); - level thread toggle_leaper_traversals(); - level thread toggle_zombie_traversals(); - level thread toggle_leaper_collision(); - level thread electric_switch(); - level.ignore_equipment = ::ignore_equipment; - /* + maps\mp\zm_highrise_fx::main(); + level thread maps\mp\zm_highrise_ffotd::main_start(); + level thread maps\mp\zm_highrise_utility::main_start(); + level.level_createfx_callback_thread = ::createfx_callback; + + if ( !isdefined( level.vsmgr_prio_visionset_zm_whos_who ) ) + level.vsmgr_prio_visionset_zm_whos_who = 123; + + level.default_game_mode = "zclassic"; + level.default_start_location = "rooftop"; + setup_rex_starts(); + maps\mp\zombies\_zm::init_fx(); + maps\mp\animscripts\zm_death::precache_gib_fx(); + level.zombiemode = 1; + level._no_water_risers = 1; + maps\mp\zm_highrise_amb::main(); + level._override_eye_fx = level._effect["blue_eyes"]; + level.level_specific_stats_init = ::init_highrise_stats; + level.hostmigration_link_entity_callback = maps\mp\zm_highrise_elevators::get_link_entity_for_host_migration; + level.hostmigration_ai_link_entity_callback = maps\mp\zm_highrise_elevators::get_link_entity_for_host_migration; + maps\mp\zombies\_load::main(); + + if ( getdvar( "createfx" ) != "" ) + return; + + setdvar( "r_lightGridEnableTweaks", 1 ); + setdvar( "r_lightGridIntensity", 1.25 ); + setdvar( "r_lightGridContrast", -0.25 ); + maps\mp\gametypes_zm\_spawning::level_use_unified_spawning( 1 ); + level.givecustomloadout = ::givecustomloadout; + level.custom_player_fake_death = ::zm_player_fake_death; + level.custom_player_fake_death_cleanup = ::zm_player_fake_death_cleanup; + level.initial_round_wait_func = ::initial_round_wait_func; + level.zombie_init_done = ::zombie_init_done; + level.check_for_valid_spawn_near_team_callback = ::highrise_respawn_override; + level.zombiemode_using_pack_a_punch = 1; + level.zombiemode_reusing_pack_a_punch = 1; + level.pap_interaction_height = 47; + level.zombiemode_using_doubletap_perk = 1; + level.zombiemode_using_juggernaut_perk = 1; + level.zombiemode_using_revive_perk = 1; + level.zombiemode_using_sleightofhand_perk = 1; + level.zombiemode_using_chugabud_perk = 1; + level.zombiemode_using_additionalprimaryweapon_perk = 1; + level._custom_zombie_audio_func = ::custom_zombie_audio_func; + init_persistent_abilities(); + level._zmbvoxlevelspecific = ::init_level_specific_audio; + maps\mp\zm_highrise_classic::init_escape_elevators_animtree(); + maps\mp\zm_highrise_elevators::init_perk_elvators_animtree(); + level.register_offhand_weapons_for_level_defaults_override = ::offhand_weapon_overrride; + level.zombiemode_offhand_weapon_give_override = ::offhand_weapon_give_override; + level._zombie_custom_add_weapons = ::custom_add_weapons; + level._allow_melee_weapon_switching = 1; + level.custom_ai_type = []; + level.custom_ai_type[level.custom_ai_type.size] = maps\mp\zombies\_zm_ai_leaper::init; + level.banking_update_enabled = 1; + level.raygun2_included = 1; + include_weapons(); + include_powerups(); + include_equipment_for_level(); + init_level_specific_wall_buy_fx(); + level.special_weapon_magicbox_check = ::highrise_special_weapon_magicbox_check; + level.melee_anim_state = ::melee_anim_state; + level.pandora_fx_func = ::zm_highrise_pandora_fx_func; + maps\mp\zm_highrise_elevators::init_elevator_perks(); + level.custom_vending_precaching = maps\mp\zm_highrise::custom_vending_precaching; + maps\mp\zombies\_zm::init(); + level thread maps\mp\_sticky_grenade::init(); + maps\mp\zombies\_zm_weap_bowie::init(); + level.legacy_cymbal_monkey = 1; + maps\mp\zombies\_zm_weap_cymbal_monkey::init(); + maps\mp\zombies\_zm_weap_claymore::init(); + maps\mp\zombies\_zm_weap_ballistic_knife::init(); + maps\mp\zombies\_zm_weap_slipgun::init(); + maps\mp\zombies\_zm_weap_tazer_knuckles::init(); + level maps\mp\zm_highrise_achievement::init(); + precacheitem( "death_throe_zm" ); + + if ( level.splitscreen && getdvarint( "splitscreen_playerCount" ) > 2 ) + level.optimise_for_splitscreen = 1; + else + level.optimise_for_splitscreen = 0; + + precache_team_whos_who_characters(); + maps\mp\zombies\_zm_ai_leaper::precache(); + level thread maps\mp\zm_highrise_sq::start_highrise_sidequest(); + level.zones = []; + level.zone_manager_init_func = ::highrise_zone_init; + init_zones[0] = "zone_green_start"; + init_zones[1] = "zone_orange_level3a"; + init_zones[2] = "zone_green_level3d"; + init_zones[3] = "zone_blue_level2a"; + level thread maps\mp\zombies\_zm_zonemgr::manage_zones( init_zones ); + + if ( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) + { + if ( is_classic() ) + level.zombie_ai_limit = 20; + + setdvar( "fx_marks_draw", 0 ); + setdvar( "disable_rope", 1 ); + setdvar( "cg_disableplayernames", 1 ); + setdvar( "disableLookAtEntityLogic", 1 ); + } + else + level.zombie_ai_limit = 24; + + level.speed_change_round = 15; + level.speed_change_max = 5; + level._audio_custom_response_line = ::highrise_audio_custom_response_line; + setup_zone_monitor(); + setup_leapers(); + level thread toggle_leaper_traversals(); + level thread toggle_zombie_traversals(); + level thread toggle_leaper_collision(); + level thread electric_switch(); + level.ignore_equipment = ::ignore_equipment; /# - execdevgui( "devgui_zombie_highrise" ); - level.custom_devgui = ::zombie_highrise_devgui; - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Lighting:3/Power On:1" "set zombie_devgui_hrpowerlighting on" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Lighting:3/Power Off:2" "set zombie_devgui_hrpowerlighting off" \n" ); - level thread watch_lightpower_devgui(); + execdevgui( "devgui_zombie_highrise" ); + level.custom_devgui = ::zombie_highrise_devgui; + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power On:1\" \"set zombie_devgui_hrpowerlighting on\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Lighting:3/Power Off:2\" \"set zombie_devgui_hrpowerlighting off\" \n" ); + level thread watch_lightpower_devgui(); #/ - */ - level thread maps/mp/zombies/_zm::post_main(); - level thread maps/mp/zm_highrise_ffotd::main_end(); - level thread maps/mp/zm_highrise_utility::main_end(); - level thread maps/mp/zm_highrise_distance_tracking::zombie_tracking_init(); - trigs = getentarray( "force_from_prone", "targetname" ); - array_thread( trigs, ::player_force_from_prone ); - level._dont_unhide_quickervive_on_hotjoin = 1; + level thread maps\mp\zombies\_zm::post_main(); + level thread maps\mp\zm_highrise_ffotd::main_end(); + level thread maps\mp\zm_highrise_utility::main_end(); + level thread maps\mp\zm_highrise_distance_tracking::zombie_tracking_init(); + trigs = getentarray( "force_from_prone", "targetname" ); + array_thread( trigs, ::player_force_from_prone ); + level._dont_unhide_quickervive_on_hotjoin = 1; } -custom_vending_precaching() //changed at own discretion +custom_vending_precaching() { - if ( is_true( level.zombiemode_using_pack_a_punch ) ) - { - precacheitem( "zombie_knuckle_crack" ); - precachemodel( "p6_anim_zm_buildable_pap" ); - precachemodel( "p6_anim_zm_buildable_pap_on" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); - precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); - level._effect[ "packapunch_fx" ] = loadfx( "maps/zombie/fx_zmb_highrise_packapunch" ); - level.machine_assets[ "packapunch" ] = spawnstruct(); - level.machine_assets[ "packapunch" ].weapon = "zombie_knuckle_crack"; - level.machine_assets[ "packapunch" ].off_model = "p6_anim_zm_buildable_pap"; - level.machine_assets[ "packapunch" ].on_model = "p6_anim_zm_buildable_pap_on"; - } - if ( is_true( level.zombiemode_using_additionalprimaryweapon_perk ) ) - { - precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); - precacheshader( "specialty_additionalprimaryweapon_zombies" ); - precachemodel( "zombie_vending_three_gun" ); - precachemodel( "zombie_vending_three_gun_on" ); - precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); - level._effect[ "additionalprimaryweapon_light" ] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); - level.machine_assets[ "additionalprimaryweapon" ] = spawnstruct(); - level.machine_assets[ "additionalprimaryweapon" ].weapon = "zombie_perk_bottle_additionalprimaryweapon"; - level.machine_assets[ "additionalprimaryweapon" ].off_model = "zombie_vending_three_gun"; - level.machine_assets[ "additionalprimaryweapon" ].on_model = "zombie_vending_three_gun_on"; - } - if ( is_true( level.zombiemode_using_deadshot_perk ) ) - { - precacheitem( "zombie_perk_bottle_deadshot" ); - precacheshader( "specialty_ads_zombies" ); - precachemodel( "zombie_vending_ads" ); - precachemodel( "zombie_vending_ads_on" ); - precachestring( &"ZOMBIE_PERK_DEADSHOT" ); - level._effect[ "deadshot_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "deadshot" ] = spawnstruct(); - level.machine_assets[ "deadshot" ].weapon = "zombie_perk_bottle_deadshot"; - level.machine_assets[ "deadshot" ].off_model = "zombie_vending_ads"; - level.machine_assets[ "deadshot" ].on_model = "zombie_vending_ads_on"; - } - if ( is_true( level.zombiemode_using_divetonuke_perk ) ) - { - precacheitem( "zombie_perk_bottle_nuke" ); - precacheshader( "specialty_divetonuke_zombies" ); - precachemodel( "zombie_vending_nuke" ); - precachemodel( "zombie_vending_nuke_on" ); - precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); - level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "divetonuke" ] = spawnstruct(); - level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; - level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; - level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; - } - if ( is_true( level.zombiemode_using_doubletap_perk ) ) - { - precacheitem( "zombie_perk_bottle_doubletap" ); - precacheshader( "specialty_doubletap_zombies" ); - precachemodel( "zombie_vending_doubletap2" ); - precachemodel( "zombie_vending_doubletap2_on" ); - precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); - level._effect[ "doubletap_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); - level.machine_assets[ "doubletap" ] = spawnstruct(); - level.machine_assets[ "doubletap" ].weapon = "zombie_perk_bottle_doubletap"; - level.machine_assets[ "doubletap" ].off_model = "zombie_vending_doubletap2"; - level.machine_assets[ "doubletap" ].on_model = "zombie_vending_doubletap2_on"; - } - if ( is_true( level.zombiemode_using_juggernaut_perk ) ) - { - precacheitem( "zombie_perk_bottle_jugg" ); - precacheshader( "specialty_juggernaut_zombies" ); - precachemodel( "zombie_vending_jugg" ); - precachemodel( "zombie_vending_jugg_on" ); - precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); - level._effect[ "jugger_light" ] = loadfx( "misc/fx_zombie_cola_jugg_on" ); - level.machine_assets[ "juggernog" ] = spawnstruct(); - level.machine_assets[ "juggernog" ].weapon = "zombie_perk_bottle_jugg"; - level.machine_assets[ "juggernog" ].off_model = "zombie_vending_jugg"; - level.machine_assets[ "juggernog" ].on_model = "zombie_vending_jugg_on"; - } - if ( is_true( level.zombiemode_using_marathon_perk ) ) - { - precacheitem( "zombie_perk_bottle_marathon" ); - precacheshader( "specialty_marathon_zombies" ); - precachemodel( "zombie_vending_marathon" ); - precachemodel( "zombie_vending_marathon_on" ); - precachestring( &"ZOMBIE_PERK_MARATHON" ); - level._effect[ "marathon_light" ] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); - level.machine_assets[ "marathon" ] = spawnstruct(); - level.machine_assets[ "marathon" ].weapon = "zombie_perk_bottle_marathon"; - level.machine_assets[ "marathon" ].off_model = "zombie_vending_marathon"; - level.machine_assets[ "marathon" ].on_model = "zombie_vending_marathon_on"; - } - if ( is_true( level.zombiemode_using_revive_perk ) ) - { - precacheitem( "zombie_perk_bottle_revive" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "zombie_vending_revive" ); - precachemodel( "zombie_vending_revive_on" ); - precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); - level._effect[ "revive_light" ] = loadfx( "misc/fx_zombie_cola_revive_on" ); - level._effect[ "revive_light_flicker" ] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); - level.machine_assets[ "revive" ] = spawnstruct(); - level.machine_assets[ "revive" ].weapon = "zombie_perk_bottle_revive"; - level.machine_assets[ "revive" ].off_model = "zombie_vending_revive"; - level.machine_assets[ "revive" ].on_model = "zombie_vending_revive_on"; - } - if ( is_true( level.zombiemode_using_sleightofhand_perk ) ) - { - precacheitem( "zombie_perk_bottle_sleight" ); - precacheshader( "specialty_fastreload_zombies" ); - precachemodel( "zombie_vending_sleight" ); - precachemodel( "zombie_vending_sleight_on" ); - precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); - level._effect[ "sleight_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "speedcola" ] = spawnstruct(); - level.machine_assets[ "speedcola" ].weapon = "zombie_perk_bottle_sleight"; - level.machine_assets[ "speedcola" ].off_model = "zombie_vending_sleight"; - level.machine_assets[ "speedcola" ].on_model = "zombie_vending_sleight_on"; - } - if ( is_true( level.zombiemode_using_tombstone_perk ) ) - { - precacheitem( "zombie_perk_bottle_tombstone" ); - precacheshader( "specialty_tombstone_zombies" ); - precachemodel( "zombie_vending_tombstone" ); - precachemodel( "zombie_vending_tombstone_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "tombstone" ] = spawnstruct(); - level.machine_assets[ "tombstone" ].weapon = "zombie_perk_bottle_tombstone"; - level.machine_assets[ "tombstone" ].off_model = "zombie_vending_tombstone"; - level.machine_assets[ "tombstone" ].on_model = "zombie_vending_tombstone_on"; - } - if ( is_true( level.zombiemode_using_chugabud_perk ) ) - { - precacheitem( "zombie_perk_bottle_whoswho" ); - precacheshader( "specialty_quickrevive_zombies" ); - precachemodel( "p6_zm_vending_chugabud" ); - precachemodel( "p6_zm_vending_chugabud_on" ); - precachemodel( "ch_tombstone1" ); - precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); - level._effect[ "tombstone_light" ] = loadfx( "misc/fx_zombie_cola_on" ); - level.machine_assets[ "whoswho" ] = spawnstruct(); - level.machine_assets[ "whoswho" ].weapon = "zombie_perk_bottle_whoswho"; - level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; - level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; - } + if ( isdefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) + { + precacheitem( "zombie_knuckle_crack" ); + precachemodel( "p6_anim_zm_buildable_pap" ); + precachemodel( "p6_anim_zm_buildable_pap_on" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH" ); + precachestring( &"ZOMBIE_PERK_PACKAPUNCH_ATT" ); + level._effect["packapunch_fx"] = loadfx( "maps/zombie/fx_zmb_highrise_packapunch" ); + level.machine_assets["packapunch"] = spawnstruct(); + level.machine_assets["packapunch"].weapon = "zombie_knuckle_crack"; + level.machine_assets["packapunch"].off_model = "p6_anim_zm_buildable_pap"; + level.machine_assets["packapunch"].on_model = "p6_anim_zm_buildable_pap_on"; + } + + if ( isdefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) + { + precacheitem( "zombie_perk_bottle_additionalprimaryweapon" ); + precacheshader( "specialty_additionalprimaryweapon_zombies" ); + precachemodel( "zombie_vending_three_gun" ); + precachemodel( "zombie_vending_three_gun_on" ); + precachestring( &"ZOMBIE_PERK_ADDITIONALWEAPONPERK" ); + level._effect["additionalprimaryweapon_light"] = loadfx( "misc/fx_zombie_cola_arsenal_on" ); + level.machine_assets["additionalprimaryweapon"] = spawnstruct(); + level.machine_assets["additionalprimaryweapon"].weapon = "zombie_perk_bottle_additionalprimaryweapon"; + level.machine_assets["additionalprimaryweapon"].off_model = "zombie_vending_three_gun"; + level.machine_assets["additionalprimaryweapon"].on_model = "zombie_vending_three_gun_on"; + } + + if ( isdefined( level.zombiemode_using_deadshot_perk ) && level.zombiemode_using_deadshot_perk ) + { + precacheitem( "zombie_perk_bottle_deadshot" ); + precacheshader( "specialty_ads_zombies" ); + precachemodel( "zombie_vending_ads" ); + precachemodel( "zombie_vending_ads_on" ); + precachestring( &"ZOMBIE_PERK_DEADSHOT" ); + level._effect["deadshot_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["deadshot"] = spawnstruct(); + level.machine_assets["deadshot"].weapon = "zombie_perk_bottle_deadshot"; + level.machine_assets["deadshot"].off_model = "zombie_vending_ads"; + level.machine_assets["deadshot"].on_model = "zombie_vending_ads_on"; + } + + if ( isdefined( level.zombiemode_using_divetonuke_perk ) && level.zombiemode_using_divetonuke_perk ) + { + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "zombie_vending_nuke" ); + precachemodel( "zombie_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["divetonuke"] = spawnstruct(); + level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke"; + level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on"; + } + + if ( isdefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) + { + precacheitem( "zombie_perk_bottle_doubletap" ); + precacheshader( "specialty_doubletap_zombies" ); + precachemodel( "zombie_vending_doubletap2" ); + precachemodel( "zombie_vending_doubletap2_on" ); + precachestring( &"ZOMBIE_PERK_DOUBLETAP" ); + level._effect["doubletap_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets["doubletap"] = spawnstruct(); + level.machine_assets["doubletap"].weapon = "zombie_perk_bottle_doubletap"; + level.machine_assets["doubletap"].off_model = "zombie_vending_doubletap2"; + level.machine_assets["doubletap"].on_model = "zombie_vending_doubletap2_on"; + } + + if ( isdefined( level.zombiemode_using_juggernaut_perk ) && level.zombiemode_using_juggernaut_perk ) + { + precacheitem( "zombie_perk_bottle_jugg" ); + precacheshader( "specialty_juggernaut_zombies" ); + precachemodel( "zombie_vending_jugg" ); + precachemodel( "zombie_vending_jugg_on" ); + precachestring( &"ZOMBIE_PERK_JUGGERNAUT" ); + level._effect["jugger_light"] = loadfx( "misc/fx_zombie_cola_jugg_on" ); + level.machine_assets["juggernog"] = spawnstruct(); + level.machine_assets["juggernog"].weapon = "zombie_perk_bottle_jugg"; + level.machine_assets["juggernog"].off_model = "zombie_vending_jugg"; + level.machine_assets["juggernog"].on_model = "zombie_vending_jugg_on"; + } + + if ( isdefined( level.zombiemode_using_marathon_perk ) && level.zombiemode_using_marathon_perk ) + { + precacheitem( "zombie_perk_bottle_marathon" ); + precacheshader( "specialty_marathon_zombies" ); + precachemodel( "zombie_vending_marathon" ); + precachemodel( "zombie_vending_marathon_on" ); + precachestring( &"ZOMBIE_PERK_MARATHON" ); + level._effect["marathon_light"] = loadfx( "maps/zombie/fx_zmb_cola_staminup_on" ); + level.machine_assets["marathon"] = spawnstruct(); + level.machine_assets["marathon"].weapon = "zombie_perk_bottle_marathon"; + level.machine_assets["marathon"].off_model = "zombie_vending_marathon"; + level.machine_assets["marathon"].on_model = "zombie_vending_marathon_on"; + } + + if ( isdefined( level.zombiemode_using_revive_perk ) && level.zombiemode_using_revive_perk ) + { + precacheitem( "zombie_perk_bottle_revive" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "zombie_vending_revive" ); + precachemodel( "zombie_vending_revive_on" ); + precachestring( &"ZOMBIE_PERK_QUICKREVIVE" ); + level._effect["revive_light"] = loadfx( "misc/fx_zombie_cola_revive_on" ); + level._effect["revive_light_flicker"] = loadfx( "maps/zombie/fx_zmb_cola_revive_flicker" ); + level.machine_assets["revive"] = spawnstruct(); + level.machine_assets["revive"].weapon = "zombie_perk_bottle_revive"; + level.machine_assets["revive"].off_model = "zombie_vending_revive"; + level.machine_assets["revive"].on_model = "zombie_vending_revive_on"; + } + + if ( isdefined( level.zombiemode_using_sleightofhand_perk ) && level.zombiemode_using_sleightofhand_perk ) + { + precacheitem( "zombie_perk_bottle_sleight" ); + precacheshader( "specialty_fastreload_zombies" ); + precachemodel( "zombie_vending_sleight" ); + precachemodel( "zombie_vending_sleight_on" ); + precachestring( &"ZOMBIE_PERK_FASTRELOAD" ); + level._effect["sleight_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["speedcola"] = spawnstruct(); + level.machine_assets["speedcola"].weapon = "zombie_perk_bottle_sleight"; + level.machine_assets["speedcola"].off_model = "zombie_vending_sleight"; + level.machine_assets["speedcola"].on_model = "zombie_vending_sleight_on"; + } + + if ( isdefined( level.zombiemode_using_tombstone_perk ) && level.zombiemode_using_tombstone_perk ) + { + precacheitem( "zombie_perk_bottle_tombstone" ); + precacheshader( "specialty_tombstone_zombies" ); + precachemodel( "zombie_vending_tombstone" ); + precachemodel( "zombie_vending_tombstone_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["tombstone"] = spawnstruct(); + level.machine_assets["tombstone"].weapon = "zombie_perk_bottle_tombstone"; + level.machine_assets["tombstone"].off_model = "zombie_vending_tombstone"; + level.machine_assets["tombstone"].on_model = "zombie_vending_tombstone_on"; + } + + if ( isdefined( level.zombiemode_using_chugabud_perk ) && level.zombiemode_using_chugabud_perk ) + { + precacheitem( "zombie_perk_bottle_whoswho" ); + precacheshader( "specialty_quickrevive_zombies" ); + precachemodel( "p6_zm_vending_chugabud" ); + precachemodel( "p6_zm_vending_chugabud_on" ); + precachemodel( "ch_tombstone1" ); + precachestring( &"ZOMBIE_PERK_TOMBSTONE" ); + level._effect["tombstone_light"] = loadfx( "misc/fx_zombie_cola_on" ); + level.machine_assets["whoswho"] = spawnstruct(); + level.machine_assets["whoswho"].weapon = "zombie_perk_bottle_whoswho"; + level.machine_assets["whoswho"].off_model = "p6_zm_vending_chugabud"; + level.machine_assets["whoswho"].on_model = "p6_zm_vending_chugabud_on"; + } } -choose_a_line_to_play() //checked changed to match cerberus output +choose_a_line_to_play() { - if ( !isDefined( level.custom_zombie_sounds ) ) - { - level.custom_zombie_sounds = array( "vox_zombie_sidequest_zombie_lies_0", "vox_zombie_sidequest_zombie_lies_1", "vox_zombie_sidequest_zombie_lies_2", "vox_zombie_sidequest_zombie_pain_0", "vox_zombie_sidequest_zombie_pain_1", "vox_zombie_sidequest_zombie_pain_2", "vox_zombie_sidequest_zombie_pain_3", "vox_zombie_sidequest_zombie_pain_4", "vox_zombie_sidequest_zombie_pain_5", "vox_zombie_sidequest_zombie_pain_6", "vox_zombie_sidequest_zombie_plea_0", "vox_zombie_sidequest_zombie_plea_1", "vox_zombie_sidequest_zombie_plea_2", "vox_zombie_sidequest_zombie_plea_3", "vox_zombie_sidequest_zombie_plea_4", "vox_zombie_sidequest_zombie_plea_5" ); - level.custom_zombie_sounds = randomize_array( level.custom_zombie_sounds ); - level.last_custom_sound_played = 0; - level.custom_zombie_sound_play_frequences = array( 5, 10, 20, 30 ); - level.custom_zombie_sound_play_round_numbers = array( 2, 5, 7, 10 ); - level.custom_zombie_sound_played_interval = 6000; - } - else if ( level.last_custom_sound_played >= level.custom_zombie_sounds.size ) - { - level.custom_zombie_sounds = randomize_array( level.custom_zombie_sounds ); - level.last_custom_sound_played = 0; - } - sound = level.custom_zombie_sounds[ level.last_custom_sound_played ]; - level.last_custom_sound_played++; - return sound; + if ( !isdefined( level.custom_zombie_sounds ) ) + { + level.custom_zombie_sounds = array( "vox_zombie_sidequest_zombie_lies_0", "vox_zombie_sidequest_zombie_lies_1", "vox_zombie_sidequest_zombie_lies_2", "vox_zombie_sidequest_zombie_pain_0", "vox_zombie_sidequest_zombie_pain_1", "vox_zombie_sidequest_zombie_pain_2", "vox_zombie_sidequest_zombie_pain_3", "vox_zombie_sidequest_zombie_pain_4", "vox_zombie_sidequest_zombie_pain_5", "vox_zombie_sidequest_zombie_pain_6", "vox_zombie_sidequest_zombie_plea_0", "vox_zombie_sidequest_zombie_plea_1", "vox_zombie_sidequest_zombie_plea_2", "vox_zombie_sidequest_zombie_plea_3", "vox_zombie_sidequest_zombie_plea_4", "vox_zombie_sidequest_zombie_plea_5" ); + level.custom_zombie_sounds = randomize_array( level.custom_zombie_sounds ); + level.last_custom_sound_played = 0; + level.custom_zombie_sound_play_frequences = array( 5, 10, 20, 30 ); + level.custom_zombie_sound_play_round_numbers = array( 2, 5, 7, 10 ); + level.custom_zombie_sound_played_interval = 6000; + } + else if ( level.last_custom_sound_played >= level.custom_zombie_sounds.size ) + { + level.custom_zombie_sounds = randomize_array( level.custom_zombie_sounds ); + level.last_custom_sound_played = 0; + } + + sound = level.custom_zombie_sounds[level.last_custom_sound_played]; + level.last_custom_sound_played++; + return sound; } -get_custom_zombie_sound_play_frequency() //checked changed to match cerberus output +get_custom_zombie_sound_play_frequency() { - if ( !isDefined( level.custom_zombie_sounds ) ) - { - return 100; - } - if ( isDefined( level.last_custom_zombie_sound_time ) ) - { - if ( getTime() < ( level.last_custom_zombie_sound_time + level.custom_zombie_sound_played_interval ) ) - { - return 0; - } - } - if ( level.round_number >= level.custom_zombie_sound_play_round_numbers[ level.custom_zombie_sound_play_round_numbers.size - 1 ] ) - { - return 40; - } - for ( i = 0; i < level.custom_zombie_sound_play_round_numbers.size; i++ ) - { - if ( level.round_number < level.custom_zombie_sound_play_round_numbers[ i ] ) - { - return level.custom_zombie_sound_play_frequences[ i ]; - } - } - return 0; + if ( !isdefined( level.custom_zombie_sounds ) ) + return 100; + + if ( isdefined( level.last_custom_zombie_sound_time ) ) + { + if ( gettime() < level.last_custom_zombie_sound_time + level.custom_zombie_sound_played_interval ) + return 0; + } + + if ( level.round_number >= level.custom_zombie_sound_play_round_numbers[level.custom_zombie_sound_play_round_numbers.size - 1] ) + return 40; + + for ( i = 0; i < level.custom_zombie_sound_play_round_numbers.size; i++ ) + { + if ( level.round_number < level.custom_zombie_sound_play_round_numbers[i] ) + return level.custom_zombie_sound_play_frequences[i]; + } + + return 0; } -custom_zombie_audio_func( alias, alias_type ) //checked partially changed to match cerberus output see info.md +custom_zombie_audio_func( alias, alias_type ) { - if ( alias_type != "behind" ) - { - if ( is_true( level.isstuhlingeringame ) ) - { - if ( randomint( 100 ) > ( 100 - get_custom_zombie_sound_play_frequency() ) ) - { - players = get_players(); - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) && player.characterindex == 1 ) - { - level.last_custom_zombie_sound_time = getTime(); - alias_to_play = choose_a_line_to_play(); - self playsoundtoplayer( alias_to_play, player ); - } - else - { - self playsoundtoplayer( alias, player ); - } - } - return; - } - } - } - self playsound( alias ); + if ( alias_type != "behind" ) + { + if ( isdefined( level.isstuhlingeringame ) && level.isstuhlingeringame ) + { + if ( randomint( 100 ) > 100 - get_custom_zombie_sound_play_frequency() ) + { + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) && player.characterindex == 1 ) + { + level.last_custom_zombie_sound_time = gettime(); + alias_to_play = choose_a_line_to_play(); + self playsoundtoplayer( alias_to_play, player ); + continue; + } + + self playsoundtoplayer( alias, player ); + } + + return; + } + } + } + + self playsound( alias ); } -init_persistent_abilities() //checked changed to match cerberus output +init_persistent_abilities() { - if ( is_classic() ) - { - level.pers_upgrade_boards = 1; - level.pers_upgrade_revive = 1; - level.pers_upgrade_multi_kill_headshots = 1; - level.pers_upgrade_cash_back = 1; - level.pers_upgrade_insta_kill = 1; - level.pers_upgrade_jugg = 1; - level.pers_upgrade_carpenter = 1; - level.pers_upgrade_box_weapon = 1; - level.pers_magic_box_firesale = 1; - level.pers_treasure_chest_get_weapons_array_func = ::pers_treasure_chest_get_weapons_array_highrise; - level.pers_upgrade_sniper = 1; - level.pers_upgrade_pistol_points = 1; - level.pers_upgrade_perk_lose = 1; - level.pers_upgrade_double_points = 1; - level.pers_upgrade_nube = 1; - } + if ( is_classic() ) + { + level.pers_upgrade_boards = 1; + level.pers_upgrade_revive = 1; + level.pers_upgrade_multi_kill_headshots = 1; + level.pers_upgrade_cash_back = 1; + level.pers_upgrade_insta_kill = 1; + level.pers_upgrade_jugg = 1; + level.pers_upgrade_carpenter = 1; + level.pers_upgrade_box_weapon = 1; + level.pers_magic_box_firesale = 1; + level.pers_treasure_chest_get_weapons_array_func = ::pers_treasure_chest_get_weapons_array_highrise; + level.pers_upgrade_sniper = 1; + level.pers_upgrade_pistol_points = 1; + level.pers_upgrade_perk_lose = 1; + level.pers_upgrade_double_points = 1; + level.pers_upgrade_nube = 1; + } } -pers_treasure_chest_get_weapons_array_highrise() //checked added from cerberus output +pers_treasure_chest_get_weapons_array_highrise() { - if ( !isdefined( level.pers_box_weapons ) ) - { - level.pers_box_weapons = []; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "knife_ballistic_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "cymbal_monkey_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "judge_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "galil_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "hamr_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "python_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "ray_gun_zm"; - level.pers_box_weapons[ level.pers_box_weapons.size ] = "rpd_zm"; - } + if ( !isdefined( level.pers_box_weapons ) ) + { + level.pers_box_weapons = []; + level.pers_box_weapons[level.pers_box_weapons.size] = "knife_ballistic_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "cymbal_monkey_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "judge_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "galil_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "hamr_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "python_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "ray_gun_zm"; + level.pers_box_weapons[level.pers_box_weapons.size] = "rpd_zm"; + } } -watch_lightpower_devgui() //dev call didn't check +watch_lightpower_devgui() { - /* /# - while ( 1 ) - { - powercmd = getDvar( "zombie_devgui_hrpowerlighting" ); - if ( isDefined( powercmd ) && powercmd != "" ) - { - if ( powercmd == "on" ) - { - clientnotify( "pwr" ); - } - else - { - clientnotify( "pwo" ); - } - setdvar( "zombie_devgui_hrpowerlighting", "" ); - } - wait 1; + while ( true ) + { + powercmd = getdvar( _hash_A84512A ); + + if ( isdefined( powercmd ) && powercmd != "" ) + { + if ( powercmd == "on" ) + clientnotify( "pwr" ); + else + clientnotify( "pwo" ); + + setdvar( "zombie_devgui_hrpowerlighting", "" ); + } + + wait 1.0; + } #/ - } - */ } -setup_leapers() //checked matches cerberus output dvar not found +setup_leapers() { - /* - if ( isDefined( getDvarInt( #"60AEA36D" ) ) ) - { - b_disable_leapers = getDvarInt( #"60AEA36D" ); - } - */ - if ( is_true( b_disable_leapers ) ) - { - flag_init( "leaper_round" ); - } - else - { - maps/mp/zombies/_zm_ai_leaper::enable_leaper_rounds(); - } - level.leapers_per_player = 6; + b_disable_leapers = isdefined( getdvarint( _hash_60AEA36D ) ) && getdvarint( _hash_60AEA36D ); + + if ( b_disable_leapers ) + flag_init( "leaper_round" ); + else + maps\mp\zombies\_zm_ai_leaper::enable_leaper_rounds(); + + level.leapers_per_player = 6; } -setup_zone_monitor() //checked matches cerberus output dvars not found +setup_zone_monitor() { - level.player_out_of_playable_area_monitor = 1; - //str_dvar_zone_monitor = getDvarInt( #"E9322600" ); - if ( isDefined( str_dvar_zone_monitor ) && str_dvar_zone_monitor ) - { - level.player_out_of_playable_area_monitor = 0; - } - //str_dvar_zone_test = getDvarInt( #"2313B5C5" ); - if ( isDefined( str_dvar_zone_test ) && str_dvar_zone_test ) - { - level.kill_thread_test_mode = 1; - level.check_kill_thread_every_frame = 1; - } - level.player_out_of_playable_area_monitor_callback = ::zm_highrise_zone_monitor_callback; + level.player_out_of_playable_area_monitor = 1; + str_dvar_zone_monitor = getdvarint( _hash_E9322600 ); + + if ( isdefined( str_dvar_zone_monitor ) && str_dvar_zone_monitor ) + level.player_out_of_playable_area_monitor = 0; + + str_dvar_zone_test = getdvarint( _hash_2313B5C5 ); + + if ( isdefined( str_dvar_zone_test ) && str_dvar_zone_test ) + { + level.kill_thread_test_mode = 1; + level.check_kill_thread_every_frame = 1; + } + + level.player_out_of_playable_area_monitor_callback = ::zm_highrise_zone_monitor_callback; } -zm_highrise_zone_monitor_callback() //checked matches cerberus output +zm_highrise_zone_monitor_callback() { - b_kill_player = 1; - if ( !self isonground() ) - { - b_kill_player = 0; - } - if ( getnumconnectedplayers() == 1 ) - { - if ( isDefined( self.lives ) && self.lives > 0 ) - { - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - b_kill_player = 0; - } - } - } - if ( b_kill_player ) - { - self thread maps/mp/zm_highrise_classic::insta_kill_player( 0, 0 ); - } - return b_kill_player; + b_kill_player = 1; + + if ( !self isonground() ) + b_kill_player = 0; + + if ( getnumconnectedplayers() == 1 ) + { + if ( isdefined( self.lives ) && self.lives > 0 ) + { + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + b_kill_player = 0; + } + } + + if ( b_kill_player ) + self thread maps\mp\zm_highrise_classic::insta_kill_player( 0, 0 ); + + return b_kill_player; } -ignore_equipment( zombie ) //checked changed at own discretion +ignore_equipment( zombie ) { - if ( !is_true( zombie.completed_emerging_into_playable_area ) ) - { - return 1; - } - if ( is_true( zombie.is_avogadro ) ) - { - return 1; - } - if ( is_true( zombie.is_inert ) ) - { - return 1; - } - if ( isDefined( zombie.inert_delay ) ) - { - return 1; - } - if ( is_true( self.is_armed ) ) - { - return 1; - } - return 0; + if ( !( isdefined( zombie.completed_emerging_into_playable_area ) && zombie.completed_emerging_into_playable_area ) ) + return true; + + if ( isdefined( zombie.is_avogadro ) && zombie.is_avogadro ) + return true; + + if ( isdefined( zombie.is_inert ) && zombie.is_inert ) + return true; + + if ( isdefined( zombie.inert_delay ) ) + return true; + + if ( isdefined( self.is_armed ) && self.is_armed ) + return true; + + return false; } -highrise_respawn_override( revivee, return_struct ) //checked changed to match cerberus output +highrise_respawn_override( revivee, return_struct ) { - players = get_players(); - spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); - if ( spawn_points.size == 0 ) - { - return undefined; - } - for ( i = 0; i < players.size; i++ ) - { - if ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self ) - { - for ( j = 0; j < spawn_points.size; j++ ) - { - if ( isDefined( spawn_points[ j ].script_noteworthy ) ) - { - zone = level.zones[ spawn_points[ j ].script_noteworthy ]; - for ( k = 0; k < zone.volumes.size; k++ ) - { - if ( players[ i ] istouching( zone.volumes[ k ] ) ) - { - closest_group = j; - spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); - if ( isDefined( spawn_location ) ) - { - return spawn_location; - } - } - } - } - } - } - } + players = get_players(); + spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); + + if ( spawn_points.size == 0 ) + return undefined; + + for ( i = 0; i < players.size; i++ ) + { + if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self ) + { + for ( j = 0; j < spawn_points.size; j++ ) + { + if ( isdefined( spawn_points[j].script_noteworthy ) ) + { + zone = level.zones[spawn_points[j].script_noteworthy]; + + for ( k = 0; k < zone.volumes.size; k++ ) + { + if ( players[i] istouching( zone.volumes[k] ) ) + { + closest_group = j; + spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); + + if ( isdefined( spawn_location ) ) + return spawn_location; + } + } + } + } + } + } } -givecustomloadout( takeallweapons, alreadyspawned ) //checked matches cerberus output +givecustomloadout( takeallweapons, alreadyspawned ) { - self giveweapon( "knife_zm" ); - self give_start_weapon( 1 ); + self giveweapon( "knife_zm" ); + self give_start_weapon( 1 ); } -precache_team_whos_who_characters() //checked matches cerberus output +precache_team_whos_who_characters() { - precachemodel( "c_zom_player_engineer_dlc1_fb" ); - precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); - precachemodel( "c_zom_player_oldman_dlc1_fb" ); - precachemodel( "c_zom_player_reporter_dlc1_fb" ); + precachemodel( "c_zom_player_engineer_dlc1_fb" ); + precachemodel( "c_zom_player_farmgirl_dlc1_fb" ); + precachemodel( "c_zom_player_oldman_dlc1_fb" ); + precachemodel( "c_zom_player_reporter_dlc1_fb" ); } -initcharacterstartindex() //checked matches cerberus output +initcharacterstartindex() { - level.characterstartindex = randomint( 4 ); + level.characterstartindex = randomint( 4 ); } -zm_player_fake_death_cleanup() //checked matches cerberus output +zm_player_fake_death_cleanup() { - if ( isDefined( self._fall_down_anchor ) ) - { - self._fall_down_anchor delete(); - self._fall_down_anchor = undefined; - } + if ( isdefined( self._fall_down_anchor ) ) + { + self._fall_down_anchor delete(); + self._fall_down_anchor = undefined; + } } -zm_player_fake_death( vdir, smeansofdeath ) //checked partially changed to match cerberus output changed at own discretion +zm_player_fake_death( vdir, smeansofdeath ) { - level notify( "fake_death" ); - self notify( "fake_death" ); - stance = self getstance(); - self.ignoreme = 1; - self enableinvulnerability(); - self takeallweapons(); - if ( !is_true( self.insta_killed ) || self maps/mp/zm_highrise_elevators::is_self_on_elevator() || isDefined( smeansofdeath ) && smeansofdeath == "MOD_FALLING" ) - { - self maps/mp/zombies/_zm::player_fake_death(); - self allowprone( 1 ); - self allowcrouch( 0 ); - self allowstand( 0 ); - wait 0.25; - self freezecontrols( 1 ); - } - else - { - self freezecontrols( 1 ); - self thread fall_down( vdir, stance ); - wait 1; - } + level notify( "fake_death" ); + self notify( "fake_death" ); + stance = self getstance(); + self.ignoreme = 1; + self enableinvulnerability(); + self takeallweapons(); + + if ( isdefined( self.insta_killed ) && self.insta_killed || self maps\mp\zm_highrise_elevators::is_self_on_elevator() || isdefined( smeansofdeath ) && smeansofdeath == "MOD_FALLING" ) + { + self maps\mp\zombies\_zm::player_fake_death(); + self allowprone( 1 ); + self allowcrouch( 0 ); + self allowstand( 0 ); + wait 0.25; + self freezecontrols( 1 ); + } + else + { + self freezecontrols( 1 ); + self thread fall_down( vdir, stance ); + wait 1; + } } -fall_down( vdir, stance ) //checked changed to match cerberus output +fall_down( vdir, stance ) { - self endon( "disconnect" ); - level endon( "game_module_ended" ); - self ghost(); - origin = self.origin; - xyspeed = ( 0, 0, 0 ); - angles = self getplayerangles(); - angles = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] + randomfloatrange( -5, 5 ) ); - if ( isDefined( vdir ) && length( vdir ) > 0 ) - { - xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); - xyspeed = xyspeedmag * vectornormalize( ( vdir[ 0 ], vdir[ 1 ], 0 ) ); - } - linker = spawn( "script_origin", ( 0, 0, 0 ) ); - linker.origin = origin; - linker.angles = angles; - self._fall_down_anchor = linker; - self playerlinkto( linker ); - self playsoundtoplayer( "zmb_player_death_fall", self ); - falling = stance != "prone"; - if ( falling ) - { - origin = playerphysicstrace( origin, origin + xyspeed ); - eye = self get_eye(); - floor_height = ( 10 + origin[ 2 ] ) - eye[ 2 ]; - origin += ( 0, 0, floor_height ); - lerptime = 0.5; - linker moveto( origin, lerptime, lerptime ); - linker rotateto( angles, lerptime, lerptime ); - } - self freezecontrols( 1 ); - if ( falling ) - { - linker waittill( "movedone" ); - } - self giveweapon( "death_throe_zm" ); - self switchtoweapon( "death_throe_zm" ); - if ( falling ) - { - bounce = randomint( 4 ) + 8; - origin = ( origin + ( 0, 0, bounce ) ) - ( xyspeed * 0.1 ); - lerptime = bounce / 50; - linker moveto( origin, lerptime, 0, lerptime ); - linker waittill( "movedone" ); - origin = ( origin + ( 0, 0, bounce * -1 ) ) + ( xyspeed * 0.1 ); - lerptime /= 2; - linker moveto( origin, lerptime, lerptime ); - linker waittill( "movedone" ); - linker moveto( origin, 5, 0 ); - } - wait 15; - linker delete(); + self endon( "disconnect" ); + level endon( "game_module_ended" ); + self ghost(); + origin = self.origin; + xyspeed = ( 0, 0, 0 ); + angles = self getplayerangles(); + angles = ( angles[0], angles[1], angles[2] + randomfloatrange( -5, 5 ) ); + + if ( isdefined( vdir ) && length( vdir ) > 0 ) + { + xyspeedmag = 40 + randomint( 12 ) + randomint( 12 ); + xyspeed = xyspeedmag * vectornormalize( ( vdir[0], vdir[1], 0 ) ); + } + + linker = spawn( "script_origin", ( 0, 0, 0 ) ); + linker.origin = origin; + linker.angles = angles; + self._fall_down_anchor = linker; + self playerlinkto( linker ); + self playsoundtoplayer( "zmb_player_death_fall", self ); + falling = stance != "prone"; + + if ( falling ) + { + origin = playerphysicstrace( origin, origin + xyspeed ); + eye = self get_eye(); + floor_height = 10 + origin[2] - eye[2]; + origin += ( 0, 0, floor_height ); + lerptime = 0.5; + linker moveto( origin, lerptime, lerptime ); + linker rotateto( angles, lerptime, lerptime ); + } + + self freezecontrols( 1 ); + + if ( falling ) + linker waittill( "movedone" ); + + self giveweapon( "death_throe_zm" ); + self switchtoweapon( "death_throe_zm" ); + + if ( falling ) + { + bounce = randomint( 4 ) + 8; + origin = origin + ( 0, 0, bounce ) - xyspeed * 0.1; + lerptime = bounce / 50.0; + linker moveto( origin, lerptime, 0, lerptime ); + + linker waittill( "movedone" ); + + origin = origin + ( 0, 0, bounce * -1 ) + xyspeed * 0.1; + lerptime /= 2.0; + linker moveto( origin, lerptime, lerptime ); + + linker waittill( "movedone" ); + + linker moveto( origin, 5, 0 ); + } + + wait 15; + linker delete(); } -initial_round_wait_func() //checked matches cerberus output +initial_round_wait_func() { - flag_wait( "initial_blackscreen_passed" ); + flag_wait( "initial_blackscreen_passed" ); } -offhand_weapon_overrride() //checked changed at own discretion +offhand_weapon_overrride() { - register_lethal_grenade_for_level( "frag_grenade_zm" ); - level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; - register_lethal_grenade_for_level( "sticky_grenade_zm" ); - register_tactical_grenade_for_level( "cymbal_monkey_zm" ); - register_tactical_grenade_for_level( "emp_grenade_zm" ); - register_placeable_mine_for_level( "claymore_zm" ); - register_melee_weapon_for_level( "knife_zm" ); - register_melee_weapon_for_level( "bowie_knife_zm" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - level.zombie_melee_weapon_player_init = "knife_zm"; - register_equipment_for_level( "equip_springpad_zm" ); - level.zombie_equipment_player_init = undefined; - if ( is_true( level.slipgun_as_equipment ) ) - { - register_equipment_for_level( "slipgun_zm" ); - } + register_lethal_grenade_for_level( "frag_grenade_zm" ); + level.zombie_lethal_grenade_player_init = "frag_grenade_zm"; + register_lethal_grenade_for_level( "sticky_grenade_zm" ); + register_tactical_grenade_for_level( "cymbal_monkey_zm" ); + register_tactical_grenade_for_level( "emp_grenade_zm" ); + register_placeable_mine_for_level( "claymore_zm" ); + register_melee_weapon_for_level( "knife_zm" ); + register_melee_weapon_for_level( "bowie_knife_zm" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); + level.zombie_melee_weapon_player_init = "knife_zm"; + register_equipment_for_level( "equip_springpad_zm" ); + level.zombie_equipment_player_init = undefined; + + if ( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) + register_equipment_for_level( "slipgun_zm" ); } -offhand_weapon_give_override( str_weapon ) //checked matches cerberus output +offhand_weapon_give_override( str_weapon ) { - self endon( "death" ); - if ( is_tactical_grenade( str_weapon ) && isDefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) - { - self setweaponammoclip( self get_player_tactical_grenade(), 0 ); - self takeweapon( self get_player_tactical_grenade() ); - } - return 0; + self endon( "death" ); + + if ( is_tactical_grenade( str_weapon ) && isdefined( self get_player_tactical_grenade() ) && !self is_player_tactical_grenade( str_weapon ) ) + { + self setweaponammoclip( self get_player_tactical_grenade(), 0 ); + self takeweapon( self get_player_tactical_grenade() ); + } + + return 0; } -custom_add_weapons() //checked partially changed to match cerberus output changed at own discretion +custom_add_weapons() { - add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); - add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); - add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); - add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); - add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); - add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); - add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); - add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); - add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); - add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); - add_zombie_weapon( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_PDW57", 1000, "smg", "", undefined ); - add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); - add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); - add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); - add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); - add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); - add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); - add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); - add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); - add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); - add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); - add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); - add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); - add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); - add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "wpck_m82a1", "", undefined, 1 ); - add_zombie_weapon( "svu_zm", "svu_upgraded_zm", &"ZOMBIE_WEAPON_SVU", 1000, "wpck_svuas", "", undefined ); - add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); - add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); - add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); - add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); - add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); - add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); - add_zombie_weapon( "an94_zm", "an94_upgraded_zm", &"ZOMBIE_WEAPON_AN94", 1200, "", "", undefined ); - add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); - add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined, 1 ); - add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined ); - add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); - add_zombie_weapon( "slipgun_zm", undefined, &"ZOMBIE_WEAPON_SLIPGUN", 10, "slip", "", undefined ); - if ( is_true( level.raygun2_included ) ) - { - add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); - } + add_zombie_weapon( "m1911_zm", "m1911_upgraded_zm", &"ZOMBIE_WEAPON_M1911", 50, "", "", undefined ); + add_zombie_weapon( "python_zm", "python_upgraded_zm", &"ZOMBIE_WEAPON_PYTHON", 50, "wpck_python", "", undefined, 1 ); + add_zombie_weapon( "judge_zm", "judge_upgraded_zm", &"ZOMBIE_WEAPON_JUDGE", 50, "wpck_judge", "", undefined, 1 ); + add_zombie_weapon( "kard_zm", "kard_upgraded_zm", &"ZOMBIE_WEAPON_KARD", 50, "wpck_kap", "", undefined, 1 ); + add_zombie_weapon( "fiveseven_zm", "fiveseven_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVEN", 50, "wpck_57", "", undefined, 1 ); + add_zombie_weapon( "beretta93r_zm", "beretta93r_upgraded_zm", &"ZOMBIE_WEAPON_BERETTA93r", 1000, "", "", undefined ); + add_zombie_weapon( "fivesevendw_zm", "fivesevendw_upgraded_zm", &"ZOMBIE_WEAPON_FIVESEVENDW", 50, "wpck_duel57", "", undefined, 1 ); + add_zombie_weapon( "ak74u_zm", "ak74u_upgraded_zm", &"ZOMBIE_WEAPON_AK74U", 1200, "smg", "", undefined ); + add_zombie_weapon( "mp5k_zm", "mp5k_upgraded_zm", &"ZOMBIE_WEAPON_MP5K", 1000, "smg", "", undefined ); + add_zombie_weapon( "qcw05_zm", "qcw05_upgraded_zm", &"ZOMBIE_WEAPON_QCW05", 50, "wpck_chicom", "", undefined, 1 ); + add_zombie_weapon( "pdw57_zm", "pdw57_upgraded_zm", &"ZOMBIE_WEAPON_PDW57", 1000, "smg", "", undefined ); + add_zombie_weapon( "870mcs_zm", "870mcs_upgraded_zm", &"ZOMBIE_WEAPON_870MCS", 1500, "shotgun", "", undefined ); + add_zombie_weapon( "rottweil72_zm", "rottweil72_upgraded_zm", &"ZOMBIE_WEAPON_ROTTWEIL72", 500, "shotgun", "", undefined ); + add_zombie_weapon( "saiga12_zm", "saiga12_upgraded_zm", &"ZOMBIE_WEAPON_SAIGA12", 50, "wpck_saiga12", "", undefined, 1 ); + add_zombie_weapon( "srm1216_zm", "srm1216_upgraded_zm", &"ZOMBIE_WEAPON_SRM1216", 50, "wpck_m1216", "", undefined, 1 ); + add_zombie_weapon( "m14_zm", "m14_upgraded_zm", &"ZOMBIE_WEAPON_M14", 500, "rifle", "", undefined ); + add_zombie_weapon( "saritch_zm", "saritch_upgraded_zm", &"ZOMBIE_WEAPON_SARITCH", 50, "wpck_sidr", "", undefined, 1 ); + add_zombie_weapon( "m16_zm", "m16_gl_upgraded_zm", &"ZOMBIE_WEAPON_M16", 1200, "burstrifle", "", undefined ); + add_zombie_weapon( "xm8_zm", "xm8_upgraded_zm", &"ZOMBIE_WEAPON_XM8", 50, "wpck_m8a1", "", undefined, 1 ); + add_zombie_weapon( "type95_zm", "type95_upgraded_zm", &"ZOMBIE_WEAPON_TYPE95", 50, "wpck_type25", "", undefined, 1 ); + add_zombie_weapon( "tar21_zm", "tar21_upgraded_zm", &"ZOMBIE_WEAPON_TAR21", 50, "wpck_x95l", "", undefined, 1 ); + add_zombie_weapon( "galil_zm", "galil_upgraded_zm", &"ZOMBIE_WEAPON_GALIL", 50, "wpck_galil", "", undefined, 1 ); + add_zombie_weapon( "fnfal_zm", "fnfal_upgraded_zm", &"ZOMBIE_WEAPON_FNFAL", 50, "wpck_fal", "", undefined, 1 ); + add_zombie_weapon( "dsr50_zm", "dsr50_upgraded_zm", &"ZOMBIE_WEAPON_DR50", 50, "wpck_dsr50", "", undefined, 1 ); + add_zombie_weapon( "barretm82_zm", "barretm82_upgraded_zm", &"ZOMBIE_WEAPON_BARRETM82", 50, "wpck_m82a1", "", undefined, 1 ); + add_zombie_weapon( "svu_zm", "svu_upgraded_zm", &"ZOMBIE_WEAPON_SVU", 1000, "wpck_svuas", "", undefined ); + add_zombie_weapon( "rpd_zm", "rpd_upgraded_zm", &"ZOMBIE_WEAPON_RPD", 50, "wpck_rpd", "", undefined, 1 ); + add_zombie_weapon( "hamr_zm", "hamr_upgraded_zm", &"ZOMBIE_WEAPON_HAMR", 50, "wpck_hamr", "", undefined, 1 ); + add_zombie_weapon( "frag_grenade_zm", undefined, &"ZOMBIE_WEAPON_FRAG_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "sticky_grenade_zm", undefined, &"ZOMBIE_WEAPON_STICKY_GRENADE", 250, "grenade", "", 250 ); + add_zombie_weapon( "claymore_zm", undefined, &"ZOMBIE_WEAPON_CLAYMORE", 1000, "grenade", "", undefined ); + add_zombie_weapon( "usrpg_zm", "usrpg_upgraded_zm", &"ZOMBIE_WEAPON_USRPG", 50, "wpck_rpg", "", undefined, 1 ); + add_zombie_weapon( "m32_zm", "m32_upgraded_zm", &"ZOMBIE_WEAPON_M32", 50, "wpck_m32", "", undefined, 1 ); + add_zombie_weapon( "an94_zm", "an94_upgraded_zm", &"ZOMBIE_WEAPON_AN94", 1200, "", "", undefined ); + add_zombie_weapon( "cymbal_monkey_zm", undefined, &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 ); + add_zombie_weapon( "ray_gun_zm", "ray_gun_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN", 10000, "wpck_ray", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_zm", "knife_ballistic_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "sickle", "", undefined, 1 ); + add_zombie_weapon( "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", &"ZOMBIE_WEAPON_KNIFE_BALLISTIC", 10, "wpck_knife", "", undefined ); + add_zombie_weapon( "tazer_knuckles_zm", undefined, &"ZOMBIE_WEAPON_TAZER_KNUCKLES", 100, "tazerknuckles", "", undefined ); + add_zombie_weapon( "slipgun_zm", undefined, &"ZOMBIE_WEAPON_SLIPGUN", 10, "slip", "", undefined ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + add_zombie_weapon( "raygun_mark2_zm", "raygun_mark2_upgraded_zm", &"ZOMBIE_WEAPON_RAYGUN_MARK2", 10000, "raygun_mark2", "", undefined ); } -include_weapons() //checked partially changed to match cerberus output changed at own discretion +include_weapons() { - include_weapon( "knife_zm", 0 ); - include_weapon( "frag_grenade_zm", 0 ); - include_weapon( "claymore_zm", 0 ); - include_weapon( "sticky_grenade_zm", 0 ); - include_weapon( "m1911_zm", 0 ); - include_weapon( "m1911_upgraded_zm", 0 ); - include_weapon( "python_zm" ); - include_weapon( "python_upgraded_zm", 0 ); - include_weapon( "judge_zm" ); - include_weapon( "judge_upgraded_zm", 0 ); - include_weapon( "kard_zm" ); - include_weapon( "kard_upgraded_zm", 0 ); - include_weapon( "fiveseven_zm" ); - include_weapon( "fiveseven_upgraded_zm", 0 ); - include_weapon( "beretta93r_zm", 0 ); - include_weapon( "beretta93r_upgraded_zm", 0 ); - include_weapon( "fivesevendw_zm" ); - include_weapon( "fivesevendw_upgraded_zm", 0 ); - include_weapon( "ak74u_zm", 0 ); - include_weapon( "ak74u_upgraded_zm", 0 ); - include_weapon( "mp5k_zm", 0 ); - include_weapon( "mp5k_upgraded_zm", 0 ); - include_weapon( "qcw05_zm" ); - include_weapon( "qcw05_upgraded_zm", 0 ); - include_weapon( "870mcs_zm", 0 ); - include_weapon( "870mcs_upgraded_zm", 0 ); - include_weapon( "rottweil72_zm", 0 ); - include_weapon( "rottweil72_upgraded_zm", 0 ); - include_weapon( "saiga12_zm" ); - include_weapon( "saiga12_upgraded_zm", 0 ); - include_weapon( "srm1216_zm" ); - include_weapon( "srm1216_upgraded_zm", 0 ); - include_weapon( "m14_zm", 0 ); - include_weapon( "m14_upgraded_zm", 0 ); - include_weapon( "saritch_zm" ); - include_weapon( "saritch_upgraded_zm", 0 ); - include_weapon( "m16_zm", 0 ); - include_weapon( "m16_gl_upgraded_zm", 0 ); - include_weapon( "xm8_zm" ); - include_weapon( "xm8_upgraded_zm", 0 ); - include_weapon( "type95_zm" ); - include_weapon( "type95_upgraded_zm", 0 ); - include_weapon( "tar21_zm" ); - include_weapon( "tar21_upgraded_zm", 0 ); - include_weapon( "galil_zm" ); - include_weapon( "galil_upgraded_zm", 0 ); - include_weapon( "fnfal_zm" ); - include_weapon( "fnfal_upgraded_zm", 0 ); - include_weapon( "dsr50_zm" ); - include_weapon( "dsr50_upgraded_zm", 0 ); - include_weapon( "barretm82_zm" ); - include_weapon( "barretm82_upgraded_zm", 0 ); - include_weapon( "svu_zm", 0 ); - include_weapon( "svu_upgraded_zm", 0 ); - include_weapon( "rpd_zm" ); - include_weapon( "rpd_upgraded_zm", 0 ); - include_weapon( "hamr_zm" ); - include_weapon( "hamr_upgraded_zm", 0 ); - include_weapon( "pdw57_zm", 0 ); - include_weapon( "pdw57_upgraded_zm", 0 ); - include_weapon( "usrpg_zm" ); - include_weapon( "usrpg_upgraded_zm", 0 ); - include_weapon( "m32_zm" ); - include_weapon( "m32_upgraded_zm", 0 ); - include_weapon( "an94_zm", 0 ); - include_weapon( "cymbal_monkey_zm" ); - include_weapon( "ray_gun_zm" ); - include_weapon( "ray_gun_upgraded_zm", 0 ); - include_weapon( "slipgun_zm", 0 ); - include_weapon( "slipgun_upgraded_zm", 0 ); - include_weapon( "tazer_knuckles_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_zm", 0 ); - include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_zm" ); - include_weapon( "knife_ballistic_upgraded_zm", 0 ); - include_weapon( "knife_ballistic_bowie_zm", 0 ); - include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - level._uses_retrievable_ballisitic_knives = 1; - add_limited_weapon( "m1911_zm", 0 ); - add_limited_weapon( "knife_ballistic_zm", 1 ); - add_limited_weapon( "slipgun_zm", 1 ); - add_limited_weapon( "slipgun_upgraded_zm", 1 ); - add_limited_weapon( "ray_gun_zm", 4 ); - add_limited_weapon( "ray_gun_upgraded_zm", 4 ); - add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); - add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); - add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); - add_weapon_locker_mapping( "lsat_zm", "hamr_zm" ); - add_weapon_locker_mapping( "lsat_upgraded_zm", "hamr_upgraded_zm" ); - add_weapon_locker_mapping( "rnma_zm", "python_zm" ); - add_weapon_locker_mapping( "rnma_upgraded_zm", "python_upgraded_zm" ); - if ( is_true( level.raygun2_included ) ) - { - include_weapon( "raygun_mark2_zm" ); - include_weapon( "raygun_mark2_upgraded_zm", 0 ); - add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); - add_limited_weapon( "raygun_mark2_zm", 1 ); - add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); - } + include_weapon( "knife_zm", 0 ); + include_weapon( "frag_grenade_zm", 0 ); + include_weapon( "claymore_zm", 0 ); + include_weapon( "sticky_grenade_zm", 0 ); + include_weapon( "m1911_zm", 0 ); + include_weapon( "m1911_upgraded_zm", 0 ); + include_weapon( "python_zm" ); + include_weapon( "python_upgraded_zm", 0 ); + include_weapon( "judge_zm" ); + include_weapon( "judge_upgraded_zm", 0 ); + include_weapon( "kard_zm" ); + include_weapon( "kard_upgraded_zm", 0 ); + include_weapon( "fiveseven_zm" ); + include_weapon( "fiveseven_upgraded_zm", 0 ); + include_weapon( "beretta93r_zm", 0 ); + include_weapon( "beretta93r_upgraded_zm", 0 ); + include_weapon( "fivesevendw_zm" ); + include_weapon( "fivesevendw_upgraded_zm", 0 ); + include_weapon( "ak74u_zm", 0 ); + include_weapon( "ak74u_upgraded_zm", 0 ); + include_weapon( "mp5k_zm", 0 ); + include_weapon( "mp5k_upgraded_zm", 0 ); + include_weapon( "qcw05_zm" ); + include_weapon( "qcw05_upgraded_zm", 0 ); + include_weapon( "870mcs_zm", 0 ); + include_weapon( "870mcs_upgraded_zm", 0 ); + include_weapon( "rottweil72_zm", 0 ); + include_weapon( "rottweil72_upgraded_zm", 0 ); + include_weapon( "saiga12_zm" ); + include_weapon( "saiga12_upgraded_zm", 0 ); + include_weapon( "srm1216_zm" ); + include_weapon( "srm1216_upgraded_zm", 0 ); + include_weapon( "m14_zm", 0 ); + include_weapon( "m14_upgraded_zm", 0 ); + include_weapon( "saritch_zm" ); + include_weapon( "saritch_upgraded_zm", 0 ); + include_weapon( "m16_zm", 0 ); + include_weapon( "m16_gl_upgraded_zm", 0 ); + include_weapon( "xm8_zm" ); + include_weapon( "xm8_upgraded_zm", 0 ); + include_weapon( "type95_zm" ); + include_weapon( "type95_upgraded_zm", 0 ); + include_weapon( "tar21_zm" ); + include_weapon( "tar21_upgraded_zm", 0 ); + include_weapon( "galil_zm" ); + include_weapon( "galil_upgraded_zm", 0 ); + include_weapon( "fnfal_zm" ); + include_weapon( "fnfal_upgraded_zm", 0 ); + include_weapon( "dsr50_zm" ); + include_weapon( "dsr50_upgraded_zm", 0 ); + include_weapon( "barretm82_zm" ); + include_weapon( "barretm82_upgraded_zm", 0 ); + include_weapon( "svu_zm", 0 ); + include_weapon( "svu_upgraded_zm", 0 ); + include_weapon( "rpd_zm" ); + include_weapon( "rpd_upgraded_zm", 0 ); + include_weapon( "hamr_zm" ); + include_weapon( "hamr_upgraded_zm", 0 ); + include_weapon( "pdw57_zm", 0 ); + include_weapon( "pdw57_upgraded_zm", 0 ); + include_weapon( "usrpg_zm" ); + include_weapon( "usrpg_upgraded_zm", 0 ); + include_weapon( "m32_zm" ); + include_weapon( "m32_upgraded_zm", 0 ); + include_weapon( "an94_zm", 0 ); + include_weapon( "cymbal_monkey_zm" ); + include_weapon( "ray_gun_zm" ); + include_weapon( "ray_gun_upgraded_zm", 0 ); + include_weapon( "slipgun_zm", 0 ); + include_weapon( "slipgun_upgraded_zm", 0 ); + include_weapon( "tazer_knuckles_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_zm", 0 ); + include_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_zm" ); + include_weapon( "knife_ballistic_upgraded_zm", 0 ); + include_weapon( "knife_ballistic_bowie_zm", 0 ); + include_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + level._uses_retrievable_ballisitic_knives = 1; + add_limited_weapon( "m1911_zm", 0 ); + add_limited_weapon( "knife_ballistic_zm", 1 ); + add_limited_weapon( "slipgun_zm", 1 ); + add_limited_weapon( "slipgun_upgraded_zm", 1 ); + add_limited_weapon( "ray_gun_zm", 4 ); + add_limited_weapon( "ray_gun_upgraded_zm", 4 ); + add_limited_weapon( "knife_ballistic_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_zm", 0 ); + add_limited_weapon( "knife_ballistic_no_melee_upgraded_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_zm", 0 ); + add_limited_weapon( "knife_ballistic_bowie_upgraded_zm", 0 ); + add_weapon_locker_mapping( "lsat_zm", "hamr_zm" ); + add_weapon_locker_mapping( "lsat_upgraded_zm", "hamr_upgraded_zm" ); + add_weapon_locker_mapping( "rnma_zm", "python_zm" ); + add_weapon_locker_mapping( "rnma_upgraded_zm", "python_upgraded_zm" ); + + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + include_weapon( "raygun_mark2_zm" ); + include_weapon( "raygun_mark2_upgraded_zm", 0 ); + add_weapon_to_content( "raygun_mark2_zm", "dlc3" ); + add_limited_weapon( "raygun_mark2_zm", 1 ); + add_limited_weapon( "raygun_mark2_upgraded_zm", 1 ); + } } -include_powerups() //checked matches cerberus output +include_powerups() { - include_powerup( "nuke" ); - include_powerup( "insta_kill" ); - include_powerup( "double_points" ); - include_powerup( "full_ammo" ); - include_powerup( "carpenter" ); - include_powerup( "insta_kill_ug" ); - include_powerup( "free_perk" ); + include_powerup( "nuke" ); + include_powerup( "insta_kill" ); + include_powerup( "double_points" ); + include_powerup( "full_ammo" ); + include_powerup( "carpenter" ); + include_powerup( "insta_kill_ug" ); + include_powerup( "free_perk" ); } -include_equipment_for_level() //checked changed at own discretion +include_equipment_for_level() { - include_equipment( "equip_springpad_zm" ); - if ( is_true( level.slipgun_as_equipment ) ) - { - include_equipment( "slipgun_zm" ); - } - level.equipment_planted = ::equipment_planted; - level.equipment_safe_to_drop = ::equipment_safe_to_drop; - level.check_force_deploy_z = ::use_safe_spawn_on_elevator; - level.safe_place_for_buildable_piece = ::safe_place_for_buildable_piece; + level.springpad_trigger_radius = 96; + include_equipment( "equip_springpad_zm" ); + + if ( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) + include_equipment( "slipgun_zm" ); + + level.equipment_planted = ::equipment_planted; + level.equipment_safe_to_drop = ::equipment_safe_to_drop; + level.check_force_deploy_z = ::use_safe_spawn_on_elevator; + level.safe_place_for_buildable_piece = ::safe_place_for_buildable_piece; } -setup_rex_starts() //checked matches cerberus output +setup_rex_starts() { - add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); - add_gameloc( "rooftop", ::dummy, "rooftop", ::dummy ); + add_gametype( "zclassic", ::dummy, "zclassic", ::dummy ); + add_gameloc( "rooftop", ::dummy, "rooftop", ::dummy ); } -dummy() //checked matches cerberus output +dummy() { + } -zombie_highrise_devgui( cmd ) //dev call didn't check +zombie_highrise_devgui( cmd ) { - /* /# - cmd_strings = strtok( cmd, " " ); - switch( cmd_strings[ 0 ] ) - { - case "leaper_round_skip": - if ( isDefined( level.next_leaper_round ) ) - { - maps/mp/zombies/_zm_devgui::zombie_devgui_goto_round( level.next_leaper_round ); - } - break; - case "pick_up_keys": - thread pick_up_keys(); - break; - default: - } + cmd_strings = strtok( cmd, " " ); + + switch ( cmd_strings[0] ) + { + case "leaper_round_skip": + if ( isdefined( level.next_leaper_round ) ) + maps\mp\zombies\_zm_devgui::zombie_devgui_goto_round( level.next_leaper_round ); + + break; + case "pick_up_keys": + thread pick_up_keys(); + break; + default: + break; + } #/ - } - */ } -pick_up_keys() //dev call didn't check +pick_up_keys() { - /* /# - players = get_players(); - for ( i = 0; i < players.size;) - { - if ( isDefined( players[ i ].current_buildable_piece ) && players[ i ].current_buildable_piece.buildablename == "keys_zm" ) - { - } - else - { - candidate_list = []; - foreach ( zone in level.zones ) - { - if ( isDefined( zone.unitrigger_stubs ) ) - { - candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); - } - } - foreach ( stub in candidate_list ) - { - if ( isDefined( stub.piece ) && stub.piece.buildablename == "keys_zm" ) - { - players[ i ] thread maps/mp/zombies/_zm_buildables::player_take_piece( stub.piece ); - break; - } - } - } + players = get_players(); + + foreach ( player in players ) + { + if ( isdefined( player player_get_buildable_piece() ) && player player_get_buildable_piece().buildablename == "keys_zm" ) + continue; + + candidate_list = []; + + foreach ( zone in level.zones ) + { + if ( isdefined( zone.unitrigger_stubs ) ) + candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 ); + } + + foreach ( stub in candidate_list ) + { + if ( isdefined( stub.piece ) && stub.piece.buildablename == "keys_zm" ) + { + player thread maps\mp\zombies\_zm_buildables::player_take_piece( stub.piece ); + break; + } + } + } #/ - } - */ } -highrise_zone_init() //checked matches cerberus output +highrise_zone_init() { - flag_init( "always_on" ); - flag_set( "always_on" ); - add_adjacent_zone( "zone_green_start", "zone_green_level1", "green_start_door" ); - add_adjacent_zone( "zone_green_start", "zone_green_escape_pod", "always_on" ); - add_adjacent_zone( "zone_green_escape_pod", "zone_green_escape_pod_ground", "always_on", 1 ); - add_adjacent_zone( "zone_blue_level4a", "zone_green_escape_pod_ground", "always_on", 1 ); - add_adjacent_zone( "zone_blue_level5", "zone_green_escape_pod_ground", "always_on", 1 ); - add_adjacent_zone( "zone_green_level1", "zone_green_level2a", "always_on" ); - add_adjacent_zone( "zone_green_level1", "zone_green_level2b", "always_on" ); - add_adjacent_zone( "zone_green_level2a", "zone_green_level2b", "green_level2_door2" ); - add_adjacent_zone( "zone_green_level2a", "zone_green_level3b", "always_on" ); - add_adjacent_zone( "zone_green_level2b", "zone_green_level3a", "always_on" ); - add_adjacent_zone( "zone_green_level3a", "zone_green_level3d", "always_on" ); - add_adjacent_zone( "zone_orange_level1", "zone_green_level3d", "always_on", 1 ); - add_adjacent_zone( "zone_green_level3b", "zone_green_level3c", "green_level3_door2" ); - add_adjacent_zone( "zone_orange_level1", "zone_orange_level2", "always_on" ); - add_adjacent_zone( "zone_orange_elevator_shaft_bottom", "zone_orange_level3a", "always_on" ); - add_adjacent_zone( "zone_orange_level3a", "zone_orange_level3b", "zone_orange_level3a_to_level3b" ); - add_adjacent_zone( "zone_blue_level5", "zone_blue_level4b", "blocker_blue_level_4_to_5" ); - add_adjacent_zone( "zone_blue_level4a", "zone_blue_level4b", "blue_level4_door2" ); - add_adjacent_zone( "zone_blue_level4a", "zone_blue_level4c", "blue_level4_door1" ); - add_adjacent_zone( "zone_blue_level2a", "zone_blue_level2b", "blue_level2_door1" ); - add_adjacent_zone( "zone_blue_level2b", "zone_blue_level1a", "blue_level2_door2" ); - add_adjacent_zone( "zone_blue_level1a", "zone_blue_level1b", "always_on" ); - add_adjacent_zone( "zone_blue_level1a", "zone_blue_level1c", "always_on" ); - add_adjacent_zone( "zone_blue_level2a", "zone_blue_level2c", "blocker_blue_level2a_to_level2c" ); - add_adjacent_zone( "zone_blue_level1b", "zone_blue_level2d", "always_on" ); - add_adjacent_zone( "zone_blue_level2d", "zone_blue_level2c", "blocker_blue_level1b_to_level2c" ); - add_adjacent_zone( "zone_green_level3b", "zone_blue_level1c", "always_on", 1 ); - level thread enable_zone_on_flag( "zone_blue_level4b", "power_on" ); - init_elevator_shaft_zones(); + flag_init( "always_on" ); + flag_set( "always_on" ); + add_adjacent_zone( "zone_green_start", "zone_green_level1", "green_start_door" ); + add_adjacent_zone( "zone_green_start", "zone_green_escape_pod", "always_on" ); + add_adjacent_zone( "zone_green_escape_pod", "zone_green_escape_pod_ground", "always_on", 1 ); + add_adjacent_zone( "zone_blue_level4a", "zone_green_escape_pod_ground", "always_on", 1 ); + add_adjacent_zone( "zone_blue_level5", "zone_green_escape_pod_ground", "always_on", 1 ); + add_adjacent_zone( "zone_green_level1", "zone_green_level2a", "always_on" ); + add_adjacent_zone( "zone_green_level1", "zone_green_level2b", "always_on" ); + add_adjacent_zone( "zone_green_level2a", "zone_green_level2b", "green_level2_door2" ); + add_adjacent_zone( "zone_green_level2a", "zone_green_level3b", "always_on" ); + add_adjacent_zone( "zone_green_level2b", "zone_green_level3a", "always_on" ); + add_adjacent_zone( "zone_green_level3a", "zone_green_level3d", "always_on" ); + add_adjacent_zone( "zone_orange_level1", "zone_green_level3d", "always_on", 1 ); + add_adjacent_zone( "zone_green_level3b", "zone_green_level3c", "green_level3_door2" ); + add_adjacent_zone( "zone_orange_level1", "zone_orange_level2", "always_on" ); + add_adjacent_zone( "zone_orange_elevator_shaft_bottom", "zone_orange_level3a", "always_on" ); + add_adjacent_zone( "zone_orange_level3a", "zone_orange_level3b", "zone_orange_level3a_to_level3b" ); + add_adjacent_zone( "zone_blue_level5", "zone_blue_level4b", "blocker_blue_level_4_to_5" ); + add_adjacent_zone( "zone_blue_level4a", "zone_blue_level4b", "blue_level4_door2" ); + add_adjacent_zone( "zone_blue_level4a", "zone_blue_level4c", "blue_level4_door1" ); + add_adjacent_zone( "zone_blue_level2a", "zone_blue_level2b", "blue_level2_door1" ); + add_adjacent_zone( "zone_blue_level2b", "zone_blue_level1a", "blue_level2_door2" ); + add_adjacent_zone( "zone_blue_level1a", "zone_blue_level1b", "always_on" ); + add_adjacent_zone( "zone_blue_level1a", "zone_blue_level1c", "always_on" ); + add_adjacent_zone( "zone_blue_level2a", "zone_blue_level2c", "blocker_blue_level2a_to_level2c" ); + add_adjacent_zone( "zone_blue_level1b", "zone_blue_level2d", "always_on" ); + add_adjacent_zone( "zone_blue_level2d", "zone_blue_level2c", "blocker_blue_level1b_to_level2c" ); + add_adjacent_zone( "zone_green_level3b", "zone_blue_level1c", "always_on", 1 ); + level thread enable_zone_on_flag( "zone_blue_level4b", "power_on" ); + init_elevator_shaft_zones(); } -init_elevator_shaft_zones() //checked matches cerberus output +init_elevator_shaft_zones() { - a_zones = array( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_middle_2", "zone_green_level1", "zone_green_level2a", "zone_green_level2b", "zone_green_level3a", "zone_green_level3b", "zone_green_level3c", "zone_blue_level1a", "zone_blue_level1b", "zone_blue_level2b", "zone_blue_level2c", "zone_blue_level4b", "zone_blue_level4c", "zone_blue_level5", "zone_orange_elevator_shaft_top", "zone_blue_level2a", "zone_orange_level3b" ); - foreach ( zone in a_zones ) - { - zone_init( zone ); - enable_zone( zone ); - } + a_zones = array( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_middle_2", "zone_green_level1", "zone_green_level2a", "zone_green_level2b", "zone_green_level3a", "zone_green_level3b", "zone_green_level3c", "zone_blue_level1a", "zone_blue_level1b", "zone_blue_level2b", "zone_blue_level2c", "zone_blue_level4b", "zone_blue_level4c", "zone_blue_level5", "zone_orange_elevator_shaft_top", "zone_blue_level2a", "zone_orange_level3b" ); + + foreach ( zone in a_zones ) + { + zone_init( zone ); + enable_zone( zone ); + } } -enable_zone_on_flag( str_zone_name, str_flag_name ) //checked matches cerberus output +enable_zone_on_flag( str_zone_name, str_flag_name ) { - /* /# - assert( flag_exists( str_flag_name ), "Tried to enable zone on flag, but flag " + str_flag_name + " hasn't been initialized" ); + assert( flag_exists( str_flag_name ), "Tried to enable zone on flag, but flag " + str_flag_name + " hasn't been initialized" ); #/ /# - assert( isDefined( level.zones[ str_zone_name ] ), "There is no zone with name '" + str_zone_name + " in the map!" ); + assert( isdefined( level.zones[str_zone_name] ), "There is no zone with name '" + str_zone_name + " in the map!" ); #/ - */ - flag_wait( str_flag_name ); - enable_zone( str_zone_name ); + flag_wait( str_flag_name ); + enable_zone( str_zone_name ); } -electric_switch() //checked changed to match cerberus output +electric_switch() { - trig = getent( "use_elec_switch", "targetname" ); - master_switch = getent( "elec_switch", "targetname" ); - master_switch notsolid(); - trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); - trig setvisibletoall(); - trig waittill( "trigger", user ); - trig setinvisibletoall(); - master_switch rotateroll( -90, 0.3 ); - master_switch playsound( "zmb_switch_flip" ); - master_switch playsound( "evt_poweron_front" ); - if ( isDefined( user ) ) - { - user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" ); - } - level thread maps/mp/zombies/_zm_perks::perk_unpause_all_perks(); - master_switch waittill( "rotatedone" ); - fx_spot = spawnstruct(); - fx_spot.origin = ( 2886, -132, 1296 ); - fx_spot.angles = vectorScale( ( 0, 1, 0 ), 240 ); - playfx( level._effect[ "switch_sparks" ], fx_spot.origin, anglesToForward( fx_spot.angles ) ); - master_switch playsound( "zmb_turn_on" ); - level notify( "electric_door" ); - clientnotify( "power_on" ); - flag_set( "power_on" ); - stop_exploder( 10 ); - exploder( 11 ); + trig = getent( "use_elec_switch", "targetname" ); + master_switch = getent( "elec_switch", "targetname" ); + master_switch notsolid(); + trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); + trig setvisibletoall(); + + trig waittill( "trigger", user ); + + trig setinvisibletoall(); + master_switch rotateroll( -90, 0.3 ); + master_switch playsound( "zmb_switch_flip" ); + master_switch playsound( "evt_poweron_front" ); + + if ( isdefined( user ) ) + user thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_on" ); + + level thread maps\mp\zombies\_zm_perks::perk_unpause_all_perks(); + + master_switch waittill( "rotatedone" ); + + fx_spot = spawnstruct(); + fx_spot.origin = ( 2886, -132, 1296 ); + fx_spot.angles = vectorscale( ( 0, 1, 0 ), 240.0 ); + playfx( level._effect["switch_sparks"], fx_spot.origin, anglestoforward( fx_spot.angles ) ); + master_switch playsound( "zmb_turn_on" ); + level notify( "electric_door" ); + clientnotify( "power_on" ); + flag_set( "power_on" ); + stop_exploder( 10 ); + exploder( 11 ); } -precache_personality_characters() //checked matches cerberus output +precache_personality_characters() { - character/c_highrise_player_farmgirl::precache(); - character/c_highrise_player_oldman::precache(); - character/c_highrise_player_engineer::precache(); - character/c_highrise_player_reporter::precache(); - precachemodel( "c_zom_farmgirl_viewhands" ); - precachemodel( "c_zom_oldman_viewhands" ); - precachemodel( "c_zom_engineer_viewhands" ); - precachemodel( "c_zom_reporter_viewhands" ); + character\c_highrise_player_farmgirl::precache(); + character\c_highrise_player_oldman::precache(); + character\c_highrise_player_engineer::precache(); + character\c_highrise_player_reporter::precache(); + precachemodel( "c_zom_farmgirl_viewhands" ); + precachemodel( "c_zom_oldman_viewhands" ); + precachemodel( "c_zom_engineer_viewhands" ); + precachemodel( "c_zom_reporter_viewhands" ); } -give_personality_characters() //checked matches cerberus output +give_personality_characters() { - if ( isDefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_farmgirl_viewhands" ) ) - { - return; - } - self detachall(); - if ( !isDefined( self.characterindex ) ) - { - self.characterindex = assign_lowest_unused_character_index(); - if ( self.characterindex == 1 && !isDefined( level.isstuhlingeringame ) ) - { - level.isstuhlingeringame = 1; - } - } - self.favorite_wall_weapons_list = []; - self.talks_in_danger = 0; - /* + if ( isdefined( level.hotjoin_player_setup ) && [[ level.hotjoin_player_setup ]]( "c_zom_farmgirl_viewhands" ) ) + return; + + self detachall(); + + if ( !isdefined( self.characterindex ) ) + { + self.characterindex = assign_lowest_unused_character_index(); + + if ( self.characterindex == 1 && !isdefined( level.isstuhlingeringame ) ) + level.isstuhlingeringame = 1; + } + + self.favorite_wall_weapons_list = []; + self.talks_in_danger = 0; /# - if ( getDvar( #"40772CF1" ) != "" ) - { - self.characterindex = getDvarInt( #"40772CF1" ); + if ( getdvar( _hash_40772CF1 ) != "" ) + self.characterindex = getdvarint( _hash_40772CF1 ); #/ - } - */ - switch( self.characterindex ) - { - case 2: - self character/c_highrise_player_farmgirl::main(); - self setviewmodel( "c_zom_farmgirl_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "rottweil72_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "870mcs_zm"; - self set_player_is_female( 1 ); - self.whos_who_shader = "c_zom_player_farmgirl_dlc1_fb"; - break; - case 0: - self character/c_highrise_player_oldman::main(); - self setviewmodel( "c_zom_oldman_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "frag_grenade_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "claymore_zm"; - self set_player_is_female( 0 ); - self.whos_who_shader = "c_zom_player_oldman_dlc1_fb"; - break; - case 3: - self character/c_highrise_player_engineer::main(); - self setviewmodel( "c_zom_engineer_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m14_zm"; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "m16_zm"; - self set_player_is_female( 0 ); - self.whos_who_shader = "c_zom_player_engineer_dlc1_fb"; - break; - case 1: - self character/c_highrise_player_reporter::main(); - self setviewmodel( "c_zom_reporter_viewhands" ); - level.vox maps/mp/zombies/_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); - self.talks_in_danger = 1; - level.rich_sq_player = self; - self.favorite_wall_weapons_list[ self.favorite_wall_weapons_list.size ] = "beretta93r_zm"; - self set_player_is_female( 0 ); - self.whos_who_shader = "c_zom_player_reporter_dlc1_fb"; - break; - } - self setmovespeedscale( 1 ); - self setsprintduration( 4 ); - self setsprintcooldown( 0 ); - self thread set_exert_id(); + switch ( self.characterindex ) + { + case "2": + self character\c_highrise_player_farmgirl::main(); + self setviewmodel( "c_zom_farmgirl_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "rottweil72_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "870mcs_zm"; + self set_player_is_female( 1 ); + self.whos_who_shader = "c_zom_player_farmgirl_dlc1_fb"; + break; + case "0": + self character\c_highrise_player_oldman::main(); + self setviewmodel( "c_zom_oldman_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "frag_grenade_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "claymore_zm"; + self set_player_is_female( 0 ); + self.whos_who_shader = "c_zom_player_oldman_dlc1_fb"; + break; + case "3": + self character\c_highrise_player_engineer::main(); + self setviewmodel( "c_zom_engineer_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "m14_zm"; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "m16_zm"; + self set_player_is_female( 0 ); + self.whos_who_shader = "c_zom_player_engineer_dlc1_fb"; + break; + case "1": + self character\c_highrise_player_reporter::main(); + self setviewmodel( "c_zom_reporter_viewhands" ); + level.vox maps\mp\zombies\_zm_audio::zmbvoxinitspeaker( "player", "vox_plr_", self ); + self.talks_in_danger = 1; + level.rich_sq_player = self; + self.favorite_wall_weapons_list[self.favorite_wall_weapons_list.size] = "beretta93r_zm"; + self set_player_is_female( 0 ); + self.whos_who_shader = "c_zom_player_reporter_dlc1_fb"; + break; + } + + self setmovespeedscale( 1 ); + self setsprintduration( 4 ); + self setsprintcooldown( 0 ); + self thread set_exert_id(); } -set_exert_id() //checked matches cerberus output +set_exert_id() { - self endon( "disconnect" ); - wait_network_frame(); - wait_network_frame(); - self maps/mp/zombies/_zm_audio::setexertvoice( self.characterindex + 1 ); + self endon( "disconnect" ); + wait_network_frame(); + wait_network_frame(); + self maps\mp\zombies\_zm_audio::setexertvoice( self.characterindex + 1 ); } -assign_lowest_unused_character_index() //checked partially changed to match cerberus output see info.md +assign_lowest_unused_character_index() { - charindexarray = []; - charindexarray[ 0 ] = 0; - charindexarray[ 1 ] = 1; - charindexarray[ 2 ] = 2; - charindexarray[ 3 ] = 3; - players = get_players(); - if ( players.size == 1 ) - { - charindexarray = array_randomize( charindexarray ); - return charindexarray[ 0 ]; - } - else if ( players.size == 2 ) - { - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - if ( player.characterindex == 2 || player.characterindex == 0 ) - { - if ( randomint( 100 ) > 50 ) - { - return 1; - } - return 3; - } - else - { - if ( player.characterindex == 3 || player.characterindex == 1 ) - { - if ( randomint( 100 ) > 50 ) - { - return 0; - } - return 2; - } - } - } - } - charindexarray = array_randomize( charindexarray ); - return charindexarray[ 0 ]; - } - else - { - foreach ( player in players ) - { - if ( isDefined( player.characterindex ) ) - { - arrayremovevalue( charindexarray, player.characterindex, 0 ); - } - } - if ( charindexarray.size > 0 ) - { - return charindexarray[ 0 ]; - } - } - return 0; + charindexarray = []; + charindexarray[0] = 0; + charindexarray[1] = 1; + charindexarray[2] = 2; + charindexarray[3] = 3; + players = get_players(); + + if ( players.size == 1 ) + { + charindexarray = array_randomize( charindexarray ); + return charindexarray[0]; + } + else if ( players.size == 2 ) + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + { + if ( player.characterindex == 2 || player.characterindex == 0 ) + { + if ( randomint( 100 ) > 50 ) + return 1; + + return 3; + continue; + } + + if ( player.characterindex == 3 || player.characterindex == 1 ) + { + if ( randomint( 100 ) > 50 ) + return 0; + + return 2; + } + } + } + + charindexarray = array_randomize( charindexarray ); + return charindexarray[0]; + } + else + { + foreach ( player in players ) + { + if ( isdefined( player.characterindex ) ) + arrayremovevalue( charindexarray, player.characterindex, 0 ); + } + + if ( charindexarray.size > 0 ) + return charindexarray[0]; + } + + return 0; } -zombie_init_done() //checked changed to match cerberus output +zombie_init_done() { - self.allowpain = 0; - self.zombie_path_bad = 0; - self thread maps/mp/zm_highrise_distance_tracking::escaped_zombies_cleanup_init(); - self thread elevator_traverse_watcher(); - if ( self.classname == "actor_zm_highrise_basic_03" ) - { - health_bonus = int( self.maxhealth * 0.05 ); - self.maxhealth += health_bonus; - if ( self.headmodel == "c_zom_zombie_chinese_head3_helmet" ) - { - self.maxhealth += health_bonus; - } - self.health = self.maxhealth; - } - self setphysparams( 15, 0, 48 ); + self.allowpain = 0; + self.zombie_path_bad = 0; + self thread maps\mp\zm_highrise_distance_tracking::escaped_zombies_cleanup_init(); + self thread elevator_traverse_watcher(); + + if ( self.classname == "actor_zm_highrise_basic_03" ) + { + health_bonus = int( self.maxhealth * 0.05 ); + self.maxhealth += health_bonus; + + if ( self.headmodel == "c_zom_zombie_chinese_head3_helmet" ) + self.maxhealth += health_bonus; + + self.health = self.maxhealth; + } + + self setphysparams( 15, 0, 48 ); } -setup_personality_character_exerts() //checked matches cerberus output +setup_personality_character_exerts() { - level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0"; - level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1"; - level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2"; - level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3"; - level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4"; - level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5"; - level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6"; - level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0"; - level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1"; - level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2"; - level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0"; - level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1"; - level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2"; - level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3"; - level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4"; - level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5"; - level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6"; - level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0"; - level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1"; - level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2"; - level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3"; - level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4"; - level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5"; - level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6"; - level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0"; - level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1"; - level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2"; - level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3"; - level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0"; - level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1"; - level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2"; - level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3"; - level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0"; - level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1"; - level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2"; - level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3"; - level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0"; - level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1"; - level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2"; - level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2"; - level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2"; - level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2"; - level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2"; - level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3"; + level.exert_sounds[1]["burp"][0] = "vox_plr_0_exert_burp_0"; + level.exert_sounds[1]["burp"][1] = "vox_plr_0_exert_burp_1"; + level.exert_sounds[1]["burp"][2] = "vox_plr_0_exert_burp_2"; + level.exert_sounds[1]["burp"][3] = "vox_plr_0_exert_burp_3"; + level.exert_sounds[1]["burp"][4] = "vox_plr_0_exert_burp_4"; + level.exert_sounds[1]["burp"][5] = "vox_plr_0_exert_burp_5"; + level.exert_sounds[1]["burp"][6] = "vox_plr_0_exert_burp_6"; + level.exert_sounds[2]["burp"][0] = "vox_plr_1_exert_burp_0"; + level.exert_sounds[2]["burp"][1] = "vox_plr_1_exert_burp_1"; + level.exert_sounds[2]["burp"][2] = "vox_plr_1_exert_burp_2"; + level.exert_sounds[2]["burp"][3] = "vox_plr_1_exert_burp_3"; + level.exert_sounds[3]["burp"][0] = "vox_plr_2_exert_burp_0"; + level.exert_sounds[3]["burp"][1] = "vox_plr_2_exert_burp_1"; + level.exert_sounds[3]["burp"][2] = "vox_plr_2_exert_burp_2"; + level.exert_sounds[3]["burp"][3] = "vox_plr_2_exert_burp_3"; + level.exert_sounds[3]["burp"][4] = "vox_plr_2_exert_burp_4"; + level.exert_sounds[3]["burp"][5] = "vox_plr_2_exert_burp_5"; + level.exert_sounds[3]["burp"][6] = "vox_plr_2_exert_burp_6"; + level.exert_sounds[4]["burp"][0] = "vox_plr_3_exert_burp_0"; + level.exert_sounds[4]["burp"][1] = "vox_plr_3_exert_burp_1"; + level.exert_sounds[4]["burp"][2] = "vox_plr_3_exert_burp_2"; + level.exert_sounds[4]["burp"][3] = "vox_plr_3_exert_burp_3"; + level.exert_sounds[4]["burp"][4] = "vox_plr_3_exert_burp_4"; + level.exert_sounds[4]["burp"][5] = "vox_plr_3_exert_burp_5"; + level.exert_sounds[4]["burp"][6] = "vox_plr_3_exert_burp_6"; + level.exert_sounds[1]["hitmed"][0] = "vox_plr_0_exert_pain_medium_0"; + level.exert_sounds[1]["hitmed"][1] = "vox_plr_0_exert_pain_medium_1"; + level.exert_sounds[1]["hitmed"][2] = "vox_plr_0_exert_pain_medium_2"; + level.exert_sounds[1]["hitmed"][3] = "vox_plr_0_exert_pain_medium_3"; + level.exert_sounds[2]["hitmed"][0] = "vox_plr_1_exert_pain_medium_0"; + level.exert_sounds[2]["hitmed"][1] = "vox_plr_1_exert_pain_medium_1"; + level.exert_sounds[2]["hitmed"][2] = "vox_plr_1_exert_pain_medium_2"; + level.exert_sounds[2]["hitmed"][3] = "vox_plr_1_exert_pain_medium_3"; + level.exert_sounds[3]["hitmed"][0] = "vox_plr_2_exert_pain_medium_0"; + level.exert_sounds[3]["hitmed"][1] = "vox_plr_2_exert_pain_medium_1"; + level.exert_sounds[3]["hitmed"][2] = "vox_plr_2_exert_pain_medium_2"; + level.exert_sounds[3]["hitmed"][3] = "vox_plr_2_exert_pain_medium_3"; + level.exert_sounds[4]["hitmed"][0] = "vox_plr_3_exert_pain_medium_0"; + level.exert_sounds[4]["hitmed"][1] = "vox_plr_3_exert_pain_medium_1"; + level.exert_sounds[4]["hitmed"][2] = "vox_plr_3_exert_pain_medium_2"; + level.exert_sounds[4]["hitmed"][3] = "vox_plr_3_exert_pain_medium_3"; + level.exert_sounds[1]["hitlrg"][0] = "vox_plr_0_exert_pain_high_0"; + level.exert_sounds[1]["hitlrg"][1] = "vox_plr_0_exert_pain_high_1"; + level.exert_sounds[1]["hitlrg"][2] = "vox_plr_0_exert_pain_high_2"; + level.exert_sounds[1]["hitlrg"][3] = "vox_plr_0_exert_pain_high_3"; + level.exert_sounds[2]["hitlrg"][0] = "vox_plr_1_exert_pain_high_0"; + level.exert_sounds[2]["hitlrg"][1] = "vox_plr_1_exert_pain_high_1"; + level.exert_sounds[2]["hitlrg"][2] = "vox_plr_1_exert_pain_high_2"; + level.exert_sounds[2]["hitlrg"][3] = "vox_plr_1_exert_pain_high_3"; + level.exert_sounds[3]["hitlrg"][0] = "vox_plr_2_exert_pain_high_0"; + level.exert_sounds[3]["hitlrg"][1] = "vox_plr_2_exert_pain_high_1"; + level.exert_sounds[3]["hitlrg"][2] = "vox_plr_2_exert_pain_high_2"; + level.exert_sounds[3]["hitlrg"][3] = "vox_plr_2_exert_pain_high_3"; + level.exert_sounds[4]["hitlrg"][0] = "vox_plr_3_exert_pain_high_0"; + level.exert_sounds[4]["hitlrg"][1] = "vox_plr_3_exert_pain_high_1"; + level.exert_sounds[4]["hitlrg"][2] = "vox_plr_3_exert_pain_high_2"; + level.exert_sounds[4]["hitlrg"][3] = "vox_plr_3_exert_pain_high_3"; } -melee_anim_state() //checked matches cerberus output +melee_anim_state() { - if ( flag( "leaper_round" ) ) - { - mas = "zm_run_melee"; - melee_dist = distancesquared( self.origin, self.enemy.origin ); - kick_dist = 1024; - if ( melee_dist < kick_dist ) - { - mas = "zm_jump_melee"; - } - self.melee_attack = 1; - return mas; - } - return undefined; + if ( flag( "leaper_round" ) ) + { + mas = "zm_run_melee"; + melee_dist = distancesquared( self.origin, self.enemy.origin ); + kick_dist = 1024; + + if ( melee_dist < kick_dist ) + mas = "zm_jump_melee"; + + self.melee_attack = 1; + return mas; + } + + return undefined; } -toggle_leaper_collision() //checked changed to match cerberus output +toggle_leaper_collision() { - level endon( "end_game" ); - a_leaper_collision = getentarray( "leaper_clip", "targetname" ); - while ( 1 ) - { - flag_waitopen( "leaper_round" ); - foreach ( clip_brush in a_leaper_collision ) - { - clip_brush notsolid(); - clip_brush connectpaths(); - } - flag_wait( "leaper_round" ); - foreach ( clip_brush in a_leaper_collision ) - { - clip_brush solid(); - clip_brush connectpaths(); - } - } + level endon( "end_game" ); + a_leaper_collision = getentarray( "leaper_clip", "targetname" ); + + while ( true ) + { + flag_waitopen( "leaper_round" ); + + foreach ( clip_brush in a_leaper_collision ) + { + clip_brush notsolid(); + clip_brush connectpaths(); + } + + flag_wait( "leaper_round" ); + + foreach ( clip_brush in a_leaper_collision ) + { + clip_brush solid(); + clip_brush connectpaths(); + } + } } -toggle_leaper_traversals() //checked changed to match cerberus output +toggle_leaper_traversals() { - level endon( "end_game" ); - a_leaper_traversals = getentarray( "leaper_traversal_clip", "targetname" ); - while ( 1 ) - { - flag_waitopen( "leaper_round" ); - foreach ( clip_brush in a_leaper_traversals ) - { - clip_brush solid(); - clip_brush disconnectpaths(); - clip_brush notsolid(); - } - flag_wait( "leaper_round" ); - foreach ( clip_brush in a_leaper_traversals ) - { - clip_brush notsolid(); - clip_brush connectpaths(); - } - } + level endon( "end_game" ); + a_leaper_traversals = getentarray( "leaper_traversal_clip", "targetname" ); + + while ( true ) + { + flag_waitopen( "leaper_round" ); + + foreach ( clip_brush in a_leaper_traversals ) + { + clip_brush solid(); + clip_brush disconnectpaths(); + clip_brush notsolid(); + } + + flag_wait( "leaper_round" ); + + foreach ( clip_brush in a_leaper_traversals ) + { + clip_brush notsolid(); + clip_brush connectpaths(); + } + } } -toggle_zombie_traversals() //checked changed to match cerberus output +toggle_zombie_traversals() { - level endon( "end_game" ); - a_zombie_only_traversals = getentarray( "zombie_traversal_clip", "targetname" ); - while ( 1 ) - { - flag_waitopen( "leaper_round" ); - foreach ( clip_brush in a_zombie_only_traversals ) - { - clip_brush notsolid(); - clip_brush connectpaths(); - } - flag_wait( "leaper_round" ); - foreach ( clip_brush in a_zombie_only_traversals ) - { - clip_brush solid(); - clip_brush disconnectpaths(); - clip_brush notsolid(); - } - } + level endon( "end_game" ); + a_zombie_only_traversals = getentarray( "zombie_traversal_clip", "targetname" ); + + while ( true ) + { + flag_waitopen( "leaper_round" ); + + foreach ( clip_brush in a_zombie_only_traversals ) + { + clip_brush notsolid(); + clip_brush connectpaths(); + } + + flag_wait( "leaper_round" ); + + foreach ( clip_brush in a_zombie_only_traversals ) + { + clip_brush solid(); + clip_brush disconnectpaths(); + clip_brush notsolid(); + } + } } -is_touching_instakill() //checked changed to match cerberus output +is_touching_instakill() { - foreach ( trigger in level.insta_kill_triggers ) - { - if ( self istouching( trigger ) ) - { - return 1; - } - } - return 0; + foreach ( trigger in level.insta_kill_triggers ) + { + if ( self istouching( trigger ) ) + return true; + } + + return false; } -player_force_from_prone() //checked matches cerberus output +player_force_from_prone() { - level endon( "intermission" ); - level endon( "end_game" ); - while ( 1 ) - { - self waittill( "trigger", who ); - if ( who getstance() == "prone" && isplayer( who ) ) - { - who setstance( "crouch" ); - } - wait 0.1; - } + level endon( "intermission" ); + level endon( "end_game" ); + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who getstance() == "prone" && isplayer( who ) ) + who setstance( "crouch" ); + + wait 0.1; + } } -equipment_safe_to_drop( weapon ) //checked changed at own discretion +equipment_safe_to_drop( weapon ) { - if ( isDefined( self.origin ) && abs( self.origin[ 2 ] - weapon.origin[ 2 ] ) > 120 ) - { - return 0; - } - if ( !isDefined( weapon.canmove ) ) - { - weapon.canmove = weapon maps/mp/zm_highrise_elevators::object_is_on_elevator(); - } - if ( is_true( weapon.canmove ) ) - { - return 1; - } - if ( weapon is_touching_instakill() ) - { - return 0; - } - return 1; + if ( isdefined( self.origin ) && abs( self.origin[2] - weapon.origin[2] ) > 120 ) + return false; + + if ( !isdefined( weapon.canmove ) ) + weapon.canmove = weapon maps\mp\zm_highrise_elevators::object_is_on_elevator(); + + if ( isdefined( weapon.canmove ) && weapon.canmove ) + return true; + + if ( weapon is_touching_instakill() ) + return false; + + return true; } -use_safe_spawn_on_elevator( weapon, origin, angles ) //checked changed at own discretion +use_safe_spawn_on_elevator( weapon, origin, angles ) { - if ( !isDefined( weapon.canmove ) ) - { - weapon.canmove = weapon maps/mp/zm_highrise_elevators::object_is_on_elevator(); - } - if ( is_true( weapon.canmove ) && is_true( weapon.elevator_parent.is_moving ) ) - { - return 1; - } - return 0; + if ( !isdefined( weapon.canmove ) ) + weapon.canmove = weapon maps\mp\zm_highrise_elevators::object_is_on_elevator(); + + if ( isdefined( weapon.canmove ) && weapon.canmove && ( isdefined( weapon.elevator_parent.is_moving ) && weapon.elevator_parent.is_moving ) ) + return true; + + return false; } -equipment_planted( weapon, equipname, groundfrom ) //checked changed at own discretion +equipment_planted( weapon, equipname, groundfrom ) { - weaponelevator = groundfrom maps/mp/zm_highrise_elevators::object_is_on_elevator(); - if ( !weaponelevator && weapon is_touching_instakill() ) - { - self maps/mp/zombies/_zm_equipment::equipment_take( equipname ); - wait 0.05; - self notify( equipname + "_taken" ); - return; - } - if ( weaponelevator && !is_true( weapon.canmove ) ) - { - weapon.canmove = 1; - maps/mp/zombies/_zm_unitrigger::reregister_unitrigger_as_dynamic( weapon.stub ); - } - if ( isDefined( self ) && weaponelevator ) - { - if ( isDefined( weapon ) ) - { - parent = groundfrom.elevator_parent; - weapon linkto( parent ); - weapon setmovingplatformenabled( 1 ); - if ( isDefined( weapon.stub ) ) - { - weapon.stub.link_parent = parent; - weapon.stub.origin_parent = weapon; - } - weapon.equipment_can_move = 1; - weapon.isonbus = 1; - weapon.move_parent = parent; - } - } + weaponelevator = groundfrom maps\mp\zm_highrise_elevators::object_is_on_elevator(); + + if ( !weaponelevator && weapon is_touching_instakill() ) + { + self maps\mp\zombies\_zm_equipment::equipment_take( equipname ); + wait 0.05; + self notify( equipname + "_taken" ); + return; + } + + if ( weaponelevator && isdefined( weapon.canmove ) && !weapon.canmove ) + { + weapon.canmove = 1; + maps\mp\zombies\_zm_unitrigger::reregister_unitrigger_as_dynamic( weapon.stub ); + } + + if ( isdefined( self ) && weaponelevator ) + { + if ( isdefined( weapon ) ) + { + parent = groundfrom.elevator_parent; + weapon linkto( parent ); + weapon setmovingplatformenabled( 1 ); + + if ( isdefined( weapon.stub ) ) + { + weapon.stub.link_parent = parent; + weapon.stub.origin_parent = weapon; + } + + weapon.equipment_can_move = 1; + weapon.isonbus = 1; + weapon.move_parent = parent; + } + } } -safe_place_for_buildable_piece( piece ) //checked matches cerberus output +safe_place_for_buildable_piece( piece ) { - if ( self is_jumping() ) - { - return 0; - } - return 1; + if ( self is_jumping() ) + return false; + + return true; } -zm_highrise_pandora_fx_func() //checked changed at own discretion +zm_highrise_pandora_fx_func() { - self endon( "death" ); - self.pandora_light = spawn( "script_model", self.zbarrier.origin ); - self.pandora_light.angles = self.zbarrier.angles + vectorScale( ( -1, 0, -1 ), 90 ); - self.pandora_light setmodel( "tag_origin" ); - if ( !is_true( level._box_initialized ) ) - { - flag_wait( "start_zombie_round_logic" ); - level._box_initialized = 1; - } - wait 1; - if ( isDefined( self ) && isDefined( self.pandora_light ) ) - { - n_pandora_fx = level._effect[ "lght_marker" ]; - if ( is_magic_box_in_inverted_building() ) - { - n_pandora_fx = level._effect[ "pandora_box_inverted" ]; - } - playfxontag( n_pandora_fx, self.pandora_light, "tag_origin" ); - } + self endon( "death" ); + self.pandora_light = spawn( "script_model", self.zbarrier.origin ); + self.pandora_light.angles = self.zbarrier.angles + vectorscale( ( -1, 0, -1 ), 90.0 ); + self.pandora_light setmodel( "tag_origin" ); + + if ( !( isdefined( level._box_initialized ) && level._box_initialized ) ) + { + flag_wait( "start_zombie_round_logic" ); + level._box_initialized = 1; + } + + wait 1; + + if ( isdefined( self ) && isdefined( self.pandora_light ) ) + { + n_pandora_fx = level._effect["lght_marker"]; + + if ( is_magic_box_in_inverted_building() ) + n_pandora_fx = level._effect["pandora_box_inverted"]; + + playfxontag( n_pandora_fx, self.pandora_light, "tag_origin" ); + } } -is_magic_box_in_inverted_building() //checked changed to match cerberus output +is_magic_box_in_inverted_building() { - b_is_in_inverted_building = 0; - a_boxes_in_inverted_building = array( "start_chest" ); - str_location = level.chests[ level.chest_index ].script_noteworthy; - /* + b_is_in_inverted_building = 0; + a_boxes_in_inverted_building = array( "start_chest" ); + str_location = level.chests[level.chest_index].script_noteworthy; /# - assert( isDefined( str_location ), "is_magic_box_in_inverted_building() can't find magic box location" ); + assert( isdefined( str_location ), "is_magic_box_in_inverted_building() can't find magic box location" ); #/ - */ - for ( i = 0; i < a_boxes_in_inverted_building.size; i++ ) - { - if ( a_boxes_in_inverted_building[ i ] == str_location ) - { - b_is_in_inverted_building = 1; - } - } - return b_is_in_inverted_building; + for ( i = 0; i < a_boxes_in_inverted_building.size; i++ ) + { + if ( a_boxes_in_inverted_building[i] == str_location ) + b_is_in_inverted_building = 1; + } + + return b_is_in_inverted_building; } -init_highrise_stats() //checked matches cerberus output +init_highrise_stats() { - self maps/mp/zm_highrise_sq::init_player_sidequest_stats(); - self maps/mp/zm_highrise_achievement::init_player_achievement_stats(); + self maps\mp\zm_highrise_sq::init_player_sidequest_stats(); + self maps\mp\zm_highrise_achievement::init_player_achievement_stats(); } -init_level_specific_wall_buy_fx() //checked matches cerberus output +init_level_specific_wall_buy_fx() { - level._effect[ "an94_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_an94" ); - level._effect[ "pdw57_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_pdw57" ); - level._effect[ "svu_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_svuas" ); + level._effect["an94_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_an94" ); + level._effect["pdw57_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_pdw57" ); + level._effect["svu_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_svuas" ); } -init_level_specific_audio() //checked matches cerberus output +init_level_specific_audio() { - init_highrise_player_dialogue(); - add_highrise_response_chance(); - level thread survivor_vox(); + init_highrise_player_dialogue(); + add_highrise_response_chance(); + level thread survivor_vox(); } -add_highrise_response_chance() //checked matches cerberus output +add_highrise_response_chance() { - add_vox_response_chance( "crawl_spawn", 10 ); - add_vox_response_chance( "reboard", 5 ); - add_vox_response_chance( "slipgun_kill", 10 ); - add_vox_response_chance( "leaper_round", 100 ); - add_vox_response_chance( "achievement", 100 ); - add_vox_response_chance( "power_on", 100 ); - add_vox_response_chance( "power_off", 100 ); - add_vox_response_chance( "upgrade", 100 ); - add_vox_response_chance( "build_pck_bspringpad_zm", 45 ); - add_vox_response_chance( "build_pck_bslipgun_zm", 45 ); - add_vox_response_chance( "build_pck_wspringpad_zm", 45 ); - add_vox_response_chance( "build_pck_wslipgun", 45 ); - add_vox_response_chance( "build_plc_springpad_zm", 45 ); - add_vox_response_chance( "build_plc_slipgun_zm", 45 ); - add_vox_response_chance( "build_pickup", 45 ); - add_vox_response_chance( "build_swap", 45 ); - add_vox_response_chance( "build_add", 45 ); - add_vox_response_chance( "build_final", 45 ); + add_vox_response_chance( "crawl_spawn", 10 ); + add_vox_response_chance( "reboard", 5 ); + add_vox_response_chance( "slipgun_kill", 10 ); + add_vox_response_chance( "leaper_round", 100 ); + add_vox_response_chance( "achievement", 100 ); + add_vox_response_chance( "power_on", 100 ); + add_vox_response_chance( "power_off", 100 ); + add_vox_response_chance( "upgrade", 100 ); + add_vox_response_chance( "build_pck_bspringpad_zm", 45 ); + add_vox_response_chance( "build_pck_bslipgun_zm", 45 ); + add_vox_response_chance( "build_pck_wspringpad_zm", 45 ); + add_vox_response_chance( "build_pck_wslipgun", 45 ); + add_vox_response_chance( "build_plc_springpad_zm", 45 ); + add_vox_response_chance( "build_plc_slipgun_zm", 45 ); + add_vox_response_chance( "build_pickup", 45 ); + add_vox_response_chance( "build_swap", 45 ); + add_vox_response_chance( "build_add", 45 ); + add_vox_response_chance( "build_final", 45 ); } -init_highrise_player_dialogue() //checked matches cerberus output +init_highrise_player_dialogue() { - level.vox zmbvoxadd( "player", "general", "revive_down", "bus_down", undefined ); - level.vox zmbvoxadd( "player", "general", "revive_up", "heal_revived", undefined ); - level.vox zmbvoxadd( "player", "general", "achievement", "earn_acheivement", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money_weapon", "nomoney_weapon", undefined ); - level.vox zmbvoxadd( "player", "general", "no_money_box", "nomoney_box", undefined ); - level.vox zmbvoxadd( "player", "general", "exert_sigh", "exert_sigh", undefined ); - level.vox zmbvoxadd( "player", "general", "exert_laugh", "exert_laugh", undefined ); - level.vox zmbvoxadd( "player", "general", "pain_high", "pain_high", undefined ); - level.vox zmbvoxadd( "player", "kill", "slipgun_kill", "kill_sliquifier", undefined ); - level.vox zmbvoxadd( "player", "general", "leaper_round", "leaper_reveal", undefined ); - level.vox zmbvoxadd( "player", "general", "leaper_seen", "leaper_see", undefined ); - level.vox zmbvoxadd( "player", "general", "leaper_killed", "leaper_kill", undefined ); - level.vox zmbvoxadd( "player", "general", "leaper_attack", "leaper_attack", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bspringpad_zm", "build_pck_bsteam", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_bslipgun_zm", "build_pck_bsliquifier", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wspringpad_zm", "build_pck_wsteam", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pck_wslipgun_zm", "build_pck_wsliquifier", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_springpad_zm", "build_plc_steam", undefined ); - level.vox zmbvoxadd( "player", "general", "build_plc_slipgun_zm", "build_plc_sliquifier", undefined ); - level.vox zmbvoxadd( "player", "general", "build_pickup", "build_pickup", undefined ); - level.vox zmbvoxadd( "player", "general", "build_swap", "build_swap", undefined ); - level.vox zmbvoxadd( "player", "general", "build_add", "build_add", undefined ); - level.vox zmbvoxadd( "player", "general", "build_final", "build_final", undefined ); - level.vox zmbvoxadd( "player", "general", "intro", "power_off", undefined ); - level.vox zmbvoxadd( "player", "power", "power_on", "power_on", undefined ); - level.vox zmbvoxadd( "player", "general", "reboard", "rebuild_boards", undefined ); - level.vox zmbvoxadd( "player", "general", "upgrade", "find_secret", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_wait", "pap_wait", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_wait2", "pap_wait2", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_arm", "pap_arm", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_arm2", "pap_arm2", undefined ); - level.vox zmbvoxadd( "player", "general", "pap_hint", "pap_hint", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_down", "bus_down", undefined ); + level.vox zmbvoxadd( "player", "general", "revive_up", "heal_revived", undefined ); + level.vox zmbvoxadd( "player", "general", "achievement", "earn_acheivement", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money_weapon", "nomoney_weapon", undefined ); + level.vox zmbvoxadd( "player", "general", "no_money_box", "nomoney_box", undefined ); + level.vox zmbvoxadd( "player", "general", "exert_sigh", "exert_sigh", undefined ); + level.vox zmbvoxadd( "player", "general", "exert_laugh", "exert_laugh", undefined ); + level.vox zmbvoxadd( "player", "general", "pain_high", "pain_high", undefined ); + level.vox zmbvoxadd( "player", "kill", "slipgun_kill", "kill_sliquifier", undefined ); + level.vox zmbvoxadd( "player", "general", "leaper_round", "leaper_reveal", undefined ); + level.vox zmbvoxadd( "player", "general", "leaper_seen", "leaper_see", undefined ); + level.vox zmbvoxadd( "player", "general", "leaper_killed", "leaper_kill", undefined ); + level.vox zmbvoxadd( "player", "general", "leaper_attack", "leaper_attack", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bspringpad_zm", "build_pck_bsteam", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_bslipgun_zm", "build_pck_bsliquifier", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wspringpad_zm", "build_pck_wsteam", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pck_wslipgun_zm", "build_pck_wsliquifier", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_springpad_zm", "build_plc_steam", undefined ); + level.vox zmbvoxadd( "player", "general", "build_plc_slipgun_zm", "build_plc_sliquifier", undefined ); + level.vox zmbvoxadd( "player", "general", "build_pickup", "build_pickup", undefined ); + level.vox zmbvoxadd( "player", "general", "build_swap", "build_swap", undefined ); + level.vox zmbvoxadd( "player", "general", "build_add", "build_add", undefined ); + level.vox zmbvoxadd( "player", "general", "build_final", "build_final", undefined ); + level.vox zmbvoxadd( "player", "general", "intro", "power_off", undefined ); + level.vox zmbvoxadd( "player", "power", "power_on", "power_on", undefined ); + level.vox zmbvoxadd( "player", "general", "reboard", "rebuild_boards", undefined ); + level.vox zmbvoxadd( "player", "general", "upgrade", "find_secret", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_wait", "pap_wait", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_wait2", "pap_wait2", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_arm", "pap_arm", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_arm2", "pap_arm2", undefined ); + level.vox zmbvoxadd( "player", "general", "pap_hint", "pap_hint", undefined ); } -highrise_audio_custom_response_line( player, index, category, type ) //checked matches cerberus output +highrise_audio_custom_response_line( player, index, category, type ) { - russman = 0; - samuel = 1; - misty = 2; - marlton = 3; - switch( player.characterindex ) - { - case 0: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); - break; - case 1: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, russman, misty, category, type ); - break; - case 2: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); - break; - case 3: - level maps/mp/zombies/_zm_audio::setup_hero_rival( player, misty, russman, category, type ); - break; - } - return; + russman = 0; + samuel = 1; + misty = 2; + marlton = 3; + + switch ( player.characterindex ) + { + case "0": + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, samuel, marlton, category, type ); + break; + case "1": + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, russman, misty, category, type ); + break; + case "2": + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, marlton, samuel, category, type ); + break; + case "3": + level maps\mp\zombies\_zm_audio::setup_hero_rival( player, misty, russman, category, type ); + break; + } } -survivor_vox() //checked changed to match cerberus output +survivor_vox() { - trigger = spawn( "trigger_radius_use", ( 2398.5, -366, 1332.5 ), 0, 40, 72 ); - trigger setcursorhint( "HINT_NOICON" ); - trigger sethintstring( "" ); - trigger triggerignoreteam(); - level waittill( "power_on" ); - initiated = 0; - while ( !initiated ) - { - trigger waittill( "trigger", player ); - playsoundatposition( "zmb_zombie_arc", trigger.origin ); - start_time = getTime(); - end_time = start_time + 5000; - while ( player usebuttonpressed() && player istouching( trigger ) && is_player_valid( player ) ) - { - if ( getTime() > end_time ) - { - initiated = 1; - } - wait 0.05; - } - } - sur_num = 1; - index = 0; - count = 0; - playsoundatposition( "zmb_buildable_piece_add", trigger.origin ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - if ( is_player_valid( player ) ) - { - if ( sur_num == 1 ) - { - count = 7; - } - else if ( sur_num == 2 ) - { - count = 5; - } - else if ( sur_num == 3 ) - { - count = 6; - } - else if ( sur_num == 4 ) - { - count = 4; - } - else - { - if ( sur_num == 5 ) - { - count = 1; - } - } - for ( index = 0; index < count; index++ ) - { - trigger playsoundwithnotify( "vox_sur" + sur_num + "_tv_distress_" + index, "vox_sur" + sur_num + "_tv_distress_" + index + "done" ); - trigger waittill( "vox_sur" + sur_num + "_tv_distress_" + index + "done" ); - trigger waittill( "trigger", player ); - } - } - sur_num++; - if ( sur_num > 5 ) - { - sur_num = 1; - } - wait 5; - } + trigger = spawn( "trigger_radius_use", ( 2398.5, -366, 1332.5 ), 0, 40, 72 ); + trigger setcursorhint( "HINT_NOICON" ); + trigger sethintstring( "" ); + trigger triggerignoreteam(); + + level waittill( "power_on" ); + + initiated = 0; + + while ( !initiated ) + { + trigger waittill( "trigger", player ); + + playsoundatposition( "zmb_zombie_arc", trigger.origin ); + start_time = gettime(); + end_time = start_time + 5000; + + while ( player usebuttonpressed() && player istouching( trigger ) && is_player_valid( player ) ) + { + if ( gettime() > end_time ) + initiated = 1; + + wait 0.05; + } + } + + sur_num = 1; + index = 0; + count = 0; + playsoundatposition( "zmb_buildable_piece_add", trigger.origin ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( is_player_valid( player ) ) + { + if ( sur_num == 1 ) + count = 7; + else if ( sur_num == 2 ) + count = 5; + else if ( sur_num == 3 ) + count = 6; + else if ( sur_num == 4 ) + count = 4; + else if ( sur_num == 5 ) + count = 1; + + for ( index = 0; index < count; index++ ) + { + trigger playsoundwithnotify( "vox_sur" + sur_num + "_tv_distress_" + index, "vox_sur" + sur_num + "_tv_distress_" + index + "done" ); + + trigger waittill( "vox_sur" + sur_num + "_tv_distress_" + index + "done" ); + + trigger waittill( "trigger", player ); + } + } + + sur_num++; + + if ( sur_num > 5 ) + sur_num = 1; + + wait 5; + } } -buildable_build_custom_func( stub ) //checked changed to match cerberus output +buildable_build_custom_func( stub ) { - buildable = stub.buildablezone; - counter = 0; - for ( i = 0; i < buildable.pieces.size; i++ ) - { - if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built ) - { - counter++; - } - } - if ( counter == ( buildable.pieces.size - 1 ) ) - { - self thread do_player_general_vox( "general", "build_final", 45 ); - } + buildable = stub.buildablezone; + counter = 0; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built ) + counter++; + } + + if ( counter == buildable.pieces.size - 1 ) + self thread do_player_general_vox( "general", "build_final", 45 ); } -elevator_traverse_watcher() //checked matches cerberus output +elevator_traverse_watcher() { - self endon( "death" ); - while ( 1 ) - { - if ( is_true( self.is_traversing ) ) - { - self.elevator_parent = undefined; - if ( is_true( self maps/mp/zm_highrise_elevators::object_is_on_elevator() ) ) - { - if ( isDefined( self.elevator_parent ) ) - { - if ( is_true( self.elevator_parent.is_moving ) ) - { - playfx( level._effect[ "zomb_gib" ], self.origin ); - if ( !is_true( self.has_been_damaged_by_player ) ) - { - level.zombie_total++; - } - self delete(); - return; - } - } - } - } - wait 0.2; - } + self endon( "death" ); + + while ( true ) + { + if ( is_true( self.is_traversing ) ) + { + self.elevator_parent = undefined; + + if ( is_true( self maps\mp\zm_highrise_elevators::object_is_on_elevator() ) ) + { + if ( isdefined( self.elevator_parent ) ) + { + if ( is_true( self.elevator_parent.is_moving ) ) + { + playfx( level._effect["zomb_gib"], self.origin ); + + if ( !is_true( self.has_been_damaged_by_player ) ) + level.zombie_total++; + + self delete(); + return; + } + } + } + } + + wait 0.2; + } } -highrise_special_weapon_magicbox_check(weapon) +highrise_special_weapon_magicbox_check( weapon ) { - if ( is_true( level.raygun2_included ) ) - { - if ( weapon == "ray_gun_zm" ) - { - if(self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps/mp/zombies/_zm_chugabud::is_weapon_available_in_chugabud_corpse( "raygun_mark2_zm", self ) ) - { - return 0; - } - } - if ( weapon == "raygun_mark2_zm" ) - { - if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps/mp/zombies/_zm_chugabud::is_weapon_available_in_chugabud_corpse( "ray_gun_zm", self ) ) - { - return 0; - } - if ( randomint( 100 ) >= 33 ) - { - return 0; - } - } - } - return 1; + if ( isdefined( level.raygun2_included ) && level.raygun2_included ) + { + if ( weapon == "ray_gun_zm" ) + { + if ( self has_weapon_or_upgrade( "raygun_mark2_zm" ) || maps\mp\zombies\_zm_chugabud::is_weapon_available_in_chugabud_corpse( "raygun_mark2_zm", self ) ) + return false; + } + + if ( weapon == "raygun_mark2_zm" ) + { + if ( self has_weapon_or_upgrade( "ray_gun_zm" ) || maps\mp\zombies\_zm_chugabud::is_weapon_available_in_chugabud_corpse( "ray_gun_zm", self ) ) + return false; + + if ( randomint( 100 ) >= 33 ) + return false; + } + } + + return true; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc index 9aeae3a..d588743 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_achievement.gsc @@ -1,193 +1,198 @@ -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_globallogic_score; init() { - level thread achievement_highrise_sidequest(); - level thread achievement_mad_without_power(); - level.achievement_sound_func = ::achievement_sound_func; - onplayerconnect_callback( ::onplayerconnect ); + level thread achievement_highrise_sidequest(); + level thread achievement_mad_without_power(); + level.achievement_sound_func = ::achievement_sound_func; + onplayerconnect_callback( ::onplayerconnect ); } achievement_sound_func( achievement_name_lower ) { - self thread do_player_general_vox( "general", "achievement" ); + self thread do_player_general_vox( "general", "achievement" ); } init_player_achievement_stats() { - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 ); } onplayerconnect() { - self thread achievement_vertigoner(); - self thread achievement_slippery_when_undead(); - self thread achievement_facing_the_dragon(); - self thread achievement_im_my_own_best_friend(); - self thread achievement_shafted(); + self thread achievement_vertigoner(); + self thread achievement_slippery_when_undead(); + self thread achievement_facing_the_dragon(); + self thread achievement_im_my_own_best_friend(); + self thread achievement_shafted(); } achievement_highrise_sidequest() { - level endon( "end_game" ); - level waittill( "highrise_sidequest_achieved" ); + level endon( "end_game" ); + + level waittill( "highrise_sidequest_achieved" ); /# - iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" ); + iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" ); #/ - level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 ); + level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 ); } achievement_vertigoner() { - level endon( "end_game" ); - self endon( "disconnect" ); - self.num_zombies_flung = 0; - max_zombies_flung = 10; - while ( self.num_zombies_flung < max_zombies_flung ) - { - self waittill( "zombie_flung" ); - wait 0,1; - } + level endon( "end_game" ); + self endon( "disconnect" ); + self.num_zombies_flung = 0; + max_zombies_flung = 10; + + while ( self.num_zombies_flung < max_zombies_flung ) + { + self waittill( "zombie_flung" ); + + wait 0.1; + } /# + #/ - self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" ); + self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" ); } achievement_slippery_when_undead() { - level endon( "end_game" ); - self endon( "disconnect" ); - self.num_sliquifier_kills = 0; - max_kills_with_one_shot = 5; - while ( self.num_sliquifier_kills < max_kills_with_one_shot ) - { - self waittill( "sliquifier_kill" ); - wait 0,01; - } + level endon( "end_game" ); + self endon( "disconnect" ); + self.num_sliquifier_kills = 0; + max_kills_with_one_shot = 5; + + while ( self.num_sliquifier_kills < max_kills_with_one_shot ) + { + self waittill( "sliquifier_kill" ); + + wait 0.01; + } /# + #/ - self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" ); + self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" ); } achievement_facing_the_dragon() { - level endon( "end_game" ); - self endon( "disconnect" ); - v_achievement_location = ( 2209, 693, 3200 ); - v_dragon_position = ( 971, 43, 3800 ); - is_touching_distance = 350; - round_number_max = 2; - while ( 1 ) - { - if ( level.round_number >= round_number_max ) - { - return; - } - dist = distance( self.origin, v_achievement_location ); - if ( dist <= is_touching_distance ) - { - v_dir = vectornormalize( v_dragon_position - self.origin ); - v_forward = self getweaponforwarddir(); - dp = vectordot( v_dir, v_forward ); - if ( dp > 0,95 ) - { - break; - } - } - else - { - wait 0,01; - } - } + level endon( "end_game" ); + self endon( "disconnect" ); + v_achievement_location = ( 2209, 693, 3200 ); + v_dragon_position = ( 971, 43, 3800 ); + is_touching_distance = 350; + round_number_max = 2; + + while ( true ) + { + if ( level.round_number >= round_number_max ) + return; + + dist = distance( self.origin, v_achievement_location ); + + if ( dist <= is_touching_distance ) + { + v_dir = vectornormalize( v_dragon_position - self.origin ); + v_forward = self getweaponforwarddir(); + dp = vectordot( v_dir, v_forward ); + + if ( dp > 0.95 ) + break; + } + + wait 0.01; + } /# + #/ - self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" ); + self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" ); } achievement_im_my_own_best_friend() { - level endon( "end_game" ); - self endon( "disconnect" ); - self waittill( "whos_who_self_revive" ); + level endon( "end_game" ); + self endon( "disconnect" ); + + self waittill( "whos_who_self_revive" ); /# + #/ - self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" ); + self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" ); } achievement_mad_without_power() { - level endon( "end_game" ); - round_number_max = 10; - while ( level.round_number < round_number_max ) - { - level waittill( "start_of_round" ); - if ( flag( "power_on" ) ) - { - return; - } - } + level endon( "end_game" ); + round_number_max = 10; + + while ( level.round_number < round_number_max ) + { + level waittill( "start_of_round" ); + + if ( flag( "power_on" ) ) + return; + } /# + #/ - self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 ); + self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 ); } achievement_shafted() { - level endon( "end_game" ); - self endon( "disconnect" ); - level.perk_bought_func = ::player_buys_perk_machine; - max_unique_perk_machines = 6; - while ( 1 ) - { - self waittill_any( "player_buys_perk", "pap_used" ); - if ( isDefined( self.pap_used ) && self.pap_used == 1 ) - { - if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines ) - { - break; - } - } - else - { - } - } + level endon( "end_game" ); + self endon( "disconnect" ); + level.perk_bought_func = ::player_buys_perk_machine; + max_unique_perk_machines = 6; + + while ( true ) + { + self waittill_any( "player_buys_perk", "pap_used" ); + + if ( isdefined( self.pap_used ) && self.pap_used == 1 ) + { + if ( isdefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines ) + break; + } + } /# + #/ - self giveachievement_wrapper( "ZM_DLC1_SHAFTED" ); + self giveachievement_wrapper( "ZM_DLC1_SHAFTED" ); } player_buys_perk_machine( perk ) { - if ( !isDefined( self.perk_machines_bought ) ) - { - self.perk_machines_bought = []; - } - found = 0; - i = 0; - while ( i < self.perk_machines_bought.size ) - { - if ( perk == self.perk_machines_bought[ i ] ) - { - found = 1; - break; - } - else - { - i++; - } - } - if ( !found ) - { - self.perk_machines_bought[ self.perk_machines_bought.size ] = perk; - self notify( "player_buys_perk" ); - } + if ( !isdefined( self.perk_machines_bought ) ) + self.perk_machines_bought = []; + + found = 0; + + for ( i = 0; i < self.perk_machines_bought.size; i++ ) + { + if ( perk == self.perk_machines_bought[i] ) + { + found = 1; + break; + } + } + + if ( !found ) + { + self.perk_machines_bought[self.perk_machines_bought.size] = perk; + self notify( "player_buys_perk" ); + } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc index 42acc3e..11ca4d5 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_amb.gsc @@ -1,75 +1,74 @@ -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; -#include maps/mp/_ambientpackage; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_ambientpackage; +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; main() { - level thread sndmusicegg(); + level thread sndmusicegg(); } sndmusicegg() { - origins = []; - origins[ 0 ] = ( 2724, 300, 1347 ); - origins[ 1 ] = ( 2639, 1831, 1359 ); - origins[ 2 ] = ( 1230, 1846, 3249 ); - level.meteor_counter = 0; - level.music_override = 0; - i = 0; - while ( i < origins.size ) - { - level thread sndmusicegg_wait( origins[ i ] ); - i++; - } + origins = []; + origins[0] = ( 2724, 300, 1347 ); + origins[1] = ( 2639, 1831, 1359 ); + origins[2] = ( 1230, 1846, 3249 ); + level.meteor_counter = 0; + level.music_override = 0; + + for ( i = 0; i < origins.size; i++ ) + level thread sndmusicegg_wait( origins[i] ); } sndmusicegg_wait( bear_origin ) { - temp_ent = spawn( "script_origin", bear_origin ); - temp_ent playloopsound( "zmb_meteor_loop" ); - temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); - temp_ent waittill( "main_music_egg_hit", player ); - temp_ent stoploopsound( 1 ); - player playsound( "zmb_meteor_activate" ); - level.meteor_counter += 1; - if ( level.meteor_counter == 3 ) - { - level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 ); - } - else - { - wait 1,5; - temp_ent delete(); - } + temp_ent = spawn( "script_origin", bear_origin ); + temp_ent playloopsound( "zmb_meteor_loop" ); + temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); + + temp_ent waittill( "main_music_egg_hit", player ); + + temp_ent stoploopsound( 1 ); + player playsound( "zmb_meteor_activate" ); + level.meteor_counter += 1; + + if ( level.meteor_counter == 3 ) + level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 ); + else + { + wait 1.5; + temp_ent delete(); + } } sndmusicegg_override() { - if ( is_true( level.music_override ) ) - { - return 0; - } - return 1; + if ( is_true( level.music_override ) ) + return false; + + return true; } sndmuseggplay( ent, alias, time ) { - level.music_override = 1; - wait 1; - ent playsound( alias ); - level thread sndeggmusicwait( time ); - level waittill_either( "end_game", "sndSongDone" ); - ent stopsounds(); - wait 0,05; - ent delete(); - level.music_override = 0; + level.music_override = 1; + wait 1; + ent playsound( alias ); + level thread sndeggmusicwait( time ); + level waittill_either( "end_game", "sndSongDone" ); + ent stopsounds(); + wait 0.05; + ent delete(); + level.music_override = 0; } sndeggmusicwait( time ) { - level endon( "end_game" ); - wait time; - level notify( "sndSongDone" ); + level endon( "end_game" ); + wait( time ); + level notify( "sndSongDone" ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc index a2f369e..649a537 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_buildables.gsc @@ -1,353 +1,347 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_highrise_elevators; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zm_transit_utility; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zm_transit_utility; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_highrise_elevators; +#include maps\mp\zombies\_zm_unitrigger; init_buildables() { - level.buildable_piece_count = 13; - add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" ); - add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" ); - add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" ); - add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" ); - add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" ); + level.buildable_piece_count = 13; + add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" ); + add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" ); + add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" ); + add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" ); + add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" ); } include_buildables() { - springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 ); - springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 ); - springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 ); - springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 ); - springpad = spawnstruct(); - springpad.name = "springpad_zm"; - springpad add_buildable_piece( springpad_door ); - springpad add_buildable_piece( springpad_flag ); - springpad add_buildable_piece( springpad_motor ); - springpad add_buildable_piece( springpad_whistle ); - springpad.triggerthink = ::springpadbuildable; - include_buildable( springpad ); - slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 ); - slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 ); - slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 ); - slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 ); - slipgun = spawnstruct(); - slipgun.name = "slipgun_zm"; - slipgun add_buildable_piece( slipgun_canister ); - slipgun add_buildable_piece( slipgun_cooker ); - slipgun add_buildable_piece( slipgun_foot ); - slipgun add_buildable_piece( slipgun_throttle ); - slipgun.onbuyweapon = ::onbuyweapon_slipgun; - slipgun.triggerthink = ::slipgunbuildable; - slipgun.onuseplantobject = ::onuseplantobject_slipgun; - include_buildable( slipgun ); - key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2,4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 ); - key_chain.onspawn = ::onspawn_keys; - key_chain manage_multiple_pieces( 4 ); - key = spawnstruct(); - key.name = "keys_zm"; - key add_buildable_piece( key_chain ); - key.triggerthink = ::keysbuildable; - key.onuseplantobject = ::onuseplantobject_escapepodkey; - key.buildablepieces[ 0 ].onspawn = ::onspawn_keys; - include_buildable( key ); - ekey = spawnstruct(); - ekey.name = "ekeys_zm"; - ekey add_buildable_piece( key_chain ); - ekey.triggerthink = ::ekeysbuildable; - ekey.onuseplantobject = ::onuseplantobject_elevatorkey; - ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys; - include_buildable( ekey ); - if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 ) - { - sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 ); - sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 128, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 ); - sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 ); - sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 ); - sqcommon = spawnstruct(); - sqcommon.name = "sq_common"; - sqcommon add_buildable_piece( sq_common_electricbox ); - sqcommon add_buildable_piece( sq_common_meteor ); - sqcommon add_buildable_piece( sq_common_scaffolding ); - sqcommon add_buildable_piece( sq_common_transceiver ); - sqcommon.triggerthink = ::sqcommonbuildable; - include_buildable( sqcommon ); - maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); - } + springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 1 ); + springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 ); + springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 ); + springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 4 ); + springpad = spawnstruct(); + springpad.name = "springpad_zm"; + springpad add_buildable_piece( springpad_door ); + springpad add_buildable_piece( springpad_flag ); + springpad add_buildable_piece( springpad_motor ); + springpad add_buildable_piece( springpad_whistle ); + springpad.triggerthink = ::springpadbuildable; + include_buildable( springpad ); + slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 ); + slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 ); + slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 ); + slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 ); + slipgun = spawnstruct(); + slipgun.name = "slipgun_zm"; + slipgun add_buildable_piece( slipgun_canister ); + slipgun add_buildable_piece( slipgun_cooker ); + slipgun add_buildable_piece( slipgun_foot ); + slipgun add_buildable_piece( slipgun_throttle ); + slipgun.onbuyweapon = ::onbuyweapon_slipgun; + slipgun.triggerthink = ::slipgunbuildable; + slipgun.onuseplantobject = ::onuseplantobject_slipgun; + include_buildable( slipgun ); + key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2.4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 ); + key_chain.onspawn = ::onspawn_keys; + key_chain manage_multiple_pieces( 4 ); + key = spawnstruct(); + key.name = "keys_zm"; + key add_buildable_piece( key_chain ); + key.triggerthink = ::keysbuildable; + key.onuseplantobject = ::onuseplantobject_escapepodkey; + key.buildablepieces[0].onspawn = ::onspawn_keys; + include_buildable( key ); + ekey = spawnstruct(); + ekey.name = "ekeys_zm"; + ekey add_buildable_piece( key_chain ); + ekey.triggerthink = ::ekeysbuildable; + ekey.onuseplantobject = ::onuseplantobject_elevatorkey; + ekey.buildablepieces[0].onspawn = ::onspawn_keys; + include_buildable( ekey ); + + if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 ) + { + sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 10 ); + sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 32, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 ); + sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 12 ); + sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 13 ); + sqcommon = spawnstruct(); + sqcommon.name = "sq_common"; + sqcommon add_buildable_piece( sq_common_electricbox ); + sqcommon add_buildable_piece( sq_common_meteor ); + sqcommon add_buildable_piece( sq_common_scaffolding ); + sqcommon add_buildable_piece( sq_common_transceiver ); + sqcommon.triggerthink = ::sqcommonbuildable; + include_buildable( sqcommon ); + maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); + } } springpadbuildable() { - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 ); + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 ); } slipgunbuildable() { - level thread wait_for_slipgun(); - if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment ) - { - persist = 2; - } - else - { - persist = 1; - } - maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist ); + level thread wait_for_slipgun(); + + if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) ) + persist = 2; + else + persist = 1; + + maps\mp\zombies\_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist ); } keysbuildable() { - pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 ); - pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt; + pod_key = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 ); + pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt; } ekeysbuildable() { - elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 ); - _a143 = elevator_keys; - _k143 = getFirstArrayKey( _a143 ); - while ( isDefined( _k143 ) ) - { - stub = _a143[ _k143 ]; - stub.prompt_and_visibility_func = ::elevator_key_prompt; - stub.buildablezone.stat_name = "keys_zm"; - _k143 = getNextArrayKey( _a143, _k143 ); - } + elevator_keys = maps\mp\zombies\_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 ); + + foreach ( stub in elevator_keys ) + { + stub.prompt_and_visibility_func = ::elevator_key_prompt; + stub.buildablezone.stat_name = "keys_zm"; + } } ondrop_common( player ) { /# - println( "ZM >> Common part callback onDrop()" ); + println( "ZM >> Common part callback onDrop()" ); #/ - self droponelevator( player ); - self.piece_owner = undefined; + self droponelevator( player ); + self.piece_owner = undefined; } onpickup_common( player ) { /# - println( "ZM >> Common part callback onPickup()" ); + println( "ZM >> Common part callback onPickup()" ); #/ - player playsound( "zmb_buildable_pickup" ); - self pickupfromelevator(); - self.piece_owner = player; + player playsound( "zmb_buildable_pickup" ); + self pickupfromelevator(); + self.piece_owner = player; } sqcommonbuildable() { - level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 ); + level.sq_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 ); } onbuyweapon_slipgun( player ) { - player givestartammo( self.stub.weaponname ); - player switchtoweapon( self.stub.weaponname ); - level notify( "slipgun_bought" ); + player givestartammo( self.stub.weaponname ); + player switchtoweapon( self.stub.weaponname ); + level notify( "slipgun_bought", player ); } wait_for_slipgun() { - level.zombie_include_weapons[ "slipgun_zm" ] = 0; - if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment ) - { - level waittill( "slipgun_bought", player ); - level.zombie_include_weapons[ "slipgun_zm" ] = 1; - level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1; - } + level.zombie_include_weapons["slipgun_zm"] = 0; + + if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) ) + { + level waittill( "slipgun_bought", player ); + + level.zombie_include_weapons["slipgun_zm"] = 1; + level.zombie_weapons["slipgun_zm"].is_in_box = 1; + } } keyscreateglint() { - if ( !isDefined( self.model.glint_fx ) ) - { - playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" ); - } + if ( !isdefined( self.model.glint_fx ) ) + playfxontag( level._effect["elevator_glint"], self.model, "tag_origin" ); } onspawn_keys() { - self keyscreateglint(); + self keyscreateglint(); } ondrop_keys( player ) { - self keyscreateglint(); + self keyscreateglint(); } onpickup_keys( player ) { + } escape_pod_key_prompt( player ) { - if ( !flag( "escape_pod_needs_reset" ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return 0; - } - return self buildabletrigger_update_prompt( player ); + if ( !flag( "escape_pod_needs_reset" ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return 0; + } + + return self buildabletrigger_update_prompt( player ); } onuseplantobject_escapepodkey( player ) { - level notify( "reset_escape_pod" ); + level notify( "reset_escape_pod" ); } watch_elevator_prompt( player, trig ) { - player notify( "watch_elevator_prompt" ); - player endon( "watch_elevator_prompt" ); - trig endon( "kill_trigger" ); - while ( 1 ) - { - trig.stub.elevator waittill( "floor_changed" ); - if ( isDefined( self.stub.elevator ) ) - { - if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) ) - { - thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player ); - return; - } - } - } + player notify( "watch_elevator_prompt" ); + player endon( "watch_elevator_prompt" ); + trig endon( "kill_trigger" ); + + while ( true ) + { + trig.stub.elevator waittill( "floor_changed" ); + + if ( isdefined( self.stub.elevator ) ) + { + if ( trig.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) ) + { + thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player ); + return; + } + } + } } elevator_key_prompt( player ) { - if ( !isDefined( self.stub.elevator ) ) - { - elevatorname = self.stub.script_noteworthy; - if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) ) - { - elevator = level.elevators[ elevatorname ]; - floor = int( self.stub.script_parameters ); - flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor ); - self.stub.elevator = elevator; - self.stub.floor = flevel; - } - } + if ( !isdefined( self.stub.elevator ) ) + { + elevatorname = self.stub.script_noteworthy; + + if ( isdefined( elevatorname ) && isdefined( self.stub.script_parameters ) ) + { + elevator = level.elevators[elevatorname]; + floor = int( self.stub.script_parameters ); + flevel = elevator maps\mp\zm_highrise_elevators::elevator_level_for_floor( floor ); + self.stub.elevator = elevator; + self.stub.floor = flevel; + } + } /# - if ( !isDefined( self.stub.elevator ) ) - { - if ( isDefined( self.stub.script_noteworthy ) ) - { - error( "Cannot locate elevator " + self.stub.script_noteworthy ); - } - else - { - error( "Cannot locate elevator " ); - } - } - else - { - color = vectorScale( ( 0, 0, 1 ), 0,7 ); - stop = self.stub.floor; - floor = self.stub.elevator.floors[ "" + stop ].script_location; - text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + ""; - if ( getDvarInt( #"B67910B4" ) ) - { - print3d( self.stub.origin, text, color, 1, 0,5, 300 ); + if ( !isdefined( self.stub.elevator ) ) + { + if ( isdefined( self.stub.script_noteworthy ) ) + error( "Cannot locate elevator " + self.stub.script_noteworthy ); + else + error( "Cannot locate elevator " ); + } + else + { + color = vectorscale( ( 0, 0, 1 ), 0.7 ); + stop = self.stub.floor; + floor = self.stub.elevator.floors["" + stop].script_location; + text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + ""; + + if ( getdvarint( _hash_B67910B4 ) ) + print3d( self.stub.origin, text, color, 1, 0.5, 300 ); + } #/ - } - } - if ( isDefined( self.stub.elevator ) ) - { - if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return 0; - } - } - if ( !flag( "power_on" ) ) - { - self.stub.hint_string = ""; - self sethintstring( self.stub.hint_string ); - return 0; - } - can_use = self buildabletrigger_update_prompt( player ); - if ( can_use ) - { - thread watch_elevator_prompt( player, self ); - } - return can_use; + if ( isdefined( self.stub.elevator ) ) + { + if ( self.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return 0; + } + } + + if ( !flag( "power_on" ) ) + { + self.stub.hint_string = ""; + self sethintstring( self.stub.hint_string ); + return 0; + } + + can_use = self buildabletrigger_update_prompt( player ); + + if ( can_use ) + thread watch_elevator_prompt( player, self ); + + return can_use; } onuseplantobject_elevatorkey( player ) { - elevatorname = self.script_noteworthy; - if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) ) - { - floor = int( self.script_parameters ); - elevator = level.elevators[ elevatorname ]; - if ( isDefined( elevator ) ) - { - elevator.body.force_starting_floor = floor; - elevator.body notify( "forcego" ); - } - } + elevatorname = self.script_noteworthy; + + if ( isdefined( elevatorname ) && isdefined( self.script_parameters ) ) + { + floor = int( self.script_parameters ); + elevator = level.elevators[elevatorname]; + + if ( isdefined( elevator ) ) + { + elevator.body.force_starting_floor = floor; + elevator.body notify( "forcego" ); + } + } } droponelevator( player ) { - if ( isDefined( player ) && isDefined( player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) && player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) - { - self.model linkto( player.elevator_parent ); - self.linked_to_elevator = 1; - self.unitrigger.link_parent = player.elevator_parent; - } - else - { - self.unitrigger.link_parent = undefined; - } + if ( isdefined( player ) && ( isdefined( player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) && player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) ) + { + self.model linkto( player.elevator_parent ); + self.linked_to_elevator = 1; + self.unitrigger.link_parent = player.elevator_parent; + } + else + self.unitrigger.link_parent = undefined; } pickupfromelevator() { - if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator ) - { - if ( isDefined( self.model ) ) - { - self.model unlink(); - } - self.linked_to_elevator = undefined; - } - if ( isDefined( self.unitrigger ) ) - { - self.unitrigger.link_parent = undefined; - } + if ( isdefined( self.linked_to_elevator ) && self.linked_to_elevator ) + { + if ( isdefined( self.model ) ) + self.model unlink(); + + self.linked_to_elevator = undefined; + } + + if ( isdefined( self.unitrigger ) ) + self.unitrigger.link_parent = undefined; } onuseplantobject_slipgun( player ) { /# - println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" ); + println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" ); #/ - buildable = self.buildablezone; - first_part = "TAG_COOKER"; - second_part = "TAG_BASE"; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( buildable.pieces[ i ].part_name == first_part ) - { - if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && player.current_buildable_piece.part_name == first_part ) - { - buildable.stub.model showpart( second_part ); - i++; - continue; - } - else - { - buildable.stub.model hidepart( second_part ); - } - } - i++; - } + buildable = self.buildablezone; + first_part = "TAG_COOKER"; + second_part = "TAG_BASE"; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( buildable.pieces[i].part_name == first_part ) + { + if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || player player_get_buildable_piece().part_name == first_part ) + { + buildable.stub.model showpart( second_part ); + continue; + } + + buildable.stub.model hidepart( second_part ); + } + } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc index dd36682..46a689d 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_classic.gsc @@ -1,1171 +1,1162 @@ -#include maps/mp/zm_highrise_utility; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_ai_leaper; -#include maps/mp/zombies/_zm_magicbox; -#include maps/mp/zm_highrise_elevators; -#include maps/mp/zm_highrise_classic; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zm_highrise_buildables; -#include maps/mp/zombies/_zm_chugabud; -#include maps/mp/gametypes_zm/_hud_util; -#include maps/mp/gametypes_zm/_hud; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -#using_animtree( "zombie_escape_elevator" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_chugabud; +#include maps\mp\zm_highrise_buildables; +#include maps\mp\zm_highrise_sq; +#include maps\mp\zombies\_zm_equip_springpad; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zm_highrise_classic; +#include maps\mp\zm_highrise_elevators; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_ai_leaper; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zm_highrise_utility; precache() { - precacheshader( "overlay_low_health_splat" ); - precacheshellshock( "elevator_crash" ); - maps/mp/zombies/_zm_chugabud::chugabug_precache(); - maps/mp/zm_highrise_buildables::include_buildables(); - maps/mp/zm_highrise_buildables::init_buildables(); - maps/mp/zm_highrise_sq::init(); - maps/mp/zombies/_zm_equip_springpad::init( &"ZM_HIGHRISE_EQUIP_SPRINGPAD_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SPRINGPAD_HOWTO" ); - level._zombiemode_post_respawn_callback = ::highrise_post_respawn_callback; - onplayerconnect_callback( ::highrise_player_connect_callback ); + precacheshader( "overlay_low_health_splat" ); + precacheshellshock( "elevator_crash" ); + maps\mp\zombies\_zm_chugabud::chugabug_precache(); + maps\mp\zm_highrise_buildables::include_buildables(); + maps\mp\zm_highrise_buildables::init_buildables(); + maps\mp\zm_highrise_sq::init(); + maps\mp\zombies\_zm_equip_springpad::init( &"ZM_HIGHRISE_EQUIP_SPRINGPAD_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SPRINGPAD_HOWTO" ); + level._zombiemode_post_respawn_callback = ::highrise_post_respawn_callback; + onplayerconnect_callback( ::highrise_player_connect_callback ); } main() { - level.buildables_built[ "pap" ] = 1; - level.custom_pap_move_in = ::highrise_pap_move_in; - level.custom_pap_move_out = ::highrise_pap_move_out; - flag_init( "perks_ready" ); - maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "rooftop" ); - maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); - level thread maps/mp/zombies/_zm_buildables::think_buildables(); - level.calc_closest_player_using_paths = 1; - level.validate_enemy_path_length = ::highrise_validate_enemy_path_length; - level thread maps/mp/zm_highrise_classic::init_escape_pod(); - level thread maps/mp/zm_highrise_elevators::init_elevators(); - temp_clips = getentarray( "elevator_delete", "targetname" ); - if ( isDefined( temp_clips ) && temp_clips.size > 0 ) - { - array_thread( temp_clips, ::self_delete ); - } - level thread maps/mp/zm_highrise_elevators::init_elevator( "1b" ); - level thread maps/mp/zm_highrise_elevators::init_elevator( "1c", 1 ); - level thread maps/mp/zm_highrise_elevators::init_elevator( "1d" ); - if ( randomint( 100 ) > 50 ) - { - level thread maps/mp/zm_highrise_elevators::init_elevator( "3", 1, -1264 ); - level thread maps/mp/zm_highrise_elevators::init_elevator( "3b", 2 ); - } - else - { - level thread maps/mp/zm_highrise_elevators::init_elevator( "3", 2 ); - level thread maps/mp/zm_highrise_elevators::init_elevator( "3b", 1, -1264 ); - } - level thread maps/mp/zm_highrise_elevators::init_elevator( "3c", 3 ); - level thread maps/mp/zm_highrise_elevators::init_elevator( "3d", 1 ); - flag_wait( "initial_blackscreen_passed" ); - level thread escape_pod(); - level._chugabug_reject_corpse_override_func = ::highrise_chugabud_reject_corpse_func; - level._chugabud_reject_node_override_func = ::highrise_chugabud_reject_node_func; - level._chugabud_post_respawn_override_func = ::highrise_chugabud_post_respawn_func; - level.insta_kill_triggers = getentarray( "instant_death", "targetname" ); - array_thread( level.insta_kill_triggers, ::squashed_death_init, 0 ); - e_trigger = getent( "instant_death_escape_pod_shaft", "targetname" ); - if ( isDefined( e_trigger ) ) - { - e_trigger thread squashed_death_init( 1 ); - e_trigger thread escape_pod_death_trigger_think(); - level.insta_kill_triggers[ level.insta_kill_triggers.size ] = e_trigger; - } - exploder( 9 ); - exploder( 10 ); - flag_wait( "start_zombie_round_logic" ); - level thread maps/mp/zm_highrise_elevators::random_elevator_perks(); - level thread maps/mp/zm_highrise_elevators::faller_location_logic(); - level.custom_faller_entrance_logic = ::maps/mp/zm_highrise_elevators::watch_for_elevator_during_faller_spawn; - setdvar( "zombiemode_path_minz_bias", 13 ); - level.check_valid_poi = ::check_valid_poi; - level thread maps/mp/zm_highrise_elevators::shouldsuppressgibs(); + level.buildables_built["pap"] = 1; + level.custom_pap_move_in = ::highrise_pap_move_in; + level.custom_pap_move_out = ::highrise_pap_move_out; + flag_init( "perks_ready" ); + maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "rooftop" ); + maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index ); + level thread maps\mp\zombies\_zm_buildables::think_buildables(); + level.calc_closest_player_using_paths = 1; + level.validate_enemy_path_length = ::highrise_validate_enemy_path_length; + level thread maps\mp\zm_highrise_classic::init_escape_pod(); + level thread maps\mp\zm_highrise_elevators::init_elevators(); + temp_clips = getentarray( "elevator_delete", "targetname" ); + + if ( isdefined( temp_clips ) && temp_clips.size > 0 ) + array_thread( temp_clips, ::self_delete ); + + elev_bldg3b = getent( "elevator_bldg3b_body", "targetname" ); + elev_bldg3b.origin += vectorscale( ( 0, 0, 1 ), 8.0 ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "1b" ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "1c", 1 ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "1d" ); + + if ( randomint( 100 ) > 50 ) + { + level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 1, -1264 ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 2 ); + } + else + { + level thread maps\mp\zm_highrise_elevators::init_elevator( "3", 2 ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "3b", 1, -1264 ); + } + + level thread maps\mp\zm_highrise_elevators::init_elevator( "3c", 3 ); + level thread maps\mp\zm_highrise_elevators::init_elevator( "3d", 1 ); + flag_wait( "initial_blackscreen_passed" ); + level thread escape_pod(); + level._chugabug_reject_corpse_override_func = ::highrise_chugabud_reject_corpse_func; + level._chugabud_reject_node_override_func = ::highrise_chugabud_reject_node_func; + level._chugabud_post_respawn_override_func = ::highrise_chugabud_post_respawn_func; + level.insta_kill_triggers = getentarray( "instant_death", "targetname" ); + array_thread( level.insta_kill_triggers, ::squashed_death_init, 0 ); + e_trigger = getent( "instant_death_escape_pod_shaft", "targetname" ); + + if ( isdefined( e_trigger ) ) + { + e_trigger thread squashed_death_init( 1 ); + e_trigger thread escape_pod_death_trigger_think(); + level.insta_kill_triggers[level.insta_kill_triggers.size] = e_trigger; + } + + exploder( 9 ); + exploder( 10 ); + flag_wait( "start_zombie_round_logic" ); + level thread maps\mp\zm_highrise_elevators::random_elevator_perks(); + level thread maps\mp\zm_highrise_elevators::faller_location_logic(); + level.custom_faller_entrance_logic = maps\mp\zm_highrise_elevators::watch_for_elevator_during_faller_spawn; + setdvar( "zombiemode_path_minz_bias", 13 ); + level.check_valid_poi = ::check_valid_poi; + level thread maps\mp\zm_highrise_elevators::shouldsuppressgibs(); } highrise_validate_enemy_path_length( player ) { - max_dist = 1296; - d = distancesquared( self.origin, player.origin ); - if ( d <= max_dist ) - { - return 1; - } - return 0; + max_dist = 1296; + d = distancesquared( self.origin, player.origin ); + + if ( d <= max_dist ) + return true; + + return false; } highrise_player_connect_callback() { - self setperk( "specialty_fastmantle" ); - self thread end_game_turn_off_whoswho(); + self setperk( "specialty_fastmantle" ); + self thread end_game_turn_off_whoswho(); } end_game_turn_off_whoswho() { - self endon( "disconnect" ); - level waittill( "end_game" ); - self thread turn_off_whoswho(); + self endon( "disconnect" ); + + level waittill( "end_game" ); + + self thread turn_off_whoswho(); } highrise_post_respawn_callback() { - self setperk( "specialty_fastmantle" ); - self thread turn_off_whoswho(); + self setperk( "specialty_fastmantle" ); + self thread turn_off_whoswho(); } turn_off_whoswho() { - self endon( "disconnect" ); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); - wait_network_frame(); - wait_network_frame(); - self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); + self endon( "disconnect" ); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 1 ); + wait_network_frame(); + wait_network_frame(); + self setclientfieldtoplayer( "clientfield_whos_who_filter", 0 ); } highrise_pap_move_in( trigger, origin_offset, angles_offset ) { - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - pap_machine = trigger.perk_machine; - worldgun = trigger.worldgun; - worldgundw = trigger.worldgun.worldgundw; - offset = origin_offset[ 2 ]; - trigger.worldgun rotateto( self.angles + angles_offset + vectorScale( ( 0, 0, 1 ), 90 ), 0,35, 0, 0 ); - offsetdw = vectorScale( ( 0, 0, 1 ), 3 ); - if ( isDefined( trigger.worldgun.worldgundw ) ) - { - worldgundw rotateto( self.angles + angles_offset + vectorScale( ( 0, 0, 1 ), 90 ), 0,35, 0, 0 ); - } - wait 0,5; - move_vec = ( ( ( self.origin + origin_offset ) - worldgun.origin ) * 0,05 ) / 0,5; - elapsed_time_counter = 0; - while ( isDefined( worldgun ) && elapsed_time_counter < 0,5 ) - { - worldgun.origin = ( worldgun.origin[ 0 ] + move_vec[ 0 ], worldgun.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset ); - if ( isDefined( worldgundw ) ) - { - worldgundw.origin = ( worldgundw.origin[ 0 ] + move_vec[ 0 ], worldgundw.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset + offsetdw[ 2 ] ); - } - elapsed_time_counter += 0,05; - wait 0,05; - } + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + pap_machine = trigger.perk_machine; + worldgun = trigger.worldgun; + worldgundw = trigger.worldgun.worldgundw; + offset = origin_offset[2]; + trigger.worldgun rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + + if ( isdefined( trigger.worldgun.worldgundw ) ) + worldgundw rotateto( self.angles + angles_offset + vectorscale( ( 0, 1, 0 ), 90.0 ), 0.35, 0, 0 ); + + wait 0.5; + move_vec = ( self.origin + origin_offset - worldgun.origin ) * 0.05 / 0.5; + elapsed_time_counter = 0; + + while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 ) + { + worldgun.origin = ( worldgun.origin[0] + move_vec[0], worldgun.origin[1] + move_vec[1], pap_machine.origin[2] + offset ); + + if ( isdefined( worldgundw ) ) + worldgundw.origin = ( worldgundw.origin[0] + move_vec[0], worldgundw.origin[1] + move_vec[1], pap_machine.origin[2] + offset + offsetdw[2] ); + + elapsed_time_counter += 0.05; + wait 0.05; + } } highrise_pap_move_out( trigger, origin_offset, interact_offset ) { - level endon( "Pack_A_Punch_off" ); - trigger endon( "pap_player_disconnected" ); - pap_machine = trigger.perk_machine; - worldgun = trigger.worldgun; - worldgundw = trigger.worldgun.worldgundw; - offset = origin_offset[ 2 ]; - offsetdw = vectorScale( ( 0, 0, 1 ), 3 ); - move_vec = ( ( interact_offset - origin_offset ) * 0,05 ) / 0,5; - elapsed_time_counter = 0; - while ( isDefined( worldgun ) && elapsed_time_counter < 0,5 ) - { - worldgun.origin = ( worldgun.origin[ 0 ] + move_vec[ 0 ], worldgun.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset ); - if ( isDefined( worldgundw ) ) - { - worldgundw.origin = ( worldgundw.origin[ 0 ] + move_vec[ 0 ], worldgundw.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset + offsetdw[ 2 ] ); - } - elapsed_time_counter += 0,05; - wait 0,05; - } - move_vec = ( ( origin_offset - interact_offset ) * 0,05 ) / level.packapunch_timeout; - elapsed_time_counter = 0; - while ( isDefined( worldgun ) && elapsed_time_counter < level.packapunch_timeout ) - { - worldgun.origin = ( worldgun.origin[ 0 ] + move_vec[ 0 ], worldgun.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset ); - if ( isDefined( worldgundw ) ) - { - worldgundw.origin = ( worldgundw.origin[ 0 ] + move_vec[ 0 ], worldgundw.origin[ 1 ] + move_vec[ 1 ], pap_machine.origin[ 2 ] + offset + offsetdw[ 2 ] ); - } - elapsed_time_counter += 0,05; - wait 0,05; - } + level endon( "Pack_A_Punch_off" ); + trigger endon( "pap_player_disconnected" ); + pap_machine = trigger.perk_machine; + worldgun = trigger.worldgun; + worldgundw = trigger.worldgun.worldgundw; + offset = origin_offset[2]; + offsetdw = vectorscale( ( 1, 1, 1 ), 3.0 ); + move_vec = ( interact_offset - origin_offset ) * 0.05 / 0.5; + elapsed_time_counter = 0; + + while ( isdefined( worldgun ) && elapsed_time_counter < 0.5 ) + { + worldgun.origin = ( worldgun.origin[0] + move_vec[0], worldgun.origin[1] + move_vec[1], pap_machine.origin[2] + offset ); + + if ( isdefined( worldgundw ) ) + worldgundw.origin = ( worldgundw.origin[0] + move_vec[0], worldgundw.origin[1] + move_vec[1], pap_machine.origin[2] + offset + offsetdw[2] ); + + elapsed_time_counter += 0.05; + wait 0.05; + } + + move_vec = ( origin_offset - interact_offset ) * 0.05 / level.packapunch_timeout; + elapsed_time_counter = 0; + + while ( isdefined( worldgun ) && elapsed_time_counter < level.packapunch_timeout ) + { + worldgun.origin = ( worldgun.origin[0] + move_vec[0], worldgun.origin[1] + move_vec[1], pap_machine.origin[2] + offset ); + + if ( isdefined( worldgundw ) ) + worldgundw.origin = ( worldgundw.origin[0] + move_vec[0], worldgundw.origin[1] + move_vec[1], pap_machine.origin[2] + offset + offsetdw[2] ); + + elapsed_time_counter += 0.05; + wait 0.05; + } } escape_pod_death_trigger_think() { - self endon( "death" ); - while ( 1 ) - { - level waittill( "escape_pod_falling_begin" ); - self trigger_off(); - level waittill( "escape_pod_falling_complete" ); - self trigger_on(); - level waittill( "escape_pod_moving_back_to_start_position" ); - self trigger_off(); - level waittill( "escape_pod_returns_to_start_location" ); - self trigger_on(); - } + self endon( "death" ); + + while ( true ) + { + level waittill( "escape_pod_falling_begin" ); + + self trigger_off(); + + level waittill( "escape_pod_falling_complete" ); + + self trigger_on(); + + level waittill( "escape_pod_moving_back_to_start_position" ); + + self trigger_off(); + + level waittill( "escape_pod_returns_to_start_location" ); + + self trigger_on(); + } } zm_treasure_chest_init() { - chest1 = getstruct( "start_chest", "script_noteworthy" ); - level.chests = []; - level.chests[ level.chests.size ] = chest1; - maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); + chest1 = getstruct( "start_chest", "script_noteworthy" ); + level.chests = []; + level.chests[level.chests.size] = chest1; + maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" ); } squashed_death_init( kill_if_falling ) { - while ( 1 ) - { - self waittill( "trigger", who ); - if ( isDefined( who.insta_killed ) && !who.insta_killed ) - { - if ( isplayer( who ) ) - { - who thread elevator_black_screen_squash_check(); - who thread insta_kill_player( 1, kill_if_falling ); - break; - } - else if ( isai( who ) ) - { - while ( is_true( who.in_the_ceiling ) ) - { - continue; - } - who dodamage( who.health + 100, who.origin ); - who.insta_killed = 1; - if ( isDefined( who.has_been_damaged_by_player ) && !who.has_been_damaged_by_player ) - { - if ( isDefined( who.is_leaper ) && who.is_leaper ) - { - who thread maps/mp/zombies/_zm_ai_leaper::leaper_cleanup(); - break; - } - else - { - level.zombie_total++; - } - } - } - } - } + while ( true ) + { + self waittill( "trigger", who ); + + if ( !( isdefined( who.insta_killed ) && who.insta_killed ) ) + { + if ( isplayer( who ) ) + { + who thread elevator_black_screen_squash_check(); + who thread insta_kill_player( 1, kill_if_falling ); + } + else if ( isai( who ) ) + { + if ( is_true( who.in_the_ceiling ) ) + continue; + + who dodamage( who.health + 100, who.origin ); + who.insta_killed = 1; + + if ( !( isdefined( who.has_been_damaged_by_player ) && who.has_been_damaged_by_player ) ) + { + if ( isdefined( who.is_leaper ) && who.is_leaper ) + who thread maps\mp\zombies\_zm_ai_leaper::leaper_cleanup(); + else + level.zombie_total++; + } + } + } + } } elevator_black_screen_squash_check() { - if ( !self hasperk( "specialty_finalstand" ) ) - { - return; - } - while ( isDefined( level.elevators ) ) - { - _a385 = level.elevators; - _k385 = getFirstArrayKey( _a385 ); - while ( isDefined( _k385 ) ) - { - elevator = _a385[ _k385 ]; - if ( isDefined( elevator.body.trig ) ) - { - if ( self istouching( elevator.body.trig ) ) - { - if ( isDefined( self.fade_to_black_time ) ) - { - time = getTime(); - dt = ( time - self.fade_to_black_time ) / 1000; - if ( abs( dt ) < 10 ) - { - return; - } - } - start_wait = 0; - black_screen_wait = 3,8; - fade_in_time = 0,2; - fade_out_time = 0,01; - self thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time ); - self.fade_to_black_time = getTime(); - return 1; - } - } - _k385 = getNextArrayKey( _a385, _k385 ); - } - } + if ( !self hasperk( "specialty_finalstand" ) ) + return; + + if ( isdefined( level.elevators ) ) + { + foreach ( elevator in level.elevators ) + { + if ( isdefined( elevator.body.trig ) ) + { + if ( self istouching( elevator.body.trig ) ) + { + if ( isdefined( self.fade_to_black_time ) ) + { + time = gettime(); + dt = ( time - self.fade_to_black_time ) / 1000; + + if ( abs( dt ) < 10 ) + return; + } + + start_wait = 0.0; + black_screen_wait = 3.8; + fade_in_time = 0.2; + fade_out_time = 0.01; + self thread fadetoblackforxsec( start_wait, black_screen_wait, fade_in_time, fade_out_time ); + self.fade_to_black_time = gettime(); + return 1; + } + } + } + } } insta_kill_player( perks_can_respawn_player, kill_if_falling ) { - self endon( "disconnect" ); - if ( isDefined( perks_can_respawn_player ) && perks_can_respawn_player == 0 ) - { - if ( self hasperk( "specialty_quickrevive" ) ) - { - self unsetperk( "specialty_quickrevive" ); - } - if ( self hasperk( "specialty_finalstand" ) ) - { - self unsetperk( "specialty_finalstand" ); - } - } - self maps/mp/zombies/_zm_buildables::player_return_piece_to_original_spawn(); - if ( isDefined( self.insta_killed ) && self.insta_killed ) - { - return; - } - if ( isDefined( self.ignore_insta_kill ) ) - { - self.disable_chugabud_corpse = 1; - return; - } - if ( self hasperk( "specialty_finalstand" ) ) - { - self.ignore_insta_kill = 1; - self.disable_chugabud_corpse = 1; - self dodamage( self.health + 1000, ( 0, 0, 1 ) ); - return; - } - if ( !isDefined( kill_if_falling ) || kill_if_falling == 0 ) - { - if ( !self isonground() ) - { - return; - } - } - if ( is_player_killable( self ) ) - { - self.insta_killed = 1; - in_last_stand = 0; - self notify( "chugabud_effects_cleanup" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - in_last_stand = 1; - } - self thread blood_splat(); - if ( getnumconnectedplayers() == 1 ) - { - if ( isDefined( self.lives ) && self.lives > 0 ) - { - self.waiting_to_revive = 1; - points = getstruct( "zone_green_start", "script_noteworthy" ); - spawn_points = getstructarray( points.target, "targetname" ); - point = spawn_points[ 0 ]; - if ( in_last_stand == 0 ) - { - self dodamage( self.health + 1000, ( 0, 0, 1 ) ); - } - wait 0,5; - self freezecontrols( 1 ); - wait 0,25; - self setorigin( point.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); - self.angles = point.angles; - if ( in_last_stand ) - { - flag_set( "instant_revive" ); - self.stopflashingbadlytime = getTime() + 1000; - wait_network_frame(); - flag_clear( "instant_revive" ); - } - else - { - self thread maps/mp/zombies/_zm_laststand::auto_revive( self ); - self.waiting_to_revive = 0; - self.solo_respawn = 0; - self.lives = 0; - } - self freezecontrols( 0 ); - self.insta_killed = 0; - } - else - { - self dodamage( self.health + 1000, ( 0, 0, 1 ) ); - } - } - else - { - self dodamage( self.health + 1000, ( 0, 0, 1 ) ); - wait_network_frame(); - self.bleedout_time = 0; - } - self.insta_killed = 0; - } + self endon( "disconnect" ); + + if ( isdefined( perks_can_respawn_player ) && perks_can_respawn_player == 0 ) + { + if ( self hasperk( "specialty_quickrevive" ) ) + self unsetperk( "specialty_quickrevive" ); + + if ( self hasperk( "specialty_finalstand" ) ) + self unsetperk( "specialty_finalstand" ); + } + + self maps\mp\zombies\_zm_buildables::player_return_piece_to_original_spawn(); + + if ( isdefined( self.insta_killed ) && self.insta_killed ) + return; + + if ( isdefined( self.ignore_insta_kill ) ) + { + self.disable_chugabud_corpse = 1; + return; + } + + if ( self hasperk( "specialty_finalstand" ) ) + { + self.ignore_insta_kill = 1; + self.disable_chugabud_corpse = 1; + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + return; + } + + if ( !isdefined( kill_if_falling ) || kill_if_falling == 0 ) + { + if ( !self isonground() ) + return; + } + + if ( is_player_killable( self ) ) + { + self.insta_killed = 1; + in_last_stand = 0; + self notify( "chugabud_effects_cleanup" ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + in_last_stand = 1; + + self thread blood_splat(); + + if ( getnumconnectedplayers() == 1 ) + { + if ( isdefined( self.lives ) && self.lives > 0 ) + { + self.waiting_to_revive = 1; + points = getstruct( "zone_green_start", "script_noteworthy" ); + spawn_points = getstructarray( points.target, "targetname" ); + point = spawn_points[0]; + + if ( in_last_stand == 0 ) + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + + wait 0.5; + self freezecontrols( 1 ); + wait 0.25; + self setorigin( point.origin + vectorscale( ( 0, 0, 1 ), 20.0 ) ); + self.angles = point.angles; + + if ( in_last_stand ) + { + flag_set( "instant_revive" ); + self.stopflashingbadlytime = gettime() + 1000; + wait_network_frame(); + flag_clear( "instant_revive" ); + } + else + { + self thread maps\mp\zombies\_zm_laststand::auto_revive( self ); + self.waiting_to_revive = 0; + self.solo_respawn = 0; + self.lives = 0; + } + + self freezecontrols( 0 ); + self.insta_killed = 0; + } + else + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + } + else + { + self dodamage( self.health + 1000, ( 0, 0, 0 ) ); + wait_network_frame(); + self.bleedout_time = 0; + } + + self.insta_killed = 0; + } } highrise_chugabud_reject_corpse_func( v_corpse_position ) { - reject = 0; - if ( isDefined( level.elevator_volumes ) ) - { - scr_org = spawn( "script_origin", v_corpse_position ); - _a563 = level.elevator_volumes; - _k563 = getFirstArrayKey( _a563 ); - while ( isDefined( _k563 ) ) - { - volume = _a563[ _k563 ]; - if ( scr_org istouching( volume ) ) - { - reject = 1; - break; - } - else - { - _k563 = getNextArrayKey( _a563, _k563 ); - } - } - scr_org delete(); - } - return reject; + reject = 0; + + if ( isdefined( level.elevator_volumes ) ) + { + scr_org = spawn( "script_origin", v_corpse_position ); + + foreach ( volume in level.elevator_volumes ) + { + if ( scr_org istouching( volume ) ) + { + reject = 1; + break; + } + } + + scr_org delete(); + } + + return reject; } highrise_chugabud_reject_node_func( v_corpse_pos, nd_node ) { - reject = 0; - skip_elevator_volume_check = 0; - scr_org = spawn( "script_origin", nd_node.origin ); - player_zone = maps/mp/zombies/_zm_zonemgr::get_player_zone(); - if ( isDefined( player_zone ) ) - { - if ( player_zone == "zone_orange_elevator_shaft_middle_1" || player_zone == "zone_orange_elevator_shaft_middle_2" ) - { - skip_elevator_volume_check = 1; - } - } - if ( !isDefined( level.chugabud_info_volume1 ) ) - { - level.chugabud_info_volume1 = getent( "zone_orange_level1_whos_who_info_volume", "targetname" ); - } - scr_org.origin = v_corpse_pos; - if ( scr_org istouching( level.chugabud_info_volume1 ) ) - { - scr_org.origin = nd_node.origin; - if ( !scr_org istouching( level.chugabud_info_volume1 ) ) - { - reject = 1; - } - } - if ( !reject ) - { - if ( !isDefined( level.chugabud_info_volume2 ) ) - { - level.chugabud_info_volume2 = getent( "whos_who_slide_info_volume", "targetname" ); - } - scr_org.origin = v_corpse_pos; - if ( scr_org istouching( level.chugabud_info_volume2 ) ) - { - n_node_corpse = getnode( "whos_who_slide_corpse_respawn_position", "targetname" ); - maps/mp/zombies/_zm_chugabud::force_corpse_respawn_position( n_node_corpse.origin ); - } - } - while ( !reject ) - { - while ( !skip_elevator_volume_check ) - { - scr_org.origin = nd_node.origin; - while ( isDefined( level.elevator_volumes ) ) - { - _a665 = level.elevator_volumes; - _k665 = getFirstArrayKey( _a665 ); - while ( isDefined( _k665 ) ) - { - volume = _a665[ _k665 ]; - if ( scr_org istouching( volume ) ) - { - reject = 1; - break; - } - else - { - _k665 = getNextArrayKey( _a665, _k665 ); - } - } - } - } - } - scr_org delete(); - return reject; + reject = 0; + skip_elevator_volume_check = 0; + scr_org = spawn( "script_origin", nd_node.origin ); + player_zone = maps\mp\zombies\_zm_zonemgr::get_player_zone(); + + if ( isdefined( player_zone ) ) + { + if ( player_zone == "zone_orange_elevator_shaft_middle_1" || player_zone == "zone_orange_elevator_shaft_middle_2" ) + skip_elevator_volume_check = 1; + } + + if ( !isdefined( level.chugabud_info_volume1 ) ) + level.chugabud_info_volume1 = getent( "zone_orange_level1_whos_who_info_volume", "targetname" ); + + scr_org.origin = v_corpse_pos; + + if ( scr_org istouching( level.chugabud_info_volume1 ) ) + { + scr_org.origin = nd_node.origin; + + if ( !scr_org istouching( level.chugabud_info_volume1 ) ) + reject = 1; + } + + if ( !reject ) + { + if ( !isdefined( level.chugabud_info_volume2 ) ) + level.chugabud_info_volume2 = getent( "whos_who_slide_info_volume", "targetname" ); + + scr_org.origin = v_corpse_pos; + + if ( scr_org istouching( level.chugabud_info_volume2 ) ) + { + n_node_corpse = getnode( "whos_who_slide_corpse_respawn_position", "targetname" ); + maps\mp\zombies\_zm_chugabud::force_corpse_respawn_position( n_node_corpse.origin ); + } + } + + if ( !reject ) + { + if ( !skip_elevator_volume_check ) + { + scr_org.origin = nd_node.origin; + + if ( isdefined( level.elevator_volumes ) ) + { + foreach ( volume in level.elevator_volumes ) + { + if ( scr_org istouching( volume ) ) + { + reject = 1; + break; + } + } + } + } + } + + scr_org delete(); + return reject; } highrise_chugabud_post_respawn_func( v_new_player_position ) { - scr_org = spawn( "script_origin", v_new_player_position ); - e_corpse = self.e_chugabud_corpse; - if ( isDefined( e_corpse ) ) - { - corpse_zone = maps/mp/zombies/_zm_zonemgr::get_zone_from_position( e_corpse.origin ); - if ( isDefined( corpse_zone ) || corpse_zone == "zone_orange_elevator_shaft_middle_2" && corpse_zone == "zone_orange_elevator_shaft_middle_1" ) - { - if ( !isDefined( level.elevator_shaft_middle_2_respawn_nodes ) ) - { - level.elevator_shaft_middle_2_respawn_nodes = getnodearray( "orange_elevator_middle_2_player_respawn_loc", "targetname" ); - level.elevator_shaft_middle_2_respawn_nodes_index = 0; - } - nd_node = level.elevator_shaft_middle_2_respawn_nodes[ level.elevator_shaft_middle_2_respawn_nodes_index ]; - level.elevator_shaft_middle_2_respawn_nodes_index++; - if ( level.elevator_shaft_middle_2_respawn_nodes_index >= level.elevator_shaft_middle_2_respawn_nodes.size ) - { - level.elevator_shaft_middle_2_respawn_nodes_index = 0; - } - maps/mp/zombies/_zm_chugabud::force_player_respawn_position( nd_node.origin ); - } - } - e_corpse = self.e_chugabud_corpse; - if ( isDefined( e_corpse ) ) - { - a_escape_pod_ents = []; - a_escape_pod_ents[ a_escape_pod_ents.size ] = getent( "escape_pod_trigger", "targetname" ); - a_escape_pod_ents[ a_escape_pod_ents.size ] = getent( "zone_green_escape_pod", "targetname" ); - scr_org.origin = e_corpse.origin; - touching = 0; - i = 0; - while ( i < a_escape_pod_ents.size ) - { - e_ent = a_escape_pod_ents[ i ]; - if ( scr_org istouching( e_ent ) ) - { - touching = 1; - break; - } - else - { - i++; - } - } - if ( touching ) - { - scr_org.origin = v_new_player_position; - touching = 0; - i = 0; - while ( i < a_escape_pod_ents.size ) - { - e_ent = a_escape_pod_ents[ i ]; - if ( scr_org istouching( e_ent ) ) - { - touching = 1; - break; - } - else - { - i++; - } - } - if ( !touching ) - { - if ( v_new_player_position[ 2 ] > 3300 ) - { - if ( !isDefined( level.escape_pod_corpse_respawn_nodes ) ) - { - level.escape_pod_corpse_respawn_nodes = getnodearray( "escape_pod_corpse_respawn_loc", "targetname" ); - level.escape_pod_corpse_respawn_node_index = 0; - } - nd_node = level.escape_pod_corpse_respawn_nodes[ level.escape_pod_corpse_respawn_node_index ]; - level.escape_pod_corpse_respawn_node_index++; - if ( level.escape_pod_corpse_respawn_node_index >= level.escape_pod_corpse_respawn_nodes.size ) - { - level.escape_pod_corpse_respawn_node_index = 0; - } - maps/mp/zombies/_zm_chugabud::force_corpse_respawn_position( nd_node.origin ); - if ( isDefined( self.riding_escape_pod ) ) - { - self.riding_escape_pod = undefined; - } - } - } - } - } - scr_org delete(); + scr_org = spawn( "script_origin", v_new_player_position ); + e_corpse = self.e_chugabud_corpse; + + if ( isdefined( e_corpse ) ) + { + corpse_zone = maps\mp\zombies\_zm_zonemgr::get_zone_from_position( e_corpse.origin ); + + if ( isdefined( corpse_zone ) && ( corpse_zone == "zone_orange_elevator_shaft_middle_2" || corpse_zone == "zone_orange_elevator_shaft_middle_1" ) ) + { + if ( !isdefined( level.elevator_shaft_middle_2_respawn_nodes ) ) + { + level.elevator_shaft_middle_2_respawn_nodes = getnodearray( "orange_elevator_middle_2_player_respawn_loc", "targetname" ); + level.elevator_shaft_middle_2_respawn_nodes_index = 0; + } + + nd_node = level.elevator_shaft_middle_2_respawn_nodes[level.elevator_shaft_middle_2_respawn_nodes_index]; + level.elevator_shaft_middle_2_respawn_nodes_index++; + + if ( level.elevator_shaft_middle_2_respawn_nodes_index >= level.elevator_shaft_middle_2_respawn_nodes.size ) + level.elevator_shaft_middle_2_respawn_nodes_index = 0; + + maps\mp\zombies\_zm_chugabud::force_player_respawn_position( nd_node.origin ); + } + } + + e_corpse = self.e_chugabud_corpse; + + if ( isdefined( e_corpse ) ) + { + a_escape_pod_ents = []; + a_escape_pod_ents[a_escape_pod_ents.size] = getent( "escape_pod_trigger", "targetname" ); + a_escape_pod_ents[a_escape_pod_ents.size] = getent( "zone_green_escape_pod", "targetname" ); + scr_org.origin = e_corpse.origin; + touching = 0; + + for ( i = 0; i < a_escape_pod_ents.size; i++ ) + { + e_ent = a_escape_pod_ents[i]; + + if ( scr_org istouching( e_ent ) ) + { + touching = 1; + break; + } + } + + if ( touching ) + { + scr_org.origin = v_new_player_position; + touching = 0; + + for ( i = 0; i < a_escape_pod_ents.size; i++ ) + { + e_ent = a_escape_pod_ents[i]; + + if ( scr_org istouching( e_ent ) ) + { + touching = 1; + break; + } + } + + if ( !touching ) + { + if ( v_new_player_position[2] > 3300 ) + { + if ( !isdefined( level.escape_pod_corpse_respawn_nodes ) ) + { + level.escape_pod_corpse_respawn_nodes = getnodearray( "escape_pod_corpse_respawn_loc", "targetname" ); + level.escape_pod_corpse_respawn_node_index = 0; + } + + nd_node = level.escape_pod_corpse_respawn_nodes[level.escape_pod_corpse_respawn_node_index]; + level.escape_pod_corpse_respawn_node_index++; + + if ( level.escape_pod_corpse_respawn_node_index >= level.escape_pod_corpse_respawn_nodes.size ) + level.escape_pod_corpse_respawn_node_index = 0; + + maps\mp\zombies\_zm_chugabud::force_corpse_respawn_position( nd_node.origin ); + + if ( isdefined( self.riding_escape_pod ) ) + self.riding_escape_pod = undefined; + } + } + } + } + + scr_org delete(); } blood_splat() { - earthquake( 0,3, 3, self.origin, 128 ); - if ( isDefined( self.blood_splats_overlay ) ) - { - return; - } - self.blood_splats_overlay = newclienthudelem( self ); - self.blood_splats_overlay setshader( "overlay_low_health_splat", 640, 480 ); - self.blood_splats_overlay.x = 0; - self.blood_splats_overlay.y = 0; - self.blood_splats_overlay.splatter = 1; - self.blood_splats_overlay.alignx = "left"; - self.blood_splats_overlay.aligny = "top"; - self.blood_splats_overlay.sort = 1; - self.blood_splats_overlay.foreground = 0; - self.blood_splats_overlay.horzalign = "fullscreen"; - self.blood_splats_overlay.vertalign = "fullscreen"; - self.blood_splats_overlay.alpha = 1; - wait 3; - self.blood_splats_overlay fadeovertime( 1 ); - self.blood_splats_overlay.alpha = 0; - wait 1; - self.blood_splats_overlay destroy(); + earthquake( 0.3, 3, self.origin, 128 ); + + if ( isdefined( self.blood_splats_overlay ) ) + return; + + self.blood_splats_overlay = newclienthudelem( self ); + self.blood_splats_overlay setshader( "overlay_low_health_splat", 640, 480 ); + self.blood_splats_overlay.x = 0; + self.blood_splats_overlay.y = 0; + self.blood_splats_overlay.splatter = 1; + self.blood_splats_overlay.alignx = "left"; + self.blood_splats_overlay.aligny = "top"; + self.blood_splats_overlay.sort = 1; + self.blood_splats_overlay.foreground = 0; + self.blood_splats_overlay.horzalign = "fullscreen"; + self.blood_splats_overlay.vertalign = "fullscreen"; + self.blood_splats_overlay.alpha = 1; + wait 3; + self.blood_splats_overlay fadeovertime( 1 ); + self.blood_splats_overlay.alpha = 0; + wait 1; + self.blood_splats_overlay destroy(); } is_player_killable( player, checkignoremeflag ) { - if ( !isDefined( player ) ) - { - return 0; - } - if ( !isalive( player ) ) - { - return 0; - } - if ( !isplayer( player ) ) - { - return 0; - } - if ( player.sessionstate == "spectator" ) - { - return 0; - } - if ( player.sessionstate == "intermission" ) - { - return 0; - } - if ( isDefined( self.intermission ) && self.intermission ) - { - return 0; - } - if ( isDefined( checkignoremeflag ) && player.ignoreme ) - { - return 0; - } - return 1; + if ( !isdefined( player ) ) + return false; + + if ( !isalive( player ) ) + return false; + + if ( !isplayer( player ) ) + return false; + + if ( player.sessionstate == "spectator" ) + return false; + + if ( player.sessionstate == "intermission" ) + return false; + + if ( isdefined( self.intermission ) && self.intermission ) + return false; + + if ( isdefined( checkignoremeflag ) && player.ignoreme ) + return false; + + return true; } init_escape_elevators_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } escapeelevatoruseanimtree() { - self useanimtree( -1 ); + self useanimtree( -1 ); } init_escape_pod() { - flag_init( "escape_pod_needs_reset" ); - level thread init_escape_elevators_anims(); + flag_init( "escape_pod_needs_reset" ); + level thread init_escape_elevators_anims(); /# - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Escape Pod:2/Reset To Top:1" "set zombie_devgui_hrescapepodreset 1" \n" ); - level thread watch_escapepod_devgui(); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Escape Pod:2/Reset To Top:1\" \"set zombie_devgui_hrescapepodreset 1\" \n" ); + level thread watch_escapepod_devgui(); #/ } +#using_animtree("zombie_escape_elevator"); + init_escape_elevators_anims() { - level.escape_elevator_1_state = %v_zombie_elevator_escape_player1_loop; - level.escape_elevator_2_state = %v_zombie_elevator_escape_player2_loop; - level.escape_elevator_3_state = %v_zombie_elevator_escape_player3_loop; - level.escape_elevator_4_state = %v_zombie_elevator_escape_player4_loop; - level.escape_elevator_5_state = %v_zombie_elevator_escape_player4_cablebreak; - level.escape_elevator_prestine_idle_state = %fxanim_zm_highrise_elevator_prestine_idle_anim; - level.escape_elevator_prestine_drop_state = %fxanim_zm_highrise_elevator_prestine_drop_anim; - level.escape_elevator_prestine_impact_state = %fxanim_zm_highrise_elevator_prestine_impact_anim; - level.escape_elevator_damage_idle_state = %fxanim_zm_highrise_elevator_damage_idle_anim; - level.escape_elevator_damage_drop_state = %fxanim_zm_highrise_elevator_damage_drop_anim; - level.escape_elevator_damage_impact_state = %fxanim_zm_highrise_elevator_damage_impact_anim; - level.escape_elevator_idle = level.escape_elevator_prestine_idle_state; - level.escape_elevator_drop = level.escape_elevator_prestine_drop_state; - level.escape_elevator_impact = level.escape_elevator_prestine_impact_state; + level.escape_elevator_1_state = %v_zombie_elevator_escape_player1_loop; + level.escape_elevator_2_state = %v_zombie_elevator_escape_player2_loop; + level.escape_elevator_3_state = %v_zombie_elevator_escape_player3_loop; + level.escape_elevator_4_state = %v_zombie_elevator_escape_player4_loop; + level.escape_elevator_5_state = %v_zombie_elevator_escape_player4_cablebreak; + level.escape_elevator_prestine_idle_state = %fxanim_zm_highrise_elevator_prestine_idle_anim; + level.escape_elevator_prestine_drop_state = %fxanim_zm_highrise_elevator_prestine_drop_anim; + level.escape_elevator_prestine_impact_state = %fxanim_zm_highrise_elevator_prestine_impact_anim; + level.escape_elevator_damage_idle_state = %fxanim_zm_highrise_elevator_damage_idle_anim; + level.escape_elevator_damage_drop_state = %fxanim_zm_highrise_elevator_damage_drop_anim; + level.escape_elevator_damage_impact_state = %fxanim_zm_highrise_elevator_damage_impact_anim; + level.escape_elevator_idle = level.escape_elevator_prestine_idle_state; + level.escape_elevator_drop = level.escape_elevator_prestine_drop_state; + level.escape_elevator_impact = level.escape_elevator_prestine_impact_state; } escape_pod() { - escape_pod = getent( "elevator_bldg1a_body", "targetname" ); - escape_pod setmovingplatformenabled( 1 ); - escape_pod escapeelevatoruseanimtree(); - escape_pod_trigger = getent( "escape_pod_trigger", "targetname" ); - escape_pod.is_elevator = 1; - escape_pod._post_host_migration_thread = ::maps/mp/zm_highrise_elevators::escape_pod_host_migration_respawn_check; - if ( !isDefined( escape_pod_trigger ) ) - { - return; - } - escape_pod.home_origin = escape_pod.origin; - escape_pod.link_start = []; - escape_pod.link_end = []; - escape_pod_blocker_door = getent( "elevator_bldg1a_body_door_clip", "targetname" ); - number_of_times_used = 0; - used_at_least_once = 0; - escape_pod setanim( level.escape_elevator_1_state ); - escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); - escape_pod_trigger thread escape_pod_walk_on_off( escape_pod ); - while ( 1 ) - { - escape_pod setanim( level.escape_elevator_idle ); - flag_clear( "escape_pod_needs_reset" ); - if ( isDefined( escape_pod_blocker_door ) ) - { - escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); - escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); - escape_pod_blocker_door unlink(); - escape_pod_blocker_door thread trigger_off(); - } - if ( is_true( used_at_least_once ) ) - { - wait 3; - } - escape_pod thread escape_pod_state_run(); - while ( 1 ) - { - players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); - while ( players_in_escape_pod == 0 ) - { - escape_pod.escape_pod_state = 1; - wait 0,05; - } - all_players_touching = escape_pod_trigger escape_pod_are_all_alive_players_ready(); - players_total = escape_pod_trigger escape_pod_get_all_alive_players(); - players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); - if ( players_in_escape_pod > 0 ) - { - escape_pod.escape_pod_state = 2; - } - if ( all_players_touching ) - { - escape_pod thread escape_pod_tell_fx(); - wait 3; - all_players_still_touching = escape_pod_trigger escape_pod_are_all_alive_players_ready(); - if ( all_players_still_touching ) - { - break; - } - } - else - { - wait 0,05; - } - } - level notify( "escape_pod_falling_begin" ); - players = get_players(); - _a1053 = players; - _k1053 = getFirstArrayKey( _a1053 ); - while ( isDefined( _k1053 ) ) - { - player = _a1053[ _k1053 ]; - player.riding_escape_pod = 1; - player allowjump( 0 ); - _k1053 = getNextArrayKey( _a1053, _k1053 ); - } - if ( isDefined( escape_pod_blocker_door ) ) - { - escape_pod_blocker_door trigger_on(); - escape_pod_blocker_door linkto( escape_pod ); - escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); - escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); - } - escape_pod.escape_pod_state = 5; - escape_pod thread escape_pod_shake(); - wait ( getanimlength( level.escape_elevator_5_state ) - 0,05 ); - escape_pod setanim( level.escape_elevator_drop ); - escape_pod setclientfield( "clientfield_escape_pod_light_fx", 0 ); - escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 1 ); - escape_pod thread escape_pod_move(); - escape_pod thread escape_pod_rotate(); - escape_pod waittill( "reached_destination" ); - number_of_times_used++; - escape_pod thread impact_animate(); - if ( number_of_times_used == 1 ) - { - level.escape_elevator_idle = level.escape_elevator_damage_idle_state; - level.escape_elevator_drop = level.escape_elevator_damage_drop_state; - level.escape_elevator_impact = level.escape_elevator_damage_impact_state; - } - level notify( "escape_pod_falling_complete" ); - if ( isDefined( escape_pod_blocker_door ) ) - { - escape_pod_blocker_door unlink(); - escape_pod_blocker_door trigger_off(); - escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); - escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); - } - escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 0 ); - escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 1 ); - escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); - flag_set( "escape_pod_needs_reset" ); - level waittill( "reset_escape_pod" ); - flag_clear( "escape_pod_needs_reset" ); - escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 0 ); - escape_pod thread escape_pod_breaking_rotate(); - wait 6; - escape_pod playsound( "zmb_elevator_run_start" ); - escape_pod playloopsound( "zmb_elevator_run", 1 ); - level notify( "escape_pod_moving_back_to_start_position" ); - if ( isDefined( escape_pod_blocker_door ) ) - { - escape_pod_blocker_door trigger_on(); - escape_pod_blocker_door linkto( escape_pod ); - escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); - escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); - } - escape_pod moveto( escape_pod.home_origin, 3, 0,1, 0,1 ); - escape_pod waittill( "movedone" ); - escape_pod stoploopsound( 1 ); - escape_pod playsound( "zmb_esc_pod_crash" ); - escape_pod playsound( "zmb_elevator_run_stop" ); - escape_pod playsound( "zmb_elevator_ding" ); - escape_pod thread reset_impact_animate(); - used_at_least_once = 1; - } + escape_pod = getent( "elevator_bldg1a_body", "targetname" ); + escape_pod setmovingplatformenabled( 1 ); + escape_pod escapeelevatoruseanimtree(); + escape_pod_trigger = getent( "escape_pod_trigger", "targetname" ); + escape_pod.is_elevator = 1; + escape_pod._post_host_migration_thread = maps\mp\zm_highrise_elevators::escape_pod_host_migration_respawn_check; + + if ( !isdefined( escape_pod_trigger ) ) + return; + + escape_pod.home_origin = escape_pod.origin; + escape_pod.link_start = []; + escape_pod.link_end = []; + escape_pod_blocker_door = getent( "elevator_bldg1a_body_door_clip", "targetname" ); + number_of_times_used = 0; + used_at_least_once = 0; + escape_pod setanim( level.escape_elevator_1_state ); + escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); + escape_pod_trigger thread escape_pod_walk_on_off( escape_pod ); + + while ( true ) + { + escape_pod setanim( level.escape_elevator_idle ); + flag_clear( "escape_pod_needs_reset" ); + + if ( isdefined( escape_pod_blocker_door ) ) + { + escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); + escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); + escape_pod_blocker_door unlink(); + escape_pod_blocker_door thread trigger_off(); + } + + if ( is_true( used_at_least_once ) ) + wait 3; + + escape_pod thread escape_pod_state_run(); + + while ( true ) + { + players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); + + if ( players_in_escape_pod == 0 ) + { + escape_pod.escape_pod_state = 1; + wait 0.05; + continue; + } + + all_players_touching = escape_pod_trigger escape_pod_are_all_alive_players_ready(); + players_total = escape_pod_trigger escape_pod_get_all_alive_players(); + players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); + + if ( players_in_escape_pod > 0 ) + escape_pod.escape_pod_state = 2; + + if ( all_players_touching ) + { + escape_pod thread escape_pod_tell_fx(); + wait 3; + all_players_still_touching = escape_pod_trigger escape_pod_are_all_alive_players_ready(); + + if ( all_players_still_touching ) + break; + } + + wait 0.05; + } + + level notify( "escape_pod_falling_begin" ); + players = get_players(); + + foreach ( player in players ) + { + player.riding_escape_pod = 1; + player allowjump( 0 ); + } + + if ( isdefined( escape_pod_blocker_door ) ) + { + escape_pod_blocker_door trigger_on(); + escape_pod_blocker_door linkto( escape_pod ); + escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); + escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); + } + + escape_pod.escape_pod_state = 5; + escape_pod thread escape_pod_shake(); + wait( getanimlength( level.escape_elevator_5_state ) - 0.05 ); + escape_pod setanim( level.escape_elevator_drop ); + escape_pod setclientfield( "clientfield_escape_pod_light_fx", 0 ); + escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 1 ); + escape_pod thread escape_pod_move(); + escape_pod thread escape_pod_rotate(); + + escape_pod waittill( "reached_destination" ); + + number_of_times_used++; + escape_pod thread impact_animate(); + + if ( number_of_times_used == 1 ) + { + level.escape_elevator_idle = level.escape_elevator_damage_idle_state; + level.escape_elevator_drop = level.escape_elevator_damage_drop_state; + level.escape_elevator_impact = level.escape_elevator_damage_impact_state; + } + + level notify( "escape_pod_falling_complete" ); + + if ( isdefined( escape_pod_blocker_door ) ) + { + escape_pod_blocker_door unlink(); + escape_pod_blocker_door trigger_off(); + escape_pod escape_pod_linknodes( "escape_pod_door_l_node" ); + escape_pod escape_pod_linknodes( "escape_pod_door_r_node" ); + } + + escape_pod setclientfield( "clientfield_escape_pod_sparks_fx", 0 ); + escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 1 ); + escape_pod setclientfield( "clientfield_escape_pod_light_fx", 1 ); + flag_set( "escape_pod_needs_reset" ); + + level waittill( "reset_escape_pod" ); + + flag_clear( "escape_pod_needs_reset" ); + escape_pod setclientfield( "clientfield_escape_pod_impact_fx", 0 ); + escape_pod thread escape_pod_breaking_rotate(); + wait 6; + escape_pod playsound( "zmb_elevator_run_start" ); + escape_pod playloopsound( "zmb_elevator_run", 1 ); + level notify( "escape_pod_moving_back_to_start_position" ); + + if ( isdefined( escape_pod_blocker_door ) ) + { + escape_pod_blocker_door trigger_on(); + escape_pod_blocker_door linkto( escape_pod ); + escape_pod escape_pod_unlinknodes( "escape_pod_door_l_node" ); + escape_pod escape_pod_unlinknodes( "escape_pod_door_r_node" ); + } + + escape_pod moveto( escape_pod.home_origin, 3, 0.1, 0.1 ); + + escape_pod waittill( "movedone" ); + + escape_pod stoploopsound( 1 ); + escape_pod playsound( "zmb_esc_pod_crash" ); + escape_pod playsound( "zmb_elevator_run_stop" ); + escape_pod playsound( "zmb_elevator_ding" ); + escape_pod thread reset_impact_animate(); + used_at_least_once = 1; + } } escape_pod_walk_on_off( escape_pod ) { - while ( 1 ) - { - self waittill( "trigger", who ); - if ( isplayer( who ) ) - { - if ( !is_true( who.in_escape_pod_trigger ) ) - { - self thread escape_pod_walk_on_off_watch( who, escape_pod ); - } - } - } + while ( true ) + { + self waittill( "trigger", who ); + + if ( isplayer( who ) ) + { + if ( !is_true( who.in_escape_pod_trigger ) ) + self thread escape_pod_walk_on_off_watch( who, escape_pod ); + } + } } escape_pod_walk_on_off_watch( who, escape_pod ) { - who endon( "disconnect" ); - who.in_escape_pod_trigger = 1; - playsoundatposition( "zmb_esc_pod_bump", escape_pod.origin + vectorScale( ( 0, 0, 1 ), 15 ) ); - while ( who istouching( self ) ) - { - wait 1; - } - playsoundatposition( "zmb_esc_pod_bump", escape_pod.origin + vectorScale( ( 0, 0, 1 ), 15 ) ); - who.in_escape_pod_trigger = 0; + who endon( "disconnect" ); + who.in_escape_pod_trigger = 1; + playsoundatposition( "zmb_esc_pod_bump", escape_pod.origin + vectorscale( ( 0, 0, 1 ), 15.0 ) ); + + while ( who istouching( self ) ) + wait 1; + + playsoundatposition( "zmb_esc_pod_bump", escape_pod.origin + vectorscale( ( 0, 0, 1 ), 15.0 ) ); + who.in_escape_pod_trigger = 0; } reset_impact_animate() { - self setanim( level.escape_elevator_prestine_impact_state ); - wait getanimlength( level.escape_elevator_prestine_impact_state ); - level notify( "escape_pod_returns_to_start_location" ); + self setanim( level.escape_elevator_prestine_impact_state ); + wait( getanimlength( level.escape_elevator_prestine_impact_state ) ); + level notify( "escape_pod_returns_to_start_location" ); } impact_animate() { - self setanim( level.escape_elevator_impact ); - wait getanimlength( level.escape_elevator_impact ); - self setanim( level.escape_elevator_idle ); + self setanim( level.escape_elevator_impact ); + wait( getanimlength( level.escape_elevator_impact ) ); + self setanim( level.escape_elevator_idle ); } escape_pod_state( set, wait_for_current_end ) { - if ( isDefined( self.state ) && self.state == set ) - { - return; - } - if ( is_true( wait_for_current_end ) ) - { - self waittill( "done" ); - } - self.state = set; - switch( set ) - { - case 1: - self.state_anim = level.escape_elevator_1_state; - break; - case 2: - self.state_anim = level.escape_elevator_2_state; - break; - case 3: - self.state_anim = level.escape_elevator_3_state; - break; - case 4: - self.state_anim = level.escape_elevator_4_state; - break; - case 5: - self.state_anim = level.escape_elevator_5_state; - break; - } - self setanim( self.state_anim ); + if ( isdefined( self.state ) && self.state == set ) + return; + + if ( is_true( wait_for_current_end ) ) + self waittill( "done" ); + + self.state = set; + + switch ( set ) + { + case "1": + self.state_anim = level.escape_elevator_1_state; + break; + case "2": + self.state_anim = level.escape_elevator_2_state; + break; + case "3": + self.state_anim = level.escape_elevator_3_state; + break; + case "4": + self.state_anim = level.escape_elevator_4_state; + break; + case "5": + self.state_anim = level.escape_elevator_5_state; + break; + } + + self setanim( self.state_anim ); } escape_pod_state_run() { - while ( 1 ) - { - while ( !isDefined( self.escape_pod_state ) ) - { - wait 0,05; - } - while ( isDefined( self.state ) && self.state == 1 && self.state == self.escape_pod_state ) - { - wait 0,05; - } - self.state = self.escape_pod_state; - shouldwait = 1; - switch( self.state ) - { - case 1: - self.state_anim = level.escape_elevator_1_state; - shouldwait = 0; - break; - case 2: - self.state_anim = level.escape_elevator_2_state; - break; - case 3: - self.state_anim = level.escape_elevator_3_state; - break; - case 4: - self.state_anim = level.escape_elevator_4_state; - break; - case 5: - self.state_anim = level.escape_elevator_5_state; - break; - } - self setanim( self.state_anim ); - if ( shouldwait ) - { - wait ( getanimlength( self.state_anim ) - 0,05 ); - continue; - } - else - { - wait 0,05; - } - } + while ( true ) + { + if ( !isdefined( self.escape_pod_state ) ) + { + wait 0.05; + continue; + } + + if ( isdefined( self.state ) && self.state == 1 && self.state == self.escape_pod_state ) + { + wait 0.05; + continue; + } + + self.state = self.escape_pod_state; + shouldwait = 1; + + switch ( self.state ) + { + case "1": + self.state_anim = level.escape_elevator_1_state; + shouldwait = 0; + break; + case "2": + self.state_anim = level.escape_elevator_2_state; + break; + case "3": + self.state_anim = level.escape_elevator_3_state; + break; + case "4": + self.state_anim = level.escape_elevator_4_state; + break; + case "5": + self.state_anim = level.escape_elevator_5_state; + break; + } + + self setanim( self.state_anim ); + + if ( shouldwait ) + wait( getanimlength( self.state_anim ) - 0.05 ); + else + wait 0.05; + } } escape_pod_tell_fx() { - self setclientfield( "clientfield_escape_pod_tell_fx", 1 ); - wait 3; - self setclientfield( "clientfield_escape_pod_tell_fx", 0 ); + self setclientfield( "clientfield_escape_pod_tell_fx", 1 ); + wait 3; + self setclientfield( "clientfield_escape_pod_tell_fx", 0 ); } escape_pod_get_all_alive_players() { - players = get_players(); - players_alive = 0; - _a1318 = players; - _k1318 = getFirstArrayKey( _a1318 ); - while ( isDefined( _k1318 ) ) - { - player = _a1318[ _k1318 ]; - if ( player.sessionstate != "spectator" ) - { - players_alive++; - } - _k1318 = getNextArrayKey( _a1318, _k1318 ); - } - return players_alive; + players = get_players(); + players_alive = 0; + + foreach ( player in players ) + { + if ( player.sessionstate != "spectator" ) + players_alive++; + } + + return players_alive; } escape_pod_get_all_alive_players_inside() { - players = get_players(); - players_in_escape_pod = 0; - _a1335 = players; - _k1335 = getFirstArrayKey( _a1335 ); - while ( isDefined( _k1335 ) ) - { - player = _a1335[ _k1335 ]; - if ( player.sessionstate != "spectator" ) - { - if ( player istouching( self ) ) - { - players_in_escape_pod++; - } - } - _k1335 = getNextArrayKey( _a1335, _k1335 ); - } - return players_in_escape_pod; + players = get_players(); + players_in_escape_pod = 0; + + foreach ( player in players ) + { + if ( player.sessionstate != "spectator" ) + { + if ( player istouching( self ) ) + players_in_escape_pod++; + } + } + + return players_in_escape_pod; } escape_pod_breaking_rotate() { - rolls = array( -3, 6, -6, 3 ); - time = 0,74; - accel = 0,1; - deccel = 0,1; - _a1358 = rolls; - _k1358 = getFirstArrayKey( _a1358 ); - while ( isDefined( _k1358 ) ) - { - roll = _a1358[ _k1358 ]; - self rotateroll( roll, time, accel, deccel ); - self playsound( "zmb_esc_pod_bump" ); - self waittill( "rotatedone" ); - _k1358 = getNextArrayKey( _a1358, _k1358 ); - } + rolls = array( -3, 6, -6, 3 ); + time = 0.74; + accel = 0.1; + deccel = 0.1; + + foreach ( roll in rolls ) + { + self rotateroll( roll, time, accel, deccel ); + self playsound( "zmb_esc_pod_bump" ); + + self waittill( "rotatedone" ); + } } escape_pod_rotate() { - rolls = array( -3, 11, -8, 9, -13, 15, -13, 5, -9, 10, -4 ); - time = 0,21; - accel = 0,1; - deccel = 0,1; - _a1375 = rolls; - _k1375 = getFirstArrayKey( _a1375 ); - while ( isDefined( _k1375 ) ) - { - roll = _a1375[ _k1375 ]; - self rotateroll( roll, time, accel, deccel ); - self waittill( "rotatedone" ); - _k1375 = getNextArrayKey( _a1375, _k1375 ); - } + rolls = array( -3, 11, -8, 9, -13, 15, -13, 5, -9, 10, -4 ); + time = 0.21; + accel = 0.1; + deccel = 0.1; + + foreach ( roll in rolls ) + { + self rotateroll( roll, time, accel, deccel ); + + self waittill( "rotatedone" ); + } } escape_pod_move() { - shock_radius = 117,6; - destination_struct = getstruct( self.target, "targetname" ); - level notify( "free_fall" ); - self playsound( "zmb_esc_pod_break" ); - self moveto( destination_struct.origin, 3, 0,1, 0,1 ); - self waittill( "movedone" ); - self playsound( "zmb_esc_pod_crash" ); - earthquake( 0,3, 1,5, self.origin, 256 ); - self notify( "reached_destination" ); - players = get_players(); - _a1398 = players; - _k1398 = getFirstArrayKey( _a1398 ); - while ( isDefined( _k1398 ) ) - { - player = _a1398[ _k1398 ]; - if ( !is_true( player.riding_escape_pod ) ) - { - } - else - { - player.riding_escape_pod = 0; - player allowstand( 0 ); - player allowcrouch( 0 ); - player setstance( "prone" ); - player shellshock( "elevator_crash", 4,5 ); - player allowjump( 1 ); - player allowstand( 1 ); - player allowcrouch( 1 ); - } - _k1398 = getNextArrayKey( _a1398, _k1398 ); - } + shock_radius = 117.6; + destination_struct = getstruct( self.target, "targetname" ); + level notify( "free_fall" ); + self playsound( "zmb_esc_pod_break" ); + self moveto( destination_struct.origin, 3, 0.1, 0.1 ); + + self waittill( "movedone" ); + + self playsound( "zmb_esc_pod_crash" ); + earthquake( 0.3, 1.5, self.origin, 256 ); + self notify( "reached_destination" ); + players = get_players(); + + foreach ( player in players ) + { + if ( !is_true( player.riding_escape_pod ) ) + continue; + + player.riding_escape_pod = 0; + player allowstand( 0 ); + player allowcrouch( 0 ); + player setstance( "prone" ); + player shellshock( "elevator_crash", 4.5 ); + player allowjump( 1 ); + player allowstand( 1 ); + player allowcrouch( 1 ); + } } escape_pod_shake() { - self endon( "reached_destination" ); - duration = randomfloatrange( 0,5, 1,5 ); - wait_time = randomfloatrange( 1,5, 2,5 ); - while ( 1 ) - { - wait wait_time; - earthquake( 0,2, duration, self.origin, 1024 ); - } + self endon( "reached_destination" ); + duration = randomfloatrange( 0.5, 1.5 ); + wait_time = randomfloatrange( 1.5, 2.5 ); + + while ( true ) + { + wait( wait_time ); + earthquake( 0.2, duration, self.origin, 1024 ); + } } escape_pod_linknodes( node_name ) { - start_node = getnode( node_name, "targetname" ); - while ( isDefined( start_node ) ) - { - start_node.links = []; - near_nodes = getnodesinradiussorted( start_node.origin, 128, 0, 64, "pathnodes" ); - links = 0; - _a1445 = near_nodes; - _k1445 = getFirstArrayKey( _a1445 ); - while ( isDefined( _k1445 ) ) - { - node = _a1445[ _k1445 ]; - if ( !isDefined( node.target ) ) - { - self.link_start[ self.link_start.size ] = start_node; - self.link_end[ self.link_end.size ] = node; - maps/mp/zm_highrise_utility::highrise_link_nodes( start_node, node ); - maps/mp/zm_highrise_utility::highrise_link_nodes( node, start_node ); - start_node.links[ start_node.links.size ] = node; - links++; - if ( links == 2 ) - { - return; - } - } - else - { - _k1445 = getNextArrayKey( _a1445, _k1445 ); - } - } - } + start_node = getnode( node_name, "targetname" ); + + if ( isdefined( start_node ) ) + { + start_node.links = []; + near_nodes = getnodesinradiussorted( start_node.origin, 128, 0, 64, "pathnodes" ); + links = 0; + + foreach ( node in near_nodes ) + { + if ( !isdefined( node.target ) ) + { + self.link_start[self.link_start.size] = start_node; + self.link_end[self.link_end.size] = node; + maps\mp\zm_highrise_utility::highrise_link_nodes( start_node, node ); + maps\mp\zm_highrise_utility::highrise_link_nodes( node, start_node ); + start_node.links[start_node.links.size] = node; + links++; + + if ( links == 2 ) + break; + } + } + } } escape_pod_unlinknodes( node_name ) { - start_node = getnode( node_name, "targetname" ); - while ( isDefined( start_node ) && isDefined( start_node.links ) ) - { - linked_nodes = start_node.links; - _a1476 = linked_nodes; - _k1476 = getFirstArrayKey( _a1476 ); - while ( isDefined( _k1476 ) ) - { - node = _a1476[ _k1476 ]; - if ( !isDefined( node.target ) ) - { - maps/mp/zm_highrise_utility::highrise_unlink_nodes( start_node, node ); - maps/mp/zm_highrise_utility::highrise_unlink_nodes( node, start_node ); - } - _k1476 = getNextArrayKey( _a1476, _k1476 ); - } - } + start_node = getnode( node_name, "targetname" ); + + if ( isdefined( start_node ) && isdefined( start_node.links ) ) + { + linked_nodes = start_node.links; + + foreach ( node in linked_nodes ) + { + if ( !isdefined( node.target ) ) + { + maps\mp\zm_highrise_utility::highrise_unlink_nodes( start_node, node ); + maps\mp\zm_highrise_utility::highrise_unlink_nodes( node, start_node ); + } + } + } } escape_pod_are_all_alive_players_ready() { - players = get_players(); - players_in_escape_pod = 0; - players_alive = 0; - _a1506 = players; - _k1506 = getFirstArrayKey( _a1506 ); - while ( isDefined( _k1506 ) ) - { - player = _a1506[ _k1506 ]; - if ( player.sessionstate != "spectator" ) - { - players_alive++; - if ( player istouching( self ) ) - { - players_in_escape_pod++; - } - } - _k1506 = getNextArrayKey( _a1506, _k1506 ); - } - return players_alive == players_in_escape_pod; + players = get_players(); + players_in_escape_pod = 0; + players_alive = 0; + + foreach ( player in players ) + { + if ( player.sessionstate != "spectator" ) + { + players_alive++; + + if ( player istouching( self ) ) + players_in_escape_pod++; + } + } + + return players_alive == players_in_escape_pod; } watch_escapepod_devgui() { /# - while ( 1 ) - { - resetcmd = getDvar( "zombie_devgui_hrescapepodreset" ); - if ( isDefined( resetcmd ) && resetcmd != "" ) - { - level notify( "reset_escape_pod" ); - setdvar( "zombie_devgui_hrescapepodreset", "" ); - } - wait 1; + while ( true ) + { + resetcmd = getdvar( _hash_C0F9913E ); + + if ( isdefined( resetcmd ) && resetcmd != "" ) + { + level notify( "reset_escape_pod" ); + setdvar( "zombie_devgui_hrescapepodreset", "" ); + } + + wait 1.0; + } #/ - } } check_valid_poi( valid ) { - _a1545 = level.elevator_volumes; - _k1545 = getFirstArrayKey( _a1545 ); - while ( isDefined( _k1545 ) ) - { - volume = _a1545[ _k1545 ]; - if ( self istouching( volume ) ) - { - return 0; - } - _k1545 = getNextArrayKey( _a1545, _k1545 ); - } - return valid; + foreach ( volume in level.elevator_volumes ) + { + if ( self istouching( volume ) ) + return 0; + } + + return valid; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc index 810637f..5d764dc 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_distance_tracking.gsc @@ -1,415 +1,390 @@ -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_ai_basic; zombie_tracking_init() { - level.zombie_respawned_health = []; - if ( !isDefined( level.zombie_tracking_dist ) ) - { - level.zombie_tracking_dist = 1000; - } - if ( !isDefined( level.zombie_tracking_high ) ) - { - level.zombie_tracking_high = 500; - } - if ( !isDefined( level.zombie_tracking_wait ) ) - { - level.zombie_tracking_wait = 10; - } - building_trigs = getentarray( "zombie_fell_off", "targetname" ); - if ( isDefined( building_trigs ) ) - { - array_thread( building_trigs, ::zombies_off_building ); - } - level.distance_tracker_aggressive_distance = 500; - level.distance_tracker_aggressive_height = 200; - for ( ;; ) - { - while ( 1 ) - { - zombies = get_round_enemy_array(); - if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) - { - wait level.zombie_tracking_wait; - } - } - else i = 0; - while ( i < zombies.size ) - { - if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking ) - { - zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); - } - i++; - } - wait level.zombie_tracking_wait; - } + level.zombie_respawned_health = []; + + if ( !isdefined( level.zombie_tracking_dist ) ) + level.zombie_tracking_dist = 1000; + + if ( !isdefined( level.zombie_tracking_high ) ) + level.zombie_tracking_high = 500; + + if ( !isdefined( level.zombie_tracking_wait ) ) + level.zombie_tracking_wait = 10; + + building_trigs = getentarray( "zombie_fell_off", "targetname" ); + + if ( isdefined( building_trigs ) ) + array_thread( building_trigs, ::zombies_off_building ); + + level.distance_tracker_aggressive_distance = 500; + level.distance_tracker_aggressive_height = 200; + + while ( true ) + { + zombies = get_round_enemy_array(); + + if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) + { + wait( level.zombie_tracking_wait ); + continue; + } + else + { + for ( i = 0; i < zombies.size; i++ ) + { + if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) ) + zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); + } + } + + wait( level.zombie_tracking_wait ); + } } delete_zombie_noone_looking( how_close, how_high ) { - self endon( "death" ); - if ( !isDefined( how_close ) ) - { - how_close = 1000; - } - if ( !isDefined( how_high ) ) - { - how_high = 500; - } - distance_squared_check = how_close * how_close; - height_squared_check = how_high * how_high; - too_far_dist = distance_squared_check * 3; - if ( isDefined( level.zombie_tracking_too_far_dist ) ) - { - too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; - } - self.inview = 0; - self.player_close = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ].sessionstate == "spectator" ) - { - i++; - continue; - } - else if ( isDefined( level.only_track_targeted_players ) ) - { - if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] ) - { - i++; - continue; - } - } - else - { - can_be_seen = self player_can_see_me( players[ i ] ); - if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist ) - { - self.inview++; - } - if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high ) - { - self.player_close++; - } - } - i++; - } - wait 0,1; - if ( self.inview == 0 && self.player_close == 0 ) - { - if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) - { - return; - } - if ( isDefined( self.electrified ) && self.electrified == 1 ) - { - return; - } - zombies = getaiarray( "axis" ); - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) - { - if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) - { - level.zombie_total++; - if ( self.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; - } - } - } - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self notify( "zombie_delete" ); - self delete(); - recalc_zombie_array(); - } + self endon( "death" ); + + if ( !isdefined( how_close ) ) + how_close = 1000; + + if ( !isdefined( how_high ) ) + how_high = 500; + + distance_squared_check = how_close * how_close; + height_squared_check = how_high * how_high; + too_far_dist = distance_squared_check * 3; + + if ( isdefined( level.zombie_tracking_too_far_dist ) ) + too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist; + + self.inview = 0; + self.player_close = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( players[i].sessionstate == "spectator" ) + continue; + + if ( isdefined( level.only_track_targeted_players ) ) + { + if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] ) + continue; + } + + can_be_seen = self player_can_see_me( players[i] ); + + if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist ) + self.inview++; + + if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high ) + self.player_close++; + } + + wait 0.1; + + if ( self.inview == 0 && self.player_close == 0 ) + { + if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" ) + return; + + if ( isdefined( self.electrified ) && self.electrified == 1 ) + return; + + zombies = getaiarray( "axis" ); + + if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth ) + { + if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + + if ( self.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health; + } + } + + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self notify( "zombie_delete" ); + self delete(); + recalc_zombie_array(); + } } player_can_see_me( player ) { - playerangles = player getplayerangles(); - playerforwardvec = anglesToForward( playerangles ); - playerunitforwardvec = vectornormalize( playerforwardvec ); - banzaipos = self.origin; - playerpos = player getorigin(); - playertobanzaivec = banzaipos - playerpos; - playertobanzaiunitvec = vectornormalize( playertobanzaivec ); - forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); - if ( forwarddotbanzai >= 1 ) - { - anglefromcenter = 0; - } - else if ( forwarddotbanzai <= -1 ) - { - anglefromcenter = 180; - } - else - { - anglefromcenter = acos( forwarddotbanzai ); - } - playerfov = getDvarFloat( "cg_fov" ); - banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); - if ( banzaivsplayerfovbuffer <= 0 ) - { - banzaivsplayerfovbuffer = 0,2; - } - playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) ); - return playercanseeme; + playerangles = player getplayerangles(); + playerforwardvec = anglestoforward( playerangles ); + playerunitforwardvec = vectornormalize( playerforwardvec ); + banzaipos = self.origin; + playerpos = player getorigin(); + playertobanzaivec = banzaipos - playerpos; + playertobanzaiunitvec = vectornormalize( playertobanzaivec ); + forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); + + if ( forwarddotbanzai >= 1 ) + anglefromcenter = 0; + else if ( forwarddotbanzai <= -1 ) + anglefromcenter = 180; + else + anglefromcenter = acos( forwarddotbanzai ); + + playerfov = getdvarfloat( "cg_fov" ); + banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF ); + + if ( banzaivsplayerfovbuffer <= 0 ) + banzaivsplayerfovbuffer = 0.2; + + playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer ); + return playercanseeme; } escaped_zombies_cleanup_init() { - self endon( "death" ); - self.zombie_path_bad = 0; - while ( 1 ) - { - if ( !self.zombie_path_bad ) - { - self waittill( "bad_path" ); - } - found_player = undefined; - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( self maymovetopoint( players[ i ].origin, 1 ) ) - { - self.favoriteenemy = players[ i ]; - found_player = 1; - i++; - continue; - } - i++; - } - n_delete_distance = 800; - n_delete_height = 300; - if ( is_player_in_inverted_elevator_shaft() ) - { - n_delete_distance = level.distance_tracker_aggressive_distance; - n_delete_height = level.distance_tracker_aggressive_height; - } - if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) - { - self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); - self.zombie_path_bad = 1; - self escaped_zombies_cleanup(); - } - wait 0,1; - } + self endon( "death" ); + self.zombie_path_bad = 0; + + while ( true ) + { + if ( !self.zombie_path_bad ) + self waittill( "bad_path" ); + + found_player = undefined; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + if ( self maymovetopoint( players[i].origin, 1 ) ) + { + self.favoriteenemy = players[i]; + found_player = 1; + continue; + } + } + + n_delete_distance = 800; + n_delete_height = 300; + + if ( is_player_in_inverted_elevator_shaft() ) + { + n_delete_distance = level.distance_tracker_aggressive_distance; + n_delete_height = level.distance_tracker_aggressive_height; + } + + if ( !isdefined( found_player ) && ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) ) + { + self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height ); + self.zombie_path_bad = 1; + self escaped_zombies_cleanup(); + } + + wait 0.1; + } } is_player_in_inverted_elevator_shaft() { - b_player_is_in_elevator_shaft = 0; - a_occupied_zones = get_occupied_zones(); - i = 0; - while ( i < a_occupied_zones.size ) - { - if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) ) - { - b_player_is_in_elevator_shaft = 1; - } - i++; - } - return b_player_is_in_elevator_shaft; + b_player_is_in_elevator_shaft = 0; + a_occupied_zones = get_occupied_zones(); + + for ( i = 0; i < a_occupied_zones.size; i++ ) + { + if ( issubstr( a_occupied_zones[i], "orange_elevator_shaft" ) ) + b_player_is_in_elevator_shaft = 1; + } + + return b_player_is_in_elevator_shaft; } get_occupied_zones() { - a_occupied_zones = []; - i = 0; - while ( i < level.active_zone_names.size ) - { - if ( level.zones[ level.active_zone_names[ i ] ].is_occupied ) - { - a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ]; - } - i++; - } - return a_occupied_zones; + a_occupied_zones = []; + + for ( i = 0; i < level.active_zone_names.size; i++ ) + { + if ( level.zones[level.active_zone_names[i]].is_occupied ) + a_occupied_zones[a_occupied_zones.size] = level.active_zone_names[i]; + } + + return a_occupied_zones; } get_escape_position() { - self endon( "death" ); - str_zone = get_current_zone(); - if ( isDefined( str_zone ) ) - { - a_zones = get_adjacencies_to_zone( str_zone ); - a_dog_locations = get_dog_locations_in_zones( a_zones ); - s_farthest = self get_farthest_dog_location( a_dog_locations ); - } - return s_farthest; + self endon( "death" ); + str_zone = get_current_zone(); + + if ( isdefined( str_zone ) ) + { + a_zones = get_adjacencies_to_zone( str_zone ); + a_dog_locations = get_dog_locations_in_zones( a_zones ); + s_farthest = self get_farthest_dog_location( a_dog_locations ); + } + + return s_farthest; } get_current_zone() { - str_zone = undefined; - a_zones = getarraykeys( level.zones ); - _a310 = a_zones; - _k310 = getFirstArrayKey( _a310 ); - while ( isDefined( _k310 ) ) - { - zone = _a310[ _k310 ]; - i = 0; - while ( i < level.zones[ zone ].volumes.size ) - { - if ( self istouching( level.zones[ zone ].volumes[ i ] ) ) - { - str_zone = zone; - } - i++; - } - _k310 = getNextArrayKey( _a310, _k310 ); - } - return str_zone; + str_zone = undefined; + a_zones = getarraykeys( level.zones ); + + foreach ( zone in a_zones ) + { + for ( i = 0; i < level.zones[zone].volumes.size; i++ ) + { + if ( self istouching( level.zones[zone].volumes[i] ) ) + str_zone = zone; + } + } + + return str_zone; } get_adjacencies_to_zone( str_zone ) { - a_adjacencies = []; - a_adjacencies[ 0 ] = str_zone; - a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones ); - i = 0; - while ( i < a_adjacent_zones.size ) - { - if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected ) - { - a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ]; - } - i++; - } - return a_adjacencies; + a_adjacencies = []; + a_adjacencies[0] = str_zone; + a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones ); + + for ( i = 0; i < a_adjacent_zones.size; i++ ) + { + if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected ) + a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i]; + } + + return a_adjacencies; } get_dog_locations_in_zones( a_zones ) { - a_dog_locations = []; - _a345 = a_zones; - _k345 = getFirstArrayKey( _a345 ); - while ( isDefined( _k345 ) ) - { - zone = _a345[ _k345 ]; - a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 ); - _k345 = getNextArrayKey( _a345, _k345 ); - } - return a_dog_locations; + a_dog_locations = []; + + foreach ( zone in a_zones ) + a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 ); + + return a_dog_locations; } get_farthest_dog_location( a_dog_locations ) { - n_farthest_index = 0; - n_distance_farthest = 0; - i = 0; - while ( i < a_dog_locations.size ) - { - n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin ); - if ( n_distance_sq > n_distance_farthest ) - { - n_distance_farthest = n_distance_sq; - n_farthest_index = i; - } - i++; - } - return a_dog_locations[ n_farthest_index ]; + n_farthest_index = 0; + n_distance_farthest = 0; + + for ( i = 0; i < a_dog_locations.size; i++ ) + { + n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin ); + + if ( n_distance_sq > n_distance_farthest ) + { + n_distance_farthest = n_distance_sq; + n_farthest_index = i; + } + } + + return a_dog_locations[n_farthest_index]; } escaped_zombies_cleanup() { - self endon( "death" ); - s_escape = self get_escape_position(); - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - if ( isDefined( s_escape ) ) - { - self setgoalpos( s_escape.origin ); - self thread check_player_available(); - self waittill_any( "goal", "reaquire_player" ); - } - self.zombie_path_bad = !can_zombie_path_to_any_player(); - wait 0,1; - if ( !self.zombie_path_bad ) - { - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + self endon( "death" ); + s_escape = self get_escape_position(); + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + + if ( isdefined( s_escape ) ) + { + self setgoalpos( s_escape.origin ); + self thread check_player_available(); + self waittill_any( "goal", "reaquire_player" ); + } + + self.zombie_path_bad = !can_zombie_path_to_any_player(); + wait 0.1; + + if ( !self.zombie_path_bad ) + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); } check_player_available() { - self notify( "_check_player_available" ); - self endon( "_check_player_available" ); - self endon( "death" ); - self endon( "goal" ); - self endon( "reaquire_player" ); - while ( self.zombie_path_bad ) - { - if ( self can_zombie_see_any_player() ) - { - self notify( "reaquire_player" ); - } - wait randomfloatrange( 0,2, 0,5 ); - } + self notify( "_check_player_available" ); + self endon( "_check_player_available" ); + self endon( "death" ); + self endon( "goal" ); + self endon( "reaquire_player" ); + + while ( self.zombie_path_bad ) + { + if ( self can_zombie_see_any_player() ) + self notify( "reaquire_player" ); + + wait( randomfloatrange( 0.2, 0.5 ) ); + } } can_zombie_path_to_any_player() { - a_players = get_players(); - i = 0; - while ( i < a_players.size ) - { - if ( findpath( self.origin, a_players[ i ].origin ) ) - { - return 1; - } - i++; - } - return 0; + a_players = get_players(); + + for ( i = 0; i < a_players.size; i++ ) + { + if ( findpath( self.origin, a_players[i].origin ) ) + return true; + } + + return false; } can_zombie_see_any_player() { - a_players = get_players(); - i = 0; - while ( i < a_players.size ) - { - if ( self maymovetopoint( a_players[ i ].origin, 1 ) ) - { - return 1; - } - i++; - } - return 0; + a_players = get_players(); + + for ( i = 0; i < a_players.size; i++ ) + { + if ( self maymovetopoint( a_players[i].origin, 1 ) ) + return true; + } + + return false; } zombies_off_building() { - while ( 1 ) - { - self waittill( "trigger", who ); - if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper ) - { - zombies = getaiarray( "axis" ); - if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth ) - { - if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper ) - { - level.zombie_total++; - if ( who.health < level.zombie_health ) - { - level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health; - } - } - } - who maps/mp/zombies/_zm_spawner::reset_attack_spot(); - who notify( "zombie_delete" ); - who dodamage( who.health + 666, who.origin, who ); - recalc_zombie_array(); - } - wait 0,1; - } + while ( true ) + { + self waittill( "trigger", who ); + + if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) ) + { + zombies = getaiarray( "axis" ); + + if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && who.health >= who.maxhealth ) + { + if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) ) + { + level.zombie_total++; + + if ( who.health < level.zombie_health ) + level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health; + } + } + + who maps\mp\zombies\_zm_spawner::reset_attack_spot(); + who notify( "zombie_delete" ); + who dodamage( who.health + 666, who.origin, who ); + recalc_zombie_array(); + } + + wait 0.1; + } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc index b27a5cd..0658637 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_elevators.gsc @@ -1,1439 +1,1321 @@ -#include maps/mp/zombies/_zm_ai_leaper; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zm_highrise_distance_tracking; -#include maps/mp/zm_highrise_utility; -#include maps/mp/gametypes_zm/_hostmigration; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; - -#using_animtree( "zombie_perk_elevator" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hostmigration; +#include maps\mp\zm_highrise_utility; +#include maps\mp\zm_highrise_distance_tracking; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_ai_leaper; init_perk_elvators_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } init_elevators() { - level thread init_perk_elevators_anims(); + level thread init_perk_elevators_anims(); /# - init_elevator_devgui(); + init_elevator_devgui(); #/ } quick_revive_solo_watch() { - if ( flag( "solo_game" ) ) - { - self.body perkelevatordoor( 1 ); - } - machine_triggers = getentarray( "vending_revive", "target" ); - machine_trigger = machine_triggers[ 0 ]; - triggeroffset = machine_trigger.origin - self.body.origin; - machineoffset = level.quick_revive_machine.origin - self.body.origin; - while ( 1 ) - { - level waittill_any( "revive_off", "revive_hide" ); - self.body.lock_doors = 1; - self.body perkelevatordoor( 0 ); - machine_trigger unlink(); - wait 1; - machine_trigger.origin += vectorScale( ( 0, 1, 0 ), 10000 ); - level waittill( "revive_on" ); - wait 1; - machine_trigger.origin = self.body.origin + triggeroffset; - machine_trigger linkto( self.body ); - level.quick_revive_machine.origin = self.body.origin + machineoffset; - level.quick_revive_machine linkto( self.body ); - level.quick_revive_machine show(); - self.body.lock_doors = 0; - self.body perkelevatordoor( 1 ); - } + if ( flag( "solo_game" ) ) + self.body perkelevatordoor( 1 ); + + machine_triggers = getentarray( "vending_revive", "target" ); + machine_trigger = machine_triggers[0]; + triggeroffset = machine_trigger.origin - self.body.origin; + machineoffset = level.quick_revive_machine.origin - self.body.origin; + + while ( true ) + { + level waittill_any( "revive_off", "revive_hide" ); + self.body.lock_doors = 1; + self.body perkelevatordoor( 0 ); + machine_trigger unlink(); + wait 1; + machine_trigger.origin += vectorscale( ( 0, 0, -1 ), 10000.0 ); + + level waittill( "revive_on" ); + + wait 1; + machine_trigger.origin = self.body.origin + triggeroffset; + machine_trigger linkto( self.body ); + level.quick_revive_machine.origin = self.body.origin + machineoffset; + level.quick_revive_machine linkto( self.body ); + level.quick_revive_machine show(); + self.body.lock_doors = 0; + self.body perkelevatordoor( 1 ); + } } +#using_animtree("zombie_perk_elevator"); + init_perk_elevators_anims() { - level.perk_elevators_door_open_state = %v_zombie_elevator_doors_open; - level.perk_elevators_door_close_state = %v_zombie_elevator_doors_close; - level.perk_elevators_door_movement_state = %v_zombie_elevator_doors_idle_movement; - level.perk_elevators_anims = []; - level.perk_elevators_anims[ "vending_chugabud" ][ 0 ] = %v_zombie_elevator_doors_whoswho_banging_before_leaving; - level.perk_elevators_anims[ "vending_chugabud" ][ 1 ] = %v_zombie_elevator_doors_whoswho_trying_to_close; - level.perk_elevators_anims[ "vending_doubletap" ][ 0 ] = %v_zombie_elevator_doors_doubletap_banging_before_leaving; - level.perk_elevators_anims[ "vending_doubletap" ][ 1 ] = %v_zombie_elevator_doors_doubletap_trying_to_close; - level.perk_elevators_anims[ "vending_jugg" ][ 0 ] = %v_zombie_elevator_doors_jugg_banging_before_leaving; - level.perk_elevators_anims[ "vending_jugg" ][ 1 ] = %v_zombie_elevator_doors_jugg_trying_to_close; - level.perk_elevators_anims[ "vending_revive" ][ 0 ] = %v_zombie_elevator_doors_marathon_banging_before_leaving; - level.perk_elevators_anims[ "vending_revive" ][ 1 ] = %v_zombie_elevator_doors_marathon_trying_to_close; - level.perk_elevators_anims[ "vending_additionalprimaryweapon" ][ 0 ] = %v_zombie_elevator_doors_mulekick_banging_before_leaving; - level.perk_elevators_anims[ "vending_additionalprimaryweapon" ][ 1 ] = %v_zombie_elevator_doors_mulekick_trying_to_close; - level.perk_elevators_anims[ "specialty_weapupgrade" ][ 0 ] = %v_zombie_elevator_doors_pap_banging_before_leaving; - level.perk_elevators_anims[ "specialty_weapupgrade" ][ 1 ] = %v_zombie_elevator_doors_pap_trying_to_close; - level.perk_elevators_anims[ "vending_sleight" ][ 0 ] = %v_zombie_elevator_doors_speed_banging_before_leaving; - level.perk_elevators_anims[ "vending_sleight" ][ 1 ] = %v_zombie_elevator_doors_speed_trying_to_close; + level.perk_elevators_door_open_state = %v_zombie_elevator_doors_open; + level.perk_elevators_door_close_state = %v_zombie_elevator_doors_close; + level.perk_elevators_door_movement_state = %v_zombie_elevator_doors_idle_movement; + level.perk_elevators_anims = []; + level.perk_elevators_anims["vending_chugabud"][0] = %v_zombie_elevator_doors_whoswho_banging_before_leaving; + level.perk_elevators_anims["vending_chugabud"][1] = %v_zombie_elevator_doors_whoswho_trying_to_close; + level.perk_elevators_anims["vending_doubletap"][0] = %v_zombie_elevator_doors_doubletap_banging_before_leaving; + level.perk_elevators_anims["vending_doubletap"][1] = %v_zombie_elevator_doors_doubletap_trying_to_close; + level.perk_elevators_anims["vending_jugg"][0] = %v_zombie_elevator_doors_jugg_banging_before_leaving; + level.perk_elevators_anims["vending_jugg"][1] = %v_zombie_elevator_doors_jugg_trying_to_close; + level.perk_elevators_anims["vending_revive"][0] = %v_zombie_elevator_doors_marathon_banging_before_leaving; + level.perk_elevators_anims["vending_revive"][1] = %v_zombie_elevator_doors_marathon_trying_to_close; + level.perk_elevators_anims["vending_additionalprimaryweapon"][0] = %v_zombie_elevator_doors_mulekick_banging_before_leaving; + level.perk_elevators_anims["vending_additionalprimaryweapon"][1] = %v_zombie_elevator_doors_mulekick_trying_to_close; + level.perk_elevators_anims["specialty_weapupgrade"][0] = %v_zombie_elevator_doors_pap_banging_before_leaving; + level.perk_elevators_anims["specialty_weapupgrade"][1] = %v_zombie_elevator_doors_pap_trying_to_close; + level.perk_elevators_anims["vending_sleight"][0] = %v_zombie_elevator_doors_speed_banging_before_leaving; + level.perk_elevators_anims["vending_sleight"][1] = %v_zombie_elevator_doors_speed_trying_to_close; } perkelevatoruseanimtree() { - self useanimtree( -1 ); + self useanimtree( -1 ); } perkelevatordoor( set ) { - self endon( "death" ); - animtime = 1; - if ( is_true( set ) ) - { - self.door_state = set; - self setanim( level.perk_elevators_door_open_state, 1, animtime, 1 ); - wait getanimlength( level.perk_elevators_door_open_state ); - } - else - { - self.door_state = set; - self setanim( level.perk_elevators_door_close_state, 1, animtime, 1 ); - wait getanimlength( level.perk_elevators_door_close_state ); - } - self notify( "PerkElevatorDoor" ); + self endon( "death" ); + animtime = 1.0; + + if ( is_true( set ) ) + { + self.door_state = set; + self setanim( level.perk_elevators_door_open_state, 1, animtime, 1 ); + wait( getanimlength( level.perk_elevators_door_open_state ) ); + } + else + { + self.door_state = set; + self setanim( level.perk_elevators_door_close_state, 1, animtime, 1 ); + wait( getanimlength( level.perk_elevators_door_close_state ) ); + } + + self notify( "PerkElevatorDoor" ); } get_link_entity_for_host_migration() { - _a127 = level.elevators; - _k127 = getFirstArrayKey( _a127 ); - while ( isDefined( _k127 ) ) - { - elevator = _a127[ _k127 ]; - if ( isDefined( elevator.body.trig ) ) - { - if ( self istouching( elevator.body.trig ) ) - { - return elevator.body; - } - } - _k127 = getNextArrayKey( _a127, _k127 ); - } - escape_pod = getent( "elevator_bldg1a_body", "targetname" ); - if ( self istouching( escape_pod ) ) - { - return escape_pod; - } - if ( distance( escape_pod.origin, self.origin ) < 128 ) - { - return escape_pod; - } - return undefined; + foreach ( elevator in level.elevators ) + { + if ( isdefined( elevator.body.trig ) ) + { + if ( self istouching( elevator.body.trig ) ) + return elevator.body; + } + } + + escape_pod = getent( "elevator_bldg1a_body", "targetname" ); + + if ( self istouching( escape_pod ) ) + return escape_pod; + + if ( distance( escape_pod.origin, self.origin ) < 128 ) + return escape_pod; + + return undefined; } escape_pod_host_migration_respawn_check( escape_pod ) { - wait 0,2; - dif = self.origin[ 2 ] - escape_pod.origin[ 2 ]; + wait 0.2; + dif = self.origin[2] - escape_pod.origin[2]; /# - println( "Escape_pod_host_migration_respawn_check :" ); + println( "Escape_pod_host_migration_respawn_check :" ); #/ /# - println( "dif : " + dif ); + println( "dif : " + dif ); #/ - if ( dif > 100 ) - { + if ( dif > 100 ) + { /# - println( "Finding a better place for the player to be." ); + println( "Finding a better place for the player to be." ); #/ - self maps/mp/gametypes_zm/_hostmigration::hostmigration_put_player_in_better_place(); - } - else - { + self maps\mp\gametypes_zm\_hostmigration::hostmigration_put_player_in_better_place(); + } + else + { /# - println( "Taking no action." ); + println( "Taking no action." ); #/ - } + } } is_self_on_elevator() { - elevator_volumes = []; - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1d", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3a", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3d", "targetname" ); - _a190 = elevator_volumes; - _k190 = getFirstArrayKey( _a190 ); - while ( isDefined( _k190 ) ) - { - zone = _a190[ _k190 ]; - if ( self istouching( zone ) ) - { - return 1; - } - _k190 = getNextArrayKey( _a190, _k190 ); - } - _a198 = level.elevators; - _k198 = getFirstArrayKey( _a198 ); - while ( isDefined( _k198 ) ) - { - elevator = _a198[ _k198 ]; - if ( isDefined( elevator.body.trig ) ) - { - if ( self istouching( elevator.body.trig ) ) - { - return 1; - } - } - _k198 = getNextArrayKey( _a198, _k198 ); - } - escape_pod = getent( "elevator_bldg1a_body", "targetname" ); - if ( self istouching( escape_pod ) ) - { - return 1; - } - if ( distance( escape_pod.origin, self.origin ) < 128 ) - { - return 1; - } - return 0; + elevator_volumes = []; + elevator_volumes[elevator_volumes.size] = getent( "elevator_1b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1d", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3a", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3d", "targetname" ); + + foreach ( zone in elevator_volumes ) + { + if ( self istouching( zone ) ) + return true; + } + + foreach ( elevator in level.elevators ) + { + if ( isdefined( elevator.body.trig ) ) + { + if ( self istouching( elevator.body.trig ) ) + return true; + } + } + + escape_pod = getent( "elevator_bldg1a_body", "targetname" ); + + if ( self istouching( escape_pod ) ) + return true; + + if ( distance( escape_pod.origin, self.origin ) < 128 ) + return true; + + return false; } object_is_on_elevator() { - ground_ent = self getgroundent(); - depth = 0; - while ( isDefined( ground_ent ) && depth < 2 ) - { - if ( isDefined( ground_ent.is_elevator ) && ground_ent.is_elevator ) - { - self.elevator_parent = ground_ent; - return 1; - } - new_ground_ent = ground_ent getgroundent(); - if ( !isDefined( new_ground_ent ) || new_ground_ent == ground_ent ) - { - } - else - { - ground_ent = new_ground_ent; - depth++; - } - } - return 0; + ground_ent = self getgroundent(); + + for ( depth = 0; isdefined( ground_ent ) && depth < 2; depth++ ) + { + if ( isdefined( ground_ent.is_elevator ) && ground_ent.is_elevator ) + { + self.elevator_parent = ground_ent; + return true; + } + + new_ground_ent = ground_ent getgroundent(); + + if ( !isdefined( new_ground_ent ) || new_ground_ent == ground_ent ) + break; + + ground_ent = new_ground_ent; + } + + return false; } elevator_level_for_floor( floor ) { - flevel = "0"; - if ( isDefined( self.floors[ "" + ( floor + 1 ) ] ) ) - { - flevel = "" + ( floor + 1 ); - } - else - { - flevel = "0"; - } - return flevel; + flevel = "0"; + + if ( isdefined( self.floors["" + ( floor + 1 )] ) ) + flevel = "" + ( floor + 1 ); + else + flevel = "0"; + + return flevel; } elevator_is_on_floor( floor ) { - if ( self.body.current_level == floor ) - { - return 1; - } - if ( self.floors[ self.body.current_level ].script_location == self.floors[ floor ].script_location ) - { - return 1; - } - return 0; + if ( self.body.current_level == floor ) + return true; + + if ( self.floors[self.body.current_level].script_location == self.floors[floor].script_location ) + return true; + + return false; } elevator_path_nodes( elevatorname, floorname ) { - name = "elevator_" + elevatorname + "_" + floorname; - epaths = getnodearray( name, "script_noteworthy" ); - return epaths; + name = "elevator_" + elevatorname + "_" + floorname; + epaths = getnodearray( name, "script_noteworthy" ); + return epaths; } elevator_paths_onoff( onoff, target ) { - while ( isDefined( self ) && self.size > 0 ) - { - _a354 = self; - _k354 = getFirstArrayKey( _a354 ); - while ( isDefined( _k354 ) ) - { - node = _a354[ _k354 ]; - while ( isDefined( node.script_parameters ) && node.script_parameters == "roof_connect" ) - { - _a358 = target; - _k358 = getFirstArrayKey( _a358 ); - while ( isDefined( _k358 ) ) - { - tnode = _a358[ _k358 ]; - if ( onoff ) - { - maps/mp/zm_highrise_utility::highrise_link_nodes( node, tnode ); - maps/mp/zm_highrise_utility::highrise_link_nodes( tnode, node ); - } - else - { - maps/mp/zm_highrise_utility::highrise_unlink_nodes( node, tnode ); - maps/mp/zm_highrise_utility::highrise_unlink_nodes( tnode, node ); - } - _k358 = getNextArrayKey( _a358, _k358 ); - } - } - _k354 = getNextArrayKey( _a354, _k354 ); - } - } + if ( isdefined( self ) && self.size > 0 ) + { + foreach ( node in self ) + { + if ( isdefined( node.script_parameters ) && node.script_parameters == "roof_connect" ) + { + foreach ( tnode in target ) + { + if ( onoff ) + { + maps\mp\zm_highrise_utility::highrise_link_nodes( node, tnode ); + maps\mp\zm_highrise_utility::highrise_link_nodes( tnode, node ); + continue; + } + + maps\mp\zm_highrise_utility::highrise_unlink_nodes( node, tnode ); + maps\mp\zm_highrise_utility::highrise_unlink_nodes( tnode, node ); + } + } + } + } } elevator_enable_paths( floor ) { - self elevator_disable_paths( floor ); - paths = undefined; - if ( !isDefined( floor ) || !isDefined( self.floors[ floor ].paths ) ) - { - return; - } - else - { - paths = self.floors[ floor ].paths; - } - self.current_paths = paths; - self.current_paths elevator_paths_onoff( 1, self.roof_paths ); + self elevator_disable_paths( floor ); + paths = undefined; + + if ( !isdefined( floor ) || !isdefined( self.floors[floor].paths ) ) + return; + else + paths = self.floors[floor].paths; + + self.current_paths = paths; + self.current_paths elevator_paths_onoff( 1, self.roof_paths ); } elevator_disable_paths( floor ) { - if ( isDefined( self.current_paths ) ) - { - self.current_paths elevator_paths_onoff( 0, self.roof_paths ); - } - self.current_paths = undefined; + if ( isdefined( self.current_paths ) ) + self.current_paths elevator_paths_onoff( 0, self.roof_paths ); + + self.current_paths = undefined; } init_elevator( elevatorname, force_starting_floor, force_starting_origin ) { - if ( !isDefined( level.elevators ) ) - { - level.elevators = []; - } - elevator = spawnstruct(); - elevator.name = elevatorname; - elevator.body = undefined; - level.elevators[ "bldg" + elevatorname ] = elevator; - piece = getent( "elevator_bldg" + elevatorname + "_body", "targetname" ); - piece setmovingplatformenabled( 1 ); - piece.is_moving = 0; - if ( !isDefined( piece ) ) - { + if ( !isdefined( level.elevators ) ) + level.elevators = []; + + elevator = spawnstruct(); + elevator.name = elevatorname; + elevator.body = undefined; + level.elevators["bldg" + elevatorname] = elevator; + piece = getent( "elevator_bldg" + elevatorname + "_body", "targetname" ); + piece setmovingplatformenabled( 1 ); + piece.is_moving = 0; + + if ( !isdefined( piece ) ) + { /# - iprintlnbold( "Elevator with name: bldg" + elevatorname + " not found." ); + iprintlnbold( "Elevator with name: bldg" + elevatorname + " not found." ); #/ - return; - } - trig = getent( "elevator_bldg" + elevatorname + "_trigger", "targetname" ); - if ( isDefined( trig ) ) - { - trig enablelinkto(); - trig linkto( piece ); - trig setmovingplatformenabled( 1 ); - piece.trig = trig; - piece thread elevator_roof_watcher(); - } - elevator.body = piece; - piece.is_elevator = 1; - elevator.body perkelevatoruseanimtree(); + return; + } + + trig = getent( "elevator_bldg" + elevatorname + "_trigger", "targetname" ); + + if ( isdefined( trig ) ) + { + trig enablelinkto(); + trig linkto( piece ); + trig setmovingplatformenabled( 1 ); + piece.trig = trig; + piece thread elevator_roof_watcher(); + } + + elevator.body = piece; + piece.is_elevator = 1; + elevator.body perkelevatoruseanimtree(); /# - assert( isDefined( piece.script_location ) ); + assert( isdefined( piece.script_location ) ); #/ - elevator.body.current_level = piece.script_location; - elevator.body.starting_floor = piece.script_location; - elevator.roof_paths = elevator_path_nodes( "bldg" + elevatorname, "moving" ); - elevator.floors = []; - elevator.floors[ piece.script_location ] = piece; - elevator.floors[ piece.script_location ].starting_position = piece.origin; - elevator.floors[ piece.script_location ].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); - while ( isDefined( piece.target ) ) - { - piece = getstruct( piece.target, "targetname" ); - piece.is_elevator = 1; - if ( !isDefined( elevator.floors[ piece.script_location ] ) ) - { - elevator.floors[ piece.script_location ] = piece; - elevator.floors[ piece.script_location ].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); - } - } - if ( elevatorname != "3c" ) - { - elevator.floors[ "" + elevator.floors.size ] = elevator.floors[ "1" ]; - } - if ( isDefined( force_starting_floor ) ) - { - elevator.body.force_starting_floor = force_starting_floor; - } - if ( isDefined( force_starting_origin ) ) - { - elevator.body.force_starting_origin_offset = force_starting_origin; - } - level thread elevator_think( elevator ); - level thread elevator_depart_early( elevator ); - level thread elevator_sparks_fx( elevator ); + elevator.body.current_level = piece.script_location; + elevator.body.starting_floor = piece.script_location; + elevator.roof_paths = elevator_path_nodes( "bldg" + elevatorname, "moving" ); + elevator.floors = []; + elevator.floors[piece.script_location] = piece; + elevator.floors[piece.script_location].starting_position = piece.origin; + + for ( elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ); isdefined( piece.target ); elevator.floors[piece.script_location].paths = elevator_path_nodes( "bldg" + elevatorname, "floor" + piece.script_location ) ) + { + piece = getstruct( piece.target, "targetname" ); + piece.is_elevator = 1; + asm_cond( !isdefined( elevator.floors[piece.script_location] ), loc_2843 ); + elevator.floors[piece.script_location] = piece; + } + + if ( elevatorname != "3c" ) + elevator.floors["" + elevator.floors.size] = elevator.floors["1"]; + + if ( isdefined( force_starting_floor ) ) + elevator.body.force_starting_floor = force_starting_floor; + + if ( isdefined( force_starting_origin ) ) + elevator.body.force_starting_origin_offset = force_starting_origin; + + level thread elevator_think( elevator ); + level thread elevator_depart_early( elevator ); + level thread elevator_sparks_fx( elevator ); /# - init_elevator_devgui( "bldg" + elevatorname, elevator ); + init_elevator_devgui( "bldg" + elevatorname, elevator ); #/ } elevator_roof_watcher() { - level endon( "end_game" ); - while ( 1 ) - { - self.trig waittill( "trigger", who ); - while ( isDefined( who ) && isplayer( who ) ) - { - while ( isDefined( who ) && who istouching( self.trig ) ) - { - if ( self.is_moving ) - { - self waittill_any( "movedone", "forcego" ); - } - zombies = getaiarray( level.zombie_team ); - if ( isDefined( zombies ) && zombies.size > 0 ) - { - _a535 = zombies; - _k535 = getFirstArrayKey( _a535 ); - while ( isDefined( _k535 ) ) - { - zombie = _a535[ _k535 ]; - climber = zombie zombie_for_elevator_unseen(); - if ( isDefined( climber ) ) - { - break; - } - _k535 = getNextArrayKey( _a535, _k535 ); - } - if ( isDefined( climber ) ) - { - zombie zombie_climb_elevator( self ); - wait randomint( 30 ); - } - } - wait 0,5; - } - } - wait 0,5; - } + level endon( "end_game" ); + + while ( true ) + { + self.trig waittill( "trigger", who ); + + if ( isdefined( who ) && isplayer( who ) ) + { + while ( isdefined( who ) && who istouching( self.trig ) ) + { + if ( self.is_moving ) + self waittill_any( "movedone", "forcego" ); + + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( zombies ) && zombies.size > 0 ) + { + foreach ( zombie in zombies ) + { + climber = zombie zombie_for_elevator_unseen(); + + if ( isdefined( climber ) ) + continue; + } + + if ( isdefined( climber ) ) + { + zombie zombie_climb_elevator( self ); + wait( randomint( 30 ) ); + } + } + + wait 0.5; + } + } + + wait 0.5; + } } zombie_for_elevator_unseen() { - how_close = 600; - distance_squared_check = how_close * how_close; - zombie_seen = 0; - players = get_players(); - i = 0; - while ( i < players.size ) - { - can_be_seen = self maps/mp/zm_highrise_distance_tracking::player_can_see_me( players[ i ] ); - if ( can_be_seen || distancesquared( self.origin, players[ i ].origin ) < distance_squared_check ) - { - return undefined; - } - i++; - } - return self; + how_close = 600; + distance_squared_check = how_close * how_close; + zombie_seen = 0; + players = get_players(); + + for ( i = 0; i < players.size; i++ ) + { + can_be_seen = self maps\mp\zm_highrise_distance_tracking::player_can_see_me( players[i] ); + + if ( can_be_seen || distancesquared( self.origin, players[i].origin ) < distance_squared_check ) + return undefined; + } + + return self; } zombie_climb_elevator( elev ) { - self endon( "death" ); - self endon( "removed" ); - self endon( "sonicBoom" ); - level endon( "intermission" ); - self notify( "stop_find_flesh" ); - self.dont_throw_gib = 1; - self.forcemovementscriptstate = 1; - self.attachent = elev; - self linkto( self.attachent, "tag_origin" ); - self.jumpingtoelev = 1; - animstate = "zm_traverse_elevator"; - anim_name = "zm_zombie_climb_elevator"; - tag_origin = self.attachent gettagorigin( "tag_origin" ); - tag_angles = self.attachent gettagangles( "tag_origin" ); - self animmode( "noclip" ); - self animscripted( tag_origin, tag_angles, animstate, anim_name ); - self maps/mp/animscripts/zm_shared::donotetracks( "traverse_anim" ); - self animmode( "gravity" ); - self.dont_throw_gib = 0; - self.jumpingtoelev = 0; - self.forcemovementscriptstate = 0; - self unlink(); - self setgoalpos( self.origin ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); + self endon( "death" ); + self endon( "removed" ); + self endon( "sonicBoom" ); + level endon( "intermission" ); + self notify( "stop_find_flesh" ); + self.dont_throw_gib = 1; + self.forcemovementscriptstate = 1; + self.attachent = elev; + self linkto( self.attachent, "tag_origin" ); + self.jumpingtoelev = 1; + animstate = "zm_traverse_elevator"; + anim_name = "zm_zombie_climb_elevator"; + tag_origin = self.attachent gettagorigin( "tag_origin" ); + tag_angles = self.attachent gettagangles( "tag_origin" ); + self animmode( "noclip" ); + self animscripted( tag_origin, tag_angles, animstate, anim_name ); + self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" ); + self animmode( "gravity" ); + self.dont_throw_gib = 0; + self.jumpingtoelev = 0; + self.forcemovementscriptstate = 0; + self unlink(); + self setgoalpos( self.origin ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); } elev_clean_up_corpses() { - corpses = getcorpsearray(); - zombies = getaiarray( level.zombie_team ); - while ( isDefined( corpses ) ) - { - i = 0; - while ( i < corpses.size ) - { - if ( corpses[ i ] istouching( self.trig ) ) - { - corpses[ i ] thread elev_remove_corpses(); - } - i++; - } - } - while ( isDefined( zombies ) ) - { - _a633 = zombies; - _k633 = getFirstArrayKey( _a633 ); - while ( isDefined( _k633 ) ) - { - zombie = _a633[ _k633 ]; - if ( zombie istouching( self.trig ) && zombie.health <= 0 ) - { - zombie thread elev_remove_corpses(); - } - _k633 = getNextArrayKey( _a633, _k633 ); - } - } + corpses = getcorpsearray(); + zombies = getaiarray( level.zombie_team ); + + if ( isdefined( corpses ) ) + { + for ( i = 0; i < corpses.size; i++ ) + { + if ( corpses[i] istouching( self.trig ) ) + corpses[i] thread elev_remove_corpses(); + } + } + + if ( isdefined( zombies ) ) + { + foreach ( zombie in zombies ) + { + if ( zombie istouching( self.trig ) && zombie.health <= 0 ) + zombie thread elev_remove_corpses(); + } + } } elev_remove_corpses() { - playfx( level._effect[ "zomb_gib" ], self.origin ); - self delete(); + playfx( level._effect["zomb_gib"], self.origin ); + self delete(); } elevator_next_floor( elevator, last, justchecking ) { - if ( isDefined( elevator.body.force_starting_floor ) ) - { - floor = elevator.body.force_starting_floor; - if ( !justchecking ) - { - elevator.body.force_starting_floor = undefined; - } - return floor; - } - if ( !isDefined( last ) ) - { - return 0; - } - if ( ( last + 1 ) < elevator.floors.size ) - { - return last + 1; - } - return 0; + if ( isdefined( elevator.body.force_starting_floor ) ) + { + floor = elevator.body.force_starting_floor; + + if ( !justchecking ) + elevator.body.force_starting_floor = undefined; + + return floor; + } + + if ( !isdefined( last ) ) + return 0; + + if ( last + 1 < elevator.floors.size ) + return last + 1; + + return 0; } elevator_initial_wait( elevator, minwait, maxwait, delaybeforeleaving ) { - elevator.body endon( "forcego" ); - elevator.body waittill_any_or_timeout( randomintrange( minwait, maxwait ), "depart_early" ); - if ( !is_true( elevator.body.lock_doors ) ) - { - elevator.body setanim( level.perk_elevators_anims[ elevator.body.perk_type ][ 0 ] ); - } - if ( !is_true( elevator.body.departing_early ) ) - { - wait delaybeforeleaving; - } - if ( elevator.body.perk_type == "specialty_weapupgrade" ) - { - while ( flag( "pack_machine_in_use" ) ) - { - wait 0,5; - } - wait randomintrange( 1, 3 ); - } - while ( isDefined( level.elevators_stop ) || level.elevators_stop && isDefined( elevator.body.elevator_stop ) && elevator.body.elevator_stop ) - { - wait 0,05; - } + elevator.body endon( "forcego" ); + elevator.body waittill_any_or_timeout( randomintrange( minwait, maxwait ), "depart_early" ); + + if ( !is_true( elevator.body.lock_doors ) ) + elevator.body setanim( level.perk_elevators_anims[elevator.body.perk_type][0] ); + + if ( !is_true( elevator.body.departing_early ) ) + wait( delaybeforeleaving ); + + if ( elevator.body.perk_type == "specialty_weapupgrade" ) + { + while ( flag( "pack_machine_in_use" ) ) + wait 0.5; + + wait( randomintrange( 1, 3 ) ); + } + + while ( isdefined( level.elevators_stop ) && level.elevators_stop || isdefined( elevator.body.elevator_stop ) && elevator.body.elevator_stop ) + wait 0.05; } elevator_set_moving( moving ) { - self.body.is_moving = moving; - if ( self.body is_pap() ) - { - level.pap_moving = moving; - } + self.body.is_moving = moving; + + if ( self.body is_pap() ) + level.pap_moving = moving; } predict_floor( elevator, next, speed ) { - next = elevator_next_floor( elevator, next, 1 ); - if ( isDefined( elevator.floors[ "" + ( next + 1 ) ] ) ) - { - elevator.body.next_level = "" + ( next + 1 ); - } - else - { - start_location = 1; - elevator.body.next_level = "0"; - } - floor_stop = elevator.floors[ elevator.body.next_level ]; - floor_goal = undefined; - cur_level_start_pos = elevator.floors[ elevator.body.next_level ].starting_position; - start_level_start_pos = elevator.floors[ elevator.body.starting_floor ].starting_position; - if ( elevator.body.next_level == elevator.body.starting_floor || isDefined( cur_level_start_pos ) && isDefined( start_level_start_pos ) && cur_level_start_pos == start_level_start_pos ) - { - floor_goal = cur_level_start_pos; - } - else - { - floor_goal = floor_stop.origin; - } - dist = distance( elevator.body.origin, floor_goal ); - time = dist / speed; - if ( dist > 0 ) - { - if ( elevator.body.origin[ 2 ] > floor_goal[ 2 ] ) - { - clientnotify( elevator.name + "_d" ); - return; - } - else - { - clientnotify( elevator.name + "_u" ); - } - } + next = elevator_next_floor( elevator, next, 1 ); + + if ( isdefined( elevator.floors["" + ( next + 1 )] ) ) + elevator.body.next_level = "" + ( next + 1 ); + else + { + start_location = 1; + elevator.body.next_level = "0"; + } + + floor_stop = elevator.floors[elevator.body.next_level]; + floor_goal = undefined; + cur_level_start_pos = elevator.floors[elevator.body.next_level].starting_position; + start_level_start_pos = elevator.floors[elevator.body.starting_floor].starting_position; + + if ( elevator.body.next_level == elevator.body.starting_floor || isdefined( cur_level_start_pos ) && isdefined( start_level_start_pos ) && cur_level_start_pos == start_level_start_pos ) + floor_goal = cur_level_start_pos; + else + floor_goal = floor_stop.origin; + + dist = distance( elevator.body.origin, floor_goal ); + time = dist / speed; + + if ( dist > 0 ) + { + if ( elevator.body.origin[2] > floor_goal[2] ) + clientnotify( elevator.name + "_d" ); + else + clientnotify( elevator.name + "_u" ); + } } elevator_think( elevator ) { - current_floor = elevator.body.current_location; - delaybeforeleaving = 5; - skipinitialwait = 0; - speed = 100; - minwait = 5; - maxwait = 20; - flag_wait( "perks_ready" ); - if ( isDefined( elevator.body.force_starting_floor ) ) - { - elevator.body.current_level = "" + elevator.body.force_starting_floor; - elevator.body.origin = elevator.floors[ elevator.body.current_level ].origin; - if ( isDefined( elevator.body.force_starting_origin_offset ) ) - { - elevator.body.origin += ( 0, 0, elevator.body.force_starting_origin_offset ); - } - } - elevator.body.can_move = 1; - elevator elevator_set_moving( 0 ); - elevator elevator_enable_paths( elevator.body.current_level ); - if ( elevator.body.perk_type == "vending_revive" ) - { - minwait = level.packapunch_timeout; - maxwait = minwait + 10; - elevator thread quick_revive_solo_watch(); - } - if ( elevator.body.perk_type == "vending_revive" && flag( "solo_game" ) ) - { - } - else - { - flag_wait( "power_on" ); - } - elevator.body perkelevatordoor( 1 ); - next = undefined; - while ( 1 ) - { - start_location = 0; - if ( isDefined( elevator.body.force_starting_floor ) ) - { - skipinitialwait = 1; - } - elevator.body.departing = 1; - if ( !is_true( elevator.body.lock_doors ) ) - { - elevator.body setanim( level.perk_elevators_anims[ elevator.body.perk_type ][ 1 ] ); - } - predict_floor( elevator, next, speed ); - if ( !is_true( skipinitialwait ) ) - { - elevator_initial_wait( elevator, minwait, maxwait, delaybeforeleaving ); - if ( !is_true( elevator.body.lock_doors ) ) - { - elevator.body setanim( level.perk_elevators_anims[ elevator.body.perk_type ][ 1 ] ); - } - } - next = elevator_next_floor( elevator, next, 0 ); - if ( isDefined( elevator.floors[ "" + ( next + 1 ) ] ) ) - { - elevator.body.next_level = "" + ( next + 1 ); - } - else - { - start_location = 1; - elevator.body.next_level = "0"; - } - floor_stop = elevator.floors[ elevator.body.next_level ]; - floor_goal = undefined; - cur_level_start_pos = elevator.floors[ elevator.body.next_level ].starting_position; - start_level_start_pos = elevator.floors[ elevator.body.starting_floor ].starting_position; - if ( elevator.body.next_level == elevator.body.starting_floor || isDefined( cur_level_start_pos ) && isDefined( start_level_start_pos ) && cur_level_start_pos == start_level_start_pos ) - { - floor_goal = cur_level_start_pos; - } - else - { - floor_goal = floor_stop.origin; - } - dist = distance( elevator.body.origin, floor_goal ); - time = dist / speed; - if ( dist > 0 ) - { - if ( elevator.body.origin[ 2 ] > floor_goal[ 2 ] ) - { - clientnotify( elevator.name + "_d" ); - break; - } - else - { - clientnotify( elevator.name + "_u" ); - } - } - if ( is_true( start_location ) ) - { - elevator.body thread squashed_death_alarm(); - if ( !skipinitialwait ) - { - wait 3; - } - } - skipinitialwait = 0; - elevator.body.current_level = elevator.body.next_level; - elevator notify( "floor_changed" ); - elevator elevator_disable_paths( elevator.body.current_level ); - elevator.body.departing = 0; - elevator elevator_set_moving( 1 ); - if ( dist > 0 ) - { - elevator.body moveto( floor_goal, time, time * 0,25, time * 0,25 ); - if ( isDefined( elevator.body.trig ) ) - { - elevator.body thread elev_clean_up_corpses(); - } - elevator.body thread elevator_move_sound(); - elevator.body waittill_any( "movedone", "forcego" ); - } - elevator elevator_set_moving( 0 ); - elevator elevator_enable_paths( elevator.body.current_level ); - if ( elevator.body.perk_type == "vending_revive" && !flag( "solo_game" ) && !flag( "power_on" ) ) - { - flag_wait( "power_on" ); - } - } + current_floor = elevator.body.current_location; + delaybeforeleaving = 5; + skipinitialwait = 0; + speed = 100; + minwait = 5; + maxwait = 20; + flag_wait( "perks_ready" ); + + if ( isdefined( elevator.body.force_starting_floor ) ) + { + elevator.body.current_level = "" + elevator.body.force_starting_floor; + elevator.body.origin = elevator.floors[elevator.body.current_level].origin; + + if ( isdefined( elevator.body.force_starting_origin_offset ) ) + elevator.body.origin += ( 0, 0, elevator.body.force_starting_origin_offset ); + } + + elevator.body.can_move = 1; + elevator elevator_set_moving( 0 ); + elevator elevator_enable_paths( elevator.body.current_level ); + + if ( elevator.body.perk_type == "vending_revive" ) + { + minwait = level.packapunch_timeout; + maxwait = minwait + 10; + elevator thread quick_revive_solo_watch(); + } + + if ( elevator.body.perk_type == "vending_revive" && flag( "solo_game" ) ) + { + + } + else + flag_wait( "power_on" ); + + elevator.body perkelevatordoor( 1 ); + next = undefined; + + while ( true ) + { + start_location = 0; + + if ( isdefined( elevator.body.force_starting_floor ) ) + skipinitialwait = 1; + + elevator.body.departing = 1; + + if ( !is_true( elevator.body.lock_doors ) ) + elevator.body setanim( level.perk_elevators_anims[elevator.body.perk_type][1] ); + + predict_floor( elevator, next, speed ); + + if ( !is_true( skipinitialwait ) ) + { + elevator_initial_wait( elevator, minwait, maxwait, delaybeforeleaving ); + + if ( !is_true( elevator.body.lock_doors ) ) + elevator.body setanim( level.perk_elevators_anims[elevator.body.perk_type][1] ); + } + + next = elevator_next_floor( elevator, next, 0 ); + + if ( isdefined( elevator.floors["" + ( next + 1 )] ) ) + elevator.body.next_level = "" + ( next + 1 ); + else + { + start_location = 1; + elevator.body.next_level = "0"; + } + + floor_stop = elevator.floors[elevator.body.next_level]; + floor_goal = undefined; + cur_level_start_pos = elevator.floors[elevator.body.next_level].starting_position; + start_level_start_pos = elevator.floors[elevator.body.starting_floor].starting_position; + + if ( elevator.body.next_level == elevator.body.starting_floor || isdefined( cur_level_start_pos ) && isdefined( start_level_start_pos ) && cur_level_start_pos == start_level_start_pos ) + floor_goal = cur_level_start_pos; + else + floor_goal = floor_stop.origin; + + dist = distance( elevator.body.origin, floor_goal ); + time = dist / speed; + + if ( dist > 0 ) + { + if ( elevator.body.origin[2] > floor_goal[2] ) + clientnotify( elevator.name + "_d" ); + else + clientnotify( elevator.name + "_u" ); + } + + if ( is_true( start_location ) ) + { + elevator.body thread squashed_death_alarm(); + + if ( !skipinitialwait ) + wait 3; + } + + skipinitialwait = 0; + elevator.body.current_level = elevator.body.next_level; + elevator notify( "floor_changed" ); + elevator elevator_disable_paths( elevator.body.current_level ); + elevator.body.departing = 0; + elevator elevator_set_moving( 1 ); + + if ( dist > 0 ) + { + elevator.body moveto( floor_goal, time, time * 0.25, time * 0.25 ); + + if ( isdefined( elevator.body.trig ) ) + elevator.body thread elev_clean_up_corpses(); + + elevator.body thread elevator_move_sound(); + elevator.body waittill_any( "movedone", "forcego" ); + } + + elevator elevator_set_moving( 0 ); + elevator elevator_enable_paths( elevator.body.current_level ); + + if ( elevator.body.perk_type == "vending_revive" && !flag( "solo_game" ) && !flag( "power_on" ) ) + flag_wait( "power_on" ); + } } is_pap() { - return self.perk_type == "specialty_weapupgrade"; + return self.perk_type == "specialty_weapupgrade"; } squashed_death_alarm() { - if ( !is_true( self.squashed_death_alarm ) ) - { - self.squashed_death_alarm = 1; - alarm_origin = spawn( "script_origin", self squashed_death_alarm_nearest_point() ); - alarm_origin playloopsound( "amb_alarm_bell", 0,1 ); - self waittill_any( "movedone", "forcego" ); - alarm_origin delete(); - self.squashed_death_alarm = 0; - } + if ( !is_true( self.squashed_death_alarm ) ) + { + self.squashed_death_alarm = 1; + alarm_origin = spawn( "script_origin", self squashed_death_alarm_nearest_point() ); + alarm_origin playloopsound( "amb_alarm_bell", 0.1 ); + self waittill_any( "movedone", "forcego" ); + alarm_origin delete(); + self.squashed_death_alarm = 0; + } } squashed_death_alarm_nearest_point() { - positions = array( ( 1653, 2267, 3527 ), ( 1962, 1803, 3575 ), ( 1379, 1224, 3356 ), ( 3161, -35, 3032 ), ( 2745, -672, 3014 ), ( 2404, -754, 3019 ), ( 1381, -660, 2842 ) ); - closest = vectorScale( ( 0, 1, 0 ), 999999 ); - _a965 = positions; - _k965 = getFirstArrayKey( _a965 ); - while ( isDefined( _k965 ) ) - { - vector = _a965[ _k965 ]; - if ( distance2dsquared( self.origin, vector ) < distance2dsquared( self.origin, closest ) ) - { - closest = vector; - } - _k965 = getNextArrayKey( _a965, _k965 ); - } - return closest; + positions = array( ( 1653, 2267, 3527 ), ( 1962, 1803, 3575 ), ( 1379, 1224, 3356 ), ( 3161, -35, 3032 ), ( 2745, -672, 3014 ), ( 2404, -754, 3019 ), ( 1381, -660, 2842 ) ); + closest = vectorscale( ( 1, 1, 1 ), 999999.0 ); + + foreach ( vector in positions ) + { + if ( distance2dsquared( self.origin, vector ) < distance2dsquared( self.origin, closest ) ) + closest = vector; + } + + return closest; } elevator_move_sound() { - self playsound( "zmb_elevator_ding" ); - wait 0,4; - self playsound( "zmb_elevator_ding" ); - self playsound( "zmb_elevator_run_start" ); - self playloopsound( "zmb_elevator_run", 0,5 ); - self waittill( "movedone" ); - self stoploopsound( 0,5 ); - self playsound( "zmb_elevator_run_stop" ); - self playsound( "zmb_elevator_ding" ); + self playsound( "zmb_elevator_ding" ); + wait 0.4; + self playsound( "zmb_elevator_ding" ); + self playsound( "zmb_elevator_run_start" ); + self playloopsound( "zmb_elevator_run", 0.5 ); + + self waittill( "movedone" ); + + self stoploopsound( 0.5 ); + self playsound( "zmb_elevator_run_stop" ); + self playsound( "zmb_elevator_ding" ); } init_elevator_perks() { - level.elevator_perks = []; - level.elevator_perks_building = []; - level.elevator_perks_building[ "green" ] = []; - level.elevator_perks_building[ "blue" ] = []; - level.elevator_perks_building[ "green" ][ 0 ] = spawnstruct(); - level.elevator_perks_building[ "green" ][ 0 ].model = "zombie_vending_revive"; - level.elevator_perks_building[ "green" ][ 0 ].script_noteworthy = "specialty_quickrevive"; - level.elevator_perks_building[ "green" ][ 0 ].turn_on_notify = "revive_on"; - a = 1; - b = 2; - if ( randomint( 100 ) > 50 ) - { - a = 2; - b = 1; - } - level.elevator_perks_building[ "green" ][ a ] = spawnstruct(); - level.elevator_perks_building[ "green" ][ a ].model = "p6_zm_vending_chugabud"; - level.elevator_perks_building[ "green" ][ a ].script_noteworthy = "specialty_finalstand"; - level.elevator_perks_building[ "green" ][ a ].turn_on_notify = "chugabud_on"; - level.elevator_perks_building[ "green" ][ b ] = spawnstruct(); - level.elevator_perks_building[ "green" ][ b ].model = "zombie_vending_sleight"; - level.elevator_perks_building[ "green" ][ b ].script_noteworthy = "specialty_fastreload"; - level.elevator_perks_building[ "green" ][ b ].turn_on_notify = "sleight_on"; - level.elevator_perks_building[ "blue" ][ 0 ] = spawnstruct(); - level.elevator_perks_building[ "blue" ][ 0 ].model = "zombie_vending_three_gun"; - level.elevator_perks_building[ "blue" ][ 0 ].script_noteworthy = "specialty_additionalprimaryweapon"; - level.elevator_perks_building[ "blue" ][ 0 ].turn_on_notify = "specialty_additionalprimaryweapon_power_on"; - level.elevator_perks_building[ "blue" ][ 1 ] = spawnstruct(); - level.elevator_perks_building[ "blue" ][ 1 ].model = "zombie_vending_jugg"; - level.elevator_perks_building[ "blue" ][ 1 ].script_noteworthy = "specialty_armorvest"; - level.elevator_perks_building[ "blue" ][ 1 ].turn_on_notify = "juggernog_on"; - level.elevator_perks_building[ "blue" ][ 2 ] = spawnstruct(); - level.elevator_perks_building[ "blue" ][ 2 ].model = "zombie_vending_doubletap2"; - level.elevator_perks_building[ "blue" ][ 2 ].script_noteworthy = "specialty_rof"; - level.elevator_perks_building[ "blue" ][ 2 ].turn_on_notify = "doubletap_on"; - level.elevator_perks_building[ "blue" ][ 3 ] = spawnstruct(); - level.elevator_perks_building[ "blue" ][ 3 ].model = "p6_anim_zm_buildable_pap"; - level.elevator_perks_building[ "blue" ][ 3 ].script_noteworthy = "specialty_weapupgrade"; - level.elevator_perks_building[ "blue" ][ 3 ].turn_on_notify = "Pack_A_Punch_on"; - players_expected = getnumexpectedplayers(); - level.override_perk_targetname = "zm_perk_machine_override"; - level.elevator_perks_building[ "blue" ] = array_randomize( level.elevator_perks_building[ "blue" ] ); - level.elevator_perks = arraycombine( level.elevator_perks_building[ "green" ], level.elevator_perks_building[ "blue" ], 0, 0 ); - random_perk_structs = []; - revive_perk_struct = getstruct( "force_quick_revive", "targetname" ); - revive_perk_struct = getstruct( revive_perk_struct.target, "targetname" ); - perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); - i = 0; - while ( i < perk_structs.size ) - { - random_perk_structs[ i ] = getstruct( perk_structs[ i ].target, "targetname" ); - random_perk_structs[ i ].script_parameters = perk_structs[ i ].script_parameters; - random_perk_structs[ i ].script_linkent = getent( "elevator_" + perk_structs[ i ].script_parameters + "_body", "targetname" ); - print( random_perk_structs[ i ].script_noteworthy + " " + random_perk_structs[ i ].script_parameters ); - i++; - } - green_structs = []; - blue_structs = []; - _a1075 = random_perk_structs; - _k1075 = getFirstArrayKey( _a1075 ); - while ( isDefined( _k1075 ) ) - { - perk_struct = _a1075[ _k1075 ]; - if ( isDefined( perk_struct.script_parameters ) ) - { - if ( issubstr( perk_struct.script_parameters, "bldg1" ) ) - { - green_structs[ green_structs.size ] = perk_struct; - break; - } - else - { - blue_structs[ blue_structs.size ] = perk_struct; - } - } - _k1075 = getNextArrayKey( _a1075, _k1075 ); - } - green_structs = array_exclude( green_structs, revive_perk_struct ); - green_structs = array_randomize( green_structs ); - blue_structs = array_randomize( blue_structs ); - level.random_perk_structs = array( revive_perk_struct ); - level.random_perk_structs = arraycombine( level.random_perk_structs, green_structs, 0, 0 ); - level.random_perk_structs = arraycombine( level.random_perk_structs, blue_structs, 0, 0 ); - i = 0; - while ( i < level.elevator_perks.size ) - { - if ( !isDefined( level.random_perk_structs[ i ] ) ) - { - i++; - continue; - } - else - { - level.random_perk_structs[ i ].targetname = "zm_perk_machine_override"; - level.random_perk_structs[ i ].model = level.elevator_perks[ i ].model; - level.random_perk_structs[ i ].script_noteworthy = level.elevator_perks[ i ].script_noteworthy; - level.random_perk_structs[ i ].turn_on_notify = level.elevator_perks[ i ].turn_on_notify; - if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) ) - { - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = []; - } - level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_perk_structs[ i ]; - } - i++; - } + level.elevator_perks = []; + level.elevator_perks_building = []; + level.elevator_perks_building["green"] = []; + level.elevator_perks_building["blue"] = []; + level.elevator_perks_building["green"][0] = spawnstruct(); + level.elevator_perks_building["green"][0].model = "zombie_vending_revive"; + level.elevator_perks_building["green"][0].script_noteworthy = "specialty_quickrevive"; + level.elevator_perks_building["green"][0].turn_on_notify = "revive_on"; + a = 1; + b = 2; + + if ( randomint( 100 ) > 50 ) + { + a = 2; + b = 1; + } + + level.elevator_perks_building["green"][a] = spawnstruct(); + level.elevator_perks_building["green"][a].model = "p6_zm_vending_chugabud"; + level.elevator_perks_building["green"][a].script_noteworthy = "specialty_finalstand"; + level.elevator_perks_building["green"][a].turn_on_notify = "chugabud_on"; + level.elevator_perks_building["green"][b] = spawnstruct(); + level.elevator_perks_building["green"][b].model = "zombie_vending_sleight"; + level.elevator_perks_building["green"][b].script_noteworthy = "specialty_fastreload"; + level.elevator_perks_building["green"][b].turn_on_notify = "sleight_on"; + level.elevator_perks_building["blue"][0] = spawnstruct(); + level.elevator_perks_building["blue"][0].model = "zombie_vending_three_gun"; + level.elevator_perks_building["blue"][0].script_noteworthy = "specialty_additionalprimaryweapon"; + level.elevator_perks_building["blue"][0].turn_on_notify = "specialty_additionalprimaryweapon_power_on"; + level.elevator_perks_building["blue"][1] = spawnstruct(); + level.elevator_perks_building["blue"][1].model = "zombie_vending_jugg"; + level.elevator_perks_building["blue"][1].script_noteworthy = "specialty_armorvest"; + level.elevator_perks_building["blue"][1].turn_on_notify = "juggernog_on"; + level.elevator_perks_building["blue"][2] = spawnstruct(); + level.elevator_perks_building["blue"][2].model = "zombie_vending_doubletap2"; + level.elevator_perks_building["blue"][2].script_noteworthy = "specialty_rof"; + level.elevator_perks_building["blue"][2].turn_on_notify = "doubletap_on"; + level.elevator_perks_building["blue"][3] = spawnstruct(); + level.elevator_perks_building["blue"][3].model = "p6_anim_zm_buildable_pap"; + level.elevator_perks_building["blue"][3].script_noteworthy = "specialty_weapupgrade"; + level.elevator_perks_building["blue"][3].turn_on_notify = "Pack_A_Punch_on"; + players_expected = getnumexpectedplayers(); + level.override_perk_targetname = "zm_perk_machine_override"; + level.elevator_perks_building["blue"] = array_randomize( level.elevator_perks_building["blue"] ); + level.elevator_perks = arraycombine( level.elevator_perks_building["green"], level.elevator_perks_building["blue"], 0, 0 ); + random_perk_structs = []; + revive_perk_struct = getstruct( "force_quick_revive", "targetname" ); + revive_perk_struct = getstruct( revive_perk_struct.target, "targetname" ); + perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" ); + + for ( i = 0; i < perk_structs.size; i++ ) + { + random_perk_structs[i] = getstruct( perk_structs[i].target, "targetname" ); + random_perk_structs[i].script_parameters = perk_structs[i].script_parameters; + random_perk_structs[i].script_linkent = getent( "elevator_" + perk_structs[i].script_parameters + "_body", "targetname" ); + } + + green_structs = []; + blue_structs = []; + + foreach ( perk_struct in random_perk_structs ) + { + if ( isdefined( perk_struct.script_parameters ) ) + { + if ( issubstr( perk_struct.script_parameters, "bldg1" ) ) + { + green_structs[green_structs.size] = perk_struct; + continue; + } + + blue_structs[blue_structs.size] = perk_struct; + } + } + + green_structs = array_exclude( green_structs, revive_perk_struct ); + green_structs = array_randomize( green_structs ); + blue_structs = array_randomize( blue_structs ); + level.random_perk_structs = array( revive_perk_struct ); + level.random_perk_structs = arraycombine( level.random_perk_structs, green_structs, 0, 0 ); + level.random_perk_structs = arraycombine( level.random_perk_structs, blue_structs, 0, 0 ); + + for ( i = 0; i < level.elevator_perks.size; i++ ) + { + if ( !isdefined( level.random_perk_structs[i] ) ) + continue; + + level.random_perk_structs[i].targetname = "zm_perk_machine_override"; + level.random_perk_structs[i].model = level.elevator_perks[i].model; + level.random_perk_structs[i].script_noteworthy = level.elevator_perks[i].script_noteworthy; + level.random_perk_structs[i].turn_on_notify = level.elevator_perks[i].turn_on_notify; + + if ( !isdefined( level.struct_class_names["targetname"]["zm_perk_machine_override"] ) ) + level.struct_class_names["targetname"]["zm_perk_machine_override"] = []; + + level.struct_class_names["targetname"]["zm_perk_machine_override"][level.struct_class_names["targetname"]["zm_perk_machine_override"].size] = level.random_perk_structs[i]; + } } random_elevator_perks() { - perks = array( "vending_additionalprimaryweapon", "vending_revive", "vending_chugabud", "vending_jugg", "vending_doubletap", "vending_sleight" ); - _a1127 = perks; - _k1127 = getFirstArrayKey( _a1127 ); - while ( isDefined( _k1127 ) ) - { - perk = _a1127[ _k1127 ]; - machine = getent( perk, "targetname" ); - trigger = getent( perk, "target" ); - if ( !isDefined( machine ) || !isDefined( trigger ) ) - { - } - else - { - elevator = machine get_perk_elevator(); - trigger enablelinkto(); - trigger linkto( machine ); - if ( isDefined( trigger.clip ) ) - { - trigger.clip delete(); - } - if ( isDefined( trigger.bump ) ) - { - trigger.bump enablelinkto(); - trigger.bump linkto( machine ); - } - if ( isDefined( elevator ) ) - { - elevator.perk_type = perk; - elevator elevator_perk_offset( machine, perk ); - machine linkto( elevator ); - machine._linked_ent = elevator; - machine._linked_ent_moves = 1; - machine._linked_ent_offset = machine.origin - elevator.origin; - if ( perk == "vending_revive" ) - { - level.quick_revive_linked_ent = elevator; - level.quick_revive_linked_ent_moves = 1; - level.quick_revive_linked_ent_offset = machine._linked_ent_offset; - } - level thread debugline( machine, elevator ); - } - } - _k1127 = getNextArrayKey( _a1127, _k1127 ); - } - trigger = getent( "specialty_weapupgrade", "script_noteworthy" ); - if ( isDefined( trigger ) ) - { - machine = getent( trigger.target, "targetname" ); - elevator = machine get_perk_elevator(); - trigger enablelinkto(); - trigger linkto( machine ); - if ( isDefined( trigger.clip ) ) - { - trigger.clip delete(); - } - if ( isDefined( elevator ) ) - { - elevator.perk_type = "specialty_weapupgrade"; - machine linkto( elevator ); - level thread debugline( machine, elevator ); - } - } - flag_set( "perks_ready" ); + perks = array( "vending_additionalprimaryweapon", "vending_revive", "vending_chugabud", "vending_jugg", "vending_doubletap", "vending_sleight" ); + + foreach ( perk in perks ) + { + machine = getent( perk, "targetname" ); + trigger = getent( perk, "target" ); + + if ( !isdefined( machine ) || !isdefined( trigger ) ) + continue; + + elevator = machine get_perk_elevator(); + trigger enablelinkto(); + trigger linkto( machine ); + + if ( isdefined( trigger.clip ) ) + trigger.clip delete(); + + if ( isdefined( trigger.bump ) ) + { + trigger.bump enablelinkto(); + trigger.bump linkto( machine ); + } + + if ( isdefined( elevator ) ) + { + elevator.perk_type = perk; + + if ( issubstr( elevator.targetname, "3b" ) ) + machine.origin += vectorscale( ( 0, 0, 1 ), 8.0 ); + + elevator elevator_perk_offset( machine, perk ); + machine linkto( elevator ); + machine._linked_ent = elevator; + machine._linked_ent_moves = 1; + machine._linked_ent_offset = machine.origin - elevator.origin; + + if ( perk == "vending_revive" ) + { + level.quick_revive_linked_ent = elevator; + level.quick_revive_linked_ent_moves = 1; + level.quick_revive_linked_ent_offset = machine._linked_ent_offset; + } + + level thread debugline( machine, elevator ); + } + } + + trigger = getent( "specialty_weapupgrade", "script_noteworthy" ); + + if ( isdefined( trigger ) ) + { + machine = getent( trigger.target, "targetname" ); + elevator = machine get_perk_elevator(); + fwdvec = anglestoright( machine.angles ); + fwdvec = vectornormalize( fwdvec ) * 20; + trigger.origin += ( fwdvec[0], fwdvec[1], 8 ); + trigger enablelinkto(); + trigger linkto( machine ); + + if ( isdefined( trigger.clip ) ) + trigger.clip delete(); + + if ( isdefined( elevator ) ) + { + elevator.perk_type = "specialty_weapupgrade"; + machine linkto( elevator ); + level thread debugline( machine, elevator ); + } + } + + flag_set( "perks_ready" ); } elevator_perk_offset( machine, perk ) { - scale = 14; - switch( perk ) - { - case "vending_revive": - scale = 10; - break; - case "vending_additionalprimaryweapon": - scale = 8; - break; - case "vending_jugg": - scale = 6; - break; - case "vending_doubletap": - scale = 5; - break; - case "vending_chugabud": - scale = -3; - break; - case "vending_packapunch": - scale = 0; - break; - } - if ( scale == 0 ) - { - return; - } - forward = anglesToForward( self.angles ); - machine.origin -= forward * scale; + scale = 14; + + switch ( perk ) + { + case "vending_revive": + scale = 10; + break; + case "vending_additionalprimaryweapon": + scale = 8; + break; + case "vending_jugg": + scale = 6; + break; + case "vending_doubletap": + scale = 5; + break; + case "vending_chugabud": + scale = -3; + break; + case "vending_packapunch": + scale = 0; + break; + } + + if ( scale == 0 ) + return; + + forward = anglestoforward( self.angles ); + machine.origin -= forward * scale; } debugline( ent1, ent2 ) { /# - org = ent2.origin; - while ( 1 ) - { - if ( !isDefined( ent1 ) ) - { - return; - } - line( ent1.origin, org, ( 0, 1, 0 ) ); - wait 0,05; + org = ent2.origin; + + while ( true ) + { + if ( !isdefined( ent1 ) ) + return; + + line( ent1.origin, org, ( 0, 0, 1 ) ); + wait 0.05; + } #/ - } } get_perk_elevator() { - arraylist = level.random_perk_structs; - x = 0; - while ( x < arraylist.size ) - { - struct = arraylist[ x ]; - if ( isDefined( struct.script_noteworthy ) && isDefined( self.targetname ) ) - { - nw = struct.script_noteworthy; - tn = self.targetname; - if ( nw == "specialty_quickrevive" && tn != "vending_revive" && nw == "specialty_fastreload" && tn != "vending_sleight" && nw == "specialty_rof" && tn != "vending_doubletap" && nw == "specialty_armorvest" && tn != "vending_jugg" && nw == "specialty_finalstand" && tn != "vending_chugabud" && nw == "specialty_additionalprimaryweapon" || tn == "vending_additionalprimaryweapon" && nw == "specialty_weapupgrade" && tn == "vending_packapunch" ) - { - if ( isDefined( struct.script_linkent ) ) - { - return struct.script_linkent; - } - } - } - x++; - } - return undefined; + arraylist = level.random_perk_structs; + + for ( x = 0; x < arraylist.size; x++ ) + { + struct = arraylist[x]; + + if ( isdefined( struct.script_noteworthy ) && isdefined( self.targetname ) ) + { + nw = struct.script_noteworthy; + tn = self.targetname; + + if ( nw == "specialty_quickrevive" && tn == "vending_revive" || nw == "specialty_fastreload" && tn == "vending_sleight" || nw == "specialty_rof" && tn == "vending_doubletap" || nw == "specialty_armorvest" && tn == "vending_jugg" || nw == "specialty_finalstand" && tn == "vending_chugabud" || nw == "specialty_additionalprimaryweapon" && tn == "vending_additionalprimaryweapon" || nw == "specialty_weapupgrade" && tn == "vending_packapunch" ) + { + if ( isdefined( struct.script_linkent ) ) + return struct.script_linkent; + } + } + } + + return undefined; } elevator_depart_early( elevator ) { - touchent = elevator.body; - if ( isDefined( elevator.body.trig ) ) - { - touchent = elevator.body.trig; - } - while ( 1 ) - { - while ( is_true( elevator.body.is_moving ) ) - { - wait 0,5; - } - someone_touching_elevator = 0; - players = get_players(); - _a1321 = players; - _k1321 = getFirstArrayKey( _a1321 ); - while ( isDefined( _k1321 ) ) - { - player = _a1321[ _k1321 ]; - if ( player istouching( touchent ) ) - { - someone_touching_elevator = 1; - } - _k1321 = getNextArrayKey( _a1321, _k1321 ); - } - if ( is_true( someone_touching_elevator ) ) - { - someone_still_touching_elevator = 0; - wait 5; - players = get_players(); - _a1336 = players; - _k1336 = getFirstArrayKey( _a1336 ); - while ( isDefined( _k1336 ) ) - { - player = _a1336[ _k1336 ]; - if ( player istouching( touchent ) ) - { - someone_still_touching_elevator = 1; - } - _k1336 = getNextArrayKey( _a1336, _k1336 ); - } - if ( is_true( someone_still_touching_elevator ) ) - { - elevator.body.departing_early = 1; - elevator.body notify( "depart_early" ); - wait 3; - elevator.body.departing_early = 0; - } - } - wait 1; - } + touchent = elevator.body; + + if ( isdefined( elevator.body.trig ) ) + touchent = elevator.body.trig; + + while ( true ) + { + while ( is_true( elevator.body.is_moving ) ) + wait 0.5; + + someone_touching_elevator = 0; + players = get_players(); + + foreach ( player in players ) + { + if ( player istouching( touchent ) ) + someone_touching_elevator = 1; + } + + if ( is_true( someone_touching_elevator ) ) + { + someone_still_touching_elevator = 0; + wait 5; + players = get_players(); + + foreach ( player in players ) + { + if ( player istouching( touchent ) ) + someone_still_touching_elevator = 1; + } + + if ( is_true( someone_still_touching_elevator ) ) + { + elevator.body.departing_early = 1; + elevator.body notify( "depart_early" ); + wait 3; + elevator.body.departing_early = 0; + } + } + + wait 1; + } } elevator_sparks_fx( elevator ) { - while ( 1 ) - { - while ( !is_true( elevator.body.door_state ) ) - { - wait 1; - } - if ( is_true( elevator.body.departing ) ) - { - playfxontag( level._effect[ "perk_elevator_departing" ], elevator.body, "tag_origin" ); - } - else - { - playfxontag( level._effect[ "perk_elevator_idle" ], elevator.body, "tag_origin" ); - } - wait 0,5; - } + while ( true ) + { + while ( !is_true( elevator.body.door_state ) ) + wait 1; + + if ( is_true( elevator.body.departing ) ) + playfxontag( level._effect["perk_elevator_departing"], elevator.body, "tag_origin" ); + else + playfxontag( level._effect["perk_elevator_idle"], elevator.body, "tag_origin" ); + + wait 0.5; + } } faller_location_logic() { - wait 1; - faller_spawn_points = getstructarray( "faller_location", "script_noteworthy" ); - leaper_spawn_points = getstructarray( "leaper_location", "script_noteworthy" ); - spawn_points = arraycombine( faller_spawn_points, leaper_spawn_points, 1, 0 ); - dist_check = 16384; - elevator_names = getarraykeys( level.elevators ); - elevators = []; - i = 0; - while ( i < elevator_names.size ) - { - elevators[ i ] = getent( "elevator_" + elevator_names[ i ] + "_body", "targetname" ); - i++; - } - elevator_volumes = []; - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1d", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3a", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3d", "targetname" ); - level.elevator_volumes = elevator_volumes; - while ( 1 ) - { - _a1409 = spawn_points; - _k1409 = getFirstArrayKey( _a1409 ); - while ( isDefined( _k1409 ) ) - { - point = _a1409[ _k1409 ]; - should_block = 0; - _a1412 = elevators; - _k1412 = getFirstArrayKey( _a1412 ); - while ( isDefined( _k1412 ) ) - { - elevator = _a1412[ _k1412 ]; - if ( distancesquared( elevator.origin, point.origin ) <= dist_check ) - { - should_block = 1; - } - _k1412 = getNextArrayKey( _a1412, _k1412 ); - } - if ( should_block ) - { - point.is_enabled = 0; - point.is_blocked = 1; - } - else if ( isDefined( point.is_blocked ) && point.is_blocked ) - { - point.is_blocked = 0; - } - if ( !isDefined( point.zone_name ) ) - { - } - else - { - zone = level.zones[ point.zone_name ]; - if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) - { - point.is_enabled = 1; - } - } - _k1409 = getNextArrayKey( _a1409, _k1409 ); - } - players = get_players(); - _a1441 = elevator_volumes; - _k1441 = getFirstArrayKey( _a1441 ); - while ( isDefined( _k1441 ) ) - { - volume = _a1441[ _k1441 ]; - should_disable = 0; - _a1444 = players; - _k1444 = getFirstArrayKey( _a1444 ); - while ( isDefined( _k1444 ) ) - { - player = _a1444[ _k1444 ]; - if ( is_player_valid( player ) ) - { - if ( player istouching( volume ) ) - { - should_disable = 1; - } - } - _k1444 = getNextArrayKey( _a1444, _k1444 ); - } - if ( should_disable ) - { - disable_elevator_spawners( volume, spawn_points ); - } - _k1441 = getNextArrayKey( _a1441, _k1441 ); - } - wait 0,5; - } + wait 1; + faller_spawn_points = getstructarray( "faller_location", "script_noteworthy" ); + leaper_spawn_points = getstructarray( "leaper_location", "script_noteworthy" ); + spawn_points = arraycombine( faller_spawn_points, leaper_spawn_points, 1, 0 ); + dist_check = 16384; + elevator_names = getarraykeys( level.elevators ); + elevators = []; + + for ( i = 0; i < elevator_names.size; i++ ) + elevators[i] = getent( "elevator_" + elevator_names[i] + "_body", "targetname" ); + + elevator_volumes = []; + elevator_volumes[elevator_volumes.size] = getent( "elevator_1b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1d", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3a", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3d", "targetname" ); + level.elevator_volumes = elevator_volumes; + + while ( true ) + { + foreach ( point in spawn_points ) + { + should_block = 0; + + foreach ( elevator in elevators ) + { + if ( distancesquared( elevator.origin, point.origin ) <= dist_check ) + should_block = 1; + } + + if ( should_block ) + { + point.is_enabled = 0; + point.is_blocked = 1; + continue; + } + + if ( isdefined( point.is_blocked ) && point.is_blocked ) + point.is_blocked = 0; + + if ( !isdefined( point.zone_name ) ) + continue; + + zone = level.zones[point.zone_name]; + + if ( zone.is_enabled && zone.is_active && zone.is_spawning_allowed ) + point.is_enabled = 1; + } + + players = get_players(); + + foreach ( volume in elevator_volumes ) + { + should_disable = 0; + + foreach ( player in players ) + { + if ( is_player_valid( player ) ) + { + if ( player istouching( volume ) ) + should_disable = 1; + } + } + + if ( should_disable ) + disable_elevator_spawners( volume, spawn_points ); + } + + wait 0.5; + } } disable_elevator_spawners( volume, spawn_points ) { - _a1468 = spawn_points; - _k1468 = getFirstArrayKey( _a1468 ); - while ( isDefined( _k1468 ) ) - { - point = _a1468[ _k1468 ]; - if ( isDefined( point.name ) && point.name == volume.targetname ) - { - point.is_enabled = 0; - } - _k1468 = getNextArrayKey( _a1468, _k1468 ); - } + foreach ( point in spawn_points ) + { + if ( isdefined( point.name ) && point.name == volume.targetname ) + point.is_enabled = 0; + } } shouldsuppressgibs() { - elevator_volumes = []; - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_1d", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3a", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3b", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3c", "targetname" ); - elevator_volumes[ elevator_volumes.size ] = getent( "elevator_3d", "targetname" ); - while ( 1 ) - { - zombies = get_round_enemy_array(); - while ( isDefined( zombies ) ) - { - _a1494 = zombies; - _k1494 = getFirstArrayKey( _a1494 ); - while ( isDefined( _k1494 ) ) - { - zombie = _a1494[ _k1494 ]; - shouldnotgib = 0; - _a1500 = elevator_volumes; - _k1500 = getFirstArrayKey( _a1500 ); - while ( isDefined( _k1500 ) ) - { - zone = _a1500[ _k1500 ]; - if ( is_true( shouldnotgib ) ) - { - } - else - { - if ( zombie istouching( zone ) ) - { - shouldnotgib = 1; - } - } - _k1500 = getNextArrayKey( _a1500, _k1500 ); - } - zombie.dont_throw_gib = shouldnotgib; - _k1494 = getNextArrayKey( _a1494, _k1494 ); - } - } - wait randomfloatrange( 0,5, 1,5 ); - } + elevator_volumes = []; + elevator_volumes[elevator_volumes.size] = getent( "elevator_1b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_1d", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3a", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3b", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3c", "targetname" ); + elevator_volumes[elevator_volumes.size] = getent( "elevator_3d", "targetname" ); + + while ( true ) + { + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + foreach ( zombie in zombies ) + { + shouldnotgib = 0; + + foreach ( zone in elevator_volumes ) + { + if ( is_true( shouldnotgib ) ) + continue; + + if ( zombie istouching( zone ) ) + shouldnotgib = 1; + } + + zombie.dont_throw_gib = shouldnotgib; + } + } + + wait( randomfloatrange( 0.5, 1.5 ) ); + } } watch_for_elevator_during_faller_spawn() { - self endon( "death" ); - self endon( "risen" ); - self endon( "spawn_anim" ); - while ( 1 ) - { - should_gib = 0; - _a1531 = level.elevators; - _k1531 = getFirstArrayKey( _a1531 ); - while ( isDefined( _k1531 ) ) - { - elevator = _a1531[ _k1531 ]; - if ( self istouching( elevator.body ) ) - { - should_gib = 1; - } - _k1531 = getNextArrayKey( _a1531, _k1531 ); - } - if ( should_gib ) - { - playfx( level._effect[ "zomb_gib" ], self.origin ); - if ( isDefined( self.has_been_damaged_by_player ) && !self.has_been_damaged_by_player && isDefined( self.is_leaper ) && !self.is_leaper ) - { - level.zombie_total++; - } - if ( isDefined( self.is_leaper ) && self.is_leaper ) - { - self maps/mp/zombies/_zm_ai_leaper::leaper_cleanup(); - self dodamage( self.health + 100, self.origin ); - } - else - { - self delete(); - } - return; - } - else - { - wait 0,1; - } - } + self endon( "death" ); + self endon( "risen" ); + self endon( "spawn_anim" ); + + while ( true ) + { + should_gib = 0; + + foreach ( elevator in level.elevators ) + { + if ( self istouching( elevator.body ) ) + should_gib = 1; + } + + if ( should_gib ) + { + playfx( level._effect["zomb_gib"], self.origin ); + + if ( !( isdefined( self.has_been_damaged_by_player ) && self.has_been_damaged_by_player ) && !( isdefined( self.is_leaper ) && self.is_leaper ) ) + level.zombie_total++; + + if ( isdefined( self.is_leaper ) && self.is_leaper ) + { + self maps\mp\zombies\_zm_ai_leaper::leaper_cleanup(); + self dodamage( self.health + 100, self.origin ); + } + else + self delete(); + + break; + } + + wait 0.1; + } } init_elevator_devgui( elevatorname, elevator ) { /# - if ( !isDefined( elevatorname ) ) - { - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Elevators:1/Stop All:1" "set zombie_devgui_hrelevatorstop all" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Elevators:1/Unstop All:2" "set zombie_devgui_hrelevatorgo all" \n" ); - level thread watch_elevator_devgui( "all", 1 ); - } - else - { - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Stop:1" "set zombie_devgui_hrelevatorstop " + elevatorname + "" \n" ); - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Go:2" "set zombie_devgui_hrelevatorgo " + elevatorname + "" \n" ); - i = 0; - while ( i < elevator.floors.size ) - { - fname = elevator.floors[ "" + i ].script_location; - adddebugcommand( "devgui_cmd "Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/stop " + i + " [floor " + fname + "]" "set zombie_devgui_hrelevatorfloor " + i + "; set zombie_devgui_hrelevatorgo " + elevatorname + "" \n" ); - i++; - } - elevator thread watch_elevator_devgui( elevatorname, 0 ); - elevator thread show_elevator_floor( elevatorname ); + if ( !isdefined( elevatorname ) ) + { + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Stop All:1\" \"set zombie_devgui_hrelevatorstop all\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/Unstop All:2\" \"set zombie_devgui_hrelevatorgo all\" \n" ); + level thread watch_elevator_devgui( "all", 1 ); + } + else + { + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Stop:1\" \"set zombie_devgui_hrelevatorstop " + elevatorname + "\" \n" ); + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/Go:2\" \"set zombie_devgui_hrelevatorgo " + elevatorname + "\" \n" ); + + for ( i = 0; i < elevator.floors.size; i++ ) + { + fname = elevator.floors["" + i].script_location; + adddebugcommand( "devgui_cmd \"Zombies:1/Highrise:15/Elevators:1/" + elevatorname + "/stop " + i + " [floor " + fname + "]\" \"set zombie_devgui_hrelevatorfloor " + i + "; set zombie_devgui_hrelevatorgo " + elevatorname + "\" \n" ); + } + + elevator thread watch_elevator_devgui( elevatorname, 0 ); + elevator thread show_elevator_floor( elevatorname ); + } #/ - } } watch_elevator_devgui( name, global ) { /# - while ( 1 ) - { - stopcmd = getDvar( "zombie_devgui_hrelevatorstop" ); - if ( isDefined( stopcmd ) && stopcmd == name ) - { - if ( global ) - { - level.elevators_stop = 1; - } - else - { - if ( isDefined( self ) ) - { - self.body.elevator_stop = 1; - } - } - setdvar( "zombie_devgui_hrelevatorstop", "" ); - } - gofloor = getDvarInt( "zombie_devgui_hrelevatorfloor" ); - gocmd = getDvar( "zombie_devgui_hrelevatorgo" ); - if ( isDefined( gocmd ) && gocmd == name ) - { - if ( global ) - { - level.elevators_stop = 0; - } - else - { - if ( isDefined( self ) ) - { - self.body.elevator_stop = 0; - if ( gofloor >= 0 ) - { - self.body.force_starting_floor = gofloor; - } - self.body notify( "forcego" ); - } - } - setdvar( "zombie_devgui_hrelevatorfloor", "-1" ); - setdvar( "zombie_devgui_hrelevatorgo", "" ); - } - wait 1; + while ( true ) + { + stopcmd = getdvar( _hash_7844BB8F ); + + if ( isdefined( stopcmd ) && stopcmd == name ) + { + if ( global ) + level.elevators_stop = 1; + else if ( isdefined( self ) ) + self.body.elevator_stop = 1; + + setdvar( "zombie_devgui_hrelevatorstop", "" ); + } + + gofloor = getdvarint( _hash_7FEC8C2B ); + gocmd = getdvar( _hash_8693373F ); + + if ( isdefined( gocmd ) && gocmd == name ) + { + if ( global ) + level.elevators_stop = 0; + else if ( isdefined( self ) ) + { + self.body.elevator_stop = 0; + + if ( gofloor >= 0 ) + self.body.force_starting_floor = gofloor; + + self.body notify( "forcego" ); + } + + setdvar( "zombie_devgui_hrelevatorfloor", "-1" ); + setdvar( "zombie_devgui_hrelevatorgo", "" ); + } + + wait 1.0; + } #/ - } } show_elevator_floor( name ) { /# - while ( 1 ) - { - if ( getDvarInt( #"B67910B4" ) ) - { - floor = 0; - forced = isDefined( self.body.force_starting_floor ); - color = vectorScale( ( 0, 1, 0 ), 0,7 ); - if ( forced ) - { - color = ( 0,7, 0,3, 0 ); - } - if ( isDefined( level.elevators_stop ) || level.elevators_stop && isDefined( self.body.elevator_stop ) && self.body.elevator_stop ) - { - if ( forced ) - { - color = vectorScale( ( 0, 1, 0 ), 0,7 ); - } - else - { - color = vectorScale( ( 0, 1, 0 ), 0,7 ); - } - } - else - { - if ( self.body.is_moving ) - { - if ( forced ) - { - color = vectorScale( ( 0, 1, 0 ), 0,7 ); - break; - } - else - { - color = vectorScale( ( 0, 1, 0 ), 0,7 ); - } - } - } - if ( isDefined( self.body.current_level ) ) - { - floor = self.body.current_level; - } - text = "elv " + name + " stop " + self.body.current_level + " floor " + self.floors[ self.body.current_level ].script_location; - pos = self.body.origin; - print3d( pos, text, color, 1, 0,75, 1 ); - } - wait 0,05; + while ( true ) + { + if ( getdvarint( _hash_B67910B4 ) ) + { + floor = 0; + forced = isdefined( self.body.force_starting_floor ); + color = vectorscale( ( 1, 1, 0 ), 0.7 ); + + if ( forced ) + color = ( 0.7, 0.3, 0.0 ); + + if ( isdefined( level.elevators_stop ) && level.elevators_stop || isdefined( self.body.elevator_stop ) && self.body.elevator_stop ) + { + if ( forced ) + color = vectorscale( ( 1, 0, 1 ), 0.7 ); + else + color = vectorscale( ( 1, 0, 0 ), 0.7 ); + } + else if ( self.body.is_moving ) + { + if ( forced ) + color = vectorscale( ( 0, 0, 1 ), 0.7 ); + else + color = vectorscale( ( 0, 1, 0 ), 0.7 ); + } + + if ( isdefined( self.body.current_level ) ) + floor = self.body.current_level; + + text = "elv " + name + " stop " + self.body.current_level + " floor " + self.floors[self.body.current_level].script_location; + pos = self.body.origin; + print3d( pos, text, color, 1, 0.75, 1 ); + } + + wait 0.05; + } #/ - } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc index 0adcdec..c07ef33 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_ffotd.gsc @@ -1,189 +1,204 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_weapons; -main_start() //checked matches cerberus output +main_start() { - level thread spawned_collision_ffotd(); - level thread eject_player_trigger_init(); - level thread change_bad_spawner(); + level thread spawned_collision_ffotd(); + level thread eject_player_trigger_init(); + level thread change_bad_spawner(); } -main_end() //checked matches cerberus output +main_end() { - level thread eject_player_trigger(); + level thread eject_player_trigger(); } -spawned_collision_ffotd() //checked changed to match cerberus output +spawned_collision_ffotd() { - precachemodel( "collision_wall_32x32x10_standard" ); - flag_wait( "start_zombie_round_logic" ); - if ( !is_true( level.optimise_for_splitscreen ) ) - { - collision1 = spawn( "script_model", ( 2044, 499, 2893 ) ); - collision1 setmodel( "collision_wall_32x32x10_standard" ); - collision1.angles = vectorScale( ( 0, 1, 0 ), 330 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( 2044, 499, 2925 ) ); - collision2 setmodel( "collision_wall_32x32x10_standard" ); - collision2.angles = vectorScale( ( 0, 1, 0 ), 330 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) ); - collision3 setmodel( "collision_wall_256x256x10_standard" ); - collision3.angles = ( 0, 0, 0 ); - collision3 ghost(); - collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) ); - collision3b setmodel( "collision_wall_256x256x10_standard" ); - collision3b.angles = ( 0, 0, 0 ); - collision3b ghost(); - collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) ); - collision3 setmodel( "collision_wall_128x128x10_standard" ); - collision3.angles = ( 0, 0, 0 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) ); - collision4 setmodel( "collision_wall_256x256x10_standard" ); - collision4.angles = vectorScale( ( 0, 1, 0 ), 270 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) ); - collision5 setmodel( "collision_wall_256x256x10_standard" ); - collision5.angles = vectorScale( ( 1, 0, 0 ), 347.6 ); - collision5 ghost(); - collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) ); - collision6b setmodel( "collision_wall_256x256x10_standard" ); - collision6b.angles = ( 0, 270, 12 ); - collision6b ghost(); - collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) ); - collision6c setmodel( "collision_wall_256x256x10_standard" ); - collision6c.angles = ( 0, 270, 12 ); - collision6c ghost(); - collision7 = spawn( "script_model", ( 2157, 839, 3129 ) ); - collision7 setmodel( "collision_wall_128x128x10_standard" ); - collision7.angles = ( 0, 9.79996, -90 ); - collision7 ghost(); - collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) ); - collision7 setmodel( "collision_wall_128x128x10_standard" ); - collision7.angles = ( 0, 270, 12 ); - collision7 ghost(); - } + precachemodel( "collision_wall_32x32x10_standard" ); + flag_wait( "start_zombie_round_logic" ); + + if ( !is_true( level.optimise_for_splitscreen ) ) + { + collision1 = spawn( "script_model", ( 2044, 499, 2893 ) ); + collision1 setmodel( "collision_wall_32x32x10_standard" ); + collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( 2044, 499, 2925 ) ); + collision2 setmodel( "collision_wall_32x32x10_standard" ); + collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) ); + collision3 setmodel( "collision_wall_256x256x10_standard" ); + collision3.angles = ( 0, 0, 0 ); + collision3 ghost(); + collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) ); + collision3b setmodel( "collision_wall_256x256x10_standard" ); + collision3b.angles = ( 0, 0, 0 ); + collision3b ghost(); + collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) ); + collision3 setmodel( "collision_wall_128x128x10_standard" ); + collision3.angles = ( 0, 0, 0 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) ); + collision4 setmodel( "collision_wall_256x256x10_standard" ); + collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) ); + collision5 setmodel( "collision_wall_256x256x10_standard" ); + collision5.angles = vectorscale( ( 1, 0, 0 ), 347.6 ); + collision5 ghost(); + collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) ); + collision6b setmodel( "collision_wall_256x256x10_standard" ); + collision6b.angles = ( 0, 270, 12 ); + collision6b ghost(); + collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) ); + collision6c setmodel( "collision_wall_256x256x10_standard" ); + collision6c.angles = ( 0, 270, 12 ); + collision6c ghost(); + collision7 = spawn( "script_model", ( 2157, 839, 3129 ) ); + collision7 setmodel( "collision_wall_128x128x10_standard" ); + collision7.angles = ( 0, 9.79996, -90 ); + collision7 ghost(); + collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) ); + collision7 setmodel( "collision_wall_128x128x10_standard" ); + collision7.angles = ( 0, 270, 12 ); + collision7 ghost(); + } } -eject_player_trigger_init() //checked matches cerberus output +eject_player_trigger_init() { - trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 ); - trig1.angles = ( 0, 0, 0 ); - trig1.targetname = "eject_player_pos"; - trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) ); - trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 ); - trig2.angles = ( 0, 0, 0 ); - trig2.targetname = "eject_player_pos"; - trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) ); - trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 ); - trig3.angles = ( 0, 0, 0 ); - trig3.targetname = "eject_player_pos"; - trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) ); + trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 ); + trig1.angles = ( 0, 0, 0 ); + trig1.targetname = "eject_player_pos"; + trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) ); + trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 ); + trig2.angles = ( 0, 0, 0 ); + trig2.targetname = "eject_player_pos"; + trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) ); + trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 ); + trig3.angles = ( 0, 0, 0 ); + trig3.targetname = "eject_player_pos"; + trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) ); } -eject_player_trigger() //checked matches cerberus output +eject_player_trigger() { - trigs = getentarray( "eject_player_pos", "targetname" ); - array_thread( trigs, ::player_eject_watcher ); + trigs = getentarray( "eject_player_pos", "targetname" ); + array_thread( trigs, ::player_eject_watcher ); } -player_eject_watcher() //checked matches cerberus output +player_eject_watcher() { - time = 0; - while ( 1 ) - { - self waittill( "trigger", who ); - if ( is_player_valid( who ) ) - { - while ( who istouching( self ) ) - { - time++; - if ( time >= 6 ) - { - if ( isDefined( self.point ) ) - { - if ( !positionwouldtelefrag( self.point.origin ) ) - { - who setorigin( self.point.origin ); - who playlocalsound( level.zmb_laugh_alias ); - who playrumbleonentity( "damage_light" ); - earthquake( 0.5, 0.5, who.origin, 100 ); - who thread ejected_overrun( self ); - } - } - } - wait 1; - } - time = 0; - } - wait 0.1; - } + time = 0; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( is_player_valid( who ) ) + { + while ( who istouching( self ) ) + { + time++; + + if ( time >= 6 ) + { + if ( isdefined( self.point ) ) + { + if ( !positionwouldtelefrag( self.point.origin ) ) + { + who setorigin( self.point.origin ); + who playlocalsound( level.zmb_laugh_alias ); + who playrumbleonentity( "damage_light" ); + earthquake( 0.5, 0.5, who.origin, 100 ); + who thread ejected_overrun( self ); + } + } + } + + wait 1.0; + } + + time = 0; + } + + wait 0.1; + } } -ejected_overrun( trig ) //checked changed to match cerberus output +ejected_overrun( trig ) { - if ( !isDefined( trig.ejected ) ) - { - trig.ejected = 1; - } - else - { - trig.ejected++; - if ( trig.ejected >= 3 ) - { - primaries = self getweaponslistprimaries(); - foreach ( weapon in primaries ) - { - self takeweapon( weapon ); - } - lethal = self get_player_lethal_grenade(); - if ( isDefined( lethal ) && lethal != "" ) - { - self takeweapon( lethal ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal ); - } - tactical = self get_player_tactical_grenade(); - if ( isDefined( tactical ) && tactical != "" ) - { - self takeweapon( tactical ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical ); - } - mine = self get_player_placeable_mine(); - if ( isDefined( mine ) ) - { - self takeweapon( mine ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine ); - } - melee_weapon = self get_player_melee_weapon(); - if ( isDefined( melee_weapon ) ) - { - self takeweapon( melee_weapon ); - maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon ); - } - self giveweapon( "knife_zm" ); - self.current_melee_weapon = "knife_zm"; - self give_start_weapon( 1 ); - self.currentweapon = "m1911_zm"; - } - } + if ( !isdefined( trig.ejected ) ) + trig.ejected = 1; + else + { + trig.ejected++; + + if ( trig.ejected >= 3 ) + { + primaries = self getweaponslistprimaries(); + + foreach ( weapon in primaries ) + self takeweapon( weapon ); + + lethal = self get_player_lethal_grenade(); + + if ( isdefined( lethal ) && lethal != "" ) + { + self takeweapon( lethal ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( lethal ); + } + + tactical = self get_player_tactical_grenade(); + + if ( isdefined( tactical ) && tactical != "" ) + { + self takeweapon( tactical ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical ); + } + + mine = self get_player_placeable_mine(); + + if ( isdefined( mine ) ) + { + self takeweapon( mine ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine ); + } + + melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( melee_weapon ) ) + { + self takeweapon( melee_weapon ); + maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( melee_weapon ); + } + + self giveweapon( "knife_zm" ); + self.current_melee_weapon = "knife_zm"; + self give_start_weapon( 1 ); + self.currentweapon = "m1911_zm"; + } + } } -change_bad_spawner() //checked changed to match cerberus output +change_bad_spawner() { - flag_wait( "always_on" ); - spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" ); - foreach ( struct in spawner_array ) - { - if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) ) - { - struct.script_noteworthy = "riser_location"; - return; - } - } -} + flag_wait( "always_on" ); + spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" ); + foreach ( struct in spawner_array ) + { + if ( isdefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) ) + { + struct.script_noteworthy = "riser_location"; + return; + } + } +} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc index 766a02b..3d90569 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_fx.gsc @@ -1,114 +1,117 @@ -#include maps/mp/_utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include maps\mp\createfx\zm_highrise_fx; main() { - precache_createfx_fx(); - precache_scripted_fx(); - precache_fxanim_props(); - maps/mp/createfx/zm_highrise_fx::main(); + precache_createfx_fx(); + precache_scripted_fx(); + precache_fxanim_props(); + maps\mp\createfx\zm_highrise_fx::main(); } precache_scripted_fx() { - level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" ); - level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); - level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); - level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); - level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_marker" ); - level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); - level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); - level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); - level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" ); - level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); - level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); - level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); - level._effect[ "elevator_tell" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" ); - level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" ); - level._effect[ "elevator_impact" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" ); - level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" ); - level._effect[ "elevator_light" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" ); - level._effect[ "perk_elevator_idle" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" ); - level._effect[ "perk_elevator_departing" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" ); - level._effect[ "perk_elevator_indicator_up" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" ); - level._effect[ "perk_elevator_indicator_down" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" ); - level._effect[ "sidequest_dragon_spark_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" ); - level._effect[ "sidequest_dragon_fireball_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" ); - level._effect[ "sidequest_dragon_spark_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" ); - level._effect[ "sidequest_dragon_fireball_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" ); - level._effect[ "sidequest_flash" ] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" ); - level._effect[ "sidequest_tower_bolts" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" ); + level._effect["switch_sparks"] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" ); + level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" ); + level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); + level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); + level._effect["pandora_box_inverted"] = loadfx( "maps/zombie/fx_zmb_highrise_marker" ); + level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" ); + level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" ); + level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); + level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" ); + level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" ); + level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" ); + level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); + level._effect["elevator_tell"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" ); + level._effect["elevator_sparks"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" ); + level._effect["elevator_impact"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" ); + level._effect["elevator_glint"] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" ); + level._effect["elevator_light"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" ); + level._effect["perk_elevator_idle"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" ); + level._effect["perk_elevator_departing"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" ); + level._effect["perk_elevator_indicator_up"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" ); + level._effect["perk_elevator_indicator_down"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" ); + level._effect["sidequest_dragon_spark_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" ); + level._effect["sidequest_dragon_fireball_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" ); + level._effect["sidequest_dragon_spark_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" ); + level._effect["sidequest_dragon_fireball_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" ); + level._effect["sidequest_flash"] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" ); + level._effect["sidequest_tower_bolts"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" ); } precache_createfx_fx() { - level._effect[ "fx_highrise_cloud_lg_single" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" ); - level._effect[ "fx_highrise_cloud_lg_flat" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" ); - level._effect[ "fx_highrise_cloud_lg_left" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" ); - level._effect[ "fx_highrise_cloud_lg_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" ); - level._effect[ "fx_highrise_cloud_sm_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" ); - level._effect[ "fx_highrise_cloud_sm_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" ); - level._effect[ "fx_highrise_cloud_bend_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" ); - level._effect[ "fx_highrise_cloud_bend_01" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" ); - level._effect[ "fx_highrise_meteor_lg_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" ); - level._effect[ "fx_highrise_meteor_lg_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" ); - level._effect[ "fx_highrise_meteor_lg_top2" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" ); - level._effect[ "fx_highrise_meteor_sm_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" ); - level._effect[ "fx_highrise_meteor_sm_horizon" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" ); - level._effect[ "fx_lf_zmb_highrise_sun" ] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" ); - level._effect[ "fx_zmb_flies" ] = loadfx( "maps/zombie/fx_zmb_flies" ); - level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); - level._effect[ "fx_highrise_ash_rising_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" ); - level._effect[ "fx_highrise_bld_crumble_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" ); - level._effect[ "fx_highrise_ceiling_dust_md_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" ); - level._effect[ "fx_highrise_ceiling_dust_sm_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" ); - level._effect[ "fx_highrise_ceiling_dust_edge_100" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" ); - level._effect[ "fx_highrise_edge_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" ); - level._effect[ "fx_highrise_point_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" ); - level._effect[ "fx_highrise_wire_spark" ] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" ); - level._effect[ "fx_highrise_water_drip_fast" ] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" ); - level._effect[ "fx_highrise_haze_int_med" ] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" ); - level._effect[ "fx_highrise_fire_distant" ] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" ); - level._effect[ "fx_highrise_smk_plume_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" ); - level._effect[ "fx_highrise_smk_plume_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" ); - level._effect[ "fx_highrise_smk_plume_xlg" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" ); - level._effect[ "fx_highrise_moon" ] = loadfx( "maps/zombie_highrise/fx_highrise_moon" ); - level._effect[ "fx_highrise_god_ray_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" ); - level._effect[ "fx_highrise_god_ray_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" ); - level._effect[ "fx_highrise_god_ray_cool_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" ); - level._effect[ "fx_highrise_god_ray_cool_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" ); - level._effect[ "fx_highrise_light_bulb" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" ); - level._effect[ "fx_highrise_light_build_lamp" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" ); - level._effect[ "fx_highrise_light_fluorescent" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" ); - level._effect[ "fx_highrise_light_fluorescent_wall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" ); - level._effect[ "fx_highrise_light_fluorescent_wal2" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" ); - level._effect[ "fx_highrise_light_recessed" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" ); - level._effect[ "fx_highrise_light_recessed_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" ); - level._effect[ "fx_highrise_light_recessed_tall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" ); - level._effect[ "fx_highrise_light_recessed_tiny" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" ); - level._effect[ "fx_highrise_light_mall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" ); - level._effect[ "fx_highrise_light_lantern_red" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" ); - level._effect[ "fx_highrise_light_lantern_yel" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" ); - level._effect[ "fx_highrise_light_sconce_glow" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" ); - level._effect[ "fx_highrise_light_sconce_beam" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" ); - level._effect[ "fx_highrise_dragon_breath_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" ); - level._effect[ "fx_highrise_dragon_tower_absorb_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" ); - level._effect[ "fx_highrise_dragon_tower_glow_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" ); - level._effect[ "fx_highrise_sidequest_complete" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" ); - level._effect[ "fx_highrise_dragon_breath_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" ); - level._effect[ "fx_highrise_dragon_tower_absorb_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" ); - level._effect[ "fx_highrise_dragon_tower_glow_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" ); - level._effect[ "fx_highrise_sidequest_complete_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" ); + level._effect["fx_highrise_cloud_lg_single"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" ); + level._effect["fx_highrise_cloud_lg_flat"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" ); + level._effect["fx_highrise_cloud_lg_left"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" ); + level._effect["fx_highrise_cloud_lg_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" ); + level._effect["fx_highrise_cloud_sm_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" ); + level._effect["fx_highrise_cloud_sm_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" ); + level._effect["fx_highrise_cloud_bend_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" ); + level._effect["fx_highrise_cloud_bend_01"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" ); + level._effect["fx_highrise_meteor_lg_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" ); + level._effect["fx_highrise_meteor_lg_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" ); + level._effect["fx_highrise_meteor_lg_top2"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" ); + level._effect["fx_highrise_meteor_sm_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" ); + level._effect["fx_highrise_meteor_sm_horizon"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" ); + level._effect["fx_lf_zmb_highrise_sun"] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" ); + level._effect["fx_zmb_flies"] = loadfx( "maps/zombie/fx_zmb_flies" ); + level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" ); + level._effect["fx_highrise_ash_rising_md"] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" ); + level._effect["fx_highrise_bld_crumble_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" ); + level._effect["fx_highrise_ceiling_dust_md_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" ); + level._effect["fx_highrise_ceiling_dust_sm_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" ); + level._effect["fx_highrise_ceiling_dust_edge_100"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" ); + level._effect["fx_highrise_edge_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" ); + level._effect["fx_highrise_point_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" ); + level._effect["fx_highrise_wire_spark"] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" ); + level._effect["fx_highrise_water_drip_fast"] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" ); + level._effect["fx_highrise_haze_int_med"] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" ); + level._effect["fx_highrise_fire_distant"] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" ); + level._effect["fx_highrise_smk_plume_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" ); + level._effect["fx_highrise_smk_plume_md"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" ); + level._effect["fx_highrise_smk_plume_xlg"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" ); + level._effect["fx_highrise_moon"] = loadfx( "maps/zombie_highrise/fx_highrise_moon" ); + level._effect["fx_highrise_god_ray_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" ); + level._effect["fx_highrise_god_ray_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" ); + level._effect["fx_highrise_god_ray_cool_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" ); + level._effect["fx_highrise_god_ray_cool_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" ); + level._effect["fx_highrise_light_bulb"] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" ); + level._effect["fx_highrise_light_build_lamp"] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" ); + level._effect["fx_highrise_light_fluorescent"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" ); + level._effect["fx_highrise_light_fluorescent_wall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" ); + level._effect["fx_highrise_light_fluorescent_wal2"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" ); + level._effect["fx_highrise_light_recessed"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" ); + level._effect["fx_highrise_light_recessed_md"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" ); + level._effect["fx_highrise_light_recessed_tall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" ); + level._effect["fx_highrise_light_recessed_tiny"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" ); + level._effect["fx_highrise_light_mall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" ); + level._effect["fx_highrise_light_lantern_red"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" ); + level._effect["fx_highrise_light_lantern_yel"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" ); + level._effect["fx_highrise_light_sconce_glow"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" ); + level._effect["fx_highrise_light_sconce_beam"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" ); + level._effect["fx_highrise_dragon_breath_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" ); + level._effect["fx_highrise_dragon_tower_absorb_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" ); + level._effect["fx_highrise_dragon_tower_glow_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" ); + level._effect["fx_highrise_sidequest_complete"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" ); + level._effect["fx_highrise_dragon_breath_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" ); + level._effect["fx_highrise_dragon_tower_absorb_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" ); + level._effect["fx_highrise_dragon_tower_glow_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" ); + level._effect["fx_highrise_sidequest_complete_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" ); } +#using_animtree("fxanim_props"); + precache_fxanim_props() { - level.scr_anim[ "fxanim_props" ][ "wirespark_med_lrg" ] = %fxanim_gp_wirespark_med_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "wirespark_long_lrg" ] = %fxanim_gp_wirespark_long_lrg_anim; - level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim; - level.scr_anim[ "fxanim_props" ][ "dragon_a" ] = %fxanim_zom_highrise_dragon_a_anim; - level.scr_anim[ "fxanim_props" ][ "dragon_b" ] = %fxanim_zom_highrise_dragon_b_anim; - level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_anim; - level.scr_anim[ "fxanim_props" ][ "rock_slide" ] = %fxanim_zom_highrise_rock_slide_anim; + level.scr_anim["fxanim_props"]["wirespark_med_lrg"] = %fxanim_gp_wirespark_med_lrg_anim; + level.scr_anim["fxanim_props"]["wirespark_long_lrg"] = %fxanim_gp_wirespark_long_lrg_anim; + level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim; + level.scr_anim["fxanim_props"]["dragon_a"] = %fxanim_zom_highrise_dragon_a_anim; + level.scr_anim["fxanim_props"]["dragon_b"] = %fxanim_zom_highrise_dragon_b_anim; + level.scr_anim["fxanim_props"]["dragon"] = %fxanim_zom_highrise_dragon_idle_anim; + level.scr_anim["fxanim_props"]["rock_slide"] = %fxanim_zom_highrise_rock_slide_anim; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc index dcfc4ee..e7bcc27 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_gamemodes.gsc @@ -1,14 +1,15 @@ -//checked includes match cerberus output -#include maps/mp/zm_highrise_classic; -#include maps/mp/zm_highrise; -#include maps/mp/gametypes_zm/_zm_gametype; -#include maps/mp/zombies/_zm_game_module; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_game_module; +#include maps\mp\gametypes_zm\_zm_gametype; +#include maps\mp\zm_highrise; +#include maps\mp\zm_highrise_classic; -init() //checked matches cerberus output +init() { - add_map_gamemode( "zclassic", maps/mp/zm_highrise::zclassic_preinit, undefined, undefined ); - add_map_location_gamemode( "zclassic", "rooftop", maps/mp/zm_highrise_classic::precache, maps/mp/zm_highrise_classic::main ); + add_map_gamemode( "zclassic", maps\mp\zm_highrise::zclassic_preinit, undefined, undefined ); + add_map_location_gamemode( "zclassic", "rooftop", maps\mp\zm_highrise_classic::precache, maps\mp\zm_highrise_classic::main ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc index 09d10f8..7bf2fe3 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq.gsc @@ -1,1157 +1,1056 @@ -#include maps/mp/zm_highrise_sq; -#include maps/mp/zombies/_zm_perks; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_highrise_sq_atd; +#include maps\mp\zm_highrise_sq_slb; +#include maps\mp\zm_highrise_sq_ssp; +#include maps\mp\zm_highrise_sq_pts; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_perks; +#include maps\mp\zm_highrise_sq; init() { - if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) - { - sq_easy_cleanup(); - return; - } - flag_init( "sq_disabled" ); - flag_init( "sq_branch_complete" ); - flag_init( "sq_tower_active" ); - flag_init( "sq_player_has_sniper" ); - flag_init( "sq_player_has_ballistic" ); - flag_init( "sq_ric_tower_complete" ); - flag_init( "sq_max_tower_complete" ); - flag_init( "sq_players_out_of_sync" ); - flag_init( "sq_ball_picked_up" ); - register_map_navcard( "navcard_held_zm_highrise", "navcard_held_zm_transit" ); - ss_buttons = getentarray( "sq_ss_button", "targetname" ); - i = 0; - while ( i < ss_buttons.size ) - { - ss_buttons[ i ] usetriggerrequirelookat(); - ss_buttons[ i ] sethintstring( "" ); - ss_buttons[ i ] setcursorhint( "HINT_NOICON" ); - i++; - } - level thread mahjong_tiles_setup(); - flag_init( "sq_nav_built" ); - declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); - maps/mp/zm_highrise_sq_atd::init(); - maps/mp/zm_highrise_sq_slb::init(); - declare_sidequest( "sq_1", ::init_sidequest_1, ::sidequest_logic_1, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); - maps/mp/zm_highrise_sq_ssp::init_1(); - maps/mp/zm_highrise_sq_pts::init_1(); - declare_sidequest( "sq_2", ::init_sidequest_2, ::sidequest_logic_2, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); - maps/mp/zm_highrise_sq_ssp::init_2(); - maps/mp/zm_highrise_sq_pts::init_2(); - level thread init_navcard(); - level thread init_navcomputer(); - precache_sidequest_assets(); + if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) + { + sq_easy_cleanup(); + return; + } + + flag_init( "sq_disabled" ); + flag_init( "sq_branch_complete" ); + flag_init( "sq_tower_active" ); + flag_init( "sq_player_has_sniper" ); + flag_init( "sq_player_has_ballistic" ); + flag_init( "sq_ric_tower_complete" ); + flag_init( "sq_max_tower_complete" ); + flag_init( "sq_players_out_of_sync" ); + flag_init( "sq_ball_picked_up" ); + register_map_navcard( "navcard_held_zm_highrise", "navcard_held_zm_transit" ); + ss_buttons = getentarray( "sq_ss_button", "targetname" ); + + for ( i = 0; i < ss_buttons.size; i++ ) + { + ss_buttons[i] usetriggerrequirelookat(); + ss_buttons[i] sethintstring( "" ); + ss_buttons[i] setcursorhint( "HINT_NOICON" ); + } + + level thread mahjong_tiles_setup(); + flag_init( "sq_nav_built" ); + declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); + maps\mp\zm_highrise_sq_atd::init(); + maps\mp\zm_highrise_sq_slb::init(); + declare_sidequest( "sq_1", ::init_sidequest_1, ::sidequest_logic_1, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); + maps\mp\zm_highrise_sq_ssp::init_1(); + maps\mp\zm_highrise_sq_pts::init_1(); + declare_sidequest( "sq_2", ::init_sidequest_2, ::sidequest_logic_2, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete ); + maps\mp\zm_highrise_sq_ssp::init_2(); + maps\mp\zm_highrise_sq_pts::init_2(); + level thread init_navcard(); + level thread init_navcomputer(); + precache_sidequest_assets(); } sq_highrise_clientfield_init() { - registerclientfield( "toplayer", "clientfield_sq_vo", 5000, 5, "int" ); - level.sq_clientfield_vo[ "none" ] = 0; - level.sq_clientfield_vo[ "vox_maxi_sidequest_activ_dragons_0" ] = 1; - level.sq_clientfield_vo[ "vox_maxi_sidequest_congratulate_0" ] = 2; - level.sq_clientfield_vo[ "vox_maxi_sidequest_create_trample_0" ] = 3; - level.sq_clientfield_vo[ "vox_maxi_sidequest_create_trample_1" ] = 4; - level.sq_clientfield_vo[ "vox_maxi_sidequest_create_trample_2" ] = 5; - level.sq_clientfield_vo[ "vox_maxi_sidequest_create_trample_3" ] = 6; - level.sq_clientfield_vo[ "vox_maxi_sidequest_create_trample_4" ] = 7; - level.sq_clientfield_vo[ "vox_maxi_sidequest_fail_0" ] = 8; - level.sq_clientfield_vo[ "vox_maxi_sidequest_fail_1" ] = 9; - level.sq_clientfield_vo[ "vox_maxi_sidequest_fail_2" ] = 10; - level.sq_clientfield_vo[ "vox_maxi_sidequest_fail_3" ] = 11; - level.sq_clientfield_vo[ "vox_maxi_sidequest_lion_balls_0" ] = 12; - level.sq_clientfield_vo[ "vox_maxi_sidequest_lion_balls_1" ] = 13; - level.sq_clientfield_vo[ "vox_maxi_sidequest_lion_balls_2" ] = 14; - level.sq_clientfield_vo[ "vox_maxi_sidequest_lion_balls_3" ] = 15; - level.sq_clientfield_vo[ "vox_maxi_sidequest_lion_balls_4" ] = 16; - level.sq_clientfield_vo[ "vox_maxi_sidequest_max_com_0" ] = 17; - level.sq_clientfield_vo[ "vox_maxi_sidequest_max_com_1" ] = 18; - level.sq_clientfield_vo[ "vox_maxi_sidequest_max_com_2" ] = 19; - level.sq_clientfield_vo[ "vox_maxi_sidequest_punch_tower_0" ] = 20; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_0" ] = 21; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_1" ] = 22; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_2" ] = 23; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_3" ] = 24; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_4" ] = 25; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_5" ] = 26; - level.sq_clientfield_vo[ "vox_maxi_sidequest_reincar_zombie_6" ] = 27; - level.sq_clientfield_vo[ "vox_maxi_sidequest_sec_symbols_0" ] = 28; - level.sq_clientfield_vo[ "vox_maxi_sidequest_sec_symbols_1" ] = 29; - level.sq_clientfield_vo[ "vox_maxi_sidequest_sniper_rifle_0" ] = 30; - level.sq_clientfield_vo[ "vox_maxi_sidequest_tower_complete_0" ] = 31; + registerclientfield( "toplayer", "clientfield_sq_vo", 5000, 5, "int" ); + level.sq_clientfield_vo["none"] = 0; + level.sq_clientfield_vo["vox_maxi_sidequest_activ_dragons_0"] = 1; + level.sq_clientfield_vo["vox_maxi_sidequest_congratulate_0"] = 2; + level.sq_clientfield_vo["vox_maxi_sidequest_create_trample_0"] = 3; + level.sq_clientfield_vo["vox_maxi_sidequest_create_trample_1"] = 4; + level.sq_clientfield_vo["vox_maxi_sidequest_create_trample_2"] = 5; + level.sq_clientfield_vo["vox_maxi_sidequest_create_trample_3"] = 6; + level.sq_clientfield_vo["vox_maxi_sidequest_create_trample_4"] = 7; + level.sq_clientfield_vo["vox_maxi_sidequest_fail_0"] = 8; + level.sq_clientfield_vo["vox_maxi_sidequest_fail_1"] = 9; + level.sq_clientfield_vo["vox_maxi_sidequest_fail_2"] = 10; + level.sq_clientfield_vo["vox_maxi_sidequest_fail_3"] = 11; + level.sq_clientfield_vo["vox_maxi_sidequest_lion_balls_0"] = 12; + level.sq_clientfield_vo["vox_maxi_sidequest_lion_balls_1"] = 13; + level.sq_clientfield_vo["vox_maxi_sidequest_lion_balls_2"] = 14; + level.sq_clientfield_vo["vox_maxi_sidequest_lion_balls_3"] = 15; + level.sq_clientfield_vo["vox_maxi_sidequest_lion_balls_4"] = 16; + level.sq_clientfield_vo["vox_maxi_sidequest_max_com_0"] = 17; + level.sq_clientfield_vo["vox_maxi_sidequest_max_com_1"] = 18; + level.sq_clientfield_vo["vox_maxi_sidequest_max_com_2"] = 19; + level.sq_clientfield_vo["vox_maxi_sidequest_punch_tower_0"] = 20; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_0"] = 21; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_1"] = 22; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_2"] = 23; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_3"] = 24; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_4"] = 25; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_5"] = 26; + level.sq_clientfield_vo["vox_maxi_sidequest_reincar_zombie_6"] = 27; + level.sq_clientfield_vo["vox_maxi_sidequest_sec_symbols_0"] = 28; + level.sq_clientfield_vo["vox_maxi_sidequest_sec_symbols_1"] = 29; + level.sq_clientfield_vo["vox_maxi_sidequest_sniper_rifle_0"] = 30; + level.sq_clientfield_vo["vox_maxi_sidequest_tower_complete_0"] = 31; } sq_easy_cleanup() { - computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); - computer_buildable_trig delete(); - sq_buildables = getentarray( "buildable_sq_common", "targetname" ); - _a112 = sq_buildables; - _k112 = getFirstArrayKey( _a112 ); - while ( isDefined( _k112 ) ) - { - item = _a112[ _k112 ]; - item delete(); - _k112 = getNextArrayKey( _a112, _k112 ); - } - a_balls = getentarray( "sq_dragon_lion_ball", "targetname" ); - array_delete( a_balls ); - a_tiles = getentarray( "mahjong_tile", "script_noteworthy" ); - array_delete( a_tiles ); - a_emblems_lit = getentarray( "elevator_dragon_lit", "targetname" ); - array_delete( a_emblems_lit ); - a_emblems = getentarray( "elevator_dragon_icon", "targetname" ); - array_delete( a_emblems ); - a_emblems = getentarray( "atd2_marker_lit", "targetname" ); - array_delete( a_emblems ); + computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); + computer_buildable_trig delete(); + sq_buildables = getentarray( "buildable_sq_common", "targetname" ); + + foreach ( item in sq_buildables ) + item delete(); + + a_balls = getentarray( "sq_dragon_lion_ball", "targetname" ); + array_delete( a_balls ); + a_tiles = getentarray( "mahjong_tile", "script_noteworthy" ); + array_delete( a_tiles ); + a_emblems_lit = getentarray( "elevator_dragon_lit", "targetname" ); + array_delete( a_emblems_lit ); + a_emblems = getentarray( "elevator_dragon_icon", "targetname" ); + array_delete( a_emblems ); + a_emblems = getentarray( "atd2_marker_lit", "targetname" ); + array_delete( a_emblems ); } init_player_sidequest_stats() { - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_started", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_held_zm_transit", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_held_zm_highrise", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "navcard_applied_zm_highrise", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_maxis_reset", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_rich_reset", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_rich_complete", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_maxis_complete", 0 ); - self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "sq_highrise_last_completed", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_started", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_transit", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_highrise", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_held_zm_buried", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "navcard_applied_zm_highrise", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_maxis_reset", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_rich_reset", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_rich_complete", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_maxis_complete", 0 ); + self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "sq_highrise_last_completed", 0 ); } start_highrise_sidequest() { - flag_wait( "start_zombie_round_logic" ); - sidequest_start( "sq" ); + flag_wait( "start_zombie_round_logic" ); + sidequest_start( "sq" ); } +#using_animtree("fxanim_props"); + init_sidequest() { - players = get_players(); - thread sq_refresh_player_navcard_hud(); - a_balls = getentarray( "sq_sliquify_ball", "targetname" ); - _a180 = a_balls; - _k180 = getFirstArrayKey( _a180 ); - while ( isDefined( _k180 ) ) - { - m_ball = _a180[ _k180 ]; - m_ball.can_pickup = 0; - m_ball hide(); - _k180 = getNextArrayKey( _a180, _k180 ); - } - scriptmodelsuseanimtree( -1 ); - level.scr_anim[ "fxanim_props" ][ "trample_gen_ab" ] = %fxanim_zom_highrise_trample_gen_ab_anim; - level.scr_anim[ "fxanim_props" ][ "trample_gen_ba" ] = %fxanim_zom_highrise_trample_gen_ba_anim; - level.scr_anim[ "fxanim_props" ][ "trample_gen_cd" ] = %fxanim_zom_highrise_trample_gen_cd_anim; - level.scr_anim[ "fxanim_props" ][ "trample_gen_dc" ] = %fxanim_zom_highrise_trample_gen_dc_anim; - level thread vo_maxis_do_quest(); - level thread vo_weapon_watcher(); - level.maxcompleted = 0; - level.richcompleted = 0; - _a199 = players; - _k199 = getFirstArrayKey( _a199 ); - while ( isDefined( _k199 ) ) - { - player = _a199[ _k199 ]; - player.highrise_sq_started = 1; - lastcompleted = player maps/mp/zombies/_zm_stats::get_global_stat( "sq_highrise_last_completed" ); - if ( lastcompleted == 1 ) - { - level.richcompleted = 1; - } - else - { - if ( lastcompleted == 2 ) - { - level.maxcompleted = 1; - } - } - _k199 = getNextArrayKey( _a199, _k199 ); - } - if ( level.richcompleted ) - { - if ( level.maxcompleted ) - { - flag_set( "sq_players_out_of_sync" ); - } - else - { - tower_in_sync_lightning(); - } - exploder( 1003 ); - } - if ( level.maxcompleted ) - { - if ( !flag( "sq_players_out_of_sync" ) ) - { - tower_in_sync_lightning(); - } - exploder( 903 ); - } + players = get_players(); + thread sq_refresh_player_navcard_hud(); + a_balls = getentarray( "sq_sliquify_ball", "targetname" ); + + foreach ( m_ball in a_balls ) + { + m_ball.can_pickup = 0; + m_ball hide(); + } + + scriptmodelsuseanimtree( -1 ); + level.scr_anim["fxanim_props"]["trample_gen_ab"] = %fxanim_zom_highrise_trample_gen_ab_anim; + level.scr_anim["fxanim_props"]["trample_gen_ba"] = %fxanim_zom_highrise_trample_gen_ba_anim; + level.scr_anim["fxanim_props"]["trample_gen_cd"] = %fxanim_zom_highrise_trample_gen_cd_anim; + level.scr_anim["fxanim_props"]["trample_gen_dc"] = %fxanim_zom_highrise_trample_gen_dc_anim; + level thread vo_maxis_do_quest(); + level thread vo_weapon_watcher(); + level.maxcompleted = 0; + level.richcompleted = 0; + + foreach ( player in players ) + { + player.highrise_sq_started = 1; + lastcompleted = player maps\mp\zombies\_zm_stats::get_global_stat( "sq_highrise_last_completed" ); + + if ( lastcompleted == 1 ) + { + level.richcompleted = 1; + continue; + } + + if ( lastcompleted == 2 ) + level.maxcompleted = 1; + } + + if ( level.richcompleted ) + { + if ( level.maxcompleted ) + flag_set( "sq_players_out_of_sync" ); + else + tower_in_sync_lightning(); + + exploder( 1003 ); + } + + if ( level.maxcompleted ) + { + if ( !flag( "sq_players_out_of_sync" ) ) + tower_in_sync_lightning(); + + exploder( 903 ); + } } init_sidequest_1() { + } init_sidequest_2() { + } generic_stage_start() { /# - level thread cheat_complete_stage(); + level thread cheat_complete_stage(); #/ - level._stage_active = 1; + level._stage_active = 1; } cheat_complete_stage() { - level endon( "reset_sundial" ); - while ( 1 ) - { - if ( getDvar( "cheat_sq" ) != "" ) - { - if ( isDefined( level._last_stage_started ) ) - { - setdvar( "cheat_sq", "" ); - stage_completed( "sq", level._last_stage_started ); - } - } - wait 0,1; - } + level endon( "reset_sundial" ); + + while ( true ) + { + if ( getdvar( _hash_1186DB2D ) != "" ) + { + if ( isdefined( level._last_stage_started ) ) + { + setdvar( "cheat_sq", "" ); + stage_completed( "sq", level._last_stage_started ); + } + } + + wait 0.1; + } } sidequest_logic() { - level thread temp_test_fx(); - if ( is_true( level.maxcompleted ) && is_true( level.richcompleted ) ) - { - return; - } - level thread watch_nav_computer_built(); - flag_wait( "power_on" ); - level thread vo_richtofen_power_on(); - flag_wait( "sq_nav_built" ); - if ( !is_true( level.navcomputer_spawned ) ) - { - update_sidequest_stats( "sq_highrise_started" ); - } - level thread navcomputer_waitfor_navcard(); - stage_start( "sq", "atd" ); - level waittill( "sq_atd_over" ); - stage_start( "sq", "slb" ); - level waittill( "sq_slb_over" ); - if ( !is_true( level.richcompleted ) ) - { - level thread sidequest_start( "sq_1" ); - } - if ( !is_true( level.maxcompleted ) ) - { - level thread sidequest_start( "sq_2" ); - } - flag_wait( "sq_branch_complete" ); - tower_punch_watcher(); - if ( flag( "sq_ric_tower_complete" ) ) - { - update_sidequest_stats( "sq_highrise_rich_complete" ); - } - else - { - if ( flag( "sq_max_tower_complete" ) ) - { - update_sidequest_stats( "sq_highrise_maxis_complete" ); - } - } + level thread temp_test_fx(); + + if ( is_true( level.maxcompleted ) && is_true( level.richcompleted ) ) + return; + + level thread watch_nav_computer_built(); + flag_wait( "power_on" ); + level thread vo_richtofen_power_on(); + flag_wait( "sq_nav_built" ); + + if ( !is_true( level.navcomputer_spawned ) ) + update_sidequest_stats( "sq_highrise_started" ); + + level thread navcomputer_waitfor_navcard(); + stage_start( "sq", "atd" ); + + level waittill( "sq_atd_over" ); + + stage_start( "sq", "slb" ); + + level waittill( "sq_slb_over" ); + + if ( !is_true( level.richcompleted ) ) + level thread sidequest_start( "sq_1" ); + + if ( !is_true( level.maxcompleted ) ) + level thread sidequest_start( "sq_2" ); + + flag_wait( "sq_branch_complete" ); + tower_punch_watcher(); + + if ( flag( "sq_ric_tower_complete" ) ) + update_sidequest_stats( "sq_highrise_rich_complete" ); + else if ( flag( "sq_max_tower_complete" ) ) + update_sidequest_stats( "sq_highrise_maxis_complete" ); } sidequest_logic_1() { - stage_start( "sq_1", "ssp_1" ); - level waittill( "sq_1_ssp_1_over" ); - stage_start( "sq_1", "pts_1" ); - level waittill( "sq_1_pts_1_over" ); - flag_set( "sq_branch_complete" ); - flag_set( "sq_ric_tower_complete" ); - exploder( 1001 ); - clientnotify( "start_fireball_dragon_b" ); - wait 0,1; - clientnotify( "fxanim_dragon_b_start" ); - wait getanimlength( %fxanim_zom_highrise_dragon_b_anim ); - exploder( 1002 ); - level thread vo_richtofen_punch_tower(); + stage_start( "sq_1", "ssp_1" ); + + level waittill( "sq_1_ssp_1_over" ); + + stage_start( "sq_1", "pts_1" ); + + level waittill( "sq_1_pts_1_over" ); + + flag_set( "sq_branch_complete" ); + flag_set( "sq_ric_tower_complete" ); + exploder( 1001 ); + clientnotify( "start_fireball_dragon_b" ); + wait 0.1; + clientnotify( "fxanim_dragon_b_start" ); + wait( getanimlength( %fxanim_zom_highrise_dragon_b_anim ) ); + exploder( 1002 ); + level thread vo_richtofen_punch_tower(); } sidequest_logic_2() { - stage_start( "sq_2", "ssp_2" ); - level waittill( "sq_2_ssp_2_over" ); - stage_start( "sq_2", "pts_2" ); - level waittill( "sq_2_pts_2_over" ); - exploder( 901 ); - clientnotify( "start_fireball_dragon_a" ); - wait 0,1; - clientnotify( "fxanim_dragon_a_start" ); - wait getanimlength( %fxanim_zom_highrise_dragon_a_anim ); - exploder( 902 ); - flag_set( "sq_branch_complete" ); - flag_set( "sq_max_tower_complete" ); - level thread vo_maxis_punch_tower(); + stage_start( "sq_2", "ssp_2" ); + + level waittill( "sq_2_ssp_2_over" ); + + stage_start( "sq_2", "pts_2" ); + + level waittill( "sq_2_pts_2_over" ); + + exploder( 901 ); + clientnotify( "start_fireball_dragon_a" ); + wait 0.1; + clientnotify( "fxanim_dragon_a_start" ); + wait( getanimlength( %fxanim_zom_highrise_dragon_a_anim ) ); + exploder( 902 ); + flag_set( "sq_branch_complete" ); + flag_set( "sq_max_tower_complete" ); + level thread vo_maxis_punch_tower(); } watch_nav_computer_built() { - if ( !is_true( level.navcomputer_spawned ) ) - { - wait_for_buildable( "sq_common" ); - } - flag_set( "sq_nav_built" ); + if ( !is_true( level.navcomputer_spawned ) ) + wait_for_buildable( "sq_common" ); + + flag_set( "sq_nav_built" ); } get_specific_player( num ) { - players = get_players(); - return undefined; + players = get_players(); + return undefined; } tower_punch_watcher() { - level thread playtoweraudio(); - a_leg_trigs = []; - _a411 = level.a_wind_order; - _k411 = getFirstArrayKey( _a411 ); - while ( isDefined( _k411 ) ) - { - str_wind = _a411[ _k411 ]; - a_leg_trigs[ a_leg_trigs.size ] = "sq_tower_" + str_wind; - _k411 = getNextArrayKey( _a411, _k411 ); - } - level.n_cur_leg = 0; - level.sq_leg_punches = 0; - _a419 = a_leg_trigs; - _k419 = getFirstArrayKey( _a419 ); - while ( isDefined( _k419 ) ) - { - str_leg = _a419[ _k419 ]; - t_leg = getent( str_leg, "script_noteworthy" ); - t_leg thread tower_punch_watch_leg( a_leg_trigs ); - _k419 = getNextArrayKey( _a419, _k419 ); - } - flag_wait( "sq_tower_active" ); + level thread playtoweraudio(); + a_leg_trigs = []; + + foreach ( str_wind in level.a_wind_order ) + a_leg_trigs[a_leg_trigs.size] = "sq_tower_" + str_wind; + + level.n_cur_leg = 0; + level.sq_leg_punches = 0; + + foreach ( str_leg in a_leg_trigs ) + { + t_leg = getent( str_leg, "script_noteworthy" ); + t_leg thread tower_punch_watch_leg( a_leg_trigs ); + } + + flag_wait( "sq_tower_active" ); /# - iprintlnbold( "TOWER ACTIVE" ); + iprintlnbold( "TOWER ACTIVE" ); #/ - if ( flag( "sq_ric_tower_complete" ) ) - { - exploder_stop( 1002 ); - exploder_stop( 903 ); - exploder( 1003 ); - } - else - { - exploder_stop( 902 ); - exploder_stop( 1003 ); - exploder( 903 ); - } - wait 1; - level thread tower_in_sync_lightning(); - wait 1; - level thread sq_give_all_perks(); + if ( flag( "sq_ric_tower_complete" ) ) + { + exploder_stop( 1002 ); + exploder_stop( 903 ); + exploder( 1003 ); + } + else + { + exploder_stop( 902 ); + exploder_stop( 1003 ); + exploder( 903 ); + } + + wait 1; + level thread tower_in_sync_lightning(); + wait 1; + level thread sq_give_all_perks(); } tower_in_sync_lightning() { - s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" ); - playfx( level._effect[ "sidequest_tower_bolts" ], s_tower_top.origin - vectorScale( ( 0, 0, 0 ), 88 ), ( 0, 0, 0 ) ); + s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" ); + playfx( level._effect["sidequest_tower_bolts"], s_tower_top.origin - vectorscale( ( 0, 0, 1 ), 88.0 ), ( 0, 0, 1 ) ); } playtoweraudio() { - origin = ( 2207, 682, 3239 ); - ent = spawn( "script_origin", origin ); - ent playsound( "zmb_sq_tower_powerup_start_1" ); - ent playloopsound( "zmb_sq_tower_powerup_loop_1", 1 ); - flag_wait( "sq_tower_active" ); - ent stoploopsound( 2 ); - ent playsound( "zmb_sq_tower_powerup_start_2" ); - wait 2; - ent playloopsound( "zmb_sq_tower_powerup_loop_2", 1 ); + origin = ( 2207, 682, 3239 ); + ent = spawn( "script_origin", origin ); + ent playsound( "zmb_sq_tower_powerup_start_1" ); + ent playloopsound( "zmb_sq_tower_powerup_loop_1", 1 ); + flag_wait( "sq_tower_active" ); + ent stoploopsound( 2 ); + ent playsound( "zmb_sq_tower_powerup_start_2" ); + wait 2; + ent playloopsound( "zmb_sq_tower_powerup_loop_2", 1 ); } tower_punch_watch_leg( a_leg_trigs ) { - while ( !flag( "sq_tower_active" ) ) - { - self waittill( "trigger", who ); - if ( level.n_cur_leg < a_leg_trigs.size && isplayer( who ) || who.current_melee_weapon == "tazer_knuckles_zm" && who.current_melee_weapon == "tazer_knuckles_upgraded_zm" ) - { - if ( self.script_noteworthy == a_leg_trigs[ level.n_cur_leg ] ) - { - level.n_cur_leg++; - self playsound( "zmb_sq_leg_powerup_" + level.n_cur_leg ); - if ( level.n_cur_leg == 4 ) - { - flag_set( "sq_tower_active" ); - } - } - else - { - level.n_cur_leg = 0; - self playsound( "zmb_sq_leg_powerdown" ); - } - level.sq_leg_punches++; - self playsound( "zmb_sq_leg_powerup_" + level.sq_leg_punches ); - if ( level.sq_leg_punches >= 4 && !flag( "sq_tower_active" ) ) - { - wait 1; - self playsound( "zmb_sq_leg_powerdown" ); - exploder_stop( 1002 ); - exploder_stop( 902 ); - cur_round = level.round_number; - level waittill( "start_of_round" ); - level.sq_leg_punches = 0; - wait 2; - if ( flag( "sq_ric_tower_complete" ) ) - { - exploder( 1002 ); - break; - } - else - { - exploder( 902 ); - } - } - } - } + while ( !flag( "sq_tower_active" ) ) + { + self waittill( "trigger", who ); + + if ( level.n_cur_leg < a_leg_trigs.size && isplayer( who ) && ( who.current_melee_weapon == "tazer_knuckles_zm" || who.current_melee_weapon == "tazer_knuckles_upgraded_zm" ) ) + { + if ( self.script_noteworthy == a_leg_trigs[level.n_cur_leg] ) + { + level.n_cur_leg++; + self playsound( "zmb_sq_leg_powerup_" + level.n_cur_leg ); + + if ( level.n_cur_leg == 4 ) + flag_set( "sq_tower_active" ); + } + else + { + level.n_cur_leg = 0; + self playsound( "zmb_sq_leg_powerdown" ); + } + + level.sq_leg_punches++; + self playsound( "zmb_sq_leg_powerup_" + level.sq_leg_punches ); + + if ( level.sq_leg_punches >= 4 && !flag( "sq_tower_active" ) ) + { + wait 1; + self playsound( "zmb_sq_leg_powerdown" ); + exploder_stop( 1002 ); + exploder_stop( 902 ); + cur_round = level.round_number; + + level waittill( "start_of_round" ); + + level.sq_leg_punches = 0; + wait 2; + + if ( flag( "sq_ric_tower_complete" ) ) + exploder( 1002 ); + else + exploder( 902 ); + } + } + } } mahjong_tiles_setup() { - a_winds = array_randomize( array( "north", "south", "east", "west" ) ); - a_colors = array_randomize( array( "blk", "blu", "grn", "red" ) ); - a_locs = array_randomize( getstructarray( "sq_tile_loc_random", "targetname" ) ); + a_winds = array_randomize( array( "north", "south", "east", "west" ) ); + a_colors = array_randomize( array( "blk", "blu", "grn", "red" ) ); + a_locs = array_randomize( getstructarray( "sq_tile_loc_random", "targetname" ) ); /# - assert( a_locs.size > a_winds.size, "zm_highrise_sq: not enough locations for mahjong tiles!" ); + assert( a_locs.size > a_winds.size, "zm_highrise_sq: not enough locations for mahjong tiles!" ); #/ - a_wind_order = array( "none" ); - i = 0; - while ( i < a_winds.size ) - { - a_wind_order[ a_wind_order.size ] = a_winds[ i ]; - m_wind_tile = getent( "tile_" + a_winds[ i ] + "_" + a_colors[ i ], "targetname" ); - m_wind_tile.script_noteworthy = undefined; - s_spot = a_locs[ i ]; - if ( a_winds[ i ] == "north" ) - { - s_spot = getstruct( "sq_tile_loc_north", "targetname" ); - } - m_wind_tile.origin = s_spot.origin; - m_wind_tile.angles = s_spot.angles; - i++; - } - i = 0; - while ( i < a_colors.size ) - { - m_num_tile = getent( "tile_" + ( i + 1 ) + "_" + a_colors[ i ], "targetname" ); - m_num_tile.script_noteworthy = undefined; - s_spot = a_locs[ i + a_winds.size ]; - m_num_tile.origin = s_spot.origin; - m_num_tile.angles = s_spot.angles; - i++; - } - a_tiles = getentarray( "mahjong_tile", "script_noteworthy" ); - array_delete( a_tiles ); - level.a_wind_order = a_winds; + a_wind_order = array( "none" ); + + for ( i = 0; i < a_winds.size; i++ ) + { + a_wind_order[a_wind_order.size] = a_winds[i]; + m_wind_tile = getent( "tile_" + a_winds[i] + "_" + a_colors[i], "targetname" ); + m_wind_tile.script_noteworthy = undefined; + s_spot = a_locs[i]; + + if ( a_winds[i] == "north" ) + s_spot = getstruct( "sq_tile_loc_north", "targetname" ); + + m_wind_tile.origin = s_spot.origin; + m_wind_tile.angles = s_spot.angles; + } + + for ( i = 0; i < a_colors.size; i++ ) + { + m_num_tile = getent( "tile_" + ( i + 1 ) + "_" + a_colors[i], "targetname" ); + m_num_tile.script_noteworthy = undefined; + s_spot = a_locs[i + a_winds.size]; + m_num_tile.origin = s_spot.origin; + m_num_tile.angles = s_spot.angles; + } + + a_tiles = getentarray( "mahjong_tile", "script_noteworthy" ); + array_delete( a_tiles ); + level.a_wind_order = a_winds; } light_dragon_fireworks( str_dragon, n_num_fireworks ) { - i = 0; - while ( i < n_num_fireworks ) - { - wait 1; - clientnotify( str_dragon + "_start_firework" ); - wait 1; - i++; - } + for ( i = 0; i < n_num_fireworks; i++ ) + { + wait 1; + clientnotify( str_dragon + "_start_firework" ); + wait 1; + } } temp_test_fx() { - n_index = 0; - level waittill( "temp_play_next_sq_fx" ); - clientnotify( "r_drg_tail" ); - clientnotify( "m_drg_tail" ); - while ( n_index < 7 ) - { - level waittill( "temp_play_next_sq_fx" ); - clientnotify( "r_start_firework" ); - clientnotify( "m_start_firework" ); - n_index++; - } - level waittill( "temp_play_next_sq_fx" ); - exploder( 901 ); - clientnotify( "start_fireball_dragon_b" ); - wait 0,1; - clientnotify( "fxanim_dragon_b_start" ); - level waittill( "temp_play_next_sq_fx" ); - clientnotify( "start_fireball_dragon_a" ); - wait 0,1; - clientnotify( "fxanim_dragon_a_start" ); - level waittill( "temp_play_next_sq_fx" ); - wait 1; - exploder( 902 ); - wait 1; - exploder( 903 ); - level waittill( "temp_play_next_sq_fx" ); - stop_exploder( 901 ); - stop_exploder( 902 ); - stop_exploder( 903 ); - exploder( 1001 ); - exploder( 1002 ); - exploder( 1003 ); + n_index = 0; + + level waittill( "temp_play_next_sq_fx" ); + + clientnotify( "r_drg_tail" ); + clientnotify( "m_drg_tail" ); + + while ( n_index < 7 ) + { + level waittill( "temp_play_next_sq_fx" ); + + clientnotify( "r_start_firework" ); + clientnotify( "m_start_firework" ); + n_index++; + } + + level waittill( "temp_play_next_sq_fx" ); + + exploder( 901 ); + clientnotify( "start_fireball_dragon_b" ); + wait 0.1; + clientnotify( "fxanim_dragon_b_start" ); + + level waittill( "temp_play_next_sq_fx" ); + + clientnotify( "start_fireball_dragon_a" ); + wait 0.1; + clientnotify( "fxanim_dragon_a_start" ); + + level waittill( "temp_play_next_sq_fx" ); + + wait 1; + exploder( 902 ); + wait 1; + exploder( 903 ); + + level waittill( "temp_play_next_sq_fx" ); + + stop_exploder( 901 ); + stop_exploder( 902 ); + stop_exploder( 903 ); + exploder( 1001 ); + exploder( 1002 ); + exploder( 1003 ); } generic_stage_complete() { - level._stage_active = 0; + level._stage_active = 0; } complete_sidequest() { - level thread sidequest_done(); + level thread sidequest_done(); } sidequest_done() { + } get_variant_from_entity_num( player_number ) { - if ( !isDefined( player_number ) ) - { - player_number = 0; - } - post_fix = "a"; - switch( player_number ) - { - case 0: - post_fix = "a"; - break; - case 1: - post_fix = "b"; - break; - case 2: - post_fix = "c"; - break; - case 3: - post_fix = "d"; - break; - } - return post_fix; + if ( !isdefined( player_number ) ) + player_number = 0; + + post_fix = "a"; + + switch ( player_number ) + { + case "0": + post_fix = "a"; + break; + case "1": + post_fix = "b"; + break; + case "2": + post_fix = "c"; + break; + case "3": + post_fix = "d"; + break; + } + + return post_fix; } init_navcard() { - flag_wait( "start_zombie_round_logic" ); - spawn_card = 1; - players = get_players(); - _a678 = players; - _k678 = getFirstArrayKey( _a678 ); - while ( isDefined( _k678 ) ) - { - player = _a678[ _k678 ]; - has_card = does_player_have_map_navcard( player ); - if ( has_card ) - { - player.navcard_grabbed = level.map_navcard; - spawn_card = 0; - } - _k678 = getNextArrayKey( _a678, _k678 ); - } - thread sq_refresh_player_navcard_hud(); - if ( !spawn_card ) - { - return; - } - next_model = "p6_zm_keycard"; - place_navcard( next_model, next_model, level.map_navcard, level.navcard_needed ); -} + flag_wait( "start_zombie_round_logic" ); + spawn_card = 1; + players = get_players(); -place_navcard( str_model, str_next_model, str_stat, str_next_stat ) -{ - org = ( 1743, 1070, 3244,5 ); - angles = ( 0, 0, 0 ); - navcard = spawn( "script_model", org ); - navcard setmodel( str_model ); - navcard.angles = angles; - wait 1; - navcard_pickup_trig = spawn( "trigger_radius_use", org, 0, 84, 72 ); - navcard_pickup_trig setcursorhint( "HINT_NOICON" ); - navcard_pickup_trig sethintstring( &"ZOMBIE_NAVCARD_PICKUP" ); - navcard_pickup_trig triggerignoreteam(); - is_holding_card = 0; - while ( 1 ) - { - navcard_pickup_trig waittill( "trigger", who ); - if ( is_player_valid( who ) ) - { - if ( who maps/mp/zombies/_zm_stats::get_global_stat( str_next_stat ) ) - { - is_holding_card = 1; - who maps/mp/zombies/_zm_stats::set_global_stat( str_next_stat, 0 ); - } - who playsound( "zmb_buildable_piece_add" ); - who maps/mp/zombies/_zm_stats::set_global_stat( str_stat, 1 ); - who.navcard_grabbed = str_stat; - wait_network_frame(); - is_stat = who maps/mp/zombies/_zm_stats::get_global_stat( str_stat ); - is_next_stat = who maps/mp/zombies/_zm_stats::get_global_stat( str_next_stat ); - thread sq_refresh_player_navcard_hud(); - break; - } - else - { - } - } - navcard delete(); - navcard_pickup_trig delete(); - if ( is_holding_card ) - { - level thread place_navcard( str_next_model, str_model, str_next_stat, str_stat ); - } + foreach ( player in players ) + { + has_card = does_player_have_map_navcard( player ); + + if ( has_card ) + { + player.navcard_grabbed = level.map_navcard; + spawn_card = 0; + } + } + + thread sq_refresh_player_navcard_hud(); + + if ( !spawn_card ) + return; + + model = "p6_zm_keycard"; + org = ( 1743, 1070, 3244.5 ); + angles = ( 0, 0, 0 ); + maps\mp\zombies\_zm_utility::place_navcard( model, level.map_navcard, org, angles ); } init_navcomputer() { - flag_wait( "start_zombie_round_logic" ); - spawn_navcomputer = 1; - players = get_players(); - _a757 = players; - _k757 = getFirstArrayKey( _a757 ); - while ( isDefined( _k757 ) ) - { - player = _a757[ _k757 ]; - built_comptuer = player maps/mp/zombies/_zm_stats::get_global_stat( "sq_highrise_started" ); - if ( !built_comptuer ) - { - spawn_navcomputer = 0; - break; - } - else - { - _k757 = getNextArrayKey( _a757, _k757 ); - } - } - if ( !spawn_navcomputer ) - { - return; - } - level.navcomputer_spawned = 1; - get_players()[ 0 ] maps/mp/zombies/_zm_buildables::player_finish_buildable( level.sq_buildable.buildablezone ); - while ( isDefined( level.sq_buildable ) && isDefined( level.sq_buildable.model ) ) - { - buildable = level.sq_buildable.buildablezone; - i = 0; - while ( i < buildable.pieces.size ) - { - if ( isDefined( buildable.pieces[ i ].model ) ) - { - buildable.pieces[ i ].model delete(); - maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( buildable.pieces[ i ].unitrigger ); - } - if ( isDefined( buildable.pieces[ i ].part_name ) ) - { - buildable.stub.model notsolid(); - buildable.stub.model show(); - buildable.stub.model showpart( buildable.pieces[ i ].part_name ); - } - i++; - } - } + flag_wait( "start_zombie_round_logic" ); + spawn_navcomputer = 1; + players = get_players(); + + foreach ( player in players ) + { + built_comptuer = player maps\mp\zombies\_zm_stats::get_global_stat( "sq_highrise_started" ); + + if ( !built_comptuer ) + { + spawn_navcomputer = 0; + break; + } + } + + if ( !spawn_navcomputer ) + return; + + level.navcomputer_spawned = 1; + get_players()[0] maps\mp\zombies\_zm_buildables::player_finish_buildable( level.sq_buildable.buildablezone ); + + if ( isdefined( level.sq_buildable ) && isdefined( level.sq_buildable.model ) ) + { + buildable = level.sq_buildable.buildablezone; + + for ( i = 0; i < buildable.pieces.size; i++ ) + { + if ( isdefined( buildable.pieces[i].model ) ) + { + buildable.pieces[i].model delete(); + maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( buildable.pieces[i].unitrigger ); + } + + if ( isdefined( buildable.pieces[i].part_name ) ) + { + buildable.stub.model notsolid(); + buildable.stub.model show(); + buildable.stub.model showpart( buildable.pieces[i].part_name ); + } + } + } } navcomputer_waitfor_navcard() { - spawn_trigger = 1; - players = get_players(); - _a801 = players; - _k801 = getFirstArrayKey( _a801 ); - while ( isDefined( _k801 ) ) - { - player = _a801[ _k801 ]; - card_swiped = player maps/mp/zombies/_zm_stats::get_global_stat( "navcard_applied_zm_highrise" ); - if ( card_swiped ) - { - spawn_trigger = 0; - break; - } - else - { - _k801 = getNextArrayKey( _a801, _k801 ); - } - } - if ( !spawn_trigger ) - { - return; - } - computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); - trig_pos = getstruct( "sq_common_key", "targetname" ); - navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 ); - navcomputer_use_trig setcursorhint( "HINT_NOICON" ); - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); - navcomputer_use_trig triggerignoreteam(); - while ( 1 ) - { - navcomputer_use_trig waittill( "trigger", who ); - if ( isplayer( who ) && is_player_valid( who ) ) - { - if ( does_player_have_correct_navcard( who ) ) - { - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" ); - who playsound( "zmb_sq_navcard_success" ); - update_sidequest_stats( "navcard_applied_zm_highrise" ); - who.navcard_grabbed = undefined; - wait 1; - navcomputer_use_trig delete(); - return; - break; - } - else - { - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_FAIL" ); - who playsound( "zmb_sq_navcard_fail" ); - wait 1; - navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); - } - } - } + spawn_trigger = 1; + players = get_players(); + + foreach ( player in players ) + { + card_swiped = player maps\mp\zombies\_zm_stats::get_global_stat( "navcard_applied_zm_highrise" ); + + if ( card_swiped ) + { + spawn_trigger = 0; + break; + } + } + + if ( !spawn_trigger ) + return; + + computer_buildable_trig = getent( "sq_common_buildable_trigger", "targetname" ); + trig_pos = getstruct( "sq_common_key", "targetname" ); + navcomputer_use_trig = spawn( "trigger_radius_use", trig_pos.origin, 0, 48, 48 ); + navcomputer_use_trig setcursorhint( "HINT_NOICON" ); + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); + navcomputer_use_trig triggerignoreteam(); + + while ( true ) + { + navcomputer_use_trig waittill( "trigger", who ); + + if ( isplayer( who ) && is_player_valid( who ) ) + { + if ( does_player_have_correct_navcard( who ) ) + { + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_SUCCESS" ); + who playsound( "zmb_sq_navcard_success" ); + update_sidequest_stats( "navcard_applied_zm_highrise" ); + who.navcard_grabbed = undefined; + wait 1; + navcomputer_use_trig delete(); + return; + } + else + { + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_FAIL" ); + who playsound( "zmb_sq_navcard_fail" ); + wait 1; + navcomputer_use_trig sethintstring( &"ZOMBIE_NAVCARD_USE" ); + } + } + } } update_sidequest_stats( stat_name ) { - maxis_complete = 0; - rich_complete = 0; - started = 0; - if ( stat_name == "sq_highrise_maxis_complete" ) - { - maxis_complete = 1; - } - else - { - if ( stat_name == "sq_highrise_rich_complete" ) - { - rich_complete = 1; - } - } - players = get_players(); - _a867 = players; - _k867 = getFirstArrayKey( _a867 ); - while ( isDefined( _k867 ) ) - { - player = _a867[ _k867 ]; - if ( stat_name == "sq_highrise_started" ) - { - player.highrise_sq_started = 1; - } - else if ( stat_name == "navcard_applied_zm_highrise" ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( level.navcard_needed, 0 ); - thread sq_refresh_player_navcard_hud(); - } - else - { - if ( !is_true( player.highrise_sq_started ) ) - { - } - } - else - { - if ( rich_complete ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( "sq_highrise_last_completed", 1 ); - incrementcounter( "global_zm_total_rich_sq_complete_highrise", 1 ); - } - else - { - if ( maxis_complete ) - { - player maps/mp/zombies/_zm_stats::set_global_stat( "sq_highrise_last_completed", 2 ); - incrementcounter( "global_zm_total_max_sq_complete_highrise", 1 ); - } - } - player maps/mp/zombies/_zm_stats::increment_client_stat( stat_name, 0 ); - } - _k867 = getNextArrayKey( _a867, _k867 ); - } - if ( rich_complete || maxis_complete ) - { - level notify( "highrise_sidequest_achieved" ); - } + maxis_complete = 0; + rich_complete = 0; + started = 0; + + if ( stat_name == "sq_highrise_maxis_complete" ) + maxis_complete = 1; + else if ( stat_name == "sq_highrise_rich_complete" ) + rich_complete = 1; + + players = get_players(); + + foreach ( player in players ) + { + if ( stat_name == "sq_highrise_started" ) + player.highrise_sq_started = 1; + else if ( stat_name == "navcard_applied_zm_highrise" ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( level.navcard_needed, 0 ); + thread sq_refresh_player_navcard_hud(); + } + else if ( !is_true( player.highrise_sq_started ) ) + continue; + + if ( rich_complete ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( "sq_highrise_last_completed", 1 ); + incrementcounter( "global_zm_total_rich_sq_complete_highrise", 1 ); + } + else if ( maxis_complete ) + { + player maps\mp\zombies\_zm_stats::set_global_stat( "sq_highrise_last_completed", 2 ); + incrementcounter( "global_zm_total_max_sq_complete_highrise", 1 ); + } + + player maps\mp\zombies\_zm_stats::increment_client_stat( stat_name, 0 ); + } + + if ( rich_complete || maxis_complete ) + level notify( "highrise_sidequest_achieved" ); } sq_give_all_perks() { - vending_triggers = getentarray( "zombie_vending", "targetname" ); - perks = []; - i = 0; - while ( i < vending_triggers.size ) - { - perk = vending_triggers[ i ].script_noteworthy; - if ( perk == "specialty_weapupgrade" ) - { - i++; - continue; - } - else - { - perks[ perks.size ] = perk; - } - i++; - } - if ( flag( "sq_ric_tower_complete" ) ) - { - v_fireball_start_loc = ( 1946, 608, 3338 ); - n_fireball_exploder = 1001; - } - else - { - v_fireball_start_loc = ( 1068, -1362, 3340,5 ); - n_fireball_exploder = 901; - } - players = getplayers(); - _a935 = players; - _k935 = getFirstArrayKey( _a935 ); - while ( isDefined( _k935 ) ) - { - player = _a935[ _k935 ]; - player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ); - level waittill( "sq_fireball_hit_player" ); - _k935 = getNextArrayKey( _a935, _k935 ); - } + vending_triggers = getentarray( "zombie_vending", "targetname" ); + perks = []; + + for ( i = 0; i < vending_triggers.size; i++ ) + { + perk = vending_triggers[i].script_noteworthy; + + if ( perk == "specialty_weapupgrade" ) + continue; + + perks[perks.size] = perk; + } + + if ( flag( "sq_ric_tower_complete" ) ) + { + v_fireball_start_loc = ( 1946, 608, 3338 ); + n_fireball_exploder = 1001; + } + else + { + v_fireball_start_loc = ( 1068, -1362, 3340.5 ); + n_fireball_exploder = 901; + } + + players = getplayers(); + + foreach ( player in players ) + { + player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ); + + level waittill( "sq_fireball_hit_player" ); + } } sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ) { - exploder( n_fireball_exploder ); - m_fireball = spawn( "script_model", v_fireball_start_loc ); - m_fireball setmodel( "tag_origin" ); - playfxontag( level._effect[ "sidequest_dragon_fireball_max" ], m_fireball, "tag_origin" ); - wait_network_frame(); - v_to_player = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_fireball.origin ); - v_move_spot = m_fireball.origin + ( v_to_player * 48 ); - m_fireball.origin = v_move_spot; - m_fireball.origin = self gettagorigin( "J_SpineLower" ); - m_fireball linkto( self, "J_SpineLower" ); - wait 1,5; - playfx( level._effect[ "sidequest_flash" ], m_fireball.origin ); - m_fireball delete(); - level notify( "sq_fireball_hit_player" ); - _a967 = perks; - _k967 = getFirstArrayKey( _a967 ); - while ( isDefined( _k967 ) ) - { - perk = _a967[ _k967 ]; - if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) - { - } - else - { - if ( self hasperk( perk ) || self maps/mp/zombies/_zm_perks::has_perk_paused( perk ) ) - { - break; - } - else - { - self maps/mp/zombies/_zm_perks::give_perk( perk, 0 ); - wait 1; - } - } - _k967 = getNextArrayKey( _a967, _k967 ); - } + exploder( n_fireball_exploder ); + m_fireball = spawn( "script_model", v_fireball_start_loc ); + m_fireball setmodel( "tag_origin" ); + playfxontag( level._effect["sidequest_dragon_fireball_max"], m_fireball, "tag_origin" ); + + do + { + wait_network_frame(); + v_to_player = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_fireball.origin ); + v_move_spot = m_fireball.origin + v_to_player * 48; + m_fireball.origin = v_move_spot; + } + while ( distancesquared( m_fireball.origin, self gettagorigin( "J_SpineLower" ) ) > 2304 ); + + m_fireball.origin = self gettagorigin( "J_SpineLower" ); + m_fireball linkto( self, "J_SpineLower" ); + wait 1.5; + playfx( level._effect["sidequest_flash"], m_fireball.origin ); + m_fireball delete(); + level notify( "sq_fireball_hit_player" ); + + foreach ( perk in perks ) + { + if ( isdefined( self.perk_purchased ) && self.perk_purchased == perk ) + continue; + + if ( self hasperk( perk ) || self maps\mp\zombies\_zm_perks::has_perk_paused( perk ) ) + continue; + + self maps\mp\zombies\_zm_perks::give_perk( perk, 0 ); + wait 1; + } } sq_refresh_player_navcard_hud_internal() { - self endon( "disconnect" ); - navcard_bits = 0; - i = 0; - while ( i < level.navcards.size ) - { - hasit = self maps/mp/zombies/_zm_stats::get_global_stat( level.navcards[ i ] ); - if ( isDefined( self.navcard_grabbed ) && self.navcard_grabbed == level.navcards[ i ] ) - { - hasit = 1; - } - if ( hasit ) - { - navcard_bits += 1 << i; - } - i++; - } - wait_network_frame(); - self setclientfield( "navcard_held", 0 ); - if ( navcard_bits > 0 ) - { - wait_network_frame(); - self setclientfield( "navcard_held", navcard_bits ); - } + self endon( "disconnect" ); + navcard_bits = 0; + + for ( i = 0; i < level.navcards.size; i++ ) + { + hasit = self maps\mp\zombies\_zm_stats::get_global_stat( level.navcards[i] ); + + if ( isdefined( self.navcard_grabbed ) && self.navcard_grabbed == level.navcards[i] ) + hasit = 1; + + if ( hasit ) + navcard_bits += ( 1 << i ); + } + + wait_network_frame(); + self setclientfield( "navcard_held", 0 ); + + if ( navcard_bits > 0 ) + { + wait_network_frame(); + self setclientfield( "navcard_held", navcard_bits ); + } } sq_refresh_player_navcard_hud() { - if ( !isDefined( level.navcards ) ) - { - return; - } - players = get_players(); - _a1013 = players; - _k1013 = getFirstArrayKey( _a1013 ); - while ( isDefined( _k1013 ) ) - { - player = _a1013[ _k1013 ]; - player thread sq_refresh_player_navcard_hud_internal(); - _k1013 = getNextArrayKey( _a1013, _k1013 ); - } + if ( !isdefined( level.navcards ) ) + return; + + players = get_players(); + + foreach ( player in players ) + player thread sq_refresh_player_navcard_hud_internal(); } vo_maxis_do_quest() { - wait 20; - if ( 1 ) - { - maxissay( "vox_maxi_sidequest_max_com_0" ); - } - else - { - maxissay( "vox_maxi_sidequest_max_com_1" ); - maxissay( "vox_maxi_sidequest_max_com_2" ); - } + wait 20; + + if ( 1 ) + maxissay( "vox_maxi_sidequest_max_com_0" ); + else + { + maxissay( "vox_maxi_sidequest_max_com_1" ); + maxissay( "vox_maxi_sidequest_max_com_2" ); + } } vo_richtofen_power_on() { - wait 6; - richtofensay( "vox_zmba_sidequest_power_on_0" ); + wait 6; + richtofensay( "vox_zmba_sidequest_power_on_0" ); } vo_richtofen_nav_card() { - switch( self.characterindex ) - { - case 2: - break; - case 0: - case 3: - case 1: - } - if ( 1 ) - { - level thread vo_maxis_first_tower(); - } - else if ( 0 ) - { - level thread vo_richtofen_first_tower(); - } - } - } - } + switch ( self.characterindex ) + { + case "2": + break; + case "0": + break; + case "3": + break; + case "1": + break; + } + + if ( 1 ) + level thread vo_maxis_first_tower(); + else if ( 0 ) + level thread vo_richtofen_first_tower(); } vo_richtofen_first_tower() { - richtofensay( "vox_zmba_sidequest_congratulate_0" ); - richtofensay( "vox_zmba_sidequest_congratulate_1" ); + richtofensay( "vox_zmba_sidequest_congratulate_0" ); + richtofensay( "vox_zmba_sidequest_congratulate_1" ); } vo_maxis_first_tower() { - maxissay( "vox_maxi_sidequest_congratulate_0" ); + maxissay( "vox_maxi_sidequest_congratulate_0" ); } vo_find_nav_card() { - switch( self.characterindex ) - { - case 2: - break; - case 0: - case 3: - case 1: - } - } - } - } + switch ( self.characterindex ) + { + case "2": + break; + case "0": + break; + case "3": + break; + case "1": + break; + } } vo_maxis_find_sniper() { - maxissay( "vox_maxi_sidequest_sniper_rifle_0" ); + maxissay( "vox_maxi_sidequest_sniper_rifle_0" ); } vo_richtofen_find_sniper() { - richtofensay( "vox_zmba_sidequest_sniper_rifle_0" ); - wait 10; - richtofensay( "vox_zmba_sidequest_sniper_rifle_1" ); + richtofensay( "vox_zmba_sidequest_sniper_rifle_0" ); + wait 10; + richtofensay( "vox_zmba_sidequest_sniper_rifle_1" ); } vo_maxis_player_has_pap_ballistic() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_2" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_2" ); } vo_richtofen_punch_tower() { - richtofensay( "vox_zmba_sidequest_punch_tower_0" ); - richtofensay( "vox_zmba_sidequest_punch_tower_1" ); - richtofensay( "vox_zmba_sidequest_punch_tower_2" ); - richtofensay( "vox_zmba_sidequest_punch_tower_3" ); + richtofensay( "vox_zmba_sidequest_punch_tower_0" ); + richtofensay( "vox_zmba_sidequest_punch_tower_1" ); + richtofensay( "vox_zmba_sidequest_punch_tower_2" ); + richtofensay( "vox_zmba_sidequest_punch_tower_3" ); } vo_maxis_punch_tower() { - maxissay( "vox_maxi_sidequest_punch_tower_0" ); + maxissay( "vox_maxi_sidequest_punch_tower_0" ); } vo_weapon_watcher() { - while ( !flag( "sq_player_has_sniper" ) || !flag( "sq_player_has_ballistic" ) ) - { - players = getplayers(); - _a1155 = players; - _k1155 = getFirstArrayKey( _a1155 ); - while ( isDefined( _k1155 ) ) - { - player = _a1155[ _k1155 ]; - if ( !flag( "sq_player_has_sniper" ) && isDefined( player.currentweapon ) && sq_is_weapon_sniper( player.currentweapon ) ) - { - flag_set( "sq_player_has_sniper" ); - if ( isDefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) && player == level.rich_sq_player ) - { - level thread vo_richtofen_find_sniper(); - } - else - { - level thread vo_maxis_find_sniper(); - } - } - else - { - if ( !flag( "sq_player_has_ballistic" ) && isDefined( player.currentweapon ) && player.currentweapon == "knife_ballistic_upgraded_zm" ) - { - flag_set( "sq_player_has_ballistic" ); - level thread vo_maxis_player_has_pap_ballistic(); - } - } - _k1155 = getNextArrayKey( _a1155, _k1155 ); - } - wait 1; - } + while ( !flag( "sq_player_has_sniper" ) || !flag( "sq_player_has_ballistic" ) ) + { + players = getplayers(); + + foreach ( player in players ) + { + if ( !flag( "sq_player_has_sniper" ) && isdefined( player.currentweapon ) && sq_is_weapon_sniper( player.currentweapon ) ) + { + flag_set( "sq_player_has_sniper" ); + + if ( isdefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) && player == level.rich_sq_player ) + level thread vo_richtofen_find_sniper(); + else + level thread vo_maxis_find_sniper(); + + continue; + } + + if ( !flag( "sq_player_has_ballistic" ) && isdefined( player.currentweapon ) && player.currentweapon == "knife_ballistic_upgraded_zm" ) + { + flag_set( "sq_player_has_ballistic" ); + level thread vo_maxis_player_has_pap_ballistic(); + } + } + + wait 1; + } } sq_is_weapon_sniper( str_weapon ) { - a_snipers = array( "dsr50", "barretm82", "svu" ); - _a1184 = a_snipers; - _k1184 = getFirstArrayKey( _a1184 ); - while ( isDefined( _k1184 ) ) - { - str_sniper = _a1184[ _k1184 ]; - if ( issubstr( str_weapon, str_sniper ) ) - { - return 1; - } - _k1184 = getNextArrayKey( _a1184, _k1184 ); - } - return 0; + a_snipers = array( "dsr50", "barretm82", "svu" ); + + foreach ( str_sniper in a_snipers ) + { + if ( issubstr( str_weapon, str_sniper ) ) + return true; + } + + return false; } richtofensay( vox_line, time ) { - level endon( "end_game" ); - level endon( "intermission" ); - if ( is_true( level.intermission ) ) - { - return; - } - if ( is_true( level.richcompleted ) ) - { - return; - } - level endon( "richtofen_c_complete" ); - if ( !isDefined( time ) ) - { - time = 2; - } - while ( is_true( level.richtofen_talking_to_samuel ) ) - { - wait 1; - } - if ( isDefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) ) - { + level endon( "end_game" ); + level endon( "intermission" ); + + if ( is_true( level.intermission ) ) + return; + + if ( is_true( level.richcompleted ) ) + return; + + level endon( "richtofen_c_complete" ); + + if ( !isdefined( time ) ) + time = 2; + + while ( is_true( level.richtofen_talking_to_samuel ) ) + wait 1; + + if ( isdefined( level.rich_sq_player ) && is_player_valid( level.rich_sq_player ) ) + { /# - iprintlnbold( "Richtoffen Says: " + vox_line ); + iprintlnbold( "Richtoffen Says: " + vox_line ); #/ - level.rich_sq_player playsoundtoplayer( vox_line, level.rich_sq_player ); - if ( !is_true( level.richtofen_talking_to_samuel ) ) - { - level thread richtofen_talking( time ); - } - } + level.rich_sq_player playsoundtoplayer( vox_line, level.rich_sq_player ); + + if ( !is_true( level.richtofen_talking_to_samuel ) ) + level thread richtofen_talking( time ); + } } richtofen_talking( time ) { - level.rich_sq_player.dontspeak = 1; - level.richtofen_talking_to_samuel = 1; - wait time; - level.richtofen_talking_to_samuel = 0; - if ( isDefined( level.rich_sq_player ) ) - { - level.rich_sq_player.dontspeak = 0; - } + level.rich_sq_player.dontspeak = 1; + level.richtofen_talking_to_samuel = 1; + wait( time ); + level.richtofen_talking_to_samuel = 0; + + if ( isdefined( level.rich_sq_player ) ) + level.rich_sq_player.dontspeak = 0; } maxissay( line ) { - level endon( "end_game" ); - level endon( "intermission" ); - if ( is_true( level.maxcompleted ) ) - { - return; - } - if ( is_true( level.intermission ) ) - { - return; - } - while ( is_true( level.maxis_talking ) ) - { - wait 0,05; - } - level.maxis_talking = 1; + level endon( "end_game" ); + level endon( "intermission" ); + + if ( is_true( level.maxcompleted ) ) + return; + + if ( is_true( level.intermission ) ) + return; + + while ( is_true( level.maxis_talking ) ) + wait 0.05; + + level.maxis_talking = 1; /# - iprintlnbold( "Maxis Says: " + line ); + iprintlnbold( "Maxis Says: " + line ); #/ - players = getplayers(); - _a1286 = players; - _k1286 = getFirstArrayKey( _a1286 ); - while ( isDefined( _k1286 ) ) - { - player = _a1286[ _k1286 ]; - player setclientfieldtoplayer( "clientfield_sq_vo", level.sq_clientfield_vo[ line ] ); - _k1286 = getNextArrayKey( _a1286, _k1286 ); - } - wait 10; - level.maxis_talking = 0; + players = getplayers(); + + foreach ( player in players ) + player setclientfieldtoplayer( "clientfield_sq_vo", level.sq_clientfield_vo[line] ); + + wait 10; + level.maxis_talking = 0; } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc index 4d3f963..9a9062d 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_atd.gsc @@ -1,247 +1,249 @@ -#include maps/mp/zm_highrise_sq; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_highrise_sq; init() { - flag_init( "sq_atd_elevator0" ); - flag_init( "sq_atd_elevator1" ); - flag_init( "sq_atd_elevator2" ); - flag_init( "sq_atd_elevator3" ); - flag_init( "sq_atd_elevator_activated" ); - flag_init( "sq_atd_drg_puzzle_1st_error" ); - flag_init( "sq_atd_drg_puzzle_complete" ); - declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 ); - sq_atd_dragon_icon_setup(); + flag_init( "sq_atd_elevator0" ); + flag_init( "sq_atd_elevator1" ); + flag_init( "sq_atd_elevator2" ); + flag_init( "sq_atd_elevator3" ); + flag_init( "sq_atd_elevator_activated" ); + flag_init( "sq_atd_drg_puzzle_1st_error" ); + flag_init( "sq_atd_drg_puzzle_complete" ); + declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 ); + sq_atd_dragon_icon_setup(); } init_stage() { - level._cur_stage_name = "atd"; - clientnotify( "atd" ); + level._cur_stage_name = "atd"; + clientnotify( "atd" ); } stage_logic() { /# - iprintlnbold( "ATD Started" ); + iprintlnbold( "ATD Started" ); #/ - sq_atd_elevators(); - sq_atd_drg_puzzle(); - stage_completed( "sq", level._cur_stage_name ); + sq_atd_elevators(); + sq_atd_drg_puzzle(); + stage_completed( "sq", level._cur_stage_name ); } exit_stage_1( success ) { + } sq_atd_dragon_icon_setup() { - a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); - _a51 = a_dragon_icons; - _k51 = getFirstArrayKey( _a51 ); - while ( isDefined( _k51 ) ) - { - m_icon = _a51[ _k51 ]; - m_icon notsolid(); - m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" ); - m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 ); - m_icon.angles = m_icon.m_elevator.angles; - m_icon linkto( m_icon.m_elevator ); - m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" ); - if ( isDefined( m_icon.m_lit_icon ) ) - { - m_icon.m_lit_icon notsolid(); - m_icon.m_lit_icon.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 ); - m_icon.m_lit_icon.angles = m_icon.angles; - m_icon.m_lit_icon linkto( m_icon.m_elevator ); - } - _k51 = getNextArrayKey( _a51, _k51 ); - } - a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" ); - a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" ); - i = 0; - while ( i < a_atd2_icons.size ) - { - a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 ); - a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles; - a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ]; - i++; - } + a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); + + foreach ( m_icon in a_dragon_icons ) + { + m_icon notsolid(); + m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" ); + m_icon.origin = m_icon.m_elevator.origin + vectorscale( ( 0, 0, 1 ), 134.0 ); + m_icon.angles = m_icon.m_elevator.angles; + m_icon linkto( m_icon.m_elevator ); + m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" ); + + if ( isdefined( m_icon.m_lit_icon ) ) + { + m_icon.m_lit_icon notsolid(); + m_icon.m_lit_icon.origin = m_icon.origin - vectorscale( ( 0, 0, 1 ), 2.0 ); + m_icon.m_lit_icon.angles = m_icon.angles; + m_icon.m_lit_icon linkto( m_icon.m_elevator ); + } + } + + a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" ); + a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" ); + + for ( i = 0; i < a_atd2_icons.size; i++ ) + { + a_atd2_lit_icons[i].origin = a_atd2_icons[i].origin - vectorscale( ( 0, 0, 1 ), 5.0 ); + a_atd2_lit_icons[i].angles = a_atd2_icons[i].angles; + a_atd2_icons[i].lit_icon = a_atd2_lit_icons[i]; + } } sq_atd_elevators() { - a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" ); - a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" ); - i = 0; - while ( i < a_elevators.size ) - { - trig_elevator = getent( a_elevators[ i ], "targetname" ); - trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] ); - i++; - } - while ( flag( "sq_atd_elevator0" ) && flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) && !flag( "sq_atd_elevator3" ) ) - { - flag_wait_any_array( a_elevator_flags ); - wait 0,5; - } + a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" ); + a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" ); + + for ( i = 0; i < a_elevators.size; i++ ) + { + trig_elevator = getent( a_elevators[i], "targetname" ); + trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[i] ); + } + + while ( !flag( "sq_atd_elevator0" ) || !flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) || !flag( "sq_atd_elevator3" ) ) + { + flag_wait_any_array( a_elevator_flags ); + wait 0.5; + } /# - iprintlnbold( "Standing on Elevators Complete" ); + iprintlnbold( "Standing on Elevators Complete" ); #/ - a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); - _a105 = a_dragon_icons; - _k105 = getFirstArrayKey( _a105 ); - while ( isDefined( _k105 ) ) - { - m_icon = _a105[ _k105 ]; - v_off_pos = m_icon.m_lit_icon.origin; - m_icon.m_lit_icon unlink(); - m_icon unlink(); - m_icon.m_lit_icon.origin = m_icon.origin; - m_icon.origin = v_off_pos; - m_icon.m_lit_icon linkto( m_icon.m_elevator ); - m_icon linkto( m_icon.m_elevator ); - m_icon playsound( "zmb_sq_symbol_light" ); - _k105 = getNextArrayKey( _a105, _k105 ); - } - flag_set( "sq_atd_elevator_activated" ); - vo_richtofen_atd_elevators(); - level thread vo_maxis_atd_elevators(); + a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); + + foreach ( m_icon in a_dragon_icons ) + { + v_off_pos = m_icon.m_lit_icon.origin; + m_icon.m_lit_icon unlink(); + m_icon unlink(); + m_icon.m_lit_icon.origin = m_icon.origin; + m_icon.origin = v_off_pos; + m_icon.m_lit_icon linkto( m_icon.m_elevator ); + m_icon linkto( m_icon.m_elevator ); + m_icon playsound( "zmb_sq_symbol_light" ); + } + + flag_set( "sq_atd_elevator_activated" ); + vo_richtofen_atd_elevators(); + level thread vo_maxis_atd_elevators(); } sq_atd_watch_elevator( str_flag ) { - level endon( "sq_atd_elevator_activated" ); - while ( 1 ) - { - self waittill( "trigger", e_who ); - while ( !isplayer( e_who ) ) - { - wait 0,05; - } - flag_set( str_flag ); - while ( isalive( e_who ) && e_who istouching( self ) ) - { - wait 0,05; - } - flag_clear( str_flag ); - } + level endon( "sq_atd_elevator_activated" ); + + while ( true ) + { + self waittill( "trigger", e_who ); + + if ( !isplayer( e_who ) ) + { + wait 0.05; + continue; + } + + flag_set( str_flag ); + + while ( isalive( e_who ) && e_who istouching( self ) ) + wait 0.05; + + flag_clear( str_flag ); + } } sq_atd_drg_puzzle() { - level.sq_atd_cur_drg = 0; - a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" ); - a_puzzle_trigs = array_randomize( a_puzzle_trigs ); - i = 0; - while ( i < a_puzzle_trigs.size ) - { - a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i ); - i++; - } - while ( level.sq_atd_cur_drg < 4 ) - { - wait 1; - } - flag_set( "sq_atd_drg_puzzle_complete" ); - level thread vo_maxis_atd_order_complete(); + level.sq_atd_cur_drg = 0; + a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" ); + a_puzzle_trigs = array_randomize( a_puzzle_trigs ); + + for ( i = 0; i < a_puzzle_trigs.size; i++ ) + a_puzzle_trigs[i] thread drg_puzzle_trig_think( i ); + + while ( level.sq_atd_cur_drg < 4 ) + wait 1; + + flag_set( "sq_atd_drg_puzzle_complete" ); + level thread vo_maxis_atd_order_complete(); /# - iprintlnbold( "Dragon Puzzle COMPLETE" ); + iprintlnbold( "Dragon Puzzle COMPLETE" ); #/ } drg_puzzle_trig_think( n_order_id ) { - self.drg_active = 0; - m_unlit = getent( self.target, "targetname" ); - m_lit = m_unlit.lit_icon; - v_top = m_unlit.origin; - v_hidden = m_lit.origin; - while ( !flag( "sq_atd_drg_puzzle_complete" ) ) - { - while ( self.drg_active ) - { - level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" ); - while ( flag( "sq_atd_drg_puzzle_complete" ) ) - { - continue; - } - } - self waittill( "trigger", e_who ); - if ( level.sq_atd_cur_drg == n_order_id ) - { - m_lit.origin = v_top; - m_unlit.origin = v_hidden; - m_lit playsound( "zmb_sq_symbol_light" ); - self.drg_active = 1; - level thread vo_richtofen_atd_order( level.sq_atd_cur_drg ); - level.sq_atd_cur_drg++; + self.drg_active = 0; + m_unlit = getent( self.target, "targetname" ); + m_lit = m_unlit.lit_icon; + v_top = m_unlit.origin; + v_hidden = m_lit.origin; + + while ( !flag( "sq_atd_drg_puzzle_complete" ) ) + { + if ( self.drg_active ) + { + level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" ); + + if ( flag( "sq_atd_drg_puzzle_complete" ) ) + continue; + } + + self waittill( "trigger", e_who ); + + if ( level.sq_atd_cur_drg == n_order_id ) + { + m_lit.origin = v_top; + m_unlit.origin = v_hidden; + m_lit playsound( "zmb_sq_symbol_light" ); + self.drg_active = 1; + level thread vo_richtofen_atd_order( level.sq_atd_cur_drg ); + level.sq_atd_cur_drg++; /# - iprintlnbold( "Dragon " + n_order_id + " Correct" ); + iprintlnbold( "Dragon " + n_order_id + " Correct" ); #/ - self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden ); - } - else - { - if ( !flag( "sq_atd_drg_puzzle_1st_error" ) ) - { - level thread vo_maxis_atd_order_error(); - } - level.sq_atd_cur_drg = 0; - level notify( "drg_puzzle_reset" ); + self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden ); + } + else + { + if ( !flag( "sq_atd_drg_puzzle_1st_error" ) ) + level thread vo_maxis_atd_order_error(); + + level.sq_atd_cur_drg = 0; + level notify( "drg_puzzle_reset" ); /# - iprintlnbold( "INCORRECT DRAGON" ); + iprintlnbold( "INCORRECT DRAGON" ); #/ - wait 0,5; - } - while ( e_who istouching( self ) ) - { - wait 0,5; - } - } + wait 0.5; + } + + while ( e_who istouching( self ) ) + wait 0.5; + } } drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden ) { - level endon( "sq_atd_drg_puzzle_complete" ); - level waittill( "drg_puzzle_reset" ); - m_unlit.origin = v_top; - m_lit.origin = v_hidden; - m_unlit playsound( "zmb_sq_symbol_fade" ); - self.drg_active = 0; + level endon( "sq_atd_drg_puzzle_complete" ); + + level waittill( "drg_puzzle_reset" ); + + m_unlit.origin = v_top; + m_lit.origin = v_hidden; + m_unlit playsound( "zmb_sq_symbol_fade" ); + self.drg_active = 0; } vo_richtofen_atd_elevators() { - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" ); } vo_maxis_atd_elevators() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" ); } vo_richtofen_atd_order( n_which ) { - str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which; - maps/mp/zm_highrise_sq::richtofensay( str_vox ); + str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which; + maps\mp\zm_highrise_sq::richtofensay( str_vox ); } vo_richtofen_atd_order_error() { - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" ); } vo_maxis_atd_order_error() { - flag_set( "sq_atd_drg_puzzle_1st_error" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" ); + flag_set( "sq_atd_drg_puzzle_1st_error" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" ); } vo_maxis_atd_order_complete() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc index 6fdfd5b..5a220e9 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_pts.gsc @@ -1,570 +1,559 @@ -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zm_highrise_sq; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "fxanim_props" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_highrise_sq; +#include maps\mp\zombies\_zm_unitrigger; init_1() { - flag_init( "pts_1_springpads_placed" ); - declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); + flag_init( "pts_1_springpads_placed" ); + declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); } init_2() { - flag_init( "pts_2_springpads_placed" ); - flag_init( "pts_2_generator_1_started" ); - flag_init( "pts_2_generator_2_started" ); - declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 ); + flag_init( "pts_2_springpads_placed" ); + flag_init( "pts_2_generator_1_started" ); + flag_init( "pts_2_generator_2_started" ); + declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 ); } init_stage_1() { - clientnotify( "pts_1" ); - level.n_launched_zombies = 0; - wait 15; - level thread richtofen_pts_instructions(); - level thread richtofen_pts_placed(); + clientnotify( "pts_1" ); + level.n_launched_zombies = 0; + wait 15; + level thread richtofen_pts_instructions(); + level thread richtofen_pts_placed(); } init_stage_2() { - clientnotify( "pts_2" ); - level.sq_ball_putdown_trigs = []; - level thread maxis_pts_instructions(); - level thread maxis_pts_placed(); + clientnotify( "pts_2" ); + level.sq_ball_putdown_trigs = []; + level thread maxis_pts_instructions(); + level thread maxis_pts_placed(); } stage_logic_1() { /# - iprintlnbold( "PTS1 Started" ); + iprintlnbold( "PTS1 Started" ); #/ - watch_player_springpads( 0 ); - wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 ); - wait_for_zombies_launched(); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 ); - stage_completed( "sq_1", "pts_1" ); + watch_player_springpads( 0 ); + wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 ); + wait_for_zombies_launched(); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 ); + stage_completed( "sq_1", "pts_1" ); } wait_for_zombies_launched() { - level thread richtofen_zombies_launched(); - t_tower = getent( "pts_tower_trig", "targetname" ); - s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" ); - while ( level.n_launched_zombies < 16 ) - { - wait 0,5; - } + level thread richtofen_zombies_launched(); + t_tower = getent( "pts_tower_trig", "targetname" ); + s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" ); + + while ( level.n_launched_zombies < 16 ) + wait 0.5; } watch_zombie_flings() { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - self endon( "equip_springpad_zm_pickup" ); - while ( level.n_launched_zombies < 16 ) - { - self waittill( "fling" ); - level.n_launched_zombies++; - if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 ) - { - level notify( "pts1_say_next_line" ); - } - wait 0,1; - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + self endon( "equip_springpad_zm_pickup" ); + + while ( level.n_launched_zombies < 16 ) + { + self waittill( "fling" ); + + level.n_launched_zombies++; + + if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 ) + level notify( "pts1_say_next_line" ); + + wait 0.1; + } } stage_logic_2() { /# - iprintlnbold( "PTS2 Started" ); + iprintlnbold( "PTS2 Started" ); #/ - watch_player_springpads( 1 ); - level thread wait_for_balls_launched(); - flag_wait( "pts_2_generator_1_started" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); - flag_wait( "pts_2_generator_2_started" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); - level thread maxis_balls_placed(); - stage_completed( "sq_2", "pts_2" ); + watch_player_springpads( 1 ); + level thread wait_for_balls_launched(); + flag_wait( "pts_2_generator_1_started" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 ); + flag_wait( "pts_2_generator_2_started" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 ); + level thread maxis_balls_placed(); + stage_completed( "sq_2", "pts_2" ); } wait_for_balls_launched() { - level.current_generator = 1; - a_lion_spots = getstructarray( "pts_lion", "targetname" ); - _a138 = a_lion_spots; - _k138 = getFirstArrayKey( _a138 ); - while ( isDefined( _k138 ) ) - { - s_lion_spot = _a138[ _k138 ]; - s_lion_spot.a_place_ball_trigs = []; - s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" ); - _k138 = getNextArrayKey( _a138, _k138 ); - } - a_players = getplayers(); - _a145 = a_players; - _k145 = getFirstArrayKey( _a145 ); - while ( isDefined( _k145 ) ) - { - player = _a145[ _k145 ]; - player.a_place_ball_trigs = []; - if ( isDefined( player.zm_sq_has_ball ) ) - { - player thread player_has_ball(); - } - _k145 = getNextArrayKey( _a145, _k145 ); - } - while ( 1 ) - { - level waittill( "zm_ball_picked_up", player ); - player thread player_has_ball(); - } + level.current_generator = 1; + a_lion_spots = getstructarray( "pts_lion", "targetname" ); + + foreach ( s_lion_spot in a_lion_spots ) + { + s_lion_spot.a_place_ball_trigs = []; + s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" ); + } + + a_players = getplayers(); + + foreach ( player in a_players ) + { + player.a_place_ball_trigs = []; + + if ( isdefined( player.zm_sq_has_ball ) ) + player thread player_has_ball(); + } + + while ( true ) + { + level waittill( "zm_ball_picked_up", player ); + + player thread player_has_ball(); + } } player_has_ball() { - self thread player_set_down_ball_watcher(); + self thread player_set_down_ball_watcher(); } player_set_down_ball_watcher() { - self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" ); - pts_putdown_trigs_remove_for_player( self ); + self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" ); + pts_putdown_trigs_remove_for_player( self ); } sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string ) { - t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height ); - t_pickup setcursorhint( "HINT_NOICON" ); - t_pickup sethintstring( str_hint_string ); - t_pickup.targetname = "ball_place_trig"; - t_pickup triggerignoreteam(); - t_pickup usetriggerrequirelookat(); - return t_pickup; + t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height ); + t_pickup setcursorhint( "HINT_NOICON" ); + t_pickup sethintstring( str_hint_string ); + t_pickup.targetname = "ball_place_trig"; + t_pickup triggerignoreteam(); + t_pickup usetriggerrequirelookat(); + return t_pickup; } place_ball_think( t_place_ball, s_lion_spot ) { - t_place_ball endon( "delete" ); - t_place_ball waittill( "trigger" ); - pts_putdown_trigs_remove_for_spot( s_lion_spot ); - pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy ); - self.zm_sq_has_ball = undefined; - s_lion_spot.which_ball = self.which_ball; - self notify( "zm_sq_ball_used" ); - s_lion_spot.zm_pts_animating = 1; - s_lion_spot.springpad_buddy.zm_pts_animating = 1; - flag_set( "pts_2_generator_" + level.current_generator + "_started" ); - s_lion_spot.which_generator = level.current_generator; - level.current_generator++; + t_place_ball endon( "delete" ); + + t_place_ball waittill( "trigger" ); + + pts_putdown_trigs_remove_for_spot( s_lion_spot ); + pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy ); + self.zm_sq_has_ball = undefined; + s_lion_spot.which_ball = self.which_ball; + self notify( "zm_sq_ball_used" ); + s_lion_spot.zm_pts_animating = 1; + s_lion_spot.springpad_buddy.zm_pts_animating = 1; + flag_set( "pts_2_generator_" + level.current_generator + "_started" ); + s_lion_spot.which_generator = level.current_generator; + level.current_generator++; /# - iprintlnbold( "Ball Animating" ); + iprintlnbold( "Ball Animating" ); #/ - s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad ); - self.t_putdown_ball delete(); + s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad ); + self.t_putdown_ball delete(); } delete_all_springpads() { + } exit_stage_1( success ) { + } exit_stage_2( success ) { + } watch_player_springpads( is_generator ) { - level thread springpad_count_watcher( is_generator ); - a_players = get_players(); - _a240 = a_players; - _k240 = getFirstArrayKey( _a240 ); - while ( isDefined( _k240 ) ) - { - player = _a240[ _k240 ]; - player thread pts_watch_springpad_use( is_generator ); - _k240 = getNextArrayKey( _a240, _k240 ); - } + level thread springpad_count_watcher( is_generator ); + a_players = get_players(); + + foreach ( player in a_players ) + player thread pts_watch_springpad_use( is_generator ); } pts_watch_springpad_use( is_generator ) { - self endon( "death" ); - self endon( "disconnect" ); - while ( !flag( "sq_branch_complete" ) ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.springpad_name ) - { - self is_springpad_in_place( weapon, is_generator ); - } - } + self endon( "death" ); + self endon( "disconnect" ); + + while ( !flag( "sq_branch_complete" ) ) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.springpad_name ) + self is_springpad_in_place( weapon, is_generator ); + } } springpad_count_watcher( is_generator ) { - level endon( "sq_pts_springad_count4" ); - str_which_spots = "pts_ghoul"; - if ( is_generator ) - { - str_which_spots = "pts_lion"; - } - a_spots = getstructarray( str_which_spots, "targetname" ); - while ( 1 ) - { - level waittill( "sq_pts_springpad_in_place" ); - n_count = 0; - _a279 = a_spots; - _k279 = getFirstArrayKey( _a279 ); - while ( isDefined( _k279 ) ) - { - s_spot = _a279[ _k279 ]; - if ( isDefined( s_spot.springpad ) ) - { - n_count++; - } - _k279 = getNextArrayKey( _a279, _k279 ); - } - level notify( "sq_pts_springad_count" + n_count ); - } + level endon( "sq_pts_springad_count4" ); + str_which_spots = "pts_ghoul"; + + if ( is_generator ) + str_which_spots = "pts_lion"; + + a_spots = getstructarray( str_which_spots, "targetname" ); + + while ( true ) + { + level waittill( "sq_pts_springpad_in_place" ); + + n_count = 0; + + foreach ( s_spot in a_spots ) + { + if ( isdefined( s_spot.springpad ) ) + n_count++; + } + + level notify( "sq_pts_springad_count" + n_count ); + } } is_springpad_in_place( m_springpad, is_generator ) { - a_lion_spots = getstructarray( "pts_lion", "targetname" ); - a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" ); - a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 ); - _a298 = a_spots; - _k298 = getFirstArrayKey( _a298 ); - while ( isDefined( _k298 ) ) - { - s_spot = _a298[ _k298 ]; - n_dist = distance2dsquared( m_springpad.origin, s_spot.origin ); - if ( n_dist < 1024 ) - { - v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) ); - v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) ); - n_dot = vectordot( v_spot_forward, v_pad_forward ); + a_lion_spots = getstructarray( "pts_lion", "targetname" ); + a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" ); + a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 ); + + foreach ( s_spot in a_spots ) + { + n_dist = distance2dsquared( m_springpad.origin, s_spot.origin ); + + if ( n_dist < 1024 ) + { + v_spot_forward = vectornormalize( anglestoforward( s_spot.angles ) ); + v_pad_forward = vectornormalize( anglestoforward( m_springpad.angles ) ); + n_dot = vectordot( v_spot_forward, v_pad_forward ); /# - iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" ); + iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" ); #/ - if ( n_dot > 0,98 ) - { + if ( n_dot > 0.98 ) + { /# - iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" ); + iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" ); #/ - level notify( "sq_pts_springpad_in_place" ); - s_spot.springpad = m_springpad; - self thread pts_springpad_removed_watcher( m_springpad, s_spot ); - if ( is_generator ) - { - wait 0,1; - level thread pts_should_springpad_create_trigs( s_spot ); - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); - } - else - { - m_springpad.fling_scaler = 2; - m_springpad thread watch_zombie_flings(); - } - if ( isDefined( s_spot.script_float ) ) - { - s_target = getstruct( "sq_zombie_launch_target", "targetname" ); - v_override_dir = vectornormalize( s_target.origin - m_springpad.origin ); - v_override_dir = vectorScale( v_override_dir, 1024 ); - m_springpad.direction_vec_override = v_override_dir; - m_springpad.fling_scaler = s_spot.script_float; - } - return; - } - } - else - { - _k298 = getNextArrayKey( _a298, _k298 ); - } - } + level notify( "sq_pts_springpad_in_place" ); + s_spot.springpad = m_springpad; + self thread pts_springpad_removed_watcher( m_springpad, s_spot ); + + if ( is_generator ) + { + wait 0.1; + level thread pts_should_springpad_create_trigs( s_spot ); + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); + } + else + { + m_springpad.fling_scaler = 2; + m_springpad thread watch_zombie_flings(); + } + + if ( isdefined( s_spot.script_float ) ) + { + s_target = getstruct( "sq_zombie_launch_target", "targetname" ); + v_override_dir = vectornormalize( s_target.origin - m_springpad.origin ); + v_override_dir = vectorscale( v_override_dir, 1024 ); + m_springpad.direction_vec_override = v_override_dir; + m_springpad.fling_scaler = s_spot.script_float; + } + + break; + } + } + } } pts_springpad_fling( str_spot_name, m_buddy_springpad ) { - str_anim1 = undefined; - n_anim_length1 = undefined; - str_anim2 = undefined; - n_anim_length2 = undefined; - switch( str_spot_name ) - { - case "lion_pair_1": - str_anim1 = "dc"; - str_anim2 = "cd"; - break; - case "lion_pair_2": - str_anim1 = "ab"; - str_anim2 = "ba"; - break; - case "lion_pair_3": - str_anim1 = "cd"; - str_anim2 = "dc"; - break; - case "lion_pair_4": - str_anim1 = "ba"; - str_anim2 = "ab"; - break; - } - m_anim = spawn( "script_model", ( 2090, 675, 3542 ) ); - m_anim.angles = ( 0, 0, 0 ); - m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" ); - m_anim useanimtree( -1 ); - m_anim.targetname = "trample_gen_" + str_spot_name; - pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 ); + str_anim1 = undefined; + n_anim_length1 = undefined; + str_anim2 = undefined; + n_anim_length2 = undefined; + + switch ( str_spot_name ) + { + case "lion_pair_1": + str_anim1 = "dc"; + str_anim2 = "cd"; + break; + case "lion_pair_2": + str_anim1 = "ab"; + str_anim2 = "ba"; + break; + case "lion_pair_3": + str_anim1 = "cd"; + str_anim2 = "dc"; + break; + case "lion_pair_4": + str_anim1 = "ba"; + str_anim2 = "ab"; + break; + } + + m_anim = spawn( "script_model", ( 2090, 675, 3542 ) ); + m_anim.angles = ( 0, 0, 0 ); + m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" ); + m_anim useanimtree( -1 ); + m_anim.targetname = "trample_gen_" + str_spot_name; + pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 ); } pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 ) { - m_anim endon( "delete" ); - self endon( "delete" ); - m_buddy_springpad endon( "delete" ); - n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] ); - n_anim_length2 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] ); - while ( isDefined( m_anim ) ) - { - self notify( "fling" ); - if ( isDefined( m_anim ) ) - { - m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] ); - } - wait n_anim_length1; - m_buddy_springpad notify( "fling" ); - if ( isDefined( m_anim ) ) - { - m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] ); - } - wait n_anim_length2; - } + m_anim endon( "delete" ); + self endon( "delete" ); + m_buddy_springpad endon( "delete" ); + n_anim_length1 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] ); + n_anim_length2 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] ); + + while ( isdefined( m_anim ) ) + { + self notify( "fling", 1 ); + + if ( isdefined( m_anim ) ) + m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] ); + + wait( n_anim_length1 ); + m_buddy_springpad notify( "fling", 1 ); + + if ( isdefined( m_anim ) ) + m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] ); + + wait( n_anim_length2 ); + } } pts_springpad_removed_watcher( m_springpad, s_spot ) { - self pts_springpad_waittill_removed( m_springpad ); - s_spot.springpad = undefined; + self pts_springpad_waittill_removed( m_springpad ); + s_spot.springpad = undefined; } pts_springpad_waittill_removed( m_springpad ) { - m_springpad endon( "delete" ); - m_springpad endon( "death" ); - self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); + m_springpad endon( "delete" ); + m_springpad endon( "death" ); + self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); } wait_for_all_springpads_placed( str_type, str_flag ) { - a_spots = getstructarray( str_type, "targetname" ); - while ( !flag( str_flag ) ) - { - is_clear = 0; - _a442 = a_spots; - _k442 = getFirstArrayKey( _a442 ); - while ( isDefined( _k442 ) ) - { - s_spot = _a442[ _k442 ]; - if ( !isDefined( s_spot.springpad ) ) - { - is_clear = 1; - } - _k442 = getNextArrayKey( _a442, _k442 ); - } - if ( !is_clear ) - { - flag_set( str_flag ); - } - wait 1; - } + a_spots = getstructarray( str_type, "targetname" ); + + while ( !flag( str_flag ) ) + { + is_clear = 0; + + foreach ( s_spot in a_spots ) + { + if ( !isdefined( s_spot.springpad ) ) + is_clear = 1; + } + + if ( !is_clear ) + flag_set( str_flag ); + + wait 1; + } } pts_should_player_create_trigs( player ) { - a_lion_spots = getstructarray( "pts_lion", "targetname" ); - _a467 = a_lion_spots; - _k467 = getFirstArrayKey( _a467 ); - while ( isDefined( _k467 ) ) - { - s_lion_spot = _a467[ _k467 ]; - if ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) ) - { - pts_putdown_trigs_create_for_spot( s_lion_spot, player ); - } - _k467 = getNextArrayKey( _a467, _k467 ); - } + a_lion_spots = getstructarray( "pts_lion", "targetname" ); + + foreach ( s_lion_spot in a_lion_spots ) + { + if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) ) + pts_putdown_trigs_create_for_spot( s_lion_spot, player ); + } } pts_should_springpad_create_trigs( s_lion_spot ) { - while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) ) - { - a_players = getplayers(); - _a481 = a_players; - _k481 = getFirstArrayKey( _a481 ); - while ( isDefined( _k481 ) ) - { - player = _a481[ _k481 ]; - if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball ) - { - pts_putdown_trigs_create_for_spot( s_lion_spot, player ); - pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player ); - } - _k481 = getNextArrayKey( _a481, _k481 ); - } - } + if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) ) + { + a_players = getplayers(); + + foreach ( player in a_players ) + { + if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball ) + { + pts_putdown_trigs_create_for_spot( s_lion_spot, player ); + pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player ); + } + } + } } pts_putdown_trigs_create_for_spot( s_lion_spot, player ) { - if ( isDefined( s_lion_spot.which_ball ) || isDefined( s_lion_spot.springpad_buddy ) && isDefined( s_lion_spot.springpad_buddy.which_ball ) ) - { - return; - } - t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" ); - player clientclaimtrigger( t_place_ball ); - t_place_ball.owner = player; - player thread place_ball_think( t_place_ball, s_lion_spot ); - if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) - { - s_lion_spot.pts_putdown_trigs = []; - } - s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball; - level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot ); + if ( isdefined( s_lion_spot.which_ball ) || isdefined( s_lion_spot.springpad_buddy ) && isdefined( s_lion_spot.springpad_buddy.which_ball ) ) + return; + + t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" ); + player clientclaimtrigger( t_place_ball ); + t_place_ball.owner = player; + player thread place_ball_think( t_place_ball, s_lion_spot ); + + if ( !isdefined( s_lion_spot.pts_putdown_trigs ) ) + s_lion_spot.pts_putdown_trigs = []; + + s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball; + level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot ); } pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot ) { - player pts_springpad_waittill_removed( s_lion_spot.springpad ); - pts_putdown_trigs_remove_for_spot( s_lion_spot ); - pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy ); - level thread pts_reset_ball( s_lion_spot ); + player pts_springpad_waittill_removed( s_lion_spot.springpad ); + pts_putdown_trigs_remove_for_spot( s_lion_spot ); + pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy ); + level thread pts_reset_ball( s_lion_spot ); } pts_reset_ball( s_lion_spot ) { - if ( isDefined( s_lion_spot.which_ball ) ) - { - s_lion_spot.sq_pickup_reset = 1; - s_lion_spot.which_ball notify( "sq_pickup_reset" ); - m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" ); - playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) ); - flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" ); - level.current_generator--; - - s_lion_spot.which_ball = undefined; - m_ball_anim delete(); - } - else - { - if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) ) - { - s_lion_spot.springpad_buddy.sq_pickup_reset = 1; - s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" ); - m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" ); - playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) ); - flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" ); - level.current_generator--; - - s_lion_spot.springpad_buddy.which_ball = undefined; - m_ball_anim delete(); - } - } + if ( isdefined( s_lion_spot.which_ball ) ) + { + s_lion_spot.sq_pickup_reset = 1; + s_lion_spot.which_ball notify( "sq_pickup_reset" ); + m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" ); + playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) ); + flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" ); + level.current_generator--; + s_lion_spot.which_ball = undefined; + m_ball_anim delete(); + } + else if ( isdefined( s_lion_spot.springpad_buddy.which_ball ) ) + { + s_lion_spot.springpad_buddy.sq_pickup_reset = 1; + s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" ); + m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" ); + playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) ); + flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" ); + level.current_generator--; + s_lion_spot.springpad_buddy.which_ball = undefined; + m_ball_anim delete(); + } } pts_putdown_trigs_remove_for_player( player ) { - a_lion_spots = getstructarray( "pts_lion", "targetname" ); - _a554 = a_lion_spots; - _k554 = getFirstArrayKey( _a554 ); - while ( isDefined( _k554 ) ) - { - s_lion_spot = _a554[ _k554 ]; - if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) - { - } - else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) ) - { - s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete(); - arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 ); - } - _k554 = getNextArrayKey( _a554, _k554 ); - } + a_lion_spots = getstructarray( "pts_lion", "targetname" ); + + foreach ( s_lion_spot in a_lion_spots ) + { + if ( !isdefined( s_lion_spot.pts_putdown_trigs ) ) + { + continue; + continue; + } + + if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) ) + { + s_lion_spot.pts_putdown_trigs[player.characterindex] delete(); + arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 ); + } + } } pts_putdown_trigs_remove_for_spot( s_lion_spot ) { - if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) - { - return; - } - _a575 = s_lion_spot.pts_putdown_trigs; - _k575 = getFirstArrayKey( _a575 ); - while ( isDefined( _k575 ) ) - { - t_putdown = _a575[ _k575 ]; - t_putdown delete(); - _k575 = getNextArrayKey( _a575, _k575 ); - } - s_lion_spot.pts_putdown_trigs = []; + if ( !isdefined( s_lion_spot.pts_putdown_trigs ) ) + return; + + foreach ( t_putdown in s_lion_spot.pts_putdown_trigs ) + t_putdown delete(); + + s_lion_spot.pts_putdown_trigs = []; } richtofen_pts_instructions() { - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" ); } richtofen_pts_placed() { - level waittill( "sq_pts_springad_count1" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" ); - level waittill( "sq_pts_springad_count2" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" ); - level waittill( "sq_pts_springad_count3" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" ); - level waittill( "sq_pts_springad_count4" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" ); + level waittill( "sq_pts_springad_count1" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" ); + + level waittill( "sq_pts_springad_count2" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" ); + + level waittill( "sq_pts_springad_count3" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" ); + + level waittill( "sq_pts_springad_count4" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" ); } richtofen_zombies_launched() { - level waittill( "pts1_say_next_line" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" ); - wait 1; - level waittill( "pts1_say_next_line" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" ); - wait 1; - level waittill( "pts1_say_next_line" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" ); + level waittill( "pts1_say_next_line" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" ); + wait 1; + + level waittill( "pts1_say_next_line" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" ); + wait 1; + + level waittill( "pts1_say_next_line" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" ); } maxis_pts_instructions() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" ); } maxis_pts_placed() { - level waittill( "sq_pts_springad_count1" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" ); - level waittill( "sq_pts_springad_count2" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" ); - level waittill( "sq_pts_springad_count4" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" ); + level waittill( "sq_pts_springad_count1" ); + + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" ); + + level waittill( "sq_pts_springad_count2" ); + + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" ); + + level waittill( "sq_pts_springad_count4" ); + + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" ); } maxis_balls_placed() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc index bf9d862..514c430 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_slb.gsc @@ -1,199 +1,206 @@ -#include maps/mp/zm_highrise_sq_pts; -#include maps/mp/zm_highrise_sq; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zm_highrise_sq; +#include maps\mp\zm_highrise_sq_pts; init() { - flag_init( "sq_slb_first_ball_sniped" ); - flag_init( "sq_slb_richtofen_spoke" ); - declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 ); + flag_init( "sq_slb_first_ball_sniped" ); + flag_init( "sq_slb_richtofen_spoke" ); + declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 ); } init_stage() { - level._cur_stage_name = "slb"; - clientnotify( "slb" ); - level thread vo_maxis_slb_hint(); + level._cur_stage_name = "slb"; + clientnotify( "slb" ); + level thread vo_maxis_slb_hint(); } stage_logic() { /# - iprintlnbold( "SLB Started" ); + iprintlnbold( "SLB Started" ); #/ - snipe_balls_wait(); - stage_completed( "sq", level._cur_stage_name ); + snipe_balls_wait(); + stage_completed( "sq", level._cur_stage_name ); } exit_stage_1( success ) { + } snipe_balls_wait() { - a_balls = getentarray( "sq_dragon_lion_ball", "targetname" ); - array_thread( a_balls, ::snipe_balls_watch_ball ); - is_complete = 0; - while ( !is_complete ) - { - level waittill( "zm_ball_shot" ); - wait 1; - is_complete = 1; - _a50 = a_balls; - _k50 = getFirstArrayKey( _a50 ); - while ( isDefined( _k50 ) ) - { - m_ball = _a50[ _k50 ]; - if ( isDefined( m_ball ) ) - { - is_complete = 0; - } - _k50 = getNextArrayKey( _a50, _k50 ); - } - } + a_balls = getentarray( "sq_dragon_lion_ball", "targetname" ); + array_thread( a_balls, ::snipe_balls_watch_ball ); + is_complete = 0; + + while ( !is_complete ) + { + level waittill( "zm_ball_shot" ); + + wait 1; + is_complete = 1; + + foreach ( m_ball in a_balls ) + { + if ( isdefined( m_ball ) ) + is_complete = 0; + } + } /# - iprintlnbold( "All Balls Shot" ); + iprintlnbold( "All Balls Shot" ); #/ } snipe_balls_watch_ball() { - self endon( "delete" ); - a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" ); - self setcandamage( 1 ); - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname ); - if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) ) - { - level notify( "zm_ball_shot" ); - playsoundatposition( "zmb_sq_ball_ding", self.origin ); - playfx( level._effect[ "sidequest_flash" ], self.origin ); - str_noteworthy = self.script_noteworthy; - self delete(); - wait 0,5; - clientnotify( str_noteworthy ); - m_ball = getent( "sq_sliquify_r", "script_noteworthy" ); - if ( str_noteworthy == "m_drg_tail" ) - { - m_ball = getent( "sq_sliquify_m", "script_noteworthy" ); - } - playfx( level._effect[ "sidequest_flash" ], m_ball.origin ); - m_ball show(); - m_ball thread lion_ball_enable_pickup(); - if ( !flag( "sq_slb_first_ball_sniped" ) ) - { - flag_set( "sq_slb_first_ball_sniped" ); - level thread vo_atd_ball1_sniped(); - break; - } - else - { - level thread vo_maxis_atd_ball2_sniped(); - } - } - } + self endon( "delete" ); + a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" ); + self setcandamage( 1 ); + + while ( true ) + { + self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname ); + + if ( maps\mp\zm_highrise_sq::sq_is_weapon_sniper( weaponname ) ) + { + level notify( "zm_ball_shot" ); + playsoundatposition( "zmb_sq_ball_ding", self.origin ); + playfx( level._effect["sidequest_flash"], self.origin ); + str_noteworthy = self.script_noteworthy; + self delete(); + wait 0.5; + clientnotify( str_noteworthy ); + m_ball = getent( "sq_sliquify_r", "script_noteworthy" ); + + if ( str_noteworthy == "m_drg_tail" ) + m_ball = getent( "sq_sliquify_m", "script_noteworthy" ); + + playfx( level._effect["sidequest_flash"], m_ball.origin ); + m_ball show(); + m_ball thread lion_ball_enable_pickup(); + + if ( !flag( "sq_slb_first_ball_sniped" ) ) + { + flag_set( "sq_slb_first_ball_sniped" ); + level thread vo_atd_ball1_sniped(); + } + else + level thread vo_maxis_atd_ball2_sniped(); + } + } } lion_ball_enable_pickup() { - self endon( "sq_sliquified" ); - while ( 1 ) - { - self.can_pickup = 1; - self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" ); - while ( self.can_pickup ) - { - self.t_pickup waittill( "trigger", player ); - if ( !isDefined( player.zm_sq_has_ball ) ) - { - player.zm_sq_has_ball = 1; - player.which_ball = self; - self.can_pickup = 0; - self.player = player; - flag_set( "sq_ball_picked_up" ); - level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player ); - level notify( "zm_ball_picked_up" ); - } - } - self.t_pickup delete(); - self hide(); - self setcandamage( 0 ); - wait 1; - self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" ); - self.player clientclaimtrigger( self.t_putdown ); - self.player.t_putdown_ball = self.t_putdown; - self ball_pickup_waittill_change(); - play_spark = 0; - if ( !isDefined( self.t_putdown ) ) - { - self waittill( "sq_pickup_reset" ); - play_spark = 1; - } - else - { - self.t_putdown delete(); - } - self.player notify( "zm_sq_ball_putdown" ); - if ( play_spark ) - { - self.sq_pickup_reset = undefined; - playfx( level._effect[ "sidequest_flash" ], self.origin ); - } - self show(); - self setcandamage( 1 ); - self.player.zm_sq_has_ball = undefined; - self.player = undefined; - wait 1; - } + self endon( "sq_sliquified" ); + + while ( true ) + { + self.can_pickup = 1; + self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" ); + + while ( self.can_pickup ) + { + self.t_pickup waittill( "trigger", player ); + + if ( !isdefined( player.zm_sq_has_ball ) ) + { + player.zm_sq_has_ball = 1; + player.which_ball = self; + self.can_pickup = 0; + self.player = player; + flag_set( "sq_ball_picked_up" ); + level thread maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs( player ); + level notify( "zm_ball_picked_up", player ); + } + } + + self.t_pickup delete(); + self hide(); + self setcandamage( 0 ); + wait 1; + self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" ); + self.player clientclaimtrigger( self.t_putdown ); + self.player.t_putdown_ball = self.t_putdown; + self ball_pickup_waittill_change(); + play_spark = 0; + + if ( !isdefined( self.t_putdown ) ) + { + self waittill( "sq_pickup_reset" ); + + play_spark = 1; + } + else + self.t_putdown delete(); + + self.player notify( "zm_sq_ball_putdown" ); + + if ( play_spark ) + { + self.sq_pickup_reset = undefined; + playfx( level._effect["sidequest_flash"], self.origin ); + } + + self show(); + self setcandamage( 1 ); + self.player.zm_sq_has_ball = undefined; + self.player = undefined; + wait 1; + } } ball_pickup_waittill_change() { - self endon( "sq_pickup_reset" ); - self.t_putdown waittill_any_return( "trigger", "delete", "reset" ); + self endon( "sq_pickup_reset" ); + self.t_putdown waittill_any_return( "trigger", "delete", "reset" ); } sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string ) { - t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height ); - t_pickup setcursorhint( "HINT_NOICON" ); - t_pickup sethintstring( str_hint_string ); - t_pickup.targetname = "ball_pickup_trig"; - t_pickup triggerignoreteam(); - t_pickup usetriggerrequirelookat(); - return t_pickup; + t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height ); + t_pickup setcursorhint( "HINT_NOICON" ); + t_pickup sethintstring( str_hint_string ); + t_pickup.targetname = "ball_pickup_trig"; + t_pickup triggerignoreteam(); + t_pickup usetriggerrequirelookat(); + return t_pickup; } vo_richtofen_atd_ball_sniped() { - if ( !flag( "sq_slb_richtofen_spoke" ) ) - { - flag_set( "sq_slb_richtofen_spoke" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" ); - } + if ( !flag( "sq_slb_richtofen_spoke" ) ) + { + flag_set( "sq_slb_richtofen_spoke" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" ); + } } vo_maxis_slb_hint() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" ); } vo_maxis_atd_ball1_sniped() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" ); } vo_maxis_atd_ball2_sniped() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" ); } vo_atd_ball1_sniped() { - vo_richtofen_atd_ball_sniped(); - level thread vo_maxis_atd_ball1_sniped(); + vo_richtofen_atd_ball_sniped(); + level thread vo_maxis_atd_ball1_sniped(); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc index cd166cf..aa5a882 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_sq_ssp.gsc @@ -1,328 +1,318 @@ -#include maps/mp/zm_highrise_sq; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_sidequests; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_sidequests; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zm_highrise_sq; init_1() { - flag_init( "ssp1_ball0_complete" ); - flag_init( "ssp1_ball1_complete" ); - flag_init( "ssp1_complete" ); - declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); + flag_init( "ssp1_ball0_complete" ); + flag_init( "ssp1_ball1_complete" ); + flag_init( "ssp1_complete" ); + declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); } init_2() { - flag_init( "ssp2_maxis_keep_going_said" ); - flag_init( "ssp2_maxis_reincarnate_said" ); - flag_init( "ssp2_corpses_in_place" ); - flag_init( "ssp2_resurrection_done" ); - flag_init( "ssp2_statue_complete" ); - maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check ); - declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 ); + flag_init( "ssp2_maxis_keep_going_said" ); + flag_init( "ssp2_maxis_reincarnate_said" ); + flag_init( "ssp2_corpses_in_place" ); + flag_init( "ssp2_resurrection_done" ); + flag_init( "ssp2_statue_complete" ); + maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check ); + declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 ); } init_stage_1() { - clientnotify( "ssp_1" ); - level thread vo_richtofen_instructions(); + clientnotify( "ssp_1" ); + level thread vo_richtofen_instructions(); } init_stage_2() { - clientnotify( "ssp_2" ); - level thread vo_maxis_start_ssp(); + clientnotify( "ssp_2" ); + level thread vo_maxis_start_ssp(); } stage_logic_1() { /# - iprintlnbold( "SSP1 Started" ); + iprintlnbold( "SSP1 Started" ); #/ - ssp1_sliquify_balls(); - stage_completed( "sq_1", "ssp_1" ); + ssp1_sliquify_balls(); + stage_completed( "sq_1", "ssp_1" ); } ssp1_sliquify_balls() { - a_balls = getentarray( "sq_sliquify_ball", "targetname" ); - level thread vo_sliquify_fail_watch(); - level thread ssp1_advance_dragon(); - level thread vo_richtofen_sliquify_confirm(); - level thread vo_maxis_sliquify_fail(); - i = 0; - while ( i < a_balls.size ) - { - a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" ); - i++; - } - while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) ) - { - flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); - wait 0,5; - } - maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 ); + a_balls = getentarray( "sq_sliquify_ball", "targetname" ); + level thread vo_sliquify_fail_watch(); + level thread ssp1_advance_dragon(); + level thread vo_richtofen_sliquify_confirm(); + level thread vo_maxis_sliquify_fail(); + + for ( i = 0; i < a_balls.size; i++ ) + a_balls[i] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" ); + + while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) ) + { + flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); + wait 0.5; + } + + maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 ); } ssp1_watch_ball( str_complete_flag ) { - self watch_model_sliquification( 20, str_complete_flag ); - self thread ssp1_rotate_ball(); - self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 ); + self watch_model_sliquification( 20, str_complete_flag ); + self thread ssp1_rotate_ball(); + self playloopsound( "zmb_sq_ball_rotate_loop", 0.25 ); } ssp1_rotate_ball() { - while ( isDefined( self ) ) - { - self rotateyaw( 360, 1 ); - wait 0,9; - } + while ( isdefined( self ) ) + { + self rotateyaw( 360, 1 ); + wait 0.9; + } } ssp1_advance_dragon() { - flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 ); + flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 ); } stage_logic_2() { /# - iprintlnbold( "SSP2 Started" ); + iprintlnbold( "SSP2 Started" ); #/ - level thread ssp2_advance_dragon(); - corpse_room_watcher(); - stage_completed( "sq_2", "ssp_2" ); + level thread ssp2_advance_dragon(); + corpse_room_watcher(); + stage_completed( "sq_2", "ssp_2" ); } corpse_room_watcher() { - t_corpse_room = getent( "corpse_room_trigger", "targetname" ); - n_count = 0; - while ( !flag( "ssp2_resurrection_done" ) ) - { - level waittill( "ssp2_corpse_made", is_in_room ); - if ( is_in_room ) - { - n_count++; - } - else - { - n_count = 0; - } - if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) ) - { - flag_set( "ssp2_maxis_keep_going_said" ); - level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" ); - continue; - } - else - { - if ( n_count >= 15 ) - { + t_corpse_room = getent( "corpse_room_trigger", "targetname" ); + n_count = 0; + + while ( !flag( "ssp2_resurrection_done" ) ) + { + level waittill( "ssp2_corpse_made", is_in_room ); + + if ( is_in_room ) + n_count++; + else + n_count = 0; + + if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) ) + { + flag_set( "ssp2_maxis_keep_going_said" ); + level thread maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" ); + } + else if ( n_count >= 15 ) + { /# - iprintlnbold( "Corpse Count Reached" ); + iprintlnbold( "Corpse Count Reached" ); #/ - level thread vo_maxis_ssp_reincarnate(); - flag_set( "ssp2_corpses_in_place" ); - corpse_room_revive_watcher(); - level notify( "end_revive_watcher" ); - } - } - } + level thread vo_maxis_ssp_reincarnate(); + flag_set( "ssp2_corpses_in_place" ); + corpse_room_revive_watcher(); + level notify( "end_revive_watcher" ); + } + } } ssp_2_zombie_death_check() { - self waittill( "death" ); - if ( !isDefined( self ) ) - { - return; - } - t_corpse_room = getent( "corpse_room_trigger", "targetname" ); - if ( self istouching( t_corpse_room ) ) - { - level notify( "ssp2_corpse_made" ); - } - else - { - level notify( "ssp2_corpse_made" ); - } + self waittill( "death" ); + + if ( !isdefined( self ) ) + return; + + t_corpse_room = getent( "corpse_room_trigger", "targetname" ); + + if ( self istouching( t_corpse_room ) ) + level notify( "ssp2_corpse_made", 1 ); + else + level notify( "ssp2_corpse_made", 0 ); } corpse_room_cleanup_watcher() { - level endon( "ssp2_resurrection_done" ); - t_corpse_room = getent( "corpse_room_trigger", "targetname" ); - while ( 1 ) - { - wait 1; - a_corpses = getcorpsearray(); - if ( a_corpses.size < 15 ) - { - level thread vo_maxis_ssp_fail(); - level notify( "end_revive_watcher" ); - return; - } - n_count = 0; - _a206 = a_corpses; - _k206 = getFirstArrayKey( _a206 ); - while ( isDefined( _k206 ) ) - { - m_corpse = _a206[ _k206 ]; - if ( m_corpse istouching( t_corpse_room ) ) - { - n_count++; - } - _k206 = getNextArrayKey( _a206, _k206 ); - } - if ( n_count < 15 ) - { - level thread vo_maxis_ssp_fail(); - level notify( "end_revive_watcher" ); - return; - } - } + level endon( "ssp2_resurrection_done" ); + t_corpse_room = getent( "corpse_room_trigger", "targetname" ); + + while ( true ) + { + wait 1; + a_corpses = getcorpsearray(); + + if ( a_corpses.size < 15 ) + { + level thread vo_maxis_ssp_fail(); + level notify( "end_revive_watcher" ); + return; + } + + n_count = 0; + + foreach ( m_corpse in a_corpses ) + { + if ( m_corpse istouching( t_corpse_room ) ) + n_count++; + } + + if ( n_count < 15 ) + { + level thread vo_maxis_ssp_fail(); + level notify( "end_revive_watcher" ); + return; + } + } } corpse_room_revive_watcher() { - level endon( "end_revive_watcher" ); - weaponname = "none"; - str_type = "none"; - t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" ); - while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" ) - { - t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type ); - if ( isplayer( inflictor ) ) - { - weaponname = inflictor.currentweapon; - str_type = type; - } - } + level endon( "end_revive_watcher" ); + weaponname = "none"; + str_type = "none"; + t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" ); + + while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" ) + { + t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type ); + + if ( isplayer( inflictor ) ) + { + weaponname = inflictor.currentweapon; + str_type = type; + } + } /# - iprintlnbold( "Revive Complete" ); + iprintlnbold( "Revive Complete" ); #/ - vo_maxis_ssp_complete(); - flag_set( "ssp2_resurrection_done" ); + vo_maxis_ssp_complete(); + flag_set( "ssp2_resurrection_done" ); } ssp2_advance_dragon() { - flag_wait( "ssp2_corpses_in_place" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 ); - flag_wait( "ssp2_resurrection_done" ); - maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); + flag_wait( "ssp2_corpses_in_place" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 1 ); + flag_wait( "ssp2_resurrection_done" ); + maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 ); } exit_stage_1( success ) { - flag_set( "ssp1_complete" ); + flag_set( "ssp1_complete" ); } exit_stage_2( success ) { + } watch_model_sliquification( n_end_limit, str_complete_flag ) { - n_count = 0; - self setcandamage( 1 ); - while ( !flag( str_complete_flag ) ) - { - self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname ); - if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) ) - { - n_count++; - if ( n_count >= n_end_limit ) - { + n_count = 0; + self setcandamage( 1 ); + + while ( !flag( str_complete_flag ) ) + { + self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname ); + + if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) ) + { + n_count++; + + if ( n_count >= n_end_limit ) + { /# - iprintlnbold( "MODEL COMPLETE: " + str_complete_flag ); + iprintlnbold( "MODEL COMPLETE: " + str_complete_flag ); #/ - self notify( "sq_sliquified" ); - if ( isDefined( self.t_pickup ) ) - { - self.t_pickup delete(); - } - flag_set( str_complete_flag ); - break; - } - else if ( n_count == 1 ) - { - level notify( "ssp1_ball_first_sliquified" ); - break; - } - else - { - if ( n_count == 10 ) - { - level notify( "ssp1_ball_sliquified_2" ); - } - } - } - } + self notify( "sq_sliquified" ); + + if ( isdefined( self.t_pickup ) ) + self.t_pickup delete(); + + flag_set( str_complete_flag ); + } + else if ( n_count == 1 ) + level notify( "ssp1_ball_first_sliquified" ); + else if ( n_count == 10 ) + level notify( "ssp1_ball_sliquified_2" ); + } + } } vo_richtofen_instructions() { - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" ); - wait 10; - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" ); + wait 10; + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" ); } vo_sliquify_fail_watch() { - flag_wait( "sq_ball_picked_up" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" ); + flag_wait( "sq_ball_picked_up" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" ); } vo_richtofen_sliquify_confirm() { - level waittill( "ssp1_ball_first_sliquified" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" ); - level waittill( "ssp1_ball_sliquified_2" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" ); - flag_wait( "ssp1_complete" ); - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" ); - wait 10; - maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" ); + level waittill( "ssp1_ball_first_sliquified" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" ); + + level waittill( "ssp1_ball_sliquified_2" ); + + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" ); + flag_wait( "ssp1_complete" ); + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" ); + wait 10; + maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" ); } vo_maxis_sliquify_fail() { - flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" ); + flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" ); } vo_maxis_start_ssp() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" ); } vo_maxis_ssp_reincarnate() { - if ( !flag( "ssp2_maxis_reincarnate_said" ) ) - { - flag_set( "ssp2_maxis_reincarnate_said" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" ); - } - else - { - flag_clear( "ssp2_maxis_reincarnate_said" ); - } + if ( !flag( "ssp2_maxis_reincarnate_said" ) ) + { + flag_set( "ssp2_maxis_reincarnate_said" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" ); + } + else + flag_clear( "ssp2_maxis_reincarnate_said" ); } vo_maxis_ssp_fail() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" ); } vo_maxis_ssp_complete() { - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" ); - maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" ); + maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc index 75eecc5..02393eb 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zm_highrise_utility.gsc @@ -1,280 +1,274 @@ -#include maps/mp/zombies/_zm_ffotd; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_utility; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\zombies\_zm_ffotd; main_start() { - level thread spawned_collision_fix(); - level thread kill_trigger_spawn(); + level thread spawned_collision_fix(); + level thread kill_trigger_spawn(); } main_end() { - connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 ); - connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 ); - level thread pathfinding_override_fix(); + connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 ); + connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 ); + level thread pathfinding_override_fix(); } spawned_collision_fix() { - precachemodel( "collision_geo_512x512x512_standard" ); - precachemodel( "collision_geo_32x32x128_standard" ); - precachemodel( "collision_geo_64x64x256_standard" ); - precachemodel( "collision_wall_128x128x10_standard" ); - precachemodel( "collision_wall_256x256x10_standard" ); - flag_wait( "start_zombie_round_logic" ); - if ( !is_true( level.optimise_for_splitscreen ) ) - { - collision1 = spawn( "script_model", ( 2992, 536, 497 ) ); - collision1 setmodel( "collision_geo_512x512x512_standard" ); - collision1.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision1 ghost(); - collision2 = spawn( "script_model", ( 2824, 632, 497 ) ); - collision2 setmodel( "collision_geo_512x512x512_standard" ); - collision2.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision2 ghost(); - collision3 = spawn( "script_model", ( 2992, 536, -15 ) ); - collision3 setmodel( "collision_geo_512x512x512_standard" ); - collision3.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision3 ghost(); - collision4 = spawn( "script_model", ( 2824, 632, -15 ) ); - collision4 setmodel( "collision_geo_512x512x512_standard" ); - collision4.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision4 ghost(); - collision5 = spawn( "script_model", ( 2992, 536, -527 ) ); - collision5 setmodel( "collision_geo_512x512x512_standard" ); - collision5.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision5 ghost(); - collision6 = spawn( "script_model", ( 2824, 632, -527 ) ); - collision6 setmodel( "collision_geo_512x512x512_standard" ); - collision6.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision6 ghost(); - collision7 = spawn( "script_model", ( 2992, 536, -1039 ) ); - collision7 setmodel( "collision_geo_512x512x512_standard" ); - collision7.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision7 ghost(); - collision8 = spawn( "script_model", ( 2824, 632, -1039 ) ); - collision8 setmodel( "collision_geo_512x512x512_standard" ); - collision8.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision8 ghost(); - collision9 = spawn( "script_model", ( 2992, 536, -1551 ) ); - collision9 setmodel( "collision_geo_512x512x512_standard" ); - collision9.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision9 ghost(); - collision10 = spawn( "script_model", ( 2824, 632, -1551 ) ); - collision10 setmodel( "collision_geo_512x512x512_standard" ); - collision10.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision10 ghost(); - collision11 = spawn( "script_model", ( 2992, 536, -2063 ) ); - collision11 setmodel( "collision_geo_512x512x512_standard" ); - collision11.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision11 ghost(); - collision12 = spawn( "script_model", ( 2824, 632, -2063 ) ); - collision12 setmodel( "collision_geo_512x512x512_standard" ); - collision12.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision12 ghost(); - collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) ); - collisione1 setmodel( "collision_wall_256x256x10_standard" ); - collisione1.angles = ( 0, 0, 0 ); - collisione1 ghost(); - collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) ); - collisione2 setmodel( "collision_wall_256x256x10_standard" ); - collisione2.angles = ( 0, 0, 0 ); - collisione2 ghost(); - collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) ); - collisione3 setmodel( "collision_wall_256x256x10_standard" ); - collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 ); - collisione3 ghost(); - collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) ); - collisione4 setmodel( "collision_wall_256x256x10_standard" ); - collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 ); - collisione4 ghost(); - collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) ); - collisione5 setmodel( "collision_wall_256x256x10_standard" ); - collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 ); - collisione5 ghost(); - collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) ); - collisione6 setmodel( "collision_wall_256x256x10_standard" ); - collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 ); - collisione6 ghost(); - collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) ); - collision13 setmodel( "collision_wall_128x128x10_standard" ); - collision13.angles = vectorScale( ( 0, 0, 0 ), 270 ); - collision13 ghost(); - collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) ); - collision14 setmodel( "collision_geo_512x512x512_standard" ); - collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 ); - collision14 ghost(); - collision15 = spawn( "script_model", ( 2518, 597, 3191 ) ); - collision15 setmodel( "collision_wall_128x128x10_standard" ); - collision15.angles = ( 0, 240,4, -3,00014 ); - collision15 ghost(); - collision16 = spawn( "script_model", ( 2613, -721, 1184 ) ); - collision16 setmodel( "collision_wall_128x128x10_standard" ); - collision16.angles = ( 0, 60, -2,60003 ); - collision16 ghost(); - collision17 = spawn( "script_model", ( 2721, -533, 1184 ) ); - collision17 setmodel( "collision_wall_128x128x10_standard" ); - collision17.angles = ( 0, 60, -2,60003 ); - collision17 ghost(); - collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) ); - collision18 setmodel( "collision_geo_64x64x256_standard" ); - collision18.angles = vectorScale( ( 0, 0, 0 ), 350 ); - collision18 ghost(); - collision19 = spawn( "script_model", ( 1631, -235, 2943 ) ); - collision19 setmodel( "collision_geo_32x32x128_standard" ); - collision19.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision19 ghost(); - collision20 = spawn( "script_model", ( 2232, -579, 1354 ) ); - collision20 setmodel( "collision_wall_128x128x10_standard" ); - collision20.angles = vectorScale( ( 0, 0, 0 ), 330 ); - collision20 ghost(); - collision21 = spawn( "script_model", ( 2349, 805, 1346 ) ); - collision21 setmodel( "collision_geo_32x32x128_standard" ); - collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 ); - collision21 ghost(); - collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) ); - collision22 setmodel( "collision_geo_32x32x128_standard" ); - collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 ); - collision22 ghost(); - collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) ); - collision23 setmodel( "collision_geo_32x32x128_standard" ); - collision23.angles = ( 0, 0, 0 ); - collision23 ghost(); - collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) ); - collision24 setmodel( "collision_geo_32x32x128_standard" ); - collision24.angles = ( 0, 0, 0 ); - collision24 ghost(); - } + precachemodel( "collision_geo_512x512x512_standard" ); + precachemodel( "collision_geo_32x32x128_standard" ); + precachemodel( "collision_geo_64x64x256_standard" ); + precachemodel( "collision_wall_128x128x10_standard" ); + precachemodel( "collision_wall_256x256x10_standard" ); + flag_wait( "start_zombie_round_logic" ); + + if ( !is_true( level.optimise_for_splitscreen ) ) + { + collision1 = spawn( "script_model", ( 2992, 536, 497 ) ); + collision1 setmodel( "collision_geo_512x512x512_standard" ); + collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision1 ghost(); + collision2 = spawn( "script_model", ( 2824, 632, 497 ) ); + collision2 setmodel( "collision_geo_512x512x512_standard" ); + collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision2 ghost(); + collision3 = spawn( "script_model", ( 2992, 536, -15 ) ); + collision3 setmodel( "collision_geo_512x512x512_standard" ); + collision3.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision3 ghost(); + collision4 = spawn( "script_model", ( 2824, 632, -15 ) ); + collision4 setmodel( "collision_geo_512x512x512_standard" ); + collision4.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision4 ghost(); + collision5 = spawn( "script_model", ( 2992, 536, -527 ) ); + collision5 setmodel( "collision_geo_512x512x512_standard" ); + collision5.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision5 ghost(); + collision6 = spawn( "script_model", ( 2824, 632, -527 ) ); + collision6 setmodel( "collision_geo_512x512x512_standard" ); + collision6.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision6 ghost(); + collision7 = spawn( "script_model", ( 2992, 536, -1039 ) ); + collision7 setmodel( "collision_geo_512x512x512_standard" ); + collision7.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision7 ghost(); + collision8 = spawn( "script_model", ( 2824, 632, -1039 ) ); + collision8 setmodel( "collision_geo_512x512x512_standard" ); + collision8.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision8 ghost(); + collision9 = spawn( "script_model", ( 2992, 536, -1551 ) ); + collision9 setmodel( "collision_geo_512x512x512_standard" ); + collision9.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision9 ghost(); + collision10 = spawn( "script_model", ( 2824, 632, -1551 ) ); + collision10 setmodel( "collision_geo_512x512x512_standard" ); + collision10.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision10 ghost(); + collision11 = spawn( "script_model", ( 2992, 536, -2063 ) ); + collision11 setmodel( "collision_geo_512x512x512_standard" ); + collision11.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision11 ghost(); + collision12 = spawn( "script_model", ( 2824, 632, -2063 ) ); + collision12 setmodel( "collision_geo_512x512x512_standard" ); + collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision12 ghost(); + collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) ); + collisione1 setmodel( "collision_wall_256x256x10_standard" ); + collisione1.angles = ( 0, 0, 0 ); + collisione1 ghost(); + collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) ); + collisione2 setmodel( "collision_wall_256x256x10_standard" ); + collisione2.angles = ( 0, 0, 0 ); + collisione2 ghost(); + collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) ); + collisione3 setmodel( "collision_wall_256x256x10_standard" ); + collisione3.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collisione3 ghost(); + collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) ); + collisione4 setmodel( "collision_wall_256x256x10_standard" ); + collisione4.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collisione4 ghost(); + collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) ); + collisione5 setmodel( "collision_wall_256x256x10_standard" ); + collisione5.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collisione5 ghost(); + collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) ); + collisione6 setmodel( "collision_wall_256x256x10_standard" ); + collisione6.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collisione6 ghost(); + collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) ); + collision13 setmodel( "collision_wall_128x128x10_standard" ); + collision13.angles = vectorscale( ( 0, 1, 0 ), 270.0 ); + collision13 ghost(); + collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) ); + collision14 setmodel( "collision_geo_512x512x512_standard" ); + collision14.angles = vectorscale( ( 0, 0, -1 ), 6.20013 ); + collision14 ghost(); + collision15 = spawn( "script_model", ( 2518, 597, 3191 ) ); + collision15 setmodel( "collision_wall_128x128x10_standard" ); + collision15.angles = ( 0, 240.4, -3.00014 ); + collision15 ghost(); + collision16 = spawn( "script_model", ( 2613, -721, 1184 ) ); + collision16 setmodel( "collision_wall_128x128x10_standard" ); + collision16.angles = ( 0, 60, -2.60003 ); + collision16 ghost(); + collision17 = spawn( "script_model", ( 2721, -533, 1184 ) ); + collision17 setmodel( "collision_wall_128x128x10_standard" ); + collision17.angles = ( 0, 60, -2.60003 ); + collision17 ghost(); + collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) ); + collision18 setmodel( "collision_geo_64x64x256_standard" ); + collision18.angles = vectorscale( ( 1, 0, 0 ), 350.0 ); + collision18 ghost(); + collision19 = spawn( "script_model", ( 1631, -235, 2943 ) ); + collision19 setmodel( "collision_geo_32x32x128_standard" ); + collision19.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision19 ghost(); + collision20 = spawn( "script_model", ( 2232, -579, 1354 ) ); + collision20 setmodel( "collision_wall_128x128x10_standard" ); + collision20.angles = vectorscale( ( 0, 1, 0 ), 330.0 ); + collision20 ghost(); + collision21 = spawn( "script_model", ( 2349, 805, 1346 ) ); + collision21 setmodel( "collision_geo_32x32x128_standard" ); + collision21.angles = vectorscale( ( 0, 1, 0 ), 8.6 ); + collision21 ghost(); + collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) ); + collision22 setmodel( "collision_geo_32x32x128_standard" ); + collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 ); + collision22 ghost(); + collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) ); + collision23 setmodel( "collision_geo_32x32x128_standard" ); + collision23.angles = ( 0, 0, 0 ); + collision23 ghost(); + collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) ); + collision24 setmodel( "collision_geo_32x32x128_standard" ); + collision24.angles = ( 0, 0, 0 ); + collision24 ghost(); + } } connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way ) { - if ( !isDefined( one_way ) ) - { - one_way = 0; - } - zone_init( zone_name_a ); - zone_init( zone_name_b ); - enable_zone( zone_name_a ); - enable_zone( zone_name_b ); - if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) ) - { - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct(); - } - level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1; - if ( !one_way ) - { - if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) ) - { - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct(); - } - level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1; - } + if ( !isdefined( one_way ) ) + one_way = 0; + + zone_init( zone_name_a ); + zone_init( zone_name_b ); + enable_zone( zone_name_a ); + enable_zone( zone_name_b ); + + if ( !isdefined( level.zones[zone_name_a].adjacent_zones[zone_name_b] ) ) + level.zones[zone_name_a].adjacent_zones[zone_name_b] = spawnstruct(); + + level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1; + + if ( !one_way ) + { + if ( !isdefined( level.zones[zone_name_b].adjacent_zones[zone_name_a] ) ) + level.zones[zone_name_b].adjacent_zones[zone_name_a] = spawnstruct(); + + level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1; + } } kill_trigger_spawn() { - trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 ); - trig.angles = vectorScale( ( 0, 0, 0 ), 150 ); - trig.targetname = "instant_death"; - trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 ); - trig2.angles = ( 0, 0, 0 ); - trig2.targetname = "instant_death"; + trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 ); + trig.angles = vectorscale( ( 0, 1, 0 ), 150.0 ); + trig.targetname = "instant_death"; + trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 ); + trig2.angles = ( 0, 0, 0 ); + trig2.targetname = "instant_death"; } pathfinding_override_fix() { - zombie_trigger_origin = ( 2303, 746, 1296 ); - zombie_trigger_radius = 30; - zombie_trigger_height = 128; - player_trigger_origin = ( 2357, 778, 1304 ); - player_trigger_radius = 40; - zombie_goto_point = ( 2361, 738, 1304 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3767, 1867, 2790 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3684, 1772, 2758 ); - player_trigger_radius = 70; - zombie_goto_point = ( 3659, 1872, 2790 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3245, 1251, 1347,79 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3246, 1126, 1347,79 ); - player_trigger_radius = 64; - zombie_goto_point = ( 3031, 1234, 1278,12 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3246, 1113, 1347,79 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3245, 1230, 1347,79 ); - player_trigger_radius = 44; - zombie_goto_point = ( 3023, 1154, 1278,12 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3389, 1182, 1364,79 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3246, 1126, 1347,79 ); - player_trigger_radius = 64; - zombie_goto_point = ( 3381, 1093, 1364,79 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3148, 1712, 1299,07 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3149, 1604, 1302,2 ); - player_trigger_radius = 44; - zombie_goto_point = ( 3259, 1644, 1321,5 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3149, 1584, 1302,2 ); - zombie_trigger_radius = 64; - zombie_trigger_height = 128; - player_trigger_origin = ( 3148, 1692, 1299,07 ); - player_trigger_radius = 44; - zombie_goto_point = ( 3291, 1684, 1321,5 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - zombie_trigger_origin = ( 3818, 1860, 2789,23 ); - zombie_trigger_radius = 100; - zombie_trigger_height = 128; - player_trigger_origin = ( 3601, 1961, 2744,95 ); - player_trigger_radius = 50; - zombie_goto_point = ( 3626, 1918, 2750,26 ); - level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); - all_nodes = getallnodes(); - _a331 = all_nodes; - _k331 = getFirstArrayKey( _a331 ); - while ( isDefined( _k331 ) ) - { - node = _a331[ _k331 ]; - if ( node.origin[ 0 ] == 3598,2 ) - { - deletepathnode( node ); - return; - } - else - { - _k331 = getNextArrayKey( _a331, _k331 ); - } - } + zombie_trigger_origin = ( 2303, 746, 1296 ); + zombie_trigger_radius = 30; + zombie_trigger_height = 128; + player_trigger_origin = ( 2357, 778, 1304 ); + player_trigger_radius = 40; + zombie_goto_point = ( 2361, 738, 1304 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3767, 1867, 2790 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3684, 1772, 2758 ); + player_trigger_radius = 70; + zombie_goto_point = ( 3659, 1872, 2790 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3245, 1251, 1347.79 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3246, 1126, 1347.79 ); + player_trigger_radius = 64; + zombie_goto_point = ( 3031, 1234, 1278.12 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3246, 1113, 1347.79 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3245, 1230, 1347.79 ); + player_trigger_radius = 44; + zombie_goto_point = ( 3023, 1154, 1278.12 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3389, 1182, 1364.79 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3246, 1126, 1347.79 ); + player_trigger_radius = 64; + zombie_goto_point = ( 3381, 1093, 1364.79 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3148, 1712, 1299.07 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3149, 1604, 1302.2 ); + player_trigger_radius = 44; + zombie_goto_point = ( 3259, 1644, 1321.5 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3149, 1584, 1302.2 ); + zombie_trigger_radius = 64; + zombie_trigger_height = 128; + player_trigger_origin = ( 3148, 1692, 1299.07 ); + player_trigger_radius = 44; + zombie_goto_point = ( 3291, 1684, 1321.5 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + zombie_trigger_origin = ( 3818, 1860, 2789.23 ); + zombie_trigger_radius = 100; + zombie_trigger_height = 128; + player_trigger_origin = ( 3601, 1961, 2744.95 ); + player_trigger_radius = 50; + zombie_goto_point = ( 3626, 1918, 2750.26 ); + level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point ); + all_nodes = getallnodes(); + + foreach ( node in all_nodes ) + { + if ( node.origin[0] == 3598.2 ) + { + deletepathnode( node ); + break; + } + } } highrise_link_nodes( a, b ) { - if ( nodesarelinked( a, b ) ) - { - return; - } - link_nodes( a, b ); + if ( nodesarelinked( a, b ) ) + return; + + link_nodes( a, b ); } highrise_unlink_nodes( a, b ) { - if ( !nodesarelinked( a, b ) ) - { - return; - } - unlink_nodes( a, b ); + if ( !nodesarelinked( a, b ) ) + return; + + unlink_nodes( a, b ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc index 0d2e63d..89e3f4d 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_ai_leaper.gsc @@ -1,1360 +1,1285 @@ -//checked includes match cerberus output -#include maps/mp/zm_highrise_elevators; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/gametypes_zm/_globallogic_score; -#include maps/mp/zombies/_zm_zonemgr; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_score; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_zonemgr; +#include maps\mp\gametypes_zm\_globallogic_score; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zm_highrise_elevators; -precache() //checked matches cerberus output +precache() { - precache_fx(); + precache_fx(); } -precache_fx() //checked matches cerberus output +precache_fx() { - level._effect[ "leaper_death" ] = loadfx( "maps/zombie/fx_zmb_leaper_death" ); - level._effect[ "leaper_spawn" ] = loadfx( "maps/zombie/fx_zmb_leaper_spawn" ); - level._effect[ "leaper_trail" ] = loadfx( "maps/zombie/fx_zmb_leaper_trail" ); - level._effect[ "leaper_walk" ] = loadfx( "maps/zombie/fx_zmb_leaper_walk" ); - level._effect[ "leaper_wall_impact" ] = loadfx( "maps/zombie/fx_zmb_leaper_wall_impact" ); + level._effect["leaper_death"] = loadfx( "maps/zombie/fx_zmb_leaper_death" ); + level._effect["leaper_spawn"] = loadfx( "maps/zombie/fx_zmb_leaper_spawn" ); + level._effect["leaper_trail"] = loadfx( "maps/zombie/fx_zmb_leaper_trail" ); + level._effect["leaper_walk"] = loadfx( "maps/zombie/fx_zmb_leaper_walk" ); + level._effect["leaper_wall_impact"] = loadfx( "maps/zombie/fx_zmb_leaper_wall_impact" ); } -init() //checked matches cerberus output +init() { - leaper_spawner_init(); - leaper_calc_anim_offsets(); - if ( !isDefined( level.leapers_per_player ) ) - { - level.leapers_per_player = 2; - } - level.no_jump_triggers = getentarray( "leaper_no_jump_trigger", "targetname" ); + leaper_spawner_init(); + leaper_calc_anim_offsets(); + + if ( !isdefined( level.leapers_per_player ) ) + level.leapers_per_player = 2; + + level.no_jump_triggers = getentarray( "leaper_no_jump_trigger", "targetname" ); } -leaper_calc_anim_offsets() //checked matches cerberus output +leaper_calc_anim_offsets() { - leaper = spawn_zombie( level.leaper_spawners[ 0 ] ); - if ( isDefined( leaper ) ) - { - level.leaper_anim = spawnstruct(); - asd = "zm_wall_up"; - anim_id = leaper getanimfromasd( asd, 0 ); - level.leaper_anim.up_mid = getmovedelta( anim_id, 0, 0.488 ) + vectorScale( ( 0, 0, 1 ), 6 ); - level.leaper_anim.up_end = getmovedelta( anim_id, 0, 1 ); - asd = "zm_wall_left"; - anim_id = leaper getanimfromasd( asd, 0 ); - wallhit_time = getnotetracktimes( anim_id, "wallhit" ); - level.leaper_anim.left_mid = getmovedelta( anim_id, 0, wallhit_time[ 0 ] ) + vectorScale( ( 0, 0, 1 ), 48 ); - level.leaper_anim.left_end = getmovedelta( anim_id, 0, 1 ); - asd = "zm_wall_left_large"; - anim_id = leaper getanimfromasd( asd, 0 ); - wallhit_time = getnotetracktimes( anim_id, "wallhit" ); - level.leaper_anim.left_large_mid = getmovedelta( anim_id, 0, wallhit_time[ 0 ] ) + vectorScale( ( 0, 0, 1 ), 48 ); - level.leaper_anim.left_large_end = getmovedelta( anim_id, 0, 1 ); - asd = "zm_wall_right"; - anim_id = leaper getanimfromasd( asd, 0 ); - wallhit_time = getnotetracktimes( anim_id, "wallhit" ); - level.leaper_anim.right_mid = getmovedelta( anim_id, 0, wallhit_time[ 0 ] ) + vectorScale( ( 0, 0, 1 ), 48 ); - level.leaper_anim.right_end = getmovedelta( anim_id, 0, 1 ); - asd = "zm_wall_right_large"; - anim_id = leaper getanimfromasd( asd, 0 ); - wallhit_time = getnotetracktimes( anim_id, "wallhit" ); - level.leaper_anim.right_large_mid = getmovedelta( anim_id, 0, wallhit_time[ 0 ] ) + vectorScale( ( 0, 0, 1 ), 48 ); - level.leaper_anim.right_large_end = getmovedelta( anim_id, 0, 1 ); - leaper delete(); - } + leaper = spawn_zombie( level.leaper_spawners[0] ); + + if ( isdefined( leaper ) ) + { + level.leaper_anim = spawnstruct(); + asd = "zm_wall_up"; + anim_id = leaper getanimfromasd( asd, 0 ); + level.leaper_anim.up_mid = getmovedelta( anim_id, 0, 0.488 ) + vectorscale( ( 0, 0, 1 ), 6.0 ); + level.leaper_anim.up_end = getmovedelta( anim_id, 0, 1 ); + asd = "zm_wall_left"; + anim_id = leaper getanimfromasd( asd, 0 ); + wallhit_time = getnotetracktimes( anim_id, "wallhit" ); + level.leaper_anim.left_mid = getmovedelta( anim_id, 0, wallhit_time[0] ) + vectorscale( ( 0, 0, 1 ), 48.0 ); + level.leaper_anim.left_end = getmovedelta( anim_id, 0, 1 ); + asd = "zm_wall_left_large"; + anim_id = leaper getanimfromasd( asd, 0 ); + wallhit_time = getnotetracktimes( anim_id, "wallhit" ); + level.leaper_anim.left_large_mid = getmovedelta( anim_id, 0, wallhit_time[0] ) + vectorscale( ( 0, 0, 1 ), 48.0 ); + level.leaper_anim.left_large_end = getmovedelta( anim_id, 0, 1 ); + asd = "zm_wall_right"; + anim_id = leaper getanimfromasd( asd, 0 ); + wallhit_time = getnotetracktimes( anim_id, "wallhit" ); + level.leaper_anim.right_mid = getmovedelta( anim_id, 0, wallhit_time[0] ) + vectorscale( ( 0, 0, 1 ), 48.0 ); + level.leaper_anim.right_end = getmovedelta( anim_id, 0, 1 ); + asd = "zm_wall_right_large"; + anim_id = leaper getanimfromasd( asd, 0 ); + wallhit_time = getnotetracktimes( anim_id, "wallhit" ); + level.leaper_anim.right_large_mid = getmovedelta( anim_id, 0, wallhit_time[0] ) + vectorscale( ( 0, 0, 1 ), 48.0 ); + level.leaper_anim.right_large_end = getmovedelta( anim_id, 0, 1 ); + leaper delete(); + } } -leaper_spawner_init() //checked changed to match cerberus output +leaper_spawner_init() { - level.leaper_spawners = getentarray( "leaper_zombie_spawner", "script_noteworthy" ); - if ( level.leaper_spawners.size == 0 ) - { - return; - } - for ( i = 0; i < level.leaper_spawners.size; i++ ) - { - level.leaper_spawners[ i ].is_enabled = 1; - level.leaper_spawners[ i ].script_forcespawn = 1; - } - /* + level.leaper_spawners = getentarray( "leaper_zombie_spawner", "script_noteworthy" ); + + if ( level.leaper_spawners.size == 0 ) + return; + + for ( i = 0; i < level.leaper_spawners.size; i++ ) + { + level.leaper_spawners[i].is_enabled = 1; + level.leaper_spawners[i].script_forcespawn = 1; + } /# - assert( level.leaper_spawners.size > 0 ); + assert( level.leaper_spawners.size > 0 ); #/ - */ - level.leaper_health = 100; - array_thread( level.leaper_spawners, ::add_spawn_function, ::leaper_init ); - /* + level.leaper_health = 100; + array_thread( level.leaper_spawners, ::add_spawn_function, ::leaper_init ); /# - if ( isDefined( level.leaper_rounds_enabled ) && level.leaper_rounds_enabled ) - { - level thread leaper_spawner_zone_check(); + if ( isdefined( level.leaper_rounds_enabled ) && level.leaper_rounds_enabled ) + level thread leaper_spawner_zone_check(); #/ - } - */ } -leaper_spawner_zone_check() //checked changed to match cerberus output +leaper_spawner_zone_check() { - flag_wait( "zones_initialized" ); - str_zone_list = ""; - str_spawn_count_list = ""; - n_zones_missing_spawners = 0; - a_zones = getarraykeys( level.zones ); - for ( i = 0; i < a_zones.size; i++ ) - { - if ( level.zones[ a_zones[ i ] ].leaper_locations.size == 0 ) - { - n_zones_missing_spawners++; - } - } - /* + flag_wait( "zones_initialized" ); + str_zone_list = ""; + str_spawn_count_list = ""; + n_zones_missing_spawners = 0; + a_zones = getarraykeys( level.zones ); + + for ( i = 0; i < a_zones.size; i++ ) + { + if ( level.zones[a_zones[i]].leaper_locations.size == 0 ) + { + n_zones_missing_spawners++; + str_zone_list = str_zone_list + "\n " + a_zones[i]; + } + + str_spawn_count_list = str_spawn_count_list + a_zones[i] + ": " + level.zones[a_zones[i]].leaper_locations.size + "\n"; + } /# - assert( n_zones_missing_spawners == 0, "All zones require at least one leaper spawn point." + n_zones_missing_spawners + " zones are missing leaper spawners. They are: " + str_zone_list ); + assert( n_zones_missing_spawners == 0, "All zones require at least one leaper spawn point." + n_zones_missing_spawners + " zones are missing leaper spawners. They are: " + str_zone_list ); #/ /# - println( "========== LEAPER SPAWN COUNT PER ZONE ===========" ); - println( str_spawn_count_list ); - println( "==================================================" ); + println( "========== LEAPER SPAWN COUNT PER ZONE ===========" ); + println( str_spawn_count_list ); + println( "==================================================" ); #/ - */ } -leaper_init() //checked changed out to match cerberus output +leaper_init() { - self endon( "death" ); - level endon( "intermission" ); - self.animname = "leaper_zombie"; - self.audio_type = "leaper"; - self.has_legs = 1; - self.ignore_all_poi = 1; - self.is_leaper = 1; - self.melee_anim_func = ::melee_anim_func; - self.meleedamage = 30; - recalc_zombie_array(); - if ( isDefined( self.spawn_point ) ) - { - spot = self.spawn_point; - if ( !isDefined( spot.angles ) ) - { - spot.angles = ( 0, 0, 0 ); - } - self forceteleport( spot.origin, spot.angles ); - } - self playsound( "zmb_vocals_leaper_spawn" ); - self set_zombie_run_cycle( "run" ); - self.state = "init"; - self thread leaper_think(); - self thread leaper_spawn_failsafe(); - self thread leaper_traverse_watcher(); - self.maxhealth = level.leaper_health; - self.health = level.leaper_health; - self setphysparams( 15, 0, 24 ); - self.zombie_init_done = 1; - self notify( "zombie_init_done" ); - self.allowpain = 0; - self thread play_ambient_leaper_vocals(); - self animmode( "normal" ); - self orientmode( "face enemy" ); - self maps/mp/zombies/_zm_spawner::zombie_setup_attack_properties(); - self maps/mp/zombies/_zm_spawner::zombie_complete_emerging_into_playable_area(); - self setfreecameralockonallowed( 0 ); - if ( ( self.spawn_point.script_parameters == "emerge_bottom" || self.spawn_point.script_parameters == "emerge_top" ) && isDefined( self.spawn_point.script_parameters ) ) - { - self thread do_leaper_emerge( self.spawn_point ); - } - self thread leaper_death(); - self thread leaper_check_zone(); - self thread leaper_check_no_jump(); - self thread leaper_watch_enemy(); - self.combat_animmode = ::leaper_combat_animmode; - level thread maps/mp/zombies/_zm_spawner::zombie_death_event( self ); - self thread maps/mp/zombies/_zm_spawner::enemy_death_detection(); - self thread leaper_elevator_failsafe(); + self endon( "death" ); + level endon( "intermission" ); + self.animname = "leaper_zombie"; + self.audio_type = "leaper"; + self.has_legs = 1; + self.ignore_all_poi = 1; + self.is_leaper = 1; + self.melee_anim_func = ::melee_anim_func; + self.meleedamage = 30; + recalc_zombie_array(); + + if ( isdefined( self.spawn_point ) ) + { + spot = self.spawn_point; + + if ( !isdefined( spot.angles ) ) + spot.angles = ( 0, 0, 0 ); + + self forceteleport( spot.origin, spot.angles ); + } + + self playsound( "zmb_vocals_leaper_spawn" ); + self set_zombie_run_cycle( "run" ); + self.state = "init"; + self thread leaper_think(); + self thread leaper_spawn_failsafe(); + self thread leaper_traverse_watcher(); + self.maxhealth = level.leaper_health; + self.health = level.leaper_health; + self setphysparams( 15, 0, 24 ); + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); + self.allowpain = 0; + self thread play_ambient_leaper_vocals(); + self animmode( "normal" ); + self orientmode( "face enemy" ); + self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); + self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); + self setfreecameralockonallowed( 0 ); + + if ( isdefined( self.spawn_point.script_parameters ) && ( self.spawn_point.script_parameters == "emerge_bottom" || self.spawn_point.script_parameters == "emerge_top" ) ) + self thread do_leaper_emerge( self.spawn_point ); + + self thread leaper_death(); + self thread leaper_check_zone(); + self thread leaper_check_no_jump(); + self thread leaper_watch_enemy(); + self.combat_animmode = ::leaper_combat_animmode; + level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); + self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); + self thread leaper_elevator_failsafe(); } -play_ambient_leaper_vocals() //checked changed to match cerberus output +play_ambient_leaper_vocals() { - self endon( "death" ); - wait randomintrange( 2, 4 ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - if ( isDefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) - { - } - else - { - self playsound( "zmb_vocals_leaper_ambience" ); - } - } - wait randomfloatrange( 1, 1.5 ); - } + self endon( "death" ); + wait( randomintrange( 2, 4 ) ); + + while ( true ) + { + if ( isdefined( self ) ) + { + if ( isdefined( self.favoriteenemy ) && distance( self.origin, self.favoriteenemy.origin ) <= 150 ) + { + + } + else + self playsound( "zmb_vocals_leaper_ambience" ); + } + + wait( randomfloatrange( 1, 1.5 ) ); + } } -leaper_death() //checked matches cerberus output +leaper_death() { - self endon( "leaper_cleanup" ); - self waittill( "death" ); - self leaper_stop_trail_fx(); - self playsound( "zmb_vocals_leaper_death" ); - playfx( level._effect[ "leaper_death" ], self.origin ); - if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) - { - level.last_leaper_origin = self.origin; - level notify( "last_leaper_down" ); - } - if ( isplayer( self.attacker ) ) - { - event = "death"; - if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) - { - event = "ballistic_knife_death"; - } - self.attacker thread do_player_general_vox( "general", "leaper_killed", 20, 20 ); - self.attacker maps/mp/zombies/_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); - } + self endon( "leaper_cleanup" ); + + self waittill( "death" ); + + self leaper_stop_trail_fx(); + self playsound( "zmb_vocals_leaper_death" ); + playfx( level._effect["leaper_death"], self.origin ); + + if ( get_current_zombie_count() == 0 && level.zombie_total == 0 ) + { + level.last_leaper_origin = self.origin; + level notify( "last_leaper_down" ); + } + + if ( isplayer( self.attacker ) ) + { + event = "death"; + + if ( issubstr( self.damageweapon, "knife_ballistic_" ) ) + event = "ballistic_knife_death"; + + self.attacker thread do_player_general_vox( "general", "leaper_killed", 20, 20 ); + self.attacker maps\mp\zombies\_zm_score::player_add_points( event, self.damagemod, self.damagelocation, 1 ); + } } -leaper_think() //checked changed to match cerberus output +leaper_think() { - self endon( "death" ); - while ( 1 ) - { - switch( self.state ) - { - case "init": - leaper_building_jump(); - break; - case "chasing": - leaper_check_wall(); - break; - case "leaping": - break; - } + self endon( "death" ); + + while ( true ) + { + switch ( self.state ) + { + case "init": + leaper_building_jump(); + break; + case "chasing": + leaper_check_wall(); + break; + case "leaping": + break; + } + wait 0.1; - } + } } -leaper_can_use_anim( local_mid, local_end, dir ) //checked matches cerberus output +leaper_can_use_anim( local_mid, local_end, dir ) { - start = self.origin; - mid = self localtoworldcoords( local_mid ); - end = self localtoworldcoords( local_end ); - real_mid = mid; - forward_dist = length( end - start ) * 0.5; - forward_vec = vectornormalize( end - start ); - temp_org = start + vectorScale( forward_vec, forward_dist ); - forward_org = ( temp_org[ 0 ], temp_org[ 1 ], real_mid[ 2 ] ); - end_top = end + vectorScale( ( 0, 0, 1 ), 24 ); - end_bottom = end + vectorScale( ( 0, 0, -1 ), 60 ); - trace = bullettrace( start, mid, 1, self ); - if ( isDefined( trace[ "entity" ] ) ) - { - return 0; - } - if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 ) - { - if ( trace[ "fraction" ] < 0.2 ) - { - /* + start = self.origin; + mid = self localtoworldcoords( local_mid ); + end = self localtoworldcoords( local_end ); + real_mid = mid; + forward_dist = length( end - start ) * 0.5; + forward_vec = vectornormalize( end - start ); + temp_org = start + vectorscale( forward_vec, forward_dist ); + forward_org = ( temp_org[0], temp_org[1], real_mid[2] ); + end_top = end + vectorscale( ( 0, 0, 1 ), 24.0 ); + end_bottom = end + vectorscale( ( 0, 0, -1 ), 60.0 ); + trace = bullettrace( start, mid, 1, self ); + + if ( isdefined( trace["entity"] ) ) + return false; + + if ( isdefined( trace["fraction"] ) && trace["fraction"] < 1 ) + { + if ( trace["fraction"] < 0.2 ) + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( start, mid, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( start, mid, ( 1, 0, 0 ), 1, 0, 100 ); #/ - } - */ - return 0; - } - if ( dir == "up" ) - { - if ( trace[ "fraction" ] < 0.9 ) - { - return 0; - } - } - mid = trace[ "position" ]; - /* + return false; + } + + if ( dir == "up" ) + { + if ( trace["fraction"] < 0.9 ) + return false; + } + + mid = trace["position"]; /# - if ( getDvarInt( #"5B4FE0B3" ) >= 1 ) - { - line( start, mid, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) >= 1 ) + line( start, mid, ( 0, 1, 0 ), 1, 0, 100 ); #/ - } - */ - if ( dir != "up" ) - { - trace = bullettrace( forward_org, real_mid, 1, self ); - if ( isDefined( trace[ "entity" ] ) ) - { - return 0; - } - if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 ) - { - /* + if ( dir != "up" ) + { + trace = bullettrace( forward_org, real_mid, 1, self ); + + if ( isdefined( trace["entity"] ) ) + return false; + + if ( isdefined( trace["fraction"] ) && trace["fraction"] < 1 ) + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( forward_org, real_mid, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( forward_org, real_mid, ( 1, 0, 0 ), 1, 0, 100 ); #/ - } - */ - } - else - { - /* + } + else + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( forward_org, real_mid, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( forward_org, real_mid, ( 0, 1, 0 ), 1, 0, 100 ); #/ - } - */ - return 0; - } - } - } - else - { - /* + return false; + } + } + } + else + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( start, mid, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( start, mid, ( 1, 0, 0 ), 1, 0, 100 ); #/ - } - */ - return 0; - } - trace = bullettrace( mid, end, 1, self ); - if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 ) - { - /* + return false; + } + + trace = bullettrace( mid, end, 1, self ); + + if ( isdefined( trace["fraction"] ) && trace["fraction"] < 1 ) + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( mid, end, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( mid, end, ( 1, 0, 0 ), 1, 0, 100 ); #/ - } - */ - return 0; - } - else - { - /* + return false; + } + else + { /# - if ( getDvarInt( #"5B4FE0B3" ) >= 1 ) - { - line( mid, end, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) >= 1 ) + line( mid, end, ( 0, 1, 0 ), 1, 0, 100 ); #/ - } - */ - } - trace = bullettrace( end_top, end_bottom, 1, self ); - if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] >= 1 ) - { - /* + } + + trace = bullettrace( end_top, end_bottom, 1, self ); + + if ( isdefined( trace["fraction"] ) && trace["fraction"] >= 1 ) + { /# - if ( getDvarInt( #"5B4FE0B3" ) == 1 ) - { - line( end_top, end_bottom, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) == 1 ) + line( end_top, end_bottom, ( 1, 0, 0 ), 1, 0, 100 ); #/ - } - */ - return 0; - } - else - { - /* + return false; + } + else + { /# - if ( getDvarInt( #"5B4FE0B3" ) >= 1 ) - { - line( end_top, end_bottom, ( 0, 0, 1 ), 1, 0, 100 ); + if ( getdvarint( _hash_5B4FE0B3 ) >= 1 ) + line( end_top, end_bottom, ( 0, 1, 0 ), 1, 0, 100 ); #/ - } - */ - } - return 1; + } + + return true; } -leaper_building_jump() //checked matches cerberus output +leaper_building_jump() { - self endon( "death" ); - if ( isDefined( self.spawn_point.script_string ) && self.spawn_point.script_string != "find_flesh" ) - { - self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_building_leap", self.spawn_point.script_string ); - self maps/mp/animscripts/zm_shared::donotetracks( "building_leap_anim" ); - } - self thread leaper_playable_area_failsafe(); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.state = "chasing"; + self endon( "death" ); + + if ( isdefined( self.spawn_point.script_string ) && self.spawn_point.script_string != "find_flesh" ) + { + self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_building_leap", self.spawn_point.script_string ); + self maps\mp\animscripts\zm_shared::donotetracks( "building_leap_anim" ); + } + + self thread leaper_playable_area_failsafe(); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.state = "chasing"; } -leaper_check_wall() //checked matches cerberus output +leaper_check_wall() { - self endon( "death" ); - if ( !isDefined( self.next_leap_time ) ) - { - self.next_leap_time = getTime() + 500; - } - if ( is_true( self.sliding_on_goo ) || is_true( self.is_leaping ) ) - { - return; - } - if ( getTime() > self.next_leap_time && !is_true( self.no_jump ) ) - { - wall_anim = []; - if ( self leaper_can_use_anim( level.leaper_anim.up_mid, level.leaper_anim.up_end, "up" ) ) - { - wall_anim[ wall_anim.size ] = "zm_wall_up"; - } - if ( self leaper_can_use_anim( level.leaper_anim.left_mid, level.leaper_anim.left_end, "left" ) ) - { - wall_anim[ wall_anim.size ] = "zm_wall_left"; - } - else - { - if ( self leaper_can_use_anim( level.leaper_anim.left_large_mid, level.leaper_anim.left_large_end, "left_large" ) ) - { - wall_anim[ wall_anim.size ] = "zm_wall_left_large"; - } - } - if ( self leaper_can_use_anim( level.leaper_anim.right_mid, level.leaper_anim.right_end, "right" ) ) - { - wall_anim[ wall_anim.size ] = "zm_wall_right"; - } - else - { - if ( self leaper_can_use_anim( level.leaper_anim.right_large_mid, level.leaper_anim.right_large_end, "right_large" ) ) - { - wall_anim[ wall_anim.size ] = "zm_wall_right_large"; - } - } - if ( !self isinscriptedstate() ) - { - b_should_play_wall_jump_anim = wall_anim.size > 0; - } - if ( b_should_play_wall_jump_anim && isDefined( self.enemy ) && self cansee( self.enemy ) || is_true( self.in_player_zone ) ) - { - wall_anim = array_randomize( wall_anim ); - self.leap_anim = wall_anim[ 0 ]; - self leaper_start_trail_fx(); - self.ignoreall = 1; - self.is_leaping = 1; - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self animcustom( ::leaper_play_anim ); - self waittill( "leap_anim_done" ); - self leaper_stop_trail_fx(); - self.ignoreall = 0; - self.is_leaping = 0; - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - self.next_leap_time = getTime() + 500; - } - } + self endon( "death" ); + + if ( !isdefined( self.next_leap_time ) ) + self.next_leap_time = gettime() + 500; + + if ( is_true( self.sliding_on_goo ) || is_true( self.is_leaping ) ) + return; + + if ( gettime() > self.next_leap_time && !is_true( self.no_jump ) ) + { + wall_anim = []; + + if ( self leaper_can_use_anim( level.leaper_anim.up_mid, level.leaper_anim.up_end, "up" ) ) + wall_anim[wall_anim.size] = "zm_wall_up"; + + if ( self leaper_can_use_anim( level.leaper_anim.left_mid, level.leaper_anim.left_end, "left" ) ) + wall_anim[wall_anim.size] = "zm_wall_left"; + else if ( self leaper_can_use_anim( level.leaper_anim.left_large_mid, level.leaper_anim.left_large_end, "left_large" ) ) + wall_anim[wall_anim.size] = "zm_wall_left_large"; + + if ( self leaper_can_use_anim( level.leaper_anim.right_mid, level.leaper_anim.right_end, "right" ) ) + wall_anim[wall_anim.size] = "zm_wall_right"; + else if ( self leaper_can_use_anim( level.leaper_anim.right_large_mid, level.leaper_anim.right_large_end, "right_large" ) ) + wall_anim[wall_anim.size] = "zm_wall_right_large"; + + b_should_play_wall_jump_anim = !self isinscriptedstate() && wall_anim.size > 0; + + if ( b_should_play_wall_jump_anim && isdefined( self.enemy ) && ( self cansee( self.enemy ) || is_true( self.in_player_zone ) ) ) + { + wall_anim = array_randomize( wall_anim ); + self.leap_anim = wall_anim[0]; + self leaper_start_trail_fx(); + self.ignoreall = 1; + self.is_leaping = 1; + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self animcustom( ::leaper_play_anim ); + + self waittill( "leap_anim_done" ); + + self leaper_stop_trail_fx(); + self.ignoreall = 0; + self.is_leaping = 0; + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + self.next_leap_time = gettime() + 500; + } + } } -leaper_check_zone() //checked changed to match cerberus output +leaper_check_zone() { - self endon( "death" ); - self.in_player_zone = 0; - while ( 1 ) - { - self.in_player_zone = 0; - foreach ( zone in level.zones ) - { - if ( !isDefined( zone.volumes ) || zone.volumes.size == 0 ) - { - } - else - { - zone_name = zone.volumes[ 0 ].targetname; - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone_name ) ) - { - if ( is_true( zone.is_occupied ) ) - { - self.in_player_zone = 1; - break; - } - } - } - } - wait 0.2; - } + self endon( "death" ); + self.in_player_zone = 0; + + while ( true ) + { + self.in_player_zone = 0; + + foreach ( zone in level.zones ) + { + if ( !isdefined( zone.volumes ) || zone.volumes.size == 0 ) + continue; + + zone_name = zone.volumes[0].targetname; + + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone_name ) ) + { + if ( is_true( zone.is_occupied ) ) + { + self.in_player_zone = 1; + break; + } + } + } + + wait 0.2; + } } -leaper_check_no_jump() //checked changed to match cerberus output +leaper_check_no_jump() { - self endon( "death" ); - while ( 1 ) - { - self.no_jump = 0; - foreach ( trigger in level.no_jump_triggers ) - { - if ( self istouching( trigger ) ) - { - self.no_jump = 1; - break; - } - } - wait 0.2; - } + self endon( "death" ); + + while ( true ) + { + self.no_jump = 0; + + foreach ( trigger in level.no_jump_triggers ) + { + if ( self istouching( trigger ) ) + { + self.no_jump = 1; + break; + } + } + + wait 0.2; + } } -melee_anim_func() //checked matches cerberus output +melee_anim_func() { - self.next_leap_time = getTime() + 1500; - self animmode( "gravity" ); + self.next_leap_time = gettime() + 1500; + self animmode( "gravity" ); } -leaper_start_trail_fx() //checked matches cerberus output +leaper_start_trail_fx() { - self endon( "death" ); - self leaper_stop_trail_fx(); - self.trail_fx = spawn( "script_model", self.origin ); - self.trail_fx setmodel( "tag_origin" ); - self.trail_fx linkto( self ); - wait 0.1; - playfxontag( level._effect[ "leaper_trail" ], self.trail_fx, "tag_origin" ); + self endon( "death" ); + self leaper_stop_trail_fx(); + self.trail_fx = spawn( "script_model", self.origin ); + self.trail_fx setmodel( "tag_origin" ); + self.trail_fx linkto( self ); + wait 0.1; + playfxontag( level._effect["leaper_trail"], self.trail_fx, "tag_origin" ); } -leaper_stop_trail_fx() //checked matches cerberus output +leaper_stop_trail_fx() { - if ( isDefined( self.trail_fx ) ) - { - self.trail_fx delete(); - } + if ( isdefined( self.trail_fx ) ) + self.trail_fx delete(); } -leaper_play_anim() //checked matches cerberus output +leaper_play_anim() { - self endon( "death" ); - self animmode( "nogravity" ); - self setanimstatefromasd( self.leap_anim ); - self thread leaper_handle_fx_notetracks( "wall_anim" ); - maps/mp/animscripts/zm_shared::donotetracks( "wall_anim" ); - self animmode( "normal" ); - self notify( "leap_anim_done" ); + self endon( "death" ); + self animmode( "nogravity" ); + self setanimstatefromasd( self.leap_anim ); + self thread leaper_handle_fx_notetracks( "wall_anim" ); + maps\mp\animscripts\zm_shared::donotetracks( "wall_anim" ); + self animmode( "normal" ); + self notify( "leap_anim_done" ); } -leaper_handle_fx_notetracks( animname ) //checked changed to match cerberus output +leaper_handle_fx_notetracks( animname ) { - self endon( "death" ); - self endon( "leap_anim_done" ); - if ( isDefined( self.leap_anim ) && self getanimhasnotetrackfromasd( "wallhit" ) ) - { - self waittillmatch( animname ); - playfx( level._effect[ "leaper_wall_impact" ], self.origin ); - } + self endon( "death" ); + self endon( "leap_anim_done" ); + + if ( isdefined( self.leap_anim ) && self getanimhasnotetrackfromasd( "wallhit" ) ) + { + self waittillmatch( animname, "wallhit" ); + + playfx( level._effect["leaper_wall_impact"], self.origin ); + } } -leaper_notetracks( animname ) //checked changed to match cerberus output +leaper_notetracks( animname ) { - self endon( "death" ); - self endon( "leap_anim_done" ); - self waittillmatch( animname ); - self animmode( "normal" ); + self endon( "death" ); + self endon( "leap_anim_done" ); + + self waittillmatch( animname, "gravity on" ); + + self animmode( "normal" ); } -enable_leaper_rounds() //checked matches cerberus output +enable_leaper_rounds() { - level.leaper_rounds_enabled = 1; - flag_init( "leaper_round" ); - level thread leaper_round_tracker(); + level.leaper_rounds_enabled = 1; + flag_init( "leaper_round" ); + level thread leaper_round_tracker(); } -leaper_round_tracker() //checked changed to match cerberus output +leaper_round_tracker() { - level.leaper_round_count = 1; - level.next_leaper_round = level.round_number + randomintrange( 4, 7 ); - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - while ( 1 ) - { - level waittill( "between_round_over" ); - if ( level.round_number == level.next_leaper_round ) - { - level.music_round_override = 1; - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - leaper_round_start(); - level.round_spawn_func = ::leaper_round_spawning; - level.round_wait_func = ::leaper_round_wait; - level.next_leaper_round = level.round_number + randomintrange( 4, 6 ); - } - else if ( flag( "leaper_round" ) ) - { - leaper_round_stop(); - level.round_spawn_func = old_spawn_func; - level.round_wait_func = old_wait_func; - level.music_round_override = 0; - level.leaper_round_count += 1; - } - } + level.leaper_round_count = 1; + level.next_leaper_round = level.round_number + randomintrange( 4, 7 ); + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + + while ( true ) + { + level waittill( "between_round_over" ); + + if ( level.round_number == level.next_leaper_round ) + { + level.music_round_override = 1; + old_spawn_func = level.round_spawn_func; + old_wait_func = level.round_wait_func; + leaper_round_start(); + level.round_spawn_func = ::leaper_round_spawning; + level.round_wait_func = ::leaper_round_wait; + level.next_leaper_round = level.round_number + randomintrange( 4, 6 ); + } + else if ( flag( "leaper_round" ) ) + { + leaper_round_stop(); + level.round_spawn_func = old_spawn_func; + level.round_wait_func = old_wait_func; + level.music_round_override = 0; + level.leaper_round_count += 1; + } + } } -leaper_round_spawning() //checked changed to match cerberus output +leaper_round_spawning() { - level endon( "intermission" ); - level endon( "leaper_round_ending" ); - level.leaper_targets = getplayers(); - for ( i = 0; i < level.leaper_targets.size; i++ ) - { - level.leaper_targets[ i ].hunted_by = 0; - } - /* + level endon( "intermission" ); + level endon( "leaper_round_ending" ); + level.leaper_targets = getplayers(); + + for ( i = 0; i < level.leaper_targets.size; i++ ) + level.leaper_targets[i].hunted_by = 0; /# - level endon( "kill_round" ); - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - return; + level endon( "kill_round" ); + + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + return; #/ - } - */ - if ( level.intermission ) - { - return; - } - level.leaper_intermission = 1; - level thread leaper_round_accuracy_tracking(); - level thread leaper_round_aftermath(); - players = get_players(); - wait 1; - playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); - wait 1; - if ( level.leaper_round_count < 3 ) - { - max = players.size * level.leapers_per_player; - } - else - { - max = players.size * level.leapers_per_player; - } - level.zombie_total = max; - leaper_health_increase(); - level.leaper_count = 0; - while ( 1 ) - { - b_hold_spawning_when_leapers_are_all_dead = 1; - /* + if ( level.intermission ) + return; + + level.leaper_intermission = 1; + level thread leaper_round_accuracy_tracking(); + level thread leaper_round_aftermath(); + players = get_players(); + wait 1; + playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); + wait 1; + + if ( level.leaper_round_count < 3 ) + max = players.size * level.leapers_per_player; + else + max = players.size * level.leapers_per_player; + + level.zombie_total = max; + leaper_health_increase(); + level.leaper_count = 0; + + while ( true ) + { + b_hold_spawning_when_leapers_are_all_dead = 1; /# - n_test_mode_active = getDvarInt( #"298DD9A4" ); - if ( isDefined( n_test_mode_active ) && n_test_mode_active == 1 ) - { - level.zombie_total = 9999; - b_hold_spawning_when_leapers_are_all_dead = 0; - } - else - { - n_remaining_leapers_this_round = max - level.leaper_count; - level.zombie_total = clamp( n_remaining_leapers_this_round, 0, max ); + n_test_mode_active = getdvarint( _hash_298DD9A4 ); + + if ( isdefined( n_test_mode_active ) && n_test_mode_active == 1 ) + { + level.zombie_total = 9999; + b_hold_spawning_when_leapers_are_all_dead = 0; + } + else + { + n_remaining_leapers_this_round = max - level.leaper_count; + level.zombie_total = clamp( n_remaining_leapers_this_round, 0, max ); + } #/ - } - */ - if ( ( level.leaper_count >= max ) && b_hold_spawning_when_leapers_are_all_dead ) - { - wait 0.5; - continue; - } - num_player_valid = get_number_of_valid_players(); - per_player = 2; - /* + if ( level.leaper_count >= max && b_hold_spawning_when_leapers_are_all_dead ) + { + wait 0.5; + continue; + } + + num_player_valid = get_number_of_valid_players(); + per_player = 2; /# - if ( getDvarInt( #"5A273E4B" ) == 2 ) - { - per_player = 1; + if ( getdvarint( _hash_5A273E4B ) == 2 ) + per_player = 1; #/ - } - */ - while ( get_current_zombie_count() >= ( num_player_valid * per_player ) ) - { - wait 2; - num_player_valid = get_number_of_valid_players(); - } - players = get_players(); - favorite_enemy = get_favorite_enemy(); - spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.leaper_spawners[ 0 ] ); - if ( isDefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - ai.spawn_point = spawn_point; - spawn_point thread leaper_spawn_fx( ai, spawn_point ); - level.zombie_total--; + while ( get_current_zombie_count() >= num_player_valid * per_player ) + { + wait 2; + num_player_valid = get_number_of_valid_players(); + } - level.leaper_count++; - } - waiting_for_next_leaper_spawn( level.leaper_count, max ); - } + players = get_players(); + favorite_enemy = get_favorite_enemy(); + spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.leaper_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai.favoriteenemy = favorite_enemy; + ai.spawn_point = spawn_point; + spawn_point thread leaper_spawn_fx( ai, spawn_point ); + level.zombie_total--; + level.leaper_count++; + } + + waiting_for_next_leaper_spawn( level.leaper_count, max ); + } } -leaper_round_accuracy_tracking() //checked changed to match cerberus output +leaper_round_accuracy_tracking() { - players = getplayers(); - level.leaper_round_accurate_players = 0; - for ( i = 0; i < players.size; i++ ) - { - players[ i ].total_shots_start_leaper_round = players[ i ] maps/mp/gametypes_zm/_globallogic_score::getpersstat( "total_shots" ); - players[ i ].total_hits_start_leaper_round = players[ i ] maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hits" ); - } - level waittill( "last_leaper_down" ); - players = getplayers(); + players = getplayers(); + level.leaper_round_accurate_players = 0; - for ( i = 0; i < players.size; i++ ) - { - total_shots_end_leaper_round = players[ i ] maps/mp/gametypes_zm/_globallogic_score::getpersstat( "total_shots" ) - players[ i ].total_shots_start_leaper_round; - total_hits_end_leaper_round = players[ i ] maps/mp/gametypes_zm/_globallogic_score::getpersstat( "hits" ) - players[ i ].total_hits_start_leaper_round; - if ( total_shots_end_leaper_round == total_hits_end_leaper_round ) - { - level.leaper_round_accurate_players++; - } - } - if ( level.leaper_round_accurate_players == players.size ) - { - for ( i = 0; i < players.size; i++ ) - { - players[ i ] maps/mp/zombies/_zm_score::add_to_player_score( 2000 ); - } - if ( isDefined( level.last_leaper_origin ) ) - { - trace = groundtrace( level.last_leaper_origin + vectorScale( ( 0, 0, 1 ), 10 ), level.last_leaper_origin + vectorScale( ( 0, 0, -1 ), 150 ), 0, undefined, 1 ); - power_up_origin = trace[ "position" ]; - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorScale( ( 1, 1, 0 ), 30 ) ); - } - } + for ( i = 0; i < players.size; i++ ) + { + players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + } + + level waittill( "last_leaper_down" ); + + players = getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ) - players[i].total_shots_start_leaper_round; + total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ) - players[i].total_hits_start_leaper_round; + + if ( total_shots_end_leaper_round == total_hits_end_leaper_round ) + level.leaper_round_accurate_players++; + } + + if ( level.leaper_round_accurate_players == players.size ) + { + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::add_to_player_score( 2000 ); + + if ( isdefined( level.last_leaper_origin ) ) + { + trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 ); + power_up_origin = trace["position"]; + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorscale( ( 1, 1, 0 ), 30.0 ) ); + } + } } -leaper_round_wait() //checked matches cerberus output +leaper_round_wait() { - level endon( "restart_round" ); - /* + level endon( "restart_round" ); /# - if ( getDvarInt( "zombie_cheat" ) == 2 || getDvarInt( "zombie_cheat" ) >= 4 ) - { - level waittill( "forever" ); + if ( getdvarint( _hash_FA81816F ) == 2 || getdvarint( _hash_FA81816F ) >= 4 ) + level waittill( "forever" ); #/ - } - */ - wait 1; - if ( flag( "leaper_round" ) ) - { - wait 7; - while ( level.leaper_intermission ) - { - wait 0.5; - } - } + wait 1; + + if ( flag( "leaper_round" ) ) + { + wait 7; + + while ( level.leaper_intermission ) + wait 0.5; + } } -leaper_health_increase() //checked changed to match cerberus output +leaper_health_increase() { - players = getplayers(); - if ( level.leaper_round_count == 1 ) - { - level.leaper_health = 400; - } - else if ( level.leaper_round_count == 2 ) - { - level.leaper_health = 900; - } - else if ( level.leaper_round_count == 3 ) - { - level.leaper_health = 1300; - } - else if ( level.leaper_round_count == 4 ) - { - level.leaper_health = 1600; - } - if ( level.leaper_health > 1600 ) - { - level.leaper_health = 1600; - } + players = getplayers(); + + if ( level.leaper_round_count == 1 ) + level.leaper_health = 400; + else if ( level.leaper_round_count == 2 ) + level.leaper_health = 900; + else if ( level.leaper_round_count == 3 ) + level.leaper_health = 1300; + else if ( level.leaper_round_count == 4 ) + level.leaper_health = 1600; + + if ( level.leaper_health > 1600 ) + level.leaper_health = 1600; } -get_favorite_enemy() //checked partially changed to match cerberus output see compiler_limitations.md No.2 +get_favorite_enemy() { - leaper_targets = getplayers(); - least_hunted = leaper_targets[ 0 ]; - i = 0; - while ( i < leaper_targets.size ) - { - if ( !isDefined( leaper_targets[ i ].hunted_by ) ) - { - leaper_targets[ i ].hunted_by = 0; - } - if ( !is_player_valid( leaper_targets[ i ] ) ) - { - i++; - continue; - } - if ( !is_player_valid( least_hunted ) ) - { - least_hunted = leaper_targets[ i ]; - } - if ( leaper_targets[ i ].hunted_by < least_hunted.hunted_by ) - { - least_hunted = leaper_targets[ i ]; - } - i++; - } - least_hunted.hunted_by += 1; - return least_hunted; + leaper_targets = getplayers(); + least_hunted = leaper_targets[0]; + + for ( i = 0; i < leaper_targets.size; i++ ) + { + if ( !isdefined( leaper_targets[i].hunted_by ) ) + leaper_targets[i].hunted_by = 0; + + if ( !is_player_valid( leaper_targets[i] ) ) + continue; + + if ( !is_player_valid( least_hunted ) ) + least_hunted = leaper_targets[i]; + + if ( leaper_targets[i].hunted_by < least_hunted.hunted_by ) + least_hunted = leaper_targets[i]; + } + + least_hunted.hunted_by += 1; + return least_hunted; } -leaper_watch_enemy() //checked matches cerberus output +leaper_watch_enemy() { - self endon( "death" ); - while ( 1 ) - { - if ( !is_player_valid( self.favoriteenemy ) ) - { - self.favoriteenemy = get_favorite_enemy(); - } - wait 0.2; - } + self endon( "death" ); + + while ( true ) + { + if ( !is_player_valid( self.favoriteenemy ) ) + self.favoriteenemy = get_favorite_enemy(); + + wait 0.2; + } } -leaper_combat_animmode() //checked matches cerberus output +leaper_combat_animmode() { - self animmode( "gravity", 0 ); + self animmode( "gravity", 0 ); } -leaper_spawn_logic_old( leaper_array, favorite_enemy ) //checked partially changed to match cerberus output see compiler_limitations.md No. 2 +leaper_spawn_logic_old( leaper_array, favorite_enemy ) { - all_locs = getstructarray( "leaper_location", "script_noteworthy" ); - leaper_locs = array_randomize( all_locs ); - i = 0; - while ( i < leaper_locs.size ) - { - if ( leaper_locs.size > 1 ) - { - if ( isDefined( level.old_leaper_spawn ) && level.old_leaper_spawn == leaper_locs[ i ] ) - { - i++; - continue; - } - } - dist_squared = distancesquared( leaper_locs[ i ].origin, favorite_enemy.origin ); + all_locs = getstructarray( "leaper_location", "script_noteworthy" ); + leaper_locs = array_randomize( all_locs ); + + for ( i = 0; i < leaper_locs.size; i++ ) + { + if ( leaper_locs.size > 1 ) + { + if ( isdefined( level.old_leaper_spawn ) && level.old_leaper_spawn == leaper_locs[i] ) + continue; + } + + dist_squared = distancesquared( leaper_locs[i].origin, favorite_enemy.origin ); + if ( dist_squared > 160000 && dist_squared < 1000000 ) { - level.old_leaper_spawn = leaper_locs[ i ]; - return leaper_locs[ i ]; + level.old_leaper_spawn = leaper_locs[i]; + return leaper_locs[i]; } - i++; - } - return leaper_locs[ 0 ]; + } + + return leaper_locs[0]; } -leaper_spawn_logic( leaper_array, favorite_enemy ) //checked changed to match cerberus output +leaper_spawn_logic( leaper_array, favorite_enemy ) { - a_zones_active = level.active_zone_names; - a_zones_occupied = []; - foreach ( zone in a_zones_active ) - { - if ( level.zones[ zone ].is_occupied ) - { - a_zones_occupied[ a_zones_occupied.size ] = zone; - } - } - a_leaper_spawn_points = []; - foreach ( zone in a_zones_occupied ) - { - a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[ zone ].leaper_locations, 0, 0 ); - } - if ( a_leaper_spawn_points.size == 0 ) - { - foreach ( zone in a_zones_active ) - { - a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[ zone ].leaper_locations, 0, 0 ); - } - } - if ( a_leaper_spawn_points.size == 0 ) - { - str_zone_list_occupied = ""; - a_keys_error = getarraykeys( a_zones_occupied ); - foreach ( key in a_zones_occupied ) - { - str_zone_list_occupied = ( str_zone_list_occupied + " " ) + key; - } - str_zone_list_active = ""; - a_keys_error = getarraykeys( a_zones_active ); - foreach ( key in a_zones_active ) - { - str_zone_list_active = ( str_zone_list_active + " " ) + key; - } - /* + a_zones_active = level.active_zone_names; + a_zones_occupied = []; + + foreach ( zone in a_zones_active ) + { + if ( level.zones[zone].is_occupied ) + a_zones_occupied[a_zones_occupied.size] = zone; + } + + a_leaper_spawn_points = []; + + foreach ( zone in a_zones_occupied ) + a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); + + if ( a_leaper_spawn_points.size == 0 ) + { + foreach ( zone in a_zones_active ) + a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); + } + + if ( a_leaper_spawn_points.size == 0 ) + { + str_zone_list_occupied = ""; + a_keys_error = getarraykeys( a_zones_occupied ); + + foreach ( key in a_zones_occupied ) + str_zone_list_occupied = str_zone_list_occupied + " " + key; + + str_zone_list_active = ""; + a_keys_error = getarraykeys( a_zones_active ); + + foreach ( key in a_zones_active ) + str_zone_list_active = str_zone_list_active + " " + key; /# - assertmsg( "No leaper spawn locations were found in any of the occupied or active zones. Occupied zones: " + str_zone_list_occupied + ". Active zones: " + str_zone_list_active ); + assertmsg( "No leaper spawn locations were found in any of the occupied or active zones. Occupied zones: " + str_zone_list_occupied + ". Active zones: " + str_zone_list_active ); #/ - */ - } - /* + } /# - if ( getDvarInt( #"A8C231AA" ) ) - { - player = get_players()[ 0 ]; - a_spawn_points_in_view = []; - i = 0; - while ( i < a_leaper_spawn_points.size ) - { - player_vec = vectornormalize( anglesToForward( player.angles ) ); - player_spawn = vectornormalize( a_leaper_spawn_points[ i ].origin - player.origin ); - dot = vectordot( player_vec, player_spawn ); - if ( dot > 0,707 ) - { - a_spawn_points_in_view[ a_spawn_points_in_view.size ] = a_leaper_spawn_points[ i ]; - debugstar( a_leaper_spawn_points[ i ].origin, 1000, ( 0, 0, 1 ) ); - } - i++; - } - if ( a_spawn_points_in_view.size <= 0 ) - { - a_spawn_points_in_view[ a_spawn_points_in_view.size ] = a_leaper_spawn_points[ 0 ]; - iprintln( "no spawner in view" ); - } - a_leaper_spawn_points = a_spawn_points_in_view; - } + if ( getdvarint( _hash_A8C231AA ) ) + { + player = get_players()[0]; + a_spawn_points_in_view = []; + + for ( i = 0; i < a_leaper_spawn_points.size; i++ ) + { + player_vec = vectornormalize( anglestoforward( player.angles ) ); + player_spawn = vectornormalize( a_leaper_spawn_points[i].origin - player.origin ); + dot = vectordot( player_vec, player_spawn ); + + if ( dot > 0.707 ) + { + a_spawn_points_in_view[a_spawn_points_in_view.size] = a_leaper_spawn_points[i]; + debugstar( a_leaper_spawn_points[i].origin, 1000, ( 1, 1, 1 ) ); + } + } + + if ( a_spawn_points_in_view.size <= 0 ) + { + a_spawn_points_in_view[a_spawn_points_in_view.size] = a_leaper_spawn_points[0]; + iprintln( "no spawner in view" ); + } + + a_leaper_spawn_points = a_spawn_points_in_view; + } #/ - */ - s_leaper_spawn_point = select_leaper_spawn_point( a_leaper_spawn_points ); - return s_leaper_spawn_point; + s_leaper_spawn_point = select_leaper_spawn_point( a_leaper_spawn_points ); + return s_leaper_spawn_point; } -select_leaper_spawn_point( a_spawn_points ) //checked changed to match cerberus output +select_leaper_spawn_point( a_spawn_points ) { - a_valid_nodes = get_valid_spawner_array( a_spawn_points ); - if ( a_valid_nodes.size == 0 ) - { - /* + a_valid_nodes = get_valid_spawner_array( a_spawn_points ); + + if ( a_valid_nodes.size == 0 ) + { /# - iprintln( "All leaper spawns used...resetting" ); + iprintln( "All leaper spawns used...resetting" ); #/ - */ - for ( i = 0; i < a_spawn_points.size; i++ ) - { - a_spawn_points[ i ].has_spawned_leaper_this_round = 0; - } - a_valid_nodes = get_valid_spawner_array( a_spawn_points ); - } - if ( a_valid_nodes.size > 0 ) - { - s_spawn_point = random( a_valid_nodes ); - s_spawn_point.has_spawned_leaper_this_round = 1; - } - else - { - /* + for ( i = 0; i < a_spawn_points.size; i++ ) + a_spawn_points[i].has_spawned_leaper_this_round = 0; + + a_valid_nodes = get_valid_spawner_array( a_spawn_points ); + } + + if ( a_valid_nodes.size > 0 ) + { + s_spawn_point = random( a_valid_nodes ); + s_spawn_point.has_spawned_leaper_this_round = 1; + } + else + { /# - iprintln( "DEBUG: no valid leaper spawns available" ); + iprintln( "DEBUG: no valid leaper spawns available" ); #/ - */ - s_spawn_point = a_spawn_points[ 0 ]; - } - return s_spawn_point; + s_spawn_point = a_spawn_points[0]; + } + + return s_spawn_point; } -get_valid_spawner_array( a_spawn_points ) //checked partially changed to match cerberus output see compiler_limitations.md No.2 used is_true instead +get_valid_spawner_array( a_spawn_points ) { - a_valid_nodes = []; - i = 0; - while ( i < a_spawn_points.size ) - { - if ( is_true( a_spawn_points[ i ].is_blocked ) || !is_true( a_spawn_points[ i ].is_enabled ) || is_true( a_spawn_points[ i ].is_spawning ) ) - { - i++; - continue; - } - if ( !isDefined( a_spawn_points[ i ].has_spawned_leaper_this_round ) ) - { - a_spawn_points[ i ].has_spawned_leaper_this_round = 0; - } - if ( !a_spawn_points[ i ].has_spawned_leaper_this_round ) - { - a_valid_nodes[ a_valid_nodes.size ] = a_spawn_points[ i ]; - } - i++; - } - return a_valid_nodes; + a_valid_nodes = []; + + for ( i = 0; i < a_spawn_points.size; i++ ) + { + if ( isdefined( a_spawn_points[i].is_blocked ) && a_spawn_points[i].is_blocked || !( isdefined( a_spawn_points[i].is_enabled ) && a_spawn_points[i].is_enabled ) || isdefined( a_spawn_points[i].is_spawning ) && a_spawn_points[i].is_spawning ) + continue; + + if ( !isdefined( a_spawn_points[i].has_spawned_leaper_this_round ) ) + a_spawn_points[i].has_spawned_leaper_this_round = 0; + + if ( !a_spawn_points[i].has_spawned_leaper_this_round ) + a_valid_nodes[a_valid_nodes.size] = a_spawn_points[i]; + } + + return a_valid_nodes; } -leaper_spawn_fx( ai, ent ) //checked matches cerberus output +leaper_spawn_fx( ai, ent ) { - ai setfreecameralockonallowed( 0 ); - ai show(); - ai setfreecameralockonallowed( 1 ); - v_fx_origin = ai.spawn_point.origin; - if ( isDefined( ai.spawn_point.script_string ) && ai.spawn_point.script_string != "find_flesh" ) - { - wait 0.1; - v_fx_origin = ai gettagorigin( "J_SpineLower" ); - } - playfx( level._effect[ "leaper_spawn" ], v_fx_origin ); - playsoundatposition( "zmb_leaper_spawn_fx", v_fx_origin ); + ai setfreecameralockonallowed( 0 ); + ai show(); + ai setfreecameralockonallowed( 1 ); + v_fx_origin = ai.spawn_point.origin; + + if ( isdefined( ai.spawn_point.script_string ) && ai.spawn_point.script_string != "find_flesh" ) + { + wait 0.1; + v_fx_origin = ai gettagorigin( "J_SpineLower" ); + } + + playfx( level._effect["leaper_spawn"], v_fx_origin ); + playsoundatposition( "zmb_leaper_spawn_fx", v_fx_origin ); } -waiting_for_next_leaper_spawn( count, max ) //checked matches cerberus output +waiting_for_next_leaper_spawn( count, max ) { - default_wait = 1.5; - if ( level.leaper_round_count == 1 ) - { - default_wait = 3; - } - else if ( level.leaper_round_count == 2 ) - { - default_wait = 2.5; - } - else if ( level.leaper_round_count == 3 ) - { - default_wait = 2; - } - else - { - default_wait = 1.5; - } - default_wait -= count / max; - default_wait = clamp( default_wait, 0, 3 ); - wait default_wait; + default_wait = 1.5; + + if ( level.leaper_round_count == 1 ) + default_wait = 3; + else if ( level.leaper_round_count == 2 ) + default_wait = 2.5; + else if ( level.leaper_round_count == 3 ) + default_wait = 2; + else + default_wait = 1.5; + + default_wait -= count / max; + default_wait = clamp( default_wait, 0, 3 ); + wait( default_wait ); } -leaper_round_aftermath() //checked changed to match cerberus output +leaper_round_aftermath() { - level waittill( "last_leaper_down" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_end" ); - power_up_origin = undefined; - if ( isDefined( level.last_leaper_origin ) ) - { - trace = groundtrace( level.last_leaper_origin + vectorScale( ( 0, 0, 1 ), 10 ), level.last_leaper_origin + vectorScale( ( 0, 0, -1 ), 150 ), 0, undefined, 1 ); - power_up_origin = trace[ "position" ]; - } - if ( isDefined( power_up_origin ) ) - { - level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); - } - wait 2; - clientnotify( "leaper_stop" ); - wait 6; - level.leaper_intermission = 0; + level waittill( "last_leaper_down" ); + + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_end" ); + power_up_origin = undefined; + + if ( isdefined( level.last_leaper_origin ) ) + { + trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 ); + power_up_origin = trace["position"]; + } + + if ( isdefined( power_up_origin ) ) + level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin ); + + wait 2; + clientnotify( "leaper_stop" ); + wait 6; + level.leaper_intermission = 0; } -leaper_round_start() //checked matches cerberus output +leaper_round_start() { - flag_set( "leaper_round" ); - level thread maps/mp/zombies/_zm_audio::change_zombie_music( "dog_start" ); - level thread leaper_round_start_audio(); - level notify( "leaper_round_starting" ); - clientnotify( "leaper_start" ); + flag_set( "leaper_round" ); + level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_start" ); + level thread leaper_round_start_audio(); + level notify( "leaper_round_starting" ); + clientnotify( "leaper_start" ); } -leaper_round_stop() //checked matches cerberus output +leaper_round_stop() { - flag_clear( "leaper_round" ); - level notify( "leaper_round_ending" ); - clientnotify( "leaper_stop" ); + flag_clear( "leaper_round" ); + level notify( "leaper_round_ending" ); + clientnotify( "leaper_stop" ); } -leaper_traverse_watcher() //checked matches cerberus output +leaper_traverse_watcher() { - self endon( "death" ); - while ( 1 ) - { - if ( is_true( self.is_traversing ) ) - { - self.elevator_parent = undefined; - if ( is_true( self maps/mp/zm_highrise_elevators::object_is_on_elevator() ) ) - { - if ( isDefined( self.elevator_parent ) ) - { - if ( is_true( self.elevator_parent.is_moving ) ) - { - playfx( level._effect[ "zomb_gib" ], self.origin ); - self leaper_cleanup(); - self delete(); - return; - } - } - } - } - wait 0.2; - } + self endon( "death" ); + + while ( true ) + { + if ( is_true( self.is_traversing ) ) + { + self.elevator_parent = undefined; + + if ( is_true( self maps\mp\zm_highrise_elevators::object_is_on_elevator() ) ) + { + if ( isdefined( self.elevator_parent ) ) + { + if ( is_true( self.elevator_parent.is_moving ) ) + { + playfx( level._effect["zomb_gib"], self.origin ); + self leaper_cleanup(); + self delete(); + return; + } + } + } + } + + wait 0.2; + } } -leaper_playable_area_failsafe() //checked partially changed to match cerberus output see compiler_limitations.md No. 6 +leaper_playable_area_failsafe() { - self endon( "death" ); - self.leaper_failsafe_start_time = getTime(); - playable_area = getentarray( "player_volume", "script_noteworthy" ); - b_outside_playable_space_this_frame = 0; - self.leaper_outside_playable_space_time = -2; - while ( 1 ) - { - b_outside_playable_last_check = b_outside_playable_space_this_frame; - b_outside_playable_space_this_frame = is_leaper_outside_playable_space( playable_area ); - n_current_time = getTime(); - if ( b_outside_playable_space_this_frame && !b_outside_playable_last_check ) - { - self.leaper_outside_playable_space_time = n_current_time; - } - else if ( !b_outside_playable_space_this_frame ) - { - self.leaper_outside_playable_space = -1; - } - b_leaper_has_been_alive_long_enough = ( n_current_time - self.leaper_failsafe_start_time ) > 3000; - b_leaper_is_in_scripted_state = self isinscriptedstate(); - if ( b_outside_playable_space_this_frame ) - { - if ( ( ( n_current_time - self.leaper_outside_playable_space_time ) > 2000 ) ) - { - b_leaper_has_been_out_of_playable_space_long_enough_to_delete = true; - } - else - { - b_leaper_has_been_out_of_playable_space_long_enough_to_delete = false; - } - } - if ( b_leaper_has_been_alive_long_enough && !b_leaper_is_in_scripted_state && b_leaper_has_been_out_of_playable_space_long_enough_to_delete ) - { - b_can_delete = true; - } - else - { - b_can_delete = false; - } - if ( b_can_delete ) - { - playsoundatposition( "zmb_vocals_leaper_fall", self.origin ); - self leaper_cleanup(); - /* + self endon( "death" ); + self.leaper_failsafe_start_time = gettime(); + playable_area = getentarray( "player_volume", "script_noteworthy" ); + b_outside_playable_space_this_frame = 0; + self.leaper_outside_playable_space_time = -2; + + while ( true ) + { + b_outside_playable_last_check = b_outside_playable_space_this_frame; + b_outside_playable_space_this_frame = is_leaper_outside_playable_space( playable_area ); + n_current_time = gettime(); + + if ( b_outside_playable_space_this_frame && !b_outside_playable_last_check ) + self.leaper_outside_playable_space_time = n_current_time; + else if ( !b_outside_playable_space_this_frame ) + self.leaper_outside_playable_space = -1; + + b_leaper_has_been_alive_long_enough = n_current_time - self.leaper_failsafe_start_time > 3000; + b_leaper_is_in_scripted_state = self isinscriptedstate(); + b_leaper_has_been_out_of_playable_space_long_enough_to_delete = b_outside_playable_space_this_frame && n_current_time - self.leaper_outside_playable_space_time > 2000; + b_can_delete = b_leaper_has_been_alive_long_enough && !b_leaper_is_in_scripted_state && b_leaper_has_been_out_of_playable_space_long_enough_to_delete; + + if ( b_can_delete ) + { + playsoundatposition( "zmb_vocals_leaper_fall", self.origin ); + self leaper_cleanup(); /# - str_traversal_data = ""; - if ( isDefined( self.traversestartnode ) ) - { - str_traversal_data = " Last traversal used = " + self.traversestartnode.animscript + " at " + self.traversestartnode.origin; - } - iprintln( "leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + " out of play space. DELETING!" + str_traversal_data ); + str_traversal_data = ""; + + if ( isdefined( self.traversestartnode ) ) + str_traversal_data = " Last traversal used = " + self.traversestartnode.animscript + " at " + self.traversestartnode.origin; + + iprintln( "leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + " out of play space. DELETING!" + str_traversal_data ); #/ - */ - self delete(); - return; - } - wait 1; - } + self delete(); + return; + } + + wait 1; + } } -is_leaper_outside_playable_space( playable_area ) //checked changed to match cerberus output +is_leaper_outside_playable_space( playable_area ) { - b_outside_play_space = 1; - foreach ( area in playable_area ) - { - if ( self istouching( area ) ) - { - b_outside_play_space = 0; - } - } - return b_outside_play_space; + b_outside_play_space = 1; + + foreach ( area in playable_area ) + { + if ( self istouching( area ) ) + b_outside_play_space = 0; + } + + return b_outside_play_space; } -leaper_cleanup() //checked matches cerberus output +leaper_cleanup() { - self leaper_stop_trail_fx(); - self notify( "leaper_cleanup" ); - wait 0.05; - level.leaper_count--; - level.zombie_total++; + self leaper_stop_trail_fx(); + self notify( "leaper_cleanup" ); + wait 0.05; + level.leaper_count--; + level.zombie_total++; } -leaper_spawn_failsafe() //checked changed to match cerberus output +leaper_spawn_failsafe() { - self endon( "death" ); - while ( 1 ) - { - prevorigin = self.origin; - dist_sq = 0; - for ( i = 0; i < 3; i++ ) - { - if ( is_true( self.sliding_on_goo ) ) - { - dist_sq += 576; - } - wait 1; - dist_sq += distancesquared( self.origin, prevorigin ); - prevorigin = self.origin; - } - if ( dist_sq < 576 ) - { - if ( !is_true( self.melee_attack ) ) - { - self leaper_cleanup(); - /* + self endon( "death" ); + + while ( true ) + { + prevorigin = self.origin; + dist_sq = 0; + + for ( i = 0; i < 3; i++ ) + { + if ( is_true( self.sliding_on_goo ) ) + dist_sq += 576; + + wait 1; + dist_sq += distancesquared( self.origin, prevorigin ); + prevorigin = self.origin; + } + + if ( dist_sq < 576 ) + { + if ( !is_true( self.melee_attack ) ) + { + self leaper_cleanup(); /# - str_traversal_data = ""; - if ( isDefined( self.traversestartnode ) ) - { - str_traversal_data = " Last traversal used = " + self.traversestartnode.animscript + " at " + self.traversestartnode.origin; - } - iprintln( "leaper_spawn_failsafe() killing leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + "!\n" + str_traversal_data ); + str_traversal_data = ""; + + if ( isdefined( self.traversestartnode ) ) + str_traversal_data = " Last traversal used = " + self.traversestartnode.animscript + " at " + self.traversestartnode.origin; + + iprintln( "leaper_spawn_failsafe() killing leaper at " + self.origin + " with spawn point " + self.spawn_point.origin + "!\n" + str_traversal_data ); #/ - */ - self dodamage( self.health + 100, ( 0, 0, 1 ) ); - return; - } - else - { - /* - /# - if ( getDvarInt( #"5A273E4B" ) == 1 ) - { - iprintln( "leaper tried melee" ); - #/ - } - self.melee_attack = 0; - */ - } - } - } + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + else + { +/# + if ( getdvarint( _hash_5A273E4B ) == 1 ) + iprintln( "leaper tried melee" ); +#/ + self.melee_attack = 0; + } + } + } } -do_leaper_emerge( spot ) //checked matches cerberus output +do_leaper_emerge( spot ) { - self endon( "death" ); - self.deathfunction = ::leaper_death_ragdoll; - self.no_powerups = 1; - self.in_the_ceiling = 1; - spot.is_spawning = 1; - anim_org = spot.origin; - anim_ang = spot.angles; - self ghost(); - self thread maps/mp/zombies/_zm_spawner::hide_pop(); - self thread leaper_death_wait( "spawn_anim" ); - if ( isDefined( level.custom_faller_entrance_logic ) ) - { - self thread [[ level.custom_faller_entrance_logic ]](); - } - self leaper_emerge(); - wait 0.1; - self notify( "spawn_anim_finished" ); - spot.is_spawning = 0; + self endon( "death" ); + self.deathfunction = ::leaper_death_ragdoll; + self.no_powerups = 1; + self.in_the_ceiling = 1; + spot.is_spawning = 1; + anim_org = spot.origin; + anim_ang = spot.angles; + self ghost(); + self thread maps\mp\zombies\_zm_spawner::hide_pop(); + self thread leaper_death_wait( "spawn_anim" ); + + if ( isdefined( level.custom_faller_entrance_logic ) ) + self thread [[ level.custom_faller_entrance_logic ]](); + + self leaper_emerge(); + wait 0.1; + self notify( "spawn_anim_finished" ); + spot.is_spawning = 0; } -leaper_death_ragdoll() //checked changed to match cerberus output +leaper_death_ragdoll() { - self startragdoll(); - self launchragdoll( ( 0, 0, -1 ) ); - return self maps/mp/zombies/_zm_spawner::zombie_death_animscript(); + self startragdoll(); + self launchragdoll( ( 0, 0, -1 ) ); + return self maps\mp\zombies\_zm_spawner::zombie_death_animscript(); } -leaper_death_wait( endon_notify ) //checked matches cerberus output +leaper_death_wait( endon_notify ) { - self endon( "spawn_anim_finished" ); - self waittill( "death" ); - self.spawn_point.is_spawning = 0; + self endon( "spawn_anim_finished" ); + + self waittill( "death" ); + + self.spawn_point.is_spawning = 0; } -leaper_emerge() //checked matches cerberus output +leaper_emerge() { - self endon( "death" ); - if ( self.spawn_point.script_parameters == "emerge_bottom" ) - { - self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_floor" ); - } - else - { - self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_ceiling" ); - } - self maps/mp/animscripts/zm_shared::donotetracks( "spawn_anim" ); - self.deathfunction = maps/mp/zombies/_zm_spawner::zombie_death_animscript; - self.in_the_ceiling = 0; + self endon( "death" ); + + if ( self.spawn_point.script_parameters == "emerge_bottom" ) + self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_floor" ); + else + self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_ceiling" ); + + self maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" ); + self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; + self.in_the_ceiling = 0; } -leaper_round_start_audio() //checked matches cerberus output +leaper_round_start_audio() { - wait 2.5; - players = get_players(); - num = randomintrange( 0, players.size ); - players[ num ] maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "leaper_round" ); - array_thread( players, ::wait_for_player_to_see_leaper ); - array_thread( players, ::wait_for_leaper_attack ); + wait 2.5; + players = get_players(); + num = randomintrange( 0, players.size ); + players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "leaper_round" ); + array_thread( players, ::wait_for_player_to_see_leaper ); + array_thread( players, ::wait_for_leaper_attack ); } -wait_for_player_to_see_leaper() //checked changed to match cerberus output +wait_for_player_to_see_leaper() { - self endon( "disconnect" ); - level endon( "leaper_round_ending" ); - while ( 1 ) - { - leapers = getaiarray( level.zombie_team ); - foreach ( leaper in leapers ) - { - player_vec = vectornormalize( anglesToForward( self.angles ) ); - player_leaper = vectornormalize( leaper.origin - self.origin ); - dot = vectordot( player_vec, player_leaper ); - if ( dot > 0.707 ) - { - if ( sighttracepassed( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), leaper.origin + vectorScale( ( 0, 0, 1 ), 10 ), 0, self ) ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "leaper_seen" ); - return; - } - } - } - wait 0.25; - } + self endon( "disconnect" ); + level endon( "leaper_round_ending" ); + + while ( true ) + { + leapers = getaiarray( level.zombie_team ); + + foreach ( leaper in leapers ) + { + player_vec = vectornormalize( anglestoforward( self.angles ) ); + player_leaper = vectornormalize( leaper.origin - self.origin ); + dot = vectordot( player_vec, player_leaper ); + + if ( dot > 0.707 ) + { + if ( sighttracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 40.0 ), leaper.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), 0, self ) ) + { + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "leaper_seen" ); + return; + } + } + } + + wait 0.25; + } } -wait_for_leaper_attack() //checked matches cerberus output used is_true instead +wait_for_leaper_attack() { - self endon( "disconnect" ); - level endon( "leaper_round_ending" ); - while ( 1 ) - { - self waittill( "melee_swipe", enemy ); - if ( is_true( enemy.is_leaper ) ) - { - self thread do_player_general_vox( "general", "leaper_attack", 10, 5 ); - wait 5; - } - } + self endon( "disconnect" ); + level endon( "leaper_round_ending" ); + + while ( true ) + { + self waittill( "melee_swipe", enemy ); + + if ( isdefined( enemy.is_leaper ) && enemy.is_leaper ) + { + self thread do_player_general_vox( "general", "leaper_attack", 10, 5 ); + wait 5; + } + } } -leaper_elevator_failsafe() //imported from cerberus output +leaper_elevator_failsafe() { - self endon("death"); - free_pos = ( 3780, 1750, 1887 ); - while ( 1 ) - { - if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_orange_elevator_shaft_bottom" ) ) - { - if ( self check_traverse_height() ) - { - wait 3; - if ( self check_traverse_height() ) - { - self forceteleport( free_pos ); - wait 3; - } - } - } - wait 0.2; - } + self endon( "death" ); + free_pos = ( 3780, 1750, 1887 ); + + while ( true ) + { + if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_orange_elevator_shaft_bottom" ) ) + { + if ( self check_traverse_height() ) + { + wait 3; + + if ( self check_traverse_height() ) + { + self forceteleport( free_pos ); + wait 3; + } + } + } + + wait 0.2; + } } -check_traverse_height() //imported from cerberus output +check_traverse_height() { - if ( isdefined( self.traversestartnode ) ) - { - traverse_height = self.traversestartnode.origin[ 2 ] - self.origin[ 2 ]; - if ( traverse_height > 300 ) - { - return 1; - } - } - return 0; -} \ No newline at end of file + if ( isdefined( self.traversestartnode ) ) + { + traverse_height = self.traversestartnode.origin[2] - self.origin[2]; + + if ( traverse_height > 300 ) + return true; + } + + return false; +} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_banking.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_banking.gsc new file mode 100644 index 0000000..402fef8 --- /dev/null +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_banking.gsc @@ -0,0 +1,304 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; + +init() +{ + onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); + + if ( !isdefined( level.ta_vaultfee ) ) + level.ta_vaultfee = 100; + + if ( !isdefined( level.ta_tellerfee ) ) + level.ta_tellerfee = 100; +} + +main() +{ + if ( !isdefined( level.banking_map ) ) + level.banking_map = level.script; + + level thread bank_teller_init(); + level thread bank_deposit_box(); +} + +bank_teller_init() +{ + level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); + + if ( isdefined( level.bank_teller_dmg_trig ) ) + { + level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" ); + level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" ); + level thread bank_teller_logic(); + level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 ); + level.bank_teller_transfer_trig trigger_off(); + level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee ); + } +} + +bank_teller_logic() +{ + level endon( "end_game" ); + + while ( true ) + { + level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah ); + + if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" ) + { + bank_teller_give_money(); + level.bank_teller_transfer_trig trigger_off(); + } + } +} + +bank_teller_give_money() +{ + level endon( "end_game" ); + level endon( "stop_bank_teller" ); + level.bank_teller_transfer_trig trigger_on(); + bank_transfer = undefined; + + while ( true ) + { + level.bank_teller_transfer_trig waittill( "trigger", player ); + + if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee ) + continue; + + if ( !isdefined( bank_transfer ) ) + { + bank_transfer = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) ); + bank_transfer thread stop_bank_teller(); + bank_transfer.value = 0; + } + + bank_transfer.value += 1000; + bank_transfer notify( "powerup_reset" ); + bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout(); + player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee ); + level notify( "bank_teller_used" ); + } +} + +stop_bank_teller() +{ + level endon( "end_game" ); + + self waittill( "death" ); + + level notify( "stop_bank_teller" ); +} + +delete_bank_teller() +{ + wait 1; + level notify( "stop_bank_teller" ); + bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); + bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" ); + bank_teller_dmg_trig delete(); + bank_teller_transfer_trig delete(); +} + +onplayerconnect_bank_deposit_box() +{ + online_game = sessionmodeisonlinegame(); + + if ( !online_game ) + self.account_value = 0; + else + self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map ); +} + +bank_deposit_box() +{ + level.bank_deposit_max_amount = 250000; + level.bank_deposit_ddl_increment_amount = 1000; + level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount; + level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 ); + deposit_triggers = getstructarray( "bank_deposit", "targetname" ); + array_thread( deposit_triggers, ::bank_deposit_unitrigger ); + withdraw_triggers = getstructarray( "bank_withdraw", "targetname" ); + array_thread( withdraw_triggers, ::bank_withdraw_unitrigger ); +} + +bank_deposit_unitrigger() +{ + bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 ); +} + +bank_withdraw_unitrigger() +{ + bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 ); +} + +bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius ) +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( override_length ) ) + unitrigger_stub.script_length = override_length; + else if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 32; + + if ( isdefined( override_width ) ) + unitrigger_stub.script_width = override_width; + else if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( override_height ) ) + unitrigger_stub.script_height = override_height; + else if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + if ( isdefined( override_radius ) ) + unitrigger_stub.script_radius = override_radius; + else if ( isdefined( self.radius ) ) + unitrigger_stub.radius = self.radius; + else + unitrigger_stub.radius = 32; + + if ( isdefined( self.script_unitrigger_type ) ) + unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type; + else + { + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + } + + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.targetname = name; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = prompt_fn; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn ); +} + +trigger_deposit_update_prompt( player ) +{ + if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max ) + { + player show_balance(); + self sethintstring( "" ); + return false; + } + + self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); + return true; +} + +trigger_deposit_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + continue; + + if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max ) + { + player playsoundtoplayer( "zmb_vault_bank_deposit", player ); + player.score -= level.bank_deposit_ddl_increment_amount; + player.account_value += level.bank_account_increment; + player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); + + if ( isdefined( level.custom_bank_deposit_vo ) ) + player thread [[ level.custom_bank_deposit_vo ]](); + + if ( player.account_value >= level.bank_account_max ) + self sethintstring( "" ); + } + else + player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); + + player show_balance(); + } +} + +trigger_withdraw_update_prompt( player ) +{ + if ( player.account_value <= 0 ) + { + self sethintstring( "" ); + player show_balance(); + return false; + } + + self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); + return true; +} + +trigger_withdraw_think() +{ + self endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + continue; + + if ( player.account_value >= level.bank_account_increment ) + { + player playsoundtoplayer( "zmb_vault_bank_withdraw", player ); + player.score += level.bank_deposit_ddl_increment_amount; + level notify( "bank_withdrawal" ); + player.account_value -= level.bank_account_increment; + player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); + + if ( isdefined( level.custom_bank_withdrawl_vo ) ) + player thread [[ level.custom_bank_withdrawl_vo ]](); + else + player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); + + player thread player_withdraw_fee(); + + if ( player.account_value < level.bank_account_increment ) + self sethintstring( "" ); + } + else + player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); + + player show_balance(); + } +} + +player_withdraw_fee() +{ + self endon( "disconnect" ); + wait_network_frame(); + self.score -= level.ta_vaultfee; +} + +show_balance() +{ +/# + iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value ); +#/ +} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc index a857131..d770c74 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_equip_springpad.gsc @@ -1,592 +1,632 @@ -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_power; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_springpad" ); +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_power; +#include maps\mp\zombies\_zm_buildables; init( pickupstring, howtostring ) { - if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) - { - return; - } - level.springpad_name = "equip_springpad_zm"; - init_animtree(); - maps/mp/zombies/_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); - maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); - level thread onplayerconnect(); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); - level._effect[ "springpade_on" ] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); - if ( -1 ) - { - setdvar( "player_useRadius_zm", 96 ); - } - thread wait_init_damage(); + if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) + return; + + level.springpad_name = "equip_springpad_zm"; + init_animtree(); + maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); + maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); + level thread onplayerconnect(); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); + level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); + + if ( !isdefined( level.springpad_trigger_radius ) ) + level.springpad_trigger_radius = 72; + + thread wait_init_damage(); } wait_init_damage() { - while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) ) - { - wait 1; - } - level.springpad_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 ); + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 ); } onplayerconnect() { - for ( ;; ) - { - level waittill( "connecting", player ); - player thread onplayerspawned(); - } + for (;;) + { + level waittill( "connecting", player ); + + player thread onplayerspawned(); + } } onplayerspawned() { - self endon( "disconnect" ); - self thread setupwatchers(); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchspringpaduse(); - } + self endon( "disconnect" ); + self thread setupwatchers(); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchspringpaduse(); + } } setupwatchers() { - self waittill( "weapon_watchers_created" ); - watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); - watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; + self waittill( "weapon_watchers_created" ); + + watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" ); + watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject; } watchspringpaduse() { - self notify( "watchSpringPadUse" ); - self endon( "watchSpringPadUse" ); - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - if ( weapname == level.springpad_name ) - { - self cleanupoldspringpad(); - self.buildablespringpad = weapon; - self thread startspringpaddeploy( weapon ); - } - } + self notify( "watchSpringPadUse" ); + self endon( "watchSpringPadUse" ); + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "equipment_placed", weapon, weapname ); + + if ( weapname == level.springpad_name ) + { + self cleanupoldspringpad(); + self.buildablespringpad = weapon; + self thread startspringpaddeploy( weapon ); + } + } } cleanupoldspringpad() { - if ( isDefined( self.buildablespringpad ) ) - { - if ( isDefined( self.buildablespringpad.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); - self.buildablespringpad.stub = undefined; - } - self.buildablespringpad delete(); - self.springpad_kills = undefined; - } - if ( isDefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } + if ( isdefined( self.buildablespringpad ) ) + { + if ( isdefined( self.buildablespringpad.stub ) ) + { + thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); + self.buildablespringpad.stub = undefined; + } + + self.buildablespringpad delete(); + self.springpad_kills = undefined; + } + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } } watchforcleanup() { - self notify( "springpad_cleanup" ); - self endon( "springpad_cleanup" ); - self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); - cleanupoldspringpad(); + self notify( "springpad_cleanup" ); + self endon( "springpad_cleanup" ); + self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); + cleanupoldspringpad(); } placespringpad( origin, angles ) { - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, 96, -32 ); - if ( isDefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - item.zombie_attack_callback = ::springpad_add_fling_ent; - } - self.springpad_kills = undefined; - return item; + if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] ) + { + forward = anglestoforward( angles ); + origin -= -24 * forward; + } + + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + item.zombie_attack_callback = ::springpad_fling_attacker; + } + + self.springpad_kills = undefined; + return item; } dropspringpad() { - item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, 96, -32 ); - if ( isDefined( item ) ) - { - item.springpad_kills = self.springpad_kills; - item.requires_pickup = 1; - } - self.springpad_kills = undefined; - return item; + item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); + + if ( isdefined( item ) ) + { + item.springpad_kills = self.springpad_kills; + item.requires_pickup = 1; + } + + self.springpad_kills = undefined; + return item; } pickupspringpad( item ) { - self.springpad_kills = item.springpad_kills; - item.springpad_kills = undefined; + self.springpad_kills = item.springpad_kills; + item.springpad_kills = undefined; } transferspringpad( fromplayer, toplayer ) { - buildablespringpad = toplayer.buildablespringpad; - toarmed = 0; - if ( isDefined( buildablespringpad ) ) - { - if ( isDefined( buildablespringpad.is_armed ) ) - { - toarmed = buildablespringpad.is_armed; - } - } - springpad_kills = toplayer.springpad_kills; - fromarmed = 0; - if ( isDefined( fromplayer.buildablespringpad ) ) - { - if ( isDefined( fromplayer.buildablespringpad.is_armed ) ) - { - fromarmed = fromplayer.buildablespringpad.is_armed; - } - } - toplayer.buildablespringpad = fromplayer.buildablespringpad; - toplayer.buildablespringpad.original_owner = toplayer; - toplayer.buildablespringpad.owner = toplayer; - toplayer notify( "equip_springpad_zm_taken" ); - toplayer.springpad_kills = fromplayer.springpad_kills; - toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); - fromplayer.buildablespringpad = buildablespringpad; - fromplayer.springpad_kills = springpad_kills; - fromplayer notify( "equip_springpad_zm_taken" ); - if ( isDefined( fromplayer.buildablespringpad ) ) - { - fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); - fromplayer.buildablespringpad.original_owner = fromplayer; - fromplayer.buildablespringpad.owner = fromplayer; - } - else - { - fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" ); - } + buildablespringpad = toplayer.buildablespringpad; + toarmed = 0; + + if ( isdefined( buildablespringpad ) ) + toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed; + + springpad_kills = toplayer.springpad_kills; + fromarmed = 0; + + if ( isdefined( fromplayer.buildablespringpad ) ) + fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed; + + toplayer.buildablespringpad = fromplayer.buildablespringpad; + toplayer.buildablespringpad.original_owner = toplayer; + toplayer.buildablespringpad.owner = toplayer; + toplayer notify( "equip_springpad_zm_taken" ); + toplayer.springpad_kills = fromplayer.springpad_kills; + toplayer thread startspringpaddeploy( toplayer.buildablespringpad, fromarmed ); + fromplayer.buildablespringpad = buildablespringpad; + fromplayer.springpad_kills = springpad_kills; + fromplayer notify( "equip_springpad_zm_taken" ); + + if ( isdefined( fromplayer.buildablespringpad ) ) + { + fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); + fromplayer.buildablespringpad.original_owner = fromplayer; + fromplayer.buildablespringpad.owner = fromplayer; + } + else + fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); } springpad_in_range( delta, origin, radius ) { - if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) - { - return 1; - } - return 0; + if ( distancesquared( self.target.origin, origin ) < radius * radius ) + return true; + + return false; } springpad_power_on( origin, radius ) { /# - println( "^1ZM POWER: trap on\n" ); + println( "^1ZM POWER: trap on\n" ); #/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 1; - self.target.power_on_time = getTime(); + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 1; + self.target.power_on_time = gettime(); } springpad_power_off( origin, radius ) { /# - println( "^1ZM POWER: trap off\n" ); + println( "^1ZM POWER: trap off\n" ); #/ - if ( !isDefined( self.target ) ) - { - return; - } - self.target.power_on = 0; + if ( !isdefined( self.target ) ) + return; + + self.target.power_on = 0; } startspringpaddeploy( weapon, armed ) { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - self thread watchforcleanup(); - electricradius = 45; - if ( isDefined( self.springpad_kills ) ) - { - weapon.springpad_kills = self.springpad_kills; - self.springpad_kills = undefined; - } - if ( !isDefined( weapon.springpad_kills ) ) - { - weapon.springpad_kills = 0; - } - if ( isDefined( weapon ) ) - { + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + self thread watchforcleanup(); + electricradius = 45; + + if ( isdefined( self.springpad_kills ) ) + { + weapon.springpad_kills = self.springpad_kills; + self.springpad_kills = undefined; + } + + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + if ( isdefined( weapon ) ) + { /# - weapon thread debugspringpad( electricradius ); + weapon thread debugspringpad( electricradius ); #/ - if ( isDefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) - { - weapon.power_on = 0; - maps/mp/zombies/_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); - } - else - { - weapon.power_on = 1; - } - if ( !weapon.power_on ) - { - self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); - } - self thread springpadthink( weapon, electricradius, armed ); - if ( isDefined( level.equipment_springpad_needs_power ) && !level.equipment_springpad_needs_power ) - { - } - self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); - weapon waittill( "death" ); - if ( isDefined( level.springpad_sound_ent ) ) - { - level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); - level.springpad_sound_ent delete(); - level.springpad_sound_ent = undefined; - } - self notify( "springpad_cleanup" ); - } + if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) + { + weapon.power_on = 0; + maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon ); + } + else + weapon.power_on = 1; + + if ( !weapon.power_on ) + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + + self thread springpadthink( weapon, electricradius, armed ); + + if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) ) + { + + } + + self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); + + weapon waittill( "death" ); + + if ( isdefined( level.springpad_sound_ent ) ) + { + level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.springpad_sound_ent delete(); + level.springpad_sound_ent = undefined; + } + + self notify( "springpad_cleanup" ); + } } init_animtree() { - scriptmodelsuseanimtree( -1 ); + scriptmodelsuseanimtree( -1 ); } +#using_animtree("zombie_springpad"); + springpad_animate( weapon, armed ) { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon useanimtree( -1 ); - f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); - r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); - l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); - weapon thread springpad_audio(); - prearmed = 0; - if ( isDefined( armed ) && armed ) - { - prearmed = 1; - } - fast_reset = 0; - while ( isDefined( weapon ) ) - { - if ( !prearmed ) - { - if ( fast_reset ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); - weapon thread playspringpadresetaudio( f_animlength ); - wait f_animlength; - } - else - { - weapon setanim( %o_zombie_buildable_tramplesteam_reset ); - weapon thread playspringpadresetaudio( r_animlength ); - wait r_animlength; - } - } - else - { - wait 0,05; - } - prearmed = 0; - weapon notify( "armed" ); - fast_reset = 0; - if ( isDefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); - weapon waittill( "fling", fast ); - fast_reset = fast; - } - if ( isDefined( weapon ) ) - { - weapon setanim( %o_zombie_buildable_tramplesteam_launch ); - wait l_animlength; - } - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon useanimtree( -1 ); + f_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset_zombie ); + r_animlength = getanimlength( %o_zombie_buildable_tramplesteam_reset ); + l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); + weapon thread springpad_audio(); + prearmed = 0; + + if ( isdefined( armed ) && armed ) + prearmed = 1; + + fast_reset = 0; + + while ( isdefined( weapon ) ) + { + if ( !prearmed ) + { + if ( fast_reset ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); + weapon thread playspringpadresetaudio( f_animlength ); + wait( f_animlength ); + } + else + { + weapon setanim( %o_zombie_buildable_tramplesteam_reset ); + weapon thread playspringpadresetaudio( r_animlength ); + wait( r_animlength ); + } + } + else + wait 0.05; + + prearmed = 0; + weapon notify( "armed" ); + fast_reset = 0; + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); + + weapon waittill( "fling", fast ); + + fast_reset = fast; + } + + if ( isdefined( weapon ) ) + { + weapon setanim( %o_zombie_buildable_tramplesteam_launch ); + wait( l_animlength ); + } + } } playspringpadresetaudio( time ) { - self endon( "springpadAudioCleanup" ); - ent = spawn( "script_origin", self.origin ); - ent playloopsound( "zmb_highrise_launcher_reset_loop" ); - self thread deleteentwhensounddone( time, ent ); - self waittill( "death" ); - ent delete(); + self endon( "springpadAudioCleanup" ); + ent = spawn( "script_origin", self.origin ); + ent playloopsound( "zmb_highrise_launcher_reset_loop" ); + self thread deleteentwhensounddone( time, ent ); + + self waittill( "death" ); + + ent delete(); } deleteentwhensounddone( time, ent ) { - self endon( "death" ); - wait time; - self notify( "springpadAudioCleanup" ); - ent delete(); + self endon( "death" ); + wait( time ); + self notify( "springpadAudioCleanup" ); + ent delete(); } springpad_audio() { - loop_ent = spawn( "script_origin", self.origin ); - loop_ent playloopsound( "zmb_highrise_launcher_loop" ); - self waittill( "death" ); - loop_ent delete(); + loop_ent = spawn( "script_origin", self.origin ); + loop_ent playloopsound( "zmb_highrise_launcher_loop" ); + + self waittill( "death" ); + + loop_ent delete(); } springpad_fx( weapon ) { - weapon endon( "death" ); - self endon( "equip_springpad_zm_taken" ); - while ( isDefined( weapon ) ) - { - playfxontag( level._effect[ "springpade_on" ], weapon, "tag_origin" ); - wait 1; - } + weapon endon( "death" ); + self endon( "equip_springpad_zm_taken" ); + + while ( isdefined( weapon ) ) + { + playfxontag( level._effect["springpade_on"], weapon, "tag_origin" ); + wait 1; + } } springpadthink( weapon, electricradius, armed ) { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - radiussquared = electricradius * electricradius; - trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); - trigger.origin += anglesToForward( flat_angle( weapon.angles ) ) * -15; - trigger.angles = weapon.angles; - trigger enablelinkto(); - trigger linkto( weapon ); - weapon.trigger = trigger; + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); + trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15; + trigger.angles = weapon.angles; + trigger enablelinkto(); + trigger linkto( weapon ); + weapon.trigger = trigger; /# - trigger.extent = ( 24, 24, 16 ); + trigger.extent = ( 24.0, 24.0, 16.0 ); #/ - weapon thread springpadthinkcleanup( trigger ); - direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) ); - direction_vector = vectorScale( direction_forward, 1024 ); - direction_origin = weapon.origin + direction_vector; - home_angles = weapon.angles; - weapon.is_armed = 0; - self thread springpad_fx( weapon ); - self thread springpad_animate( weapon, armed ); - weapon waittill( "armed" ); - weapon.is_armed = 1; - weapon.fling_targets = []; - self thread targeting_thread( weapon, trigger ); - while ( isDefined( weapon ) ) - { - wait_for_targets( weapon ); - if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - weapon notify( "fling" ); - weapon.is_armed = 0; - weapon.zombies_only = 1; - _a520 = weapon.fling_targets; - _k520 = getFirstArrayKey( _a520 ); - while ( isDefined( _k520 ) ) - { - ent = _a520[ _k520 ]; - if ( isplayer( ent ) ) - { - ent thread player_fling( weapon.origin + vectorScale( ( 0, 0, 1 ), 30 ), weapon.angles, direction_vector ); - } - else - { - if ( isDefined( ent ) ) - { - if ( !isDefined( self.num_zombies_flung ) ) - { - self.num_zombies_flung = 0; - } - self.num_zombies_flung++; - self notify( "zombie_flung" ); - if ( !isDefined( weapon.fling_scaler ) ) - { - weapon.fling_scaler = 1; - } - if ( isDefined( weapon.direction_vec_override ) ) - { - direction_vector = weapon.direction_vec_override; - } - ent dodamage( ent.health + 666, ent.origin ); - ent startragdoll(); - ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler ); - weapon.springpad_kills++; - } - } - _k520 = getNextArrayKey( _a520, _k520 ); - } - if ( weapon.springpad_kills >= 28 ) - { - self thread springpad_expired( weapon ); - } - weapon.fling_targets = []; - weapon waittill( "armed" ); - weapon.is_armed = 1; - continue; - } - else - { - wait 0,1; - } - } + weapon thread springpadthinkcleanup( trigger ); + direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) ); + direction_vector = vectorscale( direction_forward, 1024 ); + direction_origin = weapon.origin + direction_vector; + home_angles = weapon.angles; + weapon.is_armed = 0; + self thread springpad_fx( weapon ); + self thread springpad_animate( weapon, armed ); + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + weapon.fling_targets = []; + self thread targeting_thread( weapon, trigger ); + + while ( isdefined( weapon ) ) + { + wait_for_targets( weapon ); + + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + weapon notify( "fling", weapon.zombies_only ); + weapon.is_armed = 0; + weapon.zombies_only = 1; + + foreach ( ent in weapon.fling_targets ) + { + if ( isplayer( ent ) ) + { + ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon ); + continue; + } + + if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); + continue; + } + + if ( isdefined( ent ) ) + { + if ( !isdefined( self.num_zombies_flung ) ) + self.num_zombies_flung = 0; + + self.num_zombies_flung++; + self notify( "zombie_flung" ); + + if ( !isdefined( weapon.fling_scaler ) ) + weapon.fling_scaler = 1; + + if ( isdefined( weapon.direction_vec_override ) ) + direction_vector = weapon.direction_vec_override; + + ent dodamage( ent.health + 666, ent.origin ); + ent startragdoll(); + ent launchragdoll( direction_vector / 4 * weapon.fling_scaler ); + weapon.springpad_kills++; + } + } + + if ( weapon.springpad_kills >= 28 ) + self thread springpad_expired( weapon ); + + weapon.fling_targets = []; + + weapon waittill( "armed" ); + + weapon.is_armed = 1; + } + else + wait 0.1; + } } wait_for_targets( weapon ) { - weapon endon( "hi_priority_target" ); - while ( isDefined( weapon ) ) - { - if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) - { - wait 0,15; - return; - } - wait 0,05; - } + weapon endon( "hi_priority_target" ); + + while ( isdefined( weapon ) ) + { + if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) + { + wait 0.15; + return; + } + + wait 0.05; + } } targeting_thread( weapon, trigger ) { - self endon( "death" ); - self endon( "disconnect" ); - self endon( "equip_springpad_zm_taken" ); - weapon endon( "death" ); - weapon.zombies_only = 1; - while ( isDefined( weapon ) ) - { - if ( weapon.is_armed ) - { - zombies = getaiarray( level.zombie_team ); - _a594 = zombies; - _k594 = getFirstArrayKey( _a594 ); - while ( isDefined( _k594 ) ) - { - zombie = _a594[ _k594 ]; - if ( !isDefined( zombie ) || !isalive( zombie ) ) - { - } - else - { - if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) - { - break; - } - else - { - if ( zombie istouching( trigger ) ) - { - weapon springpad_add_fling_ent( zombie ); - } - } - } - _k594 = getNextArrayKey( _a594, _k594 ); - } - players = get_players(); - _a622 = players; - _k622 = getFirstArrayKey( _a622 ); - while ( isDefined( _k622 ) ) - { - player = _a622[ _k622 ]; - if ( is_player_valid( player ) && player istouching( trigger ) ) - { - weapon springpad_add_fling_ent( player ); - weapon.zombies_only = 0; - } - _k622 = getNextArrayKey( _a622, _k622 ); - } - if ( !weapon.zombies_only ) - { - weapon notify( "hi_priority_target" ); - } - } - wait 0,05; - } + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_springpad_zm_taken" ); + weapon endon( "death" ); + weapon.zombies_only = 1; + + while ( isdefined( weapon ) ) + { + if ( weapon.is_armed ) + { + zombies = getaiarray( level.zombie_team ); + + foreach ( zombie in zombies ) + { + if ( !isdefined( zombie ) || !isalive( zombie ) ) + continue; + + if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad ) + continue; + + if ( zombie istouching( trigger ) ) + weapon springpad_add_fling_ent( zombie ); + } + + players = get_players(); + + foreach ( player in players ) + { + if ( is_player_valid( player ) && player istouching( trigger ) ) + { + weapon springpad_add_fling_ent( player ); + weapon.zombies_only = 0; + } + } + + if ( !weapon.zombies_only ) + weapon notify( "hi_priority_target" ); + } + + wait 0.05; + } +} + +springpad_fling_attacker( ent ) +{ + springpad_add_fling_ent( ent ); + + if ( isdefined( level.springpad_attack_delay ) ) + wait( level.springpad_attack_delay ); } springpad_add_fling_ent( ent ) { - self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); + self.fling_targets = add_to_array( self.fling_targets, ent, 0 ); } springpad_expired( weapon ) { - weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 ); - self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" ); - self.springpad_kills = 0; + weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); + self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" ); + self.springpad_kills = 0; } -player_fling( origin, angles, velocity ) +player_fling( origin, angles, velocity, weapon ) { - torigin = ( self.origin[ 0 ], self.origin[ 1 ], origin[ 2 ] ); - self setorigin( ( origin + torigin ) * 0,5 ); - wait_network_frame(); - self setvelocity( velocity ); + torigin = ( self.origin[0], self.origin[1], origin[2] ); + aorigin = ( origin + torigin ) * 0.5; + trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self ); + + if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 ) + { + if ( !isdefined( weapon.springpad_kills ) ) + weapon.springpad_kills = 0; + + weapon.springpad_kills += 5; + + if ( weapon.springpad_kills >= 28 ) + weapon.owner thread springpad_expired( weapon ); + + return; + } + + self setorigin( aorigin ); + wait_network_frame(); + self setvelocity( velocity ); } springpadthinkcleanup( trigger ) { - self waittill( "death" ); - if ( isDefined( trigger ) ) - { - trigger delete(); - } + self waittill( "death" ); + + if ( isdefined( trigger ) ) + trigger delete(); } debugspringpad( radius ) { /# - color_armed = ( 0, 0, 1 ); - color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 ); - while ( isDefined( self ) ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - if ( isDefined( self.trigger ) ) - { - color = color_unarmed; - if ( isDefined( self.is_armed ) && self.is_armed ) - { - color = color_armed; - } - vec = self.trigger.extent; - box( self.trigger.origin, vec * -1, vec, self.trigger.angles[ 1 ], color, 1, 0, 1 ); - } - color = ( 0, 0, 1 ); - text = ""; - if ( isDefined( self.springpad_kills ) ) - { - text = "" + self.springpad_kills + ""; - } - else - { - if ( isDefined( self.owner.springpad_kills ) ) - { - text = "[" + self.owner.springpad_kills + "]"; - } - } - print3d( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), text, color, 1, 0,5, 1 ); - } - wait 0,05; + color_armed = ( 0, 1, 0 ); + color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 ); + + while ( isdefined( self ) ) + { + if ( getdvarint( _hash_EB512CB7 ) ) + { + if ( isdefined( self.trigger ) ) + { + color = color_unarmed; + + if ( isdefined( self.is_armed ) && self.is_armed ) + color = color_armed; + + vec = self.trigger.extent; + box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 ); + } + + color = ( 0, 1, 0 ); + text = ""; + + if ( isdefined( self.springpad_kills ) ) + text = "" + self.springpad_kills + ""; + else if ( isdefined( self.owner.springpad_kills ) ) + text = "[" + self.owner.springpad_kills + "]"; + + print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 ); + } + + wait 0.05; + } #/ - } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc index fc1ef72..adfca7a 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_melee_weapon.gsc @@ -1,556 +1,580 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_pers_upgrades_functions; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; -init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - precacheitem( weapon_name ); - precacheitem( flourish_weapon_name ); - add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon ); - melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_triggers.size ) - { - knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" ); - if ( isDefined( knife_model ) ) - { - knife_model hide(); - } - melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); - melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" ); - melee_weapon_triggers[ i ] usetriggerrequirelookat(); - i++; - } - melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_weapon_structs.size ) - { - prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ); - i++; - } - register_melee_weapon_for_level( weapon_name ); - if ( !isDefined( level.ballistic_weapon_name ) ) - { - level.ballistic_weapon_name = []; - } - level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; - if ( !isDefined( level.ballistic_upgraded_weapon_name ) ) - { - level.ballistic_upgraded_weapon_name = []; - } - level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; + precacheitem( weapon_name ); + precacheitem( flourish_weapon_name ); + add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_triggers.size; i++ ) + { + knife_model = getent( melee_weapon_triggers[i].target, "targetname" ); + + if ( isdefined( knife_model ) ) + knife_model hide(); + + melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + melee_weapon_triggers[i] sethintstring( hint_string, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + else + { + weapon_display = get_weapon_display_name( weapon_name ); + hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost ); + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + cursor_hint = "HINT_WEAPON"; + cursor_hint_weapon = weapon_name; + melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon ); + } + else + melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" ); + } + + melee_weapon_triggers[i] usetriggerrequirelookat(); + } + + melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_weapon_structs.size; i++ ) + prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); + + register_melee_weapon_for_level( weapon_name ); + + if ( !isdefined( level.ballistic_weapon_name ) ) + level.ballistic_weapon_name = []; + + level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name; + + if ( !isdefined( level.ballistic_upgraded_weapon_name ) ) + level.ballistic_upgraded_weapon_name = []; + + level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name; +/# + if ( !isdefined( level.zombie_weapons[weapon_name] ) ) + { + if ( isdefined( level.devgui_add_weapon ) ) + [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); + } +#/ } -prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - if ( isDefined( stub ) ) - { - stub.hint_string = hint_string; - stub.cost = cost; - stub.weapon_name = weapon_name; - stub.has_weapon = has_weapon; - stub.give_weapon = give_weapon; - stub.take_weapon = take_weapon; - stub.vo_dialog_id = vo_dialog_id; - stub.flourish_weapon_name = flourish_weapon_name; - stub.ballistic_weapon_name = ballistic_weapon_name; - stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - stub.trigger_func = ::melee_weapon_think; - stub.flourish_fn = flourish_fn; - } + if ( isdefined( stub ) ) + { + if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) ) + { + stub.hint_string = hint_string; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + else + { + stub.hint_parm1 = get_weapon_display_name( weapon_name ); + stub.hint_parm2 = cost; + stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + + if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) ) + { + stub.cursor_hint = "HINT_WEAPON"; + stub.cursor_hint_weapon = weapon_name; + } + else + { + stub.cursor_hint = "HINT_NOICON"; + stub.cursor_hint_weapon = undefined; + } + } + + stub.cost = cost; + stub.weapon_name = weapon_name; + stub.vo_dialog_id = vo_dialog_id; + stub.flourish_weapon_name = flourish_weapon_name; + stub.ballistic_weapon_name = ballistic_weapon_name; + stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + stub.trigger_func = ::melee_weapon_think; + stub.flourish_fn = flourish_fn; + } } add_stub( stub, weapon_name ) { - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( stub ) && isDefined( melee_weapon ) ) - { - prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn ); - } + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( stub ) && isdefined( melee_weapon ) ) + prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); } give_melee_weapon_by_name( weapon_name ) { - melee_weapon = undefined; - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( level._melee_weapons[ i ].weapon_name == weapon_name ) - { - melee_weapon = level._melee_weapons[ i ]; - break; - } - else - { - i++; - } - } - if ( isDefined( melee_weapon ) ) - { - self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined ); - } + melee_weapon = undefined; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( level._melee_weapons[i].weapon_name == weapon_name ) + { + melee_weapon = level._melee_weapons[i]; + break; + } + } + + if ( isdefined( melee_weapon ) ) + self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); } -add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn ) +add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) { - melee_weapon = spawnstruct(); - melee_weapon.weapon_name = weapon_name; - melee_weapon.flourish_weapon_name = flourish_weapon_name; - melee_weapon.ballistic_weapon_name = ballistic_weapon_name; - melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; - melee_weapon.cost = cost; - melee_weapon.wallbuy_targetname = wallbuy_targetname; - melee_weapon.hint_string = hint_string; - melee_weapon.vo_dialog_id = vo_dialog_id; - melee_weapon.has_weapon = has_weapon; - melee_weapon.give_weapon = give_weapon; - melee_weapon.take_weapon = take_weapon; - melee_weapon.flourish_fn = flourish_fn; - if ( !isDefined( level._melee_weapons ) ) - { - level._melee_weapons = []; - } - level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; + melee_weapon = spawnstruct(); + melee_weapon.weapon_name = weapon_name; + melee_weapon.flourish_weapon_name = flourish_weapon_name; + melee_weapon.ballistic_weapon_name = ballistic_weapon_name; + melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name; + melee_weapon.cost = cost; + melee_weapon.wallbuy_targetname = wallbuy_targetname; + melee_weapon.hint_string = hint_string; + melee_weapon.vo_dialog_id = vo_dialog_id; + melee_weapon.flourish_fn = flourish_fn; + + if ( !isdefined( level._melee_weapons ) ) + level._melee_weapons = []; + + level._melee_weapons[level._melee_weapons.size] = melee_weapon; +} + +player_can_see_weapon_prompt( weapon_name ) +{ + if ( is_true( level._allow_melee_weapon_switching ) ) + return true; + + if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) + return false; + + return true; } spectator_respawn_all() { - i = 0; - while ( i < level._melee_weapons.size ) - { - self [[ level._melee_weapons[ i ].take_weapon ]](); - i++; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon ); - i++; - } + for ( i = 0; i < level._melee_weapons.size; i++ ) + self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name ); } -spectator_respawn( wallbuy_targetname, take_weapon, has_weapon ) +spectator_respawn( wallbuy_targetname, weapon_name ) { - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - players = get_players(); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setvisibletoall(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - j = 0; - while ( j < players.size ) - { - if ( players[ j ] [[ has_weapon ]]() ) - { - melee_triggers[ i ] setinvisibletoplayer( players[ j ] ); - } - j++; - } - } - i++; - } + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + players = get_players(); + + for ( i = 0; i < melee_triggers.size; i++ ) + { + melee_triggers[i] setvisibletoall(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] player_can_see_weapon_prompt( weapon_name ) ) + melee_triggers[i] setinvisibletoplayer( players[j] ); + } + } + } } trigger_hide_all() { - i = 0; - while ( i < level._melee_weapons.size ) - { - self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname ); - i++; - } + for ( i = 0; i < level._melee_weapons.size; i++ ) + self trigger_hide( level._melee_weapons[i].wallbuy_targetname ); } trigger_hide( wallbuy_targetname ) { - melee_triggers = getentarray( wallbuy_targetname, "targetname" ); - i = 0; - while ( i < melee_triggers.size ) - { - melee_triggers[ i ] setinvisibletoplayer( self ); - i++; - } + melee_triggers = getentarray( wallbuy_targetname, "targetname" ); + + for ( i = 0; i < melee_triggers.size; i++ ) + melee_triggers[i] setinvisibletoplayer( self ); } has_any_ballistic_knife() { - if ( self hasweapon( "knife_ballistic_zm" ) ) - { - return 1; - } - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) ) - { - return 1; - } - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; + if ( self hasweapon( "knife_ballistic_zm" ) ) + return true; + + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) ) + return true; + + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; } has_upgraded_ballistic_knife() { - if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) - { - return 1; - } - i = 0; - while ( i < level._melee_weapons.size ) - { - if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) ) - { - return 1; - } - i++; - } - return 0; + if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) + return true; + + for ( i = 0; i < level._melee_weapons.size; i++ ) + { + if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) ) + return true; + } + + return false; } give_ballistic_knife( weapon_string, upgraded ) { - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ]; - } - if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) - { - weapon_string = level.ballistic_weapon_name[ current_melee_weapon ]; - } - } - return weapon_string; + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) ) + { + if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon]; + + if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) ) + weapon_string = level.ballistic_weapon_name[current_melee_weapon]; + } + + return weapon_string; } change_melee_weapon( weapon_name, current_weapon ) { - current_melee_weapon = self get_player_melee_weapon(); - if ( isDefined( current_melee_weapon ) ) - { - self takeweapon( current_melee_weapon ); - unacquire_weapon_toggle( current_melee_weapon ); - } - self set_player_melee_weapon( weapon_name ); - had_ballistic = 0; - had_ballistic_upgraded = 0; - ballistic_was_primary = 0; - primaryweapons = self getweaponslistprimaries(); - i = 0; - while ( i < primaryweapons.size ) - { - primary_weapon = primaryweapons[ i ]; - if ( issubstr( primary_weapon, "knife_ballistic_" ) ) - { - had_ballistic = 1; - if ( primary_weapon == current_weapon ) - { - ballistic_was_primary = 1; - } - self notify( "zmb_lost_knife" ); - self takeweapon( primary_weapon ); - unacquire_weapon_toggle( primary_weapon ); - if ( issubstr( primary_weapon, "upgraded" ) ) - { - had_ballistic_upgraded = 1; - } - } - i++; - } - if ( had_ballistic ) - { - if ( had_ballistic_upgraded ) - { - new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); - } - else - { - new_ballistic = level.ballistic_weapon_name[ weapon_name ]; - if ( ballistic_was_primary ) - { - current_weapon = new_ballistic; - } - self giveweapon( new_ballistic, 0 ); - } - } - return current_weapon; + current_melee_weapon = self get_player_melee_weapon(); + + if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) + { + self takeweapon( current_melee_weapon ); + unacquire_weapon_toggle( current_melee_weapon ); + } + + self set_player_melee_weapon( weapon_name ); + had_ballistic = 0; + had_ballistic_upgraded = 0; + ballistic_was_primary = 0; + primaryweapons = self getweaponslistprimaries(); + + for ( i = 0; i < primaryweapons.size; i++ ) + { + primary_weapon = primaryweapons[i]; + + if ( issubstr( primary_weapon, "knife_ballistic_" ) ) + { + had_ballistic = 1; + + if ( primary_weapon == current_weapon ) + ballistic_was_primary = 1; + + self notify( "zmb_lost_knife" ); + self takeweapon( primary_weapon ); + unacquire_weapon_toggle( primary_weapon ); + + if ( issubstr( primary_weapon, "upgraded" ) ) + had_ballistic_upgraded = 1; + } + } + + if ( had_ballistic ) + { + if ( had_ballistic_upgraded ) + { + new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); + } + else + { + new_ballistic = level.ballistic_weapon_name[weapon_name]; + + if ( ballistic_was_primary ) + current_weapon = new_ballistic; + + self giveweapon( new_ballistic, 0 ); + } + } + + return current_weapon; } -melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) +melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) { - self.first_time_triggered = 0; - while ( isDefined( self.stub ) ) - { - self endon( "kill_trigger" ); - if ( isDefined( self.stub.first_time_triggered ) ) - { - self.first_time_triggered = self.stub.first_time_triggered; - } - weapon_name = self.stub.weapon_name; - cost = self.stub.cost; - has_weapon = self.stub.has_weapon; - give_weapon = self.stub.give_weapon; - flourish_fn = self.stub.flourish_fn; - vo_dialog_id = self.stub.vo_dialog_id; - flourish_weapon_name = self.stub.flourish_weapon_name; - ballistic_weapon_name = self.stub.ballistic_weapon_name; - ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; - players = getplayers(); - while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - i = 0; - while ( i < players.size ) - { - if ( players[ i ] [[ has_weapon ]]() ) - { - self setinvisibletoplayer( players[ i ] ); - } - i++; - } - } - } - for ( ;; ) - { - self waittill( "trigger", player ); - if ( !is_player_valid( player ) ) - { - player thread ignore_triggers( 0,5 ); - continue; - } - else if ( player in_revive_trigger() ) - { - wait 0,1; - continue; - } - else if ( player isthrowinggrenade() ) - { - wait 0,1; - continue; - } - else if ( player.is_drinking > 0 ) - { - wait 0,1; - continue; - } - else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) - { - wait 0,1; - continue; - } - else - { - if ( player isswitchingweapons() ) - { - wait 0,1; - break; - } - else current_weapon = player getcurrentweapon(); - if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) - { - wait 0,1; - break; - } - else - { - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) - { - wait 0,1; - break; - } - else - { - player_has_weapon = player [[ has_weapon ]](); - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread melee_weapon_show( player ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.first_time_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.first_time_triggered = 1; - } - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); - player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); - } - break; - } - else - { - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - self setinvisibletoplayer( player ); - } - } - } - } - } - } + self.first_time_triggered = 0; + + if ( isdefined( self.stub ) ) + { + self endon( "kill_trigger" ); + + if ( isdefined( self.stub.first_time_triggered ) ) + self.first_time_triggered = self.stub.first_time_triggered; + + weapon_name = self.stub.weapon_name; + cost = self.stub.cost; + flourish_fn = self.stub.flourish_fn; + vo_dialog_id = self.stub.vo_dialog_id; + flourish_weapon_name = self.stub.flourish_weapon_name; + ballistic_weapon_name = self.stub.ballistic_weapon_name; + ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; + players = getplayers(); + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( !players[i] player_can_see_weapon_prompt( weapon_name ) ) + self setinvisibletoplayer( players[i] ); + } + } + } + + for (;;) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( player in_revive_trigger() ) + { + wait 0.1; + continue; + } + + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + + if ( player hasweapon( weapon_name ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + + current_weapon = player getcurrentweapon(); + + if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission ) + { + wait 0.1; + continue; + } + + player_has_weapon = player hasweapon( weapon_name ); + + if ( !player_has_weapon ) + { + cost = self.stub.cost; + + if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) + cost = int( cost / 2 ); + + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread melee_weapon_show( player ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.first_time_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.first_time_triggered = 1; + } + + player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); + player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); + } + + continue; + } + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + self setinvisibletoplayer( player ); + } } melee_weapon_show( player ) { - player_angles = vectorToAngle( player.origin - self.origin ); - player_yaw = player_angles[ 1 ]; - weapon_yaw = self.angles[ 1 ]; - yaw_diff = angleClamp180( player_yaw - weapon_yaw ); - if ( yaw_diff > 0 ) - { - yaw = weapon_yaw - 90; - } - else - { - yaw = weapon_yaw + 90; - } - self.og_origin = self.origin; - self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; - wait 0,05; - self show(); - play_sound_at_pos( "weapon_show", self.origin, self ); - time = 1; - self moveto( self.og_origin, time ); + player_angles = vectortoangles( player.origin - self.origin ); + player_yaw = player_angles[1]; + weapon_yaw = self.angles[1]; + yaw_diff = angleclamp180( player_yaw - weapon_yaw ); + + if ( yaw_diff > 0 ) + yaw = weapon_yaw - 90; + else + yaw = weapon_yaw + 90; + + self.og_origin = self.origin; + self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8; + wait 0.05; + self show(); + play_sound_at_pos( "weapon_show", self.origin, self ); + time = 1; + self moveto( self.og_origin, time ); } -give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger ) +give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) { - if ( isDefined( flourish_fn ) ) - { - self thread [[ flourish_fn ]](); - } - gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); - self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); - self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - return; - } - self [[ give_weapon ]](); - if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) - { - if ( isDefined( trigger ) ) - { - trigger setinvisibletoplayer( self ); - } - self trigger_hide_all(); - } + if ( isdefined( flourish_fn ) ) + self thread [[ flourish_fn ]](); + + gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); + self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); + self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + return; + + if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) ) + { + if ( isdefined( trigger ) ) + trigger setinvisibletoplayer( self ); + + self trigger_hide_all(); + } } do_melee_weapon_flourish_begin( flourish_weapon_name ) { - self increment_is_drinking(); - self disable_player_move_states( 1 ); - gun = self getcurrentweapon(); - weapon = flourish_weapon_name; - self giveweapon( weapon ); - self switchtoweapon( weapon ); - return gun; + self increment_is_drinking(); + self disable_player_move_states( 1 ); + gun = self getcurrentweapon(); + weapon = flourish_weapon_name; + self giveweapon( weapon ); + self switchtoweapon( weapon ); + return gun; } do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) { /# - assert( !is_zombie_perk_bottle( gun ) ); + assert( !is_zombie_perk_bottle( gun ) ); #/ /# - assert( gun != level.revive_tool ); + assert( gun != level.revive_tool ); #/ - self enable_player_move_states(); - weapon = flourish_weapon_name; - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission ) - { - self takeweapon( weapon ); - self.lastactiveweapon = "none"; - return; - } - self takeweapon( weapon ); - self giveweapon( weapon_name ); - gun = change_melee_weapon( weapon_name, gun ); - if ( self hasweapon( "knife_zm" ) ) - { - self takeweapon( "knife_zm" ); - } - if ( self is_multiple_drinking() ) - { - self decrement_is_drinking(); - return; - } - else if ( gun == "knife_zm" ) - { - self switchtoweapon( weapon_name ); - self decrement_is_drinking(); - return; - } - else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) - { - self switchtoweapon( gun ); - } - else - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } - self waittill( "weapon_change_complete" ); - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) - { - self decrement_is_drinking(); - } + self enable_player_move_states(); + weapon = flourish_weapon_name; + + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission ) + { + self takeweapon( weapon ); + self.lastactiveweapon = "none"; + return; + } + + self takeweapon( weapon ); + self giveweapon( weapon_name ); + gun = change_melee_weapon( weapon_name, gun ); + + if ( self hasweapon( "knife_zm" ) ) + self takeweapon( "knife_zm" ); + + if ( self is_multiple_drinking() ) + { + self decrement_is_drinking(); + return; + } + else if ( gun == "knife_zm" ) + { + self switchtoweapon( weapon_name ); + self decrement_is_drinking(); + return; + } + else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) + self switchtoweapon( gun ); + else + { + primaryweapons = self getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + self switchtoweapon( primaryweapons[0] ); + } + + self waittill( "weapon_change_complete" ); + + if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) ) + self decrement_is_drinking(); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc index cd33180..d83c091 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc @@ -1,278 +1,302 @@ -#include maps/mp/zombies/_zm_stats; -#include common_scripts/utility; -#include maps/mp/_utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include maps\mp\_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_stats; init() { - if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) - { - precachemodel( "t5_weapon_ballistic_knife_projectile" ); - precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - } + if ( !isdefined( level.ballistic_knife_autorecover ) ) + level.ballistic_knife_autorecover = 1; + + if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) + { + precachemodel( "t5_weapon_ballistic_knife_projectile" ); + precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + } } on_spawn( watcher, player ) { - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); - isfriendly = 0; - if ( isDefined( endpos ) ) - { - retrievable_model = spawn( "script_model", endpos ); - retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); - retrievable_model setowner( player ); - retrievable_model.owner = player; - retrievable_model.angles = angles; - retrievable_model.name = watcher.weapon; - if ( isDefined( prey ) ) - { - if ( isplayer( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - else - { - if ( isai( prey ) && player.team == prey.team ) - { - isfriendly = 1; - } - } - if ( !isfriendly ) - { - retrievable_model linkto( prey, bone ); - retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); - } - else - { - if ( isfriendly ) - { - retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); - normal = ( 0, 0, 1 ); - } - } - } - watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; - if ( isfriendly ) - { - retrievable_model waittill( "stationary" ); - } - retrievable_model thread drop_knives_to_ground( player ); - if ( isfriendly ) - { - player notify( "ballistic_knife_stationary" ); - } - else - { - player notify( "ballistic_knife_stationary" ); - } - retrievable_model thread wait_to_show_glowing_model( prey ); - } + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + self waittill( "stationary", endpos, normal, angles, attacker, prey, bone ); + + isfriendly = 0; + + if ( isdefined( endpos ) ) + { + retrievable_model = spawn( "script_model", endpos ); + retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + retrievable_model setowner( player ); + retrievable_model.owner = player; + retrievable_model.angles = angles; + retrievable_model.name = watcher.weapon; + + if ( isdefined( prey ) ) + { + if ( isplayer( prey ) && player.team == prey.team ) + isfriendly = 1; + else if ( isai( prey ) && player.team == prey.team ) + isfriendly = 1; + + if ( !isfriendly ) + { + retrievable_model linkto( prey, bone ); + retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); + } + else if ( isfriendly ) + { + retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); + normal = ( 0, 0, 1 ); + } + } + + watcher.objectarray[watcher.objectarray.size] = retrievable_model; + + if ( isfriendly ) + retrievable_model waittill( "stationary" ); + + retrievable_model thread drop_knives_to_ground( player ); + + if ( isfriendly ) + player notify( "ballistic_knife_stationary", retrievable_model, normal ); + else + player notify( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + retrievable_model thread wait_to_show_glowing_model( prey ); + } } wait_to_show_glowing_model( prey ) { - level endon( "game_ended" ); - self endon( "death" ); - wait 2; - self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); + level endon( "game_ended" ); + self endon( "death" ); + wait 2; + self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); } on_spawn_retrieve_trigger( watcher, player ) { - player endon( "death" ); - player endon( "disconnect" ); - player endon( "zmb_lost_knife" ); - level endon( "game_ended" ); - player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); - if ( !isDefined( retrievable_model ) ) - { - return; - } - trigger_pos = []; - if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) - { - trigger_pos[ 0 ] = prey.origin[ 0 ]; - trigger_pos[ 1 ] = prey.origin[ 1 ]; - trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; - } - else - { - trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); - trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); - trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); - } - pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); - pickup_trigger setcursorhint( "HINT_NOICON" ); - pickup_trigger.owner = player; - retrievable_model.retrievabletrigger = pickup_trigger; - hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; - if ( isDefined( hint_string ) ) - { - pickup_trigger sethintstring( hint_string ); - } - else - { - pickup_trigger sethintstring( &"GENERIC_PICKUP" ); - } - pickup_trigger setteamfortrigger( player.team ); - player clientclaimtrigger( pickup_trigger ); - pickup_trigger enablelinkto(); - if ( isDefined( prey ) ) - { - pickup_trigger linkto( prey ); - } - else - { - pickup_trigger linkto( retrievable_model ); - } - if ( isDefined( level.knife_planted ) ) - { - [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); - } - retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); - player thread watch_shutdown( pickup_trigger, retrievable_model ); + player endon( "death" ); + player endon( "disconnect" ); + player endon( "zmb_lost_knife" ); + level endon( "game_ended" ); + + player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey ); + + if ( !isdefined( retrievable_model ) ) + return; + + trigger_pos = []; + + if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) ) + { + trigger_pos[0] = prey.origin[0]; + trigger_pos[1] = prey.origin[1]; + trigger_pos[2] = prey.origin[2] + 10; + } + else + { + trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0]; + trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1]; + trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2]; + } + + if ( is_true( level.ballistic_knife_autorecover ) ) + { + trigger_pos[2] -= 50.0; + pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 ); + } + else + { + pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) ); + pickup_trigger setcursorhint( "HINT_NOICON" ); + } + + pickup_trigger.owner = player; + retrievable_model.retrievabletrigger = pickup_trigger; + hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; + + if ( isdefined( hint_string ) ) + pickup_trigger sethintstring( hint_string ); + else + pickup_trigger sethintstring( &"GENERIC_PICKUP" ); + + pickup_trigger setteamfortrigger( player.team ); + player clientclaimtrigger( pickup_trigger ); + pickup_trigger enablelinkto(); + + if ( isdefined( prey ) ) + pickup_trigger linkto( prey ); + else + pickup_trigger linkto( retrievable_model ); + + if ( isdefined( level.knife_planted ) ) + [[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); + + retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); + player thread watch_shutdown( pickup_trigger, retrievable_model ); } debug_print( endpos ) { /# - self endon( "death" ); - while ( 1 ) - { - print3d( endpos, "pickup_trigger" ); - wait 0,05; + self endon( "death" ); + + while ( true ) + { + print3d( endpos, "pickup_trigger" ); + wait 0.05; + } #/ - } } watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) { - self endon( "death" ); - self endon( "delete" ); - level endon( "game_ended" ); - while ( 1 ) - { - trigger waittill( "trigger", player ); - while ( !isalive( player ) ) - { - continue; - } - while ( !player isonground() ) - { - continue; - } - if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) - { - continue; - } - if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) - { - continue; - } - if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) - { - if ( isDefined( playersoundonuse ) ) - { - player playlocalsound( playersoundonuse ); - } - if ( isDefined( npcsoundonuse ) ) - { - player playsound( npcsoundonuse ); - } - player thread [[ callback ]]( weapon, model, trigger ); - return; - } - else - { - } - } + self endon( "death" ); + self endon( "delete" ); + level endon( "game_ended" ); + max_ammo = weaponmaxammo( weapon ) + 1; + autorecover = is_true( level.ballistic_knife_autorecover ); + + while ( true ) + { + trigger waittill( "trigger", player ); + + if ( !isalive( player ) ) + continue; + + if ( !player isonground() && !is_true( trigger.force_pickup ) ) + continue; + + if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) + continue; + + if ( isdefined( trigger.claimedby ) && player != trigger.claimedby ) + continue; + + ammo_stock = player getweaponammostock( weapon ); + ammo_clip = player getweaponammoclip( weapon ); + current_weapon = player getcurrentweapon(); + total_ammo = ammo_stock + ammo_clip; + hasreloaded = 1; + + if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) + hasreloaded = 0; + + if ( total_ammo >= max_ammo || !hasreloaded ) + continue; + + if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) ) + { + if ( isdefined( playersoundonuse ) ) + player playlocalsound( playersoundonuse ); + + if ( isdefined( npcsoundonuse ) ) + player playsound( npcsoundonuse ); + + player thread [[ callback ]]( weapon, model, trigger ); + break; + } + } } pick_up( weapon, model, trigger ) { - current_weapon = self getcurrentweapon(); - if ( current_weapon != weapon ) - { - clip_ammo = self getweaponammoclip( weapon ); - if ( !clip_ammo ) - { - self setweaponammoclip( weapon, 1 ); - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - } - else - { - new_ammo_stock = self getweaponammostock( weapon ) + 1; - self setweaponammostock( weapon, new_ammo_stock ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); - model destroy_ent(); - trigger destroy_ent(); + if ( self hasweapon( weapon ) ) + { + current_weapon = self getcurrentweapon(); + + if ( current_weapon != weapon ) + { + clip_ammo = self getweaponammoclip( weapon ); + + if ( !clip_ammo ) + self setweaponammoclip( weapon, 1 ); + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + else + { + new_ammo_stock = self getweaponammostock( weapon ) + 1; + self setweaponammostock( weapon, new_ammo_stock ); + } + } + + self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); + model destroy_ent(); + trigger destroy_ent(); } destroy_ent() { - if ( isDefined( self ) ) - { - if ( isDefined( self.glowing_model ) ) - { - self.glowing_model delete(); - } - self delete(); - } + if ( isdefined( self ) ) + { + if ( isdefined( self.glowing_model ) ) + self.glowing_model delete(); + + self delete(); + } } watch_shutdown( trigger, model ) { - self waittill_any( "death", "disconnect", "zmb_lost_knife" ); - trigger destroy_ent(); - model destroy_ent(); + self waittill_any( "death_or_disconnect", "zmb_lost_knife" ); + trigger destroy_ent(); + model destroy_ent(); } drop_knives_to_ground( player ) { - player endon( "death" ); - player endon( "zmb_lost_knife" ); - for ( ;; ) - { - level waittill( "drop_objects_to_ground", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); - } - } + player endon( "death" ); + player endon( "zmb_lost_knife" ); + + for (;;) + { + level waittill( "drop_objects_to_ground", origin, radius ); + + if ( distancesquared( origin, self.origin ) < radius * radius ) + { + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); + } + } } force_drop_knives_to_ground_on_death( player, prey ) { - self endon( "death" ); - player endon( "zmb_lost_knife" ); - prey waittill( "death" ); - self unlink(); - self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); - self thread update_retrieve_trigger( player ); + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + prey waittill( "death" ); + + self unlink(); + self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) ); + self thread update_retrieve_trigger( player ); } update_retrieve_trigger( player ) { - self endon( "death" ); - player endon( "zmb_lost_knife" ); - if ( isDefined( level.custom_update_retrieve_trigger ) ) - { - self [[ level.custom_update_retrieve_trigger ]]( player ); - return; - } - self waittill( "stationary" ); - trigger = self.retrievabletrigger; - trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); - trigger linkto( self ); + self endon( "death" ); + player endon( "zmb_lost_knife" ); + + if ( isdefined( level.custom_update_retrieve_trigger ) ) + { + self [[ level.custom_update_retrieve_trigger ]]( player ); + return; + } + + self waittill( "stationary" ); + + trigger = self.retrievabletrigger; + trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 ); + trigger linkto( self ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc index 54968b5..5896087 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_bowie.gsc @@ -1,53 +1,19 @@ -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; init() { - if ( isDefined( level.bowie_cost ) ) - { - cost = level.bowie_cost; - } - else - { - cost = 3000; - } - maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); -} + if ( isdefined( level.bowie_cost ) ) + cost = level.bowie_cost; + else + cost = 3000; -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie ); -} - -has_bowie() -{ - if ( is_true( level._allow_melee_weapon_switching ) ) - { - return 0; - } - if ( !is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) && is_true( self._tazer_zm_equipped ) ) - { - return 1; - } - return 0; -} - -give_bowie() -{ - self._bowie_zm_equipped = 1; - self._sickle_zm_equipped = undefined; - self._tazer_zm_equipped = undefined; -} - -take_bowie() -{ - self._bowie_zm_equipped = undefined; -} - -bowie_flourish() -{ + maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc index 564c67f..4c5d3f8 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_claymore.gsc @@ -1,492 +1,466 @@ -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_score; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\gametypes_zm\_weaponobjects; init() { - if ( !isDefined( level.claymores_max_per_player ) ) - { - level.claymores_max_per_player = 12; - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - model = getent( trigs[ i ].target, "targetname" ); - if ( isDefined( model ) ) - { - model hide(); - } - i++; - } - array_thread( trigs, ::buy_claymores ); - level thread give_claymores_after_rounds(); - level.claymores_on_damage = ::satchel_damage; - level.pickup_claymores = ::pickup_claymores; - level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; - level.claymore_detectiondot = cos( 70 ); - level.claymore_detectionmindist = 20; - level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); + if ( !isdefined( level.claymores_max_per_player ) ) + level.claymores_max_per_player = 12; + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + { + model = getent( trigs[i].target, "targetname" ); + + if ( isdefined( model ) ) + model hide(); + } + + array_thread( trigs, ::buy_claymores ); + level thread give_claymores_after_rounds(); + level.claymores_on_damage = ::satchel_damage; + level.pickup_claymores = ::pickup_claymores; + level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; + level.claymore_detectiondot = cos( 70 ); + level.claymore_detectionmindist = 20; + level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); } buy_claymores() { - self.zombie_cost = 1000; - self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); - self setcursorhint( "HINT_NOICON" ); - self endon( "kill_trigger" ); - if ( !isDefined( self.stub ) ) - { - return; - } - if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) - { - self.stub.claymores_triggered = 0; - } - self.claymores_triggered = self.stub.claymores_triggered; - while ( 1 ) - { - self waittill( "trigger", who ); - while ( who in_revive_trigger() ) - { - continue; - } - while ( who has_powerup_weapon() ) - { - wait 0,1; - } - if ( is_player_valid( who ) ) - { - if ( who.score >= self.zombie_cost ) - { - if ( !who is_player_placeable_mine( "claymore_zm" ) ) - { - play_sound_at_pos( "purchase", self.origin ); - who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); - who thread claymore_setup(); - who thread show_claymore_hint( "claymore_purchased" ); - who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); - if ( isDefined( self.stub ) ) - { - self.claymores_triggered = self.stub.claymores_triggered; - } - if ( self.claymores_triggered == 0 ) - { - model = getent( self.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); - } - else - { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } - } - self.claymores_triggered = 1; - if ( isDefined( self.stub ) ) - { - self.stub.claymores_triggered = 1; - } - } - trigs = getentarray( "claymore_purchase", "targetname" ); - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( who ); - i++; - } - } - else who thread show_claymore_hint( "already_purchased" ); - } - } - } + self.zombie_cost = 1000; + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + self endon( "kill_trigger" ); + + if ( !isdefined( self.stub ) ) + return; + + if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) ) + self.stub.claymores_triggered = 0; + + self.claymores_triggered = self.stub.claymores_triggered; + + while ( true ) + { + self waittill( "trigger", who ); + + if ( who in_revive_trigger() ) + continue; + + if ( who has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + if ( is_player_valid( who ) ) + { + if ( who.score >= self.zombie_cost ) + { + if ( !who is_player_placeable_mine( "claymore_zm" ) ) + { + play_sound_at_pos( "purchase", self.origin ); + who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); + who thread claymore_setup(); + who thread show_claymore_hint( "claymore_purchased" ); + who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); + + if ( isdefined( self.stub ) ) + self.claymores_triggered = self.stub.claymores_triggered; + + if ( self.claymores_triggered == 0 ) + { + model = getent( self.target, "targetname" ); + + if ( isdefined( model ) ) + model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); + else if ( isdefined( self.clientfieldname ) ) + level setclientfield( self.clientfieldname, 1 ); + + self.claymores_triggered = 1; + + if ( isdefined( self.stub ) ) + self.stub.claymores_triggered = 1; + } + + trigs = getentarray( "claymore_purchase", "targetname" ); + + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( who ); + } + else + who thread show_claymore_hint( "already_purchased" ); + } + else + { + who play_sound_on_ent( "no_purchase" ); + who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } } claymore_unitrigger_update_prompt( player ) { - if ( player is_player_placeable_mine( "claymore_zm" ) ) - { - return 0; - } - return 1; + if ( player is_player_placeable_mine( "claymore_zm" ) ) + { + self sethintstring( "" ); + self setcursorhint( "HINT_NOICON" ); + return false; + } + + self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); + self setcursorhint( "HINT_WEAPON", "claymore_zm" ); + return true; } set_claymore_visible() { - players = get_players(); - trigs = getentarray( "claymore_purchase", "targetname" ); - while ( 1 ) - { - j = 0; - while ( j < players.size ) - { - while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) - { - i = 0; - while ( i < trigs.size ) - { - trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); - i++; - } - } - j++; - } - wait 1; - players = get_players(); - } + players = get_players(); + trigs = getentarray( "claymore_purchase", "targetname" ); + + while ( true ) + { + for ( j = 0; j < players.size; j++ ) + { + if ( !players[j] is_player_placeable_mine( "claymore_zm" ) ) + { + for ( i = 0; i < trigs.size; i++ ) + trigs[i] setinvisibletoplayer( players[j], 0 ); + } + } + + wait 1; + players = get_players(); + } } claymore_safe_to_plant() { - if ( self.owner.claymores.size >= level.claymores_max_per_player ) - { - return 0; - } - if ( isDefined( level.claymore_safe_to_plant ) ) - { - return self [[ level.claymore_safe_to_plant ]](); - } - return 1; + if ( self.owner.claymores.size >= level.claymores_max_per_player ) + return 0; + + if ( isdefined( level.claymore_safe_to_plant ) ) + return self [[ level.claymore_safe_to_plant ]](); + + return 1; } claymore_wait_and_detonate() { - wait 0,1; - self detonate( self.owner ); + wait 0.1; + self detonate( self.owner ); } claymore_watch() { - self endon( "death" ); - while ( 1 ) - { - self waittill( "grenade_fire", claymore, weapname ); - if ( weapname == "claymore_zm" ) - { - claymore.owner = self; - claymore.team = self.team; - self notify( "zmb_enable_claymore_prompt" ); - if ( claymore claymore_safe_to_plant() ) - { - if ( isDefined( level.claymore_planted ) ) - { - self thread [[ level.claymore_planted ]]( claymore ); - } - claymore thread satchel_damage(); - claymore thread claymore_detonation(); - claymore thread play_claymore_effects(); - self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); - self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); - break; - } - else - { - claymore thread claymore_wait_and_detonate(); - } - } - } + self endon( "death" ); + self notify( "claymore_watch" ); + self endon( "claymore_watch" ); + + while ( true ) + { + self waittill( "grenade_fire", claymore, weapname ); + + if ( weapname == "claymore_zm" ) + { + claymore.owner = self; + claymore.team = self.team; + self notify( "zmb_enable_claymore_prompt" ); + + if ( claymore claymore_safe_to_plant() ) + { + if ( isdefined( level.claymore_planted ) ) + self thread [[ level.claymore_planted ]]( claymore ); + + claymore thread claymore_detonation(); + claymore thread play_claymore_effects(); + self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" ); + self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" ); + } + else + claymore thread claymore_wait_and_detonate(); + } + } } claymore_setup() { - if ( !isDefined( self.claymores ) ) - { - self.claymores = []; - } - self thread claymore_watch(); - self giveweapon( "claymore_zm" ); - self set_player_placeable_mine( "claymore_zm" ); - self setactionslot( 4, "weapon", "claymore_zm" ); - self setweaponammostock( "claymore_zm", 2 ); + if ( !isdefined( self.claymores ) ) + self.claymores = []; + + self thread claymore_watch(); + self giveweapon( "claymore_zm" ); + self set_player_placeable_mine( "claymore_zm" ); + self setactionslot( 4, "weapon", "claymore_zm" ); + self setweaponammostock( "claymore_zm", 2 ); } adjust_trigger_origin( origin ) { - origin += vectorScale( ( 0, 0, 1 ), 20 ); - return origin; + origin += vectorscale( ( 0, 0, 1 ), 20.0 ); + return origin; } on_spawn_retrieve_trigger( watcher, player ) { - self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); - if ( isDefined( self.pickuptrigger ) ) - { - self.pickuptrigger sethintlowpriority( 0 ); - } + self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player ); + + if ( isdefined( self.pickuptrigger ) ) + self.pickuptrigger sethintlowpriority( 0 ); } pickup_claymores() { - player = self.owner; - if ( !player hasweapon( "claymore_zm" ) ) - { - player thread claymore_watch(); - player giveweapon( "claymore_zm" ); - player set_player_placeable_mine( "claymore_zm" ); - player setactionslot( 4, "weapon", "claymore_zm" ); - player setweaponammoclip( "claymore_zm", 0 ); - player notify( "zmb_enable_claymore_prompt" ); - } - else - { - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - self destroy_ent(); - player notify( "zmb_disable_claymore_prompt" ); - return; - } - } - self pick_up(); - clip_ammo = player getweaponammoclip( self.name ); - clip_max_ammo = weaponclipsize( self.name ); - if ( clip_ammo >= clip_max_ammo ) - { - player notify( "zmb_disable_claymore_prompt" ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); + player = self.owner; + + if ( !player hasweapon( "claymore_zm" ) ) + { + player thread claymore_watch(); + player giveweapon( "claymore_zm" ); + player set_player_placeable_mine( "claymore_zm" ); + player setactionslot( 4, "weapon", "claymore_zm" ); + player setweaponammoclip( "claymore_zm", 0 ); + player notify( "zmb_enable_claymore_prompt" ); + } + else + { + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + { + self destroy_ent(); + player notify( "zmb_disable_claymore_prompt" ); + return; + } + } + + self pick_up(); + clip_ammo = player getweaponammoclip( self.name ); + clip_max_ammo = weaponclipsize( self.name ); + + if ( clip_ammo >= clip_max_ammo ) + player notify( "zmb_disable_claymore_prompt" ); + + player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" ); + player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" ); } pickup_claymores_trigger_listener( trigger, player ) { - self thread pickup_claymores_trigger_listener_enable( trigger, player ); - self thread pickup_claymores_trigger_listener_disable( trigger, player ); + self thread pickup_claymores_trigger_listener_enable( trigger, player ); + self thread pickup_claymores_trigger_listener_disable( trigger, player ); } pickup_claymores_trigger_listener_enable( trigger, player ) { - self endon( "delete" ); - while ( 1 ) - { - player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger trigger_on(); - trigger linkto( self ); - } + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); + + if ( !isdefined( trigger ) ) + return; + + trigger trigger_on(); + trigger linkto( self ); + } } pickup_claymores_trigger_listener_disable( trigger, player ) { - self endon( "delete" ); - while ( 1 ) - { - player waittill( "zmb_disable_claymore_prompt" ); - if ( !isDefined( trigger ) ) - { - return; - } - trigger unlink(); - trigger trigger_off(); - } + self endon( "delete" ); + self endon( "death" ); + + while ( true ) + { + player waittill( "zmb_disable_claymore_prompt" ); + + if ( !isdefined( trigger ) ) + return; + + trigger unlink(); + trigger trigger_off(); + } } shouldaffectweaponobject( object ) { - pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); - dirtopos = pos - object.origin; - objectforward = anglesToForward( object.angles ); - dist = vectordot( dirtopos, objectforward ); - if ( dist < level.claymore_detectionmindist ) - { - return 0; - } - dirtopos = vectornormalize( dirtopos ); - dot = vectordot( dirtopos, objectforward ); - return dot > level.claymore_detectiondot; + pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 ); + dirtopos = pos - object.origin; + objectforward = anglestoforward( object.angles ); + dist = vectordot( dirtopos, objectforward ); + + if ( dist < level.claymore_detectionmindist ) + return 0; + + dirtopos = vectornormalize( dirtopos ); + dot = vectordot( dirtopos, objectforward ); + return dot > level.claymore_detectiondot; } claymore_detonation() { - self endon( "death" ); - self waittill_not_moving(); - detonateradius = 96; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); - damagearea setexcludeteamfortrigger( self.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - if ( is_true( self.isonbus ) ) - { - damagearea setmovingplatformenabled( 1 ); - } - self.damagearea = damagearea; - self thread delete_claymores_on_death( self.owner, damagearea ); - self.owner.claymores[ self.owner.claymores.size ] = self; - while ( 1 ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( self.owner ) && ent == self.owner ) - { - continue; - } - while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) - { - continue; - } - if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) - { - continue; - } - while ( !ent shouldaffectweaponobject( self ) ) - { - continue; - } - if ( ent damageconetrace( self.origin, self ) > 0 ) - { - self playsound( "wpn_claymore_alert" ); - wait 0,4; - if ( isDefined( self.owner ) ) - { - self detonate( self.owner ); - } - else - { - self detonate( undefined ); - } - return; - } - } + self endon( "death" ); + self waittill_not_moving(); + detonateradius = 96; + damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); + damagearea setexcludeteamfortrigger( self.team ); + damagearea enablelinkto(); + damagearea linkto( self ); + + if ( is_true( self.isonbus ) ) + damagearea setmovingplatformenabled( 1 ); + + self.damagearea = damagearea; + self thread delete_claymores_on_death( self.owner, damagearea ); + self.owner.claymores[self.owner.claymores.size] = self; + + while ( true ) + { + damagearea waittill( "trigger", ent ); + + if ( isdefined( self.owner ) && ent == self.owner ) + continue; + + if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team ) + continue; + + if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore ) + continue; + + if ( !ent shouldaffectweaponobject( self ) ) + continue; + + if ( ent damageconetrace( self.origin, self ) > 0 ) + { + self playsound( "wpn_claymore_alert" ); + wait 0.4; + + if ( isdefined( self.owner ) ) + self detonate( self.owner ); + else + self detonate( undefined ); + + return; + } + } } delete_claymores_on_death( player, ent ) { - self waittill( "death" ); - if ( isDefined( player ) ) - { - arrayremovevalue( player.claymores, self ); - } - wait 0,05; - if ( isDefined( ent ) ) - { - ent delete(); - } + self waittill( "death" ); + + if ( isdefined( player ) ) + arrayremovevalue( player.claymores, self ); + + wait 0.05; + + if ( isdefined( ent ) ) + ent delete(); } satchel_damage() { - self setcandamage( 1 ); - self.health = 100000; - self.maxhealth = self.health; - attacker = undefined; - while ( 1 ) - { - self waittill( "damage", amount, attacker ); - if ( !isDefined( self ) ) - { - return; - } - self.health = self.maxhealth; - while ( !isplayer( attacker ) ) - { - continue; - } - if ( isDefined( self.owner ) && attacker == self.owner ) - { - continue; - } - while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team ) - { - continue; - } - } - if ( level.satchelexplodethisframe ) - { - wait ( 0,1 + randomfloat( 0,4 ) ); - } - else wait 0,05; - if ( !isDefined( self ) ) - { - return; - } - level.satchelexplodethisframe = 1; - thread reset_satchel_explode_this_frame(); - self detonate( attacker ); + self endon( "death" ); + self setcandamage( 1 ); + self.health = 100000; + self.maxhealth = self.health; + attacker = undefined; + + while ( true ) + { + self waittill( "damage", amount, attacker ); + + if ( !isdefined( self ) ) + return; + + self.health = self.maxhealth; + + if ( !isplayer( attacker ) ) + continue; + + if ( isdefined( self.owner ) && attacker == self.owner ) + continue; + + if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team ) + continue; + + break; + } + + if ( level.satchelexplodethisframe ) + wait( 0.1 + randomfloat( 0.4 ) ); + else + wait 0.05; + + if ( !isdefined( self ) ) + return; + + level.satchelexplodethisframe = 1; + thread reset_satchel_explode_this_frame(); + self detonate( attacker ); } reset_satchel_explode_this_frame() { - wait 0,05; - level.satchelexplodethisframe = 0; + wait 0.05; + level.satchelexplodethisframe = 0; } play_claymore_effects() { - self endon( "death" ); - self waittill_not_moving(); - playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); + self endon( "death" ); + self waittill_not_moving(); + playfxontag( level._effect["claymore_laser"], self, "tag_fx" ); } give_claymores_after_rounds() { - while ( 1 ) - { - level waittill( "between_round_over" ); - while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) - { - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) - { - players[ i ] giveweapon( "claymore_zm" ); - players[ i ] set_player_placeable_mine( "claymore_zm" ); - players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); - players[ i ] setweaponammoclip( "claymore_zm", 2 ); - } - i++; - } - } - } -} + while ( true ) + { + level waittill( "between_round_over" ); -init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} + if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) ) + { + players = get_players(); -setup_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); + for ( i = 0; i < players.size; i++ ) + { + if ( players[i] is_player_placeable_mine( "claymore_zm" ) ) + { + players[i] giveweapon( "claymore_zm" ); + players[i] set_player_placeable_mine( "claymore_zm" ); + players[i] setactionslot( 4, "weapon", "claymore_zm" ); + players[i] setweaponammoclip( "claymore_zm", 2 ); + } + } + } + } } show_claymore_hint( string ) { - self endon( "death" ); - self endon( "disconnect" ); - if ( string == "claymore_purchased" ) - { - text = &"ZOMBIE_CLAYMORE_HOWTO"; - } - else - { - text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; - } - self setup_client_hintelem(); - self.hintelem settext( text ); - wait 3,5; - self.hintelem settext( "" ); + self endon( "death" ); + self endon( "disconnect" ); + + if ( string == "claymore_purchased" ) + text = &"ZOMBIE_CLAYMORE_HOWTO"; + else + text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; + + show_equipment_hint_text( text ); } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc deleted file mode 100644 index 0427300..0000000 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc +++ /dev/null @@ -1,565 +0,0 @@ -#include maps/mp/zombies/_zm_clone; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -#using_animtree( "zombie_cymbal_monkey" ); - -init() -{ - if ( !cymbal_monkey_exists() ) - { - return; - } -/# - level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey; -#/ - level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" ); - level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" ); - level.cymbal_monkeys = []; - scriptmodelsuseanimtree( -1 ); -} - -player_give_cymbal_monkey() -{ - self giveweapon( "cymbal_monkey_zm" ); - self set_player_tactical_grenade( "cymbal_monkey_zm" ); - self thread player_handle_cymbal_monkey(); -} - -player_handle_cymbal_monkey() -{ - self notify( "starting_monkey_watch" ); - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - attract_dist_diff = level.monkey_attract_dist_diff; - if ( !isDefined( attract_dist_diff ) ) - { - attract_dist_diff = 45; - } - num_attractors = level.num_monkey_attractors; - if ( !isDefined( num_attractors ) ) - { - num_attractors = 96; - } - max_attract_dist = level.monkey_attract_dist; - if ( !isDefined( max_attract_dist ) ) - { - max_attract_dist = 1536; - } - while ( 1 ) - { - grenade = get_thrown_monkey(); - self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ); - wait 0,05; - } -} - -watch_for_dud( model, actor ) -{ - self endon( "death" ); - self waittill( "grenade_dud" ); - model.dud = 1; - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - wait 3; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -watch_for_emp( model, actor ) -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "emp_detonate", origin, radius ); - if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) - { - break; - } - else - { - } - } - self.stun_fx = 1; - if ( isDefined( level._equipment_emp_destroy_fx ) ) - { - playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, -1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) ); - } - wait 0,15; - self.attract_to_origin = 0; - self deactivate_zombie_point_of_interest(); - model clearanim( %o_monkey_bomb, 0 ); - wait 1; - self detonate(); - wait 1; - if ( isDefined( model ) ) - { - model delete(); - } - if ( isDefined( actor ) ) - { - actor delete(); - } - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - if ( isDefined( self ) ) - { - self delete(); - } -} - -clone_player_angles( owner ) -{ - self endon( "death" ); - owner endon( "death" ); - while ( isDefined( self ) ) - { - self.angles = owner.angles; - wait 0,05; - } -} - -show_briefly( showtime ) -{ - self endon( "show_owner" ); - if ( isDefined( self.show_for_time ) ) - { - self.show_for_time = showtime; - return; - } - self.show_for_time = showtime; - self setvisibletoall(); - while ( self.show_for_time > 0 ) - { - self.show_for_time -= 0,05; - wait 0,05; - } - self setvisibletoallexceptteam( level.zombie_team ); - self.show_for_time = undefined; -} - -show_owner_on_attack( owner ) -{ - owner endon( "hide_owner" ); - owner endon( "show_owner" ); - self endon( "explode" ); - self endon( "death" ); - self endon( "grenade_dud" ); - owner.show_for_time = undefined; - for ( ;; ) - { - owner waittill( "weapon_fired" ); - owner thread show_briefly( 0,5 ); - } -} - -hide_owner( owner ) -{ - owner notify( "hide_owner" ); - owner endon( "hide_owner" ); - owner setperk( "specialty_immunemms" ); - owner.no_burning_sfx = 1; - owner notify( "stop_flame_sounds" ); - owner setvisibletoallexceptteam( level.zombie_team ); - owner.hide_owner = 1; - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - self thread show_owner_on_attack( owner ); - evt = self waittill_any_return( "explode", "death", "grenade_dud" ); -/# - println( "ZMCLONE: Player visible again because of " + evt ); -#/ - owner notify( "show_owner" ); - owner unsetperk( "specialty_immunemms" ); - if ( isDefined( level._effect[ "human_disappears" ] ) ) - { - playfx( level._effect[ "human_disappears" ], owner.origin ); - } - owner.no_burning_sfx = undefined; - owner setvisibletoall(); - owner.hide_owner = undefined; - owner show(); -} - -proximity_detonate( owner ) -{ - wait 1,5; - if ( !isDefined( self ) ) - { - return; - } - detonateradius = 96; - explosionradius = detonateradius * 2; - damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1,5 ); - damagearea setexcludeteamfortrigger( owner.team ); - damagearea enablelinkto(); - damagearea linkto( self ); - self.damagearea = damagearea; - while ( isDefined( self ) ) - { - damagearea waittill( "trigger", ent ); - if ( isDefined( owner ) && ent == owner ) - { - continue; - } - if ( isDefined( ent.team ) && ent.team == owner.team ) - { - continue; - } - self playsound( "wpn_claymore_alert" ); - dist = distance( self.origin, ent.origin ); - radiusdamage( self.origin + vectorScale( ( 0, 0, -1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" ); - if ( isDefined( owner ) ) - { - self detonate( owner ); - } - else - { - self detonate( undefined ); - } - break; - } - if ( isDefined( damagearea ) ) - { - damagearea delete(); - } -} - -player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff ) -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - if ( isDefined( grenade ) ) - { - grenade endon( "death" ); - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) - { - if ( isDefined( grenade.damagearea ) ) - { - grenade.damagearea delete(); - } - grenade delete(); - return; - } - grenade hide(); - model = spawn( "script_model", grenade.origin ); - model setmodel( "weapon_zombie_monkey_bomb" ); - model useanimtree( -1 ); - model linkto( grenade ); - model.angles = grenade.angles; - model thread monkey_cleanup( grenade ); - clone = undefined; - if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) - { - model setvisibletoallexceptteam( level.zombie_team ); - clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, -1 ), 999 ), level.cymbal_monkey_clone_weapon, undefined ); - model.simulacrum = clone; - clone maps/mp/zombies/_zm_clone::clone_animate( "idle" ); - clone thread clone_player_angles( self ); - clone notsolid(); - clone ghost(); - } - grenade thread watch_for_dud( model, clone ); - grenade thread watch_for_emp( model, clone ); - info = spawnstruct(); - info.sound_attractors = []; - grenade thread monitor_zombie_groans( info ); - grenade waittill( "stationary" ); - if ( isDefined( level.grenade_planted ) ) - { - self thread [[ level.grenade_planted ]]( grenade, model ); - } - if ( isDefined( grenade ) ) - { - if ( isDefined( model ) ) - { - model setanim( %o_monkey_bomb ); - if ( isDefined( grenade.backlinked ) && !grenade.backlinked ) - { - model unlink(); - model.origin = grenade.origin; - model.angles = grenade.angles; - } - } - if ( isDefined( clone ) ) - { - clone forceteleport( grenade.origin, grenade.angles ); - clone thread hide_owner( self ); - grenade thread proximity_detonate( self ); - clone show(); - clone setinvisibletoall(); - clone setvisibletoteam( level.zombie_team ); - } - grenade resetmissiledetonationtime(); - playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" ); - valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined ); - if ( isDefined( level.check_valid_poi ) ) - { - valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi ); - } - if ( valid_poi ) - { - grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 ); - grenade.attract_to_origin = 1; - grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff ); - grenade thread wait_for_attractor_positions_complete(); - grenade thread do_monkey_sound( model, info ); - level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - return; - } - else - { - grenade.script_noteworthy = undefined; - level thread grenade_stolen_by_sam( grenade, model, clone ); - } - } -} - -grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor ) -{ - if ( !isDefined( ent_model ) ) - { - return; - } - direction = ent_model.origin; - direction = ( direction[ 1 ], direction[ 0 ], 0 ); - if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) - { - direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 ); - } - else - { - if ( direction[ 0 ] < 0 ) - { - direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 ); - } - } - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] playlocalsound( level.zmb_laugh_alias ); - } - i++; - } - playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" ); - ent_model movez( 60, 1, 0,25, 0,25 ); - ent_model vibrate( direction, 1,5, 2,5, 1 ); - ent_model waittill( "movedone" ); - if ( isDefined( self.damagearea ) ) - { - self.damagearea delete(); - } - ent_model delete(); - if ( isDefined( ent_actor ) ) - { - ent_actor delete(); - } - if ( isDefined( ent_grenade ) ) - { - if ( isDefined( ent_grenade.damagearea ) ) - { - ent_grenade.damagearea delete(); - } - ent_grenade delete(); - } -} - -wait_for_attractor_positions_complete() -{ - self waittill( "attractor_positions_generated" ); - self.attract_to_origin = 0; -} - -monkey_cleanup( parent ) -{ - while ( 1 ) - { - if ( !isDefined( parent ) ) - { - if ( isDefined( self ) && isDefined( self.dud ) && self.dud ) - { - wait 6; - } - if ( isDefined( self.simulacrum ) ) - { - self.simulacrum delete(); - } - self_delete(); - return; - } - wait 0,05; - } -} - -do_monkey_sound( model, info ) -{ - self.monk_scream_vox = 0; - if ( isDefined( level.grenade_safe_to_bounce ) ) - { - if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) ) - { - self playsound( "zmb_vox_monkey_scream" ); - self.monk_scream_vox = 1; - } - } - if ( !self.monk_scream_vox && level.music_override == 0 ) - { - if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view ) - { - self playsoundtoteam( "zmb_monkey_song", "allies" ); - } - else - { - self playsound( "zmb_monkey_song" ); - } - } - if ( !self.monk_scream_vox ) - { - self thread play_delayed_explode_vox(); - } - self waittill( "explode", position ); - level notify( "grenade_exploded" ); - monkey_index = -1; - i = 0; - while ( i < level.cymbal_monkeys.size ) - { - if ( !isDefined( level.cymbal_monkeys[ i ] ) ) - { - monkey_index = i; - break; - } - else - { - i++; - } - } - if ( monkey_index >= 0 ) - { - arrayremoveindex( level.cymbal_monkeys, monkey_index ); - } - if ( isDefined( model ) ) - { - model clearanim( %o_monkey_bomb, 0,2 ); - } - i = 0; - while ( i < info.sound_attractors.size ) - { - if ( isDefined( info.sound_attractors[ i ] ) ) - { - info.sound_attractors[ i ] notify( "monkey_blown_up" ); - } - i++; - } -} - -play_delayed_explode_vox() -{ - wait 6,5; - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_monkey_explode" ); - } -} - -get_thrown_monkey() -{ - self endon( "disconnect" ); - self endon( "starting_monkey_watch" ); - while ( 1 ) - { - self waittill( "grenade_fire", grenade, weapname ); - if ( weapname == "cymbal_monkey_zm" ) - { - grenade.use_grenade_special_long_bookmark = 1; - grenade.grenade_multiattack_bookmark_count = 1; - return grenade; - } - wait 0,05; - } -} - -monitor_zombie_groans( info ) -{ - self endon( "explode" ); - while ( 1 ) - { - if ( !isDefined( self ) ) - { - return; - } - while ( !isDefined( self.attractor_array ) ) - { - wait 0,05; - } - i = 0; - while ( i < self.attractor_array.size ) - { - if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) ) - { - if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) ) - { - if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 ) - { - info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ]; - self.attractor_array[ i ] thread play_zombie_groans(); - } - } - } - i++; - } - wait 0,05; - } -} - -play_zombie_groans() -{ - self endon( "death" ); - self endon( "monkey_blown_up" ); - while ( 1 ) - { - if ( isDefined( self ) ) - { - self playsound( "zmb_vox_zombie_groan" ); - wait randomfloatrange( 2, 3 ); - continue; - } - else - { - return; - } - } -} - -cymbal_monkey_exists() -{ - return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] ); -} diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc index 40b53a5..834acb7 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_slipgun.gsc @@ -1,867 +1,839 @@ -//checked includes match cerberus output -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_powerups; -#include maps/mp/zombies/_zm_ai_basic; -#include maps/mp/animscripts/zm_shared; -#include maps/mp/animscripts/zm_utility; -#include maps/mp/zombies/_zm; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/gametypes_zm/_weaponobjects; -#include maps/mp/zombies/_zm_equipment; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\gametypes_zm\_weaponobjects; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm; +#include maps\mp\animscripts\zm_utility; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_ai_basic; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_audio; -set_zombie_var_once( var, value, is_float, column, is_team_based ) //checked matches cerberus output +set_zombie_var_once( var, value, is_float, column, is_team_based ) { - if ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ var ] ) ) - { - set_zombie_var( var, value, is_float, column, is_team_based ); - } + if ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars[var] ) ) + set_zombie_var( var, value, is_float, column, is_team_based ); } -init() //checked matches cerberus output +init() { - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "slipgun_zm" ) ) - { - return; - } - precachemodel( "t5_weapon_crossbow_bolt" ); - precacheitem( "slip_bolt_zm" ); - precacheitem( "slip_bolt_upgraded_zm" ); - if ( is_true( level.slipgun_as_equipment ) ) - { - maps/mp/zombies/_zm_equipment::register_equipment( "slipgun_zm", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SLIPGUN_HOWTO", "jetgun_zm_icon", "slipgun", ::slipgun_activation_watcher_thread, ::transferslipgun, ::dropslipgun, ::pickupslipgun ); - maps/mp/zombies/_zm_equipment::enemies_ignore_equipment( "slipgun_zm" ); - maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "slipgun", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING" ); - } - set_zombie_var_once( "slipgun_reslip_max_spots", 8 ); - set_zombie_var_once( "slipgun_reslip_rate", 6 ); - set_zombie_var_once( "slipgun_max_kill_chain_depth", 16 ); - set_zombie_var_once( "slipgun_max_kill_round", 100 ); - set_zombie_var_once( "slipgun_chain_radius", 120 ); - set_zombie_var_once( "slipgun_chain_wait_min", 0.75, 1 ); - set_zombie_var_once( "slipgun_chain_wait_max", 1.5, 1 ); - level.slippery_spot_count = 0; - level.sliquifier_distance_checks = 0; - maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::slipgun_zombie_damage_response ); - maps/mp/zombies/_zm_spawner::register_zombie_death_animscript_callback( ::slipgun_zombie_death_response ); - level._effect[ "slipgun_explode" ] = loadfx( "weapon/liquifier/fx_liquifier_goo_explo" ); - level._effect[ "slipgun_splatter" ] = loadfx( "maps/zombie/fx_zmb_goo_splat" ); - level._effect[ "slipgun_simmer" ] = loadfx( "weapon/liquifier/fx_liquifier_goo_sizzle" ); - level._effect[ "slipgun_viewmodel_eject" ] = loadfx( "weapon/liquifier/fx_liquifier_clip_eject" ); - level._effect[ "slipgun_viewmodel_reload" ] = loadfx( "weapon/liquifier/fx_liquifier_reload_steam" ); - onplayerconnect_callback( ::slipgun_player_connect ); - thread wait_init_damage(); + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slipgun_zm" ) ) + return; + + precachemodel( "t5_weapon_crossbow_bolt" ); + precacheitem( "slip_bolt_zm" ); + precacheitem( "slip_bolt_upgraded_zm" ); + + if ( is_true( level.slipgun_as_equipment ) ) + { + maps\mp\zombies\_zm_equipment::register_equipment( "slipgun_zm", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING", &"ZM_HIGHRISE_EQUIP_SLIPGUN_HOWTO", "jetgun_zm_icon", "slipgun", ::slipgun_activation_watcher_thread, ::transferslipgun, ::dropslipgun, ::pickupslipgun ); + maps\mp\zombies\_zm_equipment::enemies_ignore_equipment( "slipgun_zm" ); + maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "slipgun", &"ZM_HIGHRISE_EQUIP_SLIPGUN_PICKUP_HINT_STRING" ); + } + + set_zombie_var_once( "slipgun_reslip_max_spots", 8 ); + set_zombie_var_once( "slipgun_reslip_rate", 6 ); + set_zombie_var_once( "slipgun_max_kill_chain_depth", 16 ); + set_zombie_var_once( "slipgun_max_kill_round", 100 ); + set_zombie_var_once( "slipgun_chain_radius", 120 ); + set_zombie_var_once( "slipgun_chain_wait_min", 0.75, 1 ); + set_zombie_var_once( "slipgun_chain_wait_max", 1.5, 1 ); + level.slippery_spot_count = 0; + level.sliquifier_distance_checks = 0; + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slipgun_zombie_damage_response ); + maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slipgun_zombie_death_response ); + level._effect["slipgun_explode"] = loadfx( "weapon/liquifier/fx_liquifier_goo_explo" ); + level._effect["slipgun_splatter"] = loadfx( "maps/zombie/fx_zmb_goo_splat" ); + level._effect["slipgun_simmer"] = loadfx( "weapon/liquifier/fx_liquifier_goo_sizzle" ); + level._effect["slipgun_viewmodel_eject"] = loadfx( "weapon/liquifier/fx_liquifier_clip_eject" ); + level._effect["slipgun_viewmodel_reload"] = loadfx( "weapon/liquifier/fx_liquifier_reload_steam" ); + onplayerconnect_callback( ::slipgun_player_connect ); + thread wait_init_damage(); } -wait_init_damage() //checked matches cerberus output +wait_init_damage() { - while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) ) - { - wait 1; - } - wait 1; - level.slipgun_damage = maps/mp/zombies/_zm::ai_zombie_health( level.zombie_vars[ "slipgun_max_kill_round" ] ); - level.slipgun_damage_mod = "MOD_PROJECTILE_SPLASH"; + while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) ) + wait 1; + + wait 1; + level.slipgun_damage = maps\mp\zombies\_zm::ai_zombie_health( level.zombie_vars["slipgun_max_kill_round"] ); + level.slipgun_damage_mod = "MOD_PROJECTILE_SPLASH"; } -slipgun_player_connect() //checked matches cerberus output +slipgun_player_connect() { - self thread watch_for_slip_bolt(); + self thread watch_for_slip_bolt(); } -watch_for_slip_bolt() //checked changed to match cerberus output +watch_for_slip_bolt() { - self endon( "death" ); - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "grenade_fire", grenade, weaponname, parent ); - self.num_sliquifier_kills = 0; - switch( weaponname ) - { - case "slip_bolt_zm": - grenade thread slip_bolt( self, 0 ); - break; - case "slip_bolt_upgraded_zm": - grenade thread slip_bolt( self, 1 ); - break; - } - } + self endon( "death" ); + self endon( "disconnect" ); + + for (;;) + { + self waittill( "grenade_fire", grenade, weaponname, parent ); + + self.num_sliquifier_kills = 0; + + switch ( weaponname ) + { + case "slip_bolt_zm": + grenade thread slip_bolt( self, 0 ); + continue; + case "slip_bolt_upgraded_zm": + grenade thread slip_bolt( self, 1 ); + continue; + } + } } -slip_bolt( player, upgraded ) //checked matches cerberus output +slip_bolt( player, upgraded ) { - startpos = player getweaponmuzzlepoint(); - self waittill( "explode", position ); - duration = 24; - if ( upgraded ) - { - duration = 36; - } - thread add_slippery_spot( position, duration, startpos ); + startpos = player getweaponmuzzlepoint(); + + self waittill( "explode", position ); + + duration = 24; + + if ( upgraded ) + duration = 36; + + thread add_slippery_spot( position, duration, startpos ); } -dropslipgun() //checked matches cerberus output +dropslipgun() { - item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_slipgun_world", "slipgun_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles ); - if ( isDefined( item ) ) - { - item.original_owner = self; - item.owner = undefined; - item.name = "slipgun_zm"; - item.requires_pickup = 1; - item.clipammo = self getweaponammoclip( item.name ); - item.stockammo = self getweaponammostock( item.name ); - } - self takeweapon( "slipgun_zm" ); - return item; + item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_slipgun_world", "slipgun_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles ); + + if ( isdefined( item ) ) + { + item.original_owner = self; + item.owner = undefined; + item.name = "slipgun_zm"; + item.requires_pickup = 1; + item.clipammo = self getweaponammoclip( item.name ); + item.stockammo = self getweaponammostock( item.name ); + } + + self takeweapon( "slipgun_zm" ); + return item; } -pickupslipgun( item ) //checked matches cerberus output +pickupslipgun( item ) { - item.owner = self; - self giveweapon( item.name ); - if ( isDefined( item.clipammo ) && isDefined( item.stockammo ) ) - { - self setweaponammoclip( item.name, item.clipammo ); - self setweaponammostock( item.name, item.stockammo ); - item.clipammo = undefined; - item.stockammo = undefined; - } + item.owner = self; + self giveweapon( item.name ); + + if ( isdefined( item.clipammo ) && isdefined( item.stockammo ) ) + { + self setweaponammoclip( item.name, item.clipammo ); + self setweaponammostock( item.name, item.stockammo ); + item.clipammo = undefined; + item.stockammo = undefined; + } } transferslipgun( fromplayer, toplayer ) { - toplayer notify( "slipgun_zm_taken" ); - fromplayer notify( "slipgun_zm_taken" ); + toplayer notify( "slipgun_zm_taken" ); + fromplayer notify( "slipgun_zm_taken" ); } -slipgun_activation_watcher_thread() //checked matches cerberus output +slipgun_activation_watcher_thread() { - self endon( "zombified" ); - self endon( "disconnect" ); - self endon( "slipgun_zm_taken" ); - while ( 1 ) - { - self waittill_either( "slipgun_zm_activate", "slipgun_zm_deactivate" ); - } + self endon( "zombified" ); + self endon( "disconnect" ); + self endon( "slipgun_zm_taken" ); + + while ( true ) + self waittill_either( "slipgun_zm_activate", "slipgun_zm_deactivate" ); } -slipgun_debug_circle( origin, radius, seconds, onslope, parent, start ) //dev call didn't check +slipgun_debug_circle( origin, radius, seconds, onslope, parent, start ) { -/* /# - if ( getDvarInt( #"6136A815" ) ) - { - frames = int( 20 * seconds ); - if ( isDefined( parent ) ) - { - time = seconds; - frames = 1; - while ( time > 0 ) - { - morigin = origin + ( parent.origin - start ); - if ( isDefined( onslope ) && onslope ) - { - circle( morigin, radius, ( 0, 0, 1 ), 0, 1, frames ); - } - else - { - circle( morigin, radius, ( 0, 0, 1 ), 0, 1, frames ); - } - time -= 0,05; - wait 0,05; - } - } - else if ( isDefined( onslope ) && onslope ) - { - circle( origin, radius, ( 0, 0, 1 ), 0, 1, frames ); - return; - } - else - { - circle( origin, radius, ( 0, 0, 1 ), 0, 1, frames ); + if ( getdvarint( _hash_6136A815 ) ) + { + frames = int( 20 * seconds ); + + if ( isdefined( parent ) ) + { + time = seconds; + frames = 1; + + while ( time > 0 ) + { + morigin = origin + parent.origin - start; + + if ( isdefined( onslope ) && onslope ) + circle( morigin, radius, ( 1, 0, 0 ), 0, 1, frames ); + else + circle( morigin, radius, ( 1, 1, 1 ), 0, 1, frames ); + + time -= 0.05; + wait 0.05; + } + } + else if ( isdefined( onslope ) && onslope ) + circle( origin, radius, ( 1, 0, 0 ), 0, 1, frames ); + else + circle( origin, radius, ( 1, 1, 1 ), 0, 1, frames ); + } #/ - } - } -*/ } -slipgun_debug_line( start, end, color, seconds ) //dev call didn't check +slipgun_debug_line( start, end, color, seconds ) { -/* /# - if ( getDvarInt( #"6136A815" ) ) - { - frames = int( 20 * seconds ); - line( start, end, color, 1, 0, frames ); + if ( getdvarint( _hash_6136A815 ) ) + { + frames = int( 20 * seconds ); + line( start, end, color, 1, 0, frames ); + } #/ - } -*/ } -canzombieongoofall() //checked changed to match cerberus output +canzombieongoofall() { - if ( is_true( self.is_inert ) ) - { - return 0; - } - if ( is_true( self.is_traversing ) ) - { - return 0; - } - if ( is_true( self.barricade_enter ) ) - { - return 0; - } - if ( randomint( 100 ) < 20 ) - { - trace = groundtrace( self.origin + vectorScale( ( 0, 0, 1 ), 5 ), self.origin + vectorScale( ( 0, 0, -1 ), 300 ), 0, undefined ); - origin = trace[ "position" ]; - groundnormal = trace[ "normal" ]; - if ( distancesquared( self.origin, origin ) > 256 ) - { - return 0; - } - dot = vectordot( ( 0, 0, 1 ), groundnormal ); - if ( dot < 0.9 ) - { - return 0; - } - trace_origin = self.origin + vectorScale( anglesToForward( self.angles ), 200 ); - trace = groundtrace( trace_origin + vectorScale( ( 0, 0, 1 ), 5 ), self.origin + vectorScale( ( 0, 0, -1 ), 300 ), 0, undefined ); - origin = trace[ "position" ]; - groundnormal = trace[ "normal" ]; - if ( distancesquared( trace_origin, origin ) > 256 ) - { - return 0; - } - dot = vectordot( ( 0, 0, 1 ), groundnormal ); - if ( dot < 0.9 ) - { - return 0; - } - return 1; - } - return 0; + if ( is_true( self.is_inert ) ) + return false; + + if ( is_true( self.is_traversing ) ) + return false; + + if ( is_true( self.barricade_enter ) ) + return false; + + if ( randomint( 100 ) < 20 ) + { + trace = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + groundnormal = trace["normal"]; + + if ( distancesquared( self.origin, origin ) > 256 ) + return false; + + dot = vectordot( ( 0, 0, 1 ), groundnormal ); + + if ( dot < 0.9 ) + return false; + + trace_origin = self.origin + vectorscale( anglestoforward( self.angles ), 200 ); + trace = groundtrace( trace_origin + vectorscale( ( 0, 0, 1 ), 5.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined ); + origin = trace["position"]; + groundnormal = trace["normal"]; + + if ( distancesquared( trace_origin, origin ) > 256 ) + return false; + + dot = vectordot( ( 0, 0, 1 ), groundnormal ); + + if ( dot < 0.9 ) + return false; + + return true; + } + + return false; } -zombiemoveongoo() //checked partially changed to match cerberus output some conditionals changed to is_true() +zombiemoveongoo() { - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - if ( is_true( self.sliding_on_goo ) ) - { - return; - } - self notify( "endOnGoo" ); - self endon( "endOnGoo" ); - self notify( "stop_zombie_goto_entrance" ); - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self.goo_last_vel = self getvelocity(); - self.goo_last_pos = self.origin; - slide_direction = anglesToForward( self.angles ); - self animmode( "slide" ); - self orientmode( "face enemy" ); - self.forcemovementscriptstate = 1; - self.ai_state = "zombieMoveOnGoo"; - self maps/mp/zombies/_zm_spawner::zombie_history( "zombieMoveOnGoo " + getTime() ); - self.sliding_on_goo = 0; - self thread zombiemoveongoo_on_killanimscript(); - while ( 1 ) - { - self_on_goo = is_true( self.is_on_goo ); - velocity = self getvelocity(); - velocitylength = length( self getvelocity() ); - iscrawler = !is_true( self.has_legs ); - isleaper = self is_leaper(); - while ( is_true( self.is_leaping ) ) - { - wait 0.1; - continue; - } - if ( !self_on_goo ) - { - self animcustom( ::zombie_moveongoo_animcustom_recover ); - self waittill( "zombie_MoveOnGoo_animCustom_recover_done" ); - break; - } - if ( velocitylength <= 0.2 ) - { - self animmode( "normal" ); - wait 0.1; - self animmode( "slide" ); - } - if ( !self.sliding_on_goo || !issubstr( self.zombie_move_speed, "slide" ) ) - { - if ( !iscrawler && !isleaper && !isDefined( self.fell_while_sliding ) && canzombieongoofall() ) - { - self animcustom( ::zombie_moveongoo_animcustom_fall ); - self waittill( "zombie_MoveOnGoo_animCustom_fall_done" ); - } - else - { - self.sliding_on_goo = 1; - if ( velocitylength <= 0.2 ) - { - wait 0.1; - } - self animmode( "slide" ); - self orientmode( "face enemy" ); - if ( self.zombie_move_speed == "sprint" ) - { - if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "sprint_slide" ) - { - animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "sprint_slide" ); - self set_zombie_run_cycle( animstatedef ); - } - } - else if ( self.zombie_move_speed == "run" ) - { - if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "run_slide" ) - { - animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "run_slide" ); - self set_zombie_run_cycle( animstatedef ); - } - } - else if ( !isDefined( self.zombie_move_speed ) || isDefined( self.zombie_move_speed ) && self.zombie_move_speed != "walk_slide" ) - { - animstatedef = self maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "walk_slide" ); - self set_zombie_run_cycle( animstatedef ); - } - } - } - wait 0.05; - } - zombiemoveongoo_gobacktonormal(); + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + + if ( is_true( self.sliding_on_goo ) ) + return; + + self notify( "endOnGoo" ); + self endon( "endOnGoo" ); + self notify( "stop_zombie_goto_entrance" ); + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self.goo_last_vel = self getvelocity(); + self.goo_last_pos = self.origin; + slide_direction = anglestoforward( self.angles ); + self animmode( "slide" ); + self orientmode( "face enemy" ); + self.forcemovementscriptstate = 1; + self.ai_state = "zombieMoveOnGoo"; + self maps\mp\zombies\_zm_spawner::zombie_history( "zombieMoveOnGoo " + gettime() ); + self.sliding_on_goo = 0; + self thread zombiemoveongoo_on_killanimscript(); + + while ( true ) + { + self_on_goo = isdefined( self.is_on_goo ) && self.is_on_goo; + velocity = self getvelocity(); + velocitylength = length( self getvelocity() ); + iscrawler = isdefined( self.has_legs ) && !self.has_legs; + isleaper = self is_leaper(); + + if ( is_true( self.is_leaping ) ) + { + wait 0.1; + continue; + } + + if ( !self_on_goo ) + { + self animcustom( ::zombie_moveongoo_animcustom_recover ); + + self waittill( "zombie_MoveOnGoo_animCustom_recover_done" ); + + break; + } + + if ( velocitylength <= 0.2 ) + { + self animmode( "normal" ); + wait 0.1; + self animmode( "slide" ); + } + + if ( !self.sliding_on_goo || !issubstr( self.zombie_move_speed, "slide" ) ) + { + if ( !iscrawler && !isleaper && !isdefined( self.fell_while_sliding ) && canzombieongoofall() ) + { + self animcustom( ::zombie_moveongoo_animcustom_fall ); + + self waittill( "zombie_MoveOnGoo_animCustom_fall_done" ); + + continue; + } + else + { + self.sliding_on_goo = 1; + + if ( velocitylength <= 0.2 ) + wait 0.1; + + self animmode( "slide" ); + self orientmode( "face enemy" ); + + if ( self.zombie_move_speed == "sprint" ) + { + if ( !isdefined( self.zombie_move_speed ) || isdefined( self.zombie_move_speed ) && self.zombie_move_speed != "sprint_slide" ) + { + animstatedef = self maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "sprint_slide" ); + self set_zombie_run_cycle( animstatedef ); + } + } + else if ( self.zombie_move_speed == "run" ) + { + if ( !isdefined( self.zombie_move_speed ) || isdefined( self.zombie_move_speed ) && self.zombie_move_speed != "run_slide" ) + { + animstatedef = self maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "run_slide" ); + self set_zombie_run_cycle( animstatedef ); + } + } + else if ( !isdefined( self.zombie_move_speed ) || isdefined( self.zombie_move_speed ) && self.zombie_move_speed != "walk_slide" ) + { + animstatedef = self maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "walk_slide" ); + self set_zombie_run_cycle( animstatedef ); + } + } + } + + wait 0.05; + } + + zombiemoveongoo_gobacktonormal(); } -zombie_moveongoo_animcustom_fall() //checked matches cerberus output +zombie_moveongoo_animcustom_fall() { - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - self.fell_while_sliding = 1; - self animmode( "normal" ); - self orientmode( "face angle", self.angles[ 1 ] ); - fallanimstatedef = "zm_move_slide_fall"; - self setanimstatefromasd( fallanimstatedef ); - maps/mp/animscripts/zm_shared::donotetracks( "slide_fall_anim" ); - self notify( "zombie_MoveOnGoo_animCustom_fall_done" ); + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + self.fell_while_sliding = 1; + self animmode( "normal" ); + self orientmode( "face angle", self.angles[1] ); + fallanimstatedef = "zm_move_slide_fall"; + self setanimstatefromasd( fallanimstatedef ); + maps\mp\animscripts\zm_shared::donotetracks( "slide_fall_anim" ); + self notify( "zombie_MoveOnGoo_animCustom_fall_done" ); } -zombie_moveongoo_animcustom_recover() //checked matches cerberus output +zombie_moveongoo_animcustom_recover() { - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - self.recovering_from_goo = 1; - if ( randomint( 100 ) < 50 ) - { - animstatedef = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_move_slide_recover" ); - self setanimstatefromasd( animstatedef ); - maps/mp/animscripts/zm_shared::donotetracks( "slide_recover_anim" ); - } - self.recovering_from_goo = 0; - zombiemoveongoo_gobacktonormal(); - self notify( "zombie_MoveOnGoo_animCustom_recover_done" ); + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + self.recovering_from_goo = 1; + + if ( randomint( 100 ) < 50 ) + { + animstatedef = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_move_slide_recover" ); + self setanimstatefromasd( animstatedef ); + maps\mp\animscripts\zm_shared::donotetracks( "slide_recover_anim" ); + } + + self.recovering_from_goo = 0; + zombiemoveongoo_gobacktonormal(); + self notify( "zombie_MoveOnGoo_animCustom_recover_done" ); } -zombiemoveongoo_on_killanimscript() //checked matches cerberus output +zombiemoveongoo_on_killanimscript() { - self endon( "death" ); - self endon( "removed" ); - level endon( "intermission" ); - self notify( "zombieMoveOnGoo_on_killAnimScript_thread" ); - self endon( "zombieMoveOnGoo_on_killAnimScript_thread" ); - self waittill_any( "endOnGoo", "killanimscript" ); - zombiemoveongoo_gobacktonormal(); + self endon( "death" ); + self endon( "removed" ); + level endon( "intermission" ); + self notify( "zombieMoveOnGoo_on_killAnimScript_thread" ); + self endon( "zombieMoveOnGoo_on_killAnimScript_thread" ); + self waittill_any( "endOnGoo", "killanimscript" ); + zombiemoveongoo_gobacktonormal(); } -zombiemoveongoo_gobacktonormal() //checked matches cerberus output +zombiemoveongoo_gobacktonormal() { - self animmode( "normal" ); - self set_zombie_run_cycle(); - self.sliding_on_goo = 0; - self.fell_while_sliding = undefined; - self notify( "zombieMoveOnGoo_on_killAnimScript_thread" ); - self notify( "endOnGoo" ); - self.forcemovementscriptstate = 0; - if ( !is_true( self.completed_emerging_into_playable_area ) ) - { - /* + self animmode( "normal" ); + self set_zombie_run_cycle(); + self.sliding_on_goo = 0; + self.fell_while_sliding = undefined; + self notify( "zombieMoveOnGoo_on_killAnimScript_thread" ); + self notify( "endOnGoo" ); + self.forcemovementscriptstate = 0; + + if ( !is_true( self.completed_emerging_into_playable_area ) ) + { /# - assert( isDefined( self.first_node ) ); + assert( isdefined( self.first_node ) ); #/ - */ - self maps/mp/zombies/_zm_spawner::reset_attack_spot(); - self orientmode( "face default" ); - self thread maps/mp/zombies/_zm_spawner::zombie_goto_entrance( self.first_node ); - } - else - { - self orientmode( "face enemy" ); - self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); - } + self maps\mp\zombies\_zm_spawner::reset_attack_spot(); + self orientmode( "face default" ); + self thread maps\mp\zombies\_zm_spawner::zombie_goto_entrance( self.first_node ); + } + else + { + self orientmode( "face enemy" ); + self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); + } } -zombie_can_slip() //checked matches cerberus output +zombie_can_slip() { - if ( is_true( self.barricade_enter ) ) - { - return 0; - } - if ( is_true( self.is_traversing ) ) - { - return 0; - } - if ( !is_true( self.completed_emerging_into_playable_area ) && !isDefined( self.first_node ) ) - { - return 0; - } - if ( is_true( self.is_leaping ) ) - { - return 0; - } - return 1; + if ( is_true( self.barricade_enter ) ) + return false; + + if ( is_true( self.is_traversing ) ) + return false; + + if ( !is_true( self.completed_emerging_into_playable_area ) && !isdefined( self.first_node ) ) + return false; + + if ( is_true( self.is_leaping ) ) + return false; + + return true; } -zombie_set_slipping( onoff ) //checked matches cerberus output +zombie_set_slipping( onoff ) { - if ( isDefined( self ) ) - { - self.is_on_goo = onoff; - if ( onoff ) - { - self thread zombiemoveongoo(); - } - } + if ( isdefined( self ) ) + { + self.is_on_goo = onoff; + + if ( onoff ) + self thread zombiemoveongoo(); + } } -slippery_spot_choke( lifetime ) //checked matches cerberus output +slippery_spot_choke( lifetime ) { - level.sliquifier_distance_checks++; - if ( level.sliquifier_distance_checks >= 32 ) - { - level.sliquifier_distance_checks = 0; - lifetime -= 0.05; - wait 0.05; - } - return lifetime; + level.sliquifier_distance_checks++; + + if ( level.sliquifier_distance_checks >= 32 ) + { + level.sliquifier_distance_checks = 0; + lifetime -= 0.05; + wait 0.05; + } + + return lifetime; } -add_slippery_spot( origin, duration, startpos ) //checked partially changed to match cerberus output +add_slippery_spot( origin, duration, startpos ) { - wait 0.5; - level.slippery_spot_count++; - hit_norm = vectornormalize( startpos - origin ); - hit_from = 6 * hit_norm; - trace_height = 120; - trace = bullettrace( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), 0, undefined ); - if ( isDefined( trace[ "entity" ] ) ) - { - parent = trace[ "entity" ]; - if ( is_true( parent.can_move ) ) - { - return; - } - } - fxorigin = origin + hit_from; - /* + wait 0.5; + level.slippery_spot_count++; + hit_norm = vectornormalize( startpos - origin ); + hit_from = 6 * hit_norm; + trace_height = 120; + trace = bullettrace( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), 0, undefined ); + + if ( isdefined( trace["entity"] ) ) + { + parent = trace["entity"]; + + if ( is_true( parent.can_move ) ) + return; + } + + fxorigin = origin + hit_from; /# - red = ( 0, 0, 1 ); - green = ( 0, 0, 1 ); - dkgreen = vectorScale( ( 0, 0, 1 ), 0,15 ); - blue = ( 0, 0, 1 ); - grey = vectorScale( ( 0, 0, 1 ), 0,3 ); - black = ( 0, 0, 1 ); - slipgun_debug_line( origin, origin + hit_from, red, duration ); - if ( trace[ "fraction" ] == 1 ) - { - slipgun_debug_line( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), grey, duration ); - } - else - { - slipgun_debug_line( origin + hit_from, trace[ "position" ], green, duration ); - slipgun_debug_line( trace[ "position" ], origin + hit_from + ( 0, 0, trace_height * -1 ), dkgreen, duration ); + red = ( 1, 0, 0 ); + green = ( 0, 1, 0 ); + dkgreen = vectorscale( ( 0, 1, 0 ), 0.15 ); + blue = ( 0, 0, 1 ); + grey = vectorscale( ( 1, 1, 1 ), 0.3 ); + black = ( 0, 0, 0 ); + slipgun_debug_line( origin, origin + hit_from, red, duration ); + + if ( trace["fraction"] == 1 ) + slipgun_debug_line( origin + hit_from, origin + hit_from + ( 0, 0, trace_height * -1 ), grey, duration ); + else + { + slipgun_debug_line( origin + hit_from, trace["position"], green, duration ); + slipgun_debug_line( trace["position"], origin + hit_from + ( 0, 0, trace_height * -1 ), dkgreen, duration ); + } #/ - } - */ - if ( trace[ "fraction" ] == 1 ) - { - return; - } - moving_parent = undefined; - moving_parent_start = ( 0, 0, 1 ); - if ( isDefined( trace[ "entity" ] ) ) - { - parent = trace[ "entity" ]; - if ( is_true( parent.can_move ) ) - { - return; - } - } - origin = trace[ "position" ]; - thread pool_of_goo( fxorigin, duration ); - if ( !isDefined( level.slippery_spots ) ) - { - level.slippery_spots = []; - } - level.slippery_spots[ level.slippery_spots.size ] = origin; - radius = 60; - height = 48; - /* + if ( trace["fraction"] == 1 ) + return; + + moving_parent = undefined; + moving_parent_start = ( 0, 0, 0 ); + + if ( isdefined( trace["entity"] ) ) + { + parent = trace["entity"]; + + if ( is_true( parent.can_move ) ) + return; + } + + origin = trace["position"]; + thread pool_of_goo( fxorigin, duration ); + + if ( !isdefined( level.slippery_spots ) ) + level.slippery_spots = []; + + level.slippery_spots[level.slippery_spots.size] = origin; + radius = 60; + height = 48; /# - thread slipgun_debug_circle( origin, radius, duration, 0, moving_parent, moving_parent_start ); + thread slipgun_debug_circle( origin, radius, duration, 0, moving_parent, moving_parent_start ); #/ - */ - slicked_players = []; - slicked_zombies = []; - lifetime = duration; - radius2 = radius * radius; - while ( lifetime > 0 ) - { - oldlifetime = lifetime; - foreach ( player in get_players() ) - { - num = player getentitynumber(); - morigin = origin; - if ( isDefined( moving_parent ) ) - { - morigin = origin + ( moving_parent.origin - moving_parent_start ); - } - if ( distance2dsquared( player.origin, morigin ) < radius2 && abs( player.origin[ 2 ] - morigin[ 2 ] ) < height ) - { - should_be_slick = 1; - } - else - { - should_be_slick = 0; - } - is_slick = isDefined( slicked_players[ num ] ); - if ( should_be_slick != is_slick ) - { - if ( !isDefined( player.slick_count ) ) - { - player.slick_count = 0; - } - if ( should_be_slick ) - { - player.slick_count++; - slicked_players[ num ] = player; - } - else - { - player.slick_count--; -/* + slicked_players = []; + slicked_zombies = []; + lifetime = duration; + radius2 = radius * radius; + + while ( lifetime > 0 ) + { + oldlifetime = lifetime; + + foreach ( player in get_players() ) + { + num = player getentitynumber(); + morigin = origin; + + if ( isdefined( moving_parent ) ) + morigin = origin + moving_parent.origin - moving_parent_start; + + should_be_slick = distance2dsquared( player.origin, morigin ) < radius2 && abs( player.origin[2] - morigin[2] ) < height; + is_slick = isdefined( slicked_players[num] ); + + if ( should_be_slick != is_slick ) + { + if ( !isdefined( player.slick_count ) ) + player.slick_count = 0; + + if ( should_be_slick ) + { + player.slick_count++; + slicked_players[num] = player; + } + else + { + player.slick_count--; /# - assert( player.slick_count >= 0 ); + assert( player.slick_count >= 0 ); #/ -*/ - slicked_players[ num ] = undefined; - } - player forceslick( player.slick_count ); - } - lifetime = slippery_spot_choke( lifetime ); - } - zombies = get_round_enemy_array(); - if ( isDefined( zombies ) ) - { - foreach ( zombie in zombies ) - { - if ( isDefined( zombie ) ) - { - num = zombie getentitynumber(); - morigin = origin; - if ( isDefined( moving_parent ) ) - { - morigin = origin + ( moving_parent.origin - moving_parent_start ); - } - if ( distance2dsquared( zombie.origin, morigin ) < radius2 && abs( zombie.origin[ 2 ] - morigin[ 2 ] ) < height ) - { - should_be_slick = 1; - } - else - { - should_be_slick = 0; - } - if ( should_be_slick && !zombie zombie_can_slip() ) - { - should_be_slick = 0; - } - is_slick = isDefined( slicked_zombies[ num ] ); - if ( should_be_slick != is_slick ) - { - if ( !isDefined( zombie.slick_count ) ) - { - zombie.slick_count = 0; - } - if ( should_be_slick ) - { - zombie.slick_count++; - slicked_zombies[ num ] = zombie; - } - else if ( zombie.slick_count > 0 ) - { - zombie.slick_count--; - - } - zombie zombie_set_slipping( zombie.slick_count > 0 ); - } - lifetime = slippery_spot_choke( lifetime ); - } - } - } - else if ( oldlifetime == lifetime ) - { - lifetime -= 0.05; - wait 0.05; - } - } - foreach ( player in slicked_players ) - { - player.slick_count--; - /* - + slicked_players[num] = undefined; + } /# - assert( player.slick_count >= 0 ); + #/ - */ - player forceslick( player.slick_count ); - } - foreach ( zombie in slicked_zombies ) - { - if ( isDefined( zombie ) ) - { - if ( zombie.slick_count > 0 ) - { - zombie.slick_count--; + player forceslick( player.slick_count ); + } - } - zombie zombie_set_slipping( zombie.slick_count > 0 ); - } - } - arrayremovevalue( level.slippery_spots, origin, 0 ); - level.slippery_spot_count--; + lifetime = slippery_spot_choke( lifetime ); + } + + zombies = get_round_enemy_array(); + + if ( isdefined( zombies ) ) + { + foreach ( zombie in zombies ) + { + if ( isdefined( zombie ) ) + { + num = zombie getentitynumber(); + morigin = origin; + + if ( isdefined( moving_parent ) ) + morigin = origin + moving_parent.origin - moving_parent_start; + + should_be_slick = distance2dsquared( zombie.origin, morigin ) < radius2 && abs( zombie.origin[2] - morigin[2] ) < height; + + if ( should_be_slick && !zombie zombie_can_slip() ) + should_be_slick = 0; + + is_slick = isdefined( slicked_zombies[num] ); + + if ( should_be_slick != is_slick ) + { + if ( !isdefined( zombie.slick_count ) ) + zombie.slick_count = 0; + + if ( should_be_slick ) + { + zombie.slick_count++; + slicked_zombies[num] = zombie; + } + else + { + if ( zombie.slick_count > 0 ) + zombie.slick_count--; + + slicked_zombies[num] = undefined; + } + + zombie zombie_set_slipping( zombie.slick_count > 0 ); + } + + lifetime = slippery_spot_choke( lifetime ); + } + } + } + + if ( oldlifetime == lifetime ) + { + lifetime -= 0.05; + wait 0.05; + } + } + + foreach ( player in slicked_players ) + { + player.slick_count--; +/# + assert( player.slick_count >= 0 ); +#/ + player forceslick( player.slick_count ); + } + + foreach ( zombie in slicked_zombies ) + { + if ( isdefined( zombie ) ) + { + if ( zombie.slick_count > 0 ) + zombie.slick_count--; + + zombie zombie_set_slipping( zombie.slick_count > 0 ); + } + } + + arrayremovevalue( level.slippery_spots, origin, 0 ); + level.slippery_spot_count--; } -pool_of_goo( origin, duration ) //checked matches cerberus output +pool_of_goo( origin, duration ) { - effect_life = 24; - if ( duration > effect_life ) - { - pool_of_goo( origin, duration - effect_life ); - duration = effect_life; - } - if ( isDefined( level._effect[ "slipgun_splatter" ] ) ) - { - playfx( level._effect[ "slipgun_splatter" ], origin ); - } - wait duration; + effect_life = 24; + + if ( duration > effect_life ) + { + pool_of_goo( origin, duration - effect_life ); + duration = effect_life; + } + + if ( isdefined( level._effect["slipgun_splatter"] ) ) + playfx( level._effect["slipgun_splatter"], origin ); + + wait( duration ); } -explode_into_goo( player, chain_depth ) //checked matches cerberus output +explode_into_goo( player, chain_depth ) { - if ( isDefined( self.marked_for_insta_upgraded_death ) ) - { - return; - } - tag = "J_SpineLower"; - if ( is_true( self.isdog ) ) - { - tag = "tag_origin"; - } - self.guts_explosion = 1; - self playsound( "wpn_slipgun_zombie_explode" ); - if ( isDefined( level._effect[ "slipgun_explode" ] ) ) - { - playfx( level._effect[ "slipgun_explode" ], self gettagorigin( tag ) ); - } - if ( !is_true( self.isdog ) ) - { - wait 0.1; - } - self ghost(); - if ( !isDefined( self.goo_chain_depth ) ) - { - self.goo_chain_depth = chain_depth; - } - chain_radius = level.zombie_vars[ "slipgun_chain_radius" ]; - level thread explode_to_near_zombies( player, self.origin, chain_radius, self.goo_chain_depth ); + if ( isdefined( self.marked_for_insta_upgraded_death ) ) + return; + + tag = "J_SpineLower"; + + if ( is_true( self.isdog ) ) + tag = "tag_origin"; + + self.guts_explosion = 1; + self playsound( "wpn_slipgun_zombie_explode" ); + + if ( isdefined( level._effect["slipgun_explode"] ) ) + playfx( level._effect["slipgun_explode"], self gettagorigin( tag ) ); + + if ( !is_true( self.isdog ) ) + wait 0.1; + + self ghost(); + + if ( !isdefined( self.goo_chain_depth ) ) + self.goo_chain_depth = chain_depth; + + chain_radius = level.zombie_vars["slipgun_chain_radius"]; + level thread explode_to_near_zombies( player, self.origin, chain_radius, self.goo_chain_depth ); } -explode_to_near_zombies( player, origin, radius, chain_depth ) //checked partially changed to match cerberus output changed at own discretion +explode_to_near_zombies( player, origin, radius, chain_depth ) { - if ( level.zombie_vars[ "slipgun_max_kill_chain_depth" ] > 0 && chain_depth > level.zombie_vars[ "slipgun_max_kill_chain_depth" ] ) - { - return; - } - enemies = get_round_enemy_array(); - enemies = get_array_of_closest( origin, enemies ); - minchainwait = level.zombie_vars[ "slipgun_chain_wait_min" ]; - maxchainwait = level.zombie_vars[ "slipgun_chain_wait_max" ]; - rsquared = radius * radius; - tag = "J_Head"; - marked_zombies = []; - if ( isDefined( enemies ) && enemies.size ) - { - index = 0; - enemy = enemies[ index ]; - while ( distancesquared( enemy.origin, origin ) < rsquared ) - { - if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) && !isDefined( enemy.slipgun_sizzle ) ) - { - trace = bullettrace( origin + vectorScale( ( 0, 0, 1 ), 50 ), enemy.origin + vectorScale( ( 0, 0, 1 ), 50 ), 0, undefined, 1 ); - if ( isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] == 1 ) - { - enemy.slipgun_sizzle = playfxontag( level._effect[ "slipgun_simmer" ], enemy, tag ); - marked_zombies[ marked_zombies.size ] = enemy; - } - } - index++; - if ( index >= enemies.size ) - { - break; - } - else - { - enemy = enemies[ index ]; - } - } - } - if ( isDefined( marked_zombies ) && marked_zombies.size ) - { - foreach(enemy in marked_zombies) - { - if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) - { - wait randomfloatrange( minchainwait, maxchainwait ); - if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) - { - if ( !isDefined( enemy.goo_chain_depth ) ) - { - enemy.goo_chain_depth = chain_depth; - } - if ( enemy.health > 0 ) - { - if ( player maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - enemy.health = 1; - } - enemy dodamage( level.slipgun_damage, origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); - } - if ( level.slippery_spot_count < level.zombie_vars[ "slipgun_reslip_max_spots" ] ) - { - if ( isDefined( enemy.slick_count ) && enemy.slick_count == 0 && enemy.health <= 0 ) - { - if ( level.zombie_vars[ "slipgun_reslip_rate" ] > 0 && randomint( level.zombie_vars[ "slipgun_reslip_rate" ] ) == 0 ) - { - startpos = origin; - duration = 24; - thread add_slippery_spot( enemy.origin, duration, startpos ); - } - } - } - } - } - } - } + if ( level.zombie_vars["slipgun_max_kill_chain_depth"] > 0 && chain_depth > level.zombie_vars["slipgun_max_kill_chain_depth"] ) + return; + + enemies = get_round_enemy_array(); + enemies = get_array_of_closest( origin, enemies ); + minchainwait = level.zombie_vars["slipgun_chain_wait_min"]; + maxchainwait = level.zombie_vars["slipgun_chain_wait_max"]; + rsquared = radius * radius; + tag = "J_Head"; + marked_zombies = []; + + if ( isdefined( enemies ) && enemies.size ) + { + index = 0; + + for ( enemy = enemies[index]; distancesquared( enemy.origin, origin ) < rsquared; enemy = enemies[index] ) + { + if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) && !isdefined( enemy.slipgun_sizzle ) ) + { + trace = bullettrace( origin + vectorscale( ( 0, 0, 1 ), 50.0 ), enemy.origin + vectorscale( ( 0, 0, 1 ), 50.0 ), 0, undefined, 1 ); + + if ( isdefined( trace["fraction"] ) && trace["fraction"] == 1 ) + { + enemy.slipgun_sizzle = playfxontag( level._effect["slipgun_simmer"], enemy, tag ); + marked_zombies[marked_zombies.size] = enemy; + } + } + + index++; + + if ( index >= enemies.size ) + break; + } + } + + if ( isdefined( marked_zombies ) && marked_zombies.size ) + { + foreach ( enemy in marked_zombies ) + { + if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) + { + wait( randomfloatrange( minchainwait, maxchainwait ) ); + + if ( isalive( enemy ) && !is_true( enemy.guts_explosion ) && !is_true( enemy.nuked ) ) + { + if ( !isdefined( enemy.goo_chain_depth ) ) + enemy.goo_chain_depth = chain_depth; + + if ( enemy.health > 0 ) + { + if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + enemy.health = 1; + + enemy dodamage( level.slipgun_damage, origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); + } + + if ( level.slippery_spot_count < level.zombie_vars["slipgun_reslip_max_spots"] ) + { + if ( ( !isdefined( enemy.slick_count ) || enemy.slick_count == 0 ) && enemy.health <= 0 ) + { + if ( level.zombie_vars["slipgun_reslip_rate"] > 0 && randomint( level.zombie_vars["slipgun_reslip_rate"] ) == 0 ) + { + startpos = origin; + duration = 24; + thread add_slippery_spot( enemy.origin, duration, startpos ); + } + } + } + } + } + } + } } -slipgun_zombie_1st_hit_response( upgraded, player ) //checked matches cerberus output +slipgun_zombie_1st_hit_response( upgraded, player ) { - self notify( "stop_find_flesh" ); - self notify( "zombie_acquire_enemy" ); - self orientmode( "face default" ); - self.ignoreall = 1; - self.gibbed = 1; - if ( isalive( self ) ) - { - if ( !isDefined( self.goo_chain_depth ) ) - { - self.goo_chain_depth = 0; - } - if ( self.health > 0 ) - { - if ( player maps/mp/zombies/_zm_powerups::is_insta_kill_active() ) - { - self.health = 1; - } - self dodamage( level.slipgun_damage, self.origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); - } - } + self notify( "stop_find_flesh" ); + self notify( "zombie_acquire_enemy" ); + self orientmode( "face default" ); + self.ignoreall = 1; + self.gibbed = 1; + + if ( isalive( self ) ) + { + if ( !isdefined( self.goo_chain_depth ) ) + self.goo_chain_depth = 0; + + if ( self.health > 0 ) + { + if ( player maps\mp\zombies\_zm_powerups::is_insta_kill_active() ) + self.health = 1; + + self dodamage( level.slipgun_damage, self.origin, player, player, "none", level.slipgun_damage_mod, 0, "slip_goo_zm" ); + } + } } -slipgun_zombie_hit_response_internal( mod, damageweapon, player ) //checked matches cerberus output +slipgun_zombie_hit_response_internal( mod, damageweapon, player ) { - if ( !self is_slipgun_damage( mod, damageweapon ) && !is_slipgun_explosive_damage( mod, damageweapon ) ) - { - return 0; - } - self playsound( "wpn_slipgun_zombie_impact" ); - upgraded = damageweapon == "slipgun_upgraded_zm"; - self thread slipgun_zombie_1st_hit_response( upgraded, player ); - if ( isDefined( player ) && isplayer( player ) ) - { - player thread slipgun_play_zombie_hit_vox(); - } - return 1; + if ( !self is_slipgun_damage( mod, damageweapon ) && !is_slipgun_explosive_damage( mod, damageweapon ) ) + return false; + + self playsound( "wpn_slipgun_zombie_impact" ); + upgraded = damageweapon == "slipgun_upgraded_zm"; + self thread slipgun_zombie_1st_hit_response( upgraded, player ); + + if ( isdefined( player ) && isplayer( player ) ) + player thread slipgun_play_zombie_hit_vox(); + + return true; } -slipgun_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) //checked matches cerberus output +slipgun_zombie_damage_response( mod, hit_location, hit_origin, player, amount ) { - return slipgun_zombie_hit_response_internal( mod, self.damageweapon, player ); + return slipgun_zombie_hit_response_internal( mod, self.damageweapon, player ); } -slipgun_zombie_death_response() //checked matches cerberus output +slipgun_zombie_death_response() { - if ( !self is_slipgun_damage( self.damagemod, self.damageweapon ) && !is_slipgun_explosive_damage( self.damagemod, self.damageweapon ) ) - { - return 0; - } - level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self ); - self explode_into_goo( self.attacker, 0 ); - return 1; + if ( !self is_slipgun_damage( self.damagemod, self.damageweapon ) && !is_slipgun_explosive_damage( self.damagemod, self.damageweapon ) ) + return false; + + level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self ); + self explode_into_goo( self.attacker, 0 ); + return true; } is_slipgun_explosive_damage( mod, weapon ) { - if ( isDefined( weapon ) ) - { - if ( weapon == "slip_goo_zm" || weapon == "slip_bolt_zm" || weapon == "slip_bolt_upgraded_zm" ) - { - return 1; - } - return 0; - } - return 0; + return isdefined( weapon ) && ( weapon == "slip_goo_zm" || weapon == "slip_bolt_zm" || weapon == "slip_bolt_upgraded_zm" ); } is_slipgun_damage( mod, weapon ) { - if ( isDefined( weapon ) ) - { - if ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ) - { - return 1; - } - return 0; - } - return 0; + return isdefined( weapon ) && ( weapon == "slipgun_zm" || weapon == "slipgun_upgraded_zm" ); } -slipgun_play_zombie_hit_vox() //checked matches cerberus output +slipgun_play_zombie_hit_vox() { - rand = randomintrange( 0, 101 ); - if ( rand >= 20 ) - { - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "human" ); - } + rand = randomintrange( 0, 101 ); + + if ( rand >= 20 ) + self maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "human" ); } - - diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc index 3e6a41d..956abc8 100644 --- a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc @@ -1,150 +1,123 @@ -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_net; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_net; +#include maps\mp\zombies\_zm_melee_weapon; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_audio; init() { - registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); - register_melee_weapon_for_level( "tazer_knuckles_zm" ); - if ( isDefined( level.tazer_cost ) ) - { - cost = level.tazer_cost; - } - else - { - cost = 6000; - } - level.use_tazer_impact_fx = 0; - maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); - maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); - maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); - level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); - level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); - if ( level.script != "zm_transit" ) - { - level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); - level.use_tazer_impact_fx = 1; - } - level.tazer_flourish_delay = 0,5; -} + registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); + register_melee_weapon_for_level( "tazer_knuckles_zm" ); -spectator_respawn() -{ - maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer ); + if ( isdefined( level.tazer_cost ) ) + cost = level.tazer_cost; + else + cost = 6000; + + level.use_tazer_impact_fx = 0; + maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" ); + maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions ); + level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" ); + level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); + + if ( level.script != "zm_transit" ) + { + level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); + level.use_tazer_impact_fx = 1; + } + + level.tazer_flourish_delay = 0.5; } watch_bodily_functions() { - if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) - { - return; - } - while ( 1 ) - { - self waittill( "damage", amount, attacker, direction_vec, point, type ); - if ( !isDefined( self ) ) - { - return; - } - if ( !isDefined( attacker ) || !isplayer( attacker ) ) - { - continue; - } - while ( type != "MOD_MELEE" ) - { - continue; - } - if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) - { - continue; - } - ch = randomint( 100 ); - if ( ch < 4 ) - { - playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); - } - if ( level.use_tazer_impact_fx ) - { - tags = []; - tags[ 0 ] = "J_Head"; - tags[ 1 ] = "J_Neck"; - playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) ); - } - } + if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro ) + return; + + while ( isdefined( self ) && isalive( self ) ) + { + self waittill( "damage", amount, attacker, direction_vec, point, type ); + + if ( !isdefined( self ) ) + return; + + if ( !isdefined( attacker ) || !isplayer( attacker ) ) + continue; + + if ( type != "MOD_MELEE" ) + continue; + + if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) + continue; + + ch = randomint( 100 ); + + if ( ch < 4 ) + playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" ); + + if ( level.use_tazer_impact_fx ) + { + tags = []; + tags[0] = "J_Head"; + tags[1] = "J_Neck"; + playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) ); + } + } } onplayerconnect() { - self thread onplayerspawned(); + self thread onplayerspawned(); } onplayerspawned() { - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "spawned_player" ); - self thread watchtazerknucklemelee(); - } + self endon( "disconnect" ); + + for (;;) + { + self waittill( "spawned_player" ); + + self thread watchtazerknucklemelee(); + } } watchtazerknucklemelee() { - self endon( "disconnect" ); - for ( ;; ) - { - self waittill( "weapon_melee", weapon ); - if ( weapon == "tazer_knuckles_zm" ) - { - self tazerknuckle_melee(); - } - } + self endon( "disconnect" ); + + for (;;) + { + self waittill( "weapon_melee", weapon ); + + if ( weapon == "tazer_knuckles_zm" ) + self tazerknuckle_melee(); + } } tazerknuckle_melee() { -} -has_tazer() -{ - if ( isDefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) - { - return 0; - } - if ( isDefined( self._sickle_zm_equipped ) && !self._sickle_zm_equipped && isDefined( self._bowie_zm_equipped ) || self._bowie_zm_equipped && isDefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped ) - { - return 1; - } - return 0; -} - -give_tazer() -{ - self._tazer_zm_equipped = 1; - self._bowie_zm_equipped = undefined; - self._sickle_zm_equipped = undefined; -} - -take_tazer() -{ - self._tazer_zm_equipped = undefined; } tazer_flourish_fx() { - self waittill( "weapon_change", newweapon ); - if ( newweapon == "zombie_tazer_flourish" ) - { - self endon( "weapon_change" ); - wait level.tazer_flourish_delay; - self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); - self setclientfieldtoplayer( "tazer_flourish", 1 ); - wait_network_frame(); - self setclientfieldtoplayer( "tazer_flourish", 0 ); - } + self waittill( "weapon_change", newweapon ); + + if ( newweapon == "zombie_tazer_flourish" ) + { + self endon( "weapon_change" ); + wait( level.tazer_flourish_delay ); + self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" ); + self setclientfieldtoplayer( "tazer_flourish", 1 ); + wait_network_frame(); + self setclientfieldtoplayer( "tazer_flourish", 0 ); + } } diff --git a/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc new file mode 100644 index 0000000..e3cc38b --- /dev/null +++ b/Zombie Maps/Die Rise/zm_highrise_patch/maps/mp/zombies/_zm_weapon_locker.gsc @@ -0,0 +1,327 @@ +// T6 GSC SOURCE +// Decompiled by https://github.com/xensik/gsc-tool +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_magicbox; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_stats; +#include maps\mp\zombies\_zm_unitrigger; +#include maps\mp\zombies\_zm_audio; + +main() +{ + if ( !isdefined( level.weapon_locker_map ) ) + level.weapon_locker_map = level.script; + + level.weapon_locker_online = sessionmodeisonlinegame(); + weapon_lockers = getstructarray( "weapons_locker", "targetname" ); + array_thread( weapon_lockers, ::triggerweaponslockerwatch ); +} + +wl_has_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self has_stored_weapondata( level.weapon_locker_map ); + else + return isdefined( self.stored_weapon_data ); +} + +wl_get_stored_weapondata() +{ + if ( level.weapon_locker_online ) + return self get_stored_weapondata( level.weapon_locker_map ); + else + return self.stored_weapon_data; +} + +wl_clear_stored_weapondata() +{ + if ( level.weapon_locker_online ) + self clear_stored_weapondata( level.weapon_locker_map ); + else + self.stored_weapon_data = undefined; +} + +wl_set_stored_weapondata( weapondata ) +{ + if ( level.weapon_locker_online ) + self set_stored_weapondata( weapondata, level.weapon_locker_map ); + else + self.stored_weapon_data = weapondata; +} + +triggerweaponslockerwatch() +{ + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = self.origin; + + if ( isdefined( self.script_angles ) ) + unitrigger_stub.angles = self.script_angles; + else + unitrigger_stub.angles = self.angles; + + unitrigger_stub.script_angles = unitrigger_stub.angles; + + if ( isdefined( self.script_length ) ) + unitrigger_stub.script_length = self.script_length; + else + unitrigger_stub.script_length = 16; + + if ( isdefined( self.script_width ) ) + unitrigger_stub.script_width = self.script_width; + else + unitrigger_stub.script_width = 32; + + if ( isdefined( self.script_height ) ) + unitrigger_stub.script_height = self.script_height; + else + unitrigger_stub.script_height = 64; + + unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2; + unitrigger_stub.targetname = "weapon_locker"; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.clientfieldname = "weapon_locker"; + maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; + maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); +} + +triggerweaponslockerisvalidweapon( weaponname ) +{ + weaponname = get_base_weapon_name( weaponname, 1 ); + + if ( !is_weapon_included( weaponname ) ) + return false; + + if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) + return false; + + return true; +} + +triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) +{ + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + else + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); + } + else + { + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + primaries = player getweaponslistprimaries(); + maxweapons = get_player_weapon_limit( player ); + weaponname = player get_nonalternate_weapon( weaponname ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname ) + { + if ( !triggerweaponslockerisvalidweapon( weaponname ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + return; + } + } + + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); + } +} + +triggerweaponslockerthinkupdateprompt( player ) +{ + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + return 1; +} + +triggerweaponslockerthink() +{ + self.parent_player thread triggerweaponslockerweaponchangethink( self ); + + while ( true ) + { + self waittill( "trigger", player ); + + retrievingweapon = player wl_has_stored_weapondata(); + + if ( !retrievingweapon ) + { + curweapon = player getcurrentweapon(); + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + continue; + + weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player wl_set_stored_weapondata( weapondata ); +/# + assert( curweapon == weapondata["name"], "weapon data does not match" ); +#/ + player takeweapon( curweapon ); + primaries = player getweaponslistprimaries(); + + if ( isdefined( primaries[0] ) ) + player switchtoweapon( primaries[0] ); + else + player maps\mp\zombies\_zm_weapons::give_fallback_weapon(); + + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + player playsoundtoplayer( "evt_fridge_locker_close", player ); + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); + } + else + { + curweapon = player getcurrentweapon(); + primaries = player getweaponslistprimaries(); + weapondata = player wl_get_stored_weapondata(); + + if ( isdefined( level.remap_weapon_locker_weapons ) ) + weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); + + weapontogive = weapondata["name"]; + + if ( !triggerweaponslockerisvalidweapon( weapontogive ) ) + { + player playlocalsound( level.zmb_laugh_alias ); + player wl_clear_stored_weapondata(); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 ); + weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 ); + + if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + maxweapons = get_player_weapon_limit( player ); + + if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon ) + { + curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon ); + + if ( !triggerweaponslockerisvalidweapon( curweapon ) ) + { + self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); + wait 3; + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + continue; + } + + curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player ); + player takeweapon( curweapondata["name"] ); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player wl_clear_stored_weapondata(); + player wl_set_stored_weapondata( curweapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + else + { + player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); + player wl_clear_stored_weapondata(); + player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata ); + player switchtoweapon( weapondata["name"] ); + self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); + } + + level notify( "weapon_locker_grab" ); + player playsoundtoplayer( "evt_fridge_locker_open", player ); + } + + wait 0.5; + } +} + +triggerweaponslockerweaponchangethink( trigger ) +{ + self endon( "disconnect" ); + self endon( "death" ); + trigger endon( "kill_trigger" ); + + while ( true ) + { + self waittill( "weapon_change", newweapon ); + + trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); + } +} + +add_weapon_locker_mapping( fromweapon, toweapon ) +{ + if ( !isdefined( level.remap_weapon_locker_weapons ) ) + level.remap_weapon_locker_weapons = []; + + level.remap_weapon_locker_weapons[fromweapon] = toweapon; +} + +remap_weapon( weapondata, maptable ) +{ + name = get_base_name( weapondata["name"] ); + att = get_attachment_name( weapondata["name"] ); + + if ( isdefined( maptable[name] ) ) + { + weapondata["name"] = maptable[name]; + name = weapondata["name"]; + + if ( is_weapon_upgraded( name ) ) + { + if ( isdefined( att ) && weapon_supports_attachments( name ) ) + { + base = get_base_weapon_name( name, 1 ); + + if ( !weapon_supports_this_attachment( base, att ) ) + att = random_attachment( base ); + + weapondata["name"] = weapondata["name"] + "+" + att; + } + else if ( weapon_supports_default_attachment( name ) ) + { + att = default_attachment( name ); + weapondata["name"] = weapondata["name"] + "+" + att; + } + } + } + else + return weapondata; + + name = weapondata["name"]; + dw_name = weapondualwieldweaponname( name ); + alt_name = weaponaltweaponname( name ); + + if ( name != "none" ) + { + weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) ); + weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) ); + } + + if ( dw_name != "none" ) + weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) ); + + if ( alt_name != "none" ) + { + weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) ); + weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) ); + } + + weapondata["dw_name"] = dw_name; + weapondata["alt_name"] = alt_name; + return weapondata; +}